From cd359855c82f40ff8e0931ce4d44ac02031f9a28 Mon Sep 17 00:00:00 2001 From: Otto Naderer Date: Tue, 19 Mar 2019 17:05:27 +0100 Subject: [PATCH] checkin 1.8.4 --- dll/win32/Irrlicht.dll | Bin 0 -> 2344448 bytes dll/win64/Irrlicht.dll | Bin 0 -> 2885120 bytes inc/CDynamicMeshBuffer.h | 116 + inc/CIndexBuffer.h | 226 ++ inc/CMeshBuffer.h | 301 +++ inc/CVertexBuffer.h | 210 ++ inc/EAttributes.h | 101 + inc/ECullingTypes.h | 41 + inc/EDebugSceneTypes.h | 50 + inc/EDeviceTypes.h | 60 + inc/EDriverFeatures.h | 133 ++ inc/EDriverTypes.h | 64 + inc/EGUIAlignment.h | 38 + inc/EGUIElementTypes.h | 140 ++ inc/EHardwareBufferFlags.h | 44 + inc/EMaterialFlags.h | 95 + inc/EMaterialTypes.h | 234 ++ inc/EMeshWriterEnums.h | 59 + inc/EMessageBoxFlags.h | 36 + inc/EPrimitiveTypes.h | 56 + inc/ESceneNodeAnimatorTypes.h | 58 + inc/ESceneNodeTypes.h | 106 + inc/EShaderTypes.h | 90 + inc/ETerrainElements.h | 36 + inc/IAnimatedMesh.h | 115 + inc/IAnimatedMeshMD2.h | 79 + inc/IAnimatedMeshMD3.h | 304 +++ inc/IAnimatedMeshSceneNode.h | 228 ++ inc/IAttributeExchangingObject.h | 71 + inc/IAttributes.h | 738 ++++++ inc/IBillboardSceneNode.h | 75 + inc/IBillboardTextSceneNode.h | 62 + inc/IBoneSceneNode.h | 108 + inc/ICameraSceneNode.h | 207 ++ inc/IColladaMeshWriter.h | 405 ++++ inc/ICursorControl.h | 192 ++ inc/IDummyTransformationSceneNode.h | 42 + inc/IDynamicMeshBuffer.h | 211 ++ inc/IEventReceiver.h | 490 ++++ inc/IFileArchive.h | 132 ++ inc/IFileList.h | 94 + inc/IFileSystem.h | 385 ++++ inc/IGPUProgrammingServices.h | 474 ++++ inc/IGUIButton.h | 151 ++ inc/IGUICheckBox.h | 38 + inc/IGUIColorSelectDialog.h | 30 + inc/IGUIComboBox.h | 74 + inc/IGUIContextMenu.h | 162 ++ inc/IGUIEditBox.h | 135 ++ inc/IGUIElement.h | 1037 +++++++++ inc/IGUIElementFactory.h | 66 + inc/IGUIEnvironment.h | 620 +++++ inc/IGUIFileOpenDialog.h | 44 + inc/IGUIFont.h | 104 + inc/IGUIFontBitmap.h | 46 + inc/IGUIImage.h | 58 + inc/IGUIImageList.h | 45 + inc/IGUIInOutFader.h | 67 + inc/IGUIListBox.h | 138 ++ inc/IGUIMeshViewer.h | 53 + inc/IGUIScrollBar.h | 65 + inc/IGUISkin.h | 574 +++++ inc/IGUISpinBox.h | 69 + inc/IGUISpriteBank.h | 95 + inc/IGUIStaticText.h | 135 ++ inc/IGUITabControl.h | 136 ++ inc/IGUITable.h | 205 ++ inc/IGUIToolbar.h | 40 + inc/IGUITreeView.h | 278 +++ inc/IGUIWindow.h | 74 + inc/IGeometryCreator.h | 177 ++ inc/IImage.h | 155 ++ inc/IImageLoader.h | 53 + inc/IImageWriter.h | 45 + inc/IIndexBuffer.h | 65 + inc/ILightManager.h | 62 + inc/ILightSceneNode.h | 86 + inc/ILogger.h | 102 + inc/IMaterialRenderer.h | 101 + inc/IMaterialRendererServices.h | 115 + inc/IMesh.h | 75 + inc/IMeshBuffer.h | 154 ++ inc/IMeshCache.h | 177 ++ inc/IMeshLoader.h | 53 + inc/IMeshManipulator.h | 393 ++++ inc/IMeshSceneNode.h | 79 + inc/IMeshWriter.h | 58 + inc/IMetaTriangleSelector.h | 43 + inc/IOSOperator.h | 50 + inc/IParticleAffector.h | 72 + inc/IParticleAnimatedMeshSceneNodeEmitter.h | 54 + inc/IParticleAttractionAffector.h | 59 + inc/IParticleBoxEmitter.h | 36 + inc/IParticleCylinderEmitter.h | 59 + inc/IParticleEmitter.h | 129 ++ inc/IParticleFadeOutAffector.h | 41 + inc/IParticleGravityAffector.h | 42 + inc/IParticleMeshEmitter.h | 54 + inc/IParticleRingEmitter.h | 47 + inc/IParticleRotationAffector.h | 41 + inc/IParticleSphereEmitter.h | 41 + inc/IParticleSystemSceneNode.h | 512 +++++ inc/IQ3LevelMesh.h | 46 + inc/IQ3Shader.h | 885 ++++++++ inc/IRandomizer.h | 33 + inc/IReadFile.h | 58 + inc/IReferenceCounted.h | 170 ++ inc/ISceneCollisionManager.h | 205 ++ inc/ISceneLoader.h | 62 + inc/ISceneManager.h | 1663 ++++++++++++++ inc/ISceneNode.h | 858 +++++++ inc/ISceneNodeAnimator.h | 78 + inc/ISceneNodeAnimatorCameraFPS.h | 69 + inc/ISceneNodeAnimatorCameraMaya.h | 58 + inc/ISceneNodeAnimatorCollisionResponse.h | 171 ++ inc/ISceneNodeAnimatorFactory.h | 69 + inc/ISceneNodeFactory.h | 68 + inc/ISceneUserDataSerializer.h | 51 + inc/IShaderConstantSetCallBack.h | 85 + inc/IShadowVolumeSceneNode.h | 38 + inc/ISkinnedMesh.h | 219 ++ inc/ITerrainSceneNode.h | 182 ++ inc/ITextSceneNode.h | 37 + inc/ITexture.h | 219 ++ inc/ITimer.h | 103 + inc/ITriangleSelector.h | 131 ++ inc/IVertexBuffer.h | 52 + inc/IVideoDriver.h | 1471 ++++++++++++ inc/IVideoModeList.h | 62 + inc/IVolumeLightSceneNode.h | 60 + inc/IWriteFile.h | 50 + inc/IXMLReader.h | 31 + inc/IXMLWriter.h | 77 + inc/IrrCompileConfig.h | 832 +++++++ inc/IrrlichtDevice.h | 322 +++ inc/Keycodes.h | 173 ++ inc/S3DVertex.h | 274 +++ inc/SAnimatedMesh.h | 189 ++ inc/SColor.h | 697 ++++++ inc/SExposedVideoData.h | 90 + inc/SIrrCreationParameters.h | 296 +++ inc/SKeyMap.h | 41 + inc/SLight.h | 98 + inc/SMaterial.h | 685 ++++++ inc/SMaterialLayer.h | 228 ++ inc/SMesh.h | 140 ++ inc/SMeshBuffer.h | 7 + inc/SMeshBufferLightMap.h | 7 + inc/SMeshBufferTangents.h | 7 + inc/SParticle.h | 56 + inc/SSharedMeshBuffer.h | 242 ++ inc/SSkinMeshBuffer.h | 404 ++++ inc/SVertexIndex.h | 79 + inc/SVertexManipulator.h | 292 +++ inc/SViewFrustum.h | 370 +++ inc/SceneParameters.h | 182 ++ inc/aabbox3d.h | 332 +++ inc/coreutil.h | 188 ++ inc/dimension2d.h | 224 ++ inc/driverChoice.h | 45 + inc/fast_atof.h | 364 +++ inc/heapsort.h | 70 + inc/irrAllocator.h | 124 + inc/irrArray.h | 627 ++++++ inc/irrList.h | 416 ++++ inc/irrMap.h | 1127 ++++++++++ inc/irrMath.h | 732 ++++++ inc/irrString.h | 1368 +++++++++++ inc/irrTypes.h | 250 +++ inc/irrXML.h | 575 +++++ inc/irrlicht.h | 394 ++++ inc/irrpack.h | 39 + inc/irrunpack.h | 20 + inc/line2d.h | 274 +++ inc/line3d.h | 144 ++ inc/matrix4.h | 2244 +++++++++++++++++++ inc/path.h | 88 + inc/plane3d.h | 245 ++ inc/position2d.h | 32 + inc/quaternion.h | 696 ++++++ inc/rect.h | 279 +++ inc/triangle3d.h | 279 +++ inc/vector2d.h | 342 +++ inc/vector3d.h | 458 ++++ lib/Irrlicht.lib | Bin 0 -> 62134 bytes 185 files changed, 39523 insertions(+) create mode 100644 dll/win32/Irrlicht.dll create mode 100644 dll/win64/Irrlicht.dll create mode 100644 inc/CDynamicMeshBuffer.h create mode 100644 inc/CIndexBuffer.h create mode 100644 inc/CMeshBuffer.h create mode 100644 inc/CVertexBuffer.h create mode 100644 inc/EAttributes.h create mode 100644 inc/ECullingTypes.h create mode 100644 inc/EDebugSceneTypes.h create mode 100644 inc/EDeviceTypes.h create mode 100644 inc/EDriverFeatures.h create mode 100644 inc/EDriverTypes.h create mode 100644 inc/EGUIAlignment.h create mode 100644 inc/EGUIElementTypes.h create mode 100644 inc/EHardwareBufferFlags.h create mode 100644 inc/EMaterialFlags.h create mode 100644 inc/EMaterialTypes.h create mode 100644 inc/EMeshWriterEnums.h create mode 100644 inc/EMessageBoxFlags.h create mode 100644 inc/EPrimitiveTypes.h create mode 100644 inc/ESceneNodeAnimatorTypes.h create mode 100644 inc/ESceneNodeTypes.h create mode 100644 inc/EShaderTypes.h create mode 100644 inc/ETerrainElements.h create mode 100644 inc/IAnimatedMesh.h create mode 100644 inc/IAnimatedMeshMD2.h create mode 100644 inc/IAnimatedMeshMD3.h create mode 100644 inc/IAnimatedMeshSceneNode.h create mode 100644 inc/IAttributeExchangingObject.h create mode 100644 inc/IAttributes.h create mode 100644 inc/IBillboardSceneNode.h create mode 100644 inc/IBillboardTextSceneNode.h create mode 100644 inc/IBoneSceneNode.h create mode 100644 inc/ICameraSceneNode.h create mode 100644 inc/IColladaMeshWriter.h create mode 100644 inc/ICursorControl.h create mode 100644 inc/IDummyTransformationSceneNode.h create mode 100644 inc/IDynamicMeshBuffer.h create mode 100644 inc/IEventReceiver.h create mode 100644 inc/IFileArchive.h create mode 100644 inc/IFileList.h create mode 100644 inc/IFileSystem.h create mode 100644 inc/IGPUProgrammingServices.h create mode 100644 inc/IGUIButton.h create mode 100644 inc/IGUICheckBox.h create mode 100644 inc/IGUIColorSelectDialog.h create mode 100644 inc/IGUIComboBox.h create mode 100644 inc/IGUIContextMenu.h create mode 100644 inc/IGUIEditBox.h create mode 100644 inc/IGUIElement.h create mode 100644 inc/IGUIElementFactory.h create mode 100644 inc/IGUIEnvironment.h create mode 100644 inc/IGUIFileOpenDialog.h create mode 100644 inc/IGUIFont.h create mode 100644 inc/IGUIFontBitmap.h create mode 100644 inc/IGUIImage.h create mode 100644 inc/IGUIImageList.h create mode 100644 inc/IGUIInOutFader.h create mode 100644 inc/IGUIListBox.h create mode 100644 inc/IGUIMeshViewer.h create mode 100644 inc/IGUIScrollBar.h create mode 100644 inc/IGUISkin.h create mode 100644 inc/IGUISpinBox.h create mode 100644 inc/IGUISpriteBank.h create mode 100644 inc/IGUIStaticText.h create mode 100644 inc/IGUITabControl.h create mode 100644 inc/IGUITable.h create mode 100644 inc/IGUIToolbar.h create mode 100644 inc/IGUITreeView.h create mode 100644 inc/IGUIWindow.h create mode 100644 inc/IGeometryCreator.h create mode 100644 inc/IImage.h create mode 100644 inc/IImageLoader.h create mode 100644 inc/IImageWriter.h create mode 100644 inc/IIndexBuffer.h create mode 100644 inc/ILightManager.h create mode 100644 inc/ILightSceneNode.h create mode 100644 inc/ILogger.h create mode 100644 inc/IMaterialRenderer.h create mode 100644 inc/IMaterialRendererServices.h create mode 100644 inc/IMesh.h create mode 100644 inc/IMeshBuffer.h create mode 100644 inc/IMeshCache.h create mode 100644 inc/IMeshLoader.h create mode 100644 inc/IMeshManipulator.h create mode 100644 inc/IMeshSceneNode.h create mode 100644 inc/IMeshWriter.h create mode 100644 inc/IMetaTriangleSelector.h create mode 100644 inc/IOSOperator.h create mode 100644 inc/IParticleAffector.h create mode 100644 inc/IParticleAnimatedMeshSceneNodeEmitter.h create mode 100644 inc/IParticleAttractionAffector.h create mode 100644 inc/IParticleBoxEmitter.h create mode 100644 inc/IParticleCylinderEmitter.h create mode 100644 inc/IParticleEmitter.h create mode 100644 inc/IParticleFadeOutAffector.h create mode 100644 inc/IParticleGravityAffector.h create mode 100644 inc/IParticleMeshEmitter.h create mode 100644 inc/IParticleRingEmitter.h create mode 100644 inc/IParticleRotationAffector.h create mode 100644 inc/IParticleSphereEmitter.h create mode 100644 inc/IParticleSystemSceneNode.h create mode 100644 inc/IQ3LevelMesh.h create mode 100644 inc/IQ3Shader.h create mode 100644 inc/IRandomizer.h create mode 100644 inc/IReadFile.h create mode 100644 inc/IReferenceCounted.h create mode 100644 inc/ISceneCollisionManager.h create mode 100644 inc/ISceneLoader.h create mode 100644 inc/ISceneManager.h create mode 100644 inc/ISceneNode.h create mode 100644 inc/ISceneNodeAnimator.h create mode 100644 inc/ISceneNodeAnimatorCameraFPS.h create mode 100644 inc/ISceneNodeAnimatorCameraMaya.h create mode 100644 inc/ISceneNodeAnimatorCollisionResponse.h create mode 100644 inc/ISceneNodeAnimatorFactory.h create mode 100644 inc/ISceneNodeFactory.h create mode 100644 inc/ISceneUserDataSerializer.h create mode 100644 inc/IShaderConstantSetCallBack.h create mode 100644 inc/IShadowVolumeSceneNode.h create mode 100644 inc/ISkinnedMesh.h create mode 100644 inc/ITerrainSceneNode.h create mode 100644 inc/ITextSceneNode.h create mode 100644 inc/ITexture.h create mode 100644 inc/ITimer.h create mode 100644 inc/ITriangleSelector.h create mode 100644 inc/IVertexBuffer.h create mode 100644 inc/IVideoDriver.h create mode 100644 inc/IVideoModeList.h create mode 100644 inc/IVolumeLightSceneNode.h create mode 100644 inc/IWriteFile.h create mode 100644 inc/IXMLReader.h create mode 100644 inc/IXMLWriter.h create mode 100644 inc/IrrCompileConfig.h create mode 100644 inc/IrrlichtDevice.h create mode 100644 inc/Keycodes.h create mode 100644 inc/S3DVertex.h create mode 100644 inc/SAnimatedMesh.h create mode 100644 inc/SColor.h create mode 100644 inc/SExposedVideoData.h create mode 100644 inc/SIrrCreationParameters.h create mode 100644 inc/SKeyMap.h create mode 100644 inc/SLight.h create mode 100644 inc/SMaterial.h create mode 100644 inc/SMaterialLayer.h create mode 100644 inc/SMesh.h create mode 100644 inc/SMeshBuffer.h create mode 100644 inc/SMeshBufferLightMap.h create mode 100644 inc/SMeshBufferTangents.h create mode 100644 inc/SParticle.h create mode 100644 inc/SSharedMeshBuffer.h create mode 100644 inc/SSkinMeshBuffer.h create mode 100644 inc/SVertexIndex.h create mode 100644 inc/SVertexManipulator.h create mode 100644 inc/SViewFrustum.h create mode 100644 inc/SceneParameters.h create mode 100644 inc/aabbox3d.h create mode 100644 inc/coreutil.h create mode 100644 inc/dimension2d.h create mode 100644 inc/driverChoice.h create mode 100644 inc/fast_atof.h create mode 100644 inc/heapsort.h create mode 100644 inc/irrAllocator.h create mode 100644 inc/irrArray.h create mode 100644 inc/irrList.h create mode 100644 inc/irrMap.h create mode 100644 inc/irrMath.h create mode 100644 inc/irrString.h create mode 100644 inc/irrTypes.h create mode 100644 inc/irrXML.h create mode 100644 inc/irrlicht.h create mode 100644 inc/irrpack.h create mode 100644 inc/irrunpack.h create mode 100644 inc/line2d.h create mode 100644 inc/line3d.h create mode 100644 inc/matrix4.h create mode 100644 inc/path.h create mode 100644 inc/plane3d.h create mode 100644 inc/position2d.h create mode 100644 inc/quaternion.h create mode 100644 inc/rect.h create mode 100644 inc/triangle3d.h create mode 100644 inc/vector2d.h create mode 100644 inc/vector3d.h create mode 100644 lib/Irrlicht.lib diff --git a/dll/win32/Irrlicht.dll b/dll/win32/Irrlicht.dll new file mode 100644 index 0000000000000000000000000000000000000000..693a011f3711a65d1f635ec1f99ab765aa97b1d2 GIT binary patch literal 2344448 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%0DGYL+0g&v2n2dsJWw-t)3C#~YF;Ih*j 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

vHbPS7^(=D*%SmZOz~*M8iD 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 w!Lro7%ysXDR^ z`{T+kGjqS6QjAO~A?i>vvEd_6@J8y{n(-Ak_oxzM%dS1-cLdK3_(;KNp(LuZ*w!Ks zNuZjBIIT)Xb^|S`l@8Q(^qw>k5)MMnV%q1se z)6z4WmXqR$eqEUC5k7}e%Qm`)K>HjhsiC*08RP?ed2RnXUSG`@ME}o=cyi_ABbiuz zCbp3j32#@!BV5Z^pDEo4H4{i#5gBXN!9tD2Zm_+QclM*b3HBXVs3Oh+W!&R^)Vwt>`Kz^(yO;zPvrcKZmd^t9L9f=sb6kN!c zbx3|WSrsa&060=nIc+KYE}fOXQy*qvz_>#y7O1thzsdVwcw-2IWgBZ?t-unWCO--@ z4d=&jZAebH;wSzrCK_1rss5Q`M5q}@1kH9MA}BXU1jqpqk}5N<&G+Bhq|N_FvV*Y1Ne2{da%+w|~o^F!i;Qf1@Vh?|Dg0W@c)%c+GTwph8|- z9XBJtulIk0itbbedZe6~q@;HFY8?`V(` za32^cFU#?su>CN?9~WR~ZE>X1Vh+pasXN^ zZ8>1j*rU<$Tn4a~2$)l?Xh|+7Y+=LJLU=-t?-qieF_{A;`tPu^NC&MpA44g{qP>ld)`C?!Nc zb&Rjc6_4sM4=%Tjqukble-S^E8VMs1u+?WhYUj(WJCLN&3ACmRd4E2%xpYF$Q<~-! zd3}Epqq;3x&&&yYYm+~Ba~!r_=s(vQOxOm`+vhTU{&H*nbCo_1^JyxO36rcrWi`}J z6AXPAx-3uybx>V=OgHwRxBUFN$i+5+9R1o@%V#DTOUhd)|lv6H{St!%$lh!3! zHt@t;mt_fE3hqhS6ZQrBxfG+IpLp2yj#0npq-5$D4QDE_3b&O7rW1Ax%@`28NI}Z- z*n;y0%TzqoK^a}y_L!sFP!m6Wnu60On%OD!ji@&ngmPCuB&s-j-#9O5d*@80HXx3~ zP=MipToYrLvlJG%fFfX#9}BE3))68#wbFuXh?`UI0pLP4sIb7GTXtVk9fOs5+E|%E zUuAy4l)$XmYIpB0wlZ*;4da5mXD{|21{u`5!wH)V-4l(K|8x#eWa-gRQA%lJS%8Omf9E zI_6!*L$CagL1*A-(Fu}C^>rGD_|j0~Z5+_qO?;-lHuZ!?rnjJGUjIMrplT5cYOUf% zL~mDVg4tWGx2q*Ffw3YH<7>LVwU(X@u+#7=n}DNAju^4a_^7XYf%Q-buefOK2mJw? zD*|Uly7b=YYx;_G%e@okfDp-t&zgv61&O9bi5R=io``4#iO5$uHKq1UVzw~T+jyZZ zApECIvQ{d|n%0|a$7$7gkCwA_-|hYqR{byKj?)Z={p({T!-Z!1)4LRjO~n?(Cxqr2 zYD@jC@^c2d_xtCix9%1l|0tH;s->L&NAdL5K{;lZhL^L>PB@$G{_JvR=zZzfwz|z< z(6`khL~B`;ZOd7kIl7~E+v8j{{(v%t>Iqfoadyi6t=p9g=C5RhR<{2(RuaXm0wxvd zMMYvBF!e;%z!00&l|VaJe!b3CdUrC;uT+-7$U-^{^+=lSya)i=Li>dNF|Me;#J?_? zd%0MPkQb0=%32ueBk|@ESt*a#VOnL)bEuJ&X9hIo0b2FgGGy!RCv(nUvvd|AGqwul zo68m~$k;q7xan66gM`^EF1@vi(37ucjK};pU;4K(PuGU~E zPb~1C^|4!v5i~QOTPoX#Rk@cbgHSh9iIk&cFw3Ti=rQ%>OlfWXOF`W)yyiWiT?rAU zBk#XQ1k0?Ou)^P}y5L63w9(KtoE0V4z5@%k0yJJvsyGd?a_zIW2yv#=1S+2gAm{n_ z2n_M7nHa}2e^l((rXA#&*QvHd>**jJPnUj^yLZzq--PcFjeb+p#JDIM<+J8d5>(0d zeigR&E4+;{*qvB4bynZpuE@f!&amyqBxq18#oGBBltUF3(@b4%!vs?b+71O;gZufw zO7%49E6T_FD6L!{JHiiUg?Y_Kvw@gbdql4cz-XFH!}46Nb^X*6GrH-B`X#kGjZYVg zQB|+G{U_?Xis?R=&E?V6!ee!-*LNX7I9r$5J|mZYfsNK1FEbu;!;sAbJL%i-3NPfz zi?mIg%^nulpWU#>yWu%+;RUUBX$~{BjZ#$rtg{$NscLBgC01HVY3~ZJEAqNcwRZD8rp|Bp>bbQ zixobwhRpcn)SrDv@wC%K&NwTHt-%Ets&1k$qf_6Bgv!~Y3q@!4LU!Eq&7Ht2>i(EJ zeX_Ei>k@L?9>Oaha;g7V51({n7mTwfzU1jpp3*yV7_z$~mSMM&Yb{MZWnF}SfE7-q z*Y_jlvpUA|JDsOV|-0s`nv-PN3v3eBWgbulnDqzMW>y+a0WN=Lc-Z zIB}op^%CI$14*SGBjpy?U~KzdD%;M?w*uW_$Q?}J`w)@)lFwUy?K_hi1cUSXlJr;LxCv9MI`p@|nxB3J7 zi4W&jwz{OG(ZTET3XP=6x&ifa-p0@TDt}t4V0+H`$B|m=88i3Wboka&>6>2hcWGKM zg z{WYJ+M~j~pP3x{TmtuLuVm|f^k-a(d4y5NDB4U{1kJo(GddW`9vCWrho3rIOBcEe! zKH3>`yvSwu+HU9oTaxF2)Sd};LfC`Zdu~0%S+`@|vA);Vf*hAo9`tVtQhQ1ucHMq& zQ{uk?q|BOCyh0_AeHrX6F z8|f3Po&87kiBr;F(E@9JJTt4ft~uuQuYgSKH=ykhS@St=TPWY2!<`n*iJ?Q4L!*^W zk#>Ik=w&D#e(E@BZZ1oWPP}>Y?updf(ewT0_|Zu`u$BkxlHmn_mo)i7V){#^aaZ@l zb!#)FHx9inIuD}HNDT44vk5-&3==)O2h4s=i1S*3>crNVk%{F>AeE;5hT z{qUBr&A27LZYGwCOV^!f7}n+P!`T<(6h8^*Iu29S&_ZKiaX4aiHRurNNu|9AGU zv7T`Xt=PW;542=6^N#1%2HI%*eEF|)&3W?~ab3yfPp*4*T}P($YQTZLAf5)U4RDHh zOZ?ipH`gUImFtFnQgZp5+W6r>xSAHfH)j4NVQC0l{MHgph z;ld?#&C*b9j)!+>gPPRJZ`uB__IlLQHk!qvpF!B-#C`KVV!lxC`P zYm>RPRl(lfOevdV-vH&J?Br=u<&ZYa^jM9YD8lKY$my}F@Jl=G9I8OAWJYGIh?ceM zhCuMC%&hY4z>@+mt&)Mk$hFtGuF4J!M=nj3RjSCof@1=X^JnXiDJWBqOXEGaUBBX9 z%8svt?seF`G#M^R{j7NHH#57Y$4Ga>B*$Mb1n*4t^Pv1YtGix&q)kk(fnNKJxDGHwbD))Ev+48_&Tai5J&r2kKzUjn@ zw3}G6W8^iyu-Qe}^vph{H6QUB=2dbrAez_Z{xAoGFV*&h92fe}VRJgpmDI@pkA6}s zASQIq)+V0**=~&;WRf=VAyYziC*q`#s+whBWGklqSuRHu6>OrYIXDJ)gO5Rnv?I=d zXh=p#W-?oCVaGSMRZkkd;(8H|cq*$K$3^didzBM(RTdNNHmh_7$>!>+wCUM_Q;MQs zlNA}LftdAt;)J-lMAg#Bm2jb?D907Tv`sybHephBpel-!j9k^u1=JdI3980!{bdKH zMe(NN%0r!r8>j>Iyt4xhE)EbRSxMOsI|^nej~pestg%DKpTb>!-fT{vGNJm08(FyxC$`}v|VS!}^S5V;OI7f=sHuEXY1iXd{0;1YZz{xLoT_BijL zReNrYm6@&E$t*pfEFBW6jO@Uufl#KWoQtez()>x`*m!*)X5Y#%9=S?g9AfJpEM+Z1 zmE+dCf;WA76sIb3C7p}>blI5x;MT|`rq4T#DBnxz@W-pl-k=s7CxAJ_NRp zckrEzh>ygfkn>d$*@4Yb@-2~Tn{$E0U6Jcvb1B7rk!w4yuozn(z%AlD$U8gmki`+d z?}%JGBiC-{0{)ZcQi{RIwHH^OIK#LF^?BZ|8{2R37|FI)AYX!8-8Zlfgdy31gOT4M zb1B~8$Q9tq!ymydDjnmU9XM`rg!QO%0rgbmVtf%(;Ady&aKnh^Cs!#hK{eth_z>7~ z-oawF)fiJUTcxv*9uV4voL^xe1hz7ARXJC_mmf&lx3Z}YL*UlPuNGHWpsmwzi(u1v zX9s3l9Ko)STn&+HuDKMi#rZu2w?=*oaplR>j$2SWd1nWfSsamRxpM)(D{`$em*TCC z;&n%U>v83wZon-n_3+LP^jRE1-RxXI-4gk2GneAs75Uv8`Q3+0P>uN8`4HF#cn7bt z3letq_ly47fd?&>X!4MAk>ifYZ>PBwZ+GPPWaKx9E06tN+{$K{cXr@;izBG}oeQY1 zgf7?Ykc##g&m1ssDjknpqmk>BxfHKR zz#X%iOMY=&d8nnhfx0!poAKS^2x>*-s&p<&RAny3OGbXxkzWn2JWXnG3+go9lDD1d zJ{V?tKlQVrshsL@3i#SD%sev6)U`lAH9rqWKedX9^WtF3J!e~=qm%UNH>qUqd-;{t zS6w@17IER)`fq4@v@*u7%*xL*-DH*ZFH4tX{2lDv-gxAve;+L&^6LdnZjtr3**0Bt zJzBy2le&BIJ|bz0OFMBoJfe<5HrmvQuyOZ-f9HtB=;Kz;k20nq2rFf7yFN8ofqmD2 zK4B7{6`V-$>({df^#W`n;yH;oACh?Tr8%*_IBa6yJNWi{_6qiXopE@TqgZ~=pnV@; z*UIi_o{2dAzy-2^LU4KTot<_W4PrQYo(BI?sN&ZyaWL8j zou&n#<7b_VBZVElWcOX#6Z|BC9zI&@P5Jhki@YhrYc5cvA9{BWrG{ch-{(#Fmf{Z)AMfwt zohhBC2~%q5J^s+pq1fdz##8D~8)E!U{Zjh?a9Q3#vPI0EiN3t-gj4s_;0ato8&Lukmiim+ET9bo#gM@PGsvs zf{XsVtSGnZLB9Rr#n-z6yJzqWdw~7{Bx=v4Zz>I**u{qJqvG$&e`VWQnb;Ma@eWdb z(W>=dXWSI;{#^-`nqt_Uf@^X>Vgw2c6^3G#~r>wqS*5QLX7^yl*}DtQ44g(SYE-UKX))hEaO|eZ2uwL zCd6nQwGqRezLA6>G6qfzPUWbzb46XPz?=M{@fe4E4u^+#a30_wzv2{#F5dHCc!p>0 zKYWl@$bDE{N^bIt+E_iFrt5+HqBb@y{F3}4376_LPowrw`uCDVi7WIWp@2Rr({@sZ z6Ul!gAXJtDLIvUZb_T=_VI`rt2XJ+^bH0Qw6K@(9l> z*+A&VKixuJF#hGMknt}dKI7lEvyFfLON;%D(@36K6J+f+b5UKi?n}tq$ZZkqgogPU z(VbsJ_r5Z_3H`!z9MJGzSaRfl{mp6odYbq#IzP~E5^B4O+I9OUnlN?no5*b4{nfqu z)K<@!2u8SIJ2p$tBwF|H(fD;Pb0kZ2N*$h}YXgv3!=-b@gHC>(=e1oB+6c1{VwiBu zn=(wp?GBf!4OH2<22Jwtyhyv^sWnztNW#qhvO^VkVeC>Prn95u2gkE_eF>+X7 zp=fUmfwaNoH7myS1pr}a7bG==N+STiWeWh%e>eCsz~LxqsjGwTmoHX} zWsHw5ph9DKD0p&@hT9tkr=Bp9CyB!(36J1^5@IRHTBp=I2GrOr7JUGxo~z8wik7OH zDOd^e;1)#^u{}(pL;gNWZV;<2Ry*nb#zEo!Oy$MQh*F?%@&-ASEtmbn&{z$h3!NQW z%dEx#uq~c2qj6r_A+PO#*Tz`S+=89?=Ph}yJF3fv_Gm-p%uemEYrhuwEjITcpp_`h zLQJ)p8@k3>8(17%@|`nGLJFoBLe{inAXY8Z2^EE%cZ-#{;JAhJZgq^t>~E%Hw%nKE ztwATuWARIym_IR^8|2cuU4szY>%W<8Gz+HVZfADL47O6cxRn+yQD?m1^>cxF&KRq7 zM(A@bQ((=%yVzH&|iuLfb_5UY~JI1`u7#2|E_FI;XA{*W`4bP z7p!!;K2@mh#L6LOOEv$1)TtIw&swZq&D*~ijfH5Dw)P8|W_Dw^+Bx`VY7uKXTg(vT z0`w?a*V{^MWihRxNDDREA8pvJ&`fJ4zdYl3nQlzA{T3z)muRt>Z&s zy(!{ov8Va9qI4Z3051X~RZ)gzOwW7YLCQe%G4%b)PGS>vbtN$OX z{hJSJrP6hf{VPuA=Wae^pU2%N_|7@Z!o#8aVpp6gO>WyLc_<_(2&o(wGExw7?_cNB zgi~-gQ*rnhGM2gBCco`Cpwn{>>Z8kW2z?HjkFxiB9MNCB5yU`T8ISpa5`M}u??;I# zYul?gjs)-dTUHc)72|X8!xN?hqZL6oaS}e*AJA-x^-Brs7q@sh-yhfxQpg$_OKlPu zwD#v$Fc87UMzooX>lR<18YwjnjVox_=mfvAUQXEc2u8=8b@91fnjqy?R|Nm_mtaJ_ z9Mes?-vY-?uXSJQvz)m)#=5iQg+ev$Xhp-O?2(VsV)cH6H~X)vyVjh(UWuz^N*8V3 zDNfuc&720AuC2<>iS2)sdRbeUO{qGyV#%$o$fmSF(4vL&`B^(i$~OrT*_7B0HpZ~N z5@b`Vs^|oMh5YOU{#}2`qGL`hThe*ITXdXK9oNU8X11XsHWy!lZP&CS)*60k_B#_Q zq+{>1v=!iH%an@P^KwQBO2aQDNVo*q)NbMxrbv^P>UyLW(P1uoTxb7?Aq z>#D4sqIE8}NaMV!-Fpbl>}YHH2`v=Tj~?Qw*1aAQP@C9TY4cIN*5o3V%w1Q$G;L`3 zPdf|iN!=fXJgrj9CcCH7b#aTs@VxgaJQoKu`_8tWV5RBzi&wM#0+OdlU#Cmq z3G*}3IKPNGeIHX=|JnoRT1{O0$~i(a*S@mkNIi8*dCWf526rCWT@I;jS>G4^G5r1v zH&o%Ws~F@{wz4R9UEIII>H5WVMfc)b|tB7v5#3M2QpNV{E$9Iz`8f&e=nUF&@! zrLMTRyO~Zk5iGlz4qI21C+M*I2*_WZZK=bw%6Mf?w{le*n4QG4)OX%i&}~M`CiIv# zs~})Ak-V3cj&-FLhw>v2;r7oD_~|fSnO}SzNQUK;bYyqM#NSOgF^TG5=P%T<-&&lR z|4Oj(0qI31nh%fl|JGBv4mEd6piaK)usTvY;#)@S^O*b8L5irW%Hu<4V_g=Uf~YOg zbhs^Z8iu6#9&q&ne|?KB?P+ zqO}+tA1PWpDGk)7fcz#NM0l6scGfAAvyJgfcfF)_+rHueO#*9cGn#_6m=HTYqiLjjj(_dmbMT>m?L+zIhxs)CPtL6i#OnPz9w!A$LSH@$X25`a_L>7||*5zZ`Y(sqNIf>*CcegD>`&%+^03@8PqU zSeervnOJ#L6Vgy*!ys$DMc&ZLqv}9HTPwi|ZU?fy{(AcQS3%P;JSiw@lq`CU3xCzm$OK!K|<$=_1?={43z0rS3fpj z_`P%K+6uqx$9-pdHAxu@ho00zBLiJouR6tX!a?8{hHp4S_`cp2e2c=_3Hn3bpIdX< z_~kE3s27}9o)<90NWjGwI*vR$mToHbXJf&SgCyyua!4X$ezQ=EtiYgOwy8>SvrS3& zs@6*pYb;_d5z|f65GrMxrn?w3-K$=&bW_9Jbkke}VCg1|O18M5g*J9HwYyiRdoAO2 zRkmrldv&?jDwkljdv&|l`q(Z;vZf7r`zJkkW5siW*&Z#|c;VV}^@8g)RL_c?+NlA$ zD%-0SlN+GRv%S(ya07H{wpYpt`a>rz+bazPeKYgpmF?ZhQv)>C8^eL$q)~B&+E9Ju z&*8sCr<9%leJGlpQ1zH)Ddt*Rp~(RUL-L8h(w9*kzWoM*dQaO2kIN zdn`dkL4sB$D(P5R#=7a?{d{Fp;xheZ{QHD;sv-Q&niU6yWK+f|Ma9M0RBIHvFmkm= zuFlA{EOIT6TwRfCRpipd+~u*}TvfBOW^uymG1Y_Lx1WFhQ(3b!;rupRJWU<8L}|B0 zuDfvQBb&N6?y8P8(rl%npVjv5my8`7!md<8`tuvtGGe3?P5>mkynQ#0j# zVK_e}P2ub1NMz%te0fS}|Vpl`bTj0Y^#CMf1- zoZ$S#J;n@uGn6*BtDHx$?KTK8|CFr8JwvxPOVeL?YP?L}pMUQ;L+?9RX!B@h{^(-H zR)+0t^Qda(MDtz6OJwe5OJ@F-+$}wX^vu5tgDyfT+uS4CMOJ3|+}9R0<)t?sslIbe z2&?vcc(8Y*8@i=#jk`55ha5Y*SNgkDp(mOu&4Oro=GyYyI;mIoTw6IIQb5~rr7J?^8|InUT_S36I2%SS)uJSW~Z&3U5WQgpQ1c}}|RL(Y?Zm!hK=JI~3t zA;cAMHkONgTMc;+pKvXpJGneKvR=)i_Z>B;TRy0k5Ul?qhFiBr<)0?PtX^4kv{H>C zxS=ovyP2Pwkk72JRxsW;U9lA4sk+2hk;!la1d`RACPaW;3k)L{@M;!OVlf|$7o!P-j>AU3GU;g=fZ(ywGoc8+mKb`JbPCp4#A z&^1uaK{i`f;$*~r+2#A@a+Ynq_L0T2$U!QZ`z{AOwtIM5k-f)O7kiJjPVglJ?CSlg zEElmQ*;V&lo~tX(4)nh zt=leYN?xqz{AMTk)<8-V!4DlVN%*&m?4Y8FmGie1%+c}~N&rFz63gZw~bu4r)Qhh<=JMtc{Yr0?IpygCd3D3k-|gAz+vhf;_yq@ zxjFny_dyS{7uhi|;-a7gF$OAZMglW1NO%)OhI!i~SbHr|`xvZH8q#hyDC^@K^<3s{ zJgF*}6U$ul?tUI^hM;Q(G=DL8X{x>cb{ek%%|iVb)268F4;<$!J#bKd1Ec0X#53ch zGMB>ktHzLC?VE8Le``!l@!^;KTJPbP_>Z1{$ulhFbBmKM^2!o*9m|3lyC)Z2PX8;r zs@7ecY2SqwwwWx$?U#ww91OF40mK3e7Icl$Gk2+7wFZCL!6D4Om54Tb_%_?B!RN^# zGKg7PH1JA1aUZ`&`0eBO8oz(zR}^0MSe(E0F@O2vY2T-R>TbyY%wORZe1+qi><>wZ zC}w_x!t~r)UetYF>ekXKZ_{`A4!p-1zn)M_p$}+1(QG4MTX|-FIhK;t88>pMzGr^r zgs-K3JUQDOCk=zF8v>oh;mphl{v|`X5+bK=tq_>x+Lo`Kw62*>S^HEgA9p)gcE6Uk zVrb&E`KvB)-=t_o!e<0`0TFl|DjqjTK&SV{+wynNUn0<^!V!hhC#_}RLl+dj0i z_#4$sV;`T%BPiZAS^L+~;96Of{&O2QQ>VbYVBB2)V;eV@@k%|BA2(CxAR^x(s&OKx^WW~lTX=r`Mbg2ekqzh&RW5+ zX|qMhSd||%KO77wil&pp!3W1j89#Dz>|PCG6LcmK;Qe?kOjc{e zy_+qrZK)?z1q`X$?=uT(Jfi~~-W{{^`(WYuL-FXohUBFJ&p6S2v5DE++azC4)Mbxo zeD1lGErzVu_jLg4jMgoB%uEFnyiGR{Y$@ihj9C)O!Wf+zjd_o?BrnyPsz`j=yl1g4!0?OjZ+PDA_XM=c5M zrm&=AI6u~q{7{sHcG}+ejJK(t*(999NgP^X74-sR@EzXJ$)2cYS@gg5Tx~HK)$!S2 z&u(K%rZo%cytO1^M_RxbhC&c*M^{tedi=RDNgG=@Nv~lmoFUjZP?fOGHKr{uY12!L zXN(ORq-vL`3}z?o;eAU$5q5yhr}_e^SgteZC;jJ;?0!IcjL!uRR8pUqRPpok2F~x= zyrEX}hH9HPv_47iqaB{sa@S7%QC1GsHYaFvWzz(rg32}V>U)f{6n|A1f86|`qHz9D z5zQaczx~|7It?Q;#i}TnJJ>z}oL&SC_}Ok;hwT^OVRHxDFVJj)nPM4phcQqEa|aXC z%j`on^9NO25&2YwFimog-`E^Nu-Z+GZ!p98!gD!Y$xPfCnq(DZ z!hPR1G194nYBjd4kxm`Lok=|}pNnn&5Fx(WH{+1Le~$UXqw17`#6Q@?p_P&8Ol|EP zQ-;Nh3#SZS3*J3tn6_hb(T?J9nOEuN5sxp^F!g>y)R0b_&w88Y$V!p~5Q(KrK0avc z!^)zkUW+GQ;dg}JJNzy_7*AZr@Ba^T4M`~cUNx9;@K(d{V?Z`;TK5QSO1a3-inbf!SG|ZF^l+fS= z3bHXi1{@HCHge)53UQO|*bPc>ZIL*f`~Cgb-sho*ZIX26&i!0}th4ue?*DrI*ZMz~ zVA^K0516)%6B9Nk_j@Bj-k}5b0{n+~@r4l1@ja8*w9y4prjB~M)O+~EL1Haa`V$WO z2A94?Kc}X!l6R?XtXuY5UC+Rt%c6^ZPVG}H8Z$&9*|wx2zwh%pgn$&9TfXR8T%lEt;nZ)leDxgWWnD!L z3OL*)@lOQsnn~cF*~s>p`Y|w-b3joBRFa5$mRJ1r6OS{wr@4f3J+!D)oQOYc@fDmV z2+$aQ*Xg%gs$!J=DiJ3vPbIv7bRK|M`F%8(M#*`SoFa`OdU5hW!a=vE5+Us*MUd0# zvs|?#KTYiBiZ(Yi7F#3f6)8#hW){(ceu11g)#HDPEl3=NLdGJGA>37DXB?dX7+4!# zm8K+R5RRd`9k|M7Gb$Lf!7J8H3b&CjUPRMDg##bucQM*XQ)(Rt?=UvS2=e1yX zeopJftJTK2Ys8|uKCih5KK`7hBF{sB8)|!(@s4IiibF4V zFKTwGia6}s{wE)y%kp|xX7pR`BaHK|CKq!{DTCoWEJ?2-HGGWZuvA%x_h`SepYDyy z-lSD%IqJP1h40r^9o#NNnwMn|ZuBGmtZRgi!t2AmetnR!o|M%1N-z@gVNOL7*j~3u z-}L$gV``LRo+ckdZca;?tK@?n#3`|oUzFwf#RVm3NDG`_ccety(0}KnZy+vKU5{H` z)M3*vYFD$^MMZ|{n3-t{1&8AT0E_C>>{CA)uGN9>Lvs% zZ<9YTVn4r`FrSRH?-w$PTs;;sXa81!+1YL0@~33b1+A7r9c%9Q3H{9`tLYF9LL=?Z z-i)ShWa#-YqxybG0vU8uvori%n1NN&J=8Tl!_F`R+e!D3Sm)Hh*M|D-6}atF8$LnY zE=g?+F1m8%P>+RHq9{n{3U^nrtx0q2PaM6fRmynT{)AfQQ-1Q#vWKes5M2chveuZE zk5yl3T4rIx9TKqCSt?B_wx(E!PA|4jw-7yAY&~ir(Fa2kKUoN%ivyrF4-`r_2tbPs zY?&F6N^cZfZ={BWe~mO476#5*#9B`$ix6kOp1XRz32|lK&1XIQYn-~Ci|DkJL|qJz ztFph;@ztA%JortN^6WYZdCY`=wwF|Wer|c>>e#x-?OzSU6@=GEZvV$Hj04hGZ{+r1 zbYq)v$TYVka{GUA>9NfUd(fxhwPEg} zWW!wJ0(p0dYr-hL^kIHV z+jIIt4RdfmGsb4V!`KDO$Ba;4nEKi{AJ~Ex$N1te=220^ZeW!H-&y1seW$MT|MpVk zGF!%>H5G|}Bx2)RUQYE*`okp2N6#473g#bdbLnHGEAciGQ+;DfpOkAAZq#!LH<#R+;yfSbeYAvV|6O3nEBcH(2W}F8Nc*5qin&? zAulNL-YQnUNf1JfkA;rBN9P0Ig4J2f>eQpnK<-j2Ojz)!c5|o0nw2kj9W%BbYPA!n z?p%|)u1f2^vjUk3tjLFG6AG_lacLj*%Uj_$;CD`e{+96 z{8??op3QX})I2!ivXw(v6mcpo>5bhnvbEkRvk;ErPxS5hJLv)7RQ^GH7X=kK^{$4? zaXnLWW)vd<`B%jXF*>L3c@CsSu3D+wh6-k;Pdi=Z){@x)i*!IK0nBr%+(t9{sHrcy zZk$kivX#;NkL-qip7dT=aM_+Kek;1|bs7I|SlGb{xfF{1Uh?-0LTBGn+vdMeC&IiW zvD3WiIbQx>P(1!Y6}3LD>dMtJOKekT=FB&5n@!sX@$u7GlqhkSV$><_CJJz>Rg$Ij zW%#Ka{1m_GtYaqWxTQJwAKj}Rm-%{lL8uF5W-vozO^IG&oI%|s(^#+9Uk5#<;S%s4^GAfc9oc%%8wH%8<7#PTczSs1@*!dg2ecFVL_ z;Fb27Ewr3EIGj=m9cERSz#2Syj97j^s>B~lV`O@G%ebn_!koS^=LEjx@L(n6`6Do4 zUA?+;`Q#GEu-f^o5GMM7*30V&Dau)5$B%ejG8Vb(`-w}1OSVIEZ-mtRaBC#%)B?3w+Z(Isd9t>1In9^&*$=Z!Dnay`fT09x*)oDSns{V zAVZL76`w65MT&8ohfDAg4z4dnq)#`i6-y>IN7)xDtz~4aC^=C;xP+nG`EG5xw6}jV zL(?k`b+sJNeWxrKwu4{J>D$$-1`ef+p*ZC>KjW8SuMBS4*U7$Z_JcXsJ2#%4%~zba z*P+D}w_`83e&IJ=e|!Bp$bmaH6b_6;^Pg(-f8)Qhi#47dc&cWAyRpCXF)xO9I4L~Z zMc&Nc41RSgyE$04F&b}p5nWw#mY(MC9o)8@9-4E+ z!v=m)alzSm|1OQCL!B7W*NsQXP+OKk;W>$?lvtigEF74e)7Pb9 zMUcb~A--~Hvgr5bMD7&DFr$ouUP-Gs@NOCotz{nP-R26fwVbP$BFv9YWaDN^E4$seoSRg zhLW3o!hsI*fLRhEM1ZFX>pZFYcQ>NbEnMc;AxGYc==%wrU8;3}^c6wI3=V*Ja*y(Z%hDqFV~QXHR^YD$siVjp?}| zqrB##6Xi>uu=!;q z=sG$RZ7JzpNoTun5~6I$i;-QwMMQ=kL^oR*27Wpxvg=jlys1!1?V66VJ!8tb7v`b8 zZ~{rc9n%}9fL|Nf_XaZtP4!xwaDsa{y|cx>y)Lo70L+7Z9tT^S2=j2u3T49-!_sBT zSueR@n|Mup=&fGgBqxn<(s(y$!{z<61rE{k}1FPq6+hC zSKJ7AHu;V<#ka5;;HA2%nz?Rur_>f9(OgU&mlZ5m7tvo!o{jAM0W*EzkBgvvwN>Wq z`{8~s5_sWAM<*K-!bmkjBKO5m)78)K8$+{u#BpYJgC>`hx4D84h}sm5A}IeV$4|M)bXkY!zhL) zO`yte(7x(0xTS!6b&ZVph`Jt1zEH$g)b()^s<27( z_KHLG){iS;JSIt5YfLWQ#EDcb{26B}`+BIDzw&e0+%4Id!%NCCM+P4ek;Q8qwTLX9 z>qLp^8Cc1O%>T`Y zbyfVm_slSWY7S?&4C8nbITOba*w8nQk|sFQOyzI@)m;qrlbqG_cs2c)E3Z4PNEg85X5wkhhG=9WlK6WqSsgLe)xm;g=MUFSd1l>^i+cGAJtkO#(YCRpyu~ld z888ahg(H?-diq>(rKb&dx-_5LEGa;GycyN(@fHxlcX=%Rw(39?uZJ8U_|vwlY$Wy zoa-cM9VcpCpef7}yr30aY_q7Fb!;OFqHrU+R-n9@5&h@kUuZW!vVYC(FTd=2A|wrKRsz^)vQvP2%?7y;=jF4u!G+$kL?mc-{ z4F1cmTKt6;a{AN%o3G@$_^)~lH&?9n~wVv|1&#g zfH#Yd8?n<{aJtK!6J2z0$jgd8@pi_~)Rv8=;~=QxKKfx+O%YSWo$|90O4ec~JDj)T zTF#B`G+A65d_%D%VrMTgwb#f_Uk)6t8tGb>AamN8Br4!D7+cmcclb5U1v5Wv{_`_W zit`jVA%J81ql0uwoB!zs=Q!|DF@$lt`QYiV)QGEc@XRZb;eBV0TzcqQ|C26{1Yw)S ztT^5KCyD0Dn}?HiV+8XOAFfH(N%WhSth?Vm9&nF`V3eeib;uL&4N?blSr6zNJw|wZ zC|QRrSPvB3^pNrmwT!yQ%X-M2?dRgAVz7GEQ{hz)($jd#_*Z2xQ&1YnRwxiExkAoi zG3c5f_eyD*$Ca91nKetJ}|1T7akK=@}fgJ{4pwu?Xtf7i71UbB3#E_XkDFmMysn2BYo+18fH^0y1mB zu13X*wHIyISMSz{5#X!*cJtXn0J7M~)i#P2VQ-PE|3YJF5%xw28&!SUib*D{NR6-n zRHUbXA~o7-h9dt$0s9~=`-=dE_A_cq%b7BlMX>;=ndEBM8$hLDus7AL&!%h6g&_be z7lr_^0EYH6>QdJMj6P>6dWPQ?fz#D+ri@fK#qmUPgU{g$wOe@u7PF+d{S1U#am$%% zejCm#LT})m&5;L9vw*3ZW@MXs46NyR!I={mCkv#MhLl@~0PCW~jc2#K6Ao;xo8Qw5 zHJmAszRww?a^QrQw*IzTHE^EK&h(LikwZ+~A}dmq^Q9%DTiyxJ`YcZLW-3UjLMv5h zrK}b8k}%)kBOKki@ho%4BI{VNOAbYL-ayRiRdi4|k8Gl7Of*V#-`#FFx`J8IWwT&P z7v4R=*XTa)lzW=#LjPl?T8{s)0VSW?!a@A@j4pzZvf(T9kAhyPgkX7*JMQN9TD;vW z#J|K{l7OWim0Zj}ON*V%)bv5p#yz1)sk0kJoeyc*@{^0L(AGxp;2k5M${!e+^WtRc zQPo@PD$PHLI9QoxqpUgIhMYnPZxO?-3l78$DA_su`T$DL~yM*jR7_*&)D zH1Jt*@a#(b*FLG!0=qhBf(=>+QUB9hgE$r$aXLHr&xQFY7{+ym`B=onnfCr)hxrUm zy11(?A3Pbj{OGzvs>5h`jxj>XmO}-c$nOHpS~>rWt`!^gF#cNu^?J1Dr6#|&qL5#> ztw4&~PH`{+nO{}&J^sEfZF@B2U!k_+)T62^nFD-7+2DTjSzubZMYfzr-8WZqsZgiX z1CR6fagHcmKPO>=CwFlIFNkX8O?1r4AH&*tVuZ0H>Dx$HpE%~;CGWIqyFbr1PwJ}A zOVJVqd^0O8hLLQYTZ3U~&9}-b{I$26VJU_ObXW}^8+k2K#UCN@VWm)zTVNpt;Gjka z4uFs<@ZR<5)VDBExAIv3S$R3n+VMTU>zP~SW-vuU2Mn~Lcj(xGU?;(0WSWw{83xEV z{^zuF%6gT~Vi~!~z<9V$K){^;!hd`QyxToaYLYOVm~x;htYg28lEOWo%e_$mZ3O62=_G-_4=w79Ug?p&K3HSTgQlFeC_S|nNllFyZ z)5}>Yd($bYjbm2JA;q*+&FoK0>lOKzc>(+}3MG}e#nNZdDsoC@(!;aQh28}fffib{ zM_wN zRepJl#^G_p|CAX(chI@4dwvXTOPPIVsX0aa{ShOyI)tU)AZ`o z86+1AGjJ1j^yX13NfV)UXy63N?vc5|du< zpXtN{5*j%4Pk6Cvj!-n5oIJHZYJQYC=Pp>kOLGR__RBWM8w)&)En5XzMGV< z$j6zfe#Ii3m<00XHG1I?-P7iLKdf)NrTCVDl=%)rw*1B26hK|A(Ess2032@PChew~8JywO38ZB~NWw|aQRR+l{;z9u`& zLWrs_%=%Aiu7z@qAqjqg^b6@xT+93GDom#}s?WR9%j{!gx8C9GU_8^G)fZ7gG-F#8 z`+bUOMDaH?Wya5QGd_J?O0IgGJ1><4{`VHIDu@i4mO%#|=!!bMYZ3+DVkYFZ#kZhV zP_TGaVVo@Wt2mFu=W#K@z|RUIJL6>7tAk@=MRY+Df@|*t1FyHq#Imzo{`r`wwc13< z9X#^5qZR6F%cM6i|MmQ2?91As`%HNki&y^q+ zn)<2ofqmt=6!1aOWoSlhIl1I(Ti$^UchNuTTlxDecfn%iu3z%C&HsW4^OBfuh{X3= z%-YDvWv><1NBTZjxkqyMxpu#IHvdstPxvpi(-Eda9R<2Vb$?_ipDBi4Hh{-$I=C+t zC>keqW_yRXZ`)5#k>j?aCocldC0~!!Cr{+lRly~x+z;`GpfRrl1=Av~2p-x+E^q&W zr!dsN^%n1^w9i)`|7_sZf_<;fZBpNr2Cc0P`YzEG%|FsRUmNrsbyq&!(p5;5y1YPL zs+h7lxM_8nR4#wuhXn)2%cY6-xAy4`Zzog1s2CX(b9H}Y$=5a>SF{xV2X)RMsnI^$ ze>2ycN`cKZVYuEDb=-MNUWg1mLN3UloO-ae`tXt$Hf;6wEx>(i!L1$MkwnQ?ZSs6) z;6%Z`6LXgh^O@_$2aXr08FMRvuwibsH_t-l7OD(Fr4}j=LUwqWYnO}uBcFH&%6Ef6 zKqp$+Ljtzo5MST;BSy))oCot0}@3XYPe^>4JBFTOwA#0ghL=UJ>NLvyb@** zuFa3qj%#OjzKDBT@5h1rMR})nw`G7dL$8ZC#A_58l;`I+g5zTa$$5Lf9Jr{fE*RU( zD@OV9X;)pa<|{6g@oD$o;AV&{jU@aNZtBeF@oeDF z6m>+WVMu;;*k`l@#c_UFONBF~9!XQpN;~YWR-AbOyj$x<{j-i$D_vZ9@vAP_6m*K~ zqVb@^)J26XAg%{V*u5O#)wl(G2`d3pi)@?owu5o?FtE>X18~A`VoA&R01n-U@MotHA9L9F?42N(feS0xhAG z&akDyGkvDDnRE5y%$&Of6DOE*`F_KD!J{J3aJfrV#dVx(ISA`G#1WPgy;J?oTAzt+ znq8R)*3-6qdx^T~_=}Ixk8VB2x2aN*?^SxKhR0g8Qp$F-Mh$>=G6gc1l`rr3DWOJEi?x zw`+D0%Ah3Y82hBwp(}8o7HGP_a1c^~9#%A-v=g3)uBq;^1)y_}ZEthb-*zZ+4y+eG zb91~f?y2kJo?#_V{h08CSCZy6!`7+!%y4hxq`0?Z?hW6Ve)>&IOe@y^+h3Quc13)k zhYx#=mGOafyd($K3l9Dz2YSKadFxl(%o%6D=}_l87pid=_1A03l1$p!)YVf> z#AQ}vGjH4a`sofU zZgJpsafDhhr)WGD@AC(a&xs6vM`lQFizs-1eq&*q@>gc$2N+J}c?COM77u-GEVwwP zv1&1b4c1)n;1Flx(I9W0_|Q{tZ!)JG#M;eG%g4@LjRsU-sV&&|{el^5YlIJX<4Arr zCOUnHmRzkbGc?|4;$e-7sJ%NMQrF!s)=zx-seyg-%mDW2;?{!O-g2#cJ(T`2C;=JE z@}rP(@z%mbb3x)^jY@pE<%(FYmu?PoDND(SEPtiu+Xu@o`p09DN*tAZ@(*C4e3j?5 zf_J4jrskd#b#-3tGRw%vjzvE9QsiSedt3Q^{!o6EQt(PRHQl2Wnqy`x#cPMlNx%SR z< z*?9>#YViUx()p5E9-$Vn2*g?I*$wOiBg}??{$s94k+TbbhcMN<4zURPPDHMT!K*SG zE+;)OGJ?Us$lcBm91(T3PM6FlI4+tW0v%h^cdl}b3+kpIb0>415B$2v$w|~YS;X<= zFvxUTSJB09yE%*Nm6|BZ`fEtN2Dd(dW5NlT+M0lJzfw$Teyyx|si6#$o<#mo1IyL@ zS}jHF$R}pdzz}<%uTVYW2x(vYgaFy1^^qWY)S{)p>%JO91Ano7d4Hr53B<}+VWd*l z0J=nV<;|?P?lE4z?jTD#7e?LEL>F7Vd)(T#GDhZZK7g!+1$%%*{%BeyEs+KzetT^k z&F#!S|IgxFY~?Joq-Fl6WQ%t2si@uD`fdu?7gSqVjjA~D7P45SFlm7RnGRn&oc4m^ z{NETuHhr6GwhGHf{O3PDtpn3Fxw>)35p>KLE<=LX@f_85fkNiZ8ZOwo(O&wxg!XDW z+#LC5^WYcVK5A1WKvy`Qgutk!U&i^PqgI074)efC)P5cs^?#xZ5Aj5apITRHEM#P1 zoEJ8C6Y?FhaAX#HQO$%thUJq$O@L9PE`oZ+wQdCxgD5h*V+` zu=0v7%gUUt31%rlKfuov#fXMBPw+(OS=F=0#;ytmopKO#W7Z;y#2)TyPPh) zG&1-&J2&SOJJaO9MqUG2UvkF;Vl+KhnY-s`jOn_{T>Y#BMo>f>=?39S(=o_}PO#|v z%@dTx|#QN6)lN^ z5ng(=?ur|>F|Nfe+tkeVZMa}o{>>1*%0p_kr7p768dAe}0obyw%i_DU;x}3RW`6J4 z*6)VZOl|;-KI~!)Xuo>*uzjivG}q&>Z zT)|Y<%!pJXoIq;a28V#Y*Ho?LVdLH9T!b?_#fKmpNOL87n4M%ev~>NDKjtK}oKa+c z)8owQ(k0t%m%Jk;*PwQoU3gl@S=h3bfqk;YiUSjRR=}Hw_TQNDEt$CW+b-z8_EwH# z;dvMrA)|>$$2866$1j&w759F9q>zIe5{`PVAK{LZsO~taFVQ6@xB@6=GhL5%l>g2D zcqTPC(pPMEj`wosxc^5rBEE_`$kFRR{@3X{a7;G=evueNyLRha7tSV1Gh{`t9Gl#B zQadtyl8(-S$AZ&E8I4T4>u4*wr51u029F^6`Ueam5LAnJ06c5-1i&co6+v87Pds#B zd<#pd)X~6Zoi6Vl>f_d%hh1#Yzg+Dkhpz~7>`o~onoX4X0qcK7JCAjif=H-H4$7@I zM&c3YWn>OsMzS4%09BiR(It$Iu9j-+-&1jbwuVmTltmlNPT| zV_I808NwuO3`&}+l0yAV0dJQEjT7E)sb~4%lKmS>U8H&U3B78X2h7CK1XTsjFuizC z5{Cn+@`WQA$X$Dko-N`N15X6=LNmo18sRr!sv*IN4E_z_g)d!?M;}vLOrI~kCv;49 zpydBFzU363`GD5aim3b;6?%6I87G!L;}ynRzEbLufy+X$oqopil){;Rsn-;B0Z};= zQRJHGkpUqAb#TLEor7>-e@QbMT0n*B#U1NKtA8xxOCaDMiyxnEo#bS2@so{3yx?FZ zZtlF?SIy5?P_f$l-^j7>nd{@r3p=N@H~)3lVhnk6+M8~yc|CItKI^$pWH&l!N_M;L zAYob zNbZY&4!K`wk1Vd@JmV-LPnj}ds6Q<)6lcZB3#;BX8~@1WS9H3(@GsT-TtbGpuohQZ zNGAiKA(Yj`g~|+9{N>M6-d2+t{%pfLTe508pTuLDDvG ze9`gazi&6*>-CNI+v~RDLKnwJT|y9gg*5Kt+VCgq)@6-ZFdyQFC=h27OjURb(+|&{ zo-5C)O7&I39@_c1q)rt{!!?e>&Yki{sl{>Fk#vm{&_8HiCkxUX^Q?fAe5IM})k0Xt zWWVfpLaE&Nb=mxGMNtw)o$tDdl-gHc6WTW{B!F<>pu zTI}M~OV;SYVwLsIcR#)QKYe!4i)}u80rDJt+05xgr!6)&>$JqKQHsIJ!Y>l1F|OPE zk|tT|OPY$QFR9N{UmDTxb>(sEaN!!xC{yB}EO zkReQ0bCj;9pPZV$*yL48SL6LJOix$WC|yr~drrEsjneo39`%pB*Dj=7Hk$E{*0Y=0 zA6!Uz+so4P>3Kjgx*2%Pf_uZDyEpiN<<};Wy3Ji3JerR2mK{UI!+V)ZjuIK4>n-!+ z^#$Itlks|Vh*HD-6r(R~N1^@h{yV#Z7hYVx!IIcG>h()tW4?qh+Iy*8IeFyD$kp?b zjqteg>d?p&h>_SqHsN`RjW6Tm!(C%J&wFm*nmOE1Nlt3Wi!3|XBk*0mu}r?i^1^8u z)iCt_lvf#bIO$Q-$a^g(kLTh|N7M0YU1B-T$1Hwa@jJ-RNoB<`cafOK-EW;fD=Xe~ z(*H3!;8H?carAn>k1=ou#F_5*EDe+q&v7NO*1i9amq}KYY$U+xy783V_t*cSHax%u zN)l~}Ca$aW$;@R?k7{y+ni3{f4H&1XM{P9)7Zl%5u8!;d`tZ(5-B0|k_enCVWf6KX z3{T>4_QE?W$KN>ZE-{{2lgutLcIwa4{g}%n)$>MZD_ctTvv=bk^iH`Ca^PeXUv`pL z;bWutCj3@Ht{2~cueQ=;Q^BZhBqho162pcY$#zY#a3e8c3Xt1IvRxy@e;BVSkla4Z zuQn2@TuujSC*epT0l(61Q)%9ek0zIMS!D825QB!cwKQgfp;AyX@DLACP zf{@Ur1Xl5a#ilZ6Y*m$<roT34+&1Kv^%`CFVd!NsLpG5B7U^;*v*TuZc0 ztUCS%J(U?ty&ZoH@0?jtTJNS$>5g<;3L((&dc1~aNGh~}XQ0Ip8T=yx;M6Eg^rX7+ z`y*T@X3pCxP#7=Bx>RhHxy_|J;VSEFCT+5SKDVl!hM}V#rHY_yHA>Xq%6y2Yw@V`s zWSfA45WU{pA)uV%p>v^LB0btg=A%v1U>+Q*ejx~W2YeUCp8rNGO5YTgdwDnv{cb<& z68jd=VBWyj5=VPg;H@|;_wEn9RWm}4;^ZX|UB;k>p`ZrsfGsFJv@If=)g<>nG@_Q) zlq?ZD`gX}6mo348Lge;&+N<%rV~uytt;#aHtj_ExSFn9r3(fCfp;q~WznR8L;W3i`x{tCNNZD_bwL}tJ{7o@tc*XQV&0*+`AS9u0$pNu;%W96!S|3NsK3}< zXnR3L&u%UB@Dlo1_Vx4+M5q4%jt9M6QT2~@Yc3Ubv%=lGR^797 zh_8HB2P~&6o@u`Upy3HOrX#D|&Zp03;@tK0`fwQMwT>QH<k1*E@kJWgfVHW+|rSzLYby7f8Vi`Vt$hPMp|h3>SLWeAo;U0WtVjdyOl zhn$%xuWn5yK)P4AHYc2@>zNYXloR&q)=vp%YX_$F_n5hjxJ*Vv@hqR0JiO}3DS zw+=p`w|jZh4wW3bPdWIP9NNta%GS99Y?N|QFDgAsc<3a zb3PN~xKEkW6wqcRNb_$vlcPDOj-?7g*yuv#LcR+8MeY%G55t|wSg8w@yGMn4RJuo1 z#Y%mqy1#W%sJIiWPR?}gax&IXWS?&i?nrKJLEpF;8F{RY6%&uO+qKPIUSoMYwnn-{ zv9%}?ffZuiOvG4^*I1?JIDm zAJV+@8f)T1noD;!mhBkQRJjx8&d?5C^e;KI)4k;F7}5&zf0up;2((%w(3r36&poWS zto=D0TlVJ%DAnP&6r5v!J{^0+Zisy#(fUAY!)~xrf9oUM5W8ESPR2CsJTw=0JfN;R z9lOs;+>>a%C$(XRmAH=*26i&0_K?*;PsZ-iK&06)z#H&i60ynN%Wo-b^B>GN;0Vuf z0S@`?e%nW=626!1+HBcXbF7cNt!us5ngx@+jsEq`xKWO+!BC9tTATGV`(CxXzu2ma zey;mJ1KkSbT+e9xe%i&Yd{HV9Y@z#4;E{j228K(GUZxusJ^LuzC)cUWoYO8SxO~2v zU#nhlC1%S_O$Y+IOq%AuQu$WdS**#7zBlTB3oAsgb#4AL*f2M}h%zPqRJ(OO!vQK! zjbaobW2xc8B(*t#_#wUa=$^>y z@x;2+`)E$)hm)CVtaa<^~Inp@yoio z3(S(L#D_;16AJ$k)v+L>lyg_CtmjRaYnUu{;zWe_kGAo1eLFw5bqzdba}+P!JauLOGCuQFMAoQd4{)yR$9(z8-m1=%e?^0J3|%#GhA zi8w^aT|eN7cmRmjN)y1{5JbFW$ojAJP%n(GJFXOiE$KBJHzJ3ycPIMZim3^E#o`wsni= z_5QB^4U#(&gB6c6p}8okE%DJF|8KtVQw_7#=)NtXt)~h9G09nX+U2c;IHPG96yH-J zY>5P)xVOEGM_XXpA0MnxGLJzXtcH2*~ryLZdKzvmmK}rW~-oUzjEMx z!{xXf9af5amg~e?|2@D;N{EQ8AEN0AMi zt);r|o{EQ5>7YHVMTVhwR_Kwstv0^1Vh?XTbi4qst-Ut!(Hfd!v4a-t--Uy7q-0e( z)yA~Ua}kKtNT2)}CuKt}WFdK}gqo4tcMyGidjZ97DWY7_WO07`RwUqMzrA}GB7tU}=vv+ZavXc`KDnVY=sg4WAP#+C2l#0_w!ceM( z9%-m(n2w}s$)kLB57aM$q?)NYL{j?76eM*qPS3>MRn+vcH3@TRcXYuB6;iZ@Q4dU4=q;-aIIKm`@(bMsn4#PE zkQ_bi44J%rNu889Hr5roN0EC(-J`@kD&3>XJ*wSfk$cp*hn>xmb+rnKP~`j^7>jns zR~61kN1cu>veSH3qO~fu0SB9${}*wZFIOGOnEPm~LLqDqKV??Lc0trF*lkNygyWta zBH`#< zMY=e7@6t0-R8|V1q^7V3OyBint!bKg*B5#pElAYQ!J*VpzWAbzg-p3TZ+)q^se;*J zhIe*s6)V-9S{ooFUl#8>>a8zV>@mew#$n~IU!?Gu!d3CU z!`}KDgx#U(!-#pky3u%DiC6b>ysp%%8;jSKd38tQbzA^D9DBr1 zx+<^kWW280tDA_|E%NG4#p`Oky2*ImQWI*|4*ak|j;s>8tpULD_kFh@e|b?L-9GF# zGGkb4p&PSWeQgr&aXLUmLR6jXe1xf!or^GaEFQv?Iu>un5#G^wbD6jNaD07v+{Uf8 zQfYK=ajmw+#!<%MZnyYrN$L;>}CF)K56?=T>v&f2T+b6{ z67zd`F5qRfbL=D7Qj8s#enKz<`_Ud z%p?P*hnZ!7^f1$GDG%lu?CFQ6jo}L#wigm5JGedI6Xu5w86hwsBLpO5gg{hp0M#2j z^#)G8K~rzQ)Eg}I21>m_Qg49N8yxipM!i8%Z$Q+CFiexV8UDimi1+&9jRldxXVi%o zd!1Yl1a`W9-*`b{brCmNJ-2Ust~?Gb-dGqXUp{LrR2o;4%HnELd0b7Z zh^tAJaW$zbUSB(~&#hk|MCP=lNoM*@g|f%i|~`V!7A7&s835ATv1$CnvM;3 z4=Zo*Tot5+@RdyoUoj`H*#h4V0|IC;99O@Ik}oiq)c+|?o2&9b8;+oIV5akM<^(ED@hB7nZ?3kW|iF8 z7~N4{c4uSBj`}O^Y%JYTeq)!8*q=u-*2WG#C9h_>;yOaW}mJ!%xg^ z3m%DXP~baM4^<=1fq_O_*w9GMx^Y2A3*>Z;QzaXc@%~R=CD_dhW@S?;@K9(a`Bski z(Gecp4$H^QCmN~PNhx9 zvOFubGXtFvF7l-&A3dmFYwPJ&+-H}Po4DgHZf$nl4_(~4?6?yyt|c88AS=zMljxHg zh$vSWEC7HRkttX72m)zXjCsuk@fAm@M%oqQFjND5kt3@C823;D%j?%HN{#L?Sm*T! ztW2C>o!29F=2Y1U!-g4QQ!^mUyb3vrH21%1MK9|Sq*jV z8T_Tyk(RirJX;O&v~J6h2|Ec~rv3)2zd2pA!=ah<7E5oNAzj~d(z?Tk6LmE?_|B_q z&j}~$x~GJ5~ns(rjTR9eVai3<>J)P<6Bhch|ya&nwf0{Nx! zu$cjN*fd#R2n2b_`Xcvm#9)0%k$tf=kXC)9EMFTrdpbKfn3o+K%*zhWp3V-=p3V-A zERf(L)WMiSdZ+B^FX(B4C~iO4pxr@ zjPn4ZFU|wK-u`6$ItSx=J%rDzGx)r2&zz3Lf7*fRbF3uM3dyI_L4Rx6Tw(gOgwM4u z6!cjmlQA1E#8|`B+Tq`Ed>Yxtc!U3u3=N#zY{H>A$lUda-p`JJHl#C?gVj;c^oR)h1)syWW`pRk=Ejb%7RJ ztMY~XJF1rmxvyHpUej96PY0A~_o~WB6VY%7OKsaJLw+MJcVa4KHn9Ch9bF{Z^vrv)oq+Didbq9 z>sGc(KsmxCKUIns>rQN4v-slPQhy`Kof!Av;S>2vYquZU z_0yE`Avxs$cdKSyAU27vYOrb6Lsa-V)~Aj?7Qa4_ksuCO!{1tQ8LJr#lcxN(Dr@6s zRdbdor8rDR%fH2IZ98$D|1ZBYmHil_ShfVEwZ(}~IsnJSC#|fNwD_bQL4%1bS)x^V zuYvIv1wVwm(uRsnG`9iiiAZUD*lgBym}~yk?isX29c?%JWfrv^wB93+zc3yn@Ev2( z^pR^i-w}LC^GxELbq+gVX3?wnkkolUKPw)fF{|(8r}I93R_yL+WBiTscZj|$ z#21z2YEouF0I~4rHC_){r-?Sk-hWE2TFl z#*lyj#{2P zwr8tB$Gqozio)PY3zoW|J3wkbI$54RKc2LX13cYyjB_q&f6~7nKPmI?s}JycndES{ zVwC+|dh+8MoEs+a)2$eUZpAlD5QCR+W+^e43Kq*XLiDnJ6dDrC$IV!{_!D~~o$MOL z8oT1Adtt!4@M?y!xamG<4i|3PO#?MFfaCQG7JRsJmVL<1vX9tFb}zMeKEhAaL;S2D zxN?NQm-v&Q)Hw70mp+(!R=p+k2(vngs_ z;q{*-IW>A@HS>TD)i}?dhZ#X0jri<&m>cBL*w3DaSwbGohJoZ^um6;RAli^?KQA6Q zIBGLPx)m-3rEa|ceP|9!%{n4RnvynGI4WPPglp0X%bW&ycRVxj-2(66z`p7Q`s`nlhg>I8&oG?*b+77veGLz?*I-DVlv`&5Osz z1`bO7Jq@5Lu-O`>plW^Dvt^qtdf<&4QuBOU)i|fa|{RZE_ zzH<1$dGY%3#q-`VGB92+FjBr?6ivN(fzN1B9ao?%t>-@=e>DPNFUJWJG&ph~iykRA zdcb`3*Hxye0@g=BuT)ujwb3h!veTJ%j$h+6`htox^{3NA9lh)v)NlHR{eY!P^*zxa zp&nqOt}2IKI8v8wZFKnXktzChcbcAHrifR!ITPT+)Sp9dv^^zyLkd_%Z`>~YZ6t@$ z76hO&L|14^IUg&@+wb8$Lv^U^o1i*IMMyZRV-4TVP#wK4l$_g=$X7Z> zFH3b8jZrBI0=fel1G)nm1Hxe%-LW)>?x>kccR*!8cR*!8cU0IuFH!{Z0~HD*K%i70 zK%ibAKo-U8H;ch!#GKd|RbNoGd!y^ucX4d|2JEc)cXyz_qsebReg`s8vXN7?iVdNDIAxaFv< zT|L+6lbU4AdK&uVcfZFuq_qouwIh+HBceC{Zz!MsC;Bx6eG&if$}dK|%;{le>$(#c zv65REt7uF#h{&GSN=7bFRIjjC9ojJ4_IoKvsf#L%LpMd^s?z^>H0Q)!>7TmFj<#DX zIWqDEcTU{Ece+uS63dLYA8}29eIyG13|$?kzJPxa(L*W%zYJd4i%y{kURT#oUB;{v z?u7r1t3)4d7IY|oib#Se)>6@uXHfCeR`sql|3o!u0{|RUk^CJc zIPxiKk5ptr2g zTBi4zjXU$j&1>dBb4XCNJA&$>E2a@t?O6oXyGa&7RUQ&l|JI)-s5E6}BB<76eQvG2 zyXn`HA*i|_sJedSNUCy3s&cxf z1s^K>1tb-;6kx5VwM#`v@z*P2>aFA4Ni81rYH65V2lr?Ihig zr zfGJioq+9lyHZ9f!^)isPe&cr~7@Uybi|Psxtv9xpSK!&qO8aa_wWix+(UwR&ypl-;=)} zrqC4o*#{UWXCdqCXC;v~^kG(;1TfaTmtR97L%S_3{!oZY2CEfk*hIFkX?22Xr%sTz zjx}`xyy*yBvpH9H&R+e_XJh+j7=f$CmZCmZz;_xjVHq z9;-?^RqsIYo0TH7*+sz4(Xz%pmbyo+DI&xgLbKUs%w`)vNeIbc|H*h3_Ft{+XNl_~ z&dgvjUz8cGa=^nYkH_HQRhacG+&ye&WkQR8BQvS(HIv#+W>UM^Y-KeM%vM&zY__uf z0)~G{_h6K)3M<>IChThNVM)qeMyW*D>OVeIi!GKPR0h^ zqu)Jt1Xi=a>-dM;PToU`X}QhWu1wy>bzW1?f(dM2J1>LUZ-Nk)mIEv$v>bkvwtfA# zUy<#ree}GH#P&;IByL<3%s$TwontEy)6bc|e(zu3A~Ug?q!m#oVE+2;=b_D4tP9Lv z;*$y(zFf~ec^H0A5 zqg2@=TyItj*DdOQQjh&B(|yAJ9NEeFPU!h1tagA zHeV}R$j}LYBf7DD;7LtzcHBa0>ote5@VIz)28@V}d2bP`kl#`)-`WDh)b>k_iFTKY z&&J*>_pkZcTO1z^J1BTZ<^EUa2Mnu#y=SItp$5QI!&C}|=AY9HQ#lY6!|j^Jsw(%t zGXMOLRr`B>8bB6u_!c_IrgHcK=3|yg*M)KTIH(wh56m7IrdImp7X;b-5HcEPEYUx| zB?6B|XW=b4m?lo;P!_@Z0 zO`Fl0D8GbdzhX056Du|ahNbGVvYYm;Z#1K zK4yHrP5_8DQHf4$cID@RfX}z0n+VPkJYbjyZsE>= zTX;E&7EMdjiWXjH6*i>NJ6`(K<$nBPGeg~2sTk_a_Hc@E18P_!z5m1iL(4@nCaC3L zAclebrC=gnOF%|ug?fR=sD*k|gJClDBKSzv&|UbuosN>q$y3PRY-Xr4pd=e~FcouC zGd9FWnztEz)Gd4z*q}BkvoU0&O>Oon&T><`y+-}No_8T=A#plD3*q7`n-|C_QuO>ZgjM2SazT*2_HR=lyZs`Aj8Ox=VuN~qgry-*PlEFzti&R1Qvt^MWWhNx)?FkEW9`nu zSRd=j!B~78jKxWjr(rD66tA6Y01D?BQ*BRY#8_rfDpjw}5M!BEix65d9b?I??f_%` zH2;^!SUO;WvGf4WofSIDfwA-eV}W2m3)7_(+$#CUN$lLWf^(*8ayg30(MPa!UdQ$( z*;GM|XyH`qak{Bo=hUWBE`UmHEYgv4Mfu!hQ<2M4;vP{wKp*&ry1|=seJYCG<_fNb zs`UThaA6;$8%yF?ZLZ*!D6BRMi?G_9l4DL&#j+)i__T9kb^e2SWjm)}Tou_|JU&6>N%a^=8hs=uZCQq7alP0rf)!IH5 z5>e5Dqk2tiZPy-jA!$d*zYZLk#77GKj~-xCKxrsTPg-OSYS1Ec&{znqUj>YCMcHDGP`A{FB!s#Oz+2n0q=f!$VWqSS`)@UpsCf=;d^cb7; zH)eIDGv?XHW}yez+@pa7&Z?&(S09QDEzhUnTkyU+sLtSDd}}!>m~u%UYs0h{&2D@| z4LI$B$e{GJs3Yb!9$^Ye4cUXV@x`C|2p*+RlYVv z?^8FP1A*HSkULinx>Mhb8;^ERw&rOYPt+ey&69looRC%efBI?w8G9G!(Mtak2N}Zk zaO0u9Gi^K+IOoPw4rDXQ!b|+qZ(Imu<3E}L*`K^&eU{!5o!UhprN?2!!R$T*x=?ul z>f(7|6;^g`Zv@%RTy&Eoq>pJ>o$>@zp>}Jm#%uWwTqus zY%(HS&CAL{dfGIH-=k!XsnJ#L)a;Tq5SDx?O8a7t#JW#(`1k*Oo~BZk?}FAfWQ0W- zjd6T_nZs@eUy_*HPQBuhwz5^FkHDN05p@Gv1O0+qMgl7Xcqkm1jRBe&-{`@7(M7ol+Ui@H?|*&AC$Okt|MVt`zz}R!XiE`cPI% zwiMb)mEV-^F4~>hQfOq!#H6LruxSaVb$5?hFh_Sc;15lcAFKJ<@?*({O=Y&#RAys) z8J~_vGP(P>NuCU_JHL$ zm$(*jXkzQ(8O60uOE#2>{;I{bp?>Un#I@#Y*#u6e8;iL1sANuAu9c^WYsW1nTbg=o zsy?iQvWuI>LuFVmY3i^|+3K*9-o>lYhYc>vHhEScaXk=t5#Ea;T^9RU`)$AvUu67l ztn}cfFAcccPQE4ndT2MN{7zo$d}3zG*IN08bji&5&+*%vExl!WI&;#=*Q%zZsfI+| zq73uf!nISv%{k#CQ}kznFX#L=#;M8K(K!)YuM@Ft((F#w%Kwr+Q9OU|9hw^4}v-SUKbY4Nj*H!UzW3^6w*vfP2 z!_LlG*ez9DZFnvegB&wEllhS=sf_ zOZ4M9J#-`ttnA!e&@bb0y6%42+wJ@Xlv`sqT(H4)?C$X2_V6?|IQ578Xypl1T6?^$ zsF$_b`SID)Y`w9ze`k}sp7U~|7fw-W?V07+Ig+E&+WmE7L$@Vk*43!A-nf?oe`|Y| zO6x&*$Nu;JZ5~`T&a5k2tNF3JD*atVzKc2D|EY_b2M)ba+j}wldTW(5UAs&lG{#9L zThp~dy9PfTQrm4WFZJ)F4l0~Y)Ac|9OK`}N=vBwR`H=eqTi1)lM`ccV_LCekqo(c3 zEn8d)#uvKZ;3SPAYEP*2DmDa~wUHZ>ykwMK5u64}uP-PbaDV7B0v@Sp`Gg)k^=iea2fXYG?m|4O3{s()<IJi2e4BApI$o;q_zJ3?*))H8>F@VwGPq^l>wxJakH3f4&LrJ($H#<+))`#PhbUJ z9hH;th_fL5iH%b;5WyhHfs}R!kVgFl=YzD_FAX7eecJ4Q;U~d49zO=wsRDAV>semS zU8L{&m6N+uqt5A55kf$!L%ptF#MCqgKK0}zRhpJ|mpmn4oX4+CT=lQLGrf41!&fsM zT(>y37AE*Rexj59TAlRQ1g3+KvR#R--FDbtO0o|7T+b%c!7l&OjupPo)p;6MeAT=z~2|^fA@`Zi=x&a-QeWM}xjt06T6Mo2^3}}-AU)^& zzlXzhvVN&M{8zfee-)^QLu<7i{_B_G&L}+gH$<1F&-~}t|9phHv-Io6a?btZE|i=* zs24{WOy=Y`8H9B1KWyiI)1ND{vp8CGoYqmHL;5E@I-Sq)i$z4a&fUgWpQ2i4E0*@> z@?&FT=-1V@`A7aH(61ZIVZ&;D>;4h^70GR3M@8tbC{~f?(uln*e?_g_$(vUE?BAN} zuV|EG>)Qf zXHkiBTQfUe)Gz&Ja8lujs6E;L!Vhi#|3pCqKd6!Jn@d3R_!lnzL;;}=PA4!wo!3_# zDoq{F`C>le;-!UWyLc2xDYv>Hv;7xyM2?D;*Tu=e0ZWc1YL1f9731tud@(H{+*+0f zT$)x>0WbAeeh@G5I|acUiL`=SpYV52I%ro~I;K}guhw9%bRDa1ym$IFeE z!WSn|H0p~Y;*%Dx$9&>4O@OYmpwOZ#iWbb(%+^gsEEMi3@)`fYw;7*YFqauU zHd7+;6j(Jz>G}$Hz?9~NUFvS`O>rcoC(0l7Wz3nzvtHv_aN@vz^ZmCC>0T~Y)O>OJ z<-z?qsF+i(prYrjO_E7l4!L^fMRbKb3TDp?cOc5lKc0NNV%HqdW+kOUD4(?k`_I?KcEnXM$(fEGAk8?V-3Ojxqp0?0OuT7Us!)xV3 zz1PGP{Zy|m*I!j)n*Xb%Is7(nia#vApEG~g(s;*8b6f6ux8?TI&9Z!U{5FZtoU^NN z;~k7DF1`1jUrg$&lijX5uGjQDZhyu?$+^9m9BXoO1R>4z!CxW2O&fK!ZPYN_*t`+C z)+i3wR)}CR4zE>6uC2sy6RQn|8>}`MZpLcE#N1eIu-ss^!EmcEh8wK5b=vaRx-N8V zpfszE{y$y!fcR^}zX*TLh6nzd=(7(0A3i^gzZTBZ@X7Z=d2Q(5YOS{w|2ZwjY`f`u zVzxmu{=53OT6*|?w+Fu2qm55QXH(tlcCQXth6#0)-Dcw@ckP6 z*T&BY<+0HzP~J8!w&c1rTap$VM=~njWcNWr#_Q_-xnoOq8NhU__*xEBSaJZJW^_@) z*p)Kt$gm{^@H#QY(xTxBGRCT1b@tn$2*;9dH$|<z;#0x0ZRf#mimfiz81qe?{6_(T5I>m(Vk-} zAljv-poXw6NOspHH}G|ZpiH(cg-FzO$tty8@vcByki`{Pn^oWx4wxyB+-{mXd?LC1 zaennLxqZZ*dON_|B8nxqA4PHzoC(yMJ2bZMR|F< zYm?jk^xH{$(7!A;P$h;&GCyqD}tlIJ9Nt&f9^LN{<>1=qmDyO|GN_xVj{etCGMXmuvnl7ZK4+L_?U` zrBwPh)t0_HFhx|GAmiD7*ZzN7%Ck#h?Z({%*5&0*)bU)OmseirUm`8g3GVXpS1`U_ zYk~J+oGBFKKR-}cm`dMan{=EAyR-PrBvDBSAAwSLd>|d zLj{yi4yl%KY7AB@&SrYppF`G-tm`$!^Y)q5MU-l040LirK z`0+2CNwY(;_Z@r-}tq=ubl7rhqQ+IZ^b$Uo1Cf2uGwG(zma z6MOm1>zfzfr5A5Vt4oe?>;)T|x$(l)@m-2F9+U$?H}`m7Q~`kO>Eynl!rA)!nkAMG zi_^!H|HMT!DPF_Rk}s-K;s^93{&IbGKy68Q`qiy+DQ|=~@5~*kzQ2H78ZvFXZCY~! zBc(x?&>waOtN)o@QBatUaE&FYzNM+YnpEGSR9|(fuPW77nd+->I1yxcEk`e0;~WC} zf%CA4^?!RuDrMg5Y(ASaY`@Ox!_EgTMot~ous2dv%U8nkKlm$^m-@KI+uYXqb8_JU zt{eE)g#lIQU-V!Ak?Pw+i~YY({NnA~zCWjZR^K03eN}2-X-)^xz7n-BY}{8~P~pmq zKN3@3^51FYq4J_PMb(!OfYw4vPVI2(t3v<1M^w?GprQbWsC_%sz880@eXbVOH(Nb` zRp@tcAB$7YqWmpO{d=r1XMR9XVOr#dr_jIjK4lGVzp(MSrOIDx`MF5dZ#k~y^zzd9 zk=|hGR#l<@sjnytykh-R`Xav~JN@;?r=-{V1=;C~k7cE6oAy57KmFpoJP>y3bNAEs z{wE*dH?OyL;7P+Qy&v%I+D*hQrJbzj;RkpPvs~dl+E0+R_f{uw()z;~*L(jRr~6)8 zz3M68gP*nStu4Y$tX1vl{>@6S*!%2#WK6vz-$jwZ;R0118Qj5B zj#^boYLs5RNbYbi8YIXiw9e+NxiHds$cPvbV$JBryAYD5XfxLYx=^X_&1bo~cCq7B zP(@y3=qLiTg)c1}!6J_fh$;$irZK9W`X3dJ&7XioDyJsMq-e8VHt8#37OXULW&&OR z4{z@SALVh~drN46HD3F9)>aawQDU{(CTgq%#VCo0NG*Z1l5HUtkfjw_{-hz85bRJ8 zf*S*t5nwM5Ytvk}_Py6_ec$HZ>!xYr`gI$pb#H`?ksK2nCytG6lHkNmmOxV_CRpwz z+4uW9^Xy6j+%&!JtItRKJTuSyIdkUBnKS3ioQd$WO4Y4R1UAR=ky`u4g2DZi!P~g< zuruX3WlNi9!}MDXX857sMFH{@sLM(Fj`N@A9p${AjPi1rf9K!2(zg=gojw`TZ1{?| z`q5&Ivfl-_tG*yvlWmPxxerAUNUEwr7lghVVLQl(2XX;pV7MxQLsb@w&HzgWN4l;t z8CBfvC#?E9D~Hkmsy3`~5)kvw144K#0s#_BKxq6HfyjU+10(|=8Ed-(fzadUm6$Sc zIt+x)@as17nLQOFb5{i-LG7ZqPAax1-Wu(m04kcE04kaZ;g|%O%L^bOXvI?0U)EI) zJL?Uc4g9wH{b7C1k@pm!cEyd99XxolYr$zq_0>FE!)Lvo zn}3tq+Ci#cIw6Y4wo0wiF+5I%t_@~z@V0*Ox^gUdsUo%Etc@v=3#{sc+XP8)=V|@E zuCav;=cm)ZKu`l$OrWZ8B*pNG1y8M;Q85gVq>uw?MOFt->n1FmARDjPmS|>A6Y*RN ztBYjM?0JBK%KO&^Z_6dCQULLEVM!GLZOH%GmNSK5rd|iXka&euuVJ7nr0Rn`2FlaH z+olf_D_c=ns_^-Tc>h|2pWH(U6F-t;LqEX;Sr~{g`H#$~@4$^Tj+K67VrOyoKYTdI zT5;utRkcNaZ1(rzmpw@aD^8B(gwgYK>sjiv}+ScS;Dm@@O{0@s7JKF?>(E zB|{GD?Rp=990!Q#n@ZBc2z!<;aqbRceB%1Ler~W?yzKQ5bQp4TicwMD#i}{aN6&PGP^mEd{M;S#=zzP3d$k6%#2!oSI?+(wO6$e?V%u zZ+!KP`fzl3yX^WzLA0p4LaOXla9$sM{6X@x^ZbrVsUj{FC7=Fm3XrHF-a*yzwNd%`daRXeNPP~ecd|6)LiZ|>)K@}T z_}!)XxL{;au!$@vhjfAulaTrO2aY4zI0&2C{{evvT$2X8-EP_8Q*DYlB3@PmA{9OP zJ0s08(d0<8?;b{>BYG!J!-+>!59~v91(xcQW~u&;oRrLY36sR}xqm9E_4e$7AYI?j zIfEe37Hw+1s@mK0B|e5sWK{R~jRviIAIV0p;xU|Uy$ZVAdyprDxp$N&l)3jXPe^m` z5uVWI-e-A2oO_S*ggW;g;|Y20J1xDvkpu`%?`4TRKD_(va%Cj23Anlc@@a=yRQOUJ`mB}hxvb&UhKSz-ZOWm-B&>= z>BvbS~ln?4;<0tv z9=#Vy_an@4HJp7;<=^|QGlgBlo8va^B{c2*&7W$)ABr+e3N=Rbsr)ZyjTbk+IGG!H z)%FA!S+9=$3bd^JnQ>A{QILW;*Ka z`Jvdj<+KCam4Wpn>Jt+trthbK13#FCE7WY;_}p}4Q*1GgZ}RVXjLETWJe!UN&$*OM z58OjiZ%EshaFHqMm?kenO4B_8&>Q+9zq#t=ShC9|$@`Wh_wktbmFI#%m6+Q& zEq87CnrwH)Pl|0(^qOpcRfuJmZcVnc>SwuYE2bvut~fn4qO(fLV7GhI~J9lR}gdhHihztc~xtx>Aa zcZlM;9wtHDX!gY8PIMD)gjfnoT)HwPNDCmInNan*O5wu(BmADI2b>ZdwW^_plyw(^ zLjX3rsvWcqE)_MeD_d76!PBYe#UqhKS=s1(3S6~hUHLlI-z~s+rc^!8^*j~7A%v@6 z;llo5eox#Z9dHppwM&Y6YQQ@eJpyaqWUydbLZT2-L{YP%LiD)L1U8Vd`CMFOs9Z3u z3SnBUu+-H3BfAp26p*Icowty(y0HHsQ72AF`knyy--*U45UxY_81`_hpmZ3mX(7@2 zC5v-+B?hV3uw2uk-aZeje7>4^!z$0Mgw?Wb#$?^$7K_}G0VmT|3}r&mYrJTmvyUEl1#Z13XokEY5uUpjPP+R*T{UEkdN%ADbo)48E&w45Bf*QkWz z^ssc!nZo{VVmgM#Bi?Plpgx#uvzRM@(CQ9&Pq_n#1u+VOb>)kLazn-7)k}z4&HviM z{$u1kVc@!aRi!*tYxD3T`SjZViV{gc3JafCN;J`y&77a~Jvk^B4Ia;{TKU{}29)bF-e3S8RXq3++ueN4=qYRI|H~ z9T~G{e{gwj<0BP6?cW?k;t*DAJc1Kz9-MDtNf(c0ldS0Cem2R1E{=;1)^l+jVX&Nw zSK|wY2OdRP%*7M<0^w1MI}aXpa_P|;ua{4c)_8-QdbGwH@#?{2o;+r>#+z}O(T-1G zfo1aLio$i#l}H#9%6H&L*vIR8{}oGnLwR^ct}9mfaDd%N9+tAdi#_P%%8!pE8T$;J zk`q>$fLE|&p#7!uB8uz3cwM9?|E2!P_D5}3Z+OjZTdzJdv3EJd-{O&$$f`wHlv`?S zvu_KuLRBrb(0v(l)JXaI!+dQ!t7tQ0MvcDMjz(m|VypFU)m2;#e z<{rL#RNiOli`ULx!?m-hcn)a$_aqF_KK8~Q&kH6sbR=m&(#*P^{NtM@H&e|KK672i zN6HO`pY$7I*q$>vvr=u*Q!Pm*d22ZjS51i1)-2U>5pSJ zFU&d9JEt&rlRr?oW`D3C8pIw5;)TnS72{2t{Ea^eupF1ncj_OwysU`5xDs7H?lOLq zY?y4=b6-Sj?15a{S#}b~t{e&Csa&LxiwvRPj8$wu8!R7h+8*nlkyP=AwDGtx96Ek+ zKmWPqf6U6SqI_!k6;(vft>UrCRa8zjU%f$lex3Rvzixfn&jsIkd*S!}p#xF8Y^3r( z{2Hq+IWRVZacQwjKZzg6#y$t@xX&E&j$lPJcnp1%cg3K3waM>~w+{_RnqJ>{dgY3% zhHX3svA=gq4GNrUM9(cMZ|d?l;TbBLOP$SC?!}fpJ&4?%oz_D9#(bg6f1upf4I$0C zy65ijIfiZPTi8tO;WsF~y=jNP@jGXd)kc$3?=oIl8tZPnxQmR>p~kSi*uCbwH0R9R zmHxonf_5WF);twQo0dnnyd&AP#ou^>Xc0}6$*IkT5y6D?Ho+{?-w=!O z2d}9tZdO4bd|;%dktykGBQ5jXqgfBUuUCzAh)H; zyTYxtX0m-{0a2`qhfbDnK6$3Svb_J|pgo31y23}qBoxmOkhqL z@brKF9^|=osh<3MK3l}XM3co2WUq|UZfRwhV~s7Y(|#mOy%b#k*H`!>?J48M?cJ^# zt?$b6cW#0KYeUgm;l^z!x`)@HTPn*Kv?J}HKp=tw#HjYp{uTLo56&oCmkP%6pSVfD zuva3V)v8b~`C1nfx>?HIEv>=R`IpI5*iu>8(vhD*t}72|Gfwqdp9)g>gPAjhp@WsE zw*0>{ST>PFtWNwIK2-dpeemlCCh==)2xO7L|A)a4#ff%_el%W!dilYqoMOm@`w$W(OlPPVc-#C;YX%1TqIt>wGX<-uzQTEeu*|&n|zcu%IJ&D;HDZPm3cs9IEFCPqI@Hc-J97i{1*t~qscVA$?x=L2ol&Pk<=Fo0o(@xn_H=l&yE^UFPV{4?MTaUq>xxFH zQRWr3rajmY*i>88sdhC7svuL2HrCZpF5Pcuxl_l!nKe|EYLIcGv%JQE_hz(V=s;rV z$Jh~`rY9+TMdKW$2cQq3?ptk|u`i=%|&+c7# z6hH9<#u3~HpQy-Qe-LagAGY#IsM5J9@A^?5quJ}FAwQbkeuT%ES38nzLtUOpc6haz zW8w=RCa?x43%Wk<`bP-pw&lFai&E4--@XvzN@mr?f%^KcXF~Kae9Bq8nn=gTcW-l%ZMPF>yGuX!na|PqA4{D<U`7Q#>_p6DtF8&W07yXwqG7|oq_3rr(a^a}(R`jCKb!AW@C$mo zU;ZYpqXFilbiSYx_O&UzeWVC5Pr+3F~yysR_ zjkFyzR=Zn`$u5s(+m4fevpVUC?U@BN*j{j7(UgM5#fCKiI*n^zu)Ko+!_D_+GrZYNXlCOU-UxYHnuwVP0yk%~s5L zX{6cBP0cW7rl@9{o93>FdUw14Cqh)w7~ecz!6^c&pMA*Nc|Y+4uBTB)yq*8mh2%Eg zzY&-p_jcaqqL$OpqZ_vq-wdVtpUQIy^v0WbTS%ivH?GzPSjVA_%P45$^$KFld3@t_ z%9d2HQaNBhqZ>b>AY9J=p>x5|NTP{`?fV@%JZL+diww)YUf6uF@ZtQb&t8TN<1luTxjQ18E?O)F>e(+M z$w3%9kc1D@rm~=E=$2^N=68k6zjNF%{}*pC=0Cz(nHB3r!NP}n^YwN%;P}vEk)h!j z)HQVDv2rNP+kFq)65tQP_9Mad2hSWR@1MCOx9~`z*F>Q6))zysjNN+bURB+OAMc;i z1?ZQhlM_apMUBo0QZu$MUaOHRe^aKQlr|UC=pyR;TfcgyKvXov{Ful`e~MDLt%@y$ z@0Tg4X|%sb{Yu^%6{webLnbfHywocub@GD~=A<>d)!G=sLB=SCb$|G52%j~20w=&E zif|mEwp9jM{`!YO>jBli1b@1xfhXBI=LxobpcUzVKXQfuUCfWq-su?6%Ec*q<6XkS zLYBgbNVeRjb`vaC;G7(^X)Pf6#m*0-{>J~)!f|la&Kxnr+u2FqD8y8kjCeag76v;B zvI72q3nrn)_C{~#6=4u+Y@g@t^ur+3*xu~zEGLKu;5oy=^?r6Cwxvpp5>?u=^&pIe zhAc#O8w6OCJyh8ht9XXTZ+Wv{9;o7FK9w98xKwY@^8xR+HRK|+L<6XcDxY!5cngz3 z=Onw@C0nMB?*fz;Tr%FmWY9m!s$8-e42A)Um>(OM#c!2&TLIC4th62*sJ{62rP{mg zAHy$EP5b&%XY_w5(MTe7oqfZ4J7ZpO$~PGg_i|0a+bHmZ3Iy9$KFQ*3Oz- zOSvwufw)F%2YMcU*U>Sw41HVYUC&Gx~ zsoi}33U$mHVQfdGhRrBc7P1L31z6I%{|ziD=hXO)t6lYwjNbhXUagDu*vV6)z$nevfc_+$L*2HM;=QIDrO!?WW@N z>I9|4SIZ?kA{#mB#=eZ)n@wbGCCV-mNOPr^HrX(Wd3jNFfD6j#HUQXln5Hmzd9hN! zASl|A7Y-_><2g_&IzZxZum~^$nxuD-h(ds<&-oN1Z?PzWj6W?UCMCOOT>j2PhZPKr zlS?7Lnt=6+-+wU)6F`942ReRN>piVLhPU&!Es=K9goa;YJ$ny$>6VKzvTft{-ozkS z=j98DUGC)(^WK%e>=q`rwyJ-_v;u)%`D;)KWXCM@-icXgUt*Y=-9&WwuP04JxBQci z(YT2Sb$$N_CQU>e!igxsMD%q2w<*9)M3q_eD{l5-iMw*rRAd8!@vzvIa@b}Wa%Xd0 zjrm$;k6kGLpMy{1+Cmy2=CqIIB3CpW*bxa{xbk}p)%xaQcX$;KR77m;y|bEa zu`DcktI5qTr*;k>wp9-e!x5^bTlnu(ed1E;Qk}ASxjHWmu9BfTS9vBIxf^X!w)O6a zyal!1&2aU@%5_3Uw^ll(CWJEu%c%t9w<_(jy`C#PaYIohB6=~@|1vi~|Js!|jeV4I9}+S5 zBhg^KZK9lSdno7I7RvdygL1xYpqyW${gVfzgt7Sq|55efsadepLl^q2NHSuDxML#J zMSo_*OE2Jv`d=PDqvh-X=`z|C#*D+;4syVeARyzY8Or0xbOXQJ#QY&2zJi&)QCryc z9imftg}L_euS5C=)_5P7{xEB4xt6*)m7o9r=uo$RiEfAdnYV%xV3G1J%1Lt4%I}OT zlIVts=rK!IGZ8WFV6f)k&5U1kod5U};zDfU4UX2fOw4}~!u z8GJa8Vj^Y+sVA~CQRj8zxC&1Q!XUU9C6-2j9dFt5@|j@pH4v-b>wb0(BD8ng$DB}0 zc1tes(Ld2XGLx-F9fsEo5Wr4j<9eit0yKDYWW|#Dwp%HQB-C({tYZLnkW^YX;;3wKkzEP-v6PXmRGcst|hNs;4P=L3A}~9 zbQoi{g*o7Z^DHpk2_Wmz9;!=CHk=R#rao5!P!w*4M*{g7Yk-KJ?ZWF zIc?6xp2)>+M-ck=H3rmlftbD`VgfI>3&bS%?L*nt9gnG|yUJ<^)5-OIl=}3sK__86CSMoF!j4LPkIkaNAQW&{qz7>iq zM5Gq^LgbbjD{=mL1!_K%Jvy~nc4O!7v84|5Vife+g2gdfHH$gbY>a-)8Kz^J zFR^bNon+rIAQ`3&J^2q^f8H=fp%f&KacH&#Sp6{rtm_qM<&8G^{d#6UYDBN;O zxJXq^#-QB7thtiqHbb&Ck>Kph#cn(3{@cl?CKuIOJ^_xh#!R!NK1Zz;ov3-zdK!CN zGmHa!-1eA+_kD>kk(@evg@cvUoAaHAM zkWMwe`{J@PomWQdSFOcaZQ+PkMZe^L;^21ldPMhMK4-Y`R&4|K?iv>VJgC!)+x@bB zUpX2IM|QXQ-mbqQ)>fU}+Ux!V#$7VkvcSu@)#O$wBk8i$;WMS@B=zWPed5>ECu082}w(2GYk}V+B^ZQ6b8g5>k2l9Q1BQArj>`SMJTq9Ytg_Wy` zqM;*J6V0ILLCe^uL_||wjeSgq)$L0>YYEcsf?HA@weMT`F6)U2D2n6q%cCyky&?fq#9W^PV&3dAzA!MoosY9{C9++n1#jn9T*!vUdIY-JCrO8D#@qSF zVLCLP*evdJpOScYPHFB$+-=QEeG+`1QYl2EqBR$ zgcsshe#Wsb(q6%TFDgY4h*S1FMhP$(&|2kS0}pCCG?tK^1SWJaH6J z6@WErC7}LntYAz^5-j=Dl}>{xD9912GyV1moK3-p$*2k{u>#q5m1O3ina|6g`7rs9 z6O{r15Ajr)@EA{ObNz^2 z2)0{8VVW`hJl}Nbt9HW{?IQ@L&A~K^`NF>AB;)1YeS(6Qef#pfp)Z(nvuteUEvyTK>ZBb$l%YfeP=0pcA`UW1Fs~4&z9yfwVq!vKPZgno}4ME2Tk( zRkVh^7Pf97CVsCa-{h(H+WhN(aDlIOg1Y49`P9W2cg<2&yFnTQZ|v7y$h{Shx+ z5rBA)1Ei0Et3#UUF-t-FZRUYGEk+7@THgC1IT;Xyq?+FCPU}Bq2BtrN0WwImk$`iH z#tq#{_1ok`w_IGZipHPk|A_a2w`fE;C)~3g`%DTVRG)2CJOw;P0_n|Q6UqmVhPO8I z2E$k(MT3Ny-uFA8`c#uno&KZkgV4c!8%^daU=0n(NXtMOrfI-N)%Q>Q50mNy|Ei4! zXsY>A;(lnx+w)%`Xku-yhdr(0eZ9@H&{Cf?6P=n{rSP!%dJ9~R#2bh@$Up3H(uA*W zRTUgQaNkRFe;A!6nsU?bmStW>E%nwg^{8`NU7VpaKZS>pz??n|RCvAWwi}|f4F(Fm z;@sg0Z}wq*InEao2SH67iF zSyg--UXS@SKY&ki1HhYo8o{a-*|k2049>~yRuaijoE+r?CA{b*ALUasx&(@Wf;fBa1F?-yZG)p$g+%-fVakhv_>9 zZZKM;+d4v)Djv^x%0}~_x+CQ6=zDCgT?Ai$)T?Dk!`h)zR4Wbqc00+MvW>4Z1ElHb z_#&|2n0tFAHn{C9HmZYtW`8O-v1`G`iFeha&Rs?-Fv#n4+0Y>yc9on!0d( ziAy1^Ls*)ev(muBPEHEin#H+=#Q15SD(*2@D{&p#()oaHy_;vPX1(DVp^&O!heN|X zPK5t^$^iQdVgWqg|2RbNznlN!g-jZ@GPlA^9NCII&8EkoU#;;c_uYL+Ee!t-emiA} z6I;{-KuQ=xpP8vO5Gg4p>+JT}9!`36vc3)h^kI**-yG zWr!APEYYn!8F`;}ld`Oaa=3-ihAZm8Y%u>cIoshBq)0}`J)#e0=Uq?s@ z2hwPj(sxg<>Ry;2h?1rnKUr-xyjStRD#Fj&XwEeym4Ew>jG0tWz{kbMWYfiy$ z7S7nft9B{aiER`AY=?nyZ>};TjcG9;0TPo=CI`_0|MAtP{U8Fuu~pW&;zB0>_3Q=2 z1=$^_mX?I#0wGEVe0BDOjNqcFlxV5br=%w0(fns9p3ks1uh*EL@jYf&_#VYMI&*Xs zuHqWOrsM6J$4MC%TH-=M{5muvID<;it2NF67<;ee8fs~8{#ISkgx@4@_n+_a#VUXwdXhrCLVd(@Zw?v0CG&fEba)MtE>3L94|67 zK1hRGd0#E=7hlgQu2iL)fnv6ax~LCp)#MNhUf`f{td~x>_$oTV?g>S6Bh353`0m1v z6LW8_+%#)(Z|*uj|JOrj3a0L(9gW$WtI+!O7B=ByhN0g|Gs|>N>-s1_&X47m30t3w zjvn zEm{yqrM(b<##+YsC~qc{PqFTOCck>m)Gl^_I!hjqP<6N{w}Rn0)yU{>bb(}grS@EM z01BcfEzn)+W;_D|Z|+*r>CGGkOElvq5Dbyr5Y@c)5h97H4J1Xbr={%&=1A&-KEZYMT$E1U z9gm95GAiT?#m=K_@GCU?&On=^jc5b5d2N8rYkNtF&}duUv`f!zc}uztbT>Ngubpkj zm2HjfY+J+5wxyQsQJ0M`kJ`SwBpd1;^=|ucn2jZWUfFK4ZErWR?XB9fJ?65Z_Ib=@ zqoI$nj}CMqk2D5P=?FqcYDxav@1_~oMGW)=ZXI(oH;;2GQJ z2e!>ln9-iNz9+m|R->6^;BaDEa#^(#EtDTJ^8xZ-29~LRm5KkC_z23=+#o+b&_XSu zNm}{gU}0sCbwy)-%W*g>PO2BidWoswe=Wl*z5!!PAw{$t=ZG}Qv*i?Ek_4QEeuC{Y zuxJZ;XiI`$s6zeKKJ-|kNj9Xs?0Y^zU-Sh;r4{Us& zuAeG?nmt_`CA^_ouKG)M5&CO(0lj!4a0AF~y5X2t`+YjV zq1*sX*+R#IOXGG#UE zR%#*1=oYcP7fyl&h4p~V8x$t(^f-chgJwnW5 zDSn=$zD~WU;;p>+E9Q~dnQ}7UBP`@+K)inwNYDI)B!=6WHj|`ZHc0x}g0L$wXft@hh!P9!*H0=HVk4Cw zuw?z~iR}o#yVc1=lBF)mH9%@R5rH~pQzuukFkMPzu%4MwXtrOz*V}t1Xf*94@g4SF zdm<78P8(SwYP+G>pUsQiXJEa;;L6+}dJyw5=BtZX`qq%#STLP4F%E`{0d*sTDYK*1 ztA(RLNXn#ZUHU$B&&8%)J5KaAXwT;JBtil6E|Wm|6$7n`8ns0y!;!1nQ$!gn?&H+S zsD0PC=Z&V2($+FCA`M^uCEa9f6cJ|mmpS3h{OeO@S@Yj{ka0m9?$RIZc@G* zb0r0Kt8sj@bEJp8-nTd=V&l)?&?cuoMrYs4I?i&DtqkCwGzsUV8r{7wd9%MYaEa!l zDDa{$I>`j~gMmhEO`l`Uq0^kPZ6-mtRcDbVql=k}=%-qXtv~T6)6_#ucGf2unH}74 zxxwdc07SD9$<3#-K=e)YjXTZn_h1hr~5T+#=ccuyOk zHAM23d5c=cyRn|k&o~(5nM-u<11B9$|H5#3DF4B2|G(n&gTg6og+zoLGbPymW77yi zdVKR&f*W4zPb_fk%FXFIv<6V#2w?eBhDh&Ec zo)JDBF3FOyc|*tqiH6K)&OxMB+!sXVUmAgi$hGX6w{y@q(+GHTn(2vIkHaLn<%*;cO70;CV+;Ypx6=`4g@tXW>81$m-g zwbeeo)J%X`jG3WNY{@Hy|1W>HERUE_qpkmZ3qXv)|0@X=L#kc|tfP~G6 zww01+dd#>E3wg>B$gm!OC!O+I;pp5+chqH8q{>IGIKYE{KV&ay2Bv0zi36tknBYg_ z6zh~SRy~4)sG*OiwwWsr|587j{6aH;xo^5-j%Y%35oU(2JLuh3Cz1REN8BL0LV;xm z^M|(@U6^e^+@T1NsB*pTQ(A^_U`7K2dIhDMS-?QjvKZlE_DRtN@*tg|royI-I`UFh ze|yVYpc8M;Ux^TBf6LqRKlGx$BOO?kB?5f{cv~UMhmOMyS<+(8-^VfZ>*t@mNW2;di!|Etbp(`J-}_Fc@asOO&pz>9jmLA;5Hj^$Bk$j z932_OtY(?0;*4GB=!0e>BOBh4;`$ERRM+WJ1$@&yS2MQ{v(3AzXg!`duZjngU*eQhiek0VpBh;FZP~SZe5^AfP#!7^0B&wE* zHleBJiHY`GG|jPrBh&$*ek+`0zvT!OLNP);B0~LfNT^>n>O1M}`JYCplmYqCnIbhx zqctngX^EzHN;Qj#XyYx`&PIM2GW@PKou!NxeUBBVVg?0Y#NkAveWHJxXf=@Oz4T%0 z&T|NKD)rWr$F85E-|OtX!!kh$lD0CUR)0%`H&LreTA5pFLP8~`M5v^@5TTOP5vl;^ zE%Rm)Dl5JTLInT_6oeU1e(6^bDp^kf5&v&MsLlT>q0$}HcOJPy!c&RWxG5}LeSOFf z%K#vi*uBjO*gU3EZb-H4sY4f{O`_fhLaNOxfcE#sO(E4nl~dU3xl}vvT&fimB9vcA zwamar2W}P<9`I@%wSw4?T4{JltsB##)TKr?^lwO`j$RjuIN&W3F!|I=E}LMepG67* zs8s}-etarHu0QeItA)bgHWqT;u3Kp`>3c+tVkCZ79XT2JrjL;%L;t4_m7%t=DV1_fWE)*-eC{Kr47J1bQg*sjnAjQxSTk?&E38O~&THC!X_Vgv-dWj6M@@)CW&I`YBG?BR_FYpG=1?fE5KecrnHT+LJ)8I2 zz=>ZxeCQW99^ouD*;$MQ_hF#t>v~IL?BDExsSx#T06v-6 zLWO7@<5c^+8RD}zr+#fD+Yt$_jb=NdW-d9${_gw@$&XM3lumLt z-J`}m67FG?J5t)4?jjr9!)yfRqDVC~yU14eNV!M1d!*eX;~uNrW3_v%b&vJ#vB5q1 z-D9hJY|~?kgQKE8_Z~hBZI4aIilm#qxfZ1rl<#q!0SzX0z)VC5ZR%_2(r=@y!=n=F z;btKeo|(|M>*;P^##&$99GBuPE}1jlLtMNI`IJRsT#C}Z>Z6R{4vlO+93`wR1Wv%}poZ1Pzl1!KH-Bz><)%v)r*ez@{DU`ez=o)G&Dr)UxX@~C@_6S0@f_cl^{8Oi z(^17LS6m9$yk7*wK93=DHc_L1oJV%*M{aS&`;!2^q9@9R0O61eFA7@cFfWC~beC;8 zkf|ezcRSWCJ3ef#CVcOTX4#%vgJ!?t0RFJ{W60;Y?TqaI9;6;j)L1zdLG8aE4xqwIQjcf*b zH{+^E)=-tBtN|CY&G$LCeV|hdb~=D&`k$&b=`wwz8gF(`|0cwd6Ks3d%A@vCIGxC(l0W>eCK3ax>Os>ORQG;QzeAa9w`+r_UP<2tm*|kdQqzT^u2V z24I5pp&mx&MELkgra6DLTIv=j%omMRiu%BI_OYw)Ne7>nW2j0*m!_rK(F$Cz3N`>X zU3~f`7K%U%@)(8&_gO-=hAB3QFg6>0w+YxO`z?F&*|isFQ{9v{QM={$$zR%RJ&6gZ zeX_fi#`iIVR16*+vID zzpfqNnp-!V!fu61UDNH={xi>;(xy-X88AJHQ^yJ?-~;S{54fVbm?c|ix0;HM*8Jyg zxBxmPHO;kkQsZ4)g|JDMD;bY#pQVx>0Hcw8$&>*`yL>`oB}W_-YPjA7>_}-9QH0TS z`|50MB!Nnx@;=k%@jO9$A%zUxt(}dT0U=_Cu-XF_v;+bQ(xGuczeL}wX1!T4oCwma zU{k<>{Igj*CCtc@D1W7!d$0|Wx{QiVpH&p3V8~Oa9|o(F{#J96zSuV7y7WZGwbN=BD^fG>{oX_=< zbA7OiTaF~1$dELVAxPmOjsr=DLfM2JGYj!Tx%u*7TJZJ4{(HstMzf0Qe@T9Fj}sv_ zUKD$Inh25GD!1b%M&veRa_N}K&`+j%d-50mm)GQKXdd6^k-IDfhph~r92!=P$rz~~ z-b~EMfA=2SK~7R-q2nZqBX_P#5Hqora+fOEgcid8dlEuV9cKQtwkmv2gp+ zn7_GHMOZwCTY_uUh1R>|Yqk#!I<-R_1V&t|#c9;FvQcUOebj_M;VYv-Dt0BiRNCMI zHzA2~pUa6Wc#U#`IP#4$Y@S?^?lyj`fM?&tSSQJkub>=e5hePz67i)YGASjUU@5AY zI0sKrm+kn0UOBa>Ed`-P)QB)syl>6SM6d<{Y?^N0rUk|bR0LOr*80Zy&+~uWG$X~V zeWOGj;a@`;VZk)HT~MHnG4po9Iy_Bg+b#WlVEZ8dpC(286Va1?FavoSzY`pW#qEU2 z>r7nQ_yOh^F#sZ<-1(T*29EKazQ60t?`PRotU>lbDzDMv!ROM`A@UXOHNjp{r z>#&tOPhMQuucHt_eZUvCtUmLTXHL5B zaz4|V-+d#(jkdDx|AI*6NY0&sf~uQS`L+5eXIITQOL&K_>TRPXwlg{%anl^>ihg6@ zlbY>1qTmG`Ccn0rl`0hsvo=`;N(hLly3MB zBU2D<6Lmi>>ZVc-l1n5Ip`|a8s{$rnGdeeZ2e$E@>O_9m>dVT$!~T9d6W{2PLpO}Y zI%Nc>6^CGwR7E>~IE-uT$Ed7S$FD3uF{S*WgOs#vSU}f}Uim_HMWob1n$A1zuENRD zNSS^`TSb?l#r4VqbgSdqzSfrh@6&2uPDt3Pv}{-hGm#V3tBV=tFpU(i>_#%d=+nqW zM8QpvtzFcAidYoQE!yw>zG{oASCmqD%gz*C9)ME6{AXU~DWXY)j)aKcN0K20hmA60 z{2wQZ%Z-+O)3W{(egTNg^Z&fJ3g<%HSMr8<+6a1sy@vpF&;AZvI4%kG8KuSOmkjzD{PJeop$g1}1UiT$#uLhX22_mU0JIBA8i7x;gfJY94rLn=jwL1(~iwr0HaEkmmkr^#s@*}*M^HpIkDVZdF< z#TANGscjA!{cJ7naRANcGRZ-gB3R0xjus^pw``*?aS=|Pgr3Ac+W{57rL?VMtD1W5 zwvLu_w{^7C6bru}qMy30<58>hVT;#@4!3n2B7&9E(y&S4mJL`{u`Q|mpSdLUv@jih zKX*&Vpi6Se!}KDT-8dFMvAMVCjlyk24dtQ#TYbqC<%HX>=Jpqx!!-KYFXR6=`PabC zu&u@45as6@elkA=1Dx3=*eneXF~ScLIx%TQ*AfMdkVu&sf0mGeUa(?U?V@%as0DYJ$#JNg_e$M;=gA>8;^8b%e^Najbcf2}*S%7*X z2|R~jBwa_(5wvaRfJo)=bO7yR=Xl>R|G01|ag1--jDktx(fo{$PvsU?hH@hhl1s3Q z+7NB*i%KL8j0u6r8N@oQgCH)4C5Z6k#{F~f0+NgW@hnw7!LF_n0K1o+2Y}%^ESA#9 zZ)}PuEDPC1mC{hRQY98!NFC_vFdgqY5ch&)21?Tz!g`JVX!!FSff z$Uxr<8{g}7ALr#54o$m{@bV(a-S`$dWsdx~Jm&r9VK*}saehv8alhnZ`6&o*L(rL@ z7z=|h{0NT}$vX4dovdegu`tjXPThhrGDG(#EH!_(XE#eLf6%bIt%~&32)!;%atw5r#WZ# zB0y0&^-_pwX)zB20v=ZqRrsKu^G#Y_$AA6T?z@gI?N2nIcx}9$Y#fk_srpv^baR^P zjsR?YX1Iau)pMQ*ep!KfO{y?5)dm%dS(z*uX>F`hdtiORoQl`b`Pm8*iVKbaVWs}j zd3RMy>D^T$rFT~X*I(q-EhTvW;*yg2l{s`jx~GJzIrmG<3PvCPi!Xlhi?6-BnEI-M zi=X*%#nVgjo0gs_aD@OxdV9V|s^a-!wv2J|ujVt6zpi6;iy$hg6}-0UdT8DyD{(>e zXIlR{LJA@}C(=nuE2ir%rHj@D7hB47#nX5Yo=CoGQgY;L6)P&B6pCG+_rF3%R16)e zD1ewILArCf`lf;EAY-R;(T|5QNKV=Sm#>}D5X?Y@?KW+|v&dLuV z-hS}sgSQ|2`QYuRCOcmO`nps6EF1G`wb6FTY12w+f$Y{(^d(bYnsv)@-tgqb5}p~6 zp4Xa7S~H_AW@6|n?bcifl`a)Dp>xYc&m8gJqblvuO?TRwYkdL%EPm}6KkH7b^0NX5 z@!RE28A!~?%v@4-{e}P_a|yOz1%zt>K=g5xKyq#T_r@s))3dPG2jjOl!#sAY)WNl=6#3L0Z7{J%n0#9;L)@jR48 zg))xwCLpeP=wNu%HFdtNiUBpx+n1OBL8$JePRj^hC~-bROqAHfWtk$seM3rwgU)Qd z36@jVcW*p?TEp?vk>B*bbH)!c6&ZlFoKR~ zJS>XM`DU=aIr4 z!iDkF#mO9R=b~b;4yV>Q#16en05$9x zI#e0NW-%OV8ID}RiGQu64acMn$D|F%qz%Uz8jf6w!*Jx%8HQt0!*K<}!N2L$WU3>g zhw;IVO*vGME`VP*;1~;2XiTJP!__uCyWuFZo;)N=!*R`phGUn8<4qclD>NK$VmMCF zKc(An1Ps~8{(Yd3*Es?b4HqCU~Gvp$b2riJ&8NmAjA(z@okUA61Vyw0xL6l0+h-qMkO^*uKJY+t#} zUyQ#|;IR?U*r7trKulzd!ilW?jV7|rDHECUD(eOyw&k-clJ{m;Boi2Out|QmYY6nj zxS*S*6znCoKWKexRmF%KkJs~+)2z8`t1F($FZc_0hPhE$P=44*O3ZD&l#!HBoSk%J z#;025Y48-&h^pK<^e7|hQbrV7$$!@bw@f2y-8my_f{vGHXuWA;>fb-bX-sK~Gf-?2 zVTcz8-ztbO9P3z|HDcTtax<=Wjr{s^9AzwvGKBo|<~XQ3#1G?&am0k@0ApOm-lTE$ zdlwp4*HW{a*xZOpG>Jakh!O!nWs(^gPmM!|8Z?+1n_3Y0_qc(ii`KLx)IbXVf^#mE zLOz@`Jhv_CwT(K5y2XUylkePf@w(k8^~t4kUYffyID_K~DaIUwbTo;wIRgk#nRn~G$+gyXvGtzd@;AlHyNT`1K7X{SP zxCO7uwjB!=An~^y$9*b;z&6mB$JJzg=uP!B-c-3??z-s7_W=3F%%y64XngvnnGZ{1 zKY20t`kkD?53W^76?#{FGL`>rEpKj?WwUAA+jAdjKl5}0eYPJgZ2AbR$Df{0WDBDr zvVVoZlr5J$+&|x?;WTcsYm>+6T5ea=LKDa5d39})4z3B3bZ{a_(!sSsk`As5l5{YA z8(TDVLJ$GpZMtuK?tsG+IDlPH zyhR2Fu-juzPrIWFpZO^*5wfm64_R*)M9EkFt(aO6?PwYq==scO!v;ToJxJ|J}H#&JxA)!BCWozJ#||3tPO{MTmN!GB%09sJj4+v_Q1 z^TUAqnLV*dI0XJn}#NmjYo(S@lRie)+3%T~&nv-JFW9Y?`|;RC(YMW}q)=)~Yl*Ly#ErYzNp{@XD}b zo#SIUY)@$Q^aL#%okUwjJ2CW=Udw#urxD-$t(64Rnv1l(w+~vg-6=@D+Ch0$-}-JC{g=wGDp2y_FtF-<1|LwIHa3-oqvSfxXO>)_Tg1j z9N$32@wHSOUj<J^kMx3*EidHigU9JaPKOy5Bu z-N}zm(8gDF^RpqXV1}P&6FTJ{hXig9B3_HvG?w4RX+Vp z$!A!)P`*-qYn4wwIj4PwopY#V`aYMw<_+=~g~`=wk;3v{Mk<-I+Bf+EuLFz` z^Y+W=FQj6V1t^Ut7P0^8ox%r;tRNbBM6c$cPWbnmfBq(wwv3j;hrJ?@(s`;8#DfOL6ZRO zmR?;C*KXM(Xm`@JJL%e;bnQ+ytJHjwp1*+cz{!ht-`6CI$G@q0zoKneJN{!DmhGB1 z;u^&st4{>wz3!HDIm_wq2)gD4@!<0ZX>#G4FKnOXeWh*IC1v0jQF>irU16;pkGyc> z+3#&1=XRznmv7E|;l^2uO_>q`iYA#a&}a0B-wOaW-=MWlnWCfBZ;C+s7CR zIA6)Oot|@sBHqbGQgY$eQ&F zH$M9GxSJm21+dA_}oc|Lpn*j%m)+_P9~UyKKurlP^o;K}Urv%%$s zC5hnj;K^XDu%t$A=Co;NXn0z#tAL0RngfCtpE z5NG7OD*(h$>?TK!E_`K%=83jrg(XTmkx+T;6o|V?fP~3kTFN{rxn?%E@ZrTuO>=qZ zc!e(qbOM>_PPkqF1?NR+S^Eyb~Y=zTUu8p z6hyCgz$L6z5WU``E^!^f%&qxS`2bD%WA^dQEB|z0rlE`aZF!NmMHi11m%twmQ-t3+1JFX z7LE@MM;Nqjz{H+7@ba|m!m-?HeWavEIgg! zzV;;zK{V?H9g*xJeEf4m)ah)y7T!Ueq`zbZtnZ6rmH@%jC16XsB`7O?ud?sed`I}E zQ?B3=U6Gi%H}4Iv0fxZ39D#9CVs?)sFkS!3Ik+N$tq_4FO9W=FO_C)7>k)yiL=Wu> z_X+ieHvqp`g;x~|M{ezfwly`2{kRU)vG zygd*8y-@o#jawgiVYzrq+u8iZzj0YvQ?j}LgD`Vl%FH&xJfs9~y&~{~(GnXk3^W&( z7}w@*=cnkegd~;6M8CT4^B(fZq$mHDwE^r1-DcC~*t%w~o!>I)Mc3xP7dM@#ot`kA zC^o$pM_RQrmb=A62RZa(-1b(+QDp0@B5EP}5ML}Hz zDuU73c7o0BGPMuO`+g0+q>oUTuJq&v?wzgSE=OGn^`SxA*lWA`Rg^1VoPDOoV_WpA zr&wbXi_Y&#aZht2iz2j{hQ)HJ%HXG=KQJyikG-`*drPDIi(_Mf1Hh6$dfk~q6hMY* zLIm?P>z4SnaJjxRGKqO>AH01JlQ+1a&a{|Cu2`}dr*pJVu@f0s)hLigX&JxvGzu*x zi|V&E3i8eYsWl1=6EHbw#1lJ}m@H)Evl11-DrT7imq^O8pd=Mw#f()UXf9I-8wyg; zVi3+U0Q*{_8Y`Vql9#Y$h~kTqVkBX)=b!^cVM@zIg+Lb~6qt%Rh%=0V9H60KkOgFY zovMl^8Dyc2#??U%Lz=92L+cYUIC!nbSU<;v&Ns(}_Uv0v9Toj^_d4fC@8y-VgA42S1;bGJKVypx()*E%4o=c`9B%e7d=EkU3l=pZAg z-YNo5khTzX?IT#n;aZ089BQhcbU&sBs101%>uUtFERFSgSw#UDe^1Uar@9T=tn!za zOtGTCE7prwSX&u>sFsnRD>=_Y@q9;I??gn|(G+~?+cr>R zg6egv$hrHWDGc75+*>&-O%e>j^@)|CQwd9o1xvE&@%H9mDsmy<#NdkiBDl>r*3UT&jUav*Tl^NM zUU-`ZV@Uiu)`*^aXF;3YWoK&hv*B^tNv0&TD40CL{foM_2V!B!|CNP z0hJsL6L3>gmAkbG1uk3voURP9{9JR`Ir`qUTRYLJ&baSse)otCr(coccbh4G_Y4xD zzY%lFfE-^ISfY_VV$u7^B(1@&dSx6|XokX(8TW?oQQjYL@9gfrwI2y5+xkJSdZ+{Rtj7lbA{WA0#X(OFD-g)L(c%SiiK zVLi9#6xP22PEr+h%0(Ru+K&~s9I>clF6wa5ez>q@*rE=*s7HeKM+#dWu&75|)R%(x zFBP`jXHj2rQTGPz_ZGJ7x2Ss+wX%2{T6lhm@zt<&?IUf#!gfX`b?DR4Z72 zhm%lA{@I@wim9tfT^**X37?7ZS!=2PPN}1iC1uA*9Sgtu;j=P)R$1zOq((i%3}35V z`qil%t}XJZC6^Xuy3r;WT|2m3DTAHT zVY8kI^!ax7vxX_wmAMq!Cj9wFz?6CAZjQ+9eE)Cf{$67|SgwoXf~S}EqbheDs<;&^A1DuDHLMi*Zz5D_^h&3pom>gb`Pf;)EPElWbmor^WWK zO(-w2qg7-DRyaJN`TFutyAUHMWeH>GS`7(=kV98LewfylbDUN}a@sB%Pt_DD_| zmq^9vP)oGn?f!dZE?3{2cz{>x>de2@)n)zu)YAO(#Gm-j?qeqZI-DKqxI{$3$B)uk zC;t=K*5|+HzL3q$SxfVOjBI)`W6fk7kZp4dfmr@;T%e&>Lo46@^VbXO%D(@~KTh`32Z1i@Y26rvF$VF?0<~5dW{yvXIW!~=Z63c5Bhd6&E3_rz>ih6=) zaLYVbRLz{>a|)AJnsW;awx9KO{{bIddAs+h2=r<6G#k%FD2pJJKQclYgHXzrN-LAa zJXE9=R33#?CfGiX@%#PKI$xs!M#hCPwAKvZwsF*U!S5E9q*22c?jEGwY`GulLR!w)vh=0T!hL`hQqLe)R*}?*t&iawru`pPGUh2y>ivYXIHecrG@Zyzr3ea+|`Tt{R>yPduzGB$E#L73b6F;P&dWkw}8C(lfDcX^Zt@IXnoD z9Z6=~PLNglI+9!sv7uYQ0@}QYIm}r_w=Gq|X!V~Gqfgt8xG;|}#r=BKrz2Ko^xlb2 zmBmlByim#m6Q3T@tCkBK+d@QpU_L9N6_xz-XyufwHivW51Yj3j%?%WqGnnKEWETZ;J6 zLSkoJdNB#iQ^aqemqRgid5WQ$-==8XOK4kSby;CR=RHeOXDZhvVX*Q&6rO)@IbAsM zT{td&uhsX@PyNm;TKfLm`o3}McP7%(_xI}ilBwUBP)pyh)%UCTUNn?emqbwL19He; zPYSm?$4G%4IBR?IXI`4R_7J_1zPLZn5d%r9dh$4IW0V;R_bZDc5odY66nNo!}P1n=Q_$RmNrB3)GA!Q_ zEUF1sM3IV|{(bJ-`!8=EIuLDobmQrjD?;g;0o_}(w<|XIa(NJW^!Coi4tX#PCHtWr zRWmj}%gma)e%!3Q)iP8yLpj;@)=B9M9R|-U+;6OzS5|2W{xYL|hjp=YsIZ?eAN%Ad zZd~c@9wl<{<{swNSpO3Dbst}Y>x8wB2IcGofV|YxSG%EowcNj57h?_6S_0)d17$&L za3H&&BUsRyUC^1`lsL42VsYRQ4Ccu$@qY6qhZgh}n-!(r-m?CSgD3OL0D>n(-hd%JXTT5eNwPwu*o{PX?e=G^d6il)T3$b$n< z>1cHPBD1uUp9LL6+06)jOR1`Ffqs_O@Z~7~I>5A)4P-J-@Q=!;j+l2Q>;?xQK&v}C zfVm0-L`HW3nh);QMB*eGp|49_nt4(F$)pcrff-DrYlE-<>dw7XWQL~2`W6=@3p!5% z7FuvrVzgK=7-D$Wi98OiNQApC7L3c}TBWz5xnA$|P+(t)l7aV#M6~ zjk6HLYuWqXu<2vu6o@)_`RmgkR1aV*&ka0KZ8y6NgF4y0%oJmO=?~=JkI8{sa*gYk zZoIapHRqrCx$gF%ed4)^p@WnrQn9EyC?tj7bimsxg+I^Ldg>@@cgX@k=fzi>0wO`r zm*p41A_s3ymyyxnSY>6U_;rpQ-3^%sf%hm7itHsBNGlzF- zsXU|`4(u3-Io2YEHWpj#pjV5FE+{RLi!Qdc=#(-GgLK zfkp{}AWkhp$=aogLqeZlyO9k-VNWVth8Nfj{)*`8%9Es|S4aglRu100xU9d$>Y#vs z=Kn|h%egmD6@4RR4wC>G1&+hnEL|(65?yip^2JRwQvPTxkh*BA?z9uMzI^zoaBX1( z!_aSEJ^zjTi@W8WYcsPu|A6oqrLGS>F>_OR<)LEl#J}K7ovuqsMOo^d{^?vzVl6Yj zWwf(aeoxHSB6|x+kSSM0$^UtsmdxM(_6u}cs{vbUu0E_|@^)#9y&f@?OuCwE%&IpU zVIWiu-n^vPg`Fe~yAVRvf!QDO2z@%4qbYTq>q4+j=YiYwYE5VALVlfjfSAxHAYWiF zq@p8ZgEucN>u<6;C{|d;bYxu!rHMM!jk>>Fmn&ze`rJYXZ|*MZpC9~x?7a_sROOXF zoR9$q7@3KV7;UuCrfn*zMnl`sq&6X$NfZ($fD_OFx*{DZb}`HZY=H)oAj9RhwCnEL zzU*)L`Lnz3mUiu~D0XR^0L?_D7%kg^(n^)KHzsXkix@TS{J!7w+Uhl(lV<^ai4p>sS}=G^Cdf)?K2Oy69o&tgM{BBb7ek0%0&*pF zXNNZy;J8(3|AQ_>e}FsSUX|1RVziKy7x~#_JIp+^7#A;sz&GKBN=)oGfRv`GRfXiA zdP|lMK8$<}(Z}C6>e%egfyLnMHA}O=i~Nj_&Pdc0VL|w=VlmB8h{D?Vjs$2d=!p$*wCtWyp(5fDqI5p2~yb z4gzrFrTlqh!xdQfj`{xUoBSQWm{iu}M-EUUa~HeYKhk3Av)rJ=1|0t7je^OZp}BJ7 zQ??(#$21pWF~XP^tz|qITdVlsbp$vOjQ)ju@L|A@nHPG_W|3F% zmF$oYFNkubqFVV1L41Eah#0?upg=v8Y&uw^zGT<7xgeAMvDjXfq(VKa)T3HG>eQnF z4`?5g_U#GsX<85 z1>lJ{3QwG&h;9xF`k(wJIaT8^fe;m&Z3cjFj z#IU=wA{S*xr$J&v-W@DnbwTIo%nj?kk9YKJo$gB(ckjWYFX+mBG}lbh7o6h!nC$#; z!K!^Kne$_E>I2x=$t6OendCdTL^J2=U1g~AQ~0|He=Yc1g};07w*`Os_{+(il;@f} zWvcnlDz>SPt8^yY# z-2VbvZ>6Uy;oMrq^#BjlTUV4~!vO7{FR6GzOqeLSDaK1;OF>vbhCENT}tx>u+Z5=>xiPqpg)CxRa8zi9Y?x_W~A?Dnx&;?+*%=T`L;@EqX|g4u<ZFN4g5og6L2t;T*y2GeDFg`BZA3S{J9(WFG;0w2BuA7M+25*QjywAAXub1TLPUUwQLy8orAN`3C3djN?L;$K%Zy<`Brg) znzl>EJ24V+&IIHN`g5K(S87FONuo5zWib(=ck=J4_mH|=+ zlz@PyDlG_s#wrjmjHy71HVL%kg4h~D44a#WrEmf*8EEbRQ@ufH)rrS#vCT?J+3ErT z9Do3PBS-t;wLanPNH&32$vQM#0o5yPw^ zSK`18g*vv}l@mo*`I=Zj6Uw|R2l-jZ(x%%`Cq#ev<*WFbZEad$N3W7-KciO-O+f;b zDCS<5P2PpALd^747>~V~pJQ3wkXr!UR7}MgG#6|?HaNls#TPMAeHwhUK7$fz zQV}XVX<*VYAjaPWvlJb*sd#A`m>5-piCzvRLs4NhtI2ALIW*J^X3_zE8sHViEu$Gd zJ2+L4&=MMC!VXL;ssL>%Y(g&ku`)p@R!R?w!&7l;L@^4+1T{_eDHpreqJ~A&p0xVP zj91?<>$5uQUR58Ysq82iiWD{)<#}6vgMRuU5Gjf{DjhYT$^#r2QFIe6N-l*d$5syM z(@GppeQ~-JLw76{z(UDg`-$9ye51Hqky@}q1G942#6fD6suL%74(MsnvpaA`rFbaV zNQ~Ebw%5$e!cQ+ru~{~Yg#73R#c!X3f3@R7S@NH-Id@g$iJGMjZtKXA6E&f<@9>(9 zApckOis&}D6ofd6UlGzU9em*>36Uo6oQH0JIHKKWG=keDcT1M9S6IBYgHJkHJiu@A zi{z_yw@9spE?J*k%jv)aPm28$2 zSo*v~J-}}jRg4fCr}BVT12aimaX~+wo+GS4!U_?lHG)bnVi@kyA|3A1a$Z4a(>__7 zBk-#`V~Mm2s#%Xu6Ty(mutYtUszB*eli|hOHJJ1IywK1CW0H824f%Gl-Sn6 zcl=Yzsp@UJgfNVQ!hcGuRlPkRAq*oQ!+(iwC-x%w^zx)MI5%i5|CR;K-7_J)l}CdKIg$hD8cX0WXJF8#~IGAyx{n^Yb;yuJ!A;wzdSqJ1li zFgRi{sMf{UYJQ$U1T(bO*YR_d-UH+${I_Dx|8=?y&^MH+yO=5Qq17+p0<2%k1z6vT1*p~E7KeYh z`c*K;pw&m>HARX0JJ3A-OWfb3UhuZvdPBz}rq-n%ZazAG&?jH_TPV=m^+R$?3!{C3 z89C@fIXDJr^;O)@TkDI%&AKFJN1SE^dZ@L&gr5dK(L=5Eq!8s&di^H3)9!-J-@uHJ zF7V;OQ9#H@NU!(cc{-HbuvQNorzF}OB47L>4QOLACMO3=uWtw$ub=^tZavV`v3W+$ zcA06Y5req2z8Dqa1^37C#gWVB5AKii)6GwJbeft&xkK+WCzExMpgKgIC%~oyJ0yCs z_T?Ttfmvt3!U27OL7ie6=GS6Qtf<*<-mbq#qK+T@5Wkq(JMhaXC^L8iwg`aW!yg%X zQEF&y!EBRB)w-}w!vtu(c?3V4V6Ba#0Q2TC{0QmR=t=J4cBMC-#<2kMJ2WHED4O0| z+DNJ!*QHTV{>|w9{6~Oc6~5#y(J+OTC8RqNDL4#!&Y1IsGUtmp=a1sPj+uzQD3K@vqKJt~BvENvBJbn( zb2jr3B@~GwVe+e0n9M5ynRWIo7kDkY-@>RSd^pbXhzeq!wk0Zr zgOT&N(AXE0fWr~;8pfE!VRUaZ$DL@3qDS#TN&60vK3ZRxSH9pTq>`n0CZq>FAy6^N z_O&g>+h=$?+@2Dt@zegk2mM+3ljyZLW4Z*JjegU3CE)lIOoW3;96zb8q|C!Ew~l|< z-#Y^C?OQoE**5td5|d7Ea0&P>IHrVjm*O1<DuGByD#vx`5H3SnTLVE4q%+7*e=aaYSEZMSqadMT`cWW9Rl- z(NiAH<5vtv8?cu4{^Ih zW3)zTjMBo8XpG{UikT{fXpA!I6q%SBx97)p)Bu?n8XEFwy?wATWKFmoHNMo~tMzG} z7url-QP`;b4=2%VEf$r&8F%PBxQ}+2l?KMp9-PP)2-j9qsJ@CY8FGvwD*Y0?M-+HD zDe#V4;Q5vDA^RQy`Xe2lL{N&xaYS+0c=+El!9selTp&g(gC3Yx#8Giy(3cy%UTg9L zz0M{UHE-@b$SUodJJ?`mA`KPsk;Dyn72*o7DF%P-LOn3Mh7;pZj1(QwoHJx`oO4b!VoPxy)kP`JMRgW_Dn4=yQd;pgzx1(5t`75gUSr-pB z7@tC%$(0odSC(b`q|F$=rD5arqglpJ@e|&br0O>!RbLZU>9QXD!5@xD=UR zM1sE97&}YplJA01hz?N%T<-KEyOVi9ChJ%%#Xv|PD+)SPjU=#$frUzwD~yGH+{vi5kPwwf1nClPk2iphHiZsf20&3hs9|DUMQiIvj8Th z$ZBmds1-6thY*0j^ybwWmphtgwhbblR69_5I%jlB0vw#tan!PU&fq=;d6513Q9>-1 z`Ib#Kfj^00>}b?YYvp+qa?y{I0?~sAzO|xev0*L(P4UTiZpiO=JvA^kwl1khjml&kD#ROm^Qb951T6(=8Q{@-p$v8)h~ZCaP(iI}p;N zr^b!Ijv zeW=jj{4K@!Sy6(Y_EHiB%AO1Ecfuqq{EvXihI|wy?^$y4Un{=|hGb^aYKXpmW)&q_vmUBLd$T100p|+b`cx>gzT1*UUm8 zjh8}EAq3uj<5&-DVc>)m){&4eo!nOLHgObI9UGCI?QesABR6 zflP(fDJ8TB;gsV676!nC)PppiMW*Q=B;ZY2HGPE=>5v3G*w%t2a>9Gp7McixHh?0r(!v=e$BaDZhwM|LqL48IGs;5v?*X=# zZsXus-KHHqv7*|z^UX9WJw*V8*DM8naQa`A{JmNmV8g3G;H!xObFFMuU9&lFo(A3D zVEh_4S1bzR#ZgiY3kH9Tr%6v~Hy2>e(yh5kPBrVUS)oL|Yr!yRhWZAf8R{2EFV=@h zGZ;Sv0ZCy}qdPHm7obnnyB}pENEcSP4)8TM4r6hUOvCUkrPUtV)J0g4gh6Hv>$ots zw+Y02h@I_u&(PU_%rD>ffxJzlCW{+k?i}u zNg|0VOBl<%RdpNiU@K=tYnUj6XN&o?`;s3n6-^PbFfHeaLK-{|R6_DVNO7a~LZ}}E ztAQH(fe)Wj&L2JEU=sKc=~m!~Ph7ggvJA$k3HT(P!az+7u(n|5r2D(yj-Pa;sa+Vk zl(psabo4HmUd<_M{g>HNLT}e!;anU8wj)?KyQzvdnGa#eD}sU84V6vRZF4!nihv@x zYXBAUle-Ac$M{-8`d6EZ^)6v^1XC*NA2jbK6ocE`(ocX|JaXbh&AeaIi(W%#;XG71 zt3_wf0h@~Dt^(y8Rlh&IeoT6+erV~OtA152h5^+MiZD-H;G$r7FSD<^peSf8JFCSB zF2)$hACB<2(ZDAtgu`_3W_}nW1NqQz2;`XK>I-v(SIjvfI`G(a0biO_P>2M~6H8o- zvVBr7=N&S6yC`}=8R%abX4J%vt}FJSa=b0=v4a_4{51f8ds218S)#fMiQ5(+Q;_GJ z$O8=&A_vZQA7_56XaPV?h?QbL`XI*Xkii$;41c8x5o|N2xoe-PrT4oECdLPHeDq^FJ3=pvq!U8I+!wyT|C`~ZA zUee@Aga!L7Z~e+%8R0i%MSc-z7g(~QLT4HR!Zbya2K&B5;%ZB|`A5Fzs2Q#H-(SZWYi+UIKmOL;p+kkptR@_wj{wdVSHNPhYqOKg{ zpMQtlfmd+B-$H}?G+@T*=W&9rjyMMx!ldBbJ&(eUh;g|3ZJ3#NV@3tW;=wuC7Pbd@ z-xJj;JMzBm!MXH@i^CL=UMY4@%@-KsFOi#uMS4>aSZ2|QE-}rO`=uK0{shpZ1&Uay zd8}-<0Xs%R*f{u5`i>#^v4{3f9Q5#2kWFhF3Lyr2A86vvKjp@*uB@Nq-8P-!wB5M@ zAVfR9SOI;cvp}YO^}f`_yxH}0aBA*AI8Ic9CAExl>}BRz0@kHcw!(|;i+FTM7CSUT zpfXa?dDzXGu;#JJls*?L(Sym#flXIJ`l@@{wTpDucDge^19^Ki4Uir6MCBi(gEgpI zmT3oJy|(=MH(t}8ek3<~8KQ9ANaGz7IG!J#{aoj(lkjc~6-&O-=a67+abXuAZXMJP zMyHv%hg>M*tbS9n`>A^;!*kluG_7}bU*%Enf?nNK4g7*zn~3mS59bR9wWksF6K`X` z?z&OGiQWfG$7kz2I7#I!W`WnEz=M)&!9ge_Y72>UenhJ-FbNOEGa$NU7q0??i9C3P zZU%h-1L@;#QVB4TT)Y@aX~dnxloGV$Ybo;rf0n$30C>xk#LIprw!Fx(`Rcxc*-1sn z*1GR-o_fB5SI>7)`!CrQUjZx9y7oIRfWYy?dVyVBhAsFGewV$9zfpv_wj#)dTwuL{ zI(=)mvedOKkr!j=_Kazvp@mqo!{o{VAk+F$qbP6=;RDWC@r8RtzN)X})OmMY|0HAOrhJq7HfK_Fat*&=LmFZco>sO35sA+v zpZEPak!tWdXipVXS*iqOK+D&B)|t-+F)?%D&exOrdU#5J5)rhv3ytrrhH2Vf-}`A_f+$lQ?_22)>glcDQD3cU>1`aOE3q zLo|?=_bj}Z`J@Qwjw0t0m`-V+bpz-zW3%Qp^(6$QvZio-DI5sm+AxOC=i(43{us2l zycZ+5t^$LP@RFfIWE7Gc8A|c4+DC*&6>U>+-bX8J|VALhwQsKY1%$ z*npqpaHqmRnIJ4}SHv8EE_T|ksIT{Lubs;~G8h&AxI0Dv$!*6v40Owgs#`_Y$d>{X zztuyTy@T%x8GZkb*OQB7G++1>ObuDXz6fJe#$hkBhrLt{d#Ul--7@TDGVFzxKTwW- zNow@V%+dE_^f$Yupp4EYTds^$$vnihha|n1mH>yB3&UMx^V)JbDr9VLgN-Zp?Yb*0T+l1AY*4b*@8 zy5hfq8+|KEX{f1LFc&DE=4AUEt=~8dJ0B#kFyEp70{UrQW!Sy`THUi~F^p@sXgBC9 z&*YteMJLzXc%D`_7gxXG4RS7zzvp%KdXTv7#g(@vo7~RBHPp}b1AF1&7M>iu2BR~^ zEtN9=7P~uN&5eExIoK~>aKp)4(ADmyX8gv_zJZM$xW+H`cbeRJGk3TqZFl9*tNdx( zZ*y^}&|z{$?sJh};~`Sj;BK^o2M!OIc1uuyv-X^IP=o`9d9Kk_Af@IN3LQAF2%VOb zm{-hI1`LvzWGl@1)Pd4Gb)dv3IZ(p4b)e*P$$=813XZW%w+jy;8R00GuW&FYT5<0D35`XoqIk zgB2^o7seSU#7DDHZQ2yFTi84&tD7cd^uW&*FpCet>Jx81k}BpW=)=g*Chrmnz9yDiVZ`yqCbJ>@9TXZt|ojo-%GZm`}hZ zoyrJ?v{+S369!jVJfv{6$nX)BLFz!#lA%dIJ1zyl$U$$rx+QIuuZl6w_U7jxDYkB4 z7f4f&CPQoED+}y(!}(w15m{)&4NH%7ax1z4P-%e@0@yioPce_}Wqy0~o6lg$Ac5qe zDGXt*oH9s}K&H;IEw&}RrUdKr@ZWiJ^f1oP7A4yYj0RjOSFBFq;7Po5J|DxAd89tr z7iqzPVpRj=lxuR}+sR^bYAR$_*C|%n86Q6VdNNqK!QJ*84Sm%VdjBneQ~6u-SRl?{xjHO6 zsc0{H)^UGNT8PzA7dHC-Hgk2P?7v7GaTn5RBaZs;D)PAO%vZv?1DU~ivHd3FMP)=D zF~CjshC)o=_k+NqhY8Q4Xz95w1)`mWZ6|Dtl+vD<8?4y!7VTbmG>9&NMJR9xHDw+5 z&dG_*tZeqQP19SFIE2m}ng-tFo>Kh0QTfyLvq3VICl`ZYEZjv?v8^BwXHihlk_;`? zj@HLvvK66~qiwI=YRdvRUx+X2EPMg-m0RSL%tnUNgDx&X zdbQDxk5-1III0}kQCXz|Bks=WavBD~2uB~; z{?1-MT*rrulP?LaXq!kyPuCCr3B8J85IG_OY~&978D3Kdbh6|t)K@6;J|2dxCqIyG zX)|b`JrE};yjwBY1t}Hr?j}4fTy5ds)1!L8A6f$sVl+?*!o~=r1C#4q$ui?RzXVQt zD%p9s5Tt1XQCXV$2=O=fd#!m476e8UQx5zB=yefJA*PR=!7C7(KWzMF*LcKc0+E@2 z|I2p%5xlDW-#Y*NyHff0*!k~1cYe`N5ulYy4S|-hl2`De!VH$#iycNLTQV zO*B8}obf3QY^%P@?D{Uttj|0T#{LY|x-`u><(%YPJ6(JOR$3+qsLw9XH@-aVB#eoVWnCi#J=QdbKoS8_7I`43lkVH@ECWm#%XrE$&X{`IINfliyq-h z3l?`Yl~}|XZrAiVrk|o0ajsdoI9z^~?nGl_Ex@R&KuhqR1H7CChC6%UoA!)pKciso za$oEdeT{gP!h@u zcJ@@G29#F$TH9lKBgjo-dR#e76Z3Tiuq`*%`zu%B8l!J4(OO_Q7Yd-4YF?qoDld&rhdn(P?dc7{ zoXEYGXg7}qI}_EFZG~;m;~@5+X+{q~V2oMPK9RY+8=BQDI*0C40 zi?04`M*?=5mEe?>V0y|rtJ%#az<@U;&qz!v34@fKS14{4=DC$f!-GN~((n<5U=1ba z704#fz1dgDO&+8xK3tOuxMkxVeibH_s&JU{uQB3v`B>6mc3o=eW$331{Ziu>`X#8! zZa~@BN!dVMgaUL3v|>NFeHJN$`-DkI4-yGSg%Jdn7NJOc3q4DJ}SQ%sEGe&l) z45ZS}NiGX8O970wa2V3)0xX3^czU$lMd4(q4y11i7BSM#^JhOOT^i0TVQv`jCepDa zKw0}^%_QU^Z7gGmCslH3G+uSa##Ye0F;DqZAdj&nkeLK;U{BJupNT|cQzN_4oT16$ z)p+y&B&CIL`vtv*YA5cFH&HOk6`Ow^<9*{xJpZ2k z)2#QVXHzpaYyU^gA@q;Wh;QKhl9@?C zoa$IV0>Of$W&=1t4$=8`>capa)v0~$<4S9`7LCtvqb_(uRv^%vz5?MZ<1>L{;gA~J zFi0xV+VP3bf4CN2{N4a>JhjDAgIu7AJ zNn(kQP$H;&w|v(Rplr9S#FwD4EJZP>0T>|A)umiPm)jm;Zv0DZBYNgSGcLi6Z_x+1 zEit7Eh!N&|h&{_($I0#R3UL`lV8J=2gUfSWRuG~ZNxd&I z^(4ok-rx0oK3p;u^)ix)dJp>qa+gHCPxxDQeuba>Erf{Nx~3KpSiEEFnmWconW`;y z=e<<9f;_>C02HSaG#OTai=z|r1S@EMQe`E(laZB#(K*Tg6|ji}!9?D(^kZRJ!(UTm zywTx>$@6}r85)b)aa<&Il_!U$LeFBOJMZmEn6kPSB9pYMtrKz?Tm0jSAS0Dg#Dt90 z7B~i3Nl>4;)d{P)N_>v%;iLz{`gdAEKNehk9tR4@!k;Pn zzz6zZED=-#DD;60AQqrWAHa$?EQVwj1K%`nYWLIped2yX!R5yx@2X&!tiOf3CKwfM z;m!$S!}>zQxOX)!E-pNks6WFgZ+!AI{5)=4FV6wvlWX|hZ(J|W9%IejoQntag(*)& zT&!p7_vWsM;?C>C`of2k8yQm$yXM-V825Qio8j|hMM1XfX+_7dKaHjV~0F98EtIV zm%5nbGxE9npTpV4?9!Ef0PiVApxz$^AgkM*qRd7)H1OvIT8geHkn}=P}K~GWt1!;g#@G^WBg4 z){wq%iSdKgBD`~YvdNI17Fp6$IsghA-v;GJg(a){0akw_s@E1mugC>JeR!h@%Qd(k zte%lmNE8|7PtJegrxibNI~2hKU5(^KyD*VvT=yXqo|#*f!QaTn^c-PixyB_~B#Onb zc2(R2p*&OsU!7JQ3xPDgYAZ(-Z4#8!Q|;xOaSW1 z^s-sbkVlonsPisoEWI2QbH=NRVa$0KQ~Z z;Y1+d=_MhM&Cd)}&|7oeFtJb-9AN8=@aU4H1ypipDM?gY4~kKvFTHn(4aj&kAg< za2B?xI393A7<989a08dDGX4hW8@MT;H})9+4Club&x2qb)}9R+pLrk2T||5dxYMaT z0D=-X{8a&0fz)D}t65dX;Cvi=j~W~k#o70V$;RpnaX)80F}?`o;L#qJ%9EeKYyv4m zp3gr0Gv!+wo&9kYm@&IQE|!lh{V@iTNDG|Qp6zHnWm0B|z!887_hTousfoY<-xGmj z>T!G&`zAUy)mfwL#;>9j9gdXPVSj~90zM9o<66V=Gs#6NskW#j`8@RA=kOZUDx|Kc zE%J7AKLf3U!6+$zUT-|oIhyMYJdJCuqnNl~zl#1EigJfyWN^w~R0orHTKYl=Ta5Eb zkn>2qSnMen_g_XZPIG7q?FN^i)R;FJJBAnx))Av7#wL&Gjd1^TnoAQ!B?2St&|02z z9&dX{TYiRsiVHCXA3^K>Cg6qEi5@tj9SPZbyX+EUCr5d{&p7>RGKuMvpIld_H50A~%YkdG_r?CXozz}w^7|wnK@QW^$Iki*h1t*xO6*+br zoKMNv0hwNnj~V5>g0j9;pI@v8c7}{IpsrZ%0aj(rwhLG9Qpn&Z5Fe}g#*XO6+{&DH z76tL=$&YREF>V*JJ76@mqp8@U^kG4@sU+T18gD8~1n2aVtPZ9-v;o2ApdAPU=l|Jy z@taaVM_)K63ArgLp(;>9pzBM}Jgkc{^(a*jDcbmb8)F2F304g0li>=im)B@P8@}5% z8Pk??rF*+;WHQfyEs)%hMC7cHY1(8F0Qm~zg(9UuZ6Rw<2t}|mAe(7YJ9UfRcrp<< zDUbzDsmE#cFhtsO3&ycIQh_3n(%20&6RDPuBjy4exAr7k`4lkl0i+pbVVDuan7gXn zGwLxa>E0&U892!V#!Fn1Huxs}!bZTmmW8J4Of>CKfzkrU^~U4L7%G!8xmL{9;Td6r z6~eXx1BTvcBx5I$Fmql>e-}8F$1fx1vGDZ;@?qkq#gvJd_?m4}C_?b{FYV8Y#ZG)} zVtjED2#hZ!h*Tw3YT@ChZ%0Y+H|g!V4~2AWxiTlViOOTo8UrBE`hr*H4z1Pl%Fk-g z#ABlh*|d@-g#2ykVkR5`cwDANIAmNtD>ZnA@e*j^Fd~R})?a~Y0%vgFAsI8+W57@F zycbLa&Tw2**_9)04{QI?0XVQx`z`zJ&l*4B0kdq@S^KZViQm6Yn$_w*T|Tnl_b4M$ z)BM@mRGY2;iMIHe7Mt%rij_zX0IcCbqR>~fx{Pn`|DJ#sBFS65F<}g!!FH6cQq@+6DDc&*% z6#ru7CS@svLl+{dmJ5pj%n;=8yh0Pw6y>Wux-JU*DcJJO%pWZhYS#?R@ zybe#S=jxlmRc4E&Z=T7L((0QZSSh7%{%1zY2thL^oAoTfcZ8G6ra*;xBkP38nI7oG zkk$@s65C-q=FYl)t$o#c3O+0~kFbf9W;>Vj73W&clMxX%{?VuG{{9Rz9C%0QhRS@Q zec<}iTzgSt=`HB6Y(oUP$69-v(x-6N3O5@*3VQ z(k+qQ88u;*YaRWP{b$S1;JQyE@ar+-_+Ob5Vn5Ow-(A3|b4qVK1zL~jL~`|v%k_|z z>lkx&WzBVXT&}fNu2am_l#xpy9{dAxMTWD%eniSUegT&vAh#M}%(6;#oj|Fh^Ru;J ze7jHG?ritLthsu|wcuZ^T+;5HS#ynVcht%y?G9(;lGb8G(-+9OmJ%n>xRjiL>48qt zJY#+JIo20Xx@>mI)JMSnc+aXhlnlK`bNxFGOm&`WBzI z!V_OU65o6VdtT)y&-SaKtRU3&1#)d9dA=BorbH!ZR z$j}Iaq4Cf-3edXm1Yf8q0E;XZd;$J0JMa8C(fk!NSV2LZ{oAM@dKkAHn)!ldBt4)o~0(ZfS6`|q~oa+4&d&A%y zZj%U!z(9eR`Iq~PV!2-oa?u(E40RdC3{ms=0_i!egOr^dT7MRzrN)y|X1a5{Mnjd? z%Ii>KXpd#K(tMyYv{y}1gdy$_gGP+-fwAO-Fep-T9YOzmqijUby$l%mP6Q0m4O4Wr zNmCoK8&x8beO4k8N5d+u5Z*?}Omt>^BBn*6j!zr2kx12k8*5*{mBcHOp^6rhkmUs6 znd=9HVx7OrC}<%=61}J;+@d%5jJZEcCYiO_WtODIMUG`lwc52v`a!M1Q~74pyWXYc z4AJ8)Sk2)fFK1q7kB@WUu_>4j#)|1O64z?AQN)!%@8caazKx996CD^dfS51*H87_|KBY>#Y}e|iP+Lq-WZbo z1@e#&*TzIpmB^Sb|QVW!9GHG=Nqw!{RSl}3F!DOsodS%pH!wu&C4C#TE8@Y|GkAW#a#x9Sn!zYd(I;^f7 z)f&uwI^fJ7c^C;IkKhMI9N_x^e@6H-iXWUZcwR6^!&!tBY!(T91V@xZo)I{$H=Y)l zM4&<7L1`xfrwL(w(pNd^z3*|#F_w=ij!F#&{P~)oVyEDss>S69|=O*a22lFW`YH-PYk8(08DCs%exv4B52ynp}P3HM?qM!wnbJK!3rr zaCZ(yMO}5n-SQCXjPPb_$mn<$qt#TQ|1A@A9xjH`89XgoEms_CMt!FH^44k>D)niv zSvTmi)wC*A)2#HGUnrJ>Nc>)}k!+SnYA4|2j5%=u18tVW;7a zo-#$q3w~D5o@bw~OSQB#9fDFvOWkU~Fj!Wv{aK^+{EyPw<{Yh*dK%{|REff!qfby@h5%i!;{T!><;Q7A}O zFk>_#+7D%}aPmTd$z$GTM-$XVc2j{XQh}yfEqML6W(x$VSi%@Q*Xy;OiR%@}(N1}6G(JTdeU)gKd` zObq-6HUZ6}gU2$&ge+fx17s~Ny1oRQs^NW&8Gwr^=OBzYF&N-$>fBH$hR;xv`1k{e z(7&{kzun9ZetHq!RZ(>a7LB}N+}O^hk7teK`v}<0qb9;kDZiRJf23rf@YBUwzRcg` zhK<;&l!&g|V^M+@lE}`({_L>Zx`dw_mT71y>#Fjb7i(W*-^g`@7s1PI zWgls{Nil}|>W!WjV`}s3@b4b23vNwpM^xn>+6-3u4);9ZAYJZxtc2(ub6M^wxMA3A z?5;kR(%HKah2-_C&Tcjr59c{(APk|Y{`gI>%l54Xncp3oeL3Oi)W~-9!O(?7qWE}> zALofqB15Ugi2hxT4Q+MjXieL6{NCc-Mr}R3t@L(HQg63Q%;&w^eh;{w?7`3K%HFn_ zPyR%`dAGg5@Z)y)Su6Y?!$<1{-n`qs%J46m;nSZ?Lac)n z?OUGo6sfe+pS(c5wXb<{ogMb&D^qBfknnr zkOw%!U)1^5N286MZ(S2@=zOcJZF1*ZbK7s&{{*tGt{jNY*`FgFH_$eH|6i-O_M-it zE|OS;Rjapl&;E}x2aGY125HQSUn}{UWvlrhuq&3>A1w^<5^mh1c0X!#-|7 zSRO6!cn=Dw7ROstxI*gP4I=#0ygPEMu8m$*)f&BG$BnriZ+G5jb6|k z8Noz{O^MSG>m)y+H;$zE0yGPVkJAm0G3ohh28kd?h{YFE4s`RF-Z%z%qC;ulv3GNb z!fhqT#fVKZr=oitK~S61QYNiV|{ zWu7WT%FPTsClKpWC3iSWX83s*viBT?F#Nm==}8rG%*-ckWO!yFc1Qcr3o8(NTY z=uB8Jz&9my4`DNO>JqUe^8jABtG0(tz9?=NcZJNWCa!j0_3#!U~so{V^YMwYxM5$I9N>#%zC ztH%*pY`wq4wzAo+>+7&lw-~?2fg?zg9^*s+m341Ipsw>bxsM4jM$pzuNI0`2>A*PZ zMHPQiihn4`qko?OGGLr$q1l#HGByw?Mj|ZNQas*iu|}$qDDohLPRP)39vRFfyVOcr zrU#dVw7kw9x0a7-))7iBil`eGjk^+oU8)5nFE9cRs>g0=&&#inSMAUn_ap*)RK&yT z@rZitm1Lhijb6q5%3aM!*{thS;uSL|aFSAyEYm<`__gk}2-S7|CigJ~n;qDzH||Zw z_9P^hg-PgcC^IEvfKAF*{S#qx5&;1$b1|M1x2!e006uGguR2HbgyV7L&hSOHD~@Nk z;&}Edj^}{lcn0uzC%oPFG8&EM;p9hfVZg%Mf_fvY*+lV~(8?H&3*<~l3*^)bJj#B? zyn8eecuaNqe)TvYJ%3#tC)_4vMG|9u?KvmhqkqnXGw07Pv-47j{ha;$u$>fhTlEL_ z28O0JDeG!5YkN!;0h@KM&Qsoy-W}o;F&4fiEUi6@S`n)2{7vp-3UhKWccPoY?3eSd z^l+-uUc-e-t68G)!bp0h3lOU7{7vp-3bRt?PINQ)&#Ls8s&vQv$vb*Gevvz16z6&$ z?+JMy?*#y5EZuk#9%!6vrwXCE&fnxdrZ53uNr`R-|5*SS3V=l56z9^}+R1r18Hbck z%`8JbhFK);^pX1q)qV;O}fKFWp|QoK&pE1t$gh~YQn+7dGUhQy0ghA-rah=OY&{5{_G4HLf9*}MtQ*5Sv%cnQA(lWpdngbgJg zgNQxb&Q!sA1G`eAkexo6!!bBN`h@p^ox`=<1F{WAzddR>Q28WBP6hI$t3C^DKpX?6 z=s17g2$lI#0Z{M#D`@_J>Y#HFoU6roco7(tVe^epNGLd z7y}ypZV{k(<7Mxz-ZxIn=x;W@*~HsSu6W=P%&Qx5L2H5D;7-)w78vlwjYWx?lYC3m zoKla|>S3tIuzCR3F$pjZB)q@Njr9ycwOjUgJ+LbwXqase>3WC>MJ~gDME6pBtG8CX zah(`@KsGi<8qn=3x$zQc%+x43$U=p_E!_fc70%ud^kDym;lfZn@UZbs6sq=vM7PhZ z6X5VQ(e1Z^D6roO@h0Hp3ph&z940qH*}%ab9$CeivX5yjkk&CoHgmOp^Ee;kn}^kb z(A#LZ*7!)g(Y?zaMQEGHH=oun;f#a2X*^(n@afz<3_%U#7YTM%4irrqPS=2!L~eIO zUV`>R0|rzSqpPT%I7ieIyQT2ctk;85Fs|*|aiWMTF?8rn0jTp(6^F|hYS9{R7uxs8>j@zomPvqcU>`*L zGz>OA6}@;DHQ~QFX|=ZSPpjje(7eiegcxaUR)@yt`}z6K0b(WDci8?=c0}c)Csy1!;QrDpn?66Wy!KfJAr1ep`z- z>Ff>Y-R8(KfTWTek5^=Lx0*OmL>F$sT9uiIqOnJJO~ZKYHM%)o=3ENBySa3!+W+2R zKIz@6eMM%g&|tnMx{K{*me_Blc#{TiL;IQ|3KcQA@xxDKX>bY^F^$#ebD*Nr3Kh{} z15i@4!!|9ry|TLHsnv6Xy2@KV8Q$`hN<3 zT5^o|iSt76(+5A6F@GY%T;T5|ej1q&W2gmcY3Df5+L;Nn{l$o89eTh-G<;2TN6mml z_eT3|6W(Oq%|tgfM@9wFFuBn#zhHa*@5C=2 z^ZbqYrR1e|#xKtFqd#}1&yHW5>HE{t|F_|n=dMppr~muupJ$0*I4>0agF~q_ithiX zf5^sXlWURw33Mo&)CeI%m#osjcJD zqgaQvKr@h$?)tQlJYVGynb@fD-C?6yIFEQId=x;F4x6nzoCx%*W*t$F0cqVMXpf0~ z8V?(i-7_4lOW%L!V^qF!)H}a;h=TYANV^O?20p0g3Jg`)vW&KoZ`VOIL8LcVVYQps=;oc(EsKC8@@cLKj26cv99_I^7AO4PxcSadIEC3vUjd z{I+a;sOJE}L^pp0eRaF+H@Ep_4EM7mIl7>{n9}&}M>0lDY0*Ym!#<`^o!W)(%ubaq z(RFr=N~(r6)m7};0yV(;2*6Kt^H%|P#(o<$-;9L<+-)cgz%iw9c?viI3wpf|5Rl#c zQ6Ms%0#P)6O+8<0+-0nEog4X(hm^+cS{3jvPxSw+CkMM7a|Hp4Y+| z>m!cqkX1AA;mna1q0gg$%w9X$`Y?U%;ADk!UxC(WnC-3+J#47*LCXd%6mT~a;?Q{D z0K7feXf+<_VQ6GOD-5}*7KjrH*?h6_QU?bo66&Eg-j}AU+t-JopVGOxf7OQRYgXyl zf;WI2=-j*~$Ghz+H#vqW7;%_!gliwurJx%?c?pSE(D7SAcg%h}ZoU~e3v^5(Ww%S&?0Q}2Z*m`_ zZ0H!oLIt`38@dA_qtSwHjw(T*qmK@hprFHu;)S`*UhF|(iEjQX=nmU&{pOqT1ibI) zl0=|8Ud)ysL9DLxH@T0w0UZx2QuD;y^$1F|$G8X8s$T2~8Q(znOIbTrS%^bfgm53z zrF!vEl#C(~rh1Xz3eLyuxBd3p0lYDtF#>G*y0yA<&aDPk`o z(Lw^Yj|ovkqMM%zrVbROVCu5pwwrI}WMvYgM8M;#lzpR=y%V3h&fnxdMxksq9T~*( zyI@Dl- zhxzy;jD-~Om=v)Ik!T?S+sA|{@Ioj9jYXIOkKYQsCHC7=^Ue5#fX5_K_EIUk6`z>v z_{Ci3uLT~1Z18SF4JLS)kJnh>U94J&NVJfE?PEd|q2>&OScJFh>j27}d(|j6(am24 zXr2AmV81QE8#5YRKVXkCv4H%I_p?VC3)K+(LN$cH7RXjM_Gsf?6JAV97?)Aqc_;Hb zj;RuX{jA1>tPEu(y7{Xhn`6IKm~Y0J?-L#-5qK^Zc&hLTO%eP;Q-r^OhgwR9Au7Zt zYam(T?>sc6^X@$`g>u6vh-%Si5Tb*TBu5nO0$~Tq==4AbOQdxdN`3rQggEr$SO=@^ z_DCFm6=j}~)K>K7hfUGFQ3Prji5L;z46cIw^iN?AHyL}xc>G!za&1yqYsLI<26%HI z*i8pd6ml}Pb!-I?TU|#WtU@JDy&5QkSm2G*229CXB`XhhKxg0=bOwG>YJw8IR-*Z< z&aXg!;MFd?P@?&(4xKX;;Kq~=FgnbcsZ}!ZR~??4`em#yu-jCbvvr^lYHNcywLeV# zk0nYO6t_vBgGqAvxm*y8Tk3MWU6h&F1gRz7xA;`hrUw*lYE6>zDsU5gENHI;ebQy@RX@~l&*7Rtp87{8xFja=G_>QQQhzq)D1`Q*JJ7$ zrkxp^nn}(s>Pa;!ySB(lG|YtmJe5XF6-%~G4?G$&{^xVTp(ah8N2dxBmXgw76b+>G zDT_GPogQduBgycdw3L-Z9SK3uOgc%urAqYueP6=rLE~g((h5;Cz%mqJP6O!wG*75Q zZkVvZ#4sHC;U2Fs*sm(EVr&etVi|9IWtm^}JBTZC7Yt7;f~x&%PRryGXxgwLF!T- zZ=Jc5i#(Vh%Mbdn1$wlG27JU*pLOY<3(`NK1!5<*-H!NjcD;(4zKXwZ!KG|%t&R)D>DOtMejc1{%I&}rZvPYmz~Q20b`6*oVt_GjCdNx|oe}G6 zBTwY+c!_sZ=t(ATLjXPRD}|c#0%_}raS56=bZum*`RV3oQDl|*`Q|=+dLvQu^HqFa zpS=FX3FalF`Oel@GsfF>$0YQ~X58+S`8z4H9c8u{+Y#E8jDAQ0b7fLf%zh7o&3V3? z=@7JnDPN4Pl;FI`UNg9!#b(pFG_&_0odY1Co`p+LnlDeXMHrp7A|%`7$T72cgL|H8 zglQxPmMBgv_n@3c56sAWukCMJFj4)(hEppytx5hruSsPnGQCTsN#A1~ zKr)QZ)+Dq43a!cl=)b4n9ChOUTadl7kXad{(<`%8@9n+FsWfJjKG28pd}N02efYZ? ze{=B%d;nvUzHp0}ZhXxcgAYD!v^#n4ENvFHyG0ceE*2Wx+Ht7ozKA#%ZsL3<>jX%~ z3UG~734AgfqXP_cfzPA8hx?ZVLT!)QF30#`C1T*$_B$anQ8@KIM&6 z=(QF#%dKDSP4y-wQfPk?xoIQOEXXgf5^7t5S()0W(f+N&h3MFEyBc=g#$mH)t~Jr= zkixMJFs-@`>^gGU-aXNsHe88^6@jI#*dNKgpuLmdfbjso$`7I~WK{h7gtsRi&7|sy zA}umT;4dZo4+YW|+@Ts7yZnqkRFdiGtk zxi>Gf&F^>AT$@p|OzV@JkDTH5*xGa4xkbb6nq>q|<_o=TkDo8jsj@w7s+@fHQ)PIP z*(jDFQ{|?Ab54~bUVExA#k=UX9qBb-su zjLqZ`8L+rAYGjeY%YluL6XW9Yrwiy2`?b^PFt!;K3>;h>!^SUXu-j8ay@~nJ-&6JO!;Xb{L}Bd#^*F}IIOIM0r?YB@ zV@BK}3K?OkigwwDjn7L}$CbrwY}K&%EN$*g_&WcDJ4IEH=xFGd*f6L8h2O0HaiILp zLoV~OZ|B`G_aiu$gqZ5rbo#+Ye&EW$`J4^@z7P_Hqr07r!gm-g|YJgwb@vf-d&&&n0$Js^tY;t=YGJ&fLP3#?yg6}TL6hc*?) z45w=K;7oD90;F8*H(DET0pvk4>#>H-FUVNQf873{HsnWPRUgI7rLe2|l zr_>#9a52Ce_nKaqwW)p8m*>Qx*3= zWyhOcgSmhhffvmUxneU_4Gex2KxWp1;2*OwO#cD4C3<;Z&E+}c>s{v_q-Gf!xnS;f z(#DwtgC<$uWfSjlP0+@h*n#ud!>L9VqLFDGh~}NM1M}lIxn)qh%Yj?8so)OSD4P6G zlDGG6J^cF{Tn|33heEBkkQ1#K>!DEA!!!OrZ#@)aJ*-3?Sr1tGU{0(h0h>#*icC8) zT24HORg$qFFh*D&s_q-7f_l@Q?F$y=8q2XMs`XH)Hx(w^$)m0*#(Gdmixrsfv>uAi zV?7|vd%PZs9P6RTUJpg@`FcP-8S9}))Q{)mTnG$>S2+W)#am&+P)fC&ESpC=4u$ zx!99Gsy7uI`|+I!s`{G>wV<_5s_k_$=9BtYicK}xd}@N@L2uVHK)4CLRi_q5W?g^r;y~$K9BL@LKW6S0 zY*cEq06j?h4bIF#7FPbj+x0bWnzg?2pbusjuEXyQInl{RKPlG5uI}e!uK27WuObY4 zUv|MJBeqJd7XAYLpbOkP=KHU2@^}1VQdyH94lqF}l=r|(*4$cmdo9RKwO%d)wfWP$ zXQRcIUnGV6YlN&^l&JB@{&FWLT)!utw{<+vRGT@&O6jn8FaPJpfE0geFcfc4gIC?OdfU&K{;_o8luN|t#|d@>!Q>3>Pf-XouGTq0$1eq zRo1)O-E@v}61X9`(EXp>;5z$qVS^Te!4|jX&HFKGTUyK7Du3QKn7hFZi);ypVRgZ>AF2GSMdnb)I*Jvh7N zuveBpKR4`d$9T$x+j?BMbv4hc47=NY;}|NGPy1Tv69~@HE#C(Lo5S zc=aJ(btxf`>N>0aox^^@*B3}~$R~vB-YIXK zK)PJC#cIf~g7&Sxz*_?CXHi?KGD16h|7TXOUfuM@VDDR#v=@4Z-kO`*F|I97LsjU&@#zeu0@R)5;* zx#6kwyU#0qKV$+b{o3+l1ZX^XWJ80GnHy(YJ^*5%!{nHUCgV6pxb zHlmnhdT^s@!x@Y^Y)uTy45eLuOjPBT$v85GE~@qQo+|7eE##%x$tZK^LqK<*qEupi zK8`xqPu)KmS%zj{ISmm%_8OCrDzCp8mD6BX(P;cOj!QYIK*%o_Aq-!kL~{f*Rqz) zKqgER{JP@~{~wdJDLoXxRe99A?Vph6t~UjmO8tIm@U>j^uV4=93peWZ6SuaC(A2sc zV2ZH*u6`CXyDuIXg{?L7enDm4o7%Jb6D&AveCf?I9A)?)+-OW<&c?B=gUr-<_h>Hi z#0CJB8WGHma9$+v{YQI;&cNn60^P(>bGmY{ZMW#P9({`k zr)bs!N|sD#IG2-P`Mj{b21<#&rpAS1<$bZ;_GonJPIZ< zS?$^pNGd_m$`#l5h>b*UYJd-*P(SEDa;3D(3)LOrKKy(B?(PCKru+-yyJO~23czbOT-txEC zUa1HDYVf#th^>svr_t46Uo8mDLl7~E{nClrU-f^w{pfg+*IjMO>t^n@!up${d-5QBnWoo38!`t~FYFwu zuH5X|@KfZSyTaY>(Vpr3#gx36#zjbuV)Cwt&d>wDkgX3_o^Oze!o=Nr* zdcSRz|1{^r_P`n7b#62Ujl*hz!?=i$jP1u|D()tb9(1e*nhHA56x#5NciZ0~wE$wm zx&)P@;SH6C+Jjm@VrCx#{@@C}BJYIujQ)k57Gn>N<@I`43WUGU2Vhc1uP?!SiLtS5 zl$fV;u-Za9PgCh~vs>EN0@p389XW4t%=QH#AwHi7*M{D5|CNY(i8Io15aJRj%(m@>FdQRam z#iBCbXnYn#@j{tz^_XvTohkDTwxBb1S&ot^*)~=}0;Scb&BcYBi}hLOVm;?#z0Adh z)?9>>ksTbVl{oYDRQ|mEHtkUFDVRudSFUugzYJ8i+1Pui+eUlNY$cL{5X|%HH6zh0 zvtf68ul+v82IvWX1cgoc`G!a4Zg96>t{v_Dg)7gCe$?+lSEd);`zu%8C!!w$ahFDv z*@l#Dvg~##Jar(`@fpm_ddJM<2HL({s(NQoFJfsc-Sg22ACOL%{c~*u@(^#{QDhDo ze}Il{XWs}fw+^8L1j?bS6tEvmgEZaXGw0n=V;^#7!YA_%<4qU|-HoywqleIA$+HRWiF%-lPy@|!uk z=9WLtJ%8>c(b?pn3d(!b{_lNa4$dFWMlZxcM8)i*v8&_+f@cxG#1aG(h>=ElJcIaZ zkGcQ#4!(cIj$V5UlzOZmwnsZr{yeHIUp;pg4ArBy3Y>G8@^w~Yop+SQt}xF#%6Q%Z zo|EJcs=C#5&*0eS9OawN{=yS*B1Yi%Kqm`*deE2Jz=*(%(h)|K=)saygrK{;&jIOx z2}+5&to}m_I)^>7CCtTU(6x_=dN@`?|}<3c*o8M0?-bHdrwV~iMY}oUx_y1 zF}3@}E$;)*jztljfqo(TxCR_^XJ0iJ#;?oIa(!O}$_r3!y+4@@atGevZW{qkT2Wcg znOYCi&>qx+g+Z8vim*mk@Gs>p3LbCQKeDe|m^`d~LY8F+&b_!g(t-MP`B{^mC1@WK z&?fBPV$6fiJ~2&y1mr3Z{YrOxVP~I5qZU{@T-ce&t`@0)4BLKvel0Nj6HB`C57B$a z%Ze7z?B94<(Udpy<79f* zPBbE33uD%tRBLi$m%}8KHt^(rSWh&{Kb`4%O+|{2v{{JM=KCxkY4c$slmD&z1rb`@ zjtrxi$VSK4{KnaDgL5q%Mh{@8>@c9n=&+N z|LPE?S6#8w)mw996$Toy1xD#GV(0s4KAvas9=!8uTJZGH&t9B!#t~dDZlbo7DtZb% zLsJzvg77i%Zt9>q5{qreO(zf}&12c{fW(QHbzCR#%%!G0$7@*mf5u?xK@aXCoD3Ov z0>-dbK`j$wnS$5sa`W~>OJoz8oGgp%!~+`2yZHsvg$|ViTR*}i&r%rImVU~7**Z)k zWY{2KTYI4gCiN{z9~WDq-Yt(@A+*q17X}6<^`}B=6>l7Y{)R4h-l2Ix4ZL{c8JGby z^_w$fS|Q`hKQjeaBf!z3O8A>Nb{`76nG|5msHTGJ{VW;Kc38N?;p3P+RJ(!4g)M9 zWZHJf_59yAKEHc06W+!Yy!V}}pPn@S((&0auHOH;-|nZkXx;Lh{UrUf3xl7bzXarD z>)8?)J%;tc#R^SZ6Csc$pr6$eO0Qzvv#c1g*vinAWQ+L)`yq`FrtGV$xweN7&DGtp z`f^_=5qOv@#3%&dDvKXN$s@*IbPftmU%XhhtFXHzV-H%E;l*YMmv2hXC=DDaO^(pd z9Tl(^!OaKG_$~xyqJh7zf5HM4OMf3G=Op0z{x^H?0v^?M9%@UP0gbIOd$5&QiHXr) zzQ+^Yr{y+ z*0;VT_uyvmYTHGHtMQK5Angqoz6*u{t2pR!%vi10{NNoHWa0beVeOBt-26GpHf{a1 zo)5~87x{+hzd^V4k;HjuW+J$}cJM1qE{}9)g#AqmR~!Vyz@b6I;ow{S*i>cM*1CL; zOZaDOn_c`pG|M1c23_g8o*{#-aG}F)JI#Hj-0Y{hx+#m+s+&Ap;Zd15Va; z&0o}ANh907a`SVse(cfNZ0*7DYzK9=_el^gype3!f4w6%-eUY!ud@vs6b!v=3ow~a z7_-{*DFO4^2sgZJcJMuHz2wYv_a-?^Ff=%i$ZJhoc=c!OZpOx^$R3~nP7~sNGb^NZ zMU0QMt|ZpFH_r(y5?Z&w9+`=ZOwp*3(PnGr7ten3$W%5Bjm-CSB?%)_lrS=Y_**d$ zFVqRg0r7Scgo|Wk7|?04Y@gNHh6WUXY7pzu{6r8xDDIt%<{t})vsefTAkL82;ULaW z3di8?l-^GS^_AhfHhyX`Hih-{%%ZZRX1}y*B;FD%2JTu9?gFKD##oMo z2{^nYjj=EuT9jdhz+IVE=m`ncxMo}o`L{QpHn#mWs7do*xIsw@C)Ed8M+Pi-xmiXi2&T#A9z(B@r}`4)DcvIEsVSA_E$@vjPxZGJ^~GC}+pk;k3G&q7 zxbl<~I3!Q?C(2X*^S`Z38Yxe;H1^77q3EqJnLQuclXVohVO*M~E!8Z6Q5-}d%V~*9 z3r%NlLugvyvV2L)flY(u@1XoFr=W6>|mqgkSDFx9t%+Ffy zm~oNM_sT@JT$**lw1pvlh=X%OO?srvPlr*ak%5aQITZ%NX$lH!2SbIEcQL80lUHfX zgcbR*#+2BNt;?Egw={W0iS)2+SBjcjE(KdPmhhghzNWp&-ze?jHT+=mmIcwxZqFRwlB|+7 zy-eH|Dx*$$Bur@OlJ!mIuVkHZv0-LX-L22R=)c+HZ4WKUD&LZx(sZKkhM690_Q}ot zbmjR)Btk(<`i9xLn9_+gP{T`-hnIihWg&IR0yqD9%m11F$%>@TgoP;}V{GW3L|W_9 z2`pCwuq6O;6+mB7ZXW&G2ck_GJ||@%44>;+dalb#4>5YOVm^=fA@H{5`@J$_^i>(+ zGG%L4J1KFSvfAljZI+wg4<&$M$!|H#=^r!3XDk@VgE5vC*wbcc9RrPX#A|3+$R~Nl zT@@NxjSYiwKW_cD&Z&{X6vgbP$0aHBzKc4nj{o)MgpU6n=XWnPQn5VfyVO5c-}{OG z{q@~hLJRt+!s`0pZA$3+UBBg+y z#LD?(umxImy^z!q*@jX+6H8gb`Ns+4rQ8`yS&sj*aZ~P&rJP@GJ~2j0TC+l0*DKCV z@|T30vV?Jd-&j7ub8V&v+^`c!${)eqR!D-v{>UFep;7ZMz3R-vd5gVolV$f9mBCV!od1zKghS0HM4{%9nJe=8xVHr6?HI$%(x9Jb5EA~-< z&b5Lm<$O|MjO&4mdjPAd5mRAgNr}BIWJcd3(DTWJd+bl}>BSyaxGX`QvA09E%*|Sl znaB;avkth_0VWs>mqfF=WxiuEV)KTZt;J-+8yE<*_*lmyk#T%T7)J`Zd-?8UEreNH zJd4#C=7VgR9CTKw?>IxNvYZJj*GFviHfhGx0yB|Pjj9O^c)xj{NrB>9Iyh=>d>`kU z`V4(s@xA95(_*b#{MfJ^|IRDC4bwpjZQ;W&arHqRfJtlF$Jc$2S@lh$s-7iP*AH+t zFH`EPmOZtjRcwf{a6V>!k<xEOa#+T!$Vc21t-du`1xlQ9$;tE~mJ zl^yeOK$UMpa~w#m!tv&CNNxE^LUX@1s=1GF&R#b+!`i>OiuMWx62p+oLe(N!A6VgUC;Z|uvU?5y%&4)6%DmlU8{j(hE2f!EY`M_u9 zgAtn#rj{>r~HjcTlEB>W8h zO6(pgXRO5rWUh;2sBm+y>bDmAM5erpZfHfmCR zo-_Y?Qr)2EfA8q|KVV-_FA8Y8;RQ5Y6ykbrjM4I8&9%EQUaP;2EIz!|j~*Vk)vGzp z|7*8evD{JRkJo7J#><>)H~E55?fkL0`?5e^%VHj{7k`DP&EdUxPLN#;_M`F74>?`0 zdohH6J^}vrdX9hzYz13<`(F0X;`Z%A0WACT7f+8;G!5ye7GivG)F;X^m!&Lo>seSJ zyQH6}EbDy-++rIaNKh-mhVQpZdsIhdc+EiTM6HCHGl;!y>)gqMqK9ftvF!`eE6q=h zZsxw#s~#RpKb7Z<>8FJIlN;~RH;JNSjRZ9ZnxL90nyNSZA(PqCH)w1&;T+x1xmmgP zGfx)TilacyoX{pKbdVrvbInR{f|f4lW@SlYt%J#wkmz9Q3NZ*lD$*>7cEywK7?91j zp$Oc@7ukN}C1uAil9yy<3ZJ{?P-uNt7HYPIE1bYj*JiRBVF9vu$uUoVQ}p&3v2RB$ z?;Nq$f47om>ZH4M(kEiy{+4fW6uEIeHb*2@tcQ-kvQxQ8wf{*M;!W?gzh$W#Y&Frr zq0f1uJ*q@~v1qo0RG;wKTA?J|C5RgBfF{?ua09?uBE`jve#^AUg?`E41tUxQ6MTfH zIG#|-O0_=Wm8XratVm*{%gwpsKNR&>@Zjw5!sIQ<1=x~b25jEL3yGe)P=*|q4X6p= zi|An%8f}pyW~0p(U8JaOGUY>NOu}%;ml!~1T4oVOlh_)^LDGl!fn(~^`281Xy)NLu zU_yqB-)w%FXwcL-@XEQZ2%lVfB$mg#(GX$f|f7dXoW*-t5S@u{qq`ZewirbJ%QHOyP z-3T6FJ2=bNX*~7?fdnzK2~gu^^44X|R7V6@Gh@K&hLliy9?;IC@@!bk-6-R2)-rCB zKZJ?m_8zu<)AkZUF>VXRcz|RQ)=pQ0V(xi2j$&33L>WIq6R&ZOZAM_}+xrvr?Yc(L zU`D0+Z>L6~K~*r&TF@_5pr#+RFxh}qqb7~3Q6FqA8W_^3YfPpsl=iKyTQv$_4cI1= z9GtjTH0ZVh9e@v0pg;XtjioO7Jt+(2G~DsZy6eoF08}i8c{6Jv_7aD$wtp(Ob@eEq z2bmG9`BVlO<}evA23%ZEapDkB&B0ZisEX%<|K{sKuyvfgFR|aN1rM5YFdk-xmGEJv ze2`qTdC9j^&9$E;I(0g!nI58PTf+1xVS4PllN4SuunsaGo}`iT9ekS|_4MSgEI0qE zQ%1w7`c{^6W3Txq?@vlnG%R?~t!}(yp(GS>i)W@}t&Dmq%?h&670CtgXiT~^LM27p z!NOmg5k+1kzRKz{m{`rpqVH|RG1SXPje651i*H~}hwN{p(&qG)9GVmaVilV)RIJg| zh^Ao1D=~fdM7Gm(`Si*yNa0S=Jm4)-Ey{|XATp0;#VCrN=91_Zt!)5gz=)AhxpK<6 zo$h*A`z1WF)GEr0wv&HKJW1u0=n3?%B$;2HqAK$iN_t&K=9p=mLupvRQ)owt^n>TH zkp{&IcD~2SziJTfUA2VnS}vh4Q-2O+3%)Lw@2e&DLHSoHuQLgJ!^l4LzOnQJeg}>0 z!#s}g`zc@AjOP{5L`DMmJqRG02IvXAivG|h{I)(gqt zeg6AKb(?-Kw~C|4>NewB5ghZ?8efk5;Nro#k5rmVJ~J7|HlFJS&}3XNmXpH+=rrY6 z8i7Y^*AZDnP!?M83xiC4v?``n6h(MrdS{5W_f}w4&d!UMUrPc z_O_@8SfxzB=-jLfnV^)D;cGJ<+bo~h1|a)fikc}>{qAHNi`aZz>;e7@_TtN!BhytY zCql>0uW$-B<4$Ic4alqNoKWRNWt%r8lYkvKCkbs{wT@uSqd6#X? z5X^<6o)6Z$fZyKxx8xDy=6U+V)C?%{U&yB3g4GTPW9B-{g|hUw@=Q zP@ctg-~N7k$g;z$e*Z-(i)m3tOOWR{Oq3vtU7ZFcy2EOx4JZKf>$dYtquMzyv7NV%l5}Us z+W8sVUj6FzCktt<&F~D_EXsOAnbw=ja!Y1`id->8Ll!J5+zszyrz6j7y;Oeozhn$K zl)~E2Sb5zcrvJnh8TN!rXQDDkO29H6LBiEeF_%kO}Z4a!}5ncqpi3|M#@AJa?U=hf6G&#iH+g?#V2z^7It`zL%^ zl|`*fB~+J{uHSQPybLO{3W5k|ybMyFun))CHe!C^hA|Mco1q;-wP0XTTj&O4+tDE_$me~sCYYgf#* z8v^1fCkS#AjkSn>Su|KYeOWx8$2#vS^7;8- zAq|d*D(%HvIYRrq_+P)%RBu%C9zS=!dW@a|WA9UndP|ET&wj)WC&uL@VT3s4pucZ&iT~M!cUJYi3i5GT$jqwh*khdzF{nK>GhM; zsh(@)(E7eL*BQ4)0gKB*XDSCjTOb zlA6~&WHd#IY5Yi3PsS$MWH*|6_#gZzbKUy7{}Emg4PG{kO+O=%@oeZ|D9sbi3h(5x zrL1mxNnOL)g9P-uQqQs8@A z%I@1-a$nDyEoHUSOKNqN+Mav)%Gj)%U6&)F|KJM~PS#nafPc35U7H&ZF;vn9-r;sWRnE?j_89Xr@kzGV ziGOX9@G!>{t%Vjn72gvL-yG(9q5;`fm;ayhdd#ud&+BFy6B_-T5GV{HOnOC$Ht|HgV zt%a+tN1gR}$SP{Regqq&L_lKei&o}~ZtK~uNsKz3ZulnZt=6J!omSkb0z2je(VXDL z3r)M2MISLwB@fD0qPX}-*h`TaAvU>J)a#A!Qb|-@3QW|=4#;H2q*~tgFFO!G-dly(KKgk$y4PlQPviFp@`8MvgoFs;gU>D08fuCxoP!@F3=UBQhj89Syu;!e8~ zddNL1;HsZAtG>VfnwSKRqZZ2>jNQ;mg|`UbZS|@9oIs@KI^P4Xs+VP*8D*_^t3@1w zUg)fM2HR2&_!hc1a34(a@E+>^;SU0yZN_Op4gV#%RYwQ{KT(KNDn{wBZlPi)y;c*s zqnr2X!i*K5GYSQIeTV8(U(mIu`sTQdG8n=&PG}AoBi!#jA58DrKt&oa%b-C3TH=zp?9(_pnq_+8<6& z74}H?%Xc7fL#WEBUJDuUx@M{DDs=XUS29Z?&9tN6Tk&c)$7d!`Bdj*cQEX zy7}V6*Iw$p^oAVj5A;#9oNAcK$uobyv5SJ}sBGt550@Nv=MpQ-Qc~F2=zDd;B=lQ9 zQ!woCT-eBm-8XR-H0-{fL!x}Ca69VzLLLW>JU-ko!Ewl2-;eWvhu^j9aK`x>-TsW< zbNlVaCx!DGRcW8^$Od{es1Cp}wh7>I<%AZ=c@3;>2$h%L6C8LnToN^k@Eem6DrJP- z@LU>moE6N$KqErf{Q5-Iev3pp>P>H3<6Dx-*j4HgghJu{-u;a_kFm?|iI^_Oehay@ zrIq%ECOHBE9+x9P?KgP`g7^0&Q`f`)Gzv-@^$g*kPaJO{io?d6Y4%%;cfr+-ckSo_ z$E${(RPh1VUN3@}UGm);;sI>C1?c#&EA zrnnKS?^E?S;bXIhd3&Rtx$3yg-NZ?o6rNoGr|;|7@F`JxMxYJtGVTarcybm7{u(*j ztV(eba}HjdN$`A91DhT#cnUH0zGC?Ihf3LnsBjy5kvjX;{#&L(?Hb?eVy`{K@tBG( zV{fYJbJUo(NL1rH^4Z&N>|%MiBfps7Xjg}1a>z$(a!ha>YdkBd(mK*A`fEcsI_h1% zn!ybd9rXj=nse4nKsxPu`0o`HkYyQ%;Lu!!eDb%; z4p@kVjp;^l34IpvxsR7J7>3DylYgb>#C+foImWtx%`*E~8ZrN=3#0d4 z#d$L>I*PNnAA44y|G|7jKQ*B3vB-N!p&EOqC1UEE;SU(8hU3E8Y zFRxr|W=A|pj&*r(7LL1T2JatCW^e=V#8J#JfW_>+#P9o%{a>(mCg}4KR}6y1xvDBl zt;?1v!eXxg7Y`Usw}XLW(8QxmcEkcc*9YMdl`*~$ruIcTxfhpu#kcTod@Lz z!imD-0Ja!<>WIAOn$c$^n{ffv;GszOH4$?nsER46=WtpZk)|W^9-d~WB4;)*Rol{z zv3~IVv!U2WOCPIbZ~z*^rAJQ2%&~4Jpz;BL$5QmrF>;vO9gsahKeM0Rlc_XQwX%Pb zK>+tsE*|)C<%r275(F>1jK|in_=8_B+5QKf6l3dsyo3v)VdrDMzIBsysK~e92$m8L zbV1nccYU}1T(C=S4h-}f*Hqo~vdF1ND(B4HI&8t*6`Vq{C9Q=@gkXmjc;7q_Cb2s}(0A&mpr6 zFVITfb)A)*bX0tzOY-P0QuM)i$_|;Z3g5j{rTU;s;WRi_el#Yt<7Fq@r5OH>ax)+?l7^fb(H5hR)f;| zlWiQ-d;-o*Yr|z#4dH*i-`Vg8_`fhmEzVW=HGd>q*g6qR`iv%rg}Nr(o0jRB(Go*q z7XB&}{54P00SkXMpD>!{kO6LQJ0nK&G4W8u{K3xze--9A3ZVq1kd%ILM6gbPDC*z2 zs)n-zwP}5L9;l7HGl9^SIVmls!+5rZ z_Y~e?u4+Sh#bBL&-+?uMF58=Mr=XxmX6DGz7z$Rr=Ijg(&bArqpgX zp1t#<@FIt9LhZCRU2|<3H=oWK%o?bToSh&Q>i7Sob|O-&2(aKf4hsifmU_9`1g^JY zz%eh6+JnEqRcRlP4?HoN2HE^>sqpI!4>Mj5kr;c^3t*#!xs6eb$XN$OWB)BlXa@k3gdrV{S9D|p$kC3xMQBOn7b%xI9j`lL>p*NUO#tBYLvyAi4yMucm^A#59@15MzR|F? zzw3t44r$w74s8a0V2OK!rg$4_h*7xA5{5q2A;2XT9dpQ;ctg zS%jawIY@UAi=ll>Mmh49BduMO&oaPorASx?_=Jws18hZF1KceGd_o5JtUbW(X&u6- zcs3V)Bv04o!szB3#6aPa@z{O#h|3D@cdU)AV1xlyw;$sK=kRftLzgi6Q*F*cRI{q4 zKX@pGc0Uq+&@sB{#lM@j7ky~8y=ZWA<$wC>2Ljt-h^Jpfor*pO=y0u`8G4)mw_s&P0^);~o!{JqAr9u(Kf@SJqbcs4&J@|G*DL;kgg(qAfO zcjZ~(?Ad`^XN@Hbcu-^GWkayQtrRW_Tk00;6@0qxYr*|sSB;Ma|2DoNg-6c1EcB}b zqCIo(E&^EK-dFWn>~~b<6(Btb==h4~|FYb`uGo^)@XoZ9b(%h|%~A7m73&fD$n-)( z;+I{xILNiEq@|-#>rqQdUBao#F2q%=$46g{t;b%0tzM7kF!8BUHND|=DJX@6zK(-$ zO>;IysETui%KeyPKgYAV=p%W$HWx)VPvZ2U?@cl8VS{Z1_3P3*bQS@u9s)Twoy9a@ zdblhlT%Iia@w0Q1!;74o3qA_p0dbu(xVd1E$A_B>{*%o+F0Dl)#-c18ka-Pl6AzGm zKrQfG48p_2tGGPM262@t%2AzaL9VLIQX8^6dK$Q~UhjND9N9tajpM)xBA=ER*=K8}Hb z0r`&(8KI&)N0FR(hJ86*w|IOMX`25?9<+MO*(lef8;x%zGaVZDM<0zost%+7ZBx#@ z)ApyeX^Qdwn%$x|D-~~mU&7gG$#c<1nLFxGE$F(|5i$0*sg6r0rkxVpteop=r$uVh z+G|7U>%>OJ5`-NaW@_4Z+t4_wzLMZO$(P=Ud^B~M2&XbBYXt*%zS@9zGUFAI<>j*ds(~*`N0sHOVo_Ac{=VRsUagC{jnRlP-U;-6r1n7L7rEKzD)7tH;}$-T=?{dJ`+J6s zu^I=7_nPk>lNpTq;01+7^pNJiWY9b7svAEfe>C7^lY4%oCj*zKW~!qTMo;ghXyqmB z)hSDpfbasN?rry;H+Hd?^1f`OyytSXJI*J5Pdk-XaZZ#xfFu2dV&6x`V?qQpedrfX zy-Rp_R5yT0lL*()JePU>5-pOR{f$gWSnXppmHm7RJ}NIm9a1;gUFcE+b;}xQlih`~ z$geU~t8`)DD!TBRvFp;vF0jz8UP>>(hUY@CEKWg#rTu}&wCbvtj!9?0k;QqUff5`k zW6t0k%_Da4E&foutgljcX0n_Ay(~16-^xb)5_#_$TYo6*7TjW5U#O-Zbl;8Yn4NuL zoZ-0A`ewAGofkA5FlWulwRCnuO9yA&nPa)E^}dO*PR%*N?|U;sHNCZ{{U0#)zH02f zs192^yLy9dFse}>8N1j{6V;?T9DHYL<5>v?-34iDFW>R4 znZgg(K(zaO^rHC>hekbtq*(lt=!<8Zu2ieDR5{B^YvgKrXI0br1uPX+l7n}2pd$*U zL3zl$`K)}o;=Lf%1k9NIdUYn-6Y1ZewM-LqWY3<^>U*?f#0fv8$B@Mxz|(9s4c)o&KEG zm-fCuw^UfJ{Lt;eR;Rin#}{E};E6=nUC&h1*TqMoPUd?01GEIdAnMiY)KbE$zPhz;rX)3@=>$9eUD$JH?>YBAUx9)-1 z_^5e#3Ke|Bbi(-ETD!eAbbD=RT?#)Zzlr=@{I2Ea<~ND^rQ~4I>mA*Q5p^teV{bbQ z_*1_Vq9B@^HuXxQge8-QdaqR~|3S}M@Mjl4U-@uAp_L48sXT_SvnBU75rO;FqwvIMNCDQFM_C{zL+zz(xO`S}V z@$^Ol;`cl;y%CEd?U*PVYWin=i^ZVt2fH&z$cs3{`W|WtWAE$geQQUe@oib!vKIEv zE|#6k*BalFJqUOZ?*(f?qcT=UyvJGKjtc^6fbh;#R+OjYm7}8 zz2#4*WRzuvo>wKAvRGNP=Rh=tT(S4n@pYv!X=XT$*fZVPUyd14_`VI#s1|M=o>oS6uKMG6;UWwLW=f^P! zxl!xXjF#mG*rpy~u$3@>)z7fpfqgu=F)d6ARnghl7rnrMPh;+f_N2-UM?)fe`kD>u9TLsyI^tSzc^tMWH_ z+f-n?w^dba_Fi!KPkLWn`p-BFWkbei`8Q2r5z;mF7 z{o>smROKcW&M1P|UL*}6b|??(kVloi$SmG07On>gG&$OEx>_D8-5G^(bCULZ@cB1|e@v~bZv%{a|?y zE)bIK368GFoI0+ON-*b7*Ke5caQ|9(NmgbhmeyEtr^~lYZLO}4#+rYw0i{omotHAO z5IN3Koj#Ca4EXgEJO;4qrS^B9@4xF(9@Q&{>y*8|r_XOx@KHw56em&F5> z61DS9iHc1TJMkSVO%y_rU+7IPt<18>7AmYEvej;pt+WoQY*9ItQKhN666@f^FIvx0 zyJeC0wC>X`>lcEb-xAcAc38@)TquQQQ`kqkuvqJ4Kw|4#fNQZX+BGD$^{vHDPd6rW zn|4e{O45ezo1P&gf32H#5&{fKW)4P`;#FmD9;m%FbqP6MNR=eTt|^4IsryXld8RFC>G8xF z@z9ibC^H_)iifh}p`3Uq*A7`0WOdJ9jRhG}UwioR9Do!0LBCV}XX$V@|INu;`=cv! z&4>PKl6Jn?w%Giif0>*V($HYCeI8O1hJo^Mom+I#67{%1Np{{{c)0sin8G$mVe0V` z0M9w9J~<+Q`%Y2qSdlAaOjZnz5l>TAa9jF_^c0dYEK!wv}u4W>Tw-$>nw>F z9E!-EBN1{NlbvE6Crv|}oI?@cUnmi-p@`;ciEs}^-1|oo;Tei>a1brDDV+#&<^~C7 z41N2DwGuH!B92G*3S2CIOUKPG35>)}PE6#}t@9Zm7xNZ?qE9z$+(9nw;b78=-2^Mm z+`mk;H5W`&!6ixzfj4#@a@uj*kzI=6FS+vW$ckWDPl!pGm zKN_<`=N`BFoGOz(7tLL%Ys;TMP5WAYF`?nDWVQ8ifpq9`Sy;xi`^(jB(MqS%uZyj9 zqQl`$I~j}e=w1PUnjF2J*)e3s8GKG^N!rpV1=p>7#u-47+!E|c4z@YV&F?~H4`96K z-X}N=|CjQv{&*E>gIC;jUkP5huI`J$D@NTd4bN?tasr-bJOTGUmrk84srSjIeYu&X z!?N*TZi@ZffoHI^ZV6mVP32~)MCdwG%FQc~yCJ3&ct9UP2Wi29^ty@D_0`i`np~|w z+_pdFdt*e&x zrdj+M_GVlx`#dEkJ(meWFmFHYOp4$292=I8TLPiIdfYB@%L#^2oBnK4(n2Auocxuhz4Lh)P4U$r<6(LE1Z4_(&dG1F~j((9_cXQJKCV`dp69(+j?$+{Vfx74_sP6twF z)_Ce}>6zG2?@3}vHKr0kG@a%ey={^#=idwSF8ecgU7yqL_a$l}GUu7j82LrLb z!!HR94(VcTMtftN7H^Ex?2R#+O=(j(MyGq_qE~u}YZB?go;6>~AgMT9g7;RsAjAtL z9s{uRp|5CX`s5Ma{uKY?SQsyGT)_gbDnmWO-kbg)cna^SQo?%$vv9RBN8Fg|bL8lZ zn!~-vZs;KWP@AOfz6Gv&M`!^jZrnVJ+}x2}KhZjP5ZvHQs!z3#A8=n8*J*7a3F>6m ztce>^D7lSTZ;{hGDYQxW4>WUsF3%3rF){SG@Fwc<-O`3l0volz!}PW}4u>8W_*j?_ z2&JjyN(=i%J)=ByOMm>C;xXmZqS(j|mph)jN7j7dYfh%*6z1rZXdojRNM|kC3rVn> ze3C(y@zwk|CnTrf4>=R1i=0t}A9s^1X|b@{%0H#DN*q^Aktm*-@>G}c*W%$Vt5XQf zzyxDcgS5LQJ(|^=^>P{tr-Lm~%Jvvd^CW_!bGNhC zS`7o;<@ACD5o;SW!Wg9a#a}~p%Fu@}8zslf7e&7>qgRMCK+l?%?uk~Z7vrUVAWOK0 zyw0^0rf&RBOOB(B6YpzN2t^;rz?8ULJO})Vlv3p5zMnO(cDIme#zkm4x1te5-zg1~ z>?mX@YIWGzqTA)R+BJ7|3Nh?{sP$RtiN(FY=1})qX#wY94$zE}mC2Rmi*5MJeGb9* zlIqs7BUV?)Kcl%=()!Z{2J_j@9ti|vFG6$-FvI%aeVv{2M*3Fx(RbQ%jJ*!&D@r6h z=Rc4!)T(YamUJa-1X-zdZ#HIx-5bfIJF+n$`M>Jq)(}2t58)r_A(V4gGK7v6YXn2Q z$Mm7U=|Bb#r0Ai1soQ6jelb?MSKezpmVW-~#*>YEJ)#}mV%bkqFNUXJ&TllmDX+iD zkV=W~uQ}K)n+6NR&Sm1gCDS~HV{63wB317RuX75&$N^(<9yO)P{Lvfz;&m!BT=bEZ z_-|toe6BSAls5_${_zO2$HTG_{}gBgOYMbImo1AXoqqxE;)QsyK`u7ubG3WVl=$nH z&<^)p7k{0^(!R(kZn+|rbvf+Bvu3F?WKM5=A^(|9^{EYRm16F*tx_xhxGymKB+qqnK3)#dd%nVtQSsaIvCwD>HkDUf^8G=G)TtmC}Pw9qw8wFyWmZR}m*M#mKbvQAg2)B?R{np$?|=?3j*u}LPhQ1(^hDFSGIQAmZ7uS z1x-6h_jhUstOWLCJwq&k7qwqq0!`YlF#*eUF@Yzvn{GgmBcd|TT(F@$^HQw$nRfha z$b-b^JBW{N-@%(LWR7sK6{Cl4xN_$Ic{~x7IPv4|#<9Go>f(MbfS<#w=VF9V0g>ry z1?-?y=a|AEX_oq}Le z>qd!}ztH#fU~iMu>LtyI{*CZQq3=t5p=~Yv7cZ-#tr^1yE}DrqwoHB>`gQ@At()P+AMA%0qhi!PdPB_0_)*NTqwo;E&$Ukih>L(+Nt-?+_v z-1LT;PBYxX|AeGdc>dB14xFr9#F=T|!5ACQ^dS7NNT#pX)!+y~<;p>k5|`q-4a&}U z>GS*q8PN>1=2$b#Z72e+qin!;#VEVtI}iJlZj_zJtDDF7+WIe| zlk;%#dIhKXT)vd`pM{m=$l3bqmC{@`{DygqtLRXrCQLor2Zv@g8USr?XH*4{F(B+a z34n)&<0u^DX6Y_`;RJHsgCoRlv+{%Z1(*VlVe;e%4w&yu>(_CcihF+~nC zj)7m&15Z`%@+}lGV4=(yPC81^tvtTTaQPetbovT}^GA{?aLwhFn)QndUi?WBr zqI41oDanv0eGD z6(L|EtlyNL(*UZ4JfRxTb220pIFkx;w2S>I#{=B4;JVF}0IiT{c5mB@psdWWay zGsai0JBb^jeM}rpS$QNG#gJH(S&rhKj>BfcP_!q{<{!I=DunXS~7?>S1-K$bbg#PfzBVv6*k!ksz%p7R|~e?e$O{xpZ&V zl9dxzCUyK`5rtIqThH$ybMoJT5!Yv}nDv6FOxI>plSjQdYhRKqf!(4|U3=X^QI9=& z13)5SXt_%Y4(jwQz-LK9rhBj)6z~Kk3!Bw|To<+3)~9|7Oo~2LPSSGYBjrHMs^w~y z+4O6@d6-42B4KL*l$$T`%C~%?_*!m$$AcH!q0diQpXbIt&zH{-G9Us^MSC98T8b@N zYth|d0+-n`$r!H`rsiP)@UDAFln_z=MN}&xlHs0gGRPELgeNq-gfBQaR_{x-zs64 zm!9Reu+`;m^J8yYXx;_2z@s`MznF;JkFAzI>M6EbdWX?to5Wv} zCVPzQb*>2e-i%Fc=mv%_M|jkn+EC#~bgd|z8h}1Uw?w+|igQsSGguiqK0h9RC3qlR z=9BL=?Im+-gUtLbqMo<>eclU2mN|W!HS_0JMfI$XR=USoT>7R3y|`pKk?=02))bjq zJT(sGsqv@1Iul)strNvmxt)8yJSkO5Tp~IsE%mNqp08rY-^1#*8Lb43 z=5Ip}lYTUU9zOc*4=j3k2vjqY9?t229)A70Pojt3lmvSC-537r(ZlB_{s#2Wb>|R0 z{OQNgL$p-lL0N0!%%++Th7-d#!s8RePR5>jJT@_8nkG`g;rQhDNDp&j^zgGbJ^Z>m zP7fQq1u?}*Vq-*Jhp6Hm<4{F0V5LjLsA7Spiaw~~*c5Sw+{!S5B2K;Q1EGjHza>SS zd9@TV%6|A&QN)b`rZFhup5F;Y+$T4H43WHlE@@HtKq|4=?(1w|C? zDp>vZL=j{BBvbzX(!<{qJw){go%}CB4+Vezm#2q)*a{7k4EW|&qv_#vE*~+! zH1U(@;Y}ZYFeD!?-}7IO9{w;2rTTT{!_E=(FeVmmUpR7W$C3>{wPXZ2eC-p+p%VAhr1SO zdN}*Hq=#R*T6*}aKfOwN_#oo{?~finb7&Yn{0m+a>ERu4qzUx!d)DVTJ^Z44{=f84 zmfQc&<-^(kb?Bks&;MieuorvgfJ^Uh;HMbBPU1$vcWLci;Ub5x6_>cLc~24JxImnr z!^Y|j?AzZ)SMGfy@~+c65P3T#@@|TKo-7$}ZCLbQ=QyAamz)2wnCo&&2k;R*JJ>oK zXL@Vi;K;zTTNm0cspER+pA$TggLTZBzvkH5 z-M21xSyr3FyI{3n&Zl7|rZu73Q86cfT)qw?*eLCv@`a~-gRS_ zs@#h?3lzTF9dD;s?+Bdbq$DPIowNtoytw z84O*kT%kMJY;uO~bg|_Wx)ZlwC7edO6XTSUNj$F)wxpv44jiEZcJqA2uC)$1`XIJ( zvX|xJq>Jor1iM|`y(gp5#%?i!?LJHJsBBSk3?m)OcC;UI*+qFe3R>rMPJdvncR>0h z#!kh9;j+Q#x;{#4E!LMzhRb?Yac^{87g4gM5H9X)E!MYB)JvTXRJf=3%4vpsRMf<05y6U0Ion zCpeD(n16LYTd4DLtsT_uxD1vBSeQL@+XF>ol*(m(qTOd!l;91(cX`d{@hn!DM^T?! zcaxfz9h#SeHQJD&+X36YnN8YRQbTEd1tVfI=bkoj7a?JLTu`|R@w_esyqr7h<7cRSf_%#J>oBO^AO z;Bo@@;Q80ee~&AM53P4>=#v~RvMsu$U}nPZsD1unHWM>c(*=%^y45@|K&}+*4%Vk9 z0bFC-)9|6NzS=nhAYy;I6#K4;VP`{lcB8Sk2(zvRjL!%;gNG)9>>D1*=A@fPqTP*9 zgt{-|)>Ayqi;K=<-ZH26Mz6!z)h5PyzImsOh>JErh@t-@d6Anz1(JLG0EXE&Qp zKn|pO@CD1Gri)8eTX6s(MG(avq?9Rzkcl{Ji!zO1yr?_06IJ}7%<~xAf)wW~%rL^= zlfYuPvF!l~tW7te&gkQj~9<)-@VL_ zvzD^&U@T*sY^mgLW2m)H2$Hgi;Q5?vRrJi1WZ7uQmmjdQ$G%ua3?}4f?}5nkx~63p zCAA8i@rub4d(yIHFPfir`i(AK_81t+PJ&|XQ*kupKj~YWp$a`l+1dS=*E9n}-3zyma5G z_1E|or>hIJFkJ?!ZWaAupg2dysZNH2LuWPT=su3$h?m<^1*kckIyEQ*%b{>RApqHt2df!RaaViD z3!=S78mi|(3v*E*%NC4ozAOis9WR$)%Y`>HAi0!AGJn{R`Q=dm0Cf(lr?Y3V9MIkER(3TNxT93Vjbhu+PlJkRO9!J8`h86R9^@`=cG>XGo(S|XQDKIwh9>!KXVF~wOs~&E~7YK zG5EPi0#)GWuS;MZ_*twi1V8JIT72u=z;x62xrp3H1wT(x>vD+11!D|9Gp|_|`!$Nj z&x%ITN5H@@FXj#u6Z`A3Ts%$jL1XK^h1WB=!DFg8(?ZfM4nYCO9Bqz1y@IgL6vWJ$ znOurz%GL)9l)uyK5QIq~@g>J111ByOuVEIF77RT$cK*7oqXg_MxK!h9D=&qQ!q2h@ zrAECFLD4lwb#0(%*(@53qPtk(8bvd(XKZ}wyPIPcVCuUyre5Uh1XCXo{9KcWsf&f& zy&^syEIi%o=z|(*OnnASO~GQ;3Z`yPE)^7g5TFXCHnO_}SsyUMJ7|zBdcn$GIrb|U zd#=RgK-dIf3;t>MmAThX^OdDPdb9DebHOaXiOXR;lvbPskuCr^S3qp&2dDpy zY*S3&n^$XG+xfA$mdmsb{Cc<+Sd52jyTG;hfdAI8a#KDQ*Otd{Ev_B~f6LSwjcd<9 zQNXpG8rOafRb33PSh)6Sa4mwXMn&M-G7HzYHf~# z6*Bq0t^D&J1fzxm`&8hh@fED+4;ULcGt3NFZn4qaP6Wqs+IYFZDSVBsj>xl zNWD1+s5j)_PUs*}_aU-9Lm2e!x&I^%7zjfLEYm3bGVlskUy8$qrwD4&b1>w8(#Xc3 zCo#H0tDR-Ln?hjZd=O9*WONqRBazfaR7D#W3K z)F}54R=2}V^LSkotL@25W05bOO!hN92t1MOKcfRkA50=*p263ZJa<6Yo@VAkB_L|b ze@p#$x1+#p%BD$Qwu+$3*xL?;u9g zS15=Mz-}C4MJSpTFujLV4bBL=TK!vP7#Zd^#Ee$!VpaTQ>GWC_5n9<2YF-b)3OiBN z!CdT9HD|)<<**@IMmegbLtAvQlKVG9AiW~k4UcZZsT8g_M#VQE!rbcbkNW#N?(fGJ zQfa?YT)LHZpeeauZis6W|5z`l`1&?{LmjUTO^;lL=i>q`j2I&WE^$AJd!qq*f*as8 zns|^{jJr^Bie(oONJwrtT^z+V;JPwdWUG^o`px-{nkL7;N#{hAjI8-9Rew~~?ABt_ zK}S6^t{Mj5Y1jsf+vwC{69Xl4K>43y#FbwUwKdMxAp7+Q`*$#&!TWbY?hBxe!TLRr zdy~P4iB?=-dCb`O7Ofsb4AL?X>!Sr=QHO9}Z6a6+n)F5xaBLv5mYIGs_mRSK05^Bh zZWob>C5!lQc?4bpi)zuV&%&BkDsZQT(wKvK0goD>XFg^vk4VTX=z{zy7&#=1ZB(Dn=stJay^UjUf7hrY zpB$Cjiz23Uqkp@*xlk{|jJ zC)YGTl$XE{m5jj;1$$R$`S7W6#*`1A8e)RJA&dhOT3>C@mJc^1=6FI4fgpuIQ5<{o*FgTo?JN*PFSqXfhvEivk=CT%?+Dvrfmabo%qR<=D!DZVO% z!^fq#(x;Icge-4skk`Ntq(pW)jPL`z3Z8lz-=6XXZwve39hfHfJ*~dRlnw=U^3sOe zApbL5bf4xG`Gy#-L@=_2v+gkV&b!_VNn74;yu8*UK86GB7WdR5bJFHG5N3oT4V&Vi z09LJ5`gK`iq$!J#v)!d{ZjZ4VT7cC!nRDl|7ol7@rEG`(+(p0hBr=gAbno^kT1K)*H^4= z!(fOWk;2-n0)-C}g<_l+D&>Qx6qVZYgWW=-Bw#Z{zga_Qg4GtQA!n8DCQXWo(949I zq;Hxv8_^sM3nc2v_qEZ1I6EZJXlwO9L;HlpYSbeGMZ!{zNd+jv0%|5n7({Xl>uB?c z0vEeNx;wd4&k>Sk34sW{JZ7319siwhpH_3ybAf;wE3ZSWOST|nJfp3AA&nK z^&GP_s+Nr2iQ7@(V}vWBg;clnC&F$+J0r|uzR=F<*OSq5NU}XK)$8sUYqT@Q8XZg) zWi4r1V2PlyeP}C@$~iL@z5&WfKP<7n-Lao#PFv`~35zQda-${n1tO{6fuz0|RUpFp zH}L-j_2=yzY(t!B(CmW6IoM3Y8H;Jq<0DS-VN^oya^E`ldOz#@(R_;J!23yx{3?75 z-`46f;3}*_hZWWf`!T$v)mlezPzBlrGLFDLQ9}#p;BMeA{3nU#MMKB0LF3nO@oS*? zAul#Sg7-ho{c7z-b5yex&%jo6C$JTVjO^pa#%>|HNc@Wg6OF00#R6XwUEwZ7B8X{i zX~)v;7||8!W;hQATx{kdzV<;%qZU2rNE2PQA%qc$rv*=pD)Qi{++O&^(%umXd9}C; zrgn_zzS#YSbQHhG8s)}2I#Kga2&8~*(0KU)k91ZL2Y{m-7!6S+>s}%bC9oD}?XqEF z_9ZlX6w=igSBe42j_RT;`QcF8Ge#G?yrpMGB#d{Fr5WquPF4C0e8n@Guc%@hJhsLy zzT#U0<7!#7Dm$jn9MAb3?_l0qN1(gvEKr zwtC2RYZ-6`dn{gr}I1+~c>_=|#&Fk-frpV!SweJ?}kbY)%z|{IQDY zZm|dZ4HeP(4%>VGYY?y!d7(Q zlu~gc8J?37P-V|hh_IsH_qMx!ume~1E660%`ONGU6TD_AOm0=KA&;HdN(ggrS;1yBo728dE1#t$t2anFCF{2yax zA`J&WAUs(~W91emmRl(0T8$aEWLk8QW=hlPt5&xNQD^V$Xd+$LZKkIIQdue;-EdNN z*<26QM`$1P5$t3sAfT*5ePvs;=AcD=H6@0HK;th&ShN{mk`*9TTJ)IOJ>m*@=k`Q> zd2jvNn7$l$)x8!i?iFEfgl^&_YKNF^;(*XvN`{H59?&B<2(4nBbuv@#-8D(v%cEczrW2zE8K7NR{t1<^l-uHk9) zC}Zgw5E{`nm{Gskala|L2D23>qx_+AKwLFZIV`kP4qD&f#c8KHV5uCYmE{||%4WhQ zOe>zv^=-v@+yhXenAaiaWC}td5K}JfaMV1V?+~_Z2Wo{qOefYSjEbIXj7DG&J~vb; z92sh(Qn|_y20&Cs*3b;me>eijem}bg+O_Ucqq!+g^=}cX&vkcIn#g7UL@kf0_hIS< zcxoaL7I+#P>*%3H6E#OK6t7FByX?=rT*QJpW6f+E;0a`~g%v9lzDU-Wy2Bm9Yxu~4 zc~P7(2}_tTUI24n&l(+zr*T*eQS)|Mb+Usib)q0mU@%}vG|hwb?$LF2={mb~og*c1 zR?FCR3b_Qzaf- z^7!tnBAH*eNTw~BZx?Si6`0l}i{;Fe$BexNmS`>^91Fxn^HMFEr$5FuSD4mtzwa^G zJiQ*aaM;#u!u~{?rZQuQ=2+MmTYo5DM~UWQX=Cr?;zx{)T@lSMu(69jIoME#x|UIe zAT@nQvX3Q~&#?q`*$gHFayb#h3(vPgHNxT!6XD$0mL~C~d)V1C z!cixaUP#*>qv?IZ;&vfoaiI6@vE_2XGRWnSDdG51)D0*Pvc(=n_*4@p$x1q*W%9)? zkiFP|1iC^My&<*=WsTWH6a0;x*04?74-mO)&OtVzZbCV$`-X|!JGIFDI13Yp&__@lNgyq~GV7a_;U!d*I9 zy9mXS9wcvNY%_LMAo2AkNhOfC9WbYX4uCHBL~&F=Wx zPblF5p@_0A{$o|ac%cjkoQXlm&rUp@WIj}PCRg-20xgg^CH>~LFNog)RvBa7`~|&H zz7G*s`zm9l+r;iTcmVldi?%UpC;Qn#?H+tYQytk|Vq}<#Of9WcHeQ~imFLvE^emqe zs1-!#s7yHQA4}XK*0I3psVp@~D9Zt6g=HqA$}dM|t>h0$=d74e#lfBj5{aw`p7ey2 zY@<^(Q#Qd23Wa@)-dQyEq?!YbJ^3;8u3gO;MPosgfNdX;o)fCr7rc_flrgr>vCN+I zGO&ci_Nya#L&74VQTpiaf~%!}%vMeRwkOcP9b?eHh2pKoHkYcKVw*{gX(L5(5WCjo z7AZwcon6k85)>-Cb13c%!QqBctp%3(b3wYGj@E(bPjO-bw_r-B$TESWLm}=ti)kT> z&_Z;lX)T17!4_Ak#LW(|_^>uR^tOlI?5G)R*f3(VBg@i2TmxUR*y&C6u5)_RP(awa zhwo87(rw&CS#~;NCd$j@TdL0iDyd==3dMm*Z7@a{G$d?IR$Xhuu6a%|nMW;AbpTB52n2 zp^EJwxHgR;U(rg3xP1o_CEOHdATd5)8z)1Ep?Q`@5ES^fc+SAGV}#jte>*mLrLw;&9Ep~Rynb$pzk^1fqj}JZ$@e`YpN7ogk>iZ8wp@(p|$lOnc++)S3E&s?Ih$~fLHM( z?;Vz6M%ACOS|9uNl%$RIA)Z5agc3`D!SYmW?OqO$0q&4Biv`E7Ga^jpGKGozxO zv0*!`T~dei5HL=z*sNR4aARV8f<6)7#}8Im(!@DrnFUN{;YNp#iSVRM=-9kvw?+VI zTL7`aLxv$JYY;k(|8}8DMBVpHNZ;bc2W>C2Go%d;dDYsb-J#}HuvNScZ5K7Kuwo*i=6kJ> zwxQV(YQD#M<JlH5P~uu+lS3Y%nm@Tr}J;OBAzDdj4b9IQ42Z7VI)(YMI#RE(-e$ z7p(15Y>OM+qGZs9>?1vujKzv15Q|I8+(vgkRDXuuCH+Nu4!^CFW30nw1o@swX2V7D z2{epdVS$1e%ZpO1Q1zJF+2F9l)r=-|ubp?&qe-rd!232X}(K2>Q%E4s3+e#AF4` zBn++{0Z@b!ZGm<)&!vGd_g>V0yWX_FJ8DR6Cus{c%jKeqg%9(+D^{kXw4IA+;;Gt0 z%}aEuUN5^+yIzYG#8HciXJV;B&E=%wf-{G|4gD7Tb6&s5mBYB{=J~NSs6O{7(Z#il zN+T!Hbva=7r|HRl2R7tQ;O{<$ii-yQTSI}}K*2Us3OkEbU^ig8H4w8ELKfl9$bGHN zcTto~f1_9jNrWSOeL3%~^}Dq^XS|&1>om4)CJ`I?Y_uW2pvtQaO`WzNe_GLOW7mS2 zDD_|q_NJF8|4y_QrO!m(yOuOuo@eapOSDS7%g1!_rOP0UHQ*sCS-tt zH$VbWqoz8o(L_c5wBTS(Ad^rfG67An3b?yMXS3Q;oDuDU4o?0JkAc+1F1yuAw{**P z-IZz!L0CutGf^xAwSa%Ni_ruO4mxCU8aP2KAQMAo1*Svz!DcIF z67H*m#1UT60x>N_%r$&R)K26iuCnm+SZFFIi3WO(DWbI@H9}|E$@>SpTce! zMAQ)B1WptnXM&4`jx>(7lbeRJH1#P#(O9*BW=3^JWYmsdC!9$y4xa;INN#E>88oHF zHAn$uOX_itl93R$1$(*B+<=Km-`Gr(HbdqrCLjWXkXpCiQ*0MRVSo)ArkP;#nnG`i z6wr1qvw-3%Sb<_eel4?Woc#)Jk049305Re+fkq1tsAL3a{V0ley+EuF6#->kr&qN= z-PGi}>!u?Gp_l7stxS z@BR>)VpFK1JS;apnR2Q+D0M(_HGU;>LTZUwPo#v?V|-0Xi6XDibVTgaH}tnp*KaS6 z%t*;AGa#=#1HK=<`#krI{^HJ+8&bwu*HXSvd!_?8R}N?Fr?gN%Ksh31p}yhIkX-0o z8KRs*=gMV#p@sU_`9cfzMR=j)G9S+j$ptF#4(tq3av?rvNG_Nq3qC;Lz>-Ux(nv~j z>6ZC(j2N44u&$;Mq?{e5dGQLZ&lQa)I2z4V-?G z3yj4vYe6)W6&F=ew7@tEZ7&|3)IMRa4jMSxgG+TsD7Tn3lC6a#k#5-D&qGwi7Q);V zTQ;RpB1lAJ(_1bmw!mhBOgou+5nDE+uneIC-v>pFhP~^gXtI&1R0q;RpX-wsjGF7N zuH$zDwt(qwcGc({x(ojz)F}eXCk3g3r?>$O2+~xG08*n4wlv z&rayltPrxwT*xZo+KZq?kR}Y-gTjd%b()l348wg>dLgs>^Q7N zKw%}G6jqd!Awr44b1C_Piy_R(Md;XQNHgAM!$Qtr(=dMx3C56FXe8DuS+IYvCmtC}gNz>T0C{Frhh0MB?tm%6p*I}Gs#&ttj(N5Xa}#!%kDPQWh#3EtEN z{_@_FcHW~-|7Sowx&M!AN;Bl0Ly&hqhP*SE^3LB=-q{a%=b>EBe#kp;{7I8{UL`$i z*XQr0yt5yeLs>$nizOh~Pu@|Yj0g^($j|BUHSo3?nShi^CW0tKp-p6>3{j>P3aezQ zo`{GGz!Gf2oT2!!7vcxxDaw6H1hEBSU%W1AuawSRJKq#NptymXLM*ZZ2q?lv7CWIb z!nSme4I;4;9~FLK55W1I} z$B9i4EwBUhl!z8|OJAKPS}5O%n`IfikZU@8xq1x@0z#{Opi(f)uZgJ-9$=V(4CZDK z2&9P`iYzhD*3!{1lrk+C9pviynN9OfsxDD*kNFOjLNXy1v_41~fn!Vtvkj7~R*60d z@kym5)t-hX#}qR}PN6}@32?*0E-U36mugO$RP#v@gkv_vCL;uwFOJ)(fM8g79+ecEJkIroywM(&L^)!MU({Dn@LEJL-OJ?39=pdG(iRhPBP&@ zN`iqTj5h^pJNon)p94u4&`_9S84!$uO)K~HsB%(d1{iX8yKFUgf)JS66}WPwAhtPm ztN>`Mw)%h)GlUUWTWsH;jIls*@u`yqz{7KM!#=&k=oCA z8uMICMAj!wL|{tE{fv|;kPDz_5RX;L1s(dbLd8iL6OLTreDF;3jtU0Cks}SIq0ivfM#i)kvH{lP zHJV=HPWY-$7|1|&_FDpZ=wZnDX|?WQFSCWv*1rj+D6uHJ~=k@Bwg$`DG?kNWYZiejtd1+DhzPb ziihRS1>_5g1W?f_VSq{k7LCgAII1Q#-r~hz4@}NAsbCi&U@syt*+z+H6*w5IV$hVM z5o|w@?D*^K8tqiTh|h;AC{q!^az9~D&Dm8Mrb(18vkaG?D@M$BV4j2w&HmF_^hqD}AMkq$+B z(Qdi`MW0p^7E83{u$DAjx0HkKHsmNFSJGh2E%6weP4(vs~7FZ>l9wVzw-WY05 zVVJ$JVpR^e%}K^M4n;JbN&bmkvFSvDRhsrb5YRLE*^h8X44_?tt%}W%1aOcGnAv4y zW@qOX@An)5Gh3PKIr5kt#z1etPz;p8wnwW!%%yctOt@-*gvT{ys_-#l{a9M6@B>`1 zu?Il?{96DNsf&%K*6C|Mz-aTnCXTnz))QR&)HpBg<>N)+cwwQM_yBM`k2Mi8Q zKllL{+{&jY(?sNN!|Pgo3<)5NwBTBejsZ=EMBly#YIOZ0aJ%}eV0OXRLg7x<*1H${ zE8?JTw>?7$LF1mm!S+$KZv>s<1(%L<9CBuhmv+vcw$W2-~*s=}d4 zON7;dj=f8XT0~u?QKy?Q+>ZrKY3+3s7IH*T3VYyo;nIWh8kPySOHbjVG;UWZ(nY?Q z-wW?VAX`!?Y)dNAG0wnmE(C_+R(~sA`Q{uXiGY$Yh2K*J?NTeehRl5RlUq z#MMVU9>lac0}jbWaNvdbV#@A5+YMxK`z)P{?URXGd#8h6#fIBKBNs>w9FBgpw(0f zV~Yl!G(0YF1r851EOW%d`9Vfo#WJT|-$%=wUVPHRxm|zNJgbTp&dT6UgWlH{vxG99A1Ikv1|}{7#K>8df;`}N5kLzcSUkg)?>yTLTPN?ko@G#O{~Bzu z@UicbKfdc}u(D{fw&v&joWH@dFqi#`?!;$t4{FxxUt|or3;j0HX3^97Wx!rcYc1IK7KEXg{8 zBOCSLCZ$PUv;iNBHXs+7m3xjQX;d){29(tiN6m~iL}wW8n6Xr_lB+epH)FX(We>)M zk*4b5y)*{?sF{qS4JnUw!_53cuB@5m{g9f5;|~Gw068}1V3%(AfWs7oji5>Rp8;;8 z=|*=5%u$Qh57cOc8DKXtAZap=u>v}AEZ9AaMH1BDbd+V$d*)~qLjWRBOzpRFs0Y(+ zfLn%9Mx{#47L1A*^oW*6!JQ+W=A^A87{WaXawy2rC}qsUHc1YG98*Mr+*FW94Ul&# zG-JXjL5@yTff+98h~$bPln589&e{bxK44a8H=)$c$XapxN;n`3%`=6tQ%~yTS?JVOKSNL~%+=O%wS$`Xt5dx@ zv^7omp!1k_2h8ce3T_YVDE!7!EU&^Rzx0LCcf&quIE}3}z|sXAM83LyZy1ou}Wm zj*c;_|Cz0XSIpXPt5)8o&u^na%oA)UUE~XH({V<^;En8IBTrqdkr!tgU4PjJhnRdR`J-P7lmQ%!(2m?JT?`_Z8U8K zVw-OB;NOM(h}-=6NL3qVd-ANBG_N+1x#Ub9SZ8EtF|cir$w$S$3GpdfQ40Jf0}Al<8b%j1?Lmb{lPXcJVCXG9il~oZ`%N(u znqxC0QWa8GD%i^xh9e0qC6E}d_oy5)35YwD$n%sEd5+&oT${}h*Z3u1&}C?l_hx`=lTikw7aU9*hm}ekRw^Ju+UoyMe0!Rc#_&FTyJ4j=`vUxX#(A?} zarI^42RU!{iTwr#UjVk#Vd-#LAi@2fV`#;>`P6OZ%C(hIdxS&x}I!9r@@)qym@W!c)VUe!IYHuhrBQ z;bLa@NVVUv07TGisTwoD2lAGVYn64lR$)3%cSOn@`gCWc%&Bde?rH}6w`KaM=CV=*R4AwJQ+28es) z^cAiPc)f5M0nG|(;=gqEL$lph0251KtZ!v|58mR(eqzC0YJnk}<+|_*ZDtOn$7Y#hW&3#u&DHw;7~HE#S?uaz z(iyomFZLPO=GD5|~d4;WNN`OX-W z-eI@!)hpzOG5%D{hLc2rKAv_8CJG+4bynDU#;n#E891khx&v)l3nRvnF?$FU)alQ)!?Jx z?h3AWl-=!rC>4!X#z*}FZn4MM#2xaIcMK5MCl{i<{x&E96Ngm&sM^kc<+UN+|GvcN zURStx$kOa^@34pSK(FwjJ@N0HTfM`yrhmapb@-3g;0^46qsQxCnyOg}U53Usr@~}1 zx-8*8W(}T&eeR#dgwRDQkV;uXq+g|JxW(6+0TEH3%wbH9N2)dhMxk5NfUCkX$K#Mb z`MwnR4ES>8|LpMj2&c4C47U-r2c56L=eKI>vS2h3Uoa2&e7j8873PEuI%*X{>lLM* z%F^I4PF!rTVUUp&`K%CH5?#C~a}UF2I6|!-0%0tHQF`b#&~YqgIey*-oajn}BQQRN z?gp-9qKblJCaS2gAo8Z>gbK@?69bMx67`-)Vu4B*DlPXvnF=$|Q7{8@9bKdstI^BA z*Ki)n;5{4=eH7wkRFX%88lxz`h)EtPPLj?WVVo?&qkne&AJ0y!`O$j8`H>>`x88Np{+rX|pEwm# zRO8RV_RJOF6JxvI2Kf84@W&VeA>9J)v~_jBff<0%3BF2rCLxyazJr!VQ$M@$v!uqa zH}M$8joKj-MG( zzCb!{IrnFcLtQEU_K^P(=1(!VhZI*m0F^qd@}~GiBX5fBgYp~-q0(^M`Eaj&*<}fL z!^Uc-fdHY>?$HJ+ly*DRTLx!$co61BE!YOzu(;(ulvsmb9e(D!i7^m2!B6lu7L%V? z4*#UV`H2Bqp-ApP_&G>Ps(Ay>{Dm2l`7@o*77A4ge|yM!d=h?ie^nBH2b<6ayRj@2 zE5W5*2qP7u_rptnfQa@dp<+6($T9BEFU}r>%TpZjfTJ=nwzF&oQUYhV`o4 z?PlV9Ls@Wr-=^(~E_@4W5e^TD9!RCWDD=ESEU&wtkNKrfee31EMEIbjeg zcY*md@F0Tdem?D&RUxxD8i32c5A>`zfrK921qV)>7 z>#}0yQ|#**+tezWewMNWZ!9|2)Mma}AD9gmfokH3uS6tibZaLf7e^e?yL0MFaf@gC z+t_Q1RZO#3LbqZ^FIG{+w^#*sA@M+31b39;$X?vw@oY0T5~6E2;cw*G)$+Fme`8JS z@b}G?sH$l_-a>1i#$VhR@L{;q8j+yLvl|ek&vz`2HEqP3)w*g%UUSpG;x*p${>emi zZ6P);;=jggtZ6-7`7gTG0cgdVo;JQ?O&gML8%Z(VrX;AKT`;w`lH2>vE3Vo|B{7n|Xpjgu>{8a_?Cf~TFqrxl(^2D0#=9`sUIy(3GeD=E1=vF5pB2CPK zvF!jzU%+OtF}%^WcM_gzgk`ML207L=3z0xXw8DossWIbP*155=@#lXHEPeKUY*IEg zn~9oefhx(HT9R+;@HSrhx*l%|6@V9bw*e#Yz+mDp|LHRdBTXCe0d;t!X%k;!v8LyY zSdfJbPD62Qn13J<@kQt-_jO{8=3EPm^zT5`rdRvZ;l~}8K&hSsb?VL7 zoyL~n#A;t6ZwVx}hPL3impFsA1+X(7FPdbxES%6Lr}ODKkw&(6vz2N9hedCkhJ;fk zEO2>ZODVpRr37A5(JITr%~r``vYPTldsdz(LMBp>59=(rQYVq;KpXVDl4Ib>ERS;l z;i(yula9utQR-MA=%FkTabt~%r9VCqLnD8_DSz^q7`yR1k(ZCsls86HO7baR4$Nz0 zqb(AX#k`?)v`6qlW6E%v?(r>=HwD@C#(UB8ZTJp_b}r_y&;qFOKD@z*9x9#AA)2?{ zIM%4n;)7Lu)Z6Tfd7D)kMJ!`QOYw?keg3-Q`K$HGZiJwBE8>Ym#j$@X-mUl6Sq~-> zF!Jgt-UGa?L*M5nf^kG0?Df?qf+zetF!B6sBu*{K8_!PBPdPXy>a%Uz#L@cJ1iPi? z_>DO-4u!08{&N#wfiI4j7sR}6MIeqH-cHLD{Q(3qs|WRJC;@9`wJ&=2d-|HgMOlYH!q+g?(4-E-k~*GF7daY$lSK@9z=;VcvstK{)$ujCwa#;~o!vpAV=Tf98B5QQsE4{3W92wx^lvgYkB3;>8nrZWMYvgzRx@v#E3XOly2pU)IFEN621a)}-h@G}Xz>XKI zzZ@~D#_)>g(2VuCZ4l&;CvRPYXJ|VYtHOtKI>Pd@O6S15L`#LxS)5sweH4;dt0tY= zgufQ8e0R+I9N!`hy)aOD3E3^GyA3DsZ7Wo18hY??4L+bWEVs6e$(?w;T9OmF z{r95Nk~kOPqa<-56K|1DMjFQBgN>*|;#flgzD6UF2IqhCRnV1nuBasPMJ2N@zV81> z)t#-hn&{4Mg-Xp5TJc9q@XDyYVFOAt6Gr6*cwhW}mA)nFJr(nwKx&IG>OB$jo|0E! zq<0gt5M<`OxobUEhP?2KQ0_ z2k4hMr?{{r=Ya~W!Q=#i!lM9>M6gE)TOw}~zh2}@n8+gqQ#1-Kkh!=Hz=^NB9&^z~ zv`hqYqg8FywODmHg@L9GG>V;gTKxY=YpynF&Ae!hRgs&!kUgE;6s5?`Mb0GZEZa^XMt8-BpgAy7 zj#fPfN#7cB^J54wX?doYbt$>x^ zgQ~yAst*Auif~1BuG!Tv2@4a()%w23i(I!O;d1)J|DTX+_#jUPmmuKyI& z8ob9yPA)%!F{ONogZf=NKqC{u%`aLLa~!Mo7|f5|QfGUq6@b|`lce=Pu^p2DXGj}~ zC%n@yaRJh)#Q$O>#wmjWz6&AW!UYrBgxj(!E2H`bWs9~+ZgW8-SX@?ZSv8IX?FkZ+HF z{~Z{3?vH=#{{XiA@sqeG1dkn8TP@+8&oO!M-tbNiqa`p6D6&N@eg-=?0_)y3KZo+3 z>#!UNo2JGSI4Y6NjQlbpb>ZbO_eb~=ThtunB>hDFiLP;=B^T~eOyD6baU)YFwvb5& zOk(oM_3v~eB?5sRMTO`Z{!MJ5P$95mY*wt1-~1PAOo|qbNpYjm6f#aXQa+KwD7Zw| z@NZ%ZMI0%Nu~`blvBsp})0h-@8at6dRl}SVeBxu_EqA(cGd`uuy z%-F2xPCp*8Muzg=c02yW8aEoBvBsnz*U0Q5zE$>wfA7){B$n9;l$`N1uW(W7{H^4T z?(D(xsSlP0ql9SdJ%V<41KQy)(2jov?eK!$idfyqQ2vWGQhHTylxEdiQkHFG>ckcb z*ldw}iafo4VN6h;BKv~l2hUh6)CY+EwulM=|7IXnbSpCgRoer9Ncgj^L?L<5!fhiLho=+S>tvWU{>B%i-fm3^YDYMIA4izJb|z>5>OBRTIAa%i~55^**_d0>a;|;28uc(QH29V^-9#FfuhbzRC&Ls#MbkO z@t$ zT}#qc?Te3mkc>)b7XvL1e-Za#C$^H7VYR%UjYIe1yy)@ zmi`>(ra&qG(cxEtlk(+*7s*-rJ3R-PUEp=A^#jb7n`qeqya?^Gk^Ly zz}AaDi9=|9wHV`tcGaQVmf+CPuHW({;0o<3V6H%paP8e$6Wa=#$Os39`?tX&8B7}b z_7VK_dU1kf_=Mvlng=HG=AjOKawq3f)+p5DbFv=wK1aP<8D6d4$;~D5LQHM}3=(-g zcn$4(OxiF;Ut6v?g`xf`upo(p-Is=T{h!2*(wk;7j&@-Z*QFnbhtXR+mQMtr#i|b# zrEC}gzn4*+et-xfXW5SPA#5+geBl#L*+Rm$lB;Pvijglnze>~>I=8irt=&2W0f{Hc zL<7|E17lp4kF>ASJQ9S0A@i?xA-n5-e!Y&Uu2@qp0LOout+A$j<2}~oPQDcxZz$wP zPP}Wiui!?uSkoj458bNOW`}?qa)ig-mvh?-DVqwIvIu@EY9|aq&$%i8rkbhCZcN@Vc-&Mi7 z3Z8BRPkT!R2UKve5&W}XtKj(zo@KiKk3g)xwjRTm_$K)D^VJ0Y+xXUJ+V!vCIleu7i+??pE7iO|HV@uBU)+<*lF_`EFPJMk zEmwN;)?Of2e*D1OYVhBJMvenyz1(U^;YKII3H?2@mDx_fPz-P1!JRobHgVviCrU348bQrM9K z=}~7~N_@Fbouuix=;cmJDYXqwOCXQ-n7JVSp|$HkvRycTkh8O6gvHJjF3Uo#ykh|g zGow8n5(OpP(ZIt_EL$)%O5~ja zh@y=w51n?Q(-RY+ooa>u!o+uU5nDpb^I_BKs0AN--CuJ#Z)AeX@Sa>x@6vapjSi*0 zy%$9pqOZf^wXoiEH}OHv9;-|JGeImxf=YCURsps0{@^{A=PK| z#S+@7EUL%oYs8}ZmB7$wm^*zCy~X57^&+$!Y4roa%i>S{%{k}<0$L*P&GaVKc8`uW zIx$E-Fsyg_;%mP82WXzaZTR9pxDI3hT&w|uWK+T8%nCYP{QWzA9esX&z|ovr27ZV< zQDSZ~MwYwtA+rvj(3aE*gm(Q*_<$4o65fM2B;j-EWA**Qw9m=qt9}HE0elyPjTs8WbmiYCm;XOZzN zq0oxr$7>B=0RD$|U1dj%)^LeT2JQJhh|9$+(5fl)6vb@Kd!4AgkadRP&s_g)l*J~`!XK^SG`N~8et7q#hCjcy1s6ts zWm@y}kMZ_$^K?icWqX^m@Hf^x-5TCKE&O|H@a^u$8r}&!rn0jxvxrh)BJ-E1{J&87 z-<14^C4Y&^|7GO=^5FU1D*u10{O?Ns|B?J|$**G&F`yG(54RO?SajST6}%o0%8EGj zwfSV`fRa8?mxF+aiq4tv&heMgX&|u6+I*iuQBRNwqR(TC8G&YP_El^y4*d<3cc!` z?h;@`2{IM}Ll-VswWp8TN%2p(9~ZRZY{NUjVc3W>l9*`!yBhjx3*HwB-g_O1Id1iK zJ~1aBNE8?b+zDP6U1A5SgV4Z|r!YFBaKh^V`{#WSF~p~?D+c;{dm+MxFGy9>;qA3{ zUkbM(JdqQJGMp#OXB27E@4^{5y~&OO)c=qU>J`1|kgn0551t3fCZuQZU7wL3d8jB8 z&NmGR=gU%Xb}2Zc7^ALa?F4gr^|I(LEbRkMW4#ezo(?+Ht|kQO$8s%!>v)kUwvX?h zTHy!|2|rd~363*^zRpcgDYr_HPge`E%hNjMz)?u^X90?M~}ykKm9 zWJZ2$h6{Nuu^CF=GNVv^DbhBhh+q1Uxq7GzgHCT8OqwB3S0-AHAYj2g6WioUUAtw0 zzULm}H5ryhz|mhUv+&D%3p$eu0<|{!SOL^iVYixE*>HVJbj7H|!7vnBqK_305?iD1 zi(fyIJeYE|lv<4Wp*%JT(f8PJTTN}Eg)P^YVP?cCrK=INBDpqrdlPdC!;j};=k|Qy zGF=yP@k(G=Vp)Njtp|bc(x%5T)R*aDgPtHkp@C}sx|M8E1eCB=Kdhmle3Csc?D1We5-}A4P=}|`4p#qd&$Jpps<=g!##CM zV0cBi4R?AkJr&-cK*Di@xVwfwP6WKj5p`~f+M8kH6P{uTPSW)y97u2)7?%v6VqI?; zBt}M1`D_b*n4|ZXY2$=GZ46wZ>j7y=aG0*IQ*FwY#ibS~b#n$vu{~yUwE7nSNR8lZthar@cLC7(*{n%h^zzLPEEu2D_2sH1!+ieS2 zdn&xr(@|h>?|GnrRu39)(QDb4@bVX2iNN2ls&YDdzwFXP|O1D01vqNPVAn{_ASahaWnmW^A`fN9xL?h)t zk;4#D&j0B0U%bEIpeu>;ko?Mg)Cb_M$kjh2@tFm_4{NoP4BD-D zuZ^Gon11S7Jxm86wG`_66Tt$=I+&g?1#!%+jSug}cqRf@gmwz28O#gq6z-8?P(BE5 zZG0%QLQZ(05S*pKw~x{ryATRI$nh%!J^k{TkTm=chfvKM{(wAmZvj$_fe$UvtB)uLql6|^Abzxp3Jz0S2w1y|bgys}my#tNLAK(G zXl1^yZd&(9d6sk!k*C{lg=T*)7&u9<)wh8hlY_0#HeMPY1Sf)eu8meYk>5WA=@WSY zRIXosA377QEHH!XvJ!99c2BNzW+eMQ8(No-FjZBT%2!ulq+%}UURB9;HtctyR0D)s z{qMOvq`+ucPYRgw2urjKJ#qWGv+CTbGTsoPDn=Ilc=?0f3U@R8=Hf z>>jwqDmc~R^kim>O~gozRw@@-YYFhJMsfNry}+fwQX*?_7Ayt^m}u#ve7GC?KtadUMz$*Oxq*_WH|p>}3Dm?@Q}(c$ zvWNXLKMyNZI(!dp>bmZ?AChFx?UxAGnuS`EH4e)c$|OIQ#t zbBOr33aL0(zrxAazysbUzSD48tN(YrVQC2O&eyf*oM||jrNg!_yvN>b#p}z>Wqj;y zE`#VeJ=R=i^Zart%zv@iI3<7J8>ze{NOCBZ_ZKSfn=0?&0rE~%dF6gZ)XgJeewoVu z-zxvRD*yjv=12dbpP$$!s+-)};?96GeB2szwq}ERz!1iUhrYrUPT<^t&w;)q-2df_ zIQbpS4eeYZdV=BpzrwPjb}gWGTjRhOMjLYxhcDT z6JZ%rHm*lP#Ejrpl+*3M zM&gpeTGBDA$jsz*s9h^;q<|c;2f#DcgZyObzeZ1t?$84qOoQ5ODg-(c2n_{-AJkx>G~pmRrq}kzbEi}2ESJP z4&(O`eoSYIIK; zSD4sBou0nG&JsVAhnF>Re1^}C3r+!sHFC>L>4l+|akd|KhTqfl_JeV^HN2DgpxJ5j zfkg|whl!21E$!W(3!fbUi=52(@L5gb*R}BhzT>uQlT;EXFr*gDi}4*e#A6uP6UBFY zB8FquCuBI>7hyPrfic;RKced-e|{l<&6ogK#ELR`i#)O$wdUdsq$ZIZ38EDvDNr0 z9Gz#BXROAzg;(Tb8``YxFSyDI%($FUjLukK)qD=0D3KYBW8BErACnpF0s(^;5~L7M zyEeTOmhhNpRNZi+cmywR)QS%3i03{^|DBorYOiGhPaHOPSukOt0p$LU?6v4aj5M8y zm<6?P3tgIFXhL0fe%v(%)TEBGz@br!qTJ4gc_Ai1s`xxcJ8=vD)LFGBW%kC`AdvB$ z?Z@-0^-dplhN`ha#LXB`b5h0~c;X7IkF@aQulT%<&7D2PLv++<>uh*MTXTmLor|M6_gGnoH&@RG)KN%L z)P9KvkH)=QNp5P#T9lbs|)uOtjRLUDzz8KP*?#Ad&DkH#D%U> z;>|{hccR3@%(I`f_?<^xHYuNS%eD8q^RaaUT`?OVO?}Ko4ZiMBjrgui{6}+bQb3eh zmb(iCu!Sny%^uaP$3{s$pIz1U*GP(hd~A{{1}`PW~mLFrAz@jD0~ED%?HGjWq$NH4T4ZNhOKg_?wFzyz>}wq(?C7 z#LGT8trG_rtGwV%;8%b&Kx)-4GX|gI@y=a9mVs6qCG1DlC`cVoI#4MEsA-T=kS~T< zb*2;=kM9nBGV3>wnMxdzmh>ruJu_P}Kp8j|8gq;(4iOiK(fWKg*&Xh1l@hfv_HMlw zGx>>2a63aH&k2%m5QO|Rj@zUM?l87&K@%|N3$^;cm3artUHuUUwj1(2=d{&#F>Hww z(;r2|Y1$*Ik}hS6qq9hj!cGpP;Q7%?!A5M1R%5 zdnQ(xUl6rxz|#U?J`k(;ER+Arz-^!1^EO&hfZc@r6`#XgLOL5PfVDNeClH-3DBh#r z>n=c{pkXLb=3~@;g;8Jt2~INklStn1%A@%t`b3Cu&-28LJ(upb-!r3E5-ij~G9v5a0W-RK2-GQeasXtUzUWs_>NU1c%IOi!c z`YLGNpoA1KG07ycuJ495`i&@f9@qf?k$k!T(D`1(I3mahBbz)=azKrAx4$jRfxhd;Oo~*6^%2{ zkT5HC0!y$EV$5)T9X2MDcvTSpJS_3%%2MAAzFyBsE$&Nif{r=u^D4NRr+tpWg-2S(~k34}hXpUwp;oC~bZ&c5lCe11&r@ZS`x!))`J*YN4&>Qs*B&;&7X|YQ{!TkYm7;H z!NXacgMWtd&oHxKF3=Y&*eL@(c)kmVBLA%*#9x zL?VD7}3vpNgsL(;t>0HXXvtDN>*obD6Pf0zlIV&H~fMg`q3M17oYZIP@H{V*A@R z+-R6fB=KNepST`7@(ND}m^6?C)qJ5o2h{h&_%qo=c&zVfv%v!Cs!r4?@f+Z@Kp_Z- zGSjJ#Cx-`y5F`qlZN*c+<S@(TiWcmJZEqz z=9zB0=i}w~diE`!$EpUNTf_@DhQ?rvmHD3mjB>ZRfGgZU+TTXH8=JrrHelE;}9{aAMh{A zBMm5C9|m_MBHe|#BQoRtYgFyrLq1mMfU%~KQBd>!&;Wc> z{`tqRhR>QDLBITx$H(cmD6A-}=YU~qc^9m`q1Fe&?~6YtD}YPimx4KPJ&EwQK=DZ3 zF4YDD!b=njfc7~2pw0ODY&)jp^_a>Scz8G#z~+m){P043XsBNQBHfGVg@GY2S1Bzr{D zX-SG)g^}sw^)h#4`lQ(ODJsD37n%Q~?+0aS^G94^Hmri`47Wg!u3?ClfVMoq}ilyT68w#+Db!$>Cu7NB$Nkgdep>ol~OQe~Q$R zDu=C?V+2b#VvvtURn5Gf@>ckc>y_uDv(ML+;s})p&jlF?pCGyw!E4~B=W&(wm-I1F zU^nQ-92z^pO)-4j#cOz~9FP83s7OD5S+$csmcj$ubUanoN8#&OB1bUiLeb zG~J>)EH=?FDR%mzI<2eYg*W^mp--lTwGVDZDeLHHc&3<7AL3O#%uK0RUXvji^ngjXZ&L!+b4kRHZ{ zKh&hn^frUBm!vS_Z^(#`hUpp%G9WGS>7$}yR^c-$OpMN~dF0b46ROd$=wY=+p_e5K z1pz{}MzQc$n`2)P3ky`yBC50d9KZlhT;_77O7Eids~(&6Zjw4{rd4GnEuCr};QdVMm_w2Aq#4+;q(#)kM#N zBS8FCl`Wo7v3S#xz~5rQTFm&%1L&h_qpM#V zZ%egtrqRZ){26T|)c?#jj!(kxj#S%b8EvcjGulQR_|$C^lqeFE@OjF7!OPLMvO95B z_MJQ{`&(%kF&r2H*VxjLg|2FhC+;3~Rop2&vEOR800IxtOk(Icc|*H8aQg?q8#Pd+ zTK#wM5!#i9(zqy`1G!Q@uzAfGPN3496m)zBbgDlcbkfn~;`r2kNvc(6Gg~ES$~k6C zE+QT@995^LKt5~y9=a0!M=pxdifq{A!>Cz(wuH~ZE$BW(hi|rM^|g2jJ)UjBp71{& z#XH2*vC)-^JiU%9(7NG=p*8rJYS(r6YY9BCsx%90VHF@UyC6EdK&u@=@6+gAC$yau zN2+=Vpr{wut>W|UY$rMW8#_7OaL=5}s#WaPZnVHs2DU6NtBjR-6f*i^ZNMK3{@{Qu zj2c>S+G1-(y*vga+wujhlzvMl)jM4g%))iRxam&LJT9PZI?meko?m6zlm!oE+cls= zg`k?@qt+1?en5g8pjc~Wv7uc>(%&0lUthLrROp=b;gM5nhea!gVXGIk7^X#x_xV4r zN0ZYiH5?$Sa5>?5km53cJ-i#FxYFUl;ZY35SZGf?0_rVDj;&1Rs+z#6nSoX96LxR1 z26HC7db&L;Fn(1a$Yg^y;9upq=|jCqMkKS!{f(!d1dvInj> zT@kRu(83DUE>FM4Ba!zA&_k+BOX>(*iKGs{541c0QH12U8x}WY!z3+^`9ZPw-&}FO zR{yUYgDn;JhkL;@aHke4f%8SI1m8@q1jnC1u<^~Z{B+>%u1gQ$?rZnF^bjjUa088$ zBDt~|GATV|2t%$)53w`EtXp#BAVfKfqfaha;645}-7hLi!@W+Lyp9Nr4EJh*q2XRv zz+MMlm-3l-Dq`t_VQt1hl&XO!49r?}2ZqLd-?aO1oH$pp?y;xa3jy40z7IRyUK+^v z+hujjXOGL1-RK@}d?cYcJUK{@UKx5U5c1!L#7hT)yR5(!!3kwSAOXfGX!U;|X$Kr5 zHJ-9sYrva37Nfah(6g$&Ep9VkyNqpn}Z{6pxv#9P_ zxe34&3>YO;*gvt%ze&^TFGcX_3cn^idT_YHl;a!=LpH1Mw;wHN?=1+oeJpswjdS2h z3GgJeD-P_i1cxui;p~rSPcTYv+6y)ga>X$Ju#m-aoHI&qQkRWs_0Qo;g>S%H-~4Mb z^ABhKM>6t1!2A+Ua)+}EGU~r0Gk*^APszw%!u%3mI6(f9nfV>e--{Yj?LUDpzl0yf zTj=qbmcVF#K?_LoYuOC%=vG%giC8 z6~7uNOokyL40BfoE)^zm=^ZqOxCBhXG^b7d*UCl1!7a=p2@_vircK+^6^p@}~%@ zgk@P#xZ}QPZAoa?OW6q2_Xmo!8;2k+i>qMLRFo#9)ZNpzGdg<`ti`*(aPf37eJey! zusCIjusZF*n^w6$wYnzqP8jr@URM|dF!zgYu2`gQSPJdZ(I!jaZ%1PK|F9%L=O35jiiV*fMA#5f{E(C(^L6^lfucH8{4M^<7rXrW5VLP!Pg zSQL8CzRI^K^uGP(R|8kqN0K?S6;tSUt=hud*;XP{7WxYBd9p`|K- zIcgM1i{J4PR$B5maNQLCCgmWZOjn&2*m-{8U!AUr_}z?O8GbYIn~mT2=bWxm{N~_y zKYkD6*NopkZ> zlfdanqOTHv=5p#oYT>qnH1vTS5!z0la`0&6zG#D9s2l2s!PE}P94{lEKACRkN(pjE z_QFM>NxYCVLJS<|!4H-*ZxO!@K?tu0;ewi*G(v-(7F=s*eCc?U+Kz4UQc_bNUS{Iu zRy=2+J`6P#FG@iJg*4s5VVI3r=`@~LCELC%)wX>(kynCvQ$;yS4~uM^8k~->bUw6w z2NoAg@ETpzCQ+Tr6P!)BojQ}+=!@m}#1S`kTDkvf)yYKP1GH0$9ywPgUC|>22X06& zIP`;3ly^pzUdQrZ1L)22!zh21*IDRw1q*mw10>V|6jt5W40LZ!(ym&qm2K=hj!V$$ z-Kfy)WQ{)gH4YiMTz`ri#eq`{NO8Tm>a7Urq)fZJB287Gu5MyjN;7as4^tt*L-sad zBy^i7@L<2~%O~kF0Ik)(2{^M`fnwEI+zObwl0}$trB>oJH@1|WX!RJw(aszX|%G?rI$TN-AF7wlbA&peCYETK$jMJEO6fS<+bLNdGAsJkX7C zpY(F3i#K?{3p*AXNYD(@i{dkSEqPt;0)nE&nFAHuEpehLc07v-AV$Ct9~4j{joGv#l2{INrHK zNSSD{soy;j5M5FYPWbsRMAbyAR^xn9nDcIB_UKwx02c~c*F?RmJG|#%h*A&9OqY25 zz#TPlY%5t7>gsyu44sv!Kc0sT*-|Kf-MH@tCo99#KmOi}II4!nT$SL&1Q48i4f14? zsY%9nA)nQ-0D`G5PF4|s$Pp$u>Z9Y~LRhg(0?26ounMg(A(l-D0&GXIJz#_xL0bJc z08(tvIsfilK+n4$nQg7?qh5Kxc-;IB#n9w@u9%$9z#xJOS3*(Y64_a+r8Ww-cnqCq ze&zD(UVOpatl;?1Q3UrTUVI37421OTNZo~w~ogiqd~=0X8}J9Gp!65s|* zicpRv@j9bsX6BmZ`#xKq%Ifpm`eqH?D&8xV<;oGopUnh`ymgY#RXI%scT-(bIWyIu zS@J3!;<8ad_$MpRH|j~eo}`j##j3DLGyFqRRVfg&4p*`ifgNf97^R+k1%m>nDi8&w zf7gX|*~2%tYBlt8=%Wc^@qWe zj9^D*@Dw9>Xet=+CI_q77rRBx2cU-7zP+wBKZXJJe1{Wl#lu*yfReVIM8@XIB~Xmy zh97?*5u85<`!_f!$GAORuY7=~Jy#m6cC3=>;snkJmtvq3x?Yz|;^69{5-s3nU zj=Ce5GvITGw&rL20K>CHOc!9=ASU}b2mvMvPGiIO0MCpucYkSZYk^7dtWM5uPY)~} zao)xQDKLQDF6cp7_aGODOOhK$$=xbrQ>@1CSVS&vJx4)tHdG8@ zBaM0r?x&$9rC~8uC)n`ctK652@!P(9N?j}I&m~e5Ou5DTP z*2>R@w$BhYB*#CyQQ9o}m_y{X^vkKB3EZr-HE;MW$Wg1`QjS1*PaLM%?&LyLh34AP zU#fWEI?aUGhV7nW1f*vgB&R5Z;9ROoP9;(WLkppz4>4{2?b`y`kUYXKxPclPMMumw0m38-V$tl(7y> zUj{MO(I*$6L_?Zbym;|0EFu`3&@Ls!?1D`{O?~z;EVo z{~SiEkVDyZRP%(Ey}&L`gBWHjc9e&_0IRdfKJ*H}P%vV0jx2!!dk8yd`;zxTJFBU_n5|G#tfAD2cf&>)HtyV}8-EfqJqX1Ru zlm#Z+QJ*`8*c)n{3Fun_xXHB80`<>5 zn1@g_-;0O;tN4?6qncG-oob5zZ=_ghrcu%T2zE0wN5k!3kL@pJyhF$IM)sx=(j7!G~m(@mpt&!dt#u3I9RVe4!g@#GVWjWD=$64 zDMGCOuHgxve=)j{p0XFcJHd^QM4knZ?&n)(tZ(u7FKLi|F(WE;T?X7$N^>a4)qp{% zVm>(P;3-9a#HoVm@JW*@95tzntS`n!FwW;0jq{8Dg$%qpz_{lz@(gLlGHQKJGW(%@ z7^a8qi7zUG&jW5dnkdN2-7t!c*H_L0Gm>Nn)Oto&oOT?l0%F$i&ST?g%%WWhbR!Nn zJ3we)E;I_AsVr8bC=HaPXpa14-P0>CUU#V_x{`Yd8RIMZtz1}TeOO!Pf(2rTM{Xv%njs1B zlrkU-PGA<@JNygk#wIn#-^1|N1>*CX2p>>u^C-wi>wp$?Evly|1$!r)05`@GfAR-7 zM~2o<+eRY(2rSQUFwLlKnt7|b39o(d_)iH zH1jGQw7QE$_eSj8X1 zCFQqa!Aaz;CiB3PKO<5#c$pv%IEc6YIFV5IPr0BuL(=XyP(}gn;0TU0%P_X=UK0MV z`$b&&vwR#Z0eKpEwBnqneZ|mdBWv+>|6?jk7R$mGYO;2olkqJ;M4c1IYa{^=!}ACT zceQdla?$>AT$&x@nNFK!ftWF(_d5x;tXi#sh%+%Ubte!1fA|~5`0H{tKnR|**5K?) zk3>FH5qR;i-U6dI60#pX*IydtJgc0cN?E$s zC~oO@;VSisZYzi-? zwzT1y*g}w|iovx$jcfw{O=%=9#Tr=z|A7gLNiqCTMe!|a_j0r$2@~0jb6tffC$a6e zOi@fZ5$7A(M(W#PYvZukmj8KTfr4{Nd~;C!}{Pj%efQn)%Uc+qN#wz`Hxt+!QGT8+8~Zr+CNFz#pP1y+d;+CNP4F;Qwt? zxObQC?1gPe{ePk#%t4&j8gzcy5M`V)i)pwx`CTHW88yZ?Dv=u>;@6$~7}k}+YgtpJ z=j_sF=qdv%;|HR(wr$ICb4tAR<%|Z(y=5S@&TV%x_MZ{keIOO+W?%yYUrGh`u%k;D z_`_77^!^?OwoH5l1QDnPE56VatK1ji@Ellrvb(?_Z;Ek8+s7s*bz*#;_+cC#?vi902zkN^w{F)k4JUj@6qSnf9p?ff6I?tzE&@5};*KzVbM zZd+B3!P(iVcK>m_v1u59^FWTb_c08pO}wt#&Xo6}y%r5usu|^7tvB9@^13xMV6@)o zV+A-;wN{CXU7?**SU2{rb}r-#H0;Dmn|>$G0odJs)B)1~U;G^AVf*{e_HzYuh*sgUB~}jLZ36h_Y70B>4^C@-a|W8)sxJsacGP& z7CC;JHgx};Ilha`Is^Bpm}5ZzUz?aOR8_bfi462fYW6UCfGHP65 z=rjb4s)eC~E$ZxDRc4=N4SF%Frs_jIvQhx7UXMWQGErA>Ka*8alRwA7-UV2 zHgO&Hsg?C$bS=NSr(tS^&t@;X0mpuy0?uJ-=Ev-ss*SH8vX+f^M1#*Dz`8Wg;=LDDVoZxb|8>GO^P;Av?E>QpWePe;5 zG~lu6(k*Q}`XmZ%$Y0IRlNZGk$!ZkDm`eN)X{~vSLP8@(~;oUCAXj zjUQCx(Q1;ucnK;`i1LCuO;l%x%j>Tc%Fz$)K#?twmOZag7 z4THvH1o2$J4tcwZ8aILYk!p=VSgG zpO6dY#-GKT?nM?JyKDP6+@4kZOZcXEnwbmwgr%Ln_>(9WW$M9RC_KJMF$e|)@n8R( z=i3ME;6tv0tK2}>fh=4wQJuW)key25o*b4`;Nq5_z3z0i8EWbNA2WoDcCO{;|*U}2Y9`4o`XwAFN4#n9Wt<|ed!Rb@hR53 z;(Uci3R$|n?veQZWdf?0H_k>ytK!DZk$O+e+ruCnkH?em{j14>%~^CZ0p&r|8wY>u zlZttK*!KCr3Mms!zH`fa?oBvC%fsfQ%UzB!pLZG6%IO#RKliLcb?FR*wF`CR=8=2SYTQcIa<3QjR? zvwQY0J*9MAp8XFMEe3N{&mLM->gba5(MfBNJ6pFmM~0MnRv9TcFXztxIAOU*2LjzK$WPyv1RB(H^_J#R*Gt z1o&VgFdj=AGo6Ah59X@u4rXk=qej$c$p6>`m;UrTbno0%^PTnYU?r7%zHvBiXn8ZN zYQIRkoO>WH8)X|-qGqDzdz)S2l;Xf?i&D9=C{315SNOL6XeCy`EG#c@$lBBTulU;2`a}Lz_)uL_D_4u_AHm?` z#}83k2PJ(?ZM^4k@G?Ez7XCuLTp@Y|kIz^44DAn>VU@t)=umtE01Fq~J%0}kKJZA6 zHD6NrHg%aj@F+G>Yn|d}wa^*0Z_)ShL`OKiO9wt?|ndfpuj} zU4Bh`D+&njbtttMoOvIkrP5o#0_u5^^yUsn=+Rt6v>^gCfzlqClc^4^L5xC5?KGec zJ%Th1oru8tT{ZQa_8>IAa#=y7f(dMqB@Vp;xdR1L#|LvTbIKguh4>sXb%{O5dBgxM zqQ%No({nmXaTfkfkvo`;?|48ni#IFZK%a*ZepymBzNWM6qN%Rn2q`;KZ9i^BixD_x zs?Q!AscK;G2WVv9dJz1E01WA`W?urAca-H?`q#U}A%@ZD!O3((070HS+?0&rC1Hirys!$dfJ=s61)uuq$^rTn#FzDo15_H@pNLo<|)I;Uf6+-Os08Z7W(W zRey30qJ7v6Aph>d5du6EY!3(Ob_ez$qtyuLR4 zn%E{JnM8pw;Uj>2_FYO-L>FNKxB^a`AQ^7P(yqJ9Zh3ayXWgz(>puGI<0`CnO#n0D zqY%(q{OTfQ^~SJn1PW0p^Zw7d?wNdmw$J-M@9%xz`Tgd)?{nSP_s6-;b*^*Hl?Y{( zR-aonJe-);<6OG$QVQvc^BZsSVvA`^6*+km4`na2rw+ShOYlH=a_MX9-{*b8KA@Gv zX3>jR_lhh@d{n$nd-G5-6wr+7{txc-oPCkjdpe2_#rt_cq-e7+fTWx37fBB(t$e!5u`*{ESLt|uG-0$aIWKS^XbZ4NnbN%p# zhCP#|r)FIEC4HM|TNl5bhcf4IBso;>z>VZA=k|^r_bF;1%T_E{D_haKstLMU zA8ZYV5UKkMpwK&n!LoWZT*1}DcFF?Vor9E0_fQ--PK5Gy)|0w@IPAn(rtGzT5M^o4 znsN91Ix?=uw!8-t6YTtraU{-4VgmZxj5U&WIPalz)`*SKS(R ziX~|EISE?bOVH@|IE$*`79E#1XU|l6Xw7%;*+;a*JW`+O{O(nvRIZRHl`Dy2FZNF< z{q>r!-g6)#TZN0;2zme32IrR&j!F}bN)v9{#n`C`0pup$H%a)OLlGLN!D~4`C1`gL z*lQtKiJ!B5P~^eo>OUZKz6I0mZ_n{b7wonk`A_MAYB}?jgWl?kyy)R?HP(d8iE#Bf zc|&0<*ji0nyPYC|d)Tx!-C(yjf2^Gn_*dzV($}oX9o=3!qpv4^z>+CFfwhaXYbHQS zwx7rzcb3lBk49a^X)Xw_=!sWAn$pHBpL7b#C!G?Ey>FIJ#4iIs<}wgjr9_>Q5}}AU zEr(L*JB1xB#SThgN6SHWu)0Uy0d!OcQ3I5<0CJ@Q|rg9GtIpcTCT*#)8Wb(H;^ z>9TJVTjr;2--vkCh+MmBgpVgyNJl_hkI3f&7f4Z!=QuEwa7_MVXY}a~((D6cR1mcr5=H$yF_V0eBUuR>9$NuntX4x!j zO*h7`Ax%wVRBJ^p6oz2ZEqlzRH*@Si;q)X>`cb5G^$6wb=fs2E*zNJrR9D&UByccBn82p1*`we_Gs{vgyA z5AUYb#z|Co=Qg3X+F^|(?q8V*6nk?b*Cs;S!p@J6$jrGYGiRtw98@AZB6{f;DcY63 z(n_JVxS&XO-b!n^@=lriU>GE~6y;M!EG`P4Je{HNM^jh*tJ+Ql<7 zCfO{v%}L6hDJwbImjz9?Ozfcm1X5_QBqs-@63NN1mgJ#L8=uU5bLH`eg^?bA__(?! z)pgW8t!|IHf|2463w02G_@cTVGK)X#Q&(g^;tvPZ4XT@~Zl1dN>WaPJ_``+j7O6X4 z-C}hos#~INnYyCn5r4Q!-CA|0svA~!mb!D*U7+p~b(gB!sO}1NSE?IPcb&TH)s3p# zqHe3YTh-mB?qlk1S9gcHkE{EHx=*V6l)BHT`>eV<)qPRjHg)%^+o|qBb-UDkRo!Fi zzNPMQbx*46sC!!79^AyARKy=X$IGr|bRYeoUoNUEdrta6UD-*}59$Wh%~eLAdlcD&-W$KozTcvKTx>MB+t2;~Gx#})ZcZs@7)ooOFg}N)% zji|d$-Sz55)ooF?Ro$)XZd3O$b+@a#L*2*KeL~$Q)qP6cXViUG-JR;bsBW9OdvVYH zY}wE3-AS?kgC^AE0`mZs2vlSqAQ6E;BJu!<$fHCai`nYRdVjJlc6uV38Z9tg*h^=R zVX6Np^$NGUkH^x^U00tMDSsIMaMKLy1|6)o<)2^ZO#SbctgKug`1XRra_-!oT3C(@ z8s?i9fbQlEc@e~kZLJ|;(Zg4s5SF8fTq2PzA``8IX!x)fHPUP2JB^16wcXRU6bsbx znzCiF-es!-M#O1*!I)t82t7>Q)yBJX6;0RZrR=F!kmRDc6OJNRU4%4r2^*O&**%H6 ztYzD_43%qyJ{l)x;fkQ%!%pG%*hhECKAJcZ+I~aCEdG`OIc_&_vAthXbMf02pT9M$ ztf1+hjx0EwoJafqd2Zv4*e6SW4}NoW)AcA2UbQ8h_04)TO}S$N#&65frjrxex`*7* z#>p$?$q6-Il4H76|JuzJsNaGTJ&>rE@?}*>`7rKVG;V)|_jOLCi=|){5C@!x7fZ3N zO>0=}kliVn;mlk%(z9iAD}|LBe65QvY^}-KviTqIX|2iLQtfX%P3yD{6G6|K(PXXBLT`45L5{;O98={0814R#0juY0l}F7tqORUxBxp85X=hji~@pS z0lF0MnP83regpI>P;P+0%~H^S0rC~7GC;8cK?9U4P-}n%3gjAKg#tweh$@h0fNcs) zHNX=J<&;Tt8KpGfvpBOuD~_}^eFI{0sLQ*f^IiJfdV@WP@=%&2AHM569!nJz>@}O zQQ#>9>`>qt13at1vj*r=V5b32D)6EK&MDBQfc>?{SwiA!83Wr8Wy_EW(ya-`(q58f zh6_N^KPwD3o@kLFxrO)E8t=|dzAT$mQ?{C5Nexyc!IJz13O7zeHVY*N;F21z_1t3q zoz~>nTNisxa$g-v#(Uk@@!`gsb2OuxiQ&ep^fmg@4oRoU$~33- z@LoLZuWh4v%>S*@h*t}p#tq`H-Qj_e(ll!4Qi4Dpee2YZc!6pwLG1Xk9G7Y<=|{C? z2(LeX!ll~EUGj?yI({G3mLd7(5!og7AOZ(dZN>emw$5eo>EAL#D)y2P9x&EpFA34% ziR6lX_J8s5S~ACLP3~%)%v$??YHV+#(-diWAur zxefJU#x6wFXpu>&Z(K_IyVsG%xJbrh{Y_hIO}Wd4^AYcRS^!bPq(dZh>a{Bc?5HV6 z+FhA<8LlbxGHkF|@6Fcc&7{H^U)gz1v0$kCJX!CvD|Qs`=&s+8An{*T;G_X|DsaL8KLapDyIo^HcP`KSFQjQFQviT_pLQvPB7ck>s&AM@Pl{&(|S%Kt6?XZT;@FJaOQ z491JOj1A=(tlcC2B4tOs7Ea7tjO1jfWLxc+VEvqAsQj&2Hv(5lfMlpvn%_Zlkdv>H zMBT(>){6vRJ{tMsWR>6dEC7Nb$*dp(pXbC#tPD4#wlxwAhG^W|eGQNL z#>fBU#$e;I`)&-1PD2tb87oaSjUNy^?(KivF(9F7fq2${V~uok>3M77{x+wO+RH(M z+bkR#Ol@$6G+cHpAzB@YjpvfXq#f+g-ejn)uPydUTO>kl7mnS~Ha0mabg*eyGIUVd zH@fknr|I@&=v4vEhfbroV24g7>Q1KC9D_*}tvj8a3>}k?$;qMb9aZ$jImJv#RnrT5#t&8N#~Phr&A2RQ0LD5l8n!6LvRws(1m z_|6cG3ArK5IsMD7IsktXV>2&sp18aHFvphxkp5(V62G-1zbJ?qH*EG zenKem!j?k5-G$#=QlVRy%ZGMJe@583@x(b33W=uyp{n|ay711q6p`nKorUS*ERf;| z@6GvAx;TCyii285x;UwA`QleDa<)>1<({zff}T2yeS~u1K}eZ+S0)8FqXUU=7_}TN zQK!>Q@)OP{HjXs>NU4W&VaWMZDbl&Czr^-9w*hgjZ3Sc`6<^@|^o5UwU$M1tC(V=Q z&UTMazgb0{UhH5(2ynTrpc%b&@i1tL`6Z$c@qwsNkS=7$eC5e{8 zCxOBQh{&~9!N&>(5%aR5u!xje3Zn+BlFI<*!P1>42P9MF4y<|IutYd_n0FALs=_MX zxNbpwgbxC=7syelmbXaZEH?yxqn|B&DxENul7#23D4dJisS&1{prfBEd`5$b_gvaV zD<>tCV@NM8)wn!sj_ImcGCLGYjkX^C8xU&dw91U|&%$3PnO)$ot zQ|S{uM7?onyoSH{6szo4r>I5&3hXhCZRGo z%ncRoA8G=jh+GhM{_?-M#VM5H6jKprS-LnyKn91Ui_;H>EhT=T;IIq#Nsq`8_Xj6SQnqEY-0hSi7*4thJ}re?&1bN_ToYqHk=jZE2tuck2xMAc zTkYAx9U8-36&g)A%2Gh+rwSi8ACGIa*1oi7$=WklycwRv=>U47aJvccDjo;%=;Ha7 z29bV!+4#5%kwk!xPa$i0o23iUFN`0T7D*GplP1<7{2&l;zD$Jp}1Hs2iPPRfS8fIbslK$i?AuR1mBUSYO#MMhqYHT17M`bMzPmCYs0UXoJ`} zEQ{+&yfB|MXth%O#HHhDIvc9m7yV0Fr6!uisf1`OPC|Ww;e5%VdFO9RFFakpQJ1_{`{Rh5Rp+TRT|T08$&ik$WGK%hmv0^g=AkN6cBm*?m)5k3hl=d#f_SJn zwlUwgI;Va)0^NB|^N-J_lA!`0vFuQuGEMZQTzt%%Kl2vQx4Iz5>LU0?@lsX(fL#|D z=uxk#7zU3!#qd4SMyv{4BrfZ_#Ej#Xr2MVa-afHM5NgGeEDRt$`LMLNoJCR@8`3FU=DcyK_ z)d9Qit;L^Fn)4x1#I{46c=e>#oK$+C7kc2NG-fh%+B_Wd=n(}!*_oK1^tV~p?GMpm zNDgDGo^t+tsP0+qLtBnH9~*93E&|s<+3H}pANpJNhjGLU=g%8RFp!>IFV|1q5JQX< znYW6(SP42dsr!rVYAm<)sznO(Vospw%M#e!DW4?dn940Q})w zrlCi;Mj4KFUuDOSo3{3+4K)~h4QjK>uFSKGv~`@_(|zk59%iEJ=_mVZ@Vx4dEb+|IkO3r)s(ZL;&TiF0F-sd7edL4s z;8k{13x%el>(^yInLpOU>$Pq zx{QCGXlpqCZNk}9ePf=Gx-1XQ$2a^IaC{o<24tCrwNdDku^4Wgq7{+uLjBA~oP6h+ zQC!I*nK=iqMT4$tfOcAaV_7<}zb3K9h;)lGQR^j6&}qdNYQV1=^Ui+c0ZAd3Pq}0u z($~*qWu#Km^_|74fXP&`v(PYyTIYxX0GCxLsZON45QIu|m_?_mu*`+awc7u5yON=- zp9C#*KMDOQWXgE=S*$^yzn&Ii6D>M-6C2B^O$S8GcUFIt!fu*uuGK<=@=~qp{ispV zCMf3yu`P=N(RZm$389KgNny=6pz)+Lp1KtX$;}4=CHXKwvB(LDsRsNxg)ToMk9>{J%_ zNm8;qr7re^{)BImw(2OUa-s7icR)VwPT5)$Kiu zj=9_kSVYkm5OV=V4@=Rxrj5cckivsk5)*$eWOxyE{yiS{>u93k(*~Zs~8=IIeE-Gt$jP`PdqarFg z1T`|mO1VeRdic+=x$-}=y1zk5$-n)*Y;W@SErW!+{mrD0ttb^l(u7tpLlWAai^2iR zD1^)nodb~kdR10tBAVq&@ed|eWyyHmYWa6btP)wlTy&#`8o_G2RT~T>)*#C->v2>Y ztSvG`Ji4Ubqxv_NBFaIHrG8!Z9eNJ)E9U#hA~e50@jzBuV58DM?yw!z_T!?e8TF>! zOuWV?q}>oilxv)-$Z&|90o$!2BEi_s)q(wIR}#sKJs`VT&MRFYZDC2)_da?K@_7A=LLQeH^0-`j0~RznUy(dUW^joR z%t9sid|4v;+jzLdvi~bCv5eA5IfS2GT@?=@F?wYx*<@8@9^-=&H&h(0o9J36fLgZe zxD~QC9x9=Y1`xfMQ^Cux>SMTGgY7Ai;o1i0&%b>cIqZ(QzK5&_r;A8p&Sy1>((Ru{Jlb`6Ghgsi0IK<21SOGMntjoZ z77fwPvl6q9%}C6?IAdl#W0emFN{?7m1<6mlxM|>b4}RcsmRZd5o+2+3|XxI z_x_)Tq}Jr6plh`+?7DpNYIO7JwWH%re6CTEyn1KA#Ffl?xh-?*8)UVx7rR(v6rV|U zg#)u&*jrQjiJM)4`9yZygpv&D&L~k=;8a=kKwa*9^8K`SkYG0wEE&?#u-F}J(rbNG z2kq_3wl{ zXw?P6jc@Up#&Ex)2qNC8|KVe58o$OjObF+z^6ii#R0wDSk}S}lw)P5I$cNazKL~ES zKK4K!2aB->@;#AJsryUpYZBZN&8VLNF}-Ma-<5vSUdpDk`;pT_g`AF**;8Z~K)}+a z`Se>iq-P#JEIs%HO;37dBuvT0JAlk@rJp?vMCw(xlC4)HQUegFFDC{NshAJDB9S_9 zuOPEZ>D4?jm@fm(Edys9sV;VbX>TbkovGdos{WL#eWw)l)9F>x-_iY{Ivzsh zU3M=7JaXvNX`=DZS&jyC05i~H5kmY+jK9~w?m?j)on^cyqC-^Q*v#1Fdu+qSEYS-m zR+)abT6)NHj!wFa7M0&)OhCOVi_f`@P_>}|TKEK{bS7D=r3B2FnC7o*@5t2foHUHqu*&3;gDyBo zms{ylUD}d}Rs7=yuV<$7>oQpw*kz$dEo(~ObTi{&yp9JD1%(zPMZc5fCtB`SStgY9 zgmf9+bJg2w`L6avPkrOV^n~_gY(o!dX_`cq@Vx`W`x(2me|_U4ec^ivucU>9zc?`b ze*kK;Zcc}1w<~@9Dj&+jXihlSnR)ptSxT9cMDr<@HKPR)|*Z6DOYUlU$#aF1LltyQT76!d8X{)RG5OzNN zrWrN8t^ooaHB;Swe4ENs^wYH6Iij8tW5{+iU@B^s;r`ukhNsmsnP8|Orn{fvZMt8s zJ=5@Rcc#OORUPe4)BPI$BHjNXJ)q&;;gSyj0gQ1SE~fhl&z)sbrC;(vy1&=Co@!AQ z)BS%6Wlj|?N~>SsUAq6G^=O>re}A734fOSSuk`uLv-@K7&La)!qgI<@lU%(fW1}*X+7x;vexOY zFT!asRu86Na0_ZoX}?IdJwFdxV1oU*32i0Wk?Vy%+Y%_|a+*L%AiF8AJX)6RY5EVy zL4C=ImKDQ!>-GwL7~7MJt+RG}VQ=Y2O*t7%hN0>yxoAbPhO${)VtOjSK~Po?k{{6p z#%DxBYIRWkvL~={%u57b>Zs1iva4Eyciatnu{K}J@U&Xqpds(5SC2pCHL~yyu^Xo_MfSf$U7E;aeTM<7UwhE&&} z5N>koO>%7n+u1OC_UsGy1~CBUjPdRsoa!Ajq;#7;VG{I}CTgNLyQPVp@OpQ*_ht`{ z+ZREkp9RrR1rha+wA^!rXkVUBmU=(gCUQlBY{v~FA-U2`vE5C}BjhdRpY-T&N+|zw z&ykNmr4D^@ceru)N_9+A#!gt?-BJ$UWyP-!oVCVdO-R(>>}W)r7Un2%4P`Q@dAIdm zKQcIxvflG4e|Nki=rq$lV#e!TGG4j=QT8f~*Sr63k5~32gU0J!xi%W|`yzfbUb~0e zcLg&8HAjaocOv#cf1S4{%Sc7Bk#RcYrxDc6dcD@>rx=;^Lh+6C0;U-<4I#I3X2w~D z`M^LVQ0qErt$mTEK?8Phu=OTb-IWL8;LuSMx**eaedDfQ(A(ea2W-qA8T>o``}z0s zS9KwtMg(ZBl!g>uov zR!ugt;mWYu|?b9&I z!GmT!XqEM#V)d2R1L5DC$CyVXG?PVnk$=tY>{hBT&N2MiQQl6JeN$geJb(zGuoSB= zR>s_S#+&gZ@~)@lYUW9( z;4BLEU$nvghFCy}H(^HAhZ^pr>Hhe1pEa4sFf3icpqRtC#jnXX&A*uN$} z))7$6-8JW^N^+<~uZ(r%mM->lI8x(VG(TfY1^MvlEE>IpTii#qQ@@No1K~lz`4RgE zUzSB(bX7$vHN946@Ei8A1rw# zq8rXpz5Z4Urij&o$}3tes1&OOm1?yBKCrP`a3Jjbkqp2G{iPcMYrdcGy+kjdyt`~$ z>4W~&*V;MhL2$ot!qN>x3B3~%q0^BsUb+3l>Gq$a#k{DE@1GuXaz!tALtyQH#pnjQ z*K6_-APc;dn%Ig;JcBJUFcwhuQrmgXKLo#>zn#ZHx-YVJ1r&JXa+3^AE+&7wO5RhpNq z4pzV%N>&Fv`tXZIW##PVvibY05E;gbSr6RJpdljzbCQ+5ty4H|o8nJaE>X^J3VW<}9x=SI6}iK6f_Nkf=nuG_Z+Atn?*T z*V@x^liroZ$SfQFaGq~2K(eyP=8w`78QI80=R+A?KWx#fh24_LQQ; z>Y~!lRb^|xDXV#%kN4uWU$Li@LD-hadG->Lj8~SkW3sQU4`W}+Y`@d;+cRpruP5}3 zfuTj(3Z3{e*~Fp}x;)ECu%bsFT;yr`ygj8Hxs6!6h;Dd0`&*xKD~nzIJxb~hFrZKW zA+PbcOVa}K)WB=HBTgK z9+#n|r73wrN|UH@jN-)fXYHD2 zQ){18uV=+;ai3s>TL77#*x&hA8K@Mcv}0|R(2lo4J5DcKp4~S9IU)NJI33S^qf(B| z#7o4*-GK_LS140F3kG=J2zDD4yX0-kU7QG|bRAl3q{wAS5{VUgZu^%nj10>Eu>05Y z1?|~tG6|EXBB7b|=)@T+k`2jhnKrQ$226)Aq*8@Hf3av}FzJywwM&C#t0`0AHY7b_ z$#j>RGtE|OrthlnaS3aDC9zXNm6;UmN_4b$3Rm^JYlbGXzZY{8Rijx+kC+nO_2q{N zJyb50OlHe&P>u8^J-6b$>$XAPy4RVq@4CKqV5IKFZfai{93$i=RXq5^m))dt2Pc(l z7()51{?0GH@Ad4OOZ}(`JJ0CO?{Ygsygj< z@ms?v*vkLE^54n-P5u}72WjCi@}JCqKL7MsmM8tibcNEv-0oFk61_x<5uzC86cCaU z8V=2o_>>|>d%SYI2(XB48@p2|;vC+%5T?UMQt#b1wz&4pvdq<~VrqK~`dFRmJ7xO5 zJnW&9jH=e6PV63)ShtN7GbXEUi&qxe?$^ujnQ>#ZJI~%_fgi_rf3>u8O))ROFUq`j zr&*&EQ9zOWne!4Q_bk5}wF&!zSY~g!(XK3Fg&yinmG*KqMdf(zlUOs#d%m=1)yI%P z4;I<0#|ugLU~zo)L=kgAUg3bAw=7;1uPo8_GF>@W+AzD3OApj@P$u7^asKb&ruR*oo_hP%^g{c`(-B_@id#xw*Y) zdRa%!f-LShNvGSCi?QP$5T8~(S4h!#SD&-39lx7GZA(QzLy-szUV`Ddlog7L?2q+rExj&{D--%BIu_DUp z)`6Lgg0LF}+1I-fpQRLL)CtRuxY3Uj@~PkAL%quE8pML^=@XGJk~x}v z#Nk319;YUkzS8s`@oDE0vwIko7}%S!+?%GR?4J1ADtL&~%eay}jQ{A=kA%t+|MFyw z(g`%hrW6~SeztS91+d0^jouS9gMDbZuhx1x>D|Mya=tefuI)7w_QAGhV~G9~mm1CR z$JY5gYsz&$JZC06Z0DL=El$V8By+&LVUI81czCym#`YF|5d!~EtlFRL{Wrn3SZJ>G zt$JA^p1WDOyQUC6c8~p=TP#LFA}FFr9|5s9x9h6th8(-DToCjo+Dv8gq8k@_nu1*E zJ{KcaGJKttpRk3itLg|XltEeWY2=~N2<*N!x>4!Kx=*DeL*?WJ6PtXImku?G=ns?q+|lpeOoH#4fxLbgg6C5J-(q==9IN*6n!Shz-kei z)Sj-j{75n;M}Mp&tLZ8{4Z!Ub?#cZ0a?ZpgfPBj{Z`h$dD%V|#)vnklGJv|V%Fg41 z$?@5+23_Niw$l#icR?h;J%khsX18KhGQ(9O^s4>%Iyu@ zWpxomqiBW?f?v+Ly(joZmt3s5xj6uuOxQWMGn7c5S&gaZ+2<&lwP`WTSTPx|%CUARGMFE$jbeAvEN*SYIdF)w!57remeJY6M@F-kx)C zil@wC?X6GD40FI5WT$k%dEmFHRJ?L36jVp$Jho-?vmj+N!dNdF6x=6_<%maG%!%k* zD01S#+Bumm+mtdy3Z2!WugtE>TvFbD>A9^Ll$PDM^fao6x6gxRX7#MpYFTbpk58>G zO0AxnX;~c#>{Kj!+g>Ti(a0B2sMKa}l-m`|RSQQcmmJXb+oRdh9#in#D}?VN{8a

{6$9`^mKm9Q6F!pni2IrO=F5AzEV1XUlkqm9m^jh%_={37fOy%D^7-@_)7L8MD zdJ#o;9{oE;Evl}G&_(PIi){K%tt59#{P3iyu1XCaU7V=vU3BVi&h+C%m;&1sOX-{m z_MK(+51%zLa>H(;Xakv>iuNFQEni{7yI+s=|LRtrN9=*69*i+nuo!D{U@H1TZ;Cpy z2k}Hn1TliNU)O-iMEvylPiuH^DkmIO7>NsHD2G-ULAI4TqC*k-z~eYQ41bL1Z(PDG zM{q4Y{EK~IiDTF}p`{X~Bh&~U6MYS=`i92KYca2OU0FOdF&Q!(h)`HJN+H962+c#t zmhr90*v(y90~)ybqN&Re8OfaZ>lo`4zoU^6^^L;VK|6p`wsR&NG8pRDWp6Blk+5jI z)AI!7?y@((noe@F#}F$c?Yg3w^)uY?8AWPg9GLO-SikY5EyDO(hg449<>L!{lvsPt zuGyZfc`Va1CEKNCV&6jGCi>7tM8%bX@)TI8d#qj4Ww#!bBJ~%k>@}5eMJj80V@VE| zBO^ z_}V2jdB~{M6l3<2i^4E-e;M}|dHCiwQ`6yQ&~|lSZ8x7Dhk_6`vhw`dhKgo++KdPeLutz9<(&{z?jX)M`1*Q@4LDFY~sAn|!BX!?{VyJ4(vi zk;t8luf)Q__2Yz@>7JLo039!-AEBksg)q9P75G2g@78nIZaMJE`}VXT2fcRg4>5wj zzx{*Z&F^~Hp|+nI+Wx+mW`+LC`H(ivIfDdg^C7AAviQWwY+wAEK@F#)Z@TsUN6N*A zEE+J6>JClh-bJR~4Ps$8-W0GleV?|Pzevtds5ku~8)P;)|i}?`C=?zfvpqZR-uoZ9)bpZ@fx7fvLmWF2{b@;2+ap^V5ItmmpWXSY^x zGamL(t2Sq~X6c)6b9avMRgcz+tWd1o%TQ`c3avRUAW0{3y;k)ra@sX5(DZ}F^9KmP zN_z`e?_>61cal>zk>scyWIT!XNcjGl+Q<@9Olxw3F4kDl2iOu1Y%VYDz#gkqP=k1X z?d^5*IHJuXcF!X>i}hB!ojVj5J;(hr0deBKzrgJIs^5@7_s_-Iotebio-zQ=P?!c% zn6YIxlQDn=#Njk3t(ce?q76&wF%Cby?cTPTiTvR-v1w1jVd8n_oCasrb(V*?h=pM* zG246AyWwK&-T;=inPFzENv7n-{##}kA_WXNQIL>MlsZKb<29W~7Uf*_#GK!w{m4e_ zQ8A803ARkjm91kB-0KGRulAX7XIu7hbCR??E&Arh26`efGc~RQdy$+FY4;)~bKwNt zyNv#=%E?MRqp*E#YF;$ook!^g{X^RGk^b!ohNQNvg`8JZU)GAJm@0&z3oVe&YoC zcCz)nKT)2&to_um#0+oro!-{FE?LjlUcw_=q2Fz(z0~%OxAm@zVz2th0PLsz)0f`Y zNH4ZK`|=b&8Ia<|bc(;bJVhDr4fY#?@;CVDojn9yH7o%8bCd7@k9yme)ff9-hJ)8V`3+U-9po)ayoPN$ET|~ z_5UIo7-^JF{?d7EVG(R?3OWa`(LU|}y}>>+;iwi5-2DQH#V!Rc5#sbDDlTzIzA~}+ zQX+qKY42KJ>FcYT?2cOya*sYRq&C*sQ*IUA7z|=t`qx&`myeGu2#!0ZOnw-)#}(gL z!QrvpL96H$tLWur)|*H8w=c6ke07=C-G!Gm`dTY^C)bA*5ahD&qvr%;$%4{X*6*5M z`r3xE<31X9#(Exu&e_;IJwB%S#BnSrdynRHEsM{xE=k+JGjK68^UWO`U!pVVTKcox zdagDrQSM`8Fhl?@G8lM#(t4Nn;PHNAg7$Oc%V03^v51GG3ExJRxBtF~!#cKaf*&a)`>|`v-OHU$GzqYTDg@wNQK{ z%cCrqsg2*_G6M#ejNP_VUNDID+z}aUZKuF@Cs?WXEz1#)Pxy+*5aY2d-f&3_#=k6+ z!;C+Og!K4(;i|#ouP?tZCo0Gy%mCL}l33$w-mfd`3BTs^yLNerH(ZqDU(>l~=8Ie2 z3XLxl#B0hM-B*w)a=#K%C!A_6XA+Qoi3^R=$f@EFbg-gmt-A zGx1>7xL+qi{pa)aZ18id&T8wqsosmNwVzneP3OV9p8iQ|?eB!#IhMw;1Ik1H&|dxO zo2l%;{<(5x)BTh1T@{8c;CBi}59pdc{Lz2Cll4i5gsg6$v(~#lS!U~U$KvNAHnZL- zLV9ITgHryP_8Tt#f75!j5M z;TJqRmRV=8;NRV;Vb2`q6~uDpfHm48g?fLiozUL_DgD0qMCuoLx~?a$SzDW+4@+O! zP%`cf>v?9YPiAX2gt}bdu^XbCQGSbT=Gx!&%C@7Y{oU-GGXU|my2S3!5ahHUi^7DX zj3%hM4P3lzJ$js4&y1y5ME?tKiRr0Cpf<5MmB?RI`XOz2%!+No-#*;@j#)_WjP2{G zu!?Tch4kOj3+d}Lq99GxjRtGJ?yje-U|{x_ts-|VJtFI7dOf9`Ub9ADgB6lstc^AG zvM?q+1g~{ndtv<9c3@g>>A`gI*W0WD*UrqwFnYabIl@N73#HVDPC~67|`|3eHYjo?+q;6g9of! zXQRTt41DOkd^fO0xKTZbkWTb8Ee9ha(l5~mK)?MH-Nnu^orq*|9m>6FSQFi;0s1BS z7bejblc>Z&%q|m0VRT;yq%lzgn3`y!f10kEDe2k}rF^U}!IS+GkOcQ~c9Kp|;Ff;h zHNBbYK?cjVd22=n=km`cxqsw&4gXvD*YN)a|9kka=f8vhR{m}LyZC>||2Y5A#QQw| z3jSZ^Z!oEGlUZdl7Tc4barH;CftT_($Bd4i=5y37^nxoIkU9PTK1*uf>3_cv zYN4l3e!!ge&udQ`?$4NjeXVCyKNGMf*!Z^i(C_at316P2n-oS6E=w#vATigTETV|o zW}%=wxO)Uqb#(G_2OYN^wA<|?LLi**T=aNu@p#5~n%@!47q~`FHrrRHk9DLC&egqZ zZ{gmGe|k*FdeDGC z#~Jp!bJ&y*m!qyi)c?G(!zs4MIp!#_5P@`W>`-cF@K0|H?h=a9<>!EU84~b@fq)xixYzQ6eb=kY$aLjDCA-9 zK>h)8EaAS@@=H=Axjt4-b})@lPI@KdI*A{^@I;kZ0T_42OZwwT%ZrHs(yJw}s=_eI zEX7o2W5RbkAhtO2$ZsmIb76~=7)byzd9eZ$jz|$mNh10hB%c-5(-@2Jw(}a1*II8U z=`BF}RS)AhY{Vv&MpjtTSqXO-p0K2|PG2RRl@hs(Vy?5E#^^GvjV`KL5~e6iQ&io*y&g=h@jE%glqk#uO;23+Nj>bkeCL;XG#>zcSWkD#1&W}acwJu8 zHAn};QIcj1JMU-f@h=(oi3!>j$CDLrW%|Q^T>2yW0B0z}Q}>^Ao*>GA19tn){8No& zmM#YNk*udHf|)hIt{}gPKtDJi;$ZD{td3RFL1D7{*|XCF%ER@f6m8wchp+K3b^qzK z{V^Y!_&@0WuMq!p{KqE>bR68I~E=M;dmiZ?-YD*x1SM9`u+wNQH@({krHzkn*W zr{&qb?f>bGZ#XStAJ`v!8vE6FR_9I%pHpyDyAukzJn?p6RS6D1}e>#)yT{Kf4Y=7lbbM=6OST z-i3LwdxJ2HbDMsdNeT@fwoCnJw+wY>C;Oy6lS2CSeF?GayBl(Fk+P9ovJj$gn$s6X z^dt!-AuvzbFSckI^`zrVq?6Vh?s*zL?VQv@*z3?s>^Je^*d!HM$Vy;;VlO-$pVph< z_lZG`hJ1**PL74Gr|WXPo!&aX^IIejAX(pg?NU_$)Q|2IwSdC4H>3Q4p8Xt5yAD(W2-g}RQEtwIQfROzAYdXwshlGn zPObE%ilG^TNW`QX%H7r9y;`uJN|BUD?%(1b_=SEIZiiyQu+kC{m8$jG#db{q>ZBHG zXXzC?yQ8nWR0O!MBWpgTv$4e47pT94u#N4`e*JBG`*rrz!m5;5=Y;rTQ<0|O*Kw2A zI=RW~<&(N0Sf>|vtuyh)GZF|tmB7$VOS#!y0=p3&8xR2tpb`h#Ldbkr8bp{oK}HhP z9q&^oLHb!O7ITF(DGTIRt?uV1Fl?|yS}q5AB2ar)k~!_y%vO@wN-5nxROpQrE46eh z-5rMHqy-f7sdRz8HCtrR&-BD2s&Ni`Ih3~Ly?G$d5+QfS^rt!8=YC3CNr2AO4SqDoDvz0{T{ z?NZXIrcq#AZxU9bOI^C-Jm6tGF;Y>HFw3M|Kryp{g)%&sb%lY6pasXnA{Z{`st^x) zcmi8hwn{Kq+fM~ys=g!3bk2u%NBeQW?%Um%1o{9)v?0Rik(k2ZIpxjif!EO&c!&gM z=!;-muKkeT?y}#AZ}7Kw4}luK7Am}>`5g*Ato=7bII}tXGiIXq6AolJiHX$O9rpf3 zXMd)rVu;NpFwcneOq1VQL0^i~JPwqH0h_Ha(S$R{SM-$FeoUskJyr|k_6z0pn?+MPV_vG@q zRu(FPvwN-Q+Oy=S@+5j`$xtweQb4J;&};t;Rr27a~$GinRe;A@EU2J@QNaei~S^+dSQ>(0>_y&EC?qzUJw(fx#OS7val%7^n}0z~oYFo~iO%u@RP>NY^4PS;AcH zQ+`w3qCY_Q?MrX5cDcGzqv~8;sqGXktt*wwyJ$icnOw%pBO^0R`MA!wVNU9PC-Fd6 zVtOHXKUq^~^pSGyn%vY{u|TO?u^LsjOV((q*^!maan7DG6;BHFDa(qC?~}c;)8&ak zA?VCmUxn#Nif6Zno$wz~y@BRx%z3)ehmh6BUEw&Sj@*J~?x5QUO zoMeq*_0%Y!MPvn)T5iMDfT3U!UCEA_4d%H_MtJzvSkv=7qOyyyZ(an;+vXcKkywh>ZSVJMZ4O zdNC7{n|EZwKkmN8H$TB!a`Tg!FHdFOp2@sDn|YH>m;4|vHoqv(N?&|)8!rvct(I(L zVLi}bn6v+Z2zDn!G%(obN=G^87}TgZrBO&*>g~;KGf! zpVv^R_}zMS-RAp{Plr--#MB=!3`@ryqyN4*o;{D_22Zz2>ysLH$_P$-b-+p?q_YLCR@OOi~ed0ZxSv9aE|51u} zFD*3C`!(@yXXXv`eo4IFcx15mlj1!#I@tS%;yv|#@m?U6r{;;eSKgvctmCq!T^uR zq)a?2bImFm5=6ow`AB+BTB9G4TeibIf5kKT$a}b4x1AOJiJU^d7yZdD9=}_beB?=< zAcLRW$@5b5C-cnX`{wb0JUSk!<>BdgWUhHMn#VeMI4`_?CY6y`R(chFj|1o4up1vq zFE)`;jlD!@aDu1%ukB*Y5bE|*7ZWq<8KIx5`1=EQ2!DD28R?&u!eQqTN;cvAq_tIR z5Qi?a1J5vJ;59IZyaQCbL#1o0R=q7D7p%F_$Pd=cB6xrGZ^A5C<=BUvidrVvVdqc4 z0xFc5cwX$2V8%W6fgq_hJ|PW;7T03exI3%qJvU759}wm->G3g9s`cr~C4RsR^f>G5 z1+TZr>knTLWS?H1&To$5DR$*+)+MH|ORZf&am-qmommkh1Yt#7X&$;Fp08=tNJ|pa zmxwwJk)}5iW0ncCz&zY#SJ&I~HDQfWo0wjkT3eVX&ZaWDKSFW}Jtrmz5Tz?yk=Y4zrxApH1+UImT=^l{Hf=}%h^57i{bD`eeyo^H*7UTy>8oa zKzU;q7+x>dH?>vz9NH&}&Ma+iJ+`~`F~1LW9 zuIA(VF!6Z?@!i4W!|gBob$Ux!J`ffK`1BwMjS+tkC9IA2+i4bNj{ZtUZ%HGb|K zaE>quqf-j94O7ciXq5D2KT(+Ax|cMMYUT`Ev8Yf$bM+>k0UhS)2^;KTqd~^)E4V;p^Ve_+mAt9I)LFnPp}=M~}o4tNQuwvp|iOeDxJ5OfDrr zrF*8M@)ukwhrxR6wZn8Npp8tL5>X;thTS>N{d@x$d%M&N{i3>l3&8b84-5UC+5TNm z-Fs7Tx!39XqE>_x!~WLJGmD{e1>OE+SZwfP76KNf)$-R;Z5k5>l~ntHsWuFXO^_-c zQ{ibn@I0|Agv2uEa9Y3mqtp-X!GZ7`2Lc1$w%hxnY3O%DQHL)zFs5FW0E6oAMN@}< z1(Z_A{aiu2ODpC4uELl7}596F*rVORi60R4WU%d!W@_SsyLW2BEuP`Dm>kyl5FdF}U^z5F^*z%-o% z{^n#efHWtm_F?fgVDVdLKz)RAvzsitf#de9HN)&t&hFVv2TWsKK7UV_VO5ST^@oXR zdz~NuCmJN7g6u@~UaTZBqZ-^9RTpp`A_+T`8?7tIt`+M6eh9>XGn^%s6AFeb;u{m2 z)iB*`2Md#_rnf}DefF`$v}38JgUM<~`cb^hxu(0n7Xk=IwYDABIJM#&qeeSV?tGER%Zr__oCt7)0V^F%#&POn06ry)fF-C*e zuY$Ag%mSyuj=vVtE;0R6dsgYi#^cO<6(yTAMoQY^rI$JjD|Fgnn5og6g4ITX<; zJG!0G4RgLrPUz&W*uF!g+uQm9)IZTIo2hrW<4Tn7(*q0(1CitqUnT?^yL1$7IMiL=57kW-YIx`;VI97HNW5$zy)&QS8y>Gb1gtH818wIRrE1; zas872M+h17*vp@*xfb+VMI0E+_AdA0 zZ&>-_%{nDjSugx_swT{IZr%XH8v>N8H^|LHZ>-Z$D>T$f4HY5OdOm)e+v1`;g(1QR z!}yPV<2>dR!t2Go__a);sx;=0q7&scqupBGI%h0e3#e zPA`SLq4Yz-v?|kF21uU$Aw4ixUe^T^)1Cxa$CwGOq_^g-B=o#vw8*?(P>DQ|DE*Di zC2b3q1hj`o%dy#la=KeQYjf?PR?(}(M9skA@t=4yK3*q5$$9Rtfyr<5>>a!?fJV=L z66fB>aW*`Kv+xOVp23;@EY7_Jr(bWfW?(M=^NN%I6kKt^1OTgm- zp2WGA{6{yP7O)3r!#M$aQ`=-(%3L0rnAV1+=qKxiI_&4!gJ)aDQ-Xm*19|F7opCT;YunUAo*2&NCijjDh@Z! zaRTp8{YY{nJO>Ve7iw&jao7~gfkK6UT$Z;wPfj+b1xh#iSN%_;*|j@;H=R4)>p4&t z`bXp-COX3{xV?hKY@A2;8s3l-?hgwg+0!+IYitPz<+fJ98 zOXmDQg()F5izlu0um74I_Du>0)_)lpGInh~+k;#l_c}D?t0Dpk=3;Y2>{~X82$5So z?IBHYw@EhBpn~7Af2;HxVt_UN1pIsH8TzP~#Z9`%D`&~6ZO5dY7^fsH-_su(KvC|; zVf{X8=X#M9`}B``ov$X_he#-o9BpzWH#*FZtWrNZNXF?k)2v6(_iBYIuVGH?qik#I zZwUc|7Alw*&xE7A73y2cmFvp|yXNud0txHUXZXa)(>`myhyx(u2avSpw-HvuAa5Y6 z%#g=((5aE7K-MMa=uH;bF^DA2-TP#9IAe|P(F58d4yoKva#Du&)oTQijNM?JDg>Cz z)m9_$Eua{M-D6}Z$hF4#^|E&KwIRCz2<{*`QLviQ4SCkqg>YNb!3zflcN?zH1Ye?A zhI1c1(A+K?)Kk^3x*}V&AB}5#MYPhn=e_gF5x_7G(1sfgf50guf@}nLRzWrNC3nzB zrDTTB!DK~58afk#^ks{@CX%RI!SHhe6+%)*YSUDy$-lHBvUhgBaBga*fNaxb zqt~*5casb!vx1BmX-G<<;EeG(M02}`x4%EM`8RUX%uz8aXI_Zkcg7rXa^A=hvuB9c ziIp4??b>RjZxP;mX?xS?mZR9)q#Q_d zTh+)D4vlsAgwytxsUNAZ`4I_^OdfO_?Vk}Qv0DB$(;CRxMm}#MVmieexw>EbHr^m6 zrBrr|BnPx^R?}^!Vv*ZSWEwJf#G#dTO2cr@Y&{>STQ;`SIlC0Ou%7M`w;kO6({}Ka zz9?8g*}92PaqDTcZ$Xn2A8AHrEaiT|q!H6bE}>6tYo+jRw7&63{dE67)$IL6V(M@F zG?5zHl1di3uTn|3GkT;mV%Jm2v~464Mu-)$IlgE}UI2BMbv~9akyVnlUU9~Nb88hp z5h)~a$GdIqr^blT$}c=JQHwl`Y z3VNhA)S^TxoS2g0t97TyCFdgik(c>g#^*LP7$q{;Ipd$d>8RZHe8{?U_k^RRd#tHl zo6bMrMRi7mXo4)ahk3wvAo_W0S||LC0Me1x{PW)ZV8@B1b7q-c)tbFaBsrIjZQpcs zyM2hj$4FJvwC2C5$rAGQOww57&7|espJ>RUDzyXBnXqpX8;I@JR4PJckVv}kxV_t& z52ZKnolQq6B78Erudi5I)tbf&GM6fw9U!6ROo3>H;C5p7CMI9v;aKx&qW>V3kNCg8 zscle7kg0EJYP_5$MXTuD&q%b5<|G+5DEIBxMNEia*(>eWR%6q(fE$VzaE0@{_p}>J zfROzLW{)OUCXeREY^z8D@WRLAywT(fKH&KVpO?yw$O}+OI*95Keh2xx(fGQcunHnu zltA(3uRAM*>)2ei>&9xT!)<~CHdgdnt+WZn;nKyv?GqW}QQYSNIgLkEp9eIz*-4O> z6q5k+@RM7j<#y@0`duby|L@x6YZ*~M&)A8w zi2V;UJ-;UVs|jz)g#E#%PS~kBVQ0}eX2Mo6XxbBXeG|4oGDOCX-YLw4Dkl{4w!+L? zMu;0*=4~itA29Q_L+0(9pE7TMlbLIWm_J^I=DZUu2DSDP#IoKW!J;ZgQ=B29_1>jc z3%p0{1MMfg*ro`jP(`!udqa8%Va@q(_T@)1uV?b?H=z$zdiVdnR7FN+-3cEr$LsDet zAI^>Pm;~*f*t@;xe=>jD-yPySn*NY`OD|Ji^+25mjHi~50XfSE9wLGW-dYwfrmI9U zQg#l-rT=DaeM4qDY!bl^6On$~dbfBi^ecjxbp!FYu_!|B{65@v>sgp1xE@(qCe z2Aa^;@+Rg)YsYq6cx~+SMa0eNh^veZ^>aA{QXkG6o8_zZXRtO0ap3vxmJPXcVYUx7 zl49n_1=hTK;1c<=l#AmUWzbLY**z|&_JA^sZ?=_Fi(IC$JFTZPPY4qi-TQR23x}}%aRiSdyJlY zc;RhhCzyNEqQuPYaO zFa6?HmNnRconi~urwQM1rH>}bVZ?s`jTLub^)<4zFARAK18*vGD5jgECciN+=I)|o z8y*$eA~<+*M_!$8%dsnQ!?)~FRT7t_P5Si+iK1|z1~1*qwFB^u?Uf5K*)eBbon1c5 zE_;S*&`g0arz37V-Na?Bs4eCRCfM-pKN#8MpORF;y1eS{SyD9 zeJ(3sqJ048CBypCaU}6i`%UI~-yrjGMAj7Dvk5KHHJYMfn>EZK)xRTEIiu)d|934X zD8jlymg-T`x3A@lPfp1MBYDCck+_O$sTs90yiF?UL9F@b!O!VegeOOOrR3k1JkUts zgiVbbbKY?P@m{dkA?Fs!NaSJRR3Qs#^0M#u*`t+Z=iMKl*5mEq%tyFwUbug~@!5{B zh2l-8)5Qr_>3NovXW;pUoX6(7r)t!3*rv91-+So0@Q-*|^w0ts#j^8V7$mRHl^$7j z*VCT99d=`U;YZX1SYI)a4A!5^~Mn!G2GKMCF+8yOPMu}w3n}v zPL|NA89^Gb*Lr$A+NxZ;3jIksTzkE~un@yqG>Kz@fYS)OIW7Zr-{2=t&!|Be8MODC@aoDt9KeF7T6SP%wYhJK%bl-Epc^LxlamN+|C`fh};bL!f9Yhg+cQbJ%t@>eRa^t$sw9EFg#611Rys$URilR$ZpO^{+4=^Yc)5BWQWxgwY2Q|N-<1_Uq zYh-Yy%Y32dGs6>d!yUE$mRA#Ji0|{YpOc0%b!x)iLJ%v+_1gKVr58BRbBuy5VNyyN z?B{I(O4PFZpr<(SK?w>qcqS^Z+PHJvDX6?S+N~>6&`28345nm);{W<&X;67D0V0b`}IN$CClKrHMc9mBaN)(@|2Og_D6I9iN7TC)9VTsyISvd zW!;pJ(3B=vnFse>`ZSWPKo?~p%vASZ!Hq0lF=5z0DWXqTA(3NeKv)ItvL~?1bW^uO zi?^dd#LLFf3QJadk>nKUtx}Jg(4$s$GW2SDr!@3wpEjbQxm~g(&%4|lXV8&W6Qw;0 zUaU!<6OOq8F<}IV2!6)PC=M@og}*6HJOzTlPvEhQ)GNW4rSzc`7FhEqMsr#5{)5uC z5&bvST&QYkxMk;H0cf6RhNkB$Me$p;ZJNoW=lI#b=!>TzHw#Jh_`9P zlV{Sq2%HG}xP>j{9A&XJK6j~-Qpb)Nh>fc8%OTX{MKz&<&E2mj=_PKpSLRI*&ubte z^!0(e`q{bEIZXOj*4I@LT{7XAj+g0Hf`*sXe*NaDRFumU?#>w*BdTiZ{*Y{>o-NhX z+Ipq)%H1L7X6*loQXs20O7{-M)AwHo>ESXi+VoDi!&C>5@0O+Rra|{ncYjZ*+n>;G zM(8P`%;wEe8S4Is+8q0ZY%^KhMI)vuv6+&A4}J(?v)> z^)feOo^@toIL{WIx4b-bOM3pjQ&+sMP7Sexi8ZCvc+lS#M}bqDih-lwtkod8Y4A zef1->ZOUpHI{B;r#IJvbzIv+)+oZy}BrM7vm5lF%-qjK*e?bKx*dbXU$rK2t zTX1z30nwF9%1czzR#c6`oeeUQ1{wRG($OL^Ri2(wCsDXQLErtiGmX!lR&p>q#wQe3Z_CNFvre6FP=z;a* z2n=Pc)WUgdvhTkLMU4UD55$IlCov(tO@2KCUgPH*AO%r<;>;^cz;upfh=m7qm5#w8 zE}%x}Wkz~H+K)-EnA*6Q?~RD5i;LM9jcF)-Mk#)l za$G0{hUnH*SkF1u)2ljd`hRl$C`_|6Il5#+x(ZYIS2XNMf?aF-cV6fO3Hu(efv{Z* zY><~56129pym(m{765#K1+>+Rbs*rsTGBT1$%3;VsYNy1Crja@)@yxK2E8SA# z;J=d`_BficPQCpB;y8xIR4c&GRQ(#`xm%8) zMBJtnnxyp=#-*zdquv3$ukKtyT+{C^;WZ%!xMgPo$!j@}MzNOB3tU z0XUtOOr`E!ghuL)AtGXy5wnD{3#?#Xm&t3O$0cJ?2HNU>6;TM&4~_z!Vtj7Qk#u<* z9+W};O}V`zffCteBw2BfoFdL<#XWI~IJ*_MCq8be!1Oj8kg$1EV}*>d5*zV}tqLSt zaYLtwOHtK!PLHd$Uy87@WQ>eBcaLF3OeI1FlhxEOo7I{w$yK%LB_MD>^EOnB4C^-R zfdeVth6T}JG5thR!j_t0df9Rb>OOFBgB_z=+++4O+$m9NO>5}nl};)(F8H}zP7L&n zQ40j3qCy!aUWQJ#@nr3hFdpKq*&IUhCd>~RFfIa5J+sGdWM(T}SzndT$!aEKiQJ11 z*=NADa5bf>?8fif8E?cWHK$7;E+D^I#`JS-EFm5CiS70)%OoC+rhZ}zM2Ka3N?>&) zOS?=AGQ_Nr62AzH9-VPBztrt!{89PoG8AcYc3_Bc=zxLWurY#?lm}=6Lo~OmGl~qi z(Oq*2WVp|aj1T@Tij3MbAmcyQ#UbNTn(L0d zH2TN`QXV&Q{jq#>{2BDDH^?sRhz_}`+&oHJttHP1v)vrneInlo|exNpJPqhsd} zqv$x(`mwSt4jr<7Fl9bu{TMku6f#&x{|WdoXN+C&aWI09?Kl^*W=x9A7>j=rhn(Bz zpFMK^>jzQfoM}C&4#XknY}XU*v47(Hae@?v*&McvISjl)mgcBaDN*@_o>%nw{g4mV z5g8W$+r1@)1Vl(9MT^fB{uh|c33sML8DPMK2{_}v^(1ThyhTdso7?#8aJ4UR-)zd) zP^Y_8pE%`ycMB2lGdi3}ZSVx9JG3=ivq~sznV#V9XVzr`p`9f8Wn8T55-W`w(LtOT zr%-jbqW#sKFYz$eAap;$*>iPnum(#?<))8{5b{4Rq9Ph0r+~PKInf9?1R%6Y2$pzh zU<4CC{I~rH;Mr)D-%aEV@{Csk2O1zN_Yo zjK>0Vvwzvkc-&8RCwNfgxX1<0yuV%aJ;q~+2p)Ykv9;?KHv3P-Z}vSc(ed~q8g!7~ z(f#fG(fj?o?Dq@-ri^WuZ1>V=MvgPwnE}Zyk_P+Aq+s&NYgYwLsUW2o9Eei-rIG!< zLhbjWkOO43!zoiPf>9wi^%l_;MNGNK(I6zIwt2Sis=k(&6LV(!=pK5;jPE*-q(604 ziO+4%De>tk4MK9p;t<(NoWqP0k~0>Em{Q_gW}G5DI}d~C_L8MiK!ebnvD9PC)LCX~ zp*dr5$!1)k87EX{Bu;AGbs(kX<*$$JYd0(2AjD@}yx(e-pCT3cS(pKSMb11^4KEdD zH8!d1suI6DDW}BWpQGjoG+|K(b1Tpz+HINn?K1nUxu>n}M0eoOZhl&3`;!zfMaf#N z{IY7L(6M@9hAQv^l}1svDow}ida0b2GrL~J2yr_yts-|-+O7lkt4iwK%X3Q1v_kZb zOsmLX3+^(3o02nonSv`+a3t-;DntlmlQ{0IWf?#GXEOY%T5&}bXwhN7-%2UkG51~Js@Bc{ib8_>j`5B`> zPd`7iM$XR&3OZ6{wq7MVmzgquQmH&5KslwKa)#1Alm0YkC<;}9V;21>(q`}&A8??hj1V zA7cpTc1730smAlO&mPa`317@y2X8*ZI{4T!#yPv`Jc@HHQ_@p#x8;U zPvn0x|JNiOdSAAXmC5WkbZ8uMSIs(mB98UvIC#vi{u3a_D+$_VsCuyzu57SB9;?EIiJik-OQ z!%16k$z5^S`HYDjp_e}reiW??YG8lL`lxLlF~_wJo8!#LZZ>5#!QEQd%l5I|?c6qS zf#Pf#9}08tonZG6qbss~Q;6J3%;G)U&O3{tPfTl_(OU5QF_tDWS*>95lnJcknyT8IText;$mz!4KHYyWm8P8@QB}) zBD_k1F4&TK}g;*T$*sa_6joR2K5$u@r|qH+K=E2m+9r;YXO^63AZ zh47eQ&=LTJT7_2{Q*jk}EGAu)+^Felk@p2;q0r}~;4c8d_+lU6~e2Z_!&7ywXnWM31mkV^&C4DP#2+k>3@|f0Cgat3B4$`Wa~Y z6}^^}AmYWs_$&3mn~QW^L|4U*+;HxT+z`z@BIm8idQj%FX;x&2%Yn-DMg@=>lZ+~X zg_bbaNvqPyDH$fkXF&Wf8PXs1nHk(xhN>(p^ zx5=iw@(eZ+&>=Y=f#?XcBUUa%g4ReGfjn?5{DlFha2A49U^1oieBebATySOSf)Jm(vBenlZK zV$WnW`gWV+bGMAopT262&)8*A6TkRp7e<#dEQ=jk46KZ3VJ2z$&zQoK(x5Se4D*d# zelb)WZP19yM(WFGsII|j9H?@xT2?~#3<>0WVW1sN<_JA zBQcQMwQYn7rJ5h;AK}enkkuri!GRq_uGb^?m(SRYS#~qzz`a+nw;7@UM#~qsEqc)gbJtoQzNG7rbpw zoE)%;J%n0u(Z5UxRTG_V=mtN@{rM@le z9n&P(>ZZlAVTD@fjMy(jt)gBUYXs>#n2D`oYgE#k`9-xTF`>86E{}Ni5rHq-?^S5M zi|H?>pmEv#;@rS#IvgNgv2pdcOKS2LJG8)qfC?4-5IrfAKc5=t9zbq|L7#K14Vu0P zbd6GQ0yMkB8Fp}eqV2iREF2VI3MdIz5m<1*@k_BIh(2bqGg#!*i(PtJut>%Jrhw=yp4wa^Cz?fT6E`*ie!e)HfNV#DHq!_pf9A5r_wV)Yg? z#`bDs>JQ>=Jeo5jIzOW6#lWtae)#(zCA}E$HPi3@Na@8eu$lfxA1S>U9X8W1`$*}< zps|_0;I!$XYmVvHvOLZ)`CWQ4%9JT=^AN4cvMKxjLF6?3S$;2|e+W*Sk>ek4YNjU7 zHGX*yCa4D+Gv*o3eNQ2YEKg&~Sxx*D`Mot>CsoFG6~-{$UbEMqa+Rr>8Mxb?;Je8x zf0i9LLd8Sb}V3szN{}p0?!T7Xy5qW!Z=XUpk%W_ zn-aq}*&|9^)ITt=j2-vw8vMNA&oaNvuB}zxVX(fnUdeP)snHCrtvodAt7%JUA4utk6^TU04QrY_E0uWsr1I4ZceK9)g&iwsNlfU}@ zvMKu``oF2Rr+nvxithIsS5i{otz}{|;1DUl+PBP>>RTD|-0$sgV1dZr*;Mn@9TMhL z$&;jFRZjh0$Ibc2n=bz9-wkJ_~_Bd=kUSqb@t7nvhpoDY565I9A$%CAY2!+deuM4!sgV|^ zQ+#Tq#U)6!?eyKC7Y(pm6b#kn9&l!?Ih9&>}u*x0oGxBV8&*HP?Mn zar&In!6j@N&L7IIAw7HgP2-Fknt))thoTQT+W~Wpj&(z7hnYia=NVvexr&NU87 zmTJeW{C!OeLj~Vtd!MpT@fTPhqB#E4sd4-w11YNeeG-lXZ>5XJ+|8m< zBxVdNvv56%=`?4sm`-!)V}r$V)Q=mR`Yb{8Wh57u1mRML(`r`4JO>Mh0JgV#jZE4x zy3wQ75B3X?S}51s&bktDwK5e_)%C|2EK-;l=2-vFz|WVYu*PLW{%ww$QzaZC!qi=3q6&m}^Gi6AYV*!};&u zixX5%DMNwn8R)|lYzp*d)EHA$BLDdqoiwt{_i?bMoFX$bk7Y_%MX6Em@;~z-e?cckF9q}u{oR+V!@|Uyn3--jTSW5nrO-1Ge z86#6RQLkYTKHD@g2G7|!OU2|rd&k?jF9Wd&LHln;KngiGF+x(zxWo}r@tx1RtmjJS z-|v{Q5^Y&S#=Y7^YV`b&eY1FGM+aK=k(G`hDT;a6)*QLFZYzGc!l4?+lwLR@k9WkV+@tY+lerFAo*0@cH)|r?y83#k`tao8&{db9C z-A)~IT5ik@t5amljdEiEb1||4kyLm=Ty>S3s>ZW_J|4b=b3W8x*gsohbajs)8^vgp zqm`vRS0NX#(mV!1g${WekT<8i4a%EbJo6luH!gFfd4`nM>_||xPHozvNMct-deazE zs(`A)+O%y=4lR2RAyoq9wjpiWe@h5PPSS20BBc4CHtl^0d7qHxgM|1EZQ7uO05i=m zHN% zW&qg!hhW|h^uO7{`NvlM(yBr0Au**fRl4=eP^p)Zn)V|(Kr;u>UKHqE#^#F; za|9RZ1173qv8QW4*^cN!Jn3+y(M`CUPq~S#poocGtRNAbM{qX5swxCqBPn*RM)hZf zO!uwDmB`_Oo~`)t@QC3rm_ysH;lYJvPfs>4QreR&ww|4Gfm8@d-Lo@TMe@Cg2{!FdrFg0iZujn^n{ zd0^-o>|{x(u(C)tD9IkN0u)10uiS~-)1px3%)qPc#)szz7Y!M2gy1mhL*gU&?+>!x zEqXHWgp1?Por`sR^-7I1GaN`xI3Z1P zEk8VOx^+80o!|`k+<88Uz*05fqZr`mX}L#>?DC(D>m?bXZOv^2L1Gg9BStb=e%-!!2i{=@J4 z^LW>{`ETKW9sjJqDeKN^{Y@|Yxa)6)j}_Gp80!1s>+c1U+G(c#@b!0K<*C-+YcBW% z*IyBHz&ELM7#AaCrnlnlV}RdZtT`+EW`At_8Y|9bfBS=^&ibhMT~F$h_qS&=K0*9O z?nBCif0n7q0Yxt9?vht5(vIU=B$~fHo^fNtE)@{@9y97&E<#I&NW8=R9%@V?za>eD z58~ZiTN;zN2su~Vf--SEX1m}P4WS=AIu?^ABcsJ!ZUpvJCh|zwR)LSny*sIvnKbN@ z1H@Y+>S<++)|;!nR>i0ib$Kw+XD?KBib07%q#Vi~Q8+U0Zt{uzNfj-iLZTVev;vv?WC$Nnm<{wpN4{2%t>*QZA8- zeVM~z5!aj9QK_NsUDQz(ZaH@2%2ZA)6|hyh4cB#hd{r&S67O)dywcTjybIBGO3RL} z_DU^Osj2=mD<8JrsX`)|FEcZ@d&2!UV)u%3w*YhW{|5V4{!Q0a9rpk7L^nYCKO?cQ z5G7Vpk66&6h0HT;pqYNhm+UgA6sJK+`oDNUe-Bs|R z_0ws#x>Bt$mk;Jv_i##BeCwt}>u7-af#@M2js|A^_)2SJ{n!8|bW+qdalj-w=QWwV4XtLfW6AoI%*S1{o2TYWTlmXT8Er<3c2KS4b=5~<8x)eO9?#TR+)jB zp{H;}HVMN!CUB&9=IQaSQ06W0u3k+dCZg?8XveCm*La<|qVES!xUEHl=3=_K(FV<~ z@VG~i^5V86P%`8_bWl#|Qc0Iog;N2hveen-d(1KlI!Hkg=ud@~E2GUEoH_U;d&B<2 z#_APHtlF=1)@7N9Cel;qYY#h+5g#`G@~>v1@{=INB^pAniO%V_>|e)2n#jooU@oKW zHbq*PV3g@+ipWt+d0@r)M#%de^UI6heC51xVsw*KY)wmsur75tyzeGWK ztor!t-@lyI`qx0}3JQgq{s`+IsZX)~X`kr&w}jKSoMOcuqP{=m+1N0L`Zkt%nZU-_ zCFra)JEX@4nM0n9`uU=h#YuErnUtfRp(9_5DZ5R)?Z4233ru1#C_&Yc0kJ%qxLUlAxw=5ad zYJN?_QmX+Iq;hy+*eHDCCo**x?h^WFcdxcaZYsj!D+?nZs2s}A)mHln!M*lSKDAw4 z%SW7r#Q5PV{IqNDI;-*e1oeqA2+Z^O+40lvtUsIaI!jWwODBDl@tR5MlgDel^OG8{ zrdh@HRL_`;&dq4`A;Ir+cbpY|jgO7rj4z)Je&1M1YS%}lhyFzBlkuB8?vui=jIV(L z1ZhqYy8j*1`9aU2c2B1G-7%||GaVv9> z%VHilhxXiXeSYPeD;Jvj1>{w=Ptvw{21HY9IA-?JYy1~#PONGDcOnOpN1hw++Rp!8{(sJY{DMP&&gBenW`E8( z#dv%63`-TD^?GsZoJ|Pw-`>Owc`?HZ<+WP`B{BB4Is%>jF`H4y7^*RPnY;QP`o-28tRe`W9ZYZ}kb2*gCz0Rg z3tOt7>gx`9+j?uF<<6=lG1f z^h8{OOc`o@opW)^U1M$zJawWR31DhRa#?#)vG@vkkAl%-ska^N|00%6l57m0GRBT) z$hHS%Mq>Lbfni%Tr0=5!@_l{BO#&7pCQOL-$_p8`mvb~b&bYe}uO?OL|I#I{k-HBi zz57djSKwuvZJ)mA@VgI@SKJo$PU*?_IJNaTvaN_e>|Zy5g-UiE+CF^i;-Gm3O;4!l zKN!VdA)+YJ6nuIJOjhd`>Vw+Dcw_=~)kZ7%g~o;rf-*$%VKQ~yJp+EUsZSO04 z4_vbC$lgoNAG#x;!(ounzweC0ULfl$gnk$c_OBsE=NdW|_O+v8QgPhuikU@?9=$9k|CdQ9z9DUNWVd6xZRAGeKOHdF|R3Bz;)pm#eLpV<%sH9AFxByc0JH%B{<5 z_)>AIDL{klHwit(Ew-UAbhT3?1s#w=#c4Hr#0*7~~n$)p}G zhi`wKapy{@vCJccFKm)#1y@o%`F=ba0+*?Y2$$%;lh9A)I`PZ z6G%MLe`x`UA-&%&_^&ZCZkG!Z6Zl046ulr}Pw4!`U&p)N<-hQ6us-;Ip8qU5{mc9( zBqt{(CnqQIFMl@kk!-h~W6;O{EcK&e^U!xu^0$w*UoVO6*UL|{U*pww$PgL2C`zN} z_|k%lM9nz8+W4PkR@)-lvb%Sq3DjFO6oWb}P-Djtwg0p3q1#oMv1Z4;V=k+(Cpt#* zD}}dKO`jEt6?=xWeN3D5uiO+u@)A$1@GkqC_&Zg4LP+-(xU;Hj=IIVE3Tq-d6=Q4; zvddJ8n#m&!F{hFZri+xnp_ED*tqUQv=Zw4LqlvM;wE#jJ;}|#?VjHMne!D7UdWW1T zhy$HXsUoX%8U@#LDkNB$-O8-*45jDrnbG0QDdXvAcP2?JMz>yrg5iy?sQQ2q%G8=R zWy1^J`!H8M$O_mDkis+-bpz#gaU^~Pe-OA4ZEH39ac$b`QFstxBbOc=jdodNWfQu- zY-ZUkU+VR3-o=iTZeMC?u(kLM+Y*hiZdN z7|%gUA@Urr@pZoWkj)P2RDbmr2-LY&o?ra}IqhskN}0Y4f}TH_QKAy+*&6a}4X!bO z-s|bw^wUJh;3t+(cksaA1>$kf?n37T9(yFt&>q5P*nAM4_wBeGS+Oi|eMRRbuB268dRM#G^Pv8$mVKUUe3mQl3a+ib+*z+p z&qam35H1Yfi;CM&jskgDcSO$ltl*kNHooJWsDO zaP0MPw+(NZ_6QCZIk~=bN>3<#i`VMR8-Ha>u&E<~N@u28 z@luV^{8cpqtYqK&PekqJkQtw?TrWKF6=y8G@DCd>Eedgiu~n&~Gq&`^4qo1LTqY`bRu<|4`^IC{sfjjYl!S44k^SLU z^nx6JSUq#N4%Z@`Vnb%hR-n|y!mgH8?&)KFDLk&jOCnZx@>`BOe5+cH+kI18j&n8? z-3?(CL>$!nWYeg7NQrUc24k%V*<1081`l42&#mbEzq{0 z2cvDNa~DtPlYkqFrtIh3fW6N-?z>7P5CQDnH#!s~vZi6K#KbGMhBRXjsY_ZoMvb|!R`x-S-v3WJ3N zxEJPyT|H~nYHf3=J3kkff7DUhd$+c^&V5(38B_Ymnvd&4{n*jJu?oyQR)FO*u|0xv znbx+I5(E87+8T`zNX@!0fllCZLdc1q-V>S zMC=0WF=o#t5mZvT5b!3QzM0fl?G>A9`SfYXo)7r!K(DRcnV~v?&pfmO(d0Z|KY@BF zBLN*hwDQ9KWZUx~JdZ}4dt%#ld$hnY)>T1S|5mE|Utc^`b%iS+)&0g7%lNLS)#F3QK5GiM5wwEN^)RVHEEIT)9xx0S~ z*}0TGBtTw&V076v#`bp<#*}iYpJte{bJwF&OW;E8F&-g{lATKh*L_*!?5+`uw$iVt zG3H!hNJxMAaflBic37k&qT zj%s7ln`4ly57ty0L7FEMS>PJL9pHaI|Ic`d9L}eNMMmI>!od4B|2fshi$7C30fFWL zNAm?RS;hz6xBGziYC%due{wXw(M9Hmb0jTw^O5mq(TpyE^XhjM93YGVf`q(mCJ1@< zNWova&dTeb7V>P8khDmM?;!yN>o<-6KA^izS9 z4upUG{K+jnOiK?4_zBX|W?DKm5Ki`IQ=fd1?Ar6g{tKCZMT?mgl?NbDf|Y%t%D%b5 z=G~39{!bA#IWDRzRM|z;6GE05+9Iah{@|j6s0zq!X;W3e_2?4Dz@ej1$1tdRm54n~ zzTU?4lf6bMT@=T1G1%@WpK zj%<3d6_*u?^!2y!8;ZB7FoXUY@* zwhleBgqDFE66UlF+uE06H}1QoZq1nc|K16Mha7LUagBfy8udjei!8Yf*pbv;=T0ri zS#?dpjIUpzJ=PVPeLUpUL(Yo)T`R{uk{H+(22yIjy@TJ5;>6;%gPLcT{(M1BvoLbA zEWm%^vYY}O#;`ihaebbSq@GfDY66h2lk;i>`prP!Akd#u(4RU5^r!S=3OazGm)!bM z?csMBLm4uLf@pykK=9>2iWhK=O^m9kD#*@VE0v(3(7D;H)w4Pha`#exF@!>P#|zZJ zE$y2{4LYO-J6Dbg>!wkJKz~S(O??WI zv^LRvFBqe>mGYEcw>ME{79H+&LhZP12!YmaBsXyq=$O)jB6^lMK^0DUwb7vFyAUGS zxPb3et-F*`1B>uaYZaGts*rwjS!nw}=yW4g6QPTKDW@fM--Ak~b0mIIYwMJ-1+cHS zVVt6ka;a(YiO@`Yd(m)co~@&JxV`9uj^Yp6i%#?uAvoox``-@TBAH+rstanu5X+j< zW80D6t*yVFI#QGKPgxV2stNs&DTnZjVzpsT=|gfrPa>={+9}%sM&omG_d*6;*^zwJ zi*(6lou}`Ovc$5u-ViwL=c5(kFz$+nbgczxnss0Dtl-roDuD1LVpY4w0(ga~-||u6 zwbvx|l-t6AUOUFr(m7O$y?NSeIt}Fb&y5D7{_|=pq>BoeodtyDh&o?vL$Jn)=-)(p zWJ(W1Nki;+zYHYCy$qk9f!k{1GT@O##?KzSHD};S2bz>FTUvdp!Q-ux!4v7SMvJfx zyJP@iB>>meTH8zsU4_57$oO&I5SnLipEcZJzoEVO1Afcei%;~R+>4>QR}Nhu$?0)( zz&NQDrN35ns?zr^h%bGBbB{TEkyBxRh>7wfL9y}jEg4a()OZOqUQ#}Eyo{W^?GxLp z6Wgnkddlb&Ox{SR_JP1xKClPic zXhD2O$T?EhkeTzPBV^Wo1(MA?TXF0)PgdE`^0haJQibbK5z$dcm6ncy&=00|nz|8a z{HlokRW>TQ%jT3bG#spX4z6{EeohNI<-DVm&e^Xz7KK~hpX8s`^8R?=Y}NTAax`Ci zQsS}xef^)&9@`!m%JO}RP0*Jf7#i!-0z>2R&OCGur1sD_zvZ7UzVKD;{g;dJzj8-m ze!0B~X~k2=3QPSLt+MkgKX{~zg`t}}Md1t&vVrJF9iBnCz( zXFPk%rx)k-U(6LE*qHa;KZCzn;E9sKdGdN{eHjk-$yX`u7&+Q=u3;G!PUqO97^l-j zsnBNw*@Dtg<^Gz+3oOyUUip&o({CX_sytY)57h^oUoyU_K3_u#>!9%+_5McC^O~Wn z*EfTnH;m=#b+BIFQy;8))A$0PEzSFTUVzS%izzM5FV5H2 zyvbXAAe`vCL}5`F2ano?9^YeJ{_W`D-DE=43-@Ww11iUHxMe?(m6dLfil{0b#(UqS z?!o{QhudB*@ryxo{4QoedB90>Jvzq({@?eH0^W$vGvQ{iivZ@=9|q=56U^E(gZavb zfqB3LbK^;1xOg;d)n?dm0Y=?E8V(F4`aW9^Ef|NcXG|FHgLO7gOIXEGM)$mty94#2 z*G3;?|2WUwy@%=p&BO2(_Sbl;{VB%X%%c7=hPWNeJ;J5#DJ;APZ<5{N4X`O%KCj6W z&DFy-ijXtfg-Itma_7_-^G%=;$JG=c<*c~P3Vzcl>4lqDx%%9LSU!R@I&B-0Ue0}x=bZ)eV`wDG4 z^(vR1*AXh{(5r@yK0D4oc=Xxewc6(NH0|+SRCC`e3tZLQ9l`IEzP@FeG_yX4acJ}xyHH)*QsmSgE=rX~?_aTVo>32E)3_$e z+{nF9TU1@)SJxq~Cbrs`#;-6aKFbpZLjSq)ae)dvY)nvr>}iy5@eeat=!{9})~=_wxt~^yyJTbuxknHT z*5~Kz&BH5i?Kr=z9BWf;d+*F@*_P{@m`_Dk-z7Ar ze_$T`HyO26sB?Bjhou^n`wj%|o`3-HAc9y+4Bu3#7pJOTqC>8x6)1!u4=KUJcY13m zuN6Jnb% z{&^wkJcqr;cbVm3M3o!VbI4f7lm3YtscO7wkD;(WWWVD^bdQ$WQe9hxsU!AZwu-`l zyyUX=U=F6ziLshL$oaNDaF^4rm2Ok1BtTw>lt+E%B!Eoi|7!m8`JcysWSFymer1;0 zKes9U74Dxia3>=Lo5b|&Ei)NPWlms@vZ;kkYOZN(%Xqp{O*t{+=H~|0;_dZ;doNF1 zabX;!xyG-oM9Q??3z8yfREmyB3Q-!^Dk*HEQZz(T2v7AplES{?;t{2kMN){eVcT+s z!luMg_U}FxKdYiFN*~n9>nZ31#gADwzoCL@#j$NEJO~quALh8Q^BPfjF>^&d+K{_e zAs@rh)>9dWHohpS7nrF_NmXjaR#?wD*3rr&9k`QWt(n-6KpV zb-I;G@n`r}VqczFDs>yF&HCm@ecgY&k>pa}3}eTOs=hs??s0hazITkgBp%tGg-JP} zfbmQY%C5kxe}jP{a0T9x?JgBPmFTHNX9Zq;%Z#3CMmv1xlRI|IR#}xnZ-V2!H*pw` z8t?|X!mb?37mV=vsJe(?7(e4IDTF!W*iTvqck7CR8dfFw>5&=cHzrxH4|6Y=H>^H7s7KeW?1KyaXUPW$ZxYg^O^7<+DDy12z z^6GCflGU@#I5AVchm9jV15aed8$nU^{SjrG`m1Y}lD{VRMJnp8hNu2xDTTU9aPY@c zPVmQ4L~v1y>=%m;8#<(ch(0}vDqWZ8yC_Prup2LB^cW9zsIBMFB_x@#XkcWD`z6I% zD+Tu#AZXVn`mYG7B4JJ5qTu^SK;0vG=2>|}nKKlU3K|!q{E3$Nh_pkJcCwXrqoj>M zep(SVp8J%>^ednsV8FtYju6$;5kN9o3XGS7W;29A#?^%m6#dt;hN_MEe_#Sa=M9(2 zQcFY!;th#M-CJ(bp-%Q{3A+TwleM-B&HU^26tSDawfM>o@w^4Wd>C?lSFU;3ev^6t z@gX2e3J69X>oHi!9d#wLHog&sD8}ogG`4*7_TVW<4ZP}#y@L7Ot8hK>0}?4!1tX~f znAzi9qCNzxXn*dGdNzAC5J%__p)=Hth)EZ{A*C~929)ZeC)9dOsVO`~9g|O8M>(|p z1ICcF+IN{%KWaCBboJV&sY@G{V$6KwX3QFgf3JG9RJ}Gx=gv^CG8>F5)T^2clhmu4 z3mNKF&4uymRn3JYdF68BarU?X_hM0@iJ!2Hf0iLdFLR$`S!iVzG+SV3S+hg#tEl}| zPpvWjXH8N<$Lvd>+>EhnlM?Fn+3xm|ON_?|=6!N~u*7Zr#{9@u2flkI8$UI_FR#}J z>w_z^jc@R+&z`D|ck?edzNtQQf+bUpb@Hmq$P1R_7|U}Qz(6t@zu7Z1WY4h zX~+D&h3~Rp65PfYZ{ha8szw|NXpgL9&KgK}sGOUG%HfqJ$s?P`TqB8EioBacUhuI_ z@R<8zeLiu4>p>BWR+G9px7ynX_P2Y(O?KnzSWMCi7cq%ujKh%GY?3k)1nC4f(zqt4 zA?$9Gf{8}hh;SK)q{Ob=y_7jw3;dCTD@+ss1K$DdXr3u1PjEG!L}6y3)GRpb_o{9vEbtR z{OZZtYNd+dag@~OFU~gYF)+7e%8cv}>Vrx3`70-{c-@-nu#*u_Z`TXc5y9rQ!BJk zB*TVL-n>p6iBHt?8M&7Hpkwx=_R8}yRpB42ZB9|P;`%8tMV$(5$GP%EoX^El_uE#M zh|2TTF&Vy#wt0utJn+ibX+0B)l^c^^+?lgsclXKszNS=c3L{zZIKF?hc^GEBs&uN@bKG9F*JZ1tur#;mK>!=T=DsZ+zK)rHkJfPxwPn}md10lHM z5<56a&>f*dd-o13L=THXyvrX|HMk^R9A#S=(I8II2kHE+U8C zzV3c*ZS9)N&Soqx5ELPl7O`Sy$Jd9sor|oouY!8xDn6# z6Bx)8gJWoSaT8LRKec1v>sm-EZk9Y%uRV*26f8cP!eG=21I7jVQ=(KTwqgzn3lU;q ztK2&bRSqofNW0GEpNyN&2_172uk$AQF9>ue1-g>j_WBRz?htm%tx@%&3;7Q0NQ@6M z>tmWg6X+9wp8KMZ1|6P*aHqyAI}*w*IkRH=qQ7fx-xSPm@f@-=mE+hRJ8pz<*j&|* z&w?$Lhq~XO|DK*_{LTu64I;t%wPu9agmBFBh9`D#JJs(faN)T!!#ANI%RfciQgujw za=!8PE4jsULFDU7`C|Ps5wp8jN)G3Lk~)0?=IY0+PUBT7l0Jff5e@YQaAxt>JQi7xm!{{NRb@fot(H$R#c3q66GT(zQG() zn|y zyO>z{CiBR=y(-DGd1I)vS91T+R_fxuNfS7omKL zGoT@eV_6S&Pl}(ZHO3@h%f1;KRwK6WQTk+cQtCfRpDZ?Bc7M$Aa_6M8885RW^{+na zc*!L7$>XJd$0s>nL|;oxG+=f?$X?xs>ON;5@hq3sn9U`Ku&W^f{+w}_Oy6ATK2cai z?}3C|Gf09lVO}#3-9~kXpeF1JZIC+$q4FfO5?uP*kIV79zEj)mJ;6N|ZF5C9RA@7= zIH>ClgnXc0g4M&~+~HY)rS8}xzJu?Nak)3dXIer_f#V)uN)h*d-s?|av*S*=5|{os zMJ4pKgkfulj!B;OFuEz#M&GqmSh)_{h1!BsT}dbqY8rE$)xwoiWBW)hsj$6EMa4tk zbe>tlwwqhSV*4Vz2uyvxmE`-ZRLjHW#%O<%%yPZAQ2mQacNV;mzj1=?&r%nZC0?Z( znc{u*o#t)(@3L^lG>@4>%HV|byuWd&$%pc9<)YOi)y4}~(~l-4r0=J%{eP0K#@JUi*CANL zQm-Pu@)4*Vy>e@W*pUtOD3%i9)-W7fh5cK@{zudrw##tPX)&5+zHuw%oNf&px!?Wh zN=p3atY3eMtzQR6u3vHc>(qZ}CWMn=KEa!&Z_^I5mldF&LU*6Rg zSJdj>EWN^AqaW{nV{G?ZV@cA|M$Nce*Uhy#F&W>|!nfWdA>GE&_e< zU@nNapr=z_9qRR0+&Kz*`tih1-wTTkUhFR z7ab1nDgHsKK&ASy2EVQKwJ>Yul)vixT3=RgT(^22u0?nMSP&4TYR~e;rB=*n2N%60 z%@;9&UQy8fCdgUXP3u*{1G;y*eq2xl)(DZ5!lW93sNqu~Di53VO@+ujKMYYLQ1GJ| z3bv{SK64V5HpY^4AtN2P$j~+)16MIbJz%8}qT#KAsbJL;3S&4@ z*}Ox4!9rM1(2r%5{o2FNab>B8L7TgE|jj=G&b#B$lS>H1pT=XZ% zt!IM%2hlvx;f#W7{}YM4!*zeSmunxkAub?moBM33$1u9lGZw-gnCj zg?jpIeVBdG9zNFn*7#uaU}#-}eK_1bbg>K;kD-PS$rg!Oe%oJ3-(}mcSN%zD##a4^ z&#ioV4yt5*v63FaK1ZaaO_7p*B`-i^Y*I;BKAr~w@PI1)d2U{i{d-bvB0U?s`^Vdc zLcf#B0N-}p9MZ%brV-sIF1B@}VMLDm<%J4XcG?*0v;zQr`kqNugGcv_+oShP+TMNK zLDNvY=xKdrm>#(_f!}d^peCfDZzOdeyBM=0PfzL{*G*J7JU)Tn?gPo>#&}fwZW(zk zTlo#9x0@$uZVkl#Wc`r6B=nm-q%q~ixm~@j&+sLG`g4f7SB?u@m*7hds?fr~HW=(l z{@0I``|JW3#Y=2$7kaU$`X+a>I?8<*~FX&q4kV^FPGDU|H7JgI%oyd93QDpIp`h+yfm$I{=EYP@7idXmaY?nEHKqZVF=P z!S5nTkwcqSCNbTdBVb54gDSX~;L#aK{WV9Z%)#?+JbV0^=hbbPe0f)^>*akRVXyK2 zHz>a8TK0eQI+L`E4`|se-HW&52xO^y4!;OX%^=oyJ{G|6(xyFuk`c}{fV0A`Wk1EU z8b={@Kylqg01#Y_QWAHr>rUuDkwL`Uvp~S6{H8?ptmSu^JC8+D95-ic*;I>w26HP} z_zW5L1E);jQ2Vq6?j_o^i^L8MDW1^2(|vh2_fjj`OWiYx#bdZAHgA`%Zgz#%yIXh* z^yC0KC$KGh3jAdFq!D=-a6doH&rRYp-#_I8UiF_{cn;p-sRS z$WSLMeEl%av$4QoBr1rV%h*#cgR=Jk~SbAugdzlH9-tb9ph!g}S zVW>6-g97W_vfqhbbf`L8-y&lI6J!^+@Ra(i{+NC0{+I&r)Az@hhH=|Xic$T+uszHE zc$411e64847jitZaPI{72c@zx+-IA(&lcQA>VG!)r)nR9e{_ikq$dj7#R!ocPVA%UjRrl~SnPLcfS36h-K0}gUzs~p*qL*F1hfDpK!-CTwR zIwsmJ|Cq%M0|sJU1EnvdQ)^LV0k`UxBy_bEO8*loqkyRw4Q)`N{1WPmhB7QjyG*W& zJVBu#bfc6VlTVYr0*e=a;aMo{@G>G7GG$y#?7Xn7Ec_p;BIEV%fRZG&GPczKudQWZ zr^%12@E{RSND5wD6$*idfMeLYY8fN0CF!H!QKSh|(iIMnpEWB@z0?j0Tz+boFf7xS z91e74VX97BgJNfxdAWpk{E2p$^RF-y02Nt)18Y*{TA5b0)WMuzQke=jKi+I9$v(0k zwO*Bw&@_(l%tXxHKNP%mPW}tphPS!sq;2-OD{@~XCp{sz=V!7w04S|=i&q6UsCT-G z1aSNsyr2!q9h9}X5D%vXRh7e|$J3c`QnPh|b_ z6|+!=ys{drZcl$Mly}s$_gHi|)Z_}54Tk1n@Ng(JllQ}v1>`{m`Eb61;AhKlm3x^B zCryK6T57^cbD%4@u8V>t(}I(7^p42Egs>(~S4D80)NhK)8(i1NyVgEK(Ye53GL#E0 z$II@i-|S*{uBKMI zg)Uskl{~&~WffqNUdYyyrk2~}?T zc4Rsaq7$gx7AcAh+`iFnITGTC zrP?2|x908uGJP3bCxqM#wNPknkMkZXzf<)e*_JS0+4$?07<|+YYuRt{QOg8!xr+Fa z0bWjIgv!_*%h>9~u2~%^J9#j)uO>*)2CUs0pU<&7}qWlk7 zJ!B564X;SCoo1N6!5SUqwc0d$>k3w>G~}C48O?)=Bq*;{Jy9<6xxCiw2j8qv`O;3Q zqLV7d6)k&lE#;?4pNccNTB%=}{J081X038RSIFXGp~U}(C_1KF=!ohINgn$s_%zvs zA8Xrwa~zIn;eDc?LVmSluzM`gziX0z(LIFb5WbYkMfQ&d6|!7~@J?QqEzH2HBA<;f@bOOqd0(RBF)e`!S-LbD-1UahO1MI(HcwF7jLP}cwW?w~HQ?vVP# zb%)d^+8r+T6#rx4@;NM>r8COsX!mIxCV;4j?H$Z!ZSB{_sxd0GxO@sTNC~l}IdLd< zEhnJvc77H@hng6O?A*&Efzr}acLT!z+o=9V#$%uxjJOJ!lyCA>6QCC4Eu@;RFUS;} z35IJgGXX4QqArxVcz_5&Z>><84F>|<09Mm($$kPVUgD?lplq3-Y$ME2{kt;t-trIuOw< zVba_=iZBJAysMGtDkfOs7e)dVy{a_NIX$e%iBPL7%pq^~6hXp2{lKu`tO-<%-^2)1 z+AIi&oD{O;6UdV2NBlg?E0!3 z=#tY?t+O1b+^!*C8TN&sHzBfL7eeS33ZZ*GS#&m8;r1(fceC{nCWsi}jayo@3RkSIm)HvEy(V)PrjnbyIQcjvTo-W12R*WvKF$u9w>Zjyfl3Aci3I4i zC)4BqYx?t&lju*OJHT3m5`r{1d;0Sw8BNfi`a8l$r1_)hPoX_)p*=ro`V+puYG^1g zdy#BOG5*uXpg$p}Ec!D~(VsUeW_G;awQ40U)ZaGVK9{SC$b$1<#Z6mGWB@-~%o^)+ z@!ovh98Wx@2twD-B{#$Z^B9KhLh4;bWqA8+kmN{Wk{L05?97`FPUfx&&!5;%Z6fg zRoFEB#m?2|av^vjHlE+H#K_3ly5Afl_UFVb)%yr6!{L=EWJIX`DwP*AERWYy z_t$5@!rAqgC+#%-CFRBSmy{XluNCQW{S~Y0u+)|QiuIM%LtMho?TYUq=@Z*utv+(- zJ9E3NUQ&~+x-px{=X05pFBRR`xXDK!n(+&)_d1KTjhIP1F=eoHjUPaW0tMam zuJ&3NE&!tD|0RJ4*-h$15u$0_4{UsuA98O}>uF+ZkE zse~h-87@b}VwaxOZKUHYL+*IB{e)Q_nl)8_HgvCh%06V+p_1$=?{c)7f*9OCsK0~X z3b`{}H4x#4rBIaY)(WJ&q!mFyxa`SCn(x0t!g zr{gZAYOuajiWKq4$O5~boIsaD)VTW0!nDnI+bBtEYnHXo;|MLzn}Sql zR)N?Z=$a08_{0tX*Sx9P6#uZ4XA5i>?2jzbM2R#}#Gdh3A%7ja%}(7 zTU$na%ld@7?ff8_Wp*J$v5!wCTU+|6}iM;G?SUyzzt? zVI+Zjr^cGLv`x#no84q3Ep!_;be)8}sR05;nA8!oZ62Fiy3OiDvRkx?6EaM%L+EN7 zck34Wlvbau``~U_!0KuSC=*|*L2Vn3)CrR3+Kvaian2B;d(%I2FOHLnPrLSa2(Z6${*#f2xGx_0 z;_q;1T|NRW!6Rh`e2}hmj^OMoIBV2A7x^Z$l+++Rcn{7kxGD}aD;Twu)C@azBS<`~ zVCV}Gzxa~h@xyTI_`0>^7OSSGWYFr^R1&kU*idrBQS)@kQx4c6T{RZ2f!#>B=8lN- zli?-zhHLJ`*}6Dpr)G=g2zP7?UvWE3L}6=kFN{)acJctRazy3l`MXFD*X)ryIO4zv zXUPT{pzOg-k7F=W)6*DUa?kh`ZzRvsx_Y%Z8j(a4AQF7-7yCogdS+F85q2OMtCR36 zoS_X&U=GKqxVfwL)*Q--?{CAvFuu;+@LjNe9)Fn6HTPnmN@`#L^t4s8t)%82nuygD z&}^sHRWcph2dr%dN@{lMpzWYmO5j*`CFMb|Y}r#%^8nQ|+-8tyT=^uB$C6Pb4FSEJ zLj{g;(IC>Ucw_U?J=Om(%eZKWjp4&rak#*tT==wpLV2uWaGq1Aw_l{CNI?A9 z)iOa=G>Pk23Go{$;DjC5C=4hczAED#`LR0ZHUMcXbO*>^L4Bb+g%Ab-9om9BB0v~! z#lLVqD62YWWXCo@UTnr40O$KjD#z+v^#pBFX64QU1o#?McL@AG|Aj-NxQm6}(9f~Z zSmN$v;*M6){1*#36L+q}U4G(@cwFTp2IoKWXV)U~>&p1i3-dwqFUra3x)=dFVztG* zi`5p$1vbz~-s`2!!%$ln`V|W;fcZA}k66fyyCPH;zh|cGB;gPO1*7TZ_>F~dDzVPj ziMvANYwJRN@vqsL1CqI2GOtTy-jJ4g1u}<2JxGi6y@B6ws0+V@n$5THaq}kmy$!#y z(CzrmxeOy2x&wDzeRtv)CQ*lBJr$Ou_`#!x8F0ICx&#HV24R#`dk%c4WZXfpF9|~~ z3_BtTJ-MO@1Vqs-HLEr;SdM4>#OHYc>7Ix%YnA~#G7bZ+vqFU z@^Z&F9YXt5VjEXT+sQ2HPK=W)o|*qzSDW*2X5#Xg(}Oltwsq=PBF|PIo!3^FQb{Ca zqCK=qa>EY~vJu2j_7>r<41ZqyHNrQ~+YW6qs;%=qfU5>^#B+{x9cjbw@ixPL9#N7uIcc$EdhetimMCu8+C3B;A zB0ie9dpU9UT;lFYxkDr4gNeHb}F)C6Bx}g z7_4+5z(1l2l%4v_;>?LU$+b?n&H@ z>bp3@#3iB~n6^(g@HsYvIJW^gUaHr|-7xgN8>nq%ynR|K0SvSc%&l;C7IZBr0c6(& zlXTz5#2lx|X!Q~CoHheDh|^}sIeiWH0|(_q zb}Yh}Shb_U*XZhZgOf33rkB;@XkxVUm7^hI*WA@t2F|wx@kaWHe#dtZEhDSKzSCkM zKJ#BJWKU!)M5L|KY?M8|gE&4GviE^_EdXqMM?ezS;8!@7Pe>v+ndCMUpMyl~T-Fm; zAN<#XR2Occx3GO%ha_Ft_SyWQ|-9G@_HGY z@;rv6oE;o90_O(D%m5;;jZFLG!2D-7)F7&a)w=+tjN5hxf4~*@tKbhdVLXoq2ToZV znGl(C6@7<-W9J*8dvF7D+4^O(&HK3p9{e_bV!aJ)MNZDepk_WuYR2*wG0I?I*8FG7 zuNr67y9-9HPd=PGa?SmDC@^xh5Dz21`(dk`GqM~)&L#KH=4~x*tL`^=TY=k8-|yya z8E#AOr%Z0-!r(?W(>ZcpaN}*fQ8k@&|NHSa_;68J+P;2VOn;5)VKp|nJJF#W0|e$R z-{E2oZzNTL#nocDjqSZ0&BpN+1(qa7dfDB^@$Fn+u=IJKPW~20pGW3276#ueSa)IY z>=<$pD2NA5s}WcFKq>2hr*D0Bc|YK^!K8GxUg8ES+usJ^uXo`&<0+nfIT^Ul0EJ z@OL}@D)BcLe;>f#Qv7Yh-w#r*srLrb6@A$CfGftiXHeCGwFPi*9>!#0&W3QgHA%JrXPc2; z*4-HCT>xNhjBE@*p9p9A*T-S49sJXr97+>iId|t`=`&wo0kV+#`t-6R__n8>R9gF9^^eQwjh`%HFdnw~DL7Z#) z8gi=wj9K9-1Q0RdM+MRvTTuMF0OYP45eKdo!jhBWUXsD#2T1}4&a*ahd%zL|zZ<#2 zTru9*)OBNiPGGjRQDa6YmKs7oM|wG?px5K?`;edrMx$fgNPUoLa=rkDa}`rT^ZdXC z>ZsBp5K!@ucUq1L`C{f+8_$4Q!w*V^aS)7k+}Fmd%kxzsF8;E{k?G^xWp8^tz6|3Q ze2{>W6PSPb*RRU&dA4Il`Bi4%!jb7+H<~$tnW{VNO3$+a!`jHakt+%Wj+%7*m&D%2 zaTR=50CcxXWj@^&fY1^TI#FR*s*MrIftGCE0VO|*T}^u6LJtI<(F2#|3L8ibqj&I{ zJH(^xr4Yn{)^s=u#K0%ArkYV+#y4@nCZ+}S0FJ(PS{u9YVSGYAt2seTWof@jOMh#B z#3Cx8aBf;S*Q#=c(V8le4^`!dEAy>e*?23+2CrOIvD|f|BfQ*IQJIfxWqxpB&W+P! zT$wq+zjx-`I0I5DKH!|jg_X{mki}_Lx)$c%#JX|BGw{!>MzFmINxwY5d-odv2kR2& zwa`CO34dER#QhE$7@$U-rA@($BfsCjd;KkjG%lJ$Q>0(%Hm^Emmn?li=H)4y0S>v06 z*y3VxXx6_ARz3>gm>&5CM{dRVzssbFUO@+alJSK-5ROl$Q+I&{n6m1Biye6N6DGZ(?nAX+|vSCk+(!zV#KKn&Ro%V6Ju;G4Nd zFC)g>&sive1$Z?O;p^7!`L6@B%^k%zaQE^IM+b{gVr?#EO*Cd2!~dtB%2$R#JScxYOM_$Vi> zW8oXekQIJsCr7>lhmY%8@sTMuXao&v9z|QwDmI251HRXEgJ34=i=#omW`hdQAbidK zkOTJ+wIPB}g#IMvw8i-OoKyL}{2fzZgl7Idx@s=ZkL1sL5Sm&O>66UpS(mB4Y5`VhI^DQ|VsRcNRWt6-9Y7G>;K8oot6dex zjP>V1K$9BR$k)=iYT|Yr{Y-0 z9#Re|OHI0<)?4sUIkq&EypWU2&RD%I*smf^ua&=k6CA7|qeDm~$Hr=;hI>wJ!^FgT zPVK~n|4?${9+}zZOPtYHpn)=bN$}wFxsC_RSq29Qgm1*S3hL>7TD_zdEE9YiUy=m( zGJ@8|LAxr}vs2e&7ah(l8rMZRyBi-%E&4!4(dROY9@0g*CVB_t!Q42ca$SO^G(#7r z8hjwL=%_Ag1|Q@|;Y^t0U>+1f@9LO!w3l2;kpg^DZaB=$;kd+Q<%WBQbl#_R-eJl6oX&gjUjcK-yU~eF8123U z3)~c{6c02mR=p@tZ)s1=1ouYO0&}A)wb&RMn^vqavzThI*?UrQnj7EYX8=fd_w>wdq?(6Kf8pK4q zIn{P&l2dLsKT(>F>MYHnXMr4fHaD7b#mYzT6W=aUiOChtXsayEDN}=B8a*L32zn)$ z-{HU-#h4oNTO2G@IH)XM0mVMt0>t$${n==I)2C;%9pVmh1g5AkQ7r_XMYbriB~};b zSSP7@YnFwEwxlgQy>!R_t}rlj6&RcqbHLELBFjAS`UB(R$JBa8a}$`M4LNOxvsN>;atT0l5fb4xDkC_qq+R5;=$cmFe7?&SDcq=eQaFG<_0bNC?FvsYj z%sNt62;U%AL^$Y3?-*JQq~SqYLFB;z1`h_3a1AViS86d5=P3Jo>s(|iI~tvi1*JgX zI|I_+-A3_KK&icIs{P+m3&#H)PM(Y~tgyHXBnK6Koy8awzem6&b=Wc1p1+i_KA-rJ zV~uhDjshOh==^}Qh3Qd_G_d4E%?P7{-zKRJ*xl5lP4hh83-Y1jjD}#61zoq=P1u73 z{9)$NgztW8cFs|lDRZ$3o@P6Y;>XyOK>a}KBnP>!}{nR8dX z0KhLD;FPQROPTNqWAn0_%5#XW^fc!jq`{yx;vMT->hz-O%-Owq!C5r=hEJhwX$>Bk ziy@AFgzu`Rfu?ZCCb492|NPt^&2kUoZe(=HDfWxsF{TXmcVv{@OTz?C;IK05=e+J$l_(a_TJm$=QI96BA zn^+xW1=y^B_4$d4Ue;p-IptO_CG(DGS2^odYk=ml_O@g;7UDtgO{T914`~||67&WI z6ouu;z5`{U1`-2$yHLABaGs2{L{<=D0J|jz1*6x7^}Bi$H(oyZ7KmG8b1QKgU8pcL z_{Gt2_ytZ7N2TUh@c@r}GRVyoVR%b%Lj;Wk)61qHt85Eiz_z>@<{MIgd^5<00)$!S zON4qxfaP!? z=Q7k_*73^&_6hpV}(X5t};Vm+^T;7fD6SP}t2oH}6bo8i$)V z@+tAhW(L(xdB>azr3$}9FG=(KE~ChlNWNsB)cOh6dBfz2>M%Y;R`Y;FcNvQx!OeA! z;KS4S%Bdfme5KM|Oh-r!$z&$ei}D5$3dsl_xOmaU#`=H5$Q-NlDn9&94pT9NXQ+@& zHx7cwx(hG!VrY6b_q|bb-;Wr3U&>KqCmi^)Y82b3Iq+W1eAl57Tmqaqm8;$`ul9hi z#;moXz$y;VGJ9My+3HmRj3G`&z=SRe*R8|D7aEl`(glTGPD{&d)Bd{;_lE$ zY}5YxA@0jQpZrVZziV6~OAg*gl~G=}yBaVDSw*8|(Jz7vXQT;w~7cwgQ3rUEzOk!}G}dW8J)x&={Gi?lG`AtAi(IuDyQT z^G)v;XM;;F@Q#3cFK{44jo;3_3<-#+JMtM^RWj%s^424tN~8$=;;fO{KZ;a@FjrYY z_~wkvO621w!`+Rj8pkwunb_Ig-DJjb*`qE`tIJF3@`k!NS-{<0pe`O%V`)^&$NI41avjd>nJg3%U<&K_ga;L%4Yyvbp&F_cIK<(eqD;%K^Dn z5#qO59dj;+vY`-ppmNaqhUcd-Sb@>=732$^0y@1$Zl)PMSILdT=xLIhbB&(MQM7h&5G#Ie1V4`_J(xISsgL<_B84A>g+4?B7l!(Wbm$iR-GRS*@b>`z9;)Wgl*9Vu(T>i|$aSt7TW=VY`A5&K=Br7q0!-$!hVC=}R9}n@vh`0P~ zVD`dWe!|ZOW_c@iUw0&Y%YXA}@xmR&GEeRf+re-bhSNt|RaLuNL zIA}$GeBJAixc%JvW%!E1ga3(w6m{!3y#`YLJ^Y9(JO~1t%oUpOM z^5RV6>-oK^NJ{;av_*zt{*zWiuhTB#%{fhbRQ{t@AHRh5SPk7SRgjJ1aU7|Q;`yF- zqp;p;RZfoQWMiY-W9(?Con|-aY}$i@mAWVVirpB@8b&oSS0SRwT=|wY+luB*%Y!wU zY-^u@gl+E3xp~3oFaE1RWBn%JMr<@y*rWW5xlvtHkGs#~$Gntxm(_ngL`wtgQU{P$ zYv%(2MSjKq{M|)?b0uKZFmUSKUOpT!f{)?>*+r^7ANf{8;RfS2ZVJHAwx|Nz)|a0% zdVYhMjnw*}icpqvk*dP*k~y$KiY$g{D8giw?3Rdeyd1Ljmf(CZ*lfmE#A}{Bj3DA~ zzy|e0Rv)n$4pLFtdMEYRH7A8bpl|w(aV2K=EJT<&G`q!#);Y_q8xP@uEzQSHD?WG! z@Q{mpvEIk#?0-IZ!g>7+t7eXsGct{RF}=msjbj*)J?f*l`-$a7Uuq7(x;GlXfYHz5 zUxTeBLfDzGF+gM9pcWMhENO`gdPvBvL6SjUeNfypewqX725kn*aaxhKRWph#XcpVp zytonVn?><99!NP=dhv$hO?f2_9+jL_XD%#-k?KVO$yh}a3-l3E5HJo`(uY+n?PSHZ zNIj{u(!$?#{*_9VelssNdXoTMGl$2@1Z!NbDrEcebC^Um%?Mtm?H;c%le~ekz80jW z8n;L-KMvuO7bh1+7JD&Lu7fxN5Wb7;SSJq^0k)_PS$EAQ%bBP3SMU-zg3-UPi-5P8 z`9vNDN3?Kt-n!sHXUFSSKa(YgE#J4QXP*rB%sh!g%rdIJ0IX2f{W63S;|u#cQ6x~D z$S*C3T;ihU1p)-|Z!dXrE%0q$B*CINSs zO9dM4j;fg;^kD`tX77`Ss@javTr9j`LNHZ7h;$l2LkN11#8IU)C7BR5S$6=Nra?}7H!uWA>w_$uG!O5w*SBt$7Reu>QD$Fnnxz=x173f3aVdQLR5%_48b?1=tH;HH(mS?kje z1AOr7hdm=#2Kz?QB{Ek_Tks>oTV|=pLIa1SOE>UNiUQ}jYxXFfkhNcNFB9%zkuu(G z<6SxLcE;dh0Ugcwj@$5sNZ&2|t=ZBTZ}>1qRjlx?uAk)mRH)K$$mvZNRCKfKjfNFw z=`RiWzh0BS!8tQMNN-Fsq4PO0nK5<8DN}cxGj+$V^54OO2~;M9m70PrL3J%PPmt zYKLRRC`|6Sr$gc@iIgDg;2M-w+Rt>YC!)coW^11$TWX#Fn_-F3qz=QItztWzY--8Q zNovn%#JWkcrB+1~earIl_beN+X_DGA8gZM>CPIWv*T~eC+%7GtehV$>nOaLWOp-0N z5w{=@mPD`~SL32{7#DN%{D-dtL!qZ*3-m zHCEC03c5X`_yu`eU=%~Ti5Q`UM)48cK=LUX2jnR=icd&ph(@15EGHb^Wb{zYYl$a} zLhO<2%epEcjrbW>0vfP%3_mx4^z?nis(l)zMepZcN6{-hKFe)rZ3q=4ctd$bLA}WcgJGXjB)TNLyH%r`K%uTZd&w^kY z)shGUC{&|>j0{pB?#6g}@!RUD=ZE=D4U7^wYsv0gArnPW>GLa`oTqvtLmB+U>J zLdx*=6H}y&@MhwP(+)DnKn*g6JAIHbwBNiyhW5irb@b|CCclch#4ogpMN*wP@&WZEA2Ovy1P=BqxZ5Ax>*tAVcrex*Cxzw>k&Ho^e$pVS z4Q3x{7Tm+q03+Rqx0^|4;Hk;uLpqk8d6(KBn`sM)E;d8&g1ZKyDltN36(g78?AW}#oW8Nc)mit3LZMYEt{|hr=9f$Mu)yjEV?7`1h_TZan55D$&um{KHQJAALly==X2gidH zSZ3fuktKyVrNXoZxi#*f{q6XQ29-H8xmqP>*?*EvxGALx+9X|?@P?aBpdou9P7Iy{ zeL`X2PvE@hwh+L*k%u&u-Ul?7Gg6HB7-f&sh;OmW@@MFqWODILs4* zjAe%r&)2N@#kxO-IfXg$KA1AYD7<3Yx(`}a`4v^pb?>t*wk%TPYK)(fUcft8)zR_eZ0+fk^nI)%yU3uVUAA?^|nHy#u_DUN_z7WxNZk zcN>07#M7lh@^xHf^-=*?(t9s+_732;M3F`fUy8(H>p>pL9nRn~)SYxrCI zR(Rt8eqmmD0eyv+P4tO_)9SY$&C8Jkka^6^rbkYVSNtm6%POwEvcuH~tEiJtfScx= z!Iqx?BHc8SPx>_5^HUU*MdQK@9k)0RRy%}g45^QkSUjAT0*td*JO!3oH_lnO)@9Y@ z8x6Ru^SCNvd}%a{SuvD=C~gi_*$Xc)mR+!LnUfV5%g_N-RxxNS8)R)2Kfh@K!IZu3{xU@TP69TP7QAvY%CcHHM2 z+aC)(fLgGx2@^+K{egXBB}1_g6;2o$_=!D+I}8H^%#@U);!i0gvwAp&W09Gq7P^YA zi;0;~97xu50N<@XfP^@trrdL{gw4v|4vD9H^9V59(?B$Ti#^)Cl7`1XZz*Uk6Q@Bj z?XLAmHWf8y(%>$VvsiMfxG|^CS&Fk6A?lo%30)|32>Xh+gJ|wv1Oi|yxYc}X1H0UN z3ww@#vEEH`rAcS=qa{tG_1znLkOmk$bH{qO*g2=rx8A$$%v0!|fDd|@x?^M;S^+M$ znTFu#?<44ItT&%a0{>#Yrrb&QxMOT|;TZ^X3SDCuEXg^Qu8CfS)lQ{rrKlNQOI1CXC(m8T#BV<)($Dm zpqvKuxL@8PaV$fj z(C|}HC|q}Cx-tQB6KWIwFW#~_Jl&RZZMIC54oGxaW~7?}ZO7imNcRBR!W(HXRZ%WX z5zZxnO#7$kj2YZDom0?#;xB+ht=61=_s>5cl9tG4Q0q%W+^C8GF zdlUW7=zN%)?80w#Vxj||nE$ZWw_Cj&1M0_O)wu)60pgPSF#D-O3Umx#J8gVB)5o_n zf4t)nEZpJXo70S&KY=A`^_CJlY$SGAwOspNg9mXu3*9eVu;n8-d$o};7vG7(^T#PV z+Kc>Xv&ie_KPmdZ8W<)bzFVQ1oNNd@MT%BEvsFlhGi)FrrQFps+a&85whxtc%^5a* zm8+euPj4FQ>!F+q?mjhteBa0>)oijT-2)uV_c>w$v`buoS%gOGV&H;jzz_(x^4McL z2M~8KNgmt$pY?cK4ggu5=M}5v#ta(Kr7rn$67Q~mJIrv22}+yLZNqnWl%ifZe>;Nb8K)zHg-9A>@Ir;jsN-=RPQ#6G z8t+?WJsLmq>?sKR(Ks+0!Lf=Ll?<;^x(?y!Q=5|_+a9AOY0vOu_4~^ zC+9!>AiIkY2Q$dX8a0OznxISGn&U(BABHK_H=}uv<6SyhzITksj2K&)zF#m4q-%KbgR%J*)NJ004}{#uTA(yt-j;52-a-@4Yh zGVK!y4wU@YArG9J;np0yzYC)QN$sByge`I?V8_J8S{|%+Od5_wq|dd*tX4UmZ#)G1 z2N-S8RPA{bpZ{#c`CqugQF@F)wQ5GK4Xlc!0irHO7CCq-#Q#PH9KUBhTJi)UL?SNN z5ro}>eO+)-dF~C@165l?meKtJa*c<#GQk%dpei)_UUB?Sw8uL3U0_~BGEhE6p`4vMqT>hmKOq!We;(FK8 ziqRWB{H0U=l2I$q@kFE&is7g5wP0)uk5d{!NsQ5#2K|n_`29%l`h3Cf#uvNv@Vj!< zS7zFMd;R;F8T4Q(d`M?uid!((3s*Y>tE`pzk)`=x+U;Lu{WXxXbKz=Nc(v20!e#pU zXK(r#1XjPW{@O8yUM?{0UUr-e4)}??e{G#WjG>BJ*Yyqr&P7-|)P;xw$;KtW%{$Ut zSGc}DZ9}#I0##5wL7q39dsT13a;tRWqXfS`f?E$0S3Y-jQijqn28veL z(!1-bN%Rb&Ey^;6p)8h_BIF>WS(GunqbFSFSHTE9FhfGb4Y8o{P-F_W=p2M9qr^!9 z8t~xI*XJ+u1)q1}7p&$ojNG)I-GPg(y3&f>H@siPJ9xHY__`Aag%FrtF&vn-Z^WuA zgQo3YTWhe;e`s%e+ z5Ch(}16wy7-bc~a^T3PXU`@#Wy0)Jh57#Y#Ly&2mM-vH5P9etu*Ezh7uc$xxFSufD zAyZ-IYdjZ8wldrmuUQ63_lGZeef(Mn&bwY)2B)0z@wKHmTD-I^AA{aTwyQC2-NB=} zJ>jcMe@t0h7#ZP^6mNPnHwO(J*$#Onn8)R4;9&e${|S->&3+VdLhBabWcc#{|Bc|a zJjmnWq2=7_mT|c^rV2(fWg_Pki=m#ou9!miC*nl^iBMmuyMw?#0#V<9Tb<{O7ridx_YA*A3JY`*9YF)|6ox>VreOk*-3dOPSH7ret z=ba*U*mtlby6;s)>7a(`*wDwoq5}tzQ_mZe3=jz9m+ZoC5i(hW$A;!Uf(-Eb*o(A6 z{CNaaN(KofhmY+GKA$^xH1DvrTaqaU#%2Z|P`=)e(|3oFA#Z;W(SFe7QXGCr7=_d| z*y)GaJ=ZK2(|5KBg`A7M3G1bNIoeY^{&#*XtlDj-5YiDu^jDFEYe}uQulxw>jnFWJ zy7I#pAVT}XwVy^xVa5LI=B@n;1WJK(?(!9gS%bxmj}TH8@jBjEk6ng=aY=eBpnIspgl0W6r8X2#mX=yL2VuRl0;?%Fl*6m9zU zY;z}3D@ZeA>t0~^+#1)xJCLxG2qG=Dm#IY=sUz3#^kyct?Ci=+S~7niwXTuRpp)_c zNbTfv|IXf{(+TXe9O{R`am3j~lXds%1p_paL|o&U0}0s5WDpQ%&Ze*b^K6rUcj9lm zzUTE}{mkog_|x!|5ac=#<$>9451_)8@eg1aGH^`--Uot*7D$9y<$W2dM+uP$ zmf9|hiKA{xzcY)6Ii??uL!o4-0fmqq@PpG%Ax}&cIsPxHMbHMtz?Tk`>{dGDQe(qi zz$~bwkCi~}4+z4Oc6K!Tn{HjRewAlOyLzUh*Fyny zzk|FkYJaFzu2ir$Qyv}5*VAnIH9Z-mw=qpwvPRU+P?_DO&$;UHQY$YjCm0KbYrC= zK>{p5TQ$g+s-0%P>Vvsi^^bN2j94Y+!jN{CB5&!g=y6x~^C!V8s_OB2Kh8kM@#w6H zxc%TXq+!rXcOyOJZ1ll!{&|+PBa9rXMF=5<*`O(M=EzgokU8E67v;_zZ%TDC$D6hv z(kCz`#`;qtR+X551RnfT^e9Mt1v*tqp}8b~;xXSUHWCj2mvg~)!3$@UCx)NyxbT%O zW7Sb~@QW_kTVZK_7Q#ONwfvD-Ju>h{@$+JlyZS{;0aOof;6jU?FErw(t_eTOd`9pP zT)t3IC89{8G-FlCDcb&(plLs>jD~4I#M68IL&m(HY5pptadJhI zxtW^*?jJ+_{dcN+eyfiH5?n)f<4TsOZk<(y^G>_uu@qsM<)$ng+JGB;=?hK9MG`aI zus#NM9G)0zX6Q?i(uFqZLJJBo;EX@ng-+>0J71uEW;6S-oc*}OZgWOIWJwdSRT349i42i<>xP&*UL{|8e^)63#%r z@Ycmyl2ETP%tq-bvL{cIPGk=!KChd|Ef_Q=JUPdXDH0xS{^y<<3&$-Z4jJ8i5 zV9JTDYqOJD(6u`Jm~{a=X$_O`W7c)rNfPvv%dQJISKrpy81S&xp2!hEJ(Cs)ad&O(e0?MFEq9W zeKkXB-hI*)6xUZ%!>LaIn&}#D?OD;YYR{4xQnTw5SYduOYo-`&@Vk1}^wrc*=+lto zmg{(kTi`;q5pJxfJ`+wJ5H7DeYFxC|$5RCi>tUb^JT(DjsD$rGk0dObe+4iw_JU>^ zJfcr`onNN_EPTWt7%*kur2TVSW1wH( z5`XIaZ_S?$B>B?=+4R{Fm&!0|GG~m1Y#wu+ zrzpM1H`9uw@|ZEjV-^`3KHw1Yz)J9#b5NztW8SKH%x`NR^M@%srlonzZ)+a&hnmOy zQ3{WFzveN2qN<2Bq|IlR7ekxJ5T|J`!8-GpNRl$U@&R+4#VV|2lK{3Cl zr|a9Q%fj+wdmyXRJgZdVB9~%oFWp}+852z~6sIPt9~3#?7y-N1~@($M$!> zj4$95rMpW8p=ZR+p6KzJjz^%9#0!WQpMbB{Yt!VV1vw&LJ^|aLqUiI}kq7R{$b$jt zejFVe4=*q*nLq@9M)%Qjd4j|b+mgsJ)zZZqcjiQsea)O+xL`3=_tu`^YJ!_PbBe_U z!Yz|*tlyBr)lTGRaZns|D-*a@*wmY7axM7TO4kkf)?Vsj!yWlyNzTIN<|FrV&CmYr z1b&uAXiAW9R{ZP=r|`4OF=RHAn&f9W!Qg4r_*t}Cv9uZdV3MWH;0Kc|Z8|F`>|q8g z_};Lz(p6z$%ALod!#-yI&qft-dpBpUkINSKl>wQ|6}53P0a~Oz%Kj# z50s~k61{_`^^(E-qv2=o#4$%$(iB?w$d`d7<6~PoRS#m`N704mXWRMM$w%CoXTi@Z zzRRci+9W?a8NEj#55Dyt^0Q0G&jMX1S=zmtrA^~!iE96F`B`WZ53zw1Ii~TmwVIz5 z{7fWAMCGpQ#No$^pUoz(6S?DR59*^V(ob3BS>m@^o1aAl1|_enwfWiFBtMI7FjHPP zZ9NdylI;9!7WVh49zloy!_U5>^1452esZy0~{M1u?008p;P`}Kpj!#zR*;1?=i{I-(QpkI2j5c`;9O($?H zRIX+6EA(Q|$A)Iba-OePJaZOVPc#UO zHhx>#a4I|T3teZ@pTyZMXYok0E%ttw;x)l^l1l^23AS%I3)|VHM-5s;sJ2I$Sy)N4 zOY@ykVJ9ty>^S9OCdE#cNWH>Nnq6upnxiRfC3B{*mSn1t8SLd8VK38JOOMT3c6-q= zd+c{}NH~U?Bi3Usa^=kNrvf!|{HZ{d@vi{iXlxvQPx(c}4>xZ}@0Be)q$s;Pm1xV>1yDbssH3Es^AC*sd+DoZ z#r^#!vroePiBydWP0?dQ>R+#Ve|l-Zt(-Z7o>KIaHc28HuRj(&Wl-^SXXNMJTOH&B zS_gT0o^2f&CuI@v7PXA;Hdm%}!#=HT%%)|$S!)@|mHkGzvae`G<6jC__LU|DyNXXV zPtTRv>h$+Ur+8)_jN4{9;`9F=S*`xHXT@r@F?&sR)uBQrgFq%!8UmR>e@ImN|1vTG z6D7z5O2H|}hu&L!vgVB`@JJe!ByCM5w_5namGTgu*j$jZJ>zdezn8l~@k4KdXVB*GJr6{JVt-mhCWx*MWlnQaeyIBpxjWm0lLa7&tyHlYnRJ7k-X-qj^cf&Z>f zxu%(r(me41%4joFzcwk=d<|Fu+wj!X#-)n;K@cKUXa736Cd^H>DXKrs>{JC=lW1B9 z!#rWh$G?bQf9 zruqowy*!&CH3#esNE(+pNY}hC`>hbs7i-l$peKH{hv{zO1cx z_kv|>&2GV4ue7URbvxlsw4oD@x_{Q-X^kv~WhX|VR7Qd8q?NJFz~g%H8xW9OC%X3r zPaA4)vh}Uno;TOHd9JvFP7Kjsh+#v$}h8ni=qVFpH$S7aF2&_EW``N z9WBSK-FdOpygeRT2c~2vm5JSV30Lp0D%x>06BOItbNuEUVOZiWn6mv zCJbI_`r!3=dia&(_&tC})k9j^O&q_jWcIPdz>$cRfx}24CeQ#{u};?sb$#?cHW#C} zf!Un%(LJos(qXn$4;fO_DDCZjk>ghKD8{MW+HY)q+}JuCJvbA~ouN9)VVbnH!L!KN zN(oCTm&eFV^|~A)8on#XAmY4&t-Cn(w|Uqf2W2c?V`~h`c<(tm(@u>`N||F{^aPKc z=~9qOEA>)%kPNA+5mf*VMaEY2Mb&%45qzNwC1b|c9#5C57yc}22ve$!9+yfLTCgi+ z6JQbG2tMEC*k?DjdsogWY_w3_8(X)@@EBVk@NhJZt#^2|sbiPM+fm2k2sXmTKVdx} zi^K7#b%!h?`68PRhbQ^MBa!YL=gDz;M~%*nV&JNe{Tva}X{Im=Sj73qdm*Dzvp%Fc zBujg1lV<@;7!dT7U0&eeP}H-FgcCeTceki}v^x6gG-E5|CMiO$S7+OUD8ocBp85zO!;brDF_WWd@Vv(36}Nm}%vu8U(=E#3mCCns-T^i>4B;`B%(Ib;H=x~YV4 zW2@ie6XT0A$DjkI8p_kc{st!nm>j!6DPp|N#<<}Ntq`culw*7xhXUaO(OTX<3|(iq zz@@znXsJQELU5+C)Swqyr?S+*8|8c;!6DOkIoUXU+T}pG9>^irKE1!GeNN6H^l2vw z<#@oasqM@sP7CTDTUY}(EPG>9S6J5yVpck5y?IrutxauKiA}4T+Ze25CBNF1@TF>Q zqF}vss=6XoHdVC@-639$^}BE^nDWR@Qk!Z15GLw_Kg1uV{m8cp&MXhiW3T@MB(5h`USi z)4U2Z+Pn-u?*8WhF8ss+Tm*UZ^V@rndH-x`Iqu?2Mvu`d?3s40d zHN&Af@~m9nLno#FMd6TBQt9$B?`1?rbV+M7d{t5;pe8<<%`j#)#$SwJ#9>9v4mHK% zrlMR|(kF&E3ypn_qejGodr+Y6&BSZCicn~Zjvgx$bF&oFqUWXw6)wY%yZ#U@|JD6RhznV{>$u}DMxfHu^ z*>r?C5drXN_d9q-ZLki?g0eQ7}$U+}WezlMlv!(9cI*%DrXvFL*REx1+p%EEB%(W`7 zkcdyP3fqw*dENag-L2EzI^FD3%irwxs5&>RQMo{HXEBmvrA|1rTnX&)u)m z-IAX4F4{+)Vf31WKJt&o9!nZ33kD8Hq*1KU0A>mg>+qobmbhFJZ@EsAZyPL`cqD9) zvYdT9kZ4h5IqiwJoae;bIuJrP$utEAJ|4+uG!$o_C7VOIx)1Tb=)!oDjC)!JP6#u= zGwLsKFdNnu?Z>8WN!H2C?O3X3Ye}{Rtw-4jo>6z}^bK-NdJf#8)9vj=Jx}gAuubQ` zP1mEYruMx_*I6X7fermO)SICJUC#ksk9xMD-WO8Xz=m{FZ%MvTT<7Nuv;ISJ_1TcE zucjsse4$aDUqgK84W0jKovyB?-m-ilg$dmD7N()xhF}|F&5(j*Ur0f}TR)qcnDA-x z!EKWf8Zvz$y}{{c#Nxz4;e2U`)mKE`)af>4^P28y_SfJg=xJtK=5dYrjCp&F-uELa z44*){;OPre6V%+;)UJcBd#_Ra8gNOvvl+DT&9ZB0XEP4%oiaqG?OA4fn$eG}dFvhO zC234KfL8p@;QYzc%bVe%F1}}C1R!2!bT_lT%*1;|m=U*jIBU+>G)xkdQWIIWDiALU z1(SG0MWF%p@eH(Yl2l=1B!oNKVOAB{B_Goz?PZ{mcfUs7n-%glKeqs-NI6P1)Y+pe za?S&fLStBX-)^Jed0>INNGPH$@RbGI1}ajabU9Y-E!Y=|TO4Uc@dp-zLPf-jhqHLj zQ3od2A3LI32a!GlnK(83LLuQvD=HG6v|{rrAAXkMCxc9^1qn|~Yt<&nM3V4+(u#_X zC#{%TUO}9@kC0{6+GJvFl1xmH@cz{texc)qY9zskHI3?q@yCT_lkggf5+uBWmYZrB zy-GmKs!fuKVm~>7Onm6dv(oErVs_E%rIU#*>15)dCIG40d%I+!s%jESQS?m-$7f9> zrP&auwb3QZ^qul|ey^xRd!I;9i#C<0_XSg!7Ay#x(y}Q+eNF5apc>saJJYB33bSAB z38vmF(kV=ZAQF^fzl|`|DmG;mr+#;meMG*iC`Pky5@e&PKl}TfFGbbqy=8L-mDsP+ z-8$XWdx_bnsl|Q;1@@Q_SNQZkV^fBv-d_ZrCiWV&$EYwNLbxb@bf{(@BgOc~=dbxk zO)pM=@qg&Wsnd&!PV`L%|8JXKRPgQ7bYqhHQ?UK+(Ti$_n+U&ek6ujI@h9~AA8S+k z{gMM`*6+7Ue5nBtl`6i}9^CO?talK1e27fy2T|5?J3bj4%k4NfR`W(ne6~4~ zk2AkIK8mLUFV8k(H6%koxZPCq255!a##pV7339B6E8BT#$@o=YD?m8gCNu~i6(zGc zlYjy&w@nZdR@tAsJd0H}h!~|PKz1mg7NuKd&r2(kG(kv2vVv9iFQnmTm?OEd$4=SqevH{s6dFy@I8;)ZGCU_g}eJviW0TbnLTSLCh*P-g@)KlI5LKz zO6pxcKqKB%BP6(AOW%+4LYCQZKRS22ow z7%32CS6Ow8QKX;nZXKSuBITV_s1vL@pM~J>`MFkIlj8|2Sg3L98pns&9n1=xF2_R( z6`v-Qkm^EO%YA9BUMRz1Y`mPoxV0R`h4qfFtZHMRvfk;+4+ha*=Iy;tB{oUBeAF-#Q_b&HtjV%AL*o%7)h=a@`UkERxA4HQ6Bf5)L3V=j~o^HiL{cU zpGe{GU#xcscYKIDZ`btGok{xXkkC&tp^ca+8^MC_fu1VY^wi&?7DZ3l9|Jx0G|H}w ze-Z7)4wo779p!;a!rcSN#6a_S?mnai!ZrCTu|N?@pAj2Qftq5QqrY_qUp6#N6@108 z$*Ri6Sf!9vIKaB&iuFf3{uBkwQX`H0x*GIXBBSmOVnqw#cJHSQbL7e3sp*Q0I}9>z zPw>>a9qp*ci=%=^wyz)Wm>oQIPRDAbbX|;;Ey3|zCe7%$3`y-yBz+?|er|`Gb(SNk zakgO|{3?&r7@w|EKaNzh5UKx5Qk_hl-jR>gdr!tWDzZL+vf~T>iw|u*{OQ7QHOBv{iUFkyA`!lq6Q<)cK=y{Eny^%& z)|rr^7=Q5x3`o3WY{H-#n}9U5s}(5EfTBE=!O(x}3rt{Ns0aOXhld}96|726jdkP4 z43i37=V`<4GokqRvJ_9Hh;-bWHej-y>H_0R1|4j^B=tqhsUH-V`RKew4cPHdWiL)bAh_ zM-pShqXaQ-8^|`|0R^;yY9oka9XY8{~mWJ6!pvb#%ttcV;E2(Wt|6c*hou2 zxYDc+MUIL|Dy2Bew@n@1ij(YN)haTbV4JE8lx3!|Br<6`79RX?d3nvBRx0TZkPjfa+wJ9pg}R1g2J=wt*a*hsgE3PJf_1mq z@xPE7+pRVdbvtp~@@k7&ti?sv<#S+;2(!L5Fxq5MHNV_!h0M{z z(Hymo<3sheQH!lW*$+=CQH8ARHz&m^v1c~RV7p!H))~>vt=k0!wnXNf9@e&_EKTC&@sYzL8 zmK!N zFqk_UTcen!c9?FiLEK%mL(=xjyZtR(6usj)Yu%O^#8C{uZ5J(avK-c|))#JmEU_^XPA9 zb-%y>Ns&G=Jv{!=xw~PY+K{(b1@#@WqH{52(=c7t$M)s12`%YieTTvqV5Hj+MG>L5 z0cW!E7(E^(xF~J#<;v24C4rFCy*5+RYtAiKWr&vs-GUo@K@H$?Rfc#PhHY3jg9?^? z;{D2dWBqH;=V>k&ofqg@gbt%Uz-t0jSV>+yP7YgQdahw=p3^XH&V(oI&=cXQ^WBE0 zrX)Odo+Ui_v%%Avw+v4TUIt9cTlkL%zjh<>CyzA{AW~-CXQ~!AJROzXvZ1mLSS&C<&r&^2+dFKkm zC+R8Rr9XUn3cFtlJym}idJ0s5dkv`@H+*^UyUx@4p3qZl;d?_*Ey_+$HB3%VU4R2i z08A~Ur}A*GFuqMsHEDVZW0r8YX~lh#o@#iT^ide6Z?Iatgfd3a|(o^_|jsJDMNqP#IC!wd>vf%&LtoXnE%=o`L3q7^ybo5k12L2a% zY7yuu;MFtWe}JU#y`!fDy8bPbo@!F`R2J9*gn@z=js=?;OeU)ZFcrTdwAD{Cc$KWQ zRr@;&TLM?Yi-1D`D0#`Y^lP@IvHKPA3L~j5%uBmfPmV>{6%fnS)@8+DSbi*wi_=vC zad_zNg*pSt#$t}2(?SmIo!fDKJ9W%BbSAJ2P-6jB-l>_NNnxMm_f_HfnPBYQx zU4X3i=x+Fuj0Y!!D*&mJ1j*iTB41-4NjKGCW{FBhT07{S@(j1U(k)qfXpF`kI|3ET9 ze*@luU`n2`zkwS&`!(h2sw*$~u@s0l9EJ zorHd~cF#Rx?=d0;)9iX; zkMSk;82TAgas(vZkiO4A^j0jM%O$_EUZ;4hfKt0w*<)nOY4Wrr_ZfKMjw*Q%kSB0C zrC``yDDG0?z6SVa#|vfG;+D|>1m9Ld*HNHdY#TATS6c{0LQQ!75Z;1)=C)(K9(`@P z3WjEEe>D31G;9(jL)|Y@mV{g_NmP%|LooLU(L6$PkHTM5eM9XHvFMvfL<+uS?-p&6 zkl_Cz+mZwfui2$!x+0tevS+~-jo%yKDri@serRqJ?)TyX`x55q@sco(guE#h2@h92JKG{V+^`q z6d%?{#fSC9>3OeX$m_$O&PE0{ac!TG3;cn9aatx|`ZED@%~S!i zEfp}=Oa(Bp>P6wE4 z?C+!iW?Kqi+Mw8)2Bs~i1572#6DltoV50E~ZWDkhAeRDzt&)&J6}DspO0`|mHJ=dM zIc4w^DP0q$FcmzNd$zq{>Z`3~dAEqXA11*wY3~(C3HGxHAZJH(0Y;mIzB^JfDSbE0 z3T%BRwufx=-H);qPo?klS&~i022;^@I+hIdo!rW8`mVnff_yyRrS+Y6DY>T#1Vk;C z)^~2!`p(3elUm=oqf3>4C`I3?&!hC)XHM$#CbhnkNV@+vRdc^4d0Hu-NvH3C-BRRp zd?J1KB9xsreFrS;ze|fj5I+uf9IDi@5dG3?=lP zXbI^$q4(_6kk*WdwUxRDorf;@`cwx=@7ck0+&WDK(@EGcD(l58$5w)N(DFGRUDQ)z~!}$SkMO zcWT5ga(+PRJ8#dR?>>NSL=2*m(Q$OAspT9+ zA3DY;97a#Uhgg_mv-wsCt5|6P+5WXcoU5X(HN%X`_dA$HLkU`p!5=HzT3EYB~l0sTR6TXpy!D=p+=Zv?E8o;|bOn z04cBlRIQ?ExkLzW$u9!OH%A?aWi zs3}D$E@z+xNwQZXvPkfdgr<~Wt>agzkRVD^nuZsYrc|2B`q*S0vP5AAx8MUs(rJ|7 zmaDP;Ka+a~MnS;x?-fZ0O};=Q0(GGcrvXY7)91~yZ^k@lo^f*~EaoL(aaEDE3jj%I zdleCy?TB46TS=HaB@oFdRD{BmFjN{E8G;H64lo5+#3B@M1S~$48cZn#7CX}+tT6?` z+7&FeYFNz3nG9Hk#gP>jTPDKdnj|bLyM-yjV)Z1j=qD^f40u{ttWSr{+HMEVUCngP20UQNOB>6xa4@HsuEM1T2U(BuW$X8}K*?CT*{V@4b`s8`_mg zzxg&NXf}2OpLXjMn`X1=I6DBMqT!}QyOk^1oF?x~n|5o{E+~DZ-5iW=xClNaM$c?m zXz^x!4=K0?PhkDS2x+J&IK};wIcV~m={&y@!C?<;u^0Oe9pu_(IAfiahOb*vIw z4Dc!@u`}`wYDDk}ZcQBjRK<_7g=<%zN^VQ~YsmzDP!Vs7{t5jcnbEB%7Mpk*Q(pzy zOQsxS2W5@T?{mb)XF7%>JGAO3g~M;9B9}!d20+z|Fk|IdK>#`8_2u>qt4_bU{D|b|<_7r>;rG0Vkl2P)N{8*`YxFGLNDY zZSV(kM>O&-(u+08JqoQAByhc=7ZnnqD*4K)O0iJph&~NS4mZ@>q++DCtMNI)%ry^tC?z~@G zPVy=+M6JN3F>*6ixIi}wj_2Z|;PlY7yurM^))6azA@V;YT4C4}moP?Zn+0p+(m};# zN$^mH45f}&$&P$b?{X?__&zKmJTBMQ3IXE)@B}H>3c+HhV^sPeFa&Uq3Ah8+6zCJ! z|3(2jRxqMH@`y{T5R1eXayKR5S^>Kffh*OoO_)u9YLssSBw|&yr@^wH6(>QoNx^cp zVu9>*{RR6`KB6kbJ|f)Mf`8IFVt)iorD%3jz?1Uxa_DjeL{qf5N}i6c1K>sAN6}rb zfGQbCLJn02!y2>zR{&mo7;$Eg4FST20AmEsxqFiuT`8rZE(JQH2i$qX0)QmC!{?1S zh4==~i~1H3x-;lRK%v^eT7Lgf_)roGC)(q!#3`WkZ$K9aE(v?QHIvYb(+VdNeA>T( zTl$&geY-E1SUd~8=)<|bne-wksNW;K$kCZdF9Lt2(~H>XQ|LuLWy<@&IHbt?8iigY z)wm9Fo)mf!-+L$NMYJT7UQ|>7($nRA+!EendEXDPCy2c7LM89>QQr3fTi)lj<$XzVE!l^1i2D5lJ7AsTU+!`BMjg>ajv`h7`kHQ_gT2 zd0)DGAyw7~>M9}Y16pa#`$gWb(sQTE`zRS?i0jkH`|@o$pV9(jpz3Y;0#KM&_9`8l z`AwiKuk|Zq>nZF^iA|@8+0<5r%U%)s0b4YZSQTZIS5P1}#e}F&#UGYPz#y5Fkgo}Q z0_1(5NUakTqk$=>vEE)sR7{T+S*XAk`i-GRlBo%KA1F6PSMrUB86d~Qc$1v;;)G~h zsSA>iB0pA2gWxUI?k17jt?xlU1WO&+h7`lXrkO$1GWjRXk?kzXb_zAcfT zH$~)EE?_C*cYwvzM1JW2RzFeP*G6$4=BRTbIHn2*lOn%0tb=3;+R&6L@=JhYrx1hy z$Ck4LM_+bu^q(a-`fP9vC~$1&I#-ZG7&{Aa1P&5N$6#lIqX^yUectJHxaii~r0E>A?k%UN&^^AwWo7Dc_2DH54vPkpluM{cS_~CSvPcWdl$&ovky<$SGR|=#;SpEhjo6y?KZp7jK977AH4gKk+B^ zManNjZ6N4?Z=(KoLAw5yI->>F>%@~lmZQLeUd5JU`@jS*ApNued3e}{((FRm*x;eT z3T&SgCFip~WGjip7AjLsL{wjf2}@FMsic;d+l8FI0bGs_(QLadQ&U6>A0ZZ%o=7M- ziYKMo1O<0oQ*eBPZe-CDEx;R5J;5F<-|;vFh*01l5<)W zaX6Wxwq6vqI3sDIqPCoC_KbT3VENr7*&a*o5f}o2y=xT7rUY*^oB$34?t=84zZnoH zutyQxV5(0K@39xHQ0Xx(RipT~#zn1NTaXLNNWjB=|*hz)3k4}JH z=h=WA7wsfES%6*!*a>MyDQzm)L1s%3n;`LimjUmoB;X~8Gu&jO&j@x&`b;0DH-W(V zN9RNWD?5GGkc~dOJWKKH^jTr1yp5ajyQrT%1AWHPnS#6x^i~Re#-~jB49g&eKEw1w zKU*sFS(<(p-+R0C8NdG6TcXe2zRXSNv$9F)vuf=_k)+SQYtv^%O6DeeM1hjI$sVC7 zv?Pa*al|fx@dKTP@dKUKgk6FG92&3Lgy#(U?4R`>@qxFwN0g@Q5$U|WcdC1YH#_Dh zX$CI+T2_v2$tC+^q!QggC7dC8ZO&oRGkI#qJ zED|zN^tYupc5iV!iVZ{FnJ~gpaZdOaTMQJAawyj$qO_6k!Xs~XWWhHip+V_+pwwa3 zfTVT8(+>?%z4uu|(AG4G->lNnfMz@P3kSq)B8e$i8dOo&Mi5czYM%rokK~2Y;1P0i$lX)mQL_6};ISzU9(@W%Q{k~w;4z@! zaV{eR+3?tq1s=I>&k829QFLXP!*q&{+vG%w?k&ROTd;XeQgqqqIY@X?=()+{ZM#n7 zPZl3;m=z@bC9=xff?0}Zr{~)LDCKQn!&B%vK4sE#zB0yzT#E?|tCwJgYlTI}$;}g8Sa7Gc|*mxbtH3ac9cQ-L4bx`UY3qhe$qbU?T1p6sLNbYg6qFD^ z1Va?!VkhH?_WL{MdH>w2D_ahM(ysmaSoi(&{5|jU=lsq&&pE4R<>zL~+pbFZIRy?* z_Kj_`%G;pZ`N`Yf{o2dhRw`iZYb0+=;Jh(nzKNL92H;;KZ%dfE`oKS7=z_dWYtYu( zedKKNwv{<~n=@kJmEI(f|#4;C*c% zNipd`2-f=rkGjOn+xuK|R^0Yw4=)>A#-WJMf!fst54eh)Voi0>)w2lBR@LxdVWqD* z;lQMPHQd)+SNn$lnRf+e%-7GHLvU6#mH1-qzHjB3ul28yz-(m>4278!&NjS;0<*1w z`Kl3^8SJT&Q|AR{32T;{H?s@OdJ`~|oimy_Z?AYb=p%1Q}H#uX|mFJu{vl@+4sK zERrwj1giNYZ9g;lq#yFkxg?u8LEd#*&g*4f_Pd>gZ|Hp!`w~IZb~Ll~;9Yyg26?hS z5uU`Oy|FPHV^$^KaU0-o%51W)$$GEh!eQ(?>Z`Tdu8vi};4!LKy&=R^8) zJ%6G%_Fb|hDzrRmaqO>u98>YXDy;Y(Kghp}Tek8?vDk`N=k*OKE&TAB6`6Tn-(Ve9 z|2K;!*Dnv$sl1=7=z}Y{{T2Smr!e^~Xuu&4PuKMz6@_>-U1zu+95&rW@v~!AM`^%9 zdd2Hn2KsNeC(8%=@34!N1O1=kf(kZ>4(mjgG<0ut1FrHOqporOW7|_4k`Hcv4=SXI z1@L{`E{M!_+)JtBK7Q=G&5C1&Gx!M4&_u2aV%#aJs^dQX-zm98$DQFm{u`#8`oOd8 zA_XJ=D9t)Y;9E}=yyRO1vnuE7ezJGBwcW!C(5U{qyf1@y`|r?U|2=rG{VI?6V>{sT zlx@rQoP&p+uK!m1wFB(oI_f{*&&=n3xIXwv&li595T7;*UoRRu>g65OSERlf_1@z1@DZq3FZ89EM~u{6=8` zDua6GX|1a?nW~-RUbzWSgMHGu0t`PED65`AuV*%45BS zJ!JtbYYRWL&q*>ARvK1@;-If8+2?VxC9~QBoK}Y_T|{Y`%R^4sViMp!i5?<8Ao>Vr zZN6J*p-sxH?JNm2lZC0#3lAic3pBH~#44>l&EktjUE0pHu~oFOMZe5WR?(iO?M$7P zF?PM}>?F^V?d;Q92xEm9)ntt~B-`1BWINlCZD(t>ooP?YLX1W?(3jb_GX)yeN@amY zeW{A-M9X>Uo9s_l){lm=w#lu{*yR3N|A~w6ppsh@&$`>$8166>C}->6sqL&h6b4)P zO@lF;N&P2na3<@+Yq_13hkOewhTnAUuzG!4i~d%EZicOlm_&Wr$_QY&8!BjPxv-yY zW1SJ3_V;Z+^Rbu(g7o_|5Nz1jvi-~#y_nhf5JbA8Z{l|{jo z66UuZJEgef>!s(f0Op5*$hJ9XkzJq*Qjki-n@tg@k7J;_ke&YENM=+FUw zdPsaFRZn>J%Ar$Q6a;}4dd8Fr-z|LLJ633Wq2+O^I}`|y^&^kF<%Z>(T=eSjHrBjr zOoZ4a8GzXqb$wlIL!kver0esA7MPT-zb0Y7lO@pviLt!d-&7BzKI|DJoZ`ALf!hwZfNBvGn2Nr>-ro~olyhI{IYeWTWjZ-f{A@?5d;c%ZhZg?n zjm9XhH}Pbf2#h(&8lzMve|4aX5zm!Tv#?@*;p2bSs81S&_%zp#Wp0|h^LFx@kDL&p zYee>}0OctY{&blK* z3pY-$xLqKQ;*-B%LBApJyNN!zqUt@-3_rCqtS;%bAMyRW2G zRqrI3r`2xhhsxWj??G0rI20Ti7@mU#)p zl3P(k@EtKWDdRXkhEO=Il2cHTP4wXHD(M?8i8rst5!O|5_P+EqY2@{J-aLqA2kzwn z3$gSn9fND7sn857!bO0ZgD^@UC%XI7_f51r~O-K!Th#By6Xqt^mIuum3o#3{{$ z@Zu2>$>=toqpg@TM8b%DM}q&xW~Ulu+{HVm&L}6{7@auE+E?1k({NVjD^R30#*F%_ z6oDXj%H61%NSF9KqUP$tA&&y4gLL7XoPWJBC~?s%(=x-<(YajkkTs(9;gU85GpsRl z?45SmE@|;DyTl^fM-_LdaE`<8Cd)iDz88 zLR|^8H(3+h_Cm$4vEr%JN0Z%AZ(m8{(C(~ijbQGmy00WE77pEK6tfg`+rI&K)|}f( zapQhX$q)XVIkw&fdS`s-O zF<@_IY!$ZL*K80+lWid=uzWZ014zMoC~OQN=rDps@tI+JD2Cr;RrDo3Yz_4lY-|oS z3bvd6)yt_;ESNwT|3ZA)CKK=?&L>DM(FtFAZKV2&Pdm*T{XxLsm)M!#-^3pi?QiBP zk?OzTQvDYZ=N~Pszz5j%690aL4Wzh{eWiGHxv-}@vR$KEst=H-JPG#Sst~mf>fr!{ zy(Qa!vhe#Od#~s(L&UkSl_UJw~6&DdJ(B4{Mp^ zuE)KUI{Jm4C(cX1@J=PKuV3Kv7>`8k-4A@HokmKdW<2D^3N+h@<9Qg$u8ln`6&tte z34c5)uNX~DfDGe$K0aTFZtSBx3L`v9Bp5*muhimAO+{hMwwP+kcgusjt?R|`8ztgJ z6X|OX(1tJtoO2G-VbF&_A_tC!{L@D@!bjDr3bjOvlNW!V$coEBz*r2wsT#wUY>gAu z?Zc#OOLiDC{XWg2!3j%~_AaP6iixTtOgdklheLTjl%hcmCEAlvCMdWPMOS&y2Uaos zrgEPkH;#rhImw^v-waiT(QrJ}>w_;E)Zok4t1+nW;6t!zV-gzK{eWQvsWAS=R2T?+ zI^vBLVoD2Dad&0Bacg$RyKUTQyYzPoP95%ex62d|+6rTn;-f04*o{6jH`)bb`_|lO z|Fc3erHAL#L{4++Bc(a@b+Vitv3&*}2ug5<(cfy9^l~+Y)3>5FH{mULAMyvnQn4+2 zycM|cydoM8{H-V#-o}qio_c;-yPW1!+4Ru5iZqwXnp$C2X*WNI)X1k)(1P4f9b^gG zk4%|&M|dt0YGnIwDme@@$K}@=&HF-npFPP;i28l@%+#8Qz^eCfDBtgA*P8guD9@M) z6QP{pP>%mbVbquVpAFBC+HchFvm?`*_-sg&c|R;EQyU-noi^qRw?sLu$uxXW;T^wQ z4qG1QDY)C@cRxWMDEna+)5>qb+Gvl`cQ3ovgjLm^^y&#Lg)gCrHYr&z58mPZzVlQ5 zd%h}@-()E*4(+zgwp0!JK*&CP^^$cqeaU@RO0j>~eiM>snwG_MP+dZ4QXZ%0>y~hF zPEE_NmC2$-bYqX{ShkWg)3MkKlrMoLFz(9i1g=;PS+C-cnN64hMPG-6Gu5{BqC(8oEf&0JN)4&?Knv|5U`496Q19$-Vp1JqH;inzHH4=_gij0ccrriWqcdwE6Q=Es5uC=Z3f8-B|N_d3zS zZ}dah`^yJ?Wh;i?@|`{$is3gJ3=?Q*!rGGPfAafpd1%<%nXG={J{t5vldN{p(4?iy z=S}wgRK9L|cNkLrC%n$VDbJVk3=f6+{I@(f?)Tw0n$3Knif4G-%ML7P-h4r;;k(fJ z*xrxMM|)(|3spETEh()y3i=VPLN`a_DRzs zb)9C1%oIqSyza(XQBWXl<<`ROYB_cV5>=j;0!ekV7$*v(@{sTl_u;pEFbD?2Zxp0~ z4n~EL=%RT*D-Q~}P#SGXrG(*`OAAxwkE?x>SRTD72)=RAbgKO62p*v|74Qd>c!ah@ zovt6+B=ygV2Gl=j%=W*>)juLOQ3Ci2h4{NIL}u&edYAcV!_y6dQVofq{+Up7v_BMWT$6 z&O#F_^WcZ(p}ktYlRu}T!^eJv(X8i#VkbGDGL9MtrHdkZ2akQGlHd>{%7?aP@YT!5 z&JnGn6Mf8TsVV5Xo6zGz48cehu>KxIo1Y4oEyu zF`G%U<&mxsv7=p{=a6yHQ1OpcB3?(9ecNZxOP2jFlzbLhw(ZXnXPXooJPRL`$FWdP z(l&pzRfCQ{a};I|`k0B#{&?ti|E@I>ngqK^rfjn1ud9w-)Dc8<4y1N_=0vD%g5|#O z%t5X1<$is>z_zOLz|%*;;MwcHHPq$&y9?0$x~^b50lA3)duYP)C!O^bO(S0Y9JXJt z$FHLx#+yyJoeH%RVYdmlGa>V@x}7}1!9^pJwf_Cbn~01{C+lKH#&2E`vrV_X8fIKY zbq(iz;QlR(j1TkWXllTUnW6pP24<|rba&-My5BdE?ni=1_hvVQ4@%O3nRmyeM;I$N2) zODJ)68EswjcX~0q&bFSUwvMFr<$KRd()u|iuW$Ztl2&#pgse7vW=LA~{Ksa8Dj)P+ zsTh7!m8;m2!~)?w#jbPRooYp|XWf~?j`X7wzlPljG3c)Z)A!bS|9{(``o8l6?@wWE z%%4%bJ?s;^?f37GO7q#!ucM(~{##$AIdgx?%N$dAt*~ls4w9;x}$Oi=^_M zb@I-XR8Anhq8(Rn0zcpfm&?R9ehb2@iqw74oz9b+ReU&+R=IOG-6g@HK7J7sex>k% zFT)0m^N2{uTutzQ(xP*^HGJ2RLJKgg>vM$`8KG>X;4U^P#E5PD-6kikMLkSWgY>8Y zLCiFTNo9C$!2OX9v)-;2;AP=>R~8N>DN@tzcFFFZVIlijgeGpf{ZAFPofae}+%yas zo-BMtmyKn!)BYe?3N4>UE{A|%EZ(vtYjS3yEuz%O<~r)j<_PywC7WwImu!yUK4+J> z(cHw{Ut4v`MDiA-crPKF%NblJo?-M>uKtkCsm1}nj#Qcn&Yq|Z!-^r&t2T`h}*^PU!@?q zat7nx!4h#H50Mng!yhr3zGS|_teEX~iJ5NV(GMqnr{uF3w_z_`77S}gPd&Nx z80PN?41*iLc*G2B3C$#5*X=x=o<^XAAHs=?G17%dGP2!RHrrYsbD3dnyBpT>n0XSy z-ufh*F-?qB(HJb;^h|pxLyWQZ)mz(vhZuM0Xfcsu#U1T*Qf&XSHTT#En1%D{=?WxeoOO+ z|IctQ!O->J4tA?_RQ|JD{wEjR<{JB#d0kQGx=RafHK|~EQ8~#2^AIAbThv8!#aTz2 zxu}Q@{u_R&pjas_;;|Vyifiur?}Zg_y!#C{Zf+mG(;E?q)eC8OwO zUFzkx_O_K4*dx(IE-Y8P&P(7F&0=0`DzO}(3Muh-TdAdR^ZmA3P&J*rAuft^elFNx-))+-);S(aplu`*4wYYeW$|2+jmN{j3@Vvh9?I` z^<=X7wDF1FUTa^Vq_vOE(LN|i`=BHZVR+EWa<@hiWLeGMijl}@PG6lEP`(W1`OAlA zz1TFpvE!W^JGin2i#q3^hSjES7jAho+zelv3C=n|6By6d9IB!@d>=kI%|U^s4=(5V zTb?bv<7+O_{hkK)J0^7V+go`3ZnyWUT+zg*Vq}(OQqI6+p7P<$l*k|JleCo<`JpBG zH$m%X##5SMCRW=d;*dtfkuf!M*d)gID{=9$CW9G2`?$}{shR)gzQoS2W#-Hb4F-tm zNlg?>>6=Pz)h7=Z{IO<=PJ7R3rabkZ61YnvJM?uJSRz)%zN{bD>op>Bzy|(Eb3+q` zzI3`RlFb^L#h^Dsq&AVcEFBc%0<7HijB9H&@EI7I0-8Z%{Q3-{Pvst{%mflaqzY8h zouaS}dYZI~2d&EL^MsMc3~6`$E;=UOc9ItYiR8(AVHiOE)z+uwT(fjBTV(%ohOu2W zPl$D{fv+i0JzaWjy6m#)a@&mQ(pNKG{@TTU-fCMF7<=tBz}gsy>eIy=W~*sBT{?{j zj94Z|8-FXg>B6SU6CLbgw4~EzlNxLbgViRY@Wg7XB8Jr_0{C=EA<1TA_htX^8OI~P z{o=Xt$Q;hscAu2M2RyPX!y~=*@yMQMYw!ep%Gp1ZXMq$yednx@;>p5J*Ymgj zwf|>k_6$`FFT3Bll(xd&`HhAwG8+iKQVK4H!ok}+ce|qSP@nx)9lX8Mm57x?QX(>i zz!#NA^Du(~t6>J?Sug{9!N+C%3SiihLgbZzK6sU$VD<7{lwYH;WFi$!d07KAl9Qre z8Tnc;6;RxmDx{GlVMqn1>8{f&^Lr@B(3$_7` zZ!Ubiryl0;7H614RI0%ojEH*n07Ml10Wn7&Nz}L)ufZI7RDtC{4dzIqzvM87+I-%a zLqNk(MLVcs^-Rp6Xwrf!@f_erdwsa^=qo%oxS->Ormg3;ZU67<)SaOW;7FMOu??T2 zrd~Urx2EBdM_-DGpp0wtv!D$QDgrrx1Z$Egu!c9b8Qy5uOF@tMNzm6v|A)Qk&BuK$ z=R6mmdNPDx7WU|<#vWKqtO@vI=S=+3Iq(z7$lG(jww5Cr-9Dw6Z9a7Z_VDrNCN;rs zz_tB8aSAuB&OwhKoqnH-V1mV&En3MSj?Ni#MoWseb>B9w4ClJe~0$ zg)MK>VLBES>GzNFEcKFC|0JC>oOSj4_9D~oU$GF9i}|U%o2$w?uDS#Rlq_f=i~SSq zv2~T~TTrrp&snnX`1(?%WY;=|nYq05ZKaxwRk9bEl6?cUMpq^ETT2p-yqK6Cn(eMN z;;6MIJMvXW!Tp)r6XY=`XK?$JyuO0_35OJBsQm?Y>B_ZDP>1%Hb)3WuwYjN#Sj!S^ zQzHJDp3w7c*CYN!wa1rKkU&V#`j!)iM2Q)5;<2q(yPM_{Whgv3%u#i8Dbw!$Z(6FS z6!+^jk)K=ZFv8W0Jde{os9XQyR9$g4LuJkJ-z z1*PR?q)~Y9GNt8j|0*B$dd3LHYFVmW6;^!=g{kHK1hZo(gA-PLS1@adl4)3$+el*( zhFsg9TI^OS4((V3qoDqo4ttTE>Cj}4H0>*zb`?##Sti>Yb#+($A+u-huBt9m^7^_u zynLjmBEGCs5oJv_=#@=2BVLc5FidjBB$lXpve~0_vLz-JwTde(c7aiw_1r-1gi|BP zmzYbR)tmy{^1offqtfg21`HlFr~PDCaDbl%rF&fo_ydxpH)8tR*cp+Gq_&27+t_- zW7j(=x0?X;S92F=fD=zM(KBckyZ?uZ92NdSkLUh_vi(MXvdw@0 ze7paCrq_N=CG;m1yRQ8CR{#A>Fo>OC1tBairTv}*z{>9h9@6Ba)uHFhd=@guzY*|G zcM6^G%|Z*Zm1lWoM%R@;3KXrz^=PJANot(FT^8(}%^->HhGRE9P}qAn8zaAe(z%U z{(@Gg2_hi+vkfG4jVR$SQRwRUJtgy{!`ms`=wO8%U(phO<;G+48VUOJ?WUz)8u@P1 z((joEoW>?Va7XN_lhtu!)BYi);$eI6WP?TrJcr_?CvGo2_Dpx8j}rT^0xjXZS7aUodJxD6-9PY=7%VEkF zlc^tOgYl8!I+;bt_E|uRHm3?V^<}ZKsy5so9e%!GAO9(Mj0^VhiS?m;$;)=yJn`1!R9_VFxd?9F+n zFBk0NS;6fb_umnBEC_541GCt|B>Bp_RDrF?!*Njf1^alUd%p6_gudq%HC?ce?;o~h z8`p5Ibl(8G6n*4^eLOhZ{Jno^;JjpRf1>2|Wo{Sj<1g69|GjV*#{RVMf_;3dJ<6Ql zP1sUe4om85A)3|xlo!ozHt{C*D1Z9NV2|?Lx$RNrAdh|gQ8<6eV;|4tu@B8n9vkda z&P(2TQ{Q>ZJFoRDv&%cng}uM`BbIkcOj(&l<~ggpQv#3U{GTkeJOfg1g+j&aa{#6-25tW;tT32R)=X-8hewTqa@ zfo>)heBfMxCqJ0XGYC8pix#J^ZHnI$xnwkP$gw@OvMI~T=1!M*A{$(W@g|bbO|ATx z$!Lw-la{Gx68j(_lw`;y!7CcyS@`(TDv>9K{xd|Ki2!F7k!S09i##_4ktedtOyt=) zXOU-njmWd@Tq4hMBJ#w-q*~#^zfkfE@=XT9EKaTGiXi9g z*g7#*36@{c1^*wW1;ENo9AFw_Q*2-wW7AZO5~#j<1DT^2CBx^RP*Jl6bF)x2U=9P8a-t{8)!W zkbkNR^36K?lkZDE68Yw%dtAP`Y!3cE=5XHbBu3pP-#nAaH&2>;v)Y6+vEN*k1ha${ z&3p~7N(?ts6VdyAGjAfAbJ>xeufx#G3^&s(165fv!_6d+<)69aEu5!|dUbj+G1}BQ z_-K|hb(L_AuIg-Ea;6S@@7$R>lUpj#<0KoU&IrpW5?jkvJo0mOiJ^9pGs-{ciMm?% zyDQE8Zo{$5zmI%krQCCT)>qR@gI|t{b=jJOC~tMu`H7YXVxf^Ka>p%1u80gIB5Ch}e^*s>LcyWCvZaP>1r@^Nv%d|W(I?N`sw zM^*c{pz8{Kz8cOQm9IxgAXxV?sjBg7Vd1**38!$~=I4S_H>>2!?y(6f#l0TfzK80L zuOb`1r}jZuTg!06R^C1POYd|sT+r7EZKFU$)DdfzNSw|qWY z9E~2i+M_!+e$8C!(L{C54=d5~WrSzei~ph?EqmBH!?~T$>Fm9dA0g|k>b-0-lU z7HY*2NASn@(k1R0gGl9L!4IFZnP#3s%n9G;OdG#lh2mI41wk@S6OFkiKpp+bhrh-t zpK#n(eCmx_u0n3{DMBcj=o|T%%dH4!hSF4({VJ_7f7+!erp{g zokx)53+IJk^ycV-U3;OiGFXx3;UC^i3*`Iu0`r+!+?*o2v zUg*YdmtVf;wb7^F@rOZv*^$XF+h&trp1$#fc@}tI(`G_Y$&2*5CfvpB!f|?)v-zfh z9nH8m^L2H_S~;jc7QYaW@p!-<0|;hhAoag&Dr_O_qsPSyuIHm`a0-X>pJxg!$aq{+ zDkqWGgUPRdO4>r)7mT=jNGT89J!HACr+bkde3`pv$d<>>68us6m2f$#bmr<2}NAXRps4Wb!|bm5F$99@IBvRsmJRU5A;98 zgLvJNf&OuO6Xl#sZdzd7e^t&U<=`&bpq|L9-uXJ0+@PkfQ%|l^Pt=L%hFTvJC%r2N z<;dN-@_5pfY9^z}SqcVRG)+H>R_iBl>xxmf7qz$u%yypX(Nze>qphNFDn=ueH zk(>PY4?NKJ9`I*_A`Q>9 zCT-I>I!+<3oEEdlV!Z~*DDm2?Ipra5mg_zIn)q$JGnd|RYt!_&uBy};rFfoh3O@D#--?a%_n>{6>YD?NGcWV(kub(B`TF8?`5rQCSKp+SjkmU&Mn`O7eUGVQs z?C)Piv=6=XusZhlmL;YRNx~?b9%Pv9iIy#)??xIti5<_DwE_ji{zjik~o5Qj=%}4deDz*59S$P_>$zi=CXUB4;&; zGRNnxfpu#3l74Y*((aU+Z8+z<=Ow;NQ$BK2U&)v#K9kNuLb07zN?VEB2jYb*jacdo z-NbX-7hIpT>=?@pLv#6*-*eYwR9?mfH;biU`tBuMNqNQ{sr`O2_f76ejvr1E>ha-{ zLRCT@=uQ(v8}vEmvu#PkxU@+)+#^~O*L2Z!O{=)E*y+9Yba~;Be}B7MsiMnvSu$Oc zUAk*Kxsu~}YDcNb`>gj%=w0Q;Bc_dd`7&-eKq+O@eWl$#q^K17;WMyex+JSjLXU<= z?4J63u-ctfxz#S+``l?op0Zx;|5K|YJ;k|%DZO>%mCMkX^%)UVkiG~HtgC1X?b0-H zJ$6auD7Ng<`q^ohR_SWHbZ_p*mZDTU^~8c>BQH0Z+HL=!)ty9`LcKMzbX3YKSmxP- zO0^E)aZu|HPVX!lysbQPdWT0oEl8|Az8LAu_^b=ADXm<899&t3mDX2PTd~Xi$wI5& z!cCX{kG#DH^oXcS)>e_62cN~piji3s6IA7OPVofUu(3YTT@U|}^p*y0&y`k`JH-~m=x zf8g-IVkcD$NHOqgt+37#g(v!S;QZzC`LluJztinSnd*sEYq{Hhge(Da0T3ZMi-^cp0wD_*i&acHkOx01puHv_+g?+>SvM z9Iep7F+qayYIe3+2{UvMadgS0Y^(xLk?ubHBk>c41zvDyusjb9oT1I50|v|p#Dae; zfe6I+3n;`d^DJNp0}ODujun=Q$!jufU|B7&(l-qs$g4>p>#DhswGK+ynInN%N=FI$ zUNh*qD@_W&2}EcGDcsmyYLe|(HCotBLAk^|R+>3{&ZC7XNI)5Rw9s51A8bnSL34e4 zV2=-%#A{dKgZ4W3pvSoUfDbltWB4G-V8Cj-3{11IL|~Cq~M^v9ysVsz=0?raIjmsQ*f}$ zE-eDoPP;T1P_fGZf|S%JM@FihoG>sgrFb>2eC1@~@6`vPoZQI-R&_Zq9zqh+| zIYEQ}8Kv>C*jGAigDw|^c-%d;!OpmTL+YC1fzsWc?wW;`>ysguu+Cckz&CZ0;Tlzl znAMy6G?j>QmcYEqM{B(>tsA_M{Ab0bAz<+xw&amtcDgs8a`n!;7X`tq`+T(yRg5-$ zr8~S3g-oh|IG`4s8rGkN*!oJJ3a@Ff1upJ7?nS9%(%Dq3V|_`-LTKeywb#kk#--Fe z-oe{ScTu2Mkd;)tEfA1aYrP6x-L6Y@RZIW-|H`=Jm8f}EO3m|gs}eQON>lT!tgGfp zlV7CdNepC01c6>!EMJTA<&-^qXw&xel{6`6w_+ZfcIPzB=_}o41hEG+%Lt|~=NpTq z@Uak5G+XoeOV-=-S-W|(uM|dr^NfVE0t$#eL zig??U=buaIJZ_32Gc&r^aBrmxy^&1YBE3>FtBy*`Rw)U~FIdrGaCO*m2Y7l*>~*Wm zKKqbP8Af1_l|&g5N>E`dS5(C))*J2>j(O7?#Ot(`E-&2Ep}9l4=7GM_y)=gHXuI>r z`%Kzq1GTuzLNs>_cB+hiN+$;swb(Z3*VIzHZFIMFrg)cyXy!@ZBmRWM3_foAECILr zTz8Cm=Zl9&y^ACW7Y82kSJB4KMA?&$pCdnKXl~|MvlxSH*be0uR}a#CRk`*YZ3=^Q zIDv9#dVb1d6Iwv<%GGq$aU8k|*1?f@J}M2G4Oo=^B8p)iKGLD5%?-V!h0`MUmI~vy zqENyW2}`2JyZ0}=n~18H55w(kWy6p7PMZ`>xN-xNTjCf2u!`tWzPemkG4fkKg(Pv+ z2XED9dr%qPHBuPd>lm}~<0SZ3UnheJVYXDN6)mAXYD|Dqw4mQuDc0OdfA|)I`|KlB zf<+nwZV^>RzQk#(U3Q(>#;(M#3X}WeK^)rOj7mx=rNa=;W`=$i@;!LN@zlY zcFRLyK!xW;yMNbMVescci}2N3myP`FVe4+I*s=W!Z{b6=`}p6;_qeF=@x6_rMWQ$= zUc^|qx{TT=AVY7IBSX7v;v_!7RXq~VtIqIvnqiVF0Hi*9 zRkYr|(is)yUuE2pwpa0NQbk5-gNh8Etq#IRgQD&QmhXizsEc4rV^Gu2C`C;0g=m@< z5o_(x6ph^}BzNeM!aatpq?Ftx;G}QsITn%^gcNjVywV7<2O956t1-p{S`bhnDky5< z(9_8C9&>1slBwH<dHvuZUKp~NrFo3_VEMDwf}`efb=RIgU+qZFd7X?ry486`J9V{wjNj`?1N zLkCLws10Ky&%Y_xM$IKk>$B0Uc4#(Q@sLK7NEmn_)ifMyI6^^C;(!e&yK5hrq}R&6 zS52}Km0}@J4 zSh5JNj>c58Qfi(tEzYA5NFM&7d|O~w%Xb9^tbB*5sCjib@J8hW#^698v4I|7o~BwO zA|jtzQ|_QCq_|fc|xcf6+&IpoN*~~r}k)|v`>-Hqa6jKJVP)f6dj~A<8rw!o8bDm zgBn$QACGRcwQDl|8KIO2v@w%&%#6`eF0*3En_(1Z;uBB_YxfxB>C{JaXhtko#yy`8 zrv7ePJ+RN}rSoFhUxvD^`iwr(e1WsPhm90U#3<|`g^xm3WP9zDGF;K>pLeG{_lb*G zn@<>Kn&F3;_+--3-=0=ehLW_=XSiVr$0HLw_NBxoZontL0Mx-JtVQLgt?003xO5=& z*YOMkt2|}Jw)=DDg+951mvMVjB8|qKzkzLf7pkZOwfH0@n1zs|n4K^n+OF8|THM}8 z7{$R#n_vokVO$kE1XhZh1XIoqP#Af6fWr8y3s6F5ZPcZBB?nV>f{HD&=v&@qFlDDf z+a$86h!J4QPKPO*7_NP#VS4h{;Ri(h)e?Dcv!`VD=XD^o0qj6Tq;uF(R z%SSrwh`FPdjy!7Vpom)3a=B+m*yU}ky=zb*w#}Od?G3-Q3BUZ` zbHXp7W#E^N48Ir_Xb^rG+-;Rd0ew`GJuGYw4vz(ywrZ@gTk4Bi_8QodVg;W9m9WWG z2K8+nwrI*~2q*hs#kQ0rW56c~Y)N2@pj-w#`mD9d4qP1a`(($B0%p>3s(j@Hprkvn zPdu9%)t4t9cGx}%xCQhg(6UCL#aZcG{ACR^$1nd^qph{U@NMq+MPWyCYOTd} zbuinZ^Af`^=TL36DPe|RwpZhqafp?JBjUB4^PSQQMqe#{dAvG(8ELKzhG@9honZrwHoKGY8*DmTN^8IrGU_7w ztTLj+>I>|@lx7ar>`kj7h>^DmrSKJ7L#yPBB4}wzt-&V1v)J@&)(VYNyR%kkq}v@P zgaOZpO6n?YIBZBBz>~E_r034sqHiZ9n?A0kkWpO~u#sxnx}eXQ0-J`1-+&g9B}Ic% zwH)^XoURRzWcXz%jOAms%!!KsS9Y;9~l!r*+;D(zqZW!t>C5grAAOm6gEiTTbvnf~ z5yqD`IR~#i!m>dUepfYjV3oG6llw}s=oxY+e+tqADqTj~Ni$jWpJQM9-FZZS+ zQ-`$?38*qn`0xRo`eZY7=^e|V(7dKBG(Bj_)~Kn}Ln~TUMcT(a3e8GNRfwdAb51m6 zZMs}yrKFm&)DZ3UZ%#C2Gi}i_44NiCzNku5)(jGj3{FHfnlfLmgR)Eu3Dl}mmZgIT zbg9qA7Hv(0b!Sz(+j1DjH13%mX;dZRobZAL0@xS^gRgqshCa8Mj=-W|k;jQT6NYLe zR4LvxM)rk;(U@&3vpmV;Hmz{1bBwhBLwzX^Xmu4ywgojA3D2!2Q<=%Ctloeh`PwXT zWpa;Og?#b=L-mFsAT`-z0fw%Snv6+9J`u+FMWjMKa5Cf24u*lLITL@Xq)moDJF4;L z9i!S9d7D#^(SSVuWE`PK^KR!AWd4LEv|IWxml8FZ?;IdWZ6MOk{@Z_ONK&_kBz2Kf z&ju`7ax98qgk{09W+lA0P6>6e=*q(0y$Kd&gw2jc5n&$;T)IBNAc3lQr=js9#U-|4l~ zpV8GH2mRR}2#R7(S*1T)>H4!^Um5V{cN=XzKX3fGq#A!#nN@0+GW}VJPYgxQeeg=! zpHhZD7gyuY8vWS`W{KmQXSpKhqFVfUTF*26*`#N1{5cWc1qdWIKbJHETw>O(Z0|zQ zpY@8#o*Vc)P};2`vZGif>CbvgyK?vwU?gI>AyKM8+j;({v2@g`1aLUZX{PXo4LTqni^ly`HdR%zUm##`lTJ>kz5a#?fq8H7O} z&f26;X?N7gr#P)+TqzMW^c{u9`wTl54()TzmqZ*!8BL^-=iZ2X#7a87|Ic&+E7vAX z&AfqU21#3_XdGd^r)~R8Ib?T`YM+Tt8yFqnP*K^2+4#}}MzCPo*=IGHb?5VMe4Anw zatiFmXZW4BU_2ZId+wr-C_tb0!Zc`AL6OAH|OIlFwtjkr+-;<{E3#rz{uzmveIB;qD5Y zAgtGR=wvBLuWfvn84nSUfD)W#yDMM_*#E7Tm}DdtPiuV<5aHSwNaymTawy!grAA9< z)+mvKCQ3*!N_3aWK?+;GP+0L?;pUf`1>(L`xY;`!U5kyR1k&QL4fn{LQKmczcWeqf zI-)LDao0gXx77{z5?wM*A;9E?Z<^{lG4Alj$xO_D0S@;E`)zl+{8oa?6Bvo zqqEb=!lbsG&dwkE$EeoX@g{?Tf=u*=;hQMz1ajnQLVU6+rpe|&0!(xVpVkkYU^SYdzZ<&Ccm^GQP|B1Ed7Zk4+^^)m^4FSr&dZ~m(GrT zHl)$nP1w*BNXYB#G_qK*$dUh^jM8m-n>p43MhYjyIt?R}j=ruv50ly{q826{a6pP+oloe33sP0v8d7ymU)NekU-z9k;iXJp z*Ph{}x#;WEIrarL@xj27X~4k}u$sJfDm(gFtX0|d@1|}>WnyudQ`se|x+o|XtLzMu za)P}f?mDcTYL%Za(utfovo-t=!b&b1H@Kv2UYfgB*W9T|x6-D7m!4~U4e=6mg$uf5 z>5<32X-04nL@v!$Uzfv6HAm4VX>yJ|Kh3T4^TT>kM~NiPGMB-$A&I{3q3|wn@?tV` zNyTG(*~U(&Y_vFZ;nf^Y>zE0aw&%c-QOgde^<5me?0mU%YwB`@KDVY0Le~LJ z&sG!SK5m^5hIQ%?`EYfHle*o7edd#%%`jCJXu3C_0jm0!bI>%FfF@ABY{U1GHiwg% zV?X{E><)20k%6W~)EdsJbtiC&qT3xRp`lArLXS{~zN_P@Gh7*H+OFps7j}omg4;kC zVp2n@)N@t#hN)`L0E?^k@`y==<`GjER9NA0v`z4cCV`YxquKiDk+sGZcqqMsl8yu# z_6C>Kqzo=e)n<52A0UHE)*yXEgG*GHhf79?DWw;>dlZ-Bds$eo&kdJu3+WHoZvvM-p1>vXaw$V-ycwv( z^T2BDqNOQE!}UzKl$f;vl1G&pkn;VT;li=v! zWXju2H)yRQCA=8$XQj3OxK$16A(^v(^dj`w+E02?lAitopnCZ`3tTGaG=8bR?@xci z^?h%7ZS;MQchF<$`;KP%zGr9E_wD)U%8RCVMAJK(r*|~{?t;lDeuCUzzwSu$yh+Yi zg-bis=l=O`Jn<<#&d$@_m*}hNY5ZP|itv{O0!>f&{&21?IZpSKKoM^%c=_Ty-Sd8= z?nRCdJm<&iV5}G8qolCnZ}$!UaO39yG!B* zu_1nt&Tv);CCF#pL@F{de95F!bvnxrxT`%;SFS!$_ZD=7|HxBP-%iqRSV(>;$|T{g zLWia##3Y|Y;Vj*58-Y0`A>N<#b`j0pgm7LUwJSk~;egpH60BW9f&+<$2~&x}3jF>t zl6(0J)+yZl*(M_nopjZpFiKuE2uJCvL0O|#I6kK1bC8JYg=fIPzGUQ7gW1uyszY=> zVaz8aRky2kYQC%bGS%R12B+#AqWh%LfC|I<5xUu#bd!_oh4&vdAhLb921pOmquvnm8WfB>bG!s_$t!dq$ zUA}YC?JCB3X_jpP?dlEpQVPBeaHO+yZ;?`vSwgx^@JF{(5D2%aaM^CI=noC7xIJpU z!*e|rU&aBSQZItIlkSR|C|0aQ>2a(kT0+lUg5~AjNhA^@) z*FtN}v1h!92P|v6v6VQq zjTa%T*SK0Jo56dIj7&6*Jl&+TI3aM79sikDbP2$!tSbQxGr^p}C*wNpYYVN!rTej4=ENiUT;A&0iaPdSfh&vqh~7DW-jq)wtbK_HxaF#dV^bQgSQsX&%~PIMXN@^JlH{LG4pE z;a~NF8OkiCwAED7$#5>WE-_yS3_rbq^O7>)T{GFEiq>S-!j7u*3B}&zyv{D2*Gb(9 zK+TjhVt}8WGol%J&Pa?>${Fn&4b${&ZUvHIHTfGa7-uwdC&X9aCnxNvcO4agGq^Pz z6ANNa1+XNwm-2jKnLe0jnVx~HS2H(?wJrxT6~N+51#oVYDOa>2!f@@X0YAzZtjW^@Jaaz0V@%Uw+meiLS}eY4iStcc zZ)JW3e(BfGi(m3}-P9U^*IAtKI%AYM7j_9B@N;IDnrL(ToY8#DH4AdrU;AZem)Xhe~e!&svZb`u5 zn6!{uGuRZx9~};Y43>Wql3Y8DZAZnVg`^jY3 zJ7JK>?<9oJ$?q^OqK?-}c(;LN;Rmwse_ZQV@Q2k~*t70D?fc={*ftr2w!hZ5?`J#A z+xOdwx#Ep(Heb)a|DPbc`x(kjw(gwh4q4Yxt*?}5kv@Wb{~dHfL|tU9=~R8%T7rH5 z?fy2{_haVz6h(-4nAN^tyC3f>rQW=K|0XNFT)4Tj*fC2m5|YUKtRs9O4f!C!YuDux z>q|%C2`l9xe&$=}CBZw5&^jl1^Z()-#(8Q?80V>rnNq!A-@naxS0%}v5cpShN~puTwiNbO65AC< z*zCM31JD^)q#+wS8jkH>brTiNGe22+p|~IJnu160xX^n`rQsOz>TM?4GmDmP%u)}V zCcs2%ANUSgc2mmb!z90$>VLD70f1sfU`ANhd}n?5C;1}f2gSbL9V}RG#$(n;5GupD z8lPDd8|zN7_%&Bp)O?&0gJp=j#R|@=()F^8Z^V=z(I07PtM75AwIxKO1lF-A$wiYHF6fX~LYCeMxe;~6u;m7Su@@4t=+ zDu<1l`xoB4Yz$TMuCKg2ysV@6OTJ}>( z*|x|g2gdj6>8{eEx!LS<#4=}t5*%JhWRf#O$!zvT*u?48;`6uJZx;>EZnGcAT*v(6 zwEC4%Y?50iv9{HEBu-867s!Pgky3(3rh96@h;9ZcqgJ7H)K0yTh+-i@ z@5o9dm4+!^QL>D_7jxt5m5eOZcYC0(E-Mr}eyxEaL-|D`-_-%_a2${16G|=-@lIvd z*bMgjFN}P*nbt3q|L-%?Bd0HeSbD7{0gnpzs0CPzSo@D8?Qw#}t|QfXZ;ee}9!cy! z5kFLN z-)QQPyQaADnDr?{Y!RWbb!m7xPL;q@yIoRxDwjiD};eYGe?2BbX;gY2E{?@bE4_Jt*&SkT& z@vmeN9E!=<-DdxIc+A4+AuGWxRaO~hv!AfUb1>W2q^dT|2xj|ytHf+y-?G+hKY>2< z{4O){o?QCWc}e9@e%T-s9Oq2*GsA5EFs(%Tj!+~_5EmFRPXRB62_$?Eezy3Me2sRJ z=Mj)YBVdvSq1z_71)>*_*zBv@i9J{3Fv#ax9h-eP%3w_3^VHCfJK4I+zLOypM>~_0 zo0#o0Tmt$DBSj!7G4k>uvYI3^iO8AlYm|r1dU{gMFxzjTBwr84t-@7a6?0E-She#` zwo>%t)N(}{vy?4Kix||ceDGGX&A>l`G_TfPU*tdQ`DRAjO#CBDnP4sRnJ>;kUhhYH z4EBuE6=0A3AhO@3?6=vi0Vh4L1A8#pe{TYNnwV^}n(Vg`3BtSrpB46KsjY=QcLiOk z%ksMkf_6CZ|Iu17jfg*TKF?r zok6TR865uDpv=lXQJwTOw_dhJij~b+rwe1wuw34WU&yCubBMEZ=3!;A5}uC0k*9S| zSLe0Owq0M=xcP13<~1Jd&JO4f`<=^QQoH-M+(~5+Q|cKjARSREJE`2vNo5t9x4RF6 zDLbib4Y9$7{rw^{vbWZl3IDi|kjP|B(r`Ds``uh*2uD88tS$Ngnccm?8+}BBH@RcV zY4ofdwr5> z*)rycb_QobI}R%Dwz6Q8+G%OZjc`2^?Iav7y0hE71%3dIrpyX>z_cmaQL`aRg?<|p z0g%8TfnFB#Bw@wGgxwYF#+{=iG08|QzUn@6foADRS&Me8{iG*lKs%0qtS>Xs&cDr> z+-JdQxJvEsf9}~g%-bA~O~&Kr_P4dLH@y`K z$o~FhW`BQTHv9YG8&4c2(|Z-22IUR@5g0KZlbim-O=BZrHqAY7X+5%xxOCjOv>vlJ z?a4`|E%ct7RCH8ldFGLPmOW{thU3e=vgh0L3wwXL$@b^L4%!dnVke+y1l&8c+ut7Y zKzi3p%P^?eOXQHj;3W44d+a{CbDKZEvtqvz+Exyh{oSXx+pnt)qM<%dITWI_ezw=| zKfTp|Kilo8x5+EjbCAS5EL&wmw}z~HlO*u%(V-CU@6bMb+BHGbj(hXe42EDYcT@a7 z4ZrqX*g-3FjmferhuXa?TpIJZ8(~%pk(6QleLMq1g$ZSCZ>MRxzRqZM(Q?=43oQiE z>@pV5$rAN@mkpA1m?aZ}^FU_Ye(-yJrKwnUx)}w7AZq#dv zF`N{@_m$1wn1>Y`pw4Y9$@%U_EYk9)~VemVL$fp7^oCp)VRQw2ZTc<0Id`1d^?RcjUvh zCJ_iB*Kr;>3)CU1@U}C)AKJv5SH~~MSFM2qTB_jV`}e3mNLMK>H`0l0;ut?Hvm7V~ z!2;!~$yQ6Uy-DA^U$=*Tu^86UD+t%bC?X*bbkMeya^hlK;t>(a4qqB4ff=x|I1;C8 zyRyWWbEB2m2*SqQ2GN!$45Hvgj!9fD0r*!7hmOO`aIKS?5XcF*lCImRg3=k^(or~c zo0*+ByVx#Cb04*lautPiir=$ON~9WOzS^&iw^}2nXO~^JD$VZXh4#hWzG&FcAC}$p z2<=`qa{3aSw1k4&tO@4)lyR%mMGM2Pb{2#4C9&a-A<=jFImnV%(GY=DA zIIKG^8noUUg*2|M$uD8(CK`ze)JHSk)*7N|GV*+L!}$JBTW?sVRgNZ`I7(?ptWmzE zCXLeLB=-CAk(Y^^>27dnSvW2#E|V6)dju8}JNV}P9}lXAcQj#`xSwuR^OQ=nZJ;@dZOt1{7>;tX0=f|Wh!#{u zsIWIhOQ#fJlaV1u?bd?qplI8S?OWxryA;E3)bCU%<9ekSu6>u8v9p*RZaM5G>8_H* zrq!vra7}*po!Xe{KL>Yu!}TBFT;cs03+DDn1Qs`=7383si7gHrR9LY=jz*8fPsCFL z?`s;^(M;rVI=TTDq-*u&So}gf#^V8dTS8AyFiQ(?jqD$Ba}_g7^RP$hMwqEhJy%nnpE+LxkU@DEy6X zd8=abc}U;K*(~@BmGQ!gCkwwnviItaw~x^Fy&JD2k3vqEBbhFddt-OJu5n>hSw%+eX%v1~%@B*R>3|sAb*q0Xr}fuUk1_mZqwEA%EoN)P&&`9SMx& z^FsFIlO|458E5F@QGv-Wxi}G5~0s5<%Fdz9-OjL z2z>sKT@d(u+)Me$roxI-g`2X23r`YYo0YpDqY9n|t8g4zZHK~1b@G`*EKv1qDg&}gbnM%6=8Bc~gg zIZZiMP({;cz1)M7mKmBJwF_uE7D@p~89B4?AJGl9rJM|(zzurH;j{1E#MT3*}PT#=uYE)78 z;F$duZIn?~xQ_;XQbslxDSK$j^XK|kOx}fQ>NFg;bWy(#z-UkdkUGvm>_8zysltxPRE+ z3XplZB6#{%ROcqVC9jq|9tfnwMo(^pP&}`Ql)e?^!rSgyjPV{cJ$*ym3 zgB4xzHyJU-q1{GYTdG3fOPD}=mVB6G$%?LJ=S#~TSGn*LwoncE;*~|Z4hzrVl$Uhv z;@X@`lAM||v?JjX);1b5P}u+>qF*bM?Wp?SgD7sm_7~%`#2fgFo$&_vtnDN=?n)d% zbOpVvT*aSgEgg@#AW3BdSC#8UoX7e9kb3UJ*NPcDY^~^eN-gnWT0E%X9&bo^f(`Il z8tCzcgeTYlpB09%96VGu^T(Mjd6(~!y=Ir`7>AzqKHBmfZ%DX-4H-9Z4fJsiYcp3B z8KLL%pA7j=Tm1{3ep?z#xo(i6onFxFD&d zq-*d2W3kKMGb32^rCf2cz$T05to#3PC}+Zcv(3e4MLFSi!*4nR z`hAuZ6R6eiv!EO}-5DHj|5Pa7XG1dT%Ypk%xZ9{djP!n=4Mn@3?r&o+e`jw0&qBeN zkYsbuePRb+nEW>nxPIz4zJ6}~ROzvQ9F1=1Fy+*SPMSAwbi*c!nK$`gHK(MOT730o zQQX=%+P1QBp)QYIFMm%>^N`1E-v56bo@{HFH}CuFo92gNdKY}Cym@jxZD55b@pVTU z=UMwCzd5n|z3~?}ZyC65Dt=FMJYOmUepklx(Gv{pILSTB{~KGImqa?fPso^gBNG=5 ztUocZ{;7C9@0NEp4(ym9O)Im6$;G=K+OME{} zpZX$2P|3jio{hivt}p)1J1&3U$;&@?`4{73m#;r@`R6D${?g^woxJ?9f$JvX<0QQN zx)Yb*uRPa1HL(8Kn;t0i4bhJH%BgtAae5tJAv#3yR~v}4b=}E^q*^I_`opnb!b1i);IIp8Oc;hO1A5f zEERqWc^Irnu`sZJq8ip8Z}?KfEAJZloi{XGH_`C1r{9k2N`2HzHC)*miL|8ov@x#n(mDCNbMD>DjUP#h9-VRVUiKWwL=Imel;- z&66*QYvpRo|lb6#9>{RiX`&&O%GuF*q{%c0pHtr+s=-S9u?6nJ_#Jth9i?m`xkP?J{#Vlw0-}mh3`e$u{ z-Z2@^zgAy%yl;5N>*I$fk77F*ww!$P)V@8>p5AjJvWfGt=v}|lwCh)KO1PhJeWSSC z6b<-|!mpDGBf;Sf|2Uew?C$5Muj$!JKS&-;ZvW&9)7RkB&~AQ}oA~1R;VsknUDX)D zsEHQ~xou*HO153qpH$wg%Kvv&e&y8YdTsObM%SP8A8q2?ow0g<=J6Lp**m6G^!hXV zuRJrY>rigCz$N`#lJ&2!?-t7PJ}#zji>+wP6vJ;R{I*zKpLy)XY46jy=`l#!tk1or zCDWZcmz3`}wf((nO+vu1!o57x^hkcB-s{9=E_{p?hXs`qFE}Th{Fp((#8b}dF zw}^06)98lAqhAmQv&cCZC&-2+HloG6M4e&KuWW45rJkKmCc?_bl{_0&VkVJBA3sh0 z(`+PM{hyx4KUBTZ7xovHlZW?TGhgwKKQVtTBle|b5BC20hvrRR+W72ZZ5r3z^!?th z=}Virvy^G7E&JEb@9dekgztIjyk~fOddu{sXP#ahE#oAn;`e^yP5VDQe{aXi>AnYc zyvV!LyxYPWcIiUOn!dD&zc=J}kgU=j^Y7nmDI?W7wb{$v9G~_=Ja0UjTg$_I-*cjQ z|N1kXJ#U_O(Yz1M>$wj?^{_weriByMo2Gv@EatCq-sb)5PmZp)q20NE{b>ff$k+KH zWjjH(=^baNhD=<qR8|imeB$NutHAt<=OYZA2V~!8do!tb+VRpI9Gp zK!4#U)-UAeAAVx}B7T1I6YCfA!+cyqk|q1e*Lke1^yY{XFwdGd|ASoo)Vz5-TdGB+ zg=hL*uCc@KO5H2Xs(JJIyZX%6S!3i6bF5K!Z|=GEtxK6u6%zc>P99BO3tCViqp#DgS~vNN z;Zbe}vho-1`2|a}xp({J-+$-NtHj=-Ch1m6qtpj1qB=ewFZ;^SK zPqqFGL*nhspGoSP1`O?(nmqmA7R;Oe`2%X-&#RT!c22GzUSQkd{nM9rQlQo*|0=AF z@f&whI`iZ8?4g_4UovjZ_{-Y&P5JlqCtt)Rtgv3n!t1Sun)eIr{q#Sh8c%TV=il(J zuRirpZ+-TsqRk^OzX=Flv_TE1(s_V=jpJ4_VVf2o1V$fhDm86<6 ztqHV&j7evJ8BiI7C}66f-A$&(nyrBue>8&N1?6(Q#%$93=IRgkQ~=q4m}lfhvVG*m{V&gcD{duRCJkF-rcukSx!UoV+^&pr2?=RD7Ip65Bw zdCqgUJrPUALonRRExw=9^_GNKdcdz0_ycdj;wD=R3mPoMVvkNrF^%Q7mN?WOQy@*I zc18<0Jq!>=C53_Ko=VW*sxVOENuXUvp|q6^f%L)X7V0| zzi;J5fg@NykAmIK>9vYSvP#9TNmZS&0C}6a2pBX-jv*vPqIG}nLdo$C%e6@kq>;># z90&Oef_bz!)|E`^A6Q^te*lkP_FguIsJYWRHXPH1yzOfnAKN# zTLi{q1miKZ?v{-A2XD1pviLCY{#eU-=0aI|LKZt;ds&0lD}Iil_8&kutSn$HJHx!4 zw;!70>b1De=nBl@n zXlChVt|7OCMdF~){QOfjX!{E(UpX&=QHAQ@8Mm~ng5DK7@NMJ4eUE{P{kK8zjOmB? zf%m2K;!PmF5bAzO*-)C_cx9C+@ewM`IPI8BBW>>R_%9EGHV0HBhZkP8H` zGW%TT8enB1*;pVn-zT}=08*~Y&BbqwVU$ILE|s4ZUIFRdQUZ83O8p~^#;Fa)X%T#i zRfF-s>FpQAkFSayi5Po-IZcOA)^bbt1GoLOFk;6n1h1tH2qT^Y&~Gdzpy9`Fe!k+h zn_wV1>niVzKsXNf^e$Xp{dL3|)cF|NKK~RwCF*wmQ9ayo-5%&&=IRR0zP5Sg(Lq++ zB^BfEJ5q5MD?TIP!gU5i6|ctgsUrFkCD-7-wFv}FdV;R|=8Q&D_g;3%?`XxCG%CS4 zxet)_M09ZtfYxvj=?;$$T$#|oy3kw^^Tj=UjrTweUZ;n}F-jM;K0QXSI~=^zLhz7z z6crtEqaJ+jmMUTnkSLH`16({Q>lxh%_)LXnbHa@PDLXqVP%Cerhk_dKg zQRHT#4?;d0t&EfMl{3Zz<(3L!_K`&qyv^dXTw;gu0v97(Lc67s7&(0su!ccTQ3w4e zwa4tNM&^>$NK%ggg)7#1nn!`DK4BCgp!&$kZLG z?a09!z@Y9J6dBanAJuhq+D35r2H9q=*5K_EJH>Q2hWnO0Ztrdc}gQA=?^TNZ#> z2wJjJjmG;MrZ}yidoKp>WR9bI8jUdx#yEhIcEX7_1V=aVUq8GJ5`4t4PGGis2d!nV zVJwxCtYrpa`@=&p^NP=^$Qy41yE>&ulNe0IfRvrW9DP#ueC9YKJ)JBqNoB5s(y}}$ zJA*mik+K&uN0*dsOKX*uA**;qtX`m5#>z8FS+&_ajTIOz z1@omLs~(Mq_4!F~dgNR{g6bXX?tx8gz8^ z$o(zLSeXG1r^~RZW^1T3_OACfG>-kd@>EMZ_2%2Clc7J$un}`C@Wh317`~)TEP^wg z^DA_ca{+r7<#)n-&a6(YoRV3dR5_`(I*-Ow@vrK|#(2Mzmyl-(8y{o$dy|*3_u#Qb zbqx+gl?{^5U-vm7V6lmP+k}lvwm6+3&=}mmc)sL1%N84Y9v{Ib;UWm4IaD-)8nhyF zjg+zPC9G@^>o}Flw^`p8#J_@Y9lPS84Q9nmbOmU2Rt5mrCG?5qJT1q5umD2D zfaTZ^=4(8QSVby4Z8}ylmo3JZ2$tU$-bY3drsF+Rdd{(92RQhP^gSO#_!Z3Yo@JAI zKGvOt;C$jRU!xTdX)zFd3FZgs@s-OIn`aNL$BdXE5q2~ap!?wT8VhIy%CnG=dUh!o zOCmi>UABmSPf)lF!8h2qQ?1|5sEh@O!5DZC7n?1MGjvCUCi8v!$kI|EEHjXe1>Txd zJOqTw#`|IUM-di*BgtA862t`)02zZZg2lit=`IeR2qt2YmF}hS;~U*qsjEsdHRoXM zIuzW^*}uORrWAZETp3Y+&o8Fck4hds>UPw)&Zx0)ruCiQ5kULcA{iuGN?9-6j~3K6 zQI6Mv2i`O-5g=*C694gN>)dQZ#cZamk|2@VD!&7k6McLobQw$pd=!9kL>FZp#38&h z+J>^aA43;G{2{upy@Ws7N&^vb2ykNV6IA?+isdpbV+=I%G3yrI?jcmY!N`f+S>y3G zW=+E1W;cIZPbdfW$Z^V-5@=1=Ei_MLx}57b<03*sf%qK*oZVd`krhN5*k~lUo|+e$ z7spKC;opM<*BKLUE@eV<%4z`;fO^290VWG>ltlyjC5BQK4U%h!&ztMc8u2DQj?Nko z-r9{h;u;F>gV|#_uRAGL1@wZLj@Ki`Kc6XZo{;U2&1u(JEKX>l2=8rI|+jkb_GmBm%#!x zSOoLF)<=$iRoE zuD38AhcqsvSLbvrV7OF z7!nbDpQVdj==p`;o(#1SmYz!S+w(CLO~g^DDk+o#wb*gXqlbR`3gu_M^22vj{Pses zqIeXG{Pt9O7HCJS@QAYR77d71$`SALf2`Q7 zx|QpGfmX4-qu^hx&ewPf>Q8&_Qtny73h`2GrMWRaw;|`gRcJWuToHyruJxWp!(#P{ zSYdlNTBxaBrIAZk3H5uZxnqIn5I^I0a`dq1u3M%vwPGG~=0ROg%5M zdK_2vtwKGOV2=)eq5BIp*c3Px@KY>K`HK3}-pAo46R(&nCW}=ejW=G-9?=L(I~-NTy=X*`p}P>fK|T{nIRe|D@;s!j^LI7}9UQ2#&ZgyOXdk}Strb&@v0 za;m=pWh6-k(M@F%R61tolt%r7Sq(X9tFo!@Pw`MHUqP4fjG~h}mto)lvlY#%0CW@h z^bEUYG2Tt+T6V4~WXB|DQeXz}-TOV}MDv4|b{dlJXO<2XTlmJN%cu)!wU%C$R=~4R z|JQ_rVlyj9fq5I}k0Au5A;e~Nx$whQF3_373`@ojMxrOg@hI_QQ0G>4$9!PVtjY-F0z(dd&=3l5fKc%x};FE$9m zx1PaY+P`p;=u~DB@n@AG7S$>ZEd(jHX@sW5dOj0BG$g{iofU)6De(&}zi83mb!(@P z)!7(>xSWL_R(2q=CGEsM_#HLF=l4MtX{70CCr~(iUUC{>0+;BO-5=~f;H>2Vf|O6V zo{wugXts&lOdySQ({hgm$4l}sHD&!b3stBIc0euVnxsw3!KsGTErhG`_SI>v6QqH% zKR946p>3t}2pb5H^x!<;olztg4}vRx5G{$vR^y;BHEyik3w+cL)S!7aXzemAaCV0u ziyeTB-2kH>-~!+)v6aRaDplgo+F7v)p&w@1Rp)oSL^b@5=jkW#J>H!Ga2H^^8qX!i zOQ0&Y8Uh=xK(O6`B372nx|W5#Nd$M`5Q=G^30vLXMA53_-3U1dF?^L?j}Ocx*6UC^ z9wjxu0{p7Ieu-W1eP$Ax4~bW_-meQyak|dhOXsl%AwMf(pH$k#k;c@pWpT<*AzZ8X@ca z@F%`=0yggY^p-ZAA5E@K?4WjPue^3EbkX*YfR>hD|Ke}ThkpkzG!EPHc2)gZ8>C8a zuEg}<`w<*&p~hBcw zSHJ)}OnjW@v_icXROI6u{t$zEqK(F@>r_f;xN1p=f*^(Z2T&VHDC*w9NP#_JJFx=m z@txD}!Fa?V+Wr52NVLBPs$x5897S(B$`gFtmwlg@5-(Bc2dH{2|J9%H>eE`w+ROR{ z4Ex&WMay`Q_=&cWXC#{z4SGh_Mx20(Oxk+GRjdzMaH)YT` z)#T5eOZVcoRG2&d+*H%#sV4Zq_K_-p;57=4!{oC$y(KQ~;_&It>An=q1P`d`9z5={0XNM4> z*)&(k!A5jSxC^EMSyx{{B`G(V9g#L9@li-C7O-COGnk|d(HHNx@rX9r8J3n5O4;dr z!QIm*`eLN)d^oI@xBT*-|M{PXKU^2neNL*JFD;|bI+mcHaM!w+Fbc9WaKn3~`+T^y zBKOoqb`EcFo!&3D0#f=XFN*8wE0n~)$9=TwZ|F`uxIlb5L&LhHWd_;!?^Ib@V)W#T zPunyer}%V^#$$t@Y9Z_B$WAqM2iS30pCySu!>h8s0^b}EU&18?eu;H>7lw}{l8G4j z9Di0SF-bq^JOP$F?$6f$2#A+*lL8+Ddn;GBQ0P6UEUv+I%Jp~w1w*K`{-PRQU!7bJ z@8&MF%tJNmw)3l0jc2RhX~s24d?GZFKh*LRe%5IOM;lDrT)lWH#yctPP~dH3tO&;A;+u-;OrEpjD#ry*JOpEdEFKkh zMe-8o268bL3gz-9u%*d?Mc57`^MF^N=d^W+k3*T+CIft-VO%UV1IPxm7S|Kv_xQ;Q zR+$V#=~)-rsWw}mHVL^;n=q;FE`=!>t~3UQUrE$xpC-#xTW!)lZJzhEX&!u!aTEsQ zL_FcjQLVt|myw{r=>@`O7BI#(B@>Pxz@>OOR@nJ9y4YsKsw0`MzNNud_BOpnsGm%g zo%)A}j^0VMby9y>H5a|pesUCK23lKSFX0#fH?RxlN)N*cAeGErCWh`2>R-W&Vs#SM z9OQ3Uhm{1dy8_=Ql5!WoEX3(XR$%DRYiEb)3K2VW!^Yki=%yr@m7D8N2=(m8hBOUzTq=J>G>eCfY1uO2iG~ zREcl;4`C>5aVpY144;~LsOCe{aPQ34)R>q~mX*ve4RooL>SH>^2N7k|iXy;m$P!y);2~}G^~ELnRIIa3@lc9byRLe76XfC}U1y7>@mkV&Y0hcNZ7GsYA{6}0^t#=6Z zJ_6L4OehfQ{slKevyB)Mj%%#TE8So}Yq`<;0I!3g&$OP}I2}W`U{eiPSQe;5!a=1$ zETA4hM|cAY0n6obqvxv%xmh8iIa9E^-k>LT3OiG%oSd09GkU4`QKa=*m>2Nr^A3Ex zgTla^(GHN7%$Z`fo1qk==w3wVtky3Q>Pe>ahLSOqpU@2;DKT41jNbG}2Q#fbXnpAd zOApac*Aw`U-;V)*GcABX=J)W9XD-25kiu-qLX#c=T_cEi2Fwxx4}PXef(7_1!T87q z0bvms;$vu6#?X$gbUlTE)zMzWsu9xZQSetP;I9AEfxT z;HQ3h@b``~4S|mh6a9A;xWDUN8A0t5&<^Ztbs9I~cu`=!0*stRC7Zs%XIJimb(+!1 zM6)^fKHR6B04^aOGo#(8tS?rZ37^LUA3$)@Qr%nTcg}^-4X-4HM1q&ZHFnUvx$v7} z5?#_$NR&oc+9sQ!*eqS*6+O3Lgr%Lb9vi0Cwr$BM^W4UT_{s@V96@mrp+A#a_RPFq zHG1NmAy#`d-f6Vj>PL@UQwVkM6Ww-@XeD<~BJ08I`^Q`0BmJrv(y8|susR9e#<=`i zRwCzJK1EFpeztDPrVD0rzLera^XlfOF0-jQe zT~9lKvY$c#QA1aB-Yn+KL0Lh*TUwrXl{xcey@Sk;!bidza{}-ED;;|=@^K{jo$CQK z$U_r`wy!1LlD+)r*{gl4TX5c z5<`^OL}{?V*!%k@+^0>rH;lcDj+jw{uJM%ic+n)PxPW|Op|2Kc8t8^0rCn(lJ=-5&MMNq0_I)#JF| z>A_!JM-u#;t1sS=3EtJ6!GfZ$_g@A$$VD5Swb|hbG^=o z-3+#yy2eUPZoCYFOOC+dvbp> zG2VsBh0dF%T`C>OEbJC%z#Z<2Bm?-l4mY%@HV;MH3@D*nyVAve%qut#G(UX5K; z>?TRy-e7fws^&H>*J5YkP&>(oQy-Thh`d)+fwqV?DBQg>a(^x+`po zxCN_n$nm3VX|>vbg=rGb}WEoq$|Fh6s8*lyxBL@9-I!uIV{v3fmoW>_v^<3*|( z!CrZWRFWq&Y^qqNuSdrG;K}7p@2NfNNP(9&8c3F z@krHqZl>Stmh?pk@8Gj3IWIfRdmZ0>g&uYdg{9P1dx#+`jVw;wOsk@OB=&dHTAP(G zv>vJaE(0Q~*ISQQ-rGXdw0vL%%k=`3Wjg;lO<`cut6as%daJa9UQR z1W~l<7HGut5OcUCnY@=Hc9qt-9y89b%yU^k+oQL3R%GH^cFy%ufu}yaIUea=b?<`A zCoFz;i~t(>7Dnw{56#M^NX}J(d>rT@ykO~&i?%p-t-6=+WjT(*Sx94}nvb}T4Im?#k zL1M2^Sa$s!NI^_B%z@^GcqvC{cCM#K8$p_q;cABa-z#wHi$OV;`sWj|d zBRt==Tm~$rfovIRryG&#pW|p0H8(;E4Uz9M zj2$Az7cTH%2=%AQHCguo&A=NlFy_|Yg+S4mxitv8LFK*rpW)TW#3)$LH{fUs&?j;2 z3~SW;FxYw`OKWMqEt=5m%hc>O^Flm8)Yf=1uG0*kwlNc$d1Ms2y1%;4%uvLXs(&I= zWKVQD(EM19^-Q#Y&yRFnVkY_H-0%=>$x;Lzw~WvnS6>@2F*3o* zJHLwy-mpjX{h_gBGq$ujTVc{k4ud)!A9G_$hekQ=FFOgxPeE3&8ON*88PObTdM?u} zK4@Y1-U&lUNHV*IrU=cy^7YoC!kh@ON1E<NF-h>PyXH@7HfKX9qII1GbO@hLK|8XKpqL^@(GlQ_3-RFodRm5b8k$yq<4GM9!ZB zt5m%fuU}6h*se2`xkPwi0?<4A37ct%omiQf2Tkdd?J*pgUnCPgePI0PALb1yUbH7* zC5?%#RbA4M2b7QIJ=miN<8beR=~NpgGicLSAP@@R#~Cf*5}^st$Zt(Y^Hi}dhM~xQ z2n=G}lu4wKF3U4?rw|q;G%X9u*!G)9=|%VRfo&()V5PsDA3w)n;p4$ zFmiEUYEH~o(LarYYf?`*oXDgmmIPPuq2CYYW6>1jK zowVx&6_R%7Mw-Xx25pr zcgE3HQlH?QjjU9AqZ9cUxV-DiNuYPc09Hr2l9Yt@ULPE zd7rt?RONziSNeD)pFuh>7MHmKl4V82R&Iw5yEq2PVZGOOBg6p7nG>3nsL2WTKzqa- zxEY2A)5gPQ?(%h+s|t6#!4(ZWU7j-v>YqqBfv|1K08 z1`}b$s_U>^#^=j)S8-~X*>MWEi`nPX(O>%l$2x~So=>NP?S(jH%#|5WH+B~5 zYN@J~ZCS_`E$?}JfaR@Vj*luipgQ#kigM&@URmRv!g(OlZTiAF%@%2|B@0a6p5G0{F*_ z<_m{txtu3eok5pcIE^|ij#i8pQG?blB^xddW_4O!`{6Ni42mtSw?h~T^-nY9^k>3@&UqvrlKQ)_KJ36Tw`twE?LzXI3uiOor3rr zhHLd66hyB1ibwjtNv6{=%VGB(p~GXiYF2H^lK>RN$@@-Yw_EX>X4xWg~4RycD;Iw^8*2-tjed`vXEah3$NfnJcSAA zEWN%yoh77j52h8ii}L1l;!8kM3_{wZEF%u>Bh2$XR(w!wjkTPVvi0(IEr=&&Q&-aF zg{#Y@ybP{8NWbr(wu_PxmaxsA#eKH^NX{$+9wF+OZ~wC_av8^oeOk%BK;FI}7Ei#& zXf|uTlvOBY<)^j!v#?@Cd6rT6F>7k*E=9S6SwweO=-_8NaTV!r|Mr8pg0KxMzTvUr z>?lqL-O225bbDs{ZFBjHw)x7>0{ZE<;yvzCR$e3f2cK+lAdw!sfVVcV70DpU69{@h z$Vzzl{ooXK)fd+1idPp@>BNr(q_>zZUNvlu6|V}_Mi^8OieZi#wj>?B-=0~S>X}{? z-Y}Qh;3tQH4d0AE8!{e9>y(~0NR_F961<~2oyIgkD>TJZi_nF*a+v-r+bPfjiJ0hZ zzCXufZk&8zVl|Jsaq^fO>_C>TJqo-aAcp+uEChccxy9w&5%kn9RVUM~k3W|K5{Lx= ztQP~t`KVNcG0Y8j6PStz98jddga zq+>)euPTzo>U53wZnVt&J$eC7SK)?hXpP)2&Y&b%*pxD z{XJzdjlX<7od*trqZo-O;YxDAxMX?AiGh=9i0QzcxS2vZ?xm{?3gzHV%RA^cGZCTE zTH<|HXk5lt=u6mB3#H;->`YVsj3S(2%b-(rj&~3=46Uk_ss^R9A!rAj)|1Lw#n2tX z&f|!0k+&>It`B(&e6ssl)nGWa{+&-v$WR9ve-H>yR66N@8CAurrpkNC_jL+W4>FD& zgQD#)EJ2H;Y=?5G^{PQstH8Ow5OW-SHO8~37Fqwmf_8Pk{;qeyKiDlOKC>>y?RT7+ z%_MsgvYSj+%F|AOo6t@g(o_WS#81*h(?1j4Gkc2PZX)VpwjmU20XQ*y5$W=Tx`QYb znhqm4?n6V`38*ujZ{KW`4dc9U2&p}w;p_L}p0%Y43k{xIVLLz|wm{_hwIuI&-U$Si zik~9<4!w(g0=gGl4dRwm4G`hYm+W*ZQPtXTR=Ps#G?JY*dEe>b10tt)@mWADWi23; zdd@I>Li{L3JUmI7iddP83g-KZFd3}&)Q$h9fbh;J2oI23jl;EfwD2n^B(%?W?;*sm zLAdu9BVH;p)m+Bz$8_LlxJ}asUywTDz-Y^z5V-8A6bPjRiYYXZu#FoAej#W*v)Q7g zhT=0AL__g^b5aGK{IAF`F~+nLek}=PPN*ORT1w?t3BFbos_-p|vIJO!b45x8ji*yi!TS88j3%lp7jlm_XC6POz0eVP&+pedhWq_O6uQs zv;Iv=|9s5IAlZie08YgFhbW{A`DXHP1RxZF={g8lKM@AfKM}gpd${*_II*~WLGaM= zvm4?=g~y&E716FIP-4DG_x~GZGs6Ex#Au*Gqj4%mWXsm6f^*z<_;crc4E5r|>tunoz`U;=iX!Je{NH>6ZfWo2DR za_b#zNRA8JZ4BqI9bKrYxAs)Dt8n2kG=}S$sY3UQ6A?B7=s+W0u)L?cOmeYmkR&ke z7s3X{-W{ugh20B-NWwQ1U40Thl86OOt{$2|62zzHYNX1A%!|{>8Q!m0H<=(45d^_> zVrZ5iAH$^>nz@yS+10hugHoiSwO}c9yfC1r&=2J>&p+XjUv~#Og*5;dl4=b^$f+7g zHarKa;_;V;1tJS|5^jjWmf|HsR}Km%;wyD5zUKZp_}bEab9~iz!GsyZf2jm1gr8pv zdU9Y%m^?~z!oua(Uey0$`Gt+gBx_ehX6YY^N@+8u*jUzQMJZtA>CA5Og(i^z%bE|i zhGrn0q3WA|?;0J0DxUpXGK>4^6f8-udlY-0(5V@P@A~qKR7{_#_CpPJRq$au5}Z&u zchRlyToN5{3h8k6RPBhL+XTQ`XfKVpg>?D1Cr2UsyZ^ifGLAa}4og+IsD--kV>y7- zgF>B~F0ki{t)XM$hw)gql4?_wieEdE#&Z$K7O(0m?;Rb_0=#uY`J+?hVO#e(ZfHaE ziG4cg|H98qCTzTmpX&TtKudBKVy6E^G#~gX#jaHi!1S1gC*E%;^-!b#Kfu3{w@41D zZ+!=EDOxQlO2_C+)GUc?J|xR|zIY|Q3!=>B{6cYlH{+KS7#eLt^Wk9#t%J}R)=nTL z!Z`Dz9rm9FLqHmFJ#4qp03w*f>2pxUfPVa1%tjKGBnU1*Fk$mGx83UK6LQIpf-xl2 z^&y_Fur%!L4Ln>4Dd;#zQqUE$^v-ki;b5DiH!AD;d59AZnsUAPD&D&x9j2&s5I>zF z_RaR4i;d+gC^CQ65KXAaCfOgOYk`cERz0Av-LmEmj7qYv5_Zy8WyCFy!J?alE5Cg$ z1_FsOm5*nw)xN6ouiSfxHByPmZ@(EZ#1vTNA7)h{u$k|i4s3wlm~AZxgIxhf3#@p= zt>kWC$H`o@uVr@Xp<=JNW$m=eyWC*DI_e&nTnot*ePg+O11eLcivK}0hg?gmI?;#q zT)w20x6@hkLOE->KWjM&y27G$)5Nw7Ft2WfjSCdx5Esl?h<9XzAlq$2l(?8POiSkM z4jX*Vw2q8z*lQ}wI;#?jTk4)pX^Mj)Vb2CjqF^Obk0_D&&(<2D%LA1%=qkBs&YpF+j^z>Lsz zbeyO_+r-CCG%Gac*#8D&;?tg{WGiTm7e~Vz)8HJ8-yZfi`If?A(L^SfeS2VdrX(R20Y4z!ln|W0Apnb z$ML6ITBUF$Ts4DaKyZ#=MQh=l+CD%MH*=Oy_jkB(i~BZ!M>Jk61&RG$1yl8J#RKJb zSCq&4H=s~1TCXm96*h+rBE?Ade7RO(bNg}xEIzeHF51A85e4p>G@i!=rPVI#D397x3$bVm(Jm3H z!FJBT8WaIq_*Mb}yNHqbdK2qZtVQ|Kl$3~2Uqq6&HsXfq&mw^A`AP{O0OXxSVgR5) zRu44P1*a?AoRKMj8R#0-Z-r1t5mw~u4Vr`?Ke&<4O8{}5nTYW!GunD=(>~Z|b(Bo; z)j^@YiF)mPi#n%8L6^{U3BhZaox0;tE(ql~z67M4Q#R5Q1Yr0!g#Kj}u1j#DK}6^- zS+8y^Q{aOgNmK1L+6XHfgqIp;w7HuDz|ko^?h6*09UVyZAvC>@<*V)pHe!z~ol`Z^ z^BKOs3o%UcrzJ9U-4Ve13z(!r(=iNz=C#BKlf=1Ip-43<*FM9`A-GJ^QX42o1mUv+ z2}!Y}pMeqfcOaVN)fCUIqvTKxqko|Xwul-fx1qX9ejX1H1_CwY*WQXIBzqpSV`R{c zoZm?c_+c-S!2kLD08nql4`e@S zIX?t-U=kv_s<@QWQTqzCy`5$)7UN|@5N6~FRw?{%5Xh_(GzRC86J$w_QVW#!Yj5LZ zQ0cuaLhqy4SNqfGoil;n5DW^*{aSKYD!DhkXcp<8EZp{D_8hC@;Kt<^s9^j2jdzIq z_(nm5Mag%q4&XfEJFNBv*iP7zZm}=WZJBF#L)PY<&sQ~=aD2(5<-d=2;asb-+))YwN%ZUJvf7g( z#LzE`65}z5=TYC6UyI2MJCz1m&#w?_xQ&MTHCpe}aBC2w_r=4t7A1Qg#%RI1$)lYO zlb|K8?&YqWJ_+C7fz%_F#X~AqLuHjic_|y&iu;7tX0*!oJC2gj@7JJzTtnrC`-kvp zPRQ{73;eg$lB>6DGHG)S+D&F{WwQ9R0gk~|$@`9HE}Rmnw8CGKWH~85ZPJtg&kwh8 zJU73MjnC{P;28&$*fjC-G$ii0JjJ6=yBLh+NjcdP{qQNjqooG@-+l-uK0dUGmlK5? zM~m*5&Zo;>DCJ_`trf1=*i6Se*c7Q6&?8vMadaQd`0(ob)^fzUE4v7eqw3B8-&r6p z`Q%e3)64IfOxDvTQw#n-bjD;lhW}gs+hqFL`zBM-2PV_+@qbO9$t2_dKjQz>ADT>> zk4&aG{9lIuC-MLM?@XpYd~7o5J~5fT*>5ua82|4MnoJV@uNp9!w&VYI|JP(1!G8nX z$5m*1GTKSS|7`sKHvS`U8Hl2DSKv#y%2ToBF^}2c)%Q%I!vTCB;RbR26Jz9Q`2QNZNQ%f`EJZdr-QgU^Ue;zkUjcj1Bs<=Gn=kqj zVNbisyY9`vPmIR9z)cSKyKr+ACu8t~Q$mx)&tk3H6`g0w*EJT6If~?a}p^o8?TdaqDs>?{!N#lec3nAzr$pq8~Y`a4f-#Gnt;d zAqs(|C2o-97If#RL2gSYF9F(W?AF5-eMn`AjXg1dP$zuL9vfPnm@sEj5Jig5M6B`S z@PXrO@V=HlT-_T37?3f%W$)-sACEDmI+O9?Fv)ucNyf>Oz+6T?+UQqWMo>u85!WcQ%a$maNut(mO0K3G=a0rm3O& zZVx`MN&dR-bM@Wc%Ru`iIV(KJr{lrP%wgU~5xY33fP)WiZGPEa$zk^1YW+Y_3_>$d z1tKBqJrN>+@gPEdM+#xddvMMLvdq1mR_{@vZYq@(k6`!16%ukFq+2cT!3NYJw7-_y z*OZUtNKc>j-O5?AcdwjYA~a92_;8XaF)Lf_h|#rL->pCnObo7zDZEG{7}TjWAk@cm z)CUs?@rfMq!cGxBG>}vBV$-Q1`87^Fa7{x#z70ZO0tvB67N0K^11@|$rvH1W4IIq4 zr)&ghc7=d%TSM6-LO1Xz>7V8Abm6metF?IFgfW+|l(b6Pp4H`GKQ8+q59HeCiDhb2 z;6Hom?42g5HVId9ErlyfwW<7iD;#lB?E+k5BG%5wZ!2p0Ycp{5D_psy+7=j_Qtf{H z?I*7tNgCy!(*B#|bSWWym3C3K>D|(X5!&d#p!D-5`EphJVB&M?`%U8Y>poW~^7^l+ z_t#(Le_!K&DXtS>JrCDs>U z<$zl%Lnc+MK0~Zdq*24UQX9jbqesZ>_z(k>frBg#8EZqVW0e@uKrbab6TigEGDUdj(E)UO0?akjp$12D=Z;o6Q@;A4{)R^qb)QdKWIEOQLG z#f5oD0g>lTkZo5Nk)rclbc=OM9tMmtEhK&1S_NYGgWTHq`it9;wm5{C9q8}B5t`{! zIjbO%rKolzLsGGtY3-2bZf;fp7Uqj5i9mFJRgInJq;oum;wyV;_ z%Se$K>c&|~?bf>$`jzsty+4OlxfJFq9#s7=iMgo#puC4l2e=TyK^<1d2P5sEg79vF zFW|=eY&R94k??Lp2;*ph&sW;d>yIr}@geIO4i37R#;w!81wuU6SobiEsc{z{+Jio< zNGlNph5ePmtE~-n)9Inm+_nxWsS)6O3^;r%MtXs|&4Q?7J%RV(s-R&g_!Q)aF*VeV z4=6zKQ6Pt4-2tLVKqkQ9R_~yxTEdP5c3~BO7NQ);`2mKvfd`f%ksq~~cJWP`FhcWc z=(FWJDjH~)r4)6aMwzA z@whmM3z)%G$erU&;E>2pUGTO{q#aLqlbnch)*pg~HwjK$iH;En5X!aneT*kMT6Ml9 zj~y)YrJdeKuN`Q_ADlzRWD*=W)ry}V`b3{D6G@+U9f77AJIEnb-?7UO&5)4UNHPdS zWAsAvEmCp7`aU$(Wh@Etp7oR<|D4(e<018SOEre_ChaD%2GYm~Fhhpv!`0_;D_Pz$}F z?*|8Is(E#G+9ld6k22mJm^bHK1V?BH~H z+3!a?M7l0z(ju4@q5hOy7@=U^1TMVfB_t7x&*GL#!~#gf16(2&s1lJ5WiNtGh)P8G zFTzd9P!947&jXc#0osOYn#&7ljS)DF0tBzgFVOlT@LM?aT4VIfzNPPu+r{ezI zB-S+E%@9>{#+5vdlCO*_`4&p<99J?!4Crwtt?D(|=%5W=U8k1o{qlA(pu0|4%r#|s z*Oc%D1@s%8=Q+>XC?J#VrpYByQj}RX$Kdzl)!>tjn7%JgNs^y z0z@ru0+~=CYQ-JY-0$7e0eUx>#7_i_HYVF+C0=8++eaXZ(eu*3T&K4|cjw)tPa}p} zWkjE%f8I~+nY_%jOYOs;;MmGTdWyIBW%L#{OUq@6^6p^5(x<4_7U11m*-m7SxE z!y8~dcqs0qwmx_FeCn2(>D6-NhQ(*W1N5CG0szOi-M}#G;ltt0Vh38OB=MI6&y7~) zjIRFa|2xe0F$DyB6!PT+IZrltQ_xEZ`fEW4;D9&+y9#(PiMyf4!Kpx~bc>Y$O)fqJ zKqxX`~L|Ak@+qTaATHI zz=H|#9UYvQ5#O$(>*^Kk0kL|146^9{4vR=cFv~BJKLx1&9d>5q7s;W5o0GIngM3CX zx7jm%RrexacK8y+wgg{4?fxTi2js~GAs6uth9G^HK`x4A7i2pUXKcD10e`pQ6e*Sm z%ZkuY6Sukz{fnW(#J3v&iC(CC13%W2N&*@MS$Kn{ND(+kuGB01rQ%MZ$QYdc2}FVl z$<~jOf#M!G+GweLoV`fW-&V+WlF-kx6$TDr)bdV#9{zZt{32Hi%bcG z7lk$EI+1v$sg+sG79);IV*2+aHwIMG>B zDp!~?_mKZd$pXYzgJa?+8t5=2T#-er;U&6iT9}YUyZ*%kSoG8!Pj`bnXA)xH>c z;Xc)b@4<&?c7F)4gywIt4LCAA&U}X)_@m8tdC7R&{QzGm6c1Pxn76MaIYx`Bw_>og zP`e+Nss`{`oZUfKi+DmoyI&3pB&<>G518f3B0|Nko82~Qjp&Xj#z;RwB{V%lc^7CE zgkx9DyBgyN41B-@_aO_`uY9p#rH^{>wayFrzW|t_iOUA;5C)+Qp69KPffSo&%326t zmP(g1j>4zU18=J=3+0Ue1aFO9kYOFM?8_qXnpIfv7I)7l?n!)I7BQEX)Lx-8JV;Ez zcw&k~`o?5@qeQ7GU@CB+gr@Vpk7EEWymAk~K{sSU@*owLwA@+vz?T3Oo;|*19GZy7 z;B9VZeqbyDhg1X}XaTzD$n$p~)hw^H0+kArD)>EVc^Bw&ahRaLMi;Sv!Yl~NOEC*x zB5~LMdj!+Cdw%Dh#BX)SRgUYYV)h)d`e-M*Rw!R@~b)fQt&J9G=oss&%zGcR6C*- z@vRmVZ2eTtxr%FYWv8{m*jy}rtnKbk?9jE=pV&6o9T?-{CR3E#gks2qbd5+UT5@xX zlXC90Du#?(;+83F;*eqMSCw}gBgQJsRx&kEU9n2xC{$}lL?Qnj)4!qmD__)q(1eYX zTL2;|MtkBAsjVx3jTs-=OUe=Dz_TQ&c+OP#@f(u0>v%F@0BXb8<6mKMEorU2Aq>@%ne8Fb9gWCeX2;Rar6(vN%*zHR2T?ernE--aXHBG zJnS_Fjzk_2u&37U1@+cxmLVfBQJh&BlGy&$YMvBHvLa1prLiO1qzTOab&Tc$K0q8w zNHO`dVSvFqnoYqS_*t&}tWbW|KE?}IDR=9YyEV$)2IY?a;ysUYx0&DZRK-g9R;6GU z{otQptl__OwI_O27ri1aP5)Mx`$fv$K*0IM^|+ebhh0pOa(#S@m%W55`gcK?n!UiE zZKnPsr`wJm?SIQX&VFR}74W^rchuC-JIs#s7h~?$jJtbm+}&p7ZYp)hYRTpqTVUTh z_O6zOIj*2)VgU_$Tn!rgxB^1Km;&X%9`QS-MCftPonpxCNftxj_2jTPzs*dcUTg{; z(vgWchTM;A#}LY_$fr7u#g(9ngR0;WrQ?H#*@L0LS6(vawr2BW9RApedZp@qfd-F} z8Rnoq^MDccH$DP(2UIhq&3a@*WIL#^M6w%D9BsG;W$WOcwdr}{KSZ;s08m6*6o6bS zZ?WQE6-ZFsfOCx;Ds)GXcxqQ8#~yXSY(_kDCgDO!Sjmo+_wNO%fe)nXd<>yde1sec z(+LS#90|(Mjs;?AyE9ICTWN;+Iu`gBpd`{g(1QI&jx&Hs=3&N;E?jWe@Z*xxOkx4^ zO<8}xSE@MwtIdz!yz>YVDyFlzbzveywSol|JHR3WAZ97VlI$F-&XkELC0f98;GELKf1@Y)0+UqGd`|n8k?8*7ADSn3Omb%Sw`1OoJgDBWCHt z-V~N)RNB7**~SP*NMPUt5(iFz=I7BTz5t)6a~kiWhkKFTcAFI|Z7+ zSz;K1>@+S!BoFrf4?!Oa$9ufIja$|EL3NsW9S*${Ilz3OX^2J*{Dhj|$Oy$hgki_4 z1Cf;SU!X+end=KBG9=mR3{*s_qxd0u=0#JKBc`ms6p!#r5&-zddXTk2&QqktC85cH zuLtyPQ}J)E@1s5HTLOM>>)Q8y4}WZw@F0aYF2I(>i-M)@m-l#dxa2Hy@=B?o#SLG z^2-oD{tqn=$5QhJ6pW{49ZJSia|0359Q^(biCQ$i)qtJuDOK+`6@n=7Bh>#_qcs7K zLQgaGN6#ofkU~$PsU2CBYu(0hI9`L%8EUId922_|!5QjI;rQksv%>dfO4*Nz%LDP$ z1|+E3HXRC+cax~V*}7li20M<(WBrT?b%ouu#8iwexe}=}uykL6at&>b4|(qw-(Ev^ z-gzv`yw0{x6ZVMtf#y;q7e!4vwnDqFe&-SCYG&xQf1>F+N?Y2ow*Jl6AqjL1>gq*f&2uorhf!~fKECbd}N(Aun*7i zP%eQ5hb`cwb(+A>qpu*OM)`tO@b=*k*5N$%NI)9%Q0M2C2oxf|<>9encl9KC{4Uk- zo+Xxu9FqSgzA(}q0_Hu_)k+jZj~Ylw-(3~*o&%`#>U?^&c&G*ACEKoX*UXo2)zjA< zvWBXV9m1fDAvhCHUd0n$QF&Y)N2Amjx+xPOJb@)s=J?r>;ojR@hkFYHJ@AU7!S1m4 zci2J0Ni}@r7-yxy4}-wGRUyYN%BZ}${55T4c@f#a=aDKAg1^NHUUdcp-^K}EN(BFi zAXf;Uo5OMyg6HOimm+Z3$etr6WsD3qtnk!^+!@WHr2z5B1h8APB@d4HU4b2$IYqVYvo~gy9yz?kffxT#&B&~B~{Z53QsPZ^N zE(puUMY>C%HOT30sH4^kr?2tLF>h~&g2Bc4aqr^)n`roR5|Q+SSQaDl*UQZ4j11SU|V!*!NIo1$AifsPP1II^@zR z!@cZ?!ZrUez7~R7poJU(8mrYiAng7Jn&nkztiK`hZo31J%I1ye{RpeuNg_yW{e!M6 zP|EjMuqi)=vD8%?*$b4rQ#{az>Kb-{cxxxxU z0g@`!_b(IP?p5jUFg6}R_`UG9rYD3Gi+xDI)Jfs;#fDrU)yiMkdTQnB*R))ra`|S) zj>;IAUg7*+HUhAo=KQ`4-t@o)LX84eb`Hx{_&qx>jNp6l`wN`kcPspEU>R%&=XY|n z;eZJEeF*$MPvQ67igeTGj^}p+=XcryLl8!>k-djEQt9x@Zc-7#+t<`zQhyrr176t! zG(WIA|IA53DZHSrAz9xLO9a7OXGyYgo7nyb-6?C8v3d&lfzreOhVKnPU}2^Wa)jZt z4jeKhwM?Noh>)OTzW}|%p05Fo^0Ju1K(+Ex@G*6k&cV!BrbTOyD-XnWU2gDKm=nvi zfk#k;NpyFlk*SeJco6+TeQ>r??;fg$nKQzU$$v|f4J7f#Al(OYY0G}M6);#2aE`l^ zhGyP|G2)fF1{xuV%$e>ZI`m4BAmf;h(|11UuhI$PjL17ioJ}JpxxP5#%T6GYa&(-@ z6ct5wKSB#+MvAP2jue1i>D!UN0|x_lDWcBx4l6Rtd6Q-1GxWhmgmG?tF(1R!Wy<>P z!rN0YE6-at;Q05Ds<-aM0FMef2G*3}ldS!H64%J_*z70z2JP)NuE+9Ryz;`Wz zGl$=Y&hicg{wwl~*3B&dl_ZTWly;HwSbJ=$y!bV*h1G!`UPd0H#kRKOlhXBb<#m=T zFOnYhs7Wo5WI4-~7nOdW-Y*`!p7I(bk$HSHY7or(0pPD;mSfpwunSi=Rs!(23H^I?{=a79vDz^ zI{4-6I*slPzAT5VIvMzP96locLP#5iMF-GGWGu8(JWkkqFW8!_gTQWHZIBS;8n8j( zAZ-*KbHg#RNM%nC*qB%T4pl~Q7%Cr8I2qQ39#bHG_ye>H%i~+9fyb~h$bblGJ>Lf* z$O^cd_d`;@JH(fjkQbguO8K({dgdbI;s9xcw^e;GL(vC=sy?82M%^2HLUdORMU9UC z#5pFs$&HSosL|1^lybwtPj&-V5>ed$DDn`v$6>IlK4BNFZ(!e8-y%{}-A)tm2trHO zX?4#x(-aK2m3I)i4Li(%!(+WRL_A`)U}{*E3A2mLvT}&ssHwp<0-v9Tnkpk!@({tQ zK2Y5S_o3~myP)Pk2)7!KRXjlQkUoXM<({Tx&23Xn`!?J<)r2z^Nd6E^i99Hri3hDS zq7U!^GyQ_(sU|w{Z_Iqbgl2@@cjB*{n=bF>0vplHu90P<>p`_CHVG5h`(&i+$JnE0 z#45((V~1PeXP`y>{TxEEx<|1wXqebNxzxu8~^z=PIiPtPIi#S<(mV3P1o$HCYdv`-)7h|b*ib{Z*QfR=V5*bgK3MvCnSpz zZLj#?V1kI%He!-%pW$OP8}7pBZ(gP5tI;aR^>y7=Y;$-O1z zI$?IW`c!-DKDK=iy^pVX)H;x8}m%`7!Q%vR(e(~Z@czjdL!@W=Qrd6DSHN-q3B;0Jk=@I@L- zsmziLVRs$94J&n@5D&VHkA%JNguMe{&ySPB>9zDx z+Aspvof+c6Wb|b1s>-n-p-6n8tj7v7?Ae(VxD}mnS#M;Q(Nt9m=C9ZmhhrP&XIa*W z{D__{9?4a^s?OLNq@%x%0iAO$hN3$~R+%FJg%Yr0h`YYZ`Q*m;tV+UN51}}mi;R|m(-6Z^ z8wskOKHY~LfVsx|Td#2rf@M_uiTn5vuIe3N&k&=qoy0ne*y`oz7oZ|CHgi+HuzNoN znTM~3yc409&A^rzS*ad0UZ*W8gaQwzzs9msO5uOSSPx>=k6admnR$jv1Iq@JjRdE& z?3A<mIVg$-z-h6p%ZWI2rn?dAYSl_d)%k>KUwq&cjJ2xuymW$o#p$PgVwW!vGEMcuycqpOyn< zL*Oe~W}^SCGC}Gc5ZhP4ZHtB70BC0g?RFIrk9duxfh1}!8a9NtgU6#%kMl#ivR(qZ zUm-R?7((U&V%2J={0hx}HjR4S2-}A(Ho~nB+805?6ylgj*i(x%*(rqcE+~9?rC!SU z?NP7+b_1x1t@Jr^wgeI=WL*N;LrzJ~7DLt@B&P)NETEIKv7$Odp$=)Su=gB+%pH8H z?0$(JDw^EI^Ubmu-2KEVGZ5qO>*ArzB@3&+P0BW>{;2Pxcx2(jN{LIQ0mXl)(cv4F zu&`&5id z0@p4t&2X;e!rn93hKOv8cu;%D4iAZSHy_>h`BV`YaE0uur%uJhu8TyTYy%csNmz-F znZi_=5_p=>6b{wiuOxvU)lZT5p~m;ttzD-rMfzXTKJ>+HqtwjRR@|PiOf@03?)SuP z`5MgW$X3E`vfssaqu61?!5jrY)7TPxSX2K<;BWseM#Gj7tqKD>aE*+NW_%4y%O`e7 zUb#X%2-E=+-~|W-&VIT1TMwvG24Jk!AjpLvB6Kk9Nx>_fByX>Qg-el4jWy_9DoB>M zYoIjoxhA<$0}en1x-CdSu1VD4CA0*R3Q{F!2I}B-)Zry_@dYQp(}s2;!8FU*8Q?=a zOE!Hm`<`A}pQ?unUt$mkGMF9t8DDQei=|AnR+B=&710h7a#12-q4-eVp0Aid5*3z`we)| zCTHp0!iG*5I4N%7>S27ZNSNz$3mLX{VQOt37Q^c8LAr%oPrdyQRPGR_+WXXdKRpI& z)Z17a`lX_Hwdevm7Out)5>zOLr#Dh_0f#WdHhGQu3PuIMT7{`nACBE{;0Q9cK7lnj z9<0G@!5SO`*5I{Z4PGCt!JB|J2(SRsAV8|UOq&nF?%!fka0`?DZe=^A`5Pd=5E5vH z_GxOs6U8I3gmk}SFubh>0i2|?aUif3;wc}G_l#f|2x_Z!gq$z%dyE76qV~z5Gz-56 z;8@|-ItF=jdqw~rodU}nsr7w*7HYJNU>vod{pWIAzcvB@Yd`(^_xPIx<+*OS*8x=R zrS4~EX{xtJK^-qolf);Jv@j#Ftqj&;i;!Ft$qu3DhJ=PbjFY+Gp(>TlGOlrhR4*nr zgJcXY1xR0(jt}ALSu*|_*h0kg>G82;^cxVAZ=_(C@N<|52(`Cd!9?caUn7crCNxdO zccX=-Emwu6r@}ZLB0+=h+Cxaw?Rt&omCo2gTJe&pAwLOL?GQc1sOTxoWZkY74VDJ< zcuANZB`c4hL+BAI0)2Q&{_=+WnWUh-3`=+#u^>@$(D7CW*DqL(;25ETjG|=bN`i7D zKiUc`&XP87#qnEUBfXwu1HQKm62tg)m~dPLN=d`?akTRRmFtDu&10t}R%;BGU)V2` zZ8)P;h@?v!uCQH987Ysu(HVaO_Mo8{Z_5Q&ST9$=MoD7cA?n|iv}No;x3TgyS*2eD z<`o8{C`ObfAP^dEC6aQ8%~6O!KR^Wf89+AzJ)V=$z;MQJAyPe?*dik{Duf)N!;->| zHX?no!P1FOqrry{?PM85(hL}WbZij11}AuOFeRE6UzKfIbAA)w%gj5U1)6qQ6T|017dj*S7~KyYH6J`*)}MD379g!?{m(b zB%tm3`~3fZG;`0r_uS{aKj%5mYi-;!*lXUwab}38$<_i#u4(|z{pIj|%zR!y+IghK zGqsp#Z`f+(&`p2@*sAotGr00hLeDo?jT|X*I9A3MhO?!e!Cf(~OlS1ez%<*(9# zVmr3oBflroX)` z3&b5N*NK_izTl-!QDCH(-fZ#Ym|hav7#h(X;K<6yzEgFmH0IFP1f`c+@pKV9>6}&H zTYUGDK}B-AA34w0-tU2p6=3favH~WSC$>}YSR!l7zhn?%aKa4Yqpr9zl^qOlcFs&NQ%nS~^n)L!s z9-e&y$`FLQ>~|9Cl9-S6iLBz!Ng#Vy*Q9X->)u1^(C2k38lLI=SRgp9&J2~4v3l~~ z&nT{{DZ@Kh#-WMk1H$PwzM$(R%pq3DPz|X91-t%M!Dv#i{lEWESHv}}B5l{%6&Vq{ z$#m2CmGA{7ARr3N^ab+MbvY*s&F?eKXW#6&ew=ro{dbtF{JC!!=dI%J5&k;)OYz5g zYUp(_PSN^2VQscE z9K}#)G1n~Ij1-A(>ckZ3)mClEX!?R|6FCzO*@0_^h?1kR$H|!fn9XI>zn@wHZyvWUT@seUSeaU{_wwmYPw{MpJl^gN9I>`yO z82lU-UcsD6GPG9HO?IB@x5@Lcebe60%~Jbj(<*N6v~TWxgqxY%Om|`cvZg9{>m)Z# zqS}82oK$;+)$|T6kZQO0lKD#e%gEQcxiAg$FWihs!+eXIe!iJB5|~oGkyP(PUA-r5 zP;K+c^SXT#>EH{uvYN{sx0n}6qK`bg*i>rqWwH1#;~QfmkRk(vpNF6mMoIb`iI@(GW0hOkF(ke|y{=3LOF=KE*r?F6dzWmmV) ze0<-b{0qG=&@M;!XKiqKMLZ$x=)Tl`Qd~&^Zu`dZCO6VnDSEOD?Vq`sG=d#QdSV1U zArr!C64F{%ua!K)z|kMXxDk1~+_WF$W=r~}lN)L6^s)G+U2|KoaJq*s30^h*0-W&% z$4$@TamXj%74Nvv+p}6yj*X-ql+>nglKPUQBHtplXp+UrAvkN&X&?rt(_g{sOiwVu z#f=73H&hXNohCUUhUc(h{nK-WfZFnJfVxnpenQGEspXq4^s=Djd!bs`6jx+L>((xG zggy;`ssZWko1~1)7|z6pffNSL%(V-})aZeJ*tvZKIAC^*)Cw;~beWc4@yWU4C4(h? zexffnw*uA?x(cjsizDXh0fiugKxo_`uQelO082NyiO+GNi#%R*k#Xry@|wyqdEQ-{ zUKejgc*(QRE8B#->gDyN9G9&L;Ht0fec$@yzW1ynCQeE`6)%qkDTGjV5fn4`a8RzX@E8|_)Jl_#Q z>Fnc%vwQ=aIZUwun@6JNH_x|PUuIM}dGiZHM(|<7nZ^G#-n(MVbX`pJ`|_eB>^rn# zta*=kA^Io}*~9LIOR-%DJL-OPyW}q*icA0YBq^w6xk1v{$A->^d8dz_jf}ZDIJ4LF8-Srp`n1 zwOF(4sw_H0Yd1m%7sIMxTq1gXN~(CFc_3(8r;6{jbm#j& zh8+Uy9O+FzMla#-bT(crUm$&0-z15`53HSgVR+KOuV|NIasBuR9=T4oSvwuRj?fh# zvqoybRNvWn9r`2K@ce+) zpb_l|nUE4X`oT$BmatuR=}3LbVR)7P4vvUWRUr>1VelXDY_zrR`f30W2z~)0fOcD>u4c@&V}0X|(%3*tqyC7A=?i)4o*Ogm^Rm7#$Fg}}-ct|hTRP=GKW zg`WW9PpssL!A?-?P%bslpMO?=PHns@le4Nw-d$?1*0?zGuJh>Z=iy;E@a$WFkKZw2 zcl1MdT{R)L`n@PY_Z2!WiMHL4#Qs4!@>?h$D0X88&nON!UK4TxiZ}erWN#& z?gTA{gvs6?34awrW-axoRr}LzI%2n}zu*;Vk|%n`U3a(oO$VaaJ*SSwvze3wgDng! zH%$yIj|PIN&}bU)RT?nVJ}fJiO9Sl;#1=~4K?Z3WR!iHcN-Qj@t~3?v1eZwp<(FT)z=h$aJWBsb>MJ+=)>sQ zvEZr-Gwt<=SENT=CT(q<>g?#kWSIDpOhX=lzQ(C11(Z5ill+BIQBQ3XG^3sr{HhKn zbV(!~$#U~iVx7E~e~XvsCCI8FR&3Hwy;-LtWODA2Nu3%tsV5*pW>WuNjg0h6Zpj(; zW~_O$kM&l#uc*b##uL6OUgI6o7cddxL_QwKEAif8XCnZ+{6A2>3~J~`rdU#R z_hsUNZp_S-iT9eY>I2J76^1?Ep`WjeZWpCU!juhGWOBSFyKPwcD~HOzo0zE)=>`5J zng_dtO6m3JmG#K^v@AzyU1;^(eZW@er!JRg#kh?P+S-LdZ*)z*gQZhD0dwx_=w;Cw z97t;o{)hssU62wd<63tRULy0?+Qvp%Tj(Usro`PUdop8yDn(R=S}3AU>(P-iGQSlE zf39Z4+^Bg6B-&nSw{YWDT_7sms*^}0=oySSayAx%eJpRk!`tYt2)~X;Ml*8v(P7X8 z(KA-KFn(8GM~|ya5GG3whl2~mIjET>vJek06B;-9Gt;Aj3A+!U)rZnxUKu)!AL7s` zd=#U(?gWj021Bdg8&i0d#aNU$m9hhADn0OjYU1t4S$|a@SiN!q|HejUvJ1| zcu)_%ETva;gRXcAJR8D?L{j3I$OiKN!SHGPsO`Hda%>Z$M`iAdAT=X@Nsd%t7;~&L_aT`h$sgiD&Lj!e|SP0?S)zFdP-DdL_yoybtvf;&FU(58Pn0H z^Fcq)&S7oiLR2U8+*>CF=((p$hz0WDc^WH|38`86wn8`SwV^kUvWBKy+Fr#}*sND7 z{DQ!9uwDh+Xj9>^^juWb?(nwzn9M5tp)upq8o)C3g!SGp^X|B>zHiMv>RVqWTfC_Y zjK$I_I4TzCL--D5fVk@g)i^@lqr+WdbiUPk=|wt#<8XgQtnnrNy8K`T;C*MqxcW^Z zfKttZw+mBFjgnBc@_T&HYmeqj#j1Moekq6~F5ebZ^@`*UMm{P!9QR!#o8W;aV+8E= zdqN{Cx&`wPxi(zlJG^E(V-uB5uc=c9%;Y_(b>uzjz`W>Ryvb|jr7m2i--3Se%!GcH z2LNl}rgq^~Hasfwy9{IqWj%9&c4Hb^$GfhI+T;%e8nvi8&R{#1Dpbo4EIoC|+D1SX zOY3*DwkRw4l4P_C67M3qjVQAz8_M2Zqs=&S({F?CfVcI5N9cKvZ?DxVJVH6Ih&J;&6qHLjPK`oV9O(W9 zZ^XqW>#xdd?QH0Ck@K7F^p)C=eS}d+yGM|4@$jf@C~v9r>T-`ppcrFx@8~W_LwJ4rotzDS~ej(ZJZhgwy{LmOJ0I*N(Hj1I_sDx=ALO(OJtEQugKXh5vavnkj1!W90$ zFp7Ctqr`A#Dy`XMXfFCg?9)T;w1Jg2X2L{vHM`uT!gix57yeWn zw#sfx)|kx^UX4t2S6eAyWuoI(44$FP^Z}nPrEc?iYgq5+Q;;Rht6iq0JGhx%@Or%I z5IZ%-1@JkTT*o?bjm5P$S)Yqu?jm>mrB_kxp}6OTyN~ z_Q51fdB?PCV?o#D7Z+UEI;B9?(s_`YAS$`RKZI8Y9gs$^cht+yFu+s8- zN2*abHr}Xn%C|k;w~zrg)0M>z_2MrD43qlGXev*r%%f%sO`z~WJ@d2W(~kuj&g!=P z>iIlgEwMl6uc;uErdY1d&z?3~38p|W*M`fgL#4$&(KT>|dv9o8(FL*0bKH|SK z&(0iiOnX2Bo_XPSmUKq7i;dy(L9d?CY5b(sDA{*|S;V$_kys#wZ`lfq zc3gs@XXM~%ZP*RixUs|YyKR3KX?qSdiTXnRv^~c(wJJMOH=XbiH$>}pu5^TicXRkE zcJ=a|D}~*6K+WH|G8NoDGx-%cm>9-URbOZM^nr}Dokpozl>?BIgr|tUxKk)MLV5!y zCU6?{0|V-Dod()H$?=2G0Ch5>%*Ohr0j&}@bcmIr7dY!-J#y7vPvgGr)m7uXJNo8e z-s0b_F}Ok9u?n}{RaRpom58la*)sd9>81`^&1~_D)lB)Iam+1t*MvqP_+MTz&f7D= zxOT(p!j621`r<`sbPXmmV+ZtCLof6qatt8ZjDD3$ugsjB$)BZHc3~%_Bc* zi39V>rE$ox>SK&!9--EcJ$-#PX{POpUg+HB$x*z?;F6T47 z*}4~Odyd79j8K=%go^w`g&>9@s~nhT%R~||TwWmhty*5-m?!drY4Sm$c%r!&*+B73 zb60FGlg;H`bE!5Lu!npn!@=b~bD3{0mF6L-!)ra6KNmaJU%jS5T}uyew+jK3R%|NHfm>{QqR}!3cbZ|%dW4FN?9jDQ z>sRt&XeygrqQotr6D1zGbP^GmIOGs#7aNHwiwK#kkze4@DN*9;su}0S!w2v*v8uKS zD4go})_F)+QPJ_57hmjA>qNF)Ur@%PIU^oNC|9duPE>fV?0+meL81o zmU=WoKFL)pd3foD%neB1HS~R6ZAMLCPqSl6b5O_wOkI2YaO&j>#@fJVK&)cX0JHMrx1zJ4Yj~vd? zGfHigThIborb&h0M1=K@%emlW@>ie+xG}o)x@n>h-7JNhvj?)r640!Mh;t<3%4>c( zNKYDnAlb&pWj_6FI04~ioM>gJ#IQX|_XqZzZik64zIrSPrz?99T~;;T7qMR<(9Ye_0TBh!hRWyx9R zA>p$3I)6iuk463Qc^4(8^NsM+4kVArPP@ph??WH&Lb4Wyy3qHhmEno++Ge| z<3Oir{vKJUlJyC_Pxn{&KCJs6^4#4Sks2bmI$s}Bw?9vmnNAZC1)8*vzb>^+_BoEP zx2f+gBo%*D7`~c*8;4}aTlC#~xknqXG`q8WL|;bQ#|sZ~c+e%Pr=lx*xbOoawY@cr z{*KdRt25wt;?}1~$?Q3lY~vkyyATk<(y3hl2#kL^v&Y#r@7N>O|Lh4?nH8_WC+Z} zBS5t)o?V@Mg!_gtG7EHVMm2y`C;6nl_wq*KPn3a{1QoqbEB9#p zx8pZbhZD)ol22RwQ1fiRoGOzq$TMw9%jdJWiE2A16e9+B?Fj$Fyjo*4WtZ=R*1R-% zjm{`j1sXC<@r=NaF1n4cr74dQpiI$qWOUR4#-~sF4jDjg7pBR8eV+RdH0?GDAc{XI z8H}fj1IgX`M&_Mq=SJa3CV$G);gh;1-L@mV&~Yh%^Db#P(g%{^bRtATZCs{-S({(G zJt_WB)Pcg+7I)u8YH)a8t=Z8;e5TfA@x^Q0O2wV@|B+$Kb)_`KN7i$FAi!&+BecjN_4sfVVL z^#x5WtYJ$MUp12Thnkt=it_DP+hfM#=205JA$H>Zx?*=P>YgyHT0)!V4L{sScWc`8 z-X(Ilac$8Tcl*6^=ZSnlF5XT0lI_*+a;o)3&;B&oKiF#E*PhZV177>7KptI_l8Gjh zY;b2fcJ9tJP3b9&CAhU2-@*@lmS~$;B`2C))Q$fUK?{v9saT*GK{+qcZz*5AC+-?W z=(p)ORMgnO+I%qiA%QUQnV7!kgJhCNOAIu@83vl9Y#1}rFof6_7~5irC|u^DliIc81}uu$QgnmPYn!7 zrQ1UgM7vjH%M~bpSYdj_z85I3@yPBKd1|0Y%7*eQl8%CoG$hfy6-eK*A=&o=sbvU~ zJT;IcH5^hJj@yPa&xT{)3!LI1IP%oMk(3Q*UmC_J8-``WumuJJBQ`OoFUzK7@H0uRI$)Jz~Xd46Rkyu_x1!#ddoYcZ!zg* zzaxE}Nhc+Jl}YFQp7bRq-6!eMCN0jJ@%CLm(%Rf!*)wAMZPZG7HE{(%97lY7Fb{yXxoE(JT#`;yb1DuFACv*W4)^%#Ll&7ANZ3_3uaaWT@>9{jF zx~52NlxnLIoFSlpKvDhbBZc%+$Q~)Ab9f=+tj%x7?sUanm-`NdU9pUw(Q(&>zN2BM z2p3l!w+|SzimlDMHL_v{9%S_|8i-mfE_XL0c!r#C1H%Ls7fIe*Koye@yOWJTM9cyfYB3n9Lj=Efj zO{C^mxrK2PU73v|+33og+d@}E9CtSNOFqcsTh!rr{p)Bk7q+9s{EAj$?!j5Uoh5@T zmp1$kPLU)2((8zLJAOA(%go^XJWn^G?K4ocVJ``*^&aR5l>>JLZVB$MT;b0QTR4X4 z&Z?2wU{;OI?((11{FS>4SD!V zD5~?a2_wyaQk(?VJ)0)m>rZk@7IAq+o?4QtJ@26`e;kDaS`s~T+lotluhdj~5x8i~O08Y1L~`gca~3e*1c zKU&bID~B6JYlARwr9~p=>{1Sl*W!&Mq@QtI!qMbvk?H*nFn;vEv>M+T--6yXmEafG zb~K3SzMj#(qgYOsrHcH=1-;olWY;6zk@7WuWRRu1p07|HzWUzqOQID>J?cg9DpovH z%4+&YM!#n%t-Bz4`nHf8rj!eA_1}XVt?ze)r$E5R7rpMhGU9U#%l*-DB44L7Ly8L> zlqujpiS$D77xUI<=GKPq!;MOxpQakF%tA9Eq5SJ@9D3d0)S_)=4GFI<-nTJMecBB%pIUTrO`ybPlKrIToQXuV8J6AzP|Oc zRvV-&rqS1p?|DpIi*w_y_IPdsW)hl#ROAbfH;!!L^ITuaTnJaV0x7*SFdt0j^VRj* z9c49YZ}Mf?v1ZNW!7)y==&#`{iHNT{kp~*Oj}$c#yW_vP)eS9LnKgl#Na%D`*u=)e za@{E`%Qnv2_|kIjE{RnPM0YRr&6-))Yv=}cbZ9QkvZ8SbT{sC+Qn>u9G*vsNN5FUR z&xL$3j5C&0=su;(f-_P!ibd> ztFnA~QijLb+*2o1Ssqbb%MZuqRpKD)l%(H`&6}xoBXQK^B$UeNG_@f_szG6lC+J!< zw%SbAJBa8znU<#Xhq#diMVzMxtb4+0{Q`L5Zq&Uo6Q=pgV_g%<-)tMLdq#J+R9{FItSsf|3-G+1|;N0dCT8EM% zuCpsgeU!G#GF9CmB3B~byvFy{HDcPLHc0L9BE2RjV~0MM&)!|Fv|LP!*9PI_+I?X? z-riE-fg?;nx=IE{ZZANh2Nw6>6-r`tROG};FwHnWevFJ)jX^}6#fa2(ml&T+=k$(S zzLfD5ec)QPPU@_->0vGwZ(ac}Jt+3P*UKnh!B6Oxsq3Uk!Oy1%9uUZ0f)NKFIRIqe z$zXEFb3LrPB)21kyHcHKSJfNQq{_(^4-Rr-nwQ^CG-7e5tHXJvJHI z0j8juT!Ec1elYD3P#R7!)7c)Y$Vpo?QGcq=AQY(Ld@a{R{HjH-7ZJun3QlMmQNW2+ zj1FHjjLS6mJ#jxKn7ABv_zV0)nvaHWFRvouUAC6z_dDj8Q=P{Sbz|>B^8P~FI{dvB zw%P9)UoE^+zlpBVVO6qfp}TZgm77&Xb_`X(Ec>{Kf76AIc5vW)J}2yLXM?pO$! zfIkDAsbn^sjgYVIIaRihz1nUB^P!f2C8y`qEE7A+!q<{BDVH8KszwKEmPOte?@ivU zA9`dAYMS3l6m&Y<@x*cVhWftkEu74793lDVFkr7F{}TvG zWS*@WlxuKA=pW*$5Ph!(5lhsE!hKSFWXGIn0nqX>wU#$C9(G&fGS-)RTS~lz`;fy~ zTT4^%xtU1lww9iC?lnTn6HB6JGwR&7Ru+m|14eO6m^XupTgr(yN<`)3s*?}>b~Kh9 zur3!H;iE%qNHIT_-AkL7CI>UktX{;FyV;Ow0XtgW{Qw?G!yr#{c zv*QkcCIWh=RtFLRvr`8u-8@b{O3w+c0sf@Sc=NM7d|uAzL;UVeJmTUvr?WW4pQW8V z_sWSrrb(!nrW}{XbnuOq4T3$w>7}|f(Jb2zzF-d|nnju+{}Ro|OoCL`U`lp3`Nt>S zTrx5`n|tIw(cCMy{I|GUa4;)PmEiDY#EP3z`AvsbqR=Fhxx1DhjikG)Bqi&zyG&BT zr0g!@2N}){T#UA<<|$|ckURHm1IVNNJ#GJekL$nlmtNE+SgT%(<5gD8-&~A~V@s+# z*Ci>#(YdZqF3}H1SnCR@b}Iinb#<5zSIjpVKw>kc+M0AmGsmrOiaq8c-4FAuSV(wY z>Z2wmVDhnmm5-$>5{|k0{l|QK?zeo2g>i+>e6J}&(}RiPWjv#VubRtpxsZ9p7J2F@ z<+uA@X2m(xHYFPU4iyNV*CL{+XN#gqbO9I=vrhHl3v^G@C9f&8AClOj!KQo*AB1 z_?qaqRLpno=AaUDmwfC@KX=ObX3wnq)e@$=E=8EvgS#D1`&N(h-m+?(cLjeZ_-p;f zIPc9oORrVAvOh%8OSEZVq4?6im1I^8lH&+JaEPxj<0vi8XQTm>K=EOyP&R8e-KO!s9fE4q5J zv?Syz%6jM`(^eX|R_sUU5b>sskJH8YIMpa4j6BrC*~;4NeEQT*nTl#2dT8^!YA^Il z-W+A&mG}|@ZBHrKt16}y?8ea)tl(1dCLk`1^$^Te z3k1FgO)*zA-Srid`HtQv*k7ndRBH!{X3Y$9FqE#=Y+GNVu0V7kAIYV&3tziGW1e!) zN&XM~Jd=s&DBe4K{o&sty@eJjK};;%87jaL|0M-mje7d~af(ne<+Bx&d*(#fOhz3| zu(hg~;;WceUurAT#4BVJZT+m&ifJ;^D`cc6%X;=>=QlXg@NIr8a4V+8DyGn922!Xx zRj4-TVXly2POX?~w=)I(lWppoQ85)pR#ENLI=uSp^;1+kMbdg2m^@B^;;pY@8a+-= z)9Gu!2{IhMF7$X!5EJg&*rF~Km4Q;v=?OXyc3qz;n`v$CB-BLQ6+wVitupC3p?bv0 zM07P%sb7^bnNG?Iwl*B#H|}|)<9C_F#lb{1?)jy>peN&=t?}hfyv55`=D@ke0c48SphT_p78yNcG~gIs%Q!A8)TaMmA-b}m%Z zL$u3a$Q5HCB}@lgw1;|qw7d0-X3Y%OaT9z5O?a-pr*xW@sc#ZGLyuf!m0K|1fkd%u zQ+S*=`8fTq^@?!r;VP~t2E(8-=nOp1NRQwwQ}8u?p+y)rnwUk0Xfestr*1PH@;7xu z_nfC2n#RY(PiMVQYf(R`au@tsTqM2~o-X1P4_35OYSpx6Yiqfca-KGRKL~Ge0(QB0 z{1DfS#_5M>$*_DqKL0=+Dm2DGLC+tYmw}#%)g)uB@k`Bo^^8nlN+d=*h;h#pW)D+F z;nGsodkPXUKL$9(4mAcelcQWyaYJ3LvYh_@YE^c0u12Tg9UE*8zpa=ZjP)tV5v@3X zHel=iGhKz@=w0tWy%WL9a*D%43$&Ufw!NW-`xRN`Bd=Qi&_-;Y6s7>Bm8-%u|CJIYgrZ5wnaN>_gsjJY&^1}v$(Y~ z!+9DftrFVdf3O=B_p4O|khHcsoJYY&ao5c#w4&Acz)5ih8~QPkt;7wk|Cn=+v&!@I zDLkD^l%0W=%+lxsz2xb$nu4;mEFfIW>kM7orI(_!9}k%RY;X{biPh7m*}iY;Cbi0W z==@G)d_f^7FVUIwPHLNEB?v$$JNdI(*>IT^*{YgeuFf6mzGM@q4*%Cn&f&G#^AZ0f z9wwx>Mpg0|{yfq9)LcZIi=yCxMJ7l(Sq21pj6N6Pi{=VYswp{e zkDZ7SCaT}CexxJuHeqe`#)~tZ2cxGloQDseX{kv?F-w1kQt3-k`0~34F}&B;BH#gD z_p|exZ{`!(X{PKtFp8E_>E*dZs^%L8IPSWsI`wd_*6-9o&zR&zQC;6}&^5K}R_Zb} zZLKO_>(Zws<{Y!53=2V-|JK&o8QKBy@{IVJOy>z|O%u*KU$M58@9_~1k*)oq& z^hDotiW6Zz54|FNj$9H94CcZ`T)Ql-SXH)ftrT3RhMJ+*Cu+TRk1x-U?itYa-!CJ| zTs8BZL%MFrirnNYs644h<-oYZQ7m|kh26!SBkqcUXhq(C2(#v==J251c#P;fXJ#MYQwQ*dlNIE-K25&y3e(%G%pH2kA>PUXqCdn6>pX zYwN5Gj0m0h=jHY$YwIXyRnqy2^8~IGouT8-Q<&58?4Y$3pGFS~7C-I$(Av!240o@_ zWo@02!3WmXxfxDexb{0)T$`)W6FO4A?J}7+=K=5UCCRZ)T+IYDt1MYi%voPiVv_c`#Of#yAh7u1jyn>UmCvL)O+T z=OMN$S;t(x;)7r2D7zUMGMvy>0C&h0Z_PY&I6JWZB??I22wm;n>InXKS~5za4;I*16Wo=hc%0ls8Esk~hn~P20aou?jawj##jbysApmGnLnV@IS?a?^^0>Lad z6{I;wq?WijrZ&+%ZYPoUI+!U=T0ym_UAkrq+`4KaO{)Tw`xE=$S7y4T%wX$TQ99(95Q zZE>P4P%NH5h+wIgy48B&xky{D_gs;(b^22o_b(q({ZmJUXw$oL!YQ7K6J@TpwJ?m! z+%SGMs|bQ+Y)zsh`&0Dh&{3^sz7W*C5Y()6);#|CYuP*Et35)mlyY>)mz}eALg+KT-Jz?aJ7ug1h@8l3Z_(At z=x*adB5QdgKKPnQ(p%2mo{&A1^MTd+{|H%~E<0DejbY|C5>_DR>wh!=Y+c)Pv`MkAflT@JvUWP}{CM?0 z?{W)KITWuxBl-2onFOcRRF>MGj#NJ^eEj2-B>xi8r%Zy>w+B<322*lqk$(y8g3zRX zp`XaJX9rV)8|7aj`cso2_2OX4Blw?x$z+5c+Mg_0EMhPs>h9%XTI$P0RDpbCAy(re znL8+Se?!D0aQ`RB$BDp1xpdFsWkjDp9l-#Spiw%rBY2B^aaB5Uc#y1Wq_uT}yf)er zcDDjfn2msQ2{?pvq$fx^{iv68WT)P=LetVk-Fa?N8K1By%^?d+6y935bUH;znxgch z2GXkeWqxbbR8_f9wMmahQyHOY(bJiP>O12MewsFA)SzV%tIUm6=jjmk56X9gTG;@V zau6D6s6E$3Q*%T6qNgiDFGtUmhIZM74!$4D1G+_OAr~XH!%^r6aVbjp5aNZrhs%Vi zOA~=&$yH7!SiXTu_`QMKc`#Ed-x;XJC)s@Ir$j*dTe2*a=XW8Xc~y^R_H-FyoW1Uo zi><<>m7O zq?I^mPeWLDTxfjq^NlPi8WS8tt)zOAndE+w9O`SQOCl6Xmw>$`z7Rzsi}NJSwL<=E z2GI04Z?4CkeDHecId<41;=>-cXGUmWs>G#g-0BKUp zr~m>T^gO5#vWlDeo&G96f46&BO#}DV#7e}xbWqV$%Z`1Zd`_n95-<U59k0Faw7NUJU&krB!guZ)y&c&W!O zt?mhH>qRQ;QM=VFZ?tQTay1=&ZM=8=QH*ET_wz%rlCbBfA(ksA^nXR?;Gj8wY~k)URIaM~&@`5ZZXd+R^7es_MP;XR%>ZrF2f-u16U zeiymnV9VGgJYTGK+wLRm^Q+8iR2;rfi_|mHMMT%pi~Mi+pfNuCw8oLO;YSn~-ynNR zZG3e;=a0xvL9Xz}G5HN%7~QD_NO+Fexsp6+V5-t=6X7#DHQD>78?sG&UJLaHjaAVn z-zG#Io9$Qw3XO^CfEl=*=()xQhYd+-PC8;|FuF4Nz2ShwU!PE4oSAUhXX@E1Dtt?9 z^2m-ImMHV$9|OIZ0ZLmOE1Qz;mcb=&)5~%gj_#6N4)tB>AhAgDMpsWU9_6+|-lguC z5?$?0S&h%|y09JjcW=?Ua?;iY#c%x4O8JbV$0!c#R7<(ma@JLik4n#}V&eSusbF-f zGpO>#$U0fd9>jd}LX;-Tqxn*FcQ-#0O!r_ipSS8Dlq$z(=Wo@Kus19M>yOKNKUBl@F-NB1!eYRrFEXmznQPj626499K)*+o}lYbI)a&}-WF$9@X+g`+4T2PRnAo#@h_D^juV!W^9`pRHx8kX^`m+^`=%4ibM&hJ4rQf9cg1mnqZrQ`YPnC5-H7eo=qdUOWA(e^9i zu4Xy^Opeb^#XU1PWJ{>!yWppw1>1BDc}$?>O8q2sjqraeh^P$YG@ve;WHMc?GX>vf z1SFiYkm5;;XYeMNdD<+@!L1_LO>n-xJ%LgWvj892ea@7Qm5gV#t&KT7d|Kpp4+Tm- z>6}cx#Qv4+InGo=N@h&(O95TqAM59E+}}Jb_KLwz5g-}r{xKfIjOB|FW8UOB9;E(Q z8m;e@as3UWDZ&4gFv6D}!86-&^mHp|*V0&aiD}!K3Cy2v?IqB8e@a|j>)~_S!v}Si z9=>xtATfT1lbc?h8p96`-NEGLbOJ+X=25&^`boR4f>&Jl!I9q=ZIdM${@ft_Bcj3t ztOXi^QwN+eZCN@h2XG9i7Z ztVd7MTo7xtV`bdcz~pRGaK;{qCjRO??F*d@XKSB%N3ndA8JLjF)WP+0#2`Q|fu)DT z19xb$4y&HrqVt7{F)DQWo|BoqW`!UJWG3{|Q2yW{v7+6djOhFXVXbmo+cK7-mwlbn z-`j)R;h`ye4|!P86u%8VTCcTjpXDdP#2D8z63!B9K46zsAa(N}?=GS*)hC@JdVKPQ znUr4MkLl&Tz>O=;Z?L>aQ_)jWi3RS|?Ng%PkQHumu1c@)W1#X{7J5Ob|M;KiTMrKC#x|^!Mp? zv!tuZz(?Tp>P+VwtfAzs@Os2@mPrNITS9Kz@~QMC$k>DNwE z+VAjoxW4sD!RH!b4vR?{TjSLnV%6qo$8ej2(?mI0efBOt)Colc(yXT?8rPVV=yC!kK?OFGiVmv8e- zyyTwR^wCD z&S21GIv@M(K`?05$utI?BgM0_1%n>sxnR(eXnmJp&|mBL$b{ z&eIell5nf>yE1^%5E@~DW(SuU7Tzz}%Ci%34ehoz21fFEzcwQ^(3a+j6HOuZG zx}|cx09PQIy*7?+<5aDI#*AH_K$8eBJQa#ER+1-4`6^a|otk~h5Z`&;O9|Ugqj|Ce@ZxWk4V`gH6IBb8gAqWuE_}r zHh|;T0i{3n?bOJyO8A|w7YL8rZdL9s(v=J5eGIVJN--)FKmtYAoaGjCy+Dv(ffRmT zqq>u&S_-F4KukMYO9c0U%WP5_XJwkW-ah$BoRw8SVVsqfxq9wPzgYe>FZ!Mud~t{U zBE%RNay-{`xEO=z@gllM{S`i~q8$_-rS6IPp|;DcD06wgg@{_~QEV_hd^7bnJsjPW zPbb^w-Siw0{_fCO;GuNkUsfx#aT7QKFEeTPWLgh!!yG5JPfdPjzZ@qR9F7wMi86DR5H8uroh6ppeGyzj^o37Y3w+;QE}ERe z{}SH$@QSQd9fK#5?JJYxq%Jy~50s7ZMJB#S=o_Euv(~p|i7ui$-BQDkJCooy^xQ)U zni$JoB(vzJlo@wY(Pya(E!H-&3CF$9jPu4T)BJ`+NxQ&C(IHWy$y*U1|EV(~bkKuS zACvP{(67q!QLL!p9E%FQ)~G1_K)Ucy>@is%MGxnP^V0qS_omdD=Zkq7c>gC2yQLd^ z59ikY3;Q1p4dveh@A;!XIHL}@NpN1`;FUoJUv*`peSKT}!M5aCWW$N}i#i&e2F zR+@W$&f=LLeK>eHGxR$XA)z4&>_y$*V2KRn0ACqJqn%Qr=o)xTlOo|64%Q|9%U}uP z>g(b}g{SSugab@yPs;*EbnYuW%YS(OLvvo3Mv+2wJ})rUH>b(3Zqn_QkZo#7PHe%U znE%z-qCVe}Tr2)h@_t1&f*jv_);d|R(L`RX{$<%GqR+Q*FIxBwLSLAu>ZzNPukV$~ zBQsnz$oSUIN#l#gcB}C#JmIYg?oD{pfuaWKc5A~~V8wqX9U2S0uIWR#iBLIXoMF^g z2D*3i9!aQb_^CiBZ(}y@RsKUo{*w=nP=TqK@C7P~NGZn{Q}wSFJs%OM^#czf3hYAxqyARNG?Z_qAn%Fp&O_uEpSA;{ zPwF#oZtCWmIjIGEos08P+|W(Tjy}+p!F%NI^#s~HhTn2$cq-M!PcUA6i%ogHz_hw= z%CQz&EA)D?4q)3$D}AQvTF@mz?*)efs{Uou+07EqLe(eBY)b@tL|VVb~-17U{TeY;#ZzjpGHx0(Z||oB`ITpTA5tY>A8R%C|Ng zCmpWjb7un`)+OYRXfHS%sncCd-fIh+bfkE|qm2_VirD zgu+7Z5sxB*6A@XgayXM~1u4j3v-~OW!ZCgNeM&seqvqI$vGH8oIH>wAHSN1RT*MJH zcx~If>e`yQsRd-lA~~ByT}-CvUm`&DbujZF{~vmb1+7+ zmMcTcjyC#eW9wBiX1bb6|N3;FF220|ZYUugTNe)VaCJL_kG;a+y`fzWVB4hor>>KI z&1$@#G^}0H+-UJ)c)24q9-V2zN~3E^AThn+(NDx`5L^rCKzI^WvwWWVu5|FA;-V#> zcDo^YP#@k?jfmeKU#ARPKUtSzrffC-S*LKwVm1EWB#9^5DC=%%bY&h%;jxpvkfb1E zk}i_lNUCj8Q|Aeycv-DKkOu)*taLzF-_(l;OWUb~!vbLk+_6lpD-;d8(VRg6V8ANJ zz|4a@L1&7>;kLG-<1(PLdl7`#`KirN{_I!@9-sk=35x^VX>HxDKLKE0AiA3qSbsx@ zgABUS3&E+h+qZ&&8o@Z(pX{ZNZqxt!(Y ztUt=CQI*y3QaBo0+t7;gKg$Ibz3+1Yt8e0RVa)$+F6^wY$NW#JsH|yclQdM7yIrxS zm68&^R$I)!UHN}OwKr^Kr%Ti8^;B)qPgVAFu?5EnK=%sF2bY@p+(4xM3=+yp*u3K9 zyZkvq{9S16x=g)?ibJ$JA~D!^;lT3M*n+Ouf;Ji%TXYDepjhZ}H8=P6guk8fK)g@J z)|mfg^b!+(p=05Q@0}BWqF?suy~zWg7nQ+QkYSPk#fQA_zp^y?(ivblLSG;%P>1Lt#XarH|11i{&{R$PR(@KAo^^I~ z{Lzga8@Q}cuLpJT$UDB>b=SsAQ$3%?O-&W~$#9ws#&pTf;3UJTqf28=QUitI+q;#q#0bE}2jMZpl&*n44mQ6q}=qy&uF*v=L`J z>hS(ePS|Itv(enRXCE!5=uMxf=uQ7i(NdTSd)Xx#gyphDk1xA012l&VTBEDO(Ckh1${bk2lFwO@+2s*9t-Qgjr6U^si5&;3b#0v!i}Q+GWc_@F&lPy8bu!2k+0QC3v7d z<@T{Z#`N|I6FM=n?_V(~4!FJFlgo0Z1+Mg4{dH}0W{5QzHX6VFGUc+YzheR(pmBnsOT{(eV%qT>a}m+#iT7B-Jh?Tn16N+GY0qXPd%LudEW z3`fTqZ*0DMK+PuN&_IKK;9vi9*fVUS`eXOF2O4@_+se4j&X%kVfBMuyI%7e9!`Ua} zKX-(QQen?6-JS{22XYYIVP?=G4N=wis7O8uC`(K@gwI>T>^QDuD@zg{gXkA58>^*@ zu0j8m$ylEq&u)^QLNQZaDdWwdbP;~7V_05I$;7})&2TGMrt*wN4L*u{Wj1-M`J3{^ zqLT%EkfYH(nFV`Ak6#pgVNW#*IH(~H`qfTr>$H)W(OO%V6Ii_;L>S;C)JPMr_M00=A`AmR0!X`u)AO{nJ>6L9)c{8onEmCzN z*%Jjg-r{h}&G=2+SQD;k*Oy6c`f}qIE`$i)9WQlB_<9&Yc?A7^1ya_UK=|LO#l-$? z=t5Rt-@Yuj;0(UeA%cHJ?gQ4i8D08o`E=NKeM8^rd;(7Z^Z|fx`WnuNu7tH=H7#Ad zr|^U49T5l1kLnJt|Cmg?*p>kxHFSJ_JaeLLfUg@m)l3vMb_X`{d;0J<$2-FRmDcCL zehjvOOo|-UAU%csPK@;O9941;;wq~}=xFB6ym;>5oXJqx&h#vCD$f{U#Icnu%8vT8 z^?Xs6KQfc!RKZ@YyWVkYb)`CMmA-qiAY(5@4+Mlmm$dkt=6UY3{u!~dE595!-TX3~O{w-2lJQubdUQAagRTXkiE zEn*9@IVcdV=!0NR@p{iK@nUCbOXb;?%D=W$4*1@92#o_bz*fCX#m+0u-Y+NG`0XR; ztzVEYx%K{gx+)OoPv~0YfU=UmyuVGA~E(Q5T z>j%JZOrkzPf0z<93n?wL_h>YMt;Ep+UNDv6j)Cpybfif(eb0P0i0&Rd%+;g8U!96i zu~A)rf#+5Mf>uCG7H-Szv+-$9kYI)

C*eKPzt){Po7ia`6kPftBDM+hxM&HCozCZUP{!L`r zC$dCK9d0Edc3dm2#2@3mJH|=4!i-=+&m~-)!K-`5a&-kS?-6f_8EGF`W28xGIgy$* zQFUkqWN?l4!ZS~FiZA!gnqW2kRB{ILV}bh;6|Ul~=$XH*pG-&u?qlWSMREjklLNe5 zz6~qBTl-U~?w9m)SLosNCkBXo0u8|@PWzL#pYzEW`DDF*o}oj_H~`dBhni#P1^{gO zC3jzgfx_3cS=?44q(blUbCLs>#N_Gv1#tGDvw#M>mYL;}aj<o3}yEr)&FhG~!1{pJkHkyc4joMH8G{9;_oqI^6)XG|WZ3lm6Qlc>MN*TT3~mrjc4zS7Ng`>nnvMZ}*C9oQQpvjM$E2o8 zYRe6zu9H;cI#T(hraS46H6_6tC%Ih$XVPB*A$1#JH9anHivO9MXLRZ_r1~V~_&%vW z>SyanNqLh-0!OMbl4^XYtFb^b92!jqQGD6ew~^G(^he`K{ZLX{{)yCgNKGH*SjI#)f>xqj>{hlGH#=*ig?slCYCh|7pw z?Q<^j!l{A*gh|ZGqmflG_!?X2&!Wjzqa0q;oC&x)YkY`gY_jUqZpA9O(U`58PLn~& zF+q@JRH!@^q+;Dg^7V{~ySi|S6YY?2N!GT~f%sfmcoy_xG~pI%@O|r#?eAH4cJQ}* zsdX3k<4TT_^UvqK+%r7GF*3j@J?HC}hiB*_!+Ymt_|M@Pj+23?hUY*SEI-N156*kp zIs9uBib^?bp7V8Lcn0`rrDx8|Frr;!o1tc&Y)Iw(dc4 zR_piZQ=+dl$kJ~({S4VxjG3;#(#P(2Y1p@S#c1>1xBKB0Q120F^X*JYQ1RD}s@}P5HJ5cSer*+;O@(yOCsUOW){xs&*?&ycb zb^qE^#h(9yfG;>=@V~Xq^C{$T)-EUKBV0Ma?`55Loc6?K4>WwZiJW!EXmL-rx^rUT zzNKx%z_~rx!XWi_nezszcPu3NvD014_WD5Snp<%l zdUEFy078$-Vfg;}Lo`6FS(uufiEKVY!VxhWzeDYmEhg-r7fsBMFPtd)80X6BZTWn4 zEGzlYPefHqMH?h@B9-VRf&9A8;Z*z34o7_&dhZbE^C1@1MR5gjv zv|dMcCfMT6qcrbJn#C74(Vq7o*)2xAJ8`fa%1zUsI~#BO9bd*?{N*tQJ5b@<6YTMw zsk;mk^L+naV$}Sy%K$sP+bP!g&Qw_hMUbCBVHUoo>6*y2B01s*uT;AW8lMoDv2s;u zZFLo4uG;v-QF-7}Jy{8tk}+oDdc*rQYbCBN;}T_r&9Shqt4`kgBh8|DUhug{1^O}A z)ViXPX}*ky?$_O`+jpcZnji?$ap&0>3R%CB;KC|d&j@o#t!a$BiflCpYpTV z6?mFhZ*d5!Y`Gl;v^9Sg9WJeWSIXE{1b{#>)Ys{QxqUpmg{GBZ2u1O$)`_8D@H&o? zgk^mzj6$#@Qg`z>>k+)6eWbVOssLVX&`%xC)?>cnKU8&a<`AadLa&;tmLuIe8GWIZ zslf_>)zWV@{S)bE|7BMERT6}Jzg(3OmEIP7GO%A%59bKG<5tAf*euVg&=wJ)DP+w# zFY8pvdTzepQNBeb>{{)|uHzl|7~0w|PAzmSLkg}_JqrfIIme<>H*ysDJ>grGR&a@| zBtYxcX+^b_QgvH5*w%mHI5f~%oS*T$n1pPXpMt7>(KS99D_RnJ&_x7Z&z6kX9QW|< z5&0p+s#mN`s@%T)_2cKwK>@gv8H%10)(=@r@bt{FPr@C|_7v<_M3S8HorTB7dyn*A z-N!oeO?fJOz4HSie%D_LuZE9f>5qfu=BpWM_YuULT^VES57r!v)w*M|J<$)n;R$NC z_x_Zb`m3Z>8EHiibPbkJ^5S$2I0KhIRq1SyrH(g_$>a3vA=IQ(nsZxgY!uYC?@Kq9 zd7h5GlOnR&RFH+vAXtrL3eW8>fIH+6r;X2JlFoi0{J5KKLh zLaxrTd~_hTWTZ_yb$#^wnzIPG^bI>m$t^j^N?G z)@rKLt&m{UUNQ1QQthUXL@bSv8b?u}K>zEgr7S|f@hIWMUWTKRR@c3XZ`10!+JB1H z*ELSwMP>J-YP9wBvlX$YqbYa&g!?gMA)s{!n}VJMR-^3qsvZN0F3DiKXuLK)yI)2Y z{7Hb{HhKezI4k)VlLY}3obI`LyI|aE*g8OaOxtI$X*GRdwZJ(=%-;n_5O9(2Z2jdX z)2yK)9~;b4a2D4bGUG7Tc<;zr<-YoaZ~4HQ%mTE%krVV~1e^Avnz2_KN%U$X2^b~= zM&%QA@PV|-r-RN#L)PP+y(J@c$As8wyt5h@C~C}etB2tlAC*zu z3#SZ$Aj=VYLaZ>lRM|9X7p$X*$c>pSKF*AfYQpWTyZ$f%*dk#8b(D?^OM#YxP&vLzU?q{Dy4uS?)_R0}4*514qtWeZ-gj(tK{2 z14q~i(iRmB$O6Tnf=_xzM?bVen0inK+j+6w{tbEx)E^UB6N@!<>I1QP z?ik&QA=4d0gRZR;)czyyHoX;`h<~+9O)EFSa?qU@{FG^5!TVUZ9RM-9G=_Bc&+d8R zya}V{ORg|)-MVj$U52sCV_P*QRvIn12hqa8aDm>qvvNc5O(|BOGi1=h93V3 zk6$f1-s2fmaDZ>n|Do<};G?Y0{O=?)gaDD5Xtc4Wnr>;E?9l(BQVRy#2_Y{cfuIIai12h-mr>eM zOcX7F!~x;vW)T0{w|&|!yKVR5KHJ^u>Qbz(O@JjqSP05$Y-u;$vfE*ke;X=m2b(p| z_jk@cF9}J6+WkCF(aGF%-{(FrzjK}IT<1F1xvpE-KsljNz@&$v&JRTTFw4q0vf^QQ z7+H}q-gt^_|1JN`)AE*h;4wVoCHMbD_#rbmy5sFA<-Ni2IaRC~`*ZZ-14`rZ!0Fzw zaO;j3HrVE|!2rxjw>IZ#cq9kMQ1g*kUH6jsR?`Lf)M48d%9x#zW;SI8+^&vu{%CJN zqE}UWQ=^n!2!?s1&yR?&c!+Je1~Xi8jbECsZHJnj%yglpNo204P){ESR1tEcs=aSg z^jsjYx%ktGWRHs3Q!z7Wn;f$vSBGJzj-Y^myR zzT_VE-an2(fUn~o+}_p^6tgA1@z2;8hGR@m7v|(wLSD}1ufK@AfML`rY(c6H^c}LY z-}+;HojlgNft`O!iqqexsva@G*~sh0@-r=0FE(wzB3;LSGMqzzQZ&6_1|*js^2fwM zvc(jcHFQwxJ~H3*Y1PQIo#Q^m6-_s*?Ti(Z?@OE|uw&)37EcdM8htg5rp5eKql2`U zc0Yszk^^452Ti;Gg3@ZmiFE?3+iiSNq?@hy6HGj^QaS5!oLel%L8j3-qUi{{ms3x7 z^Vj#%{9CSnMXU{1?7z4hLnD(&Q;^{&_0Y&|(dX^_^Hn?l#FJw!ej0Gnvrk=W_SuQT zF8aL2D)yfmNr7Nx(7hjdxW{eV#&3xi6_{0?K&E)wvjlU4?s`8WmAkCOX*l4tbUBR} z(0quj+{SoYN3Efdvu*pgkt=!u?J*&@eWAzAe;mt7h4%SFmKyGBvAP5Cm1k3wHB}ja zPxBEanP^rveIJR{CfwIveOs1XPd;Ww)+-V)UYu>_oPB*CeqI8`;yb+jX6OKkY~MBO zyl6%&W4_y+Vh_B5W!(UlcJ9rk98i*PqXpEK>9xGPv*iQHOb)-9s?R%L=dFrez)P2J1KiZ>^XNq?74fK$+H`K13Qa^C;LBY&c{+M{%kt) zVr8Cc@nm!iw$Wu=U1Ymwfn%!O2h;=2rrmgSGE?nB-y4}NJT2$vc0hkQl{nPNnV+s# z-*)p&J3n+hJ;ibytw+LN{#T*EMSW8Ys23=e^oGxzj=%NVJQ}}#K`C5FE zqR0oS^OdRoKa(8tEy?=!5y&Rcd?`$%!gmQH zO*`IenW>ZF<~B3j>-w9niax~DdO6}|0u&kWe#1z#dD!3j&@=)DA#u8lvp}#S=u#*} zGQh({jPAWoW0xJ-75O^V!af#D(<4qxx5pr!2Q@abLmH-RyfyZ>?bA^A#yJX@Ms$>B zKc&Hr_U%ZqnWOzkd>tpvJ+dn>qa7Z7;Y%5AC+n#7KbqU%E0x*>5+dVz9n7ew2U(E*)<%WyVJ?E-=prcG{M^Aw;k_C;-#RT z!spw{*WxqEcs~;V(f{$#Y1(L$g*r!$cXYjh9cH{UFdFhISPez12F!S`>xJ^mx7+ca zWyX8A+i=8f>|(s{^@e)pkncA`-i&qz{?N_oMaJj@-puc#pEo=k*o$y4nJ>*c$To|4W$q)A9mjGZ1T8X{@%4+oG09MkWJ~y zds`24z58YM-0dmEz&yN|I+e1;v*%j^JLMiGc1xjm^inn+oL$taB+CspUz5!CCU<_} z-)F}vrpROSVh(70Db93ywfiuUd9QmVR%7np5pU(LJMV?*7yvqzbC3;%35S@K9gY(4 zSc+w!TnrkehdE)h;c-u0b^2c*mE_sSv@4S2*~gOBm%5aTj-P7z6>gbkPeYD>5YqZ3 z`PAOtS9HqqD5or|ECk8+e~vt3m4z{Tv_?KS^W5yeH+rYq!dPWkUTxLjZ~xqkLeI|$ z>*>0)*S*3t8LKEvV)BShLO0bguGCJ>y{XQ4mY~gva@*kD(U&wDG4Ep^M{|~Tg=1gR zY!!RqY3`s+xF;Py!p(7?H0NU7xrO-K2s<@TyK{@Us&{I7S~(ye*!%#m+K@f&{8IPU zY0<=tz}6eMiLb4hCylSILcTgDa?3hu!#TkO9GPvL@I0UsfQnyl^UK8Gjrr%}`euNo zNZ6Tpx`cOZY9FbY7QNK`G65qZ_@A#oj zy)Tt|0;$jg)` z4!ajpxi$VQ zNz)~_#=n_*RpZLOs;kp`s5%3M;K7LpXW44g1PReb3r4z09$&9K*X=dM%+ihE--(ADYB zkby!=Cmx(}-@@W4@oPzV-@=k9mfAj)dQH}B_BCCd7H0;3MUzfEc%$tA_5H7YlUebw zZv88_Y_qi|Wb@F~>0j~ZzK%=0qA!W>At6OyVvBw%^%{mW-fOx#{Q`f|Tu%+J$m}~B z`t@OqE?4XG?K%JH()Ro{K-2+}y0CdX?-jJuDJ+@oWEXkm%E@Um16*y(sV=&G+Q zp1^D>nOaHX{I<;wrjqK)-Fbk&?5S6;oV^4yIn2^_xn@AeZeHqCd~2?2#u(_JQZRdKabzrNm1AE%K|J?``yZGvS zRGgRpDS8`Ur`Pkx-V}%IGy(V&eA|2c$EnAbA8zKi;&FSAHEY_pEx*%ah3NJk%LSKx zEKX)KSJZCrac=6dZcj(vOTp$n?bxa z^;6@q?+f;k23g`5_s?EWf=zhuMq!{sE5`8Hw^}Juh zt!mCDAC$&am zL0juiBfhI-&w?$}i6#ox-$B4zwGutexB+jk()Nm}isIc0j3M)jO_n%2$LM>l4MC<8 z%}=BE%CwC0^fN?>ZfE~>c2sZ$c5bF=F;|_ogy!5~Jb^|ZuFq<|%Uu_YzT}2CER3_P>=*bz=WvQc-nM!`fX zyHk6dW}Tnad=oxRGza#**os#h>@1Aw|1|ETNYqQ(^k+-re(5U@SnmLep5{43*-ND` z+9B!}r7bvEQ;|*Bf)KYvmQzMRy~H zL|%wCul+ceO(S%V2}g)Qq6(+7c;&>4@wfP8a0l_uM|bc@|3(51XSkOGKufUelpUmF zvXv>Q!M-!>-}RqJ4dJ{JdV=7GYxx>hT*^_k*NxOq@yHCrsh;L8^t<19l8U%574tXg zA7Tl5bjqrnMM3VuY2KhkcY_)V5e=WY2dL`C)x?&F?&nzlKWY-jp2b+!c%jpjpFHmn zy5m^KPkoEs$?UNXvA2W;>QeHJ74Btra>KJ6dD&r;Rteqk97QS_bn zlR?;~{?l23>#RlN2{d5t6Q%*KDbTnaSlg$=QM@xYbE_{w&x3ygMHgnjW|Kd3VG2(LHjw{54rwv<#xNC<*<>J*+@Gakt0y zVH4u?ipIJeL1j z1>~A{nPPDn6M7SlE6)D)mbW%u&91W-A`J7+4%zcg)_K9&K^-T1Q%><3PoNGv8|_$1 z(`80XD|dVpV)r(Z4L(>hzCjFond!PO7<8hhx!!>k>;Z_aauzpNft}wl009j)*JeM* z;Nvcum4vA98F$efw?{iG`OmONeTTTu8G@VW`1_o;nE&hKkj079s=+X~LdRppZPCvp zIAn^~g!d0(4eHFh&NQ}Ck*l2QL3iF{pu3Tyu!tyw&9BIbQALPwpu69s!bAyN zTE21GhA$7Vote+I3s6OPv1f$54vBnN=c}%;v0f#nr=t0aFID^72MU5>E^SYf-uO@d zBc12|C5N1*!m~|u0+_9hPtaMtKzJWS2h>?@6hJnU5|R(UX$L&?AY(+24qA!PhpDS8 zo*%2ptG|ttdO8##AM`gJteKJRx?eMoW)fz&(0x|e4K)V|IlQD^>9M&n!S0G@KREO5 zbyIkQV3np8vfNaOqm=hywga}| zVg$DQvl38~nsDsFnbgGAkHA{BOKfJUkDE*IyYiaaz$2n&qStWNva@C$*IBc(15t-> zua>SE2enR3ty{CedIn&gIUN5h&5aHDyhMX9yufwWMmH_cOm#TES(c0s5||iBY$;(3 z)=hDY6*AV;MY$twSiwu}t0JzUV0O0&|9j1ULR+0voH@gq@omq`-z#-uHOHsTykLlp zW7Bxg&f4`0h21mcq_BI}M$I6|NgfBBK~++7CbMiDyEgY5>T9?#$0GW2?JvXX?aI2! z*qUs-HQJdkD`uFrcb?p>VW3T99`QyRECAO9MS<_u1gSsa3Qcsr1cwYbyXr+291I(S zC#^y@{9wcY(tO7`)?8-G)wY^pW&NXC!WV)uw46tk%RD9~PP>N#PI{d6m`$8#d~H=OrSei8an6?G&2K=vEPq&R=ZL zOoIyAnOmYXSCUOKO<=Qx+{|>@qb0g&L?V+}@%fp_G-P;Yqa+$Yk)M%hp*y+8nLEvW zM5fiz&*WhoQRL1o*1@v5B~C?&I~Og`G{xGy6~efOhO&=i2m|j_2&|8YJX+UZk_DU1 zQIa_}2_u6!SW@Q0C0P&TM;|WEdLTFY@U*N=Ub+vCNJl|9<-j|5G9#%YC@Y=O_a*wk zMDLqBZK*roZ~SS2q$wufc|=cL^H+8i49C3L^Ouc!^J6I;oR>}Z!6frW9Nrxzlq0nhr6)I8-xs_E7g1MLw<#ck}KM zY<)FThmDdld^G88-VE&VRf;C7;&MrVZ-i80MiXfe-E6YUDm9=?s>?G|{jDUMBAL78 zE+TYYC47jAL`+4*u&^G^^oASr*GVllyDHvXpaa?YTMji}J!_{pL9!8sc)Uhnr{;Hz zAJopOIBD2;3vB*Be5c&>TKTI=g2|PfL`gO^u(?3sdUaF9kY?4y;$eyUHKIs_eVW<; z8jIX7i5e?8xFa8y1GB5AZ48!AZu+RAhw@wOcfg|UC!Oc`*OEHhSu%^~1Ux7>!8EBc zRrNdbiTh(lC=S&WmqJ7%j(xAm#v7P%XeC;8)<0J%Sxy3v9kl zHTOCZ8BBc9SLqlB$ZF=58GRJkJRu{oP1hurabCI~i}cf&Epj_5z0qRa6np-acW&Ti zcdFXRNHFez)gqHbjY>ONrgisaw9c&F)WDVmA=|b5$!hWq5p)O1dcA*zQ>36XQjnSX z+FNhkU4*M2cM2GA+9=h(nG?el5(M@XRG3-8EDSU&Bq^ckHBQ@-1FMQX+0p;Z@pV@$ z(yEK2My~{R{){@@vy04ev6g=2o8}eLS1@S{reROF*bGJQ1q4(aWTAxpW`f2pHjNc9 zn7E1Zo%*B?XQX7c{Oyu;UZkrJn6ys4r^h$X{n59B>u^eZcH55YG&A?jf}FN@wf;2F zk??cxF!#1?Hji%XdVq{bs^NCE&C856n6AiB&D)4o+ra5-prB;<^z_&=q&nby0oZ*> z*faS}TmKAt`8Kyhe(eWweeATHa98-qZxXtgh&F?>LetkB-{?YQ2L(Sk# zh+SEmCX`ntIK)Y`BsZHhLGsbYG)N zSl{TX3Dt;x3iBDn=jYdRBC2RpEn+c_XzkhQHg_DS>+*t2t}(QBZga-W-h2d{C1_98-ETl`GH+2CVo7Xy|Ra_NG=cYPlm&I-y%$pbB!1Cjtd? zxtLqRX9k}zpL#wk`K;}`PCnmD)5*CxcH#+p!{m-?E80F7O?>RZd6)ss%eqt{_e%NF z_7D4UeKWbx&RbuI3+=J>{Q(!+P3yao3+=lY}gvr*s$ZgZL{Ud|c09V^9hV4+#j^{aC>+=tC(>|y^)dDNS*<=?9r zyf^1Iv4Zc_ydzfdy@}!k->bnt#5BIpn3eLCD^Bpe8YIpce8D|BCGH9lGUAoMye3D%yCrCA-%H?0S{^aK7*st7NU-BY1*Pp)3&7F{%TFixAkK6INR^!v%=y$J{m{X5` zT5lDWIkQ}?1R9)ED!rM7NtwZ!O3dIiX*9F=7Wq0VqY3|5ZKNDC%cNial6jfXYn4WZ zFjKx^kf|hr&7V^@nljLL8F97KQWNuEeH(OuQ%h^2B>YqdAUZjVI)mnv6)ng;+a4ii0aY#LRU#*`?U{s~Bq9Q*` z5>ff1D$7v1(JPo~&r}L}H&XGPrUWAuZ?Dk`YI4mbO*|qi&|dD9zbM};e9F>E<>~Bj;r#5-y7-Sn+RZ1{%ywXfDHrYfT#5#HWEW zk4&>aH{Qd~^004`Nw>(P6RzjwlUy&NZh1q8LOG<+I2b*bA9zHkg{&PIj=-LWCwBZi&zHb2E>9*S zTl&ykC!qdIi9$Ys5ahWUmFr4;UC0J3bexBaox7&lRnkIANVjy`H>5T?_^5P5$<_FZv(J8X2(K7=WbN!BIM0MC>>^;Yxy6t6Np^*>@&6LpF0 z6Bi<3p5l-#f)uA>y4Jk{ez*@rqkuMIyL2~gr+djCw@9a_5^=()VyXqiWUJcID$6KS znCJUGB!QOjcnzoOzy`*M!DY+a^lhNk-tyQ~f!Y4!5ivf>~k+dkL!1#kgW+18|H6*!e^) zc&JF~#cSLLt-`1#W9k;sn!W@(T>HmwVB(2vxZdE|h^@UkP@XEP& zNUFF8Rav7Nf(odYApxmViqk6zA!U+~p5)R)J4P3XD6Dp*mBa=g{CfzYi=A&FTCISG zO}4M4C)>*wRkCLC0-@%$z1>4an(%M}btmjXL~(SJGb5`jBikCeRjU%FNoSYF0CnET zTJ-8sv|na_MEmj4my|LKotDugxJRYfZk`zb0C@IIh`)tggYx!Tcc+rYDu!ZHs3!qe_xTOVSXJk4Ed8JGEuzA;Un4zPp>;6~0Q<5iO+RLZxeX`X_LMCD?zOE&S6r znYW<~!%4hXjlw2r44CoiHzgz=jeoJvV6s_SvGh~33!tqwuP%3}E~8W+xvS53`s+!T z1`GMjwiS?_D}Hh zFL$Cpk1v2T|0YeIl7Gq6f`XAIPs1CV;W3f%n@Rto-$~Zl!35$~(=~QH)COa1-IOrf z&YR+9A7-yP<7Y>#`kjoQfB%w3XWxXE%>JwA=|9yNIUIk9ojh7Q)wV+q7V^L_XaqLnWr#ej*P7IRt@QodgidFx^u_wu z8CL7Lkz^Y8bXK6G=&Uf@xwCDzp7O78KZ5@1r?|>AQBhu4czE%-!k1i1e6E$4syv;? zaygv$^b~y+1#|T!@t1sG)UOdiyXf!YcE1wcuCMrF;e3EF^qKR0>qE7y7Gyr!`ut>J z*u0T*vA*W@(TAq_n%6}inx50VCi>7SA2AEs)V%2WyqxB{qU%>?H{TxJyO%rJ&9_9? z=jUvyimqRk-TbNO-WScy8{Ef>$Z&T3wC2$4`VGw=nZ4_T^1s@3v{gF0wzT=O+1pxm zYs&0xnk<@8KN1^$SpCd=MG*Nj*eZB|;>QibjvI}m@duC6QrX!U1MSYL0W!zRY>2A1nU4pTy<+H_h?P_9{+UA3)OAbh-PmwfU;= z5P=_F!8u1m9N)NDt#p>}N4vlAUuBRX^%%x0oi@{K1y!%LyTU|PPsTb%Ezq-Rwr2rY zfelL>m5>DW^GZli!hV%-FjWHcYC+(;|LWXHWSXnWyEkHO);BrkzqGt(qfed^@OII$ zbS{n6R>czbn9Mea*^a*cM>6nUfTPA;?jrV|(>AfjvNrJDK>X}sOcNJjl(@+65dOxy z@0rLhEQz1sxl>chzI0{z-P1Pgb*rb>u2{xW`@ugzvGZIIva=3o`--^GsO$@HAyoTv zt%qE>jWsh$Gf~7=xksJq)$z~RiJM8P5E^l+*BDdF&gwNHO>@nhau>P(vG-ZSw?0Xl zmgUYJt6QIL}VwdU5>g%jCk1FkMM{*yf)RHuBoW|Kcc7 z>?OVO{7MR6-OAOQe-nGO6(yg%zkS-gnoklM<(mASFCpQZ-$vR>(J+*YE#EHQjbBUK zAkMqQYH-6VrDaxp1C#W&nxJQ1*I84fyW6Yh!-aBNH-?EfdrxQeQr1b;cM*Cnu(_4T zts5&+oA@*M%@piuR5z~jHC?6`vds&f)lEFk>MM?JY|3iNJy?Bbc3-e{W4*b)E4$Bs zkd&<(mu59-9{Gzsbory|5q$r*ZoDh2nHt<_pM9|_{j5mkH-A`GgznL%iSbD&u=?`j zkNlNs-j7%yZC`R1`CU7OsvV8r`*%Y_tuJXu-zLBJG31^J@iz~V+*sqauE!j4vT3Xz zAu8wZvw7=VU*|2ABQwUDpO99T8WM=?OI#Ci-d(6g0=nR(=Ji|C88%fXBS}_IYszI$ zT2>?#B0so732j6fptwl2glOU$(?30$weT)}1isiIo44BFP)+`d;p|fDBQHLn`m}Wu z<{{S~tidy+0Zv?80_~$;7WIrGR8iuW!dRe3xt1+*&Y&*~obi!;_L3m}j z{?II3k{cK+d{WCma^Wnvw%6N)Y6|dzSmIqU!*F&5Zn}~-I^fGXbxG?(^RwJ%1TmPj zsba*=qr<7~P<4JPwej~Yci&0-PNq%gQN6|p%bIbSCO`kK!b^h(!+BYEpZ*+!Ey*an zZ!^D~A3q}nk5e-;HU@*kI0=Q8R4#xz_?ME~(DWS>KcjfO_!&X$;m(VnQOI(AWc&=g zC=QFCQT(p)GmJc<1{|zl3JkAAVVp$Qv#%?T_G4mKQMQ z^;*96*J!U26-(zR+Xq9x?Wn^X8zaEtty6avS*cToUUSAx)#jwr%CY{-Hia*h)=yg9!^m}8?SyE1ZuB#SSODIq z>4wS^0jMGWt;*%uO_l6c1om7?eTelP*mHx6a9;dnOh{FwIghbRg!3V3_Kuo@sm;~4 z2Gr)0_9`dURc8E@rk4P&fjDX)X2W4|kU(GVVxa1A7ZOjp23}S++A>- zW9b~q;VAx~JLhrOf&rz_EpRar#u8Cz8=MCMn=hl^gs*m$PpC5dHQ@Ftw1Ee1 zPZC`46u5(cOT}^Lm2bdB1DE`1A=cIij*{}Tx6LQQgKQ||h&J`ELMG^8z=EAkSON=n zw)?u<5=_37NWFycS7>@@^mj5|z-x#{0pq{Z9N)GmC)(+YerACELEh>QY%xY)jd`Y1 z?*|mH0hSCv2n=DVZ5SYi(%!8>Y*)~JSn;UM*zV8XR+A=z^l&}GC_8uWjPt@ki7GhN zeL0-Cn#pp}Dg?{r7!O8&AUQ9mxeSZl0iF`(C|rbArpCWG8FNW2y}HCbw&L#7i|~Qx z9wX`QD=sy`ntJ)}tS({n!QHRrspe-YZS99Od0`J5*u0D9vLU`pI{Im&7!r3@8@a2q z+N{r*UKA*iBNEw*Sw@;AWpa0!!t0Aw=taCRFxm^6;hH|7z>8$rd)1}E<{RLe_ht`0 z5Ol-Ege-X=&!`;>o$CDaO0%}ktf*0op7$`LH#~k{Vwk6tx}hoV_XLZ(RXtL^Fc_#= z7{twCp6C97EEf+w083?CO!l;j2s#A@ES2_`H4PiCOBm3(emz3-eqegG7OiPo9VkFEc>- zz6U%4ULQKjS=Z_= zG?$_E7#4yjr9U=E>^hN<(ly}ayvM?x@g^G)z8vVik({h zJ7Z{D!;s{fR5Z074TC>djXQna?}q?~#Q<;J1Tig@_h)yj29#47Z2BX2(Mq>_3Hs{# z_zkE>Fuq~b)huVLG$`#Q{f9K_ROTgJ=q{{QmaM$-^|)d4ZKkZb z%iW5V&fJxT1k8M($y)QRnGEE@q+)q_RB1Q-vHQdUI)tMK4TBso*|=cu*O;GTpI;T~ zKz3kl=Q|kf$oF;BGY`9Yf$vUbB)k5-LeZ`6zE$1aFlhXl>|4qj8$6>2@gg?JF^&xf zIxCDe#C<|Vg%&R_U%b-Ak$4SXEm&n@bSGH_F~xo2IZ}}69h8$dMA)MC{Cc{`P?5Sk z`;%oTIMy$B!(PSdpbZnK698kBmNCK%9`rr7*~#|HdR|nAcE^lA;+rUVkwSoDT1a~w zfoIO&aDGQKA3lKdcJPAyUw(;i(&`XLRsZbg)s({~sBBH0GE0tm{JF5U*_P zkNzh6f#RXhFNf)~)xt>y=C%68@sbx=^eLuzkg|Pbh6irHLsK~bYb&fn*CKZVB<|>5bEUBC2rv?Hh4b2+&55u@ct|A+2zH1+E$y*0Rh zmcKwFtAfNqQn)N)OJQbT6)ZQIZg^%`+3I#f-_l3jv3fV1l6itay{b`KHNev2YKCao zU(c789<47K-5O>HQ*(2^g8Z;@e)lE2Gn9;g^I;yo!U;QtJwS{WU&waU=Rl^K>j)zWVDS zY+CqnjS1#(w$rzg+_pWLEh*6Vpc#S}_Ld4D6TCMk zUf(M15&ZQ5?$Y%mc!NhTT94J`FL7t!@ARtZ#x-bPq8nHHHcW!0C6}~okU3^AT%B>x zTjSdLEP<@&7it5ve16j=W|Ot<%x!(e?z;7i`76ukZ`e>+zP**oZenXMGB`(z*=|4_Nnf{&4-!_;2%VJYd!bjrjKpU+kB|`S3~P&4y~Ipv~K#)y3(O_(}vcS z46Q33T35vBrTqBki+(|)N~uWetoxf!#O4;&oBMZ~``#j4^<%_hX1Ipp+1*26(nYcd zIvPde)E7lhM_yas^+Gw7ww@Egb zueMfw@h_7VC;JcoLXG*%K3Dk~5v^~Th%rxK&;5kt`$A64KRI-qd$~kVi3gVbpO}AY z=nTIn@Vhs#>{QGj2%Y0Mu@65x#0x$}S_v%sk-5)xJAD}_Jsem@G@GSIxbf>iY4@9f zyzudr_Jvo;q@Uk6*$kGG|DBib=2@Wh7_Y1@;+4as z`B&~w2-|lCxYr#h-Om?UE&qwKF0@tT^@64Oy5Z-^%Uoy)obN96j|N`B|99Yl(s1w$ zo(18O4CH2j9BrgeKyN8X6@*K2 z^QM_vTBRlh>1{9aZBQ-xJwdgd3TL3&t)CWEn$s#N(at$cHJW!WaJqS_hZir9R!^8R zQm7s=Z(3Bfpcbkp`8KE)|DK@QONBE~9neot_F4LC0UPJe#nWoSymdjede+ncR1K0} z>9^&H8yHh<)!~%67eo{bw)UFjr>Rn$SGsho-9BC)=EvHVfl}nIg1SL|)RqKFe`-@L z?N!R%Cgsu|?j`iQ)%-5tylUxDawNCq1D1;Zh0D{3ncO|XCBkK}kt~JDQo`UG*^)X+ zzD!9nk{7|s3YJzD++|CUI2h#os*x}uPDz;(4}>3vuoM_AUNeN3W)!~H-_D=4i0UH4Z3FgZ zZQ%&;G^wY+n>hl!=gh-2cu#tXe}~`|jsVXVF&22i^(^o#g13)@pl#H+2&!oYK|5D8 z(aC1cJ!_g6tSthRFnAbVXQ%Tt#aW@rqqtckK--%HN${^X@GtE#6Re$dzha*M7L)Dy z6NW0eOZi>kgt0sc-qLZvvyB@Eyx`gml-sIyW+1p;2ztbpFii~B77Il1F(3|_n`saw zEAre9+c_gZlz2{tJybX$n*N%XcznuB4G9S>1!0Oe{Lf4sR&rTErkZPa*$m-$NlwLs zSMN>|<1&wL4V!Q+-7OynI@_dipetxq!&22OSPGJMTUS_B`Z^75YLw{LWG}t1-El52=12X; zcAaw@8R z{Ef7mtP)ss6oqxR4Q(L3a@z=a3E5ta0qra){M|0eA6ru|fU)b1hNat-bpDzF0oS2@fE|Yqk`8n)7(XI?Hy2HnA?{4z5?X4+sO_SX_ z{LW*&+;&#Ld`(kD45q2m(oNL}ku~e0d0taDbHm-VYP_aaU`OiB&qf`R>Ru~|Ad#eH zk$H}>=E-cU+hN5K-|M4_BOY;&-BwlEYwI+3tLTTA=+0xO)RGmeytbNgrEV=vxAiHd zP+M!gwr-2P6zoQgt>jJN>J5;kxYsPJBe!8tD`8YJZzI*$#gB`el?Z50vQHFZN1%V>yzAYH#Lph*1~jKP4aQtdb{(4ioNKz zj=g-?YO1_Kk{E5hqsXb5>24LjcOE;-U$3p20Zm(HrQ5pK+@q~ay|#XZ8}6p{UZ z-By!)oVG5#=!y5;mP%VyWsinuxmz{qxOWsgk0sQS73*oMY2zGCJerBqZGBO{G+vi` zZT*_w-Lzrcwi3T7$(u~_aoW1vc|ryLF8ftgwryRp!Ks;J=h$JEe%5lztdC3Kq1PW` zg{+Xp?K)`S=5IGr$YQOP@i9fz$Jk8Fa2B(!x)Z-`CkgxNH225maPLmshAhru+2wn+ ztZ~pGfb|}EqrBP2$pGK6vbugBzHs7Y^4*QWe@|@YWJry`;+#{cI~(FWK}%fV)(wQ} zP8vk7h~>w!IBy?%&8gKYx#Qn*h`Am)zPJF4niIa}fyiO(lC#?OW%)6Gd%5G>6ello z?1SZqQ^z~ro?=(vKCRfVh#dNh50kP(DNTt9U)|Zr8`u8~OZ2)yU)@0D+<*V=&`{*% z4f$l=5Dy)X9Q`Le0C1KwbS6@FcFGKu;5$qiv2ck~dooftaQmmZchpDt(J4;tsYu=6 zvlZMpW-C(LAE`_1#AO>P^p;aAFOnQ$I2ApY7uc~|=kpu$Fv@xoHP+PCbR+@{Dk$HPE(Sc|-;b z%pC^i!=bLoKA{}yiBu&F#2vm)3c<1)2fdN1K?CuA-$4~TcV(n%z(9P^*5r}h6dS2J zYf#?r{?NX9i{E`#VurO)2GSS4#V;q?t9zC6464(7#{oD4*i{+8ZYJSH0jtumdN#lw zFxSI?t?(OUmF>GAJ1>Q-hpTe4xcXlI?T`h@k>KKBcqFo`Mk4zy3O*m%Joi}%HLj7M zgsdbVCwfZvDr*h0r72`RGTo+!IKcBLcr`!+Zi-qVRfrdoZSEHdr&MZ|WK~)c*)DS} zWJ5oMXdzj_T9M~`RYklDvb8B>Q#7mm-V4o+ifrjfWLJ+w_9==zAK85OS&2}tk=KN* z>d09LwXJZ`Yyd}K}5?|~bPitO}}$gUZQ?02Z|`N#&{XC<(?MmiL-lIjeg zGXON&uVn7YYnUbXV@!x<&DJu)A5f*-jGuW(=$gUrW>|V+~AK7B}*+Esx$k{?x z^05<5=w9V=gY29XvT1JnHKp=^-T=_>0yBwu+}6xsqp$)Mm4x-AxlX|<_u6z(GlzAN zx|ILBAiMm0npKwXg=RftCkk0gcuqSw zI~Py9k0Ybacz(=xZ}2s<1Gj`#1phB&;c&O6uh^VmnUwj}1jRuK;n zl%}6Ue!iYE{ENYj^UGPV$Nbm&-tz4Wy&8Gt(#e8wOV+RCggEBEA=DLOG~h0Ef8<;} z9xNhV58$60kvrCARtx*QRYPa!Tt{LG`*Fs#YJa5b6U8Jx_!n0&iuMt2mso0uy;GdI zcw#ayBA@b0$N8BvBZ*%s*ZnAt+V7vh)v-{QPm-W-Uu58?uOj1fxj)kV&C96WBj$Z= z87d1DbdTB$+Yaj6+{*|3pCDZO_DSX?5l7DQ-Fm;T0l3zIRZd{feBjb-KM3wPgIL~Zh$ReSY?lc!`n9YM`9}bbj~I&@ zOIJkSv4k}+3Sv;2)Q#gIR%;L&7>Sq%SH09vnKZT(cjoVr#^#NJ*n*LW-EI)e{~tkY zr9tch;qoO1_82%+E0y2qPI6D%s5;-46*g^9kErTAcm+poW`0AV!{6j#J0A= zNXG%q5?BTw0~lYY#Rx<~=Nz+PnF-)1xIJRz&kSOFM3eh_Mz3wNDt{hZYtvF<1cq&r z(+rG-qrzC$tkL>g4^^{0Bp90q*ep7qzrFitjcTR#ZZJwR&ZNLcBzC-a7`6N!1xCBV z8Agh2k{}I?MFvLZ2Tc>nIYJmR6Qp3wV0X-<&BVa%FJpZ&^HNx0#vGC2cxLDAJu$tg zS!Zje7=`b7qxg~TkudgLB#eghW=^tV4$%Xn!Wccm?Ge-%J)r`9Rt@L6yZNOVVxOe9 z$`Uiz=7E(PZRH6vin}aaRyUx4qImW3q!RZ5_V6wXy=sM$PGhKZq%13Ig7jWeU}cCU zX1?vj#g;1m^1~mYLfs!F%rmq^VxNQ)eZvnC@IrW*;q}UJB9OdeN85?6kd>;0jQNc+_jxq2O$)d(mZk%5&5Jpo0v==%1R>GG}e z%#>OJA)2}%rtodEb3 zxJ$SXtV$vWvg0FHgKxZ~ME6@kH_w7*0Ytd6(5W&bp*x@oz8B~WK$29#>Ok`g^_qdp zBIv2lI$T#AhIK?U@?gM;3N;tIuoT^u4nyyO)vo32%W5--?%kn7NPbVy)s9Ma+ou8j|!ctF%mk>9q$o3F@FQyj8ULN8ZA@#Uq0Su?DiZkcCCg-+ENNp))X#ZcV{Ue{oF-P~E{gEkjUmH};rH@Tu) z5q25670(}qiC>+mU-?Qd`jsl9U&->}WoFM>GzGZpulJ+7Dr+8$6< z`tV9mGnF=ahH&2KK&R_X{YC&y<*Do#Kv#rEt#s|!m98J7(hG)HdY-AYS?Y)Lf7g{> zIclX>k6r1tV^n(0@Jg>Tl{TyGaBy7mfEF$i>9$rz)oArLQr4JN-)iQdQHk5w?+$B# zG453xjJdC&^1|OS_HDbzYKDZOv74dEYxGX|bBP4Qn<3GZX1K>3yWV_eH#Z1q_INAb zNcwiM?pBnzH?M?~&=av@xtEen-mlznSWLd73{_|%Mfv_~BJHPUWvq^};d_5um2smY zj6-Zzh~h9emQr3zUTP_2I?q)9)k4E!Y-X0xm{h(Fnh>^=Qw^M8SXnhIBl~oNk$6nA zmjTgz#z^3}+aJwFYE8SuP!naaR?AaI zc2`B-dF_HpUB$_m#=%kgOI5h=c9o87*Xj}NGE(c~J50Mw8!Hh0Q|+4W-YmI)WPdHV zp#I7~uU!j<_g9(-RsQ*nGS4AaUq|RC5SOMtONvg-^pWjaGooD@l}?*!T}9A+T)ZZu zT{GO9C6teBSN#RGD|lYJm^sFz!xWdhpz$?hWV_amXqV(Yr%kPMD++0m`}mVw8zP+P z-i-V_VC0h^O*4ZFH(_r0_6urP;d$-4eMGy?rFzUeb%A6ucC*9}YG#gXP?K$t$6A!e zm`tWD>CAqY+)-xicjf)}ME2*5JZ4XveV%;={8ugZd3{=pezSrbHzR%}P@FUyImU`# zxT=cz|0$~<;R|+{%lp>S|Nfwc}TH)#z1SlRSC#TcY|%tA_P(agUc9n=8w&U%9^F%8t zll9I20}Zk%mviR{&EUS<{2830vLteF+MQ;!Rj%??PV)p43@2|{>E1GrP}Z@T!O#nO z5u0PY3@)1{{)d;}r3k=NZABxmsM4vrYUN~^!a(F`x~A^0@wPa;y48pq<*MlZmVJlkJkif`O0^Pz@?!wh>b*cLRBEq0xHG%82S{wmu zs-6{j8K4ekf@){T3|wm%V*%&Osu^kk!@M$Z{j$0_qpmfj7F74a1#mF}7Mx$*MXTLK zYuuXY7hG5LeI5bWez(;{NTe%{;|tgl0F;Y|r)BmSzgShzi52iQnpGpboR!&dX|P*(3Ao{Sr;Z-C`y@P zjE(d;TXvy`=oK3pz)&7!cy#@v~%ejejM+UOA*=4VX)j@#BiK#JL3_P zqlO2AgD_Je&#WT-a%rT~==ur)*+_p8m6X#$Z$1)*UUwXNiF(Q+^&Y*Pc5VIgPy)u z;*x~{>b!h3K?<)$r6V&!O0yZI)d@7Prgp51AT2T)nG4MtwyLiwrT>%Oa*coK;r;!a z0s7k-zY#J6*>6D*aj-Z@#F^NfDWNyK8#9Bz6gs0}^N4sEI?cD~D~)spC7M*{p%Q+t z==hocZs*QvSdrO6S%1hsvbXwJ65pZXtS&eYx7dL_ejIbRcJ$^txyB>0S+6WW*wA?& zf_dDb!#;Di`xM1u1szRfkq0MA@p>3_G0~5y>m9iqoberX>U#K{Q`XFBok348yJ!N! zmeY8WcVW+){7z%P?+s4;IE1liJXyvW+U8R}o!B``4D(pwHALNr<=15qIn!Z+xRet% zM@7+$tvsznObBS52}(rHZ2d!|u>4Pj-iWls4IOdwRikijJQX?|YCIb`^fyQ}_Ek>k z9A(!lnMq#c@Ja1?H}>nK5rI%xUYgtqlf}C)M-C~+j8ZvUd0piA``BcU@Zr)Yc*wEp~p~t5qt{o2@v#%o>m}DJqGhb1EA`J9aIQ7J&>E*l+5em;u zY6?c%OHMyYr^c$DJH0~_mFx$e!=?4k_AD**<1#paB1+u5S2|U_Zgsc}8`P@&GQ!x* zA?9;Gp_fP~8_0flPb-&{5-TisT5z&0i#NK!{qtTWIqW-X#@6H4WsIRT3+ajM+xMZ2 zCvEM@OwQdS-Pc#rYX1#xbFWUWHJ-$h@;9NzV5GC_2GX?TMGmE2WsAZyRnVNk5Z!-Y zzQr5G8jOlHEypy_fjpy1IYw)TN0j}Mw|;pO=ygWg^_?2e6)be#7wJlT%#;)JUl!?p z0O7z2V^;XW$4W=&s41<40z&LM3$S+$3#-e9|4$wdh;udcA&rgwdbgYy72N=!+ zTcwQy_E<=pR?nj=EEL1QrsYf{25iSzVFB|qs$FP5FdMi>g1ssQHb|>q#{+xXm|(w{ z0k#S>CJY&1m%4klaoa#{rgCE*;<{btrbpYZwYFNedOWb>yfFsYNgkb|OrzHYdZ$h0 zj03hP+YodLbx$H5M%lH)z|Np-r%jC$*s9&wV6O&jVQh%|-6*?sG_WnqZbQ4sz&jbl zswWN=TeeX--7yv=u6u;47`)MVigUQp@2HZ?))@N5;!D(Am(Os}a4{^zBj`Ol^s2Z> zKNn+wjY#B4BIi-IN`4ox-<^#t7z^ysGpdzi%n8S1BWuP1JA;8tH!vr;heyWe0&tYj zK|92NM=b1sfm~%9O9_unSF%`xjnrEn?HH33*X<@1*t&bP+%nidt@oC#9gngHNHPZ4 zEb_(zTSdKRus^mmW+$f+sPjY`q%E^8VO?6V{p18ht$#sb@vHr51bImqy7 zax^w_`!KMF@ocq2Y(%vin~gM$L)qs|kTb^w`$z`ZDiBkQB-rkruW-Y_{G6V+J^Yna zQaQ`?z|st`_bS1%_2Yq^AjueD7mW?J%6u2fes`X|bQsuRp`k2k#A*AA@&|0yZfvmE zUkuo@Mgu#^v%3ugQE6^vv9L{wdX;k=cdu@{I?Q7LUM_$e;#TI<(1_~5jk|0EFuQxc zretGDBZE8~1MK3l!B)xd0`|M}?B!#D9ePH!a@th!@p$%zaljVO7J@Z%1oF`gp>Ktx zJ~Pr%?3>lH4kWoRs@SLsA7MI^j4u-H$FN}7`X}k^V3KimAm0YYvB6^2LvnV2>__Ow zxOISlLxekVc5uS?s?%`9==5b~eJ4Hy`?=M83ROR5EDC;@@Et8<;e;xLP>0=Rjs0e~ zd@|7_wJPbxBS6aMfpLU@M+96242J4Xm?LNJ^VJ<;`4oBO>(iJ}ST((+Ra2zy$Xvu^ z+!P!eyaZ%9=-1L8I*!B+8^~h-znzc!gUE5S{c~8`KkTIY8V7)hr*cuiA|)?!)a(Ks zcMpf^q}{YHhK@P)MUm!#XQz|$P^6)MM1eUZDFMD>}{poW;KOdghV0BE1$ME zO{S68f5!Gya+QQ12i9+&yPBf${eZWHL&q+q#%Cgje8YjQdsx(9hy``4}e(VQK@e!)*h%4)EOrbb2eagLUrSY;5hTXAPXgOQP zN*xVmF|*b{h>gipPII?Be{h6rz^OW=!vPh%&M~t@D4U%=^tw9F-nLssRmEAa`>Kw3 z>ife#{$J{Y{M7X6zcEsEdq2}-3S7qB&`VO5PecjD{UbFVqBl)mmr zRWPVNV%6(SW3*05D|*d|h+w4qzdk}Km~~X)+v~C--aYoA57L|6k^N8Qn}+(jtPH?- zWrLE=vh$O)(N72!`k7vam_nKboKMlash!o7f0DNTC-qu#$aWi* zMe%m)B!9Ar4)g^^?)`aA-4W>}P+Qz$Y{!l<#JI+-OTW|?C%E>Nc?Z6G1AA_p=zCe} z3+Xj($(2Wv78Ds@K!LVw0{bw&bL<{5?C}KRw)BQtjyNs7Zp%p&1RM%S;ZS$NZ8?S4 z4;`SW%la>?(zvRu?gU!~jc3uVzCpOy&>8WL<~V^zBX6t;(TutizN3*tpU(y5H#jx; za^#hJ{}uluXTFK@L2Teyfe_qe?rA2+UZ`W`J~fwgnlJ#YQOI_AIBu+PAhW8`MJjBpzmE{&Cy(%wOx5GW& zS=DWrN!_W~)2)zOXrI%}xXyF^dG4Jh?re8)FS9gJ`!K_(-t8`2sj0kEJfOOr;jfk0 zS+|-rLAJ*l`96sj$GxGf4&SpU%Ua@Wra8@nzJW4qAR6+Z96aHm7DO%PK7cy*YBVYu zRQ)(iiM0Qa5tYF&q?CaXbz!^77G*6MQgv3@z^6I23R9};FU~Q{ zfKzw$$Jx4nC#IS`prX0f@kOczeuQo)omnq4HV0sguvHmmKReR1LqxB=*hu&PVj@G} z;Bw&Km@gt7vv1^Y-Czq78MCa-8WQ7RC>pzj@8y{PlacPLA!faWQ<<-K+slKI0lmX9 zmn3`I9jO{r_6(bkQy?{pN)sffJmNtf4};w`pyZ;+KQ znf{fgNaSc_7CPd4)kquoNHTs+Cp!&YRtkZ)A#pS&oQ4CiAe<}ZT1iCG3CDf$!*t4N zXgBxnL^@dv1G{+w<5z0hW4LP4C_P(-@$VZ>;|aI1x2y%?tV%aj&{+Lg>)>RrxeK_$Yy!=r-RN*q*24W~kvNor~chHmSH z2+HtgEviLk>f!i%`?_LbF(Io2d=gU~|0iKT1hwWc148^k`#klu2Cq`DY0`N;b&JsK z1HS#CHzQp?(nNSr`2i}~Y2@`P&$;c?LVE63{s~KlNY9_3u#a>+HdC|__q{64c*5f} z{|O(IywVX#w1~bsw$O|8SXczp(xcIhg)!s_b#=FkV74ZUf@@55Dt1e>({cAd{IGJu zrByJ}t^y6)qgJpN-+q&{7x`(&T$8=ZBEcidD}+*BoTCFC`fZ8SWLqsRqqTb*r0OtZU-F*B#>x9rwx!-)l}IYn(gfS(wK#oSP?V5&FY2 z`DAE^mpCn5tZLlmb_6Gcrc-6ipT%ryb}{8SjR#1<3Z<>H_1qBQ7?am<=LX4I_qihmM!AFnWWEvy6D(8CjG<3A%?MrYfr;`tC2mOlKgoPTb zq3+0`5UHdPCGnai4^e*kco`dO31DC%IBO6*=@TDqFlLRCg+JPET0b z+1oT85&n7-n4>Eawf6l`tb=uCDmVKVn<{a3RRS~U;P zmdOK2kqGnd61VvPJDl)AC>ws|HZTLi3)|gIVQptN9zk8<+wZG7;X`&1=U^Fh6JtHa zz5G)NzFWq^u)7ScAu=9YbSKzsuS?WIq}c21yNg~$`jdbadeRMtxrykL4L@Xs$MSBMsAT}{idfR$Xh}X`tQPiOK?*9z-q1j# z`=6)i7qz9TcOuZKyYlh(`lxcoi3+wKQ&~mu17CpeOm#jVMr4KU8}Til+b}?QSNq2) zSBT33EYkIYDdQBZGtxdYPqk*9EIv7)CoxvJ<~9TXm3*JNX(2r*Deka*FRG((X@Hl< zNY%-=W~jA@Y^o3oq&j3oBeaSAMygJA%o0x>xCP#sN_Gr}fpTan=~$gcs^afAtERJ^ zMj%z|S;8tmk|pzk=bkP9L&Kk&Kd!u7`q3sstQOmWNyB$@ZlGcx~#|t zuST?M*sIs1WP)!$$7wjjiV+sI?RzpU1QM*`Y2^m9mjHM(`}OSKm(`v0okQ`&N)5`5 z<=-f?EY`R<1A0RZPvaUi($IZStT?6+_+25WIX;LR;2U#h7}%bq-o<=0ih(E_Fet)k%W*GJyC6^fB8Sr?BSD%5=4GU$5)YW?*sTx;P?L6L^U zXK^ircGXI%g&x2C9%KaflrVYdR~U>+E7m*b)8@s;Oby8l8Bp2|ab1*KoW6@33Nran zyvf`5j_)^KwoLe$%yOz_md_eyIe=E=^ixS@xz=NrC(LpcNj0te3S1M;lKyLM2~>Qe zxTQRX^+E+G7N_{mNX?Aobn9*h&WDH54$VQggyr`Neb`D4a3EB&q!oQFYh@vZDFA9q zTq8?n+`BuACbzco7cSuIEMqy$+JjYTPgzTl4Ium<$bjV}yv?aXUuN9AB4YZgy719i zb;K~^L}-4As>O^vS=FjL6`D^y;lu->`R$SR|6q)psWBd!Pd(#M&tEWerP=E>XwP;r zElX+k8EHUZquo#DdP!(_qa;K|yf%S3RabZNRd{NQV@KUrA+bmH|AT0tF+a&35Xw%@ zfFo(Z`y!pcfKH^9^F%lDYdFPRYO-Wfjyq8SpanIK((hJ1_AyniCTEy1+|4u~Rom!p z5=R;b)T+q7MaT>qQ84KnBZ*weDsPHWRmCIi&m&v-m>j-#t(p{T6YHW8zD^(hpkRY5 zJ)K+K*$-ho6Y2hU7AT%du6_R`-bHuU|IzU9myI(iUWV@_VrqO{@J{H6{I?p`c-X9t z8=2(>(_F8z*J$NVpq0b42d?+mnOx7TXJ@4Oom1Ct}xm>sXMW|h5~*i8z)4up&7~_DrB0g+9{48IvR`0oJDfX29jgU5yNj7G3*mD^aEn} zJtKxkyOWL>woGQ$)gm@FNo{ZI*i-5&q;ws|eML2D&v9-61XtgNWzf7ATPqd}Gd#=>5t8o#C2 zPw(LyIFH}96=EG}$wn}nHV+Ydkwok15kA0dn^1hB>DB}ANiU zs+C}vJO*DErRjNcoxLwP-YEe#bQa*8x(1S{rCpAw^&?R@$n)Tx5I!SnEXh0Z&%e(j zWvpZ^~FMAl`Tgxzxx)W{f8-~NCF z#MfiRiJZ!NEkrk+-vZm`1pW|0aF|FmQ}6V$%ekFkHcJ9G0t;b{b6xo0{>0rwVhXPO z^yrecZYyJNMfFGG6cm~#p_-~~Fv&QKfa$0ATyn`J2#@WbhkCY9Ru<~{cp>!+#U>x?BJ*hG>e4fU9kiwE$4yGV(K{Sb7sy1fK9M|es!ylDI%X1XtpTMp&E zVXus$BAQ1~7kClaip8Y$VB&2=)8_ufyWT5iuv599%q5%)wi&JS8M_?4v4 zopS3?zTt#~%0B{&SYJZwdcPz~M6~f1ym2OC2G0%Oh9GRuAz}`k|4*E*BtLzN&8E-3 zF+T|e{q!19J0eKEW4{IUm!1yc)S+T?*#l1?_P*^Z$P}`j(A^h#CxxZ_f-M$etugZ z$@W~%tw9M2Bw5NPm=_m&=dIk#hqB;=lVX#7&ZnD3xSNTAGlJv@MTO8J%$^gTt**s~ zhr%Q0%0rk5+Vn9p@K(8gM|{7HH~HU{*%k5+ZhuV#+Q&Jcq&QZ(HH%s`PvS%tw+a>Y zk_VBxm@%_tMuHd;>;~h|!gMS4s>>2)a!B?k#5gcEMicOoDB@fKYpiL>iKSWW5mMTh z?vdRBGvd-Vn27Y`r|re4R>|SaO41{7!W_ov&^1w+c$M{|jCm)7@>oy3L&9`4d1M$w z*9s$7xKOV~y7iNNQn~vK)uGbKK`$#*2hnvOM5+f3h%cWWfoJUH+X}n!vWD?8 zavtKOyfMT0q$*K(SwnfF>D}Rkd@<=w7|KgBo=lwgdbEN>(}b7o7pi+NYaJ3#h793* z;IwF~ZW9u3u*Cu!OajBgbgv;Q?1%k)*>-tK#yo1CAbc3gGnPEPWZY0b9E5kbS3@QZ z_Tb=stT6P|kzo-sR(#nLwylmA|ezu%HK7W9_%+i>(B znxCWpP-~fMjs7FxivA;I2lPK1(tmu|7#EuH1RX4;{|C~o{YCU2y0pKD{tub~fk^}U zKP3A9V%}@C7Xdq<|NEe*EFhr&5Pf_MM*nfsK=z^kV~psycE#?eWL$+9sM85(|`Qvj{etAlrn&U90RB_(HDEI zV*s!fjJhEM=qqIa;~@ip{`Z&C|3M>na1_iGNV{d}KWEh!QtJZxk6D4k=r5xG$lZnX z9}oL<^nW;MLW7f;uEj}l=Mw~SAqEs&Bs%PNf=L0S z?34HJuSJfKvhe8OuA$+{04b@;mqlvnhbHFx9q`$3*zSZN9RhN)JPO6lEUU!Mi7Ts* z+u1b{QO}debUjZly@VIav=~q4Tb|$+vE)d;>N+0}8=nlr01Jwnqe+B~Pevk;;%Qr+ z46Efy@E)Q8kw+y{ltAu3lvPVdMnFOBa}gFgkt3v<4)d$j2AXSiTgA{ zvDPQW?NGvu2#S|DfU6fu0Pt<7LISv;{mdnTHn6{FfDiKoe9QoT#QvTNaP>lo5ZaXf zmgWy~GQ%!2g%HmrNrJs?a2NtN&&MOLq`#_}p(DQn#DTD?^cMo1!np=+gX)|MKzv&% z#P@3Xr4YA%DE{h_HYxcADFMXkks>GuK))ZL%SIJod5Vb*%L}l(6tzbf6GFO&zqt+S z_|tFr&BXwFAVWJTwX4?T|!kf^M?p=!|wSPfHl=2i|NUWEWq82sSuC57AnPU zRq~Bg0vuO!l>ouF1LXoTzKgj(02v=+cnI-6`@0Op>8S$5HS>ibo@=R63UST+Aws-> zsw}tw+_#s){Uw$$72?&dwMucjm2|$*ilgH+S_vUeJ)HpJA}pfj&oQw9{UR9WIAcSI z_uJoPAWp9pN5?gDAsr9dnUokfXRg&sDa1ANzYoOex-u>2q#|W8rtjDCOX>LPumOuT zUJ+Fp5FGLiSdde!0ZWdEKWc=l5la@T6!^BWmd!&U!?%s?d}LlT(Tt&Qdjx+|p;vn> z(bN}dI1oYAY#K8sH(qT_nVC!QOqdTDZ^4jxypM$L?yR}H2hHz2=rtWM=QjFg!~Ufh z>##eVa^CF;tmm>qycBr1E4lq>QGs_GOBj0SNQBa|fp>c}=iLrRI`6i6S2m2~oZEa! zR8a!2BhKxaD%V;cFK}*8=NHp2)ka{lcJ`L~C1{%zjn zHI3)}+br7r)Wj1x|2DcgUY*dtJ(%-vYmr3An}2)KbYvXZiZcrQ+wyE@oE7yHs;iAa z!w+2Cm&bN~Pg)^y(0`Q`PR;P2-NWxRakgevlSyr8Uc=D57EEtd%7uEmP2<+r%KFeW zJP)hc>=~Ffq&%JQ*KfsvBHyd4y3bJE7@}mav5Lz5it`vyqZ`#!_IgxxpTLixZA(yn zpNA~*SHG?LK6c}NO+)p4tGgeTkXOi;DTnP0Re4~3VY@ILE-b)rp^2^l|Doan{F%y` zVfp>R$l+XZV7(PtD}3H~;nVu9kkEe}4a z69S*K8w1~7y>lr$Zh>+8#d@BVV&`>>F&emdmSl1ibcEfs+dP!@K7 zxESP975=so=-r=(o)iQ@PnwEBZy$g7OL2aN(3@WjJ+AIf4OxFjdFYX{T?YB09}@E2 zF}1FDJZ=2|9PCsQ9r8b@typ`IUl;jQgTJi=d=KQoCpll>liFe66FmK;@jUnzOab36 z4O!n<9(<%?mjPcq0N=&ZJx64gH6~j66H~U?djJApK9^5q9W4wa2|Y;zy&@j1O~qSdgszvdGIYN0-x&*wSIGX z*pVeY1$K&?T`}uJy1bi}J`e;M1OdUGS+Ye_ILo9?gSK;E6I6c=}6c z8~6}aP)7WvOMswcmZx9Pm+QA6t;qc{dxoT)^-mzVfSv#pNJUPRfna*Y><mo%eb5Js8J|ovqYn`T zOV$+X55eO{oO2oP8vQ5G@y(qzLO4S`PP1`kPnkSV`Klm+suE1YAtR4gm_H>?5Q$se za=MdC)iS84ECly~3#3qG@f{IvAa~{TDO3|Kh3beR2&7sRrBLxQh4u3u{Cq?oenQ1N5K?mqNu8IGiSPDO6fD5_Dk-6+?#cCgoG8vVrF+3@N~oI6z3jK>PX2 zVmp7~!Uz2Sdk>hBFGY{8z`dikIjTd}zkMqqBxcmb&JvcQKSHDyj6!jO+9UC*pABo! zwYeKjDf&TI+%5PZC`CU+*nYkgeem5={6^fGQd9ahiqW493^UG&A!3m)MISs~T#7y( z6rpz&=%3od)P5ZzeQsNG{M)x_X9e5xYnKzJ7HmqnC`Z^48mZOQV}G^=y<4T|OZK%~ z@n6zl%k1l!54108Ho6k~;l8LknJ=-=zDzhRcpX2vTibQjC}2oPq3%{1 zOI&T^lzknX{(2SRW@E|Ds6H92EZ=dXxM=${7c5tcKHOMQEqV^jq#dh2Ur>=ghls8m z{XxIwU=iK8lP%}yMwYOtkZ2Tbf?D(?2c}x|(_OIVfbhj1Sgs^}xUZljJ+V>ruwY*% zhJ0N@QP8EM4v8+euSNdtk1CLH z2#`ic6Vodfm0qw%OAt|#Li#D&9Zj>pF0rLxUrYSkG5=24*OrUg*X$|#+ETnPzW@#O z;;B1xn+f)36n;tRhMov}2eiRG&1Uo!?J1WVp6lndD3E`)W-Nrr5|bW&lJ zQ{^9oo9kigh!#%Rk-hZ)FXd`7*11#50`pj45*9d>e9RO2bwNG9f}I13v1}#VUX3^f$S6%Xe?ao{BW(Z;%Ke$a%;`i zrN79v#@`18IDCvGwYu@3VPiVz`!IE_cNVU7LAX}&Os%!r;VLUuZUd$B*FLP9wGzV* z3$>F6kGWo|9pdUAHB`C#W%KG1)KTuw&=m$vq_q{$F92;3T<h0y=y18(z3&XXF z6>F`q;i)+Au)p?Ef90Y)y1ow%%z7WV20#t2mR@aF3qDc%^Z&7}=sqo(U|Mh>7EO`8hsGtnN@J{~SZTt!CP%ea` z5Xk^M!8_oerl^l8^iTr74{TG+Tc1 z{JdgCB@>tLG!RTYmy24|X`pc8ep|5lI{F}8;sBt+$l zCid@+7q%RbYaZFhhz3kpbb$;8z*aigQ5!Nd!~i5F^OE3~?5 zyT9t;3rr0C3?{bu?sW5cc95{9yJy*o7lsor(!`r>#SiEhT)$O~;c8cQS-;iOAAY}8x8}MUjJ*FlWQBW9 zlh|<4bEjYQ0#m0-n#8i``5Z{WqUU5PS@c3BpMQw`R)a+oN-z)AiFx@sgL@lJE4%Y+PG2O=F4ws7@E`ZJL%DkRz2pUW;T{+y3C$2wOSd2d2|32+Cy>AyO4j)EG`wou6odzw*xM zCW2BiQRysn$}aBVu`s8TbKlp&uJRXt-N@n$*S)Zv-^KMiy0mNP(sKQd+TUyw<)yt_ z&_@R%re;S~>0hPU(WMF)v}Q+_8iGoWaD+Jbp0Lf4|IzkCGep~})aYnU4c;e-x-+`o zosr&H<8Q1?qpi+ijQir<8UCsC#yS2*%Aw3)Sb9a}efEvNX1+Z#*WVZozXF5uldXuR zH_pG;iDhz3OLn59uMS#}zlS|W=r8icF{Ysu1T~d@Uiyxy@hQrSi z#EbHOO!ju0w>IAw$GzC&EqUML3s&>D(qc84ke?(}9^is0=U>A@4Di24<0!J5gt_2j6Y2PvT+T^} zbh*)pgM2)j#4H56!QwQ|r;+e7JB}!g^AQPq$aPK6sB}~B<%r(I*abP9qvUV~_Nsz< zB&34%1(}@vg_)d5WMoU`q{@TK^kXM?=*{*G(Z&8Vp+D>F`yF5<9E^2aloSG~EmW`QkiJXktO5Ht6%|s^mrv&G#j!j(HIuWTKJmmQms}F4pyY+(zuquX`4v+>{ll1VAtX?& zh0jJ>Aa+kep{S6u@lw+uW8c4*^2EfFV1 zj@o6f@?KU*%!sQGR9JHOc%p8| z(#l5?bysU49O)e zH+ES6sG(o=kc!G6@qm#OR|ZLSeS!tY<0*eVK?ln zWUUn*8&x3~-A^k#HesdtjUx}L&0N%qHE{pn>tn{(89lD@3{-ER1_KM>n!(Pqq_}bk zO>`x&3zluQYjbF;%C)1aTzgcNYY&%vTUfakMAN0Da_wm3XyWyta_wPNu2uWkT$LG> zjZW*mr;_f3WU4zwQ3985U+*mdSfb9>m61( z+eGtZ?xun>R-xLJyxyZ~4Jx8z6>?8l30n%PgypeecDd5nBd&67Jg8jzW!-x!*A|qd zwV~VwU8J~{#WhqtTc&fP_3p5SqIOzTJ#ojmau>+#E89w#XZN3#GEXZnMo}@?BDE18 z!u&c;pN7nA+Rm<`Md5nx3JDV`t4_4ld-I51dKJ&0N^J%A#hPbiqR)e+mvBMOSR3`P zS`gJ+#_Swp#F;Q2VeSJouo#C~g$*p=A|F}fpW%a&w|;depZT@bztW5M@NBskD`Kta#e4an^u>~B{MuQ+ z(u=b^Tkgd@d|ve8BYaT$;$A-UYiD2R#YUbA(3Q(2jOCT-r-pdE6ls4n!iPmK9_EAG zi@&UAq~a^;guo9;{deEF75P0+3WniH~Cq z^J}-VzR1yeD3!?nqZp6W4dy+h3uHSh=zs-^B}*DYJh2tyL^Dy}DyCu+n9+591}3nt zwy}Vc-LQ{ZciHLRQ|mT?L(sV_zMAC$v@dG)p&GxED@}qD5f&yfx>rz`aGPE0!^4zCr96Ca}QoC(SWPITHIobk`Lk@mE#KT%eXdE)&g5j<|9p?%Ah@w4|p6 zaW=1gH;o8P-_qgxb#wf`*~=dSWixWzEWeJJR@w>BP+~Okh6*>(Tmaa<^o)krZiD9u zwj%*-iE2h(2DZ$t!oO19L%`~l1%P!HOaKd=OMlg-!^d0s(SVX3lG7DWUm<*#(lOfH zk1aG`5jT7G2y+r=ExTP==u(`J5?AJQ?UK{=qM$nmU=~4lo0l99p-X+i5W0JLIR{Y$ zUEAc-LhvH!*3I?5rR(PZ%|3ntT?1`Bpp|1gy2wD9(tz6gi$I#g(IgVLv>|X*`1=M` zDicrXJ%F3oC9pXO%R`L40=NTPwKN+^uc#8{e${4vU+CgoD28qi(|_pDrPfF>bSW^B zgKjhr-F>{g6uR24|Fp=iM-TOipmrF5pdzte?hc4AcilIwMkpQ}mR6PA6 zuPuP8f1U4?eo}Ts#>0@!n^)#TrOvZz& zC9X&h&bPOYx>oc#uN@KM)`UL)K_wAyK|A{;vtr-BlXmtCDfI`YBe#YV*41Pxuc2oD zQK`}SXXkp|Qn<%s~{vHTnMY)s~&FzI49jHea;NeEG$R!l_?&nf2XYI^Q;%5259b zSwL_4{hE+cZb}QAFPZfzqn+A#b(x8^(5M{?_@7Sg5z^(?3f*vlkvSNC+3sC2T)!+z z=U>Ks$;_^T`&ta;#5__;mJmZ(3l)>ChQf?A|4`i4Lc;x|(0@g5lg~gpJ<(q-e!mv( zE;Cq_oa^R=l)u+~YL>A-pfdqwc8|)_i0L!;T>zEo5W#&FvjmTcB9CSrj_BW@RB)KM zlHZh0&t!_CpnCgWCPUgev6~=Ho1LUr1_>Vi8~$IXc-BVxR`E*PUbZdrcvTp6?c-LF6`pM9{3s25{_Z7`Gb(3MpHZw?D;>>bM9^s@xl84RY#(YH!&Fgf~ zs}f_y4gVQx)fyGGqD(X~Wp^yVB2m4-%u1ptln_^xS0ue5AU@^4N1@*^hZxssC!hlL zhUG+-`j6M-#`w3CzGm6h^oDIvNPk&v;tN}8`J}Kbe6xCgtpq`*Ia=*CuouII_Iah8 zCoUxF@k;c$Wy@8od-Ya-^)~;WIhlnqMR)c$1eyhg(oG}(_<6wBWZZtAS! zDE;ks#(r>D{Bt}0vE`3HxA?A_mizd*pye)p*0yZmXJbnPKex85#q$=VE`F zjop)dJ9gJ)Z^y2l!T(EZ^rMy^Pq#6re(wo>XM^8E{C@Kdv~Y{BvV1@8I7({Qc!No{n`Mj@@%CHkZuDKb_#iuV(r1?bzl)o?q~G zY|BvWo?pi1cJav}zJ0QWk50$t^7!Tx{QDpH=K%lru{b$n|Fnn48f`*`U){`%n~yMV z4e#Fa6Fx}-wyXa*%1EtsyIX6P5r45qi@7Hoo7>OOAM=T+Ogzu)#`yIPA5X;QzRs_= zVsrl|pS;EiG*$7(D5HOS>&zPFzU%jNB>evU6u)D05A)~mjMzuoz?L(yxqr_u9^cZ- zN@no?e;KkJ$D4R;%L&`-mUGOi;s46_ItK0eD6eaX@&&-ya#9aw?Lm$xHuvxNx0M&s zAnjU%c#}gBec2Wa-nzEEYlfQn9je^%%h=ccL79fFvog;M4WXsC{G9kvp1X$sSFxh_ z-J0zQ+#V3>e15n0S zO~&T3oy}}(%PNL%1}s|yzV($X?T`8PXZ)r-j}H2-D+N0K-E6Pdj?XasZia6DiF@|0 z-*nL4@)pA{b>MZ7kIfxntTz8IOy8i@a5`K5jsJn))yZgVF8Hvyn}4&o`5gD({q`>@ z+|FkPvDo)3XQe9mrrSQYf7V^@MjkErNJDra-ViT*{G=Pt1)85N7|bcp@5=p~r`M7HIQ&n;eA)3Sn}3tDRVS=(|eKO0*X z@^fp;r}(+OWp1qV@>oX&1Qrqwk%j`d?*XM;H5gZS^UbS_5_~4saZ{{wQ%$U6U2Uv$ zWo@j(gbch-vCg$yV;z2$=jc0Z;w_;b$Nz-KusPrmP{$n#{Nk{!l8qIsAdf7Fb*$Qo z|3u3rbS2jLNMo$yuk`X*=RmCE?iyaQJ=S4Lc&7R)EQwL2Ml87+-|de}t3z@YQ6oE!wbUr+*!`ifNjj8uJPs{Ybc{bi~8%imng zp8ZvE|5o~j!0J}b^4B9*!ZyPrV1woe#5NJv5uD6at3tT?Qqsg>%qMp1q3X;MKEIIP7TQrb? zW5N;_r^p0XCHXgU8{*UJiG^SfG>S{S&gcF+?y0U{T>8{cwP$;<9+?EgMe`UNwhZ>% z42^`pl+~Q?5 zx|Pco=vFSP)va9Cs9U*gt8V48?Jb{*bw*+xmvs%zNMA0DTv_X4VbZ1_q`#8YTfQ>H z&o{TRkXYwx?&BKn;|6ZvH?n*Vv}HRxW(`Tl%+hY=;8^Fiv5xB~#6K46T*l@7N*jZ_ zesX2tLLIsi1trl(-?YSeW?f)5y_=~!AhG&v><3>U(PoqlRY+O6DcUd*li z<{o|0`SVx@VvamJ(MS)~3?gT>l8OKR+n`OC8R!UKc!PSjhh$&!&dN?F3GXJa#q@43 ztMGsCm|2PXB0Z5;fF|9m6jCI+6mC_oA!_EPvB*2ryJv_BqGu|vO>k*3KF&;E-t~)_ zGVIs|*9R+WI4S8KBXV+mGs{XXY2zjpAOL@7YS7oT0ir;Fw{AI+g)?n*8z0LPc$kYm z1b3}ZquO_K(T6x!4pCO(zOUAOpV{8U4b9#6tMm6glE3d?5C(o>mcOCO|Bd#;afRT$Y^QzRPWz<9R*JJ? z7l`|}Q%;Bb-1W07yMB5lBb90&$MZ(J2V!*~h%J-;muCB`s{Qq-09DjBIEPlFDPOf? zJ8s8zMv;4VX7A{1Wc(p!riwP%$8=(ma}ioNROvV&^>d>c9q@Vs|)jw-|kUB8z8M(za9UlS65YYGT}=*MS`Ox)ac{uyFqc#r1`h!ua(;VNxl5;6`oL1?>C+_rth#tn=|&zm^Q`Xsjb1>qupJ zEY@+L&3%5>#Wv%T{qPtpWfDlbb{NwU<#^?s4z9=bOi$1Trj>3QyO$Q-`EGe$5Uy(c_)*S2j zQVk2{dK*(F7SS89;Hhpc$AYKMM5sHATOXF^S-(4(E_xI?{RXez>@5T%t(`{mVC)wddmR}2%YbpL7>vC|V3btC`l>6EV}K9=b@f8Pct1o6&PXo(}WR@jv>}t)<1da~?)A_*hMOO7|!SJ~p40jqT-d})<&*j0m)lhN2fpI6R zF-RKF@r}XjxU($w(fU}&-|i9wJL~U{bv)Z=e{Qadb#9*<>v*Wq??xd|u%6)_tPJN= zrAXk20kBW>(1DH=NU(tF@jRvS{zVB*ngZv%v zNfn&sH|-^ak%rA({tq8ugf}3Oq`f=tCwCkoI?oCDF^O5X>jBciZO?X-WX&RN5v85HJ~) z?B|3kv?&RIHadj41O;HeL+=d19tG?MbN`1T-en+fSF9BBnko-@4S65PvuDBFLHx9D zf?p`}S4JGzfq&v;2&9}G@1PYxJ~}<*TPMnbeTNV#oU{<~Mq-t%N$~?A`VL)$5cuNy z<$$lxBQ`RGzorS`Z=c%{pb`i0*8?H^C5{RHdL)ED-mqAtgyZ z^Q*)2qG`x@DLm;SS%mWdGqp5NJtn3BCMC@X_X~k}AOz-UIbhPI^gsYiESGe3bQC&y zz;wodM2`mON?llhIamtJ{bhjp(iC70qZ*3{ISo}3OdM=UHe1ZH0d%-(Xq>{aTJ<7jkZ z4A8Q#1em=cF!u?VBc;H6t_(1HrT}wa9+*9O%p_((aWyxv<-}_jlolK?fAwpg1Ll4A z2C(Fp6A*HMbYDbrrDM!0ZT2SVoswCa2t;!B=ve0satsAtp-1nGbuJ|#bs{kN#yW_= zP;5|6>cy`T$tDIERuk)>9@j5s(m*%Xc{gUM`)a(b!iE%pPaU_uSm!G2L1ryYw;YId zKC}Rn?^d6V%-1L0BhPXs)Be+ysw<0q@Bk+LpIjN~BUMLo7k(QgPYIX}2YkBan$V#K zPtZMG9nzD#5abdhVN8VM`j8LONrdCNrL5izJ)L*WU|E%=Td1}z*wV)tj%{cq29CR~ zVeFi63o{aZ>6Wor=Yu!LI&a4$^EH`dSpPOG|Ni;Jds;b3E4B;U0;^Z%^y}IHJyvZC zSbD?NsqQV7V7CRekfNXr`Yl^vlMEuO2TM3xU_r}qWSNzv^R7zN4zhKMk6>YN1a+8W zDCwdjI2f#ZHUVSlW)zmY(C+S@n{Mf03uslhV-9&%<`A@&`^&7~U>}*#NxWoxC^~|d z{03}(6Y1pM;0O--G{8*maqADxsmI{|0_$JF`pv@8`QT-|FB+`>XIHw^6Wo5F5U{Po z6teUVQz-DpIn*KULP@BdcYT!g&qvc>{hwz28(F{15X|>Lne}6}7W{`x;qMeUO3;xh zj2b9$%C-Q;Rw)OoVKklGS9A=NPa>9i0tCm*V3j#R3tG4qA3^RGU~yR4Xh)D`&RL9I z5N^e8K`*ypGw36OK)Pi=w_p)iw0)Xeuz$)eC_th8bc@HR8=%lmYf;@>xOS7))n?nU zXcebm>V4;fR{*u@X-@&IpK3T#>qrzSI0aDgt{XUoh3S?TIR$j|haTo6(9fSW{k-~P zf_d&PkZfePA@Mq{yWkf1$rm#V<0yPGoV^&V{23+pG*J47H$rsX74Uy3wIZF|Z8~B# z*GrcIElb)YZXz$4(g`4=Wo9n|eJ0TTY^^R*2aD)l|Jx>Bp9q%mcGr)u#Fc^DXAFN# zBKceb8(CG?(3N%#u`gdEN6)0A*6&^u`ui$p;TK3rnS+epKuSBF`Ap??Au|(gO}v|` ztMJeG&3n6kdCgP*?iOwwhXc>o{y*MB$r*Asx!f% zffleV)ep2dcDhqL&24i}Zkw2!{N`tP2Z_in`vM9Y?r_kymq_lj9S)iW{o-~w=ysTR zm!96Sp41w8h!Usjyop$*bj60frvzqPG+qXTZExgGWgJ9OI8q*E)4Hu*xqCSUNI zcL$s7FWDr`Z6tXl`)!j0A7GOM@4Lwt@|&blcF{=|s{SRXS4;N4!_QvZ(4Ub|7iIfU z7Ta|07<&qKxEuRxu*1=k9g==&I~=tg!XYjiQKRp>!`=BE>g}yZ^0=DYA?biQJ-BqM zfui6gjTq*3cCcV)QD4FIBTVo16*=ka9wu5wa#wLY*x`un5K+8>kS`IoMeLK z_QgR$3lQv9RvL@oHLH>Mz9xw;zfSPV)=8F%l4A?kX{$s+ZKXvTb#5rW5@iZJaT{*# zY8_{tYmuuqZJTDDy#?zWvgKsMb;9d6%&~RWJBG(P5#UxTaDYN1ykt4+lw_A*rwNK| zd1C51LwM5ttCe(HM3U9jilXRPi=S)5Le_|%>z>QHS|=35Fcqd+D9R^II+QMC0uY4r zmx8In8KSnv{n&V89ru!O!4gMeosFN!iTbgQjdx&XMw+us3$ek6n^p;&ytO4G@gLMI0DU?Vcu z#ztO(fcDj0Koj$P6?=%Yauyl5E>0IMwc3^%z1c1GtmagMwNYl7#f->gYtT+MZZEq? z2grd;wE1Ld~J%Ex(i$HLJ&eO9GnbPYqJnYte(L$GK zMTDr)RQ^0=7bxI^c!$HQ=o}B*-JtJIcsFv_y@X2oC!mukam}>m&6}x70jn~pt^N!rh@10mUSAq4HV`{KN^s)3t+SH46>p5;j7eRqY}1mUq-{y=}oZ09a{huU)+K zVQ;~$pN*h%1+3xSz-nk^Kb!d|mp{CcMVAZHXTTZfWc z`AF`3F0h4Q{lwgnG!RG_@ytCs0=84`6biS1wu7Ge>uurv5UKxt5vdt3DMFVHf|cj2 zj6!|I)d$z10Fer}fG&?_^I>d3XHk3$idUYqZHHKNA7Z&~!o93Lzd%>aQ3bxNO05)0o|#%{RIIh1)&e>+X~vsz1olOmXQi75 zkS~KIqv1%hH&{|~SOI-35&1U9G+0VVfJ$V~fs}CliqtYz<9I~z?XcA>(`ragB%X3S zSVwA^Ep0Q=X%n`Z-e4(cLr7c}T9}L$FGcIkNy1ZMgPPgs*J}y9s-y^bii&h2v%xVl-nU zBw*!oleI>{>h`0d(duVc2D7EHX>`^>7FN!&3AxSdkWV*ZU<@Xlm#m6tsyS|EM%H(= zR?TEmw>}~#BGfdB;;)yc#-g}wbzFFgrM6<{GyO=JScsXDC|gNvt@gU4MEQRZA;qNH zOn;uW{enMtg+Z2f79o;?XSSY#n={L<%?(@$aPebY5b^hx2{wsd=|5WOCF6PtuTYHo zFM{`k_!eG7z0ShAU1X+h5X(FsGlN&87DYG%iP;^Qf9myEY(Yuo-z zNL>qr6sP`p8+yzp`v5i#+jF%Y=!Wxw)Cmh!fDOf~kr zm;dtP$hqetROKA^-;x>?rMx>~<8ej9!cObCnwzzT1-yKWBO1a`T0=n29?oeiN%3Ca zsR0F{b1*bQzK&27ScjMWQcPxGHIt%2+nB2Vcs*aA&zo6UMG^vewKU;A)hptZhGZ%k z_nhgd@)opxZ2jLI0z3$Y(m_^A(31l4YWi|fGJT!3uVJ2i8mN5`5Cytlo&N3~`!bGq zWdbFok`Q)E_1R2Y*`qXp0LsbRA z8coA~-FSjJXl70v3E_Jy^e6F3NGo#o;04A9NdFj3Eekl9jp0TtNG+=n3yBu8RYt;_ zNYyv)!c`2yhYF|}&xzD9ay+$+h#^ZNC_7B-nPF9_WtUp!NzTUy^xXouX{4hhC)+1J z65IKIbTN0}^(CY1X|AZh zP6BrOp}0@FdGWE@fzG}-QvuGv!fO4s9#s@ zKUPV!zkgR$TA%u2c<@`i9P5=y)$Cv{Mf^9sBf;9qt`=lv7hW+D+e z6^wQh{))*2<|dlf4_ztxI0g>znK!1R@h0p@-r~&8iIScN&`t^n?<{iWknZeo?#{|` zLSb6ziCo-|Z~`I(xd1-@Etl)T2uKGPR=n^gw(i7R~` zt4wwD@ci=rt{>Lr+@j&3TE#9=ijr( z56`UO4bAlVhCfAmEM1LT4;d6m{Z5Tev^knyF=WB1au4fcqchExpa4H1YLzweg=oxo zhM*6+CM#-!Z{SHYsj0>HTB*}oPKj|;G@lWN8e}1Tf zI={dd1d8o=l|TK~^LMvi-Nrl@x~j}%KQ9afNLTp_z~DNdYlC^6=9i2V*Pa7cn#%PJjiP<1WD z4bc>a1?qHx>330z^4pb`infBzD25SvGF3Eig$NoWhf^ycel`-}a%#}?qSOjWEsPvb ztw0j8k%ZTm9Vwdj+0+WepsTgU)5WBWFPTkr?AFwZ%aC>f5yKF1Y#f;6MnK|*YQ?K2 zX2y1Yx2UYD$u|c=`9>8&dSQ7!dfi@p35FRA%lwF+#exyRDB!bDvsH zwv4tPoxw6V5@PAkL&%10h?Od!Z+N{fpW(25JSkWS zL&!GABqbS$6x&?~^%*#%fm=A>AoE+RY5)9KMY{fp^zIiJ6WdV<5{PIu8qpdb#DFXD{tY8w{pd2n2>%-IEklK$T!{#RsXDp{*$DdL*Ax6L4|f;T!{ioLg$OZ^ zGEL_QsCvufR|ta&2YjiTe17rArIX${9iv*Q-yQW%>wt-@GiGF`nzd6U#)|w~sA`p0 zH>tB#;653fz1HMO$Lbx{nc~Duz$WcXPgd9ii9=MD^w&)qYq4WJZpZqHxDoy&IHh;o z%x2pwIqS-gdK0qRk)`XZsWtUdz6d;~1F{mP!&{C`ztB{sQY++& zvSs$?1x<<_UFK8zHtVdRKWC6kJB%1=&oV+bQfYZy6cR4Jyn zPZhHmCUSGVjH0V+8zDx>`CaGOF#X9b4i*-DfMSymG zO-xVNH!0b6{Jhk$qt{0`w8P#T=b%%O0nwg*?~N$lb;7ZZ*Ic0wy`#^|>d@Sa+@SK? zlV11Ge_}vagzWnyS#8(Mr6;OHlu7T8_ErV z-g((ZtS-oXa?E9KgI{Kq(^%xKM2{%!fRfiyT`UZ>Po&4+ zs`FQ+@tNsmTpTMVWztpzgJ}Bysnyqh=;6Zn$Njpf1baiVrBR1tad2!ExwPXH_yS`M$%vDv;EqX$ z5Vm?}g~pW0K)?g-FsMV?n~*Dx_}eRek}V0(3h=H=c;}rIPO9p{yAJ!RkR6G_HLF8N zLBXwDd^l7L>O3s!EVZ%12p<>Ctb%2wHV9*de~7VA@;;;FHa1V63#3NI&Irc7o?3PV zY(Us~j)f4thE50Sty6~)GO3~y?yhKSsJ~3iuqeuP zdshu@62fspVAGS?`baHyo%V?{=UP;QeSRZkrF0GkcWL4y^e&AD<(iVn_lFnD|$ zksoVB%MZa0MofOZYY3Y!H2Zdl+N#BGPg_?TMGKxWf69?q=i*q$Z78p`fyvB!=ZCBcY0`W34}Xh^k5_^YSfiou zH=@*duc(9qBt=una7OE?7VIZfB_dV$mc-kH^&)j5XwuOJyR+!8k8)F?m*aPu^7Di5Z$A0ih{v_l14E`fuf$yl`-tqNlwg{Nsi8y@7 zekV&JW zqUn0Gn@i@bwXY`=ucUX?*c`*@`r2Tq6IQpHczSbs_a%JK!vw;m+C+h&=e3nO+g&EO zHc>U#G^Y^;QGhL-l3WS`NK~aN+vjP-viqPxA8IfX+wtcCd9E_@JOuDvy_m;PnyOu_ zCM7G)um>HLNpH*$&?Rg42mv{qV_4>3{X`={dR3?t%JFF^$tl@Pv6@^>^%w6g!!#7# z3B$B5!?brW+jSYH9XCu<4Q}K`_D7>J*=J=V0Wf3^V*!0t{eMWrpl%CIX6j`8^B=7A z*Ht6_WZ=EzcpUZ43wgY(5X(Czd{HlANl5VTD&dm^S|Yp+iNy7xd0f*3CK&W;;SS<0 z!toK4BnUMX=9qwT)NtoG((qwn4eTDudbk2Ean$P*`gn(hJ7!ioYG~6i2oCx!L|^r& zqgYna;#IOM_F}Rys}xkI*mma!<*G#4Kr{0XEH+9+Y>UaXdHuP->c7aD4sS)PPc4HI z+sLxsXGTi;W#n*bnT#~LMR_`0Jg1~zMvg#+O%!m#w4RtKl#`j$^liz>Q;nQC6DPw& zSlNzqci5{DVak~!m95Em85(Yd3g>k7t71FvEupqS{mMCx-l`r}`{CN|qCC*c*?DR>IH$>l4U*zI?Kfm@<(2`dpubI3I9#_r7 z&&7Yu)GCUc^-gt18LkKez9Yz$TCeeW=-y3}PoqA8`H7SBpq0nHR}>;AO4%@}pg9_E zYl?GRkd`C#E`l}d9pfSo)i*_srJJ&{SPxmo%PJ@{o9g@$V)R2$=g0TNI=(REY!m9& zrA^2fhWHp#c`R4!+UaN9`=thZ=~SprC&R`E{r7zlKK| z1{R}M$TFpdXcbI-;xwiRy!w!v*Zij53d|j}C5+yhcqOF2dyIDW=&jf^cIJ7Vf>8ry~3ZNR>Y6y)EQRU>zOvx((j|L6*{7iUI#Dm!JZxZIAHG zZ^?Sy4%7M*-IBq_yu%LBR6qm7JW_$y)Oyf7XMW4UPz)>-7YXv{u^t)RS5XH83Lk!aabPJkUN7i|zcqDTF&Pa=3VnfPPO2fo$(a0tfMiLYgjlc|i30P%YA* z(Qjl;B8s&CIFYlPFP8e8STwZ4O&8n0AI$d-KD?f+)h>gLVQJ+y(AW<-#_tnNa z{%f0V@=5Q#zn5@x!aHp}M34Ou{9S^oqUGb>naFy`7`5nblYHC~M{qpR2xY_yB5&o` zJhVklmX>TiMx&^pVDCc#hGliF2sXwR8u9j$U`yjwR1EL*_DXKri3UzeR5|LM zyi8p1ZSUtF;R<5g(O;gr~e8j;+;^h(L{3}a|x0?B>Uj90?b-70u=gj+61)x}*~Y`#(K z!(g9?I`Y0%Z``%SzA>MB{gxvB;h2L}0}>-Jf&YN94aXwH6dXGUz7(r*T%v#*m?2uo zy`#o4gzsgIAq*0%^0{4dh21+*7#ZWOsWL-;a==?rCA2q>!l;i&0o$*FVurBH_*eN| z{ukqtSB2H-X37W%vAr(gv3Fi550WEpdS?y85s%Lh?Qqm^8zZ}fbJ7uHd8T&asPYdG z&Ou&Kd01YXGbpu&=~$?s8)mb^mNMiwPRjN`80DkYG6-jdxBx(6d6yxs0%Y-g8R8=5 zACi?qDSBEG2AwWLTwJ1u6z*e)D{f$j8{n&V$k11YL*&;-VsQn^1TBx6_^@ZU4j3JeD-igg8w9WxsU zGGItwi$ehkT0G3y%iw6nf>bBS$h9I!j+Bg@5sZDifDPGTbBCVkqzu<%~pDXfID z)%&@Mv$|reBdV^7%;mkKs;pjXzx8ASDMum={Sjg!|Cg$8#3;*jkzBd1yW8e11M2#VgowI?Zm8!_y{4tN!-e#A#L-*T8Nld(4Yics4wR#}gq0Bd z<>)Q-YV-7VB%rr_qPMi490}-cuL%nS0lmdgGJw;|E=Wjk2aD+~4iHCgZ;GIxxlNJWHY50ln?{5a{hd8G1W-arAaP zPjB;v_hKC(ptn%b&@GzHZK`-=KyRVUABf%(Mj?7jBn2hQr=_>EBr@SYMmSVdw*Mdz z=-6EDuH9rIoZrz+%ZGxkhYWrr%STW)+M&S8Rp=VQ^@NMXNF2xW>7BD8NT(#rS|#EZ zMC36zfp_9xkYuq=W1hfP6@g9T&mv$NTgEwAFlFIZ2_Ga}6ID;CeoqCW0}`eMd$lkP zESyf=xEBfP>Rjh2qs50l2EqK%9u|j8=$*4##F*Y)BlmO*QbANr04Q(T|D7Wkw)BimP2|Ep!4K(tT6+`x9_(P?p_M1e}i-Z3A1Q*cb0JKH z>X^J&Ed)3@s7}rkTqYwl2$m&CB)Al+6NOM6%R`lEfT~J#09DeW*IDWqA#-!cN>~q6 z_kK{QI*N;xw*#sq zwyd#`xoBWrW{na0o9)WNT`xAbMIUryAX)p2{*qVsP6lqP!&9PDdY08oAL-vz4UAyoI5LbbX8s?QZcbzu&w|z7GkiP*kI=Azi&F3NQ<(k{^GsXzO+$yBVmy^zQ&w?LVWw zR_W#grBIz!0M*?^P+gRR>L(4Nn;k@{c(kV4Ao{2t&G9FtkUj}hyPN7r-*MHE*8d3* z?q@@C&HgHM^;d!_Rgc$EQR!Z#$36^HsjBoNtE%+DxYhem0O#CnruKg{otXr-0k?8= zb#?(%UjTZD?wKWmC+r{kZw)UXt@G1XZWo$LX7id^0C2NGRuyJ}=%ngXcqDZ@7^KKo7lEizjQ@yoCIBE-A*W0c z0E)z_DFQ$sRuTHY?l!rvoX%KX%pvu}Xdk6RXM~YL$sqVpSBaFykOK zFz~5mDuGE6qRuG*>D~ZQRYExPyx1FJPIxNY`0$ov>1Ild;XKD_R}j+~^&<_lFbw;v zssbu_+DcF#vk;Bhw~?+y8>4jdkb)WTUuR~21V5cr=1*I8ON1V`J^oGpy14hAi^#aS zC?ew*xrmIj<|ik+46*SugwZwhThKh#Nrhujys%}6&<_j8P;_Vm*4q(()ujJW)c;bY zf45T4>0yPf0Pj4_GF$*g10jFrHn#u^ggvhzYOZn|H?Q)y;w>V07@O5A6yf%iskc!V zYLSp+jZbCJ^nZEF!CK-k&UvT8U<=$zxXJx>VZ6mT|9C~qIHu`y<~BcWZgW|TPnp}i zX%f>gnw;Y7G5d1xgb`FF9s|#;K?+vbKBqC|oX|>1C-nOJ(Tdbn{G8#RO|7~TOM!Xf zuvGbBtCqYohM{YSPLC3i)SII7R4#aeA}e8^mg3R)%^CfAYPDj88I!d2Hv>DQ+0^zl?D4INS|f6I?Kej98 z6lx-q94}!m&CffgM9hLr@vG$ocOLV#wU}d6x8FkEt!Wx3=%UaY$@wC%eGjk0+7%~| zvj)#Q62N0y{nyZ*)Un)3ksMRutH?Vza4;p|Rf)=3HlezlRaW@|bik9M8?JX92vXoO z;^+1aO&8=d$%u^$TA+>Pm0MkMZZ$SH)T2$6X{+GQ!qJUfrKd3a-EEO1#9(J1C#Y%p z^gCPcb|w{uoskRw2wKhKXgH5;`*n6kc}%Cph^GcSd%<=lhML=%^H~J!G*=BO{k&tP zv{+Fx{&Z(Hhn>}z-5H0~`2}=}N6;xAN1}M_es_#C6oX}dU7CgeTH*~T3QLO+eifE0 zd*3q?k7~-YxpYQ+&Fw5BMwX@yx4VvZW>SvD%UB<$gjVo1X$9$~Hck+wVH1RC8dUrQ z+qz@=ZGDt&A<#dLVE@X8L(auJ){esOr1 z+gAR15s>YWP{xK}Py1|7vNV(;p^OdbrW63-z~~FI0h#%0CK7jSs-AXRpJZEiPQR_Y z-L@pjvMn+PA6dw@5Og1V_~N!zo^bSrJCnj6?CeF`nY8`VojHYnHG=8aB$%d~cCtGz z!lqf%Zfic<+FY_NkWIZOH*67Ev@157{cuEImq^LB5Q!dpG(bWY#r1MG>!Rr)Q5WvO zq;Ut^ddapWb-Q$1PUBvUaQHO|hv}wWEDphO)9h)t^(nTs#kMt3LgrgAMSbC8>}LrZ zLB4zJ37m?|hj{mOiFeeM(A{EDMf5^K31prE0>mg#yI9qY@Mas0cLhO|>LjX>k-i)3 zX@BN>q8@hNr1Gk0g>D$*w7874Uc|Ph=P>`pZj|W@f<^p!&VL$x)?~LyT&R|f^XY=b ztl_*Hm4(U8xi0R9*;vEMh!`Z|1!-U&;Z69PM@Y$fPhy^>XyKQ59QVS2zdEW%iE_E8 znxFwoxe8OQt}RWq!dqH}lH{#&NjWDYAPCmC<48|P5n;j=l9WrhiptL(CS2*k1W%0l z50P;ZEzY@;=oVMD)tG-*W#TSoyTzqlxr8f(HZRDz8j_2Nppr~cxK9iS{ zRVFV9K?=kpsv6gz-r%PDW*Z~94Yje(>nVCp=8I#NK{3I%yz`2j3IeGx`c_{L>d!+? z4;r6Bwh*P53t5RIm(B-~l^)q@?m;VcdEQE0o>YXC4la;2-Q}0;g93zthUG&{3RhW` z6L?s=-6a_@Si9Zi-OT=R-h?FdOZb%V$yw;g^PAerqY^={t6e(iW9G}a=R;9 zF&5qjZx$Em*o1`f$hM1Hw8WZl(FgO3-eL=Ni0ie{qYJ+!8KYp(X*OCAS2SZfFZvyoco>xZJ1O1#WG; z?-OhR+2)&)ZFub+1cHjh6`{xUxPd6M2~mc6<{ghbaB(Y^FcPl#NPfidB zSDXr0ypQQW$%-+?ebY%EkD$`rg&=aDN>Apnq8Pve`n2~Ck%N+RR;~PzhcCS1koii4 z2w~ithq0uHaK$^r6~D;T9N{`-i*HJ{04|$ZF~Y@tvkF%{4IYP=PjT~DA|!gPL#Wua zh-r}~9(nZQRxIftTybB1#S#$06%&8t$i+)cO{3s-hz;MA*uY!1uwvwf`(|Inip$+R zOhOMLGHlX{37?{)?EBICp{v+i7 zg>kj7`;{p&(Y&=)il?>IL86^7fe^N;ud635j!?aE*sihM$ZVHgg3y4y}9 zuBM^#9EBi%3npw!mu)Rvnonr0UHQ{-Y-JsD!k`T|Y($;5O7xQVWR)*7H`Z*qsEPI<&o(u9>(HfvgkiUW}C2vw}W|B zn@`x18ADwDGOQBtV@-;ZH&J5GVF2R-JIX+6Ej@Idj8RU&aOM-NBUtMQSFR&q)E#pB z`AcIvufdF$FO6mqr^dg9uoyQusN#MlSWG!O0uhM+*$&B|LKCcQ&cmMFEv>*?e(7;<^d$7wTw zeHLE30#0@>>}w5NZM`{2iO~*U$Gdpr)VA8wy)JEC#)4PLZ_KOaP)wLt@rrx3tNL^+ z<+a^zn4Sfq@2{E5%i)337TBD2cOP|ab%R&Rsmd!qf$x=9!u6=KNlj>80IgdOyW02w z)v^m-|ABVLT4$xLYgzC*c^i4%Tx(Qvw|3Xa>*Bl)9e6$bX5)6!4&Lu|We+ZF@o@_^ zqteOe0J!YSRq5vaYz)3~Z#6GQhg|{Etb$jpS;!kvPd7g7UiZ@(4qGn%?3ibEI%rR0 zs3QLqFPV=p$2$Syip{)t7Vm<}uZL!Ce3TrH_uJicsKV<$mbOM80We>1ulp1|V0ay5 z{odKUatp6p!s{T@8=oNfxa4(Kq0<2{*r{Cy6>}=M1$5I1Ua|+OOjufTHWTz1iSCkq zw!q&!LWHYt>Y3k22m*TDbPdMqsT5YwT^y;&ZzL214d$~DU-Y3zDeYH)sRS1<#JCH4!tS0S|pcoBdOJwQjKMLYI+muPijpBO3DK> zQ)?>WpJ+kR_Vbmoo!h38(vY6EkE&?JH1&(G^TYbZldhH`WspiNc9sr8C0=goGFOsx zm|D9K!wpkPl1Ax6`zQEfd!|VqrKH2H0hD0s}=*J=8rphc7IiLs2L& zkB-%3{@Hpo+j!2Sn^{<;BpTiYJzO@|-ZJP)1g{PXlIF)&yScGAE>qhfy|<+|ToUuh zvaP8Q)R)coRm}u@JYX(pi^I2bsmgubf`cUm-9h;#}E9J))fy&JjE->i&wDJbkJ<((X_%0~Dy3hrg2eU4* zS*ulmRTKC4@8nwOSRGbE%~gTXJLD38tVz)b!XkVRqXfZ)81#Wyq$j~vFzd6#xZ=F& zx-y2SLU5v(X|AM?iJAH4IV9RlrbsAJ%DH3>B8kbh(QvFrBQ8iUbbv5~AU+izx|Y0` z(z0vrP7!J4hH*D4uO`r0bzjNdQ*fwyc;I`g4Z5Ft$sxm!A5-o&=nypM_Gmq&Fai;c zY5h7zgI$LGIwq9v$^Kl=6=Xy0&(_LIXCdO5StfT`a~(-&)`780*{{>J&IyX^%LG$b zNvu4JW(}-c5OH0Ca^+MA-mU$9TZ#x9@LleKX zKMH%UMC}9#v0t#5X`&%?7Gn3NyU8BqR>O4A()r zkGA&Bb)R+ju}}M~+Lstz7ZYHUfEFT9Ma3E|t(PX-2Bajxl=**u=iWOr0d2d_^KaLW zWX?UWzw)L(09=RQ8VPEvxz&@1<^MgL)fv`lt9W&5+CR+&3PB#!h)!L4i1h& z_MRnf@!u^;Yyc%QI7o;m%M#p1B7OF{da#HiRj3+Ve0vD8yh~-+Bv*MBWOPsXu|&C1p|F z_q19a<6@uHo(BXFb={$Mk6a2?qxG-s%epXKgFP>&4f6!*|0R4GJiQ!$rDANevP0RI z*(@BzDn6p8EN(c!F4mq#acpxCy#@hK%pGA4?^=0M8JFSOLm8KuHaNS)28T%n^V=2i zt~{U=!e3@L?N-(|4ZL}(?hj&!Pd$)%AO-O_m%tt>Ru3~^o}nz)`|woALc}Wq<~Slf zKg=zC5PFR>qPUQ*+=;dY)4wr~>v{zmAx{W&+*ieEAzI61b!AV6lQ+zVX?3?{m?K)^Y()Xf zDrdK{%EA1>w#s=$RK-P0e79*&b_&&VdDdNF)byOwr+3RC-Kvbr_|KAb8B3MOmn3fO zAR_jSKK?2{i|zPX zQQpF2fb!mRKJ!2k(U9HPu?pD@LH%ct-QFbG-J{5ESdo8%?0!X&-MxR5?Dib5lj z4SV;>*G!impBdxwES&mhXd3=W^! zFME`h(=O3+!X$mS=r}ReTqm57V@ylvbKJdl!g#@cTs`}ZiVH;FgxEYRlu<^S5PP^n zEq~Jz++@B=`Zs5(Rlg@@I|RqBgH0%xMGs*d`=+wEz+2hNv4=-N3}-^Dbhfo^sC}kX zr0r~av2XT~PGKG>DP2vAvQIs{N0nipu?c_);vV`zkxww}loWSg-xLK9<I}Oy(c=Z+4a(eZ#PMn-`I2*g$|05oOf<{r0ISpr zJQN^Wf@*akYExQ==c>n=cE^@6$FLYdZE&ZI4=_PJg%Tn6>XmOOqmBJZqYW|F^oTxQ z(r5#z>tR&va08UC2oE9UdQXi#aaxY;QQEn|^l8R%?LFLvGRYC6DWkKBEX-~H{$yBmE zTn>tdO9M6t6A~8_wuejR6Wf4zxa7J9YZeXH3Yg~*;dy{jsAw6}7)RZJZyRJg=rbJv zz#X?-VWI}P4E;pc%D2SRC5P)u_0xl+X&#s1*&B>W>Fm(#LEDU7ws*yL>Cl1})Bxr8c*+%#djzM&T6$@mz=~ z(MVl=3L4}Z{7&EFnaC>Rgx{+!mG4g!-_;{}*)b8J3vD^$)GQ=?e#3o0^~32@`=k-p7g-=Cmq>gn&AkEjAdAIvw!t$4C^^ zdQw|#n!h&#P1y898F`AghHcCA_a<73(Op4#wVxd1(oU?ZZ#d07r6s78BJJUFrM8 zrNFXb5o)owTaqlO{R3>8qAWw2^1J`$%GZ=&3&zbc#8=lSdoo-bi*n~MI?~II6)fu$ zsmhSZvhdQdG9luuf|CU&M9t=ixMmq}l_Oxnks2JPfdVtE-0aZflnaMe!9w+6%M~!& z^P)m!GMX|E_lxcd}SKx>`HRpauHU;vF_3c%>{>fe(YXx9de zKq#4XWld-?4j#=jp-l3@lAYq_5zkHQPCns3))zc~sOLD~iBx-3U+ku(Pydg7Nmli} znSdd^pg&d@Orw)WXOSRdVDq}hbfhq?Bcd?#-#IR+zKHPpoW6)`UVl_6LP%fC=b=+G zO$KE_T3pk`uCJ*-kP!Lb4;Y4_8b$n9-vIV;y7k#Zb|FTorKfoSo%sa-~6>6 zd`YdBBr^a1oMWPGVvUO)-@u365mAv~j;X#_k35g*izt2A%RfvwtuKGwwVy=G_e70q z>>Mk9NUz?aR!WX?$~$Iul{Z=NSGWGR&Z}iR>@K8Ds`4kSfvA2=4MFaC@Y}$DS7Bbw zAGTh-{E_7D`*9mD&9P5eoXrc8oX!86jn{@;N7`@hRC@VOY{-9T&!4>WfY-~Pvf+Q` zFEw*i2Mc~7aKS-NyP60qSx$`<@a^YJn;zU-s%ew|5s<%VL%!#)IBk?@AjJt!2mf}n zhZ*{>Ojfa?-xRfczCV~jw~#q${$ONFO8SEt6@M@#${$RSzlD+O_#2GO;%`OdQ~bR% zGK0UXBWP8o`Gdg^iE;^3R)Is3SlR01;%N#EX>L`25g#xxcJTqjy+rwd5qmAJQmd0b zU?4s}-UrOEx(wo>@{jv~8Rnw!F+N~UnLc26p~>_CGhq9G!7Brj_;epIqv8VwXe}Qw zx2)#EBa|7JXWIb`i>^;@M7P|D=*!Xrw7tJnRB$r~w-!mS%qedPB4vw}7273Ift(o%V@fU8rm=KX zJpRH!C84p`xxNeq(1%i(s(vI%Ch4Iae;IJpu4$o1o>9CY36+hbWf-D8DF`b6Zj#K= zLr?r=z&Tg;YeB{jT!yE3OFa!cKhc90rJ{$P`KyCt&1OvUtM@4Eyr>5)szVQT{MErh z#0>{F4LgVRphZORF!EmqoO2E>>)~I{r|7_3c+zR|Y=qhJ_J?^ev48t;Rt7_i7l_c? zc(92>3-@DkaW_>wxQ?4{bdpLf!on*J%I1pPETtadq}9X2w)&A26Pr3RWY1SmAd9liDXSm3 zqA?>+z}|+w!3y*Z;C3!r3adrYCL;pzSs+gDg+Q(JUxYy_EECg5Fc%MDpkcgYc7!AK z5)%;dHmba+!-39K9q^;8Kt5EI@IzLv^jf&4%ah9J1as1w$_HYgu3p(Ty}`b062mFJ zn)Mzrua7JB1bN7*yjM7XV_!OUuM8cQaZNqgEN50y!hk`(qi^s~+saUn(q8cwt}Ndp?V7XY0<#VpNx2VPSw5;b)#m|!?iL@vRJxyE-}NEVbg6u0`7vpk(FA$tv@mv5({#fB*mKjb zsQpRwZ9Yc-PqXy@csv>Hw_x1wDdQ0dQQA)DbORh@n z%|?PtT?BAwjqX${tfHIP7;em0t-!vl{Vc8A{V}chg@V)3 zjvsba=ZO9fiuR|Fp|X9lt0GC2XR>)D54CzO$2>LSOFjuDPU{O>Gk5~q(l8@i4sp2f z9OOb})liE%4m_|4yy%KSx~=3h;xo&TorknPtD_bt4{1}>+q&Sh$+BpZnq?`dTbe)V zMJYvT3QlE{N-yYjVJbh&JKXA_A4{{yF1efnIf{ii6*$j%ZC>fmsKM1Eetn0fv4ivc zS}|2DTMA0Fmrz5TiddP!+?c0NLXnDR#IOoay%lZ}MJs3s0zRkJJzkEpC2nci#n%|6 z9o<>k9rVv;E7hH`iX7dkI}*LOT91RH)x&(NV)|ls$10i6t7o3(#Ngg<2iAFC;2wpu z9peQdN)JTe&0aT7>GWW^fzugp%jpf7(X$zwa&%V}E#PC`p}S(M`IHu-dw9plgF3Qk zEIt$Mn1y^uceHeb{c|>Wv}lXuMgZ)SIGo>>`ndaz)4e~QW`ieQ>2n=eu{>7hcI_I2J%yi2^xh&q5aiKI zLC|RPSqnkzOAh^j@h!RY>>q<53{Jc)Z-Jl>1wq-hHiEKaxA18pC|=_;?i;TVQSJev ziSY_I)h&|hFl=E(miSgU=PlM3e0y%}YwnmcUhL~G_6YpTV~f8%SIsTPuTloE=wNCH zN81I!p&@;+<@Dw$`h=?PVt<*yIzbCwy9@mL2sxbNy zH|s~DdwB5GUv!!g`=Z`cuzwEc=RD-gos60Gbhi{pL_EeX6s$gSx9kmT@*Y*p{o@i> zcl5Y3@_Q->46f;1v0UGsS_W!=^8m3Ah*|lazs#=HOF-+e3G@g0a7zN9C)L{$*XpI2#L(e4s}G8dDwyO?z6NCeF42ze)i$E9z7rj-4 ziovMQ^-_?>S$I1kf zlldfUWksoOwB;>ryPI95vetMs8){~cC(ykq`z2ZB{o1#NKGcWhp-@LlLR&K2ayopk z%%|uLj>sJ#zUZL7#2cTV7&;N?Zpe%+_w}P5dLXvMSIJs2YE*UZu97RAiFLljI?pPn zOwV@|ZWv`>EK4u0h?V%eOHkQl8z{+@pRSTC9QwNameY~P^sklC^5AgrkG5wEJ=J>f%3*&7%on|-0Wg%gNeqw^qX=DKA5xK zub1X(i`V;IFBf#OcA=h2-ByTP0qyC?sip>xL(i_cIWg<8@VI#Cj0(MUCL3z$jQCA6 zDie{>L@#We=pMgog`ZOl1H9_tz%MragAI;Je|!`?jAc4V^|n9XzZztw3M%+wUr|RE zhmf3Fac_34+#gutUOzri;$5F9BY2T{C|%4Lo97YBQ1-o=oWPkiU>bdk;r?V0i5nO$|AY@YIh1i*s;zTPSBsN7xlxlH1gn=LnY; zEXgTo%+Z&lJmaUH%WQmSRjqO)X0;ndKhAQLvd07({A+%rYG*oL0gdCMq@Klq#@(&U zc5mrGML?a<>BwNmc3auVm44*?H{dtMs`<0=dxz}w=3xH6;TO!BDCPt*QGAK)H@c1A zL(l%D@GIwu%v_JY!kwa`(uoA9D4R%#o^?jPtgl_b=5(dNCsQ^&IbJe@y~k0ZmlW0t zvE?y$vG??~W!>`^$h`bB^GCeh^My2U=u3Y*w|l{l=c=*?!`CMLd#rKeiA^qu*SStq z8b4!$zGm%WhD(3FB@ua-o=|cYC1+VBr|Dx$eCM1JOw4qpa^{;5E}osT^K;(R)EaN7 z_2!BG*17S7UhA$jM7@d@yGs@Awqp4?<)Z^azK&SQ#{I7kBwkobZO|0PM2ZR-#POun zLQyC}Sc?^>5Zs;h%(GK`-6ihcAIXnr^^fJpoA(p>@%5@7fAFXBmGg}H$-T2(zVbSr zm!JH+f0LgXg)hoap&Vx1cVZWU;_o-&;4$ z7hCT(@;T1vFSOU(czL2Ll-N)iFCVU~KSFwiamfw8W4ZWRIvOwE7D~*$FPuHMoE9V5 zE9oyJ>BtAW(-zgxd;X^f{@aNE{Z!mSblIpJ)a6feac{{E=pjG#z67F$O+X zhCF9w+Le1VB@+hcd%ra_Vr5YHn!y%uqE@^OZWW3L^u#yh>93>iY5Y(of8*UQ{m3dO z+^m{NzJ5{cHfC>ZQ7%_sy*NKMFHbL?A#`IFIJ=V;`X{O2T?F+kxnX1>&;WlWZgz&m zy1P-;s9NQ$A*QEDrVcVI9gSRLPUGF$_Q$1E`S7>&aYG}q@;-gAr~~EGmc5O4EQD;v z8ltko$d)T0bm0-~*k!YMHPF*=jrksT(OxJIJlh@9-R-W<;?`VWVE?8;^0}&wK<}nL zDTZS6{-Ds6*jj`J0-?T5KR`>cG#VP_302?-Y`j~0NXb6vVCWbZv0^BwQ?X*dx;HQb zh`Pm(o>A%^VNYpm{((;(QHeG#cIuBSlrA$O6WV1My5{FP`!kC=TIc5qDwfC%E>m>; zD>&YZJz#}f>iisiK4&(VIW=bqNcjm!sWsnk+@$AyYbX(I7?oiPkJsntG`m}6TnXJ& z^j2*Zo(^QEahbc8-dl7!aI$go{MssGP|hmZodYK~|Bk`a+HiEgS9=Xt)cFg-L59JDhiF3Jn@&3NbS($*xJWehs+-Cdbb=8+52t7^Tm-Fn zWv}3_-FX%YXBVV7RBe|V4f;**VjI_-n9+BcZ_{C@-1AywJh+d(QB!nU*VRCjkIq?p zcVlU7eB&&2zSa&DbueYnpwE- ztP)p1EpLVAa_i|}`v4p^WtM{0c2SA$Z4QbWvFi=4DE;Pjyme}E^fykkTx1{hp;t`B zyn7M7&yU8oFY@H_73a=SH9x%;d=_*I?_k^jO^5pS@bWS16Ho-uub>zpL)CySCma*b zL)|@Fe?$KQ*X!#!CF^!*ZJv106<^2P@XyiO%Fdd0&ge)FyI$p+$s-EWIBjjMNksdd zk^REhp*dxArdQE6FVyE|=*2n6qnCbbmU=zeqq~vg zArCmlZc}Zv9E4*N{v#p(`4)m~eKV&y0eN=snOjYruR6#woqR&TVyf&I^WGgDU-)TYG_S z{WTi!$IOI2*BjCMJkHh?iO4g&`l#c%q}&&z->f6m?^60L3>~edlCCemeMO28Q2h^D z*Hd86%LvK&PRW$deu za$Vp4X<2l<99st0_((tcA#gmrdhTcR&%54i+OQNib*I9g0~rguL&HFn&^uixU?au7 zkAhpr&^t2GFc-$UpCjf-DF}|w-9Rn<7g|{)b(3cS#c9bQ%esO0&RKN5(pJz%Sa2PB zMV($^w^H86J2YE1NpAee_<1aGkL)+vOWuoJ=)JxY?eJiN($K?Z%d5<+Pofz_+^_cJnI3yH|`F)dg8MjuCBTmBY|>#4{tkmi8H#$Dcli6@9T3SdqqyC z`Z5^#28JK~8AW?R-aIJ+POFawUe_LaM{bDAJWYSMR92AoNQbf{^E+GT;|G)>`!?yR zeT4B6{^JQw8olHWeWwgp+#6yWcQ8hCmfziYMYMYXM|~wHym{>Nio|AjtaNlf;}ckZ z_onxfi=AVE`b>6~s!1>P#Y)0@sXtb-S}$1~H5}TOf1zp!wD3y#bFscz5*3mr1n;6)6wY?#5gbKXVj*x`R0~E=fc+H!c-I!_E}2Gbsy08=Iib z_&sRbZ+vD*y0kb0i^BcOj|)Aqe7B63I@pR5X@`eLza?i*gTJw|W`}G{C!oF9VCJg% z-B!WTP?pj8n~cumyyKiHr-Fx|?$zs}?n-CeUs+4-kN zJ9EtZj9_4}k=uZ9D!Bv9Q_HpSX`W$M#Yd&FMrrJIQdBbw&TnRi z-44uzCNevc%|(i&slilJKR26NB<)lWH2k0beA!k)NA*Ek7yB<~|5h_b_<;B&kWR=u z-hobSyJ^`XWy6~pxcw94!VBQf*J;PiU_HLe3!p3SrG?Y@UZaT&ng5Ivc-+ z{6HVpduUnYdzhFVJ-7YO3jIR+y$XWB?#&n0?MStMh1EWdM@}`qF19|^qYI z8TpNjI9VHpK^S5Yvm}qNbLgsOXq)vh5O}rmVS2G5wmNsYB79fGzGj82?ZcwatFYD? zH8}&&1@fRaLcQ%1*c{tMAW{p~<9|0(-3K~_jk-D8h<=zz^k*7BBT-y0MZJIJ$j|PV6vdm9Yj_X=+z$I&7UQ`6e=i2 z666Z(QcY_&9f|fk!n2_)!@2y4uQ(OCflRJqpSs<12@O(d|Fu+0nyc7jMSF=J?Vkcf z6795N-NBekhlCq7rVHTAmqW%>35AAB)LkKiOM^I7V|ty?9-72~xkB$Uk!Szfs8hdc zf1C>&V-c6NKDjq6^65=N1yq4ji0v^ z?E&Kt_XrL#%$xNybx>9F#=#)+w1>Z=;(Ox$e^)Zq$SC`(?rp^czc16(6?YdiwF(X} zF}ZOb)`tU;qnpd({@<%gB1a1%qb1sN+40R8u&i>q=(>(@$#p7~B^5CAed_mEbeFL8 zB9Qy6UZ~c?7%0mW+vQfX46|hRk;9SiVN#F&7^)s>d+IHYc5z?h{e{86K5hGrLS=9T z{*Wp9YQoixbWVgv3&Z-jR`(<^Defl4idyJaamUi)R_F^oM4Ctkzd~Pq&20)`RF5n4 zEOkeg;Zu^(L){|kb#%{nPg6f0^UM21_2o0a{E}wOgf8Kx#JE=?%RMUss2(@~MW-1p zm@16aA>uzFG+_B?30%JD?!3T>O@^KwyJ__*r$~ywL_K`M2Fq3i9mP`=9Pl;|%mDFK z`mL*L^pjjSU?d%V37l;14xJKE;_iqDxn5<{;OO$iD{}F8$Yx#bl_(=VPwvDnI9E(4 z5y_26d&Ob#Z2~FnDR>!k?eZgH7%KEK>JRZHIf1T*iF$9rYp#QAN(G($8YjSKiFnnF z=+fGXTpf@R>`;Ld4byoOIWk&+o$jo4aqmLevtHGnKHdNMqJx3Zz~){m*dK_DHeNtJ zdGpN7Q4sO;djk<;b0&rRGsJhnI-P6632|;DSD&0fxwk;B^;Y90r~|6~ zaL$WyDYV($>h%RVu{ZtJ!hN8;Z}XD{J^lYQW_il~);utiRl``c%OL2l!q=;Pz6qqp zst?Ei{V+_R4}Kuml4Em_ovTf+st#gh3pqgi&0)kD-Ar0OxC(mUeS$_bInbP$=XRYY zm{ZWBbM)f)n=sfa=+!&5r#tmC+S6yEomq%jyR@gfSRrD1>_HXE@wDx;#p9kzNtUkzrT{{I9s1vmxI~&kEXr1PQd~>6yQp)<>$oU{t zgR3_)kBumLANK01=*Hc0JVXXuT{x`+C(sPh`>^$k3~c4++^0D$SF-d-s6f_my(~nuMOu^^ILw?qd8qbuzUS)v zbw+o{BO6@Y&whT2D6v1zeO5pDk}Q9H3S_nGwK}$@Ae1yDx3jLeE{3Zkh;J2g6LP^E zQXg4ztiH?;qRu0C_ei@nt>|xbz|W9dJ*~Wh=^)&6#ku0#+pbG%As-@7Z%x4w?8&|Q zESEl8m{$kGcWQ0Ro$+-r6iVRy)cm2dKcmxd=`RcQ3&{q;hC6@bf(EFI&MjkSD1(}c zT#$%B7ka9Uho$$SK{l9ej{X!P zzt`p`SnLF)*d*+eWsm4L=IB*3V&y;7%kI#F;TTMx@^)c-Jz+Dxz8ecYrft8O=>mFa zx}diPOv8O`qT`OHzsq;%{tO-d(y(w5KBLdii|+b^>(%bi9_CMC2}_5$o^YM$nx8Lx zhPZzbON89kUdE{kAIjmJiMpXIQi}s4LLl5)>CkwCrz??4UfIY?|+*}T} zJWL7BlDHqNnRnUhpD^cRp=b2aPq_GpI<%J@iix1L;X+L~2x7kt-39x`PXpZd(ZVak zZPakI)8j%zP4Z}MK_^!+D_^cNeiL*cTpZNy+=UX0SANNqp?e>;GR@_IRQ-U=`w^G; zd)TLb4?}v(6^D)bNga;@P209#x|dL8DJ; z&++%vLh(-f1Urk9Z6)+wVMJCx$*wLDFk>E*01S}=4s4$BW<|R~$Ldh0kS{nO5~B-Y za!fCO5;W>B$8&FY?T-5|t&5dp;37Blig@^Vh0O@rO$ZN{n_b4v-Oo%px0{jXN7)(AznX<-iSKtx$zer#3sLel)aD5x^ad+q|Sqw|Ka$$Q9v!8 zS0?=L-$h3X8?KJK<1#t*AvWnm*z18x=QmM!W9bV7o9fm`}GdUFAB{1v2g_jps2jj zvw52gI_Y5i&*5g6{GbpoFUbt(3g$Y`%>X~BcGXNoLnX`;5kiVqSxhm@y0ceDlF|)puHAXgj-{|In;5rG2&WxnJkb6whsi`83@+4-)9j zYH$#BSNwK2qRG(>9>)@3K+_Sy;rZjOkY9PTahQB$+ik8drY;OKZ%fC<@kj=ntC2pJnCF>g5~Xc-E|=PTlbnN@GqQ!jEGNYEABwQ zb+7$h^z3MO_BQ8r8Ih}_Xa5lX)??41Rr2Vu%+xs=a~UH5b&o|3*4GN=M~>(y?r} z_H?!H=1Sw*Y87KGjN>=*nH(MXd$6Jpu5uLZHU8(pQBm88ZJiDFtldkkFZ3~x03w(f ziss60;c(=kGdX`l(cY^Z?5@|#AMMdjU|QTiZfO1n2MCH3gGWzGB0O7au-Jx)H^GzEZ(5+2pJ_S!i3kf&mY(~R` zEeFHd@b$L56?qlD((<8Fl`Fiieg-I9<#?fq+T+T8-6;P8Emx$+1c<3GBjcFZt0Y$7 z8564!8&^)MD{74|p*|AbGlLOTtQ8Bk{^k|3bvbM~qv~%37_F(T_wo~Od4^R8<-E#K zp`SD+#@~VanAKZ?Ju$(B5s-TH7|HUrtw?_@S`OZ_SMVxDo2fRSXZYHJejd4 z1o*aQ>UFY-bcBm)^g>D&tV+};Hp?({3j_{B`jM<{E46XkNK{Hc^Ovtk)k%GFeCt_M zbzO6VSK42DMMbyxhH@B>d_w8!C@5KS8gP>Df>@SSbA>U}gfj^x^|61FDTl3-B{o@H z6`gTLCZIJruGyeccBnIKA$$+@USY-5-ysv!Sb<<8ZLM4ThbUXhBAUf*2w2%_wJlc@ z*0;+#0~;vsYg-;CtZ$VDrgwke5oC#PF>fyZ=x`!DJwEq8NOBYqe%@VW{9Z7=RmyiS zXqQ`-qyM&|#2n??v$0U@20Z5aG&3c_P6~BMAw(6(A=t9W5>WX!y_IN_nyQR{AVasR zRch?s+9W^x2Z%!QCZWr7IKtBtZQms+TIcy)l~G4Qa&&K%DEY6b1Df)pR0&2U{P{$i zoUB#GY;q?cizPf$mGpIQl_dGExz3Y#i3z$@(&az9k}VxtYzyCswqE{L87FU&@KF{1 zHDT0Gy0=P_{1@HXCqLa=C0+gthl&zSJAWm?b(iZ~`}jo*w95D)CAGG#l7Kd-CosI} zy+oU&RvBL>$?SQz%1@+%PS}waDxUI%uT88AR~h#RFzYr{8FyHal!Wc)W{p%ClcoKwQX~-`=C z8ddp}|72|5k+D%t5utA%;IH)PVfiw96!Lvvm>1#AR*x==&uwDX(&85t1X6@qYrZmjFB$7RLu4-MK$lVSGOPV|-lu}$ z#nGJ}nWiYgB<3`_*G=7_ZJ z_TU#(C^Miv_(>JYnyWoHosibn5wHFOYGWv48c%*&G{_t;Tt@$q-B$C-B#aK{uFdRn z7v=@Ewwp3kVpZH5zqkJ~Uu6Z^K1DWRDSM(Hs*FW>^R?$RYDIc4wJwobtL#c0R&HNf z?zWrUDtm@xpEf4@tDiC}PiDVvK2T()vJa9WRr~+^$n06E?44t>ujQ-0Rnak4pYI|j zx+ljZM?UVrWqf3CYB?hFg_hVkk)>5@gdhVz17b*j{SGRvG1k%-V&uqXW*|&9r$+lT zq^4aGsBhVEZteCQXcrOwkJdaw7&%#)0Ego$x{)4LveXz)X0%_fj zA5h_Q{QH1^oz|~}<=@NvvyWAQr`l5k>+TwLl!mX=x6K75K$xTdeUMPxy$uQ9q^OY@ z@Px+&cCG(Fp#+|go0cfgeAjoiR)5%OuC+0iHC+OD!W3X4&&<( zZD8~~{;FDEk<57U*=4(%JLO1Pc04pNnouCNZ^j*W8a|`Xt0OV8DLyYdIy`RuDv)=} zZ@B+9OMH(Y+YBB{1xHgs@5*F`{8Vs5RWf#VDt19CcxNj3L#eE8N02r@$G>a&H;sRO z{*B|`+2d1uH}Y%n`vLz<{BX;J@;_a&$Qk|`gsXm0ynM9&iLFkDF*;36GYBLRDI4Wi zD2i$^Sz-KoBl!^g;c2Yv$AADq&D(`S3y7HJtP@oobC$2lcwvK?yfc-YkxVuTbc^r= zo=Q>Z^KcI?9lXA9XYi`^vxkbqjwW{9i8Sj8XTQ)#ZT(l*MH?46HWeWRGCpq(9Z=@S zZm5ecSu}3N@>`efeqj$8+ofpTxROPyoW>2b4{$2coMGB?^VT5E-FQ*+mpo_QPb5|) zR>`IAbEjo4_%H|AIIek-N3LA`*B6aJ+4N#ev#`;tvNc&FSkY~;#J#<#lh2S-0>UTR-WtZJmI5yR{TZ} ziO93`61e80dJRrQT_wH>RUQ0q!<)?gufp}N@x^cSnr)qA8&g|Q_z}3S@f&@v5-$cq zs2xgmus318!P_j!lNxhVHOlU+%4u6}p;xNb-1v=tv)1pXQm-SC+Tw7)sR!0(Nv^9V z$Ls|)8(&Lh)yOIrs2g*wPF9;~Lq{&{2wF%m$5-Jm&&J;*NSD@0Ai8-(X1Dfm24N7= za!_j>Vk};gSo8`yk$pe>Ya;X|+hX1z+?*k zlm2P}YAxjhtjtx}704xxyK+;5Pc~uS$=;<;QU$zZUxlR(3JhWmA!A!;7YHBFm*f^K z@q_0A#;$rmG9Dw_DB=!dTr%5JdPxpt3rb*uP#LWb82y*p(_kCLYu4Z&+v5Vzq7oK6~ZYT0e0S0~9ieAWXE@n4r7T7vHF+{NM2v-I(i$-;)6J+Wl*Ob|Qvx>?=o+(ko67@w@)feNdw8GckHC_{rbiF0jrt4$yn5(jAZ5?C8Ntx@=8X3CmH>D zeTx3FRYyxQHV@s5Wah6XqsPJLGS~aq!DGD8bU0u%Grq6A8XI8SX77Of&lDy zVSO$-y*ncuf?$l-x>wz8{H>zeF-(h0uOEOEVF5P3tjLkribY1{Rcc}-2a*ff_;`uD zBBQqPa!>SSgmvB*D!2`4&wWrY>_*M!tc$H*q)je$YrbM&`g*m7qtifd>@-Oku!lqEMB}Q>CuDB28X!Y%n@-3)c;El;}@< zX?|gRaX#H!kY8wZEVdxOLcW8>HRr)ITh&~qYW{Hg7*H^aB+};A0^A zA9)HQ4365rDC?oJFM4LVR&uVu1sF$|OZz*I=X7OXZTw6Qsr~r6={)W;I;;;gi9N=T ztq+&+eL}nh)>WE$^|{iXS6+#Zn+N*n zux(P0OktcwGM6r@zXO~?-R}{M#Pg`f_zo8W#@76*h*#WX#E7Y{Cu2o=zO}@PKE$3J z{bha7SYX0%xmiv>se?Km07P%8vBalQ_loWlEWU{Na0- z2^Y35w!BQ6T;lG|l3XO-N#gA*h+^euK13#htp3dJn!#DIk_GMW1D&i1HR8ZiznUhi z>UWq8i$8s2dkRwe&mMFA77DDLQa?%tS-Hlq)b@durm7*0>qLI>pW@|!!Ntpn=xnrM z_fg{Pd>8u=0vUF|r2>JM!IW&xl9D!0^J)%AEWg@h;C9suBifw@A*@5{g zfGR=4;aD@iez8FJ1q#TJkGR)dR9{a_Wfd+o4j4xfrzi~&l*xD$x2@zVyOvMbfvc_R zR%U9ERSvV+ zd(5)5>7&ibc2gJFfhks-w-(=A8ZK)d$(vVtbNEsKt@qz6u+#jNW12r5@@GUAkU>9C z-%dmIQliTE1I+CdjFKrl&CFy-CaJ#45Cy+fCSU>=B@=B>CfNbag6ZBb-}lw^cZX}5 zN5X5rbXWM(%_Cp=>dJe=p5~D?;jiA;f2Udh9l%*H30201G4-3tvm{x{R~fgCNv_`_ zDbhy&SueZ?sO0nLa*2wb z*7l7i=5M@B)*K-Hq4PbD3#~%oqscdJ_V^}{Pyu-dVaq?0Wb)Irwi`&oWQA9n+m?7b z-$#kD^Oq< zt?UJFuuu@^G6O{EKI9D?S)X69JJ7TKaBvFJi<;{F_gVFP zoqAH!$U>09k5}(hy0}ic7Sz;kYx1%hixT;T`pLP45yj&aY}4VTFFf;~?09V@)i&rg zcA!=QVsMC-cVOPA*3zT!x#Sjd-)d*N%?{kI0)g>b%j0IYJIJ=oPF-#XR+!lqxg+<} z`kmyt%TD@|9r&`9#}lc+#lyVh2rUVwjfgoqlur&#u^NJNHYF6+#U$fY;QnErTYhfd zq(Bc|P(s+I?aGUOn5{iS&Ul0uj$`jl$gi`&;Uz`VHy}`6nlW# z7nR(%uLvs69Vss~kz-B}!6M z^kQ?@B>Gacq|5}P6r^($tFus@nrZ}8&(!?QrAsGjn|6knwhpc33MVAP*71<*8QK;< zA4v7&c-by2KK&a8VNn~zi@{tpMTb%4!wM3%MS~%>p}(gN;UvjLwzl5U#8v_0HH_mk zi;E^)2=pq@TOv(+@IU0UdQghIK+rBSY!s)8{G;S)7;a9OMgCqD8IU3m5==zk&74wA z8CVXR?Sxk|4Vy=#z-7@Vn2B;se|Ez(g_FQLo4tXNO>Wn4|D?b> zn>>Lx2p{RszyeeiloF8(>tc_W(Dl05PI(X0Iu`5OnKU)Vg%?8H9aF*a1XEK+&6isJ zO~iyJTHcCe*L%Lo#GKg7uAbPuZc2SVpEX7uz9nA*(E@sWes;8P_)Cv9{|x-(Np`o&9+@i94O8l8t3tP>7i#clY?@MkuSzH$lYo1rDfK&4!i=?z49!1#-Q1mRVSF9P9e%+a#~XSArWaO!qwJH6Oh z{yaKzo%W#6VveQ3_`LUM0!x&)k_uB<5eQ zMc;Kr-9%|ZQ*0h?Rr{+egCUo_Op7KR*M7r!IJm;zorrd-sl*#%( ziDrODeMfsHbKxfW60+r4Q5pSSD!3rpOqdCo`ep^QE3AHQ!~!K!uRQ0ccE6BxmwHf?VL)ym>yUL3>~^G4ar;3R)wtJKq@8vK?QkK2;9M^Y)R>Gah}P zZ2HxwjB$)RW$)?JW*Gdc8mZ$y)@SkeSL>$ZmO;!%j~aa-BE69{*t8s_hJJd#{8!W_ zr3HDE>ywOvpf!_8d>3oOQxd!OB-!HgGT4&VPaS#_zg=#Swb_3T+ht$`pBf*%4I%kalWY|2O5ZdSM`OAUjwV zZ5W0eJcc%`7U~4F;|(euwsE-1EU-}`%13X~cEUG-ZGo{J7QUzYr$*0wD&p66)+TOJ z^9O%QoVJjz!*H-TaO3k{t<%2R!S@H+uRCO9k3{~DRJrb2CM@b#kx4f-eeqKftwa^? zcS7NcPytvKx>X6TDfC;L@h;5VI_*=P|8RQG0{E?=!QvpY6aiiffzJ@OSi}7*#N2Ao zDGOx~phbFpwMoxM&m_VVaSfT-mHnyGB^WoK>dG!G#kw!@E3vJ>_J9nq*;5&04xQ9y zcHr(eyOhcSZa8hErqYqCWRikP09JECdr)|0%&S<#(de*i{il$_Z@3JheS0DQ>HCGL zl<~n2^nL7sAN+4zWVp_DWphG9z3IQaeK$vaS9Yi%G+gQ$#CERb;KuPwWK9qrdJ{`M zWm)qnvp?-WZVpNg-`uv~ zbMGvnCvZRMdaBXx?3G`wOMTXLXBVcv>gRG!BqE26x4p@e!lW4#J?6*$v)pvbC>$Mu zb?6Of85j`SgTe|gIvroGwDA51A127}0`gaOorYv77AOZwq96JqnF#+vztHyqF$%h) zzhZ05R&0NpP@^RfN|j_vg~%kbfkiioxO|CTAW3Tp9;{_?rV9hP@SMgt$Lxm@hU z?3w}}tTnr@_J5fJ3K{B4^|rz|F@e6S{(0EpSfH8Du#9SIMZW>=_DSuQOj&X=JBQ!q zf7aXMagXEeWy8z^xxb+z`00r~lv$r6Q@P39yE@m8U%`CpG|713Le;bB*%X+xcdUaa z0HAP{hNQM7PVW$NZ&bIB@EVrVK0sh8v6p_e!(39g_7Ltg!^?XBZK4I*;{4#-FmVMq zC%_3D0+DP6cjV9Jb8-G`S&D0}6<`I#HF*ME%;a7wAWdaYwKmmvy4I@D3xF!J#?AGo zIG>H{OyZqw1H+wBRiOS(MP?K-d1yGjxWcdWHwY*bdj+xq(DtXg^7)7USXVAcc7>y1 zW~bbViaM;DQM>PIq|u$mLuV6#&PzLnjwDa6wD~L$>`mcV#(rWMLv7C)&O`OKr4#8}PNu`!Lk5z}9NS7p=l^31XaGPK$g znP3dDTcbUP28(eAvzK3UGFb2qED-LrQmB*x5(=PTHy#6qMT-Z@;gq`P=&v7o?|Gqk z;X4()tiCk92re5u^gbs+d|raCcJL!(iLrXz{XH@`U;wjY$f})O-eY{{O0`Ik<6{1o zC3?-uM`XFzDCXX-b08d6cF&f5ZoR02Qi1W~=^V~Sq~BQA=eCOy^rKWxi{;*;)9FJf z?R0S2)VmJ#xw-`;fv3}$##p-l!vPh>_=b9nVoXwGq|ZltsPAq5XG{6lRyFC%J81Wf zhO^ppp|cYmta9jxH|{(3*0N)DoQicZ_u7&-?mOFjRutCOwDfv+$4UZ2YmB1P zVj_KN2i7SoJDl`Gd#*!!t|xlDNt84`Awz=$z2`dg-b3#d^tN+#Z))Bp_wb?jL`I|q z5w8aZ*A^hF6j7k#5Dxc7#s5gR{@V1eL%+d^Q;F`5*2TOPBw%H}=2xh5Q0mn6l6}pC zP#&Fq23i#GyX?hF+~7 zfw+-7B*1NzjOhE;7HB`T>9}&anP`)=8l#K^>g-lorI2bb(e{W+y_VEO+hc^g zw@QrsS7Z2z6*cdzk|6&@cYaqwVOaU;;6R1~(N+2p%f3tBD%lh~ujZWxkEFqGAVI;S zYE*SUq3WKmEV7CcW^WJu62tzB^{tYoDr`!tFwrK_HO9SmU8)A^8Z(-&yds=1cze;E z3b~PS7GjZ;HK{ZAMQ-FWy8DeUvB_bar#<`twdmhyrTUhGjT80lqC01VVbAqvwm*SB zRz>_9QW-@Kn4H3)l1)vHJ29B}ibR|F7r^f!qhODW|045$yHqJsx4n(oMn38NS^8F~ zoP2_K@->lxp*yZbXf+o9KNYJSh*hArZmo4MBgY-az&xp3oq)bMMi2eh^k zJol-d#&*j53V)s+=UP3uKzdLc|Ax#VK>IOsyg#52V8&I{68k-gy($e)i=|%{o>GNh zGufUNqQWIs6VuRMlqO{CsO%YX*;qo&4J@5S?J(hxX6xgU>-Iy# z2qjGdF70fS4OI3|(FYI}1h&pEh@npe@7!{1>P!40SiMZIxHJ0hA7V@VkSIPJ;oeD` z4#VM4wm+J05~6-zjdsoAd_Q`XXeDOXX^qgMuPw;WuP}aanVNv)@t-Eb8J;St0sac( zy=$E^GZj>3dsuCW)gJA9bI>GN z=`_pZW|-+gAdWA|Gs^jmF3HWPQThV30Wq37>`i=d=G@F$uSu%q=e4ARws?zPj&2c~kijo-32e8Eixy~ItxpK5TMH)G4*$cZj@7OU7A z2f_b$GiViA2t8%xl9&Wt|Kl)qu1GU%;D0{;Q>|QPYBcf;+jd8d3 zpd9q*J@2^Kj~OW5V`XJWE;R31I6mX175DzVYi~hkc)E(T+!PMIzofnCx0m@+>Dzda zCJUxg^>BX)H8FL}+uD+$_s`F%^0j95=UO@S?j`tm?EIa3Ta(mEN=8v)KF+h&!E+lu zK2J_=+lP?-yW=y!d@cWO=igHP^Y`iovl1c=`W<#8SPeAInI5@PO&Vo?(=^wU z7rvlrlgF6{hqeR8i?*pB4uZa>g5j9x>a4gq@fy=i)RTE8$PnyESn8Jl1pj9|n{h+n z!5Li?=Op`H$fMiHRj!Z?b5EMDX*>UbsC#+!E-~Ibz0oz)8?0D`)dO+^L;2UI5b+cE z40Nt@mvuQlSz*2fbHIqJ%Ml9E_N1o$=7Am>6n`Ssqc7F#_}DHVmczA)SjV<6Zb^hU z((x}fC4!MAp% zhC;9|4)*rNzm|9XOVqXY6LmYbO~zXE^1%MJm$W{TIU8t-gDP#!ulqf%FRGXztd>$U zvbk%EigLtTB(G4a#wrsn);R?HOv9nz1_x~HaQ;xx)EvJc+Mdf^hHMM!WZCgH!Yc4d z3ZI{c6;@%0wxSAbL?oofM*dU|6;pMdk|2~D8&TJ+3q2wBeDwJEdJU)VoW--nsZ z?fANgzNbas)nHCPB6E6iA)?@IRxktqgydQlY)NeVA(IsO&XxzLzG!bNjQV>jf67@y9gH%b`f?HzLc;#+L;M2uz6%RHEwEO zK|>B<+2ceaE$m7QXC%YHWJuu?a9dGh zj6eb=@&6I!Cn5gU(DI@7*k7)y!hu#<}?Ge&k&oF z>T<3L88=rpOfc%mNc(bO`#~~Ds|>Hh!h7cL`SqFlS1>}pD-;qdZE}lfTGeuR zW&V&TeT1`1SsAnJu899sW`4m*dp*jg?rrs66r6Xx8kygwmWb4XVf6Ey-pN*h-#ktt z`1oei*Ox4)#kzMcHfpgYWzj^CCr;KaK!_D93F;*aWRRMdOEh6p>u7-|t~W_N{gS>{;=)>~iptIH++9Xmc##q(@V zje)>4$t|ZxQ`lWv&J@-$fU-FUZ=mtsuEc6<@d9(gWdb89YXqHmp413T7vDSZfd$*hL zEmiO>(Oab$t7w7VBt<`p300@vmSk#o9#_n%p9yn{co}T<#_|@V)q-rO)WFK zy&KK;7O3`aNVYdi-y!X>v0p3th>6YXuWV+=oeK*zK1CSSNz0zdwvg3!XBB}JhACvx*R66>C3gBWzp9pW?7Mf(<0xQ>?Pm@EV zZ=`mmRFA3OE-!D#)B1n8Ja0|RLAh+p5r)|k>HLhKtR!uV&=6ehe6SxUnu}>?6H&2j zSk8W4e_(~lgl*ohVqLtaDO9GIjc9GnvIwmdkvK=z2z&Z5C6n@9C;}jA{hZEq{3BVs zNVRX-Wz4KpEZi~0V%fBOl|F%jN~V;){NMX=NQf(wM_2w2>3B@`|BkWo$^PFtHa^+^yT`^S`(HmczRO z7DqE|`RQjY~&nS?FaW=hzCtx&=iY_lY6!8TjM7Ho4R zY{3@%bKuD{*V|OqjT29CYQ1^&;0#t9$D6&{Qt%g=`L9v=r~g)4@NJxYbH#>C=H zJY5WFU4~0pw!dP1SuUH|bvk|u7jB4U#IzM!+hnb+*lDSK7iZW3UL!yeyj|*wO|ck= zT(~X6I130Hew%(W+w|$Jr)0i04f8iPJ`Hj^|8%pzx$I{_^t4oGHNEK-$?sG*IkQl5 z{)(oAVkBx?S|zATxOsle+ORV9c{sl1C0DSPrM2NSnGac+@-bCDWZB8bCGsI_O+GG_ z4_T=4ksE`XG4E1N)e6Zce{$u|RQZ!rk>I7g3yk0VT#h}{jYe9>#^QtF!27(+=%5UT zP()uaQB!CR$2I0~T&Xt;^}_6I7OEr$6wN|6#j@L_kX(OFdmwwvEqpNEmJb|hMBB23 zGSZNnhW^fMC~P)#pV?5IIqoZ>4SA06tjBskMW(?)b;m;AlEx&*a+2qOY_B?ukmf6dHkj`rOdZ9_G%`zu|O)>4WB11XLA!>z#*F&ymGa3&iWAB&OnAKlN z^&TuT)LC&M4*Rv|7Wx@^?)Rnwz(>HR=$$lrB_l zM4#zzl0RcJqRINC%4*-1Q`1@SldMnl*w4jbdisVxk-q6qq&IzRy597ZO0)Z?Hwi~u zra`j(NhqZ|;GZ-tP$}pTs#!vM^MLpNqwQVbqpGgO|IC9hkiZ!TwzaJ-wzUZY#XM{h9)<9z z2BkG9)f0!?2Bi>Qng4g~eI^gU+u!GRe}8mx_St7Y)?Rz6_oi%ANrGd^T=L3yIIk_Di6q%!+q z29N{Bf$8Fwa5{yczZ+T(>_8-v+2#VX?rvHD6?o=xyC0d_=UMk@ZUze(R=0`xE zv*$QFUH!`@aBH;3e1j{Me#w&VEN-)d@>irS8gKoMZz!JHtL}y~-f4Z|P;x;^c`#$9 z54j&*oI!Jw-Xm&%Z}~#hnr{5Eet83#S8^Rl1l7_w#b_s7&^POY~lFXp7h-rUbZND3{xj_^^yuJ2uGu2_s7s_(Xpjn4rc} z8fUxqv*9Z|7a5OoI%`#Flwj5#=H1u2gKv!6~e-?rrSvvH(l>?u3 zr^zTs{I8Nb%r25YX`OY+a@+elk$(HysG@HIe@3EL@q6}*q308uNR?uKWHhZ6|G;LW zyk!<+elk>3+5%q(U1v%-p|lI%H25^a>fTt>?`ZV@Og$HB}|Ya`klCgE8;zOzvv=YK>DZ7SDl&a0J9c zuQL9`N<|K&kT>|a#=U1rnpFdEx+Hc`(GZtgZ?i$GL*l{9+!@lVGqgz{wHMgp^FC8ZMig6TrX%52C_Y%3%dRZMuTM6 z$el!Kt8V3W(F98S(F;#F`GVTP|-~F-5saq|S z#QiWkt*0h}!?QpUK!Z1&Q_w4_Aj$OT56=sP^hEGMQ+2Zx9$9@e5DcT)8b@W()v`S- z);%qY(>b|gtY4i$M4Z_{1wt)jiOr3y7KzJToyE5YBdgc(Vte;kE#0nxo1Ryk_bqYN$(a zI(&2$A}r`C?m_EyPUlT8DJWP-6M~;jHsbc744$8zCj%sZN6C`m9cdLc3(~j3)Q0X^PFYzQrVPw+c2%@CgfjwV; z6Ad>mEw;!c%Cvox?;Rum6lSCQct@JF+Ad8>S=XrvJo}yNR9aW3V~eDbJMhvGX>T;Q z4Co?0n=Il0?WPI558;uO^6th`!$Nod+y3z{k zakb~^i8M;Au>Q5Aq10eP)r!;dp2^Dhe|d$q!cO~~6l^{x^{5uAyc$YZM`@y2H}HA# z#oRfajgn6O(auPtG{saIB8}3RP9+$~XZo@|^qPE62|O9kta_dfs<6iIPb8??rK_%b zT}A$_hYqw<@I!*b9VqfmofILx$Tc&+l)59|>XpArf{A=ffEz-vp8uKt?aAM0cuoLS zJ?dF9-l_(5%1U5p{%2drp8w(H!}I_1Bj*37_@L&0dsfHh6Q2Mg1av7O;GjnZ5=5qT zMb=CKpt=(>&jc<#R=6BP;nT$MKWE23fUcD$3khVZpVawVO%6=+H!`sa4aeE>M@JIyDiXJVDe@dH<}+lPD?gtLH0E za%u_=sj5;Q4F03Wq+4eDmqBID9_y!A10vI0BSbmuVm#F4LAX(vt~#v-<^^v`ze;~< z`$Zwm0&0-`CGqbUd8!^DBFbI4V9jU{;tp+*88&6vE&mrYvYwE&Dcnx$S5E`y03&}4 z=aGYp%r!Dw`_{9bam<6cdxWY`G1Ax^?##e30Dk(46Jil!tjm zc9|oKH~q47V%0NCL*3va1>`Pi*{xEuUO-shvwJg1LVENig0PJ$>47oH)u_(OH}9#p;8qZ)Hp_9 zpN2PiF5+%k>`}5$YkVB{t7)0Xd`d8e4UaN6y{`7e7$fvJ@(hO5=FSpxbtYePOE`;I z65}lF*SArnoXSbhElD&<&P0=>uBPQq)N-poVKiJ!pmxh0#3BOkN3Jjnt6xN5-bpaJM!K!`MCy`DG^D7OTk}is ze_$PHQ=^6EN|K7uz!;-Z{0L#mT0JAfD-PCk?QTyAUaoVSJM*nukZJ*M4@rwc2~YI_ z-D%F?)j5fE$?(NEquFUq)JcD=le()9>d)@r=R#ZDRO(*#DREmb^}B;Q%iA=DoTBTY zbZ0V4sz~`Ni?LdmomR0XGdo7Y_pC1ArgPxiJ_5ei6nx*%NyiSsH@aBo$YS$#+PA43 zz}(db1VJ`_oHp=R>NL&CG|BcF4RJx8rWy^INw{|b zFyL45Q6ptI-z)l)*pq9fx=#)H-|lAgZ&1NsNw8l9e@u|R`e|Nh^_5ww2r%KDaIDEH<^KU+@^l+sWgKBU^ z)!%83U|MKP3VFsXzA~OQ&6Rw0EjHp8O&b%Oq`x|scm`X-BQuU&>f!#qQ87!Z@UKEq zIb6kt&!bH*U>=K)n$0}2yJAHNSL^ZP#|o>RsN5oIi5C1Ksa{d3%$Inu99DNwWbdBo zYD3$1T#Uscn&a2|p-!2Qrt?HxOInL@KU!TEl`@l#P3jRxVo$zz|Bv6fxon3dI2O2w zO&%HeC5d0kTtji#iF-$%2GH}PviG}C&RDSFP?nBg>!w$Qbzv!{=1=wgdem4|wLZK$ z1kq~=kV>5;m9fWhXGFneP56>z#DpygHT}H^V{`F+lY#piTeT_+?a=F3f~oRR+i~Su zLToUna9NH{Y5nIj2q36mWwZ0Mb#s=dq}-qiD(^(iQY$NHQEI1T!rY(M=P8D@vdP+2 z`?Nf6)PGOLiD>PN`X?obYQ;KZiVREO-`Gdcx)ZYp=|U?|g7>_Lreq0;lbRBb@cjxR zP^l!-~-XDy7UnFZ;wb|>-&j@eTtIo>_4wJKt7khnq4MJ;g(&jJ%)#(Duw)7KYhuuyydyU)cJjnlY8U+;&gjfU%FMwO5BJw{1M3le zmsafwZ!kdSah$9XRuE5{mKywLUOc=YG2dOl)noO9Ma)~m9)1DWy526!o!0j~Y5hi% zOV&RHZr4tuc{g9gHDp>>_(CqWlUo>!=B?p^gxM+=G8DMNx4T{QPfP8;e!#w@Y&1SO zpOj<~s~OpXRwaCYxm~K)QtVTISBk}y7(tem+B6SRY#$oDZ6d{P3$>2r%@!X~U6*Q` zIGH+(df2Q~A#7TShtKnlczC)v!+T84dSmq|=lCM~HTY$Ff{T}%-xs!Swr7o<=1yAw zlpkw%#|v~?SMZ;7S{Ik6C)2v7IoTOkyT6~qw{ZLtoz@`-D`mEGF1b#BWfp+t{6Z_Y z2tCv)1S<2Cog?t!vBH2GAN&G@5;tObjuKLSj-xoHTIMj0qK^8Oz%|p5*$YXBgpcSw zEVSoQM~U^S(&(fkwxcZ(kv+ErHAyA`>-!!hwI{tpWz=pdp@(vVX|W3KYdLB?z~~W? z{=uY7UtIS;%k;92RWf}W0lQN`$ee092zZ+rE&8l zN7QH`e3YoqElP>Y{*(HO2VX0Y{HilZ)R*n3oz^8Sf}$2$$aV>CBozU$UXczh7pwks zjq0jr7?zy>?SdO@R>A2K)biI&65OX^KT8n#YwPV9-X4A*@^jyj;k}sO4g5xsyYLS= z>@Vl;Wi<)mqoY#$N^(WaO){se?V+#P@+Mb2aM|PB)3K%Qk~>SS->Wk(>FNq)ecz)t zN|??B|HV@47y2_<zCR8<8%+aGycWe*Oasv$UIh5?F?R4D& z^#C@ZjDsO~lgvXFY#T)jLtp>lS+xl{mf%L1W>S2(!f0Nd3p}^1p26Q06RYk3;&SWh zt*Sw#72HR;(;5foONt_Tp66ynws$g#mKj?F0_K@_*Qgft&81pfg5a{b^iu0tWEz>m zzQ70B0U0e<(w?EaH*mM35*jx7BvMXRV`Prof2&Nm07Y# z49GKmYBC(!x{*bM$TWQ&1nlxYe{OjbtJbOVenxrpi`raxCj?NU8$U~C`7FYiv>?Ez zv*eUJ*ff(*_o!S+Ii(!kio}Y3r!J9{Q@l2Y{z1hi<&+PYKR=fhdiSnJO488djpJ8uo5aoDQ6&Jrz zG9sH0^^aPX!qcrpEtIHJT0o1Z$+(=TBrp%0-D}i8Dx%2>?HGQL*w($KFLOw{Lc?mJjmp z`0DE=#GZWM(nQlVx~bfHC#qf|r0OUgAjku|Dh~H@W z4fl7f!(k*6#JiI{w$_;GQi;6|w-7+ll)1P8&$xXOlLYvR3UK>(p zY&=brHJ^wP+6{Goar7xs3>!^tpcXz-;jL*K{-v_AlKbI~_w7DuZsRD2Yg^wjj>l|}BE`Ri z$UEf~$g?hUs`-e!!kWyMCObk0VH0Mf&>HxU6kv~P3kC)0RvF_XQsCuku1hP;MsdCS zYJM%}xIW!li6d6@@waC5_hJM>$6V&mQVi(GbY<4>DJXG+^;nCF z1l(?5?3*Rfm^(LqR|9ve{o1Wxvw795F3Hcdy;2@FHjgY2yv#7az~3*KbJEQf_!5xA zs-J;}`A#jqs#MN0SyiWTCn+LJx~o0=RD?u@VzS2SI(?b6Z(uW$bCwGJH^C9LDSZ(Y z=?fDd5d;PA)#xvv3I@(J@KMDiK|kC%+z*lE>1Jx=Zm--sA9)1Km?@pP_jli&;k8Um z_f+SIsXeWpO1;3+S3u43{x$nON8a@vH6sBk=K{GD^N1V_&ig&$X=>H$=oZBs?0QCIBV7INj_w z)*pc=T_{qyd*D)CE_!R$`Q9^LrQ$3^xTH_6yK(zV{>*dz&Ieli z(p_ELsKP!CGbi;cd-f@%k-M_IVlTysL9wRvnl}+MB@)QWG`X*=D|FBu!2=9VXbK|t zXJv6^#f#41g}1OEaQof~jPIP0Z-FQ3+VU}2ALQUhX!3n!}TNzJ)W5o zG|X+*T$$`C)TAPFai&U;MuLUK9>JNpILmy)`YAoMaJzbc1NItnUUr#e$yJ57S-UtsjCK zEJ-~J+a=TAO~0^HlBry8{oTYW*|tbA7rY4hkKPAubuH}t(l~iicm~Fnb*(A6 zG`r7`#_Wd;^~t^MvAS9^Dnz4wTG%b93AN>-miiC_u8Zs572Kagl+0Stq&XuieM}u0 zAWoeV2T$VaO_$&Lp;v(G+X~Sr7>tH31aT^ttnvR0`~QD+t$-yqE9E?qa#Clkzds8z z=52NDg88~u`Fs4J`ebf9{+^J>dH^@y(mmN4H^k$iM<-Otjvo}M!icBkBy!%)*@`=> zVvn$g88C(bVD~#^__}~#T0Sm=h?emE%bfVSE3(atB%#?6>gTepjJ&v8UTt7M1F)IK z`nR-4Jq09Cy#*YVktvVb*>m0=@dBYviLC%D@E6x(Y@Oho{5JuO5n<^`jD$0$0$3(@ zqG>2y9pUt;G541MKYag}9N~2Mud;CkEJ;fjgr`hR0-Rd)5)%`X_x9h=b*WW5^xJQF zTld2UGrUjnJN*E@zxhp<%K1&;cZ&E?^B40*&ap+VDxuQy@^bOxXEoAMh3xFqX@7eM zWv;OGDPs6bddH~r6`!0Q{w@Ca_HS82`Dlku=Oi|adEu4I&F#nEH#@T1c3X=at~T?{ zR%@&(vZSQM@=#n|hX`W8P*gX#wT0v8_)wdZh|0BINRlUtM(hDRVo<{M?NkM~P)gM=0esv2r= zX$kt7DoPc7Q%4S-vqzNumMU9S^ZQUs4q2zGmn|bIQstMZ^8lVs{{d-ar@squQcO5i zujw#ndClFScis3WkCgS8oO9wIcUeW|i|6M<(U1tWXtG~ag83#bn14}xvfTu!vLM1! zF3` zaaS-SRMV59TKTH9+3@3lW`|sm5-HmkDegvcEHs0MD%bgnyU-u&;V^IBy!Zt6J$G=4 zDc7CKJ)yYvv=$zx`-?e4f|>umJXhIf@>7a$`{FhrsI5t(W4mRf8=-%p_7ZDDr%`R~>b8lq+0Xfn@FJDh?y0d`(1l5u&GJi+# zQz8Is+2>{@dK=B@#q!Pp2}UIM#V{mIf z{{?2*p-@XD_yIRGX!=8tj*QkUI+CyoZ%z+6WQ;qsFR3NHBdzSP0Xtw57~5 zL^J>DQ8ZH^Q-KVWp1_R%)j(PFu`C$5OWE^(Fi_51F>0XPD*zS?fy;@GhVMXztREB1 zR+j5?a6ZM{L#P`yix8%m8bJSIv-z8Z83eHO7#Q)(f zJ3}X3!Rdlrxx*@55wN*Vl^lBkxPpgR7b&^3d|{Wc2yRV4IaR_Pn#kqm?vl95JlroV zpZ{m>HJWz;VE@w>AMvM&Y7cByC(vlPjI~2KR9hwW zQI*=OQ$IuMA!!Db?iwM{?6t163%*i-tJm;9Lzhng0QdW71n9%RC{)lFg zG2ue$@q~7+luWkJ_J*q^)U}eV+B@_w~9v9K% zV$#W=*R9j=K0HRX&XTDic*yJ#o@VY9TcN|;ek^CS=2JhFO5YpxPXpLO|54S$Lvzo$ zQ_pbcvDDeD$Kvo@^>@;@Ec74#dli_)EvgRFzgewkKZ=i$8FXjNT^k8{#;gKN7Jt!h zXN$8tmUkJ^&OJmpyUmX1Hs>DaHs@C2lIfh7GPIh-ubaC;kg)7fwqHHNT|=f zc#`S#r6OLmxkDXpB9{C$bmFv8|7nmMb>5m9{9@?D8GS2QG~aP+p(FU2(1}5#-X-7j zowpV`gBNj`iBbO%P(|}yw-&mL`u7P#0tL2Y*y)FbL2a`CiG0g-+HYWKr)HL2iW;y8 zyNe-=3rKhejFg+znRk<)Zc(4QMtnM&{B$LsBpy;KvA)HN>zMTB&Xq|jdJ;Bg6Ou;} zlCkP>&4x#jm$B+@VxfOHj?BbKjj^%13ihF0ExV0|`*83znq-prD~K-Bs-$2hT9g@atT~C6MU$N>Q`dX5(CaC=TNP!E|;67h)^AZd{ z7y<6oIP={;?e)Ew!my*pp2TR9UtXd_tsCb`;r<=2LU05faaDltV`J3`Q7!}r^qzso z2$jK3%B}y>r;qxIc&l1)p9_XvZtYZEoNgyw%8t?#mndT4@;jPrsJ$ND4MyW>kP?yp zu#^+xcX`D&rnhLrl_>c;o_@S=wCEiM`IB!)`9~U!(UI}_t@DCESNKkHVlVG>X z`5Hmvsubg&*?a&E&MNGEznC^ zk@?-&)ruj9oEW}9B=5v;A4uJm(DfwNReiq$DDmF7h0M5ljZKI9UCMa zHy=c5SV&V8BqdWMr$$mjCmkzN&4Jx`IDbvXxPI^7J;=3f@*cZ4@v3?j zI79C`b`NBC>0O(5&0TwYL+_5IOS9W%xj1;R*Ag?*DjB84y;`qYb9DEKz3;315!MRK zXB|?4*>Sv^*^m6aW6?KqO@g{FZp9_LPnp~I4#tg~7L}h5G$uF@2_E)w1y(3s%H~Y| zE^`1aIG0TwV43MU>8jb0-Nx+?B0dYhW?qg>8Os*IqZy3FZtME}bZ#+bv*~gN$p9Bl zi{E+ZmK%Y+x6D6ng#MlPVf+|e{u*0~d0qM7bXg8Aow%?~=r?55GG)cHLj#vB8LRGp zj$bum(u$?$#`0xmBT>vfbBqj*@K{&P0J|_R^@&zO)pZ?#sHz}ZKFBExZlxOJ7SNM} zXqc5=pAEjSp|ic&cZxz(HkqqJ9Zq!*2p8DK*cfcFE7P+oP@g8sxkp3bgn|ms5HVtU zl?ivK>{t7qOO}l_1saP&*L2~|i@E$Z_1v-@XP1p9aL^c)0LOtsYw+bL0|sbLEAr zrVA2)AXwGV)yAqzgu|5`f-&Wr^Skl?f+Cv@?1c6RIX*hmMsBTjjXk-r1+abVJ_qblO)ZYi< z`<_wBFJ;AqwT_*!epJTba-B)ocYG_Aqy{Ucg5ZMT!h?6|G$PvuXZATL8D<9dmVe${ zoNlfZw=$P4N~tKd8o{NjMh2;v$+5vUAgHSG=;V*>9@U-8Rd>#KK9N|$5KaN%^1FrK zSNUmu-w1v>75T(yY8=f^Z-$wm;}Sk8{B#HCQ2g{!6ad|!_nolR&`v--l=HTU*DU|* znxzIUw1V9KGLoMvlRNmS5*bbjKON?u+&ap8_wJMNF=~w$`=-rLi=3hNM)1@3V4%IB z_u!|8vfG89ZqxkqAt9QerIv#%z>W2Pf~CHzSgNu9jmZ37bN+zYE?hNIcED`kC}Qg{ zcg2Y>_l2&QygLEAJ{f1XfeYn`RK+nXV4>^tcN-xQZXhgpYw;n`aMZkRtY@GVw?u08 zMf@*gEdV>cFN5oQyR1L%h2qp!vN;oCZE@{#wYrLX5hEkTJ-#j@gpE~7G$V&&s)&{0 zvIHYLkiFk*jm+Q7{swbp(-aqy*OJ?fCf2SuE2WFkv`wp7b}!tnl!fa*avj06Pw!d| zZ_J^i(Rz_LWVx|hZ?Q$o65+|Y=vu^b@&{&dkBK-Nv|PmpVs|?PsNz>_c2ctsnb+k% z>Z*AeEYLV<{i-X3(||_*;R3S3OS*I)`{wU3p12Z5Gm7|xmsD7t-y7N`SM+ulC=nKN z13S%=&E;;hFdZ^C3-P0T)GVlu%s>1S#v5{J5eq!{LU=Y$=>D~rWUzXsG0+N#G3Rjo zrdzyEKu^<&I7bf1A@XdxjTTK-S0ACyt-l<)p5`?g-f&Y|nFoOYxf%+7HoFZz(Ykx^ z)1A^)!ESJ~fu3U3!@9}}P-Uj!=Nofwr+HGwlPDK+Xr9ZzIeRw} zRix}C$luk5XKerLi6xxaIc&YvEkgi(0c%o*h0p)`l7~bkKnX3}m)rbJr_p?2C8i>o zmA;w{OQx8+)LxeCx!JpIj2kq6+?KH?RPze0wb%v2-P!A$HbStoe;0SsVuqgf^dXP z#VROovN>y*trf!+lJ_0`Kb8+ickUICCnHn=1tq4yno z-w(Y%mcy8+V%6O~c8@Xx9-v2$sr-DSE##GrZp+NY|CrGrt3&R%cp1{N2GEeEGPq*vR0e_Ha5=v)Vm|L--LuBtte zSi+i%a}`4jOPgS9!~O#Go8C)bzwPg^EHn7h2(A^L>|&znbox3L|GPQAMKLDJHUDKF z^S_@N{S}}zR#niweX>N3<~r123a%h?`?a3>CDqRDeEh_AvT-ZzbhQilwj`T**-oLE z7HR3nzPFYtku`N77jI$8h1Z8p{R0^As(^qkHn{=b7gG!?IQ6?@_e; zRfM|Hv|ROqk^`na!)k1U3f?He9V+-42_90x%O$8qKrg|OYcB~a{ykNjIN9n5u0o%P zc%}rwTsIs8w}7y7)OM^};OIFmrOckzO&2O@kR8#fJz$ib$=>6P%N&$?r?Hc}PWJz> zCw^Ebi(iyfJV%M(3Rsr>u(Z%uPoFvFKj7vb1AqUqTz2`!sw=7F8tVl5h*B$??G$|% zFx!o!I`FD&04hihvkmA!3ya{&U<7;71Vl5D`f?hf^ylIF4L z^HXvGxr2)=6M^xnkUp%=QJWl1k#>j3Lxy;@SuRIDZZ?`&RLy2j8GRGCe&st=XlKmd zh2FTdgB?h8#XI?wnU@{oy4k0#(ZCQ12k062TsZc&YWrWJ}Ut^m4|bctCmy1N5?=C0iIz4ITU| zThXE3ze-Cp1D{o?aFPo{3S?k^PSF|}lJp&wRBBfZXO(c-P*K8>ek+V7nRFPu3##yAt7)Ar-8~YK=BP%kjwa86ptyii^HFCWo5b0t*A~7qU?Jo}% zvtYR{X6CuY{L@**urySQhu-DvT=knPCYz6n_tVSQsrAMsAlp@g^>1>$(JP69dcD#6 z7*?4|Sg<{weN&c?`>^k;x=RJOO7I31+#-GDqK6FA?><44SLkFVQkyoHqPF|r`#jF2(oBztRSCpQi`kN1ep zbA77nEiWNa$oblgRkFZJdQiNjFx_bECW0OIt3oR#rz}kk)l5zaUbyiEz{FVd?I#gw zwF&d0>tp_XVzs=iZww^u1s|eL+R6E47@XMCb3M3!A8JKzGqssx3FVe*5Z|s)nDTw<6};BWc32V;ivBBZy>#HtHRHm zYQfJz@x?Y_%XFy z`gM)gail;z1A)yEB8sJ^j9kh;^#fI0+c z;7bW}IeYM80H66Tq|4B%e@h03cnM|i&I7j9*^ihx8B(n~@ywIYu-CCil5Dr`rFZa! z8ajcl_!XiOS+Vp8O8m-dp^EtD?Z75whc(51Q;bf=MJ5C5Le)XFDLT?7qb(wmF#%VG z)`+2&BeGf|BHtHP9Nc6&Cr*aQtW%L0(5N(0h0v3tH(c#>tQL}U*0(I5Frk(*BZbu{ z`(Qfm6++mb;{;VzzoPN0B)CHbGYHNKXL#rFTfi^K&&HRgPpoz!&FNGGX$mv6eo0tl zsG+l+$@GUy1iR=yIyje7cFb*@JEZmDO`%jDpwSiELraV7$3q zxxTh)^feh=pXuwb1`u{VI{m%i1UDZm@^Ic}G~IC_3nsMcEtRIbsM6=2yX2zi4C34u zM*V|fLZaR66_;|o`Mx)*w>Pvoq(^(~JufvwfX4>=TpVa4fxqDkoJ&#ztpMa&m;GCL^5ZEDW`}$m%;@-Kr09 zZj*I*FEts`3Kq(D>Q z)D(gFVzaC_{D717e>lT~6>EN|!$sM?vW)5m;>~P-En&t~5&x~q%{*FR^)t^VF0ytZtvF{Qeo9R@pzH%YfSvVDZR#f~)b53TT1gA8lpZ#J% z!ciNq<6L|vGFQ?Hs$BzUf>!1%;<87NHOPjfa?wq5)Q#{$xMe8R51Hv3!-a12OOc7; z!ZDGXHwx`rl$$H0$zA2R5oYbzZ#?mcpbNq)O-KpinT*XES_14sBuoqm5rFviMZO7n z9k|6mU_2pvTb1k351Q$9(r^w9h^Q*V;x)lr%zd}3okF5_(*IbZuoLbc>uWb+zXJ`? zS!1yJVDB;+`Ew#Ubjd*&|BmQ3(W90fy*>2xem2#?29hZw;}YNoJs>@np2tB1Ml3C; zG?}LbbJ1KGDZ!~ZTW=}$uDB6Jk@>Qaf7CtkR`(^raZ)n(-?}GK=R{w7Fg5DFgtt6j zvA6ndGuSH`)=BS!D5EL;GO7x@Z&5ES(%hGY-II6;Po}@Z?#s~K!$N#LE3!;HXG`-N zE&x?TT*#swj6seEQ12LP_QO}9(44oGe`@zLf=!$;>+xvbP*NeZ_>iV4vx5sfOZ4xl>WH6w;|E zTteJA6`Ai1y(ShL>@=hYQzOk17F1S7p35c3tX9gH-(Dct&p|FR>L zNmU6QVtww9V-SV8B>0fjfT_kBS<%GGosqH~=trAoBi$KIHyKTj58?=f^A7N$;VnwL4`QTF=r{op~==x>T?c1^d&5B?M1!jwZsNslpif9nUV{v-1@L~7W8 zKw*Sp_^7X#FKxb_SjJ>yZo4`Ebr8>?sNOMYo!EY$5Jy-VG(R$TrS<#DdX2f;Zz<-x zF&7o9a2t#>>FtTW)*7y%vLFbd13I@>8qBrMSUKev%nhB)tllKVUe=!n0pvq3sH`@a zBj5;~$TXh#R~areqIh4fS=OCr*1SBMHYsEC?$7`UvQ>gZX4#J1P#Yuh5NKi*>H77<1s6sPo6Q`y86lYQ%9g^RBS&k&-S>(-gzPF6{e!+S2 zKd-+d6T!;`D3Qx@N3NcR;8A;G;`i!nDvwd$0__UV<~U!b{Lyw8zaUl#cbO@1uL|Uf z8H>o{3x=Fp*zG}L;D)2+_p5dM^0JuwmgyoguDq@Fps``?-R9im2U|bTq3mrPtNl=y zV|Slx+wl*u)670u8Cg?E)b78!PPYElTN&9hlQ%gbxba2$14#F*P9(7Vl0Lb+ks`oBJs7=y~-G3}ddgPn#ME5e)iDll614OExJhD{xB;sJXwND9y z-qD?@=>fSBOx4W-30@Xv4-KtNr9$L!ebM4Pb@8B;PCZaE-HN<<+M2&yx;W?-AyX~r zMoXJJc9^?Mxlhk%j?RQMD=JwnW^o{<1&Miz`5$6_7EO1dp$}kH5d5?<9LYsE`>^gS zN?Nb`idw_LL&p-cQbyF`YO~{-lu0Qm)8&uR@B-*FnpVm3t`0juj}uc4S5%lFwpNvq zRh24~C&4NmL<(EANRng3#LWzqM)R)(IDk49C<+Z`F3vZj0vUT(*IrcX%|y@J3-hX{ zA`0~)NL{*3JhELLepD%hP1WL=BvA1Ict%`~41lZci7 zIIEpW%^ZkNwYCLi?IZE=Y;%qJ&b?vQuT`{UjAwMJb&`y(PL)tXN!A9XjFSPHNy4$R zlzNA9=Tw`m*T`~zI_qd|$+g$|vT$E{29ah?HB0@ORH-Ypny3siooKK2?BvG_)wt&Z z&7Ia=3n{j+`X{0V2&8EXOlR<);@4kOn+vVUpWtWlb|c8C^sTPq5xj(eppHeMRxF5D z8}>78?>HQFA8VavfrSR1>yQ&>d9~SgO)b+u=N_-0UQ5%1kJ+990*}~bE3ue|wS_skt_V>+}?vTDA74WqcABaPP3MVfU@ku!onZ z-8*Y$lEVDHFrDy>tPA;NL{*Owx`5wBQPoF;WI1<7Rwm~|x%$nhHzeO0VH2TtXY{Tt zFJ~JwNsz^|jzgkR;fmf$PDo}{Ms6PrU#Kn_fn91(Yf7v%+0VGG5Vnk-|sLZ&DYm;_- zQsq;m@-!Nhl^bez2^wUDH&J9LVI+);x_4Ld7Addpdqi1KJSEJI0ou+?V?Iz_|F#i1 z?53;Q6_HG=%2+8%lZF~KEe-XKxHyg~JqvF6O3bI8pb(?^`j3F4_pPd* z+~cK_%+=43K00M`G@Y}hS(Bnurt-KTd`H%WeI6;PsYO_=PySpif5s_ol6fkgV{Q?u z;!v&97olO<&U#Fa5@rQOe|CC&Gvxf%w)!5vDQ{&%Y0KH zw46Fd2A7Jt$m%Co{4!01su4+=v+2#;E{(BX1%i=<@3orAm@IrRX(m}e)G?}XiMhb~ z_UOVV4HNVbF<%IO$psvAAsoyVHPW{QxGgdc_#}gZU1K`=dJaNQw&nkBBX+%{QcjCp zZ9)Rklxa}3oRG$(@`6fe6ml;bgfhK-nUePV(jD9#V>A^Fn$W6yvN^!lNyhpUBZ+@2 z+(wbS`P9FWq0)6?6zxNLviOv7<@Sd22B~KXCf;I>J)+PHKB>@8C~l2Z6?J>0TrM0K zD%3He%nL`ADW{lm>6ip|xLlBA4^tadRd)Oe)$BDw!qgKkLeo%`P$Aqij+MaJe7h$? zoi1OubOvB3q#I9|%sfncE15R?u7tbdolh8`qC6qpFUX%s{K5Ky&*#u@+BZhg?`e4* zfW8&|qHeuUBDz`eF?OvvywIbWNC3EodrJ7exwF*zA{1yddRfXyf|kIgLkTLZi%Gy2 zdm5!NBPN+jUu$q)a;BXH*-EJrIh}MecaTdQtMOQ@ACIVqnvm@2$)2{f=GD$zRB6xg{Rhh-k%2wxBYcT$!VQfk%c4>B&2AEc5}>mfea74yM{m@+d{0!0-@vlNEZTw-Is|CNJnI3btvGKih<4Gp%;2fiQi;O{Yjf^^k zrJFUg!-0^}4?^98u~{xf@uzq>twMOO&pV?+XTUn{B)Kyj>Ox3&{o1YJkGhbaFSy8R5v{RP}1xzuOA2WOi?2m4b<+}D% zsmeaqnVVLNA-73p$!TZ%G}*37X3I7ASFSs6&L5F8yC+tFL3rx2%gA%F&cpfYq4Xa* zf*;#9v{iSgIbt_L;0~l#q{ri}%JJI0(R@sOgV!gI-*n_->icv{%-z69ND1d(n$uDl z$-np()sEoxeczgLX!Sdr*JjlUB zqc#!puMJLCrMUyD2*ONpL*ZNr*UrAwDQOl+_$!y5Io6sRxKiME2Hbd?y%2Br0(4-! zKoX>wOI;)$^@7%>Iic z=6>v5qp8ttd#o%YJT`RF9UPOhXAZW&bWX}#+-C+4#ve}>)cP09i(INCWRH~WZr2`G zL=Qmwx&)V$kg7{?h1#4d|9kOUhx5BQQK9m)7ejuvo=WC+Nba#ZwoLqv_FcTwg-h zUxO23b%q3Mv8DnHZ!L4D3ZmXVEI}-);%Hh6TxwTL-Yx7|+<^(i!7*hR|JEwP_XBHt zqka}O=<^(RG+5l0n&#VCGgdh#5QjnyViT7l3;kX>3O0qrp^m}O;6$U*D;b+sXZ{e! z>{$)zJh0WlQ^{5=`eW{kF|a5)F1l+eLG-UtXKbFM+sex-3+E?%I~V`e9`oedWRM0G zV9v3sn*EO3{j128{|rF(OCTfW^! zQ71F|1!fmmUFs+b7bar!oW2u_`_Cd&*Ew{m3b)Hw{<$y39{Z$t;eMV@s(oynCwQBA zr`z?W`H_&!0Fn0mmOmJqcRD)T6AKJrE@E4Q4Z9+?JSeV+;z{8Q&vk?^ zk)m7eqNllo3l)sl55X9?TfrBd4GIPY9fLyviGN_xlbLyLSEtzzQC)AIvd=5CYjh@- zdpcSo?TOy)49}rXPk4?qT8DU&sqaU=&f_%hp~cj8X*##(sGEeeFo%vo+%7rLya zGCq#onTX9gEyptc_CUJ;*UgvvkIe(Bfn)Ph<-ea^5$n*SFL6iKA}3zeNk zCbC|EK_!E&vAUP9oZBJrA6U$gUjHE&V_OnS~&j2ZJuSZv)MiWI#ny&N#3}h?#=^l1@B1(FPaZ2iIFQM zF><9O`b|n=6rGKGDKF;!o3vWG&z(EmeZv&2>36?)Vv62A&h#Oz7^_xFuN27L84a@X zD3_yRF^Z8(1a6+~dNY>(xJ)ls^36O>#j#l+)CE~;SU{+N5 zNVX4%Fy9&C2dS~8i7>MqC{e+D&64spOUkEVFsOXWgh9dI;Y!>4en1h^+(yH9ZJ_dE z8IRA7xfN7lDgO9ye~*XVglD=TQnBw1&!j+kP@p^%kZ;Ay6@*(9gn?N=C$O9mut0ht z+$|B#7sd%B!Z?BC??Sm5`K7jCJoO;DG~GU~_I8gGq40t5?aV+*Dm0W-*!f^moH5qp zHA%^Y1@7d{2THz~S{l8Vd)GxBUB+36UYy3V_iQx8k;J$az^H$hfYH28HdbC0(G{)v z%d*{)y%SeW+1ogaV3Lsy^zlsGM$`7zK4<8lqxSJ}NKKZ}pboXHlZ8Ge?cye?NpQGM zv=SW9m53io#Qf88W=G9W|3HQ8YqNg2Ec&=3I@`(K;H~cjC*QiC%Z|fOkP-0?OtnX+ zc*0l4i)b-UpxCAabhG9V8<_ZUr$(Iw^Fv?nfnW6+4QS3Vpg7(43@siBWSDn=1jMg6@U0*q9te7F?FqU8 zDT}Kg07*k3C(1Mgs!DW;MtC9;Q=znCxVGRcQq7H0P5601jy5AGCur7wS0em7L`|d) zQ-UqFAJuexMn28w2um*f=VGCs=$tW?TnSt$mjg4YH^0S!UZ))+2dtZstoB6<@gV^c zNh3%|ehzl=xze{kctfSHCz#EFX0vXcs(c^9$;Ht~JugP{UaT1QVnMNwb7=8pM)UUg zW6EiVpp08Mn!_rYq#=RnUd^$J5;@F7HxR|?eu;A54ML8(x-oSzntMikG6f3t_3)UK zTole+ll;;SBqHaHEic*{lXK7Vt&OTdfJ| zB*szf2b#EL5QF;ENDXI}F%2%VQww_Nc zRldgKRav>gMx;BQkgv_nn@P?9@u#tfM0#qe^mPP36K#}vU8T-0KDue;N{+ytx_W*Z z<~)0P$M=LU<3JGjg^(HzIggc7~oU-D*e-*nq;QhoeOM$_M-+xPxO6^Zl8p)b14_N1TIflG1w zPqKM#Pm3ka>S%!tJ`1H_YV4lWe9pnd>G1(>nmB4Spx#Peg)Jyr$O0`{hK-^mh)EPF z5J8cK@e@%b$)qmW_7IX@8b*?=*Amss29Saxj9xT~ zBs%oIk-gpQP~TWt?md;(p)r+glAy(XKD4+MTHHfu`Q~V}%o_%d`NKv`60js<6ks4m zL-vV?kz@)n?(-ogFkO)G?t~#^*!9^+@Mt=T!x;RGKqeSxzQ`AECoxOrAF9l2h0N{s zm{WAKc2+yXhjs>24M3Rz>gSm&(YIl5jp+RmxhE-tw~uU$UQV^cuG$I?FZNcDC*S5OUf(FEk= zislc(5o|1ff%+1azDC()4_=3~NLZ9n!7Hdz6vp9vB(p}*5Tl+TB)VbQ6tMe5zDhjZ zBM$)HzJ8CX;NkMa*rhApfgk2QA z#5`y#kYea8nQ|HqFu{-Lv%>L;U~CGVA&|}1{hcJxB)+PYtI{OpCXqFd^t6&yf=W-c z!jzAOD@-ZU(nL0dDZz@SwjoT(@sx+EzHJbXf5rtq`A(_-iL6F>kM93K!1|vLPS0^+156&4lS5t`D zD8jPfFGIbFEG=)T@?=om09^UX-BzSbF0Wz446o;AxXjVL^Esrg7}O)I z1?o`;OV=^VhT314Z2!oXDUP68mKvW^>1$gu%V=6EJD7gDl$Ia|i$z0<(2km5REs`R zrQ>9|7E!)K7A`|g1Kx>h7~?tFhL@9wGD6tYOj6Ux5%M3hJ{lS!PXN7)5Me$tLaOCS zAK!sYL+dy$Ff9>eF(z;`F6042AtY>t0V;8hz8rEvrdKmehxwiw#3ZwMoTG07sm!PK zFzQmHj-vqhnZjwfl+WO45`8;MPvrZxkC0lEl5Iz_yVAufNA)VEB#8Rw4k*!&&f%^Y zT}K9nw}M95GF1bEWyI()`hQepA&T6yiwyj4iVV+j*yA1-gwj(_jpn-Dh)uECB5kjW z<~c{=HBY#t!mIE`HFxAW`qndiFkuM&n5WTnXW}*Jh?O>2<&K9pvf&NbPKBgn7?^w$ODc8!7o(XgP8?xj|6AK@acGe0==VTbcdv13K zFDgD7YL%Aj^#oejVM-mA(H>KDn&d5tHJB*&l{B8xWA*%d?=!fwt#yE=zwR~Z9^ZZ*BS6h}&**(cl` zQ`2BBeWV2f={7YmWH=~!K#2jWCuO&wQ40htKkUKc?t4)BK*Iz$Em6sh0>6cYKGdS2Hq#u_IFr(Yj}>E{#6J?=n8ds6!#WN6yfJJY(_^2 zKeCCKoaQ`wnuEX39-^;&O<%1ta}9O1nz>Y0OSh`7mTe1Lq8aLH(VN;5jk|9v!<9+W z2(`$#?UwBdzpgO*BXk!KPYO4(D)CegVqAxGoZGXyx45abJ45GrT|N+ZDge@aF$2!+YPaGrYg&Cuvh0W1M5gjB)Xkf9`YiE1956w&2T- zmYXjtX;>-G=u`9Z3Uh-@ah#!upj8QS=&LuHJ1#Qcn&w&NZr}j6Y#YcuDKZI~Jk2t6 zoAW%8veWFBb85(F3`%Ux=|t9V>wm}mRO6ZE34T$y&;5KrD2dGjW1IxaM`t7gtpt;c zB7zCXE7&uFuC7tp#8Ed} zuc7xjO?KGq4E5d+`hWvC{bmR0V(DtLD{W`%L1!8+YdmQ?@f{nT;)uC_OQw{x&f52O zp~^CMrgft27p0aC$uvqAv{=sZ*b3-Ex?19VCi)h%fm!Y2dt{_L(^`pEPxVJ~Wwr3l ze;S8o;!xy6B#U{>tm2hrz9q_KRMGwc$e;bB%@Fok2+LQ^mZFt42G-4sY7x4Fbnh!*EZQ6J7PCdZrFa%+#te; zsdx*PZgVMTlP;${)HWEK@;$`16xUuh2J=-jPut@|h<`k*o#fbLpXIa+ZKrFm)RD9g zs9J}4QHgcyoywHhu2}6aWysz&&0}+>cBRK+faBvD#p zdW6N%F%IX{9Jb*ZHaWUI?!e@T0{(1rCqs=mckCz{=jkX)^F)@pYgdkAclsS^O0hR~ zZ^HGb*%mnQ>Q=j`l)X)tP0>z|YchMooX0x*bd$ZmFh%wkAP}4q9*!1y%&X9L z%bxHYnxASk&+)L&u@!=0OHoMXNic>usYphaZz|9#eZc{quZIpAu_fI3zWXn& z2i@4Ixw>4Z;DF?1!(x*VIxNfeQ8w)6sHg^JQUZq$na?gpuKqCet`Ti(>2;59!*J}B z7_PmI;hM@fH}v&Gj^LXtFF5-sE7_XEL%sQ+TgdVv=11G;K&=>y`{^Oe#fBNe@1a=w zJ+p*&-A|3?$MAn24!#?90a1q|MeRz7Vdg;>;6J>z4A8NRbDe@zH&JYg4YKQPS|V_- zBaT9cz;+4P&haDuNCU)fjt00mC85FJ)hFke*`uWvj-FD>!mYCCqH5Pi5VIm`*C}Ll zssY$Zq}Jm@TjM#7^<36+u1(#+zCR->nLT}SJw}HEyOUY7!|c5L1x_xff#Zwdqm>|I zw%G+XSb9-DYh0OtimLWJL&N&jgwJmUy$Vr>QF3+W0cbo`o{6Mk3q~uU z53x^3=pBsUR(gjXaJF<5d9X#|s-F&QU8vDmC8`UxFWx?Et{@I57f5%=Rp&;18A02o zW?^)ub2e&q_W7c@sbSRO#atb9#s>CT)sY{8x9C?B=Eu?bgVCBZQ@=78oH+H~L~z{H zTXAsAWkoKHi7=bQVpxOrn&F2HMyO8>!kuz~HntDQak2o8&U8`Zndr0R;oC;nS^`D-ae>(W7srQ}v3xb>uhU!<^> z#on`VJG{X-WN0)}{?+z&p5V0F6&_dM3uYly;A-==ExlOJ$Jl?(W=)S%pRmW*wya+g zv|w3>*C4mDxO0aK(?*y~srg3SOkr_y6e~NA>0{P08g7+7yadL$I4@m;%hE<#x{LN0(y)OnPt?!SyMxJT?a%TH|XWEg_*H1IiUKuV*1h=al z<)fI-Vo3_A6?j}71>?yLxy2;2h5ESjfgwAL+7p=NHS$4-ZKXUD0j?7j(=HQf82~_K z{uvFx;QtB$yFW%$t{@pQ15t)wwI^J`DL56t7~vv7nWSV=8mDxK*gyUCfuyyFx~~_z zLi4FC@F|8H&%u<$3sP>boG9fF#=v=p$rElueSVFqyJGI5eHlh;AI zRom{iwB7A~zqZ>}TiXD!8xum42yF1+kj~jAZC7_=bU$PLA&37erRUS zocnpsInQ~{bDoQK*=_zF%S`A<$8Q=D3-|mGfZ#bSR{IMwmd3G@SAd4k@$*Ww9~HwJ zM)el2<*>lPj01A;a@{54Fxky-tmYIr;7IBxE;VYUyT+S&_^UT3|6bL^0=P$N6N&KF z+J&4nw)>E&MH#X3EhQ$sev#yJCi9S(#o&HTMyZ#P2Cf_^Qu>O)smaC*OxG#=PZVtl zA;hU*gx`_^b5FPKyi&VN$$A_}W${3DCqnL*CkGzP)=HC(;MJDKz_==opB+Db0YdN} zj(^qY_(RB<<7C@0uD060tJ)NRQXGLX{U17xuXM)82{|^}_d7MLyueL~dM6-A4lYqI zQu7674QiSIE4?Beh#qGjAv{!pGl4lQU6DcC7)&c zx%EoTEA>|-j<7G13IN5Ek_rIDJn$4F*Rd24V z?p5n~+Cpp@w5wp61obK(DkSI#i4Nddf+BAUCUDn-1o9!Xop7w{^HY-ny9$V_%Eb0f z$~;!(9LkF6l~<(nZ?IpY-hVas1p&fjz^(#V>8oNRC$_tbl=p5${~`1R#sSybn!BBL z7zc~FPU?VN1;#4WOaID6@E%zL;Y*SCJ*T}_KF;zB+)UufNds?$TWy=u2L7PD4r^D} z>e$icmDg=)l-Cy8U1L|ayCehY*poQRWyN1tD}=xT=Z4Rhx$6g&)=hYSR$J|htZP)~ zQ*z$6zgcF!`Z5HMZ>S8#^;T8D=`ZE-YL-oswSZZ>z}4Y|W5ZpsLj0vCf5wb=2I-pr;q z=ACo|FYFjXnFsOZuE&CWFH8y;BEAIEmVSgE!zzF;K7MybzcG{XnGN)3ts_SE!)6Cz zLq*edes9YWYbnx1K23;G{Yxo$;8jLvjFTK3SIRp0@0XZgsABOJwOtL>xfXg(JufuKUt(U;$F$C`z#*FrSIk`-zYGx`4&}trCTvjo2)&M z!J(FW>V_1~visx%KhJUZK+$H=PZvosEWvdtsOj}kMU46KPj#111u(V)kENY8@2)=p z-?QE~Y;6SQLO7whP2QdJ=-nz*$JH4up1!4j0#CYQpn1^vZQu@AZ}jdKX4l5~{))C* ziIabAwGt=)%=s(TV1amtxpf5-I7p$(qpEmR6;=K~k(WpKdN6hC*~&*{zXK?@IR$9Q zAtx5H0Zt=`Avsg}oBo7*^5_w#ez-9t4F=c_wP6CWlBS5SsUeRbF;DXq@v)z31sD%L593$m%UNC1zrua=L_2GyQM(RAO<5O`t<~(yDU~SbTN_GC)+Hl zAmu$_w73g#Ta(ijRRCi-wp@KQ{O%BZ6O&B~%Pj*W#uE816-?BP>85lGnBgtSymnQw=l_!E2qT{`_bifZb*$fHEx2YGCvEnQT^zLkR~6k>ZBYjYz>LgB%iCaLa-sC z0Mu`9!J-TJNG_+i*~mbq-d%GC1!K<&z|A)RkZ~AtyygNwF$85y#E?>+y~Tk2(re!I zD8iQdZYY{Bx~Z5evtk*K@KjGj_Cux1q=}hhnh0|3cNxz4C4E86X0hvA9W!|K3wX*B zd!$&Y*@25hF)^q*2`@LQs*?-xv$DO7_IQT46i&n^*Yxj|fO}yt*_Qdug^#I?%Rqt~ z;U}Tz6!=PI6TtSHQ7*=;>$V*s`YQi812qBP2#RH#IFbLQn?UPm7Au1Yx1^ZgBvCax znm$s+n0|b;IK3I^WwOl%-KJScrR+b20X)dJ{VBm)#5$qPJLoPR%xR0-Se8@8n9*uLCb{rg^McHCRBx6>wW)9{ zY-a)LWyd@IPKk|T70#7=biQZPl=;}4-n>*e~%T;`Oi}kZxDK|ZdOk4dey zVj#~JpP>VexJL(4<7qm;Ra#|1n;&|0=W^A6B3XIfk!x{$(ui6D)KRq7Lykmn5ND4V zEMJa0Ie%G&`Nlk2K9FtklqDmang$az)Or}4CWY3fADOJ+;4PEzqij zq7rt9MUuV${i7fK$T&Rk=OgdO9Lsas-8JV~T6-(X%gYD;hDjlFmVJL{Yr+mQW@jn+ z)vi1CE{d@!{KBI3Ql#_YN^ZL^_CM#?K1SDCJJcT2zEe%GZxG{=k>ZQ2YbcBJkz!~K z--Sr=hw^}QTueP;E^sR>VeY#**pD-JPz->^YI>;+XW-@w+-5m`lXuTelfg>M`U{<& zz${U}R(ExxFep%XMdeI2;@tZbfQX$##=OAP%DF23Y8_8p7I6zzT$+xvrc2$k9CX3D z*XlV7OgFn1s4A1Q+N-A0OJrsD7X-+2364P(D#(5ja&u__SEAh$7EB1<#LR?W&x{gt z*xW7mS}gL?6ImF3bF0+^7Tsjg_|3Pxz#OMz&% zOJ47#{z?ssxtH`+0HE*%3X9xOaIhojqFVM8-Mw0t=yzz<>haT*mK7}(LNUzlFL0*n zOq(T>2Jy-P3Bjeag>uAWrNr4mUYS*hO%x=3lLI1zvL0h&zK@B6Oom} zk(D1tRt}l*4@So={*~oW6_yS-IfM74x`!tW;aFtey@xj4g#z>XziF-qgxwElA#gV< zc__lY&i7$N88{#`9I5?3q!CKQ=UM>&uY1+tEK&n*XQcN3k|$!*rAA78h(qwfNbQTH zRhYZHvg%z{A*-ep)Fev?BDlj`Mdy>rdJcX(|0C-K`*Go(h3d%yTa3kO4h$O5tL7?m z29;Q=ZJ5&3Y^`u?CPI~7U;$XG^X+lTYqMgHWZz}}h;+ShxQ`JQ0Nz0LB+fOz(@SrA zC7&1$Gk5ZnAM?aUj9I0BEZ~R74Co(u{KzmruYWA$N2d8H{bLb7W|}4X$HV-{GV}OB zAUizFTjLL8ma*|cP<&bu^bp*sgBb+n20(0PBCv(8nTbGCN3UCa5LFh2lz$^CvMIoa>!aEOvXc+lwJ)VWCm;Z0DiB$&4`j><}fGmp_%wN#`* zS?d}{l$s5ftBMth7*4wcMNGMLgy4s&o~D$0%^XU;XL9=&al8Smm~Urni9M$|R)J+?jP&+_AG`w_ zR)!Y95%YWB+^{^fW%@HIfrqg1;B7-{*w+(U0CNAN_wa^WLtCbhbYrZ@LDE&BEqCt{ z!(-IDe?qu*Lb!QC_`Z$^P3<9KFT1aW%u@E%|xpMfOTqe&r0Wl?y=lZ>goR8s;+* zeO2yWr7@qAOUEJeDmjzHW%VGHub?7#{Vye3?CY|~-SsumJtoNb8NF*eQX&W@QA4a`aM{Sv zXQ?yL8v5f@1QCK5hw7g0Gw`{0x-D(O6rNx7i7mPP(frNvjJ+u#RB5(= z4Ax8v%Lb$WNI4!dCplPz{lVK;uWAdEMg3FTt&K-M2&MRR0#YtM$q37xn=LOe!7t5d zfnaWYj`5004GzVxqQo;&;xYn1kbrZqpdnpS!K4h|$~-cq38|d{Ksp#KGwT|EIbY=ATg|)CYHCARbzbQjw zUL2gE8C?7OA@7fw|0LxEjDE9tT)8st%hO5J*!{3MpRg>bughwEBjUJr9+rQKLieWx zFBIW$Qa>@r3Ws^d>~-%DG1$6^xvv*t74Gr{PCm17GWmRSPOH5o_h`%&6Wu$U-*iEv zO|R@x?GM~Kw%=73zxAze&Dc1-()qM>?&P?{nB(80pU%F;-c;&0Qyx^sIKt-$ce!$= z%KxKr`FYIW`CVF!l{#LN+eTVoSJ@6irCR@D#8_#O%{_1mdccql~IZ9Qr0pI>P%W zb9r&se3^}C$O3_E5t@XY8NbyG`G`y-TdXbwBhXmy6zzff1Lz8@ ziN5eFGMo|2g&D>#Syl0PESGnx8Z@_36^MOMYel_uP*poxBiJ4t8sR@*#DtruI+6JT za+Tl%J;R!HMG*ajIxL#(UqKP0ebQatDamxQxMb^w)xq9S*UFI(b-%*0_gD&% z4!;Ol6XUyXr_7=}n2Ys_>VM$}`khp-cIPtcitNrOY7Kzr83dak*E<+hq;%qAfOECkYZ9`gzcZ|N(Lh(J@lr;y~m%i z26VEJX3)@CpHcZ~1%h>BYb8xAJu9ojX&-0uToWy^M|to=a+TaUEFEiw#e6-yS>nB}kH2&LQKaOr=55!@jJfo!RByoiq1Ev# z66yaj%dzB~FeH3^x&ia|*Nv%A&+(7&P;D*CXOkE};B8HDJZIb#EBaVou*Y4Y|HwdP ziksw{d6kuK-I??Boq3_OqG$DH-HN(c(*x=X zkj{0J&0Z?@5{*4m;BYA3=F8iGJl2nrB7HmW6YB1y7_+{e-7I!$ssJEI~E}C9NTfm zf5SkrQ!t$dLAGSnAeb~Z;|K`sl0n}dP1?T%1iyTD6a*&-%l7^b^H3)zg1jRl4q5N} z`;)U394;B>z>$0`ck`+~a3Y@ZaT)4xyHSs6K3&UsYU!l53q+{EMHLu0T7X|uspTZK zd`t$JlG5b@)U@o60yR8G0adN1EcLu|+9J+Ar-?JgpZbt~DtP+McPSuHkcnZhWe*fM z)HVeXbDEt?c>PLGtM7mti>_XP#{T7gb34TVf)pi{x^wW;kG)w znsD07Z&|!oF^W1nGrj=!6t+aCSH7&y`G~H}s)Ktod<(J)OQNsM*GDL&RNe6sF4a5g zs%|2Z2OlgahDB$i&M_ljG+RpsMGpHvCDGS+LxfuHbMiq`$5m6;e6%TDKTR2LmU3hK z_hcJ^hvsh`3>IBl&ycF;ciE~ZR+qVM^J2?8uuQ!iemxcD<<}{kW96tcRk7XUid8nL z$msY;&Br}`y-#mskut=ZY>&9#Zi^A3TSrI=&My+)V zpD$PKDU8NkN$=FkTNG7^lAsXxLJ}%HVWFgN29$zX6|te8AmoNJ3Kp?f=!YxHRr^)| zV+^u*(Nvpmt@Sf>OZJ5JPgW^lN6EeNg-m&Dnaz?Pw&imRJD+oq7gC;rl`&S~CO@ZWDe=QH zwQ`Oc*3;LH?Un_?pUl1lgbIGy>Uu>af!=fz9E=NGCQTQqEzEpDSY~=3Uj$+6;*0c2{i}Z(Q=dZ z;kdKS_ZE%vax&Pu5TZPmpK5QlTydk+U>xR&+nUo-Yo^Up>PjIKm$!Fwnd-D|U zQbPh^3aTVMi#~20m$X+{UBrHVT$?4Ko5t>*VGrHpAB;g9T(`%YM_?nP0RII=&o zNl^1!W=_(zYi_#cyNh&La()W~a#}Eaj)JLr#<<@YxL{<0-!xBkSrc4lHqj%sQDmj~ znc!zh(-VBie1)(~@TaT^=0!$q#>gpcP4Iv-OO{X`E}F59CnpDP^tz!rqL~3jG50MCo)b8L%Yi)#2au)@njk^d& zYMWZ|F=#J2js|CQ#NDFM?Z!7)WD$k-Rxl_)0uu%YOJqnF z!I>LL*9)z~TueCW5WGe9$1)i+(p$Nw{PTC;Mb%j8=IA&#tQKVTn{+RxhE!_QN^(V_ zQ^DLF5p5`*hXfp3U3fa*x+>f_j~uC6S64Qv-fW$zdehLwFZ%JA?4YM`o9VKCikGD3!e8a6VWxnm2H-u~W7+@&hI>Mre%%=Ez4G zk4*Z^V{7W}Bac#HA_K~j@hJJwktv?c6z|u}@6joSoSQS+PH<-Y7JXp0sgsnUr|Dsg`{t5`r?&6~=laPaz5>U$1rIF9neW$f=JTs03rdW3))^>4F>GxhxzrchCo)PY z?&>?G>ijKiapBWs%P%p?KG7Y{lyHd?Df-L8=V2u~`CZ-Yt`@nRynTG695HhcB^;zT z;m`Hjj(rYMy58_RY2Fj=+RI6&gYIxA`A|~EDZP`>z**i-bDIWy-3U41B5A(QiC6ja zwm@1K>%z}Ba?Fu$WYjn%HD5`m{NpNqC7EXaqbf>C z%^7A24kB0F4lik` z!*+33N0|>5kON2sgsUD#i!IzJFx;QsoZgn+D)MYU<@bwrV}H<}BYNLVGjD~KexH$s zKinv9vkpu|2hY-k_oTbFnyPTxnsZW=G<$LJdT8TsFat9ykBiAYSVqU1hsZjev$j!A z^AQ#aDua2@e%)(~wAe-%m_?{?iQQ{VUh7(w8Ct0|c2`ksK{1sc$r=9G3WdpW=W?F! zd_3{F1el`aC-vJ0?Y%i&^HKf;PQE_qZ&s%{aZKJ#NquOX%ZQPoVtNa^pcsSdsWP?~ zrKWnvmG%qha-RHXj!kT5MLSsby+$kXp4|AAoRd;6e9^Y)PjzXlBNKJjIx>-3iv7XS zioGW{CDp%W?>W`%ALEg*yf?f*jbFBrq!1so<|A_?!whNbqHX+|JFP@Z+QSXO7TQD~E(LAd*FbBKGi&sDY6VGPfToIpTNIS&ObkQGx7IjdLiZqBF%bbq71II2H9oJon8PU$jmEK@4r)IEcY20oP znljR3P};`I)86u4-2ayMJj8fND>t#(3jp$H5X9=Wt^d}UGeBC89i{o^zo9oTqwh|R zJ|~t@BGem$lK0ElT|xazp0-oM?@nZhoWY6kdlTbx8<`HSW<8Rm;9yD-6q?Dzn0Q0Y z>BO7uBKy(nTXTBt{c6~!CAUoG<8)-qpzRF$ehjlF?X@ZF)gb0gKRSAIbo9NWqsKG2 znH)VH(CrAxaMehT{xqZCbtX>Z$%$ON-w= zcD_k4C9Be@CKCg~J&DMnbf+~+f;H3DkONPQ8Lo}tKEQBC$E#`*i?{#(jrUnGYF&bb zmpV~jjfySF^_Y?3tY{uJ9o}rIl#RMZQTrTvkZlZG)`eZkMd|nn2{)&qBOA-O11X&h zoTazsoUL2fwV`}frLI0G*IpV53F;D9b*?dL94`#Xkl3l=MRr2>>c($ zc$+slyeBu@j){+Vy4@c9qGh=~lh?S1@FMDTdlq}p%yN73JUV8PawB?v{TnO1!yBgM zbmk1yxl&_!wiFbJu}m|>cN&PUJ7^28Ol;VKg zg|X|co;Dw{AF?Zkqv(gA05Zry zSpPcaTh8VLoyr9|beqv?h5BNS`oMtv|BH|iKq@pf)SSI_7`KEB>g4oqYyuRM`|88OXkK*r4nW7RGd=U^y!_is%Tvo;Vc-2aTNruUrtVepL& z&(z{}-03ZGt$*R;Mko4;UlaM+y?K+Tvxd^zs$K>qJ?@+?3!tJgG-)~-KEEL9dqjmV z*xIW0@*|6A_rlg_)vx$5M)@4bG2d(k5BEVOXlCCuJG@V-ObJdfcL{nxx1{=KKPHA7 zn_q55ypE3F4^=%*P`a#_3%RGbX>A3nZXfF5jk{#YC}jg#HJqqxb|p0+HijGT62ubx zgyJ$j-wxlc!|Z6od0nI29v{hH_+YeFvS?{i7S$WZ?jO((JY%bPZ`axscX1ayrp>Pl z(+OlEyjv>ZCLY}#;U{Q=`Mz9~k1nFS(~{ICieC|{8NA5hpu5Uo zwDN}P*?%9T@=nS*wI)$~iqikfQF-lM3~F?Q06cIL7gskFgR&oC%^@S}6GN}{!s)4? zu7dc|@REQNH7=(GkWrPeO_MCpY@Axz1DR4`R-&3AH_}sqY1}KXs&v#y>~bAzHDSIo z1+wP2%HQQ2C2F|(qKD=T-n158yt#xyd9=M3ox#bfGr}U?T&1+i1o|kcyr96> z(WbP#==wMnwva^dZ`GNuR+zAs#-zd@BJZ83%@o+HPj9U-;oVOkAbY4$-Hgio=w0*E zPzn@zZ7QEsSGqPOQJ+P2^J}ZbF}<=PGkTs3*UH7PZnu1fE~ahxqOmiDVD3?D@w30( z^?OY&9hhk!l)FcJtTa*%;2O|2KV!9M|j79&`r9mczim4DtmR*S;GYiex94yikEZ-4O? zUa&OwF`m`kjP6jNsNW$2aM!==QLTr1b#IHLxBYRK&SmV7GSMB<=?13&tC)-A5bBKI zRWkIBz@&NK5J7i$!AYYRZ`k1Iz^b}ulOi9}b5E_A|J_BB;rW)>%-?5H1w5_SgO`J= zA3nJz{F*_`LPMIFihQ?%&W5`OTXzVfA%*I< zOg8Wj0&&p}4*>(5hb)4jFs*se9(&>rd+!SG9&xp?@rlHq$NBb~eqIa`djx6v&4<+M zfyY`J75+e)`6vw6_yp79hevlvp$fnGHTcuUv+_d_*bXTkZq7naJF2P=ztbD;?tO4k z^jYDBM0dy@F_izb@Zj*KNAhIj?2$I5}@4r)LsD#Mo z-%J9CrDpL3agxm!>Zg**QGW|xGijHvEW;;ac-cHP@$6n|-v92f!kkTk32VYj)_aUM z80U-=!@E(l|aUs86`FnOxVU7f7bl2@(FzhSHHPzzU}aqQN4cH7pXuE+(2f%jbvhb|w;{FW+3?G=I9@At9WBOm(u$LlM|37QhqX(t>zs!otllEj((*Ffk3*Zxzgq8e7MMm=NCwv61@!#m~XCwnYYC}aKJ zxW;fiv?l6UobNrn<%1RBCC)r4P}xh@{pPIEDy-$I=9~SlExglnINk2*?^7>Z#wf`) z%Cn+rY!@1s87XFS&WRLX&7gQ5ZYo8DkH7u=wUm;FsL1LW^rSSh^eW&K@gvq;frUBq z%J^`iu6PEcT41*vl@=>UrN!6Sc$Tsc7hePR=5Hx3k+3RqEj5c zM9{hhst9YnUV^VgvRyE0l?c?!hOZKFx;kHGr0Q1$#?P>v_sIzpk30;N`xUk?RavFH zAV@B}H5(YcD3Rq^HAlDM>Sc~_2V{eeo~D^3GQMRg#Om!K^L6 zNDiy+xX8ty8u3+k`^M*3)MNmd;DfCskWnvAb%Z zyyYM?c@#iyHX80u7VcApca1N+7KQXLKQaO6(9QY5tZmED$IDSqUsu_T*U7*EXJ|epWE8CY>Zc&4` z>A`aWS=qu&W-K#b@+vN6A%M=7l0gA^H9tdbRZEmO6Ejk!u$N?4St|2XAO3O?09UHuyApgv1>YoSAuM%1HGz*yGQvFz z-2SFD?%SIy)=#heF*yYxdsVwyI)pUeOw!t|v{_@)I1`YKxkZ>G9p~JaAqQi={JuJC z*ba|mb370W*(ZF7aUde{O_Q-mkUN&U4CbF$e2!L=!sLh-}&-}7sxR^G)b%$Z923UZ8f zwLsS6sco0XTq{tU1#8_tU$7QhH?FE@Wy4DG@KPsQ9J}+#yC%9igQI~p#tC3wD%70D?seWpC%hIfFOPe72IAGw55pGW5HB3+eL=B_@gLK!ImSA#18 z?Q+PxkLAWuI|KTMWt3?gN(5(CnBRCuI?i?3IArvium2XjLp@3}wFD*orRy_4MxH6( zR$9iinUk48(Pm=JfJ$zmoiejR&j3OVD_istRAK(pJ!$ZqW|o;JGW2mE22FxjRg{^7 zL{vVi3SOfMdaQzg7QAsY1x4-6UuJG=LG8^qGkjoXSS<)o)l#j+#zmDCv?&lR-mJ5cP*F|JK^kkL6BRt7-1NQ(7I=QR=$O;ya zpW<5>ut(iHJ0+;m{;wsdbTJJhMEyC<72eKmoA*K*ZqI4J|5 z$x}Uwh9yJvm1;h%7Xj&{gPz4UWuVEIe6KLVA+p3=zveTAS65XomJu10S?_HVQ>ghwwlED+wmBlFgEtFkRKP>+7(Kt^>m$e ztYI_T*BkdYya=Grs8`i%VS7!FJvDNkTL;I7-c3lB1C8R%WY1h4Soe@hinJZ=oZvtuRAC+*T-DniPbA3dN4_ zG}^03tm{i`aGJ{~E`2FN~%E}&4kC4H34 zHL`mYzF}vTfs@v%g&+85=m}&TK0S~ZkQ+-7%i*cjrvmqfF1j|&uY1f+_|DM9S(|PR zJ?Xe|(@mi#CwMo_4m~+>!KSMXTh(Hx6pB9mjEp1S5q)|W0gy!HuFrETHn(xJ63jh{ zG}({J|FrDBUh-l2jA%86ioCsZ@aA05fwD}5}ISw%81~fq}HH+Q{aSqQu{r6hRWHC zd@1m|7Y?q8Zo8r;u{to7E1Sonjk1J19l2SK;3tuPQWsix^=GBq`oi*<1brD`jGape z>N9wuM1H-Gc8m`6h7+$05;Px$(=0-z9Hwmy!VD#^5MC?)VzUC|&u*NvjSSgEbfnFovVJjgd^ zKi2;Nr|E~c9ZeJDrqS9^Vq;&anSTeH=n82CJpCM5SkBR6P<7y8V`_A%%a|H-MeVOI zOKcn}H8aR8#C(?Y%Y{n4wB6=GXs^WCP|A?Z<*X$k#acZ)-A8>H?wSfvMto-C9?s7) zGb})m8rn@FjuCAz<LYDwOKny9PS1@6^A&oxyW;`&%l1L4N4Rv--r5^{oj4cXcYW zm0aI{r%Rfyaw|ev&!>pU8ZY$7=i#*(Wr=#(5@tk+xN}~h7ah!8YisD1?jJVi>dvoN zr9^!b^-|7n)&W_gRthRm4_S+iZOPMI%n^$2lzg$fs={sPOBltNYjQ>>wiaPowchVA zIiM4fB9Cz;tO;kdg8yCdPs)rvozA2d$;p}_b1+CB0N{_+j&{UnCGJUVV%|P|JCmHo zltqi+|GC1g8Htee<)LsJH01VOR%b^r5by#2um&E}q)q^NO(AnO7kl?exvdWfl=@rJ zgR>ek>lk*s`Pc`;37i-x0V*Xnhp9yBK$W50ypP@+&#D1t)USvv{2HXjD6*kdX-|Z> zf{xrKu~_KB%1^XPDA*DD3vp&OW4z1)ADcHVFslfA58iX@&(Rloopl;%1yNh%F-*>5 z@o!~IozJxzPv$B-GBO>YJ+Y^$NbbN2xyqimyOm=bJ^S08(VZf87`Xq*g1wnMF1&gf zqZa;TZ649NN3qkmfIv+X)9+q*0ipG(3%UH;czeSxfk%h=Ad->R8;5XJ#Tr4dx#6=q z@fH%bAiSLYKarVt{A+22d3>^BBgmS(i@u zZs1O1rx4?;5IH8Nc@GDsLcHc-52Jan;1W-?QPKt1V|UdlNM!6Cf%>e);I$U~m#T!+ z*}mzs7Rm`sjyB4>sa!3R7BQz)b~A(u^L~A8R7r`68(c{_0} zSzMFQPgV;DTT}6q6xfNXUtmV%BTSB1NM z;a_I`{u93;Nn+1SDhHIA4VzF7Dhwr#BN;~4rz5;*i%r>gWz2MIN@%Zo?h8tSX9Qv+ z`7?C7b3;1mj@HmJdc&-bq4?p|QuII?*PTNuIRk>5AV*+a{4d?q zxbEyV*lx&u-Fr+6{!ABss`ed_U+0*M=Na$e_2NHiY@e79&RfwS027FVvlcF$bxS7O zFY;jSu2H&&OD6I75PV4S(bD#@Qc~h#6m}oDDJ7OM!#JFCF!xmcku%;m-Njskhk(^| z8~Tyc(puz9S&bJ8z28IU9ok?ows1C0TdWv6ZT*q9GUKbnVbhl`>FvaQP7MKiJAcGK%J{032fW4h$RhCI zVrs=6%i;;){m#gu3E`%R)Zan14v02|DST9#2oKaaWs2*VI zuMw8iE}~`q*wy;^aCH4Fm>Ar|;@YrFQXS%-8^y0Z4wQB^!y<;EqK zROeRJHNWo|Q|R4G3(YXTuKVCbJa6fdMfCE6sEV@s`tTjoJpuk^FupeHTf*`;#Baf$ z3g6$7#P^r==WosfulFjX{G~t3EzcFr|5BaL6Ukp!=gWxXKQVe_B=N7X`;5FVjV4%= zmQ06c4`l)^XsUKaSbQYCE+is8D_dS3p?xHal+S-uj(PZq%a@NG&xkh6tUo5n zD62M=UtJz}v`uV!oFindjYGtoenMoUJYJtCXy-ywS(+!$QEwx4Fj7(njH=D_g7zG= z_1Kv6B|Wk3aq~VrH$w%C8Kv}3oyQA-(mqe_bWgP4afmoB-@bNkywSyUe&6H7^E>=6 zpH7L^NdqWYe{ahy&+@i{PqUCx%s(*_NECJc^PYarFUG;n>uaRktpc!N0}y! zU&9;K9mb`Jba%BFv>Yf7q&V0gH8Ssh^XLsyxkF+-0AP0bHM#ZSy`=INUzNVRt3^QC zcBp7l(1DwYEXx(Ve-~XXA6Lo84Ee|`O>A_Sowt%{Ptkf9gkpy><3(q{(_iGYann)! z{$05`T@n`?OPmAEs^uH`2GPQ_|29D29$zWmtTt{oD#XO>AqvsW_zYF$0Ed9&g)vpJ zj?^!cN)zbfOIKnqJV!rEiJt(KPbuk*?utis#SxestGI>q{~~>@O^MT7r76m)r3yNi zT#seFC*k=4;7P*sJqi2GovN&p9ys0A%GMw<55TAb-rm!f|ZMoW+lNW;!Xm_+wMt@A&(?IHYKM~YFbr?1^Pl(=bE0upM!q%0#Yk$6Wcz#AU%Q3Te#`N zs3SeTTo#SH<|n*?#=nY*ut(C7Xp&kEo9)b!F4yKrXGJFB*I^Sjm?e3ZS$X=HFhJBNLZVywuK#mVs;SxDbVveg`M(#{}J>o`$OLk+|}7kM1N5L zZm|FUj1$ zDqZ7|$Aag7@WU_!o?L99JGS)<)SqnVFO_6*|`4zY#`H-3g zPWWqlIU-`z22Xqwtuv7FF?=zYJKmYV!sn^)ztvp3l1C)zuxI#>S3-TElT1oM=)g=e z>Go+FiHIzoFX5Q$oaVp&0Lp`R&kP|7F`{#Qksb4H$v93ahY{OvhnBu zqUo~3WeVGBg`5|UBW<45_KHrVu41b6o?riGFoEK`JA;RH&6<7zp39)|%Z!sk=Kl{}_Z#yq zGJl@j@EYvI#it+uTq9?M(ohpx`D^^(!c?~?F=x^69H)K1bo#9JDGf-x=rszVI;ksNJmbGdk?k`9};I#>Ftrr zb2>!bm{*#tbPW@AY-#ux5!B~ic+1jLO(U!(-D2{j4< znG(#9jqP9ttFK^tvnwj+!=9?!E$okKp1Iy6lL)wL(H;%~DJCk$I|N*b?3&UCrhEF8 zfPI>~`iI0(N8n!G(G=Zdr39y-2TQ>T?yxLQvMd|PqNVt=(-64+G70lW5_DO65S0Zf zYu~Vh`PViMV2$ZP*F&o3<;} zdnyl*ch@PHEtt3=M*tbPfhuDqeQ>7DZ_{VNKwJBuGU?<3I%%EK4+y1JW~iXZr*d9Cdf#-n0iv$P(6OKv7$@QfDUhx`A(^*qzlf#qU#V>7OIbpuWXoX8>v@II ziXUyY5+naA%qc2%j>=(E;agPr?_#|{JutM@W+ijC)k;SB*H$apo)zLZ%fF}2**3urLgL&FMm0c8E6+THqNs4btxY@vA9uB^RBOV4 zWne;hFfRZibl1!$0VL@`?lnA^wkeM-IkRB8r{QHLinVj13sz&TJiYh-Ze41p zDIFZVFTA7zddGzu)ol1gd=27kBkZma*C5- zw7zROYcVq7#K2Rw%Kv>`VYIQGtjQ%ue!XAy_~f)7>D$MQPiTPuE#3T>bZb9cI=*S+ z#@9{3OU8Hh*x2z|8UB~?HIrXJ(I`a8KN#Nu7Q@H)U*<>n@LYkT`IRGiM%r^%yC^F# z6>30aJH-BF2(0X0ZFDp=0b+LZ%HItq%2=G`pj>t+-C+*|CRLcfFcm4oMhIMi;n388 zC${4`Dk-fnAN;cS3{=@D9H*Z&c4 zuC>J{Tk%tb46HCqRNb!XQ%_RUx{<0mJEZEb>WKap9=9sY?~f!y9ITL-w^eCJVvkT* z73Smp$gotH-vSjw>S+iAAH~o1SN2|;;W18BhWIM0{51R{GwbgF0SXmM^n)-nS5=r( z{~el@_gDw6e!-3Rug$D57ps>ec@nw~aa#9fDM+Z~dBTe_Y|+h*=-ky&`(9eNBvCN3 z1;o;*28fA8d>(|O7Zm&&JkJ7%L*|9Uf>4u>P^y1fT147#8>=&n?K9D_G;GEbXcPAt zV4%}Rz6X_ucT>X$ZRp-(v7=g$--}s+3{mZDNe#E5?AJ>v3W!aRUWDY`FXf9xNKBiE zm>d+iFh)5amlzkL!EWO$9^ArD6NUKMz7JU~mj1tc&&=XA(V0c~8DE0}#&qKlXCBr& zCZvQglzA5O1SkW!_qb_tjrY*{w0#N6#65HwL88=U3rDxEM+~X=K{S)6WwXSM5U3MXBSGL^Q#O`+` z_)yJ^e5m=$mMZ~-f4WhYVLUYx+e^&fW6AmJmig-qzn2>ButkG!$^4z5W#(_1%-{Z0 zG{*-iqh~KDPp>k2_BN(o#JV0}vW;LL#vpo)3os79z_W>aPsZxp*F^~%TY67dQQa4s zWH`;H2ZQ&+?F&BKbcKOtCo>lcZQni+gv;4uw6hkBm2WL$0!@$+FQn!}k%=t#BIX0> zlJ}@tg5Kci_1_UcRo2vWo4&r0sVN^~QZm4nr|C2Ot9ksANip)Bz%J&RC!LoymfP<= z?=Ef?nZ;cX8Rr-WrkAk~r{1IXOvD(B?mQa$g+}`gBh&FUH61T?y7xHLj5NQGay~Yd zBL0MT<>~bYjIDi$taY0&vf<@A#kv9VbUQC|To;3NW7o{c)FszTRnJ@yigB5d?^2pa zQD0Y?QIP4yln#uxW@9nznr=KjG)GHLV-+L(?rgwV;m0CCwEQ@nf(x^i44wPACJ{Sf zx!A+qY{J4kFvm(hxXPi#RxlBfMGETU#gwU&UjNjnv?-KNxvtf;7&T)Ww&K;>^EL zUv86y%EDWZ&vyHKCR?RATK<-`OS;r9iF@i=)F#0I#+Xg=mQnr|_zij3(8WaL+jqw4O+{1}TELdmdhtYOYl& zy*fof%r|JqY_ybGLK^vH3?eTCNcO0?lsb#exl(ega*s$#jY=_b5%bb9dwG`-)g{wC zxv%dPhJYIE!sa@MCsM7ty&$n+Vr&~$IFUK(i@7%HuB!AYYQ}wobqhVVNcEItm-aK0 zq{s1%I~eZ8z5K^jHApnIQA{eaO7o>=)OQ*MtZw%+i@4|+!OmDr#jflwTV_m5taBvh znvEUmXs$_Yn_)~OodK>*;gYHn@A#c0W~`2`%GAf>PadA``8t39#9tnNvSE|wC8)`7 zT#E?0VK?SszXC$tC`7s~{Em}%Mee)7sc6nkRx%=3vlKVAd?B}%jtMoENy>{noLkn^ zV5B396m((2Qc~tG@dQW`zAZG0-~85FGPO*Dv%eWa#Ig{BohEz)*z-g!w$MrKz8(%h z4oR$Hl=r}*-|;5f*8LL3oVGbrz|=uI(tw5t06v*I(1jPlr(YyP?orMFLC<9_Df1Pg zlm`Ba@HWwt`jTw@!c4&epOK_N&&D)GQ^zxL@kSWTl@fQU2Xk-x)lCCkd78hr)?T_C zA!?X)=pSKa0`H6vVN(Hk{5FwJd&egEKvcK~azs#1gjD#ou!Ba6*>o{s1q4bezgKI6 z2S{xPf2|g4e_@6#_^HZuSK>kVn=lP3AAg^Zxj{b65FaTQ_^6i9jsL=}S4yU|NXa>I zTy#(t3Q*VgTlzG$^4XtRxz_6XRoYJ#$%m^Px-iLau4X1Ut>`}v%Vr9kf}R&s1KeNl zmN^okJ4d+tZ!7=~*JQd)(x3nRX!_fvD;Q4;Kb7g(MCwf=rGE%V50N=L>p=YT7!?lQ zodT)$*K1yXa*|Q#T7=D=oX%)PMs!Igqu?D$z=;1F%B{8g%`cym9^z36`I?F0t*28^ z36pMqI=l@%e0ZdQVIKrwso(rp^)?lEoTV?b?1 zGntkYqf43A?y(fDPX%uq5zB&RGFD|kGf|hZQFLae@fi58J&A;UP|(lS~RF(uPlWyWpjQFts{O_>R(~eLFy#zH#h5qxjJF3Bs`-MRude5oN9hBl&1#~ z5-{beIY!Gsr?-96O;Cul{ILb;^S5QMpJo(g31gjr5xlCI zyOzH^r2zCSvCwYFqy|%?v)CZNg_M9ad1CD?G2d}Hq=&A;wtz3QA!`{g!^p{YD6M$( zD zPoO&7V!g($NIF1oxNDcXFCC+peyD920wnaUnHa^vv|Obp>6dWNEsRVlSpEkMhqudk zcgV;9gRF)xD*dy-XW{Goh4sn!N{zI&x2#R!cCqep>A5-G8s=P%6fpy!Oc01609l`E zY+D&ym-*%23}Z{R*PNgSCDL?CczV?e43r8*-tbN7{$VpiI;+zf9@kMe8Ik0%vL^eV z?EDnjbgJ`~aJN!4J}E=mngK2p-bF=aFO`*U2_>g3q2)LPicgpf-C$yD`;CY z1n~A~rUvgdys}+KjCiovF`LPIrJjeD#@oJ5e>$~V}UU4e;+>Y2&6`? zmD?E(RO$v5E1o8Q$F2jdOcLq*5>%x;G_|n%-W3B*Zqyk-_-n$W)b9gjzox?7mMj zx~o@#ts_&<_yuXdWVck`$5}vA_#h9iEY_MJoa>65curCjbr~l|A-pBj5+)fKE*}&+ z%3VLhUH_m>+>~SP6wL%2PnR6vA}Usjg%_BY3i|i8Q%|(K3*f}BQV?1KSun^1P{F6{ zIS9S=Vf{F|vI%R2kRdn7jSX=x-qa^i;ll59Mj!r86OEGvdw)%mePvHw5u$ziHKK00 z-Pq`e22F7fF-5=J43<-U{7OXoAXElL%3ZWMAyfv1q?IfF?Xm(|2D;d?*eYYXk9ga+ z-DGU-F8lH<;d)^CmY9Z|C-Rjjg>5Ffyw+{ACnDw)O`1TR6#> zO232uj0qTd(>C!pAQF|Y)0&tcx@X`6nt1s6CS&3Aom`CuPN4CIa?e#f2eGkz+z4W18l}DxAcu~IUUBAa_X|#!M&WW{By?fvT^xSx8VkUSAuTQbJ z8-eFLX{^cU95_jXP+Z<~+pa~-rp@T6=~u&(2F;vcPkNX4-1a}q$Xeu8DvhfmjpxxU z%&)9dSA|AN*2=piO=Zxw!dT@#TV5%)CC8S{g83RCTO#4v?6Uh(Rd3?WB{5FNjf zrTdVtq`)T2^CU+Zwwm45|EWu)#x^?ZmJG(0JL^`RM>LMyh|3{cS2ToF9bZV=UF1uo z^7x`AME8axpGwGDe@!Z5);~4UnH$+54=45gr8}v0ONK?PQcH|d=8Wz@;70ae5v^PO zty@JyA8p~3AkoQ)#7?Y?2Vbl=7N$FpnO5LMX>76R8 zc>=3>plFLSV04ACq>@5z{i>CRRoBE3hz3cf7Bq^AHj5xhHbt7vw1R<7Omvo-bJc~y zp(?>5=v1A-I9y=XALo&vXbWDV;qHs9bFy@4f%$KWUFRU#Gqy;XF5*ORTR&;liqv*# z0cYJe6%nG_NgdbDPq_)H=8@tV)BHC$ov7b7Htu@NcoUa}kylkeuP+6w&fI!T7+%TA zVUECO=ow-yumu0?nGu^jz#`YDzIo$MjV!Z|J2R~O_-f&e5X*&;QiR+`m%F}CDg7F} zn5mlu2qjv&q!==0%H*p+{5#7TXHIiltz1{8F=h56Vo>J#E=7xn8YS7j0bLCx7dA$; zOtqr$uh>Te|FSUf7b9#@UD(PKn-K1*{t_HQD%16U&g|-;iMC?qr1=?|<2)Y+4uOaD z9&oefr3bPg5IsNfqppY?DjFz91sGkRDa5Jm>`m`GD0;XPuA~Gc1 zOgXD~Y;oQGSs->rl{^e%fwI>khhy8Eil2p}gKcTC)rlh);}c$0oC_i*qmg<9&hlVfjx&jc2dYeh zgRqS^jtqw1wdJ%c`V1@Ahp^>}CG3*H9AQ~3ws#(TpBwyB!jIvBZnEOQVfq~FW&63U zX`&!JoVsn2arnr2I0GY%NaRH0?UAk+Z)h{*7Y5$QIT(J=cI-XHKA>GTx@eGmh9cJs{twaROsA1dLiH3@a0SG2aydm&Q}em zocD*0lM4ac`C&9pBIN;p+Q2NHi=h`|1hFI*<7F5UNt4 zy@W!9D!1T%cJ1VdZ=dPkBgQ&j=B4B(du2C!##mvT-lkNJZ(&W7#-q9dC9myNA^(ip z1AGE@Lx}?k%T>t=K_;N;C$EfE7nM23nY_c>kfYiy@0sztb5DgD)tfW60pm9rN^Zz# z>?Y0FEw6&A#P^|o(3FK_;= zg23|mwLKIK-pKRC{1;?4gICXQ6joC3a)_+?I|n7`oWFaB@4!u#kU-k%i*hTQS{YC~ z`I~@8uI+0!e<&-fd{AoFS=(q?p8JLJmVcvWEk~_#2Cg>$Px(bL;&~LM!w&NcQFW8t zuK+2JVfgIwFUMU;({jlLGDTJOO>A>Ag5K3p1!+_<^$V4e%5tS|SGA=|dlkl9SQno^ zsyb-2V$$NTt5#ofo^aGeFN@|o+VX{;H2yi$I&VO!awa4;ILxOwBEiBUH?WAo8TQ!D zUr{QmY;eX3k;r<=@oI{Lm=Y|HCdbXRYn!E`HcYjCiM*(A87OGWA%o-&H$Er52$t}E zYHzuZ6}5fSM&mMuJX?!!CBBrQwDlK5}+T6&ymUKcll2eaxvk zxBfD{0Ul*3r~)W%c9{RQgYK1Zl7uKM|1iB8%tW0o!&v43L76{*1{q}t?YA(HIuE!n ze#&VyD|^7<{Vrp#z_(FA%KG(w;4c24VtJ`)SE7fmoIeD_RX5TxLovU@c))nMiQI9F zPuHAU5p)P1tK3W1L@)30S3bi2(eo=>R)?mG1+#zR*UanA*|)ra674A8Rde4~wrR z+`yt?n>4{0K$TBmb1zJpXDRXYMM?uiBq-_7igM2z99OeWalSE6u(#+@XmU!>RIz;< z3C>Wlf01CW3ce}9M^*4;g3xmBO{t!5KnCZ0E7gIx)2Xtc?TAIYD(5aNRq|V z)gT1)--#HWOO{A;I}M`C?U5OF-C$d3@^A6YnCfSY?>lO7LiF=EgN@%Gn~cv$)@+lb zO+J>H!_fgmT4sB{%JkD&$dBQ>oN{se_f_UyDnitUW1b<*t-l^RMwNW0?)TBcfoT`( zB}z$6vBg!bfF5dfQN>@LQ$XuVS3g2DykMC5XLtnwcT%0-vZlJ%d{PmE;^PhA%1}8d z#A4GHC$-oo7_*qCJ_!+bfK^)ZA+plT1LmrQopO=$HO<#)-gYev_Mt&Mok?IIcW|Mx zO&FV16HZG+wVX*km|nk4hLKFbd(8`lzB^g71<)0N$N8&c@Q1)Y5%dt~18T*knPrqw zZ_%o04dz&2v#?(|lOfYhV}ogS9OvML#NqBIxV&o()vtz0XCs7qU^4(}}Z9%_}y zh|8J?1j^ufF%V^&_YMI>K->qc)8p{HrLCpg`k2 zzxh2;-1PNtDJ(DicCAZj_$mdZXJ8em#*^_X6GG?%*RnA+H42hV|Eb6-?29(dK`Y3= zrD*cBMPxsvj!*Cu7nhgG-_Ua-a~0|pb#CK5*;Uy_dl?W83`38zeY#Fgj0G$&uMHnG zN}?5_B3*x%+qrneu^mor(VwQHTlqGE=_Fmb#n{IMUg#z^R{;d1McoJqWXz4{pMVvcss@0+kVrp z-jb};#nz`p-rn(>S6FXSQm^0qGH)CtBF9Q8)6K~?i0vbV9dhGsvOAny7B212YtvT9 zdYL_Yl7IkvaMYxO-s$E~em;cuWf)lWItOjH#6aanH|PChEt@ZHJZ#zUx$@AG zy5{R0kS@B^i>^GdD^YP>yc$jcE3rYWf#(q)z$Fu#eAZE%sMe)4Pjhi;HS@}Qq_QRHO*4kMr7zrDW=tts_;8#3S% zd4g33%Lwi=1}7;y8Oy(*J-xbscII{5bx!59Ez>Ke$=$u^JBmWAgQTgnkvN0VpduJ^ z$nfswyJafYp7vX)d+|_S=d!U|4q1uk#uCG!fH=w#C;?SG=CLX5$EpU8DiFJ)!P{iB z2MQE2Bg0-Y*aUmhZ?;-*LXb51H@u0oqpZNY=LXZ8ef=YSeItD*17o*5Y}NldJ)+8v z*P0}?etB@aN;aT+_}f@Qg&#NgfkTSC42rJQo?a`sL8&fo9Wt2C)Q?8q!jzf}@>iLG z|4@Bz;Trc+s2V!DZ{SE{f%f!dyEO?4{>d_EXwCcG(zeNVYYy|KWH%+K1;?qzoTNR0 zl$wpIhO-9OP@5zzDw%xEO~U1?|6=u%;$?$mBkk#Gx9X6Tngyziy^jxq((04%P;sm* z>65+Y2vr*Tn!@yB;}3FSnH8gw1Itrt-1o^@^fJ3dMf73U1zToJpHhSIn0r-wT;fS} z`4{1B=p-$m-EO~m@@*Jdq6DkWi@*rxZd3A(EPJim^s63q4Y{R4{h^*2@K+eQal&sN z+!AM}llFc6;- z=Q9~rnVm!pOo(>@>edCsfN=(4L!?{2g1H}G7G-SN^>T?JONGA zc%#-bdN4@AVA57UN|@zk%A!;cd)l)7!fb!lI<8R3D<9RX10-(Q>buCpw|f$>1^_DL z1~^ArgKav}sm5-mR#=+-*&O^C(}tt~lIUHsousVIafsN4*Rq+1SsyS{cPBdkNW>1V zNKJxDC%xspJ`$PNTn-s?krWGPkNs7yv$^0`Up=R@J3n{pmoL zUQD>=K^1+j1Y52CCwS{^sh&Ie#h!yHUX4%jbd+o}%nuTgD&0R2+PM)Tf#jLEpmOIT zs#1pye)IT3*>61BG^f9Ign!GT($epNf$u8-)9kSpt3#E)3`;jIp{^5nJJP~e3px23 z{pRzVATqQLTyj38)N;$yaH)G3>#z1WLDRz9n!TF^3m0+QM=D>pPBdTfiS%Q-A%U^~ z!)-|6!E^wHknG)YnASD8?FnCl)7&1TGrQMFKF1=9*!U~&#f#INo=Kd@&q<+hN=|fQ zJWRHp3Lv(;9m}4hRGbmvUrCH3O)V^5z|^x04JtZDz{kEl`tk}VXneeNo8X68{(#?n znJ^^X_QWzOQl~;zDP&`6s1^g+lN0EHuTkX^_XJ*XV@Y=+~;v|0V$? z$X&^u$+8;#vurY&-=MA7H&?mwqhtv$2kGc)^O8sC^BMG8wV6h62>#2aSHb)l*J4Nk z51z~8T=qCCvG6=cvu*YCgYaC&Q|N<&#i=#9lvQcY{x^HZQFVczCSMDO34SJ@&3^OL zACnR|MWNMOob7(|U0&Hd3;SB8`vqZ(%sK^X#sE>AncnVI^wta9aeDjKVH>xI5!HkT z(c5)p3!t})Rncdpw`BI;X&0Iw5)zP zW=mD8U1@k%v!44c-9E170> zBe1%vN!sb$xwHPwan0K^|H;0-rETiKT>@NJokLD< z}2f(EOx+`k_yT$UJ7sf1Ys&N`*s0(aj& zV9&vdX;$(1!?jQc>9kGgGoV!P^nxQ?TiCR^g@-t8)HXf4PJ-%Wu1q<4I%Z(%u}^(XdQ}do!MT@>=JRz7tV!U3pV+{6FjmI>G z3kvzz-JEI44s&=C8$9d=T#wUZOa1A4z@hY@y1)-AP)4Ho=+igS-ZrktfC9`E<8_u> zFi(?|bp>i9GyAk(f6!dNltf&Jm5VOF-r>Xz9$wS~DROJ-+1G?$Cm@u!Wo2kW3{YPO6adk*{_r^{Y%r>!HNUI*c9r zSVX&WUo;UxL`MtmGzuZ454lWh(o}(yx%a^#rZe<5_pE#J=JYOnCUnx(CC5%iqQM1W z1;7^B2LOhl)jy}GWuW>3sb9`pGo4a7&VLgbbg}wT+d8d&DRiLz#DV&gy1zHLa;y=Y zUiqSF1MQ|#Ns&3+sucSKu__%OsZtW!RXVP=D|{BqPw1yBh#_hy&( zmpR*-uNigxm~}T=cP`|%1GI_3rfV=yA&U%ou`X@Kqhe$hvphFs2*d3DK4aF*U*T1c*i`;EvD<_wSuKKxG__XuPhx4#B4wXf7Ea-Pd)QSSc6$mRufH7kaXH$NFWTh2dmeETesQl(H9Y z8;WDqzAU3b@F=a6rWJrtL8G(>l{e}S_OuUog{vKy%H-l54j^|0ybMaCZyn3Q%ZB4C zv!f}|MsU#}42QmZ)Db)=mokvkXj>inevg5E(JW}Yw7fU_C7Om}p|&ZX^Fc~Ji2qVI z%2YVq^c^h};jklnw?6Zb5wYEFnns%)IvjRQdceSDmFeA`z1v{HvHdQLZZA*9d2rr7 zt-{CEmZQx{TqL?o6f`=a0vkJ}1L%1*Z%#5d#}FpUdkXS6$Rz}_S9}NI=1k;Z(If7U zwj(&8tf8FDK8xR)s4+`C&02GR)66LQVU}JKV-fU8Cvuh19SG#R0}H&-23bEi7G5EW zhP_Na*Q5DzD(YBrt+r`uqCL6>hy>IWI8Tr=Z^y!yy0fADUas=L7WlFe?1dmKD@lWh zs>pdF@5P1xgR5ma4@mMchf&Q0vUj?f%$clVUC|bSypONk9k`-enPa(|k4XD@kwu&p z3k6`VSBVY4&ge?EL=OGF96m|01;M3gq!@eg#IXOga=W-4k-)8mui5q9OM{U@K6TL< z+DbV>w%|HW<`~eNaVVe*0$-2SJxhW8>C3JUqQq)}{o!d~cYm$1_4e_xuYZgeJkD4v zjkbUQ0tP^`zE)6V$yHDxXNT~H0#||G7yN4Q*6g@UqaUWQj-{H918^ zoEJJZ24l)&C}48NsLAOPsWsN{KHWIqnC9~0`oQ#7ySM@%oS5skQdRkD-MPA@ZhnuIA4$vU1lMdg+B!cj1Im}X!Yp9&;{ z$D5)+K)fP>mk$)k(K4yzMdsObD*;;^%Wwd)IXW^?^Wd?pw zrMgRcPry-?#k-FkqIfUl;3S)lgEXvMAH~Q2?|p^J|KI!nt7E_IZAP>;4(x%Aix{pk z3neqC?GY_3=DY4RH4tLM**h-{wqm6GRSM4E<@7Qc z#8^Eb!Ngd3z_JE4{-}5I1lhZ`IiSt^gssQeA4hdIF9Lr8isJm++uj~%zs(zslntuS zubs#YV$TurNyYAeFvpH%Y|hx>t_^g*1Gez4i7Af5g%Q0@OL{eSdh`oH88 z`k(gG|3jJh;5oO9%}?43Jphi-phXLx)c-w$`hTjl|6^vpztR7G)qarju`}Pt^uKhk zJzqipkid+OlE9Gu|7iP%_J6$RXIVJ-4E;ab5;d%O)5>iV8F>BV{=ZSR|MTeon?HO1 z4<7$VV|{*Y%|QDZ;zOqULF0dL|KCauF+G)Lv#&vNUQB-bxbeS$!LRE3hxkjB+h8s@WEPMq z!X^aaQ+JC}nhbi7`Vag&)YdwBTY8U1%4n1ay1b zWEC`!iJK)tE^W*xHX=YF71*KyFH#0`fux1L*fl?#_qY>HGQ-@uMoFF^-7O7qTimP7p8f+UOG_db?J(s8568BL4_)l?LWKMiLuKhWS9AV=vbonlzv-= zl$l9^g;}ah{kj}VGr^MLkf*^pP$tj~fm48V>6N)&^pyLh%n5qo#M9u+KO>wLkg{3% zF>tyC&H^d3L@z8mt<0%bnV%X?8=oG*r(epPA#I-(!>4}T>^MjGtoY0jIB%3Pncw=Q z*c$!1TUFo3%RCLvfwrHHPaDnxfpdYB8PE%tp4RqdXT;|~ADt1O4ae#sZa{rPJtO*N z#flq*ecI*g4+wKqWB}2AEV-V6R{Oj!F|I@JU*J9IJ??#7UnhK0Z&7-@&*>W#Te@Gk z4Or<)vj&AMB4jKu_6Cgwd9?|QkRsYX@9xlhU-O>u9@krhQ+QvWr*Bl_{C*j)bM>Z& zc|_`EJ4yaU>i1g#LbB&HlArBF$r`t@ziRx-emdh<96lDgWPVm7n2uybC+l}$NUYDe z-J{>(F|JFo@E#x3z54YjXBg3H2V8C53>hiNS%Rfr8Pwao9aJUfV3_Im^?BR$iVVFp z(<}GzynocIaDFT3kJYq1OP`zb(QzK*?jP;%qu%$~W|yJf9qPPT>a{a)T0;W zd!@2F3iRtshSX=biFTaEsLs&yu{OB|w`r=~CO-`-Md(#+DjQOVzI>KGclO`YCimbr z-E7r#bqzHY-KuJW^J4sDfX?(g7U_1F%1Q3MxjlV@<7mRU8et%sVd z3sUjkS~|34>K>B*kQz&;@e;PH!rPEf6MSYY7vacyN2?t0=L<(yau1KfXMx;H&dl5_-*YB1TG zsvGr+8YrmrR)zY3UL6Yer$_n%kY2h}z^_;)^6Vf=(dPzEV`qcl{zRnP98JN!LS|*b zd$UZ;`fuvxRbhYK8VRZc1MqB%m49Cc2>hFcdFT%agVB`-d3xm@HAPG5v7V6Al)tYt zZ04yNwMy|L#m3gEiF?&Ar7bcV;$5QO_prqMogK4H*c5%UO0grFXI*4Ht%n{`Olv4l z{L2N(qsTdb)LVqPiGNa4jh591K2qvW zggFYfU>f=l4)PKcqy`N_C4Z=+Cwq|Z4ZT;uaJc)BWCq;Thb1F?T|^M&wO(J{BT=m% zb6yzQ-rI1pmlR7b)i$kI_G5K@^j01y49@B5<_eJt{F~hHl9*dgawI5DtEQ4>CcnA- zzRfSeY5jB9&qVwAzx9aK_xF|`gY)mrpJ<)8$`x?A_J9(}KB!-GI1n_qwOVJX-waoH zLQzlfGH>O)|w451ku&%ZZ{$+gq-1@mc6ZKIMlQRw5~I56VRf9GWDXyE$kT z$b;NDDt{`R@>e%s%%`|^9xmTnZNG<;-!mVPGP$d=Gkv}>^}?O==FZnydMhAXeiQ?j z_E^Y!h1(iobu#TY|4hy*-1%4zFqcfW3z;BK*gauAvb%d-x+7azEK48giZ% zNnl^Ft9h7kZ9=6PQs0sX->sK5!;tzd?@XbS(ctiTb4P8b&amrBZY3|y3!N-ja$dNi z!0ZPPRF?g)n zNe$Nhef(9eQvRvl6@OK$@K?3U@>eDAQ&)LHt!|89E<7M@%b;zQTclKKoX!i4uqvgu zqH>Ep-q0(ouLJ!exRie}c}>OxMy2{g3LDYD=qm3E-d*Ns3Zm5N@NzH~E;r3vDF~=D zvHZr8>FxDD)U=wS!Yva624`ZM(+n2{nM;0>A~i2sdb%AbcSi)Xsr z(UM#CS3jA==Vbd%B=9!$WI@uRoo>7z4yOU3*)G()Qi8@ya^dJD-Z2vt{;fo9&XS7$ z>i}^_9%BrKS4z-tUM^ZX3lTp2K0~gSuXu%hS zPI?x0g;$E%9@XnH|2jrlPPoA3Elcs19rc#=?`zY`CWPKbU!J8A*A|UlV_vdxmnerC zg(=1qmIR`w3iGt}=Zxo!myYjiYaez=hY`7Chs>Kto$n2M;Pw^Q!}pv|g#~~@CnAq1 zZpmIk1dH#8h|eb)uZB*fEZn9L?B&L)cL&8dd!>M<6x_oe>3-#3oxPa$J}u)bp_5q) z_do|iNucp1?{kthcys`WzJ|7gTQ9iVxn`vRAeB1bL;UA{&dk0dDwjr3EXLnY<}cj3 zC7*)SeQ&mxf_(~-VK24awA=Zf)50Mdg#ExqIaq6x{M>Xn>0j8%2`oi%sj9r!!IlVG zHai@JsJQhzKo|CV3r|z9j}$VX;6?Npe+%7?OMKssumbzV@7|3RdQKhOa(|>SW$}#h zo=9O@?;9`dI0L_x`O-kSM=ZRb+*Uw2Sa-)B|2LhH?DusCDqPNJp)2py!pp;jvTmz# zZij!a|F!4}V=yw=`Fi##mCbw>DhJeXRcqd@|g%9%P2eQgy%y&vKclJ)8m`LFbM?}UNP$b{+DJi$v?@}Nt{(L_ zC(Dxvy!okzdXJQ*S#K&;dqEa^c{5@u>;3W2)L5t>N2M>wl?TQ@0oR&ea_evR2*c1C ze*xz<#)j??d#32VCxmWKP6(74(>&PSYf3bpxRJ83@V%+f9i5Ua=kA?tf5Jt$cfy84 zm(siHd$hn~IHF}K{3%E?9HFIY3Bg}P3(~v)-DoJF`Nrk~N)9h@;7hl0EkW(>d-!|H zb(vzrxw$aEiBVHHkx?LnB5#KlTF7VP9%+Z+TG8AIs}9|sl7QAG`{=k1tV}ap8xDQt zB2STC$n_>HBGC%1q*JdRJe5bDJmWs~-@2tM_3iAVQy)eHkiFd13 zGOJqqnH4^VTE}-{ClZ^rdV@4OuU%{W5gcf6)rN2+)nIB=RX0f0o2>?~{`(s|9(HuF zV4&iQPpkMWt71X1CN;WNH~FGAb_KQRpM+ZQ%Cr?cXxyHH!whYc591OJ{RwHLcJFp? zCoSUcmtL7H#cve4iuE8xx7{*P9c2~fV6*#Nfhvv7iYD)o zdX4M2vJNWQy<$HrUnZ#rK_Ui6VTlXyqhcBh*vrZkOUa5B3(z@GhLU^rU?<#v9fm=# zGBCu>1-b_zKQ842mY_Nd?Y|7U%br$e+n?QR@|DR-H(!xG>5D4REu^gOcF|_;)b4(k z%vz&Zy=nIK0MsqM147+$$Kp{UF>PAJZlWwY((iA^VoqyYw;LOzfnfmMJuGkLpJ7NK8&!<9$g>!M^6@~T1(8|gok$qqvR)J4ry zf>Rzf41%Zf(0LB-Cpk7BF%yj@a`0%^yU<6A&?Lp>%{i!rU(-8{>K*a+|m&jT%!}i$Vlhw6}9A zc{cKauan(L!!c<=8gpF%H{X#iO<^OTL1y1Ri)LhUF3hKTU6F<1&=v9M*G<&@@GQ}s zFT(=HcxzELZ|+9Nz{aUPLx@=Qiuc&F3E))LpJCV6_x0tauUO_Xdb<WT zf1W3{rh0m7@c6BcLgz&d@jB87C0 z=JF_H zx6RuTYIC7LAkZ{|vN$yNh_3&E0bumG`B2{H01u$x76(Y6JWdH13V0N0by`q$)lzMI z=*vfYgf>EL|LY@k9F^SF@X4cd9z)VXlKHQ4(c&{wlZ>>gi9<;EJT(dUqKr0e

$^ zr;W58XgW^9C)lt2td*)!b6Tz3q=zW&TGyXGYQ&gJyvkMoK$Y=9;2m7wB~qUn0iJ=1 zo;NR~qUJ#~_csYnkxrr@RMlf(EqjN|Xr;+{bxgfaGNR%H-FkvL*UHEevWm!6$`tHw zf5Pyx2{TrD*8+-*&rfPbs=^4%@D`d7#c=g)8Qgz;f6|!XJ4UHX416`NWI%}>nc4L$ zMU1_H;pTS$qI;O>!ira8Yw$Kh%@PHZ6!gKlLf}|>T`N=1@qM~_=B=H@Td>qvCF_uV zt=_gssY@1Tx{Bz=vF6BS;xN`Dat2-~#h|>@pBOw(fLM7a(6PZi7sm>7ceF6P1lBfw zYo$PMYu?(~Jm)eR@$n*`2Q6}$I9Xi{3m2Z6yQA7zp24n}Ytq*P?s>5`uNDDME<5>I zRvD#Pva)g;tA$~GG*)nbdTexYhGetWWbR051}#&Y`w9wU9}b&V)R0g9&0kl)HStz? z37l;-OKel)$YrBh(y1f`SBY4#?6pDgvz`p~1X!PQ;yUMEqu6ESfi7*ONHCF53dNsP&i}j~_D(X)}7Gh9OPX%l8L{>g5j`hO|~Mf66eVv3hxjVMtqz_0l?=8W@H&SjQciA+5v?zhOut_3~dD zhO|*H-)|VwM7?~SVMq({QD+#^K)w8sVMzP*^2ZHBnx~gPY8cWwy?mo#NaIAHT`w&X zEp|g1i30|GW^1S~OIsbhP#JT1@b{^n(486XNU>VZ*ZBs?duLBt=+YW5Jr9r*jcd|z zAb{_HP;mwhtMzNrqltzyTIS+Uf!lCSTHp>6N|v&g{kJha!zfMLw3XSy zFf9Brwi3>Ozb>xqeID)6ugMIZxLjLB@>x(9Y%c3v7jf;dbCak9Ev6+z>aA4@1 z_gTvyIv*O>O!zqBx@Lk+S#Y_5`u+nR@sHs1Q`845AEh-Z*}pi!Sb zL0fYbixqno3bl@uUB_%lQTth$P za{7AP8`A^?jOF#RN7Kteytd{Jc$*Dm-I)5V3h0EuUpQ>~1LsZ`iZSDm2=bVzYwW=i zE}Il=)&sW_1YRU?$3&bUv*Tw%pfffG!et+ZT0ayN4wt^0xixe$QCqQGYCDPj`Je>u z%+RP%9Av~RbbZzeHLJo!>EW{XLapz;_>Sc}TIvk8;Mqi5F_Nl`x~R7hJ8u5e4rBU1%h-OW1)0*?g{EI~|c`wy{ z(cZ)DT1NNS-IW*7)_j*&ODg$>aD|F1z*!gr*$>{s>AGoO_Z}+kz;xiS` z=*!CoP<;Z{qSvnD84mTIkd+wfk`ITU5n#ii2X{%# z9^Lnp7!^C{-Q|5@TZZImU4C)g-Vdgo&cz7jwH+MHP3~OO+j%84N&QlE$!I7TJo=@nz9qeI099(a(&{sSqd}l#H z#MeQcoS-}$ezFBBvl+HBZ6lg1QB=r>Dd-sIuS`ut0(>TMC+O@S~VRYK2^+MzV162g!#gSq_#sg zpZX#-)|CxDKe74Mff1zqn+xiX@+)T)8D%iX(q}$C3QvrOLZ=vcuZglIc9`;?SUv(n znr2r}MgR^MBiXJew5F|mzDoLE3qPS!wi>Pm+%k6kCvm_HioRr{s5qt{W5b*E+29py z?fe96#Q?r+0N{WCYJzz8jaC^_~6Ui?BfrU`8~-&Y#4+P5U_2>#efeGlVC z5ugOhoEVgs5RgKChb3W1C3M2G=nmsafjaCO(`*6Eu}SEJbMe>0>+b}7=S%VN>l)is zGS<;tGB(=e8q4DpuTh>K@;rq@Q*teN6=Oo@QC4`pwB6a+ToesY!^@&W`7e~?=f;cV zOP4ry!W7UOTH8CW@O?iSPU7VC;gt2wjpxaCfXExUe4NNx@%kIj6M&km1XJ=x-u0Jg zBD=(yG5e?^!_)eW#0ukT7cDUcl7h&$qK4`k)j=H8F%3v9p=TsEA$YsuTNYP)R+yC3 ztGJbsgo!&FFO6qQ9y`VY-4x0?65jLSZU0Bipl<|yqPUpxDPAE+NOKY z-zwc{2xo*RZW~W?j7G%~b>BvdS6Zym*#S!|KN>cKCpu9%Y-RrsqUtb$8)d*bt#L1! zXu=xvV*o9{+Z;TW4CnO#>&Vj=8B2dltj_Un&DHJR}U{LK#8T@z?_%X^dlMP&ue$D=UK#r z-f%KXbC$muUS9^bA|W{tmw#&RHclRS%nB5Vt5ru)zZ$IAa0{!1>~X90jw*RQRpsr~ z?#9?Ey~Sap3jwE(<8bh`{2*e0;4N%O1%@N9(52n|&ytd3$u_Z`+^5bJmLC>A7%7IF zF$!Mn1|m780rOEN8V(K-+b`x3ex?k@z8U913E?NDNLFKyF>0_vw=%kXo;5hMO%wd# zWPd~ZS>%{+xSkA8cyhk(IJVspOf`1zJAtMgWj8xAdqD{_wuqwSfp|TO6`H-&5)(yCYPgmw|#bOvMR#_ptXex z7kfiA2K;ORVI^!_y|l~vW}Mg;4X2b@#aMX(c)0d-;*0OFmI(bxYx|RD6snOPB=;YkInYf`2*etVN^5{nJ|cA{!f-kVoEA$Yef zkJaDlNigo5px-$$5)vH*`KLA3^EXl~dtp3eYa}7BZ(*_$S!~t8@Oss0&zo=kfe!2C zwAyNVm%hk4t-fZW)uc0>o|8tOKGA!OvV{Pssg~Zb0Fa2TNidDPzC~-}wbW6IUYtKr zjXI$Gq&fylQ&n~SNeH491TaD7vcG2td!&>G*qt;boZJ9fanU$}WprQEiWC~mYhU() zm6~ycoP(a2UOdt09E89D)CDd*4Q-uTNVZK4*F8fU+dYbXix7TJM_$dEa$rQxN#z>ws4)8MLhv8DYFw1-nbH7Xb<_r~_C?;Y5$9#m_t z)cR5SnDT#BzbxI(Q2#DYcK%P=FM`q;>YwuW)xV9AoxmX{BU{aga@P4N`l35!^CJkL z<{vjW5;p&vgnmy5ej)o9r~s^w>$uYAi6o%yBS#%0Ra^7tCeyNA#yxH*W z*F$pNZ1^_n>bx2An|esjk`3QZT^&3d<%jf;93dONR!%`AQ2x07j5=lx$r-cJK2KK% z(nk5CbM^Ide6Fi=X{DDq>FHF@fAULdN%h>$Z{g-t&!72~ZAta~ieK6@sh&E1@A123 zYpSP<-!1>eli&1hsh%DDyw9e3Hu3vrYpUlsznZpG&#U}C+@9)b-jV7VyOZ+UQ#~vA zT^ULBwDBAN9C`TN-(s^;d-!GW%jH)vUwf(8Z(k;$EDsv|B6bu;OF}O8346oWxVMagvSfd= zurEBt?I^^C1(z}Ucl+fYP#qUEDAu8kE#y&1>4lVDD5V$r^~za!k-NOvb)N8q zkT^)0tozc81M5(9;W|xrX}`0RTRF}b^b&7B%M|X*%)!%zlvrRK$6rQgDI(|HKLm)- zDYv%b9s=RyXW9;N@dW!l{kkv3xg(ssIn;(vFy5Dp#yd->wcpt`$>&)#zu`|T_3CdQ zRuS6USIYISgwYuu_8_=zn-VT!#gP(rHCX#Yny0KcT#&)Ful4h_Q@iGCCp&oV=C0a$ zJ{{t|+Ir8>4^!8BLfhSWFD>7h_wrp|4kzCO3sya#b32Y`W3Ns#ic(1W1xflb={iX_EuE_?|1)R1JAw8$``lL+ zW(3AWZ%b|}%;1*9ZSJVwZ6m6=Fk_JRkh=eeu_YNoV?kPhi^57W`Rhp_ z<=5Z-1$3kFc2t=1@nBu&OFp9IFux@mg|z77puf)NwvxH$L~r6&Ms9XtmO{%7GLyY$! zW6Z)|s4r>B*YPUlKA7s+vL9zE-RE!VmB-mz4$32WOUnH`hHdHRt=6%5D-ZLLO(*3p zsWE!ZgBQyU9{&ur&=F|nuiO4ws%IC!PJZv(zn6Kw&M%G(0@NSsNfCW_dtg_Kw=Wb1 zvt)p-+Rx}x16=txm$4REb&$U@%uNq_qL#x{;UwXQnurwss&@DzNjCy=#5sXawGKl# zL9S~JFYT+=NCB}MbRt2>MLO$|TrvZ@8ik(vDJjm-q4z@U&=&&6Nvt}o-NTo_7x8B5sEnqTkRLXZr9I1nj}l5}5fYY5sQaw>M(OPN zT-@WfEolo#%SEz{AU>K}#tTdoHW%s}wxo}f?9FK}cx7Q}kovp2s`xv#3aCu++ zG@(~ID#ATR_2_FYy~tz!hwp9N4D_^1XU*bX>cSCRkL@uR7WPEF(Mii^El#PdS@X{q zc_i{zzMkmhyydeN_Cz<`PZ`8jTK#JleX~b)Jg5y%UogaCwne1;JRn)In59r{fjRqo zt^^uZiN61n=&^>DyTMReV7T0`9?8XIxpQIhS@RF6p5O9o=lAlUAM^=rnsSaH<7$8+ z@os;J$SO0JItJ!0b&b}T?1~ImlE*%9J;TrkOS z)Hl+~t7CL%hP^$}$m$14C4?PT zh8-gcC>b)$%3aSPDGVBrYCKNm(#m^gB^@nZB%_-;$RAD36+%jjy-gHKx@yLubdPwG zv}0cm)%CLt(nWVqx8w_P>;y^pI%7#vTgjq5?dvR4PSbxzQki|*z&0S>_kB11OO?#HJ(?jF5XXoIOqJugpUWihk*`m+c8u7IfPJpjo#vK$? zHp4S}^f|rLgsUYRNt8-?93hIo7>X4T%MU#63S^aEUGue( zMJ2XcIjC?~=ny_KRC?hIn+1a(P0s>F0n?qMJ?q;a=7Ls*TlXF21>~59V_J0G%^;_H zw2ka0#WFwA&nw5VK)(U!Y=dc{ep@4TCd{LcEZ;Qa5{eF`de-y%^&6?4z5HI|m*8+E zx(5C^VkYB89OqiaS>Y8PU$>1Ko*FI+!P{wDon|gGz3E4U-2I za*NcTg53vu+K+y5HuM%N-JWmceieydsg^5q4*;!^B;Bh7OE^hrDH;u{8i7KXp z*j)VUDK?j!u&2F2y2lYiugt%d+5-yWH(UZ$qWMJ$t&ce|0kMjE`1Of2b!j%z3@} z$bXUvn=3nANXJGQ>$gNCW|V`pu|*#J>I^Au=wgKYUESo0W5bds%iZP`zdjjNsk^Qr zH0XQR4MX3lA7R|*Hoq0iF(@%X!H>C`Z%C8A{#P(fI@CUD*PTPl>-xn<;0g73z_9oU zVGgfW_IG0J1nKWABPR21bh9Aww>UW~u=hdd0*O84lGTrl2ELxOi z{8X|T6&caR0pS%c16w+KRiyb(@Jzil%RKiyM?&pHjLMl8kejSkKl*F5W2LyYdlK%6paV5i{o(4231Re3zpaF`iJ4 zoYu>D7h&Y11Pnb4mOsL)gc0D=_+D!En@`QRgnAXLEt3N7v7!{9xjI3c)G}=f$lf+_F)PLgFrceC(_$Pi{_laL0{KT&hf8y6Qk$CVY1 z;260l*`CY7)Ur%kmPrL039)o<6rguPC#Ger7{eKedl< z6?SPYAF?gzlt^w&1Dp34(fdyKCAPqv+~{#i5fxB~$(3foZBn*jG{%o8&@17Mg(9 z9vnlPZd^-Gsd?c{EK6UKYvZQ5@TSx8T`3cEvX=EGJ66N`MrC-W6Sy!pIm1)Mm(ghi zc&h!#Bid}X^>SXT*0Nru(b_*9Vl(I!P&cQ4aT3A(-A*kFT_Lyk7?CrR=dWXfsGZFr z?RvHeuiL@Spn2sFlM>#irpKv?a%Zy7=9$ya?%}Xbc0Au_)6Ka9n=~iJ9p86JN4UYk z0e)NGxJx>YcaG{nWo1bz8WYgpvd64F*3$$a=}+0?s@^3&rZ-2?P^hW~7A&4dBXmst zHaq4bXO;J>>SADS;6~~EyKD@#iEe8X+l|D`voCov}6OuTOGX*VwO z+8W+WK*#xuhgiln>}D88(XefM(>bcM?ajnd`v~dh#Bvx3vE1THY%Er79Asf$6)pQt zUK3To&JYm`F;SJ5bA%1=qOk_+@9T zN5rt`%XHA}>CJQ4v_w}uF;LX_T7b*6j_yQ0U^{Y$KbqQ0E>=QGD_fVI+s$pV+s9Id zU4UOo2ySnhTWA>pL%O{IuG~~wXtQH>ng_ip5St4NPahwl!>ys7iGX;5ZRYyB3KER3 zYb*Z^0C6rSlyl~NZMFG3YnY$Dg+ShyZRvtP$S*z9jQlJq;SaMj3*P6rA+vzV(b_W4 zY4sbEQ>f&VN@e?XXsIQXS|X+1W|dl^N-gPXP!Q&4Po5yfDf0d#n7p3=(?np(o}4?V zoR5d1``=aDY$&8*vRU-J?2`MVRajOWD)T`P$nWa@Z~dJG3Alhnd7>`a8Sxv%xlAL@ zb~^beovh#KnWrzZ%;-VTVPCI5x+pW68sHn`kYW_)IDJQBS+lt9&@E$Zo?eW7ljOO2 zvB%!|iczBVWaOA8>?B;8tb`Kak*MDjRlmF-A(&00ODVzLH7}J-a@jR6^;j4!&6rD! zy=`7PF}qZ-R3Tg9Mn!&hMGW^8Anbu}v2F7T3fMK*;yUouvG%^XjOT&<@?5oFK0)o5 zPgMKm`R#=T?3YiFt?_)G)_!?D#)Ps9b0t!q)_(a!VG$%heZQRY;X2m&5_|F~s*W^6 z2Gy4U@NXRHOi4%5C`^aA8ER%f= z;RKn7(>;L;Yctpu{(@ed#RKCp(U+aQ5I~N#)loZ~SoCYo_%Tv!EzXM7QZ2qUqB>mB zTN>MZRWO=pYM-K>U}`kAhLHAb2euFINA(N|39k z$dA>g!O$)MAChiLjAmBq6?KsJ~)?KD1*tN_zcy z*LoJddV_JT%aZUaS=oiJb(@V|grLbO0=XLUF{Vm=;w-d0+2sC8f_;E8=)_9;=WuUB zPZI;s7IY#dnQB#D>(D%$c1+F8)R$#?h)pLA)?`aE1H5o#NsT3$nQBpb#aEH?$w%rG z*?6Dq5mvi^C{I{4BHeni%rG|T&KU#@}yQLQxC7Bb5nn+3_EdY^bG>wr1AzNC*cqZ$>EL=)Q!&2LA9x?K{ZJzwjbkS_$$ppBHJ4digdlY8feC zYIu=#x%zU8_l58sN%&6=U+rjY6_?H>yN!Kv)Zb$SGE0p1_L9s|xTz0hd3S|fV=+iv zH=@17b+bdhHuLRND>}%_q?1p}86KX+|`VnId}# z_C!9w)1jY+o)SS_p@(tI@q{c5?<4{{$#ag%%fHIY3(tyZD5lA8a~o67$#lLS-q6bS zu7yN{Lnl8-)S9wL99o`_3h2s1e2)0`J85v!oVVFJGy@|y=Ytw#$i=StdYx&MP5`Oi zC}{PewR%`^BM!cM2lNHBr;p_IYN7iCYfneKFNFGrFYzI^<(xolQxJ52&DgM$s=B{w zZ0L~Zmy8X2?p;Mmc7#qae6K7Hz4#+df*l>_1L(<7cKQ4RS^~)SH5*B|sydt5V zO9l@9)D3TuNB8KfqIa=PE`PLZ+ve*f!Gpy}SCi+5qDk6{c`zrg0kwuJGh*Yve(SJa z3Qt(<)PB)cAnG80kwq?s%gPT-Ggv6f{{5Vz3Y##?VzI`$eKwc|wRzWhv=tAM+t!Ad z+L!8?!EZLdoB7?!FTigZzeax2i)#G$g?e(7NPsy@6ptG(mi}ZPVtP&PUsFA`E;YIVij8;sXV1W<(Z?{#F)zzn@A5YaVah_ zfdX=k$rE|xKziwU?SUDxl>yJmgX$J%Lw{LPI`qdrhMU(+c_n>@pO+ljUlRsJUgK*h z?(9M^nVOl-aA>ZIHl;WU^2o8U2NX}uOq(=0pHl6J{)^bnO& z7;2pjB-jYeOv$?j)Sg9mZFJbnAXkFLlj>!>Z~DQ>xE&lO-+|$=r{RQy>0(Kh)@ZP6 z(a;t}Cq8uIW^J`tAk;QBw0@`#rW$#8TX(e7LhUB-8jd*fGB>HSy$4W0O=wtAXXdj2U@dKQnCH?0gKGpKj9^kl<{5fToGQ9ufU z=P$V)Lub|-t7^=}H@+lqZT&~2*mJbiAMgs$Ypi0INwIIKV%z%Pl_YL$^#Lo%Mk~pq zlH_q|NW+Pd96TeIH~nw;&^JI4vFh>5e~RRUCu5H6ehH6vT`R&ipGCe zxg1hLqDz-1f(Tjq8y%Ds9vQ?CRJc5Et9xL*+Yq?c4SBl%4-8L6Ny><8)CQ( z#9tuGp~Ragk>{fEl#<1JuGY9yeRX6?$`%!NOL)~GE0=_ozwDO7E(O^L@@Xr!TVDw; z{u546o5q(zN#PEEPQ2FAovJ4hXz&|+Hfjhsr3^R>pQD&@!$$yH#5%Q&J-q9nh> zCZ`Mu5Wb$-YACGyS9?=`}8_jC70{ zJ(~ZC89mxcAYWAiEBR>F!%tGDz$dT?tg3Do)lk0F#m^3LOehh9{y7JQt)NQal(tHl z@$#Hbhtt9TLmUhwu8Y;J>P$>@2-psrCp?moe6a|MXW9CNlgiwI5eE0Wf`4WF8wIBu zu($YgL(i>{FOzFD^Fu6y9>^IZQD=fEp(Ni(i67HUv^`b<;`C= zX|5|UA=I86`bI+C5o4w&^g)KUdV_F>#!LAdEm$}aIFgfP(FvhIh zwRCS#E2vgQM^ihgxO<$~l03gmMdh{Cc_PE4UI-OQ*c8Z0ku_6{Il?s29>IU2VxNSX zpCc-*c}HuPv(-%G_CcnDX+a&sCGO(19gd#aKN5Gvp+n9lct5E#kL~aThKD*_Ryae# zZYx|MVJSK@^bIHFFvKD1$;=_SyfI`D%&G}N_yXES0gd=eWxj&{^Gs{&X8o~4Ex<%U zYwob4YJ&_hH64raGh~MEMGU{%I7fsc+&Dz1-OSvQ6*`f)0vJ zOiwhJGHp8XIn-@WY@P((dnDb6ScZh|-%)y@DqRm`=1@bs)DT6FP%1hgfwQ@7@|^LF z=(H@sRduGZEHj6DAsi{B8|M<}wNm#9U@l`^^aaGvN)7?ehEgHuu74G#^T9A7#MK@A zZTP^&-$fUOKBx>_)$jq*BRo-YsSo5Tk+xd66iqO8)6X7gIf2PKt>FXNtPEUk#9nj9Y8gB@mXlfHB$^EvA{iMtF*SdJ*qcRh{LJ$y5y^)3Me8xmhccQoTSYxK> zSk)t_W~Ky&)!&?%{sBEd8KDI_Og20gF?TQ&Yy>CUUA9teb)viA`3N;Nd>}SG17-9K zGmf@W7c%mBjOV2ew2GzoI2RRJGR^!0JC(9#*eCk>gKC>M*YYgF&@r}uu@_>vs^C3J zYkZu9S1nM%A4@Pn1;0Y_tu2`5@~h}IB$j{kBcXLF&>s4}JR_ld)vJUiNa6g8_zqf+LlVJ? z$9kAbxPIayIcYlx=_&Ptv(PZF%``W2R}k+IBJ1|9W<#Rs>WJ?_VaE~Q!^m+w9_>XW)P0ZZTui9j$Zr2r5#P=Qq(p5hntCe* zV>KY`dyqje5vF7m&)Q7B`uaO>O3;1#jpErDCP41$NMgW5e4Ts)Tt92Ruy2nabt#F6 zre;ajy8XtS1KD+ZvgdRfSI8z8dp>n;)=JTrINHnJPDk`bUt%4{xnK77eSOW9H%VOy z+LR9OYak}r*Z4v$hTC89w$>)>i)vFMT;Zr@JH>mf@rCJHNiX!?TeH=7k*7u)AgIih zddvH39e%w*I#w@SU@=`HqfbaoH1#lTtaV5^9GUc2MW3{y_YmD4x`!kVZi}}Dz8c0> zL`c3>f(zMpZHBJMNiR+_e?~GnKI@onzSF~{B}HA))U8s(b9(Uvb16L;y3?J29^-SS@dhJN zfq_n?oEM%Z4VHdnZ1|xcDccTJCVNygC#KtPo%PDWo*HzkWGKp@vyc5`$Qj#Y zIB`sL7Od@7Fi@LOZSMA2rKE~{W^4!l(~Px(d=b#xmVnm%O~akHJ?Pd)OQP;!hTo-+ zG|F6g!!mi7czF_!c8|;dNDeQX!QO%V~x@o zD9>uEA0-}P?9mbDcr5kU$04%0U03TTqt<)IL-Kwl@3jf$lQ36Ht+vV>zVDc*)uK3y zT=|u--?_P8W!0>tO(YE~%!rLrQOs@MsuXj{Fn0%KG454aRvNT?%wbJRQCB6fRda9p znNrQ2yTbxzjRNLZO(&!4LO@)|?(X|7Ob5`Gt?lxK1kR+-*Ibv}7#*U=hxlWw z_?`A)K*0}q8+tOK7u#fNfBiEuM45SB^tm_(fl`e-??tHkzDz@SG>T3yfVWue#6IKP5wH7Zy2@`B zeYEa(v1>dukMviiC}!4la)4Qz2*OYiPmZy&rP9nHYHSK$^@1AlS~A_Z&Q+!P4or`x zW(a4*2|&N-M2g*rYGEdPP^dyV;(6oT=vlS5aswpntB0kVPu$2^|G7*+I5YFrXHjN! znrINNHJ)!FKU0!#jfj_$mARoY7A|ldKM?V)lj%nHHA(CQrW8vQ&0^-ULOD!8Rw!5Z zZA2hp$bX5!91hll=Yr&#jD$Th5#kaJA6z1^6u7gu`zxn)XIZ){Zlu~?I~5Qc&m(Uo zbAtp<Ol}K^NYy*u@8#g)R+2aEmoWnecGB!($!>VA5N&r2~Aew+E+J%700}R^AN^L zH1&Q;^}dj&v~b1jaqRE_c+~f0d_Ut?Ydo`g820UFt2T$i{T6MEe=VB2hHOe~^c~!1 zW?H@rniZEHs6f$+2pCi(R}q3E;>tU6P8Gq<08sGhGVL7ClaBUP0s& zdxGB}cDl!C5GnMu{(6)s#bl?l9}SYUmBJIJSF3*TM#C#-(-YNx^WE8u;0r}q91tUY z_10&9b#?Sb@SDSR)@X32Q8AS}{cfE z*v(c{NN3Vw|1dBKX7YF#71p}q$|@?Zh+RdDsF1WJlhS@mDHV#aTGk3LBuJ1@17KS2+4TaRI7Qvm*?;TIwhH>vPbvEz%tM(Q z>76XQZLRd{LHtqz67-XGmbOl$w4wG`>TC;j7*_}?UE^4b!_@D#jrhzWf`pI!!_MTv zIokU1RecawL_+$+xSi3&KmpGy3PwS?BGV(3DQ?b0P#{y8DU(W>R+}>s(8x3!nKY_V zx>f-D@U#K^bWCZAk1*+g;SKZDFBHF)a{jz4jNDj}Mga));FM_y+lEj%*8dNa?BN;l zs&% zookW3r|UX^Q&|(SS5_0w%1Joir+V>8t0DSnQ5tdSqw|{D3PlDRGQ@sOWvi&zGLiba zGhOVXda>)HA8cx?6dCp+gAO5XI+fZsB3*sdl)AR}n+4$9`1d&e?Z&@@`1gDKdl3Kr zd?suKuvuH})A8Rl`oq8I$Mig#g`XLJrsd~nyyFF?hJ2gY6&k#qH9Ui%f*-|4JrFK& z0A16loL#RG26fT$zwkoZue0k}`h`Ui>hII}%`J}$EqJVX-Iy+RKFDiU^b93z{lyCE z=mlGZG^x=|GN7Uk95I3eEIeUZT7(b@IcbdBOQ%9$fgpqXci8Vj)2GMgV$XHe_}o>a zX?=Q9Q>NvKb=GH6V3W~_xjWZ=aw(2^uu{#;`%xj5!~hR~W)*AvjsHkQcFHIPcl13#39q)4d=8 z@9m=&zy`3^Sx6Mss_7!wsiKnH6~TA#GDT#3eXd^ug5-X{M5D=oOzQ2#}voVfsw5FNA>jcd8)zMB5siutUj}-yK z@`y%_M;+pH;GEPFH!RzMBkFkRUsBL24?$nqHvli=AMZ@8It&+#)DjOG zlIJ*oyax!f&K;nF2jNq{!A?<41z$m)#V+TM2W^LN_gz_P?jS^@yGeFm+bdVWdN$W; zTcslGX~){$RP+d}lS|bH4uS##FWIP(Lq9-P>`b(Q*;`rwOs0r7C)P^-G&BnwOZto=)<=%gqLc!FqpuGKfT`7Qtznp3%5K3;crcitA_`ft>pgvLk^Jv(<} ziPO~Br5TMqi20MFXYy%k>=)lO_so~OG3#k+tUjZ$eb_U~(X;N;)Y$LuGxzKhxf{zn zO^vl@G&YWK3^{ss=V@weT1I1E%-vZ0G&Q#E8)h_~m%Fh$PE%uZGaCERjGSofI!%o| z{;%eq`Exhcd72t)%4qCaDQC~@r>U_cUpMz`t=8C@)tTHeZI{)T88Wj4TNU?{#B%4t zW?38G+zY#?9}kZuG9TWOB)RA(8yi~Z25(T@v>joY`;6RBi}+b(2mW%4hyEa^Z106U zau6$rb|e(*0i*)7;tSSq`4}G~Z8cSx2;M-=J4EwC+<8{4Rd*`9X6-#2FNLp?{InL;WuN858H5tRNJi8HgTcv5zxuNAzD=u$V!K&6$crs zkP3vMM^B?R8UC8xhzt!W)tm+2Eb+~N&3Pvodk`KLSxr^wW$oP*pQdmK88W|G&?Wk` zdC1P+-~l!8s@+y0PlwnGpLM#uIfSF4V{*trdT~$+lWr_qmy$ZY3NcF7d)1F4tbGdi z6_dGSFWWIkz6L>hb}At0@ZdOz)+++px2zlC*BVeNwZ2|igvE1jSPennIvO}^mDksU zK9(O+79WBrioJz3N-!l3m)fzbqq#(6_?z4P&$2sWY8q`$W0Y$Lze79Q|4!T3iJ+aI5VZ3WrHPMGnr7+Kc@sU+z7enE zAxvBmuVeG2Qv_eFkU2jcRuTE@Pbojiu_AxrDdi_dBJz)3ay)o+f6NayYw~s}Z`q68 zd)iwRC_y;zKdw$Po*1XR<4?Z~LteUnw7GpW=(a{ekmBdBmO9EPzVT#>kl$zH&_I*`JgK~=o&a&I51I&t%=AqFnyeP2--hB zjyb*_Cq<^MpWX*21DhJjmk2^>N$PKapX|>%{+qyh zkA^V*pQ7xu6bQJ+M8H^eZNBG3d?*7%rLtQI9f8l%`C_o)ZIBExRjBWN2@QlM6Cn@Apw2gl zXimDg1~elkD@AjikbSmyrBpD|aDLXefh18;L?gIVm(m6dGa*ZPY3B>9G1^uu*x9 zgns*e*Re_7IdFIy#2rks^&Z)2@abEyKZU85%qLLLXWLbgYkGo*l?HovK4?#vsgqUA zlC?mO;bfJA0l$m^$LPD|-~?y@6p0W=5YHB&(YRVf&HZkJGJk{AaUl$?FHf^Mi38rk z4Ak7JW8jr(+%OQs4TIExM4&8p!;ee{#^^jOTx`dvVIn~^oc6ej{Syc;WFov(4&NT< zoe!W+`6`0s%~S7YkXj2)>1GJ@xU-`cHd;g}+X)(jiTEnpnk$t3u-y(kEVvFpQnhPD;Fc2xJ-_92_1ZyXV71mDB zP)%Vr7C^7sF<7P14vBF(%I2!s7~w^z7UyK$&Vmps_9jAJycOfE7|#kkE8cQ$4c6g^ zVyI3Ih7+MM{QDB2Wr$6g2(2J1uvvYg`J%PYjW^mE_E)C8*G90%wyZm}43FjAq2+iq zcZZtsXz32M;IX1Rv;vRox!-atVB{#$$Tdi(4RlG1h z=vvz=bBv;KV}8{jAFXn)VkWQlg{1Yi1WrVY1rIwSID(qvd^yK1S}e_P1cV1P2<@x` zFP%F8SOF*^TZa?aNWjqp$|xm}w;GS>SQEN-Z>=fomwyN0s~7Y+mR?Pk>RkL@cpbv( zjIunJCb3e(*oqrgPzE*7Z95a9Tb1!a_tAWk^Meyg!$hisVu!|N=hY;GqW}#e9E;=0 zpb*Z36SVBc2MejwN$T{<>|Re$uXQy6;{l{1J_MHZ`B=(3pQipUbtsF_%d!@5Fm!WL z>*gXUu?XG7!zQ}<&wX%r#Zb8C0_*@Tgs~`NZp}>MtMIdxS&Ch*cjWTw`Ce+E+tEjOc|m)CJnF zfxs&|tA+V{_gM<_M~)=JZ{Vj{*v0P`{*)~>fndu0(@C_??AhY{{QzA&5B!4da5Z5 z8FceIiQLy_vcnU=ufdn}^EOt}k2(l99`O*{SpFh zA@3Xq-x~cfywn=^*$f(w`0?PQu5o)PFIso!Xgy8OK;;vH{_!CC$Ajtry|z!F>hy;0 z#7+P2&@n#&0Y%l?MTh!sRg$W>Q!9{)M zcpOTjdz}?Vmx&uMM5N?G-f9gMq2I8?kQX>2TOjl@wablG*s0NENFXRA1}G#3$jag( znWlgoEMkb#F{qXA{IyYjy`uu@gMa!-yNX< zr&)t5=s6CTBS6qy<(c}K<|p>55w7Q>)3zg27l+)E2CF<)%8O_2`SF+p@W@Ef+vBj)0eyjb!KuQ^%Sk za!6Gg5v2jU;1w#Xa|0Rp}w zF=327-Vs_Voq~5U`PH(1LK_a9c+6zfS2$&SAiR(|2p=b`nT-hTH$epacbIlJ4j5>x z+XXa+Q^Vwa1qYfWfC+iT)H4}lfiHBn%44E0b>}=|dJ;Ynzl?K{e;1^R z+ehh~AmVb-bVT0~n#}HPThWSBV=44I*Q_KX22abaM=6%48$MfpGQ0i$+dNB&LFh(* zw1*?iTDYtNW0-VuC3wglsUYwQ#`xa`Mn#X&UyPHvBCSN<_TOd42PJt~diQza>oUAD&l1bK-i${fcRQ7(F^7>R&~w)3}c(6LJ2s+ z%A!*2-M}hJuP%PA(qG;DI!}M~@aqTh$}EA9<}nr}!tXx_ek|&>lf%SUltrG@`XYEz z!Ho(A3i6g#ceOIh(La%gmHz1m_~d+4FQ%t{HM0P$Hlm_UlumwrVww9#z#n;&GJU1q z&7iNb?hN{RS$`GubpWphK^Y#7{|NZd=9@)*;~m0Bk(h5DHFo`L;+5u`N4-UVC46|) zPwKBU-#qG4yc+1qm~W)~(gLC_99TlI(FtDkH%MkAmaQoTQ!)u>24AYMGhY(-Wk48Y zCSwSL%$GvNu||V0g^H6z31CY?!ZH}5U`wvpBIC}N8pw=wq_+%)z?Oz4hEqxuj(!pq ze1iU@)=To9X7%Aau{$wnr`?Iy#v2(t|R(u5x;&KuLd>YWS{ZhKLY;XCL{27+tCdC-Q1ahzfb6| z0)I>NSAoA8{Z-(vTz?h#yF`EWGCJqzuf_a2U4Jd%*NM0Z*(D}q1MB|?_=fAYz_;`5 z418PAZ<9Rn<{c(9xHL5U1NGmcI>$5k`~A3?fZ4s^?_b8NG3Wj<`~Q|nUeX1ee_cwF zl1oTRdSVw6r{IE^Q2f?9OVozYPqAC;5%mn0vO(jp?3AlKGW!+~y>OoV7ybl^No1RW zY%f^o75QGYn3X+Js^_IzaEbWVI&9c|tY>vSVsk^kK1U9sYL~s&`OyK^($D6z$2+kZ zQnq`(qt|)w07B1?;5NnfXV$FlNv;%158B6hmH22OyL4gIB}=B&P+Hg&rCTzE!2`iU zJurH}n)za))$4$`KYvY~^Ufb*(!kyvyA9nekVB>NK0xExrhWrk3M1_Z?MxB+Qsvv! zb$drBlqd|FhyiDf_*3w3!~Zu*ihVwu89F3vuBzYt%}A>306KV{+={G-m@nC8_t^8g z?FH0>KOxm&-3n(ej`u_{1HFjU1h^!Go8ge9a;UD(cW6D1l2t%MMU~%vVI);U5c>e` z9dwkFZp>gYRadqI|AKyZ`zRgpp^Xs|L}0i!R(?iEjoGwo#i{wQ9sb@n+^>_s-UE>F z9FQUWO&A|rfDcGD0Ie7wI9#IkWIcz5Z98`74pXROGLu z{EW9T!doffZIAj}Z>cVgR| zs2N?9D3(1UGnWh`^5Vy=9bzu<6_X`H@{ZMrsX?`p^AgVvidQ6Z;zB*>vN)|)ZI^dY z9(d`KbF_=IV2-4waYKb zJD^%uvlS%+QX|e-f!;X}Af`T~zf^Nw=ZfBNP;%TAM6t=V3XQy4Bk#R`k;{(Pv88$s zfH!JzDz4LTat|~x?UZbQ$)&Quv}b^MO88G!v#C0QyQQ+JDvEZK4hnEMvKzysSXMGf7uYb)h%58UGJD=+H zi%UOO@6cK|Z~}bD2%$d)BRbR&?4?SG*z+Mb>^yKZOiv?0yn=p-a5E;7MzxGJ7=63U)uh-u?EqMWj4AnejD1G0cMJUwO|Na`qdI|z6HtFM1F@yeDK@VbC3xCM%-r2 z^-?~2W|G`khgh=H!5U=?Gn#w^KJ37{I8h_#S(vRbkez0E$MH&yQ ze>@+-1-90e?WU*#wcc8?-Qx-N&QIu;v1^s4JS2eu#jdSrsE-JLF{S#LZvtZyES2rn zM6ClZTqz{LGp|&xwc3#a?<)Nj!4VxU^6@e^jZnDPK-xXZ=@R8wN{J|g1nL4)Y!eSI06GO9-Y$w=|>*OWp8{>{9xs2 z;RhX`&miG~Y9?S*jeC7{9*{Br&k*T6|Md@I?(1J@?i*i-=U_zA^WHq?X}&MVbt(NP zn8C?vG7Vsv6kD3rVoS4H7$B;P=$n}2FX9)^v5XmxVVjB6+>4cIhS!NOu|OE~HO0(%nY78|nE*y2nWOAbq-#UTCBjB3*LcNs)LlCbWPS31k%!d&Wmg zN6tZ^-s!j}u545&SeX7PYgnj{`X{r}`(i`IG3Z{>fwhB>Jm= zDl~uME*s=gglT5#vDm-OrVp?PA(sdaA7fQv4P)o@4E%Zx`R29pe*^hBCIyYNvA7xQ zn>IhNX^vxu1(Wh^@|G zy?$oBoX!l%OmB69-WE=wx6_419l^B58wk!|nSQ#Q$M_^zrjC1JnF9AZy|KRq32f2p zj)rQw`6feRYcIqbeXt{RTteDvV`*wb1&J@)a7GzT zhk>xbq#FCY#Zm+9z5T_N*lI;C1P#)qLQJl)l1#mjSj`F>P$vUIb(a{kttJwa;_cOj}H*T$}~M6M>XQI<>kfwFy(IqFm27JJ$_ z@x%gtfqmP^nd&2)S_1EXqNV;!uB|K~EOeN6wkQu&(2BxjNl}h17uy zDA{B5uR0AseU5zr*u6ad1xPAR3=x#J>QXUG79?6buAoGRkw_O;N%X}6`^G|eWlISw z=bOQAjzkq_NMro8z*or)5)@1kAOr#28CnXi1jLnE$duPnqb0d031$q30Cpxw2Dq&D zBqRoR7QLfFPohqg;{+Eca4Ee9rv?7TQ-@#gl7JuOY#p1mF1e{oko8^MC18TDTI@KJ zaRSJ3-5@wDlvmNkvnZXqXryah);Q#-pllXo6~VY&(nbq;q*&5F*;EK zN)j9Ppf@mySNaFki*U!I{Yi_n2(W^E(A|pS&O?;6c3j3KXdnONB{bS7#x8%(yYe#Y z_X}*?$_I-M#>BN&{GXsJT5Qb$^>h0C8|VM#j86} z#l_!m|8NADSXfJB%@bss?Nvg@=2zE2Ra*%A!pEe9eYO%xQOYcl0)xU8_W55h-f;)R z6_OINnzFc&!9)0d`^WtG{qc`w7%}1nnf#;UJ+VY4Qs$AwADBkPj@W7GUzF+dl=yoN z{-`I3{-G*6v}Dm`aIylw3rW*DIA&H zdY%q^IXfvr0NN(&!YQnYIyOveik@_0oawm)&d^}Kf!QKLqX$XTjU+E66(R{15mqM! zXvLHadx-b%gK&nDN1%vDK)}ceUQS>LJ2;`36Bssqj84b+L_Q24a*fSAZM1~EVn|Xa znu!^Q>rWH?M3ysr7h_>M;p(PIS+#JfJ8{1EAQiq}{9?b7Zi}V^hnMmB+xEKkUSg8+ z^a!(f`}TzWKSyYI9ouPm9owOy%!;{+ZgJr?>xMt^G5BB|93`)<^sH5nk&U zA_n4s282#*c=lA)o4j-PvcG&ioW|q*XK^~|Pkr^+seG&wf8Yq8kz43X$}QVX@w>vB zCwObK`m;aUOjiqVt5B|5jt0m1eAlSbFq-P1s8+Ft@w{a4Ft`fN^{C=;L_9`G@jM!Q ziAx+*8V;s9hPcE_c}l~sWN=7i+b^0htT{7Lojtdx?|uqh=|wk&&=_xk%Kkg>xb|e+meuKU%Lnu?4i%U zA;}iJkvM7Cjz4vnjU?n=x05)gCIu3_1t4Z9T2qx-^rtTZvM|vE@?$HGF-YgX9Pqc} zdx}Ju!QHqAfhP!T4%o=sN<9JS=-F5qA%*1m@_ z+wUX0l8OHMj%0q<@RNZY#FlXxFoLXdU`Ksm9(=KwcAnCqis7gcJKUGrD{%ZlgG#uO zGH&RPXb<$i%!^yt{g?vfAd#@zxe8~ua%@TWJ@|44z4d`U%>B{oD*zd#_qa>3$Nj7_ znybRTy_x;*LtsC1eSOmRGUjU^ZVk!!KABk_?IR8@6nXOq7t3J0OkFvV2a2W%5MX(a zWp%fUW(5r@UU|H1nZp1*Mx58^S7 zf5chqy;SR;@oP4o6DSN0fp7gtiFgTT9g?#c7tj}M_5w@S(XXv&bj6UU2X*1+^#f~h zil$FLGPXqhDK_B$44cfv%py29twzICFBtltVV2RBqm-|VHB_({W~of=4n ziujRrToFcgI;oQk6$@ZW#6z>nm)9;MPq2zuW2Ju5CRCwXo`O4Ql%g6T!ZR+NvgoJN zOdMFJXE#}q9c2e_i=Na%SHkol|NJ?SK?fDTy*gfDiTv0=EV(G_yo3Iw#ZUSXz3CVE#tx0@VPX$^Ce8{FrAh>GwHWeVZehDces zQTTDYavNPm$<-oM^N(=JBSizIXagIKxI#LEr18V8Hl?tev~;}~`H*~Tu>xB>q=buN z)MN`-Ti@VV3O4Jru~Y}+Ntf@f_Te?F<3lO(i`%I?6>2m@^-+v6)bJuCt|`a%=-Xco zo!|eLL!tok^Et8s^Nxa<0pREu;Ya=HPDmtEPjsTZyud?Mn06$x%Jb2)^*6DUl4&g$ z@*hQn+jx$zs&vbl1BdOls$z&%@d3}O;cL+*O!IUj8o$4h9L_$kkM{Y~LG4pt#gzGh zc)I;qO)myE>4YW@W!5*VANlPRQJjZ_{VyAfRr|L_Qpph0CH8LQkhXo346(B(&WPli zNOH)X+CV`ik|8%CO`CyhOfogWI|^c*I%PLwRwYA~V#@ky?338d!XsBpCp#j{=Yw&F zwmxNVdcv5py?xY*5&bx)u*bM-Q=ihNs1@~+F@k)qJ~P~ zirU>svs_&;IGl>z=0SikMz7l*SUZcMrTuO&3GZ zbk~k`DUF5dn@@rQ(@A0m{UhU(SZ2s$RVQ|(5qcIOYC{|5QW_H{z%ftVis9Ea92csi zPmqgw`tl7^HH=W;bIN-1|2G000^2awjq|5vtQ$-(E;`a4scTN%Qo_LnvItYq=Op89 z@>N_97adc-8;6F&F*$H18F$Yjcj`MV0KNA zwW${r6HRnSTcTXQp1MS3v=<*J5i)MBD!9jIB*B72dqC~+f#b~ge|qYYM)XDJ8{Fa) zI}J8t)}{UgRWl-gFgTtXnXMl9#t6L^s@MGrU}p|*T5#n0a6W*}d_&U2p;su%&BD2# zeHkF8vZ7n54XmG@)MU0tf8;U@TbKdg&}a7TFNHt!6#Py(t{{Tjo(UKth zDeXClc7vZ9(KDZ*dG7A4Bg8DJ`9k%H$B0=@Y2G}+`fi*eZ$SNrFnUX2*^4c>lj0l- zRyhQpfc}BuytjTRKNWx3_SS#MJ1Q=WeD=ez@NBjE4sH2VPh(1{+Fvd%9yWIm39Z- z(emWS23ooozf*P;F^$ou8H(Q;jFF6vn1i-K#FV6CIeXOE2vCq(Bt1bi9Urtt+`aNr zNuFhUzNhx%6QOSVOy9Bg*Aa@&x?b}4EXQrd<30dj3nl4ZAGb|?j0je?6^cDdARL(S+f%hJ3W2ILNNO2z zxdxBC#o>D=QUYiAb8tyWe1LMI-I4FX>97%0B z#QBcUsO#gX^90bBTvgmmfp9O!8kftYq6Onf-BJW9Y+YllA<&}$V=0+p7Mx6*y2Mm$ zF|JTmmkki7lro*K#QfIbp_=0ZMaS3EnE&nh8OBLp0Z$1aF1CzVrB;jqdJD(JasVXw zGX^n!TcIVgo{qdh?Y$x9vqV-lFFhG^{?jkeN@F2{smWI@fhrrWpu1`RJa#`>c#acGh2zE5WX4ia7xt0#O+i1@Cw@7eKENkJP-*yv z&TgVZ4m_uR8M!qQ(r1&9AIKCC!ADB%J2MNvo2T&0rOnE9`&+2}%OP?hF+ zuRe-tkUL%z967~7Uk!zT7iM=Q&<|zD)3*KKg|2lt%lX_@Ks9YI^~ZPNtZFVUWo$3a zyq-A}abV0E?!UIb6anhN-PH=jq{Q^Y?hgfP(lTo8_nnh9UJp(guO@_?tsMrHRe5)j#5xZrr#ko_mb7T4_Ki zT?Q(6m|-nFOmL~UH@}4yaPkD}(9s~a=n&|0OlcTPbsPa%#u_HD5qyMuqR0DG#oHKl z$Yfa(2nW3EPYdCbLae&90KABKIs~g4;-eOjaWsZ1L|=!L$3IraDoZWV<#a zT!WFwgY&MdT}?G&z2tbSET0bG@&H6fb~*1@3xN$md9e~)ysl1d9<(*un?FCisvKG znt5miO;pOb7k8`~8^LHs#+7=5K=s_`bbEA<1kt#=J}=d|JNlMbLm5Z?IoP8E_SNYW z$aSB33_g{hnTwcam}J}#fYg>p!OqPAW3?!L;A3fe+abzcYoa$qqs^u_=g&cKd218( zdB@fwe#2NUk`rNN1)oIypjQ&1d`+(PXW>pnPz|^YUHnMmpkzUS2ZLsW{$cK70iqdX zhN?9&U$8XP-@L9;ep9X5VIzw&rU_P@SB?Vl9WLkqiwO7)ciQ`Pd6s?Rl7jrvenjf%<&L}e1)Vo9M6X+|RWFa5{CQt2T~ zRL2Xho7r2N;8R%_%3@W$@NpKgObmm@kE{hKeU`7zwPm*KhbjhM-%aB6<_z9SI7R*@xe3<9 zmatarc@Qm$S6Rg;$n*T3H}z2PQ-Dop#?uJI+pP zTUrn^46C#ur<=wT#;;5W=q64?f=5(T+)J=SCJ5&05S(>l0Oq6tz??BIK!Sx_w)bJ~ zW(qT+{~A5Dg9JfOXX^Cym2QlYAgN;Yt529nO8r4LwGN)4Q!DU^tBs|3FRB+KlRO0J z0Goxfzc96*PnN)Znz3bu{95~eMiBH2dcH|-e2%&CZ~QR3@dZZXqCYgDzAGx@^)7WL zwOH1#%X?aTcZe+K$n2ot0QbR0yxp5xaR4MRJ$&s}Q23Bo4g7N%~2>&gu3g&shi#sidx z3dB@ZR|;^zX6U+mTGbu0l$fnCL!Li;8E?7+9~LDpgmu>;yU1H?ud~34l3yWF3z`Sp zKG2hEeoZ~046t7T-V^nRDudgJdKU%(3M+T15Vo9jmo}Tabmc4#C&UdIL!;xH_+1w+ zS_YES{0?49C*gPG*ENNGQ2$vzL7*ERMRhJ}md7w>ki~Ymnc9IvDa2hTN3_Ief{$hT+Lo?I6FpZQKj8VWAHlzr;9FXHkT zFBo0Yf?eJ{gF0lsz*_6iA8~nh#`w?yo)fP}fXI^FJF)(d{HTu)NzIf~jf)mMw6UhG zpkL|72SJ}aHvjh6smwG8zdYHhA4yZD{YRk82;^@u+ir$+6C>#0>GrR<@1^+O$1ngU%zeoPVJb#N3#93!a9k}#F;K<|}qtD-r`G)aiy;%L}gx2SeP-{H% zru3P5`jF969^=RQn0AQ`N$|CCW2(x#Py>{zlk^k03%P&PTe!z?Pu0rp>Hf7n&QzfD z++}ceB&CC?;2vCylBR+*kJ9NMw_#?`zxO!wpvhwfS!m_In_a&0IOUCk8VD$#wH{qB zsyfF!QSKrn5+8S1nxWuEe@+Xfi{?I5P9_XHyMF|Q`$y1^{IKY=`-l3^htnw92Iq|g zN{V?>Nf-*?ZXc{l>v5%vSd|Q3M<80P<+;8-v~$-X*uOXFbZ5FJIjtjGP)A>i=92Ls|%v%Vbkc$p0M@mCTnyyMR*^`>pT!W zQr15*O^fOtIZLkpxjhISX0MPeY2;`tVT!$g`ma9lHd?1;=zQE#zc2NbL+E*Y!jAD- z>`;QmVf8zgyq-(JNaOF5r~!ay;P0S;ze+XsGaY{&MH&md=#^{~{s{M>Fv4{T*T!#} zs9eL}4H@`@WsGz$M23Rg-%Db9uJ7&nLZYKw_FhQ&LblTC|L!=tuL+;2Ug|u3?mJKW zp+m#;B-(4AVSF_jHVS6sC-eqTKaewGf}eVNbxJmjFCQ{rcB*{dz$?w+_#| ze!>6(3kVFb_-yn~!w;?k)bPVirsZ4hI}XL`rB5t>YWl8__jIinn5Vebr1)mbd&p0@ z&PM$}g{B?95BVu)eeZ$a>_X5AuL%{K5N(C5u_4^GEHw zX?|t$FMJ0Jqaj{FB(#OfgNrQ!!wS)CypefWrN+a`PcH|f`J&yo>{|cP7NxQaa|^q; zptI>{oM$BQF+|pqNNl!O#QVX`ep7_N6|A?VrxO1{ea-8NVJ>-QJFzRx-qQTdG@}xR zSUc`IIAQrOb9qAq<5;d5xcxe`-(+ro@VRtp(SB#n(##LA!lHbEx%_j_ zXP2)%QF-qFk4^o*^k1{f+fP)!9_@db%WIM{IN;I)=_Ie^;(GI%`=0QH|%;5XS7 zgZKrshk96>X#5(OI_tY9iL6N7=k*)=QR`aM>ZAt^Lkv9?efLY>N=p{U*LTkaoI>;x z_Qb6A9(88hUAwi~Ag7#^C)TQTR_YZ~KcWT1^W^uZT?KQ_2_V1k1uFl4Z zf3Us0Kx=j=Wr&;GU(9Af*PxzE7KHM^ym~KAd*QOAd;2q`GhN=I#g62u^kTVDQ;bkv zTQ4)eN2YuydCMr@OU6^ma=h|4O(~DSp|rX{=XUhsNES?y#1(JW@|p0FvA%1Idv9z? zd*`7(a51e$%zy$+Ibnk{8C=rvm2!SQx5br03!ZY!i*#IxmSM6NP^1{5cMYCPxxCQ@ z(xT1fsTAqn#N_qPi1k4$f1xN(!pcE%2FQb(7KJHBxqH&(((Qdj^lwUjlf{Y3lBFtV zf88i=mXCV-)2*ZdOt&{BKPkaky)o0%l>DT8zL)%@Y~{+&{Gd)-GIVp+pTAFA_jYUy z3pHHbiK!4Dt<{VeU|h?z)q+k&3dSc6iiXu~$Vw~oKK1c$q`5F1hcwx+=t!i&{+>f% ze`5(vBTI}Y@ncN~zwlMmM~0{i;j|&|#q?0;qA^&bV2QaO{nPe+VRE{HIxt!(?-$wZ z$VSFc`6>0>L1UW3dO{YIu(})oXk{~+*W?X{`T$f>*s-Cb@dg?8yvsF{wYX|A@+9HQ zak8rxv$wMZz31E?%&g!2x7QE+X;b0?CUJo{+1;zYf%`wwxHIi~rEvgy&5~yheV0~> z_a@I=dT*KzN_LWoMmJ*Bvx!F7u=XRoe-3#D?bE>NNBGop|H!&>j{Si9KmmFMAc2qm z4UlfW=TsoQGzX*tXTTRwldTELFwM`*|L64)}R0d33jlv>Fce|`V+BC72? z)Ml&#-Nq_Fm}joY@D*mtpWpkA&Ej-HxdPSTr0&*0p)miB%li=35@YKe99XU~mg9+_ zh(uXDfPDYKO9riLI3HVp)dBHx=xxF|xEoik71UwD!O38C*|zjJcK+No-{hRWjn*~+8_K{>-#UK{ZFE??jT?U;Nl6Cyf zZ~y)AQ~tG6!Ot~gIq}2i8Nqyyv-?i;oeZ*E$yd#S+CTlWM(vjowX2}^72wQyiF~+{ zQbg}+-1Ce8eN68QA=A3#h3-THxk#93pQw`Q%ae=#sZHTa5Ohq10JEWj=(mh#gR0Ml z_Y4Kv*XP4hs;`0P1BROgEldauGASbF!|X^p*-3ViEQl&r?a&EPn}TRBi~p{;KTR#H zQ;LbP9P{W@<`96P`Su^$d?COvY1GayrRm}D56ttW8zyyqALXNe(&<6hI0bwe{Q1`3 zYqRAVZML{hZMM+N7y=GV9Q>wl{crSj+uf(q*Xq}^`)bhN$@zOsUH?0c;tl@ZdRqB= z>^S`Wlv>en`D1*MZNMEO_TVj zmoKCFG?oD*e-?bvwWSy&1WJrfQpS=K5i-xOf+%beF3!z6fj7`5WSbj*ZYI{dk$2CE z)Vsf$9%%{!k(N6s4unqCD@OE@E;jA={NyE#j6aK(1k`)wJXD@@)06TXpXt+AFN#(% zqbR0dfKUXgs461De*lPrrdiDU-}f=Tv^E7|PJg3AYWP=%Agmb*8eU_4w>Yg)F~9Xr zm1j=OZMEYt$zUN7Kr&b)9+__*k;u$i4i+YYE;(3~2)f0pA_rZxFa*i4p-eI5GZsr0q|mF&LKfH3{%SkJQOxB4Ay5%3iJfUd99YEy6_Yb*;{V-XUZNoo`I zpNhPODNsTb`XQFk41ML4T1gX`iQeDOdPd`xUeB`hndkl`J&K_Jzl%Q8DW}Ky#$TH0 zxxz%xcOTKmSQjH1|JnM?^S{w3`ZVb?zcQ$t^_fTS{rltR#-3Bb&*%P-6F=`=pShRJ z(4@T^`b>R}1?lgv&%9?SO!MV*>oY_Zx%3&afBNOGn)VN&yBoeTV*hg2%PfiHvX^PL zz%!p^Gf>*UcrV(62qjt86{}_D+S{hozSgK6{fB_1K8f8&9?uzAyTWZ`)fWyBCj7XG zJ2}Cfw8hz!D<}V%L-`AkpRM@hFWyTaW*XpWe)4$~K9z(sNnJ;yv*z_1dqMK_RJf>Z zY#&bOognZM_Nj_EIKY+<(y3Ax%#<@ZQj>ZU5@K5%mdLqsKKypVh)RHZ)aXy&qL4}U zc`uIC(+Bn`#+3jc7r7)lpIeAO(Tg&QT_cK}GlEkLPphTqjj3>S=TEIT-jj~@v_!(i zmg06o!$yz(-aguog4|#Eg%){VV$~2faS5`;FC_yn;hQBHI4mAV#6#uI-G4DU2VmPu zo=4!uFs{{IJemxQiY#N|F)khxeBfx!cV17mQNSbAtlsex>T;wAmsjptXTfpT=xC~! zVt&a>af!VoM|vlR57;f1HacNW1)4;GIT;1KC@}o*l#K#EQnrtXZ18K6C?{9jM!7ao zE(&)^x$Gj>2jsKJdR9EmKO14#O2s+UM)wL$l*@s=%t7m!_QMD3ei9?-XJoaLz&w4 z|CWMd0!4K0W*B?smNq)7OZh59zAJbOURk_X4Q+uP*@j%wUoIdDi>d?*#& zivwB1pQRcoI3?9^bUXKLE_s6PL2y9oUDk;Z*~YEMsP!wTECsTpvX6pHY!F5iNB&o z%Bc~G(nyW``p1m8-Ixi8mq6N0>4_gx#_5_OMK?v0e2BKA>kt2wto=bvD( zV{}eX?uC?_;`dSRXCLOCn&Ix%bKB9u;X=wyr<*DFcR9DS^C0L*SsYU@xeW(-h*jK( z*^~-<+xj`olf!DL_;F)B`aKw11iD!MHhctlGI zB?Ax8Pv2iR%Q9FV=1WW;=u-5>JX`Q7892mDPfj4(%#t=b7EB%e)sF}*(W*9zTS^H( zji4NpC+oS6X zM<#9`C9c5t@yc&vQ_qFid>P9YFFE-HQ_7{UUbR@IYI&m9dh4`jz4jDwcb+KBSiNf1 zhbckh*Tl0k|A$ylHxaI>m9Pi#Sg?6HKj?DaJq<@kwfKN(hc9-$Fgtyn>FhcJ#)8m7 zHz@abiL1uyy*JW+1Bz=!yT5o!(CIi+*=nQ0=RN74+whZ{d-go7 zPoj|M)@;!tD0`95^ECq=5?R!x zo6+n9&|Qi*i_+Ra#qa2<5;LM%g z`{{}Qkoti5ML(%}uBGQ(1Cdl#Ao9sBMgrwWo%8?_2w_AhfCH`aMboB==u4;fh$ul1 zlsJTk4zBn_bYp!W*?Bq$ z%oE0+Wnm6z(@W?>Fr!qn9qkj|0Wm$$K6Mi9B7xdPYn0Btj&$P0CY@UE^b#wgiKpHm z(un4Hrm2lc7^X`*X>Q!bpf<^c(;+t4zz1cDJ6b`0gLW&v_EA2XF`eFD;V1ovpZ)xU zf9^{E9Kufq=1 z4l#Ah1TNTtesl%hb03s!N#lM2_{1Zu@aKdbV=g7@(1Bow!cP>5*sS z7w%eey7?D^KR8|d3s*in9dvcl{}BMsrqnM_ChT7(SpST-fV2j8YTLiA0VvK$TH8OuGqVmN6w7B+Zs8;HyCmEgj01$iT(*M)BR!9 zax>@|$Ffb~l*pdj6yM^;^x>HSTv#H7*iMUmodTkji-2eqlnhrT&;aPe&JhS!z#ofL zSaEVHj5mBq=HE|0L|Qj~_5@trL8&L;=nl?6SPxMTh@7eek<&v&zIz5nc@nLIZj@;mgRa#r4_CdS#awPf}_y*cv(KE}$hQA zM}wt#@JMg=#^0qY-Vqn^`!g|{8%pyqGJp?5?yK_RJW#3QVm?}<*!>*GxiHg?C9 z%RWqZ8eWg9RTLw>d&l~TvR*d_I`--0Rv9z@o*$q35~H(|&m_~IZZ zNXR4P23hMZQS<&8`5?NN9l$~;DM4b27xcy|3tAO>L3Gxj<#PH;->UJ^x4->JPr%)c z3gXAC9m}1M*IscUxy2z+He!txP@(h~9beLLFUM%o;> zYP$w&XQnKaX~fB^)kr$V>TNSDk-4}bZN4Sq?XmKD^Z0(#D$`vM#6l-2j?x}0w4ncn z6oJ^P5c|~fHuQ$pz-3;k&bFgRioJ7r#J#pR_6|*+9T87Y9VX8^Gwi%*oF>8l*}x);!6M~iyhA$IR1gs8t>3$)jJi^~pxCxBjxKp>S$717cM zwDF${7|eiA56>-Ht;rH zJvb;^JXm`L(-7A;GE1qmQe02^659kCx~%L##hl28dh+FC&c}yLvPrkInriK_&rvGp zfP!8o;A5LW0`mYAVqw?@iEz#oWHT5kOq0!E#7Sg>=wRL8ZB)zAn$kRFQ6WNHR7rK= zCeVu~tey|s#K=tihD7{hFj#p4g-Sp#B@~wkPs2V6x+x{eg_8AP)w%55kbIcSxUG>j z@vRb!qm#r)J3?i~hh<=ZfzM#~;W6erA=)ek)x)K=?FeOiS>XHPvX0b-dIz(`ClfA6J8B=+#d}pE{3`vqJdM@gG zF>}UzaGqqDzzm!xydY8ORVS(Vihs z5kD95RQ;wY3xhTf2|nC601p=2fAAvADpx>wjSsqds!F;8skOaV2MeQTHOB{BYV}&a zb>O_70HQ-lq4;2_@2~BLPZp&G^^@Up0K~d@a(BoI4rwu8>e0TtKdu%9cj zWnyF+&hsvplyd7c#}s=9tr-(nuPKSxdv+qKZO9c?7P{0Ql9IJ}68T`9S9y(S>CttbPI?QO6ln8!o)rGT|HA8Y6i*t7)!{ z%GJ5l%eYMRlBuWl25p(trVgoZvu#f!ByZLJu=-h=;Q_~@_#36Dnd&>V z;i36KsiRaW^bh>OZoBX#^#&YTy^6z+_1!ib6$ggGs+%i5qAWg=ic&aLIdD)}d@vOq zN(MNtDoxg@5-`cXj{*~lV}V{7K}mu$uu|vS*|AKtGj}J*1L1&rnR)C{Htlaw-@E~F ztBI->xzs=6w;U=0DI{u&5Jfru*$FG8i9`*qdMHlR6l1)*Yf4Z@^l=irw@6CiO73n8 zq7px7s^~sZ5o(!QJi7ymW2Jx^J7$tffh@Cg@cKy3NDy|Kjlf{Y2yspDtB?pacL{;e z=u(2NT=96rdO+S|YtT(N9igW|ZzANCgT;wZaZj+MJ5)kEdCGE2^h)tYDL&c!O?GGJ z_XxF15zQ0s*ky|SHcZkmyvz`@YyKuFfgII%*t$|%FD^Su{1U;L_eEx5_Sgo)>g7;E zz&A+$c@>?CV;$0&`+Q|B+Cae%!3UF}F-rBvlciv% zz8a~0AHsO9#*g*31U9v52r^(3xxwhcX0jI;nt!zah$+~jd?Ce0?~*W;y1p*IFn5PM z_RO)3UJ`alQgh?J@UYTsRTk}6ZzTG}f`>CA@jqE_Rl8EoyK9gpP@rrovP~%K>A0JF zDb~M2taXJvOeSNf_Rg}C8d*J@YNnMEIZL!JY)Qj=x%OT`T~!w%r(9E{Y&Z;%Dqwl3 z@#06NTvLpP-}z`wNi&3yI`v}YizmlG%`NI2DnrpYtVD=acB11d33Tjylx`9ODT~GX zPpdd|d$IgDu5aYjKwriwQ2bg{o#Hfxq-L_YV0~ncmledUwRr`Q<&a0rH=WdpVozU$w^I0 zEFV|w*ZKyW%4z_#wpS^?7QcKiY`H|RX~jWH)zww4QKwRc6(4*(0bN&KKHk~y47{Zc zPhkg5*54*pjfwma2Cl9tK~UNnTqJ`c%_xHWo$sPM2s#WqOh0~sICqH$nWFHvmj~n* ztw7o)S2D1lQn8=1KN&bEG8__*mpI>-kq-k0i&S(X5jafa7C1t~7EpU?u)2<_pQjwF zCgi7KMO>%i7Ua{gc~ELx=D+9AJQCeNV= zZ;|tKfwoZ2$6=4bS_v|fuqye<8D9Lqqtid4`bxtd~cw@cRba-v()-kIN_Ig%VWu^)C5L@C$VHa!q!hyJcLL zb9drGqy1>3+CTCLe*O`qLjIAb&|Q|f|I}i z1qI)PT>>JwmPc47P#M$VZej-c$m&^VX==NEK^US2Y#bz)BYG18x9!7yZ>BJ%d{0N# z6y};hGP(R4n4i8!_&@d@;GdBJ|Js{wZ2x}`e-zB}RPn!n7^{K*aMhyIjQ=KW4aG9u z+`_l4Cu{7xp2pg_9>P{Do4{&rVA80eWz52Xuf0!dhAxl2kbY92@cwj~8$XHOj}xsE zmk#jlQ0jfP!>L5R(&0j=SX$SgPHZZX_aruzCN`BPYbxwqb!BXkUpIZ#R3Mv=hRwKVE)#~=a3cy_VufGOl=zjb36w!7doUS%z`%d$gM|P2TgN&+CBUhRHl->;9yEweT1d ziymKkoCfJ=2{lPl2!#>EY;*u)}NCh2aP=Vp^U2(ZW~KoMa3Y~ z32~L|$**A9$C}UUy^D9&A>-1;(e)j3-iL8HbA9`3@^tKKENy~( zh{IGv>Va!PBzllrgwCStm!|IGQ~g^cOO&G>AvRm3D&0hmcy0>%svqw^=Y!;?#->)z z??~q_R}X!L@*`e03W*}>7mG6U!<=#nYJQk=X4L%ai#f>b^msqwE4kRmF4Llm_IeNo zVzH#|Xv+4Lqa_aCq3Xi^a4t@c;l3hrT*D(BpJf-~C zL=?SU2R2^qd*-$)75mj#$Vz+zw-sZ_91Nrorn6QqwmA zCE$76?|l2CkHLnp`uOtsD8k96qPQ&y9h*!F~F-qlvod4h?@8VL4$}HjrL(yTep^jjc#11$NNT;M10@?K(NFuet^@6 zc9BdU(TYoJ#o6^W)Q1{w9qfA1*#&0A9*d$&Ly5)iuHDW~-YpaD;BLrt-)L5dhD6sc zl~>_fOWx<$t0*dUP#5&{>oqac)$d1VLYw@4iYvQz1> z_5@S7{ioX3BDKFE2MS@1%}aQU&0ZoD=@)xp4qInapL*z>6zC7yipDMY-egUjG~_Yp zhh;CqzUqQqEYa$9kcv3}x_al`n~5Z#=4k#ljDK9YR>?;^N#&}lWh8>z;hHB`YDp0r z>>;I{SRwpW7#JZ1Z?o5fn~x&r$j{H+zZUV5^B}LztdOE-`;i=d19|*DXqDJkhFNP9 z^tcMtU5tUY#P^V|4r`OtW(nXX@0?6^@~@2u4A9oP9O6N}w^Vg}92@%R4mW!ZH!Ba$ zeJ)qCrRiqLk2Vk9uMj;Sv_?J{KYR?8l|vsT$A@w@{GuCFFSSonXy=R3Fuw7&LJQ#r zN+inELStn3DGwzB&7`=7WZ)cSYbl*@@4L0$dDoYqq?mn$!C+c}aoV;)tPa@9&XQ|t zo3L`k2VhS@N2ync83Qc@rh!`7z8#F|uTdXpB-*x^J0)Lv2 z%dO;TAz#DQVwaR8^(~XA8EPR|5g4Oj16FN5j-htk=g{QS)CdTMQ zx&Fxv{<|Q%{z=FH#GVaCYl4*8pUmBRVzdYVA^JUW>)lWUuS#vGR~o^2um`sCCm@T( z9*tmTG|^pDuht_?;~J%_O@l@)g7vxN{meboyB~aq7{|PRZT0e4)@V*0IuilC;I6m& zvIDqum^MmkVL0!h0(O6*&Vyq61fmD8=s#0yvF}}>@$hbE38pZ z6}BrC|+SRy&M94)`ES_jjclLzQ zbCZO?eP=y^X<|`o9I&9U=|xXBWB3`oWs6g*}xmBp=i*B$uH;Vv!r|VQUFy611&1>?bpR zjT6eR{A6LSe`D@v$TVhCHm&c+=|Gx^Q= zcC4S%6kdnxPM=nPg4;rLFAvzk^Fd>Lg{is6Z6!Cu!B)FY#)@923z){2<}*xSs~nI+ z958Fc5QL?ZjX|JbrSVu7?G(G63wFSyYJn}a9^VV%XxcL@!5MaLc1&TpZOeYy2*-1is)e%6=GJ*HG!fuOnXHpSn_llQcQo7FFGg=nIybPh}WomAv$-&33S z$bXspX2ZxJ`0E8tbB|$xj7p6yz^QseW&xzj`m%z_*&e?J;jcJgc7*< z9#UcVGOrUQ(4zd?I*5aA;JQGb9jiR|@<_0T6Arb%iNW%a6WrkdrqwcUIkm)=e5lmR za#-?l&I!{?+g|B!H1j=ET!fEYzfJS6(oirGXXDO2`lbyT;zb?B;q%ux*e`+-!gA$`zX>3@sY$vNSb8_ zfC!csdp_FvdgP)f#vt!QmOUm+zRn8C+4Uo!%U?}$^lP!oITmNveMpEsMmh2FC3@NH zby^}tfXSm;z{=22k+PIXGv1$a-dpQ+4nGXWkCm%b_*E_jxJ3)l!6L=(goIq!aV87= z>L)J)5|Aul!#Z-o|E2D2;G-(9{P83+Bm)f0pb?@*jXEM4)L^K9K}<*{2||+LEuqTW zRyLc>vaP~QfRNrl`0mhQQ7ulqDF}j zG&2A1_dNH`+({-Oy!5}npMJuN=ak^#JYH(wLUMjiIvD^eoe+1R8+e$Z;*$ z?P@-T=O6*}X^vEogAnuYVehex@IOI)6@J86pY-+L~P~Mb~RrG-mAeRE;HTL?8Z--n>m~yAgU~5c2QmCY|9b3 z_|LbfVCy4_p@p2@dZX~9E{8S^+bmLkmiOW^uytzp2 z-<*YEoJ{}mI*v_V4M=bDTrEY+U|{&!Fom6*fzDG$8^T-V`~YMqX7GI++zdQ=0(C-2 zFWBMgeE&%Ft4K2(A~v+f`fhTU41=FLY$R80}h&A!0X38!%MpJa!bGNJr>}aI3^K z_A7dPD=yOGH{dZw`#Jo^TVCKZ&k?o^i<;HbQHXi$VFwbhd--O8XC>aOMDfc}m=GP! zrN{zHBK_=TKb1e@1@zu^AUv@CW!8oy@OrCucJJ__3Bhg0I+cyPmhG zU=uDvB)A9+3+9A8tvB{13NmqkKDs-_G&er~e0Hi<+P5|AZfy z3@=~N5d|l>mJXA{c$0EsSDJr3dW>123|`P<+i(fK|0VjvD1}*{*p=!hU93m;>p6ph z@1JH0JmG6dhig-?tSf=D-fe~2o!~m2W5>7)q5TSxJN z{Ic{%ayz2M#*0;dWZ*^iBD{UVGql^#{aH|*CUV8F;4U~OWNFLXm?#s%_RGMwGaE*8 zE@bK>uE%7@TdW-p`>zvzSp_R?+Lla5p$1;KIdddmV~6sOcsUVunP7XJ*+Ijy=CgCW z$_I^c&*Xb}u|YjSJ^4g56q*c{!cGa6Q^yxd;?1PA%Tm%VRx3Yq!(+r{h)NGGhqEmF z3+cb=Cf~-pf|INMAYzUs0CybL&mh`QCn!t%ZZvY@hea%jYSYd9#XO{5sLxbY7iOPD zd6E@&WT^&8 z+U?1IO$ksEXLi$c_u_zKx82R*@)+)=f1nCFQeKM^3I|X2YmTCu9Q`$qj1awBve~a5 z_N!#TC(^HU$f+;HF+o&CZ=Xk>K|5-hT~8x%DuP$(;REQ4p0Hv9zPfHuwtoF}ShjUx z{Tn=u5q$*4G1Oi*jIq8zx6&EL$;Pq8T$#uMgK79suP=Z>5;^WLQe^6DC!nUP2tYlL zYt`-bDV|iR@=BsNem#Fq^6RT;80iIVd_?2JZW})6UBE8|s&- zKgwB~fm-)u$?>Bg`oJ#{Z6D?=9}yY1%guH#6bJ6SJn(bCa2S0@*>BZm*VY&35c8_%Wva0WUNTEUrQwd2@1pFKQK(P0E&fvD-y!P z2N3b9tbNw9V$Ov8J|X`vzS1{;wuk4q*&>))(Io#wo=2~V{@qp#UjO#E6Wf!I?uylz z!0B>@I7n4B7MyNn%bK3zuwzFp)sV^^xS7x=^q|adTz0+^eYEUkIoHZ zTPJ^hjq-m2m9%MD;dPk+TDjlBIbb?k0(m!8oZ>@QVps3YW%n4aSP{bc0%=Cg3Dh^( z2{$tbgxReh!kmjU#@r(FcEf>t+GH#pqhF4!8Q0XlrbF3I^C-jMpsRAgVe<%5FN zj#WR=W^>oDAkr{iv*qreWsA%OOuZd2N(Mp7%^Xf zcEbtk_}fIOeW@6WkYgl$JqXP>GqICXmBV8` zpkHlGwyiaHO_p|`_4BJvzIN>a?d9Bkt*5TiTCaUs%4~)6r`qaC^mxVztlXlk1bGIq z(#i0y{X{=qZc71cS22BR^#6p(1e`RUmPCg7B+wUPEc1Bf3c!g%3sz*7r^sxwA_K8$ zBquY##XF9~=*)SLx1_!2aD!J}u~&9`1h2dfB3t4N128fTTH~r8hmM6K8K-Pas=Q{> zG3@JSZibJBc#5iNuITH4g}$V=ps(rG`d82aefYPcuY-}Y15&B7L$OLtJ;+KmJf&{NmIgQ2enyEQ-1ymP?(92DBfQvXprKhS)V{77%; zYroA_gk8JL4e7V;V5(42))T3HlkW`|WhW2_>r;aOBcE!g^#3TO6jkI@U8A=e^b|bi zIQ9~BJ6?ZWbV9C>vSOawyPdn}mK>4aT#Ro^IVhsYDTGzzR)fwXA}L@jkxEMJk;*G3LsF_1QR7F{qC>&2c0`n5q z)HE~0{u9MXWjStn3HMKo^OiaBgL6Cm7Z)Ns$g?UkN_@j_<-lpc{;SlE638!df|Xj= zt%qT+%A>MF#S*6|;JM;@>M$n7GiB46gWcZ@Y!VfW(Blv+3|(eE$Y0=67RIa z1sqlE0-%jO zV$XPz`4QX(_f5vV6ZaF>I2)tbV(es)D%M@H0GkJ8nN3w$rVnmeCg(+2 zHgdhsX*) zOkGxjA&9QQzK}!I?=sopiIhq2gNv`P(Z4ZMaq)r9FDaJZ8?Ne&uIV!J376qKd@t$1 zKf2!I({oiGcx+iqaLS->p%bL;(uxjfh0frP1GZKRx03l5>|7yUyrDo34#Ts-D;eR> z)tqfZA6yL2ii@ZqchP$YW{8hrAPGae^LERA3f|X%7NNo77|8({vZSX;if_bBO4lk5 z&6<+*K8e7)QFslMXRU|;CMsSxbARdC0x;!r`wK{(QRkEp{TXt*G59SM04 z`s7H69hrr2j6`j-Wf|)O?*Vgr2YYP`53Tx0^FAJ~csv@|#vI@fQxow%&W@9%zxE2O ztatGcL|SweOdFsl&1U;F8tA3d608CE06*xz#1kv~#1MdI@M01#unIWDfKlG&?uZ`y z6()ve!(%&Igkvf@RA;=XE^X?vSJ=vJH=r|E7uLzh<5L%UfTuAOK_ZX#h__vRMQVip zZmRK;$EOpJ$3n!hCgpqEo7Thn>A#sqQt#0QCqLI88N)1fyqy_Zs4M$u1%E2i$D2T# z@OA%`yO4mgIQH$m>RVW8PhbnPVux*E`xa*^ETM(S5ysh0+Z*^q8Hg%&=$WVuP9SaC zjEdHYRR<5F*UKK-8ZFQhUU)zmj6+=Nr#KN0cL zVvcrm^9z^l>hhd4|5p>ye17|c@vZl{aK&@cz!T`wh*#2R-cBroq5&$+nm2ZQNVI23 zC4-SbVSygNz8zr!JR92B<@)yJs1ObpglG4cV@mB!m`;>WK;zM79v~$FNTOtH_o@t0 zlI%F;S*Vqa?X>OD=CpZua`LW&`ra`Df*O-^NMT9@Vv3~yRzs|?tlNZobo4t_@Yaz6Uag0`4`lfv79^qa}^ z%`FLvZ?yu17#9k_exh+z{sNDIwV0{Td~)%dOnnrx2NIPklc-O)CRd&2kZo1ax;}w> znAtvP0dD>84}1VWIv!uj+_VGQK&I=FT@cO=5?Z3if!L9i2#@&nWDYv7D!&&&mh3SQV_TY;s{RJ{WLFSLUX1lwVi5%&>NjD z{kJg#8g{|J>g)7>DiHOB#|GdQwGbUHdJDDGrI6)t2PCiw_tc=1#}yFLKe}sSH=#mP z>z(tW?r=r7{!`8(akMfC&A1}H=yM+9{Fs9y8?MZ&f!b1PKL`>*Gy>6EN~en6QmT~d zShyO|TS{|)T@%w=@^T)>@J32KLM5f5+C)kx_R(A5pcpFkKwm-sO^1YsDG5v-`wAEy z^(BT$aw{LJQqJ(n9=FEi4(+t=%=4 zS!EaWqoam?q$7*q4!ysAw6U`pZ6SSz7aoH5MW8dZH=dZ=yHXB z2~7(yJpfLFPeH}j+K~6uX73jvZ&SqEtn%8dE?XtbS4V+W1vckzLq}@_sHqaPx)SY&=!stt@dhKZvGoJXJbtj@LgO&t}bA<{yqq zrX1_S3*?8HU2j*-_BPS!>fcbwh?k$?(!$HJm+((QQu)zhd?!C1Ow6Q~I;FP>Rl_Em z_o3h`Y0zKV^yujiuv>TRc;EcgjH_tU|HFeOL*uK^!;ME{`jNFVVc(a*9j7EJ zU})h{*R1_-QX4&Pv7~O1WI!*eGS1C>BG(M@* zDMwI|ON@tfRYF6g_8T1?QRAcn^1IiG#eo;pAX*F(Y=@SD)N<+}rYp)oW+Ah1<90Oz z$tJo$n$f_6&;z_JHgCJHMw=9^_RuY0tmZXNg@WC|{^w=`sDvY1OZ&Rm~Y| z*XDIb@6U(jt3grXr4YGDp_y|A;O z%)ScB|9*W*dPkJcYC%EGk6^UsSN}SSOD$mbp5Cdw68=FCI>I#vBh%x0`YqQB$E(fU zb~k^8?^42>c!7KAZ{#QNLJCt$>B4ss{#&-)D5}B1qCOpldR94vJc7GZ{gP&q0Gj)yJrbiArY3tER?oU*NK)#?OiZnN5u+iUXsY8c)s+IG#vV z#B-|w&t%TG|L63xLzkYTezpwEF1dcT@ITH=KRaN~iadK8Z)5tIZvGPeY`yU-Q9rvn zK|gziBX7~oa({tc59}Bi8W{O&g8ubu)O;xV*Rfj$)xTmbaQ8?HV)~b~Af|sw3(iLW zLVbgs%W2}GW&wpt%(-sTsB6=|p{=A-*QS4xyA#Fgd?@MFwJFS=sB%z1_E34k&Qx#f zN9kC~eBIc1g?$?d!V9<67aA(dHo!6AGiVtVaebkaPxP;4gA>R>R#^lEjzBVn7ZT3N z*2b@4s_=I8-P*+wg22Pvx5Cuf#j`xTlFL2{g^&{{xXzIRhlm)5C4aTAY#8#CDM=d)wc&V9O#GEi+aS$Et>KjHh^ zE&ENTrE+4m{?bi~Ml609$~bv6Qq~@;(A1->kXEK+>vyrSupEtBFb&fscQ9EV z&o^m>nY5e-l&!>(5^bP2s_ZK0TR&tDZrS_ko1Xq04rs|!y-swqkDCw;4*g>%-BFw; z4_&^aP!hxh9?W&Ra|GYoWlUIjX%x>&OzBjlE+7~lF8%o zFZ^lcF+2TC^7vM(ePo5c@x}ys%-O_!9T+`m9!Y8&ArXRpp?_kz!^1h^t>$xF7fnrR zT9;8iDh1?H=pU}w2((p}2-hNz8JJsoINU?yXg7)?=8YQ%(T$^SzVN24__Qt?z3kK1 zy-6T#1TW#U9Q>CbjcjT$?@vHwMK-Rd(ri7h=hJLmGsBxs;Uxe*JL-qkO=cFM#_mv{ zOF!@cr+^ddrsxO!sI~?9gy*H%4!NG6dD_HQUX-W>x@=vbL)$J}56e zTo;>i>5m!r*py2zRQHDcWKu62cVHsAB0&Yw*@x-e65FRg{;vt@hwyXgA3cWsXN6vX z1UT#+u9_HKlM}Q5OynXmQYM1~`_Bs4f36pP8*{ufIJVe-gn_wxq|PzLLuwsUJfz-d zqj(tk!w`06`;Q0nRrZ@hjfda_i>*Q~T6Oo&(X=W%OhQYJkVYJWaOwJPC6ePgy(L90 zsj`QE&~8p$QAC=4vmUc2&p&$Ot`sE3_s49w8g`Ar&$B*z@v-PeM9{z>tQl3u3zQQ5 z$&(*M>xYFmab2z^u|8(KIem+^{CFCchd^wd0!JQhj(WRgi>OOqkMHmds!b6N>~CJ2 zdRqOG9U}9yz@DbxumLII|Ki1e2Y^YUD;jS@(k)jeWOq|ScBN%~GHil#*h@w$+Xvm< zI(QM#02_}w*Nmulax3fLi4USpzgdjdp%T3K3-hDU?}AY$>!BO`n2%Eu4g=$3;I2ODM#kDg-5jATH_(| z>XeN;IcnP5ClA%9T)t!D`{di#@sVw(4FrO-oZR6;7MgvUZT~zBuV|0f-6-P>GJNtl z6U4C6%R73Dl9a+4`8-bXZv7>CoZIKvGo9)&?2FVeXW}`pFJsHcAZA>)*A$gpNc|!6 z<(U33k+&B@f9P?ajsEa5Q}4h~3`u`@7^(ZO=l}53pHP3GB*&s-f<-^5+lFbWFTKX9 zBK#d5K^N__V*-63zCO202#sDO#1?64t?LbMchp@EFU;<`?dSlXK4YyhrTtf_$9v`R z^|8l*MN+cUT+CD7XmpS$2Gno*%Tsh<4V^GC;E~e%nxE&|WVw=~D_FTmX&vP#)ScT& ztV7&3DH>tOLAVv1)wW3+Y~`{nABGRP+{3oXN|A%l|AcbT!F>@qSOOBsrc+Mv{VzDB zV%sKZ$+k_xl?Yu;Eufwl9o!#LdVsl*ViO}uW3afpU_lVB^vFSGS({BZCrF-s4sT;i z`{mMmS;z#rsH2yqIg)2wsR)&3VFyT^iY`@~O~yWz@^(!qcLKnNjHFXluF4~)w68}F zhA&h)6{6eQFb2gZDOWcG0qs zXLz;lO?U}OlhToaRJf)DADEL8$hh_JvGp7wFC!XaVTbL z3m<|9$wT5n@}Q^|E&A0TLk2H=NIXb@jm%C#1uMF23vmkEp*%?*GCfHi!crgx%b}Ic z!D@rz5MK9zOSX9TPA~SS^8i)H+_`lxqDMNG;{b(c3BS(0_jeeQOD^xnVdD0xcm!A`pq>`jJ^>cvC+3gKd`#xzwwZB`b~Cn>LFtEFnLUiP`nd9hQePowu| z=_^l44TP~MdcYA|nyA3mvt-Dd015d_SIbrI?ORcGS4pdnR-T?!Lc4QyB+Q2%TLp76S?l)$9}a9prN zAwP}>c|A>>={c{M=X;Wuf8rVNRRVZTI!N$j$|M|qRSmBH^V>W6GY02q~{^K z0dS;5yqM)Vs`cyv%L7x!ku$`^ShlOWt_ftNZ_h%{;P9aS3*2DfBPlE>wAKz)+=uE! zOQylzr(X;DUAk;n|L@nD-+yD!?^i?X!S`q{^ertl*qKFJrH`cKcOak?0RP#T>Rj7f-fbw4XE|45|3Twr|3`gJC>$b!3tt6Pb;KSEkP%heFVNK z=n|fP%`~p!zoeI1i(EHYksMDn&K+x<97nOI%vX{`gi3OO@*ZY8mZ7NMCD`ADEb!$Y zCMPw4XSX;uSBz{rb(0^U-MN9(Lc~F8(|^Ak%|EmeTb$7c8ph-wZfYEPlk34<8+Y+R zhl4)@X(tb>43WFfnj>jUjYqIEb3QxhW;o`c0vWQI0{h!g`)54sUV<=6;0yVOJBm@) zIi8HZmCdtO_99evy(hy`+u`zCs*9}PM<#>Xr^cu+4@SVo{B6J}a4@yf=`yQO*?zN2 z+Q)`1REfc~q*d`*$njd}D42WSD&qj9R#eye-Y~7iEupX2KS|%)(^MV+i_65~2M4CI zwKsC-W|ae>XC#)_{`95CwxLkiG7}Ue^55thcO>Hw7?=KAHD%~0bX@xg&eOg~nZFRz zPhar652BH>#q|A#W4TsV9$hnCII$d)4OdOo%BDuwOq56B1qdkwU!p$Rn#n)Hl~a{N znNW2p_y2)d#VYJBb;8k1QGF~Tno6a7w@P!=FLP5y{hFvQawH95+WH8yQ0c^QWx1iN zPghBml3rTUFX?o+9YE;qE}esQf=?x0pe~ElMS4LiUEWkF(QbnXbX&R{YcTb8rMldw zF4B8i>Ds2s^`^Ic=~`IuJUH@-19dE2Z%c*A)*|=p8l*_l_qp+_UwY82v*lMe?YyA;YVXJ_Te`S+S-TT@X?w1O&UxnYEl~fhE=$b{6@mba-j!)lfS1v ztv2KcRZa)zi5MmUliOGlPRDUfxH*L!n=9vpDt)2K1)<7Cky2@RUltRptP54H3{~D2 zDfP3H24*X?=;*0%hqbVkuO($Gm~S!tkc=M2f5b~&=^8{ogf6MSbV}I}U_59-S=IXO z1AJl4pLJIGI|oQ@$_M?oP;yzXSpL5ooxDbhA3|TChKm`*0j_%zg2YhWlqBh^Kc)BT z(P+b>;BNYm!?A3iZhsp~%S64c?(ujwV0@y6CC~2ZFPI&j(xI7RhyC~c^LlZpdHq#l zUMrL2_1sYNx+*cRoFsYe9co^$f1c3BgGWAK%y7Eg6MYA#+#TX;f$^9NAox?Td2x}9 zGk`elyy@_|5pc#Zw7BZvF8h4F(GAoDpu7MjSg`PWHFq_lK0$-Ztkx^=60e}FC{%Yl zRNyPc4qF@XIzImOZtsW}f?wFz*J|l^q`=xA$kldX9n9(dLqxxM&t}`%+LKo9tH!}7 zpFZ^}s`>_WvOVRFC|pI2FKEF`@$7r`&m)|a`SPJiY!ws&d^S_7~MaStk`W6U$m zjE}CzBThR&7w-RI?#@?xr1UhOes|xzZ0o;*yuuZZ+Je-;jjpFk({3+H3tSy8wT0HW zLuFav;xCutFx?Ya=gZ!w*#)6BI6#XeOGC@D@d{<7n6J#$nW;acPpLwa*`h;-t6d7H znq1JF*)3l0(WBb3`|?jfOK@*GyrD=dtJ8XbYvcsJO9sKjFWEAt`8EH@sqVm~g+&TR z97#zB(-6=}ki@U!$ECqYPQmf@FC!~}fe}e52MT}8OlePP{lhRDpmsXi%@(NnOqU$3 zIHaY|8OS1s7eXOwnmQebz?GRq2F@_Nd$iWvod_5-YVJHtuQFelH^n-P&~OPXB16$c3_{P-b_*!3RH5nx@V$bDt47i7$=UNc>&UNBq|T&=*}| z@Zx{KXp9$T&DHg+`4MG-{?tEWHYM<*k_-f(KL>s!+5LrN7vo1g>HYH>3O|y(E>Fzs z@g#W-g&#>?`+vk{#_F{^NnS(YN0L`CF|SPIH6TCI-U2(4=m`$cF^)|}6ZuiZUZa0F zau9y>8@%kxk7o4cN6`d+6p0iY{OFaw{HW*hr2L3qD1OxMi`|J|1f%` zM0+KHAKi#`l!Y4xqqg<8#raXL$&aoHmwkx}ae+cMio=n>Q%U@^rn*{t1!>5M^!bVJ z%vqu4gYctlIn~;a9}ViUBtxzL1LSGxeK_yzOa3ZYnwf?STu%e>_iF!LL9nVRL4#Fog94Yxs*v{#OF1(F-TXezp-#t{ z8<x70XQQF+fE6*g=Ci~SA)ul`le6y zsOhGe`zAIu=GEx0ehkcuFkU|PA>@x``@uj3H|?)V*$Y?Jp?Va;T&e3N-}*=nm4olM zk)b12P!ryzD5(Lyj(X>|BFHd&GwRHO?(9<#+9yhkNxZmnyp8kNszgo*De<*$eiYS~ zGDJyJ!3_WPvHiNtEveIU{Ntt%_g_4Hgx@uNlz*hz3o`=kkZL$1&~*C@SMxGdz6Biz zq!@nUYQ6~%rVn>DU&reRSMwFTj&e0$!YdBNT#YNzOa58NKNI=8k-u~L9f({jJ>BsR zHo3}FpI_r23w&RQ!0Y{^fbnYx&}#yn=!z|lW(00=BSUr&4wG|?d48Ot*1>0p5ON&N zYbr=_HS1_}xHvW9-G;`?;it!uBI13Noe}XqrY?`uCa)hpq~jpfHk|!c_LkV0VULVB_c7du zypQ_ul+Jh+kD*NMP62pEyoPPz2U53GDSYRJkMYd;5zDFdE;z8{9x~1q&-dwzP$IUN zpt^?<5K%t{+0F_)5v#!Vf{G_uf#+f;nl)16n967wchAE1GUhTPXSg;IZ>J*zGz{`g zWf;hXy#=o~jBNU5^cDb@;@Mrfuj3&6y!rZHbQ&{l#s{2fma4(#Bz!MsBNX~~%czk_ zAa_u(_Bo~=m2J@1h^A9B0=Dvw^rlnOVFjKUs>TuAfF7RtB}fFbEjJR>aeAx_ns8T# zQEcQ`;sgg1vnigV=9`DemPEN}`WB#M;OMuc7oJjY7M%8v-;##OYUUqXIw` zcq4Eu7RAMpf}bNTKXXsw%sJ3wR-jkh5WYJ+Rjk_m*`X%7FT3g3ZpVKjvh1p~!k z;6rT#ZXg=|Dt}LH3wGKHK{1e&GXjvp-#on}FcO#ECE=O9u9CL!OhaU*1b&O8aRKpY z%Lj1*vH#Uma}gJ{ORvN>h=_=nJ~^ITL`eN<4Co^t9)#>QWUbaFVifGI1iSU7%!Vu# z5%Fq|5)$uUY!r2OpQ4ycTuMlJ3a_J&e7FWBqAP$ihu)aspJ?D=R6^FL277Y+mj`=> z`^N@*MnJgsfQg5TjINjw_?^g=-r8UR#Kb?4>r-lUyPh7Qwc=A(^Kv}H=dR`&xq+;p zk0Y{iHG6q;3esXOZlE7kqdfJQA3N5={o`2TMJ#bt@D$~Sj6lbm+UJ;~n6l`bYjD<$ z`pEUrprA&@^_puCW?6IlL!&f`2PMiJql=1?>1#btAL1j4ksNGMTn$aX{3AtCN#(q5hAZfAx5r6{A*K; zRK~>!4vi!cBeosM1j#s_SD`FPtJSJb*M^)vAecP13IRuwN)y)S)h{4V9s`DiMV`C` z9mAY6nn)U1YdSx4#OAn}WMK?K|-y#?+~&w3_c9*I-UCt zBn&#CM*kO>%4Diu_7SIQyoSsoE@TwHiOCn4q80(u0^$uC0wyQ|Cb%Jiu37Fsf0)Q3kTsA^u@M`SZB+B5{ABWGhRBHX*H#ybDopLKOfF8VBc(h5}T+)MRc~m!qOPKC+Lx;~^@8tb(oJ zkSok|*w(?~ud#F5+C>|tYxiNUIyFa;?G?BZOOS;$fCJAh^y&LC(+GO=YndorW$-u- z?gny9XTjP<>wgQN#JNO|+?Bh#5KCI`cAvf>s{;kaq!ySCO5wofbY z9udc>L%O~P>(7dIf&RW!TcT?h+bRx8(2Yr@cn;X_520=Wi5#DrXS^}1BIs zfs_yp&@qokL)db}Bj@;Nr9RExvn7SWJ?XP<_D@@z^bg>minc6_&PFDi7r<}bdkCM3 zdpAEU>2cT&9qXb{WB^N^a^EzTziJ?YP8W1F{^eXi;UN;(ZewiT8_V4;Ob-rCq1jTz zAF>Wjg(_Nx1|3=me5`(B({ErvwPEieSp5eh+-u(f;VwK1a>a>5tI;xHJ67?JlKA}T zfv$=sA-WR`0~xg~kcZ>_V~Qyd!7qQe>SLKgy+fQrWXAeiIvAN{3PEz}p}>)d*PJ_Q z3h9z~@heJl9)UcR{)kPak7XhuqIsyXixbIfPNZOKTG;v3P(`PtXV4OvPpC5D!HWsO zwW(ERR1aoUr_87>&ZyV>&Zy^ndiJKzFrzw+8HMymF{6%}Gpb!?)DgY58%?S>D#LcA zwxko#y_u70HRpY$kgXK7c!_DHL&k9Qj%waEfFDEy5R8~sZER_LTD^k)zN_GOuHY!P zFe7YV#7=iLccIQjXa&M|eRS*-b6%DApI3W*`kyyjt6gnYJ3g=4WnLZ8A3rWNH|G^X z!DC(xT>r){G{Kl!XvHB+&1hh+h}<4dEgX71#MWqqoLa7@^JHR~-E^l}*b$tXIGX?3 z?AnmO9N8Vghqa*v<(OjtS~2HV2WQh;ATva^a&59%=hiCg+`=d|1V4+!~9yjbQTQbwJ6X7b@-#7}p5!b5Shz|<(`>%%NN(l^ysDS@8Vr&R_F5Uf?EyYfh zx)HTQ?qdQ`Nb#1 zd}vockY`Dk&UP2OTidf+d$JjzV;BnS7!O=CIkL1GD}rIGGqyvVrF4wcim}wkKdpKi zQrX((qE@uV7EzP<7MQe?*l4F+-}xz$YmwIWVSphk_?Bb!M6Ccv`pU9#KngBCoH}LM zEFOXN82EOIJdyPx6%wGk=7&q${dXy@NcR*j@!$VG_uNRR0-e@_K|H1H53gyj*7qX~ z$jcY5a_hU8zM?mHEGPKaJ*h|Yz#+ZLfPnwR)K%_|+42M^j_^&}AA#KiW10Z% zS#5N&{tfj-vVJp$m8I+DNY=M+%n79CD*{pS6b{2<)lN(IPsrb6@(9$OW6>nEy}}UA6g&+l-e88efmf&Hy9wV z+M$iE1p(HEO6K;$H!&SJM~Y`AIKAR~*_>cF-f3laSF^Y_*Dx&oeC?`gOeP<+73kmC zL7IlOTb124lX&c*3dg2B8@`dx=#APGTbJL6_0o6R%r~da#qTPzEKUlA9-B6u?HpEG zj)FUKus;FiM~pd+zz?CMG3F*Vz&V5sQ-Zs)q0bQzb9FbTvW;XLp53JtcSTnd?j8+` z6nF7yA#&pUD|4*c2M7A4_uy`|4G!Lhtt%jQDLSdf7_Tv)98YBpngBKOVtD!cM+bXs z{^8(IetZ6&j$wi)T5A7W?-l_V%0WKZTz)Ji6gP9omqsPgS2_I$8kkE@b_(X{gX%@n_a*so_~^wXHiq zF-50k9|tF{Qjs6>|JWJegBHHyVWK_z@_gpQl zC*K;`HdoKK*7fj)v8MgWU8~vuL9HBLU*8q);icL78y`vYtTpER0OZ@?gFkc7!6zrc z=%aUMARy@gy$e+KnQj34hgM~UX3`JdI97o2L4MLUDgbC`#L~v8s4z$fgoINq(G8bS zRltb2p32Os4P_P;7DU$LEW4G6j(=!0(I|oRgO9{u=uD6-CW1#QClDf7WXk3hw$+BO z$8rY%FPtpoaI)V5FMqDp$8f2RSefZ?@w`~{X)q!CeAV4=t^%+IjG`guTG8j30s9xu z8Zeqosh0HaaG@Oz|1Y;5b8q|uz?)M>eu5wGx;MUu`;?I{w|?XxK-?#x`+8|@-QUN@ z82QbGgD@aLAFhK_Tv4VR6D(54-ioq8E-5%N5J_FI7iU1cz2qcvD#T%*gD3K8J#Q35 zg&(&FJO$>@gu8*94%R&aPXBlxEpa<7Ke zk)qCckzFiOo7FwYX|lfd8*vt?1UvTMh!)Ww2S{STx=aJsC76EwjdhRGS&q)Ngyi&P z?Jji-i~%!J^cCCyRG8-1(MA#jv6f+jfD^8>2HVZRYrwykne)d{pH_F!$gr$ngL8c+ z3rVXxU>5R4xC+*pj9?_K7CRxI<(|U(SEJgPu>DTo{OCnM=O!?yTc3-;V5E2a$kOSD z91VE*BS)ViKPK|W1pP+&F_}N|^egZ~@bxRL+@t#dTokbfBb(wkYZ*0K5uEhReH2F&$+ z(aBkQ84Is)V?W+qu+Fgxrv|X?Gf)fNNn1#)Oa3SAqvml6Uhww@k&%B1%r5AZ=6A8o zA`$Ek`!GH@EQs;h6Zi~o>8?e?>zL~3MNDk3)6Kyo4k@B*_%iVv)~1tgpVQ# zPRaBMfuQ;ql?OTA5X7+{|Fs}RM_rE$i4Y)r57bA_t0?CUV)CoG z5&|I_Q)L5gaX=qYuXw;0ox}4gIe5scIFR5vfm~F7{#mh3z)uY3383}O#XzLO{-7qx z%deg)Ld?DFRU_yrmaP|J2_YhRy$5?9T)_k1lXza9=WBktxe{lOgP@xhgPw;jiyn>Z6eCZXS7Sqjk1^W@d>x}D4<0`R4^}+*s zwC*8P9^J73snjVAgmp7gEjF&p#khPCQ*T$POOP7ISIN8FxXv-IK1qFaKg@rEGrgQX z!V3gjm|)Z8`V9>NUI6U7gs|t?sHKsnOQlHspb8@V{d91JJ*LNZ_);CLE7m)hyF7b@S0i_L$VLCGP#IBsa zNA%y}A_CKf?LV>0Ew5w9#=-YLR<8vqhPcS%K-Te~81m_Ku@aYf=3qePfIbVk2w9LM zHZ2^i5@W{75W&j21$8t0u44QgG;_z@vwSK3QFr{sH~;cJznt8(!<~stiu7p!J}f17 zjiWPFfUOBGljZUDt28i{L6xT%p z6QOQY#f*Q+9}&Ndc#iERpsu(54&Q8>-G7nm=^b~lMEX?mTUJ_KV|keTwGZBQx!@-~ zj2ROtovQGYd@ssi~`*%N~c53fu?$P zaNENH1Pl^8d${eEz4BoK-1Z#wxljMj;`7B%dWg)$z)xy6?unmtK;08RX>X`R@RLl% z-hk$Vz{7tL95&mJEK0MQDzjrJwXzTZ3NZ;cm*#+}-XS0Z(0d)urVTkM-0m*Kf=2%; zL>=7hKI?$b8P4?L$w|9BIgSbmDATwl7Ho!itTGY-#-I3*M-)EO-!`Et`a|dqt*ktZ z04{RKPEOO7$w52#eRKScV-Yp_uHP$-Iu@%$j3IzZ#6j=8Bho3Q_(kmTBhoGWMQqC> z(lPjD_RJxzvK@^a2*Tk+DOUbaL%PD1UC{by>M(bc7kU8&9)Hm&PS z+0NPfEa$GvyE9Q70WDxJlw`(3*^7z=ckJzt_Z{r?(*yy}|Hm)KQc^MX0YyIh-U@biTCxZR(Pv{)2iNgx^#K788STb~Mz56iWo;UDeM zaUkWm!@okZ`m#P%vf8rb%Vw+=u7^&j^aE@;iV5EYK6?D$xi_W*=qSAKOJX14Lj}Ub zXKHs0A(^0gNmhXujvc0Eh2sJ3(jQLSZlC@SFJj_UwCh)W6<|^l8M@+$L4$FOM{SLS zI|dDW@+Ic75=mzW7jux4-ur}j$RTzJYjgEC(6ohgh2WYFZcYd2IBV|o8}4+51SB-1HqK<#Rc9O+G}6tbOeli%3{haZB4!&8_<+vA zHs0}dwvo;YMjLlX8x8-Dc!Ml$JVF+$+IVrSVZ8wNXxF3Q16#buA9MS!-0l7H&xC)F zFimP|YWx!ZQ%sSDxmIaMVBa*52AH*w2;k@|5$9(sHv7u~KL2xo#ea(HLrlU~FZ4i9 z%oXfaSV8QzNXYxoCXwTJc;Qb>3B@1(YW_&4=n@>Ce+9dW2DVBln0bK60`4ZlKZd*isk&q^&THZt83Gpm~pNbN<8(lO__HjEd^ggb9KG2z*CPH zvXkc3M8~>bnB%Fh*=?Ve0)=FP?nW6k`X`6Q0(7FpQ=RH+-hf)v2G@HQ-5Y4Ag+{Z| z^>i0jBd+Fe;l&H7KLjV1T4fr&75vCvI}PsOfveQ>?D`DFem=^;aq%mQ0=!)1^=H%~ zxb2G_Q(1*<*HaLe3f~`9z8cn?k!`LQc4LX*>li7eqDa5d)55c}BgGEs&0;0XikTYylj3spHD|A9mAgIwgt*Q`F1_9EI1|5&8T2A zM5Qr8lk3OINVuLZ@ytLVtJw}cO4ld!X$o{v0a~)RXs_s}kQL?it%sq6=An9dc?{vdB_Z(bP zQtcPuzcl7y6Ma?u6%gaKlNC02XeZD>4UnNY9)wKIw{~J`l4Cqqf3x)P#>VG-vs2Uj z1UZ6s3sa4v5nh477Y+PDdI~UJ`}9sgLEyRT>A>$?PcJ-TI}XWv$o8o=&9<8n*K6$D zA1`)uuQhWALPvy3zW1r+_d)zVVfhUm?t34Buo17S--_Y+>#*SYK-=3J+|5;V|9DQKv*UYcth)QVav(_7$FPrV z>^um5goO$>juBQW{{#XbXvKRm!<~p`j54&6EL|&cc*4#dTJgaXC7Va2hV7eOPop8e zu}GE$D#~#^y(a{i30Jd=`UJRA*1g!s$9=da^_l0e6x6>QhgCYv2hYG3OkD^DnQ5?P zc<#Wg$xEr#%F=7EZ3V7XiD!~F`#^1BZEJfPUfr1jwg#I(3O9Z2cmqD02T(+shvdfu zQ#C5y>w2mxT?61@vxk^KTujP}aw^;mE<2(vxa?rLPfz!pj>6=F1t8y-`1G&b!2ZYv z7rRVFqv>XCt591;(>7Lg+5=;APX|AC*1+14rLTV@EhYao?g8QGjn;)mI5$R9no?3$ z&E3vR?rwBRHmX<0UxLkL)ahA1;Gx|rR0DH(!p7Zvf(e-eBuL!Zb|cRT$Qqle&%=!3 zL@v3X+di$a=AymHES$&!3BwOcYrzcG>NoHaJpIN$a|n%)=IEQo;=nU9(tq_^ksj7o zp#vZEG^fA_rZmy|5$KckK2&xq9{Ti4C$Mk8LH!xeEc$O?Ts;oTkXr3S<$>p9kVkNb z+eUt@_iVwO!FfrDF&NIEcz{eG*!BcZ-Rt_BC3Xz_Qz7?8GTCrX(>OO4a3d|}m5@1u zd3um*^j2;D0c}o}j<6dx(3oDiS)irjBT{&okG-sa4Ep6z;EX5O@Df%K#wnv>QNP2D z){yhn|z32RIXyi>-siW{o-V> z>4a-jBhsTkGxY`(EXRN$F00O5Y$J-5!cg!wmgz*9=%s9Qvos;oQV>QR9g#z^7rj-{ zJF0maNElE(h=)mUS(Gt+Mt2>BoTt21;0DxOWto9n4c8>-6l z@tLeLk5)npw6&p+JagH;39c6kM+DnbapV98)$tgt7D$G$?sD1ZzKNukZL}6U6YPPW zG3hSXS~q^)4avRQ`2tnwf;U|=BONw4j~Sk00I2vQ33!7;TjDJEq9HGw8Et(pE%ys` zo@uo0W&b5EchM2om{eRkU1N%{E!-O_$_akp34WX!_&tmh&cje%xJvpNN&r-47Yv}w zq_e#3>?`zBQ!SjQ5W&Ipom%45(hFW`xI66J6LxNfr73wK@Y}fyr`B!=Pk*iTk7>ED zYol%ZgOMWxR0w$Xsy5Ee9V1vP$$6aFQD{IR#tscYUlo~EGNhj)g=o!-KUApAM?X{7 ziAI#B6?o1eQTn2aLJ@F8((5pWk(gr~1V)qyGWz@9r;Mi)0Qj5%_4oPD2=!;zZ~8wb z)F0ek9Qylsj9G19?;(Gf6(LFb;1^EV!c{+!*#d#Gnt=m3W&8%DoydRM&5QtlBpP^gej|it)kF+UG$-II1;2O=#b!vu)q2 z5o`NC!(#d@+V`OOv1(rpxc%VmyB8k}t$ih+R<>`=qY3RJ5rb-nK7OChzELanSYx@Iz%X{4-hEnXwqt5#+Ne2tXl z@lhnB4rvF(XGFkXK)kZh-KBOQGAjFGzb!Mca)fTdzqn+pOOCq8;>SQZjF`cGS+LlK z5a~BuS%@N-7~iUm^U|r%Tks1G`?#c9QcuQqrAoWIv;-;2)n{|m1v7!4N$a)JMNO59 zV>@`jQd_Rxu22`Xnk$uF1E@$-r9YPTKCCHj6kJAuz0h}zRL)kAIB|5w%VDd7(uF8f zgfZ&pFna;`)mvy)j9)#xY7pkpmtWm-uKcRjTI3Cb6?yLbDvf2FEx!uiXJG;7&#y+G zBfl!0JrsV`{tZiI&zoO;?QHnfR|eu&z-LV4H+}FK2jn+7p(uW$(5dz4xz6vg z{{|DjsRGUV`XDUDEKlJte^(WF*7(c+`g4?bM*054$_qJP-cxgXX!8BPRO0^f-Iy=H zPd4PU1wXkEy^$cC!GB}&`7sQ?{(~1{^W|5!518VkLU^MwVQ^M&#`75+g32xm)D3TGr7Ofs|GeJ9UAl9~NA@I>OY)f=!J zG}eM~$^0tBbw9}rdXCv&s3%T^pHz!Ee${(USxl_`~e@sQF}Us35N4wfG4cl|n; z8CVXIudUX^p=fA4@FSkseZsq_yIDLt8>O22Zj^sN7HVRnw!|BeBZ zC)A$|!{Jo0H@<6#PfY z>syI=O;3{7Q1BlmuUiuH>bk0b8;64bD0#gP2UklQA4OiU;3vnU9TNT{NYb>B(CCza zNBbM0*F-$pGvhyIW2+A6vi;B;r{11`z-Z#p0{=0a7TY9Wq$hrn4F543+r)`@w8hy} zI<$WHkA3qR4F6FM48`ytf06j9f&VD$KK=WN?;slGKg>7UZ-_^GF8Gf!)OCeq>~&WB z$K_W1N5DUh&qp*T;%Pw3$NnYPd%xi0syoSP`B(GZ%^D0b|*HHMA_-O)v3MRfY*po3I&Y3^S zP_LanIDh)z!ly+P28BiJ)3pW?biAOEo4mtSpwBd>BYFyk@} zNuQGJ-uy>q7t^N>HTKVIDEvzD(h~F9nk28G@GHsd&cwV5ljJoNekFMw|4~94yK%^Q zKz#}}X<`(>9dclN{~tdw2*3JkyzI-buI#0Z9t_{#(5L$0`#WGgwjf%Y`V=Ap82VJd zFW$&c_#zp;e}8?dOzBg7@%?X1EIs(eVEFzBs^?bt{y>>W{Zi3n6T~0T{>1lp0N+0o zuh<*rE0bH9@>}@TIpg~~ehBN#vN|ii|MLG0e1E5b@9#A6{c$7s{>}mM{r?-Nj$j$U z_vew=WcdCCP_7c0l8Nt++y&p?8CRNq64#BukJ`bV41V+(*x!KssPnAxTB*hkgxAV< z=Y`kG^Y150GgJMg^ATZmsiWamK_#g%{W;pSB4>0`cpU;aa>9Chfkp=Nl2LBKQpc*_ zEkkF9E1l8Xkl>!C%1oGINq(_yA1-9nk$LKmCSJHRxYphW9yW^$7(jtuL|oWW)KGy7 zOZ_!`cim=E0<%Zii;%LsdTuL0S{K`-))py zW7PV=qF0?2?|>Jc8^a5C zV*eKila~=;@)G);BFL&>hMS815%d)>!_i%?=D$G$u(|+bxP0YmUVsPq($zd$Zh!>YTy$z*aH4)k9fDCJ5mrUo8Yg`ehA{EN&ScGV+i8r z{@?&0;*z{xk^>?3fZ8Ags8eoFYcvfQuy@{qh8s}gci{lP0VRH&mJ9=y?qGO9KhgeZ z;s`$38*;V?{_8+!;;c>U7ij>1joggA5^oGpybjF71c03@)erz!R3ixhtg1#o1X!H* zZ(`R8{%gE8{h-C`!rpB-mc+VXUM$ypAxEs|c4B41`=5z~BgD~PjYmL#E#hFy+y(e+ z2((M^SEn7M9LE+Ph1o0EuO+F$oxOrCj_qs!jPJh5m@K29*Ts&6p)6*h{I3iz55-Re zBnXqVMy6!7lK|scWI8QcKloRBsG2^?e+bX)MhyjF9FtVxzdC&SY_sUUgCMYS1Z3?z zGyW^WF)FpvrS^u29Jma!w zAbG}j{~PkmDEEBiSrWW+5orDK&Yi?Nmt__4&T*57ca8^x;GL`Qta#@h{mJ}fc<29- zYs{nHJ_rblWFavIl5aS}K>5bCTYtQBRzUF1A>d5B^J258`aVT5m!ZhFU&iDcAS`D1 z^9*}jr4#3-YANBa#J|J+S@;(K zfX{DcQ3O7B8o=jckb#MM4!}D>J;!H6JtuNxKh*R7f=}!S+WYh2+&LKDIi{#p-X+I7r@&Kq=StvN@XodCjdFk4lE@-3Z-;<)9+P)7Mcx5~H%%rh zC+KiLh!~SKos-qXJb(KPLQgQyPmE8Hc_*>3vdFy3xXkMxY$G}5Ih4_6sy``1$39Ok z{FJ^yRRbg4Ki-kBdrQ0{C)vCa@5q@D?+9zuf#My>2iAB;9{mTQ{_&39{f>k~@#x!| zu^vyx+zorZ7{B_gUlv@%ct<4He({dfIu~!uct>l^f~xuygbd=GT`2_vuV3C9!+1wr zza+*xat;vhNUDK&M_jvD;~jDFayIdfRQ}219XUJ9ctIjf}zz|&LAV&7~^oZw*11I0Uv@#FK2cNF|~LcF6V zu{~&E!GH32N6ERb(Z9-a3H5}Bn*h4|og!FCqQuwk?1z_4rXTV4aAB&yfMi-(0&I2_ zVYADU!e*BdHoHtom;)D_Ap1Jx>*9s7K ztJ={pMjIV|z^;|4)o-<9)yH(i1{$j%7K;3ugCd;OJb3?!Hs28nbRq~7BQjj1*(4l8 z8BJM@Jq4ey>I&{hJcJ%--4)#kyAik!X9eenMu&j2g41`v7FXk1ip_gV2!>Dvfc%fb zd%bTI6B(zs{!*fty-?AIE~Ltr48Eun>7 zE!t8?{toT7U`N`tQoDZ=d{HyU0CV*kz-3=KZNVfUpYT+^wy+DR*_+VGDZ%xV>@b#g z*zgQ^;6Tv6B)I-Nc7TU`z_-)Cjk|Wac%}^VQ06lnV zJjzGfSd=SKP!9XA(HeDQeU^d94Vv=_1a3G40~rz&9AEW;*4V@7EbYK$hzApa4Fp&Z z745deh$kZRs<2#}e28fFx5bP3N01H@Av>TYwTJwh;XJ}XA{wHom28$hBCWJsD>=mD zi{-YSWB-CSq2W;Zi?o2mdjV{EKrblwH9F8I$9~SkjyQd|5Yb=Y3zNIE&^J$lzq|{% z7jJes%0Q@!cCAmdN2>ZDRK;PyNHyvRFfmYrQHr$r#c;)o(ZF^tGyRHo$b)x zoP{V}1*cYz!?@eG%X*XaIFj^OaB9_YMT`vpvS~M0)AJn&0K@1gZH-@N1P4**yxR%> z@1f8(qoa7uy7!5WQk7{ASrqWg%AU*k4T$ItMUG9 z`8_jM{QfKWdLVuu>@4ZSj~RoR{P<$c2FnTJ<6r`$F^I+Ih>t^t+&c(Eme#zq5v_^G z#0gaZkxQ>faJfD)aU^m13L_>CabF#fISefYeoPFN{KKIoUDKBOHh_US!HMCF#c(+5 zBpgl&C?_!<&J~YDql_>`%v+32u@MhvNms!lAL8MV#~{K~#9%Vd`Sgc{xAu#NV=x&r z)Jk<2&5?LGhXEIhcuZt6edFOAM?9RyUh>t1csN?12Rx>YEhU?K6D$Vn>seqk=-#k> zt@JQiOd43sr>c8}#T+MNT&twWF}^ z#raF$nj@0WS;vQwk$d|A6p%bV4C0Tunl&_`k32&#p9#X)%|0I_n9nh2 z%FZvI)5hVL6=xgIiNzKk zYAErXq~MnU%f$K(9M4IT{R@&|HYJVc#01dBo6a|$lN5BjQJ;b1IZ3jMS)Vh+bNaYT z$jirgPVeJ>@OVzGOg+?iPEv=zRbM1CSr`@z5VudSL$bboqpZOqf4E*}bfjg7j`RpQ zw_xa0Yg5E*;0qz10Z??7IYLM<6PJulhd11rf5OlQU{COm2jSRuC#y!xa&q)z>{sq~ z)7-EZqzgx;WsZjI;BKJCz+BQG0gl8NQ;bwF)~xy?tUgN<5qO}AVw9IjU=~aL;XDdF zoq$_=s|L_x-`&S1U@?ZkEpwv{CC*ANg=7{80*i*01U}Fn^R}-$$~6_#+cs2>vJq-DuS34E<$e zea^ri-&rl>CH(Pq+z-wl|C6bQ${(ew52!DaF(&XwCK3L)2+95z`J+_z;3_W9&%hs< z^1S)uE-;-0{`gBWDl30P0NMfhqg3|I1!}?Fh2?evd;I!_<56LcSK6Yn^&-QW&&fb6 zQzU1I^*7dkfP0CPb)RC82764f%Su7d-w&cVN2Vwl+~NKpn!psX-oh*fA|xf=pC}%n z$dKc3x2IY&a6CXshL8y$dwT7jeLO&B&_5m^pPqL-Kp5s>p~s@sp=~kA?LRdifz?#K$R7gGVmbcGm5pJn0eTMi$xm}edABw|1$Ey zZz#4oaQ{oP#YlFp{m%^g_dlPWSN|*Lg&aVx4HAx#P`v$K$HFn1;R82(57dRwdmDgf z0~&KL3zcR9)5eIsXV@Q%_>bpbAR++XiSww80O&v*rP|h3#8)gwd_}m2V{br3G34f# zCBk3z201B$>Va<@-r#~g4$+=!M3s7dJp+FNju{~ULrXLDaVo74l-UH#XY|*z%r!~; zz@A3N4|L!tio_4hq^gUMON<{F%G}8CfuA6JpjpI*O#MlGfYgL}R3#w)3)VmBHTs8t zivdX<&vA|_+U$u~JV!^Lc#dXm(IM$(Z85{*@e~=)aqz*MIVklEIi4daDzwTSnrWda zV?3}EmTWxg)+daI5zkS^!y3=gY$68aT6|$0kP9>(X1vlR-^F+^^5?#9S?Dk!Ua2D? zUa6&Oo7E=??#MXb9L*VyGmlp!l zWsQ$H3uCKxWc$R&)W#T_xki9Y#>>%0YxeJpAM=}#59ty6c6^P`rPmOQmi>iEiSkjz zEz_<<@I;Xu^>#SwhtjcD;=&9cmO5mG#;=Xi;YyLtUHC)(ySWwoirA;OAhK&}8BY0} z2yJi_Y_K<6!ky*~c7|t+i7^N-1f}(lVg1rw&pR&@cJt<{PZ3#jS;1IDz?3>5LIi|&t$+xb^+sw#`|lcrN0=vpnreS56NhO*;#X>v$WPSoZ=v7{>?PNsE{~EHP-bvQ*j0Y(Ma0f z9*3~92r}VuO&I1ImE&f_n|gSBI2m0AphuX@i)k5wA5EWRW+EJ*nuiDqzO}Jr@;$;T zFt9?)Rx+L>8JM5ryzIPa%acP&^_Vr4QA)JsaqCk{ODrWIx)kg3pfzQzrDjbx$KD!U zP@hT&{1@v}ltn92NOg(*z$3o?SfkA5qJW2ESq#=&QQ!L5$CmoW`<-1HZE3bR)zS+xOe>QmN+_D+Cf(Iyt-t_TMq3^oD3y%Ag^*gd4UjUS zbTpi@E>_FfFw-&^dz!p9>UCI_l9DanlNt16tr@A=H!YuXB_Or!Dfv6hbbLRGkN-d3-UdF(>dYI? zFasHI@E%|aV@);MagCi+qDeJzvNb@ylmHV5Nz?%LS;~`5X^SucTmw#=kYqRvNv*5) zY1i65?Y`aJzFWI?!LP*xEE9$DVcizgZfQ&ForbniS&Ws(dH?_G-1p2Re5ieXzc>7t z`@YZTb*^*Hb*^)r>$*;3@tG!AIo`r8ZF0N!mKoN4MPbJ+^}MfWU=rx!g!_tcTb}3N zS0i&ZY*k-eB|wO8S&9^N4WxHqUMy;c>%8DLdrHYG77;6Q74j8|ZgNGR>qpiXF6Ha= zK<6y(x*?-ohZaH_3~d&42cT;huP$J4p#&F6 zaESz$GPqoVDLEC&6I}Za{EiC#QP68h%vS6#(FF{aCFZt@^Q6Ki26-L_ap` zM~6JRqkP~m+0FSb%vv`ok$xlfbl^4F&B@5WWH+gpj^*%`H@S>md#ICyloGk)J0C}U zVkhZivYXRX=OPu&&ebMsV)x?+hBHWqyyi4Pu*6+DLe zP(z%swwrh1m=I~!*G42|8+gQ2xZDYp#wXtW|H_mpLfqw}ihD=N( z_6+;VigD?fLFQQ(d*<~_j3+B*GY+j@iqEgZ#E#DoLx2#U-+(Pce15aS5QN0braoG~ z;3Tu2r|dk0|YAmzgP{W7jXdvT^WHBYqhvESX~%gTmz|IjqDn2nW$y`V!DA0U(3FJafOm z-fc9W#OXN7&z1AQFm4Y>>-)--kP*HKXe_ICr7i_$i@H?)J%XsEkj> zZDnx>C6${z?H|L~jMso6X+*cBmSE(uT6Jk-e4YzY($I9Uv=YLV+x?itm`YfnefvQB z0dYk^>PXi>dEd+)O7?meJ2@IV1qY^e zs=mRAgV*KQJ>L^{wnJQdZ?kg?@7D3c&7c=o9QklhmLIoq4SW<=c?O)iT2U$5A&Os|ACL7 zBLOwf59uUspBS;%MVzlP3nB}kfmAhyYevt8mx4D*nO}gY2-0t4n69EEtrc;pNob-A z_kszsiUhy@=$-`2i5O}zI{_ncrK%`Ro!H*Za1KVm+c`*bv|{)x?+mB(_v7;2$?rrb zKgP8egDT!Rz$Ci8(kzyZ;kzPrB5Sas2LvA;Kn43UTxEgzu*DtP?8Y@6bUy#ztKg!G zlL&(dTJIcki#g=5HJ^s-vO?7!hIkO-jo%LKcVA+$4_hvG3I_#?G2Gfb*wv|_%msab zidgf!ZEUSNjeFl5@q68=YHw_-JEz@A6?RY^Tqslx8f zN=B~kdW~bj-R6)BH`^>32zA<>9|Ez`Py=ph4qc*O=bb$hQ#Z7w%phj#+TgQN|r*L=>8A||8V4o zp(9)OBWK(_vR4hpVW9Mc19;JFhv3G-59ULtle`MB!;zehF>dX`WyZs>qTZo*5&~2&)oD>>*zwwN2q3Ur1{zM;t zRdFg@8E$=ua)1M=hbakEJq?I}hZ=RTbqB&RYI>Rx!b#B6A}?;$bGN*Bq_Y0+Fk8(I z?tq*6k?lK@Ene@^(T_@Wmqhm>`WxqoCVY{b0N?66mK*jPF&wdsh!b&4V3 zLKO9gPU3pmF3MWx^@JcjqyM!$yN7V0n_oGlgX-08>4pQTejmUJ>t0DUM&M{IfOG*k z5c6Zx4bW0XnbM8*=*Rwi;_i`5H>ZkHODis1B=Mr6mB^Gjf~!_F z5aCo~VOF)o)A`br3oeK;JGQrmXmqv`W0^3b(b+0E6X4@DM*y=IVH^$u_2Yz^E33u{ zF1?LccR;4PGm6HF#h2Aij;~A(H}3wVKnshqFTS%2Y2&gh!WFX{re(HDu`&7VMLg<( zRN5-h8hF-#X+~UFn#9p)4Xz1+dLT{+)Pq(B9x_{T7nTL=4jb6-OVNkS9j6(GYB^rg z2uquWAYv?k8y~QJYHR3-2b& zwV)-wY;}A?Yy3Wc)}l9xmO~YbqbI%Sjmn~ThdWgxdkQRiOWg3I!ueifEqd`KmXRlE zm5k>Bxl$hF1~;f0O)u*ErEC0P>gxh6@>|KUbyzglMxSTfa#U@RYA#gkO3+`Wstnt8k^NsKr|YI=FV^P6Q(end($+1!Hgp zbUK!Ud^H@{uEph`t*Rw(H}aGstb>&xJi;>Yy_vc2y-oliAh;osWd=8`#-)Fy!MD|_ zyMwD*k+dTCs&i9|^O)*8f=0yNbw;Mfp4U5_PawKEh$~!~1^a~|Cdb}LVDSM>ewUa&>YSrs+2qGnZ77q7`v zHQ{&-oC`I?YXYjKSsjVj6sS#s;HJD_Q@-jW%?Z5;wh8_X2brXgR3>zkA^8j`P)j<< zV}{U@g;d`NdcntcR_p!U_em5Y6_@L1-RiCjYFp!sP@riZbvDm%L+|5g^xy8i(%evdxW`aOp!2Fxb zp{+^(_{nY)czV6z6W++Btt8!zruR-Bv)XqLSn02^(x+4X{*LTacInpsBA@#$y=AJ$ z324i&AqVX4Md{5a`4+(&t4wxp#vA{V-5q%2hmv$ySnyE+K@13Sva5)BJC;FeQ*{!z zIp&db#C?({A%}$&wk^lJX#@?XUAfBr%b_OxSPup-;>=$xPJ4b-~8#f zfc2*3h7R-JpoMLT`T`lA+8!S$RF5aSb1_nOpoB(qpecK#a6inB`bc=+Nkn5Z&$*C5 za3}G9(FE+4izZ;NUM#_(mBaZMWoWO+7l>SLF1B~_ZQOob;=gRg3w|j5dlwr(oXb<1 znW`-EsJ;)VFut1!&L=-XS+VCCnG=~y*;B%`G2!bGaU3Ue!n2WjEf1W+JI3qE-mX3} zCaWkJ!`3L_sz`SAFd@5MLNl}1n!f?|5~M< z8b*#vCZo&56S7@;`I-vnU&gkdBfu_6l=|)b(t4xo*Qg!#^!Uw5EPp-Tej-_Qk{{45 zhu$}?@P;_el>txHK!()*WwrAJB5|X)s_=;j=tc;~6N}5CF^byZhK|A{v&kclU1z6L zr^4QhBxXER7NW9}X4M)Sa~j*GOVcv7EZhDVQDs;5dwAMFuU=W&P5fgS%fi)NnFeIK z2Pte^jLcB8yIvdDBip4I6nH6?qA9VhTp7_3|9*>98u@>LKH$s3+y&5CxP4s;iW@sloOlfI)cv&ecq2Cmw#W~7$-!O`X=wicofow?wh)DS>+ z*0{(X8g+w(^z!Rz84 zSxStqR|$AG*Nb2`R}$gSfBv%mFQ2iin@%CZ zZLkX|57%S&97ydVxWiZC$8OtY*=;KUvm$Lney{2lDm;J-+ySNPZbq(PcNo9v#&NX^ zc5@xnjY~&fm(E|-%_`e(NeEiP=AFMj4e3!Nz+GS446Jt!9u#9g+%}VY`xb0@cd{7g zFcOYj_{WM6 zw(T{es|L^F7fXej8Gk>RaNU-0bpxC{6(y0zn=dw&ij=AlqKsW#-6ZC1j<7lNVff8V z?IJe-Bp0d!lS%Qz>>BoQ7~NBp0s}pc0vWr8-Z_5xi?PAU7pmy9Y7aphUzxhn{NH~s z)p6oUb%)Pa-LiaA6Kmm!tj)|IPw|VP{b(MI*Duh*3sw9nU9n7Lw(|lNb2fHA3Jl2V za}+NGMJsREYsoQXa2BAaa92GZ*w?#N2TmAT0(tl>02(T3@c>C(wE!mykBdu-;8d z#=rPZQq8y!%Ge&xy&M?VaWDw6(%MIMqX-Y#8t^-oiWK}KIO0+)RSl$6kbt<5V(KAC zxj1J_%O5TLPUP=|)?JuqjqjEOXV4ykX1Aw@q>6vZ9+DgW#rsGo<2^0-wZTraY~$d6 z2&w7c0r0aJfuE%a{47M^XE|y3w|9~^$aE0OTee;FSxfZ-KEwQ{uW%tHo#~aJaSEkK zFZ?bS2F(xiEmPk1POf;FZ=~1vk7<#cXwoc8^hLmnn*Am`%j~K#NhZUsp0vO>dcT*F-UY+# z5tZ9YT-Re-_kW+@q7y?{?>j!juECqHBdDHaD?t~%VU^ptj~~*7%tNpFVK$~04H(Iv z5RX%sObW7ha9#px+e-Xqs`P^M@v3z$9y&uc1*-v0|H&}rg(f$Rl>akI ziCoC2(mXuW5Nvm-Us=Qo2Dh^fO#%h>XkN2hhx3>#k39xfstEFUkLU7 zZgOZjz1@G14^B6SdDkz;iB*7q;NJZAS8e&6-FV1T+-Oy!xehL+$I0hnr?_8l!ZN}Q zJJwe0bGv?kv`TNuAH=ILMT4l2FWVTRx8zr3Z^>t@(hxebHra$2o9xRmhp&{qwVepJ zU07lOZmYQop$Aj4=Hs^2*D_$S-)j0cB%yPa=pLeg8)<7}h%IGiZ>SN3jdd>4oPT3o zU_okn)L2ThnQ;+iVyiuFA1*uMZ?hcXgRvK8izJoT0t)-q>(oj=n7gabw>f_X!x-D! z8NJebSzA@R5sN-VBb+=@3%jy%$L{xFr_Akct_6o|Q=y14VT+m(1aR8e>!&t}k3PEt zt>J!^XjUiiuJ@~BP@3^j-E0FR=BUGMPTJ%zEL5XvL1}P7QE)#=+}E6kf_w3je{@V8 za4sMNoafw+U+ktp2{F<|1QhWV50u7;IOFdJplAS3dpRSMMV(aLtPWd@?CiwC@_H_$ z^`dZGqz*4jHI_!7m9CE5mRL}ZouheI9Qz2+^&$w^3sO&#Vqo`&g9YrYiU1uqVrP%O z-!^So!sU%`k}dTZ?iT1E>#uTC;joIO+5Ep}gBPGC01#P~|LbkD!%5EY+&>^6SD+5owyA;@dd>N%&1+ zoEj5L#>_iGK)@UQ0sF4m;nou%X!^vRtfHIxPd5L5NFqTdtR)CVAb)So9~#YFC#ZA5 z^rYqRf+RG30ME{05}@JF<3vHIHpd_OYPma6<>q19?JoSxH0Hj9$9$Zs&8XtfqO^NoUoct2pwJ!=%aiNm~66nBq%{k2BHzPF8*9~*N|te-W`ZeD9OWs3SK zlD%TgW#OMGkiz$FxWp(pgx~}CkJ49Ci*g>?cgN&WB(Ofb(~PKTp^Nb^o^MbO6SM#1lqW&~9Xk6cd}0>V4S+;;?ocNjwujJfaIi8g-1C_p!HeB6O? zqCwN|%?C!%(KaZV9JfjiJ7x1VY&CH(_XVl$4P)*bQr#QKEG=dXhYYZG$15ZAFhDmx zuWQ9{k(!4_x|mou`UN)n)e+!XV~5!}qBy!=KoRJKJAQ^1zp8t)7TBH9n$?@>^`rzl zCocz7a-OU5=it9&pD+AZXFk>t;lDZqc#}k(1$g6!-v1{%DKjGfg>4=ABdjT|#-?PK zo6-VuVj#}J1%+y1>Ev&Nbq_8qQX5Kw8w$Us?kf%M4c=FDbPQy=DAD-}VnrH=&yqwp z6XO$ZM~;q7UWu|0T$<=fr>dV^r~@lNhfB!kErXyfPaSA%%Qf>4gSA@VN;nqhyG$}PFkEN&4)dlnoXpBVAmXmek~sI!e@R&)`My6!swpm` z711<~5+&!k83_*_r7UfpH+q}T89VW2Y{(Ix=S?UsOy)yB!J?G4pw9+*AA_tI78*m! z%e8z%Kn(>qX~)x)jS^(Nf^9JkbEO&U2!- zX?SMw46R3Ay~5j;LVT@qEW<%YOFTwan+!ypsZcCbdLh=?sw4s{aS_+ze5IHU`xq|C zI*uGb+f3}NBnj-;kQa$*+)!X8$6EaGH$GAZhm}F9gXIC3yb@jA{wVoqtL|j<2;PD4 zoMiNs^xHAK@h=&DUB95&1RL@ZbaJZF4NeK#yTl!s1dX?K?DmBLwIC2&kQZE-7aMp2 z=qZ9(Q)1p3V6XfN79br2l$HweDiL0LBg1VZa+g9e7<&xx^7F%kD4EX%5lz=1_J0tF zxKZ}JATG=X@$7gI`T5~Nl+0-mGvn3Y+Qo5)y**GOWJQhQ&4i_dXYnkA^w4UeJ`-FDio`(x z{D)zr!>aOetU)v;Tc*tk4^r)?H0dBvsHB`?7U|E_ldOtEEE13T`I_!QC7ht0)5djC<;H~*x7N$18|wx zB~UHYB`(zENQqK*Y@qZnE>u9mNQFWT!30>b;YolXKQ>SRumS>PA%N8I0Y`|0A=c8= zZWq#97J8$A@{nu{W^+J;C}GAt_$a`K?p2SU1%o++JkwUgaxvV8a2?_Lhj<-)V zTzr;Fg7CX`xFYKSWIc+qHZqD96^Q2o8M{J5;_NNWl zB5+*kQ-NiQW332>4tSJc(8EUGk2^gu#KLV(Y~MN%Iw$qu-6&Zd!(0wTqtP5h2YBKN z*&fc#mNsB}R*HFCacREy=pV7-AzcL_Qu{F^^Nb(t=Zp>`v^FQFc0Qh!IXOe~Imp%i zcaA}?jO9Vh7y6me_hZzQSnN{AoG$@PpW3V5Gk(A$(1OtWMqh$(V6wdPnmTO!;4p4o z7!2+;;w=cqfF8tPhK8LPzR#8O7G9{Lc|CYd)b9D_nHMVWBdb5%;*5uoVV{itJBExq z2hGqb7kuJ_C?Xd!4}n3OegZ7+R)aj8=962%5+kBz`YA*p|9(Atp#Ft4m^a|45pDB; zc!gf5XJaAo#nwx!!l+H&f{>Lx(aVt%I< z{0syQ@P)$NKUJ@>rn;O-XhP>BeIC(`h=Q7h=zyKuFzXRQy*eKly1@K->^SxmI&bG< z#_}khLIDwfx@7f+__Q2dlseKY2Zh}9w}EtV-rEZjaRLO%GK66wPvA(NVOfs0=VLjd zh`0ha3KS5BYXLv!nQg z80ZjFE~KXKO=@1D+Ulx+AMqV`Fmzs#YIIkGju<;`m(P+~MD=}E-b-r{-ghJ48|hn& za?FE4;cJ6mJ%y6v4%^-!96)4TqF^=>7mkk0t-{ZVAp!IGp< z)%q?NSp*&N@sY#1f;KNqSJir$ci9Nz3Jl|MVr0rRr+Mp$!5&t~Y}HIi9^-jX%Z#6oID6#2_H!UNs zz+}+VkMpufmS11nWOy%7H>YMpsfXg*g@yH^gHVCZkOL-KjpbS5Rv|iA$0tz|%MG3T zX~+dr!665Y4y-UOWc5Mf`9IS_)&K^300<%TFM}RW8R&QxiLS(V_FyQG>iX49ZBs~g z;hIkLBK&D#D+ZHn@@J#t3OW8kXY)ygvxKc5)52EU%-52$D$U0$VeHoxs?9}20Xx*I z{3_1iqa)7$(t+z-NB`)22WyL0^;i=sGxU#5AA?XbLlVdbY`#bH0ic{*GLOlUsTJ|x zwl(qdVPB9>`vSF56y)_b-fx1ak6)#af&)pr7@M^!L2@JqdZ+s+_3 z$~ODkT=nXpIubkONjlJ>DRmGXcj|*h;rBpu)(c>>8j+XHTYqm}z3P-}K z)}z+B)n=E1zTsE~ZO2zo)K+!YJXLQI*s9SqeYE3_Fpku<>hw8rKVsZ5Txl_mvaT3o zsbl8DjD>a80abN+@Yn83jzZ4~J~}h6?p5->GVVQBA0Dk%al#Mq@Aa#DeCjqF!q~J- zXdUhavepXn8OK+Qr9UYoMZ1o#IK2wADM!G;O9cdN-m24lvkgSGNS5>SR9<|MnOJ@j zhPr7bQm(SlB^`yKI<}tFCB@_ho?9@q`M|;Ov+$#?L6u+B&-3G>(D0d}Es4dF$fz2OZT9CxT%o<~e+=!-SXv7G8I7GP z05adzg9ux@WR0uBk?&3RkQEc5Vh=@$B2?@tz#IRPJ(T6~LrJ=14~2*6L)}v5l|$W1 zs8f2YV0cU`0FVM4WY7#?k~#NT3|%^(7&~Uk?@C<Zg7myi_IMG&S()tN22E$?RuA+X1(JAC19^WB`wxRhRlwR@jXr~mymPQI;@K13 zoF0Pc5SH36t0Sr^FIeS+nKn2cmJu6xKll<^BFG2eu__;ufnb#%3!N8N1!^GLazsXm zL|`l0QcX)$MN8^PTrfd9>gDX%K`Kcr1*&b$qM1#oEc?Q5jl2903RFZ)qlg}JT4IORTH-VKcEjRqg8EyF?(4nDfb9@*nmmpL?CYda;vO*01V(02*&`pR!JFYT)Q*4?qkwak=CA3 z@&zdmvJw_7#QS?*zzgg@_F!@)wc>Ps+5iOeoijbr$FXky5w{7c!^s|dXq$g{+R|f4 z&v(dS$^l}N`Mqm2O+t}bR@y>uVDI1Vj{lIOJ>JQYuHpnT+z8$42ic;u`kJ+$qJI)d za$g&tt|dUypUFbPjoJ-`+zS8o<@ zn!gfyc%k%_z2d+rO+i`yS6FoMKqI7tc`7c&w&NNnxRBXsrEP`)8NG7a--`wGr>jg818ugF=A;<()Ao(m`L9gufEAP#Rh)4 zzcOGrVq>|RZiC0ahpzW~)ttlv2i=D~_zmP3xtZV4jeV2Wr$#mjz5y62o(t&mw+a5x>y7}kU8DM(~)RG$LD5bLbc~ zes~)v&JktXMHQzRfEG1T-ZG&kv9HRm30h9Sp@_=C1rDq8FAYNHoNs~#n?lw_AEzM z{h(55Q=r#5!nE?3IBCfk17TMHTOhX@3+*A#7r7?%e#F~^1t$q71W*}+({5-cGYVX? zNaZt_QDEk#no2b$VKK4lE@1Hj?ydAj%Nhb)ALKrsH=8VOB7%mU0Ki(aQ0?S|ludI| zOmXmK?~1hoA3STp8&|W=#Dqm;zSUz~y>W#9;P;RrbZnz6mZ^SzVP88(hRHS@H?-v# zmB->M&cetH=k0mQiyNa_Phls=Q_ZE6HA8G}{D4X5WNmAyS}A_kwiX3f7CE<^ZEfaA z!=Bg+W>hVQX`4qK6r_NCIyeLvd+PhV8VPy1$bi zCPZGML(YE=rF3q=mD-G>Lm~m!RhI_m6@|vO&efPp&q4AOlu8HZp&QYeCBf=K=}#~i z$tO}N9)J;LTZ@WcTa(duvhXkZznFa`&eVe(x;2Tre40V(_=QfA+Ql^yP-qkjSgBoh z=fPVi1p%5LqW>7k%V71OJ$o+0aa15t^MV=zQO`Hu-3_vhrJ(f%9)xZ>(RvoWk>x^1 z2cK*mO$VnonUcYWT_v2@q&B@SpKkl}pnMkT&*C#YP%YbZ(CD5Fh>KIG-Pc-xNGw$s z6`aX&#cR1{su3wm%x^tAlDY712~JN6Zl^gPt|UshZh;nkVB@6}y9UgsM!?r0MsC2! zQA@qv*LNvna2bY)Lm990=MaO@30na~Zso{a4v||CBxm)l02ht?f59-siq5_5uYwD~pI zXG-VLa;Pb>_yyDX6nZ5$@z_DGLNI=i-jP1wkzuNz(*ULdc7*OT9SBQ-$2s^A3B7vh zB<=EtHU!^c48^qCNihqMj*=AUD{vA3SI#9qjwaTe^!}s zn}ou|$PG1A<2_(?qbCIW3FCp^u~Rg9Wzc8P%atM1yRu%_gA+%$9<7NlKO6cx_l9-L z5_!)L{sz~RRRV-*s`9e2M9F2T$YrMzi=jIV<M`z6)FkIVI66zLJB2OoTCbJ)vf=ByVQI)H++*)k=|1YPp_Ic zmbhn3+hkRpO-^C%RV!0CXb{JE8D4>J7@zc?d#2h4w=c_ZE!;}?#v6+VU~JuF`5(vO z@jOrJh6Jdsn5|WvT@V}aC39IUl7&{f*T1?79`NABJarSAcUN?=Z<2kJfi%Ht5VunM zP+wZUN8yo{@3qX%mhWXlDC-%VV;u*Q7rJqmd1!&l=x*Vhgy(=oCmYieNK=qjMJ9oQ zNWt0rZr}`;mp~xu{U25Gkqu;6>a)9F3~Hy5BK!J^2_sls-#zX*OM4u3*!$}=4A|VFpVEYr*eUjs?$={C~nkCwVy` z#*0+#ucOt{;6!=v$Te(Sc`xlIlQgG*!&*H%YV^>mk;wr}tHX_^A+>u^&cp_#hZM#W zaEy}$eE*Vc8*?X>MpaV?xrbd=>jjx6TIW9DIX?pY}kQvP-^=#xS#m^H!^Y*P8P5Cxt+xhjlPE^act4vG0?KH#R0ac~4 zQt4}!c)Q3|#MiX4Qs7nnl@V`itECEtYpbQa*RwNttuJQK`mFGBld)JzYKtWSo~#r9 zv zD>g3DBvloNi@lfmT`x91TYM1mjbqNSaoR6_a)eveeyI!6vPz3yqvI~7ALgBrO-p&E z^=|QNa!8QIVyR28m_AhyEaEGJ#j-LHKWr>6K4VM4r{rHmGYez1AS7AVA69Y_aFN6b z5y+Uox)QkR;m%V!<1m)h;Vl><>A7mP7xOhPQZm%{ZN+H25~q%N&S%B zt1Y0%`PAfiCx1NdJg03E7zaO=eGxn1Dd!S+`eoJF{M$ED(Ab881`ZJ$;l>hfUdxEZkq7({Rg|;M zY4B3JL110+krLHxKwNl0?Dx4f8D zseWQWn+S~?Uz9J%Kb#7IbrkK+jPzE^W2(U1g&rWD$H~_Tg>ns@PreQmgk(Fp;R;Yc zigN|#gy)EP-(%p3(-3720xYP2KaBTKr}U~<#Rd7k==Lg%v!kSahh=8Iz6k=T5ku6nh<2zuX7NJ`~MR$>6*ugM(xI65-jC3lTG&mreoe5UM4 z_Q%H0@FE|rJ64x_u~Cc7VL?dptUtUeq1Y4VTdV~evz2$H9_L_8_s4ndU%!Hd!?J&U z35i97zlCA+%Vc!D&ag3Oq$)NB9lF(wut&TlUp2a(LK@J0NX*jSn&_yip0k1ZGrp3r z03#J5C@iLPFF4+@9X!#m#0jK^Fb9r_9PL+3tZ3X4#h0!s_MF2tT_2qXvrbB!I83*eK;mTE*ID$l&dKr(O5er*im~lqkup)v@Y)lTXOSo^hjdzLtx@>F=T&(-*yigSnMC&eAv%BPSc$5MHT!A`VmIZrVx zV){H_Zc=qa`IM5KU>TShH)q5zE)e{uAgs3wShccvV1oLLmY3sJh%A3`xz?HAGGG+< z%8-$>5PLlsDXa0$898tYq0xFt8m;XeStxx4Ed68BAxn!>>HZMv<2)R_7X@4ovytk; zFqq|2>JTL3Cjl$PPczEA_s>+fxyou?_fIPeyE`VA)q1u>7Lck)i5*YDW&f(U^v;a~ zcUb_(x10rzBE4z+NFNzpbZ$X3X+|8tiXD+Y(-G(0d)UinXWdu|Ws+ruXL7sD$0Y9a zh#NnMx6T891Xu+h&Ouen0d{%ly>_qoJf9KWj0RrP<`}`Tzh+w&xpDPb0rKdf-SNVz zyDS_0EF#bKV3AiX2MdBdog+SlPGGP<;H5k8=?Rx#@LR8L&vSst-0pYcE{Vk+%nSQE zQugOZ%O9KK%Ps=>!7p~6dI()H-lf{FKsz+;V{@Q>2#KGVs1Gp$Toz5#{pw+E2oyc7 zm4;r8lwl>Bqu{6r_gUO-(?shUnD}E%ietTLVxI@f3y00=Wr*S@8mKKUOf(jP`}3g` zJpAf*o(2ZgeENaPqr6={bC*JBU!kfcH5giqR54cYLpX#4c}x$0M(k$y>QcwSp1)dP$X7ec)nfTwu=r5+Z*JK%n;3cV5SxMc>8P|zQ+vM6QemK$9U zGM(!dpr^vJkdQ8`MKHUr&U%Jr`*PVsBFHXHJS12~bsn(%ULGwHV1<>|NexgZ zwLv=os6+X6NLm3V8oiMQAC2cgsblHcO|dZ704uSMTu}WkT-}7TUZZOdo=S*H=$Gw= zSx^ff7aIG8Vq{TBcoF4MLTyl{SHisvPq-GnNrHtl3|h_tdaa zZV*oZ6cQ^=lPf`JuSV-%3MFyN=IrqmmrD8#=BlrdZA7i4QP#D)ob7&>Uh zL@0*#SrXN^u58e9Ks*s6Gd9y#wh-1<6|U%6vQ zZ8#w(b*B*^p9At~9gyP2B`hxJsyq}*a!t`HpCVYrvp`O@CjIn{l$_5|Y~%$gE!!|) zbkn#3-*ApjSaDuwq7IaoXMX$lZ^*%Eq1pP_xbry3rfx%r>+`rW9Gs@l}G1FEmpt8E6p z1`DOBh$CPDxU{g9SF8wh|7>dPwV3O^@gcF-bMPZ$Z#C*#4d|LDLbp28;f@*bos{Wv zanB zod{(l3(A?}p>)~Z{JA$YB0J1$v!Psi5hy>K4P~Ctiw^~9mvCYU&GrJ`%{ILDMA8W| zKs#q;A(m6F8X^JG1(Lqdx&h;Xw_&-22#TQXdw{afrR@b=)6dRRBxo5GkvEs2tb)Yi zA+zHV6hps~%|bw-Sp{`C(oJ`K@ewSl@#(@LfmTe!1Keb2MT*`9Oy-s zWAyk)#C&Qq^j1iIy;>c@Yv#NtW85d?_X?2Eyfyto$~+nR>l6CB!VQF#fCQu6QdVVP zEoxhfp>sEf4)r^rGXa>^=`rIM=j@-fBWxF0P#TjZOe=#7e+!F=O@_VZ=T7Q2M9kdr zZCG-VHk1!#wIPpfxKInmLEi!BI{@;!Z0NfJQS@9^17IPG0JaQ6(%vK5H&%^;wF!jw zN1AcJ8*ow>!lJtI(-?w9D4XWZ0X?Y-`H3DWa1PMSxrC-jNRE(zx~ceONGWK47f5WJ zv_>s{e@)yIo*!xm6t4fh>I#qnN5y=keiVrEfje1sILC;+MtIG@Z-~4d0m=!?J+5LY3{<;F+KsBh14*=G$0keA>06vb8EJSMEUm{Y^Lo~k9UO~KO>#sHJ-$5qx zlJT(9lkgwV(>?QoQ3<30>218cLewV{DgKq`~wL2Ao$B$t%b*HnkO{;q{*gw z_Cv!z@WNjR|3Op){PO|$2lyC=|04+bAo%IlhKo%dh)x~Slb(jHXM^=@7CQR1n5bu! zf`pagtO4=_h}E$Z2ZhJYLipceIZ=V&0R`GT5Xx&{{&QzEWk`PHBfS$+4d`p|?kCJ# z8bTd`W@E>1py!a0pPg?p#G=Uk$8xtm)ro(V0%_}P=hKk(;{H_oc&C)&On9P(cN<~{ zd9u!QUPa;7rbd_4WEFDlg!7>+$?(jq{I7|!_&&J-GPCuPC41a?(=`*%o9qLEtg?Oy zShC7M`=HMy7q(PG9*k>uH&o(OY}ep#oSNS^ppSMkQBHldV~HhH{z=xH6ud(nI@h@` zQF{z6pAt4-hUA=F2Z~t#;$3ix$~_%)B8QGa>aXUVOx$x4y^HLkV3t|}55DJ7Fw^jS zWc{*&{|o)Hw6J2a=!;cDU+llph0qd6EIMMohc1W8(cp=^!Ld9XLPa3ubC3KL&aM9X zG@>@lfTxBHxlhp|apV%1UW`n^&mimw7rUK9^-w^Aq~2@)Y5VW_h~IHb%pb|I*_>USd;nOuim0}PUtS3 z?OgyxtpX})Az()D0;u%Y%79~Y6u7vN&F{P===g{#UI z1gO~cJ%I)-;JHmAZwO8WR#?TO?7yJUiLFf|2Y0Qz%^7Il#1#5`PNqlWMfAzcAD>{e ztG&H7fU9~&Zw(q-J+rq4jjf*5TQf^l48boriD(G_IxIA2to}t5D2|jX2uh08O~4idjKg#cZO6 z8RVtzRdRzbovVHUE;}q!>vgYbKdXu?!X)Wl08wp@k2?vWKSU1ikE=otpg`^DlYXHBx__xN(4HK*|8Us8JxqJfYfgG7FPwq|D;48 zyFb&1$(~Gy*sUrigou1Rt?1ReBgenj(`iLG;%)}XIO`%#zK6lV?gi!FauzAPTM7A~`I=Efz)6a$fGQxlOvUA|y-pQDW=`lrm zyDvus1P+C3Ak1H*ZP@kAYu^X1$e2^Vj(g6;PL4yf{x@&YUVOa7e|sm38CSmaXFfuC zNFXkJvodLX%Gp%b{Q;3XMRzK46B)eA@zZ`A?Ha#~$^qeD(`-}ostmms)|3dnHWMno z?dQ<9{Y>fxQYqI&)*N$B08lKZe=_exC7_I!ki8Vz<0*Ekf`?~N>}cA4hv&>bNBbo= z4p`e04ETq+P^dkl_}yRiUQT@ZXnf1*GyAakH@o1jFLtl1rQO%o0ze0#)tO~+3Z019 zz%OEBpV{;TjBX#@AV#+xcqq9?s`%yF?XM0yaE2A#L!3ek|63gK$HXcPr<%v`5&F5& zbp%iKOR&a9-K*-)q2;HIx-F;8hic4Jeek_R)rqEM;lxhTck}Vc=@inXip+mJ1F>$^ zDOld8+E0MMsGTIVU_nWIUD*sNYz>Atp@uXJpUZ}UItPTIjxg*^EIMJ-CDkth2n-<1 z82|yCqOQDNC4>9I%Y^Cm3mhi^#}xuchW)kSIHBRdn6qvGFuJ~p7Lfn{!lBVr{W6>e zR}I+h8rpC=6=vMwpS^`<9ZW1bm}(zjvjmZ~^}(bDBHYAW=A(A{zW*Gbp3qsi>OxV# z2P|nGa|1PCR=}f!S$Wa{?6Bx;>;XrOZeYL;+rHvGNpgDlRt9G`<2nXBEXx{Bq%Y@} zD4N0sQ!HUaLq^?kqizTeD;J$sFU41kq9kCGC$wMV96FX*=-BRD0M)m5gU6pCS5W*S zjQHRAwb4KL&hblz>dghez&+WZH}u ziM5ItMoYcc-%IUct2Hj5FJXRuJ%$dkv*?6*$1A|vPO5DvanE^MeQ>BAhP3JaC`DpP zIhQH3`$JCJG5c@`XV&68w})D6sMW^$rRWg5nn}_*X01ai85T}@%V^>;4&^55a2zlX z-;;rA-%nAO^f%0dPuB(qsg}h{Y|MW`DgozlCOIEC=uLvN>5~A3IeGxM4aR-a2D27N zzye6Rlck3Dla+$_W@yi)o1I*@P#1;?Wh+T?8z|{z_Mk#Ya z{fKzS_{n4&ejj^TouT;U;(_hQhW~&7As%C~vHOi43e`bC&T0a3gakx-=eFn`u3|au zQ=@xG^m8J&>23un`Yl!lC0949F(q~(>gUdvmFMZ(ROJzDlwl|{TXhrF#_r16_jyez zPF|$A}l}Bnpr$;6e-cfEr?8w|&jcK!F9O&(! z6C$JzEi()KKql}r1kAY9Pe&#jOa82Wj_z8dNEsd(0voIe^tT=5{AE;GRor5Ej5d^&m0TXNXnF`M&xL=2hL5&>@%Ha(- z2R;|vKaORA`zw58z}+%uBDi$`S9NpGQj2@YAGrY3ehu|soeMQIowK1HuETx|4EykW zKC>z9^OW&qZe)A{pQK*Fp;0tQ)@;%C02S(r0xRlxy-|0}s2f}cYHJfdSuXzeix&M@ zcVq(nu*r?vCO0-6yUEV->BHl*WYM~-QJP*{hN*X(9)iL8T5Gk^i<~*U)~bJWLSZA* z#cLB=_1iCE3w1G?{2jZHuOGS~MExi~C1W-wTG=^Ure(;GdG*!k+4d89K7(^89^hJd z3S^KJZMYddIu8GzVL%4|>~TW+FZ+RiZO1RYP#+qMbSNx&=f(XWzF@We^aQYV$sqOT z;Qkpq%MX8Y!Iu6bO4GO>*Fzum6(YyBy{J3IA8)-T7s|_n-0nH#~oG55llaK0MG(N09`_<{1JSEpHfm7|czxe66z#kcWz5nPuML`#3_f2VcrR&I>sS^^eo!;m# zoMla?-xaMvoX0yVs+e@v)1Y-!mgA8+ZV`AHdy?5$@9F~6d9SW#5jsVpM*IwZ$}`C=y;brRE&}sda@%Vbfctea+^g!j({n#bM9gJltWDgxqpv?%q3^0t8$W z&40mr^jX=^w9k${YjY^iY7WKqZ%{bD@nxliK*zYLf_s~x-iE-XM%}yMi{sD9=_%0M z-1Tzg#wJvH83e^RU1|m=a{#AFC8iqzN|E3^ga0|fpCfgJ^9YrQM`pt&0Jvp1(iY*J zGM1d}F$x6KvlJ_!gAMI;7AeHerR%#`rg^4m?MB-Fs#Ma$mK#r{P02pxPs?wn0H{Lb}m6F_$udD@fnzSRMM-<0dw=ESXDJjjILdXj6F->abbNz z72w5u1B@&1_Y|VcFAR?23Id^~5*aqj$f0%xUO+4o@qt4^rUhxn(J}+%d`Ob(hK1(2 zBbA95`Ma?BwHJ|J?ldcYnfvV^^sohuLUBN>j?@)Mtr(X=-xx~1gMZf5`C7q&xyFzlSKcBPmuah zz{E!z90d}gMX8%Ht|G`1VOl&lTh9)8>TxZ{m#?moQ&uljjH8HKN>yoCqF zb}ThzV*ugw}%0rDg>9uAv#ttOaSmBCz@6i69|AU*&o z0m?usf`uQ++y}7i(=1?zfRe`%R7*6Cd<+nyrBxBE5@sWDAdKt(Xq8Y(oq__{qvFV$ZFuBwY*hclel!4~z&jPT zDhW4C1kih;iys?EMLI4tJ|6-UZI{^N6P*D_zK<|-Xypftz~_*PBd{y*BfKFSAHdxA z_>f7<0OE-Q5~|?k-fAd(`QY57!r1X5HOHv)4xOy+pjEv>d*VX7qR%Ff6Vf5d%#9)-IsxZ^0RV)A%~k)y#@pwA zd@kO^DS7a)jJql6aTkzr7a&w9){DkU_X1t@+C;_$ya#B1)0)ronNf^J=Mo1i zZ%?12y@Y$$^y65X^Y&u*F=}U-7HfL;b2g)ot&wIRxx2LZNBU0ip!xhWk7BcSzVk_u zkMo#G%fI+=g=ynG zFhw=L&5Yg57)q+09FGbqjU{6^&R%jHKAY=~V5&h5jy;#!DJ9`k$wl9x z^Xv*kQsMf(;GctV&h3tuu38yyc4Zj}YW_}jvU_l_2|bY7_*Z-YrZKd4;|59)+Ky|(?DOk0;AnBCQ8}dRcZBPQXQ2R!*`;A3UDy1#gAIO0} z_4x9!_Dd~s!&3~3Owp2q7>>t_Q^l`Q*tF#=G+P(KK|w8q8f*HO0g3_$nzp^xeu*Bd zxMrkoEVN>j-yCK5#u(hg0oeglMh0yySP)uqdi_3V|12L*ifU`^JdJiQl+<=pufvD;d(Rim;ZWk`3$`O|uo8#SQ5suYwEz{z;4$a|{ zy8=EplbD%vzHMpRwzf@zjxA<>9qA!~%$-uRZ4zSd6Pg7jQvNk&*Mdx6hZ zDSx+}z8QUt>5l(i)T62cN-p{fR_EOwGpB$c(4TbyY`b>;8Tk|QsmTiiBKF9QFB-ec zn`5cz?W=z1C{C@3bu>?!2Bl!5y*aU9Qb=~-8?NqGax{|g&8t|WrmczJ{=SY`|HgJC z1;NTo$(H~26ja!>h=#R>_HCVMNeV}%#!}PTU96+{WnBAfsMisXkMQdWIe532X z0L~ij6aN!0A$W%~x(?tCge**lSkTAQ8pd_zmtF$J(bxOb@}`e)@yl!C9kpleur=|9 z+V`#Q1sDrLuNph1V^(2#ZszK=)_m?cbU9R=_1C}R3zHZDYsvQ*WGrFUg>Rqu8QJ5< z5e=}9tXakaX{|oHL-e|qR@O(b^ecj`b4V1Lk8Kcj44cz@C_^d`QY-u@jG$-|Zpk>s z&a*Hg7IMx(SVVb&hJvkR*Vd8gTA13!m4uy7;Pr`P*jx;LGqtN0F@V@#pAZSQIW`Ba z*vAnS#0adw7+|K_u=zZiKT?2q3pwA!aHr+sVK(YaA?-dF_ET zS@$l|Nsp}ne|m0%bJ1X&`Pd+?<)}A*eMbi9I`fsRuNHGZzR+u4jJllRy%6bI)YqcF zeja8+x$R91(%$ERU7Hlc4tmAuZLb+!|BS#i?aLx=V+hX~nW|(NjxQPm>AT7zeUR*P z9zqj*(J7iGU~d9Xp(~3wiJ4ro8np8KbRIs}hzckDoJ~|d0j7zeKQDYEuUzHsg1kZ3z%DC_# zsyl!JS!X$armKC%4{!#=bz@|{>Lx{02ZG&{q!>R~G$tmYM~8!Oe#;x%0Dz?Q2e*tF zKX@;=hv}Sqm@6)8kG=x$I;s3Rt3oeguhR^c{8AcE%BZAm4hvA0NK4rluG z;k5K`^l80F7}2Li$kJ{(nO9%oL=wO7&@zb2^3?7wyWxH>9Kz#bjgHeGsKP+jX4pus zKc@;rQU-=rJJmJ1{uKpb011&(d>3(oQa-%n{9`>FuNm8@Fo|Vm(dlHB@I!FLiV*tx z(~r|a`=9-~tQA!z3BDTT2$C&07RY4zea5;A;i%fIq zDNO9DlkhH>YCi@dC7PqA`R32wx8xiU8;@Bc`(t72!rPdg`|oy-&rMHgR+=xP;6#lh zE?cAFD1gx$DpXJ5vA#L?7Q3K%6ToO9Y-w<8+0T5FH zgt=qd82lcAQ$G-w?UDEg$7vhToN6~oxDS{^@F|DKRj3r=;sd6MjX~BBNz($0pB4Te z_QKGFiayWX0ch7TiZ}XB5Nym$Y_aLRdmjTuAqbn(z_v5(xS|VQ40r((NGh-8_!d&6 zcDqpqxRHB!lynT#q<1@l=_LGq>|~?Q>p^*G^m!Sku+K4aBH~xxAsa;D2}#q*s)Sjk z7vwunHgDP|G3cw2gKJA!4VjueScvqjlakIPVxz#TfR=*tNIuJJ1 zveR4>eGr?@0M#udA;O|nggPpuG#_Yt1rgZ*AU%(x zNt*+(QaeY{nm~4<|CLG9mSgVVX=V@W3yC`5){n)WCk&2=Cj;9^i4M$(1eNHxfyH<5 z{s424WEYw!O$-eJfrAcl`OXpb>2&eRYI+BB7_-xF^@2nnwsM&N2WMJV3-mNthEY#< zdxe(TB9ywc+9K4twAx}#Xwp6Kc~d8=<_1bk1T>qklWx69e04!Pg{jL;E+L~ zoNZGvj^vxD#y3@SV~1cthbzqb*!2)G>r}x}$8PrF%2nCc0YcBQhlM6p=qubiwp*^o zBD30N#U&&zuE$IlBB^EtdY$EuJ|8~JdGS+~JMDIrrBJ;^vuEd60NDEtuVs_~jhxxW zuAa|<=?u3L&Sz#%OS@}2mehvIFJrb?Ow}JoYuBBFtDF3T zgw!%5TnKgYeqG$UbUuWAMTf1<4tr3C^=5~CRflz?!&)S6Y(AUBcvA{v!8nxshEi@hX}-$HNPk7j%0p3>SNf!`26(Dc() z%Z9;&T;Do0xY4}61!FvjFX7SI*s(rXmU4x5;fQZg%=eK#@s`;0DDxvlI(9SOK_qnd6M#i8OY+AF;vFz2%)xZOjQ z*fO-c+CGI7Q*^4a8_Gest?c@V)ll$iLBXD~T&9yEYggS8cs^I%pv}M;9g_r)*eBtuBh#P4EJ3v3R2y*Pv=#v7LoZb9kHMQj1Ze&z=ffC; z4cFj)KCGnTzuitegQ7zwv@Y_f!r?GL5Y1HK$MP&G11t|bT(;q3x8>K+*RS!c{teak zdjX_Y+b2oUYWoD7f61N>yzxUxx@1omJ~C?i%qwd9)WwgWR7)3sEnY$B<_K*4EC5R& z?2YNI?(E2=$*M6aU0V>qJDtV!DMvkt4csZgB`>c}Fd0B>O_pb&4-z9Rgl3t*7exz^cA@vYxTCG}ec-kxKdME^e8SBvj- z0hRcmAoH7bcuDqz@vCz+q~Ds;Z(K%o?A_LzwQ5zN(^sb>x!CYeFJMr=%TlLTeXWR{ z7)E+9KCI1e-ip)ICN*T1_RfnLRS(5>4*(D741>2M<3{)CcAYLN7%E80EkV@>;hu!!e#Xuxx_q zh25R1k6nx$*C5AL6LVO|%!~ugJ|g*rliI^W-@J3tq}*NcPxW!ITr{aYnwHU<=57w= zjh}&=!hR(N29_he3t2b73^5RrOzRIbdw|(*qz^?9ojiOf_)ok*+jU;%SpQSz^+?`~ ze?+vr9*>}mz8)dX!O2!&v2jVoJe%hoq0 z+r~;ESl0Re|MR?aNgx52ACvd?T+VYl&pGEgmw@EB=M5$F)ue6Ytk>OPu8D~|nF(}K zuG2|NWdi<7>@CBc@fJjGiM?#JHsl~CFnaM)8}|^ioD*Xp%bG9K9K?l`38A=C2W+^< z_M?$jJ}_u5vSY{aUs7T>>N{p8vRgZNW|7{KWWOl;;i4kC$7@z^K7abm%`QY&taNEUHd~U$-L)BVS;7EKR8c(oxssR zW~!&Lz*ujh&Mrpq)vLgyx}mFWw786vRK$lPkH2F+1V_Tgzu*&i`cuZUcnzP4iMora zC{?0U&u~g4B%*G7>u@4?G;H+Gg&c5fjTv+Vy0;FV%(d$FK%#CS6+MbAi5AG24V|Z8 z+&-09-(XNzfU?hSZ58$Nqf;tsDkEQr*RSICRkKdjERWYztD2SZnp#z}Dqgch)vSxx zgynsiyf2sc^W}XdIR$$rrWX7u+ffe0qAT?s&jB~tjf3dWFg_qM{aPKB&Lk#q(fd6} z3dqAM)Dxkuwee>NBphAl94cmq1OB&& zzsH`R4j0l~M2?YA@@E5x5a2hP#z0_oIi6F|Gw5j<4S2JSU?@$)mQ3~uagay@ncsB6 zshvb)et>)kY$wogJ2%dHiT=WfkFxNp?L=j{&%}b+=iHWD85FgLy@5s-CqkHq6Yo+x zn2!I{9`1x!lOwZZg8AZ#5$|Oa1UpR+Ng& z7tf>xu~AE8PHYrv>@ZH7lUOu*{>>W?-|`wF%SETHS-a~MA+O0R=m>n^!`YYV51ARj z^+^BpC2}4YGf#TEHd0QtNAC^JPEi$FZBI0ff(_`!aaDB^i?p+Wi5@!3UU{x z8w+_)LO39y44mKeAr(%`W4ACh@W&ERzYx$kJFnx5(5M8Z@l!Zv$$imkGyVJV%R6Yg z+QA+~Y6ydHl*I``Ss6;8h8BMCzv9p2(!fKd4%$IW#0R|}(lNw5hL}EGXRBRTp_P(s zJd}5#e0*m~)3P7kIA4Q!su0fQa4P2Z9kTX8vt{8$a`+LDIjvOPWR#+eTY0U8$F4Qo%C2HHBUdL;1@hQoROt z(*tB*<6;Yzfm6HPYn`E7sseCGm@~LKCSeJFSjVMHH`q+;oFJ|6*5lIJn3j>#JUTO+ zR<@hPFvu-p`bt%xUIZiC;rX6bgUmW0nn$!f3NMutkaNL{VEJzh3}6OT*%FH{ zCHOLuku-wT`%!%R-RM;!P&_y3vqoBY0*iH_X5MtY&!(j}O?Yl;HtCP(n%Ecfon7Sd zcGWx1^&n3l^W0~j=Io-U+Fd>UgWX1c$1g2jc(&*c;}D)&JcnQeq|YfHMWTR|Y@Q&I z)<{z~_fge`kf~;d6++9^(YPhv0F8O09w!#D`>--@$&3c#Vi0pir^R046#`hHTx7ub z0t1l?``@LLVV0U(BVq;Xrs-;_5RoEre<$>;R89-4`?z$W2x~b=g0Dz+4a^s~JaK~to2%oe>4ZzXa zTWAhM*{NlWI9L5XH^kPwMi8o4>Ef?H6&B?^Yz*QyLvNdNO1mMg&wZ7i4{nz|fVxuT56mO4=EW=JwfPGNeHukN@A^jC?8UPVHIP)wQRltGy%?#SQw2c$zDPW8DF;i zMg(tJjT}9nFQ8FKCbASRL#QzV_1X2uI8*#lGDrP*=7l{gw0){Jl8fk>3g~0^t(CxS8&?$5QZV zG8#4^QZV|6^FzIfP=`2tC1uEVi(v8wfbslk@O!OR<2<5N!Dti}Vz>d1h$kJ*N+Q9d zb@kcS9XEwS(mG8&WgC~SPyD4|Fs@HDTA#o3ZSa(zMGfdZUA%N_lk6$&($IZfuorP%p9q!rFdijUBZs1v(vtlNf{(O)oV?~UEDJ`3ic503Pa(2c#m$}R+IU*Lo@_yJ2* zf8@KjZ%o}XI!L#B8X*7k{ix}q)v}sdTOL_LR@hC&p+aND!66uX!Hu6dDlAOxJIWeJ zDY_t}o`the&+|{A<6AApYwyZr0R5Kh%Mzz55|eRgDpd2Bjdhqf*V&2CuzA}4!R$ua z3OJW#D=;|mq<{Yh&4K&!ob2rPkJKB^&ijyk@PFr&F>-9)M=K+`S}&f|GlE*NOdpi) zgPhyaB*Zk3C1_1-7PB*;?av#qg#uy;ZX+_la_Iu_7GDc z9#_zT-XY4;{k_-*tqfRmsypnIPagpg>!d0ltgV@3{EF>u@COM~v?9I_$VUtuJm8r%@-=L{n|p9nfOo6Ocn8h9{Cne@gQpq@!(Pilk&;noW@00V=~&!KBrD?!enGYXbwn2d#UgQt>g?>`cmiUml^`lC zzOz1^Xe9Lj2`-E;I>tq)00V{>RQIQb^1*yEOi(IZj*%JR2Dq$jf|Cc`BmOn$CpXt! zw+&D?V$!6SV_F<|J^T3zCtb;!GJp)B)+l(0J8a3Caz4gu=Ev(R=^6&k#h^e?Q>^d? zj$mpk<2C-ZIaUMgPG`!yV#VaVJ$ zM=BhzGouX{Ft;KbYHMm1Dhko15-Wv@YVl)KjOz&b3V`TPXCXzH9-o2mBiLf2o;c2b zjw7l`BQXSn!XUCq$YK2b1IU2LF=N5JJiQ_jYRX$ko*Do2T}xgA%kto8>KIsX)CNhk zK9U+keQ=33rIxwYvQ?bkY!}*N(%0kqSC_t+r33r)85>#j$fZ*#(@~m;*Zsq0_khlh z9lR4TQqJOzUXxKHFGSCHu+VROVY$66^W!#9-pS4^RBAg*iq4 z^-KAQP5DO8RJ16*1@p8JSkoV$8An9fs0W53?)aCmD!J0>`s3v|U>=x& zRqNP_Xbqp$&AbzZ>t^nTuy(>`a*;K%2iK@qqz4Ph&yk;~2C$f~g#^t*k2=yF$z$q@W0}xP%)3Ktj(pr^4-%bs<+kX8Z^&#&6YQ1osN~Mn(?M zT^8Hiy^uhT!!{B_(?QxH4di5ijX^l({A$R6P^aJQp*or{7r(c%Ji=j{HnZE>IgodJYTIBLve{;=`(Cd+Ru)Rcl zd!SL1HpmrT=#@>hl3CfB1vA@MZjS$>6Sj}b1$&})A*n31^*TA(O!!I!MGaslnyN|x zw!lUPyEvzocWwN+ggL(z{*ssQV)Bw0tpN8x&{~QzYY9RY` z2C}A)1X=Ei0(?y^gaY{c7Y}1dH2y}A%rW>Iqgy1qS|MVMMP0z-#^0TxY8@~QHT_Z# zJj=1WylRQyb2Ch?)VEL9_qA+&P%a){AGT0Wrn3M19{Oa$uBRJVb4^P5q=3+#8CPHa z4|*pX+VSPj*X94ehcf*&e!oM1nXXjPRoL%-{NYC_->u7EI%)YFgm6=9%J>p&uO{!C zOmsgjUjn@#BYwdc{?3H!IZNO23`Y?9gxKmGIs&}{yhwV_;vOMK^5Wf^8-5?utNlS9b`Hr~V+fVs2NguIxv z*b(Ewd!$n)Az?Iw#rdM;yW>%ZP`5`Ogd)bUOTnR?S*2Ma!%f4Wli{X$LAYsS=2rmn zWW8YO0}DM<2ymUv-EwN_oQZ=Zpzyiiev}6^r$a~HbE#Uf>K&>|A7#S3gUJHHFpsg6 zX#0m`jBMy0Dx?euAtgMdb#PyVE8Q&cjL#t!Rp= zIl6Ifyn#CRCC%{$2T+so`hu(J(VVH4#?PcrWyM@D+F98o^vxCNhrj*HtDb3@{Y(0L z33~cXh(`Pje&sNt|HTmHj80P4WDMNPKsFeIu<;|jr*Ng#cm*%nhj=K$w1N=PelAAD zlAm~i9Y>iO1OPa+_`uRORXL68K0t;Vdq=%Hzg8T`%%{oU@E_hu(ZF;@!qJVbZq?4B z!5>5TrsY#&R=k<#T+tg4sSyTz&ks6N}U_-Jn0)V>Z*HHfyIohA4n=VjP- zGGe_H;L;Kz7`0lWzi#nDAbPj^hqU*I;gn@@aBfhM6K^ zxG-rl%&MF~6aO<9BA7Xcf^|1cn=m9)Jo^=*hH**O9c?l~o4F#XfL4MiZK8lyidVS` zXz9iH3>PC7Vw1TLXBhEwNExzsEY%A!c$BA+cm7_l!&2y=aVZw4$j&0Dq`~tf`#N~3 zN?KYpS!6X;xKM)DYg;j{5OfLk#7#+F1|LBzgENIDbiwmp zz%J2@LXC+>*${P2VnI=bE8+~ry1fWxbk>Zfp0J%$OSVs>qsb}P_`7#fW@25F{u`4z z@}kz#?pM@ysiLwddwi$me+*9fCOW>^SdGYIV6)}Er;TA&I0*lUw=xL-53j}!0!5Aa ziD$~j4}uMN?~*}ydqfYyHJK3@s?eA)vEnF>(^REKh94JgM9i|U{o8L5tsKrK^N`^A zc24_0p3u1QoLZ4qDMUYC+VvSJld1S%c8Z>V==%$tb6-OUv-F&MJ(`|#2k};#`!ZgQ zX|5PUTUzflw(Zsm+_i^+H`<_nkEqq6IQcO8MMZHC zd&L%UE{$mr>6cbNh~1k}c={;WIQKb|HV3T^q%PtpgA!tQKiaQSK z)E`rF>>T@mOhYB%^weF}>6ctpdTJ)?^o3*6#|G_#)%{{hvwg4=JvWGDkDwJ1-ulLT_z^ys zD=X9ALT`CNC$Bq$qZ`q06yule%aLDwnIhiJW zG0&apL|0+WvqNkoOH!SPWEx7#FP?2CA5?R2^t7FizZnbhL}< zquq;+i1G9ogP3P?3}PH8l?E})umK%mX6PQ1A^`EJxLEAa0QxrYep%fwk#f#b@>NrD z*sd@B6;Ug-WuS#|#Q2wpj#=r&#PG5aswm6^T;~QfQ2hR{{#B zh*X0>2m4VJBIGq|#VH+VB${U3pcQwDc)@h?U^*4HUKhq0D9#h1KY@Xw=B6969`b4T zd0TD1Eoh^1`TiLDoee5K3CG94W)xuw6ekv2LB_emxR-e;z9+Op%vRR#XSX-1na~4T z6&F55^}+bZ#bY=92$g}}j#t@6P#-uTCodx^ERW!onFh>cD_kNX(mA0k)`?&smU@_n zwK@?K@U-WcDsRo_xnw4pMJI#*GMMS56DLLIMkYIxRsFujg|R^fZuibZYIH#nUdzkrcv*5AUbgaeiSCePttlw0VA%Xn)I)D@x6bJe zKDJt}9xlnA)epTaT-a|fg=_H@;1VHBc9i&d^-wW2XC|aG9RFgGLM%X-9&ZVO!L{r+ zxHbasEK5~GueHkSLr5ug8ZTqUpJPH|lyO86kIf(3J$#gcQ;q3fLKZ+a(dZ#PMvvK8 zxd=rtA30KZF6ZE2RAKWENG=b^d;lUE199!TGTSAUEL0{CN|^)%el^|cWe4g=Z;X_O z#dySyuZR|B9+_o`a*8BLKY@Ds1QK!|O^PxqH!0YsQFz>BHv|5eCA92ncJee zpMO&asE#b3`6#<0WAFUM^(0j=-jL^E$W1ewmQ^cIdEE$nvm-H7Sh%0!a#1#cZC}GC zu!sGU03WoymlZcrCI3#fB5ex=?xUC58X0{`p?_#Uj+ru5(M1bb3~1JL3L+_p8F|i5 z0xqgn>4Rw+tPb!&YN=~wZy`&yIN49*4Qco1J2#I5w-<> zu-27&Q$UO% zqsP;ZncT*;-x{LNCs#NjM38aQlfR|dB4bQ0VlA)`(^{_qyZL>PIy&!O&LQJ7PrL{A z)7f<|Xt~zuNU#S9^r@OB7x?4G3OMJx%m;H65fYm1mL~@k0T7rb4e`!xQ#QW8EQaK=)&0D$;abYOhmKTHb zT!Z3xVs9lr!P3Xsb+gov3RhF&<~G*sCH%79Ad(h|z;ZDIfa-{G0wT}c(fRrebPZ@K zE?ox?AJDaZ7AQ}E9+WlFx4 zH~44EvN*&aro9o?cgM@SF@hMvQZz`fOicsUmw>8+q7e;i>ixJBs`@e^Tu2IfIVDwT z>l8Q`2ftfCpKeZ}a6rng9F(D@8T~e2xnQj0(ZYR($Cm7s4(3<)lV}sA&F}E$P(DaZ zCbkMy`8@pkqDE~QE~a2~K3amYC_~aRP{-6fKel=OO|T~0)b}tK3f%V?GV863#otY4T|8;}`A7wSz68 zauK}KMMu@vGs>glM2xBEMRhxchd`gDhk>uZ(-Z5to<7D>O~opDHr%YF7gFEu%mA!b zU#voN&=oFhXWzUXQ%ss0dx@wCy&RLI90GP%7Jr(e!C3lX5sG#k%NV+5$F$in1i@UJt*-d#X{;!`mdl_^%K zf+HYK@Pq}WcfMR<6=sm0KR8U(maUM;nU=1mH;-|ig|-haN0SB%{-7PD`~r?r=rCnR z#$gJ|1EUP;h_q8)VrjTFAFRLe8%T0O%SCt-TFEcT&?R4Ks_R0~0u+N?h73l<;Zx0pgCqZEGkUtsH zs4G;i-_O^VN`0x;7gTxW}@Mhu}98;~x)| z@T6M5rWeOlrSK=mm!v0 z*JO0H<+2`vFNFQrpR9R0)0yS_*_o>T{^fKma~wPB@%aHl_tCRS8D5O z$=s2u(C;?jPJnMLz}6+@_|*@XhyIMuLiF)PL}II$5&2|kx5QaE;C9g##J#@4?T4M& zin9w6wrT5Q^Zj|zU*idPOCjmTWf8**S|T`SozFglMFQJ8fjUHdq^UqXH&~q0&En| z=scvN!J`c8%ZRl1D^t+k#U&wjsy#5$R%qIHEG_}(jdw15G{0?nS1m4Xg{)9@5T}Aa zSzNrcYaQAG9eBJ>?IW{^mx&c8)y5K%VPAkEH$rMu{HJq>NOP{_R6{uGe>gXAqA8hUBs1#vT4!Fy;bq+?v*>yjXXNTlh zhc#ykw<~7q)&Q)-qdyv)f~-hdcQ; z2feD`X;_1%q8KRYQ51~132RXf(BRwH3_0>cJ6kqjSQ2&nlfnHgI2qI{A*h!?@I`6Y z&#al*hmqTF{O7lE+P&h%MBR(2=ze{cu2bT~yR!pjt6--(-ch&HM0v@sB^VBtAIFEO zEq9~NWLLy|m+ab{xoc0~1v?@{s=?hFsweg3DSdgG7cgP*E?6leXfKM~Y|gaR{qe3^ zzSQ%>*0TE~ zhiB#kdGW4QEH1cjm%ZbHzkQy>U+K6|ai81y(&2>rfy%@(BjIk4uUp@VuXuv%lTSsF zDIFI|qSnfx_jcJ!UuWjIljM7Hf;=~|yh-vs^*^dlRk;$2i^P@I*>FOd7+>*p*m&j| zJ?TJUq<+9bN+dXZ@gImAcXsYdzU<;-*!YL{;5ub-i8*>$N0?zxq&C>$VAD9va5@;A z;8VWf6LFasTxd33pqU7vU-D8L0g62#LmW09n8jK3SfcK+RCFIE^SR(oOEM_q1C8lm zN20DH^#g*0Z$nlE%nbaKM#EiO;GMD++=KA~S>7Y@sxqSiBb>uSY7aDC46rfvS*RjR zzLav@fn=E}O}{j7Ppjuvy3jP&0MD6n!Tk00ibi`|iK;Jeiq~Cafc8opkgMuj9lq*Y zZGqs$Z3tz4Fk z#_ST`b1+UM=|?`G91S(onesu|*lGVMrotdbAZQP#9;lWKhYqZYNQp;+GK6gn*tC4&!m? zD*h$v!O$N!x`8=kThHdjYs%nE3oI>XU2L;G5B^={30AIW1GV^C{x42sutCPeFjBTj7?xn)>QNlIr|$9uCbY?@;bI&lLy-95>-Jt6~9y? zM%0nfI}2eaw=0-6mDB6NkB%_T?}zm)?14?yk84gt-te}^)sG+Va~A;SXKeUxZLG4n z1lazfv-6wW4_0gIv9Q>s!LnhqO9ik5#s#VRfAAtu%%Ge9yC(5+*%?vd=WZ zYlM^>JW~-Ijh3^*vw#3oUh2o9+}a(Fz8c@!r)o>$(W4j|k^&~K8g+mLq2XXf@U*jQ zGpBX%A`&tcv;(p81PYuxK>K2~=z^&xa0FX@5fk2?PFiQTo}<-aKRSS(hnI{v5_J#8 z+ehpurK9dC>)6dn0b86@!6##}Av z4+yvJL9+$V*)`0!XLf&~1*EYrN;B#%BCJoW$8Pn*h#nG8A1XhX2<{IXACMP_I@YU# z^|9_E=Yf7ygq!#Zgf|{gVC^Hbod;?i>jNhuD>m9x9&mG|4a~>8s%{_=Jk=C7R)Qo> z6`Tt`MFD;A3GNip2Z<=qOTpn91lZWUf^xMwBZMJktgPGdXbMj4tl?QTBVOwo`e8+I z1cNhn^oCy0C%&2Vxzm;S5a=(yV7{q`qMwQD)Ta3;xfC0HBQz(%#y8Qy)^2O$6>Sa_ zfnQK;XUC0J{k{yA_M&TI&r4rfQM&v}vwXFnGMAk&zk@@imr;X4uJC3S9~n8%9M{d4@`}XUK@3;kKLC)JyDbI3?|j+ki_!67Mdaz z^ET$k=as%SbW2#hX4GRd#=(N>qucC7Fe0>D7uc)|=UXkP!a5L3=C6-^F)#Yh$f$aC z*72hR_(a~dJhr8n9_Ao41V8fkSkkdA+=E1+bgN_6R`;&eR13vYL>GQe-Dkr|vm3vX z&Qx?p=UdU~v8{zjzl)z&&}R2G910fF^9hg~ ze)KJ{Ario-l@{w#s;Vo*2LDBf*BsVfNFu4DT$HfQq2#kr4!LoLX}t6{e6Hg|0LSId z-6G+Fv=dK-&fRYlA0W&Fh;pppjwRkzR;*tXgZNPJ0wueW>%Xx$AO7ptv ziN!e8-+Dkqe3i&vohG$S;U`Lhg{ZxOrH}%Ew;Cu*;-S(kq52eY`;CJ@4K;SCaH3~L z0(%VK)zoyf6R?VmbP}~!VU!V>#0Qw&)&=D>6hjqm{6NY%lwZ4E0kZS;`lR!Q+M10z zY%0(IfOwcwpcXy71U>Ds-U<-~#Hz7(E!cZ2tJhbQN2V``b>|0OyXXBOTi4+&e+ms2 z4*;%(^fjEQafFS(cow=j5!i#HLTQT80a6Z!^GHb8(Fkje&AMQ|bp%~ng-4$3eDgNW z!8=M4E1(HL881`;5GyUpD2uhr@aIlU0WZRyRRjCX0-*Cz>3r1V2Lj@2M?SjD&n`QM zaAuZtXX0AMmk91yjr;lROIR~uoREJx^4B82Ihk{fd^n$n#Xh;Ixikguw$1}q#BRho z{WH}7>rK0An2#kGHfBMDr58?Jdf`|Q)WVeet#zb`9IK-@@UR zT?q3jqn}4YL+jf;{TDJZWd9qZ&dL2PlU~-yHLbQLqy4JVQ}|};|4o)YHtZFaNHy9a zgAY{MoI7ABMV1JTKAVz3Q!r%^T;s)WL2wcBfWHN!+jF|GXS9%K8&lL``_Lyr9Dn{S zvTmFi8=bOo>Os&YjKo!CA1c6~9wQ&AtbGj-mBTf<(Lhe}Ug+vN0v|YckO@dQ{u_Vu ze8+o!nUA8zjzY_SJpP#frN3nUyrW*Q&J zihN%$SZN$8setu@I-b~crpb77FEZ3!q!z+pVeJ1PI(>}?iQs3ARVN&Okj%$W<#M^PKTU3NGcM`dO+#YUq~oB)1o)3 zp6wsVBy+sX`4xD>xiC3o#pE()7L@z%|0VWh6u8w9INmlFkvZIb5b0i{7LLMhZQ(_% z@H+y>H@$-owo$D0yD$mj9$>7F_2}ym`&!&6!6Kmm1(YWo2(NwcuhLDn(89 zMS(Zk=B(d`G93Mjay|v#*fhi%M~9~3530SEQ%oDoq2jSsnDPM_v*U1cOc%iMm+pc% z7{8S^o=vR;LUwTBrMn}(dK7E#s(R#S5WuQ!c4%b>{@CVMZ}j}i=KG__Pi9zO1GBqe zgiSlkrlFNEo?|l|v3Fgu-&vw>_59jqorj=P8m71v97?1er4qX! zTo^I~l)4ejdoHRs+HO*>VQhVGVE$Wsn7?wwIWsRd=mJF=9b)9gFGRlLoar1t2w)Kc zC)z4h0Y~ppCZnvU6KyxB50KS&0_*3#5x_JRmXK4W$p4a=gh7`HH4VtY>B9&&l?Qo&xP@UajJ*P-R0{==@GsnlBk9t&D%RTD z=Er*7=L*P~Yfq$YbT-s6Bflyc8YV=^kcj@0p%MKwN~9g@Eex!+-;;!9;hHZ8YB&^# zL0RJf>?r^Z%2+Qm!5^l*YQ-j7UihXqYT=a7z3ZD1ha`$RQ01T_M4DN7z2j zJ)Z7=`dci+n zGIa92&d_cq(HUMevok{;x+-qFRrMw_j#iW66BzGP>(gF5#YI!mIEMt7kLZjXebRK} zp-)Pszb0e<%3RtHi9b4AX&18-9_SuhGq`d1LkcVe9{8fc0(sa#e+Pbl1^<;y1lnb~ zbR`sa{f_beD=Gik&bdtNhw`~|$N3z$UsnDi@(9{`=jcm$(G|J+QhQG$KUAg|3tjCc z4D`q0?Bwxs$II{GZyp@#J}k9BGmKu0sqcheAw&}(4rgoUFW_|%3W-aLT1gCC3f{M7 zJ~+-|mcf_QdJ_H=A4)(VrVg;W)B^|ccj*62R9fl)>qb#15+<^`m=e4~nKdj@xLdO@ z94|gV$cN^sQekZr!J_Z9HC~MoVaN3z1M3MDX17w*aE37o%jA;bHq6k zF!cAXpnazVnKJudp4mlw-nE@~*$lfRW%e2QWju5|DJ&>;p(#;+)^NZ7q1FNdlnyk< zfl??wahX@QdG*No-ufztQ5XQt-jLdK2F?qsab}p>=Yp6CEPZZxC4`KEl^df{RcC@# zr8XI~HE!9DC8uLgA=Q8BR4tiQ85d~d_fO0u!cAo^D2SakE&z1say@>L92mngX<$46 z2B$fxrgrJ(QUM^X#+43iv>VMr-a1BOA~+J+Xagtb5qO_|h&;NPn}Chay%V2J;*nZ3 zJQC;i5dgA%kPCnCzo3aX9)9w7s^KEkK1P!TVc<%&3#PVDeF+M-n zTZ0>#K5-Xl*l|k^WP(;g;>F^_q0#fiGt9sJAR<;R%4-G$+ zqwgX>qTT)`<2#L)v|I4w>160s1~C6=0c`0RkYf`fz@^4yUqdWVdR}&d(`>!zu^#Y& zUPP_h-z(%cuDm!5|FVsO?2guZI6`%i7Qk9{l)jEvD(`%oJ022z#5eHe5Gr(jzvq0L z2eP4ELHEv35kduA>R*TSpn4O|Ah5-afM)}TvI70y)xCLXpvtxNjz`bmTL|QNuUnmW ze*gEX(W72-e!mY#fbqJs3EStu%)#CeoHoyno~tSfLuWrY(hB#XF6^6*)JBI!MjDk| zM*k=#@e*?O?}P7h|Mp3~}v);eCFY}*{axe2q(j|Ae@sQoWnRnv-+ivXmwYh(L zQ59s2<_?aB><-?+>4*J%{0_c5JwyGrQ)4ppn@`Lzf+ffu{8)OkCd|b1{HOPF-WjU_ zsHvExcXG~8?BAdL&ks|gjwOT%8;||F5Q&?N5$MckZ85ptkfGxxViJh)eucly>Lu<# zG;Sv~+Gu?BAsmJd1jPM&+w54%5}o7l>h$YveDJ@97R6le2WLtjum zKH2ttudH`|t^0lFZ@PPokNw`c()Qy#XOU~Y^UnwHzDM2<%KM*~?~!)RKw?K8fTule zII-s-Jv(Kjz`|3n$eGl-Gfq>^VysL!i9a^XxtNW23w$zMXh9{w;?_fjaU{)X|BD9Ml0g zE{i(&UgMh0W)e;Ougl5stVSJ)J!OF9a!4b)aFfE?L|C`5HXX9G(pszXDk%#OJ($uw zj_!o9cvQc0u~+a<<5GP`JgV=Ad-PpV=8i%VByX^<+#x(Xy=YU!#%j104^5lXD}24>?aZU7smiFQQ=_X7^~3u zm&G_DX)C7dAcQZ0-+l}f=s$0R3VVGUihQ7AE4{v&LLc7C`Ip7?o`lFaVftx0-E0BshN^1@q3l1&)hFo;1kGX%`b${Od|;32atV`tM4Qdzb75)yn}o1U5Cq*4M!un zCm!R{PsPC;6R1pvYP%~p2h+pimBI)KOr85Ji_hsQG$5Ps#?LERfq^6(cxBe&kh|@= z+PFL#uk9h~=c+=SSAuDb7GWwJGyWC#V|ZV)d~8fWe$9bUN&CV;sBG)!DI(kEZ~tsy zTlrRh>?I=4yvUzq=A4*b__q1$t;t8v%U6(g_JBl1X~!8hG&3^CMcl7UC~mtsJ#Ujc zvbcdun%D$GIh{wd<|GEg&s`=fU*Ch^h1s*#v68Rdq{0X(5 zXrGQ50H3}}!r8_31nZ6##3d>Ns{b?up*O(Hdc~*&!4}PcN_ubBDU{>@PeHsx`(xqC zo!{5-0%bzS#hg=Z^7}TGtC`l3(r$RRs_%vTvR%i1c!@n}PX2CZJ={oR(eBHPtR8AFFl^I!=Mp3XPs3&=FHf?8)Vxt zJvWS3K)75=u8@9cU;*#~fHM=2?*2ygD2rk2j%^=@j~`AcdQAG&S7}TLrzt^uD3&Y> zyx%^EQy2K2M$GnoPa%=um)x~s&Nt!LOGJK>X2`*lie2eyu`8{`xrnlgU8xhdkQqBW zZ?x%~E+5|PTI@h{7H8)ToCH{_jB?NAz)m&I+p$5>(dS@VlVS^-qz{a5_NeMlCOQLSuVQrb6`dT0wOd@#B8;^ z<7Mt(dC|{wyv*$@FZxOJmGGrhTcLspp1t@$p+>PCR~^PDN1+vVNOjUX*G8b9Qv|g( zDf&MqD`?u~3vzZoivt+vfhvTQ=yrDgBOZ*u*oE2DhwaVn+smDMyO!x!$6n@6ogYQ4 zNuu3^AYbQ!#kTbo_Q-+;{hT%=`O)oAka?IH)Qt5weqA50Zn!vf~Q^Rq>L zm)%OKO#FUU3+EK>*dJ5d?$O08qWik_cO5CSYN^`-92p+E=hF?a*N2d+m~BTUs9OE{ zr|+le|LTPw{Wqp@#L-*rby^Pc+t4(W?&5PEbV8`pQ4GmYF?2c#v4?cD3GF+PvlVZWQHAnlf} znA;P*$Neo!L&>37kJO+mY=4B#Gq@z3JEsE@Xwx8#oQGYx{=wI?_5bL_E7bpu@%6)X z;I_ZcnPqxXRaWTf`#+wyluDU+P~K8c{G}q6b2xGf zeH=$`%882^O~=K|*bJH?quhW&(D4Nkalu&rOOVE!82TYC9I$JNHO6i;ngPFB!f0cE z#QwE?_(4E1_6T4DHYTGENptBGXpGZtS~ZtofqE8>vz@N@GsYnzIB;o~=?RAy2=U6$ zg!6G403~oBxRSK|!Uc7EA!MLLU*_wB@*7n8;GJfEV(omO5kFDf(u&3QR;zQ#Vtd6# zx?3%AF4^d)n1#Ff&iYx*P_fts2Dj2#zt|Qy7IxMj3m_}M<71h#o)2){iM2Aj5om_K zAPXCu&+R2|)qqLqr|NPOb`yk~kOma$2H>EBxD}8W=>~YoYw6Q~>&60(%8+g7ZJ}SrqblzyG?quAW%86`fuidzq9g zn-IpAYG>!WpmSp{lbeCGtp*qKxCq!R)^2w}f1PeCd_Px*1Tlf^sP=BwVVv~~l!8|g zB~%489=k|BVwakQ@;Y!!%-U*gRN^a%9i^tWS|hU>0sBsTmJ@w>0m>oprJb?)ADsnprx}fYJcI8-zGH(PTziu(=a)T4Z%verU-Id5ivTT)k zU1whJ6rOX}QBX6&On{Q}FVi}yxD7W^9kpdyiY|`Vp{#Z2+vT7*P|`Z)9DEAp2(Zvd z&jmJ51N#I%j|DdK=JLSaNnl%$i@@G(UN@N6hyeQ^M+0h?JO>7uF8O3mAfIl6@$Ap{+O+Cvvc1S zjuZ9yeL1BP$slJn%tXXi^(f{mO)K=}q%`gcCp3zqb`Vd&J_wL@)}7i}cV=hZ@J^gV z)b%BU1EdO!e}BzLX&*e$AJY)3#HH&M91CPOzs4oQtinQCF zwO}rU6_RZS`-iFTpdRLQzT){c6HR`84ga@qcDz987FImMt-!At_ts{(>cr;z0#E5d z(!M~Z#rgeFB_Ym*^CV*RjmEcL+~U=5Gvtw^u_htaegbI_0}rC2S5#HGugdR>v7o@{ zwojXRHkSJ~`r$@cyHvw60B;n$=sN~=Hk~5%a84m;znt$9T*^9jZRcH9hK=uFD8+n? z8kL~lR?P%g^t@-^dzwaCK-NWx& z&F?NgY#8(1&sVF>?_NHHGv9CPW-ULzey-~rezO75?fB*Lvyt3WT+HgC#L}mXy(d3R zIiCv+!VYmxxFw7-wM!4Ydsn}!%zZbc-|ak=PM2zXg6qA-KY%yk67iAls#x=cbH_BW z!!U3HG2YToPaR9VUaa8^KZu^=nl3S~+5_Nr?>nhR;wYnL0B0qL$Y6)UPoy5$tN0G= z$i+}*P1q`6o#1VoK@EGavBnOwUwjdtzH^1Ym}SM@y~{Rxr|s4dKf$T*5LUL^dK@w; zDFuiRnOAXV07Bs2$94gnRXl4~m5-##3h>dJdVq698b#x7Zlv68ke7I=+JwCpY1oz} z<~1w__Wya!J1J~Rl}J2adv!E57Lc;sOewSio+~BCGdhRASN1JYd8iII8oPm`Xr_NJ zwqZ120)g7~>pKvw;jGjld&NxuE3;663iD?XQHe=WyiueRx%rXtV5UN+vVJhwHw4;ka$#D?&v768yQk=yy_E*z#X*DvS7JupM=aq|UEGh@AFcDpn1(GS!a#kPkE`Ug8CHSHl5AJ6fcvY8qtn#4(^EEl}1-C z!0$4bxZAvX%xfY0%6R=_@1(GKgAPK{<>sfAfRWf>m3bAy$arJwI~0MSM;f`0FY&hE zw*kM+J9m3KkR!3%OHvXU={X~1d=l1g83ec(^U2MH=*}QOmqvit59s#*Ut}SAz#qt3 zbY$_LoA?hC5q&BpbPCOg`ba3Io)x;7Q?kyUc+krY7jwyx?37zJQ#_WEn1&rR;1Bdd z`4!%kmv~nK3oUQ^6oz~pHeHD>S%tPPw{{Z`Va*c{tz_%f?O2P4p$dunL|guPwe-XF zaYvZTaOFMks!lH{NWjJmU=wh{c0ja_+YGMD0oi_hBzdIIBVeP{?yb$*_XvKjMn{$- z89OwCWz7+(mca`a2!5vjEPon57n?bFq{p0;`td69JdIg8hgaigz>g}z%?9G|3V!a^ z_?hZzZuE>x@G}j>JnT@t=&7egJ3JV`gLTyXLi;oauvA$VKReR+8EybUhYEf!La(sl zhGX<9XGWDJcV^_GD2GN-oEbz>=st6197F}EhZpqz)4X72h+#Aqra3WQ#A|jT7F63K zR`NONg<1U}gP>?Ky7G~P<3mB{&d!;fJ-{$%sT&Qtx~`FKK?Zb_Gm zNMJT1c&z*?ycR`5Vmlz&!oXvK{G7Y5g}z({JzpJ6NR_D_<;r@}Ew~&MnZivWobVU# zsXf9r9FA<_$zd#&+9ryiwu;U6wy)@q+QnI-P+Kg$t@2{+kH8Z`wf@ReHk)~yr)-bV zTp!l#%>VIB3K#X{A*{0drUv9l5B@9UniID{)AQg^0v7{7 zKf;W{VGqXl2!fu)BU4>Q!5MN?M~qJcS)+v{zO(I%4VPnQd-KZtUAKk&o#P7p-3Kp% zzXPKbg?4sdI3eJHyEA@oBSgl%zt*7qJ@!wv!es6c1_WG+_S~5PO(5j{i+CXFO-xoL zO%C)qW3+~;2s)gxe`DL#Gi+`1T^Gs{bw`syPUf`Lf7YoIQLy!Vld*UnPDny7-EHyU zDW@yshGN}mT)lTi9c5IqOW0;u5u0Zn%CSn>jKTmRs*`zxrxJAo(Aa}NAkp$WBO3n( zHT#0Y@eo`PjKo7;G2tqvNer~7U;_~HBZf#SdK5En%oLOP1^t{R$V~U&B%sA>pq%24 z*SJ-PMpDocjMo&xLOotnq(WXss0|e}LT#vo5o$wzM5v|9Vtvxh^6rY-%Xq#k(xcw$ z0+?)yZa2(Q*dmf6lSAIh)ewr2)|@-sl5s z?udP8-E{L^{bg!9M=4<&>8*AFBK_nTp_*j%Ob^PEfd~9|t+1PknG&A=nGd%J%bLFR zW^YS`?Y(^cv!Ngs`@p(s#$DZIRx@wETQtMc8BiZ)o(b<J6LJV>#^%i#ZRL_#0ZFg5uJ(zEE_C$ zQ|y9uQ)9}T=>G&*bQjLnq0wY-fBa-f)hB9TR~`6<-5F~~j>fy*E)#xs zx~iT#kSLp*ip)KlSUNyVyW(OpG$2B(eCsQ;McHr^5|}ThO)!%oU&j}vX@z5jy#a~`atUI2}|J|c0)I|Ic;y&2mb`ATN7IxAmOB-s#tef zaw-c$vcMYqJ^#Ko$MEyZ6PcWf+9v9Y4bRv1Tube=XAHrf7B0i{(1(e-SDTYTvKGKs zefpBdUeX7T&qW{9py@Sk`X&)WKOm?9SlQwox*=%bG#}QsOKEKzx~#P=0_-BTh*;Y$ zwP$T2OGyB(u?JQ=+P2*FN*RVl+K=XKoI@k9F`b}WufAXf%r!?N6=|c=WQ`uW8guAs z^w7QIA=syY$N=SO=gb-mS`7@sfVzVA#W91mq2f&s!2XZ};Nkf)47nZX^wh1=?YhRh z{#XXXvH6MMt7$`0sSoD%<7$ku#^6b*F*u-Wgl&-2*q^BDPeotFSdO<2qxs_z=MI|n zLiflzBeCFUxWSmlo(bWc`<1qqyZXv}n6jhL-7x97dDb`K>hoU2Lb6CJAxnetqboL8 zM$=e@fvR#V7|6mHtfnvykNP!5@hTk7c;i(#m@1A}6|0((I0BT^_~TW6+R;7@FfbYJ zdaJD2IuASKKh2RrN1-3JwDIl3HjJUQ7KDw@V#1C8n%-YC_T<#r()Qsc-dvruG_K?o z^BH3(E*IXcfN6N=PtbX)(UDl}Xi}xXo6Yg)MOqkQ>Ehrlz8F?!xWF|L&FH>*a2OOw zVw)Rg#&BECn-nDB2RWzl8(P|YNKow_L zu#GWFKzoVppm6;KZf2NyVoyDG;y1y-S=Q@suLqDJmrO&F6`c4X?;6g-wZ!05m;K)F zwA$=-L)4_L#J~)`@kU02*2GVywmnq;)luNb>Nlu3TZXh+}SCl4&={RO=#G5gi^mELlnX*aUK)+AW{Ldk~s)p4`s5%BAd0(jMOXs zx#BM|DTZ%4v?@i_tX$8DeFH2!RFYUaAG{l=DL*bCr^*^|C7+FZ%JAU4iXPG6f*gs# zy^l$YC%;Zs29C#5AxH1dJv??SeM|2rqB3Yb(y;~hsa>LARgh>ZS;iC3uqa;}ghNYu zB~E7vEE>Sz`f1z^NCGeMfHPX5#5|#+-8wTbLM2*CK#Sm03sgdRY7Sb#5=-cM+k+!8 zOUmDrYAy#e<Y%yU*BinV*i|4dlL&vzn#>St2NWn~(OiP;1Y1RDGC=24? zY2xdaEc|$woSpwS_buEN=GHZ?0YG5sH{?f`GNJ8Fja>B zfj|Q%Z-i#Z%Xc3`P)VSoM_|AQ&B&R!{X76miZK!8jyemJahgSW-DIq6(8@J^>j}Lo z_(hXokR`w?Gh6M0ax6S0weSExG7s-CiOWTJ_yoHX##!ZXus}i6(8s}tVF+fZm1Vw_ zL;+YTL)U^KQ`-vF8m|n!G!h>~ge@ow2&)gDybQ4fHCdEY3|9f4st9@DJe+fj%NN@7 zTmz^DC+gb@<4cR;C@@rP&S`UT6``E@%A(b1QAs7n4hCdYrk#R=UVipeJVb`XxknLt zOrFw|Nv}Lk{9=8(<6ak>7$&PkHmq?81TLQVs&dcJr;(u;?f0ij*#npuC=@7ZG2-x1 z7V07~Bj_hqUG9eZ5Q|(WH7_YI)Q{FBbBw8SovH%iRfm#F&cWYLYtW+zW-nGsPMj zKhY#i&%_%}p_IVq= zHxJapW=t|oE!>GaO)c<*hX0Z~?#3M-l%z}Uh~Ob>X2ZPNK5rOSHg0WY6C5^;Y_2hW z^Una2#6ibzGsHpR?{bL)ulY3II?vDdril&nW~d2QPKJG&nlKgJFHCy}YknP}CBWLw zB5hZX_M`DR_Vnq-!XB?3S(=P>b8~4~NRq(5R@su)3?v@gWg};W)rH@Upr5{XuJc1MV5B?JUW}aWghTEm#pr9NbFYIPNIy;@z)KaH$F9=KD zV)eMRmHoXXs?lGgHkK_^i_4eBULl#}zN4{Xqa6xxpzR$%re#ozb5sPdsLGx7fr>_( zv%b+5IN_{65%>`J!4E{@a@K!{l~{s}-mMn-)k4bE3)R9hT)g0iaVf@fEo9_6#y#=C z+2HY33*v=@K_c*M5&B;|b2yFwI3&o5@l;qTxmnQX!Z<=<{xKPrBf~qx?O-ze%Vd$;o%$tca*vvo5CI`=;Fm#lkWfRN z4EUc|_mldCJgO1n$6uy$`oW)Io}K??&$~8tsPy&o=MXVfvbCmKQ!P{umd(3Fjg-Mm?K2Td8n7$k4CW1;wg(@pE93_ z)}Bfu*m9Ij#!svPRnV=?x;21>gbx3bqAslO#$&F-- z?B(Co0Zt`uc=D3Nt!V!D7(~jM%?USHFH|g7CxpJ55eb7R{REcIyntk&(!%6TJw=5e>%UL8Ulx;=yk8$}+tnCssVmZo%;) zF7UMajP$cuxy55lZT8Xw&!TvpU$Yfu`XQ(1Zb$^54I8`u0bM8c=(2PV$_w1?6CP7P zjna6IVCy)qv2OGM!f<1O!3__b&)J}V49PiyexL={q6HPf;jK===6urW<;!21I~A|% zS9Qa1ARp-2=J54sz5Nk9tE~fOgwBNR3o3dt9>i%-A~*`Ffu^3=JA$vmWNep&{PkKG z87>j?psiu!E7;c0$$JZ2JE9p$OYl_-V#vT3<}v0+zo+vnNq53Xm%yDeY}}kFA^-9v zAk5y_65ymVT?Dat*!TsaYG@#AmoEbG9>y18O&39YA2$95Md+ChlwsOzz!CEbx}J3C z51Prp9QSMDL;7oL#sU=^Qp(OE%hXiU5-6TA0}?^n6l||CBR_iUxf%y7NQDTj!P0*} zHo9a}A;NWbR?l@o>v#h$TG0V+ySffw<~CzHmShc?(k#X~YqlLGq%g5X5wVvzyYeEHvHR@TM*mEZ9wuUmrh-hO2LXkg zY%zpTE6$h_7!bbLs@B3GkUqPNy(HvVbXx2sa(8)=PoTsbqaT~FL>CebJslHsuDnPw zQhy2dZKSj>SO2w0J$SDG%x(jBxEdrPGA(s>HR5i&XC-5yq%ql(iPajT8F;9e&3RXb6q>}+k#&!et(W%o-OyE zCHLX#?(?(BthvO9rbk3RIM(0UQKK3p^{$!$vM73ewH$?jLaUoA{XV_^TV5RhC9|$u z&RqJ*T(2zynNK=6iWM<`^QQ* z6Z{otVUy86C6~XF^pLckfcR?xjCXE_jI|a5dS|dFw%L;xu>}rAe+wVb4|d}OU~cTC zGpOs@2-sSRLVE`|EQ6i7FnYF~b_UUdxPe zV#7Gz+#J|idFkxzM9S<*2tV)$WxhT_S@G{YLWz7jci+K&d>VO}0JM$G_~jkx>Un}B zC36?r1V*Y|3_?9R1D*a_Kut_Z-D4l(X-)PZNx(`+!II2i6C|^86qnN~mOG|}k!cE(tkSkRbvkF5)9X)6q%VjBXfIpECh2fsEq~5*15=+a_2}S$ft%9wZ#w0R^3rfNo5fzXBI1*v1*vWaA$eXEeSOiiZ z@SET5y0u!El94Ox{*_fE-Y&ds8yfa?zwZ!Q=R20HDMU}@C2NX!fp%h?0k>eiw~UO$ zXT|-Ug{JLY#XN*X@HuCWDWH&dw}4rXTO0@a*p? zedEH@n3f~0F)ev7{?ob?d{B}uDZzuYn3j3<`3L9|4C$Jqb%ybq2TbJp zAaSUcwvC|HthCMczJ4NdB^5;EN(o&pQ|SyYGl_OFHs8$741L&W#5*BW@2l2a@?~H9o1HWMt z`ODgiJxPwadZ9#P3gwE&h=)jzjFr!&2M_y4H7aZ}_JPO9`d38akKV6B$b;0FP_VU! z6K%2t@TYX!w>e{F{uPVo0<6{?r#pA@bVWPec}sXC;1re$WbW*$!N+q|WSBnBWKcjl zz|9d3br@)mPIc}B&-Cgt@Jw@5ukU_#KYcJh@B~U2`l>Qts5w@6L((t7q2a9LfD0-0 zVZ%_R&dUMI=Jn}h)M7A`%~j&@0u)_NX$X9GODo2>Euuq(ov8{j(auV25J<#E)l^VqIO|9upsZ(S@S50#sm}Z7 zBMVes&#?_WPdJ>L0tTTup zP9QSf_r)04ddRf69ef0NxEmkC6>$uE#kk)BuQ8;(jPvlL*4e%Dey$H>eh{}{=$H`l z5F6eJVDbAo;{hIbrfeh6RkCE%4clTZg!G_FPI z9WTqe#CeEz+z`AN{r|MR4}4VBnKzzf1{if@MxDY?qfXmt8=F+4Ni}iu)iVzy^R0H@cGrF1Zfm!`N~;S&EE9!=VA*Y0*>2iW zdudoVD8<-P@9+D4&b@c;gb?uEE+5U@d+z!3oaa2}InO!g`SXRXbyr}y{sbYgV4UlM z(SZ=ztkMW8f$@jOmuCRQ&{g}T19=LHcLgwMBsbf{wD=vsX;7s!oh(xBO+IFgHAejc z!;OZWenEK-;axiZ6r&xJ8zscSmg*GU4uxWyN%$R871=8H6rfF;o-c*GT=<60^cD2T zGI5Kb{6Y>{B$TJxJHOmKE%;0Pe+2*kZ~Wh7{r?z#`Tv2$wBR>EfBgUBvvZ%9gfbN_k2HlwI`Mud2QHi?#p%^#loRO-;Dov+Aem5_YZ-r^ah zDkGDDQf(_&h`@bsyc@W8!jdZ@!N7g5y&G82&zkvpqYMK41m8R1JC{d-_|#{8f}7yi zk&I6zy`H_4B?&R%Rq<0=wQsQM;-6@u`nLCXH)yYa;wSGN`NS;W6|ciPac1wx4O;&v z_P+PVCw^M|`z!j>kF)#5Kk3@7I=fPfM~ma^Y#$6){}6`Dn*s216_yG6eL*IQ&Q?iLSf8@QHdNrw2V z^Zkgj74A2h`_o_JcN@D3zxYmx%lgjsJm)*kZ|GtW7nNz5LY3kn1h!-Ht0t5(^s&*I zKjy>=Jb}Xt9E?D1rApgDmdzI~cU9++t75Eb{MkNlNuim&gA`CH&RC%Ns60HXX}$Nq z2?9+lS90(v=UIiWE4_@|lTkR3U7PSe3Ik?AYGG|Wt154@0~ds!Ue%r$>7h$rKp!9UVC06?wIC8)ew?rpJc`=Vv} zhd%9mk{MNYurQqP{y=U9;q7V}qO%vNoCq;td273P&U`DUMi9XH!_)>=8$E1ik;V>2 z@qdwVM;fe7YE<5K`7zVQ6C?i1bcxg`PxgsX>Ln6aUdMw9J)0q)Xfvb0Q1Q${?Woos z)kccjX>l4Y?n_^unIX8Eon8sQZ;0b`KC+(0PB)!moi1d_D+a;#2MkRloLK;A{J=wY z3u%&XG}3So0i^Mh3uzb4X(O#BS`51nDPEl6W?z#OJW+K>P#HnhL}8Kf`^`ij>vlUU zwvl$SK?o~a{BWT~ST<43e&<6IRTs8je;lHkaLGjF&S~T45{T+oJr^P>&Y#glMP%AU z^+iQgw<64mHj}QWi)Th4TF))gUM-#*DLy=#H^GN8ERvUA?Mo-dAgI1E?{+tD$)#9;gO#lx2PkM-TJ z^2P~YwApf9My-Ogs4oJA^92!KRI-5XB#Un*>x;md{jw8yvc3q&*)PI*4;!1_ zciE-$ys8|l&4!aayf}HIW$^P&KuURu@u6*nvDTM-9HO}Q$q{(p-_2`xoVMeyI=Sk_ zlRCM26;J$^>FL80Uo^>=>FLKy_T-9X<&J=dO;xDWI&6yY(NVU2R=s5=KA+7|o|B`< zdgF0axjK$gCPf5dY1V%QB9J*2QG^PHdHh*ckP)}?#I zZn>!|6ECc;uEtNKzrWwi#G^}=EJ4nqDO0BOXW}KHP^c;sFI~KN@$yW(d~k3Oi51`e z_P2*K@v1l8cmoBh%OU~1)v6X6kOgmz!}ynpCsZx-)X#j>(w~Vh2nK_wlTmz-WeFw= ze%glRZAB@e?%9UFknZtBiUI4!)1yurX@zMgc^-`}-g@h;UqatDZrq5UAfUoe2({xU ztlkRSCkOEsL88?~ycJ!3`Q>Q21m*Bk`e4+DMA94H*hRcmU4Q-c>>}FfLl=K;n)qpW z>#eu&tx>g*KrKj|hd2DpM=khS03@Oob`iywtX{nuKW*mlFn(4rn7ZmBJCPPGJk>q* z&hDkRKO=vimA||2SH($aTk$VElih*@RZTaZ68JyU(}ll%e2T9*16s($S98mmi6?m{ zo{2B#4RfaFDg2d$o^RnvGWL82Pfz#c&CFP>OR1>(bMiKl-2g;;?n?vZ$G zq+H9hPGxoTTY2IZ<*Yn$Gs1tDsw1k&e8)V;#n(td^6EwVdv>u390tpop+C<`$`ra+ILF4R{oWMgr)t^?v^GvgZS6T( z7*d%tuz5xBOY?SydW3eRGBhP0eQQhw9`uj#75u69r?p?HHEy9_4LTx#_WN%r zPwd}Qznj($i&|VzeNFOaGqFC{`;L4Bu9IswEa%3vtT(&;wD$k0-+ja`k1TE-1H1f$ z_A9jR4I~$w-%ZryiPi8soit2nzmswY_BFR*nQGOmzJ`U1(FHH637Z!Gw6+Lgw>MSV z>jjDAf-LQ!zf%#r75(l0n#$sUY?t@7U+L-9y7!g?V%DH-u%EKH;ZrvMH4vE)UUP#K z@$?z*tTGU)!l~FQhWyt4RPNNCex4Y4Gtm9l_)YEMVu-*-egrGTt?CL1@Qb@fm{JsC zw<;D49e+}t!8sZ^G-bdzb`;#nMzq`S;`Lz&3IK(PWmn-bayP^v6fH5Qyc-B!w+06y zTAy+4j^DsN3#~^BVJd(vVJT!KSSqztSO>aL&J_pTS{bcN51T>le&!C(osFzJ2(S4# z8HKi)&-fBDahiw!qcC~HnVFQKU&O)-7r-va#C{Trs^b-~>+RYjJYrcv2mHfYjpF{5 zhm@1d;8;!Nc15E01y!%CJ`o|cKnTEuJ{{1OFbcNAnI3ol(#N?8I=u>OSHT-E?1FL2 zau9uX>UD@<)Ofxq<9RmFT>;#Huu*?-8O%BkYX#i?Axs7y^W=vA%nF0;m%N- zOSHm-i)h7e+YhRzqq4%}RN7MH!?rO5;-Ax5Xwu3rIGrZ)7UmXtqMJs}vP?S_47tWwT5@$Fn$pS<0Ni~?7r0}r; zVkK8-bA5DqUU+u{YN0W*z^EWWE#cf+PJWwIDPW>Iq$nW}(vvkWF3{8!xZA0AS`ecx zI?wXkD7eI)+mqKXtpivgQE-ZjL-0pJ8oC@*2q5?zQ$d0af)_;a$HKREKglR~LAI%o zpx9>^P$(oQ2*}e$6QIR=!sp$W%X*^X=V})J>8RCaMYIkYI#1Ci!fGh)@4c;ZS<1kh&;$0|BqxB#{+oxCf(hdHT+>=-fhGA~_H%soB7F-PZyAt42qs4MqsCG&h5xw#O4Nz1Yxg|j4Pg{KUu zSYAQ`tk4QG;_d@RhqB&?2v81DKnVdBc^&oFNUc|Qp}D#fyF-cncI7OO9)r4-LF?4djZ=rFn*%gCaIGNy$*9>r@K)~N}< z?8yq<9LHXdmA;+LZ=lhQ_1KnQ;m*hd#zDx{k{sbW0Sp9YuG7FB92~s$6Sc{TcM~R`(0YN@i&0*t83{Q5l5{ukr&Hpir!Z8tGKqMov z3MRV-z=T@>ri3OHxoCLIYV2jrUP~faR|>(=qq3|i60=3_QNYgxs?c5-a9FmsSyuBT42fvnyy#H4Z*jU3+5T8G$Fpk+HM%CWiYzu;ptgY{P?^A3KOF$zk&O+u=>20&va)+R=_I>?Cp9C*0v66{0$wxR1KYuiBtlxPP!O0*P9 zqT?R)YArh+Zskhns?h0q>Lsar3&rj2Vip95!h& z5P5xSZJ2($&^0o4`rRoEY`T)&12K>iNd8>#qmZ7lzB4q%TJZ?nDxQ7N?X(MzkPt1I zHVT|XqSXC*xR;@y?pAV{)h)XbK&JaK=1q+ zEX+ky@0%UhQyqa9+p@YsjfmNpXBJnOAnl6--3w50YHcJBp_?{6#-$EiC)Hcv*^3@X zZ46gP1~Hn&lgQ3Hx~TE7<3d306~-+Cj#*BayK50dgRBH6A15CHP`hwsXch}dp8gzw zFsenab!W`V|6hTEOz(zEO;=f*F-7ggEPKELM+9S_MD2t3qZ7n(M-c|C#vAA6cCP;} z?0r)ExR^xX@Dn3*H~Wk(MTd$+G_dKJ>0yP0xNIN`w*%=Eai{h|z zIe*!q?EVaSEtX-$%Ncz=A_X)vQoxMrSp3{d9H5Wrvk*M!6gk!`Uuu64=H0MUrjrD~k$OK8 z*q8)V(htGpSvX7S26+G$>5pJ@RDTw%{G~1k~-AoY- zeorYwS)vz2DUmK9tk8iJoSB3`y~_f|-~9>h^67yo{JR^1ZGG?Gpzf&QcnR-h|H=)M z*LurZP)w6jk!*o;d~^zgtTz@o4kV=E$56s2Wkfqk^@mqu>S@?{8j&Zs)JgH8%rw{I zB8Z*F)A}5Jtx@hwf{Ss{mkLQvULNt948usp&*Ix5mliiOE?`)X4+ASfP1&h)`3NBb z95+9Z0+dCz<>3L2ZWg4)$vNcOtVN?nP^r3Bt~{XA5yUdn)11Z*Tm?muhNoJ<4aL%qG|Z z@1+H(=oeX#@n8b}kh=O=4*#-xFQb)+h$(~K`(dB7&)N8bKjqq^gprSv1b2;G6IzTs zc)-oxHOj3HAfDuqX@ytF)bST1WNP_~QDh2#F~rn(_km)kFm48Rbi53r462KQrYUwE zyiJru$5+eZ#UGf$k9}YkY8ZIb{#kUB*o3$8KsWh;`XoupQBMSXn;)t7u08?{@DWl9 zoyrl&*>fti+eayr!+WozP$~2c=eyLZ_Yx+EknoF4a7l zAQ#SO>r#mp6&rFI5E{-ch-=mhsB2v~pVffk$NLm`ZLg9a0dLhxd#mlJ{qEMd0={vC zQ|Hq+Re*DBIMs)aK|8mFZc9$T6S&G7HDBOW{jx76jOxnMaG%71)*oZ;)T?lRgV|Xv zi<8(1*lPdI0>JS+F`}heDs@T>7;ABmIq}%r)Lc(Mu=8Vf`SF!D%R%cmWc^AI4kLUV zcQ!Dp#tiow2fm6pBw%5bhb=4WV^~*gJ$Pvky4VPQyWtesDIV|f2X1~Hv#9g3K+)bn z(d&Vt{=gUZqK8--s^1M6;J799b!S)Z{{vq2R`d3%` z-}s6kYmD|~eStVYDJ?s4zPw`_h>WcKcWeW5X5VdkK_517-Ev*U=j{JQq#`p)Kg|V7 z-$5cmT<;ElTR-T~@P5HCht{+m=kv(Dh6J(;88^LrnxV9r*SPvepf-r@l>LD#p58GGa5x=mpxOTVKOkk$gxj@IFm+ ztPf8LY`P9luqzAPT<`C^9PLk7;Ex1{NEs8ld3=l!0&F-W?NTt{gQ(WPH~@(g;qg~K z57haN-Oo~W_#?m*$dd$st}!|mK{$%_kl$eciaJMECxz$N`G%sg9x{&+(@H`JItg9KB{wi2nu`Nz{XmL6eHstMoEqN;ph|crm0?VPP$c*I!HrDh( zV%c6REq`Tl1XgBy*;UE3l2=a-v%v%CQ;Y#%3t1$-b^l!18A*7YQf*+`JF9+Zx7)SN>58RdDHr_bsv+kp&dt0qX%4 zvcq>B&4@5kkCW1l-G2^`v(AAvy&IUnFK~1Js;l^o(+-v<2f(^IK?G`;Ll(N(aWyAV zKlN07uzwJ{a>ej3K(g$DZSP}ET*aADYH_VSe_hJ2@6SavQN6j}c#Jah<^f2x8#4S0 z>>bv+wgG-j3QP&neZ~Ieaqm1HEA36nP+d(8_ zQ|N3n)cEG==Jp$3e}KBV`fh>ib`+Dwx`e~^!>6SKo+P0eXBx}&#s&wvy8?k##-8Pm zvM=hhK$5F<3#h1G!!1vScsWVQ>}2CvwF{zNBN1wizvZ71yD#Y4Mw9Tw5uYzxo%jMY z0yV?MC~Wyq{5^1?EVQfmNJZMC+>5BRm+=VQO;t**n{l;l#zVD|Kit(+=t&KpPW9y@ zG!V2mRbE-YpuMTyN?v7^@zSoQawl&o^f%SlD)m#XerlgVNK!4{(ACuF3B2ZViC(qeq>6)>w;;pSLe1qeN2 z?zF<2XZ$;v__J9oe1}-5TxWECT8j^A{$1k;p7pVH#>!(_)46f-oQan2Hq{4zg)w%EezmDgtKgjCGVYUbCQDvaMu{0yyzwL+XwqOo)Ws3l%5MN0Ih60x=aHCY=mo!j6(P=y4C!?&Ik{PJR7mXORXE zKN0R}$KjOEA(GbtKRlnV5&4QBG!nBcW4UM~D4 z(}!)?_++(Vnw@jQTzJ6KlgfOM!MEU z^U|~6Yd$%TnuQPfiyso__Vj69oR7Ue_Hg2o@BJeq#jxT#S3Cemu<5mD()W*Ocg-_P z^|~|a*s+6-Fns1CFQW}>O#oPRA#EmdVZTT37!gRAEu*q1N>zU`Kji#>xzK}l3}Tue zSdM5jtF`sM%5}cLjCDSsJVa#tjJEwGLC)&eJk&IQ|e!gsw&XN61IWgH6F6=+UVlctF&2O zj#Qf<6aWou3xiGH&?{IO2}yV{e&-*5O9*I*1yGyyyWIL+A*{&jg{KUZel{P@`D&wW z0HF;vE&yRO*F_uz7IzO)O)C!6p4GWy>EFv?Lw(q9{lMP z;!3B_tHHP9I(48J_Z3f6l$wFpoWdjTf4%q^%7u$xf%hViZ68R8Uc^Q51zNAh|Gf|E z|Eh@I9BwiG4s#W^W|5(fBD3!8gX00?G1vDrzk}kaK?6)Mut6~P)4;~}h#Bl6%S^EU zSrVflv=bbs#B-W{b&@xw)U2%}YE+yX>9)5xA9m>-m%&(??XlV4GoC4~L*yJqyVAIv5|W#fcBs&$f*3e0<0Rm1XLV6YzvS3*J}^;V2Ja+!)0O z{&;JGdj|^P|Id#)hk5Y`7YU4L8${4R;`6{FKc(rw_hY?kW54hhLgW-p=54 z^vjWl2%a*Z@>NppMx?!vfYUIz>4dh$< zc*`Bnmbzh!6aw8JpgFD175MIpp+A^4*~p{7MC@>&htAI)JPl-wjpb?!%JZ=N9+wD( z7v%XEI8aq{4{mvQp6nCE@%u)gYGi(%d%#F_vbHukX$zQ#+fPAT*eTQiw$39G{0ys~5yitW=P@k@^`=3y z^C$~683py0^UO?K*oNiZ6B{g|6XF0P;ynf)aq)28rld|B9>p7yuN;VQZa#iySp>t&42wAuWyNYYuMXXdFmqax@5}8#x*Q z(&};qznBhRQV!?DVpTbuL;8nvGB@%I9B_!w;I8ewd!`^x8C;T#XJ;5Dc0hD(4n8Zq zf=}oEPVi~n-zj|J{*H%T;~a44;&{l|^Y^FCjQB&54l_Q&DU7+zoA^t5JTaU)HJ^Yu z{+f<)S=%uPyjuR6v|((2v5yXP@6LX@N}Cfl-{{&SY(Z--fwWnwHJ3uv$IW~N-paLR zil7xpsY=GW_R!Xoe!1vTxR9D-hcuig0+DhCPodTFOj%BC!xzsXx6(Z6+9NzC`B~>X zZls|M^(un9P+$O@@MTbeZN#BvAY-4|pO2lkw)shX;qiO-TU_UOplhAVN`GVndk|l` z_6Vs3HW96+)z9XAV@5s89ENMRmG=TSaL#!CoWkOYJeF98TNO zy@>hZPP}qr;>LvqD~hT8TUz!S`cSchG!5tW#8t%(5_}Rq`AFbHuy6pJz%~?qV5r5S za2cU|7WZC8wd@Go!y~;^HG#(F8DF}?Fcshh*p)E^njcQv6i5Xq4SeFA4=t#mnzbxR zAkecbRy`Q!$vxad$m?Fj-F?xjQc$qR^U zGwABnR{`Ha8`q!G#Pb%1#VntQ{g5cC&QK!-gflz#@@22N5gtAd;W(TD%5mGP94elN z@Ti4wr?nvTJb?E^&OV%Q+Pi4{E|!a_1=tf~M8eikaA20@siA-#G6zGHk;fPeWDNly zh0{R`L6CDJ^my=7i$1XxQRYDwq9Z2P?17EH;trD3W8H;Zf)g>}S8`CMm`dzW^0sjp zOZr9OJZEt{$rVCb%pNvcFjkfeU%5ZTjqkNNVaJgl#-O-ZpA+6!)|8wxG|RV~Cbw?jmz??lZ^Z_hvnQ|EBEJSN z!z@s@N=i7;2?+xhw>HN~QnJLm0O$>>+x(Qgw^ z8T)IalW`>45O|Tg)=N?&R|YoGO~KOCR|_uZ$NY|BeRe_YaYE5PO_M^pKQUvemcKMT z{R8!3<*&`{%rFx@TY}#_lnmr^&Zc^Cu=P!@IgQc9`lHcj@DW^~(F(Sp5(iac2_(ans*`9@az`fX#$B22{Hb8N2?!)8@%v<9ll4@($JAla&yxQX>%<660Yh z$>e4{u<>g4Di4kq!=0D2j<7L6D#Hqnuc7IHcnR=dxHLVl;T)obTIqcKK(ArG@>m}h zV6di>cLF0Rs9JX4jk;&I!Vso5x|(%HjZnqA(%S6e4BKc(wBlQB!Z>&PyQXNi=-p8+ zs9d>{3A}8P7u0V2-CqHmK4aq*z_G%BbUtB}ej6XUqZ}fAoBWv1N4MdPw4-W3IxE81 ztjVZ3L<&~4#ew6r$HxkMWI=vZV@RO23IJ1)5S%U{5aiCTP{ZgPURR_1a!`oGFh>(L-HO{~=F2PzpZ)v(Qp+;HKWt36HXWg{PPoT6lCyra?u2c$ZrO=d>i~A>pw_MWtsnh z7pvw2J>@AAv;P=IS0?_ZH`m>n_Z5%teNpp+|^%{3~YGPWF*4v9NLSaT$BuNvIM=-(yHnHK_@bK@LF5!pOrPK=cfM61-mvp$#Uo zHdfMwXC(25|M1wYp7=<1!GCz%h9808PhAjnA<>8vg4*aB)qI0$o+VK`f5>l$B~E?} zZa#+0s+#rLGc;^mU+$i-LA=S3ad>2ODhTcXTU@g14;Yqh!Xr@?StbAB@lo}}M{+{` z!z0B7f&Kp|P{B%6VPor~f<1OlF@iL50DBi=qsNgEW%&cFl2lyPlizjAH#R1mBG7#~ zND|m-1SedM?9vRcmy&!Td$fMn2!NL>0OiVQg>mXH1+&W)X5R*^K%&ED?eVl&EHhD9 zuCgkuwtj1^UlmsV@7Uqms5DSzXsQ8V7R#lfs|MU`Jv;kQv(#X(w!PnQ^Rx$U&5m8z znCE&+7;(IzbdYeQhVldHFa2I|GbC0p(T2R5FG$RV_&o)q1@W;*1bz$RH}MT9aYKyG zQG@OhD*i@J#a%fSZ#=(ZZJW>$k!L;x?Swu5Q`(*n)XfKpH!2dRL0kl{gh2#8m0XHs zxxq%V$c;!=*Hc;PSI#F?dWpcM(unQQ5)Di2LxJZ;_t%CqqPiUUxXIiWc?*W_{h0Y5!uPS#_fa|QHxyT5X z9E`fAB>Zd4@_Zeqc?W0#qRkqqMEv6loHOE41^+nu{>ofa|ugBBW_fsY}0AyG4%WcC>GB9Ls;n08jN5tXhF=C;G2&kw6G2tjl`ffXa#PPZI zgMLV{TWWgs6d%&KOU`d2F6=xwU(q#wLKpx+{w!Y`@q)9Wu3CVD1Cwkmue1?8*-!4m zWblOPP#e(&Sghh(YH;GEO>85=vT6GzjR?!8{aDA{$3(#y4zJ9eE6{u!@rCr+po2r{ znm$q_(>e5c>6(KY4C%`plv()VRxOcDRJc`%P~dwGfLeFTO6v>wBsS5eeFE=A7F-(m z)Q<|xd)toFCd}{|FZbc?;2Bf^^W|+g$$jL>AHw4Rwd|mRD8Ki*!e7aG<*Bfonxgou z&}>W74%f&Hc`z@MsVU|~a;7LccPdl@p^z{EXai1ZI9oEC>37a?W?8{Bu`a^-xgqE0 zI7P?#IZn}WK!kI2z0OeQ=fRd`R~d=Vf=+0A@hn=#q|YEaZ!I64v)d)sTlVn05@W?8 zPnj4kRirAX$b9P!lF7yqQknM-9zbk11pZURBL3~)Jj|brXszPG+`oB*2|Nac-9$2^ zVW30HFb;?rgu#`3WDPv2cDr4*bDKO$Mc2KW$a*5@MXc9?AN|?Cf#}Rn zJI6>id&GGWb7t#6|8x1}DdW#>!!WfUmpQT;mmknz1*<$|u`wnHTQu7TCCf8R5vGM) zCseL(S1v67RL z>($EI+W6JtC*V0;QbfNUZWCr<{)E-EYFgv%|Z;<^+s(=ui%47B{7ScmkiU?)W5QjO~2Y2Gcsg z45*AG2{FFPVKp*Fz=!B}DSurMCH$xY7r(*T;0V?E(MV3H&L+}Lb@Dx)}T7a}TECfTtE!wiHjoWXu7{k#IoLT;8 z&MaR&24f&w@MR0E$SLrYtAH#%-pY*d1l0?hFJu&7ke;2v-) z+A)aKEy5SKA{@K0N(_y;W%C4deg9_qy#SVc{E;VeO!Y)=sh-Fv)Kl1blA}Q+W+aMD z2v6!ra=7eGRb2#0n6B6Ikdp53@q-}PjB^dM`LsIM7wBMF6ATnhh+G*7DoaFKZotc0 zEADO=sGtKpuj)d5WHxinM}*qtOdKu)a8g*Jsh51dlv})CO!Nrug-!JE(ON02%dk>b z(5Pxlm@RA66Uai2!V&-dQUE5l#sruj9DwD;2AD6GV$`SrX6{h{Gf4p~A02?v++m|H zi2R3**(_#BkFVHv>6l-+_nGz_f;}RI!WLu2qwe(qnMHpaO6(3TmwJVkohxObWxR1! zRJ43cr5y2g-n3H_Gm?v`6ie=vKhd_62FJOs(6+O?<77B1SGf6DJ7js%w{y~%FL1HN zcBD%z#R{}Ti`+NWvhpHBM%E#sTm{nPTw8cjLr7X@^-%Y#qWsa)nmS|!N>&pAVXLX5 zej_vrZV{WsF)bFM!ouJ;5avp?m!!95@=geicP`6ov0^PSm9~jbJOxm+6km}a-?a)S z9)rr0Z{>MOuwo`>uwK@Ld@2Ni&`Gu~A(m`i?mSjqiX-Q&j}AX>lj6sWDUSe~kk)=c z%)!{5EEHN_N1&pSumVuPK*#tPOev^^Fbv@oms;8sb56DL5lkFIpzJw{U-S<69$*sw zWqOX|FVj@S?GjTO(QTLi!G!Ufe}BtNy~I3b$2H2(nk6YSLx~c+;eb(pC8SttYEU|I zTQA7?S=$3%ep8`W`%8AC>@{efOi^(tDoX?1G~}J0>h;E6UpdUHF}W|MJ6Q;1Yf>=A zrxbrkL1$T;;=NUSiIpKsEVHK4(%sj^!r1mlumVyP#W>^R=!eKV*&-_E+Bc=@#2RIY ztV=+URMm#OWQqMDAeyKfsEPXK&rpqYL7OxOn&4UERKkZ!0_pM%HomU3DoBfcx@ui8 zNq{@9ps@^AZL(XDQgHK?U5~}1zV<$kV0nlcdzw8B?D$vw6~Zvg9UPJ%#``cy0_V}# zDj+n|i-X9b9hz$dv27>a{FexVt__2;bupGQe)eym1qqo(T5$FS4lU^I`LP!XXZy!3 z{A;qvwrKw6Fl(i!ag}4`ufQ@Vfz~2O-FcOgjxkrLhnC6CMMYJ*Q>00;+!7Z3X+?kdAFnsrmL?je_={4 z3+C(L4`Up7)dj7KH}O&NYm5Efy!6BI-%H}27vY^*(+zP@}tCN-qR zDfP+MeR(dAMHmlFl%zCKOlpYrtqoDr<&g0Pn!+w;qABssHAIBmiISXer~FWn^K(y( zldLPsdMznAD6N@)OLLTotDJWQ{)$uD*75lJt(KuJd!1JA!` z)g`Ik4`Ti6>UoMZ;yw-YX(HB1C3^$SeRlEdG|}5&@z=F_Dc-l!a}eg|%~93C5V zdQA9fuOlWa=)B%wwkm_vKqECntf0Zxl8N>5E0`f*n1~Hb644fxKop1ZM)FTE%J*X~ z260)suK@DZT_dsg*UnV(1nwopNNE!5snzb|>nS7B4T3 zm!xOFYS@eM$V*;k-tEgsT))(Ak+M5JqfY-Q55pJ?u2UFxl!utBJ1eaM5Hw(GQ65w7|NKObmH3(4{HdWdl$X7`731r6yOubb$Ff zLK_|_ew-VZyHh6%^wo3^wLp`}1M}-my##?fiN%1uB=9uO@^SxH%ER_TVgSDp>o?3_ zizrjyg+hTl9!Y2uzm~nG2o04Mp`EA}Dgd(%Xa(BqT6HbX{rb>K6cbsIU8_-x>&vd) zYR*kna;zSz(C#Wp?foEjB(URlz^xtjjG&XzJng5bllRQEsDD1p^~5Oya8RWAea2Vb z# z`KcWdrd+CZVcWp5R?UcCKDdX6RSRT+#k}C}#`lCd6$RFy$u($t1uqVO1hg(!L+ord zN6#9Yjemi;JT!sBC|Ve#R#6?t{R8h(huC3Q*YVc#-|-CQW)Ti5N$ArH03=Ph<_9)W z5h=AiI3&WnA~`#mmgG(*5VzD3r%74cGSA7Yfe%FzDb!t{ zx1if|gep|0zD$@%T6obozz`fzRWZ95yVLcU9}mQ-uOyohvnED^DccJrWK~i_^rF9Q@qN2 zfoumlmpHIY1YYRjQ3`*_etB-$=xki!{{V#Dz>tUbR#hdHGU<@%}5xfXwuV3t|K7*Fye| z9a!I4882V+Q0ymbzN~$NL>~JFWz@Bc)G|mRl-Bl+5DH&P=s8XSjN7o&wWI+w7lMhd zObM4nu>PaGI?TYJH5A*s-V4$8BQ>h}HQ&sdwo@{-oQYYIDf@d0#Cbn$;WarOjt#85 z9NQAvrot9pYzbNrq7?Q)Pjhn*p}st;?{J2x)iKfjbyUgCIVINISTg|V7RC-( zvD;5rmSX9(My5`Vrs44=1XL&uC+wrF#zkI+<6xqx>0p0 ztNhEFGxlCe%ZKyud*C342M_m~gYGRM`ip_R^$kl34fK2ydFHlKu|2Qs&Fucx6PxAh zxcdUzZ|$&>`P*->_QU6Gzh(1*?YI2?L;jFAwa;6x*PBWbS^4$uH~W) z-fz*HUo~F87E;lwgJhL$-@!!~x@`hN_CD)d7*2ITPGESEeFiD$GfWF~m6jhzv z3(fxxCwc2~^6_7&uQYyV?%Ph-1BUw5c`2wC@`vmeQo$JspWI&c zEWi{0WqKCli7%Su%k;G2#ksvIWm)I;%CBy(g6j4PcUd$E1CIrt_2c#m24He~b&c_r z$v_>w&@_6iYwc3+8o-jZ39GW+ve(+mCTw1TQ(%5hffcR-PXPz833H#Q3yYBckP+~o zI#I7>ePZ^dPU7v`D@n@8Hb-TaeXSJZYOB(?NH(xt+0-iouP%`zJZVYVT3476gD;g| zq!K)4L(AumE*npc&esH<_%G8l4^NZu#LX-8N9IsQ zTAr4TEzUr0bUE^rBP0z56F6z5h~!g;N^q+Q38j227@azi0d+>u)aW{ymRl!N>^ct_ zznhHjj!B&GBey-AO~trBT7hycM(J1Gb4fHicoXW-QiWG&$717h7l@q0Wf|I%7D}^e7B>c?O=17w*6q?2);H(taet;_6vcSoWq^ zicpENl&Sa?634F)Gk&XNw;uw?0&j_J^HB|8sp3hpW;w#g-$u!QVwRP^iv0sDrCWH! z!4o3Ebi#AMc;@ry5elNB21rU(Bw)0Q*9yFr*mbF7e`=ouNv2m2D9qq3AAa7 zh_8Aooi;L+>{;d0>~Nr`7kSFgTIc|d7&lp ze12}LF2_s8L$?c-zCkQ?eyR)}vTIS@_B^~oUhy0@hCwwosZ2N~SyrAvCHKX4v;Fng zs6*`c2CjwSVnbT^7(|=v0Z{HW1m}k%pYpEgcL3eGE7IuuD*rdBFz{1YCgUVMc@p^eEe0`TnB-8-*^IXwtZV5 zhWKvDjm@zS-Zj$5(yVQff9D=QBmxg6`)Xj-F02>5{+?MQ4RmwNk#NB382 z8_9_77gHp7 zf^h1x+ljrS9SGFF12;@X6ffY`N;zX zczCKCHlD<^O(_dyv}AG5J?ssxu`iLK9Bue;{PSCO{;JUoD-g&s9>EO zl)%OYa1=_{hmF6-aTxe*$Ou(qJnbuT*Aa*sPYACuxpr7pl+cAk7+=JCp{_3~d#Zu$ zHIu*w_yFQ)MXlB`)Tr|9Yv`cMVnu%e=iWiRu=>HDmRMxyAMm`6ou6@b2@YF@GIjrY zEi|A=*mIB1O!fu!89`j>%`rZP3Fg}1LyoylaW5?h1H$rSxL5a3Q&p)a#-sOYUbw$D7|CCh(@EkV@q2x-Ez-S@A%OP_!JT%<*v(J4S?$EHqJXjL52OAuD@DmQPDxc>(RXG;HJT%ExN@GX zkhOMVT2gb^9q!`=eVGmR4nb7p96r?>h1iFVJ&~5`3%R)B3QJS zd$^U|b*N*>-CP;80UUQ7(5}I8S8OD?463$t;j1^FuZchv54mqm%T_77!@+dAl}g6; zwQ!#-E)@2l&A`<~mY}rkh#-~Q3UccGP~dyQF4D3k;`W_ga2?ZGy%GA7{jn8qa>pR@ zNk>w9ID$B|3v@q>wK}zjgACE&&+)>`o~8IzSH(U}qk@-z@((kKI0Q%T9Q7Z(L#Bo=D>i}9&)Ge-t@ zM$%;QPnI#F6?7GOaQz}bmGu_07=1KI7KrA}`|0gs&KfMTVXhe3E2yckQuI*++f(eM zz*GD#YGXlF8|81Q4N9B@7j+hHI*Y?O)W_OXr*Ru4evvyqkF_A^0`Vr5LG9Zv0XS)c zms?VuQnwU)E@<%B=z@mKGXgI0Y2{TPyL+{I?sua2ke9r^xW2G>AFzf15K%lcL{X7e zUsPNlDc(2q(F=cN#u6;dk%Uo}k5h`=J|;WFnw0>l0R^TkfQTRmAbuo3MF5D;dC6;} zWmFzj00D}?s3aGRE-3y!FXwbw^l7N_W$m=VU~t+imlzJmaS{$0&A0?6yP1Sv*ZieE zgca}5@_2vaA728=&6xO zfz8Fp3K99aw;&>`(Y(cc{3&!F*Wo{+?p@&K8vhUB93U@H|9bIWl?Te<&miSF9Jx9N z#)C+JO14%V5|7)hR&6$IB;%TdNQc}IR+n!0DFt#1)y-RkZe@XLj3da`f}}6DnRL@p=*pQLKzs0-!Som_X|BGqHg+lk~VBKi3rBk~$ei)~^`%VVtD#^wT8(26s*i(@&7_ zB+(Wy056R}Er63VwWpb7)0?ZOt3!yjmDzKKsbVMC*cZgIyMuLl4h8OlNhFk*A9)mT zre98%eO2=0T9~>9NWWwB1H+pQ$u{L1CqoXQPUzwY|+}!M~i&nYNpTvM|71E zlBV;sYG0uzg0{Zu9hDuvHE=t7du5$(&D80h_foHfW0INiyX>Ys5|B~_ybxtJn-T$^ zlD8l(6k<~x;ieese995A>}_qT!>_Z;Cb?mvV%5T}YU+0;E=(cRZ39xYer(t_y%E?l zfX-pF0zXfIP5;3UA_11YMjaMR(!ll?kzuEmiXepzO#22hV*63{Cd8-^{kUk`^N6_v zayF5#-4*t{lJLB4eEW;1xr*>YH3*_CG?v_m7OcGbbSM|kbrP`dgyEr>Cybw$M4{yR z{Mg|RpW31hT^{QLiSOnI1yDVXIC#Pc87&0Ra8v0Jnkna`O4i%N@sHq*23>+gM_-E%IznPnGh@}r68yV%|}S5Uu4l7=R4 z>ir7N?3j!Ha6X8dZ!YV#9GO;1+xk6&>9r@|nF~%$nQM;jt>fVlJt+cc?|t-83|3}$ z%=(r20{uyH4c=WiF7&?ULrXgbQ3Lr~7%G7Bf=PnN-rAf}>_Z%%dS7B*+CSxqN+t3j zutK1_iOJ2ST5HL4>^^2FpL%WSZPBBwRS<*y!2I;{;sOF&2dpVLLs$M5Fkyn}N5vll zdi&`tlP%=BjFzh5B@a|RAI_}t7qt#Ztr2tt1#Zk1knl0t0tqRQK!M{Z098z?9X=t$ zNasaZPyoSmtP7fSc-)0YxRwEEQM^6RH+W@J4ny>9k~0B7S;A-QcHo5_yoj?@1Vix*vOSTW6a%9vlvQUnO zYzd%Hf>p+1tmq5g)f$B2|07%cR+WeZyExhvJfKBlEayw4xKGd$0R}42(=BMxBJ@K* zK^I=F%N7h>H{OtktP%`0iXU7_v_TNX8#o9K!<$P3+dfS(Un$YW>MH^}rsDnV=6Ps2 zKe-Gax{y(SG#Vl(^b_A59YhK~ux-2<{0<$#+tAc0egS%sd;*Wl@@=(SH5juoC`?xh zgVk2tY6W4SNHqmE7`0lZe&{f=V|*K9GLt&)R*-p<(}93;fF(x`9MH=p7PF`&W*Z|0 z#%c_O8?(o%%aIG1xgO$T*;#mxPl}FSM3Z|j48DRwE!JA?L@+IA1vMgh1m#dwG^Y52 z9EJrpeV3{9S1FGCsDUY z5OFYa@)szHaRsy!yVev$Ai1I%zg}Jd8|z1-2l3S!LzsHUqptlR&UM&Hbplw*)&OCW&Txvg zV1K#BvlqthT@u*%Tlfgj6pdQ4W?#OVE+`mdeFF;e?y@M*IE+@Fl-jD07z9j@ zvXbV0Om%V|t-c!RZRm0kZ}`v`I}~U>6r+0#mz2cY(}LjMxFrEm;j)wIgdA?LsVG#iyMxnAsG zziTbT6${j$n`)R6O_(iq$B1X>1M=pj_VBtdUpttlmihcN4mV*-*x_9^VW?o)#8y)# zGsi**mP^zUh?^)$RmLUu9ZL;$oD`zj0pud0y$Zo?c=V}9E}?!tDj!vI@JcR^@sSMq zbI>3?mpV>AuT^?tA*DZ;>kPrADD0MBaNaa;v_2#SkX|&Dk^^HLIsJe@h}{QHjp;Ne z(ESVn0e>;xn(?1J_edE3h6lK_F6&*2{!Ru^qRZmxg?6e3y{D)eZhI1D`IbqN+(z=$ zJL= ziRiCvp+r^Acf2Jq15gTQeJCvJL#!j%IhjqdiFw9sRE1%!2)qbdL(p@~`*P)6uiSX7 zMSVjJrF3amQT9gt(sZ)n91AcJ^cfcKdfbo0hhJc00rwlT{8GR1Tfl{E3((L4z(XkT zT7}mtyt1#0*`4f#zdw()wC_f7XPp}#6OW*Y*)mqBwZZsF16q{ks}n}2YQ7O)8i@|H zbMni8&%O^zZ=h(xn+;8#M&H+NIK|P-`ms3Oit$3Ar=3ROyWr%VTS(At+dwBcILGD> z(NroIZVB{kk<}l03vGIU8#L^G(BGgnjGP=CPRbnoE$ofMM_fnoTPA4+nf-0gq2B$F zHcM;Xk~oy*#@Vxon>m2U6{(Z?$tH|J=q^$#Vp8bdO7d|vZb9S9PebR=7mGG147YtpMjM7GsJirpr{V zx(l9+fm5hpk{JlFfI4VwobeV(F@l#`qs|TRtZ@Kd@F^F-QP*A_ULp6+IhwkzjdLvc^qiJ`$-qH(`3JYDe$_d!R)qYFuXt# z@w-IeefGvIylu;C;QAd%PEKSv*^v1NmnY1fFp7kcf^fV(M(Dm6+IFel28{=*T^Rr585hRy9tY!9Q5VL?p^p;JVT+h^ zkv%XP*|8$SY!Mp$=DRK!YR7?L*C$*sd}K@tbz09Q&3=UDvxZuc=09?N)?#2FYk+fV z)lXux?VZR8X_nL5oIR}^v=!g!psn0^`<+V!dBTSP+2P7E`&|fAv;T5{48Tgzk0r*J zFBO39k6${@mZR$BXkxJdP_@{>SyHA)nk<4iLrkkI&OCTU9NutLA+3$P$U)lK|KT7l zY5efC3u)ugTK~sfFkfrQCu7ZTXSCMj^>)%>zI8mu~SFRP%EzBmBI?^HZrtdHqCd+c2x) z@3MzK}eR$ja|)?Tttc> zcovp$*2g&CH%{d};V2dbHiKM6;cACLAthGxOkm^J;Y$*(rC#Q8l4v_a)@1wT`$v_Q z7_v3|k#Dz3t9GaLskA|-tnIui2#stk$+o+zbIgFNZLZdNwU9U3jkZ!|5la9QF(>&Y zstS#z4rbX;Z8*ifgEADL<-+N?=zJ;Vf$yC9gQ>^6v_9~`)y6jh6!x?ON;D9KeyFKI zmV>EJgc9q2f-`d2$mO>Y;3$NFB6D`+0yHShT1M)gPl$X#W>T@N0K67CORW;+R?Z6R zS1G)H0wt8ft1Nm-NtZiRdfp5fNAGycYz3J-gG!7i-geCpn!<)DUW6U-BBaENkn!E? zWrl=ByvVM9!K{1{rhEa}0{xXLly_V-^eh?zJ#vpJ^k_*LVYpv?4r$WMr^z&6VDYH( zfeW&u^6*aCPhg^H2vDiE^C&#pIP|si!xASE%uN@m9hwn7M0cTbP8q4NJb~1%GG3QmyHOrD-@^$HusPH4rAwS@_oI$$N0idkfSXZGSX9;7v z8}f#6AfI38f?Tby<3c=u+5s_t0P#Woki$KrI2<7!M4CW6ixA)M!;GX{1;8nFHQ+0z zskw7LW(?q}#>{N)!+5U-$#UydVy+OEHh22*{XBXpL=LPxaEWXwm!tK1Jc}gHiH@C2 zLtx{_$rQ27r}jSyLzd?SCS$G7Vh}HrGuaHnIuW;c#B&oz%VQVk51+e1@dxb?<*@E3 zhsNymb#0TgEz2$ih%wl8{KGDN1V6e;;j|i-bfHfc=0Bt|6YtK9asUot59iO7um=wG zygETdyjoEoW$1*2l(61qQ*Lw7*|C$Z8N$ucg}B!+E&lOYxR-l55{jQLQ2dk%(DQIeN$za3 z)LNNdjidPKJn&PM57;Lh=rDiAW2rWbn2Maoz;-P<1E07w#g z`bnH{8BhHO98&I5V;M4bmsxV7wJ@&xwTraI8^gz@x=8CHWB9D<5`Qp;gk0FyK$f7M zv*0$iUn{bA6d1_E{4m~r>k{Fa@FC#gIUO3{58ydx!(++eq^Tf22|NAZqc%-ZlYl%> z7U>agZpn0g^`htqv+#+$g(L(C?md>8PZz1km{d(0L3w8kIa57SL-5I_5R9%Z;t^ z*S~V%vH>D*n1Z+xdMJoHLeCFBf|B?mg7`EMz=K%T!%rA&*1Zlk72x;mFfwJVO=j8BgkW{Q)Z4P%P;K4JQ)D_0Wa` zy}P3&GF3@oTEf`0GQd4$qQ)>u$KT2ah4kB0X zD)+Knum(2X`@UM}G)9}}Y7B46{p#l^e{fZK{RQmaGI5f+5}D5cKQ;ok#9tQ6TW$oh zY5yo`+z4dTc54SR@m?J5nVI;js;;)doSOQWV}Lne$}9T=S$5O$L8GOL9+9Y4;j zFnu-6{qa43O7;xahJms|I&MfA*)T{g`gU@WbewnaJ5Qng(VGa|zr+8qI9Q9rgL-V0 zuYKlRy|5FuFUnr&PJN~UTcvr}Ib>>YI75VMYtLzuJp1$p1E{+ugNAV`oSE*Ig}4|d zN^xjkKx4chpGK|TrB`%ei&9J4SN`T840%z(9p3@SNaynxLFZ6YO zR^kM=DtJEc8G+W@k0)bP>dqm8ayU~j4bz4DLf^`NU!+1)nzw;0?z>PV%d8t^>L1w3 zqRkS|x857*xrUR1@qA%_Z?JorIsw|41=&Zd&k5Jt%y7N+V}|RkXSm*a3D?`~^YqQe zAvQf{tfttu$VXkYpLNdFz4yTs2F6*^KSX?P{|F-@!^~swN@7cThrC!TJpp~XaURBh z2vG+LZ!=Ry7`4QHw(6zIRld$?K)SyZct=G~1P2*c`I=(ybbeaVQt>;sepSG80Ob;f z2ia2l3@YIdNxiy%4(c45s(w-NM^wcYVPQCo!`|~@I$xh;HuOkfxqhUcsxV*mwFAY4 z>m7PVjJ#=Q^zvzDa+;wxogwqM=NxE~5`xFXAodC%aQQ$hcS&s z+W3cCc%aYH+Vo&L4!iJBI*zE}ApNiURz7hbqMDNQ5l^tsK*zM{XY_~8&_yIeTW2P+ zjztU224C(RaMOR>qW@dn^gr2ys{H0H`d8pmT~#KtU=k~|Cc(d6`XmtgkB*LKy&Uup zrl8LnL_F(3cH6Q6bf&{8!NGS+frB`jh0o5=A0v|Wm0U0+l6B{ob?H_%3Nc?A%(6Z>f4wqpEFm5AA76 z`sO*6cBBT=v!ylm1z#ZbJbL}$ff9I7*{R)uXw>z?dh;;6WpI@1huMnWJgC(VnyVNf znKNz{J`76p$gi(D3RFEXHUYHS^R)mF>P3C61YA=B#%p2!o6@Kumz7o$J7XufwUBN2T-SOO_Fe390!L7x=Ozih? ztOi^#L^Fm40h;mm&b;IVb zfu0vg$e9u@!{AvZn0F&ueWBi5Xs)7|nyD{T#O&AV{pRhGq9zd}sxlZ;>hYt=1!L2( zv+mqctj5HS@}8MKCLLdcY+K`JI3VN?QQ>+R5OTc|fJ+$H`U9Iu$LIh9bbt22krKpo z9~WR`wI)7{H$7#^MS9)Ai!j3UXB5D7$H$#`4E$0Tr(xvJFAXE7or*W&r)6{Nqr=BvP5y-Xu2LlQH|E+Z;RA~0Hec%ut6A&O(l5g+^7(dGgE|Z?=4a~rg2W%2ngxh;C5W5CJV*0uW0uv*G zdU*w?W{F;ZvE_3vAQW~zJXT-0-H@4G!j4P=w-#3I6;|z2oF|njfjR;J>DY=`8>xqV z5MqSacUI}^pa9VY*u?hBTtzW3BN7xA9`JLu_Mqd|@>7kvIAIWy{t%ezqJ?;B_oQJa zRzpmf9p_Mi@U+ni&fss3|06m(vHTyEL-=+4AK7aof8F_Oaqpw@H(pYH?!Q$2!twH3 zi%sPsjOI3?Ko%2tVo*Dg1Wfp`s#GrWrIBL>ekLKNV<|m+)FN}ha|n@C>wKR5YFwO+ z->ukYnERt zpj1yugA&{%5#UBrnXpAtFM_1tpzL8^XJKl;pDN*Ir%;gy_VqvnR)Ceiz9_NC`sahy zhwOM4rPh&3dB&C3Szq?rT*M}8)vos((`pL!nXs#qRis9(A~XG%0Wy;R->^kwy_?Zw4$a7 zQOvx*wa=LWk{E5@|NH)*=Y3ut=A3=@_g;JLwbx#I?X{U|i#?%ok6I9)ay=}DwSH-v z;d)@d*xnMELjUbsVuvd&{8abdr%+|YH)=f9R3dlxuuN)v_AD%Ji6qdnxFrGy%i`96 zw1_{;E)@|t$RY81)cp~|7PrJtEN&q_O7{BvaxIKcT~}gT*Ge|e=;9j9VytUD4nA?- zv1fj^>*)lXTpCb_Dp|JcJ_+FKcTFW?vLTZqhlr!+2^d(&rc(g`Wcr>LX)Nh2Nl6-qC%_jV555(0 zUKQlz&`y><%c-5O-}vMs*6t zGbb2v^$i>Cip#4Uv;!H+mKtOF5?&~wy7cJauC%&6e=zV zmJML+u_9Q;4POH&VeJwtt@CA6*yo+U;Bu)i(x;Rwu`F}&zMkR*6z?#Kax;svg2h*$ z61~&>_uar{lqFZUadGQm?c-s=j!jghJ#rqH`;ClWn`HD{JP*BFv?+ba36g`#H&iVL z&3&{kRkqw^Ou3CE+%4da->G+r9-4^flXWq3zQ73fNsZ(v4n1dCy#xtzW#?UXz*EI0 z2IPn?BvDFccYg2sF`*)>XT>WuH18OG@u6C|gIjK?_hojoCy!R_MyaEjE*26{o)Ek4 zuT%zSz~jMca-tq88LV^%YdxgPu8jOzRixLfejRuWfb^mAlb9eV^MJf=be3h^T*%!{ zBR)%M@;K=zj4G4w# z+*dvqOMT)DzVvzYbaqU?u_(_L{MqgVLPPn;Wb!dS=)u>>7nxMo?;QH6H)daMn_D~*})c}(cM#=3w=Qp zoF}hfc|oweu&sQ4u)H)_z93i*kAFo5g^#fCVZq0oPL9GyFugCSHs@r05&M9>OOA>y z^z$n>2>}0+uy2wt4mq0PqX-m za`&iSmr)$nHb0^j1e!c}xr*M2zYyLgiO9d5l3BpuLE7RVMyHc?k-B;$81Q)Zl%? z8NAIMDX!4hmpZg~`o}09NqlWb?V_-j_>OLJQN)O*qBMOG&Pn zqbbQV{76^|41a2{q|nCW6Rr>(Ro@Fo)wfcVB>&F(8pRy@)Doy$*o|^jacQvBrRoY4 zlTGh%U0we`U2XnU!51u3y*Pn6D8Jmz(PQbkzb(T&jR-VT9aT+B%(@F~_}4^Md(4d} z90-Zr7rH#zYr3B{zw$$J}z?K%A7Xw?#6<|RVx}{&zX%N&z z+MOuirs=_3Tt-)LLZqZ3fAs?Tap3}t6j}8fF+T{te5Lk;GDf!N*XW7G+Vj*ivG)8N z=l{m`6uT7SA^Q=;3(lZHkhv8L2`6J}t1{$=jKc;jPZQtMvr6Y0UO{5JzfjAGc1F8Q)SrC!y>Ej|YCX-0J^ zNj>*T+OaC--&Dft1*D9tj~0(T9;`&et*lX|E~Z#40rvfwK*q=icE`g>mSeea7u?yQ zeBD&>Y};u~u~x8}t7Li}2)`kNX;kH?A>&Cpb7qHyp5L|6(_^Ej;(7sEFH*vVoa!}I|!61U}V5BKGhhvm13)U*USzG z%GYIcE&mobEY}`mOzRHqlX}k2yBztu@R{p2ZgB^T+?$-iTiupF^*1U@NxIigdaIk6 zR(j@ds{H)Q1&p;g<5o8;XYew2a0RJVh*bg7%Y0ZgUkb6{fgBrPp4*IWPhf1Y?I4s+ z0%s`~77v@nNB&g%ROGQ%Ag6h|W)9D_Qi7G)xcoNZQ?&R^&f_8&m&&YzRVa&{CB5k}anr0SZ=o_VhMTut1g zYyzl-hc3J7YT==aUZni>=rTFWhh;mUN0&|R*uo=4loZv%!+&si-Qh=EFALMA$>z^C z!(q*H^~47f?NvmIYd2FYe&Bk~{1jKC1n@Py>^NN|=!h;mQe68+B}lcuB*E*lOY1t_ zF#4!ryFa5xnLEQx#iQNRqsLZJx|+6BsG7NyORXA}OSMzEMldd?BhQ~*>Gk_FPYdK165!$M?!D) zM4s%!gWC>XKL>#5QdP?yFSmTfkGkTEn@tIfn$5L7geSKQ7OC%HvsumSvN?hEFJx_1 zbo;sFTa_*qU72CLl3ArHnvpp#&8leT;tV;n=Cni{4EQSHy4eicWmnK?=BNs~PgOw) zj8#y5jHsYW8MEufWSLE!6tmLgs4^G-O`0!b%y_xGaK6(N_%d~MDIrt#@F{wscW^pU z{?IbMEU1rt;5^b)n?98<%%`FfGX7-s9K*_N3oB!*XN8sa>e<4|8OA*VYR2prng>?a z{7)G{Q1X-!1XE8LL6G&75d>O97`=+XI@GNH8NL3X*N;D}XKa=Fjk4TjucBC)!D( z*L8kFMI;W=2v?yU>2&+fgT;fQ^JE1@(@E8W>TXW`=$LhgHiUkR;TJwnKk8j?d!U@* z2v0IP^}b`7of<3FNKi$zu1o4sR>O(nVEvz2oE6^@RKgo6Yzb{fqAK!1WzpYxkB}v6 z-fn~+>5rk%=?0?2j?DFW@#<=7V>U20zh+QxQ z4VG=EFSZS~>$g(K@usW(TTp$A&>tANub5NoNpotHobK(TX5Dv*l-H@+G19D8ta-Mv zvwy4|NhdA+0|k-4uN}`LC^-=#4@*uX+F?n%e2813md)NH#t36q%`ZrEnNoB~`IYQ! z&9h2g%+)+#o7~s>{n2@jFtwEpc}`Z0$J^U# zxG(h0X}-fVtlz!a!|n$BE+x$39IdC~uS6dN{z_yNu&*9_d(}{!Nao6Hk^K4Hne(!A zb(N|kSl1W5u*C0%Ygdymlvv3g9-@_{@!by|QE?F$TDPp$7?^BaVhrR&lmnUsc{J(C5kgOcESO3$9qMjW~~(mZ{zZm z(BgOSJ+d$Or0`9P#J2TWLBA=K(AA?yc`3t?DlG#La;aI2yM^P9v2^4`@OPxz+Er|p z&r%_QO2}y%o1B=2c2HJOWoen(9+AC@OU(1E8WBI0_*P^!1&pYRMOQG+tLP>6c7#65 zLP^BWF`GM|qkUt(&Am?6V2H}7)yRNU`o!=~N@OpJ1-tX^75-2x(Qw?$JHNB}1z{AC zC}oNC+Q3ww7{geY%@>v_^Y}`~nH9)JaOpE~8 z_$^5!v7HP)bdgw2IC-*?JjpwjghO40st!>55mpyYo_1lbN?RheM&&~e-DFwUoTVY7 z_0R~htK(~mH?jfn7uR8-RR?9g5Sf{nEzGd;Nw@RK`bznfWCPDatfm&B8SJ}Ee?iE< z=(Yze0I$Hgh7MTEO^KkeZDZ&HJZ<|p$NR6P_*774Yz6QRm}lQ7dt6!S9uw+mH(OQL zZoS+J&H4tcUznTOYu$f@89D_CH9=B?EKvAd!EhPs#8m!NB7NA8uPn>5)bVkJxDlE* zDsF~lr4GNsC1f}tgMW@&PNu2xZ#3VnO7i|nT^dmsZv&b_@=GxG^N}daP`q zS6~C_sNNH&Z*%SWl+%xL#a3acWQdno69F3mQi0w%#H%#^C9&nSfTLR$Qp>Rexy^Gv z^?HJQ1xM{V**H2sIxM2sc#3V2O;QDz7qXmBZiUt;k)A768H)WE!BnS_HyTrq%T3PK z$1Ig3i(%G687`8EWMtelDW$COWO(XNR*o? z`y*FS%aXV~M>#5%tZx%I7H0OuZzJRRxJxN?JB1EY3abS7mq1bxeMRTBtEp%~CMT&V zDtXUfJT56jfg*GnR(#TP^^PGaFY_fz>!7rFxtUSg^wkOjldOxgF^mJcdoSRihqq-Z zn^Cgg#QtEiu;Xf1k4b2%g|SbA^Nwf6@qofo6lZOD3S@IFv`mfc*42fs-WR>qewM6I*t8Tcv08L6~4=TVFLlJ+hnJ^6UYEjPW*gWw}vE&JsWyQ)uu$ zQiAO_X0Ak7*I$rD6U|;Ebt%pg=DwvE z_o$|ir?~;2v^|p`pwoJuL|0A6_-;k$?(`ON;RuPm$Vt9KyYCggQUT3l0Zke~9pxo|IDcfh#3|E&{Na3Y8n|NlFDY$sC}mspcuwDYDdMP+TCjrXh9(q}1jY)Xtr^ zrB5LEFNdVqZ4{g)H!(8gmf!(0WWIDMA6Ll-V5=ZPR;Dl?h4U4~NyqaFm`Oy|l#>>4 zXR28z9MAQ)#P!i2;a33G62h+#s9l9aaT}v4`EeIAD}c(>O0Dzn5|sD0Tr4$>1+cYj z%#|6C>f{fQX_huNv(qj=F0*sbAca3gLZ)WU+sNtZE2K(xUH*IPeHkO6C@wi3l;0`__^Hk3IiWlUaCs?_SM9#o|qjolYixepxbJ8Yx|v zht}>RM1amlwGpOTHlBP9_k9)nP6yd9RwrawFOLMzP3RkLU+8^mWOyAQ7daRLL_?Mj57CuJFquwxv)c zvmS9la1X}_?;u1ypvdB$~4WcEfth&zh&W- z7OnZoYb@iD8e^nQuCP#Y%&7EUNo=1{wE#k~Hb{!E+6Dotg5+@Zp-@u&D7@W+RG;jJ zVZI2U1KbP+T&0F3Es3?F31LqR-Umn5UOr>BmycMb<>MA@8R1w%`*z*wk42phxM6iNN|Gj-GmA558OAyS7r9ox* z@4NDS8pmoEr6EjXI&G;G9~9?Msx}toMfSFIJUfZR&rIeK@*nd0U#gV5Ri{`hA%k|jyTDk&%by)?6&p0ExMcRYcCdEL;8<(i46=2NH z$iE14MKmd-O$~}@5t5Ygu}M6mNl9`ErI7!Kq^F2>LJ11PjxRwxVk%A>OOl;hQn$Jh)zNHS-R^Dq9U+zi82lUeE7|*2F+e0GSUEYvPw9gR+OH&{niRC3S%Axe@_EQ! z-O`ETte7)NmT%rEF5a@*vhF+4Yz>l>5tSZs&BXEYZP5qKQum3*B%iu~Q4LoS;%37s z?la#NKZfMVMkK<};UVeBS0j-RCiv)wR7=74_$@%_ZSymVF;Z%v0@c7+Hr5i`Hj1yU1v88R z?HdJV!!$wBYwmaFrjTIWQ1f%D=d>K7D%Y5omsypSIWN2CB-$3i9}LmVpt^3(u9Bs@ zVWAHv6bJOKtf!@8pOJ2DepbQAxWw!44fzM5^jW!$T3UG6s29kI)T<(?6$LkdX1L!Hm8wr)VL3N74i_QD`@<#|7-a9TylmSbmLid%0~Stt4#u4aVXb3p*G?aH<)R-Rzry5{;$={;+_qFcxk0~4hW*0$&FfILXMRnJ1{jxHyF}Gl#=PwqY?B6z4&SbJkt7_`aE;Q2(c!&z zc*xiXmuWU2aIwj$TQsWsufKKno+44tHK*{Q@L-(HRGq^z3mA^ZH)nntO0q?K5ZbBR2NJ5vW zewiPzCxrkr$($!mN-^KyyTW{--)fNLW&Q~^07W#khIWx@OGm9Jh?^fxRTm?v7@Iy) z?j-YlJi~t>viUe(<~~08pmpXQsvIo^6@RBTiA5r}$g@@iwA4DXI61<#R$7Yr;sFW< zX67QRUY@&D(hk+=eP_QQHEv3)&Fs~CBd_)5BuE&?Vc|sC zo_*}G$6k>1mIq1j+vLR8I;+u?U@oWhSDM_7*>{}dGw%ir`n5xjr^}YIg*!_Ko=>ZL zq=47Pr{$x<&(6z&XU2iD4YS(lbstyh`Q0F)gF6N)D$Pg0^;)U>`TCl4$J%q)c$S6M zCTI9;j?5d5oE;nU$hO0Kf2YyeWn7C%4i#Z$hq;)-Rp-43Fv-CyI*!_yoQ`J%ukNy- z*E~l6?g%8xO~}%-Zu2QXBku!n*R{1alof~!z#-t#-<4tYTCYARqv`FxfHmVRNMG_- z(g0U3X5M|C->o`G@_Lp!Ti*Lh8D$T!drqHA$nYqu>%SatXj7A;@nJ8@XsHxs=5x=g zzTMMU%Fv5U-u-T>&)V_28xS=v$Fn*z`NqCfUt_bljeYjlL+WeL`Xa^tz_(Z!=YS>O z)Tif3lZ}@fbESYcfKKGK8gm{QRzF%GUU@icYacDd9iEcYQ32;)5t;ltWj`uOf#t-; z=0($d=2=1omeuEUT-nu>WM0o^ny}CcR-lr?B6>55MRi@ONs-A1$mtO~rzCP7;9K?7 zItn(%yTCY-6$Os5@1hlbB#K-l&5BHZM>4Q8Gws&ta}?aGwHeX;=>MFH1maef(%;d13st_>4d3B( z^Va~H1sSIx?E?0ZsWD(Kz#q#_htWiUjsgP?tgu80y20>2Wmq8Y^TZZ-ak>^i+{UEo3Mur=!1* zWTv0I+Wdcd(%Dw`zKnEz&LD%!5l8|bY8jY43Gz*D4)b=RvU_!{`8aKBth);Q`8^14 z*7MopN{<(hSHC5G zCIjYtJX-d9TLn<&1!N5C1x}n*Z7#8z5;zS}A1o{vGG9!8_EP7_8DuN$Fbs@11&jsYt9d|9 z!A@5YidImxI8@J?H%a!ja?uGloEV+v0~F9@zD|;ecEHSu7Ji=;4jpoE8XR$}ch(#! zc7ycD>*S@%jW`2i^+;SG!Km|vXYiVTHoQKShd$1b5#J&Ao}YjZRDH7N3T>eq1Aw#a4T-{X`} zRlb#Ex=J$i1xZ}*OA-mSs{Bz%snqhVr#bYiU5*Nf8=9UK=0sMkF(xWhA)+lMi}AWrxf;;7j8ZAPIt@3NxEDw%ADm#hyc>L$?D@ zlR(6CjI4yGd+iGA(@Vi8uH(qSz|g!gXSyMMO=HddhnxpDRAwL<9ZGM zJ5A1uO0K<08`ry}$x(YkN^Kr#rw@EP;+@lx=yU|mn{#zyoFkArXN9~bd^cLXNj z$twxZc!xI8n6rR-=)0Ujn zZGtMQ{LarE5E8Kj;vWi((RamJ*)6O8Ic$j|@K09DT|EiXY9TrJJKTZA^6~}Bb9Q*0 zyM;qqj3(S6&R*+%?3c+cnK>Ns_~s)5HoezvB^T-KVgEqdqv9Kwr1z#-{tR%3@?&z9 zWgNta->ih!tIzWZ2TO-z*O}B+)lE~)Ie(MhVZ4{QU%h}6$*u1|NE=_FZq*gRiz=w5 z`7jbgkU!Weqc#|7ljj31^89hLJpX5{JfB~~v*GRsex_cbAF0=m1M1bfLcJclQN4cI z$m^kdTajyWpve_%y&p$N91r8@Q8jR~WnmN!HB|&#?^B_VS67%*sR#+EOOO9?c&x%6 z{}VDn1pQA%CigP0Rfm>Dj_eQl9|vu$mQ34EuN~`(Ozt3<6*9B!c3j}?c<<&enI+Fj zkVYy+wl00TxE)=Q>GPQ%hFABmywccw-8A3w$VHUqK)B!w-pCFuzsx?^F2%OY@DJs@ zSP{Gyqat+PkWGT5BL0Epk4n0ayNt4d<-zgdu3cuW!zw?P{@@(3e(fPf$Dl*yRbBH! z`JW4);{ujQB)=yxzO_3r=E&|xeROoVK}Kg}@+O(a{ewBeUk^nlKgB0Ch)jOka)kT` ziFAcTDjNtKkKV{vPr}tarQSUW%T=gwKr3ullWWNh9qg_I_!g>R zeH#iE!37C}e0TQ2|4PTncVj9uiTN(T69OP0a+{LQ216=?A27`QXvEO}e-{h~ATobn zH{WjEuO+-7-rP?1_Hz+j z=k440*#Pg==YQh8nM=z)+)La&{9bPGhF>DhTY86&?Dl$pvtKuT@m=1{BKmI9JDjs$ z(|%*@4wXAqMywX>tix5zg6Xd0W>=tGb;uEd0y% ziN;{d-oVZ6w>Vo42NoMgM0(twMDXlwfvGGp#cv7XbH$?PKJOY0R|3U$+eOvz;=zORoA`mosB6)) zSC0AQXW*`+tG7C*_eIywGU>vADY}x6Gv8XWx%oiKd?3 z?+UHL09U&pG#)o)hgN0lN9Fr9I?MZ(r@_17Y`*&BYnyzP(2F;}DxU}C^X9bBhU|4) zLaRLezoHnz$_GQM21A#M^VE4$!4Y}O*ND93GnThITrC+7g;ouHg*v-Nf z%S-!rvEWMlKy~7mLA$p>igvJ3cr2)4)U{cXnLa=c(BUCU;m0D?`pN*0C(?@nqlZ`j2NajoJ#gVp>Nclpp z{MJ5ENzNjPv4^S>uK(4gf9U%BlgEar^3}_!>k1xg__gtSh+nkK_Tu=qlK2sIQ{SWO zWyP`lMz!Tgj|_!?_tNr((kAOu`^Xwnw>ED4Ycs(cKa?lkB_yrf$D=xpM}0PrhC&`U zRq$AKHIMZxKJjiy;6?{b@%!#gdu!yCa=4Jq0EM8UTdBfh5ME<*9{H67cFDIndZsxj?T+NP>hon{<%2gn&31_dkCKB?{RhhKmX5@Er+v)^ZTqW@n- zP(BwbW-fuCnl~Zyh2|@VwCqV7V)PSB@voynr*g7)3D3J?a~K0R2<&8Z}*5 z3vs!|UGvm*`y&|hI>dN#81>k8^yQo>oO?wTtJ7fJpm`ry#AS~)=8;)qF~ZGy>2M(= zs#T;oLH~ge3)*$2vECCb9?~Pnye&KMM-e{c;yQKR6>{kY_G<^|)oVl5$k1rkubpjW zk=Bki4eJ+^;l{l0uKcGy?OXbseQ^4Yz&9G@Z7zA=$vP34Kwz42k@#?Q#3>N}<;T?M z4XQ5sHhwpnNjuF4$#vFxPvFMzlJ>HQ@tOYFu|Tp>H`u>YYF{^Kn@|a-qiLSSclZo_ zz2{iqoJMIXZGKi(25fhl*OO61J6L5th>t4ZkhQexibgfwlz2tN3)Xu=^}Z@rXyy&V zK$ZG&BZ2GTa$H7t z_`8PY%h!?v(;^p}wZKvYj^C8^jh3t(w9+DK?Fd|ez=;Kk2;CJ+dRn!a)Q>3UuK4gX zR<$QWqevTaBRNT8**~{5clhY9@`0-jQ2;b{9#O5{^t2<>q zdtPUFv61@YS6Bg5H#$Ia&V5HFx5-KnHds49GI=@W>w`7g`0DCdNH`Ab9f!3sY~9?2 zKrlSf=)Nn7Dkrf?aJQuGuE&O+V0?9Bi-`brtvtll`ow4 z>#DDdOn-TQu(*iB{c z4ivYAh&w)%28YQ}GL1}r*vdsM=hYIWn*Pi=tadh@7R-8WXU>iswLOr(`;5K%ACKtU z#uNp!L!8cjNjqF0BQEDxZJt5H*c)?gJSLfGeHNg^LV5EBmm^SW zc)^Lep-N}Fvk1C&H1nmZ>QJq-$~+S_EMuUSW}hDUR#mlm=9_%`v3(7hKzQozE_6Ao z&5xntwe?qq$Fcv4l|pBCk;}2n>VLLLn%7eV6)|6yXjG&dQ&(0E^n+=FqU=SvYquT* zXrXm|pFE}{&Vkg!Nj|ii$1$x{vTwg44UMBUDds(Y70^Ms&}~CR;5nS+4kXF=FMQCc zgdG~_aX>6wPi_IK*61E>&hZsEX%APov50#UhT0`MN1_FAeFu82PT@c95d+B9%j zld1588%omTku8rxdC0_Ba(OwM4c>9%?#L5(&Ar)RixDAXo_h8vI z4ZoEKk93|*-2&eUt)0~u3%Bckq*GY=z=XD>5~fq@OZ)gpCleCg1v|k^D;x#V@<<>p z+5$CSBX})w={;Pu>bAmRFfE`ka1}x~19}L;#A+kE!kqhCkfs|X(mtZw6_Q7{?Q%Mz zyLOMt%G_S|*o*30msy>(yR*+dZuiJ#G{*#7O2rroblyv^^=0mXg+Y*q6@h z)!am4*zZ|G#I;pfg zweYxoHAYwGpM2Hh_8DVeh#Wh%o`u+voR{MV;*aVdMf8D4&aRwp&fjf(7yams+BwtZ z6?jcvPR+gX&%m`=+YV)9nHZWIxw6ZcJ2bm1a4~Db4`%-mia4arMQ{6JklSivQQOM3j9zD6-U{--F7dH-qa^&9KeA+L~s zlaXnxOj(|<`ifhoqkv^m)` z=T##FoR^Nrq^ij7@OWchYDKmA1AxZNi0rt)NfS|4rq~5i(^ljn@iPX^_u1Ss_SNd2VMqhfN^Mib3Nqa) z6DD9+&i?S+>ZXh)rK#TSOLQCeJKhN4*}nIeM^zX$IZYd7sZD!WwURilJ^ zM9BLN>6jC&UHcj{NCr@0fH*mlaELG+ySJEzJ(hCoe)JZsY~^@<7u#79PJ_~J=uW8# zJ-wYTsw(^Ak?|_&hbig~jAfRgBRCp{gDk7$40FojMHQ9YAbe{~rmco>&UTdh+{=Tq zOC=n4wy{JENoM7oZmjU=$BqT^$s#QxCBqzJ zClUm#uBkH67|Pk7vp45(P9(Ai>t<*VeSp=PP7tJuDyYyMghwKO24R&p#iGWzmD7Bc z=2`DJ(UVjB&yDHsMU`?a&-}UKBiIuZ!@^dI#bSM^F^@EmOw-)&bkte1)rsw$sk)*R zk-V7!4@i4aSjt#rRHQF5*<6$1cS3We6WM!MT+wu_v5-RS{Rq47MEB8U?KBW8L;6m7 zEfScmujOjLKq9vvWv#l9UNbyTqRi=$Zd>~#{WjI=xA{-H%}XiT5XUkc;Vsfl_Kt;tlzzv?ol@&{B z>uRs0S0cM*OT3UhMf1m8nkD46wXAlEc2MX@cwF_I=Xi*Ens)}M#;g0;>Q8(E0SocBxU!`zqSTkL zKg-q;<``vX)Bv%B)W8Q1lpJh*n5}n|yUu(R!tIzsndZ~G z>Dt~%zbKRK&CY&OcdNKqd!>b1B_pdQq1I;HG$SRXYDRl1D?*{4;b~&U z++jO6034PIk-+5ufZfMF=eW*5Dn!=BbbqtaDuv~DX=sV9xgh_ORnx;)8djw`17$R6 za_iySTy0*a5<6y~tj&`Y3LTJQoHVcb`8J#mR=}#s`Xd#L<f08a9SLvx%CLXrkr?a?c3H3&6_u00{#}Ft|0iIdOSv}eOD5Q` zuLSl$Uhie!+6Miq7#O|*=(7QRR`@#>=p|YeO*#YEvwCabE)Vvatd0s)h>=)NiQNMm zDC|pn;D=lWcJdy0k{*x(<}W)I{^eKhgw%&)ov`KAQxAZvm=gX^bi(b-PIf2!JDQpQ zPYnPE&HGaDPsLjL$-#fz01#rMO*WrLBgdvMOI}gnt%F0*gguxo=O0&LLORV-G>vG< zXs^f;)ttj9)VE`{+r6^$$nrdwF!Z z1*+VOPgZUbQckPf1i{P+R>?yt zRijFXYR+EaEsq>V8TFWPloRGFz2;9Y)Sb45#3)O1IspCjpWCH*&5 z`U`AI?D}tLu@=|9rva6_?*@|OwNg{r&E9idcARLdF}AA8Z-Y}|T5!d8hvVYKxTz{k z8LJDG7a9t#gvS|2&3_>(%lFdw!QgtVv1hdI*x-V&WMg==>xkyLw0T>0usp-q*Zk?M z^%Ip@r29LL^``f^uF0Amw;Ky?ZN5l(Zumv9 z#V+=gQuK(D6OFEM+XAyi$<2qIn?+Szz+ry;n$ywTna!yRYH?K6BH2OPW3}j&TDYYa z&m30^#?&^{SEU{ptDU9!)~AZ8cF2vKN-+O34IKV9j8bvF=3CpZIK(fC``oGHo>SG} z-CD3gGHWTkuS)VZ$&A=qSRnfTCgZRSd`Ha zEXocR<+T+R1UD9fiouQZ1tB|yN?35s*-JL$HIb+@jZThpiD}77Pq5M#tV|A8rUWZf zgOzE)%Jg7mMq6ceurjZ$vLN_GbXrkDR^4s4TJ%l-a^l9=Y!U(aO{&J>qx=O^OoNBQEuJhv!$D zvtMV1s9{%hQD`+Ql?B1EMrmn9aDur4VMul4Tjm2I6!9VkH8u)MQ~!9JHeTgl*BTS5gt=;ZD3r1KkEOH zvFFm}S=oV4^G?^Cm$t_h&25wDhgp^>n6$$-7xfh^UG4R5?euPLes};ecb^x@cE=69 zV<^ z;?M`L4SR~coB3S&qHHYHY9Fb<$7NR02iIuvC>T(I_6Z}P)aF|PlX!iXx}DPJ zZGBEg{2w2Pu{P^usIYW;2LE7vUa&s3zZGYs*f*;_#e4VN;$D^N-CR7w*vS>a;BK%u zRUdQ*p2Y^|>KC!US+29Oywkj!BEx>YJR=gUPj9Qw4%Vjy>$BSG3&NNJF%L0x!{_5D zL(?sMR@7o7Qosgbh(2 zs=)A*goFN@zuIQ@CmN#LY#=-+-2gVU_e zzXyljhLjx-r+;o$aJo()@r7{O#0pcvX$%So!*F^;fGcoXB*-K7V`{L99yN?eUU|Wi3 z$^iQiL8}d%XJmkFXMkFQ3s}T!4b$9;PuzLu)}rAWw>~v}s!&i7?XN?u2x*ecil%2JD?rOE$yz#sG2W z^J?t|l$X^j_UG>@Ao+_5XdfRk74{Tmk*R~VML&BXl%BxO(rZ?^IBnyRtXDh1VqZTdzw|0D$UEhxf}QhyZRISW_I+y3M8wVeBm11T#5>!nG~p&=}$X=xi|AJ zz!Tn!onvc?9%}1AL zVZqS%d8B<6q30ErisPc+B1#fG!z|4G8~n%&bFdP4c1sI~AVs+O$MCe}oguH{9TDVcFow?}XM| z3|($vAqwf4CnO=)L^pbL|XHwDmwWWLSpvd_>(LMu$1sc zwB~<^^SWT#&v4X;<9`XQsZzA&bIHXZV5y+s9XNW4(Z4E6YZ^w=8u_eJv?i}U+uK@5 z4Grkbjv8ZIuA~>y%WTL^|GH^+G`2_qMUU) z2a+LEqd4nyIO`-?ULC1TAIV%3SNoE3wO<;UMQD6*Lj7p`#XW{@M9N}bbk_2A| z<6fdA;md$vL6;F)Us&~=GB>v?zN^CA$UZSEQ|_-a>v3jw$qngui8LD_dYsWC2U4(F z_owWOR-lPdRbigP(uEmN-=4t?ex=NU`uYrqHlE~>Rk>ym6{6bO;U-K~vt`2L&RC3F z!DuAZ#ktLS7otyCo`zL+?jNqsWzlmz>y}Gdx735}V z#d%=R-X|er+kIEE(L24nI9tpDsjXfP+Q%8Y>`dAVhuWMBS%v;KVh7?3*&L0@BV=qT zDj|d2PAB!-vSdg=V-Mcc5p~pNT1BcD}i=DPKnE&R8EW#HVxIHqC|iA1oyY{WG^VZjmfu*3Te9h27lT{he+t~f^99;B zh#siy;AhI?Otqx(>84BDiB$VRG_7k~;mJ7B(wWe}Thw(D+KW@#lBBBzueyxNv?#MM zX5&lEG?u+vlndQvI{O-3!aemAWx&zM;ugNyVS2>>xVdCKN`OPmNIKeK2`|9nY#2Rm zO8=n74TFXgvqFG!)0v?dT)BeE=AmE9Okjt|+$ACA7BI86b{TV;0O+d~IXny|$BGoS zrW1FG4{&hN##@0_1Y_c5cTQ%)^%wp0h}{M%BK z0;ieFhNFG@xQYgYVlf?MSX3|abebL}mZnPcjZRA5z17E_ajpJogd9+nP1gIqZM<|t zM|S7Y#CTWeN9-_%!6jPjb944Xq_2gm3T=oJ3o;c= ziK2*!VT}rN+<)1GQv2F0|3KgzdzBs022>Ple^E@&%*(IO)1C{TrI)8f!YR>ctMV*P zSTMVUSn#Ye0EKP+{_~1$jc&RB->c^GUw(yZR(z#uetmQ`Klsh4YT61m0z$3Y0^vfV zK9~E@Is!^_54p*RsfLO0en=M+A#54oJ~LFFQW?=~357WYsuEu}Sdza!Puq4X*a<;a z{H*BMM7NHy`1uxAVWSv2$%q#W)y5iSXpVTCPBcgTVuCPPjxELah)8Dw3J<}u!TiC% zOw>)-r%1xAr|FYZSAL(K7eVfK$=9{hDw@7+ylft29~1AA{B=Xx>tZeE64}Jw!6xwJ5C`(#tPT06>bFFYe4+rN?j%;F-WM#Hu7J z!bWF}RB4=k9_HbtO1Haa-7ZzSeN>gu231vBkjW7YzbAi?8Vy#5a=)!=HPhVrO;=l*`};>hquxmP8+5??Ffl>@>#*uU|2|C42L10a8iW2mhO9b( z`g+A8^MSpJC5&o?j8qjI*8X|$w=zYg+A1C=kMq$RUmnN*rXA;z-22bX<{(-I7^SdPg>LY>^Ae;CflswL{aP4-f8EDfhQq3mNN%E; z`IcQ`t>H@4JJL9RDu+bm#Pu*{M8YYtJ0H?bW!CPGaRA}~GJ?vbSdw5$sCN*4Rr;9C= zIYT^Fziqh2=ErHT>0#HZZfelPEMXu=%$6$o@tQ)&!Y!)=1autdPYgi9B#XR*gk*$9Ui z*)XnCblkRWEGIv*NrWD46kBiu7<#m3{l72yga}z-lthk4DyHG@NN)7nMeFZ6^&QUO zglHZNXzymfo4SWC-O%~&RL-Y4nm34PG~aaE;1E|z&~3>)0FXp}kQS%p>?IAY9W$!6 z=wp?;5+ZD)O^+a&7eIKMflPAF-f>ebfV`CBPtGZm+`Wz&#jfC#858J?zo$tJ0)^(2 z0d(WRAJKQiJOHHHhdSzH^SxVQ)TLPv6zZ~GRGtIx$)v&27HxuY1S>d}I@HljbO$*{ zA^JGxlQGhvR z6o>i4i@zj_(_A?^3Ip_UR{&M!x-J$snH(4iOx%cdP8xKpd$oyeL&xerLRQ3+R&BuZ zH9RA$UybP?qkqYGim70lM`e#f4ALs>-FVOknhf_9A@oHSn&v{SCYv)?#JcR&AIqVt z!tlAF&;S#4WvGnfCMN4kN44!!VJ-mOI9OyXPOryy1aolexUw`Yt_>G}HYYqa0?uDn z^p=}rMK3yO(KALBEvG$BQS=X<98t7>5L2#*xpvl=56)N07;cOJ_H!nhRWdp&GBp+_ zi~R-jn%Vf(ad7Bpu&ggsW(Ku)f@KGkvQIHVRc-#GSWs<(KkxNR1>_2ZKed+~Wxj1b zdLeS%wmaNF7`N z5dHy5qdC+H`FC60vC!>q$up(fe~f!D%n{ZEN{*O*}4 zKznCacEOm{Nb@>%Gdp}9-`5nJZhzN=Pvg5N_Wdmu9le|?T0K3~F3p!>@{b1MImsNs z5aLdAECo`Gf&v16KW9^~99E5-?e?|`4I$#YdBYJybFrtSrAx)nHtG&pb-&!)N)#KM z*@3@WO*H<|3ZHvIg{j0yA0J^ibJ5W;)w<2#8yrgI|`J0GM@@>V2Q- z9ZCHk;TO@4lK$x;8ZnGmf>&e665MHj8HL!1=+U@QjvZ65Li1ofBb?N{E`knxCua&; z#*+(Ky!9<>K z$4Y+j*f*<4b~rXnpgNaDa}NLfxk^0$!Mr7_2qe$KgJ+x9eeMXv9ogURKZbyGiU3$P zosk686Y&iq0x}Dv*A@a6juBM5^FIw--Mk^<&=MBrf2#eB&q}+Z(>H#$i4C!}7XnlJ zfChaNU+Ddn|4_6w>)lOb!sj+6h0n4guXC}xFe&rX;8`f&uXoV{4|IgT-W0baJRPef zAt~O(bmi~B&M>D!hkZn9Bl1Vf(4r!)EHTA)LdfsqcmgvD6Ct|p!F2Eo>Xd0*Z@dv^Pa&u6>*KmiR=>?lVeY|c8A}9S8shi@L*oRj`Wdr67?E28^gW_I>TUi^v zzcb_tFe)hqF8jFCT_Qct`X_cxUlu|FFl#3{JUR$F6S-e$h z=Ori9d6LvQu^=OGff%9vGeCoSikTC=?{gV5_ffcnyh2D*Qhzg_Wc*I9!%L zPnvzF<8#$}ce;3MljLOTOmZm3p3^ax_WLIhJaD4Oo@uM9N2VOGdu&i(r&12)*eMf^ zPYHFT=H9y=q^<0S-MdMSBlGVu7jR#p+%jN)>U@SjgnP-^k=G_<7xU4b@16}8Y4eW9 zhiu#-d}jFfCnVXpL%0c!{hXMB(>fc%PmpI1)#-?Y|6SIyX~G%MP>J3YcS7N8-dREM zBZKVHe}@9~3%{D?+sSV~zrXRDKpW5JSIF;je%1VL;is@N3Xktw@c6;6WAIpZcoaN- z$ftq_@ZkV~K%~N)hAk$HYs>Z_(z6i(n?51-d&hacEuOoN^K>1;^EuL*WfJ_~xUdt| ziLYdA!C_?1|Di&lAt#hsK>FI+rugsyBeIM3{hnW#pNlq~&hH!i=J6}zSI=(^KYL^r z!hcoQm~Z7P`go49E{na)>Dc;Si|y_7^=Fu?8)E#^r2A!d!cNmb{}t@QV=xJZro-%b zMb0FXj|cOyT)u72 zg72S)C-H4_7JPHs&gf*-IffNQQPbFE;R4C}xonvlOxU3m*deaY)8d=l%OKSfI2(2= zJW2WamWfA5#g=LqJr9cI1f&|l#qXHcVLuTrubuN-bq8QDn5Tn_&EctSkG^g9NXCcn zpO0jG_}&5I^HLf3~>+|1Sxm2V}FT3+K^VaE{fnV+7%9B)-2TsFBW6hQCKX9vO zbwd8)zEuhO%dT)rHR8H=BHBLlHfj?Ov-B~&qrU-F^q8-I)0!%W`bD=&#CmvM2`hED z%dJg~Xs`1f(RQ0{&=NUXKY)$(LSx+^<`T>&KsDG?s9}zI)p9|Na~VH}yPV2MlmP;S zzjnAQE-+3cvZ7ko98TCORKQp~5S}0*Nk{%bJ&yd|c(ZxkD~>B+@BJP6!|Jp*$h9t= z4jtzBld$9V#;Cc_^VVNkQdL)AQ3&o79p;cfV!ZNJ9S8AO<%T$_v?`m8vQkye*&FjB`NShNbUUCwp^_v*da@=Kj^OiYR${9GmoZr?ER1_4JDa0VdE0* zBjDKfas`WTME?ME*(GN=x%yS_bB*i4>{q$l{Mt8Qnd2SiQz{!cAV>H&axIKeoGqPN zoGX}FXJTK8?m{q=h+$GDWsF^L%4uL6fn|f>U|?+i;sGrozw98E-^g~?g%Cj5K45`! z!2BCuV8bi{Dm%RXAx70%Mww|WKF~I?s5Ho02LbM4WwsnEvU?oiM=8tOBDyvG^*o43 zu8Yhw;03{QiMnlEr?+JSVd@f_lvwc-RP#g|x@7?ImnzaLaRQt|G`pGCidTr7Udb)( z?F{|ksUZB|H8BY1-m4(2_o zF~Kt#<^rnUWPoGXHl=Yg`N2iA}d zNeEg#?&iF&Ywp7C;wer!BfQgm0m3B9-R08Wo#sO3BVNxlpYr+^^_RdB0&ghK@USVL z_mFdmaJc{ch1KUy=qZ%dKZ!(?3!Qby@sZ@54yskfYPtyP(K{*KjH499#m%>|DH?Cc zJzkAJq1BC!&oJlLD39$t%!>^SKT0Icj`Ub8QlCUBpg!hAiDWU8WgeB|B=b>fAS2iO z52XgfOM4xb)f2tX_XO+S2_%F{o#ABT z<*?8Dd^a9^qKERb-kAnwswH#0A@OIxf@yc&5HBh1=B2e3>snxRE13!9|oX zy%~t;9UCC~`Mv8Im)tIvY|f=(!Zt4H-$Dn+rP2iWkj zBBT@Hyq<3V=g#xqKs6)2t?qLOI2U`I*K^*^ah<=Wk?k*ITQsjOCBUX&pRxEILWtVl z6@V0=;Em3eC}Lk^9_|#ii@+IkFr4oQc;<)|2<@!)y5#Wbd3DLip28E6K?OW{b;q=X zyt>Z=aZjRxIAHV`ZDPdx{XkGb>V!T3R==d_QYD>kekt9lE?gReEcmYpu2R+SazV6@^~4d7()_3jr)5XpKsBk0;fLDH&qQJm0m?naKoS+NbyT zdH(o)9zGv3=bZh%_S$Q&z4m(f*!U>g44B}RuZkBJ9#H2<^IV*jzNW!+%mz~zaI?Vl z*9R;x#gkxyJiKOxzXMEvO@b+IfvH!6>DzQ;5KNM+x7wKZ$v)@)_ph8?;!edn-{B48E2CSvt=+)wVXtw>XjhY^&g0Zt z%XT$EeLWw~_pvF*<%+SRK@=87s~XU-0-jS)^_q7%A&pYErhFR4Cs?o4V>Nqy;Q?eN zd2+9tJ-dotv{*}&B}q-pIZba_ zifdKWJ@Bu1g+rXCKiD+6Q{1m{Na`k$k@axEgH!J{{{yK=aG?2?fpnw8Svqi~liSqV z*uh(3@$y(*F&~O=YPia@b zCCy1fJL{^ibCe`bL1fsWi}bpvv4?Bh(Ji{erEqwS_1yt%9=6oR==MYbRKFbW_8!0_`=aU5S1jy%CnsOxO3+MCV{H$KT*t{p6~jM&D&>C zN8h_dV7DGYi!x)6?;|{l=_(D~2v_3Qgko#fj1Aw{CUivX1{Iu1Nho!A6!+KO<{bFA6_w?q)8T3Zy7tIk}oRCTS*Ra7{xI6I$ zC5~H940rXEEF21KZ{xRVU0k(_ah}m!c%W{0P2Y#%#t!Df*b|QI;8!5OQTDXhd23yD z=PmO-lihfE{{-YSGaIkqmx$<%o#bnNH?2D2z9ifzptK+EyV5EQoz45K zyKyeXBJRf7XtV)ifw`-_LT&wb0kD)V++6~K`eA%(?-!A zUZM}P4f#F{W^QecZs!rr@W0^Lmqz=3_`FPnpoV?`H5P&z9}`4vci>C*T&5yLVlre- zOq8CizJ(u_K2_P+U`>*Z6QvhB9au$OOtaQxz@rsNcV6}0`%US(Zuh?hfvi3Y9IRUH z>QMi2PzjTWgX(zjEW#~GYgTSMXH~RG2&3*@u{GChlbbtaSrBJK5*hFbqrLBkdNq8? zT8IvZ0r9m)G$_6Q&OHTJvpRERn?N_bO_m?7SsL*r>%lUHigZw>NmCttrx_(o1ql$7J_ML z7)J)F^5_FrKT8n0y~P~a1oOfF8NvK+!Dkc9M%k!@&W(l))(tN_poySH$rK{^v%f(E z1tmX&2)^+{AZ!ys$@bYqurcyUB8V&)N}`EiJa}bc6EtFw3R*Kc6vcjyWJNY9O);Kw zTFckk9HPxao=yhcTbs>4Ln>o`lXCnQttV!72!Z^OP`Ouh-(>Rs29-O@>eJ^@xq0Bw zC#YO0AB7-D;@|44>|~iziM36Gmv_s-D?!KyNw|<$i-cR`T&=%A2ze4_(cKIPa;a&f zMJ_Weav0VaY&}B|`D&3**)buX!?8@zY=`MFJ`O)D^vNchxV;T;(_|BgT&B?TMp+Ay zh){@v=CJkVekw^kEu4gS9``nO0Od&*Rg3tYRy|SK8*xy|5|i!M*eg&%bV=l*HGwKz z*h4mT<&e#`1liO%x9RQOeRtpE(uS*DlT4k}+MGE;c$|0=bkjGJ*s{CgU#i^?4gd$XvCAx1B~Vhp=65ov(2@ zK{4&Eh_xzsX=svPpm&3?e&!A^g=7XwljPFdxP=0G@qA)~9n#?KR)ZEITFn93M%g0@ zcSqA@v;EW+IHZz`tV)mu3I5uII>}g?HxrjN@MD(W&;A~izC9JC*PQuji!oXycn*6s zIJTjDhRv`%c%G1#r~Vs6`laC2WuXEqQv)NP?6)B(8qG9 zc>3YN#6+{FA1b6~>rj!>uA6qP-U{lsFyFdV}6wV`hueA*c)BXsL zHq&nLumT^=!^#6QZlC8Yrd=xe?72=d?LzCNxW&9DXuT9x_fOGG`fblkJ-hlmPa8gs* za~WTST8$9uDW~QHB%3vJA|!8;`fL_m)5s5#J_kk8zF3VAzN*O5KPgJH*KJ z>MHa=Q_k%}tGLOk!fM-shoO&)@aA`E3Yp;H2fGLluTfs;r10=dEIRq%KT0QGo0vi; z?LO!Y$cX68tjJNHR^SxYJ@oj^Oo(H7AH=jIyiMjMtT~c!M5IvG!PA;MA(BV_29fNf z%x4hE;SUWGNy+xvMDnRkNg{b*zDPD&y!SpTn4wp;V+c<#EaFg}UgM}bLij$xN_`B4 zr`Mw~^xxPsvrncuN0^6l~78zqmSkJZ1mq#4rBLBbf`F03SYBb8KFsEe%LLLL#@BxM@b*o0xO zsE$q%u11fh*cyzl$Gf?JkAnU>QOghY2wFe0_s0y4XCi~s(RQ_XKu)B0U#K~vPix!i zrM*DzKAXAG-LRI)W5W42Cj=!en-2unAR-}kVESf8#5&06fPn^MXMQZRquthW?36W~Jd#NS*Djy?y%1k5lxX>^7 z&Tymf1V*2L2!lymLULS7NTj$WA(8R~I+nlNh7w-ARWS3&G$gx~iTC0%OEzohwyjpM zBL99!b03aCu@-qagbE+mViMh$7L!GDnV*wBzz=zCtk z=53UyfN}yD#3rf0#v^-%y13+FZa4wxX|j+-D6%Y}1V!$oSb`#7B#5k6zDOG8(QAx* zL}-!(`+CsgWpuo(V@ss*Fwa99z13%(B*bOdvQS?K3{p|1TrY5*!Dm-E4b1snW;*;lsHSy+m(p>~C zB;NtaXDzBvoF6LV&2OcDTKUhV)OgyI$WDI zv5ZOc{E!P-P3o#U7{GnHH;cT_bDJQvzOU1oYXU(idN6yScwy!8DNbx>$8Li z!SuzxeL<6iaYGZRgT%HBI51;pP&jFZSxW62rihHTFkO};opHIv&U*W9nlmDk|Pyh&kt`BdS0GU zRl?kAPgtWnceY_IzTcv^OQ^;fzBks5^giE;BF1e_b2PNZ>wO;AEb=Bd$Zh$CzIz0* z78mpoMEqQd&QpvUOG$wF)s?y0+q4wOIr^0;tyA_ByMRbMvR;YEYqXN}i)6Kyq;=zA zXvqaiom%`o{zUNo>665*EAKstr;7QjgYEFN{Z4duA_!@?eRwXmRMxvqQ~!uI9*9SPsXG`EFMS2F|_@ z1G7Z${bD39z9Z|VtVXL~9c~*kXu|u$kKGS7zw36zMjr`%E#@v`=Q(J)NTCVH;|R!P zj<)p+e0V9!FjN*KHX)j4+GI+ur@5%Es#cNL^dN180ev+sflYq{@pZKB5Ch4=19n`( zM3h~v+q0>A0_Y+p7>0|Bqs+nsqF>l5Dh3ixGdO&O%(?#NkK7g~BtkA&Hio)H#J>hZVcQ5aIweY}-aF(vDFy3AolY)f0 zk{_%`BnH?5qqMiIShN~u{yK8=R5$?wPh@4lEC1j&aB^uAQP81SwLQj3Hb+#D_wz9p z`r0w4Sf!UA#&=0AHdj_32YXi$S>v|)ru*qvzd~8aKvReTE*+qQ9pTHvS9*-n*!bOj zuP!f1^wQV1ZlQ4q9Ve)Ed55vrcYHlTE6NI5qctT@6uhIQV6cnWt8t??<;@p;4NJT-^uEs6pHa{z0zX&E@Qz9v4d(@X;+E?1UE*lRm3vE2Kz%5`I1 zV1{y2(06F{1!$y~4y>JwZda%^PEo3L)xSgqp{0izYg2GI6|DU&tC>1$Q5`1mF7k+{ zfrL@sAuK2}L2T)44DmuuqF{r@3hJPxhmF#vzFQ7M_)4GS*R>z@Etjzm-K0~6Cw$Fo z(nIae(I=QoSEv>J&Ta~azSircf*^WIpl%1`6>M9bUR2+?rkGY{$*f{;*@F$daoCQ6 zY78e>IK0aex9i%0(M_%w!&ePRh|9yoTo1lQMGPynRK>yMMWTZf+<_X@(qpbxqx@-f zo3zG#=xaUht5_yDRaz9TM{nmCXaGKlhS>X105Aa^=-&BoC$2RUK>kR!VP;tI(%YdR z;L>7uvCp;ocz85I3omXV<{FM*W~ezH&LZ49+Eg~h2$keGjYzk$fu|Y*y3Q_{N;SonBBxEqCu%y*ne>3I{~B5D!6C@m!=wjbIF{mH zsTQ}Y`_xOiSHT?lb{%`LlQqjml0{PU%SbMpg71Yk1RTbO+k#`M;wbyA_{>SmidFFX z4N51~@JAbKry_O7j;fFaJVTi`kw`oxQ8LBQz$JcxN^%NHAe5qeGMV1+p_t*VE5Q(} z@lQA=bf{;TYCJfZComj5jwdIFTF*3zPp9FyD#XW=`99~g<2>b<$D$~)I-(DAlEXdG zA}Xlh|1$o6ng6T!|8@Sa=Kmf1zmEU){MX9E>f5w~Hx~u@XGHG6D1o(w8GDyU<9pf3 z`TdssijH<=B^t--pD4tZim62#HWz5OVtrw}G{h3(P_yO<#Ny)77v=FHvAEEfF(zqn zkyYnhQUSEj0e)g^p?waCA1zT!U&mrFIuq!07G4xDTH@=(={jkrU01@Pp421XM%B00v(wQaMt}!bHfC1@<8Gj5`vPoN zh59j%ATF550!oJ9!BL;~&4sgnY(?achK^bcz`&5d#LEK9TbD-{0Q}|AMRZ5^1>JZj z0|}-pl*-J^T9;U}A$!n8gSg;hOZ*;M}&p7eO>iw1wQt#&fgdD5~8ByowU}UTOvd(8G?tLkqmg zw91WbnJ22H)3|pn#Sa~>q|e2bw0E=IHYVLk`zSz74)gasu$mm^E*>)F;lJC<^5qNf z0M23l6c^Hgd3ru^yXFeKTX@t~6-Sl)QY<$Wb%SNZRO0b_pUDaJ6A)k*-S%$& zC4WQxivty*ehCQBe_i0BQ2#1#qgLFma5l_Y6|~%oBUoqBN<7P3+e`9g{-bhDP|ORO znO1_l$o%PC9EG-yZRjt=?f)HkPNxzV-^n5Ku)MXQUjhQ$Azsr-;q&lB!G?akrZ@EC zHNBx9ujvi_cujBU7bo2P%YrwCZ}*tLk%rO}`9u9*4NML72iRQt?+W@PP3Bm4LS6&` ztRBg5zM2@0V2b`s7C|!tpviJ#>eN5uuh{#HKUWhEp&WQ|B|L?Pd#m#bn*ivAlD`a- ziL%@+Wn-BMLYsuk^0$;t#j7BsV_5N)YsY}JpoAEhRC;g|x(=&Ij;gSDp1D`zDzpk$ zp(Rso-*DKK(XcR6JrVy!s0qWXo=-#Bx}j;h;(Xmm9t}#nG>_1(ne^&9PmR(4(NF1O z!)&(hW)$Sn?r;~2QH6Y~#mIu^hHEd&H#T@0uBZ*Htg^=wSSCjP^L*`rqOEs08{)Nr zOSUeH&v|2Q#@5!YZ)}a7YTr`(@tijT=NZA?c<^Iz{yJJb)vCXu@*C_CFNu2;Hqj0` zZdrmzi;rLwe*=xIXqfE~Lqr=3qZhMa>0Bmdwqs9hEt}*S5!{3l9%_EiB_4n_y~ETs z+?jrDXm6~{`_rB+?%@_eEXgNaqXr*D$t6DZ-57huJgE@%KC={GBOe-jHi_#FYFQlG z9V;npqVD2@U3HGl?n{@!C=3QkgNPywIzuYNpAvhY81b^brfKiMnwSeG6C1AG2A}Hw zY`4MhkY@6~hyU{2YyX#L`5&`?<-4^>l;p${3>pZi8MJH|v~_30hgRmS8;dtRwixf+ zIE=_J0(w;Fkl`tP$1k5V;KeszFoPW@9)P7R@yO;8y3^ypdEss_*7m%0^D@~MBvcGK z+$8;cFln)s6uJ|qIqz!r1dx!$7|e2>m4%kpDam2+0##eltv5cz_!ip@hnj-4kv(^C z`DnAlUtk)I1Jk-Imf;3FW|XZO^k6E^aMYX|p>j(J5}!jf#21aUCM1t+6Xe!4%ge|c88nuO0WEV;m<5jY#6>mF{| zO3Z9EnhR3Y=6PE*r8L{Na>E*j6dO2^=WW5xj(lOC)<)p5i(#Qhr#O--H>%4*vwQ49;tELd)Koho}H1@HHIpv0}8{ z_L)}4>C_)*m*%n1nDRlp?U-e^J(9E4)^o~0n{Y6js)E@GtL-~Zv)Z0=n$`B`)2y~- z^91f?h&iz2Zl2vv?;2ouDYBR$zCAJ?}+#H zVMT!@Bt}e;t2-M`YQHoXSBZIc(t4bCG0#p~kMk~@`0h9dsK5;0zBO18_J;O&IHLMm zS7&QOS&XpvxJ{4u7wu?Jl=dcDHNRt7TO&kKG4@BSU&Q7b6KI9~M`^ZM0{!(@sT1&y z+CjxM)pwrE+GOTljI4F!>$9{Owdg-Im^uF~h+qzrPiYuc|FNO|m}9wjvkskFde}Cs zj*fzPwMbC+1Pf1oPxIi(6c%1x+6rKLv9BGQ|Jc+G=PA6KC8)?b>;s>NDaTaveMw9K zki8mHywA>Xwbyz43`tFeRjk2~FbMC3p^|qSF_KPA54yA7Ff({6z*|>+w)fe~2$vDA z7wkZ+R-TKT>P!Y$H)B~{&h@Mx5BI%|M`1@+awB{9QXcB&;QYR4O_ulBHarPM=kaMr zPTa~6%9FR7U=MWm^LPt24VUaA$Ua>XqS=zACy~WYmtO# zn`C(>k>&Z*vPeSoF`maNfr3Ch?!c|15nM^tEA=c&71kZbL*NZBJR z5n-*%wI8Tuor{oe;z7cuMI#Uam$sMYGD!||F79Y8M3(qJ=MZ=&a3<-Qqzl7bAvEcH zPzxl7ChZQo!b@|LxDQ1tJkS@+H9A0h4ch;Q=ci%l|HE@=n8w@xyLc|%M=$Y}=CauZ zwIh-bS7!y?z81^d$T06Og1Ihs;aC!vqeX0CenI!y9J=gHt~a^K#n|LVX}3e{LDSS3 z`TwVzT#syWx8PD8cLa$|&M&XRsD`?WX&JXR3aYM|q0(G-xG!>=u(r61)b|no+l;cW zTr?;U*CH|(rcN_N9auH`aJUIH< ze9-y~IE$~Sg+R8{b08?c1Pk2O<)(MZo?DxQW)%W#|zYQ*m;x7mnX2i_w6Q!}VKt|siqd)3{6~n)cck_=}30zksu=GFV zRj@QZjFX2kjD~V&I|DgtglTNkTah;pI!96YKg~^=%rhVKD z=EUGyoPuyPs~Bw8Te0L7aq*?oi-#n;@z-m6E7Z%E==LL}3U68r z`gOSIT{#W)J>qpcxu}z!`gA{^xd`4Z7o+>eCm~Wt2MRyoV)P=~7<4gu^4BtET#V+3 zi&5(ggv1T+qED@0eiEQaaq;<|TK*fVzIC5=aC`Jh)%g*+z=+R>&tYO6Q0(1{q| zsjJ6k9ICg~#8#T+YsAFwH zHnl6sp8R_ApDlNsg~$xGE*~T@=@!Fw$Jxm@OG0*;X!HpZZ1qGc1e#l0!($sxmLktQ zS%E0?_PCFKl`8f-b}6Nxy^qTzniF_=84nIZfo~lZj8hiOXH-P31 z&MH3J=jM4Yh|5jiAJ<>-x14TH!u{mgzCUV*n}~LD@VS{6z5}72<#ThY_}rYR<34K4rXZ? zTSkXY;;wQD3oT#923q9k^}i*HLigrah3?IhLen+q7g7kXTX@!#=rbm)OR8thUiAy` z%<`<+tK`7kse78aWvt!PeQK@nOPO|0Gq;RvI5{nF zp}5T~q`jdIH6H^|l5(c*)w1XVyc?NS)qWWyMU`AK3~{NsF7YA7rDnP`*lI2lmzovY zrREm~U22Z8U22Z7U23M|QZqQ3Zd)xhoV+0Tk`x>#{rER(AJRk9h4?mg9<`q(?Nle* zIEbIoyJuVAxO=XEW0bCUzH~j*?+(6kx|2=3m8O=RW|y7uiL%UJN?8#^C%rR`L!~^$ zJJWLX76{{GiBk0*tagw?++iftjb0LO`PHI<%f*DlFL5#gxXs6h8_-@qH7A%w98hm# zBd_N9TQfp!PJD#6J0)gQ0c^y@R?gs`j91AQ{HM^{uE6NQY~;8sWQqfi1ygfwSiYjQ zPwVIe#wIGU4BV}+!S}360#+i$PH?ldV5(_NSiCZ4|g>3E$k2CW&5%Y>`m2u`sp7_iY%DK8$bYiF% zek{zmq>bPS2H|a72YZ$1wZ+VE^@gs92!#)gPHz0Smk7NkSZ#f_lqAd?0%wUdhi%l6 zHNa3<%YjW%N5kcR!0%JTx4+{!`;WhT*ops=1J{Ut%)kwy{>=5mHvVQ_{2Rp&to!w? zyKfF>&>KIOEZ2I5xCbQKY^1*Dr*+Ps{`99h?MM=)CDGJ?9X%TXP8s+dl;nN`(wqS0WSs^PY$9$_i6`47%WWHPKw z)A3?fw8FhHWBu5oiL1}R^LWuh_xiIpdNy4lonJdzJ(nnAwAm{|ebB%XEd^w=M3{63ilEPj)a zr9N~)DgKbVE6!Zn<5w?_Nt7xAzTEDT#}WOIKe+9EHkmkqM6{t`${yk%cO-C@UoEw& zMPa6N00)?MQ8}~Gw-|a9bH^V+Uj7xC_zWVdWrdpNhT3-#ir`>eQb~LGYILrsj#Z3* zDET;AihNOul)-l1nQfOTa}O3;l`Q133gziSPF;w57Ace$Y9|h)$10RZm4#BMqw&D{ zf{nyC3lJ0y9m%@PhgS5(o!4fE{dvx7@vsz~1rOSIVB=qO5VQ}-gtKGP6IqQi$=cYo zaet_ZJM0{Uf^;-HvgvC;%~>`fer>L~vr7IcKR0=n>oUK}$_4J?s%SLAf4{mBPOa~p)as}VeQ7h`4A}>I@sBXfl?}sMksI!-VRks`?SmkRHWbKoIGAYh!L86}Jk!Qami?>>d#gUHDJ~Awi=II-R7YT1Tnc z$S`JCtKV~9fex^d5ud?)%O85e`lV($S>twb!01soE*0FGV6+W&Evp^zRkIMz(XmEQ z@UN9XcW0{Abk;`l5i9_~I(=Jak@hao3&HIPbe8`Rxf00`DvCdD;tavLvMSF^|BZt+ z;{64eO#{X$F$#M}hJIx>OQ6WOQuLs~(TlxXUg5JZhDAnuxIR`<881}XSBc)N#Fe_> zN>2fv(mYO=C`^0I+kE}2Z@20gQ>C_X6w##hVX3*?gVw0g&bfA^$dh?2XrU3)MYW*Z zYFSCVS5#K1IaS~VQ7`Y-YfbQRsce$_ea-9Aj85lLPeH%0d3A|ZrFj9Gfo!FBAe7P} zz$A<8q796YM5HB0#-z^f5%XCL@t;t;-7r25BK$`F>1hN>A4Ora7{SMMa zpum^ydUIt$b7Vr#mRgz5dJmiFnd%3FmCw_aC+9Pd&|VPWY^k4MXo{_ z7`0R|pxC?RFDV$%Ee4s*e5i1#08uPWR`w9>ns8q8nH3s~|&=?@wu!tP* z_&S*iq=5qTzVplrD%A`3lToXU2CgR&>^h&Vbc?5$^e-_73`EAmL+ihTB%@9Mc^a^g*a9<3FD z#0tHQ>{Ut#&zftfR?z2CJ<&+1^I#6AOAs3gYmzP3+UosUtL-0hD`%tD6_*KWsk*UA5&3b>^bPQ<$MM$on}N*0ierE1jsp%KBF& zw`x%2-~8wdDP6p(S$Pn)=1^aJ%oD^EBRbg+`H}j+M2;Gra1CEx0;$Gy@&NC|Wg61X z9p%?^@mJ&weq@x)bv19AT~UfZ(06ub0pgWKi}Hd;Lw5v5qJ_LeQ4^sJni9G#gH8wS zgG0rtVvc*#LVy-npi}&-mhna09*+5H7mW(fgfIbxMjO0`mJ1UqlS-ERq+eR3SbH^# zA;I~xr9CE71X`fwi}>}A8nv<$2gABF8Ru^6V{PlBGWE$cy@r04NUO_PHACs;{G&RyJy~zbM&l$ieD7Z~+-&uszp`I5@C~uA~OwGA}j88GA(jgAB!4f^zlA z0<;_Vt{vAf_tJU6QL;Lhs8{Z@Nl+lia+w+2EgP){Tqf><%#T>@6*At&MIe^d@BV<@ z?;)#o8XXoonaXe2gZLI@?LlOu3_@f+e)f9ezosV+T9XT9*ydsh!^k$GPhx=*=DdWF zy4o_Cj9e81$&Jn$$YJ>>hgcHMBKu56I;n1QA_53seyc>S(K_=zCo7}Pd}|4C{4ds` zY%Wcht2UYY^!lwpQJE|jvtAqZNPDtuYNLPVF)2FG521No{wdIn%@KiRx5xYQ8>hNC zIJ?hnVD9HNOk^#1U!6O3rQx2sGSszkWhk~0yC09Y@kR=mj*q+>$h^`!ZA=4*&hKIV zcksW9|2-?cYkHjg>72!%gELopuRHgCooz$YN^gIs2rpK85AIp%{fPe?j?9zLaqG{S zcPX6E#{8AuL&J`HZ~Snj*Wb%?V5<9dnrh{7l75&cG3KoH1Ecur+|*BmJ}wg0r@h)m zwrL&5y~}9l5Iwjq{WjfhOZxZurN6&xa`3g8x_ABN16mEm9KkH|(t@s>dy19b(TF|5 z*Ab5JJEPCPx6N`R=I`a#pteoJe@vEtN zTg6-edXTf~HbL(n;hu>V#EC*&6<8~JjC!B5iQS7ZbW(cZ(?^rpEhh`N$nT;MtUpm3YZp6!OL^D_@^5Rh>y5_(kOmoF{)K$)5=n zdObZhJU_>ePVC|4*KeHaA#dF{w)_QEe&x67g_&Fa>ie%p-{?BAYr$Q!t@=KYk;=L5 zTw=Dqp8ga#AeHDUs8!eEP$K{=b7`JKOVw7v$hYaY|Ml9K>iZArHjH)da^gQjn$_3X zYN^swH*W6g>58HCkL3rwmTr!JoDl(h7^%$na{Q0H7V27Tx{mzq6YTFB<9q@R_@ z^xZGh_wJRSpvIT7``B~$d#0YXjhhrrPxR~t{>UvuruBHRfpE1Wlp|Tf+%F#f)x!}w z6+*d-#J3@D?T$SDnooyr>Ee7k04-uBb0F`({GRkm)4s064sFxE2k047-o<9k7IjRC zn|(IZV`|oY$@#AdT2wGp$edKIm7ANs!%_SgrZ-2|4B^n1XC5CLnY?DD#8lz@g?9Fxlax3uUU%_?PQyk9w7IS~X6q^<@c@ zzgV&vJ@VMgrdmU6@>I^j|HAzsMm3(+(+hZbsP9zW&8Q^pMS0j{X* z3OI_}A>$x||m=?zZS;>C)*E%Ta1xGT*CAg;|IxtlT#Aa$k??lK$)MZ}p+q3?xjhXZIomcX}+EL1tC`sjVu~20j9uez;v;Pjh5LO3Q5D2$&cQjNw zB~(VNO1+OyW_0Iw%9phL zt?yril6{?{Aa|2hS=dkLOLzP-^)MCIWnw#sL+u)1Qip~iLJ(wZ5^-ZAsXO(1nWryG z`NN15`$Mc7BBkSxor*j3UW(hTj8LT)L zY4&!K4i+9fziz7f-ubXB3~IKzo+rL*)E%LgB7A6fWHT$t2*ikHS>Gu##b;@2h)mID zVIJYTe%#bOo84xR2Zu|x7%rlR_TpRIrk>woO~}r7L+J4iiaH_@`SBA$H1b_*Ed{<1 zX?%%q74hwoq=kX9J7Mn@7;Pn?0UXz#k*D2`1p)GNhcs8l~o*KzA7hz7$&d5%J`U@IYHE= zE%&vp_F{{$7Ud)l<}I-^0v9P)vPLSy8eBTGT#d6kq>i!MSO7QQP_OV3o?#xs4*@NO zni?bw-W2_URzl-b0t&T(6^gt$(zruj!Eg0d{Us;T*kpalRoCk;d4`4_MlQH#k)#N= zF8&Ft#1&$N>THm`1qpL7(`b)=nK`!Tqla-@^zpL*)fAkpF4FxLF`Q}#gBY7VvU!(V zpceVltFXs^u)tOc$S%@HuizD*fES?hh!w{ffwR=XlL-Vdf1=v-i=dq>?heGFC{UsGTbM=?cht99yeKd3|S5XP>-2|^J;Gj)11cgG_%!~*T?Eq`uj(Aq5 zc{SJOGU}<;f%84N1`&OGIfPELz8&&DTNb-qvI{YjLYj@G)C6N;ehs*Ub%pr@3sqh}HvtWH z!1$QktohARUhYDzMGh!xG4Qo_p4#YZtOlD#%p9@^A*0#Wibiis_S3sSSk~8GWPrX? zfiYGZ0!#6LtuLq3j6T33V&B5w-=NxjDX_7*9*!JDHL2nD!*1W&!AFwJCZ4H@jCt9R zU3@fL<=`$Z(k6k@Yr;g@JNbo^ZOW1$C#V%vS0jrC0QnXGMp+16q4uLVNccbVDjA*M zcNjVB;W}rPx~g6%GVPpz0ep*0HU$_b>WO|eo_^~&A{5qMMtRb&O5dTTM>nhFT~5IYIf8Id0aa}ZPf|%)?vP<<#pgfw$(>p+nO#gz?+GLm4lC#GABjF?>jne!J z=|a@}h4J{9T(X)oeSchilfXJ{5)2L31grC9$1_f;ukauzxf95Ms=^QVP}nMCd}JI( zYS5N|%4lf<1mu#CA~n{Ys%1bmMHaGIO zwGG&-vN2&%rTInziO*ZvUV3T{Bw>Ozz(a}Fx8c;Q1^^7QjJ44n^i{)AnqUNXj#ED* zn+>rmm}~A8ISpwCCwM%aQl-8ESU6qymk#K# zBDrYl4Ab9pZF5!;czn*H`A<&YvS^l`wrIxOm0UD=>bqoW7ny=X{XjqJJz`vyNS{7! z{iMH5rK#&j1kCGl)h)WPUOf&y98T^WzgYD-$rbG@%~?G{`E*XboL)^`JAWo>V2#-Z zjBFf-y&i(#q1ah#&sI^gwL3KQKh%!`eRW?xQ*as8rHhW^j8Ic?-JF%M)naXTqV7g* zbSE+CO8bRdj*rRKNFsKV&fxDkb!u#U@rx;>Pc|x9m138M)B+;PE~cf{Psw?9+$=fI z7GdS4Ws76f&AKxh0P%@>#hKGZ>>zM_rCv}_pGQ4fF#M^qhv8Id$sRmvrRru zV?>&^ejLXEAq#6qs@@M1_^P)Cjm@0*_0j4qbtsvtZnt`q)fp8O*7I63o9g8F)58!- zJoRFmjCzH$qQbA12^JrbvoccsSmV)+Bfa-^(>#|~cOT;y+QwD(6Wns^Cl6`^M*H|9 z#=&SN)f;W0cdlrTW!$=#Xo|gtyYV|n({cE+b%B!*QXZmm8O{R2)-29`$mluI>b9x%5i@+IGvK^?RG`$+4Ka%FHECj1MvA{X4A#ek|2oY7& z@D$)q=?-_%?D6rwSEigq=}T(3!r*ItPeajgY(v|e_=YN3$c<3&eG*Mvu*g{S-8q*J zKj=w;D165pN#2+BV&GyKurn}fiQnoEn>DMGSX$Ee;0UO9+7iENL~+CDarKQp$X1%N zLJ_m+Q5^fC0KG%Nf@7N)V{$b2XN2Co;?~_WP^iNL3O8ZyZ5m)`s+RXOtoK}i+6;LC ztcLp{)W5rt>1VM>(3aIPwe-NNjAkJ6ke^fU5iS}Ya`j+5H~Pql1)gaQ-px=Ix+q&~ zuex)a^gYK{njI|mEzJpX0`dr~D%`F^#vWkkt8i<#Ci}6@T;vwOr31LpZT3zQjTUpG?~RQGI~|O3z1#QUy8HyNGXUl2 z#EV>MWS}4RhRK+ij6BeSA(V6P-D70i*x;Nd7S7TMcnCSvA~YcifN*5}A{D>|NuEfZ zU3@HP8~=){G)v*<%i zZ-x31o(_x`!;P^IpagGTLFg48jE`PhqQ`Sazh$v9FS)!%!`llXp-gK z{FKgSfxb%p_yIkiTr#sxnFORo-n%3G5=4TshOQ08q~RO?wMh4U-I~brQfuJ>S1c0I zPbZ4D$*6*E_O7|uZqDB7oI4^on!u;Njx~AQP&CXQ9^^L3#C=$k_k{-a+N2y;hrOJ9 z+jZFv-@)K6tG@*uNL*Zcz@xXxKuu9K$?D|RLdfh5>Yow6CJ&Ld(UJr!TO0izhao*- zT2ZmUx?dPypNk*nrjnx4?2TFL)1kQt2VNys@nJ5atuHxz+0U0w-;qG!kbKtH7z$w- zz8;Bx<=Y<^CE+AJ@z5f7e8 zz|NU=p%D~q`{AKePEhnzTJT7y{FuIteH-;WOWK@RC4^Z7t%S0E$_>m28cPuW=cK4b z{JFSIs}4%6Nzxs)==;!Y9W55sAaFworciDqX(^Fz>*jqf46Wv#cbdsB)Q@#QeDv2_Pr`*7AV68e9^ zogQ|0;ad^}0QH|>jyfN`=9F^|iSVO!eKnz`?4C*J_2eRb7tUYe-g(qpx*s{>_w#Nr z9oWNx^IgvRuERB>`wLIV>$W2xQz`Bt7P&(=c^qO+pCtD@qCquaH(*YJsD-*p=9WmX zUMrJOCQL3o?ZtUQ!}RAII#8i1k)d0(4#MNk!dH$~eX+R~UH~n-f+RSOJ=XDn^VKDm6QSgasT9U4CpGW)l6lkrX5Q7w zyzlIm&JEhFe6kN^$-IAP8JaiLod;J5JUBYzk1Q@esl-VcLPp2RaAr|3JD8^`qlsBn z-7rS1m#Em^LaHO>N`3E3GCke!6*}Zd(Nj+_m%$69mXkui%Aq#ykyO?&cO;j0f8tvi zR;0d%F6gMNpsUQ$U_&qr zw<{T+Tx;iSiybmyU1tEFy|EW=^|h2 z+DW1Mym(-&l~^m4Ocu4>lew_uW9ljh(<`BouUU8s0-%xJ*-$^AhuC8eF-6MC5Ffpt zjTBZsbCrXQ1{WlP?$)wU8;2|?Ns*m@F#WLZF?_lvGKeX%alj(kJSr~ySB;4h;wsR3 zBNgI>vvi;u!RIeDo^!t;-c-g0mWE=J0~MljFrc!}02Q@_A#ky%*@zeev2=a1M7ETe zLW!W)oB%p{)VFm*M$E4kjuP&IYfM?Y$Tq60)koY9zJw}ekL)l9rcn*{b|R}l8v=2R z=nLRXvne{2g`z&nM+Qf1(?!>W%U?DYEyBD|WK_o@r7u@hRabEXz#Z6sfWKP67RZyX zaHN?W9Bzq~?x8UN`IK0WHMuL)hwv0N`iS~)K;Kj~ zUy6io?wjf$6%EW24T9Eb!Shd~cfUR<#~D1wSkO0>>c>*Zvlvn?rLvQyM3&|X-`F?R zsO{os!jS8`R`v4vvT@dS(V45IGs#2K&TG&SQLkrWG-zYPAn)f_Utn!$QT#ZjY*1B2 zE>QIm5}K~LmE~$XlO*$po<&Y0lXf-@YCQ{w`u8e(^u{c$b+kA1=ETBT((b{%DN3F8 zMdO9Kr)Y{e)T2_+>eUWWh=QlFT<(Ak6$;gWK}k<#Woox?;V>uN_HIT~$YG2%_DI<7 z$ldo-1h;T_jqnr|;ligmo6F|E7%#HkGL1V$zfX{A1ZBj!CX36L8c%Wbuawd;FFq7# zlz|bL0wB3`hwgNv{vfwZk@-_26<;+o!pl5t#<2D$jOCska1BjG&UIf3EZ9^8V}e!a zrXp~ME0s+}+(S17Mr|shOHILVw3m4{QH{BhhkN9qmWPl$T*rfK-{#dkY?g=ln~MJ3 zuIvH3vZvFm%C_?xoJ>YxgUmB|pgD(`!$YGyWbz;auJ~GxY<27gTCwYun(%UunG?U= z&2Wu&6;&hxBE)?@?01IOqzzbIdNoPn`w3&t51U7ZSAa{ty#Qz)q4 z4#TY_!Y@=X=Y?^9b$pB)Hr+UT*LOMg&U%TzkmvLUp944Ee?;`a84ua@04J`BYA(fo zNjrF(c{EFD<% z*bbU9+Kj%(o|A_+%&Wwp0fkw=dY1_if6meoMsCXPX6!Rsisl47kz#jA(d-~6`0xm+ zK@i}L@EED1LWL0p)li3DZImZ*hBGKbt3;2HjR?m_K~J^l0@dfV%k?~rlE}C`;n~_X zY4)YNamdwh`Q+e;&AXqPjDM~&-pyHrfMh?}nt|D)c2;vr%k&D6J;(~oPDw7?N?hxv zz?qo5;el-X+G{mZM)ktZ(K+(n}Q!|lP#b2>*%5FOXdy>Oos?gA(vQndSA$>P)ojT53DR@WN}wn z6iz>GRp+3(C=wv9f3n%|>8>j@324&OB{Tn7S-C>%>ztA<8Cyg1~9CL}WFH)JzzNg`ed0Nvh7Pw5n@kPmP?dmhw z{Xp^gh*tGgL9m4N#EmX8MCjpw3XvcL!xd||!V&zjIjTx=-3l<(S4gR;DLl&Ka(QH% zx7RRxK83lbxO=4(VQUq?}UEVJY)p~^4$3XdjovYyUHV$#prs#4pL z^fF9T35zBMf6CSL4J%sx>Jh$*h}`V4*rt>nN8FHZaARUp?(y67bE&5Wiwj?0&}4^P zA(ycKK1oy07TY#o&N&WWy3BMSvqJTQv59*NJLx7n>5Y^m3u>CjlCzUFOdCff&EoSu zJw1X*v9n-*sKv!WxcR*_U$e&57JQK{^^}E2;VjtK6Fi}P#zjYg?yCmojL*>ssfMwh zR*m!VDqz>WjnC3pS|Uqrmh@G9Q94@F8g)|^Mqq|80=W|{Mu0J)*L%;^0z)_<7Njy+ zFGEiGBZLUGsq-n4YS;0Q6cWy&LMm)MC$+*^sTCr!|I`W(Q6#m(MY_VoE=JG(wxP)9 z7?hmB_>;tkBi|ri7j{;TU0qSh_x<*x%p|y)&_}A9vfv-ohgX z_Z@suj(RVUjk|vD=IuO)Wo~Vc=xOiOdfF`^)9rg>^-V>tz+a3)qrAKD_`$u#-moj7 zNsLs}YQs2Ahf3kPOUz>&JDj%{Gd=CAxqsbiS&Zg8S>z1b#4|Z>G{d@mr~Pp zSK!$k5%({RS1BHuxl_-jQ9qCvwM>AquP|L^P-N6?1?{*dMKPr10@+MwA$W2mM z3KqRq#8=DdY4WDCQX95l%rd}2V5y_B$CLrf z$JM+xYO~0kRW;T!SgFuJOd5!yw_`Q1Y7zQ%J0FzQ{~aWh7%5x519{@@?y1^LK(_B1 zQq+@H4&AoDE}!NLPY5dQEz~Ci><7U$zq;uo^m5b}ZjVb9EgJB_3H~gU6XQrZGjP-;y{v`@GQv`pS4B$_Xc0$v+m;&*M!!m zm-HuL1=XXW}EQIp6!txP_7V_G?Q%Y>wNv zCvc=-&k7Xp?4k()z%-6UXxt8eB`HRF9IV#1JhiRbI_mA(=(m^xIpE7Zooxa$c!8LM zv;$TG`GC539%v|*P8^7^W;#m6zdV$z_!=sHftog&Wmsi}c8DwrH57P!2=O^3;OvRI5*636k* zgJ}EenP(ytiTmgZ2!e@L98UIY11t&@Nu{RPLjx-W-QhRaVE>-G;< z$Q9R?;cAp*pNz);3G<+?SuQsN)0t={d{!rD8y_>ErGCLY)XQI{|2>IY{~LL$31=iw zN&p->)wNCt^SClISM9rBFguX%S6v^FlgBas!CGUw*1)Ug2z4J7B^CKna2t?h*L4*h zScZvXY4+-wc>5B~H(mMaWaXj3$~}oLr&NCNr&PYFdm8eQ!L61-$Ez)qs4ZjZYF$O7 zu?s3CZu2ieHnB>UIw6gPGvU)Ye6lhi6e9W^Ijuxu#qk_&>>?upedO;pQD!3+sr=pE zDSw}TiN7oF+ZNM5k#7C-u;>h~ysvSW{&`%K<5u4Hv*-Bv&u=yM@MDy^2?WnWL>_v1 zXxII5aw0T}2dv;OB3aNKN4JG9^hFoz<{>_&gHto-6AXl!ctXpLuUymb(sy3L(d>g> zfrABxO=AFq-hx-CapNqkO;Dko4MGs#{YxBmDg7;VIjHkS>RF#5W(o^V6Ce&E zxZYfIg}Z$ksLPH+)`Xk~UbJwQw8V}MaXGlxqCd?43u+XU%GsnhV9QMJ(8Lc&mU|wR?NFTfhPvEC>2xBqY>ax_9+Fu!-sQrF zYj7N2aetGees~!Gt@UjBSOf-Zt`=ukRq9r-SgWH=6>nF<=ry2(hd-0-ydkcynxn`0 zYQ7TrSuf#Q6Y40_=3^OT|;wBY-1~t_gAQ&ua$OK@7zK6ViZj{ zv9v99r60@S&dR7T1Nw4-8uZ=oG_ zeGi#bXcwZ)VBYLfLS+6602y@J6Ad%u(ip+lk^?X&;k(m z(jtz-Ho{6GqB)Pc`qL9v3HD0*zgX*cu-GbL<0ZufC1hovwp_$|lEkO=a^Y58E=E&0 zB%}G$^M7w>{zq(%sw;A!`_Hi{NpTn9Ycu4(OgPmoUQpYD9u1;u5Y$ojFrb zG|BJ~UqP;DG6*uZGVCmjFN|&mbA;^hg^0^*>=`dM>U%>QSzqV-R=C#_-px{k(&zSd zZa+72>+BmjGO`}B$hP_m4QN~krWqUE<|T;|g;06q@1?y9tEE)R_1Z{v1~EX8Bw35` z6O^ufMHDpxOIttyDs)o7`k|hU#FcBPTcniP2$O(^zQh`7fx{Kb7oEGi5^tWke-qWA zS~W^N^iqONnT0-r3C+TDSGW4}r2?xSZrZJ@%32%{=I)FGpq0MnwO<6@Uihr6YUHyI zrT+CwnRX)qk#-ct=Pg%oJ`XpONwglg}j6@Md!x3&KW7s zt@LZ)XweU5y@W6d4g?>u%KRYgF~2u>1btEr$%xj$>y z(8GpY)9gnV-9MS*d?=Q_emxA7aVR8K)yoQ6`i_hz@DV$@uVoEd7m>M_5|^wG&u-kF zrk4;2@x1ir>=S)-(`(1DKZr4fE`@6pcoWJ|)D^1`AF`M!!@n>qo zoHfI)qC=|qU2I)cNEcLdebDZJ7r!TeZwI*j)s3(8ez03Q;4O&J_!-`5m`esQj7+qj zL;LT2O8e$n@Uq4pNokRwJ1KojJ+D-1IEjQzK;^yfIl6qJ*(t67vW@)_cZsjVySW}} zQ5auYG{?JnHIJc|G+$@1Cn}Ov<3ofQ0@t>_KT42QitT?N)#5axCz5-+=!Om8e4>0H zFoNO%EHu-6O9z4<73|;N?>ppeJfA8exs^so!Cs?Tpxhx)j$~gYU=F4w!Q7JX+b>{7 z2_ZX@y~y-PZJAQr{$OuG=l*^H_Yn)+-ur(2X@l6oM|%)IlZ^Ht9_3jEq37lw8ANa; z1JJW%55kM1BnH4#rLFV^2dAnfht4uppD_k=!XU`;^C952M%c*+0oMwnMPFgmc~(6o zXPn9`S<)iDYrhQAW{dCez$2#mhLi6nHCvK6 z=68B`D%xm%g4_&)bqe z!PRk@^65fGMd=iN^fU9__IKtx`FG}TqCiXwrM@s^gu5bSJhg7+dTX9BUtItU`tdFW^ z$cDs`L+|%$sHb@wG9K}smGZ%@0(=PVnwcDlK00r> zhMhaU_8L{V708rbQ{zh)$ygwFo*WB^O?L;17RdS+Z2>jF$8gy-%h}ENvh!ZP;IUyY z`NWiI5^C&MO{EfUiUOnM$So-KJ)1v7e*<+wB%EyYAZV)3e*8B3j0 zeO<;DgPo5DhgGP2PnbvFtU-S{=xhj!!3bfZdLnCL}t znBB6Ocrf13cS)_Q981RMsM{tx9FN)H)9yUf3XqK|8FB{5Rb!e6=8`=`LiivhLL;Pz zh%NP2&Me|<%$~Jza-I|Ai^ff|3WAyHb>?k|v_xkX5hMPAPS5-uj!=V{LCKxsrht2@ z14f>4o7-q>R=HD}s|ibgrSCxS3geW~y6IgBD4W$DbfKM(El$g(H|cppRx>*aGMy2= zBf()lOi}SyY35An$vPBp*QMdx!exGts$54~G=fTZvOE`qTU%^)CDc7b-y2R4o98>z zjE_YJtGqKFoVMj0b@2t@`NFKC(j2T6o<*IlZZenastOE>J^|sBoj%RDO0;5(W(IJs zj7j@n2rls*4PFZuI91fYZG9tjCk-iuwfs~NDRav?(J%8}cZ(moxaK5O_!YgRK?$r;njXjlS)u}6rFB^@L)Hxo&2f0|`5kFO|52UuN^}v2-L2yIVcf&roO7taLSdpKS`oiq@t{bk81OD7`Bk@IKigm#5qgG)LV88^RS< z50$P&b@a#lxug0s>MfyO+;4c+ez9%_k=Sq8>S;K+QoKKx1=F|WEiykaYLDUaJdi61 zMZwI5);U}9%weaRw|Gp~sba3uH{?_^0Ms7FA|zswyZSh@OBgPgsfPM|$1i8nNgd&H zYM1-AEg8BaYBw5(Mn~b%O>fGq7nJvoKYE8(oDQxY)>h^$2(_h|BYBw4L*J{RgO0wV z#wnWFl7VLR6+0Aw-{>Zq{8$8VRh8<0QJZ@P8vOu+Ytk$-owX6qtv9cR-qqbqjypdi z$8eovI610Qa?ny5abLGc7m$3srcV-`iIW7RD^)f?D572#yVx8Eszx?AD_Awv@!RB< z<}p-oBuLM$yrOcwvU4QhZtrveQqZCOYCOV&ocA~}WmgvNwi27|B-cJyGoH>GsYE<@ z1k&3w9p(hq7bO@vD}*Rf=)gg0xs)bTzNPwR3xKq`C>Prs+&G9r!79`=3|;MY1lfIL#mN~p2)1rrnva}ALWvvY*r{`q_()R)H55tLU9B{Ya+=$X3+bi# zvJIC`Fg^;+o*v9-b4`z|ank0Ptz}M)oV_V)0auBe4@eE|t{zx3dc*BNYe5?p1gmy% z5dt1vfD$WsbOZEuZRFat*`>L7xydLsmQFC{6JBlx)*(yqmg2lKqwk2INZrjVe6Or0 z-t0qtaYtDi@t9IxT@Jq+ZOOD?ZbQ+GptsJ2QUcB$&&t$o*k@e){C{7_@?X)|5^qrn zS>g^eAz|mrwy;UAHS!|$s1D_7Z>!k5Oh}pP9h+098W}_CR10Bbl3Aawb^#+OP$^(& zt5Dw!4bEYP+cSzO!6R26QYyL zzREa;7lWdQcrU;0M zbX?z)0CLYzAXfn_Izy!A+H4k8sJ@30HZOwoflZN_XR_Of(p64DGa#z02AzC&4}#a_ zFqcw#Q4s|5Kbu3bf%O;C<@1OTI9!Kr51!moc1o|V9+XxD{#7chxwAZb)ya2j)mfhN>mSf<74H>eJ*f&~Pdj|Mz#&gmsr zk+wsw{Mt)j+rm${^f?`{iZInX*6a6O#I6dLc3cglL>aQ<{-cBPRwFJKqokEZQ zg$AA6{e6C_BXb)?>QCtKh?`sdPMrD>`;jf|Nm7kK<8zTRykh-t*4_m^s_JU^p2dt`YHL4j zOItxu(S*@Z(n!_S(iSzO55_R{xdciD)#`MMT%Urtxxl>?cWC zpjTwg#oVKyLx1nGi?Im^Y-S4HW8)m9?tU7ar0oyqQ6@5fa+NQl*Kk)555#aH&IYp` zD@Lh6GG&^T@)Ox=L*v4IGlL_-eg5FEa9>eyFgmKJD$K!6Bi2t1|AcS{*Yb|gMRG>? zM>nH^kP$fb3`7AfHM1c-kh8+GMnFmB>3Pr6N~tJ7JnVY&u8jX@NbtM#zd zhIi!PfOtcQ076?*6PdCQFO6R1jt+}1$~JL%DyCf0kVF;TEnNP}1An$D7m1jI4Pv!& zg*i#6apbDfjX}+7F#2$#5!3u5&DtRH?OmsHx2oN$x}#~@1eT{d?{>~e4kwVJQY2_(S&vlyvFDUW=ubF@W zSThUxdSMdWi|YZ4Yk{F!6 zf|ot*L6@Ms%9sK(pvpHjbZQk;`^YNe=9DVmEh*v_*B##MCNi`awy=9_)6iz||2JrZ zC?l-#Sf+Df3x%8J6|1vWQnFNe=B-kNn_d}?gk1YK5_0WDv{fHGRX52Vk|SsZs?!ZZ ziAOVT3lW-!XLDL>(S>fm#V-BW%>vYkn?L|Z)Zd|t0t;lh)Iko2#AEo_ z0xbPavkV141SAGU=!4n@ZsGOn#B z>Fot8Y^lt`Fm^IeswB&*(`@mof=h#= z%Bv@&oYJ4*eYZ{^>!eKn)XxAjOAw(XAx65l`b9zB<;sb$A4`vVy-%fa5YbZc|Do!@ z`4uqnL+8bcQmP8FgJ%Z3#j!PV!4p6by5@d+)Vz_c(#+@@*$d1q$eC7;qb+5siWGtr zy!8yQBbHv|eQGrFXl$y1NjPc@p_x(W4c8?q+7tXqaao|S+?*Od!hIkgmsN+4Ee?K1 zVy&?-PYoYQ30)oT&0IFWiY+I#iX-wYzGqtP0_ELjw<N ziJ(YI+<&~YoHu)_O)n_eJ}_81BHsp9l0vGoI8W2KJD82IQC2zQV)TCUX!!bcL<I^30@TsiBq9Lf?EDv^kxatn(O5cCbHPzY7lqO+w3M4U7>fXrjD4W4eiTc>!zb%8-m%lUi zjg%@w92Qog?(k{uksa~6ICP$4*>WQy%`jfBGBT@t!v%-z6dY1a$`TugG=oEShA>@c zrjBh2Z`FvXg(evh?R@mV&Dua#gyRBwmNY#hT5^T0Fh!#a;#odOadvfh)h#)wL8;+ z#LZFmMR4m7L&vfTv8HkuZeLWt!%>L3VvC)nWdj>}e)dbT~WO40WzGd?M(%v^N_zBV!uB9C8cGJ%R^4{?yfKKclhpsfPn#eUaw?D&;HhuXsIKF(M%H6{P zHi|^?EtA+O-@y9h@(C(SqQg}a94P3CG1TayiI|E?U~Kj2Zprnf1-_v_eWAb>i57Zt z0+y$uMN*pBaQt&(@BjAR1Z346+|E#)h|uNu1P1p+H%*~~wDoj$h|DrbiNAt6f%eX@ zJeyKnO@_Ozb2%@#yN?u-n6ezv$i*@)yQ2@xmh7ml$sHBwd7d}&EfQ3PSEbDIMg(yX zbT9TsaQWe=_ArrU>OSUBvI^1z)d3uG)0x}4qc^H6@YbKqd%(A_s=(!~7hBfGCaL%t z0g1NAG=juo+!>z%BNOlt8fOe0un=|oEX?LRf^8<9E8LP^cT8q+Rg0l(54WUf;3`!$ zTt^#vEG(4^WJIj`BL-E4H%X1jN@;c|Wj z!`zW7rkAWd*yxi|%GG>6YJ6fuWb}gG!l(}5LPtMi7cV1k!7z@atxzq)ypa}?MVdO_ zp(*f=L?XYKjWsftXbbDxHI%8Ty@K(vS!ZcY<-ZUs&oMrV-jkT7I`SGrtmF{QRlWkN z*P;9>?6U>WPHcKr(R*f4x}h^d$v{Q31BN$Aq$BiC7$eQ*AiWXhzX0@1N;IHc{a9+y z*>oR+sk8E5Ff$~BHM{1ZS%#kGA~8&CCG1P}{&W%RiY>!~IEPybFIRuyXe#1>mi@A{ z4{fsI!mhpq)uU=y1luesr|#eZK(HUmMLZ-4L7gBE~RWve*_gJKmUuz^K zpeHra5!J<+T94!j#7*rXs}-?jDb4S>t;ErFQ^;;)%`jf9GV;QY&gKo#kqZqSADWyP z*&Eq$Z%V0(uA3prt&iFLBP+Q=&jA7il0=5KxKbC3X)qeFaZ94)#?5NvHRkq1GDFUZ zz-%-!ktj{M&R}4T^chqXjfpU+amVi-BwaK%L0-P$fhd#Qx(YTL7p#1IWex2l8vGqt4p9!fJS2Gczn*_97BJ;9EFVsq?yJQ?&zt;1Ck&bv&slJ zd!mcnhMsS$e5<5rObQMkOpKSE4w z1!g2g?zK3uy1K#19_5U$lYXkPs9nG}i8NUg7A)8(NU7@dJN%LylfkQ({-?T+agI+e zCVaKe1OlKp>|8=WSYam$5KOs6Yp6|S`d0# zyA>qXFVf2R%EYn`XBZKI#c2AJ_>+3D)%`mern%}c~CbETjLItR9PgEu3&^p|6C1967O&24T(kXkM)2AfB0F0*B zhHijsZ<~`b!qn50=)5;4cK%UlR1NNyTHRXU)>_NqgL7m44af;U%N=f2xaI?gw;n{# zc7ISXn^49`#O1{nx?}EqD1;4;9H_spmD~lDsm6yv1NZ)lL%FYO6)}k3v$vJ8i5nhF z@dgXSNBV-k#u43{oxzK{H+w=uu}|7%35K7JBji_XBP-kU$l}VKTx`E6;VY&Kh2Y5ruSq`+{k;S52%nZ#CLlize2El>^iN z3PVtV!#vEiz^AbMx);*xX>xPDTO5gGK${LmGfsb`908jLCYJBOsiLfjek zxKs?lWnhm(&9Zop8Q(b%FUk-4R@@_h<;SPFn802OH5 zelLszDj!y?wmigA`GdT}U}$yM^@$ke(sofz(HBSqCAkxV*!h!hyjM$Mi{>Ld4pA3N zDvMbbVn3x~h)?7$=*L~sk89r-KH34mL>OZK8bNE4(l12R(cp@QrCh9Lmo6Kd86UaZ zl0^_sL-Rm>pmhs5`xz$I2{_ps(`crT5MdT3-~r%md+eRD6(uHi;aS=S4CX!2f#bG_2zdV z@_eDJ;F$O&szN%?Y+j%hM6%GZ(~58!q|V`-0oWzIe2gel%i8D7PMk|@Q$5zkV z91tBS(SUj-|L7Xu=kD<30^mVunHQ>fC`U?dp10X7FEwa#8pL0K6m*67x#~Ml3Bp z@_v~%s|!K9R9idvgh^0Rpf37eDb=l}>m7m_r^L_A1Et>8U+Ss|+Jzp}kRG8YuCh!_5NUgN8ZDFm~01NW>HHy0UGP2a9xdr z0wdL5k^fF~@90h6If~>;@Blk z*d{*`3S_Hm2DIag(4l>Qz4}{rA-j*0?Xo=%l}1iWN25j8P_B2G=Vg;)tI;atdVfTX z`;*7lIv3k?!+<$9GJ@>u>^eiZQ9R=0F46oZn~k(iFK-D2P_N>6oS65sZO>N-xb&kq zF)cPM|AnWew3%y$aLb1#$-<5Dy2godJl%G6ONSm7s~K|h7dpG_IobHaGlZy{5f6Ie zmss0W_$-H}d899)jzywIi|drNLascq-y&CN*Xa;bnpO$87Kv}o$rnSq1s7@x4qqE= zdsk@loZ?h-l#Y#GyjE?z7vf!HFI~9ROr#Arkg6a)!5M!@N&zeP}kv z5z$RECy1_=r3I!n#+_QN+Zi9Z3t(k2-3o92%quBfo^_hd? z?kwkYsc8k4K@S)X>R5=*2s&j4v`*PROQ-CbLdFBCNp#BgHJ~D*b;>?!@PAxkVr!|P zvMc|E2LDGh;T%f)C`xOQi3kol=w0whi6~Yd-e#W_LnEg64~kq$M^X~VJeigs9`8@D ztvRUWzd91~UzSZxFH<8uQd?L$XFA}Iwp7>Ni06`<0ZH}xvs|$_H?EZMON6Vt5G&qT zE3eP;+Ll^Ra4Um|IhPHRs%3+GY}p{WTON|HHeo6HLEP&v|8aXU&cOx63s*`IOQ(N^ww_!u)R;E&iFO_^fIO*UAJ5QfeCQyct9aW^v0t9?$%fNNnOSC-tLi56ygjLA7I*?L~NjZum+No-E zfeVe1yBIQKdWZa8HO}{X%@};roaK9E^%=ewSDoQ|rRG#zuB}o1 z{K>GoX2*4BrN%QPu{nH$y!f`R9G1H^o+?pRvgmXHa`ORuu9<07*OC}d#0D`0bUyXy ztt0 zregkaGnE8`ib$VVLy1#Er;upx3hCOHrJ%CZo;~ElmsuL7;@JUU1)};pD&Ug#-so2Q zFR~jP^q4tFg0#|Qtijbm7e@08jBhQ`Axp?NaclELbN{5G^{FZ}6^UydY|B;Z8O4*m zdWcw!8^sxwfSS5A5hLy+^fZ?wVk{=4o`yT0qwZ5Ah@q2vdEif!{Sy+xTmKIRbxDRq zPBTUxA*jq!!b} zk{p+1?uKj`(({j4L)xpd?a*PBr9;->TKJ~~7))Fhq%%tWv}{=KAlwHWhoA}TZAJKb z&va#-l9?Yb)e6DIu}CjptpO=k-$y)6-~4csxk<8_MPcl7&Wx{EibcFxi{OIowbV;f{&2gZa5j%VnSKg>odGGs1JG93q&qjWj+G;<9- z9Z63yw<9jvg^l}q8^V~X)Q#{EU-^s*&e^K7&JVvZkAkL8woOB%LK6Q!Y3 zRMuSr2Nr`Xnx?XOZF30Kjmh9Iau(m(c_L@gi!k8Va~6?>?B^_M*DB$@KFkk4erKXG z^M4}UH(%I3HB$Msu_3?H1* zzl>yrwpz^d(j~j|%50Yovc*ShxMtsF%+BUMe>a=0s}1wFm;sTKCJTE0J|vB~%eGB9 z`HpzQ(}97;3pB;A&~s_H;aww3JDq5pH|D(VW;cc-XOB6*_N`+L;vD^OAf@4kPaF7D zY)(}_;m*ms-utwpmZL-@Yi@9YuV$Y&+|0Nmvf@`r(mep4<-$T^zMaI+F|z~Ca&7J5 zwgI1>;uCkM{(~hYfz)CYw*6`jzUo8R>=BLasDGQ>M~DS34E)dUD1qWXSR4=S#_)-C zF1ZPd>AC*x^p{&6|F!~u$I`0Wns@x3Dr@{M&enfDtB{VTyf=}Z09o@nw}gJYRGy_(`+KD#e!G8bYgQGAKS)0T9zfHp}-x@YI%^5ZnMmm`N! zI4@zQ=_LDe?aDmN+e_v#Le|)^@n9a_6Y^NQ%)vb%h~&X8;6G2m5+5HiHTzfe$DTJ<$3ycFFUo-HEY_C z&>(u>Iw)gK!=RY|*c@N4q0=qh5B?@yZZCMAC%gsRFG&nglYoiS4E@c?ytXYJV`VgS zWxm}@f7L&f17>jW_5m|!b?>>h|GImw7OPMBJFQ+tM@7rr(K3%2O7<%_B#q?(N0&am~F@cE^#OcVG+q|Q<7*}4U)nazp zHsUFwl8Q9!ZS%kkdUA7HKo1&9M6YR`v@Hn|XS*H{U^8?kpx`B=Ef;G_K*%O(;xcdk z-cD@0li>@C`_RAaoj4z=XyGhz)k})We#gg z@P_3=)!5&BEDbk5dSi>u?=ajC$kOz#XLAd8ID%%R;xRCTCG;~ z>-El~o_k5C3d`zhn4!1ML$6sW|z>Wx;uCl5^)Jh+E2O#p>XdR`oWBSiLGUH30d5CdU&q3Ui;81{F_K8?dJGMp^x%`I zq>0;+^gv(2l?g)9D5QvAlfmpH>HR)V1{PpxqT~aom>^QqhtpuJ3J&A7R9#@bg@%@^ zkFU43OIYUVYMZQyMTFp9mRb(O#FguCsboNpOc$D8$qP}@Axu|SZnH;ZyB-lJm7hzu zF)SSyQy3TKb`?gYKgQhbE249`=UR0ZZy2O;U#)#C@ zjR(hukM`k8YM@gZm*vCDOx=(Pv!c5Y_-_{fR9CCL=MHeK^5=m~hssAg5W`($g@RCbCqgT3Y%TgXKZ3l$xsQhec*l`rXqjED)Y0%(nSQ?dbH@IQ9}>9teY zsB7m5? z{}{VG#rxDyut@mG7+UA87iNX*t9Toulpq?5hZ)qW=rF__8Q0Dp#?t5ST9zLeLL%{} z6Uqt7w zG>j=R@y^byq3P*SpPsE}EieS3R{!xJ^o5jerIUP>UEbSX76L!#%O?)uW(t;(%Edx* z--+{wK8(KINax{EJ3;N7!w~y_!D5Qbl35^2h9jS>7BM@N@JH8MyK)M&^&q3U^BBWY z7F!m#46xsvR@8|i3fA<|RJPz#PiaT@3P*er!NrpGxrxu{{@lyk#JQ#6#iV1-C^J}H+~b*#(nwKQ^;^-Y_-?oVNF+$IjA&i3mpSCkR87mBLT3h%fOKWNb%K<0NaJDpo(P z1qaIRaVq8dUb9Q)ypYm#(d>frCZy!?8*`szo9)tQhU1Xd7d3ifS#yjw-_d1@&>boD zK9wClHYRv!_*h0L$M@p0ad6Uqi-u>tSbDrgrh#i2!et6T0mNyZoDV`9dC9_`*4-jyQ4g9a_^oeh}s%guV6SPLGDfD(1uHjV?x(HYiDUoX6d{Q);hA}4d3SJ zJ4IL>-f)?)+cCRw5X|F{J>!@hJE8EzC8a)j3VAm#Wg@;SFzn^6KT|Ty&#Z&4$6{Qz z`lemaVqK36Oy@|chn3Zxf-x{Z%B+!tgtXP-?PW$VCA)EU$~oL&z~0I4#`}d(WMlb( z#MP8za5UQ=Sdm>w6LLVVu%i230hoamph||4rM<=@s)+kaD zrJfHX|JY-4z{K~%1|3j;*a0=_dJc)jXAfW zvaj~o5FNXLSQ(wQJR2+fjGBWD*@b+;UO=2p5^6%|N}KL$ot<*-5O00Gl*GRkXB?MkE9ykp0Qaj_Xcm|QUdw$&Z+WfGRLZ^e1|Sq{{Ac-0)N`~ zPQpqTD6foNAzPiMQ|WWp(^jg^3IGxE8?~oql`*Tn#rAvzlGHRg5s`}|iH_Kz>RSk5 zkv2i{c8=s@g4~uo7HzGiOnxnhOEPLI9eJeX*$6G5906yqq8KALbPe7WXDrebbM@t| ze}d_Ns`b`CEc1d}*tAfkY^H-Gi-=fEmbW8ZA@J6R1wc-kWvWxIwR+1yDr!GLIX*V! zRaCev+_Kmvgc}PdPPlE_ZBX!j4-zc8(HtH;bvJ7dgrNz#$7%H~m}IiM@2PJ|Iw?e{ zj_CMYtco=bpBeRd*KamYMeAax_nv0TilzTc7IxQQO&5R5BS)pAR(fS;u+OHQD?3L& zY6qbP#E|z0%aAv2%3z&`MhmYsMTLGMH~He{Z8)IXZ^|19i5bEJTAhM=t!2;qpxE;s zW@Vcp+0HQAFzNl0-a`|%-qR{Or`8I4v|rQ-&0mpdwaI(zad6D!x`mxweH+Ii?7qOv zp!{yjHKsOPItUtxUHxSB8rOC`)%KUti(@ay}$vC|AIBIjxCz1OWwNPFsIqfW_eKegTOX&*O1ZGr0~f+(vBkosQb6?yLq{Z_BeC4 zU7x7JFb@?K?V0;-@U$=JYG2U1=g=FSZ+3KVnSIMi-ltm6)Xeq4{=Rm9FZFPP|1;gj zc7In=CSF^Ip3u*w2~V%*n#NI99z^4BA47$JzYuJ_X6o}7>>8UX9N6A5-aAicX?yFv zvcP+XdGGuqUG&!fl;1!~MQ(HOX4z5$VU-#z)0~d`NZ97@=;gLf*3T;pA689>bhOin z^!CaF?M&^y_R53pX~pf8;5^%jnA{}`8d9~(1*%RbN9Ps1N9XUe%j?ACmy~^&vd!OH z@e=MlNLng!=|_iSBvE?^hm|*25>|tQvvkWu-GSV0J`ZS_n}lD}vd+!@<(n%hLTWId z*~3*xW_xz$pLA7YgV)MPTp3m)g9TFQ#ISM&Pd@K)T7|1PVFJ~Xkeb^aW-EnwbTdH+ zgfk@!>rlek5{A-}u(Y*voeqmF|Iau7Yue4C8LBP{$!MNI=63(#_EQra8~;X&W5Ye$ zjY8r6`Kf`@`afI>geRr-jXdKuxo5N4ktf`<4J}h|Q?|Hn7^Yf-QrB1BsNG2&wyeIk z>bXg3Ni0vn$6xA3=Nhm|@-iWLqc&0%QCXNhuOwNiS^EFtW({IYZq~-C?qyba&SZJ& z{)hA)+JBcJ2NCX&UtA``19jmB!(R1}P-8gw3k~kpwvtd73PX#G>n>b~d?51T_mLb! z9bM|@lCJ`l|E=Zfb_v7E>$0em_14~xf{fZL!-C?=``Wwk>xsij>+InZ#h8A2nVLvb z^)U)16yeM;iFe5)DnJEp68!ENppk1Z(ST<;EPdd=lG-TL5lv&i@J4U;L~kA!of5s- z9iE#Bpvj$iTp{)-?vtbxaXL&9i=_x_hL|3#0?1B@S6%%pVacvv#QwEq{4+Wi^RVK^ za81G}eMzZtiil7$decP3BwJ%yA@e9ZktIKMqWRt@rl_ zge=FV%;^NMHy{=Xf;)7xv6rGRzC}h;eIlAumu{3AV@0qHv3avb$~XV6w-3YuhiN2h z?~~N`7#{EfspiR#d9*Lf%9h96+MJ?@Wu_t`R@uT?J=}rLuH-2-_919>0L2IQ0%M6g z`ojrs<6zxE;aK&f9JWkq~LzD zwpiVi!XPcnLH$iKEfR1xdexhg91i%}=OD3gX8Ww{GPp`?NSSO%Y)kF4GTCb=r(Bil zy=H=$jbsEtBvE8%EK?h@6p} zv(otH;5Vl`z|g@*Rm~lZ%Ms%o;f!eEANx6Pv%7f zV{bXtjs*$YC6M+OHsS{<#JSpwf1Hhb&!Op}3s5sCKfeEkIcCNFJ^4Fj z7oQoz^PazZqYG{k2DHOlGr5cI79L4+O)j3^{axMuF2IW06X%>As@s1U%UxYT51YKB zme7tH4vSBhH`wnXB~$iv$WEJ$PECAHB)&N42_WCh>@q2zN$ZC*0Sgkx!o@cs+laSWd#_PcciqbCuha9a@&7!u*>ZuVFaz=uSj?gGp~y{9#I zxO=we&xDnhdErbUw~aIxt`l{PClRwl*)i@!OtW&?Q7IC|&Ag{srRu2hEySq(GI85Q zA90ZIwy#Lf?B47qEXXe1gNkAz?C#!-X=y7yrF(NuFpcowg)}Vzypt{9J;MUtbb$99 zN$zo(r%QXC;f}uW)|9BzJjs6jY-kJK0R@*Gmr@`dSOPiIMMW#ygNXOC;oLPR&D+?i;Yy(5jBnL{2SI6UpiJbbSlXUx1lkwi*qceO7p zR&iP^*9ap1itJB4n;fNe&-7&CaPzD_0v-t*BjA=m4}la3d`Q44fj153({V&c!W}NT zOPegj)fw`W!B1#n-7rBAFlf`xjI*LL1UmsT^RyGV#MzfuQoW8wCet=;D`}aIAxXQv^30KbD{$WU0yI#QeYh>q7(y%2*$hGqu5+77j zWORXNH_DJeMwbvQ4_ z^e>Pb5>s>|3oBc!D2!e6o{GXrWlNPYf7sK#j78P>7poAh7K?!DX&D@O8{XqjkJB86 zrU??jZT>4MonO*kbA0dH-sj<>C)hA0CHL*AIW9x$_w?+j8bALy`UX|HVZD29=sh7V zYX)&*!IDGvp4Y@KwYT#4eS#7*?|ZYuis1-#A1{JxNwZDPsl*5#9lYnz9<~3Y_T9XJ zoc5UVp}!gT(X>Qm5Rlu2fc)d*15W{?cLPlN6rkPf8J6SiyErwT;CNd$A;`wRk=Lf~ zwI=R($(^7Tq_ba2-QNaKN}IOXN(ZEyE6eme>=|R%k#p3zuu8LZv$b8e4N`w)%Z59w z$KBSWK|k~&U6Rp-v3Dv=cWw1G2faXUK{2BNMG6MRv7)^?(FutcqhTrM3(FUw&dy5N zD5a^v1|N8liq!E&>qRP8AKEWcw|biw7XM#<52|YNv;-zqua%LU|1h^Tc#+?AdgZpi zIUDA`qY3K8zMj?D!O0k1mOh@LdwRC~hUS@B;l824G2uQh7AE_$R{6qxqgG#1rqE1< zdFVF%>J_TMQcLA7m?!$${O7W;^UGAK?tz&8fC&W`=p;4$`+}D=hi~`YFkW`hH1QGr z4g!DS?`?Nr{B$T?pMqLYMdSQ;!r$BHX!XCXty3d8z}GBW!}!H8dd!)xzDOc7#mF=^ z!+*wyXRp(H_vYw=tqlv_#TFTK}HY7o+HKb{KH}-dGJ>v9ZL=OxkKZPS?;KR zd-ywU2Ns)ss+GQRCh>1m&k|~L+yNx<;fy7zhh+*~t|b}0I!@CQYzsNdjp2LED6=rV0vzVzdDt9&d z-$w4Sw&oqw6lnZ+|1IEKc0%eCIy2JnZ;#Fr54}Ux+6U>#{B6)a`AzD+hfoXBumoo( zze!Wc7?J9FJQnJD{Bh$LQW_5(0Cb>Y$ZtA}YG>pGk2a>|zcB4v!PBNK4Q5VT;f?HK za@$-^(3UwoI<#$;@ID+^Aa@Ox53}6tTaLyZ4f8*1>};5Syr^M8U&9UYzd6NEwzvK* zKFV!JZ|Ul#TzabI$tnEx{h@yPbO(F(sIwfwnM{av1ErOM#hxS+41aVvFT zLiz>n30+-0A}2GGrb}x64_XF#`0D=?I!PRnNA9P^t+PDNP8J{v3)Q>9h-K;!_G+xN z)M~UDTU`qo_9W3@A;hi=fJKx*|qopkh)#C|$7+?rZ96f5Hn^D;!a59rTF0|P#L zWpWl&*D^NnaG8mCs0%DrtfsG!inCaT`ynJOgR3kR?u~>Q z?a$)yE|hteKA!Un#h%4+em)2H3It&}>Zxq$)pyawM+(Nu1Xr?bq@h!K|bYGTY zfs|pSJeCsb!Vb1YPlw++9)7_cO^IIV9@y^BHLUQ2hE;affPpsjGKVc2MBB((z$Mz0 zv+(Cb86eh-g8Av8)46duAF54m4%zQd;+wl+xY=nl?lI-8p8HmUZGR2o+OX|qXiIZH zGIp06N4VGs4Nv;wJTq+Ki_<(c88L(iu;mBN(80(~st>s^|Gqe~_u9}J$(cc|f#TNL z&bVWt`A4a&L@GPO{F#QI%1$kSu63?0y(o1d-|f9%+fU`bsPjRGR^8K%G}TG{pZ{!q zX3E5hXWnyK4R~*Uyu3UhJK?P8jB*S@$gMsED1ZjXSOg%8)xFp2d#E|CCKxGfn_Af- zn1^X(@siHvjGc`<-b9}7lBdE1KGPBR>k;i1XPH_lncFG``YSH6yAdG0-HlYMooo8L zk){5p|MPq3axh1Ma&^Nd7F@`K1XCPg;yLB&2;>HB7v_C`>)%+c(@#NfC)xJXrR~yk z^)^|!79hi^iKhRF3>Ep@AO4HIUz%$%2(=^^eW54jI|*7MK5_#?MDC;v#1hHPwNPbC zk`%$hPCpZf{X$G-dFl@R5DK>(tJdB-?qInat-t1$X-yr$r9-FB<9y>?6XYc}i#x%g z-Zj-WN|+TdF2k(1s^=Y)C)PhMM###h2dpZNtjNRzBwLPt0KXC0fT1UM2bZ!1y&K_O}S_)&k1U)rNRJ3yY z@CCb!%50fI3t`VE-ZrJV^d3QLx8@ghb;otge7u&SIX~cqE zoa~&@1W9FSZ9}Oh6Xz9zPemjaaffHYF}dzd zq6LZhdaM$0K-;#+8hEcTlZS+BGEZ3z2Gf?UZQNJcxlQ&2OX7B7Kg>Wi%hm2!bs_Bv z!xW#!)4Dj^Eil?@t`xB9Y2hXsVL>&-PBt=`>~B`GZ^q{DE)gdaBcHUuHo0D(ypG11 z=XCpbXND&6>kOW?!-R*2qQJ9!YI6v0NNv$UIT5Ih1PzDSNfI$paq+t2L2Gby`$7NS zr<`(qiP^HBq)ZK+6z=`jQqI@6;K5qugqs+v6>l|$UI2ccm-)c*aDVP6T&eIkp0#&f5?7kP88Yi zmE~&NLSg2K*3vFxf3y;s9p6hjUK8-<~A6bb^#3cZ`wVwmK>7=i~F*PUl1;@v4_O%7u zB>b`{tsoYO(uyToS^M1!Cw?|S>m=DpSy-0u(8L}037<-sP)5LBUl8mxgBx&F)x`Yy z4|~_cBEP8|4 zt9WZ1)Zo6*wyF$rt``cr2rseer;%p+SVCp|@Tn@N}W;2oTZmXP(#(^sae?K+HYW*Wz9CM}i1e z`42>PuHrI4HO@{w+~6*dtx}Gltfay@eD!T!`7RA$jNr@pj(Kmp31BgAP;ZuNc((*A z(Ud5 z4b13}-LU2p{aU2^{GR2hno1hm)RS-)4DAa;Rd%{j>KZ9si^g<^rLCO{1zgajd!e+P zbIlQBPqcf zvE4ndjqeKPA-lH+Bd;^Lu{qx8oQbx;k=*&mXMx3BdvJzO2v-*!jdo+fVXi|d7NaGh z<5#PjxVIPMI6|eT0uJW)K}Rw7?ZO=1PVv5D!K;i`s%C|Fb?Lpy(tAaFKYpntotL}W z#d-Z|wNIGonvlIjud2h*tSQ`{x)${6(n1>Am)-`3@+f%JuD1$*pbr)y8ZS*j+~N~ak2c<>}qia@8{ zpKKOFUB`3ZjJaokvXT6ml>9IbGO$d&z+7kn%W`QQhpKBA3;Ip8%8_hU-N9m#4nW8A z#bmzR8fBJ8*KOdOXO3=kPP-s@^0e!MBc@FadP_=G#*G3G##Y};p?4aG*B+f3IvJ}p zzO9&HmIF|!8p?tZ*tjJhRe=jo13!8lN-{^MV%x7x8?WQGH}|EPJ-e$5seNqIcr5Hb zNnNps@V1~#%s<+ciGD9HFP2l$6Kr?5?ubaM!hP}3dBsu}w1m`!+q*uT-eF?zM!7%f zU-=EcvRD3Gcdn=TNJ=yY)f2DXgbl{{`JwE_SSJCPap%+?IX^VGc9R%NcLc|x=VrA? z(lNqQcvui|kJU;L>d43R25hw`^aL!wLbsud&)wYIn<74T;Vs6iUvD0Zzomd1A3u%Q z)X`jz%+7gyLIa#ru5qb3lm#SWuVQA>x55pd;!<^=yeG8BN%xUDTM({n4jHmj-zwi3 z&|$_^TFAhO#w%=Jgd8@DoiF^8lpCu&1*^Df=ZLoy3s0fk04#U)A{n{oPg4a1j5Lea zqv3BpihJQE)b~8*w%i%b@sv6m8DG8Pozj3iHtw=gTKSE1S@)dgVfUvmGSSzKrEiG2 z?-j2zMIOKnIqxI0KcPfn(H&&zJ_Ny&vDrg!n~4{oN+%u#jW()74!1mY}F$ zaUl9jI^mIP@t2flk|r31U&$caA}ut?X~9qY3i0>rK8^@%15b zR~g=thfP{-jdp~Nm~Q#mEmlw8D&u6e>S0N0hjDdlj~wH4-XpLzML^0e-2IFJ-2I0p zjXeco?4gO)V}kX_(GUCBBLa#{$UoP!oX%WJhZs(d4Sk`L+EV3}_CifO2pF4_!o8oJ z7%dJE%#k<&!~T^2aDN7)(DRkFokkwz)iPfB@z^rNGt_C1^u?pM0)o+7MRGOzjEuJ) z(b%o&_=$U7h9mb_qx({v;mOVXr!hkY@@W~^Mt4DjbEa^3K1E=~rabEo=5X5YM_O7h zJQh*Cf;*6x#nvND&)@sJlpwTSm#mwXhWb>I-6=$O`EX<85UFD^`EAwKGjhz+yz5Jx zU?wxe*S0L9)k>X%9?0?!QH5x9vKzIRQhY3OoLpKxn&P;&E!Do7?N6UcBSdvtzLm$< zOK(fnNDc|%ErmoM2c1wzf0}B!R!yY)k6v99jF-Gm)z6n|9&>^|=M5X3*;t=(oU+Z# z$5MhLB_>B=D6OG>m<*RWsNsGcz}flIX0syjyVx%!-gpV;|BWl=`ewQ{L$(yz(&`-gtPbDIa_tSj1m6Jq3wtOV8)TxE z&;8_4qn9o3aQJM8S}c8F8}xmG=IYPpCyoHdC*|rE@>e7!S!=nR45g~JUr{Jmi1<+U zHfR4&h^vR=bvJ8=%E7_$8|SLolB-SZ_;7&aBm4N=xjYlzlKz5d?e4RXNtwD~1&MXTqI2dNIxU&H;%Nz_Dm(}CL9uI+s{SD*w{QfVNTU*HHD}<8 zV*VhK)syrZmrfkThLx!?KpT!5I^{5hY!9OcF?XQg-d@Clz4aeZ{>*R_x_1Yr%Ys|_ zUfnS));YZOTY0NHCVEcZdO6T|pF)j%hsb#-czWYpCp-8U@A@6y^&T@#pc)tVFD~!qI3k`_ z-;5QF+1N*+wH~AjKrub6K=qrWvZcGDw@ZmA*JIFp6?alNK?5sw>ci1=L6Sk_Hcw+5 zI{!uqa_SU5#DM0_pn0@yiT^;Jcpa(rusLudqGDrfaB|~J5JxcAyMDN!mXqs_3Q}4& zqH#?Zqvn}CYBXADGo8Ne%ijgb)D}2GFLR{AP&Yov4us?Gr5j4=Iv(5vUe){Xq>@d> z7$08Z0%@_kj#Jd)DkCL!HA;!j*cB;aUFyR!^)fwV!WOdzHOFn`Pfu8}nZmV|1N@_q zMBeox=HJ^mKdXLT-ssTS{GA00GSTp5?aG<{MkLd?)!fYa%ayjD6F*Y7^;h{4 z?l}U>Xzya9#j+g*)ZxL|R7{6cz0Rl7how?Ao1j&{ka69?EmpaqGj+nh=!8;{8cUEQ zcC`;!dC2e!fr(dgn{gBS4lU;7B%Ql?F5Zl0$1lEJy|a{Npr$$nJ(QE6H;iLZ_fO5$ z#_XTE3Ct`Q_tVfP0e4B6l6%=wM1B8G1|i|wD14z=Og?Yqd?vDIH)Y4>3L$;lSl+dA z+hyLcm#{8C+*nBgH(3P;$K?~SFLmQ-8^JpFPovjSsUA#*&|AM-zHS|O3`2u^W=b*j zs3$4J=4#FXe9=ZKQ_sQ0kWp$16^c?>Yp&lj)3w#R-ftOw-QG|UAKxq|fpHcKbeQ_E zh#W7$?K_ugD^ssiKt<=bsMg|g-wsIG=Rr>)y0M4#FUyurb-LibD@nuL19 ztQ=Iv&5+ zrw-nj=+P-0XbT2~)?z%r?MZcLJYYMfpa~*q%9b^zJ z3&_Hr0TjjtI`Vfe?CD0`bD3BD(l5&k@(6>C@S-`SmctGiTBYlzGgyxQ-Ob?u$?41^AvOclZB6gqQnJjuMiC};$m5j*p(jNj3nn`$^E_&qPYX5uAdw zqGY0Khp)?f=VqRmFexcvPa2oZyFQUOB0Sm72l$C)UDDslE5F#u(RL?qUqx$<11H~Y z8>BmEe<)VB-av!I8)xu}wn4gcZPGcM)d#1@I5X0a-)MYU?Z1dNuzQ^%{VMS1gr*i3 zmvPX-p+J(=9Xh{Ut)y)g`Q4?q{zPl+dk00yKtMvJ+-?E2_Tf9uY${h*Noow1Sod?8 zz>!cQV;=)mYVYk|>aUQ#VC=78+EnuKpp|EdkalZzY`{ zVBh)2HN0#4&V`;N4RhixGw|wxAc%%=uzA4v>0>lKTB$EVEAbS)AzJyYTsvez$j6F2 z+zb_D!wMGHf(``dHo!faxmb>W2%LB$&#>v~opv^@D&-bc{e$g1kn(&jP*twZw_*>d z2PD>6u1>KcI@BF@M7kBRPu;2`G$E>b2&1Bh{UG&Sg5fRG3MzMd>#w4+g31HldOrd9 zvh~w-M2ENjVjbA$tbcqmdk6xsGg# zeFHA-F3r7%61_ULj!{8HQQMr1ua_~x=nJ#SYzdglUX8(>jj~3h1f9MFYty(rw2#16 zo)4@UmOOWoCtS13xhi)`<)PqNvH2g$DLi-z2X*MxCezdEo|*&w4Een3FcjmIia5++ z{{daT(AkvCFOHWP=&kDXi82d#KJwO!8DwL@0W9R*Cg%cdWpNP*#VyvdD^`a)Yo*$T zg{!0Un;J&P8fr-soxiPN^r}K>i7(NT3%u)Zl9u?oR*#EmhDB`J3N58uWT~7=+qzc$ z$8Ot86d$;(BKCJV@*77v<}T<6oK{iwC^6C?V)W}Hv9i0Wdw!;k9Xu>2RjT?)Z26ud$6EKCHd6e%opKpm}?XNUS&KliB* zc;@e=>{;>9cD0YU3ZuoGX6Oo7m9DP1C;D5d4Q9}9rTJ}XU0yun>8fr#NkURr*9byI zT8IzqVF?Q~*A3VeS>#>uLah6&WJoC0X*9@@G5JzE@WmcENmj;TY3{^DbwBCV-l7H@ z!;#PCLrVB3hvnv|_jAhk3Fe>gn{)?M&> zM$t;%776WEVcf3UgMCnW9Z{@a5k~NO$)P4>Qy3{~t?Y>uf9_B5>^MmgU%pb^+aDPt zDA{y(nu2~Q_(ULBLW<7;!9pFC0D>!ZX;Of?j35&gU$6W3E21g_X$xb&eUK1jWNg*M zy4BVoog!YxgIQ9Yw^$95BJ!1k2aQ2xXEg&i%9taEt8_^Nx_zfgCZ2CC?r>WsVvQ6S zT3e=GlK6z$nV@}cM3}Nsbw?Ufk@rU*yAaT>TT2rP5n86A)i%-={0l*tQ`e_cW*fIl zBB*kh6938(I{U{`c5;e7SFp8abis2^EZEvDmUYEZ!AStq;DNxzORZF;!HgF@`qs-= z0n?Dr0n?E1iNM4qeOy`!U#M94LW_~66W>qjS8|JWB3o#Xv0@&S)-0Iz8~#K#VV1|W z=j+%Uyng4=G^Syo4cl~SZ8yRLJEu?@%pSLDm7K!t@llgSjR`FY0T!HQ4Zvh$3NFFK z@zQx^Txi}ad>&|l56jhSg1}e9^$NXR7Z<z*hol+3&>2uUh zy)cw2=0wNg-u5PE;+pSeIUki?tuDXKIshPOqt`R{1So9v_B(iHYcyO_2XfuZk)RkT~+UnjCwUMFC_(_ULVb!z0e`;p< zdbgwV)suuv<|$TVfD+*)WEe3?(Kb`#Nmd!0G}7q6ZxVsVMBo+z+@#dKC#x#_=t^=r z3Zr;Y4W*0X{5|&)VQjizeqV`38hAE$B2IRuD2{{?3s3vI6ZPG}7wvq`fk-R8dO&iZ zSVD6VLhD217^@CVw4V%xvA=DDU*_tHu6vSH>OTu1gtS`9Co-lLYFrR36SV#vr`cXPPuFKiB42$*o|F;!04y#>j*fV+kQ|YgA)VjEi6bE!AB{XBkxk8qQVXN& z))J1!?&4RCyHRSC(Q(Z6ZeoBQBZ&Xq$Q?X`u9<-I3xS-4xy`Y%lmcBy^qwd93v*`k9;Gq`wt2dd!aXH5QSXDz^Fuy?jn41C9j6 zqk3)`T=&A6QJp3l)45{TfrChIXS<#^vVH8;**dS|e3h8tLT(s3PQ!Xh?$&5T29Ejt zkonyt!(-3yv>%cF4h>*)?RoZY!mayPPIH#8K$jK0M`q~jr}>~g%?D1LX3312NJOSv zPcyonGR=A-jC-VoOmq6*qI#+@#`S$Y%?16_oNCOpCRk6cHO*W>lTjvCfHyJGL$Q9V z>*-`(W#*&LYUk~9ud?gMR7_%m?=f`03_V7yG4_IV;}uxrdY1oxnq&X46Xv*yB`33) z01KJmfV*=vuv6EU!i%?FuCtO0zhc0`*D!$*!H5{*%in3#kF*y4NNeGPY8^x`h zE`z_*(6A8x(B0gT()_`x`P;3LzA6gwgY8~D>If$!Mi)odQ!JE#jz)8COs`XH{>t(I zG%cVudZIA_zvlN+H0NrM9H4a!JEt&kI->QHrI(zaItv*Xqh7;rvVWMmiOrS%S(r)G zkbd42J~jXw9s2?{60>=NjRXt@8|_(^V!R|P{|DC08z04{-5K2^9r|yE#nsgO!D(MN zDt|HbW?`cbFb6_F3Ct0*Fh}@NS^ExafWnVTB&-S>Yg7xuLAqk7hAPmY#tn0F`;0f6 z@wo6wVj%B|h!f`U`==Eeuk;V%EGm=2HEN1R1o)WDFCdto>C(p;dhY^qhE#x$7!8h; z4Jc|kdOiY6@h-SqwhK9G-Xz;q?^(-TfwLBR*QZBj936*k;)^4f@f1_fvKE`)PbrVN zFSOcVwOrVh2kM#hR%wW#lW`9dnMSslJ2K@XlnJbqE>3%mHvj>88DKKU-ZzdoSKMN3 z5*UG>HbVB+XQ|5ST<7oDA`zYT*8fEUo20`IZ~a5O7`peUz-aV`L)5mON7e~~#Ta$H z4up3)ii{V1>jXYS9r`*fdPhW(#C6`zYm#MRA{dGR2j%h=Gv>)LjV3U-jk+%#qUVj4 zj**sHTf+b(-}$L5erd3`M5pSqUz2z6^s=W2W z4G14u7A!~W_T=y*G0E*HbhTPwV3P;B*@pYJo=0UeU2ROQvtB2)67XKg&Z|+>QA0P~ zr^^pL!lrOB<$LR&q$1JmP1K=Ru5{99%a12Y(^*HvXPR4eo?7x4y3d9tc8Yu-c_W{( zpxF-Z>0f=)W}w`Lkr5sZBWr~R^g}~0v|NkY(qV7p9sx3I;W54=xbZfo#dfh^0IN!w z-}}203jme<&qc%{5AwCYwnv5Z-I9sz{<}b`d}8m>%LHq81Cw?>#KPB*`Fl-vNE&LQ z<+A#JN?d-oT<-Kd5|e%~0rfh-(9Xo>tZr_oL%74=PUaV&4F3;68GUl#x|&IXp520E z1O*F{ky(>!=6wy4kqP_?B(u7w2alL1B zW+iKJu2^YkvgJhVW4BGRKsas$RG4ecA*BpGn>$#Z;Z1f!w`hFv-!-)JYKrpdz3WSG zht!qW06yyb z2;hweS6j0R;4Zt$rok_|u>=wkx z0{ndTU9u)%{BEk3+3T?yZynL$Z><1J#f^HsR4`-R^R^%={YLBOfT)gy-iof%kkxIG zYQf8`B0%WNhJ&}Q^P}CDv%aP;bL__S#q{nCnvjMUs|#@!Q&B+!e4D+IpE0U&O>4zg zIIWGeb`!!5+QF_j2ehtHBKZbyg`d_+AEI5VA$H zn3oS|u%Phd=-HdkF9jVS(>#Vvd9XzQ&NWB4^JrPaAgf7Mti_j!Vx~UUz(6AzF~qXU zyCTK46pu(H^dJa6|L4G-$@D+%c=0zrCM9u9XHsSwN9o&} z$-Wi#1D5nna{VtSLtKi`x6e(*9}db?SiL~=KlkPQojvP>+O6H3hajMMT_Yi-Be> zWpQ@xrXX3xI9V_w7WpCJV)d#Yrjd1x_{8QWFL#*g>TgTWVbhsNGNcR5edA9whY*V4|Iqe6@KqL9 z!v9TfLM|lmTw?+egG32!G-A<63trF=NW?$HP#}Mlf3-HHX{)?&FQ^5Qc!?!Ed;7Ax zb+`MvR^8TJ`);ki-4+m6%}pRA)ISMYN#u_KQJ?EY2!BihMDqKdndc@KNa%Lo_XnTc zXP$Y^%$%7ybLPy_2m!OK@Lg zilV}BnlwC>J<3eaNaejM-3yxN=UXe+ zVfM`vf1{i=u*tsuKDGhP0=FlAvK{jy9h2gTztxVpU&o|*;-}g%b979)Cw{se^GzL- z;fc?+V={G2rYC;39h0nMrh4K_?HGrSneK^SWXBvURQTk2;+NSm`*qB0Py9o6%x)bs z#}mKYj@hPT?)Aj~$d36}iHRJwV2Di=J#w0hOT_NhsW91ww6ByBm+9@zSz^v=BZnk0Q^I|KL z7jDt{Uz2hi#)c>1R4T>a_op~*^`VF=xuW4zY@Or<)wv=oM4&8OZ>pr2#w)5w70+Da zN%xMKOc&gI>EtwksCgABoJtm1Swtsx%3(=eN>Rn=2=o;L(P>2$V;&mt zZz-z4Yn(3O03Yoy8ATPSAnWMHf#}Slig}Ufmj|M=iYmscXsG`e7nE>)QN>k}FY5;q z+)z}pAQJukf#~d_iiMHrqJiieiz(6Wssb23Zz2Gr4Xxyi+g#XbCWnnp zvH19OpFF^Qvxh_>P9Jo9^+QHcxIUh}k$SusQ}~9lldxE>ZO=La#_EXrkDRMs6FF*5?fVaPaG59zl2vOhCr>&2>#3c!mNnFClCoBTL?7_tlc&b?*Nzq>9DraM8Jzq^#5g3ECF^6YG zz=(P&${#(}a4A=OV_tzaoptUmVbo>0p#sv?-ahR$Dc0DqfHxA3Q3*-bY3%_}lA+K5 z1W9Xehb&D6UolGY0qoXA*h3uO=2aLfdN|Scn8rRFSF)6|7Uh|HdjFTnMPy>rc^lCK zBjDB|^0B|Xp}q)-P88%zkq-QGPxqlQ(QDldf+$VSv$7;0%Bo=>ckKGf^AX7NhXdqk z;)DRL^tmWHVedo{P=e{NqHaSG5LEN_9H>VVQa!LrB=nRHpJ&jlI>wa%S zJLa6fY2|>vWLCE3(N^0@XlEN3E~a3HMxdf+}vV ztzJflmsTX)4=HgwkiAB(L3dXqEcMs5ATf2DX9IDsqAi7O*`vkMb+>xxYhQ0-8*+-j z@k}6Yo4+m{B~s-^O8~9}Kz-#?ycBGw210n*>DvZAqiq)7A`rr2kIL5%)K_SLNhR0+ zV=;c&Yt*2NLC3l(rY`ZaYNZ&vqGSrJI#;fV)Xp!}Roknig7FFm%z-qP~y-1=53gOEQ zDy!*<4Wf*>bV=@jMbU`dCw*Iit-_m_FaibX6)@2WDmb+wsmMxG!Q~PhDM8h!LIi!X zuG#V&iLHg`&Gv1PdRup^pw!j6gJ9rEp)JX>MbavQgdfxmyW(S@;Dxb;w|ESOD zpf7K~Qg6~BQj%=B^=*-cu)?z?D3!N5R8T5x{aFQNj99w~`gdeS7`GgnyZmno66lS* zA*vnWxyv5{67lS7AgHym#bDEBQijKJne0J|E5qQ5h+TNQ#jcExPuy|H4Nt6a>{5Cm zWZ02Kw*GNt=O}1oz$d1{Scp#A57cjth`EnEsNV|1T2hwEO5dMQ=NP`(k zVyPU?kqH-eL;5ioNkS={iyS!2Qw|OkN-@^YB_pLd?s9aVuQs;2#dFhp_|NLah*~4wwMLgy%j4?& z9fw)I50+*Jm$dc_&_B8gOvJ8l+(>5Pc!$Hd*1VoA)&GL3PGV01%RApV0|BoI?Dj> zPm5CX5M@}jQ!Q&93N+^2bov(c|GRVjs`Sgg6G83LJP3D@UzSQ^S<_wn{cD&C} zsamHr;862?PA;TtA4Gh{*K5Th!P^oqT7R zE}eTlB_-CZS&=or?GSh${P%uy6czyjkIB^`CuT<*d|lb^=Im=d<3Ho%dbIKLhT0|W zfzK$UeaZJa^_^=twFM~*{SgQQGA)&vEnGA!PMSX-n|SA(>252TTM%X;29^_yr|OOE zhlX;Q4lDQf+`k$lCC?JLYK=25eAukF(_CUZT{xfh zbr$iM%&S=|J(pW#7CzM7esy#8q4-XY+=H=9dGkuF4r&gP!>=tU%?+)kkLK$Hs0c5x zzB?6hdSC4`kCKB((MC-N6{*OzLCk_>GOshtnFe~yrkN6^cbi(g=ou+$@%|trXMtS>rLn#x)0Qmqexq;o zqNvQv$BSqnH+e?;3rk}!&N}=nQpWf)ORU8dEc#Vf0Ty#HSm-foY8I5*=B7PCV}nd` zX5lhjRCjwtt~8<4xTrcPb*2sfnVzKJ#M&jLvIQZ!$5EJF^DSL%qecz{sk&${nZ>2k zmMrrwsNOA#z_rDtfq#%HM~$G)mzj1Aj? zw>Qi}t%Rj@)|!PygXiEWT;y9+Vii-GtcxC4HHTa7YAwt z7%DHa)=jbL@|)(nSaAP~G}+M;;b7N6Lvas4FOeEVDsXDSg%x<@_DBU}A}ubFBZcQw zx0O%htUw8Vg*|=M7P`1d5Lh3_k}IIr!+7sb5J4olq+;}PN7gvE zMLMYs`!>Uh<;$I>0!XlKID?2AZ@ta~DRo+b%Xdq0Meg#>OcJH&M6~}kW&*pRk}$#Q zfzHB7mZ=kdhc^r@PFs(Eh$I<|ei@Rq-wTXVElC?2PC-c3=k=}Z&s137%HBs96XsF3 zvYUy~@@Q-=(wsUPm1&>m3Ot)Z&LR>zqsBshkMDGZL9>3WSUBI>`(=a&DSe5GTnt0N z5$9Xxj}Wh;||^N6roUZi|e!iy4OAF0c~W6ENGX zI3C63HaT6luHcNg%)I9zv$MNhbBBsYBhw|kUd@->1U;gz6#C+?O~?)BM7YSR1=hE~ zN6l`S=Q%4`(VN5lMqKS0SM8cOGa;HqsLR^#7HJ+Kwp^e)h;H?rAl1St-Q5c=z9emn zG8NdGu3J7j5eXvip}y2Mk?`_eU5+?kZ0*$Om5+6UPm?9J?Q_*B8NAxZxv#Zp4(OxS@&W0T#H55`;Ay=(Y&W9YEah*Hb@o-UY>gv z`Nm6TW6d!*{P0~_Y~|RZl8ecvc8nxWh!Tus_rSad!AJ^2Fj9jhS}^Lz-p6AUU$JV5;zn@Jp4yEv z{RVzkMgOzwQad^DXk4uUrHz-Jrm@eb(1Im%xale4)vb(nF++)jwWpQ?HaU@am>nkX z57ad_w*(W#=B9O0q$fm7f=?hpiIvVWqek|(pYQ#;C?*^wPbGbI$We(HhsKB?&Zx+d zY^K`T{QE#Q9%LiwX9ZD4O zKF8%>jKW^C7qg zG|z?SAiX7_5Z2?py*RKYgA2{d>0F?o1BHi&=!L?bzS?U7t0&hkd7sE#1#J$;h!Kqi z`$trjAL!Y*|Px;i3rgZ;s=&Br{%lWj-Pg`@>cD;**Xn9)oMq(49XO&=#emDr70Bx z4F6W8^w;J7N^-a}{F+?kOR&BYD;@eOnk-zJ@Y*YOed{JWwbf(9_oLJ$!bFw0!dU)+ z_Oia}I~b2YC~3|O`(YD0DB3eN%b&F|nADzCVhyLi*tlie&Uc;vn1f57$8e@27h$g~ zsW=^Wl~jBgc9v9h;iF0fOPv9vTT2Fr*x}LEiI|A)i}fBse}>pg(xSKO{h`pd6xtQ( z%U4K?&z*g~kLotEAQ#`$wd;;RCX0LV=2CsGiuPGIH-dbA8!b3r?HSf;bRhI^_~WJ7 za`Bn|*)Z%s)7)j|UUAB~i`uKIKlKajm^99IWyO$rr0Jg|Yjc;CO6d)OjY1<>I!BFU za%rt^zvqN^Syw?;jBhMri?p)5c(33^aOd(kV9w6)pR;|~XaA>)$z|PVf*%hH-0IZs zKye3jhf@5pOODBkv0Z~oB*vjo>V#b?{al<8u(mxWDP7{BfR4{O za2#)ao<)J{3#Yy+mFFc;kg}^F4GCJ{Q3UaqyU<(dKXyTo z%xUhfuUbzFeSgEA$DBA#FL_hM|C+t{xodWH*Q-_}7)MYVl3*-BFp*$P@f(h1jN%Bs~pUQs*R;+T12WWh>}lNeQYEP zDPLk~=u1&pCT&a?NquS83yRNmI4)}AuKMxb!s0i`2_IR~QNEa&Z-AxCev@{7gVN&$ z-d%4{JFL&?Zk6_s3p_CsT0ES+&?*;Ju)hGzokkVlioDqcu(6`Q@-79$_BX3tK#b$k z0_M%jsk=762bZJ0c&78un6nuxk89(M-wCtG?`6MDEYu(uVU{dQ_Qw+&%O*+(NADnV zV%RJ>uz84Mxr;L4q%_!7Kf`;AG-kBp;pRPT)xtc4ciN5;_M z=E5FH`AwDbRcTv&D7h5ap6Ul&W&4<=v?MAQ??5<8KAI@-V25vkkP@vTf7p&I9n z2Jf}L*ALG3g&6x7V4#1we6XEw#lf@03Y9AVi1lTEhDZJ{%b)jr75YSCEq8=<`Wn^+ z`W2IH+t{LUgsj&n#Fxr$_rN!;TC( zmF&7WtctJUMG4$1!?&yT+Q)Cm%QT;Rb&B=k0N5#~NC z4FYy#+3Y{+#t{lCXwMQ)*Kz(UHkEcQVNJ2lrE+Kge-wt>5c+Z0>h`>|8vl0#MYT<2 zO;m^in19=gWPx@q(z#d`u9@nSGnsaK^G` zCir3I->7+pT4Gt&h3CqUQ-Q~b4ba?B7bC)dK4!gmuROxpzjUxRh~#|%EWSa4Y5CU5 zL&^r}++*IhP4i+l?D4j48h_hWD_ysJXgv7`a&R_@Mb9JQ?cg}YPV#&t$uCUbex2%P zo34qZ5*WJz^_y|c1QO@U?Droeu33zNVO>>Ei! zgCcf0lvcqt`g@V}gKI?<@(6Rku|bYycR7@5fwDr1M%ykJfP8wNPgnpF1%eLKm&txw zM6p0S&BGvjpKpJ~a61}vsFLcJq`Cmp%NQ+dWt;pW#Rp}wjsDGG9CV7)nM)NPK&M!h z%)%F|WYS731jgYZ0F43p2-4b`+56U>Z;P;mKZV6dimj&qfLp2XeCt0YEP4-3!iALH z!#&gVay%l8Dm{=+%l800$Crs^U~SI~oeHgM!MH54z77ZS@5s2A@cZd~-n{l>un1hO zvJD{K=JJymcYT#P;?uS_+TW^jrK&uqqE<7ZUJhS#FxR1NX;f?i-7-;(Nt2&Z@+015 zS-E1k8H)*+x)Gs3v;;Vkc2seE%qX}t&S0m|TH9`_j-@eyR?Vxzf7oBr9^IdiKZhYBu`5 ze-toGX$r!7(7!GnBi0b}#7c&SoYng4V!XRh56>5~YS6VPAw`@iF^q6B!lur5IS9id z8yeaJ%W&BNp+%jPz-s)bAkzRYtcv~XIvn1Ke7edU#bwT(VUabpx=d5`kSpsvsx&`8 z&alv{$9XalFLbd|mWw}GIs4cHVEMmsyuI|6#b}i>!1^|2GV5e^H#&0hO*~O7e=qLE zh#GAwJhA2&1kb+jMD=-A^*fGS-W%2H3<-Pl(bSH?&?;{{Ch`{R@MiPIBa^o{hgiAE zjdS?MH73M_(-J$wZ@wxXOU=d!L455dG$x3-_3>cfNN{+kcjYJL`fxtt7VV9?3H9cm z%u{6J$n_@5qssdr%wRMP4xcmpJ+Z6r^!LQA9)*!U?~I(fC3@crXI*eTmv!?$sJS_@ z-q`Rb5~DOBu~!p2p&pXKQH}S9kZLeA9`77o1+r#+8n_Cl-3|gRCSvj1!g_Mg`r&~> zPIRtro^S$XL6rTtzH&AezoloLzIii_zxF0}*rk&9!`2**8Rz+7!2cPyqV|B_P0)0N zis2rIepO6@}AYX_HhN+aE`Nd0mw0Q%P>Tkzk&ptAzRCH#NpLx+0eC z0m*bpIJv?}Snyc_{LemtGBM%XP(-bqSRkjkYPLG55)EK%C?`8-o99&JzR+txYR!@l z(j$vxtaT>lXL3VKF?+->P0pMPtYx-|tReGp`I&$x`g*nE^#m)kyw}Q1q--mCleKqx z&kR|^`NqSihv5M`w!#Uoo*_=*gj5jfyjOYZy;oVk;x44!Vz+~b+7_vZ5ARV-Ua_lr z?4l=`c-}=Hvct(T4$9!hoj7p6Q<~&j`AN0zAIRuS#0J^1xM3Txb>Ru!@UR32zL2{b zWGr8YapRy2-wC@w$HCdTxof_x?Z?qNWpbA!-_5c(JLtWgzbX9P$X}-4%B7f7n7+61 z{h3`1x505h!f9>TjUW|^2oy%QRUOIu%Tw3|NZM84uA-z3`yO*vjdH&!(^Snz%u)?% zs9i~4q0=s+9gOJlY3q8ufK|OJ6HraNH}(0WSeWf@nUJ5dq3+QH@*>{R)sX8=t}Y~z zBd)rT1y78_Uzij}mTH?|c%hqM2F;wHfnvKFGQ7ie*cDFdYT$;Qeq&}pT9uhQqB*d0 zY=j_`%QmwS?xME%2KE&{~%c(Qh9XIaR-TlgWky*Q|@2aJJ#nGP0!bj!I?DZ&FyDt@EFH$p(Y$VnNBszsKO4I~*L z=*qwtdn{v&V35Iv`oKC?P8l$hJs|p6+vOl-2RnQATsm7VLec~I|Ea->tO6w)xdZFo zXJd63S8VWwH_g}KgV;F$_GiFklh{}P4KFZ=y|FBlJ`K@mi<4@dY!r;K)@rcY9IJ-V zE(Z+S5yp*!E8u(I&s~k2=9#*4lgsmbylB6aTO{nkbk~0|Ge&uPZCV^tHW8QFVHbHEL>jQJq?;4z8pn?cV)V zdbifsMh&8SHObG*af}|C9D({g|=h%6#ouaP2Kuf z^E|N5PS2^;9i(S<{2p%4)Z~M69WE!tY`S+$-^SVe-Q6c=I$^*8%x)uhPy3o*GO}gO z^MF-+Bh`cDY24&j;m61nWl9d`z6QGx$9ChgdjcXSI5xQgxiOm-B=l{(m%k#N{Sy2% z*jcFb)koz9$pw`(7bevP#8D0zrquqCqXy*@t@d?M+CaxSlO6dC>z_aCpH{xboNwc4 zy_~JlL?GM`GHttR*vJsd!i8b1@kBCH?A^x8d*?e_YoC%;i&>wuCp*~PjT2M64+06p?kAkrU4Ui~F=Ya`y z6?-9Ys$GJe0w+w-De!kP`$)RGuRmv<)qD#l9Rg?8D6D%-m9zPjv`K9Z9KCO|=iusZ zIZxL9QBD#u#5K_jNYkTm!D( zXTC0l=~7J9IUIec{?@?RXFcauUxjG>&IL88JfuIH3cXsDiRb*vCACjUlhwX{M3C|oFy6FT-CRbc-(QG^?bDImcXww zg#Z+0kye4rs&>A(RlMzH7V^fpAm3#clJBk4W8iI zX%wDjDgvziXQl8|yS8RSZmo(j6*+rOuDTZ!pQ;@-(T6IS42g~;{DV%oU?8Cy8#;;S z-Bqcym&z)XO~Ocz=qOz_(w;8z(b4ALsN76)vrFrOW%p}Pugr=bZPBryT+#MHRLAptf9^KM7|29+Ab{zgw@!zPH6#1Aqz*Mf9 zdzFt|E+5_b98Grl%SVk9HLcpS$Y$ygHH+jY>De+(CMAxFYXh8|!?hljUk^v%M$KVT zEU%KPtGg~DsT9w%e$N2LCVy>>9KF*S1#<24Wt0_5YMs`2p3v|#kM{Op1_UTDQ_NYd zB~&yIX=ZDsz_8J1)QEQ`Hk>;tBg#4NL0;9Zu;RWy3R2b`7Z$0#VM(!5Db7~yxuNfm zQWnja(x)n6r*-PIAnM}yzq{5McA^`>{l`Qa5HFBxME0Ami?eRXrSg%A-LI|%17?@d zba4sRxjPtgFR&V5TRWg`lhnR0?N@}ib4#NYpwRD*dWU<1=+P z>04UQKqFdiD7G4oP`1y7!^vJktR@){HYLxSCvIV7WkUD4*uHt<6SBoQ*IAwcv8f?D zZOTWb2MzNiF&@C>E#VAK){z5?5uFh!BrjCDNF^goHbn6{j6AfEt=3+w@&HnMg@5<> zqS}Q$mQ+$!LG4xy23z!*1Tu?%Mn~}kIY@be%KMMHjNdKFj5B9v#!alMWJ9BBJZm+h zeR^iO8JAh^@2KR)Rb}9zOqXwA=vDIBY^V3$^4Fw|4}Fic_|ZF%l4-4ErD{pjLxc^1 z1(__siTU=^6zaVfOp?m0r)RRiH>`b9(>>$dzY$~7-X%ORqdc?yXnS+}3IB{vn3uz- znNG^U$XD(f=iYub0HJBTYsfL-_kY743VTxiwVCjj(Gw*D@6H2l`zBS9tsJsC!q-_F z4LR=8pgT3_8v=8Kz#ud^`paqoGO8@AnX>M0=x@(1UjK?VF=}>_AnZ70tf%qIjjYrb zYQeLKzn*eqRm-jA#`?N)V?lhU`f#?T+<0&IZ89O}T~q)`fT{ly%JcicVBO=_p+l z8}C`{Ub$a>u0~3ivt^f6zMm~yWvwW71S6<1oFO+hhWU@75Sn0Y9c71W4ZLn6o_(&C zB=)Fe7rq$r`%3Ft$wck@zCK)KGTmJ0MkxQ3sVP5=E6Qvc<$78$(EHb=jPQ*Rv7j-(m(z285gyngmiwx<6u~_~Nz;F7 zq7D=osu-rw2M9HkXzw;yAe5jNgep+0r~+|vaDgh&z{$Zysz5lMi<}v7 zV9>PGJ~ZG+Wk}%$;Y7`O*0P!KKRGSnXjMryW39s<_M^BCVSc-y7%~|z9I=)}&RFv* zW|o2I!TUipryS#89C6g!M;v&y!Vt0OECoepslNY&Llk=Zyj%tA@iv8XI1kWgvPa09 zkg-(~aRk7*tlaoxmJ)|8t5qUSM0&h$8(a4hmEE#b#3ih4UE<2`c}sjZiBwpDrkHa% z+2k&FLCku?^H*{h-ViwwM=0z$k69`TnA<*EIqbHN*TlwtdfP5S4TKtR>+mJYJ^I$1=G!{F!(XN4 z`c}$F2tKf6sV#8Q<1%>D%BOJ*vEg?h2|-*wME$G04m?Tu$?8sW68dM~$saBvn5rSB}9Y zRuZQVC;@!C$a)(_!xk7RlkAiN6Gyn$mU8A=k%O0rjsWN}+ET6mXzM4J!eJ;?jb>Z; z`O|bmZOnj9IOrhpiBWT<|JO3v)QY8>W{=L=v}pA8#+Ih)Lsg(Ce%9wEp>LMUPG=EM zBE7jh*$(w)%9Epsba`?pk(X4pkqm5I!p7O|>tn(7706X@bS(RBIF2h^RNu(^&b(wQ-(< zt6sLHZQN-^W$1mm#G3yBu#CqQdV}#vt9T&4sRY@NQ~Qy%!^8q8uDbgftwt9p~a`(R|YHGV(FN%8H?zk64J8pOEi=rI2I|fh1 zv59*{H40-<{tiaVX>@$h#^@QypiE`ZtTSlV88qt*nso;6Chj(aOT#lb4DZdU>k8h1 zW>ioWUfLCu(wn%KFU2>-bp@sTrr55aAkY-k6^unQN-(}~KMVeZ6yiV9c_2NLnLRGk zl7rx8rs-s41KA69FwI-#MhddUsy`!S?0j2dMrOeOc&1L)&vBdeb7HQ3PAO8)1;KKo zn9NE$NVvl>v6B-aQazVZq*8Bl-z(1ro#n=&#&VV{SgTTjXsNm(x`y$J{6n*eIq9-?W&_mNZqpEQ<$W%9^6zHOJ@4bzLs zBVSP^mj$=K#e@d`-pqapQ3BW=k%tlz zTOR1^qk?#OPnQZ3%P$p1E~Wfcdol>L%He^ybrF1@(}@17y;T*)_uyNNHL^TBKjI6Y zMzy!?BWtm)`*sdO(VOmv)kzi5%5_Oq9-tX{;i7=pyCA7kmh{ zcZ5GV&=x{>kz@+F(u+}u@fi_JFUTq`w3j+wTn(on_i`jbLwjBOp?#BXr2g+RshWU4Rm&mF#)Iv2PyW?-YRrUC&c;6M} z<}-`Hrt00;s?W~<#~la_uib%Np=Xu|iZ99UYrhjbKB;}`N4(fo)BWUldQ(8E(sHQf zOiOT6Fw@wJqoL|UaV$>E51noP26x|t{|CjiH|uiRKe3A^;w4q^CoNyK?A)}If;V+U zVbOA=<;aK~m*Qf{tlZvwpsm5$A+6XYo!Wk^K|eMqs@5-7!@k!aq-y(KlHabHAMl&& zb=mc{Y0R-d{+F~(LwoaJz{73eaDp8;7#uXyjQ?8l7?NumltpsY>oRy9m3H1SBbx1x zKj)*S-Vx1S*Mazd<^5nYv??QZpz|63LR$L|F%mo4J7u7^e|4a}!GxDo9~Mmk|L)3i z_|35PA7u_}VCBvh=rBcl4g2Hk$W({Tyf`GR&Pvon*b8tTh;1Ooe{=-%A4glWGl%hN zjxc`Rlo&je$a`FEQs%xJGyOY8$Yy|puMKQ0xT5mF4K5K4_Ev+l{l?7u8`PG^40ax_ zVdEpio62}lfuwE1WUY37?r%_#G6YgGW!Hp52$gF%<`D%h^kjjBk+qeAh-Y zPE#5C&yK_5!B14~*5ZLe4#Xd&0cbf|j8;6ff82iFWsq)z@*S&o?H}1oMEK1E@kcHK zd_Mw63p-Z-a{tKF0{9PdWF_*!4)m5f*t|p%#b`64OL%yHw5aaQ#aATfXQ=FnRoVat z&~rPA=6%~zjx~1RRja3*TVvG6+5TgfysKlhZi|GkLGQsAk_;G#{TaBe z$L|+$H9bldo6R|_D=UA!ZtH)=AX*Oi>s1E_T5-UZMr8qYeo|jw|9W3k1hvxQ#J!{~ zdvUYx?*6DPL`iKxv#jhuyP%rAe`E_)BMFsA&$Rwtf%JSB5)c817e$icvbPs^pe;(3 zn0#Ip@^3%HnCR@AHaErR5tV2kJA7@e(hl*D8wc7Myz$SC9_J2)=z58lVrSCXM$L!B z2qV&#a`GeTrwpV|l=J|+bV=G@sn@2QqOJFQ(CFrqKpHaJj))>d~-h=rbjycJK`3aKa8vW5!;(bFSZh8&fTC+>04Rh4v(rx4v(m~!q#hYEu9xANW{_oYD4`Yg@?m&Ut-|?}($$4P$E4BG`k`#ZsMc6FX zo9==9sv^r&#F=I)jF!t_nrF2vCHvbM7v2;rxkh{`cyZu2g^(=aWn1|NiwVnCwb&E$ zjb#1v$zt>42O9b&zQu+`-^8{2%E;IM80ajswLQBz({cE|b!LjOwTug6Y0jWnv|~fV zT#>}K*>H1?%lVGy%*qjY{<ljSW zDAQx6G)zui^|YdVcEgjlCnC|5Pn(y9u2=uLf20wLnFUf3>wH-zk~Cp1XLp~#IuEl8 z&rY+U`yt|+%tm=STf=t}UPO%S$^z3GYTeiRd23r@v+s2GDK2_El*vvgU)Mb)tTH?sa0n(Rt+;=sDH1c0V6GSRru&S z%>G%J0VOrxc#rfs8+X=IWDw7WIj+OC>*A5BYF0F|zq zHm$#DQ|zX7>!wYkLDN;!sz#psSi&W(d!H{7w|L1?X(~1Yv09^Rrz-GQRxVAUd~xO8 z3(ur;{`$%!Kqv0iF@-p8YaBq8eZ~G>ozFRM`Pib_8 zQ2Ev1q#9Rs1=LQ%(&6_#Rv4bI5KfWqCI6(0TE9v9=x>F(ZK`(D^rOHwX|*ex+SBrB zJd=33@9S^(r597FzizSIN$?hf#m-7&y$dUJN7m|X;`k;`iNm;+WkgN?6# zHguBR^dmWMpR{JX&i9=R^$t7Vr-#hE0LLiVOnb2hJn8;My=V>~*5^bllpJRzU zF7sr=B-t#hafCl3iNL$EoBW3iXYlIg#9&!Sw!-^k6C$y{CRR$&TTc$}w?yKSjT(^x zP8v7HWj1q`Bv@llk8O(2pgtXa5Yct&+QGFRX(j0Kh z=?6nxtG%W@J=09etUf_IRaFNmz0%*}kY2^TM)*eitB!Be@gF+E(tRo2^#bkN*1jk+ zP5zpr1^SX=(@Swe25VtqL9^A_=sCX{-6`XVpR?@spUE(u*n@yteWr?{S6yjrpXh42 z)*WL!A^xI5AHz$Dx>xQNt{Q&o*C3s=WN8Ebv>JcIu8_kwY9K)e;;RkoF#NwEW%n+T zXt~=Y;YJ<)t;+GU*i|E$#6xjdyRJW%iEo9Uf-72qw@MlMxb)?x~+lLNuihRta}2hd+0a7E}u6DM&&JUQF+U2f8MTe zF}W4?23Gg}7jR~~CMsWfi^^AC`}4(ptb6U1r;JBvF?V1!HLIk>++ho2pqIApp}|^L zdYsKzZg3se<-6n*dcHSx`VwuF@JnKjs`M^)g~|wb)+xM z8Lq*VCDbydDsu33!fq9{KPXz}hUl4mOu>-Gp~~Rr3Epy>;VJs&WSRQ$Q!ImW3B$26 zfxr8NKud_CF2tAT^7C*JKdYDVvwj61zE2$W<7W+V)Gx3_>KAxZe((1E3fz{`wV%gx z?t87)|GTuJfz=G^jJtiG_z#WeLP!uw@EYdm+A;oJVwh6bhzY={slDLNyL{aP{5nDb zT6@pz+b&z$*)7?-=b4yzkW|Arjovs$rNT}gzOTs{9tH=S<2zLr3L(DgnMwb`|4Smr z7f*aeUYswjSz~Njm}J%m54#du%8iFVJZY@h=P*X^dsWD2!n>%lyw{O^CT9ehUe3Zy#=%&xiI2ZLNo}v=N-pbk~GG zJrDt!UC&vi6id@h%c-*|Hr3c-cy=4J$;O*;r%ktEP^u?Cxa4>5?92_^YjhfULEjf- zu#MTZZvva?$LqkyVdE<^Xy1E>DZFRGSzn6%HP`L0Bagj3oDLr~{&TOhKK!~IuGRUQ z`%eCjz3%RI=xkGd(pS9gikX_At|@TIqnCncHnGaYeG)E^7#ltj+i>Dn{7;d<-$w$u z1W*%HUw_MmEzWpL{O6d|o@e^P<43Hqp^8>Dw)7ZVVzYa^qjQ?^t@ms&kTh4&ru}N3 zX1~bTvOdPxk{2^L#A6yF7KkD8C{YlFP9U7wP2Oazbv7H%)&-LCr4%k1H%m!310{Mx zd2!xKg;8D{1*Tk#&FX82tB5Y8%}1!2QRKfL!btkH)3#zDH@?fAQFd0$WRC+dGeAX2qg`MklZ(?{v*k3 zjGAC<@ zWFV3UhZv=?x)O*hhsMfc)od1|c=A#r&6F}2LP5YlmSLWkI(Tu zl>0i)Q_lDN=f)d9P33D}<}+Vkg-B9x#FKZ#*iao|TX{zYFZW}Sx3{eSgmOO_93rS8 zJ_X{_!6BYi5QU!s@!8P0KL(UpV0rSaXtb=sv%FUq8Y0Wk;1D-xh|hued~gVtMk@?N zcxbc^Ba@m1M?HB*qtQA#c$RYXNNasTmR}4G@%I|y7!bz>hxi`~qVPBn$A?Di9)(t? zCl6nW1D)78c$U}bLQjz8iNPUyMF!ro{v;452Z#7jK@^?>;?&S+i4_R5;It?2wALmC z`ZW2T9z4${b*Wzh_2u9Y4{3-lAi4&J$kTXr1JOM+UUC=5Ea>s%^+Y#U&)``eSA$~x z8L~VxIK-GBdT-{4{$rpN!gbamaT#D)+ z`5NICmwx?6kkOoCNcn|}*Z3Ux%#-(7bXR>wVS|WOvjL_+3v`Cy6xV5p%Ww*Zf+*CS zVo0>mZ3L~bCode0R(NoF2gCreH6W@ImM88 ztpmy|IOoYb7u{Uv21lz%7upM2!Yu|F6*p;!2*(%%B1xmAxyF!aeTwuzDN+Hrhq2)U z-Y;Bqgc^u43l4ko4o72tcyPS_LFKppWAYT%G6-Jc;DjcRu$Ms~zO5h%HH#S%^BWaf zpL+5>jYew-`K0fxDpboSgQ9gnLtKW)!gp=L8f zqV;`+)=5v^$!N5OkWX&Yg=+a^P_)uC#AVn_SC3S!P_vmK(P{z8Ea>v&VU*(uHO&*+ zvVI8ptFq|RTOqGU!&8#1S%`DLnu$jU$L(Sqw%~XZgSx?^C=;j(iK1ozruGjL( zpv@KPR{eY#HnU4X6lyjzWOF?aRJmDjzTA^{-q`TByoK^vh?oV3Jb8!uTksIIKQuT` zSf&v<4A&TfuiUO7F2h&S6-1%tD?_5%)g?Xqi6`%q=oTDe-O~&(NMB~%^KTmBGJK^* zK@@7fG9+3{6z=zcgkJXyI)Jk@T3UP=60KN;))`OU znP{|zSoi$-lxmC1tb6`LLtKWh{H=m0)O=+~w0@}bxr_*Nmx6$&u=vSlSvQ{{e&NC? zG?gfBo3JTsY`Gb`(4!Gvx@5;RPVJb=5rdqC8e9H{-j^K|;$01)_hko#cu7Ir71@^^ zb)kr4219=X0Qb1WJ>wR3FNa0*@CYit3S-ONpivMr=+}Gs3JL|W;b;D0P8pG$LJ!MY ziVHnkuna@lj?iKvxQ_aOXhq%py>$27AEdkg?#JowrvH)d{@p|A?k&sH-RFLk?!KA# zF}z>H`*(T&Un|nxmETQw|MdGP4*f9Q9m~7*V7j}rJl#Eo_a8oz?w-ec8SlTWNO!;g zaJqZ@chcSUl##&u4BjX3?%{m}Wxha}gKA}ozSPkS`!u86oS(F|z}Q;PX#tw{E9xBO z#tKfXgA?Vpz>H3Q)=W3tF`Nc8mm9t&{s0a0+#5s_Y6==!H*$>(#VhfE86)-pJGmA( z?FzY{Ga(qxROa;Ry<_>}y#ggWXH)oJjQ`~3MlYd1bL%#i(`>Ce6?Ne9Dw_$8lZJaz zlRLv5PJfl%74_O8uOnY&TdDu6+}E5)n~R!iRi)tJjP`$eIBF?>i0uwS<6}Ql}vrjVHvCCC6A)Z`BFvys9+@wKwl=l1+yO+P&sR^!Yi< z`NnSVbwzT0R_U4k#_cHeC2tozt^NGu)X4>kDm3^@xYO{BcZ?1Hs&O9o9Qlyn#1~b5 z4^MJjA?Q8Q$t8pnQZ`3K`#ARwzc0me#o&=c<;FSgPdxG=_fGfoBz%szN6vCHmHQOs zoP$3|-|TBIH$Hlogq$xO{{om0aqkevJ&Z7yJJxsjdmQU0kO_&7@3pTJd?@z{_9WJO z?Z(LfOJX`H{Gfa~*`V$^sOv0|Izc^BZ*CW6`p>$&t_@Edr!Ky%_DOE)Qk#;w3vDOz zp>3}~4@&*I(K<@AR!&AUvkemu4HtK?z|$&|><(u4II4qHf3yoaO_84Nq^D6k?W22) z4Og(}ra_{5O**X2?y%M0@SlnEj^0k!I;>pMXfpUFp>T>0i(5ebJ%dnmZ?F1#q_>R? zlPN~`uow%`DaD|Ry7fW%ZIt6nmefME^!kS@!Fdt=_Q=Py=V{u0)%*Oc@8C{_-QKS# z)P)#-PDs+)#8_`U@r304nyjb$jFLL8=x_)+o?9?+Z*L}lP5{TNizPSg4t_4tNq?4T zF4v6wg?g3-8~V?4ZNTVk`oVN|WDp$CI6)yLuJ(r7`{QaKch#;;s(ldW44JigDZBDA zCf_ovcvoH~jp@*8hqZZW+*$Jt-<6k6U8ix_UNk1d9eVp(?jfnrbV5<=;jQf% zP+I6E`L06ggwWaUK~MYXUq0TAvU@Z%`agqSxi@OQfbJqg*uHje)U*-F9UZjCjpT{B z$<< z!TrtDk=|*pJ}f$>CyhnzCyjYrpjvm&cL|5|vy>_CxWvmnv@m}=Cpy5J&hB)A zwzSYbX(6fA{s;)q9W-sDv{w9U9wt-AR3QUD71s9vv!*x{QKdjgS*dOn&YGB^o@KOR z)+Ff;xiQCICx3MmCS689mY(FDI+fAOrKdq)=P@E+_ba{xlSQ2EuV|G3HCWWi-{<_D z=kK^+uR5?7l(6t=_&-w!$uzZKhE44gOEoeh1wjg7#?T0o0}YooP9wRZcQ$=^go2rO zRvd@2cGl5rWwd)K(-?Q_xbxXfA8@}_u2i>%XP;Y z4(u!#Pc*4&uRkNSo53JHE90`SQq=tK$gbB{>%3GVC6kZL_fa?RQ0n_Urka~6ot6GG z4kPfCZb7=Gq;9*iu59es4P|gE@HRfljdHoSc=46Le!CC{CdmB7B|o=JjkMz4nBeC| zHxtLhO!6!GpqJ#-=Tu82$G@na3#9cJjis1dGe!LQ0j4RZvamyBhE*-XH0uXpnk#6?zsNM# ztpvNl7$&Q@zsxXyd(DLmGkK)VhEk;Qr6u)n_{htW2V9I)#X7MQpnYvlSM4)zufWQ1b$P!NK|IpeCM-nuj4% zJ#|j(t1O>1d2;!Too?f&-&E1uFjuTWgn;DKZ7Mve6`Z&mpFFNby)Po1m0G9akoHoV ztLxpX)1iHLhyU;$e4O+g9|Q4@Z)CWGhvS_zOBs1AYM@Rd+jJffW%8pgkxWP?)9zt_ zESLenSyQTX=0YT_K_y-d0;Z@en1}Gv)gZh)9w=(vc!uZV|1R6>Ok;bT9sD?1jA;Sv3sae@0Ci3;avw z!`Vct^@1$<2@PuJf#Ufxu1Y^APS(#Ux#~HTeFyiqRH|(m9(i71-$8~f^6X{oJ3J3E z|7H6QEgBzW?X1)e6~55ELnm?c5VKg;q$2&D9?JUP%T#y)tZh*H4sdU6(*anRMrtzy z2*icw$dtK@!KB9|TsGQz!@Xj?;X&Ja!wMS+o~cU9O0CkRl4CKfD%yBM5(NMrzYU0n z?Us!3`*>F=;Jht_N4~;0wT{;o9G>Hqs@WDCFfM#N{q-=O`Or z62O8(zc@E)>_yy3xM3E8tF{47j7uV>EbHMw`Fgg2^y zvyOV)T2nNO_B#%5%x>k%LgH?*_~WQD{O>RhxGc+>ypkCM;T5)YPE8fAQ^u#HO&+gTtWbGV9aSy*kFLJ4rm95couUGg^Ulpn)ew_Kt}qyxCRvh-@Kpw* zDHDd+!t)d2q1;8nfg$c>wmK*_D3htMK9MuWN%2H}AdxIX+@A`i6DH3^OwK8N6J>^( zAwPzHEE2Y!awc`&!2-8_`*XRXsy=DObZl?5RG-yt`!c%3Bqysyu-4>>x{L)d`vnpQ zah2@ZzKoPGygd}`hHWaOPxDnO@F9OlBw4A?J))|9=%g_T##_eDVAjZ2RGboNKNTV2 z*!If47?6nXI}`&FljPw)>o9)S2)529c1rw*xZYF+5YQbIM^>fd9IE1Fdnqy!MuJ+@ z;H=aCDe4z>6vcB&u7+iDmZjo~-6EtQ^OW>$uc8^qjo2M$sY$7-?=l7cun1!eHhx8x zJ~4@u%?NQ>Gm7{QECP}e(h)($(vF&fI(QOR+!DesgXbtQOtM%JmU7{xWgnB8&exJW z&j!CXFrzv+dE8`G{`w}W3StYG?^d;DFru4<_+>M)jeb&#Mq|TR)<@D>0Sr?)x<9P0 zm$5>EQ@298@4b2oB4lvTb*oxa%8j$+bsWBWjOQuxUJWtttv7cgS&^*ztR|CxAuBaR zX7o`ISFzNbqscF;_0`k;c`g{KQB`}#l6UgB%?kH{yj4E0#;^)@V%bZqb@|V_S3ba~ zO$4#zac%{#nMG&{YAi&u&240TMulM%dcE9ZMsLPG@jpSx_~~gGXjJ{DVFIC_5T_Ud z{aUxJbC#k`H635TkZAoKV0X`4s!5*n^v~j)Pi`sN>S|UVs>#EPE~n(oFnwG zXsfhnX_f4K&$GjsgfR>lmy|X+cxdE=AoF);rMk<(cv{s7F3BT>)9_5mg#Yi><}RhG z3Z4yhqvqepL+WSKi`{x6+b%%(Sxpb@#aWW{8uoxx-^pP;dtUWma)HGbnjIKsywz{ZAY^k7uIE(J)7 z0${)#VQB2wehfkkX@OQR0$ONEWwU6HZu~?Xneb1VZo?0mYr$#cqq>dbU*QQcG;dD_ zB9x`_PtJt$u!01eRVNs}>my`xSa@US9ma-JK&$YZn8>4w(q)762C}N^4UV=*pxVjz zUHYM3R`!)=0Zu1<($s&9v`eNpS5zyIk;L6-f3ILVT5t25rLz zrMq6WO?aWyW1tFZ&&g~`gy1yd+sEqG@iH~9@7O+$w}CT{HDgxBLoRC~)r*(uS*kkJ z7L$l3asJO;9LiX0FoR7gvt^eltAUEG&tkC^#~gGW1YL|*f{x1Splps+e_ka>9Ih&P zQ|6@b*YGma+h_btOeIC&Y>4XmD&~6SC+3o=z&y#7Ii?8s?|*+vp!H;~jh+N{gCE&; ze;7QQ;IGGtC+1z8&{;{}Hkmt^H+q;im?wmo{-4hiu$j35u$+kJ` z7)5#8)94Z{Gi(^exY>S{bdiiAhe)i@02!!+lF4Nfw{oB~khp<2d#uF2sD`1MW9z7) z%&x^j1seKiNhBCRecn`|)nDkb8vh*6&^kU#q`XjiUFb(DV#T4^^!=v;!)H+0=7~&n z2xQq`werg9W=${;i`dvX$;M1rz|QyWm3j5&LX$)UojLXW?5f7Y=545qA09R$Tdvuds{( zxy0vEL!>gKEZsy1-f}urHg2kX=wGZ4;}YjUZ@L<|d;FKy>u*6;k)vva)}BhEMy4M% ztdL*&<#4%Ss%XiFY&nm)+}`H#PtSDtY*VMcIg%`vG3UEIjNMpn(E5Zh>tbQhT%l)^ zeP6=ojVStpE}`@}COimbXfbC_%UmrRf0lwEO|AmPx*Gv0qwF^a)zlxr(gxw2%dV^$A#?@OXMJWCBulsFh`yY$leC ze2&k~*5IL7r*J-t6fo^YJIH6sHa-Op#|7d$*GRz&Ce^8|vf5;;Y7t;!2672I4zl{m zdK4zJ=m1%=W4B1~n=@IEC9rH60oEgO$|P2`mEb=WdY+S^Axf7O@dg9WnzKU3C=hVW znv-jT$XCR+G9ke_o*OqSl945XoTbW6shj1KOf9LbZ^SBPDhrcRxcnknM#zd3VK#Z2 zPM6B;U%KrVj;zvdjB9f3G~JU>AKw-kYm* znDWaw%TtG_EbG*s8?#I)+wHP@TiVc2nWG2T`XnFQmuew9u0s{#9@nM|qjIHcj7dBd zZWtJ6KO1%7I3wFSXv|h7(EAY)d-i95{i}$ti3HL1*WDa&Q@nH@y%}YHJy(5*vcK-T zP8&!slL=QFNl#RKURymM)T;VTb&r3Bsq|osHr;-$HroyjEr@rJKQ*J^e%tC;3j}!F zWWK~O_o)D&<1!Q~{r1&iI@Y)7iYG%@vcHKydvo|ItUOwqLbo)B4Q&zdJP{bn;aCH697eDN6SJljwj`s`&OUg54PZ!|vtl3U<@mVTaW$li?@4NBAQbv8#7XW>TL2bo=Xz`1-V1mYaH8U*B}c z{bi;2Qn~qe7>W!`1;lARL!BOI#`NKVryd8E=fWq#2QJA&viNdZB#W!9pS~2yBBtsE z$>}R=zRpSK6P<-^ll>)l4$M~DX}6x$Z#Ie=n^@}~$yPS<1SOsCdD}aH@4f?1Nu@R^ zYp2-%9y`6y`@r<`-a82AU?Q@%W~H>m?@3&4)=0gTDZsRdDL`YF0$^{&5eo3r{*r1N zY!cRdlYGmWAj;9zxw;&|%R4LlT6DZbO%A`Pb6~~qz%m+iLZ9|q4t$Y!u^hPS*8L-! z2#0Uf&{CNL@vmG2{hSTGdf5Jvb%Zfu{fwC9oK^eGY93uR(xfrIvAqGGEAYB>%nL76 z{UizB*a1A+tb5{x7Y;1m6i^ikD7&BYi*yE?W{sjPimc+_i>#NlbjgAIO(7NoeFHse zcLxqyq&p%VV0Yrn|4s*pG7=p?6910V^ReDMs@!Z-4Maout|_nn6PxX|i*Xs2gw1;6 z*KLWl`DbevckTOeSJ;UaJ<>*qk!QdEh9{)NL6vg`6~^#~QO1_%f7c&IJZWuz7!L|n zaUGBP+Ws&`5~KZL{Ma^78E-ZJR*9yacdVL(y}lrShZ(MCWmNZjsJMxA+a;&K$QHUS zl+F8^siOR(c1SSOI~zwHUzeR0N7aEg;RWIP_G95UtS87l;sxWR_JR?X(Jn?nl|k74 zGIj$QRfg5@|FQQja8(uS|Nrtr;-%bqzq`FgC59$N-ath|LnTE;vjhQ!+Y(ov}+VdHPO?`VVCX7pc?0IS( zd)8XBk{D0(8G$t`2V%_+kQWWDZ_SgfHO1GuTuHINWqzEsXDDw^`Mu}!XY|G2_O{~#zgyoASaZ{9=QnCQ{b*3Ds;Ymoj=II{ zd%o2D!Jwe3HH7JWtiFUO!TtsDWvi)q)p}H|m+7Mw`>{;E?0dX_kL}yK@Z-YPmrvpI ze&;t;lZjNw+eLYaam^6kN!T^Vhq1inE`jZ7hnZ@W8|o^n?m#(9^$V_wLAA5$qdiN4 z@=h4_)gZd{GsgREcjO1V?}4tG_56p=&U*gzm%rkBkKCTQld~s(vzxXRY2As2?POF| z>y@q9ErvJ$xRzv||0qAIQLdMAZ#|dWHQ9)F+}`%VMZr}S^css5Ge1ZQ{-6=>ac7Mk21HJyS9f5}~Y03Rv-iWGsvQ9?d*5&_h_G5J4j)jPM z9n8zlm%XN!JiBiO-@`A*^YYeZueDzG*nRja_dE#cg{*t-mi%m$KF4=fF5^`-w-dGY z&C;ei>y+GmANiw>CWHKryN(}%r4K%_Bg}^fk8M62SvR+;GqL$$^P&0Ct^e}= z!Mc-D2_bH!H6HTLt+~)hB-~6fJ$L?GGtl26^l2Ws>C!?KuQ0I~kOLTS%-sFV%-!Rw ztySUZzUpm)?ZpJ+m|x#2J@UN1ux{p6*|f{H;}7)r{ePgpr`7iNbNAFYT_z!>zbDrF z{QK7J@1A_K!2Uwnt;BuW>l&_7hPxU02tEGo2Rpuc)tKz)pMewV=2tZa+s)#hn9Je7 zS8#V^%Db@{XWY?V!QF%i0k7arHSv$~3htKfE4V9{l5az=;P$$iH1rDYmKS=eemuzU zz}Q!CyYC}!`1eX!hv-*+t?tX&VdS#e*SQ5h%L&{v|CW94@6ZjbSp4CAo%_k;8^DrB z-F@!`rmCT7ZuO43uhZv7G5g+`!da$g;lylxcWP8e+4}D8)ZO#xH;q=t+)eN@84GHxjkIYmo3N@?ch4tQVVlFu*D(^bM_$sh827vP!Phli z;Es5+Oy({;h8Mb(F+1XmTz^QvVwbfP7ZR#oay!o5o>a~1TsgymmA5~Cy$2sg9b!*b5-wso=<5gRVK0wXdtG28sVN$l>y82(;9v|gKoB2`0+vC-jwDE28 z+~`=h$GZml?K|Y_S|BK3ul$#;4UW23zV))p-ALvKYkpT8-BWEqYQ_awI7sb1|t*!gBKu6p_?{#h2CMd+^fDQDT2kNG8)86q%4u&=Gk5EY9 z*7^xt#04yG9K-xt`VTX|mb+}`*E0OSeSUo%i)sApdR0EV*ZH@8uSm}g>(8&+&om;< zR5digt=>`R*F-mpJHP(qn(P?2&e!b#|Gdg3`p(R&YFllq0yfddx%CRzL@!%nzdvIW zz1K8^2fOCmMT`M#Q~RwVzbz{5gen`^2~|em!9?8&wO=9K^la@WdaOgEIXl;W!>0PWrH0mQub+Ha z=lHkRN4W+1x7SOcQz({;3gcG?X|(C#30-?^+v`osj(K~1v0DeeLS;C}8iA@D`}TUT zTi=;=x7Qmp>OszHd@lT(O=N#$hkae+2JW^0kpaUV5IqTRXs`Wmnsoo+=694$_ubsO zG&t#=`SsB!T{hObwr1m);h+%Ld;y#Ak1*5nRbhR)V$Bzy)|Pz#x0IOM-Ej9bIhLLI zb?vBS>Z4uX);#>Qo9*>g5k~0oVMQ9Py0~c5KEn0aKFp7EW%DpU%EaSw;1M?4dr>y< zFh9ZM@hSN?{4n1!ng6ke`5u#rmrJ|wYPUoF)Q9U%AK6#` zFqJvxef4psUOb8pX`kr&-3wRt?U~;{^by8*bNAI(xOJY%Q|^!lDoy==bzi+}VY9WK zQ;2;-W?y~Xvw^|po=zdhd)(pzciK1fJBfb7wl{`t;CB)u$S!b~y(04|SmB;Y_ycy? zdtH^?Wq%q=P!0c1qMnca>hC0$e0lJ<{!XI%b%6W$U3K$&4j%oUgS*tpGF}y%B5HoH zllqS+qQY?dVwde+)IWL4{QH#Z?uTr6%Y2nRlE9oV2{3KUhQCbRO?oP55am{ z=1nPP%Y3z)HxuIj)RuYej;Xt4Ud0o5Y+L3#vLbd2Tjn3Dw`Jax@&Eaj`A4X2!&~MH z-G-a}k$yi{MMvH;UvAz4USH@bhzJljC(Z-uNt&w%)YTjtH@0BZ%>exh%C*1MD9 z=Z`pxx|h0@Im-U|_c;Ch`{%WpT^n$(31STXN&DyTA*j)B3O-^cU3Zpf7S;YvztU{SUZ1xR$y<EPc*Kc9Bh?xJ5q_q*F~__~4{`Dh#HpCK}{MV$@wdd5`S!TG6l>oIk1gInnP*c_Ou z+^vDy3eIl>Yb-qfK~S*h2vJ%u>q)PfrnnUdNZxu`6Qkoy3D_=wK7sBi)X=Ela=)Sd z@`ZeA67l%`#+*T6)Pa8Y@0agjvT;Y4hBTQ~YO^9&faZG@H5=ylU@QNI`6fH7)QUi( zA8DWbG|cVplP7oA7}vmZXEqicscVYy8R`yj}X`7lGk&Up59HMlcg z1E^+ae3&BE-x=T4?2P9JK{-CF;J1O10@s(}{S;xFLzTN-C2g3i*-uOws zVQ;*LbEI~Adt+T^)*lhaxKaK^wp-QaREBg|PMkSGA&g|&t#yoY&a}W?^UIV&on7;t z%o!Wxh4-YQRt^%BdQZF?aE!a=d)4fk_txJvU%$Z=;?4@cwue5HRm?r-;1nJGevH%H zZXT|G|6FL=;@&?mcm1{Z&&956?w^ZHJpcW3z0L4GlnvZJmzX?0rAZCnKgXHO|JeO= zqRE8WGa)<*KWFEkxf$MEH`Tv?9=4%|`jM!(#2( z!LLLW*){27?oYcJTwnDu-=PdSzS6Y5W;1xTE1S*W&JD7R*$f_rzjiaY$JNYiXfwDM zbpxBhBT&`Z3?AiX_5a9baJ8O}|5G-Dn?c40eBk)GB(i3Z1?~?|bdB7mdx9yyW`DQ| zZ#z3+;U<%zRd+x5T@gXOJ?rHh3LhXhF8HM&iRI&Zc-Ta8SAz6%4u!`W{arB%l5;40 zIPOb9QY*fjSPFk)2Ju~Ki0kDX3ZE@k`Af9<7f3JXPdWlxQU-`>96u#HyFVX6E9EV=cq42G8m0qINmo!5! z=TP`+xzbCt`UvUeU|*}3X!Wal)0Dp)`rqa+(du`o zeR8m`ZJ$J|Pf-4H7=LnAKZ#afBE1~yZ}k$bzDjyIhr)MRy+o@|lU@$>vwDeEpP>Gc zL;1FUBwGD`)n5+wwe^>1^##()VSHP?M5_Lprzg36bJedW6S8&LihwOnG9bLsY&T>}SiDX!XI$Uk>)OdWlxwNqRZdPp;Z0(duI``g%Fo*Vhx*y{60JT#dO7r; z)l0Pc9h#ryP=7l=NwoR`)n5+vv-Ou~^&!&B!Twe+(dr8@`g%E}xAvE4^%2s`Vg9vx ziB`Ww^^?Q+vh|Z_^${vx4(V^^?Q=W9ui; z>Pw`T!~ACT60JT#{U-SI*C9MaqJC0c!% z>?eow$J$S#)mJIK9LASTFVX5(DZL!*W7A8t`W+fyau`2$d`YzWEz--O|Eyl3)$dpN za+rT?`4X*ux%yWQ?YI3a(dr|Vza0AC<}cCe)1;R}|5?36tFKb~t?z<}cCe3#6CB`D67Gt-h1&Cx`jV z+E1d@2TL!9`OmgbqSc3}{&F}!Z2cu#{TA6@4*h5CFVX6&)IK@b&$dsZ)pwF!4)wEo ziB`W{^^-&UE*ifGajo?kzUTB@C2)uX!VR9a%CThR=-7hIrP8POSJmc z(#ts%US#zWt-eg-R}S-!9lsK-ev9;S$lvNETKx{`<muU4>(#xTJRxi=&_e(E_ z`NirbT77U!^l~^qtX`tkcamNX<4>+T{sQzN(#yeqRxi<}kC0vtLptJF6reQ3a_wwiGKa`8JqMK%Z-UaeLSsuM)A`& z)qnes=jzuFEo`c$9v2qV!^6)I=YKKh0{1HmRS!=6>Cj6-16uX=ti7kF=lQ#a<6AH1 zP}y&>IAUA2#)JD#0t@X;1=Ifh#}($O3c0ba3q> zy_{3v9^eGY7gT@^U~o3Q!0VKr{#gU4R3=+|bL}4xR&Rz;ciW5hf1G3&esb+8qJwxVx;EQwqw#Hc$zwLDTiL4fF>?z-SN) zrh^o)5G)5P!F`|kT2JPFo-Tfqvj5Tt=wAQp@SgTb}bK}RdjkAv&z3-BJ;49Y+WxC#6nOS?4*2r%Ud|4%5tM-I!CyfJhzH|91Q-CifmYz>$4CcufakzEum-FISAZqp zLXZH)fx(~$@Bjzw=bYUQD!@jazhD(u1`2?V(z_b*LKhB?;(!knfl^Qbs)461dJqSEpa_(L3Q!F^?a+fb-~&aV6jXp};AxK@ z!~q{D0;Qk=R0B^3^dJuSKoKYf6`&e;I-&=0zz2#zDX0L|z|#pmhyy-Q1WG{#s0NxbU_c|fDaUbQcwY^fu}2a5C?pq2$X^fPz^lY(1SSO14W<|R02(twROs)?1yG_@w7|m;+dAUAS-)OmN&H^In}2U zh_oRkEEl3Jj>~=1Bud^ua%a!E z6;y-$py_|QdD?+65C;lCG1vn30ngXnJVQVNSO!YLRv;Vhf~!HR>TVt{hyruw%uUKo zO$kv4&6$&&lA4?W`;v0$Sre9YL@x$dQgS zoEQD}!ast5Uf{g*9VgqDnv+D?iXTdxQ%{9M0Ww~vzZ-svqc8XlC(TF@a`Tp_ zC$*EPDKW#Fo5#GE?46&Vl#^n@WrVEx#=lT~Kx+xhmmvvFG$u7BAYxrD`jpgpN%k)4~LW9p@TO3GPOBcabbE+UOuf) zNze6VBqgV2re@`NGn0I3Uuv57SE>*gr`9&!+G+&kakOeUiOJc%#SIuLF+U~Go0FQC zpOfWwN8;ERCvi%A{P^0wtLbfjU;5=EXQ;8OacK;nDzB56otc&H)!4{QSC1#w8pDk6 zfQ~y%ci#B{TGD1FWhKo|P5CwB)sJ^X1FCL;{ZP+JwU(|E&)T}d*oi5Nvyw6y?&&ob zCOO`D**RXd-RhF^QVY`a0*1AXL7bX_(O?lZaelQjYU5!xJ4(KF&ey!OoK!As{HLv* zYrMUCd&$=E#&e!~qf>K}bJBh0v~|3rbt;d^NXpF((0G&bydiaTqjWulJ^WE)(mC~V zlG7FkBtk2FcBW6Wpm*}z3z=oTvAV=^rwFMXeh=fS+H|vSlEoXW@P9M#&v=d(-Juxr@&Xh5!{T>W=?Q0Tfy-=`d4b_xWd9K z3NJ0BfF@TIUU6AryPzOSxcu_V*{mHFRv1^f+zEC7bWaVdMFc*h#Rg>>t%_7)icguKPb5L+{=mjq=pg0{-U;aC9 zT*c}Eceaw0^!@q=H?5id{5K~jcbDv>Jn`QlL7TT-Iq&+P+7HW!cEcRc&Z5+n14hq% zx6#<%w|4A*(&Re{k7|5lvuCfG-nZL7e|}+p=9b)DnGb!H<6gWx`+CYrcPGEnY0cOD z{_^H)zOO%8&~xOMx6jeVjN|OiI{5r+7q;3kZ*b4E1~zFtc2>Xr+b)_u;koDEqtTv! z3@iyA^VkDRyY#v?>h-^W*Yfqv%T8+f)zarz_Iqf&-ZB)`<%9R)@7%g6Y38m6ADsPC ztLUKb=Xcof=9EXC`sL(n{*k!y6t|3Ct^WS6j%%)cWcvMgo_*XIkDYUV<(yrGEgm>n z9kuh?l8VAE3;HC}(uml>H@!6DZ*PyDusf;u{X0i^hCh?@-DlV3wVzpj{C(Z`X6!u0 z^Va9&=efMcc}bJA(ogwIr*5CbH9d962dDk#q`2f;E_(UC4tpkC8!|AsV|Lc~E?J#r z?Wn>1qaJD+m($~?x8GcO^1og?Z{AGv?5 zb72y16x)4b_iN@qKi%7N<5dsSCYdZSH^D?N#&JXEkqs`>Ed!zNqcF zF&kgM`?IlAF40ScJpU?K`D0_=Ew{oszq&O4#rN-Tw|?g*ALX=8jXfu1QHRPOGM~F{ z%(-v8eB(*e9{l8;lRht5ecz*eNYj`J6?^wpFYj~73z;nvvYT!i^Zfat`(uJn{7<); z#XpBs?|Uus-hrKqFM4OgmC@-JH_H0SbNlozi}Tm;?Z1y7TR%L1`DHhBhb_U|Cr!WdZ{03@cHfox3#+0Bym5B% zs5^p!Umkhf)5TR=-uPl#`OhCe7TxIU(!YB9=Jv~Z^U|Nnc0U}{zFE}VVM`{TzvlJR zM}0CmGqZKCZ%?28+4Q#0_PhDruR@l6b<aA?o7y%7)H^yce7|NZ^fKAdz# zdD^tQ&QE{rs^M+=UNrV%ZpTJ-J8444tQil_-TS~*y}$n8m%E?b{q@HkzkO!j>4nSJ zojGzq*{170T-!M~W#9Hm7aj^f;lkXl)q6r|lYc)`vW9{GMldWtT;cJG^0 z_{$@2PWyL>cfxJ^XWaZ?i-Qk0`pbO-CZylEsmICPHox@1wzqdIeCdogTTOfKhN9bF zy0zrhbNY2!Sbco+;<+ka%v?sZo@P;_4Jvrb=~ z-)zY_*X=nwbkR>)w|)`Tvcu;6*SGRi&-wPmjOY7}zWS$^Z@;c(?juVN1zjFGrZheO z)X)LTX58obx@UzGwdAGG=9X1mxO|7_vsJHcd12aBo@r0ctk}NsmxMu=l{M)+Hnz!G zFHh{e)_I}lC*`q=?<#zG*qfn`?%Cfv^MYHiiulWp&Wm5qS@>eXo$EhaJgLdb-R{)k zICt&YK071(;@!7>v2)l@cV*9AbncL=U#yyW>W2v*4u2!z(74|1m(D1eng2!qsq+_g zOn&O~ujaJ)@2BZ!Rh=GQ98_}U`awU8Y2CBe`(tM9xas?@58mB5GEIy5DF-j!cv{n! z&nf-)_aDDE>8^j|zTbTJ>i8?|mMG! z&fD(Hf;T@J{pPbD_8!@O#z&9*ea>g!FS`1bFYY;S%4tnTO#WgtzkI?-`(WRc=3~$Q zc=Wo52M&4sp6q*Gi_BUQvhK%4&z@7UW!wD9{Us02ANKM?k5Au{(en1&Z*-oGId8<@ zH%{1h#?C1dtKPrpgD21kGp_vQ!Gd-tKXUGYvu^&XU;D6AV_TlkX8bK;A+74tK{Jg(%nbN7GSWb@r0PbnVS$Mf#}xtB*jy|c|5O*&oayKU&M zDOFP*`)txL9h;qY-^7g{zx!Z|$^V|a;xBvGzuqfq-gf72?eF?L|I@ACo_yM}OI7{d z9T%ni^8H&EjaXQ`=d^Yg&x_r6`oM3>zPtAL)@{>Q#^#o^?w=Udw$bnw%P-p6EA-wo zzkd0>zpoqguhFAoe|je)=;|$Hje7i|Xp6dLsrkhXQdfZd5eD&zryUuBT`zwuiy>RWhpARaW z{`|Ei38xJi-J|K%?LOOdu? zCh?J$vi&w{ICRW@nc#3hy2`;)ewz7LUJd%>7?1p78m9d*AANr}FDJUI}`4 z%{9+tI4Pe#zH8FGS-~ZD-7)qbd0XPIJuu_Nysg`xFB_eeymQ9Z^PULbbFghj(z%Z`wN_VeE5Z?AoJ*2velK61G)vghq@WrkL@>U43(?3L*k zd_3UVl$f*by79!y)?pCr}1$;oW{-iIgNuuohHHIPLt*%ohB_}oTe?N zI89rg?=)?d?gX{UcY=<;%n3T7$O&qFr*mBEhn?d*8=d1$e8XvWVx`lp&9_down2@8 z+jeRc+&;8XaECFCns=DlsCh?UqvoBKH)_$TxKWGF>l?M`@>Zi3UH{XlW!L77TXyT$ zxMg?EA1OfJ6!o0sIK@{qa-v4Jb_#Fe{mmbLALP7pD?cviunwjbu)x)+*{opYIC-p( z&E~4l_-DJZk_oXZWhQ)%8=mK`mu0cG#@Ynw^4#>uG6+@P=|>1v>;CL=Yip{!dmW|Z zMoyzfnnC~^;K!@OANt$;X30=_y7{UO9Bv*q&+(JSIq6yRobi*!$InEmTfD{aq*0Tc ztfVYwDjr?M=OT#5Pl`S{JuBtp-JO%X~n#UHMPeZ`*vl)w5& zWoH0|X96$qfo>oNsIF><;uiwd`BFb$221}pApJ6+e69m0gFF24U9jrA2B^G$0>yg@ zsD66)j`Z&W={sQ**=Krsu2zV~oO-Hv%#`?{-bvYc-qft@{P}6#%+$>6oWIRn)X<;qV7_kiWA{BcJWTLIAK%y2Gu!Xq zvA?S)&+otPU{_D9Glto0loQLJ4kM3oCc7b{oOow!o$z=@Zd{$PiNu{mNIbbramTgE zW0Et?nMn8)XFO%p<{gi$aC0Vw8d^dDI5d56FI!{Eaq@xVuogB4mC6VR6d)t z$a^B6(&Bjc(_3?1s(Vcm&s9M_;p3Ry(&4G@XTMnKQjpwY{ON0DlTU6<43nRpxz>i6 zymJCVY&o_0nDX)|y*6wDrK+yu$Zak>5n1*b#Y`-gtXfU*w@oY?kAmmJQ%UE8C-Z5D zi8&LpxpHxwXu^|WlYhROtMW1BfHG6H9vid22!x%fyUv zVz_e4mHOCSOHdpwO|9N0K36H5Ztu8#{)V6F9-o)AOb{z7!U^%Kq5#31z-hO1r&b` zCttI}dB#-QxpmK^2H- zfqg+02y2PGNUP`Th4{_W_4?1#73!nEvl$KA5fRF`*14@K{7gdXKUx3vXX`psHL@GZ z;mGx{SElBoa}bnIuzo1~p&e)*;=U)ocq)UcX-dhV#+6nM8^Yw*B02y;V-_7}5CDY^t3+c5jI8G#4FnU6eMN zJoLGi$LtqMZnB4&ljphTfIc707^>Sdrj4oGHLLA)_ooEjpKEtfC}&p^B`v_6Pnp`m zqEgl8YQ^EUJ955tTbx3@G}5!lb1rVd@65;ap|PCWZtm=LEpT|fti9DL9c{pA9mOO&#yvpDA3A+LCfor@Bw(+0UYT35Ac%%Fmp-IG1Z0J$%bZ%|)ks8R;5g zRL%*2O*Lckb8>j_9ha26fG4-(Q)==>XEGe0H7}bybC{0)y0mPnB=QzvAM5R+SoDU zqvNydB&o@-Hk25|Q<=J}tp69nlRfiSUvnfmhG&>Z`&-7nXZ^pr@h@#u`&YAQ@hhId z94>2A``5V9vHjWffi2=m@9+2vK0@o;u<_Hw>|{%6=dj(Mz3|e@{lcSPa~2N*Sx_jEftKeR+mw39y3x8P_3R-7)>?cX+!0<1 z_lB3jeceGr!L>Kt;4;A+`gva+`^{sMLtp!4r_c>{oI(#*d5w%v zsN1FF>di69Rw z2Wvq&*bY{awi2!e2SBUNqyq!Ma1aN4U>Q){zAsZ2{&G+Os=$8Gv|-0@ky{Jhh$^Yb9D`|P4NeM;)W^kg^pq?8mkLTiwZ z%9-!YNYBmVX-Bp6Qsjc|0Q!k0v-d9E`)lL}x;8j`iZ&EMG4AC-FMd6NPxIzG3Kh|L!2zQvoA zGe2KjhgF|=%)xff#a=Sba$BCuHdAk|dwX_dJ^3X0R1>}u!#>LKr%l$@-MpOa3}wRZ zaebRbeW^C{^^|#eUbnUCl$tu^rlzV1*fA+3G&>99xmG{CT(uQ@kIu-uv$V~%bATO_QZllW7kHBvW~ZmP_LfbvxVH-&3)EM!uvl#mjaJ|iP_eo}^a?qbZ6n|e`xYL?sSr_xSM1e&vkf|+0u z;F+4U4!i}v1zM;)4NL?Xz^2iY4n79BzjvIQ!4qIR_zs*%yfC1ha+&gX<(vjFARb)E z-Fzsk&~e0F!YWfJPf8}?U*N9xoZ~*{G~w~?GtNPM^rXvi2K6~tkGfzz3-#+!tZ~>7Q?k~|YzXrw zluY%^Q=JwqOKfDEUj#WGpBQC;*sBl9%m$nlhi*1OF2k`9lf zJr<_Mb~Q^jeFpYx~3F$c9`e)Jtn@s5Mdd^f*j! zd$WEzg{#E5ZtYBu)Q^+yu45furp8_-Fk|I#eHOLRQ9nPeuF5KDj+fN)YFd1xxU#EO zFVnH4?CWLy&P!UY(rT?O`w02x)9Xjd%UJI4`Y1e!1geSZdgR`!uRna0)=jTHG6m$P zXFqChjynqL#>sWR@n)aFXyq`+wWwC+l1O7$eoepB)oawMrdrF)a$}~tmU1X3FrOpW zqi&qK^-zDCGyCwfSnH^@XRp>%wYq3pkVQLlkW;CFJ#!Ba(|M3h4{7A+4B)2fAzBgHXmuU=|n&zQsGX_eOO0kbo(;_F$a*Qkh? zJ?yh6eMk35>D7B?ZqiwCH3U`t|TpPdy7ea(az4J(I}B zcBa=f-_*}Tb}-}8Jd>`kUq~+cq*_8O^@C}P&J%sYnK7!*pDb6WC+;ev_Pnz5nVrAv zd{y`J!g0?AbABqX+RrGJm+XErXcX7Zf3lv+nos@pY$}gd>Wm7^Lw&99P20Hkb2T*J zlT~fgGZ}sMXnfhYcK+A1Ft0mT*|Sgksq{?8oK@zGR9LOO^@LI*z}Q=7mqx9b*N^u3 z5vbEOkZGChX+Lu`AJqNK3DgCqIsCJyKkcad*`ueZvX}Z&Hc<=bMfT=Q6)v^;zxr zPr$#y@7J~OcE4Zsbb6TlRfi#d|JnFs{eIahCBVNF|2VF6Rn}_1Uv=2v_p5G|e!ucR zfIpg@PO5*mp2n~E(SE<;r}_PgzYM?HuKE|_AI}aNg>S$=i5(_W@K*%*_xb&k2=CfuAx<(J_W%AK=e2m{e7QfH$m#tR% z{TdHte!q5*?C|?lxBY&<+SRSM$x}8N?)R%-68(O)ajD-g`>*l)b+5D8@1Ksp3jb7R zI{Rr@=jmf?tM<0TFB__E-TZ##(>K7cvIih*7m8aC{AXi1l^u&;<5=}haQ(B~y=o}| zaqvWGd+0U(7b!pYi zb4Jrv!J$o?G;QVa1a}Wc?XEc`hIRKe#-9c^fqigOxBw1 z)}Gcvxr~*4?V$HgGlE7TyoHgPlQUy)GEmdYlK= z`dlZtGwg-Cz#*{K5yN1u>qWp?XN-b%j~xSReK8L9!U=FMIOClj?z*1r+Xp$3@V;;w z+z#nz90gaw8qd|R&gK2E#-%e@^A_g`tnP?Jh%y52seebjt~T|Kt2v$1vi7&z`<}S z+#J@PrIzpp0pa2MDM4}&A%1#mRXMgk`u zZVD&D&EO2UIa~m@fS19o;38OWAzBR&gG=B>On7B*Q+PAn46cBi!@J-Xa24DN-UoMq zoe0vyo!~}Hj3IDycnI7Aj)Ggkv2YhS0UieX;6_Z8g>Z9t1>6E&1$Tkhz{B7Ta3e3{ z3T_VXfLp-3rH8Af@9Q|uS?J+ba0|E-JPhs&HwvLX(!){G!?6kM4%n zJcXMsWjw-N;8<99ggWMOm99hgm^$p*sku^Cc&;0+RVN+VH>pGSZ-%q{Y~tzuO^5C* zbfo#?o1N8s@5i5??iF-s?M#R6H+1OU&#;lTDyhTgkFVW?I_$lw_7mzbt0Urz{PIGV zwYsK5_b@tikE%oKggSC-+F|OWRRJ9t{_^Je>!;|A z?SRvv-G(~MYOUfKJ1y|XU*OMA_qjUq{rTqk%h$cT4&A%!(5jPRQ~w26Oh;yo9gIHH zAFg#(9kTBNSo{8D0o`${r5XpJ{_9MQg;1_D^%<=35XzP1RM)Q^fn(gYd5wcmt|s+) ztg#^fSo|6fp`@IGUt=JYD?)vSYaGb0aE*mfLStQjKK>Z@eotdU;VMhxLjHLC8VjLZ z=_-B}JtqHT{2CLXTm>pz<3e>-{u&#h_!LLuLw;RbYmBHY#nCuXdsTmpl~ArIl}|3# zP`KKnF%wD+IF;}#ZM>USV@KsGt=3^xPfj~ZQl8V?Yjuq))kpUO8e7U!cF-PL*;Dyz zjD=FFu30qB^mQl7t`H4bfmX)J~kTlJJa zl-Q&27r5;*eyzdSaE)2(*SJ+bs-9-2>^Rq+8o#QW>XYf#d7@iqv;JuM#q158=(b(s zJCqveI!t3+evK=QbNQ9O#=7iQzbzX3w(sV;^*80}T(EV}`C$DzCu;p>jH#YFH*9#O z+ZVR}>PO?(N}%=YoRQs>HrcJS?nrd*sUOX`V9q0(LhaG{q+V8!+w)4fsCOMkm}%u` z*NPg)8tbMHw7#h^EgPBhaJ+Laesf;wE==P_bu#tPYKd}AAl#f+qg^|ibH>Cs=Zp!@ za?{##MmE(Qxaw?b97jmt7&7O8Id22U*%-Ht8KhKN+1H#WroTtK_6qFF!1%WPW0^m6 zn0AhJ$AbB+(H*I6v%b$|+dRrWcTJm(?M<7)`Kck7$$elprm4Vz}Bzb&Ru zbS_$Z$)-vpjp=Qh#+-?!&ZFIau(r^gW5&P)xBe!MRwHb_`i7v5W7ZaJ+jU=Q@-ZXX z`Im?iDz(w$T@M`!`xCAbS*TMgQ z%i%ZRt?=9M4tN{98@?Z|hS$Rf;LULGX!i5K?O@FWUU(}!0Nw;gz*}IgHJl7bBi{zk zh8Mtzg!h8;kdxsw>e~n|MAm2U3ix7p75o(JL$9@;Qe^e}a^$A)24sB>ZGo?ZiwF;b zwUSTJhH9_w5D|$oQRwUhah)?GmsyF3t)YYSCH;_cp36!cop$N;3DJ; zVXe*egjXXc!CEss0WLx2R?S^IYz?nNz7Z~m&xNaqrxSE5vd(d>xrM?zkaJ+Iu?>QE zBNxCSv}Y(>jeMDy^e4hv8;gVw5PlWhYMj<`$)EIt;ZDel;X>qoa9`y4Z~<~(I1E{L zIK$y<;Znj+g=3I2;duCOa1`Z?fD@6gfWwf7!5PTQ;2oq3gA0&vhnK;N;37C5UJXx! zwPxA|Egge1^!Xa>pWa4*#BajndFLFmX8d+C-T7w)8$01)1&xZdAr@;&1Ja{!6M!L>$ zA@X_BBlm_^Ag92q;Eiwz{5)I+m%>}%GI$64DqID>1V@m*3%nnBHmrO4PvNF9-9692 z-QZ{7A@F_D!?(aur0WW&Am0l6;Pc^X!cT{nA}@ipb{YjQNB%q92{{5@g|n*#P0#`MNWkGBM%WH z-vN8ZclZ1SE+YISI0QKz9s*~>QE(GD4*mpAgp1$|_%65rehgj)KL8iO4>tEg z`bMSw{7&NY*ZSvj2W9;!?wz{%EZ0sC8=mg2K$!3g-MfF|U*O*18-E6Ovo^l@*0c#X zPw!-F?`6%$=YKU+k~5?yt<1d~(1wya_R`o>JR;NOSKx*Ui(c z1(?+#a}Q>orJL(g?K#qS=4#WL^#Wamm^C9k)7CgrxuIA`?KNu$DcqOY>tUt0e)CM; zT#L)K;o6N->(|_1)-Lp2M4e%}CerfT zZ1{zgVg2SQzKP>=$AR&il^WwWI}?oGj3MjS+-9!P)I-*<-8R;rOe<>rf#J3B^*r6i zG2h=ec^bPL|9sb`#-D~YZ2U}jU!@7xvw9nDR+vn6elUYky;LbN@ z?Z~WDnl&Y}dTG`b%y>0xL2|Wjqw~b%YVMrODxua6Yr}Qlp)=mBRq8C$9Anme3Ctc`{SF^rp$~E`EIu~_j+IwQj8o{-)#<_`` z=9X{#+LdR+bKP^zgy*@R;b!gBl%u?K*zYYF$-33L)aIy;wC@qKY{F~ZL(OXa0lq@L z=}2ob(^#d@^|w9D7jA0bSLTM7zi-NeJ?>X>{xRAz`a;rNQo{vz#C8nHa!P@ z-E&0Ud`<3hZMfmu_S6lxQrH;dvs~>@Uwugiolv|MjP=jBH}Q+-0Khc=FM)-8@gnbn|Qi zACIf|3oGS^4uwCL*6Z%~TEBcK()tei^Rm_mjtXwd8?b@HJ`@)wcl!O3#x~W+C}UOo z9Vw4L&Z=_bSruj2ey7Sv4ZFKrlr&iy+4aYBLnDIp>jWP@dHam3BZI)zOGflfwRz$ymsJww?=mHW!>>+*YFWe`OF`8JX9RXHF5KEPw9$2`Nbc9 zz9%yB`%Ax>dqyz&uV?n?_|M4qk(Jc1JoUd_+dm$8?{%j?9T`4j{t(|cXORA%@lW3PugI4sE$n;22`7(m zD)%(*|K*0rS6>}?*~xEyHQXuAcy`_BjgfmMUh`e+&-jIg#0wt{x@J@4KNmf9_r2Hh z3l84lFWi<{9y#{skNzr8y4?>$C16?yF=%btzge&~j8I=5_u zJUQs#xz9zGFA9ljzV_g7r*dDnupgg`9F^SV_?Ny98{xz)ZtYw7d}K;am&K8LIKPV5 zP0c%bbL5b7HoVaMb=l+K&wXFn9C>cq=cC7X2aa&UnzzZH`$A-B#|IwY`w{7#AG&n; z_Jzo{Nh3qMejSNi)Zy-HUW}}`<)#AzR{nc9cRm>j-j^a@i;tRH;^mhu;<_EWaotOi zFPwf|+JHv1ulV(OcSmlCytB`hS3LWocZ5?tz10a@w?uwa{Kj4DKE+-YUwr-1%$FlS zt30%%v9~Yv*>-l%JugRk`+l2o!s(2Us3uph$$BO7lJibozxJ!sNk8R6a597$Sc3OwCMY<&=;*-n9%c$NT;admtQ^7jPl>_S$NAEk!d%5`{TvAy=hPL zvFEj@h`glV)IR4ez}{8AoLLxC5&2@9_3LlAknvd3YxZf~;_70~$Md_VyUh-z- zEwe*=E&i7ApRhJ;$rEoz{&m@*xg+1e9%Vz@zhC`kN7Cmq!CWc=*cJa-xm2( z&ov>QzqTj86YrZlcUxqe&aDP^DQz>t*)gX4qE*`>7oT~@+Vr#d^^n4r3!i;^TjZwT z)*Cds5oo;-~h36aDa$FN5TlU_+!;Npba+;AXha7s>)mu({#K@Lc%`vj&iq=N9T=@Ju zZhFflON?x}Vvvz7`}V%=#<%SGr;#m(q#D_BR39T-uGqcZO>a5zJ|kOBTVQ0%`v(}= za>4g+x#=wzK5b;n&fkn|dH*CMTQ2D6Pw!{nr`t?>{9O5%kuC4|tC20oOfs_NvhGH< zT+H~?II+C^c_Ul)-DG6T3F$_*To!3$%f)SsY}wgU;pT67$8$!u9C3@0Eqii}Y}q&7 z$d=3d8`<(I$Hu!ppbyBUp9|x`kw*bYt z72F9Frx=s~h2Ia>0);;W9tA<*G4K>nxYnYd@%uNzFZlg0!h+)OqWzO^I&KqQCwlYD z$m)%sY<%#hypfs1&X4@zqEICZMo#T z$>vL)Hrc$|E$*=C^vyd*jt>n}8Jldrv}cpei@I#G^&;LT(nKl^MQ&32low@glns;y z-A3i7cmZi;4;z0Yt z*@Nh={rq)y`;9ot-|ZiN{x;4=f4$s#+CH&%^xH&jar;Mgv9?s(tv%Eq)*jMZo2f3= zuFBimRdH>blxJXD{WfshWNoGx{`jtK{N=ji(%MYz^OvhQwp@42*?v$v0_wampq`ro z%5~eTGD%l6E&}^m{(wAd`kW-20_s-NpX#>&o7Rj?%C8xl*rsMYl1I%L)OZZAt@5$w zk@9ids(e&me?MuAyRz!9zW1LmoF6sk?sZG`fYOCsEZQwsI+&-5brSr$P=bGC;0r6!gTOT{0xouT?wNH82 zHu>xCwpIP6F(I3&T*Z}56yMsZzWuDt6oW9ESxAs;a`t9S^H6S0&2{q#~z=kz_B^w9W z^RV%4Z4^)koxg6I{A1F!y~6x9v~9EYR9vgGX{Z59EQR zU>T6TbiB58>xdTb_8Fet=5IqgKJ{kA+80hb^O-ZR2)}XDJEt$&dg|agzN^9xeg6Ky zLtmX1x^=^fQ`-*w_~c!EhlE_*y{P|+(ON9~;X5&kEPQ z!=F*l|J&NT;?^FXRbUNJ`+lpvj&@J=Tk~ote$>4^JTV{+sE)sOFV|2$O8ZCWtA_Ia zt>M474Zk?WL@zoczU#2h0dw4S7;aBwV6u^Z*_FWFgZsK>c;ZBsJ^vUmcIH9Bg?O&Vs)*oG>OG6-95jqQu@1$ES*rkrlq_0*Xpb9GqTlt zOIp_arh=Z`72j`U=_MyV(9+#wtn`vA{j$|NYg@XulTL@?HDpKW{^)$P{PdolVz3TW zfNBstg!deR7@#t`?Pm;vD3AgQ!D>(nwt_0q^rs%4ZXg20fjqDhtOYy3e$ejc9-aXp z8pMMPupF!bWne3)0?sd-`yc|ug95MutO4bq0_+7%50D>-0keS*tN_KJ3~U8epw)kS zc>03jAORGB)nFai4)%iJgN$1+9K?e(PzY9mbzn2t1@?n>hbR|Bg9MNPmVwov3{-&K z-~jMAyblsYf!SawSPja+4p0q(8xaRYgG8_ttOgsvF0dCgZQRr20Run`NCPWC3D^Rv zfYYQWzwy!269M9Z4=e}8pbYE)`#`&DdAx&`(03<2@L z2UdU*umS7<)gbsd>I9-e0>}W%z-q7#RDeow0C<|wP7n=6^O2Kxp7dXK^`JQu6 zPbUxtqCpBM1gpSWuo>(EdqLCYj8zZ;;y?;004qT$*a9lS0pMvt`5*@5fg(@>%0VUA z2ZCFYABX^PAPp3PRbU<10(OJ_z|)HSKs1;Q3c)H+3buesupe|fp8P-p$N(!q2`C5K zK^52!TAe`IAR45AWnc~10Jei_5ZoGjgJ>`t6o4X73MxPqH~>0%upfv9iGbg>^%Q}% zU^CbS_JO7+GG@SVFdO876<`f013N%9@U)>^5Cdj|Jg@?kfX!eBs0K~jGH$>S5Cc*` zAy^4Y!Dg@n>;q0a#v%v-Q6K^MKoKYd6`%?n0G{^P21I~(-~&aV1Z)PoLDLSD4Z=V) zm<B>6f+}zTwChNFKrBcD%Rn(G0~MeOIGxB3M1WY329|*muodhE2SB^dv=_vJ z6i@(GfMQSzHiI2tF9_~Jd=LVLgV`VttN?338K?kzL2y_41`Gl5zz0@%}p~UDJ4BW_kzK0f+05M;JO)w*UM-yZ+dMw zqZXs$<2uVdn?NOUjzhD_f5cZBSse(dnjyBg7j_ycT`Tdxl#~o)#ZBE#5mh zKhHEU$9?f^Km%(dxHfj1Ifz{S5#4qU{1n`#K-~FsEO>FB5u@_Q4_rrr^lT);g%q!m>5tPQe(c0JZ#=Ke9aiggEfpZU2JzSX$iagH zg5!0Lm?VRa987FZDEC~_3!iI8xqb~ZBi-kJS#gW#xFP=T9au2HZD!c{1I&OP7N}fo zl!NLj)u@3>jB0RQl^HVw7a8U0waST;r`r-qX>u6WLZSYiotHh|9oedoRnr!8a(P2} z88kD1J;!prEv8Nz?Zyi<;Q+n5dVWq)=0IL@oRo3ipxW9UF~Q)&5)7%SvA3=z^U`?7 zv#LOi^dfKXAn&5|yfp8$0p95YyfeI5?R2+3ft{qbjL(WUXQydaV0DKzkP54h&$1`$ zu_wc>PV+M#f?78T{+*8GQ8i3_fyu1`j-Xdm2o3wDu?w?J@IN`u}0?P2j2O z+K2yrOvgNrA!C$zD3l73A%u`Q^E{^#3PltlDKw!Zq|8D@DNU3yV;M@KiO@i4zt=K! zyQ}+tp8s>d|M&m?{-0-^zFm8rv)0;cUDsOIT6>-C?BHK)^LukZw?tiQsfm7l2TI;% zZ1hV))Te*WEENce^-cAD`QX>2zrF*R|E38rVg05@$^E7l(20Ml7gEk|n(*7qf7OKF zl=|y==9&Oz@P?;!{%Lds@WWI>t*@qm#{AMQ|4SLN68s@DQfnlZu>Uu2AwB<6+HdRl zZ>{N7KVP2L7s?hiXJP5$e-r1mbHZP6U_Q}(Y3e{qQNHfWxk z_tEY?=-~p$2hPp#FfY!<<|AT%(jw~F|3bfVztitrAN?2lopVD!*=3D#~2?_7aD>37Xv>-RV3`n`UClkgY)uKCaPJ2&cJoWZjh=5ERYtH8?8-3NMf0KdJD z6Fhgq-4&u<{PtdcZub1}RD|8mb4rI^V6w2ZoSUE)j*-UZr|CI`&G!-1;dOlGj^}&@ z_2#V_)Y#lQ-erCrZ>zIyo2{mSmaRTK#lsdXKljjz#bvI$&*G_|zqstQcSR2ukovLO zf^{rEbmN63^<00FonH|BHaV>1{+w9uZxX{w4$A&>dfB;_EG>Jk`~Fz1{+wR!FVg?9 zUPTiTC=^}GEUYoXCX2b2u80?wY`gwg5~9P!1>RgW;GueRITw=7Pj7#`34_YTc^5oZ zWG?ZXjTct*-u8Z=7!z~D`HvQ}NWeob7S%7Y*iYcvL4sdSVVX#F>r;ZLJ_ zz7mW6QWo_daM3@P_j5c%PGatbyu75W#NxmG3)zuMB{_R>pzMoYvSKP1d zo$qS%^@3b~RL^U-Hw}>NHB>rrFlmHb3tFhhM+L&Vj-@{>?$oe_S3>FFK(A zUehnE*XBCNl56R?f$_sjE_yofdw)z7OD?A8Q~%*3m!w~GN8p10&tB92u>k<4|1oR) zTnAY1P*eY3dG-IJ*1x~>|L=~#|B)R5XK)(}I{-hnAbwfYDZqR==Sk+Lmp}Gne!1%Y z?=HgJ#p|3CnIDsA&i(C`@Be$d2!FQE5)1!+hv&yY{LOaAlFI*)>^C+4ZMt7JJm$O4 z{PN+yn;ftRTe5TWe|D2&=~mN{4)UX?{$cEeZK5A<%wJ>wh=NHMw`P94x45aZT6ACB(-{>_|)t)aix z)PFaHV4uwd2G9~mEBpIRi{B*tWq$kbrqKNU@DgqQX0PY>`u$D9U-bJwbW;fKFZ$c> zegB8;7l8--ahdSz#uXX^KW`TO&)!^`zv^*wMmxN=0k9|H4A*FX-WEl>b^p#L)XzH} zzuSfSv8nVAca6~81sk9{?HzY5nY8#<2B1gqIt0vr0ADY-%^5)Jpzje6eJn${*Z*~ml3tXtm-|rRv zIq46Bf|mYh*W6YB|9^K0f8Fj}x_9~ir(MFongjlyzVEjh?!N-ieXHo6+W+1+{OjMj z7e>P0E6KwBhk0%X7ayHUAq<%$NkcGk?!DGkPq^;_+OX#e1=7QMUPjGcYjVe0+Skw6rv?qN0N9 z>gwWFR#v#Drzai~5`xFZ#^PtroWb+*^6;vvD!ieg0q^bY#oxSngA3_8;(Y2>IG>6! z&aG^Kb1Q1$9MUQ{hqyA%A}Wuw2ub5CeBw9*w2h&m7!kpxVX49E-EUD3keC~+}zwa2L}hv z!oq?Z2PWX^jv=_RRRAt+;EL;}G~vo2*|@Z8EG}y7i;Jd19b+4CzQ6*U+c62}FbKpM zl&x?YQ5BpB^$}Oj#)YKQac=PxsBbLJz!!$oa0I|-t~kbGhGPu6fI6UzV>I%BI3R>$ zL~eiu*R>77)y)EM6=P3a8P2b$WsA$Jo8i)+4{=3ZTvT2i%2&a;MHO)lq>DK{@XhN0 z+Rvfvi*qR2g3gRVXX>CY#W`IeJt6%VSe4+uA+>nYnFhSPsuS<;Y{1*@mEgC_)A91` zXgoV506!CLg~tYJ;bE@QxUVq>?yAdzTd6bP#ws+pt|AdvktX8uqC{Mr55xI5Fq{Q` zmW+moq5Iu&GqYISz#szG(t>uV2Y}8!ad~-1(76@p+zj-s3w;CX&keR@0Xs54-D$vf zM4Gw$A?Yc2KuQAc85@l|Mug$EA%VDAKmcw4eMigD5myJ>DjOJpPSimkil7T=oEvP& z0`{YUey5_Fjw`As;nK=rFU2tUJP>T*3A%EGeq#o@FaUd~L%&gkJ|hk~;RC&Mz`5to z-vsBo9pHQj7xD1dZ}bgBX%T^j&q z0MflH;0pu-VShR&20jXthJ1?ZI8j*_CxRa!f?|x-g!=pCVt%hx!&D%q0u{ zF(kql(!1iW0k*iUrx|YMXaGJ_3)eDM0pFqszC{{*i#X&Jg1mg-S76@YhCa(e1HObf zr$dhZF`T8L7iTDMz!|cuaGI1noEUKiCkDjgM5qG>{T9=*0=w$Mm{f)_DGuWi`WfgR zIsrZgeXk$-UK8}aTIhQP(D%}z?o-mxqmjrWECe9#Vj&tkY#>E|BUJL8R4N_jx=93dd{1aQqcG6}%J5MSV3EC;?C$$CIGX-1`h4LqOyIuhxA3UC;ggcZ*gV!rxB- zdVrVh-~a6$BNH=5Nu;8nCZ{2zC8Z;wComv?izUkt110R~-(NSPI>mLzo0u@=;kPEs zaWwO!Q<~i2Uiym_PlJ|^J{dUN-I^kn6N!P5@2Zyz|v7+4cnyS*qJ9XBw{e59j{ zyU*{Vyo1qQZ%EDV$xeUQ3oS#W>$Td+bY~CIwR)COXU*i4t?^1N-qi7+s#kTo`pOHh zF1g*-{hOQUI-Xi=Xvw=G(=DoW>B>b%cx-&|WZRVpBKr)2x7lh>OVvTjtQRgkQt zJWOs|+)aB|c$B6ndY`W}lb)M-9|vYS*LKud zul=jJeX;&yqq23our_XZ$Edsdw{D-+nulGlHdom7 z1W1x;yyPX7x7DM*{9qs5v-SSuhL_byL>U=rYNGgQAFL>IGb=gd%TLwrQkgzv|CoNd zZ%68b?p1=R&4r~oo%c94lvo^~E0t2VzEOVF>-tUph>CaDN@`EjKEFnKy0vK6TCFFq z3j$luv5EAOMX)~&V5V_=5vlBSVxxyQU5=$kFijKv&^eqcNi-j$E=nWr*GOU*Z_T8P zcAFq9|6WJoZe!-~xxv*r++V?q>lKBk&mQjf?*rm(M=XPT7#p`dbM@`7oSq)5iC3>F z=XerdXg8AC(Gi-|a{f+Tm(sS0euEFLRV}V&)t8=8l&R<{6l?d0({<@_Qx|;NLaJaF zOr~~w%&y$b{qDvzZ>dsgt}(aw(|J zswmLEIpj**$zq0)AKX%Vk~O&EdA@j2h!XcT+B5O3$LVUGyeuDkx=*0Lm!`e7Eo#&A z_77i5p1Ju%^zc1muQ^~PQu%2xu+TS9tDJM#lJc;h2Lt|4nZm`IhQNfUIVZU1JA7%w zJ?%F)d9m+(PMz_-m9Enyf^2JD3F%sU5!dX`>~_uiTJAc%fj%3zc(mj{we0A2q3Ks0 zSME|Y&acj`Ppj$+Ybw?n#mi)PCT`q_sk{DACaJ{uQf8?zxkB^xB#O>QtIYaLYF)d9 zq=H>aDz@0)A>nqjIU(*VrdUH$dOn`^Hg`X{W!xAE`k66IO_rPMpo4`goKrC5i{6g$gOd6FX|$SqR24|3*WXL@HO3r{yFIuk1hyDo_xWUew1IcINLrjx8~B|$cIw7Ne+t|EG*VI_q=;`Y| z>$fN0Q+Dl`r5L{i6_LhUiHCVoL9@S@Xmi)!#P6Mqv**<3NwKPHb+Q+BC-NLwok2YI zwK|>SdR!!ZP+#r}rLp4mc+g}(jrNGge(rj;^>D2{CLZ zRIBLYB1VKR)paY?($!}u=}lD$BxEO3KTeKgp~4!iwPiau$2!dTJTx8*G_k3=&gPYo z*`X45IE6kr(J-~Mk14nDUhB-@+oXn>kJgB8HJdLDq`a4y(ZN~Yn`)mbWsx+ax5Cu|yRSZx%{#I3% zZmA=I>fPO5mdgz!*=$1Pq}BG>{+ofu|w~IJRe@s_G|Oyw)r9@ra3sM(C3mttPgWE88H!b zp45LiSxj=VE|=RiF;Ye(BYjmxe*MsNdf)82#>tM5*^#Dd&)o1?%i>cTsnUzXlp^yA zg?S`Cuo2hDX^Jfm2$Ut34*F?-Z1yx#h|mlUEVgmn+Bws}Fg)1WSk^cl7uh+mg*mx^ zMkwyueZP!zN7Sk!HEo1QiC#*}?x?WI9-^mTxhd7al{D8R^yW;E>463ZJ-&LS13RXK zQqN`6mpn~oyUdN5ytI@x_;$*{p|i_4=rM=Epw9Nt8N-v3ogwW!jSeg^agy7rl2<2= zRPi-;XHdMI4Bc_H&RNSRQQJ#8!+7_I0`t0DB9)Mbi7=(OvkKEtPbc6EXacj84+ zv6veJ)eRHp7*A(DFW;yVvvXEB35|b6k2-=+dnBnvjV8&{94g|Q zx(15keQ{)m*bT@lj9BOslv@}&4yDiyj+xRrO)sM|PU@nhmQ17Gpk+3 zS&aoAL3AD)Y2@8|Xo@P1bFV(xf|OSb>8Io42D&p18fytx>!7&P&cO zZa6tzClz#wb02W!Z|KzKIM1fDmCsl=Xm{e4Z;pKi4OBc^kC$8OWj#yPPd$A{vtXP; z>(f@%&9{UPYG}wkQVTF=P!${2*~EJ^R^8C;gNZANyy?d3-DXrB<=c ztosa~gw`01tbK0TZ_IBM_0GkjDEgxL>clrTq+eHATWC z&%3h%URal`ANK72{z}fZ;w3p<@Q~6Lkue7Tq4(RG-TBsEv`4YYu!y<|kqwdKOlF!N zPN-2$Wr{a^oH-fy`4MjL$p*6Pn^9ID%NvXN0swl<94&U zuj^0VzHqSZ*2xj3n>hvg4e9j>V5tZ9KQPfe*hSQ6RQHa0w5;uBlVl~yW7Xt>#K3Rf z$D}riALm**nsj#KrQ|#lr<94;f+y?42TpvsSDoH;H8d@mMd|GMpqX>RzGbN_@R z9^TUP^ngiYQl#T0qeJUBIil%yK8ea`ex93hoj>O>nakyApNo0>_P)v2WnNXle8u@7u8hCv+k_=k};{i?)>H1eVOM{YA!Sf+$np-MNwLlt$OXq zql4wNy^o5Oix^5A7<7tEons5#1Usv2wb`yyd@`<(J)2lr8q-%DF~D=9XNP6&yVa@a z_w6ue*XoMc`&5_T7nCuZr8p$WjrS=&we?(4snmIHY-MSEi~;3-r-2*3glIx%MQz8H zXI&l>@`3#W+Zi3r)6KXHXJoQQSkoD2{J&h;bpK{Z|JCe!uIiLKcZ>Kwe&iQ+^&}f7 zljPU(iz;c&oYA5qP0KbV1YEenf4A^~Rxstp0=W#U`|+G*uFBNSSah+wlA$!M?c0>+ z;}(aaQ(kUpiH>qE9a#6w(jcKpWu<&z6ywnA7lG#6=(^siy44zeIsZj`{7!m`wwR2d zrGZ)6^H07yVM&x9@9oc4eZqP3oA=h{^flt;LUHw+$>|wkVxnAHv)A|WtC1W}m}2}q zqMftBob`;kN{-OAW4y9$pU)rhXxhWdkn`}$ATg{a((X1zt6#>Bat@whi;CQ-_5Eym zhhEjS41|Ze(@QsmcxngUzQ91&aL=tMVAVY`d%cW`?vJUy8prUqZ=r@R@3|Fww(E;l z(yvq{zjk-5@M7j+TApQvy$8ZNUDqb=Z55y5^GPE8ETZgk>~zFo73sux=1Hqe>@-Sc ziC<{@bM%*AZ~AcQZU6D_M=GQ=T{+H}kobwdte}$r@dQQG;MUucKgu5 zb+YE`BB&CwhkfMvC~rm4d0$#rc5zVk#;vGtInn94!m(*2LVZ1*)50%l02m*zPD}KiwfnmgaH##-$s?u3Lm!1)tKZ##EGSr?>9p z#aBJfVu}hW-!*uT;ZZl^@tm3~Vwy}`NUY%{+!L*s;z5X7@BOe~eiD*0>QTyU#6eK;pdU=vsPmzdmZO7?1qj#rEj-KC4 z<3K;oMReCYUt@G;eXoLOQ*`8gXbgFE7$sM7l>nBfD+{j{BNm7w!OMaO0E^T*l5zVNu zwC}!Xb2mMvTlTzp*IXnw?0KqojL_>(k=n{%J@$lA%)jW+5sGVNeCf4AStAwg@_UI7 zE-+xztCOj6;s@zdIm0~YswllTNG3XYr3^b-6FfbQrg*&U9S%9mbWJ#5TfHbwzT+lj zg&d@uy7iIaj+t{|_g&`lQN!4pir3#N5ASn$#@o-qSY_F4xd7GCrW?k1}&BTfy&psHD=Ro$9guQ2LI(Y5G;&4^j)8Qw8sJ z=9F5LY~YY8r8`i5!&>>~b+4=MDkAt#*Opu(z4n}TS5fQf*H5(8o@)&(AnO%j3wX*N z@xqaY`Gk{lB%Qa%#$XT2oFV!qnj|Xx95t3Nx}TU0xwTe?2m(l}k&?;Bq;HqB99qi$Ci|D>ZMbL4zW zQm9f_-5rDeiES-at{*N{o4Kl#Q9RQwR?zLD6YnXY=GIdn-SSC|EZDB!ZtQlBYrmkmxyI6d|NZNxjk2Cqzyb-MWaP3NWxxeN-iQ@e_gqz_y)~N@lwm< z)+HWfb)9&2S#y)DM0Z-ORbM{u8K=6!w~iAcyFD_`l6WUkpQWP6eM7IHvXkg~h#WIx zIa#~q;PZ-L){r9ceA;W=O2=E{&%At6L$~kgSUF8^zd%%5Yx{@x=bPM~m3-mriSRj4 z!~W<~rHGYpVc;NVxmMs|O3PuK!NbpmLir&RfyO$)ISv2fkne8qiMO$PHEqtIe!jPp zuJ!#^vIvv4q$PFPt|Io$cI=;Z+_m&K`ULjow|H#n?y!8S+E3%6*rhz4Tb*y*SCv+; zRooONQ-+V;xG}-=@OoX0aY>SlaB1eH>&*(}k2)!mO!~}L33a>Hmbe5<-LcA2_vnyJdEifm-st z``s~=Ep=5oGh-t$FQ&R1u9O+jmgR@)r$tD{N2l^MZK-26GVT^)+&kshWzI^l+e!4esT|)2^n{|HzU)?PR3zg`??g zFS3g@`D=0m?LUkRUK*Kfes#MqLb#{C*xAM=|FVW=`Ws)*#+7^gX5H7ydgk+sS&q>V zsU(j6(;Z65R2dWnfOn6I?GgvO@6*0TX*dUPvY)l#EjJ(>D6E9Bjc{G$n6VS zUp%H1Fd2kJX|?XCN8fYr=E)1X~Otj=oCulF&#*tx|WL zQbs+UK-H8Ub#itBOI-3}>qd-fbEmAf&x}KC;Gprt>s2-;nHgSehvQT_5|imu`Z`k$ z?=|K!y&ars{W#N*w9}!}+B0aFSJkAf&%z)wot>W9oPkYR18RuEg?0v8S zVAepjVr#RK6Cp7_lQSm$xqNn`fLQgc-Bsbif>M>{_vy?Ll2KH}UJtZ|^O}v>UVjbM zT=m>J&`nw;=#zr5b~!H<_bxJKu{FBJ)f3ya<4S^@`~2)e$7Ej(Pk#SCTUYy}IdNZO zL&k=P7=@YBiNva+YLmS=+0JW~BT{t*Q*)`Q%4Qxg<~JO+9kVgeobsag?pArUtB(HY zq$RWZYc(N~TV8&*x&qb0QxrP2;w6VEvaquHYVOELf3=upZkAP6>VYGvmR{Z6Y?21c zX%#|kMY$!lYCtwQ6@6c zbya$X$WVQL#cW^tbjM`lx~7rYknmj3>Qlv*v&HFD8}lNS!X$Wv3)c|YJ}ej0lq1Rp z259>YmKu3Be+<@)P;j&<4s4j|+}b)g%rFfb00W(oaRtfDTdu_k(VWZhyB}Glc7#;O zMst~x7g3f?<<3fa`a`Y;shdJga!E~tW^U>^G#ogfRL_?xG_|9IKKtBdw&bTTO)&0n z2C|l&4i2Xt2N`$i3>t74&V+6c>6AR_(8$v+85hH{I=N~aU)4w=MMih?j?l@sTF!M> zy|fd3b{l6%uVYpi5uzgIQVN@RFsV3;Cuau@B~)u?T}Ekgfjq*vtv*_`87@^KXkuT4O!g2VsZoaL-Z_0 z6$~xP33MrkI%rMD2C0@!J5hEe8B?c8Qqx##ZQv2f^y3|Rpv89~aQSjO-c{VvG*_0r zvp>U`*I&owUiOiB&BT3{?5k;o;+0KG)E^_Hxx-(`f@E8>GWf`{~#^fd?8CP;KD zKR6!0j^<0HipKl(8>1p=*56#WZ3Bs+v%(GzbH%g!eb@BdR#?rMOOQ3Ijg&e0q(rXG z^R+w^;hC`K%VR5Y6S76eWWS3@T0IbQ(AN{p5DnoUJ|!q1Jjo`uw{)fW^*+8;-|RG3 zZlv~?^yit9DA{vc>f`;>(ux2Ln(bHH+o{GCtbPX#8e;MrqjAij&^!_M7L z&TI}n@^o*Q?lpt`bd>D-nj8dz!gpQVyJ>k+Fj>aKkh>3Oy{e@Oy+bvkeU)bVd}fY~ zdX`0bc?7<-a+BRg;y$Ug#-SjL($Sku#a=wm#cuSLk@Ka_b|9g+qxxjcaTA!?d2U*#$Rq8-L~#>mEk_t=SDT5Pb{CW9kJp! z?zeDx7iE4iy2$2D;%e(vUrBfPZnm_&D(yYEhC6)Vvw!*XqNevR0gC?4v;IQ$^jEou0H^9l0)J?PFcno=6rS zXm+?r){^m9zHQjgqg8mBP5qAVjCanS5WU+Y7J83URj1Bud*khs>%ZP=J9yzH)5ysN z{eql_3H9msAB5a}K*RK*QG>YaQIxlO)6KSJk4Y*e6AO}6k9mI!JTAUTDrs~jSMsHe zXH%R^@=glAo;WcOUY}ll?@Le>?H=>~TsG{w5dgr9pGyXkZ95i*^FhwloNMVxjze9)Y}Hhg*E@PVg2Es;r$CWnkJ zIYx7Eu8VrIlP>ppb4CvT^_0slWRLSM`b_7)*}Jb`6|?SD-z&^luHIdd{ow%TCHXhf z7k8WP$tqV-%lNYD&iQrflbQQwFJGuhIahWkpt+QS>(w>Y?3(g}kB$^S>ZL7VC{ixc zVQ?snbvCW)6m+}Jrfpkc{E4D6@vLlhUrgx@o`Hy3%N;#6sjJ_i@n2Ex>U^2%ek^lY z!TSV<6f?!Xak&+qwolJ>Dpl5(t{mG>X%ORkW5B5sHUPGC)K*M*bUhpB50p1|WZZ7Z zWtKjYB{MU_n9jQC$`}9skel~i?`2=zy^~V?(PLkclUKw1B$+tbR4$f(jpl4lTh=rp zdLbZTQ{i3yE0n=n4>IHmHgd+_x1v^dEh~=3nxzeu+*97#(jKxHf4<>mO0;uSbj!1K z@Wh@31Is}9l`5}?7^AkC2fk2!*G2cmsMc*<{L6Xml=M56f-+*y)65LQbbLSE`$(De zL^XTA_qUszYtoyy#tD^+rzdmPi;9J1T%XnAB2nYt$2gU6JV$%v^BGq24MI68@EGZ1 z*N&Y3+{U`6$>Yky9EO@O;vmIsyT~0Geyzhi9OYBF6&8AI{p(xmULA4|4Ic<;kfy&K zsO{N6$8aH_$nBmz*}YZW6&ZROzNsI-wc*F!yBLOU?@{EYuN2k4My|T@V&T|b9@@j1 z2YL&at#$1T6K~y{nB>DZr7ZH9G~)Czmqclm!>f|a-<4|Enb3YA$}ZQ>>A&=$>H7EM z{ckm;Dvp?(;c$H`>PO-~u3hy&Pr9#nI$Xwa^D9$Nm5j4(5%;EVDY$V2#W3s~vQccX z9yH9~YJ#hN8cAJ|AA2}}U2%+^?4atG>W!l31V;IUPnqsjiyi1Jkhd;;_|D>*vgyl~ z9a@H=h4@>pCl1O2UOmy8RQKgZU-`wyA6)q^t^JtMbkV_~?Y8U8W!GgVP(|>``wY`X z-J&d8cgg#P>flB4Z&9~6bXG|heB8Q4PH@j;Od3;is(8&_{*-Rsy;Bc#Z))dDwayZ5 zdZ@W%eNNuNV<5IR$R<5G<)zSv34Kp4@{gUNcCQ>-;%)n`y{V&$-xgdps_2Gkb~nQY zz~O$`*D{XV69hY^?N588kr817pq6l}>uRZw0vjcjG4IZ;r?Vcf!plRVm>BL2?mEuc z{YdOeO^y;5lV*6<9-*$gF1zi535+|N^1nX}cyPw-;s?Po&Sb6Gt7~&NGwo>HqyL`b z@rNUhPc=m1oW7`yOiKqDsUE=$R3!hAoZ9jMkkL{Wq5N{!~y;n1BrXAtUs~n zj9ScoFx{Byb&x`!eWSg`-Pp&MLltwII>OYHd~S=_?AvpsqhObJ{FRry`OFyxh7s}EX?KGMf*6|rPBUHA34Pb zSt&Uw^qls^5PpXdegl^bgU3?B1A5RgIR-z>xo}K@@xyEWeKL3-e$wv&BO@h}=(TVh zj)gBA^TQEFK<}d?5&}jxe@sGvV@7mrhaM6{X$ZhiLQ)1`%tSso_5)<#VMsSIMj||E zh|&(=hj<1^ls+6#h4=t`4o@qhGzT~#ehgzFD#P(!09r-Wj4=_J;MfgV3GqUZPypp& zKpW!YkRRGf2~S6&WX0GhUqF6wIEH7wQm%&2??Zk%ICcVrA)W&grH=$OAU*>5QF+z? z55!Y3Rw6uciEV2S5*a-2baDHw$hDU)>!jr71szK5N@xWGyf5YbOZv=5B zXn(|l{rw>>3!m3P`KZ43fB?iVfFuA105ym|htE-cEC4QuA78M45X9F)ymi6;?hs!E z@nVpuzDEEZh)+O%WKUCo4P&GvA{kOut`HZ6cs@vUzGy%T;_o3p(x)u|T5k-ZKB+7SN$`H}tqYWzP~u)hlf_r0BHmveHKU(;2^LG;x8dT zvWF$G4B{sj>>mvAbr65DV1EyYi$S~$B+_RLum$2DAwRPJUyc7q3-)(`G$N4xDoCX7 zC_oe9?;t<2{|;a|#Lq3*KNR8{A^vQ^{yq?wg7^)P^gukY72>o1V*KBR@=<;50Rc## z36cOD0MsD<0zOCeu>iOrp7hiBZ(FdxJAA$hJ}&`@>U#vxf%qikNA~=y@!zmue`iRu z0@CM!MEW`eY=-z7$dBxA1Moup%!2**Lwp0odl&5Q4RJ|`SAnDh;sAY!e}(+W{(m+8 z?=9Hh5z+`j`fQLWeFUHm@mG)^+20D_hIqj>%)nm^wW1(Gi|uAAx0Jx3L#!%{3PYpv(C(ke=xv zCl@Aw$-;9Z?Xd&cEsQ`oK!8OVDS?bYL7*hi5*P`b1b%`HL6u-PUjPXy894=!l9Gyw znwo}&76KgvdI<3MIt+{pfoUNyF9i6Tn7P3EQ(*fku>Ta`?`i%NIR8c9`WIo@zXFaornjGUYT0ucf{zkM!HEd=;Qgg*tEp90d?-vy-0zY9pu|0EzA{gVJAh>4k* zg$0=rnQqZsi$?m{JU^S`U#NfC-zgt`#`6yY?>`Llqv${Xp9Hdk=Z5i%0$l%)k&%)S z$;rr|W5H?*0=mv3htW+AUW9yZw6lVw1$Y1wfEhskaT!1XumkkKa)1CZ0aO4NfL?3> z9l#5a0xSRxzzq-q4&Yw}y+OZVWrlr7a3U&VjbcUrs6apz>G0ey3|3~Lp)DtQL zX7;(|9;}!^HyG#z!}tNXGQ?B?J0Kjm37|@b|0e~^XZ_Q8QGL<5k*#2M2c2VJ2MlyQ zUk_H0s4lSLo2$=Ckf=_u;+(4&tY+ux<_9ty$N+8v1HfEBz6AMFDr%UF{~S;g7MroC z3#8vgoi6GU)o-zmi}gfxh1qxxRA&S_0Rq(@0jrNWXrX0C0X?7*kN~a#Ucg&`2RI8@ z15bhVKsB%r_y&*w2Z2pM9Uur?033kl0Q{u^b{yCSv;uNKF|ZSu0H}c&U<>dN5Cbj) z9>8m08E_h~1bTpVz;z%Pm;oq&C_odq3y1)h02g2wU|uo0*MLV@o90XP7t0k;4F;5=Xt3<69*B47lx0J1<4;17HN zsDLAY4)6e21>^$mz$m~4oB}L>ZeT4?2?PPt0P+-vfXzTXumZ>eoPn1B8*maZ1)czF zfHGh=@DZQ`;sAZ%5g-X%1-yZG055P3umPR{8-N?Yeqa`0ffle3sIVlENg$0u8iQ;D z*#=S`q&&zHkR>1kKn8%E1UU(k1|$v0Sdg(GbwTQaYyjB+QXHf>$UKmFAU#2Pf_ww= z4M=W~+#t_@JOk1Sq!q|ski8(4K`Mi+0$Bwz1Y`)vuOPpIM5`bo$Y_w!AhkehfxHLu z9!OD;q9C(DW`lGE=?d}{$X6gaKyrXg0ht2Q45S&zPLQ1-6+tS3EC*Q*G7w}S$j=}@ zgJb~705Sn&0!Rap1|XY2Hi47|DGjm!WC2KDkiHS8Nd%f>v3&hCEx~d0_K1cuooZ$Gyq}1 z319_GfYrb*fD}rI0MvoofDn)gI07$#)yD9=5}GX>5DC=QosbLmtjIQbQl#aTtCo}VzhJwEP)}+ zQkZdtiU`w$gedbq{*^419Ac~onZ((~XeHUtQ%P}16J4q1q~IPiY`WL6nhyL@u|wk4$b21DU*n zBk5|zc9Jzp)+7pRzYrAHT_h+e+Y#2TUqM*6;S;93u>sqll80^JPrz=eFu)!q3#!GFQ*es$0X}T5zMI zjj)pAj#4?B?Hp45b~)Rf?KKTt9A0Xhrhbx1gr`uXhSH~S{ zqaLE$y*ytTdb=Ld_3=(I_4PC`eDBL>>E|tII_~?%!rz}4HYiXSR~fU{E;5w;r1H>L zKQaH+l*(l$uQ7+_3D_)}|6I8?`=-0_s7e+8y^vs|K^2?4oqeV`Eh?C5y?MIvCS6Qb zM=nz^hpFCNAmm$sgIm3M?PeO8P|kGYZvkrFCJyPwC2DGt%p99^9o$SDLd`en3MgM+ zd7Jg;{5o>An@iLLly&3|iYjss&}9nJ$f!wPUzsVW$X&}EPnE+I%E`=en>B}NfG(b@ zpNtWzhvrc0lVK8sP{q+EPAI-f>^TG}#`0x33 z1Nxi^Up#gXUt^n*L%+*H-Bs!NWU<9}U{(vW=D&^db$QJWD~Ju>nXgn|}HXr9=79XQ*vU^DQ2uGJltE@$>($CDIQQ8M%Ng1+$tF z(cYg$Q0@RF>!!r>MYpJg0iRpGTa|=sHCubK|H+PSKUAy-L?hOh)7!i3WD*Et|nBz$&P9~?Mo;rOY^J3Pe z?3~=o#U-U>*UBp@uh-qaQ-Al~{Ra>E z1!4r)K|ui>&j+YBM#e`x3@zGj- z(NCc9fP8@%KnkGsJzB#fKLNX)utvqORe(5vW_0AA7RMkT93%fE0l+sIbAAi?B@Tce z5CtRw_?8RS#u&`s^ZrEuqzE7dAm4`k3G!iR>81`xH|NwZ_$q~Z5y&V(i1a$o!)Mrs1WYaJJM?eA`65vod91`G=0EYxPN&o@nU)t|~ZVM`N zX*(Dpj_R`52Grjdb&l$f`uL)4PV zumcVQ89*t}1&jmy7H~em3pfVc1loadK*kcDi3o%PCxAP^TY%CEJ_AgEaNr8i2z&#C zt>JvYKHv(_1yI_+v-tpXU@wpgGy~rNo*nSp0e~A24x9iQfu{h!Ej;rNI0jS$LjYz6 z&+Y@X0c&6v5D8oXh5&wh&@HeFI15w&0|1!=oC{C|+yFn|3NQjtI)d&2CBPim3!DH7 zfhj=73Gx7EfkNOuFb;4!Lmhxrpb;1c_+8+)sDNES27vm2Dh#4<WAxQDDEnJqI$4)n!J9^ z$CxeGgQGOB?Kz@T8FXlK*>17d%X&nH**jK^a&@nG$@b*3$7#z;F3H<--A`F$IiEB| zdO+g?`5L4kG{zRk4H{c$tf4W*4j185FIT>xCtKL(2UxAeDEcZ>Q$y7{Md_;=6G z4+)pn0om_o+by-%qHT~3{%IXK&O_fa#;`arets;5*>J%1I2b2f6Kn`4(hopA@b`LL z?1QM^{nL72*r$&9$)F8&m4C}_{E+Tvz5P|c|6QN|xt}lX*Jy2l`Z21^KX2Rr{`UOc zIR2|K{JXLH^O#*aRu{)88k_%A2eNYV^A{sf77D0WA-{%v+CMEj9Q#C}NGHrJ&VG^W z22Tthk09K9Ez-YoQ0$>Zx|E#^qg;{vrZx8!HYpXYWmEQFe`f=|$~M(FwYp6o)R%4E zplPYKQ#(rM~tgYz=$%aRag0?vu8=X|HatgWjurntgWr za`{#J+4z6=KeuyzKzG3IT}-?4c5Cc;wr5u$_1=uVtAp+bSp~lf4h^B-m$pxG|MmS^ zq3xlzVXwn>h0lgZ9iTsW@*q#d`3TX-yh!Oo#fR2JU5iqRu83ZHxZ<$lk+LK5F@-Ub zvAMCrN7Iiki#riV7atY>J$_HZy9B3Wy~m6a?Z7<%wD4G?U^*+n!Qt2g*?4a!4?DaY4a=z!-=HATZzZ`zK z|FTM6THd!jt1FdPIIix#+ICeYKQ8}uzGlINg6{>Eh1Uw1ioA;M6$upYEAA+kDLGQ| zqGWyP$ZCLTPy1J)ZMM)xb1qo{5J89 z*_}&wKHb?|f1>_Hz1-dKyG?g_?|I&&iC&w#qg_yH0yzdv`nk6SpS?Pd+`_&=J|u(81hk(V5=)vQwgKXIDkn_b!d@Bi&8i ztUZ=J={-X|t9pHUOL{-|u74W-wEij8GyP|Y&z?Nv>a*_4=zGy8+V9bSwST-{eqhf) z<-pg0jf3HXw+G3eYdt^myx}?B3xgNOUbMbo88RJ89_k$8d};CW^vm9tJj2$*=Z2pR z^S;{gD(zL@tK}m*M$U~q8{r+b9z8qSJG$((#p~49ov+#7n7%pjru7ZeTZ6apZyVoI zztesf_3q9)lJ~0bL*G}upMI|}wri|t?ERSdxZ8Nv`15hT57r-2KRo%sG_iFeX5#Jy z>7>eJ$YlBC#H7@e$JC{%!71L4<{y(jHhrZ2wE0u`r>ak%KFNOe`h4m0;AieH+rJ$9 z((r|RT4g$Dx@7v@wCIfe%$b??8Tzlh zcln!+DKmtEuEy0A~OE^l%BRnL$ zA<&b^k(iO}C&?mtOfpTfg4CGwAZZEdOHxiUeX>ZhYO+sca^$|`SIOUzOH%|;R8V}U z&>|)hpAp31=jx=+PV9YpW`f3)_Bt&;-C?>3x*hb5^y?Y&83Y(p z80nb~Gm$cf!>vpQSjbq9urjipW?R8t%&x}K#^J*Gl{1M;V%hy=F5DD6**to@6TGLF zYw&&G%iuQ@AQP+<^b-;jekq)}!bwC#^o?lI%8*r>VyxmX#IH%jNZL!SlV+2dkZF}I zl{+OLzS@0_slp~jd8HL=m#t$~rddziK(UdiLaoZE#<@vIT}DG?vyrB=);{f%Iz?NW zbjS5rwyrg>H#}-oxoy;#+thG-wAn55?-m=ZLapm;sBE{{rP;r8*yxn#JmRA2cGi8y z!^*41Ti7?w?~A`nKz?PA@f*qrT`S6umY^eiZ@H;d}B?wq}Q^8WFMiH#>7pK3nedbPc(qp@qC=krsheyPE&FZ^Goyt+C1_6_%Y z{qchn*J0;XetOr}idh{0)U85YxieaM1TLofHhfu?Z#q#hG_z?h-P(wUXx%dSl1fLQ zDsVa~M&FHCwNxCDXa<>SuvN^9IFq_}yE3^JR?Agn^eDgf~TrpyF=WNA? zl?PG&)-`AOnfH!W@x$k}V%t|!JkmQQU?$;hbF`xweeTd{lJR(zkxes{|7##%Une6! zZ_AS6)J7KxKL;q_+hi)K_qMc&-+xZPWPU8h)Hb0VZB)e1?@>~ck&(>ZkVXdAoCLTP zckT^zafzasgRYha=BT|*A9GdHSHs-Z)eSNDLpKvFV4K#axjHT6gJZPLL)SD2bp47z z?L@oV$a^BEssX_i!et1gXlDriLqP_DJcLFF=sFW!ZK4$Jk_EvF;}3yD(o(%>c|#T}==3)3yj$P&SGN z80vxAO*U_v*Zr=|ka(Al{$?x~WkW$V{3fH}v1Wd|i~$+H!f`T<$UCeiC)$ObE)K2U zRXRnfefU17d1}{6x115By%k?*^^P|3Sf70=;dSNh`hC^k2xgdayyGBC^Vz)vTslB5OKLQtgz?WC+aOR50_b}9kW+|PbuGy~?1Is_t=*Bj1 zTb=0@_sn~v98&d_0e*jm&o;eZ+P7d#C9D>1T;-QhHMH{!KbBE=vw2{gzy#l*7}@*7 zcPB-+S_VImFbm3U+6Ld99KTRp*ZO>dltt)&v3Dl$O%#9s4^U1)*Bj(8$SqLHAtIM8 zJpgGTw&fIP(l%`)X%d>2LqVe=qM$}WKn{rt3IZAx5e2l~AfQoEQ9!FAB8S!!6x9Fw zyGN3if~dcr&+~shRNu_8v$M0aGoStL%J_B}t=Jipat$wTcWx8Aqxnb+R`@~2uCwC1ZU-8`LkG}q;-bI)8 zyo&EN-m&1Z=imHz|F35>Zr^LrHRG2_W@6^%GDYF)>+OT!k!D9`Y zcI=Zjrf}+=i&t;lw)@a;XEuxNJ9wr;5I>cgIz4Ui#Rz`!8BB>f@fz zU-xUR=_#+bek5=21#^de(0%QMpU=E&@LREuyS{1mz}QdvzHr0u)ox07sriGp&(6N* z>UTOnIsUu4w-4OhZiVCPM)!~W=!)ki|5EeTfy# zLroWt+1+R3)Zc2{lK4uChjYF-cXq~mU7z;;aK_9*TiUN2ccAgYYj*ZpfBn(gxAlLc z&7=8WT{v&}hnGJ)@$gx94|%)O6Yg&>UXu0cm3-6I=!X%vqLx+eherPlyOsLy>p3~g zj!c;{?VE`c@BjJw>+k&I`|lfkFmBw&Pu%V&?|JRDOlw@6rFyk$HQvh4UootG`>9|3 z{(GZmKKw8{ZRN_n2PaHeaQB;UCSQE>&5Li}ygB~YsZ($J_Sav}e`@5&19$cBzxil+ z`56hTS08+O`}X{-haUPZ`H3g?w^+33#f+s(5AP`|n!B*H^qP`qpMCkW-+pV-XZGyJ zQ(L#b*4e%Ls2i@lGU2DghpXSRb?cCVZrw&-y=>W!?|k`Xw_m>duFmJ<$Io85V~01p zbLWgp&p-c4&c6PAZ@iJ7(xQcZ@hh*4jceGj?d5alK3K12&9gc!Sn$l5wQJXHdCocA z8~c0eg-C^p;y57}23aakq;uitXOGamQUQ z*Hddojr!)AK;Y=o^z@%6^y-!N><1s%rat}jTj}lEUBCN_FZzz{)M@;=)27XPBqQUe z=iYgzK&0uVLx(!Vo6XiQjvc#r@{><)T6@hkhqhmP?F)Bq*^-j~!V4c2U2(;rIagiv z$^6vR?ZFWv_TBpS+gGg*g~q-1?YEZ>dF-(-4;?*v!Suw$*A}FueVB(VpMC4CbM8n^ ze*5cReo?rA)%yL$8*d6&Eaj7W_fBfHWXbb`mM{O}p{uX{Va&r1|L%*AFRgj^-FIAh z@4c&=FJ8RC)1$|L?|%9zCTGKjPbaQj`_dC1e_Yb9dGj2zqQrgq#~&B{_QMZnzWDCD zg*R>6mfEm>{qtI%d+ueg96Z?Rg{-X4E}J*+p&3a@TVpT0@QT^5zB+v9qmO=n?1md| zzOGN7{+n`hS3N&w%vW6+HEO@t>%FhkY7I2H>8AM)3>osy!@G9fm~_b{d6}19dP6V2 zf8`l7X52C>CFRXGzWJuzxOMB^YkS^#y&wJLlgS&#j{W?CGtOwbdgsmwJIl&?<#y>Z zthi^-!ROVh*X-Vb19#T1Rjb~BmMxv@MvvaJlkdNuyJ+y>cL%OmQMSYB zT(fG}uwQ@p@yFV4@893*O}qVxAFsRauKtfd{op;TeH|D+m`qf+Z?Q8Mi?%h-N6&Ek+d-281=MEaQ+qQAzt_Cw_PCx68 zJ8muWc>GiP_U$+RnP*VX++PaP2042;DP5p`s}kF2aX&$xBdM2PhWEO*zp}{c3ik{ZSQ8yE;;|U+wR@`_1EUx-g;{w2EiYewrwXZ`}EW6YRsB-_s9ny zJW}`e+kF=`XmFwZ#TP&RaPQvE)B5#$JycMz?&gGqSK8fwe{fXCjuV@mb=KL}2ZLLd zXJ#HNT)+N<4i{X|a~T3K4FR|x0k{(ZXn+80L;#*d05TB(3j$CB0a$?mOho`1ApqG3 zz+MDk0RoVW04zoT;t_z`5PWZnMF83&01qMnXCVO3AOLj{fbIyuLIj`>0?--(a3BEN5P&5JKw|{p0R*5J0fyoCTB|N1i*>_T#Nv0 zLI4gS052c_DG0zv2*4l&;1dL3I|8r|0k{eQ7>58{iU53x09=3oyoLaLhyV;l0OlY7 zZzBK-0#FM9xCsF$M*xx#faei_FA#tq5P;tifKmkD4g_E|0_3LIBz$0QVsP0R&(^0`Lw3a3cbchXCAw0IWm+Zb1OvL;%_$0Pi6Hy%B)P2*BqE zKvM)@0s_zr0T_k=3`PK&ApkoOfO-gk69L$R0E|HZTnNCo2*4u&V50BR!utq_1G5P-W7fUgmNh6up>2*3;k zz>NSDApk8AfbS51HxPiU5r7s5z!U^v5dzR00oaWI>_PyhBLKG|0Dc6Z9|G_y0`M3D zumb_8i2zhX0M0=G9!3DN5P)A0fDi(34+1a(0ce8&Jcj`EKmg7~0G>twx*`DU5daSY za61C6ar9! z0MtbQZb1M#AOII30F4m<7XmN}0SF)f=?FkC1mFV%;AsS)9RlzL0?-Kon1%pkAOPtApm9s;1~k%Bm!^^0&pz?umu5l0RgxI0k{eQNJRifAOLS803ih6TLj=S1mGwF zkca@JApl(wfLjrOWCY+B1fV(sa3ca>K>&Iq080>n0Reay0oaBB)JFi$MF0*W09gpYJOm&K0k{wW zcohM76alya0qBDO2*9NXfFA*vfdHf+0N)@0 z>kxqR5P(k*fUyX`83@2m1fUE7=z;+BL;&g`00R+#S_nW(1Yk4*@G=7M9s;lm0mw!G z?m+Sb+dI5rAO`z>f&Pegwdd09=Ov zJdOa=K>(gd045;-tq_1%1fU55@CX911_5{-0oaEC>_z~J5rB&kfI$erMg(9c0&oWc z;6VWTA^^`I0C@<&00f{00`M~ea3%s^LjW#A0EQy~&mjQQ5rCHvfTjq*0|>xp2*42p zU_JtHHUi*406szh?m__OAOH&yfMy85Z3w{E2*6tiz)%FBEduZ<0x$~!cn|@&9RX;7 z0KA9*>_q_jApivkKmr1AKLXGZ0XPc*2qFNP2*7#--~t2y^Z#|s|09_H-(dd#jQP*+ zU2XgT^Zygf|9de1t(gDSG5_Df{2zw-{}tx{GnoHrnEwYc|L?~9zZmoXcFg}@G5^2C z{C^7b|1Qk`qnQ5*nEy{>{%2wSCu9D%!2Hj^{NIE5zYz1k1oQth%>O=^|EZY&PR#!s zF#mtT{J#bBzX0?9YRvz4F#mtS{Qn&De6Pr>|OjQJmj`F}a) ze?83qPMH5^V*aQnf|J^bFcVYgo z!Ti4l^M5Jk{{+ncXEFb$V*aON{_n>8AB*{aF6RFunE%hI{T~6q{Ex@{{{r)WGUoqU z%>V6}|94{k=VSgCVgAp-{GX5cAH@8>74v^R=KpJ$|3fhU4`KdK$NXP_`JadRe>Ud- z9hm=LWB$ir{{N2oAHe*dg!$hJ^M4TL|3jGnV=(`HnEy2~|F6XSZ;tuz!TkRY^FIgk zePy0_Oi^nEx{{|6?)#XJh^k z#r!{p`F|be|0c};=Q01gVE*sL{4d4)Z-n{(0OtS0nEy$b|CyNoy)ggJ!2F+u`Tqvy z|2WM5wwV8qV*YQy{J#M6e>LX+PR##Y%>QD{|MM{a@5TJDkNH0U^M4)Y{}RmqjhO$5 znE$V0{$GLl-x>4&JOdX|0$UN<1zoYV*dLv|7&6XAIAJ|g8Bb4=Kr;r|Bqw-J23w* z#QeV>^S>wNe;dsIk1+oaVE(tq{J#YA|6R=g6`23EG5@<_{&&Ru?~VC?KIZ>s%>Uak z{~yErw_yG+!~Cy-`9Bi#zb@wgMVS9~%>NHD|EFR8hcN$d#{6%G`9BKtzZvHL^_c(5 zG5-rO|2xPG!4#MX*TeTP4&3k>$lSb)Z{|aL_#Hlkl`sL`gqvYAOa-Pdcz1|jivk&& zTn*ddA$S57!BQxKQg{}AgW1p;jQRP)_!+EJ*V`<^{Sv-|@vs9rgRFUwao9IN*7v*u zvW93b)Px1VQV?}5kq`HCH~?+nDPW34owL6Mw*y=RvR1|gqaXn3AnSfUfTuy$UVH(a zU>anAdh^FU1ZFq}Pr@~DEo^}o;0m}3QegzV4I%gz9)qKh2x-6|Ebm!q>-2xYm2u`9 z!2-Qu2`q=J;bDk}yWw6~46?@QC)faM;bUkH3j6^-z`L*w>chEk5VBw%B*BI7Dm)4| zfUIrGg)z_wykLc!UMlJ1g#(zn!qEl2407K zup5fuVi*J)VJ6%G9_S0tKpqT$8t^lm2{yP4hQo6(9bST_@Bn-UM_@jj4G#DS?t(e6 z5Sqbl@HM;zL!m8v3bWurxE&h6i?A2^K>;Md{m>E4f*@qVdbj}8mma3zPK4{>dl(09 zcn#v98stNJ_#Hlkl`sL`gqvYAOod-zB=m=JSPk3ZA$S57!BQxKQg{}AgW1p;y2F)l z7`8$;SO#ChcQ77yKxa4~V&DyE0k1$qmX6cQl~ zy27oH48K5ixDhPS8 zf|f8EUWWHz6=cIba3Ab}$?z3yg3F;0?u7SYFsuM441*tGKiJ_qcpU1$^DqfoK`b)S4*Os?6vM?Z2sXk@xC1=U7oLGU7yvckXE+mVa2X7T=U_U#1Wn-q_zaG~d^j5% z@Dbbvb6_DfgWKS1cngL?Tlf@a!Gmx+G=LXjFZ6=~NPzpHBb)_6$b|K90h|^9>fjdW z02e`HaKR`Dz-a+EEdZwlfR2z4?csO$5LUtjcoS}h%`g>yg^|!7%3(EZhlk(^SOiO< z2uk5u_zh-5Yv>MF!eQ77-C!Af3E#nZ*a4m4e29TJpar}F4Ph?SgauF=&H*2M4hNtO zJOw3C7fuVnX$zng?I0HZPgwvtobVKw2-m~+Fb>@C8pJ_0$cNLN|Frp^OFI|?jo`HT zf7<*%efOs$yaV!g2+VK{o`h@QTG#?Fz!h*6q{0Yz8$$3cJO)Q05z?S5+zQF?3si?2 z!2-Qu2`q=J;bDk}yWw6~3_ai{*Z^zcV`vTv`~g3}yRZ%F!?|z}vS1!0!G-WDJPJ2J zA2=-lr=R~%oBwo#PB0BJ;Isgo9sqoXc8~|B2LP#r)6f5>EdW35UA zoB=zb47xy1s0Ra~7PN%X@G`sys~{Whf%{+&Oop#u6I>33a3{PEgJA_YVHo@f`@s&^ z!Q)T|o`*@$3jWVM|I4$zn3gdhl_BP#8REeQjX?(F?f``xT?cjN7`SV%^QBm-&^RI?^~KJHkkp?DYQsw`)LjUNpV| zv<10wI*CjsGQ{)$cxGNQy-dW6tY$jWAjb4{yZWXLQ(KaX37V!a#khLiT=%2ai4As5 zh&gxMxYsUxDsB2jH7)&{tvghw^;zYcFZtkuJ38663~Hadu>NK5P2bkJUf{0Y8#fN= z;n{h1>Km_z1~e<1oxI|=^n_Kb&(CTc++dQ};&K-q?PJ>yZWvbIw*q z<)0Vdbn?Svc1^wR`X!!id1H&q*0z{GeC6kh?z;2Ad#>uAPsy8YeLcTlviRuFDeKoA{qB*;fBg7!-_H^c{PE?2 zZ5#G=3{5>a(KEeUX<`4kMuTGdJU;BTD^}LJxlNPCi7j61V~Q;@zjW!_i|;yTl5fZb z4?a@A@dfL*U3~6=JE|@Hc~H%%p*nTm+_t%X?UnN;1=kLn;_#n8{*ybmm+ag zKPkRo@#4Jp{!6dlKj*8aYsxI9l0CP#?*4V(UWX6$8W;Rw)`anghg!P)`gz(9zh{+i zczxfYsV{fl()aD@AN;Z9mg(!>@3wIAJBK#*+{FU;9p9AIcZ~dPTcK~~UDnHAAClW; zZk_9How@mj(W~$99taMaIIKa;kk6FY2KDGZJ>~B9{rlZkrPaanF|RwFexUSMQJV zVQ2mtI9o~E7&>px!r6^lOiyom=CDrRJvZo^pR9$ek9_EH9(&i^{&Rbu{d+ewUUA@z zS_R*(UEk)zYLD!FZ-;N$C+@|$A78tz#jCqRpO?n`{NT2y4_G(faA)6*oBe-0r>xzu z=Fyc?gAX0;`S|&Jk3P1wbls!Z@1Fed>(=fI$4@=HWcf8~?!7prWbQ>5beXaGj2~td zcMRV2O5FHc@Auy^Cic!jBM+~vlNrBuvn6@&U4y?rI^?SMyX*H~RJtv(`P7@QpKDFL zaY%}(=*TrMP5AAM=>=C^(BC;bF2>ff<7@V>2Q55%?66Vi-{xu5Fs^V%lgs)nseZG0 zY^`f*H9g~C<6UQ6{mAUg_pVRxdgbD?`_Ax%dfpkD*RtofVdgImoZm6?=k4t#w_fqu zTfGWiy0B^ctpU^iP0K8+KR74N`R|EB52 zW#x|ra)0zrZ}ZEm3-|t3_qTPozfd;$&ivPV`a(O8PJ4gmh6UMkr#`Sg*mrjQ)ql); zQVBj$tHJn{pSJJvNI~}>9xBXRv*F|GOV-sG)BTw>@rR!rhjAE!8_|K!(2Iv_Fed~Z z;cMc$v+XeMM})WIm*K?MNtZ?V0PdH>$(+(Ngg?ODP52u8L)i8z{zB*rV)WmI`!Vd0 zoY0LmeUePp=uZv4whQ-<4>u#5P2@VCbmW8aSZFxzwBIdKVh#vP0M1nyDNHipmP zCepVdehBeWE;r02P99cz!S$qBMO-0i#^Xx7hxX$YvE(I72*Dfn@)T#+yu>u z+r_>QL09}cAdUEH@GWUCCj21VMiYJk|M|GP3H#Z0Gf16`Anr`u8wh9Oe*kwSX=3nC z#QzxXm$-M6<~-bNwzVVfVccxO3-B*v+j9IvL5`6}_zSknHQY&@JXqDnm3n9dkAoby zjQID7Pr|LvK61V?JYGUvYv@k6ExbjXJTyLmzcKjOb|Y+qIq)-i^(THJY{8#M+G}y8 zyj$_lCEfvbLFyt7p2Z(vTR;5o!Vvr|iL>I~&wiVUTSa&l?jyKw!i&WB1sh1)4Y18a z`m^!hieK7#3mD7xnZ(QdnAA}YZa3m*fsJ%AxC@9ohiyrO<=o`>MffMcUbqu3V*9VS z(jKL)%Mkw(_LX$!<4z^KkTi7(^MMId2mF`e4kms${wHvK@GD3=t;M#ja4y@v!o89G zq@755E3ORfk0gEr?wAK3fAHZKud>)9tNLtYiX^Y=OYqlT3Jw*I$SORyz6U1$R zr`Y}gt{<}DbC|()*+=@Bv^}|I@8Tv9ACKPwa;<(Qd;{^1;{SnTt|Khh(@osVgnQ%n zf#{}`vj=g~ZsoYIfK0<|W}la!DcfHmd?9Wu+n&UgeA}^2v}!o?Aa1kl2aAXoEgFV9 z7FVv9421N;FLvKV-0g%#r*6R?N8CV=_G6QH+;55h4!0+KNZu20rEdmc7HOn^ioQu7 z-%eba(+gQdj%On5xorLRf<|Asix#tzc&(}^Dia;=u*-as02Y=<^C^z7BVecwKg z9JlA%;;Tkp);*(Nj}b{%4;nCdcp6!l;xd~mJ)k!XfDs_^-7I{27gE8Q)l7|(_-$La z_Nn(_i{9>YZs~d9v+wj+^;(Tl;UoJ?N9~>;Ru+n=DX0KKoe*Q9iRu~PHCpZA%$;sycR6asO6%{;lIwb&jD=_`W*V z;os=*SDCqAaJ>1c%@m)w;D_Zvlc=&yR8{7GtGxf#ajH7Us^b2ymgnC(?|mOnSa^a9@RWum`q-=`gz-X8SK3EF#VI8c3txyV5 z?(=@&+@K}ILk}1YsW1tgFb8Hp5CX6XN?{M|fI4!1xMo}hxI9 z&QhlThW-C&j+IW;L^t3QiaeC%VS}Ryn0iKFU$7m*w9&ZdLVDRouT- zo`35&OXr#u%Oxhof3ZpN;QF8x0upzhSuqpejWp%WOiD3fe@l}RYGG1>@G9}vsIau1 zoRVz2xL!|zy$D~ieNwT6C)$ebMHwYUdA1yNJE0<*!)5Z0o7~SmiS*+pC%FslCU1c) z*FABV+gU<@KX*=XksTjyrg#eN-U5ktI`Ru7V|$^eSmqvcO9~4oXBOF9-aL0vp{>~A zcA0W)h4vyF<7^J6v!B~mB+n)`mxHbL+%!EOkFBWKk>j*yO!gMr3mKDAkDRLJKEA{@ z&fYbH64{H`m4!Z&7|SYTywa&I`U%c6E1t_E^>K`FAS&E)KK0hoq;w!&>QNzVxy+=* z#ZuR}J_tb&ENpvr>_t_g*Hx>MtX3sbj{bHR=fz2w^)0xQic5;@=C-YJC$-9L*VEjJ zsaI2?yTqAmcDakqIYoBTS56*FnkM(3__#)SGD%Z9kaFY7c^qSj&35)JTkz-m8hQLD z+;tpZnIEa|4IJOnHxia|b)#HINLO~BNriWwl@NZR6eJwP6$0P~3n;{w&DJQz6#_ce zd%0f1Wu(P5L-{?Vg%Efsht$h7+<3}2gKJqfFH$a_l>7cjcqw7YE51K<3VsNHnL4(D z9|9?a7qZ`D_(9Ugtz;XNLSPkf;9pJIA^vgpg&@>tKl783<5>xptuQI6xE9=)MSt(Q zCE8q3jcKCYnM)It4%xvx!CpigG#5|y*v%y_Z;8j_CV~#9@8k9qI|?1w+08a}2lGTn zae=vOmuyF|+2P7{41^Xf&7J zG?2DpaeE!Aa1%~<7i%JpKO@KHltjZEUPm^*gpy*nNPJFWiPPzD<+F+3Cde+yPqG!; zj6}o@^s2E#vahx0$h{)Pou53(qq?aMm)$0!uElj>4z`H@vUmqA2W@w$`tIVb#az`V zpKF+m?yE(O(p9J1X7qq;dycKdYd7aPoOW|gSb4MUX152u&h2TgdOtP2cF!_i zx!7%HuL`}0S9~~<-rFkYqu&HNu-D0pAbLO4Wupq^7*Z^?v{7;TePTpfs(GSZ)uO0v zYI<)D=c4TueScBwA+oK5*<&v%uz5I_0#d6tWV6E?eNI#dcTyYmYNy^E_?+tde>Upg zp>J`sMRXw(Rl(uqYOk6)N!^bdJAVm<*$ cEcvj^;DDN>Mcx-%P8hPFX`oayJ%~; zNp=_Q4dVg7#WBe)(;4DVx4H7w>mykyQ_d)7*Eop>j z$r~)hS%oJFgJ~)5qol)M3g)Ls13m~sIat?_9|Rx-re`Pv#68V6@IU}UPzDNV%n(PK zGLGq^9{f@l#cX?yZD0W__#prxD1-7+j{6e(f(L@K?|OKieZjJUbcB`HN&6aQhB7cy z_Hyzs<=o^rWgvFZ6z1M!4MH*3&9|$T;@e$I*}*k6?w|X(r&^-ggX|;oigUn2TQJg{ zcB{70|J(JliT>&1TKaHJQT;B!wFyP_yK=Uhqpo9b`lZs$q?oTllZK!-!@$P9KO39T zjein$&{Q-``uUV<$}aZ*=(B3dXP}@F7LM7LJiaFU4lI@9qkE!>!3SwyQJSdQ*2JHR zCMwdNowRxQr5Yc|fSILGZSk{plE z{_V(Gbcbk(3ULj~TUJ*B;&!R7 z>;u^@@0T=$!d$1xR_wHit&qhdf4)683$JNl5=E1+5I8W3*aVzMz&gx1zltB=bLe2~1{;fV!BoXdTJXq7KE2X3{ zC6YF+x)MiRJS->w_^5m>948bNZuppX|DMnB%4bE&TtK)qDm;sH<l{89NIA^cZ0QuL(qK07F%`Oe6B z(1z^Nh+=c;tm1ld7)`>ynOK1R%2*GkT+1SRuI3{?+gYMVn_A`+*mK6wU({4=QwNm_ zZPNG#CRw^lK50o^!%fAZ_XVS!G+a$x2P0+aunKK_G7{d$_VUN8E14^`YasX34dj_g zyfrG_!J*BRxDm~iA8~u&9>a|p####exsP+57SiU(qx}BrN(}q@qxPLIWmv>Df-;Dw zJaLO@C!l~C{KT6V5Dz}W7SaSIE&e$C{zt1T4Jo^IesyIU`Bkp-KMPmBPBG-=o5wM5 z+K2saPvePMv1e~LU#p^q}~U^BBt zQ(X0$h$`mUNRVr8i}q=kMH8ELvTtVchzxQ2r4Loz!9$XgC2VNACgfoylaUN_wvA`F zj%M#ThsPt2mTAcu1Jpc*3|99Ylsr<+D`D`!w3FoJa_1U1im1%kVOV;mx_@T+K-E22 zS)%u3bR|ob-Yl=ZnA-*Sis+auRiBI9JUTkmI^{#f_Iz#@`oIi>EDX=6rz)kUPP(c? zpkWoX6}dRw4(41(ULFItu3~kZCc8vJUNcYGD*qT}E2X1vW1=pBpYM7nEC{990e}7e*_I3>F#Z(aw}& z$uMPd%7r%9WaB=@L#CJZz63 zd7Y-?vhFk}+oICeXS+2j?9C~1c#6GJou-_;e0A(vMvAk&9+SSUQ;xf^(CvzqVQqB~ z*@*Y%O$tXEarsrmIUVCm9J%47;d~2eU{3Gx@e^&%=xCGEKEdu}Ool6l`4B6`H0|I# z$`7L%N2)7rgV=cZRePWFNF0)ynvj%`m8gywXUOCJK$o}J=F*1fjO~oSXBXLuCL3;+ zG*54d@BJ#yZvoSv5ajRnpHf_wo zVM*cz$4`nX!LOq)2>DCS}86J`HwvG3^e*-Xw9GEY-zn?%{Ph9KJw zzj2}E{KIjTDm@&pS8g~Qbuq$m>V=KUOFyA(dVW?^dTtjowG*jZ{Ho23t6m4g?V^Xf zvR>9cQSAwAG8rC+%Tb(_SL9~u$CS(Pp=_I2WbTKF=x|{l%4nF>XMV)*@Pz%j z?h;fF8D^AD^2p&D(Q9Y~#l?14Nq8(1O=IA(Vl4AaxyA#w58ImzDbD+d<&q+?_R>{>g(gO#{;s`pZp@#F<0WlTBv)xi)6K3i&PATp51U)j?I{uvUa`mW*Gj zU4`AGP0OQ=p%-R(+OQXyCu;W@!|djH3cZ$xD&y8PDr=}k_BW1HdB5IK4Y{vs6*vk# z+-|52$~W0w%!5!#k<(P5-dMPXj$AAX)*aWa*Ff?$u8a7cbY!}o$y2~10O4#dj&x3Y zp~I^d9>3fVxuekc?Kve*o7!K!Jdbf1z0wJb?0HVTTSffps3L7s`V|dLE>*;zqv?&@ z$g^pODfP_MhV$nA0Dn7oqHpj|<)ox3qjSuIQM zB$E_`Jcgtbk&xDJptQ53fhj3NGm=dimgK~tsR^>llrdo7;DLjaGcxdxOc_F}WbOFi zWOd`H6fKQQpDS?C!&;$fEl5L$GYwBqP}@w}!1Q!EP-1FAnnd)YjVBWxtlMs>93UY* zD{Y`9Ey0qdh2%ID<0Vb9`rv4!Sobvd$Z9o|Nl)_JcW;gG*n;^P;^#!dJ)XiAuT?|Y z%01OOJ1Txn#HQYdzcgxFH}dq|4wO@V8R!$n(Zyn`PNVk=|d{O0<{Nx$eEb-N~w2Sb|Sc>ddhCdjUz9q-- z)vuxW8ffK}_hFWjw~P;4as5%p_fy95sIZf89LMNEnL|-^IEg&XQO8KkNUQKHkmD^h zrOM@^oQZ7I3|3W6#2{7g7G~{{&D3@sby*&%_bG&}-$lZqXQ_v%?W@=x9~GXlmU@j! zKZ5jusO`CI4@HHO*x&a)_3=Rs#&yXHf6Q~#LsT9i;^U&iNogq+&QHSnGm$>N<4tlD zF`q?zg40uAOSg;Js)kdX4v!i~Sl-b|vODcb<}{nfoWdXh9OO=>x6lnch@Y{R zU6iZz*BUD3KWZrEqZ;wJ^89AS6+GYrKZFGK5dzg>RLXG$8J~!+9-~;m3LYp2bB!1! z4rHG=jzdFL)^Tieml!2zj#27A&-g+&wzpue8s@Mqp7hcd2hg5U*)H`cH_u#c$%d(m zKIp`$pnFWtxHO~NQB)+424P!87LsVs38I7Ata9Z!Cdp%hI*TMTPm_4Z&&|A&i+L#a z!Ik;Gim~$S&;zyMGkla$!CkX~ewPsQm!6ZYoY$W{NB`M&%L`gxo5b3q0yFECL@o-5gJthS#8Hx3ji zqwJ+oQw7Nf4eiX=KdjkhElV~Bgz$@0;k^rBPg z#~YrIj)By_r&%88o05oRuJ=16TpXhu#0^Hp`%BT(sPGQL=BTi=33+F;Ft-b1vR%Ss zvQ-SrgBkKLYt&t$I)}lNf{gD*@~W6N{M4|MFj%b1UPuaB)X{>gjaF6U%(bYlGh%-q$?jnv%D+_rOUR~by}9NVLv45)_J zXdR!I*jQ3q+SqEWIniBIRN|56D|tfJ9@V5$P9>e3+Y#zU`t>f{vhN~oA@DL9@_i({ zhOqT*+HELCNgG*dP?&sNRG{QnI9aP-DMLRhR?0oF4XbqWi%k8$`d#~ttiB)rp+`mHn*kB zh9c%@r_t`z>NnFkpqfXxeet;MEwJaZ!ih)Doa1UBWngM@R`Osb7m{e<Z)X_2q8R*nn7iPfA%+6*8 zB#lBGf8>GTQdL-)mSf1l@q4hw}yTA_B>mO zQynj1T+fr0U82o98?MAj0}$8kvE|6Hj`(HFNAm8NT?kIQE4M^0Bne64CK zzScFB4zF>~?H{SzrBY`tYpS+XOY(|UpOh&*eS@|1CO_#z!)q$R0W}p1elzYhX*^A3 zsOtw<#ZZ(rfm=o#A0MeAzT1i7JClB(OPUCyV&Q=#GnK>&&{*~6WiC|bd|2ZcZb`9G z`{*-Pxprz%Mnzd4@uz!7A5-67pD;RwT}>8dfLVAtfn|}hez|!cvpV|bEmoD5F-7`! zc#M&{jGP}fojPmy=SR^>B_q@&Jl$)*jUnG%(Z(7Xl;=;Kv&d2#l*yKxYhsRvAx9ah zXTCtj0`zTKE_#4%xpq%+L6$n1ZIamqEvzo!)ctuSE=J^R&WX0k-YmH(8h#J+B_=xq z(9)pu)j6Lc!_6|{=`U(u64!{t@HD(8W^`HQ>+sr{1rnbm*2<9WkVP3<*^BJ53|Gd4 zwQ#YU=@6<#X6UuC`;ww8tUIfx-Fd}&SZ&Ve8A;W7H}U3CSrXQV zD6?daOu`eH!(otBU1+S%>rf`H}avs3zL;&JiAdVzZ1+WNUy8oQM{Qq3`cPDO7uy3-;jQfNi3(35eOXj~1(ek^ zrlyiaI&)O~KH^KG%ItAYuJ9~jNgWx!x5!MS%u8rC409h27t^_PiQ-~rlencZXgvy+$I z%%xRJDy32FI(g<*AE>mlsfU(1Fm5L-(37bd-O3R)XQ@OU>&~^sd74a{j2yN0iUu>a zXsqcm>@>Q6p-hED*O~F|n)DT!#JLV!1Y87M1mxwc3BYnA(NMcope#4S(KHWN?<2w~f{a@-U8pTfH(@)g_lgqT!?qrhSBdTsSHd`*yX*1d@fPs%jf8cNQ=8s0mFOPQ zckQC57mqq$ibr+3cQa{one{oORo+Nn8Qm>xIahy zyk}`-#oQtD+W94#kwrcjTwbp}$re6Or`_g~Ye7%au7(squW{~>Ri)!~N^W=bLiMVU zmj7jaQdC)cs%i9mtEe!^L3X3_Mvhfsf15L>pT0(casP1XBG*&DOL*1s4>B#S$aarsnH8ueOBK~9{fQ4eyr%+y8$jS4%ZBDL~HEOdG5#2~0p&IEvBnYk>9yK`4cCh_Ia85BU}oyK3WJZCvI&mMR}Gq>&P271o8Oep2K~H_Dgxnr`1wo za7|I=PU0GsM}-G)9-gT4@VZ$Y&o%NEJ6WHT!)gcBo-m^IXCt1uOSJVvtjkh6Ha3Uq z#Wi*_C6#!bjvOBNjD?UL&@P6S)MwzT9-2AU2z_M@-mpL1Mrm*yS45PRC|dg*p*?~# z04&Yc%hQ@uy#+_^*Q#kHE27LS7{#oLHBBM|$zL6pcInX_Dol^4c@$47R?}gZsjfOE z&6B4-#>8o9IeN`GC5#WaiW#zw3_~+-9jBTlxELY)r677NF_AYa#O8}m$}<#?lur?f})CDsc2N*k!6m?tTx zy2mhVNfs6-$V$%Rb~oOEk&enk2J0=&ZF_fZ7fGjPp;d|cWWqvQX=^908+C^i$*$@n zp7i>wJBKeHN0JEbO>3{}*X<8&mWy)8cI^Zc<*g*u0FpSPU!>}GzLv&NAx3Hj>We7I zBZ=X-Bz=A4iO365JKRa6HU zAvbNQkOA5YKoZpM@{#wyD)pg4Qb*-bbz78tbaNr<9VkOZC?tP|?szBj>^jNJTPr-s ziUdnV6svt&q*#5QKumLLsYo`Fb2y_D*GttUFgkBl*XHDVoa8*E{*1ZuuvCSMSYJm#DWlR^EE;A}-oZUNVSQLBljsSGsEtg`5G$ zK3N;8Sb!7M#Bt@PU8}`61lKHzdtC8PcF(W4y9~@kDS+sxp(B-bN;iFY`qg$ZTI`>f zG2Ga~o%kd+NyYL-#7T-~(l5PCys4uLT0h_kHyrcl<&R`pwKjxpJ~Kw&@l|U|*CjP< z(8*dHwcbu>XGOA~U;W zXWPQ394@I@_KYfmiI28umT)(-t3;OUdu4N^xRO_NdM?X}`mrrfEOrKKa9lFAc%odw z$LxA)$2@^R4`(=%a zyd-)JF#V(c1h(uqTz@YnN%y3r4oS!)K559%eyPdKKMc^`MHs4kGW2vA`VJG^>Tm$# z0b-^x2JhmDh-t_iJz^5$3Fe-)!{g=~2>TB(mT|C_G7Ep{6_IT+{v&e@p?4XB*k4OI z57!d4?^216N}rX*yBtiFxp{+&IxOUd*FoMC6_5G^%`>dnTr!rW#_8)4u2TEB`nsmP z=Hke6kU+h-^4J}|z|p&!^nH+o@OJHZvP6f`1=&-^EXj#0;8qP-PDS6Z>aD4ajYy@5 zR?FCdal4e8v-*tdwb+X?>a8r`e1+gCXj{i99h8!eh5M- zl!1xw9Yuft$edkUu_V=Ie3@fYXTbrrmAK*LPhMv5KwupdEWx$ zH*<#T@5yDlJ;}NGb|YvSpub0_&O~LgmHjk-5}!penH1_mz7gZW?L57<(i}v$%Ag#M zQAd-Blkde;!;S8DjR>Dg8#>W9w60+PcJNo)kbFZcfqe$bv1vm#+>vlL)P?cjfUCh~ zd}oex*6xwoyPYMjNT?rgVlqr(7oAQp#vNs$E@9a=m}hppraB)mZhl*BWfE>^Ms4L) z>Py;=+W#wkM@NlgTiJc4|FLh2St#p?+D|6uu>FqO$}W&=y@&Jr5tKUdQa&kRW z+!HkWT79cp-c{7TCpap_rq0>-<6%_0m#J%82I{YMtM3qX;G0_VTTQb*G%Fh(s;%4t z`|wY~-9;TffZLMrOxzW)9siTKay{Da_;)o&ZHp(-Wa&@Q-=sTHoB6x(aWf z5B1wVaz0=I4+J=m0Qm$#&OJ!prO;chyIvQgsfXFL2M>8?==17J*?!++wUx!-$1j>( zhHKo*EwVrTPjpzWMYIm9*Z6<9Z&uYldVIuvc4=*89c2$L*RH!|S;gxfe3Uvmg|df8 zSCt)7PQEhN{a5cHA?iQ40=Vw#d^uq=d5OOqzvyBqIuR1F;4d-h_zzU8U)LDSy`pDN zS?j@41bf?dk@tG^u zFSP#UBA-fqQ0}VoKc%9dO8%7J_}c7$tNc~ve`@7dK4$&kD%ue3f9K=1mA$Y5ztMjy z-&;#bYxIFK@&C-M6fyPqB~mfsmA!HZSjlH-Unv^8Rnt zo0inGp^sB2uV|*6!&X|*E*QXeLw73Ixty<2=l|ySUrkSNU4mMj&!Bu3@#CgEiOmWY z{kt_8`nPI$nH-x1slb%czm=ebzX+{!q9OsFRQ9gOVZEecOj=hhh5k%Z`W4tgogP2rCJ@EU#?ikrLR|A$Cbai z>>*uM_xdv8t#ADG=fzU$BlMP5$3FHCNf{=(_SbASu-c?PzZn@EbvdhYd?bH**n!y#y}GO;IEM~ zji$^#%D4eHz&RLY-5ym&dG|X+8HAISv6OT^9V@O7uOs%>$-a5Nifa>mm-fVQ<0#*J z+)#^1T}s_qX@eeUBHP~6+FodT#kO~($WwKD_s31d9Re2B7vg<}|Y z=046(z24NJT;o%z&wuh;7o#~|TvS`M(iTlo*WFlUOLH{2wA%#VQ1Z%0=S{^ES?HsG zAIqt~T$Jz3;#D)Z30F;xo9iv+%^>yH0eB}#jhAkqXh|MK3L`YIdA<$Wl1@X4$F><;tch0I6r87}q5c=YmWuZC&wC+L28_e%EH-=i`< zC#Aj9rKeHf@6zAa%F4=>UtiExOpNbpD$Zd=JNxr~B@Zf^>f1SiqWo;W-9jDYsE&3_ z&CB~pMQ%B&+%s5#Vd8TN*;0myHtpRw+6|wT(%u!ZyCyjJG=ut9NOp-+UDzmNbzb$Y zE$S)k@1ng+B*h>v`y@WJr4>ikzN;TiP}?g5HPPSqD&(~^Iks_3BaOtF%h0v!Bl^*e zuq7&7j^3R)qmEJo>a#7_uZ|LTT^+tbQm2Bw;34i*>_@+)PL=mEAN$J~)?d{VOOHBX zJrNDD5-#Hy;`iV$rOZmNI;tH!3r&>Y{dRt)*$QR2p_z4*b-42%tE1cjKjJrR=o$Ep zXOvU5@hacDPc+sWFY^KD+h0B3s>Y_aQch(F^~bn@1-F77_djIUm(pGgosVBY`vUXl zX!|3Pwl;(C@bz^RJ0#)vtgWMrz>R-iJC}08|H*Ulk#7M0YMlpZ7eV%u=R&!^#?BSSs-1az6?sA8m7L;Q!!Sb@5L0-Kf6vk?K=n+qD)6P|BE-(QQAPM z)XBy=%ATk?3A|ddPU2oawSITPcF6vJXS~SAHS@fo)rlB+thaU*kC5NI(fuQ%{G99Z zFZf-)x9TXFV8w4dhx*^Fcs`yjr*=Lk8vpXM|KB;EIO^N7O*1Itw z$~d2Li2U}9%nY+wP@WIDkI5pT{>S~MnYyAze@jZ1ceIM_#`Lv1`^&vVmJZ20bMz|q zir;SuXKzkV7_P2l=P>&B5R3(u$ET69sMm(yP~(FW`mYH|fc9$?m^6C(R0r2OR|?C! zbs2?nXJ^?T3qJ^QzcGG`O?}rtd|=tOmAbONtJPHiy$!;eJrP}v!N0#*UFCDI;+N;P z0IqeP*6%&vR%{cY?@p~voT!Z}Uyv_YX?yXwGH&h1^^1+UhhtSSH!I^o<)rsFs;l<< zGRoi~Y+^qjuJS$ZkMz->$@4Jjh$}s}t`ZOz%D_W>PKY-h`F7)rwnKTAdii}jZyw6AgJA+qY~ zD#qcyjI<-s;u*B9`C#44I+RQ5s`o%EZuEU4z6ICt6vos~)PDZ%z1n{>!-Yweo-;zrS@|#py|6F`0b1fM=DG>?Fqoo)U&e`T4?H9@1}&q4Gky z)9|a$5lIf7TeLUekLm4V0Ity&3jxCaq%Q^~zrQiR<>Q=9@f=&m_Q|6hWWA0$ zf8Lii0e;d1VKn9c-*)|_{DzkNnf`92{6@Q2ivJtVdoM^Ek#RL?C+mn;dee7#9!=GL z&d?-&#>~}4A>!BU1D06l8@8s^H-lhIiDN}Sg=g>9-;E9TNvTtx;U4{7@`LsCCOGhaIj| zex53myM*Ks?N5;3fJm~-mqolL%fbInUy<+58g**s7{OfHt<))$K{=SRxz-Q|(kCnu zrp;P$J%W5gTDCy|f)dAeGv9d*;>t1P_m1WFXXkT_7OuKVV>rS!v~avt#7SGPj~m_A zi@AQ&Ad#U!8E@6zBVi4ruE)$x$|sj(>9A@3A@Ul3YGn^`>{BVb+08kVHeS+$4+2mM zaxP`Ku_Y{p;asjFz~ z-Lw{&!V+%kRc(*;zhQi3D(6mLmj17PqnJF(K>ECS3fGu4Mt({7MN6hg9Q&=pm2yY# zU->*rNt1g6HU;>;jpWt8$TmTSf2ANPZU%)?-Rk)5LDHLikupi$c-YquK_~?a`9vSL zs`{Hl8Y!y@H*}+>dkv{Gc~4+Dam#K(TcET&QYNX}S!|y#M8!|TUpB3-vQIy5<#YU} z;c~v|{bzZsq6~7aJ-Gf`DK}+T`{~VGBZz}|u!0Xl)SDky`l|F(`G&hZKZGO>SNd`p ze(3|{xKf7T-E1S@GB6RRKEvP!p%kQkX6W^EgmMJ#p-+5A-QZSL9xMCAgAb%UR)5vy zk+Mjc%1Ed7N%TbQhdmsl!~J!YZjjEHerACqXPo{!9osps(Js4v|KI7C@f`O=*G1~W zLtXe_DP<{LSXUW9In0Z=F6`$4(O4g@XsjPM2!`EZLO06^tKaC?&tEjwv;eIEE89h5 z#mawwVBH+hJ+K1zP{1?l7J zb;ealCw*Mz8s%JCavt4av|g9d=_}VkfHcy#Lb%2?NczF7YY#K8|CmgK3#= z5*?sul!xYe2#u}^3fHYkk1FPh@S^{JPth>ZU|~VM?Y0#V`FuTy2b9 z?ycH4D|G$Weve(Ad09B8+dE=H$q+14fvhp&jXK6lXe_faR>|U|F-AQs^*_6U!#8#4oRE( zh`yyiCzz=N<5@O@KeRz>@5i{dvNq38+$_>hgZffmFVkKb>$BoUk3q%1LEHW(V}LJ` z-`^N_h^L<#&+T#B=yPBO3*}LNKYSzo@deJ8dAd?u3&#n_u^_ILeh8(Yyu>!}K>$jj z3_2V}11{!wM}GeEJ{U(DN!yTp;y;sY(PClD9^0N_krsvacr}azWmd=%8$5l4G5oIPYK4>Q%XD6Q#`+LeSW2_ zoIzZzddjP$i9Uy_{BmCMM{_jQ1U}7WVtUY219&Y$b!A%&$adK#Vc9NzNh5!c^0%C7f^HH1T)k1x5NV(Lek`yPL;WxeXLo{D=E?s>n`p9a@c_7Ijj zD!-b#fKuX4R!6D&epX!B&zw_F@sEK&saqSrJX35c;@ngo9Ikv6{EcB4(hi;c-6B+|LUdsmS>85D=!?Se*sgZ zm;>?ADSm@f+gV=AmE$ksJfg2%+)?h6cIuEnxo?WyyNfg%-1U?-unL-xM*54~e@C!= z&9TV6$H+_8#>?**i)+N4%r*UHR<_n z*SOzSm5&j3B6mCcKRb(hzKQ&!@(L055ijRiF2|()tb`S?K>19z;l_dS+sv!j-zak_ z{ukLc1y{=!3suPJx34cpC(E8}%>;_@3-vOdN_dVX3iE19KLVsRY#BXZ9Eh2#x#OtC#nDVx;I zdD8w#ckUwc#XSSp6SbdlezKqR2ib2E+mDi$)b(imHP}b|+S==6r_oq-%_m{@+>6zCb7K_ags+6e=>e`P>X$eXWDp{9&Y1JHhK4&Xp;py z(4v1Yww!&+mQ%kgIL0IO6!T+R{&HWJ@;0p2T)CP!$v+1FNc@>Hr>{SAO(M>@rr!T! z?|tCwx~@9kQ<^qyV!H<>P3*SN<2I%awH3v7QrAse$&zfVk?dPZNt`xtbtPT>sU_Xp zdnNw~fl*6od*l&^ z>ptE;!}}vVmwtvi|2gWP=Q4i6p?QwdpEC|Tt)hS@bDw;4k~_leI{9c8pQ(twY52Q) z#kd>HZeg`O1D+S#rntbOquVhgPLVq9O1vAQ4(3fAJY_4GyIA4(Gu%POwmAC<`vN$R zMA!50oc-&F#(|jSUy1w4O2n=ZZ;J2(=w&;j8+p5df7e6lsc3+I-BB-Yn0V8qAzJn0 zCRcFG+X&ML$sR8ofoee3q6_4=`Q9{*O3g6kXp(=}Hh|)G;aPdPF|9fNIH{?;m1?{A zQ-oCv!i|t&Y;4AJ7TW8Ko+T(O@-|Mqd7N)V*<7EeDdlp1>6wpqMkI6bawOC~AjmYwED1Z>1wT_mj)>MsGVD z`I=&V3L4ci=Arz9l#D1=3!CF#Xo*$clrOb)g=INZDLSb|C8APa08$VMu&NuCz1q>% zaDv1Juf?9Q`WKGzEn}z*MUkjseHHBL4He!dEzUf>VU|=|!*rXUVu~i08?}iU(sb?C zQ7(MSXVxB-PKB6`F4un5>lP?Cb}JjrRo+Flermy0kF%KOh|50s-IbPz-bKAlxeZ?Z zKg63cjv(9OlcXU_;+)I({6oey^xfLl8heQjC9AdSCd1ZVth!g~isQ<%PHJ<+5PxZp zznK$6wicums??wBQx4lm)W?`4&T=Xmf&&G7c{pKHJ%n;w^!el#3g~DI%kq)Gv9V~m zb2!_TM`JDSp)3=)boeWp@?Y6|BUCs1bO_FR9Cs9_pZmTk_kEb~!+amM@NS+%xV)bN zZpXJfDi}Nf<|qtxj8_!fkI-Fyd#IZB0H z=2kXS_y^ulw7OR77nkL(8{hU^t%_T^`Y+l@roWCS4nT|2?k2UOQC8rua#17)S(xa^ ze>cMh9NhLBjWoe3ZU>{5e(FDJ0~x=`&x#z?;^MCVX}+XBU$h*Bw%bqM#F5puG>#_F zFDSv5`MMsbo?pXXJiw(TPN0%0Th85xdKiA%NekE?9pvwbjj~5_f8S>`i(3lMB+kWV zk2`OUV`rnf#{5oVlz|N6r4Uqs77v>--c_`oGe{|`PW4;Bs>FUuMdOUPhQ=2CRLiO* zcOL(eAkK<8|J`Ov#CmBtFo^zId z72J+bX5S94+UC5^r^;EF)&97##qyr{&5(AZU-P)sI(Bi+0-TwgAP%VUuz;VVXTOz@ z%E*NY=OPq|x=Hd{A;gVpY8wvfAYmHQ)zUO#>!%t}p4C!AKg!}u9#@@awQ&dEYAO3^ zLE%c(B$6T|TZS>cZZd)TntG>NisK1tCqd%SXr`ZdMWerZsB5E= zJxX3W6Rhe@wI*pnX$5Jfo&UJUAsWg)e~w$?d-*>T=l2Qc8T|ry za0#vx*M%F!E#YKCewpVAZWSlJceF;D=xw9FVvfoC3husFW_i+l{YhwChSn<2YA%1% zO>kjuzt!`8Xx#+=Ug8zN_Y7sQp2K&D@2=eU=n{o`;oMxx@wJ40sD3n!zuI#GwC1!4DPDZE&yQ{i02pER&d{vk~MCK4~UZ-3?(d4lha;+1j79G465dox%4RypT~O}()TNxxUz zUJ(&IJ2RF>Ixmb!-&6K8O7bRomcpa zr&98hzWFIO?Lbn*)wCUlcwQ0I)9$REf}$(3%c1O6fb-2B7n(ipYWA3Ki8J34Y5p#9 z8&kbpt6*ubFH*k0JUf}r!p4D&7+T84`q2+_fYTbHL&#-!n77}lGTaQSvEoI1aN}E)rDy-8P~97V@C2>8TRTrY}c30_Xmsf znZL7e#2GQ$G<^(v&a;V~^x-P(nk-dfU6Li{q!e!Fu@w=F)46Wal-{tvLeP_t-X_a+ z6s&|N2M=(?E7#1jQ_|VVZ=c?HrHXM|8D=kWEk(^5iq>J;r`pP?hT$BO@S}5ZAC1Wg zQoDGOo98CXIoyoFkCU%pz2%DC@st1Wm2vdYcJ?1^j}x9NpWe`KEp9lVFo@<|_ojpw5{4~!=;&9eRI?q+UqhFytOl*%gaoWESmk9?xn&EqDyWP#A z^{h_blQY}nC0s(BQSfZwIzNUVF1iock8h7xaT~b!JNcgA90$);xwG5j!Xh}&fq#}T z+!8b;Kg-z7`zFt2`Tqj+@Qf?uvqqd>rhj}8{Jd9ru0F~)ZjJAC!ZvZ$I`6`<0NlOc z#dUo<<%8P*b{YRJ;8u993I;l2ob=?{kJ!n(Xk8a9<*zANo8NVMTK5iY?`Ca4z7ySV5d`oZM^$GUOes>fvQ-&*Y9{~Qx zUHXNe03KJxE#WpkLOE+K@uSei_bP7lBj84lZfEX3N?c^5QJ$+G!yi1OlqtG!W4jzu zNVqOj#^LuR_1Vff*8gTJ<7ads3}^E(J#mgE&&Pq#bvmLaucRGqTp2&cGvDW%-%V#u z`;x!j&jTO-Htl8`W7+SJFP!$utn*a9Rn{B4hj^lYlW*|~lgEgc?AR8^xYh03;^=p; zj338u^ACvA6t?n*SH_oZcVTz)%*R`O`pS6Phlx-1!lypxzt@^z*Z%6tc<+wJ_{rZx zH-1WYy(z5lif!D7<-)$u6t)80$!l86Y#V;!gNJwu=e_=ULjJk@7GA$C-tb|U#f@Rr zw`_|~H~DoQ*cQ*?C!EjlY_1=DcYY-@#=E!01)TOlO3sxXqjlid-nA`WQv7#ri-#QV z!>SJ&2Nr^{1U$|qDt5t~WIyO zVY3U}J#>`xZ$CazqEyyN{YW-*d@!7%4w~ew7fJpFHDyc%O>WcB@kNk zF!B;dpJ))>wvoZNM4exl8LL}iwV|O+4W;cZt)q7JqO^t(@=9!0gZoX4V=a9msg38F zd_KG-ojlwr=Hr@+A4dzCfOpSg$DT!=#|MT7B#?!>PVHMFLMjY(NZuJZsZej0r`%FZ;jgxbgUXuj31`T|KR^q#47^}EN%%!%F z&!l53YHlT?v9`N{cZ6VzKZdpXIp$9-${Y-iubkmZnH66S)N{Y7NW!hazAQR3xf&9!f0?D}Tp1j(8I9GL<6 za)YO2&GjYxbFyaVe`H*K3|fA58*BZbA|9A zYi`~}{_iFXSN%qwIazawy4(1kZSkk5_v(9ir#)=&)E*_ZhgZ>FlDm<2c@|E%@M?e7 zUaq~$wI|7G4>3WV_-Du~gAT6iWQJz|xUR3b%sI- zCf*yMPw^ijeoVUC$e+F+37{y6TXH$Dh| z^kHV~s)+if%D|cWRTrjF5TI zBIdD3pWE%xv-z~D+4QbBSDANv(tMbc7K>F3t-0%dfS@F;TE#qalY85K`0y)e1 z1><5xcM(tnd?;0yY=+0({fDqzE~&^Fg`Y3bGcIaFg+PVPNsEAc2jA(e92$t?uxPpM_XZjW0w7Vobg$(Q&*NBV8><8 zFO;xVLxx9Pl#VtwGwbcU1sv(Uv7x2*8C`=fbRS z=WwXM`?|}OiS=aP*F)a(ehvL!>8j`Z=393q?JB7mXT}{e8XVVf^@2J+q}Mlmz}Q~9 zGNn_q+j|B>hc>q=q7DL#J;1)qnf^`5t{w=uHjuxVB}CeX8)o=Z7~hUs;)eF6US8oY zqGsH#_vii7>1f)Zvp8v(O;x==_PdKA8K*YS=$rEM8_#7NpQ5a%s*B!>?K}Zb>Q|hs z>egZJKV6!gEauon8~>Ji!hS0&87we+9HGlhIKEWR{F!`UkC{0DGvOlU8*3Lrm{_xG zKA57MnQ}G`J-%F6*00GINVxHe4*8Xz4h0k+Bi zK=8MDe4sK^n8#JsDMCo`Q>--4&fgno46wDz*$UTDO~Dp5Dg^ws%GhE(>>>8Beq2+_ zu_6wz&cEgvq32_iNj*Q_Q9@c0OXK+QIgCOs3%R&%aDp*%n=xGgLv3y`AkgB%Stuwn zzEm7RjbUmEWja@B!Uiip28k{gH%&67$@%Lb-HfRW8u7IslQVo+qNyQ}_rFX3exYP46E>n`W9Yg<8bqYYRQ{hhA7?*7ibPEv#0l*T+gu z?#h*e!X_#U2bj+#GIPiq54WuQ^Ntw27SU!nF6NiB4+zhR$N?z@qm0H-!Z;qs9N+%w2cslvIG{ z_(83ScV^OCkco5c3GQt-wP*5jhN~qkmAod>^aO*1uLdK|AN;v$P(w;HXHIc@>CZ`y zV@QCxGHM8G;^`sGNenj~g7G!ube4~Od3bm~jCo{@VL@_e#uFriW`7-FD;|JJ`Tw=D zc1H)CGv#wqqBi#tw-BMZkcS=Vck)(VKEtnR_Tcc!fBvi+a_6dU08x7Qr}9sr*825`tGWnHg zpQ1_c)>Okga#{7@LdOEW^s!;+dc9j7xycrsa)sZ2l68w<+#yWeN$PBH?XbkT1;%W+rHH*up#8>)`o>p>8T%PzJur${QNvfheesbm(9dV8fNMVS|GZO zVrd)=zmu6nOMZ?M=EJFfDhOxgXz(V*hVGZ)nygIGUKz}Dd9}=VjxxqPG0>FvZ1Kio?d31)G@X z@=bF`UE=za;}%&txiD{!-RHsiF)oBnT@C)ecjxe%Ny4;YWc4#QQ^z#E^=7si<@_~n zyV^FQ)Qv+KwJU##ezaiMth^K(;C+~5L7q^y zvbXZpEigOe|)HKu&?(HH-6DlYls{{ zPaeV$q%=*RE7i_88$Oivi2@8E6$^@fO3ZZ}ULQ@k;|(eMb9ux+Q}^V?ef&dp*ifNt zsJ!}*4ziTcC_l*0#sDSPW{gmHjqAb6HAHfn-Hey3t_BCuaq{?3 zUJ)JmV;bg|d#V#Kcy*N8EW2W1&m}kho4@CLsq}96NBRa#pEWzn9-W3Uum7aN0_AlS zH(bI3SxS4bZ@8Oi<7eoVqCNFvKw!1qC*j6&gUwG?eEicH?ggn|QXEc2?-O?EoxIJL zLbzuJ9Qe@|bRCRte8;WByu;-jIfQ6}iWe zUtKWTflJlT&9VYvZn4ItZ|L*&pm4-Owukvu2oD$3)#-$?y}#)$g`)}Hbi-}@k@=li z?emfs4RfSZYE-V4qC8wG4tjb5{?y+w2`BTBuEf9;G~memoSxdlxu|$~xJ*Tz)sYkD zw4Rx9-~fLyy7OUvsIeJKh@0^SuOjv|v=#5tFs}sm^_a4|i-$Ws33+y6nr?ycOL8He ziDu!hA6MU6;?=5!jB%U3Nbzek*b3A7ErINPu|9}@tvp35lA_S*$J{<|ho?16lNlH0 z%0FaAy4|eY8^feH@-j2&HK;CqW#8y=(ucLcTb>(39oOhrD^JR*6MZ-H*LEWoiE31qPHCbIu~AG>7NZ0BQRRacM1VfeWL0Bi>xwXu+AO+ZyAz^2o|3q~rXvGHvuf znBi|Xbcg)5gk|{7PE<>aCJ3=z&cinh9X936=xPni;c`pWexb|@S4FS>YQ*g&Q0XK% zkRWAGg(aOvn3O}c_rIZdLtFS3dOV&38H;KgFDpx*$BfMcc=eUyc&VyZCBIXB!!{tM zJ5l8~IN*v?!=*1b`O&4^zElr`_QHF(IxHMV=cPHM*oYsi<>!fUzQi5sJK4)T9FxZL z^hf6Wrn_+C;_$(uiQA$L!N?6!Ih|+bm(AVe=LV{3iQNv;Jk-#?*s_AhGYo*N@`usY z>VtU0Ho|CT%5Pp4_yoQp%x zUBwP;I`rq#kq9cyZor?HoY8MBVm#dr}6m+Q7VnUwjn&tja_S*I6Cn`joE_7)q9sJGJ% zoj=82%XKVvR0V&@|Wkk9BTls0m>(s6(tVSQdAHi_C?`+{Q(3O)d99)jM1sK#IT>q%8`Kg$irW5)L zlYc4STl_Od7kXM&h9Pb`Y0u>=gxQFkCEJ4Eshn)e-x}7?FHZ-Ctc7QrkcIqR7_W_w z<uKAe_`xmSP9ruUO+oBZ01@YLC*VoK&k8n%ZEyUEyG zmg=Pi>&6sM>#Zm0_kN>!QNpA1zrFutu{zCWXVZY$EY|SKKi!>0-&0yAZ#!**xf{l5 z>RPus1ryfU72B>JHulRl;|(1Ll1eQZ)7}eCG;Rr}z5h+HQ?uPVN>UziUD3`ta0J3O zxwVFHwwI$M^98qg%bkj7@;iAOFh|h=dmzIon4F)%`0(6el&RSPBwFupFuk;tg>pW* zso6$9z`*Sx2G~g?JHBpj{h`UTF7a@rW7rgvr%dCakVb#uaS+3mMU1#52Tq#cAbeHh=IFe!~s=YfKsOG0r5X6DcM7>=w)Kf}wBj5Y~Q&1U|9 z5zm!hV|oo`n!;r1b9~5=S)Op75~qO6`8$NxB+S2`COc4>a^(!1i|2iPTu*QCw0I6r zT8T4h9i}*DwC-xKKE6Ec`&PI5tY#qjDNVb{-_hYs(ALj=s>+9_!}M0H*JISO`hPLE{~td`3|#Qxai??-k#}YX}VJ?A<@uR^1ec%vYl`8oZ>!F z>9$Mf0uqfBulHgJVKm2v@a7Ev~{_p;o!`bjl3xXwwoSx2jkPWoA(Rtjkq~5mnY}p zc!GQHWoUNaE^oOgq~*SbxnIqLSy?Z%dgDJ>syct8N_`laKIfzQ>#yfMtbaO>v_Cq| z;M$i@$2um506bn8o?GI(&FxkcY?EJFemz=JltRB>>$l|z7ce#3H?JlByeH-AZb#2~ zl7DS8P;d6W99MAdGx*Q=veb8<-{H^>HiUV2&$P2#XL-|(@XX%`w)XvAwx`aN{n+B_ zD(7WotM3bjNo8^r{n~u$r94lhU%q_pJMdz7sC~P^r=cEl{);}qXgU>ktO@|)a`H-> zAfvIt|AHi!l-8CYqq)V`)86PmbJo%(4~_nio2HSkBVVpozoBk)?sfQFsoJk)3AW@L z%rQHCE!!5-G$u~0d`sP(Ra|faBj#ZIvEqG6wN@GD^aYZwoq%LBs2%;|jygO4f5c-5 zhp#K#k(B5JAj@>=iNHn9l5`}lJqnS{GhAAHVjF;SJJA<7m&4QS5Agor>p0`Z`Sv?` z%1`I0R(X$J$yvNtaNg{4Y$D)Rfz>&$n<;layLc8}&-tals?F=AtY$A3JrtIC!eJ5BrFPk^WOB6I!RKccg$R z)!uL$VJ+cAL5<2>{>=U3;`CX|ntZ;$QluZ!+USG~Fn zIXy9Fg?%{nsGgXEgJjdw3=bU1`PMkWJHrtROgh-EKkU)C{UK5q^YiDWb@n<;hiD}3 zlzlnO^$=OL<{+wL&M$TP+ zHTEiA&-ut*gkf*_3CgGNmDtk2MPEfYPUUtjc>WMP_Yq!Az~|4m-8%1Yxs}lu-vwNz z?d+V`c@xgiO`PSYBkbZLWr8fv|*|_OnsN!)~UrBC!I6Yo_ti- z%xu0fQVXp4!0co>vILq4C0F95+j=FB79ep+D4fkv}{v#v0 z1->^9Y>yu%d}SYPvV*qwP1t?IUWv}lj$V%q7TgkU6B{SXJl8sTm(3i`pKkCz`#j_7 zOziSO&MD)>|4?m3`=H~6q;F?7i7USQB+sS6?eSG#)7}P1yK}A2*KaSlgY6LA0kwG& zz7BtmPSKZf>jnBPZtcDFWxhvoEAq!h{d|w$hIq%V1JlWK6Thz8x5sASs(4_wbiwUm zFcqhE(%Q}$Y&H5j;)`|HiRjoRsvD>ou%6B=P;YDJF22-nVl`2 z&oE%)GUu0JY3HBEg#FKX6g}>o0@5iL11K-v!xtA65*>UIHdfK00bUE8rVgLRcW-jHg%7_?a1h4HrI(5%(l; zay1=(^6=giPXCB2xqY5vB4HtFr5wt}CpfE&jWrr%FcUY?NTq_2zWEDg%uQA_EW!;p z$t)RzO!>Us>%K2odCiW>#)yVak`65r460FC=}}Euf}K!k13B z0Xzq9BWlno*Y_ck`I1jJ4%GMVS;STe+bL!i=cMb!xQp6mmS#g6vGGgc`eiVoU6>f~ z0$W8C^`@7sB^WQ6u1uuToX5`qiV3EL3w{{&f}B~lk=UjU;3Jj2*C_+t{-jkeqdZ{| zcd9W6pSAT}?h0mK7YBp*4YN#(ysT~Bx|gjq$6Aj)VXn8c8GKS&BEpWNvn?%}c9Ql% z9}&;CH|!tF&}7-odxi6TZr*MEPK#4LY$6k=^}oCau*WJ>X~dH{EIEtt=3Yz=xwT$K zc{5n5@|D`8@#&^BaPatd1Q}=OvcMYCRAv5@?cqH}??GB<@XK8oe3Vnknlc=lnI(QC z+bazosd1i}@ciGv2VVsV%ruJJWw$$-4~9Ncxpb z3Kt~@?K99pc?4VbiCIW=mW*X9vBupfiHg;JuJt=z*N7Ro@uk}CW2K=;PSm`!#Ia;5L6fio1RT_kQG@{}RPj+%n(mxDDRpKLGBJqIl_PWTW3? z{`y;l{W);BWE0rGaCc)p#RX=c1o!Q~h)nblveCZ-AJ4o!$7kQ@Uyl(fkI!+sSvLxt;%W@mtxAoLa+<3$m}|WI4^#f|FbwOV zA0=C*tGEVRrF<8#7iIRNJp4s%mA?LEW>f6CqsrtS8{|fe_UQAo131u=iSB>_*3BLO^@Jssi$}eq?KTs{(8IuoG zr=pvESn_|tBOinA@$=DR-fxNTrC+6tPaa1zCcD6H=C5yW_tflMmz}*}>`UL&ao`{_ z%*o>>l_2+;&QDP@=$WYMB0eVKIq8uRM^L^)OGqQXJ!P){U#CZPVnjW=2zk^~!t9S5;P9scYw zS!&;#T^)4&2J!z3@#_;&VYn9yaTG?)L=PLSv(dXFF^SfK1cfRZ;qqaRXY+IP)Bn0X z9vQl|@3#J7bg=tRAL}3Jll=Jw4^#MW)ZK4xkF~0=l}M>}b#}l|rZc9F=<#bAKWH0E z|DFE!Bslrj*!M8cJfFWu{){{CDfAsrj&+Z84esC#RvZcPqn@EKO~R1A?fXGB8BXGs=HT> z>4+>#zh!}W8ewdlQwz$%v>AkuS!RZ%q&h!!MJ}velQb+XEi%K`E>7F#c!_jeb8JrN z;_0++l8^YZ`V>#K$@Qn|wB*a|exB-c ztIyKDarG(gaF`m?_9s1~F$`|NHthS9G!jzW%1%|Tv2)(a%DRq8OBi4MgD9YUFsgYgcwVZetx;m>K8c?quSM zPi@9K;-#1u=CR(jZH35)SxAD z+`YtWXCG0wO*2Kqz1-F+U&Z^~`>C(@?l3$0E2nrOPX;^sn|yD6d`F9Hnk+)YMQoeK z-?8IGkxf@b*D!4Wd8#_I!(`L=qtL^*?C5tc(eD2Fjt1Fu`NPnRzsaUNgB|@%Xo{Di z+uJr>Jx_c2c5rals^roo;sx1sV*&c>#N|HW)V3*pE0o0xl}(pFwBwSpsqTsmvgs1^ zUdoRCD)e+hr)-;!eivo&6ZGegxH*RPD{PuJ+tFVJ?^+jq1lQ%;%f=S%Mf2PTXe3qO zn%k3X-#?50GI;Lcxr27O+JqyvJJfU}@hkaZnK9WjD_g&w1MZnP zkEFN%T?l);?Av2H{HJKMoupU5ZBT!sdZ+BHE_q+Ut>QW#Ag?^DxFy^J#9R6v$7AlK z?QiSIc+%((Hu5Bu-vHqo-%ne}!F7JR6>h=9J(`0XeWVrc3m$Io^$xGf_o0_X(an4Z z-dJ64jdvg6U4KBna&Q}e?+#+x_(och8E@8*wwP5cF1^w8JDF>WvJFs^_b#hu69i<=#IV|-aB zZGw2BvJ{(KHD{?`t!ihsUrSIN)49)5vmNPqL^TH&7{T={-B2et4p;qs zhPE*ZobYYr;8%~d!awfe_TK2|y^3cjpU!$K{ItUFiQ|WJa4X*y$MLs2*ii0|3m<+P zIXI2W&Ga5g&^_LS4Dr!8enxS)6Jmq+wU41ryDyH{ab3J`;-|cABX8FNzll6@56}Eq z-~4`}d#LyJ?xDUrd;5lahWc%X&7H#+*ikZfXAc@*RxH_oCc80}+MS(I^v#1O?gD*u z)!S%WH+@CC_VG9_doHlh)tYnN;^|PsZ5XDKAMbUxSy*b!QcANR+*hW zYKtxP>dd?VWL;-wTsmylT1#VcJ*-RuXx}nB7O_%gu`r~>RT^cP(u>^rab*2UMa2+_ zVTFAq;ncJ(aZQ#utl$0ijlu7|QRdhWrHrO@gfOkWdKBqGcnGt2 z`}e2&SXkNJUzyx*v?wnDuCXj#5+N)Q6%x+M*k+QxgoP`Vy{E>9%(L;2oY{O6lQOg+ z=2~;Q1dO}hG%8)=UsX$b0ud|M8Q>kvj@~T8y!sJn5?CBzEftyH6Lp2L?{{6njqGdh(X`K;Uus zJvHn`Q*SUu5n=sl{c-<{OpYY|y`-KnB^*9AoD1hbFyhh&7rjlZ-kuRCEvH##!=&b) z>G@!V+c~Pxu59C&6SJD5+a0yX#cuDYC&Tr3QqjX@{q3H% zzq9U@iM>>3q${He`U7w9J3g<|QsvP^5r=Q6{Wj|Gx6Vm~a8l~Z^jr6%=KLlM&w z#nj8L5G^RpL{Jw8HkZ`{*VfISfgxzSqU}6rtrHuk9L;BEFw27$+w7BY^NF*~=9bzi zG9B`0rOVYH{B@SGWq6TeaJDheEi=z*Af158b2hxEr+?_C&Kt5etPaq$j;r=D5_V8n zOQfoOm#8B`)27%*;mROi_W@K^QcMAy>!U7jz1=K1lLL(k=j)W0A=BIHhQGeSVbipitq<73fyy%H-8(ZORj=zT zFea2|3+#+B6`OSg@bz2IHEwK*Fwb_S_fnU(0Jrd9A<2Hm6wi|w9?m4z-QTT!O7uN? zER~%$)OOVoIEjr<){30kO$JM_u3|F7px=Ah0PDc4ZL1sx+59rc?w3@j=XIy)K2Fy< zow}S+*Ojm1Q_7TZ6lz>KAS(kJl5F#BS{PxUvTav0S|_Mfir030vQr?@<`oz-XB@CY zewW+-?PxTnG@R?n6P2>tV_?`Y{*kCZim_yU*tNF?Y^FGtu2ptiPPS>F9#v|Im(+nmhLA%}*;?!I4s=1_{E(1%) zA1fp4VQyuE8a$Fw1|c=seZ~zDW_xiE120uc9!cs zRvc;aEdX1xtEjuG3kQ6+HOnpVH&94)pmJ>_)`luoKz>~Cl1oD&-qtY6c|lNOibPLv zvMoI7w@u{2eh&L4CYRU^u<3ARq=fPie?Q%xzvsMr*gIF#lrq`dBh~W_2lfSx^zn{_ z`_an#lH-dr6P4sP=5u3q3Ww}OhbNNch8y?4r!?)2js6Dc*jL+7pa9Xij}#$YnXhEU4c z&DFrt>5(LR#hBi6tp6Ar9{udX?y<|krYSmLqoe`4SMn;vW$bUnmU>(#IFfb-4;NTm z9*BL8hNFRHIRH8~r<}Zfe9MT39dhQK5?cgCDqx$Y#z{?zG)TkPC*aL^p2ET|1U7p| zeT+({Cf#zj%2;

$m41i|1RrNX4b92!)uhi4OWb)iEKNicOhr;^2xuJCn6Ay*M{E zPoMIGs*Tg>C}tC18@_TiVrils@UoigCUCQi*)-Ol@?pH2;*$ggFKtLu`9%&GFSD6^ zzFg5f&KRPvtOjJa&N~r@5^Ml!D6>OsE!f(Hu}H%nY#Vys$)B&Y|87Wt5%|i_U~H_Y z!=q$VhSZ7XysVq}@x^uQZf38I8KB8X=wYSZ1ScYk-l5?UCqK-gFhSOyYLo$8nPG`u z>Vk<ZK?@(Ag)U|l}1Y=M%v0;1Ig4ITcyQq z^b|b9gLQqow<<^$4c!R+Mhl(PZKGIkQ}}w>E)Y^5YZFI#3w+-)mYz=y3PfvA*!Q<< zP?C9=6$AX93FD{WY?(`>!dlz(CS}RIks~lcv@?#HRX8pXWHX6X>D1gEyl|zvfb!Q5 z!WWZg?A(SXd|sg0!~P7BH`q5A?U|j}BO6!g9NCq%DotC@>fH5XQwx<_p`uz=nqjsk zbr#!%igz)gsf_PMxX#ltw#epm$FWf30Joq1j?z1+EzaxmZx+T9fACxm0hE7~;2(KVrqHnl_FtprmM#BH%l_9yRIL=t%WK1oYA ziPwqSrBW0N_&2=$?T3+yIuGpQ&msM>_57QX<47ND4T0+-mG3W7m~gjGqYi4e6y4}q8nG|RFgvpb#yZAPm?n2l9^&x z4p}t)7#!p-qM%-6awruz9X1!{C%psjleP!NY!s#v_~f*sAQL)0Lx{wb0VsT*=jI(jE zg>&&$__kq^5gWE?quN_Y`zA%x*$uXuv&u}s`%Y7CYX(TRcNlhAhZ-h-mDn2*LnWoA@P>FgS z2|buo?HAyUNaFB2&J6K+@d(0bplLq(dwMkVSsmumO2aXuTAtA9yzVi28sc7(ivf+f zKItyAA3(>Nhe+(`txi5^o`uspcx4mlH9Qsr67 zbYF~6hoHL|HdI<@4UVg4t3%cTLm=^i*P0akopmo2YbZpU7@#Q1jXu)^dkcC{^huyIB;9){o-miIu!ZZP;+W0gib2~Vy?S^#9=Vd~pE|p`AF+d8$kfeum z0(}cXqPKyj0OyHH^W*(5l2E{-HAmaYnvsyE;iXAU`7-(fzqGch>EQJl3dBMz6gVYJ z8Y7bjtUhGm6-A1U7G_v8m>|pB9_=QmLG8bHno+06ux9L65J<0NB96ohKLAo5sVrjW z>RJ;HsVPWxP~Dth=AtyaoyhX0VgtiV9xGuq&veXrGAzr;MCTRsNTb_ck2@V-8H$WvCka|D@7u3i!ekL z3vJq)OB$!#TIrxSbBqsTE7B=!Me0v8yI8EBnW=^$B2~Uo^lA?rZ|0yf!_q=3IKt{& z_P`|`GXnU|dl~GPcnU=5lqZfj?gNdfWX#-VEkLuTq2IRi#9gF zZi@Yb-N*ZixAhI_Kvt&_C|HdemCB_3hr)S6nzp5Ip?u#2SQ zpxRNlb$+rqTT|!v!tK`?5ZAbnGaL5Mh$jSrH)+GORIVl4j5fs-oJ=~wW{%r`)ylQx zj4fQP717t`;2I35Y}LKq^k__s!EN@rHMMyE;jeemMGyLLTBVkk7-D1~j&WTuH{5hl zAi=!VlDH@;!?pjpz?Ciy#o3(qPn9l8md@|IU$k8u%Fg*b7xIPg(uAqaPmNu)AOdT# zYTKgRLtE7tp2@Ag?Vy;erlUc!_b5l_QeJ87{yLLyJX;aha`&>dX-sNs+Sce>l53D{ z+FVdGS~|vGB`Z5QD$Pe=WJ<9O4pik#k|-P+rs_rQI5%h1Ad50xdr|8P*H4vf$;qGP zGC3{>dw9R3bZgK^2-1I4=B+Phocu_V*XJ~W=K8&2AlIpfm{5sf79>Mi%FdC(k!?@GvBss;Q?sbwzu;Z5UU^ zw;J#<<}v`(q|V5YZUGxqXl;3Y58{IAR)dWj<+EEMdhArE%<7G?Ze*cO-ko&E;%pC3 z>VtH}(K)Rh@y8AnYtrd(u&rlY3rp-mL+gb`%LFRM^q!%fR3t<`@QhCY0of76e7XUT z%@bUT6n>!4ksM&y_$ST97El>YPD1v}h8l#X#$;g1y1Xg%j3ea+y*vaRAYFc;*XP&; zJVVLn!YRvqxb{cnL;buj)dl*!SS|x^%}U{|c>=*1@|!{UJUf<$Eg$RzkpDC$Qy(s+LRLtOCT4(rWagb>#XA!myijGrza3t7fvtq-5V-z?GxY&9z_` z^D0!giOjVt;L?3VPOlDC^l)1?d1t513E_)WgQ!JVmgc`n0LgbG7JZucH>-=Q?K_n$ z^m#%0uArp|<(J#Hp6qp%Ve+g8q&UzUvMi!WqphYYXPR% zBEDA^lO-EkavD=~yhA71d*r2~k{AMe<@<+6n*GLZIo{js7xH2~llCYMY3o%CuIe)y zm^_WCJgzY{QPg89=e&L7StUp*IS6O@hn69yq zTQum5mq7yx$t2|FpRUt{IAP8gzGXXCc~zM?jiejT!=>cgyI$1HL1erxi;{Iro`zxyohVHV73h3F+t4 zh+*t>iIYyK57!n$ozYdaW~5oU-RYelUvptwOvqE2RPkNqI%PyIJu8A#Q1aFzOo8k4 zSzfQ>WFFsm8g(kPHSa&7zNt2ygB~Jjjo4|wb?e8lFw@dWwNDRByRKVnI;tJgcjVqr zyZ7TZ0Nnxk`EPC>_1{C#La41*>75XJzg>!Rg*1F;@hrXf<#9@tpW)#v9g({SyA{@- z_CYrmsS4OQBd+E%Ce9;eV%7L-yLM08axq+`TPdb^r4McD!wq50oj*sD>zKB&qAD~g zsKK=MKhfa;7j?xcl8o|q5jZgo81F@4EYbRNfWd|*<3Y%q>47~{YVh;?r@_zjnn7cs z`EvLBJ3XZFe~mR+DU!MQhcA**NdovbsDm zwR~p+v!)X4ig%k+m^!-4?(+0xgR0RJ`kTD7sg%CZS86nF8uSBvBg;iXLzm(Y1KBo# z87(`owxRjzjPJw2L!78Ro?N*#j1c1KZk}P;ZY`2DjRv@kgp{we885PIE0D4Zw6%rR z)YZm3cgxg8VbexnF|52pS>(r5zYHbT#-6B51E2GkwIHpUq4x3%LcETbbofE5kg^f3 zWl8OEx>S5-4~ye4?Xfb)Jd&Hpub0)B@n?HPg5R6EZg`X1az?sZGe?YmOXvBn18kBA zc}G6fE^DL0%_zm`ggskgH2Iyj#DuRYo{GOzrEg(ZRl`(X3#9QHqggJ?iHWp{rK;8N zoGxPPIc~#T-5sDwC+pg?E}27%$NL?VX%tK-o7>Ftdf-G}tmL4FSh<@X`N-ht6 zGbd8%gSINJeO5|W2^q(k@zx}LTS3pB4=nT_V3V7sbxB4Vp>^%V-mLthrW#nZP zm%mKPXp&`Aat30nBJQ|}Y{R?Ld}_fOAd3%8-`y&`#uW zjx*I^gT6=WP%69yr%&y$nrIt@E%1SccfB(?aN|wwqG*0u92x39IehHY&|q_*EQy!Ya)Jc3LoA{f`mx8m{ zzGj@kAWf|ZvMiP8MV}d%4E#ZbeV_~u;U7u`Mb9@gOyip@z^9b!5P+Mfz z0c)%nX@>8)13r7bsCHc{gJqmvjYZtvsU|F+;Ba$6(Jw~G5qriA&Z4`qlor*L{uX!} zS*~acGGSx-+Qj5i-ZH#9(_yuTN%P>>Od9b8dNupdERtC`M^ALUb4HWJa2;oBm~DfpNXZ?90Sqr2<>BVf(p$b&5NZWAJW38&?1V_5SB z!CYqFS3Gr#7MkA&_dD4?e8R2mx`EzlCdfx_U!FRC*u%(}7KThUnnrm%7sn6HGhU3e zqexA=;7s4vD8mK~6yqcFgRFC9{;lO;LnkvT?L6^i(xzVPNBh}mQLduj&xNWrlGjit zxs3qUYm*ypa%(wK(z%MU#raf7*Wh&cBJp!le}lxYqDzsa^_J7=2H_>Bwfy>mqsp*4 zWf%(-`Ng42<;S#$E+ZGC=Tha7L({H27Wz&vJh!@==J12N8_6%~HdM}CBY8Z{y_b21 zrDL-$HBn=IGYxUFcGHL}^LOyb&>1gnL`ab~;tY_QB}rD=O0Ssd7_7jXVKt9;97c_y za_m^$wJ_k^T9T`4oAd8&-t=}|B%Q>?%GkE_r!C!RS?C}1?B(LLR8QQIqlM*0aewXV zuAnfO;1q|n-8~~i18?mi|JqkM4v>up2IInxqK0RZ-b1-AN`kCUW3fk=xUQLkvv~9# z#9g*~un0Uk8I7Q0ZcHagsu~iR%1p3L4ifCX-nuN!cSMh2FKF$zUmJJ*?rY-$PPUJh zfAE#@I?w8j*b~A=Vxjjdu*c3lKz{-Z_O{kfa4!(=o494-$X46hhhOdP0(u%8*mqm` zJ#hZfYvULg-GQ_E$G{OL+f1^Z9Gq-gkNz3{IJ2qzv#*M)yvy!dCvh%&yR&O_pPo;= z)@&_30L>fV4>sW*Cv54rUTe0Q)~TCE5ATjI`}}L;6=)kJtnlB#C-;9tKW>%xC7kRl zt?-=?S9Hm~vuxgVVed*d@q(XhK50L90I%VAE+6-6NCY|FdmS@QSvdR^=f!oAIzfT?G5?mK<6j#Od9(itMq;gw+ z2e!9pC#z~JxD7ed%9rW$ZI}7DdSCVJQt$2BWixzpyHt3-UEWRpWN&M|O+Mey#;+Ow zKlS&kJiXKY`3TR#AHFvJBxNs~tDW-ancaKg&&|7gKb)x!&%7=Mb2xE#R;mqVa9XHt zMdViZVc#eZo)bKm#B+WE1sm%nc28eE4O_NslL*stPS$KqODobII)*z8ar?~t!2`Lt z7($!NXXLQ>txPYW3#v!G{X=~{BL{mAC%x`UboEWmh133N3JlwEKQTK?Ptyrp0I(>7 zJX!9b5N14I=$IL|HK&YjUmr5Oc6`7yamC;s9G~vn{}Jh?G8_wt+Jfy1T9SSx*~>{i zY-`GZ#jSQ*t2{kDW{ET00S{vd%1BA>j=X3Xw#3SfbT`~=<8~Sxfz4>N@}pZ=!6kL6 zxisCzR!mKMGBmu4TOrR^r)S1tO{}_`*k7rgu@r_xvIarFD4iqM%BOw$-O?wyX==KN zVfrC&8)#y{{u)->FNEsyGh3BzCh9ccxAGmF!6;w7GP#h@9}qv-8ZnZP4!H@n z?WVeR*OrDMTN^PArmCf(;=$O8?{q=!^L4`O(A}xLar4 zslUA6i3;1DbWm5C4pjs5UQyIP<}Vkmk&2ixK2fxB^Va(k9Je>o&D4 z5Wik_qszu5CFL{Cxq&>*iswoa8yaV215mcZtY`@mtTH>I&49yq43G2;-r3`hDD*h4 zH(Xx0)4$&7flsm99Z@$L=sr2vee$I3b-2CXy#x^kPSRlZ?uePp$xN3%P&kHNYT`HOu`~Xf15NIDqoQ=mE9=iy@2KPMXaLh$6AfOOkyK_7AxxdkWF<74`WzTuXuau z`=SIN?h@tU!e@Eb4Q>*c3h@_s20xi2$~(m!H*6JB*DaP&be7b{i6x%{SZ;6jJLvs% z8<*hps{+lbUA|^`n>W7?k{hL7_7>rT{{%2|_|97l`MOl9&{^V3c~u_IM=m8%FW*3m z%4xhGv8^CVj%rED!d#~i=Z_gYK`Gt14+{?WjC%}PQ8@xJRKMAe<lY4wkC4H{7MlVD-fA zxcaNK6Mwh;Bgjd~k*niR9slwzoAp`xDDF~av;Gp7!6yAQ&kO%4`NRfkSD!=sSU5)e z`0&;7He?93iwF5mX5d-4e+u5YL^_=x_^08WE9k)sq;;uwv6psHfQPPiyXRBzQhh(- z{R{X@ho8IyUd(tB#?S)a8eh72idVl_V`vq8OE`@$%RDt6*qD$T|6Z&yRPA+@GzMr7 z(c!D(YvG~FyXFpT#fPp{$HTID14nUSI?)qzI^#gLjF2&muf$cQZ`!W z*?0i>?}Z28mT{xF_=oWOIPK&~?#cN%zJCe#1Nia2{IiVtKTO*p-p0?6&S&}lX<$FY z`%m&*#s9}>bDt*8zvKJgf*ZH=DZ>9X&mSR-`0>90?vvpBKZwt>`dv7l8~5YKbCd8$ z{>%75&+2y)mw3_l;3xXNgLi1$_!ws!Am9HI83_O7`@oNj|4;G*z9sN3^IpIu zz;)r4pm7wp#(P9Ltr6BqdR^qD^9KpzJt4oVysz@U_T9u^AfeHkOEkd(rqQ{5p)qfq#mhRzE}?y@dR<@L}-dBHYvP1&y&QJfCl!kIoUVKv@pa zz6Zgnx!LW|e-q_&nzqFAi(!7U#5(sfv|g&tyS|LaiB0k!&0o3<4%6;6W_}L&LSyO^ zw2RGi)a`ld7&$_6MfC!8i&HBW*O zmcAL@iHoUs^~0F_gggfQL-kw8=S!@ASRsvNO) zN)F^XI&be7Bd8<$oCer;w$WYVfGLP_M-x7Gk zTx*T@=Kij<{;~ai?Sqcy%{woP*GXg9&z&BC*J*FZr^vH--ZW*gc^E$V_AKw>0}0>C zd;AN?4$$*r@wzH_m*p7q*Lddh9{IHXv3VE0Ml*L{#*Fi$=w6=hIRB-hhpfH{9p`h< z!94*V_;MZ7?0#6r<9pP$(PK30Oh!N8+VYF7Z_evX)=5Kc`K8h~cYW`xfbB)sedo=d@=iX{7(4jo!lKv|L){H-@o;)v|gXVey|3f>%T?+QOhCc*t z)!(5^aMACAA6Lb7{V{#TIBxV$ zfyJ%<8Mrs``%8G&-+=e;!Oydc=O%6iSNI3~acj6LZWH$mby>}o>n5~z<-VV!eB0&o zQ}|b3eocJdm;W0E7&rM|x{Nx)X}`GkR^Nwz;g#3Kn>g(sF+KF<*Tft6OTJp=*^GbZ zAaxD=IB@UB4db2xZv7S4#G`~M-qOj|c*2w5|9slw!@zI$Y>U6pgs-#8{p85KpOZ{X zn*S`mCcYB)a@^m(=9+i`zqMD9SJw76ps%{RJ>KBE3;*>iuZiymUzMlYbAr>}@e{aX z?jRZ4;btqCIyqUm1(UNFUOvlaqxtHY=w^(aU={0KfJS>yA#YzrxfL9Zr}_Sx*Ig4| zjoX2HC2oSS=ab(Dz|lz__7QLGE2*!qx+Y%ZyOZYz-wE$k4jmkNuS@g3=ZXJO;8$LM zO&q`Bns^2J)_51*PTp4ui@t_7!&5YW8QD_yp+$`v2g%YvMn{-QL}MK={sKORVEuX;vTj9h6_k9QSON z&qv`7kB)E%O<{FsZMWlt)tPa9e^8J-C)sw#^O0fr-#*Ipt<=}o;dqLM&wCm>36Bm? zRyWXRuBROW)AdbPFvgLW4p;WN!+sj~DPW&Z`EdPmv_YIr@Lx5uJ03lFO}va-!>P~T zJiG7?&_-X2O$NQZ>4S?E`Mhh&`M;%v6%f9sZ>6ui3)&Amez9`=)p3FM7}ts0cpL5W zCf<3j+=xH#I+r3BGba7i2d-VZhe#&^Pr!R~^ltWM&9ToZvAtrobRX9{qc=r2L>;v9Hvyy0 zeKYRWIK3y)_4a%d?}F5CKmQ!uZhM#C*RqFdjvZwx)0>Io{HEBoB_D;)rtjM$F5)mh z?KZ2V{yT4X{PPLQpqcOHzwaY_bArCgbF@tUC#eITn^Tm{G-ZOTegJpoVALmL+}f-? zcGpbx0EdjYSd2Zt(ZbYS5kAon#>BJ-7-MO*3udNT$9Ov;f_+@}%=$oWpVd()#dr7e zYAd#x)Uy1Xw7ewjG1H#2MRux9Q-0btH^;YjvL)=+(_6xBJnh4)Sea>0Uft?LyW5gz z5AXUp+MCkXedvU_>`XLRhj!bgI}+nHnQ;moJU~hTA1T+KNBY>FR+%W<^~EZ8Ou5Sr z%C^OR;v(r-ndfM8N0!O^46UF{4yS1?b)MRxhaC~xjrJneXbELXCTUYL+HvU0a)HI>j{KK$l1@X?2}e)ib=`2Ozf`%%(azaL)l9nhk6?w4N{Z+?XI_+IDPspox!f1LLF zG5mSA^x+?!-%eZRY?|bih4&+?+ykvR?S&n=6FK@{Wa$*{fNs(W{e3TVRCC|6(9sE9 ztKZc~$1>ldW0a@(+3K?6XI(to(QybmmU8LtB;D2A_X6K*q?7NjFXVlV{H^5ZzZd#P zUj)1lKwk{r_@j;Guu2)I9F}m&y}aYPDF0PlyK?vp<-7bM(9>z0H;S(Mde<(iJhv*Z zh%m{Q_weleZTQ=7F$VA)#VvU^gf(oMIcH3*S= zUb&-r0lOV8V5Cy@5ZI_MjSVkUs_gIAwU86~KBZ$XN`rU1he_`zD?PKY)2OgmpFYY- zP#vD_m$6vFI98ww<-#*~yKql1=S919(zyo?&7p<{*pR1T%xsi>?4x%0hO?C4usi<1 zD|g0EQ6^n~O}&1B{_%O9zfZm4Msb_C=x^z3e?XbxbQUzit?|B&8~sD-`9sKUJlDTF zidXcl_vM$xYdkk`D^C$0`C;^r@c(1{a4W#Ze*$jY#y=1q?Tou{(aUx+Z`m2I@$ABl z{txiU{in<0_$vsRxQHT(*Mjq={fvkNy(o|0!shjiQK1)5*VylmC}UWk8G+#UB) zKZkIKc^}~UH2K^7%l~!x`xI>@&@=!|F*F6fc{j8b`Mwta+j-uM>(Q7?`;AAxIO=5q z+LCRwA?Q)te~9mppL=;u~*z zFKr!my$K!#Z4W|+`s*yuf8hHWTsP%;+X$9Q{RnX)_a5$gRhettv8!K^9)~!RC%=BK z;RsLkY&KU^bot#g2LIl>Gv55V_IZx4e{Ol+xQ_M*-+aFOdy}*y;&$Rjaht+}t3uB* zZbeUE)^LT-ULN;C@0SvfehPZGy<=zmM%=U1=T$sA@mqac)&^Jc7eDz7{-K=~%%0?qaEuNDa}2*e!jA8ZWAgGWWveoNl6-$DwV&rY_CH3x=1PHtGG|{{^eE&QJHzt1Z{4bb~#C# zYm$SP78?6gJ2^P{Cfe%@l!KSb#KmpkV$$!#RdGwWQCtDHF-8C2*~PPftICn)k{s{r zxMki)zuEOMjg1S8i}&E3rq0xV9^)B!lsgt%@6kn&Qb>+*)sond_a7`TV3wEwe;6Ds zg!CXqbS;a#BRg;@eTnvU%&9L;ZjjDKdK?W-nN0z#4q&)zamE>WH2utxBwI2vwYl9q zw;zp@&~;#qVIsLuSqwH7%mfOynapIs(ZPbL+RL?ftBoGNwOWM zL7-ApMaS$Cp7fYIhEQZDi`0Xmh9m{epC?8qgqcePF-TjKCesL_rzvC7?xq$_btYc~ zWTs%s=Q-3K4WF4|=GS;0Ro~Kkxzfy+rxlp+?n{)@vrJym*2yEgl+df5IQor2AkLWT zyy_eho^}6b8tWWECu3tJE(s0BShpfIdetPd@-Nfg{955d^qs37rQJQ)ek_U@ch(4d zsbuGeMb88DneWB@>E-d-_dy%3@cpETTf!~lR&bl2fJR*WLyTFtDsJr;@%vfc|2^&( zc*jL+z~Z_-@iO+g!xL~zp9U{(?Z$A{++r(8LCLF&}((D4qCNxB!1P0fItKyO$1{crhM~KJ!%8&B?5dQy`cl_=p&zrxT z)xqcZUdw%}?^o&fOSr>?N&oQ$p3ikW`f`C&IZRUq=W!3vPQUKao$v>C$~hnO^1zFCKFc%k&Zl_)^Z&XtzK`b@!&ta)dUyO4|7~adH_)U! zKaJC~K)y$DpM%cmKhh_Dt$iQu{B_#jOE|wZIq~tG@d%^Cc{tG`BZ*`ZohO%0U+Z8& z&pmHzA_{HcdAcrPfvFEy3)RJ~jYk+VSUWoL^K$2hx;0nKsCkiSty6wPxR zn}xA(IlC|1^xwhj^OQuqSU)(R{v$?l|# z^*BS$J&aAqD3BvZl$>UXcJ;62cZ9S{bDBWPLXFFFV^*1Y7!7TU!HuxGUw}MW_G}=N zMX^Rw7if#if0FSgYll$q5dLd9{|9E!iT@^gE&SJipZ14ac?v$q-t5lL!}oAqxD{MN znAYo7c^?2?{A_{vc|N6h`S0fUQQ${&=|9sHzmq+a&2jWS>eDkBoP0d?0oD}$|DEv( zTrcn94fpc=V&DVq=$GGv&=+{uY2Hsm`=K-Bb*SfB%QVY z!B~px;(eXx22Sl}Q!N+%bpl$e(EI?;rN3p2+fmXxKUj650n9JgZB;S`eJNTDs$CIjQb=s zs{JqX+!pPM--vsh_p5kP)~2RnjUv1vcbeY`X&5tq`&3vzcGtYWy#~J=y!;*fAlGDS ze(V%x*hQ+9&S_o@>gdqi?)bL1?ut+1MDNYeI-qtmzdQa0{1U=LfA|#dT`%7iuUx(> z?%c7fW$rhM-%DBl8XF6j?TVwTcEzha*KwV%*u}mpXu@xqcj?)>pfAF$ycRfI=e0cF zjN@6wZQ$ZPyW#?Fc{ksx-+E<;p=22yhYI+<$C%t$Z{?#yT%jmt|IdspuLp;eX5P;%MM?@l((lAKw+f3imMYe|OCB(-ZL0 z)41e=tf`-%?EB#{1Mr)vE8_KA;7K^GAFsS8S1-W5==B25XQAsp(k?*DJv{Hmov74i z?m`YOG0?Dvue(po$k;F!^vw=0*xfkjO``#AEA-#nYF}J^Vk@5a6!|<}+!Y_fE%RPI z$#`~(a=x{df2|GUhkL1XFDtjhW6JxpF*A31BA!x!epDz?z-zDZA#O`0S3E&5~_QoBg>F8Z3|AFFVC zOnD*&6HNL+oI%Xno+w)}MJa8zs|8)9*63LTxP4|~LHkA>ZdY2t&+{#y0v6#kUY5pm zF|zPH1{GJYEO){(?;wr*_i264EXQLg zzTLt*vuy%-|NQw`hZK(!G{p`L|c5m zeL5arn)3J}woPljX6xR)-)ahJ_inqaBKNLcR_JVe`wV+Y(77)TqM%bA?B1UqLug1Q zxOdB8M$g0cR6h)dsCjq;;}X@fOObn9d3Pzg_kc(KLO#ywSgGpnIplIU6eaAB;8s>C z-l@vS78Q8jfi6q+HDpg`S5m}kkE?!z=(f(I^_s)oWg0N~NekBKSE!?_c+acjn|c1o zH|>f)joV;+TAtVyKge^dvEd);gZm_D zMIQq0+uF-Vo%iPCiY@k~B_Dw%+zZ*)Ao*zYTgVTt^B(B?R_Men<5qD|KkE$8u%9~J zgXU7dJv`pZQ(t?~*s%|I263aHdyv&8yqFP9kk5ZZ9+$~u82=vQUE|}^JinOa@^<)M>&0*^22p~2lb%mcT(@m_=BSz?sk6n zkxrCLXN_;^{~iEGXU;#Yl^;EhCLy<4F78w-xuJu5G|`pPKQ$bVRIJN;_~il%8tXTblOZTamcrSDgRsDq1W31_klio{uKk578e?{83 zF5DGAf&{WNx zzhVFF$;G)b+l(99jE3LFR^#?qm>+%D$&XW-x<5510^9q69&5lrSiYh=H@ayT+G~^S|q?b?^Gu{m*SIpMGjru3c5Tt7~TR z198m6V%>$mZkYEj#G5Z zzLQrP_RDLOqZ6QGY`(v z4BW!|=jitwa9!i_z!kK&2=!xYT8<-*|Ffsdx> z#78kH*R|qVgqtmJV~BmOW36E3!HtW^p3mY=`(s)dhMPFt@V7=u8PJcN75?#J_q1K` z7b%#?XzDV*<|Zx{Ww{CGa}CYE{a1^9pOKAoV#R-LGetN2_v&p%4$cvI+#J%3$eg`k z&SK~lV0q9feLxwyjB1=m-pMIt6mxTmCHh4d;v9mUszF&D-WQ?nq2H>H7zbT6x@L5i z7)JOV(?BOI$23cEUkdB}KUGKnPiyl36S>jGf5vbq);+9~4g?_|ucfJEhhdsK`D>xB zj6#2VbU`Q+&l}Tm>?}mL4&~x`L5TOEdYVch=!`c1f8VwgmVw!0EY;Rj66$Cwbv>KM zN5B8h`B+I8-vKjig8Pa&h)ml>Y{B*&sHxO!q4{6$-`f25mPx#S%bW#l#(r`GY#VgU z9vr2QZG?{5my_H2ProW*ng4GXCws8J#pmWzu*?GfKXY6>$}+HS;@`1jzJEYqfOW;s z{e>Yi->bm<-h|g+1*J%A7t1%?Spw#HBpSKbPf4Xn3|ETxlp+3p7&){)WK4zqPnq(}~Z-e$1YzsZ@y08Sk0A{1E?d z=uc*yR>L{Q2%TjoebmDHXlHEiG5<1#{)fB+5nwqhu-zFO;D5guZvpc<+!Ap}g6*!M zR5yX0`r}M=Q--fp*^VFF5!iGB<7P$b!?PKE& zKRflJOUYrl+TEppK)2Hn;BXE7A7H$Ph(b0DgN40bv-k6Et|@kp%7pDHul+4ObBMeY zp6b2Yv~fxq*wfd9OO5Ja{`Lk|rn|F#$`hSN60RArUU+?m8_IqnpNub%x^m*-J2hWH ziSG^goR1Mdz`+FX`TW9OuB=~M(gMw*D-$@m zz=K1|i^I~D#D6`a0G$xyz2^KV{BDE}5qH0=jlq$aH@Zl4Dd>c#;U$Qao@Zn?CsYM= zW1UJZ79p-eCqVZAT?)EpbRFpM<5mK6>}6y8ZFx_;w?Q`+T`)QU%I_mSK)2Buxii%f z>_SNhT&O=CE_go%!;S6e2oA=~@e&1NQUcV!hln)ZqGPU7g3SaeAt`SXE2c`5D8bX` zm{tnL0nU&6Uk!nAT`!3)9x`3HI2{Q+_UI0N!3T$j5hW>#Izo6iyzlIgGUJH#W5S6q z=35UK_XlgqI4iu@K&RWqA!V^Peu3u=8I>umHQQlcPHR<4>Z?RVw+Pf5W<5Sei~3(|4Ww zPki4QJBJZ4^8h=?ka>ok7nr$$aa>yeRa|izEYcWG?8tbQ;161)Q9e`sBT)PGB7xDVL{0TS@F)w|_@lu?pn5&t= zW}J_3eqykf9pj6qkVngLQONYstT#jo7c6wl`0G%|dsQ~z-~Xf*<4;10S+_pau^=s_ zX|7sI4P&*GPNTbtt~39HoN;OxhCxOqmNUpDWkl+W&nHC@5M%&blj+jG$gBjxo#gDTJA1vLaSg`nKKB)^ zZ~xeKHp|Y%!K2;{$ek-wGTOo5mz%N z2=*gEJEotj!P58D(HSikj7`a2B;CIt_UG_#{^D}|r9@M zKHN1KRCV+)uXH+K%lnBh++Wbw*oJ=((>Cr3KXvLgXt4>D(p)yMOea>y(yKI67v%2tX7&G4Hxw zFk!{vSK)fW=^1NRW1`~z4;OMdg!4K4r#{{bR*Sygq9H;4vx zlW)6z*}vdX&+Zz3^ofR3gLIbr{%Yb;`hCZBT#Sb2+ZIi?YAWMVXRS6ER769&(#FtV z>NPw{Tj`05VGMX2=yN{VyMad;rF8dO5CaOAj^+g2E9FsHD*}#Oih%|1*AK1NKwhQs zE4CsAEKmN{n52n3vE*X8;XRN~N-~f$%I8r&dHy{Y-h)uzyHonS#QZk*^|rly4{Gb; z4#oE?;!)mD1q&+gfr4d^v7V82JW8n`Bh2VN%yZY)gI*~-%5J|qz3@J4-m<0T61?Y8 zLmN~?m+!;YfoJ53zF>NN)fM!r?t`hN<6WoQZ+O%-ld)6#KY*JW!Vp*E`#fs?h?Jd+ z9)P2M>Oqy%S{}95?{M6e2e9bb0-vp`(|J^3;kD+f2e9VojiOXRGLLe()@y+ALzvxq zdWBS37LPJ%O7mL$5NvX#Y?qY_dDO#uRVgIj0kyuyDA>_wB0zX z<`L8%Yze>lBaKI;O}nEu;4x^b%_?vxS;wPB@Ndmr@)!nHuHf5vHS(zFYNK;ekD)MA zOY~V9(|fc+tE%=f{5dwfx#&&_kGf5rG&g;M_Qj2}PwD48D)&Wr;L;~hdZDgL*+Imk zrq=dm#5dqg3G!?iR#y`^C&sFx7P>8!K7_V zeKxvb{~tMjj`E9x=wEtz{byo&-ZI*=ZpFboenXt+mIxlzx?;lphB){cA8~q&d_0dz z?P=A^{3&=B)dgP|faP^pOZW4C3QMQUH^O1mFXg9ZX}6z(M@70>Ui%{+6=*xwyy+?2 z?sH(~9G3??N+xMwm_a? zaJ-n*Tz)2shh+i!HcyUY`TJC*np-A7u6oq>iz3voDZSH9tx5ptxT;D7Us6TovuRAqScYaVrCly;p}BAA4Ad)b~X!J}O7J)FBH5i%R^ zIHyT1K>a)Fm~}4^Ue(>q%}T=l3^a>(ZApZCSB|bQF~a^TeQNz|2n`#rT~zsHTfn2{ z9JuPZjs|HD^N~w)P`{p4^^1Q%gRIv*=jlFJJ{^UV_TOljrhI;n#a`66=`vG0%!FVX zGxd4(scar)UD~!|xex~3>Yrb*AM3m3Pp0B6A*f9or3T$U@~E-rnj#v6FgwUMZE;mA zk7}0j8f=~fa^Ktbv>0Ol7Vouv>7N9z0%byODWHB;Z`Ds|mg9<_JLpT*YC;PFMHhY}t*UlrSIGFNE zmoEERdH)%ldaN55b05n$&f>_;ug}0WQe$?{R;<6-r^$gspF`vB-xmBZ%wN#tGIsrQ zm?U3VwW|fk%M<;*I**@2h4eD|VQUMI`n7&Q`}gN?H+*AL9|P>qrA@;M?Op)27xWVn z+IbZ3_{*dXFJR2AvXwd&&8XkI>TbuqfM-FATvEPc`W3Y?=YPI{oH0K-rhh>FINM@% zlJ^oks^vcjG_XCI>NXwQ@)E9`uCm;I3+I=++80kIzJ!9*-`@P~*dEfNN0A*b;i{J9 zl_MvTcvNIs+FkxDxS*y`W2KGxmk()u9`XuyL|J%ix?}qKF{4Y9U%^?|<57FQ;{23Z z@>W7B1%Bkdl7C#0$)kkJE|`u^fyrur9^6X$gZkGqd&aI5m=SLIagiz3_u#>R&{rw& z=i;%N?$c9v)b%%KUdg?N_vuNOVQ(Au@9mlL<6eWltlMPU;lFs)pTYE${jcGhy>{Kq z%UGXr^U5RBUW3PoMI&-Pe?j?__pJ)4Ae!MHRpf>9sgM25X_HgIX8J;PldIUD-Dd_q z4oig$!K`9Q2~1C|ZGu5oDlCls`tkZSjPJPxj;X$Z$J6_sl?lS|FX#9uxW9o*b89vl zhJ45QTjTYC6K}vOUQzXABKCL8q}{#q-#|s6_fGXE*gik5Mqk!QgWsP%_nR~v>+4-Q z(|%4GoK6UvWiqdVNAc5+7DS|h=Is=%rqLMRV{$-naT@4PJNZm76Z7lkqinAC7DnA0 zaYVKZ^)D=S{;q zsFUBnxpMw1oWJ8Q$6BPrcE^>P%WmO#wTSkNUX>13)0*#}O2Ya-nR(&vy>!qzdhXLR zKWx92lUpBuO^1~hLHCM!qrCqRnT7o_;Owq8)r3v>^`AC+x7#LUfbyGQ5B(Q14wR3? zJHta6aG+U2lkY38A87~5#OCXs@Jtx|Fl=41Bi1LdQB$Qb6TIua(sJ`qUoLs}y{nxCy51k)~7=FgCOH_3hOntaf`>rUKN9kqmYaWmd z<;Cjv*3Uxy6c(wqF3*NlrLz?4EqXXmS2si|-_3@dcK1!fLvZ|!4>&ODOExU~rFx9F zsiy;F9mxwFngb^#^PVLv#QZdJdNl;)K&^qd`rbm6^V^p$h|hs*{SVFgI$X|yDp$Vy zr6UKHPgTlxIe_bT#xUp8qu#@d^WBSXd7`~DH0sdo-R~jg!rtZ5W*B~7dfSjU@8N*i zz@ViAaQ%uIQ)}ES7gArX>F&2d%7GeD`D)0tT-c~A*?sr2-#8yU={DzNF2tNN38^YT z{j=AXK3kXzvP*WHKl&2W3r^v+>*m4UGc6-jBT#-jrtjK?d7yYnyE%Fq{77FLm=AX2bsq0G z!ud$*+R-iX`7o+R(l4q5^*cTG{uPM=_tpu*+l2VeRC!)=bK2}h&72@2DP*C981)8mjSrsoH(iv}0MZ>M1q`Yu@B0L#FK z0fn$<;;H%*Vc5SnmwOF}FNDKI9rqhlaD3V9aG<*t!T44CCA%d_I#6Q_A~w1ffl=a? z>48IW{>xG7IVY?LN^S`5sQb`7YTtNW@4O=D=k3zXHWu60Lt)tgosV#A`dzKl8*o0D zTC%Nl(MOm#&%7aH5!wSrQQhX;{s==V&V9Q59p|&Mr#pUs{Rk0Xr_5eiiS56l;c5!6 z7_7{@yS4@u@u>d3U~?T$ol2jc+~#>FmM!-#64X>Rkf+R|Id| zn~&q|n5ka)yb`#!?Ns%W7pU*F$sgORC9q-M5}{@<2^=4@e5FJs(4%--<^n~W|9rN{ zbo46)*;5aVKHNmP{hiDs{8E_gd@%N~X+H<*{O@LmMWrxeO7uMExi}wHq$W}OO2K8t z*ta8Rq5Ys`aH;T4DV#BN!ta34aG*@5)=sG|g@)$)n-V{NM*DUG9bs7ppN~9t&(Oy8 zQFUS2q)lZI`!sh!juqBt@$d7?UzWkr$q#l(n5sEYSMK|_Dwo3no$jxjr=q_3%_;pd zuN-vJj9x@6RdS#L2j5?KqZ|_3w4aRHj^#T&;PvG1pT;#>jJDtd7m z#@Y_lKtwWnnz%#yXQ`&@6LJFWR>0i4cPyswlDqks$g25VehKywH&A(4i?W>SHVE9 z(Dzb>*#1A{l7!EyVB4$g{`y0)yzMJ5FX>Ya!5=m}eqMv&m)@R|ytEqDzpy=Z?!}UQet6 z>CY?O>iH;-{xIuP?^-Aij!CB_asH8&*wJ%EEd;#H2#5RF9{rCj*LYP6vqw)fH<^#+ zQF5N%PrnXE%uY^S;h>4_^UYFwa~;TLOfLR)P1k|?{qTWVejWI4ah1*5gy{#jEpi+B z2?n-rneEyOdHIwFXO4b?Z}V67U0{#nv73obFMHD%bIztT~)>S5>7)Qpc- zIR8n%S^e!{Jq+G;^HH9%jsvwRe(hR~2JrAO{-z#`?ftzQ(? zuayn3-bq{G=e74dYFO(Y!-jx_m>;U zm3H->AdTZI7d8*8Z-(E|JI_89iNNrX^X%b>FLFPqK5P;}_|Czp7Ko0+Ot)NZ6u}_9 zJAprOz zL5OzvfnJC<>q=V}R*2wWkL1};$}v49typ=)8Ln@YXO)RSP2<7BtED2y-*hMDbBPEx z%bji;fvDa*ZTPlg5fuM^vi8+S5p+9wd199JS#uteIBzFGXS11C%vljhQK8PT1 z_S+$nh=@3d|0sr?M7g@yfFUtRzW{4o$P4dpTbPnBG|R(^#1fz5q$srfU0~gg5%!1m$#;f zU_qbCH!_Gbt0MG!zY>An@a=y3FGa9eWy!69FGLV6qg6KKxd=>0uIxVInFv}!tOhtH zi$F!kdIUcS+qnbye4z*oTtn8xCyHR$&V4q~@tBV!|Jj*15nRre(hhzi0^4Cj`LiF1 zpz^fwK=TJ82s~+0^gRakpe%Sw++7hAjajvK-E9$kzG1!1_$HR8^~dmxC=obme7Upw zD(XWAlytu=g7teOUZ1%jf?L}rE;BkWf||%7NtYuq-L>&=v`&klr%&DP(32wYIRBuf z<(LTM`YS6;JA(ZBr_AezL{M^~Kff&${iV*kJMI&K^^HMFn|F&KqbR~ZW(S57JX&5H zA_5tS;c}9}sK2g7eBI3=NQ!k+9kM|Lp<1xTalHsmoEy7&pr?3uT+(%eP_if#v%?6So6==pwZ?jRAI8ZmU6wy6kQ3yvz! z?T`IC=v~WUeGz<$e$t=T7QrM%-OCjkA~2GBzPzKi2m~v=H>jwHz)UUbwU(j?A|Apl zo$exd+w#&#T?WS$WDk(-CW59n&E8GFo1ks@hWk&xH^K1U3d5(0nxOxYnyD$(P2h6( zQiW!56a0$hzjb}z1k3vBeV(4y1otH+EqTwHK-XGsSx0OWB(1u>^;~ols1J&rpmD7U z_%)vQR-SDF+Y1^8E*x!w^CtIW@9b@YqaI__P6jtYjWaK3c0dz&&E*T*mNkLtyfH6V zdo@9i3A-1(aBqS;;{sN-jBA2Xvyz|xgeIt`X4)3pG(o@W>E}+HHo5a8)4;)h_$}M8o~W@%{a*cjnLPT&R(a{2-ayk z-aYN!2q9LU?Rh^Nz{t$H_v;2+F9atG4}NTbNl)|SOy4!Y=_BPHCledM&uGlnf;$aR zP(N^(=v)JQUgu(yf3N|R(y|5}!*%B2m3>(TD;l6TFCusQyaw1@5?T9b0>&G5^wCrM z1{h}cqT#Sv10-yIKXf>*Q>l_yM#RWAz}Q{mFaG#e4{L3Es;E@f!{;}y=IxpFu+3=W z@ff-u8i&t4SbM1+4(2*;w%A$^(&grdZ_KENu=#V>&a$kB5mQ%PvX!d`{|i1FN0xko zG3_=cYaf0B*Q^b5a^e`A`LC3?injIbH=pf&Ib{PpX3Dl^I4I z(pAuX`?SH=pH@P`r42!wS5|`CxnX(>^(#Sn_J%dCnHBKp=f#_Qx0eESnlx3|g_5EHY_RBd-L__tm?v*E-?XqSvV6Mv=%ZXDR0opQVo1{oyQ zOxgYc>Ia7_Ci@hCo5zr!diWe8n>cN6Q&TP|tSWD;J^mg%LcHVd800`)ujzhThqAzJ zb^S7}tPGI*(<5_M+*?pyrPO?R&}%rQ;%AV%_Zcjhb${=-(~rO#fAK-Q7tUap?eWf{ z|Kh$Gto;4eEn?TwgC3a1UsY$`Q&6RSO&sI7z|HV;shWh$?W1&$t4n!L+EN&~P{ZHn zuY9(_*`uF&T%~2szqgP%mc_^;4`c=Wm8TzHzU#u~`}BhAcdnLi$!F7V9OU~~zCopZ z?UE6Rw0*0L-MoRtj9hQ8!hD`M|8*N)%<(<)f=*d-XSn^VGFJYv|Ng)7-xqIA`=jud z&efLh-!h?+l`oTB@>gyx`gLlSF9&*tNPl7A`83^Y2HHY5o~s`p+l zh(~?J{L5Z!`zzlaT7CNd+FNkxf}-i-GoKiFsb%YMl71;niU!w!`O3Kdet-5{f%$lc5A&=Blw_!s@9iT=aC=s!)y5B$scp~?7ze;I!?8Ncu^KQhzpm9RGjiUD}V4GvhxV5wGU1 z?a#__{Qs4A=|5JEGQ86ze$V@lSC{#tYy7VB zPuKjR%lyU2OFNYxy3BuU{7&`nI)5_q&g}-Yhn08IKj^Z4vGPv(3tiSfMqb)U|DntJ$;dm8pRVgKBkw%^x~|`B`klrv z_^tHCC|xh{IzVt6IWHqdIl{$wgk6{LP$@yQ-`Nz!c!!)f7NZm4V$A2xCR1WuL%0|f z2^Zt7dMC_}gyQ>(cA#dwf#F?tX# zMjgV%Sk2l|6eY%J!o|3ea51_NE=D!N#aLd!l}C*C2p8iv!o@h1a4{MYF2>e!Ea7h@Z1XX1$_f*D;fif}P*BV3Gg2^Zrq!o{dUxELGAIYKd} z5-!H8go|+p;bQb5T#QbHi&2koF;ay8#m@5sFD5GS5U5Vt8e{Uh7}t@YK4&(bhrF78 zCIx0jxDT0ZSg`mSBpGQ9j%vnzTfTCVWzW079~n1oSCo|lC0uYuee`|EaP!WVbaHT@ zyre^?iXMUUGRr9=W?+0_s-yq$IJo<~+k_1Z937}qvsJSF6QKy7g+|$1I#7a~&FAuj zQ0W@9!{7lA<9qeYK9vjwazz`ciI|>X<(mDIpTmPQ14mtMMIKqRK3d`>RHc;U@XZ%$2E9=+uocbmNfO}X8HA%=Dilx5S3{Kx4q>ZhSbx-N!~-c%=bB?Fv$F0DRh ziRBG{b4P1&ChT7(+mq5V$9;3r&k)lrIQ8rLmW_ASF}s z5537ZaiH2J81>zm3mTvIw+&u1z=4u0qWbdkK)8PT_d>lPSf0zUrw-qn3qG&;Tp%fE#FYWTSTbopO;>+Kze?NNC1*QpPn zd}+65M6EKuCso^g(zy@{@obRIGVG7OCg&mgc?1t7%rAr}ucXq_yhxlG&g2lOd`7)^K;b`jn0pDxnJjov7UIx#yqocIKQC}|i zh0f$&aVJRohZ+@udx59U0>7tRl*K4#n{}H_#U~4pFU?n zCEQL`$$4Lk?O|l&Q+ufr7Vh|d^!jA1zh6-AjM_>t9A=pzjKTUpKV$4~Rt2y3wk|Q~ zhWWQ?wKwQlsm_ZoeTZft9+f<%`OJ?*+-dR@-5 zuHwED3?~Hf9Kp;DoSh)R{bqKiAa;Vlnd3rP;*a}_jGTX%;EeyY6NFWqT_7NKf-sQd z!jS}fa>yrkg77kD7YJ8#D1iU86ZjvAU2vO2!4`tVPT=biPV5B13t|_XBIwVda3sM# z914h?AWY`$0>LR_AFSq3D7F*ueHK$+;SaL@XLBeN+X=flF7PJEBjLn$!dGtH=My`D zf17Y(CkTBxE*wq#jX0zv36^u~z95N1KJJ?_&>{e=owva40Y*Tx=)&N{D_D+s1@$bZVA@EYOAh&+Vg3W9Tpd@P5;p@bU}xiY~HGA0{27#i8a);&Q%{?*^xo)Jy)2pzmaQM3Ur!c%=?t=T1 zZh?GmYQm9_ama@V_J4|os(yoyom8KM;jjBNU%wB|vwK^JlyQEe+9oeq^a$?4^#fma zFnr#Sc#T*H{v+AA%?sC8zA!KLfzSrB|!I!=YncvKuG5(1P=lFE6oxXU$kNabg50lRc%7AXORODJe<9ZNwum3xh zOsI+*-AijHwr_JqV2@jwaA~Vl52cf64@75$T^W@H^K$BH1J0n_?da_pg<0U3ywC8P z4Zg>wjwQ}qoejlbE1WX>V0%S-I`5Fl0smh=$6q+(g6nbL3puBA;7VGzwYG1W_EIjN zWBwk-JMQVVaQg_X|2E$W`aR6v^2uRtfGhH~$F@$%h3CE_3sI_w{$6R+%o}Pvyhzm_5xH z`}>p?LAk~}=}Wf@v9?y?x|i|6{9 zH*CEQrO>p0a*fJ-wD$%~Kd??v3WeR@1=)w%V|%5$^+_s)D^r#0r>bLr2x5%oB+6iB zmh8UQm#}?n$9+uWmqAk2R*es-XrGT==deIf1|v6?%Bs8LdLMppg%e!{?w-2&9hu%AXhG<`!lNC|36$lPeU+yR=x@IrsJs=536x&RjN$qPbTIT2 zF6--va;bd=*YoM^`3KVV;$0Ic;S_p>Wj=jEdh810l+g)PSg`bnCwcT}Tj%rNzYa~H zB7fOl9hpZf^ld)>wLd?B;@_w_^(L1#qprQ5J#b_Kl`*aM+w@%e+M02p)GN%NpMAKa z4go1v!}z20y|(AjRvWBO z&x$CGr}zr{VwG}eGpX7Eyk)&HyiDcxv)QzVRMMzE!I=K4hi$zFWz$wiv`foZC?rtL zhvl^5vS{n84t}!7ZLxllx4*b%(UVU+{39P^hVjGv_yw7?weXr_o(tA5dUE#ArJ3~Q z9S3Y)PSMBwVTAn84Eo9_dFs}!ftdb>(3znb^o5e3$%9^v!uVf94YV`pkyWZGYnJk` zJyvhM;h9b+O?{!azPAImpM(6?UGHe&ua1_hD~DnI{r|Y#dP~de9eTQBA*LsAtPRgj zqlc#)seJoQI)N&kqdoW68`|!nlVaEo6Xe@}MjF4NA1~FdJ2htUsIhPdg`?f>ZIGkPw4Vq0{U6P7P)Sp=MUa1;x`RlXgpL4@G_Bx3=$Zh@+hqKizzz%CzrN*L(A0=`ney?zNj> z{|X{U9?f}7yWjX8-_|q<;~%}joAiiIb<~l}x?zR#Pg!GLKA;~@o~!(PR6Xj`#bX1V z?$doMd`GzU!}{=Nrw7Ex&?mQ_Q@ytZ%Ofaiiy9G4514+pPTvakO>pSz!4-dD{s(7d7BFtYcc(~E$MgAHQIXG-7ouWZBXuRU=e(oe(V3@sEZTon_$=# z*KHT*@zY8?75bsRQhH58`<18JkWw;pi|nD+gzF7Ek&-@!cx@c$6}P4E}N zp9I?p{vg;!@H@d)g5L;!CD=mn3&GC>n+f9iC#H0KJom&Ro_Augfgql9V)-Y6bp&e( z))1^Fi07Et@RbDd{1VH{36>GWb4#p0o>yYAnBYf(MFjDj5-a~e5YH#EoO^Fa@$q~T z%X10hxg?h75X5sy3>V`vqa`2;C~LU|%5$R|h<6v`1fK|Vo>piq{`3GxY21cfq0PLNNK zA}Ew5a)Nw<6hWaBkrU(-qzDQniJTyxAVpBvjmQb|2~q@w5=2grPmm%g6z>BN~b!q4ndE`Q`^N9eq_C06BzeanA^15Vu zWi;%%YvN7yM|+AAzL~guJmi|4i`Vr*`;D^f^E%uO%;atlYS@VOETy!t+vaJIIR5%{ zlM=L_(V(2_=>ZLDJ}37!qkTlJnjhyh3-;x-|M@!F7`aekxba*F{#vs8&7|Rsy!4&C zCzRYC?PEP}B=WZUgjO%mQhEG-v7syS()RO9d|k!QYo@fu_24sZg5||Ue-FoSw$;hLBKfbsW zinXlPL`pN|jXYSQwj6c{F70@C$sD=xvC3{gh_C#Swr397^Hj!$DL?$dF-B+e3_GTL zd)}W}z7mohRaSqzhxQ(oQ`NR&6>QX#@ZY4s44Rsxjh#qmjFPES|O&=**J$#s``7GfIpV*1;g-=F{7XnEaz- z*1cQ@Rf{qoOghMC!cR*H4uJWqV5Q9w=J`bKh5qpM(4;)0_Bt@-;mL-4Sq}qu8HSCS z#gu2PX7$ZLSS>qBu=g1gf6pJcML}Sx(!;p$2->IA%m+z28{kE^htKV(-pJK>cKI7X zUwyzPhqq&q>z#OTcq7Cu95hBZ$q9K*^04unAnWXxPow3T^p7PcN^OR~#36gEY8d@` zaC}1IW}w^VE6p@#`ahgk8n^{4wZhKn?_}CP^6>_%t+3hP`Q4vW7=1F5)u`VJaV^XD zE|z7=w_{-9zGUd z1kOtL=syzo6RBSh4qAjjknX^>w#iKU+8M6g9|B2>vPEYXGrW28)Y=djFTJ+-$zFy} zPqrJq4I&(r)MDG2{lKsm{fpaR-#1galOL{GNE@*f_euiu&SJo-}6dk3_CQEz)ci)p{Mq{1~jKy5W$V`IWRKUi$d zP2T|*>UA8#rlI{$?J>z2v=eOO+M;Gg8X~tz%-OpWMx_=lZ%Ah3K2G`7JK_14TcfpC zG40{>pm@|SFu7?Rq_G_LQ>kuhwUN6Z?a2)HGn$P4bhQ`K4yWE;Pmh26a!%w0w4bPm zG3is*(~FGu`?dFD?2XccS>FQaj1A{<4*eR7Jk&SmQ~

^vSDB{aukC%gk{IpcC(b zq>RgWW$Wl^CRbL=>+3P$XJzhON2^S*+Z?IF#9tWr)^r_xSvtt zb}bzuaous>cE%nGU!1ghE$zGY`zza>1CZz2#`a!Ihn^TFeJNlx@&Tvs#;&0Q)?4V5 zjUI%2-GR&V*3i`x_CH%6G8uWia=64A`clg2ydJAGk=GjUyRw=dMeQ^g`je^8*R+kU ztLc?B*&l1VZu zjrsRh(rVj!x+dPyNA9Iy)xLt3QoHCJGm0snoPmVX3VLsVM)&#p49}SHZm&Q6@kgS$ z`CGJysqj1DnSS(+Ne}A3tYYjvH)AgiKl;dbfpYRGwC}0fL?iFz^!59Du1$(oMs62W z9kq)77Qm-hF~u`<5N*!$Ebn;DDgKW87gs{Ur|*}m%K z=N8dhVkcjYiyDdCE<3b(A>HCRH$HURMC5LFZ7dejeV*Nq(j3P07yo8KzykVIvDA0# zIz}JbUT#Y8p(`FvPo9y0_B7?yt)H|HU21V`P0N-($Y;)bJi(iOJ8a^Mb8GNN1~x|MkI%{ll63qh zL2IQ>{vCO7Fq5A4vJ39?nFp??{C+d(g^gTlIh_ufvAV~N0H!>V7k%idbWNYl{hJ_yEc6prSQ@5~`JibKIj!uf#e!P-sv12*T|+ z6xeb|4I|u!@F9d-amcsiP-sE8IpG626qs>HnG$Y7xG{%9BM$k7gzFQoN4O4$0&NZ{ zEy6Vk*Wgg7&LO`K;cA4d60XdlK#4=D7vTzo_vBF6okPAn;j)Cwa7amWD3Bz)8{rh; z9co;E{N|AVi|}^Be{e{(aVTgd{2Spd9P+<#C~PKNM0g|N4IEPS917|PuO+;iLw*&9 z!V1F62`}YPP{JWqOn4FDg@hMy$j|3cm`nJ3!m~LPWN}Dk5}r=@I}U|u9P-}~{+jR< z!e4SIc)=m{obY7AlQ%Ow+bz$00?Kzn0^IHAKFe$O-aS5&xCMpCEq)#|8dG?nmSV`OArX z8Sy8`UrPL!a47U8a)SKDM81f~7ZN!^!2;s%L;MNyy*V!MB63e6C&-^qLH=Cg zKZir%Y$7MfpGD*|iF^i;6BKw5e|O?fkUyQ{f@wrPmBdsKj2F&vg6)8cbI9e1v@|#i3 zJRdPU({Wkh{_8%n%<~NM{g!!-r(Vr>ouJ7)uTara)JMllZwD;hVaz=LP)j5QWsbhp zAJ4m)u<=((QI(D#s?AI@e>yYrd}*r2QS!I(J*^+i^C}f2OMP;*uz!9w^d$5AM~#)I z8Xc!>sCyc4hk4$on!5``j?xheF2shIGdxs=|JiZsj*k~Ek6@mEs3)?*FOKp*dnhMv zn#gcUp8wTxm(rutZ+B(tU9*RH4>zKSO!g%{{Ha|5L;V;KhDZyKdOU&~tJ~8wE zI7)l@9bNN)Z9lm_!VX9MgQ8l$waoqmrPec&f}3e}N$Kh`4FA)UF9G|M^m3K`+4>tR zQr+Od6Zdu7rWi5unZ1PFz-_71!A?!+4woVy=0)?|5tgQJR9CkT~8KNMwUwW727xlb)z~1ra-|vrN`+JRnUQeiYUUkoFwJH;Sf>CKt`1NJ$ z>()HBy=;sl72ux2(=zF5Hhhi=UlG#lbJTa7W%Vb=lbU!V%B!)KToO0xQBV345-7na3#-!_-! zs|+pGV6&_3Y{OQzzn&R|sloi%e%0R265gLQeotYgIB48ujzm}n`h$rI~;#j8R~G$(bwZgn>NGqtS$S3>f~al zw{2{EGaEr)@NqjVHL`6xQ{NXuOZ!5I;_XG(cHsMU{Anm#z6NZbvuWE_Gqybyhev9_ zpDP;G1+i>@t{c&;0b}OnmjB+%_MZvQO%u{K`9BTNXWP5XAzBjz-Pg}e7qaPH0HuC# zr7pYr!wM-j{gJEs!LLoWclF=1<*9ZO_JiO3ZdRZF){~JxcGlB^hYkU0dT-hBdB{be z1!+r-uYWOT_O~d%v87s&_ibh3?@+csJ6tWb!F9Tk?V~9yuNxnx4H;)Yyq&v~*U@+Kikuo}o39UpZd}!gKg^Er06RGYi2km>!O#%DM}!hw9ByX-Uv+~rHpDRdeS+)} zOANqgl!Vk#rYZ%z;zfc3uIqQEW8d?0XkY&L*yY5V~{hq3WP zK+h1qnnau|i(>N&<&QN4n<0I6&sfB3|iXJC4f}J*tB6}pW!aY@q_O?sX^5)1Ss^q32)eli^@r^n5_Mg^STNjtN@RbSJG|#}``&|)Qzxfp z^atzY;j@1&Wc5dCI%N!7XN}*it02pSU+ZpZ3^SfTO{g2d);G#yrZKckO>Wrh%9dAW z<{p%53wz0{vif^+))Qlp+~J#IqQaDqQk_$43<_$_Ukv86`mdDLOPy{yZEbov)hGew z@3Knz(6&WBJN;vs{W@x5Hr{A-gi>ZayT8*~5Vbw8mhZDnt3lFK$R?h?aIK5G0xM`868hzmDogTA(w#6gQ zEE=pvw;VlqX^`#+MjrIBLzT|7c)xvqvN^-Gi_=xrTMMv*!+yDCo9v+s*h!!?fAm9$GvJ@W%^lSW69DqHa@>bq(qOuVb`?T-kM22 zt%g>j`AGwQOO0gP)1&r~5`Fw??l4VtRv%(&S1QqOWj@`CoX+;w@H$YUjRUINV`40r z_;g(_C0cT;%dfQ~*zmh@=w5WHqI{$DwQ-C*^u1><`e5+{g}1J3`-bIqDAEoI{Oy)~ zSp5sjJFiGzHQHtId(2O!yrKD^NN?FSWNPXmc7JnML5TvbzuCe@E&T^0H~Vm2fi8Wt zW6QQZtX!uM6zDMq%lx}L;`s%9VNg`klip=kl62?DWQPAL3hqf;D(GDtah~P1A9Z`u z=g-`>9>13jpHWQrpr?2}&&ro(%m1Lnvj^S#nqE$i+0IP-6Qv#9>0Z}Mhe;e`_1CP7 z?oL15b@$8FXctBiu3X`zwNQ-@0VdMlmJi5(5Kmt20%8lw`8;k2HWZJwo&F z)H_$$`GntCB1IP+Ja5!Xn%U2$8XAM8XvOhIK6cAAVffr8{PvHKj2oMd`>^%zCMuDn zBfl7pzP+B+pR1x^N!qn8(C+Y5HoQx-t|UFC&2!nkL8eUn@@BdleP`gZ2B!~f`)~g2 z*^TbuwOqO~gw=1AFC7wef0H%WdOES?z53<61T7yw{aCCfTYs4rPYGICHUI zXz8Hn3PYWxbebWPzTVgK6m7q+cz*t4c6>#B1&SUvz-!!(W30Z;{X};pJ{s$kpwoLO z6W*)7<4>YjaebVH6+6GpZGb@Mt@7(SQWh>J!%qDo@1>YUlTX&`jKhAn|a?t z@xH^?#4)=J1)$89uk?FxOXAfn=79xuEElxVUlMx;#_UL1#`a&|A03|)r&I=Y$m*yw z@uPmg=fu{8J!VSXnfC*fO?z;2VpL__e);x63}5vvSd_T6DA9eE9@}1hTZ5YtbDm|s zIsKTekJ9&!hQw_<&vdMM!s>V1_u%?O|BrS`KdspGGTJ)o5=}1dyISqfmOt`GaBbqL z>i@;w`^U#MZEwKSD+q$ArbGp48w63&2H}pJp+OJ?QK`li8Wofql@bKe20;*-TdAfM zqy%*ZK`=5w5d^unK@b`Q;f6bHQ_?oo_j%^*HQ96Q)BC>vy?=c7=W}MyUi(?kde++e z{FrH)^w)>J2=9mDOuWw14Z~4Bh^Wm#kb^W|Q<9BS{`d!;I*Zy?E zoJ+#zL)ysJZ`%&o`}t*4-wo&2F>=c{Z6B@J>%^y*hwpCb%qal5Sv-!B?A zZ|!aSVDs1$k1OAqd=(>GKX04AX58sj6+3e5-?H`7wk7{OrvI__@cs{N*}A%I%txDE zJLZj}!uUV7cC}rxmv84E%EIe`zX|a{+q#9*ug*I=d_Ai8W9z$ZuMK~D+c!nwdf*pP zztQ&i9w+y-UmDKOzjf=&Z5I}I?RvoWVLcUFw?5Gpx7)qvobzJ%`T_}~ZO_&hF7Cc% zmG$d+MT;MQ>-x;uEq5Psa_)=49gn~4r0G*W4cbWi=Mwn-$Z4COJZ{gB_40?U4;_5b zQr|@t*JVDG8nP~kopsK_nyUl1-E!5y_~{|*s`swjJMpoaKGS(_wB`j&LifwzkbMC>)jP| zUxm@ey})ueE$dk9w{ev)s4u=OdGHe_3nY{ql`}satb@;M3}htNyyf zI;*zw)LZAjdyj8%?@jlgvi~~kmld_OH$S<+mvQm@t8U0xXU*IG-Is1|UgEPJfBwvm z&RS4NU1vQuA>-5DosSRfvR(hsxQFn0Zv?#Df<3);|2eg>TPTZ>5}cM!~NIcLzRr^4O!FxOzRFr%wp}eC*=D zoSyBk{AcxgD-g59ch5hT2Y!F}`}8lLSZ{s1;i6BE>YpF@zG>WBhrPAldh6f|jvn5+ zJTNJJkDSN9UT?j&JT!KvFYfXsR;-LUanpKh{l*y^CwDy7OHBZjQH>o5H7t9Ne=9CqhLg|TN0Ssz#YH|B<=*}n5U`~GtLauH}-#BD_cizl@@AN`#;Dk9JKl;U<8?0X! zy?)tk*WMRcaOScZho*0^R{EaXx9x_C!0r!R@P6Z28?1-E|K-2+#rFihIOxTrPX0UQ z7wtPH^|d9wE$=?qy~jNptRMG%Xx2CXSl~N2FZ-(_Cwb1 z)?YulWbWrpHG%goJz>UwF8tkEedQ77%}lNdSQmVK=4BPXTd8~gW#`s8b-p{s{O6kZ zM}D^sUlQ}{b>k}oQ{PA%^UE8*Tc4c1=f86Hc-VLG86O|D{@dTJo39`L>R&D>@$E4o zGw-07Ve60wue|v7@&^LrKFV2g=K;gkXH&;_@0+tM@XWiDPnvM@u(kQa;~%U1v?}n+ z16fNyFCMmD{jGcH@H-C&mdv^9^LOtWwvK(VeEplXOMG889CE_Gg8H1%(vlmw2tZv2vet{t}KKKR|E<2rBiy|eZHU1r5^v?d>rKjr#Q zmj%9m`@`m=kKSm#cJqt3zI)-Nf!)vU_#o^2jn*-t6^qMHyEc$}#@7!oxM`!+b=yAW zvl5mCUfuEilC=#Rt*JkJbpPwu+#je3J+|QfRU56gbyqi^R9^1GXYRdc4{Wrq%K4$} z{p2#=CEs6gsNS0j(iZzJI3V-+?atj~eRKRh zUtV?ivOxX|Y2%h(zsY)M_S^5@{J~ORaLe`QUa@?Wb;Oq6cYAMBjqir_tAkg(waMz5 z`{VoR58M}cX7%|?9v;|a-P(CU`iGA^=$rG>JqPc&+h!}dzanSD*GmJN$Di5y=(Nq& zj-OSg{jK8Sz_ByGzh~ae&DM8UzWUmltLpr>2TtALk+kL& zo2@Aa=k2z7WO?AO1XU=S^9A=?KoR?5(F)J>Yxs#~o^~ zyl=$HDyYZ~ti0NHSB@WA?JZ9gUlN6Y{rMI~+ahv%mbZz*o2M zy*$HS3KU{Ht;NV9##GiEFAJ*dd8*V-5r3VAQS$F?9CHD{OzRo8r?p(gm zw=n13&1c>4hxN@paqmz1O9 zec+(;FZy+#O@CO;FE!pi^zJg>gRfq3^q~iAwWi;@YjDLQi+uhQubOpj?pEurM|uwX zX7v(Zd|Ul9TW;KH?R4Z0U3 z{e6;8{)FqhY5Z=-U3sNt{~ePz{xtvH{6kMX>WlNN#8)5L=ha7^{?oi2bM*PesbT4b z)6ZCF{UhRc(!E#telA@a8IPSm>xc3hQp+bJX0zIVu{ z)~m6vU3Xjgd~4$TK87T)rvl{RbpvG;#hWF^g>leyCm zk6GV+@zbtr#>}>Mcz@sh|Jn4c_2^-G)sRcCB}Q@&61etyBCrfw=d?)>j|%dFuQsh@s+-TSx?U--f$k3MK^%AY#@ ztdD!Foj$+s#qX-_vwlvzZcN^DZ(8>rK4blP_f=VwpGaxn{pfeC(8iaOa)v6bpNgkX zd}_^0*6f5kQ(kJh-U_{T*k1R3@RF5(#JPPN=D%mf4_Gr-ZAO z%{(W5(cAaF7O{67_0t6z$Yw;a^cn|sW2)@#i-^!#nwC)SFAoj+Re!qe7)N5o%$ z{HtGC-6@A&xc2N7)|C_1&3t-%m-UaE-kenVQ-k%?I}d*|_q;AE_u$m~>TpL%UH3x! z#kFr+t&Iy45?`vd{I@T(T6cTP>YZJ1WbEaut>cz_wD0L9SMu{TTF9FH^nyblxcB9V z4%?2Ot}9tTW5!5l#D3N>GoCtN%zKgX1?9UPH*Nd3ttm@?S^7C1_{&%Qcwz3kH>~du zcw_PBzu@BA{!9J7lrOAHik<(U&_ zY{c)Ad-{cOU5{0NX2oyZCHTPFek<+Ab51YB|9AJ)+-*%;(r?8c-umq!Q@gDrn~s|K z4gMd}(!_V3+x)`6t?h3=`M=9A`NkSdkKOy_3Ex;hAMnzLr_H!GQs3|Pn%BHGJN)~| zL~6M2Iwkec`mfhT^wkBR)cr99iQK@-fFD* zY{(mj=hl1AXqb>UWUcPJJOj_{)>m^5nKbdmA?xPro}9E->^keJQyb2{Z?6s35uT^M zI(p(dtGxT5!Qg6BYk8%D@dH4R2e$5u^o{M(9H13f-{rM%YoW4h&$NyEmo0{H-TW`|iN+ zyMv-j`Z+TfUovy?#E3ro`g>qxJo)Gk7oM;%RmOh%`a9Kc|DB)h{m1NmV*295qy6|> zoM=1y?d$Jxe*5}6*1vyJ#uFdCc7lJ0Sq}b8Av$9md{yK-cU?lQY&`=V(dW>;=@+Py3VuqI_HzNm9HE<^y_IA!51IB|J_ADwP!xR??d;$Sy5u`HtX_f zk7hsBmcQ`8ou@aR8|*Lpe9itZ)n?}3aP4P1Buqz~pAQ*$?Y-bdKTp2yvdQ7^i^Gz) zF1~Kf2|s-LC%qr-xb>B?#K{r83$8wEMPF$5h~7ZXF4y0G(Qj?n~p4c zZgBNCnNyo49P;zk_11rv{CmrUuik5W_SJi=+0(8M{`}6vX`ha7$-Fw|hqhN2USU1> zcth>je=ci#;nIT48@tX7W@g^^(EQhL&uo0Tt?{}2jp@)=SbL#fLwB2!HW&XHB>hW{3 z#pfRQ*k_rauATPl5bgt2b-hi;+!<_ZeX;wglYXBUeB{4>xqrcZO_?7b9QYz-!KGH~ zvv)o)W2mO>mzMoYA6tJ?aQ2*Ao(#5JpJ{Eq^Zk-9kFxONpiSd`Z4Z8P+M~xke0TW! z&9L6f=6*PK%a}jweeksL6UJOIHljD}+7k{7o;)U^w<9UzmF}W%+Y(-z`&#wWwZR8Y zzo+W%8C{v>yI)hd^tn1~?B?hCb2mQUR{HSAlRlhyMey;Eb?Wj{9?tw|;h|eTd#cEK z_L>`KmuD|*n=o_I_YbsN!N5TNBmX@1s?1G?4}5?4vZ>H})Tg(c{7NwJ?>FDv__uNV z{wUlgKeuJwoEPPJYIOe=eK29wJz3jF^#1+0<}d$!!)E?n-Ecc>@d?XU{PUBx{|;Y& zK;7iKgP-qrSIY769hq<6vv>2c4?Sp|^X;0$SC_A7`}?#x=RH+^QShy-oeDoa;~$yB zPxUpP^v=ar{qy%-@z{5zZ9B!}^q#$OTJVzZwk{nUGdnYD`R%Q9-aZ_EFSGBPi#wZx zx71uQCQv^%qIXlzD?hw&%b)c=KIz#DK0A1*P4u0(BCx|vkNzIf`_LO>=Vd0YYRmlO zs(%c9cSCUAZu5WLr{=B94b!{tANTuWYwmt?j@s#}MQyh(`g`ucB>Y@&_mv;ui=51@ z&)3a)xA`LL(6v{bch~tBxAp$i@cpt=CI`Q&+-_`Y;;hV`~Fq&s~UpU zpWO7}?z#N;O1o|Dc=Wcu3;(QF=B01j?e|0PyZpC^Ua?Dm%Yj*+ZlCgIrv3N$7Dx7t z%wK$e->T=YyeIS0@nZs)&$#GM^9BF7e*ZJRI4^UT|E4dx?)5|eG%q~%_5II!RedA+ zTT9{wH&fNua;a~os;}izUrW_DvLD>)tM+dsPnZ3hsrIksvVSwx{HM6 zmdpON)c%d^2e%GF4x~ob^WzmuD_Y;`fIsde=T+Wjp%i|{;K<1M6b*JEmPg!ESLLRrn8DB>iI09*X8-lQqO0W%kx>LdOovUp3gGX^O@!Hd}gWVv)AQ%=JtH1o`2f~=kok3 z^X)FrzwPSzx83FWw_QE|w!1w41|`1g{f=>Ds6Jn`i^1jdMZ5ZZ5p?-{(XKvU1YJH~ zw5!h-?Jl1$g6i{y`n>7>`9ghui{$6>`7NkEzXe@BzXjFjx1h`Cx1jp`7IgXi7F3_# zBA++iKEJ8Y#}U0QpO1s;^KsDS^KnppJ`TEkJ`SqS$3d6R$3gY^Sk*UVxqUuX-#idUCecir)P~Y!F^tyb%6I9>t1YN%0 z399dRf-c|h1l9LDL6`4$g6jL7NPXSD-%;P6MfAFSe->2Vp9NjMKMShw&w?)Bp9R(T zXF-?m&w}dvvq*j2zCTmnPe$~*d_Ngf-%kczzMl-L?)7buJO01FKQ32x_W$?y$N%r|kL&wE-pk*8mOixAo*DhS6Js`P8*5j)Ltxo|QLG^sFqN7?vt?yM;%iF9oA-|3ANr z@0#dsxOt)%p*&griSkFqZ60pqlF8m!9CjADy?+(!-Y>vs5ZPHNPxIA~*|&X$LgymdHCdG#XhT=-<54?EyR zUyC^S1zhSrggL+0>=)8>P(u;MjAe?!_+n?@1kTzewoUdxB5YlVmxsfdONMf$PHIZT zq4R~Wy^2rl72wO#aNHXi+L$=u6Cd`h6Kg_^%!^I07j?HHpHB3qdY8k$MAJf!n59Wx z>IsuM_^8puMZaS3kk52olo(P!y{0`XkZ56TO}Vh%9!;z0a{zDiCG@In+1-4Y#ljw}*^ryy3V0v&k*M+%f!A>7j zEvbVV$;+m%H+3_N(NYfEaxa-*(_ql}+}e;5f%xu<4qJ zPe%^=b*xEoR6FdfhiOl8{cL9Yz7U78PjM8eoTp`&?^q6{1uX9rIgh2r5`%S)Rr^pdvfjkh0l;;1`f)A+x*8q2sa4m- zb1P5j?7(|+@jP>$Q`}SG{eyWn)~w!)eX95j*)q z8W-!}g|EzWJfdBXI4(e)`c6GQcLb-?%NWVz1XV7Bv%)>s#H$;UM|vb z5`&!d=eZ;{JzwYf#k#NtT+8j1gO2BQM0nWCI&oi#UB`2;(Js02Jkieyu17V`2e z|Krh^Sd0raKO2efJ+Oy*9d?s{F8pcddBCRYVXS-=k9;;F8sm&n1Fm{4F4s2)W3S@j zyorZC`gaS&@S2j#H~0+M0{))e4?BBP9-Jdy)>QDcu~B0UF#0`+ zcH$YI_aKf_)jD(_PR0|X>%h5T*vgwmZPYc4aX{IUCYbZ?(R@f>>KJDuPBVN>c@=3` zYN&>W0obUIIkD;MNzJ7$I_6?7{>f4OakjgMu^ET?DN__DbFPN3zP|;>Ui@_%YoX^& zt*PMY0gsMjJ>sA#*I_5d&w4xT%#C?)PI&bEbv(JN5mRs+55YHp!}+}KRXEmH@H#JR zE_U{^KfH-%eB9IcEUeX9e2M2=`#xsB?5CpR5Jy`H58TsCpHrBZ2lH8mcmt?cr-QQ= zoDHxgLWk&L&;7hoamaa;3%#+xl1H$5U36~hD1?76@Fu^FXrj*^c|5$| zHdtFw4Zsd?4LHb)UImZ zN#2oXlDsv*ht~*%I#(9vBnESAcdQ5fbPPFKfk{+x{40?sj&1FWRKzHR4vC}3@6h6N zeh}-^q#AA*Ey(7?94k|3dveEoh&PE3WHu2YXg-wut7V8$eWnr2@a zW*M!^Ts5}}G1XM0>x2KG=F40XnxPMNQ*DSH!J%s>S(RcGzQz_iRz{LJuecYYwKPw} z_gtEdxyC3CQghs?&2wM2t9iMe#vzvXIh!|;PG~;x)*>H!WWOd%!gc9++<#rPwY-Su zE%2nH4*@6Np9lx*G8c0)X0OMQ3tR7G{JRNoRfs28eQm3iR+-CBp5)Eba;Ci%8Y?s# z>(B>H;=_IjISzp<4gSV!qvlV19dwmCY7z_IGA$?aG-_kUZPx0~vCqLF`C`gb!WT4Z z8bN&4$D~bP8*&yov~vG&uk@){T`sjOcGP4TewFZH9~Ocaz4n~Tmc8GYGBi` zvZrY0d=vC=txWki*N=LsZ2&%h+D|Gjd8HKqpMo0XV~xb7Yst`jsHG6RS*kWw+IsPG z5u5CdRjNLT1|5uP%7r>|6=%1`Z8PJXho8QOc~0hlU*_4%Ia%(o6Wa}2t+sBJ%F%fq zFwX%EM;Omto~OmwSIRAF&EkR2!SSb>1DvcJq}Jlko_zEb8+DGT`if2Vw2awvy|^~4 zx9Pgc^ONVD_~>iObJ292Vcv0A175F8e!Pa6@*|eM)mk20-w^7>^PKZ+x(1&6+0d_F z*Lh90k@^*A_| zM&4S@#&HM639r~VuS-rt4xdJ7Td8U!-0WEs<}Wt#`!sDF&&7Pd^5xnHRi;H49+Pg-D1~uqqOQCY>__nNy|ki( zaV-wwy7W5!{pYplIp$H~ur&bR8yLk=OSKv|DAHcUX;yym$`(LAfwoaU*0BZSA@HeE zN3CEPrXo4$8K$h`r1>h&Z>o^7dxaf_kVq$ysD&3jfm zu!FEUIg<`?@z?Ta-Lh4V)WBAOx+O!OJ+eQ~rhz{hev)@BeB?cG0*;0D49u}N?GMfk zfXBJUfC$2Ia}%zeT4Y&s|R3fI@9 z+qu`0wKX7*>^1IVOuC$SsXxy#lMd&3$NEYwW&b(P zPsZ&;-MBAIoZKt1IP`U6KEmhBiyUdFH8Ij;&of_Bp87e<`MIdSa}RM%d!Vx$+_E>T zxc(T+e&QZ8<-mQH3r^Fun(?ZzF6G!yCT+P`+hiOj-|(JOYwuIZl7~KO8178Agj8H7 z9k`xDaelSqdp{hyKjVzRR;uic+I+G~*u<9tzCmEw3!i>YaE>uebJQVrhG^Eba@>J2 zW14ElyqZu4@z-N!YrLE%jFq=(?cHmhp`->5z`L8d>s1PWw~fhd1EwR z);j~^I2^h!d8Ls@eB@jZTZO}~#3g34iYfm-L!8(chdN3WM&b%4@y$`aGS>kAIN0;G zIa!1u%#~_()+Yq+q{GbXl;Oa316v83UJu5T*!mh%gV>ovHpYx^+AF#y`cRJ^n>Nv& zF~uCu^A^6FbjhO#bL3!S&ZQWats1q3C-Bk*?goX;S4Oe*D?7)g9K?@qjFAlf4poC} z`06!N)ZuOzn)5U*tW`Pi9V(t+$?1iSc(LjACP$4+ZQ?b4`Vyzx$n6JrzqV!)BY=3V z4lS&+v!=}sOn9AOqrY(JdUeilz23IhBSnF84~ItBhM_&GcCefHY8^R>KYP=9kz06J z^H%tGI5@)d@YlJCtx&!~P!5bAHuk1ioGZc+m4^gJFaDazGYqbjck%r!4%(a2%z0OK zjOIbyFmMgZhhx^Z+%YcId^q0wgbx0SPU+HRAoRyCKN&Z5u793|_oS|tTFYQ&Z_u~5G8djg z@C>-j^&ozgs&kj2-pxl%@}|K*#>Ic7=EKkBmB0=v8}l~h#af7+eH!$aX*|p^4wwM6 z={Ww3K$gQ+0DVo!Jyq3&W9nejYe`JI%X;M^R;=P>zP5L?KWiX%>ML>RjaBi9;e4ZG z-mA?M!?ohNbl`CQ{6e7vOFZ`o_XFQcvd#LeayPi^ymB(P;DjWUTGT>VR4!)Or9{I$V zc53m%FTN{!Jvk@XLTKigP1oEEpL)e#tNg2!2I{vxqJ5Z?*cm(hU(sV9#tFdmg2%ZR zy~t5~bsdAi7aR0bH#Le6`&QVJ5u@E<=XvUfjq`%nW6($JJon=qwH|<9rGv8&dedOz z+L+D>u2+vsPVtCGPKl{&(c`d&?Jo5aU-q&;xF^J}bILy9962k%N&O})a}qnTt-#i~ z@P;%jeTdU-^e=JLk~Lxe#Iq5T?-+L=X0r0@!uv2#d*NQ;z8F@Rw0}oq$XTdy(zOSB zHpYRg_$%(`z!hW8bpLL5;EB_1;ralRqj2OCnR@*hL+teF)5f&dg0~DDRf;FYg{K&P z%tN^J7|g8!^ZN6S;21Ln^Nb@l-IuY&&YtlZYrvtC`@C3T%awz(CNvMiKYlgt&*)9( z2IrK!hv(*i8mB2^q7T>JZhQ}ip4!=Ty_~bH_RlO9!M_#9Ftj=UUq=S)`p-G%DZ+ek z=V7kNrPis4L5%4hPd|yzUbsy0IbVdBK&YvnXK}ZpOu%oiZAzUx$^74 zd&Y2Lcs=U^kNk{2hT+EVy!<%iXY|8HytE+ahEI@R{Alet$9qvO4*uVTWXxCc0B;Kp zsjnY4XZ`7$ukx<~cc~*MiN`rpt%)bbw2#6%!S7RRs`K;T_Q)qTor9W~Kl2d|+K3-e z`lOzskMq*{peO57dk=KONI$W~9%s&@Sm9SG62S{6d-@Vrjl)z&Vi+q;aSf}n_;H?% zYu=QrfXxqw$*;s{ly;6OUs+~mEcSHeAJgUA3`qOE^&%5M?cZ7 z`^#RYui%Jf6I&c&nf9ifFTz)fI3_ITP5V#Jf%WNBI#-3GkH$~WG}mvXRs*_>AWp^? z(YcC^y-9=M>CZa$J2)AeacT@T$Z@fgD@k38#Gf{~vFSFcq39%zjrHhqXqgKwWyp`c zDHqO#ot1yR8h0t9_!q!#TF*Y^C%CjP@g0E+R&>`wOA>JGO`168#z9%kGY*&l{P~_u zKSy#fXIt&{S*7JjyTlg^dvb}N?0Fr>=K;pjaap`jIcywrPjo@U01ngM?sw7Mu5_0u zUgE??UN+rUp)`rjYnh+hs=gkr2RX`)$Fsy&xHhhdwlhC3Y^9hZF69JseM5?m&ntqX zZLT8@r#lrFaU56mM#rr4<8wE)xM=Ti;4^^tIXIKGJQ!m@>F8xpv_9nP(J-|2fTsaG z`N)xDHhmBEXmMGWCe5EQN-$4e)Ba_w5#`TXlbcQFXZ@MG$)EMGJ?xsbYg%aMy2u(x zj#5YQW6#_qk5Y(c9^%{MQtvoz4a2q6@+K$um~%g+A;&UkY=&;hmLC4s+Xfq4~_opK(|&K;pN`pKH=UFn_g?#FH$Sf%ROMib6*f+S{vpW!o2DC z%m^22%R1HoYdZh^unRUutxFHqs<03F;*dG%WlqNIW2fV@j{{rJeF0my!_IZg)@-bI z6UO9at=aT?Q3tu~ndmw4m*6nvMf{L*63x_U;?cEJUko?}M@`;upaF;To>S<;m;Noj z8_zQ5Qve>}X6~`TaxB;RK5_z+tls~fquj`sCA?UJs#(DTMd(S*yO$_vHajP zN89R$mU<0CtJv6^@)3LjIJgdiw;65QN^s7_;anSHx)g9O z_`9{(3t@N&G5-&BEc#*nC2c@xAO{Cnx8`*01tqp0u;+b!F~zp~)1x>IcWZ0gko? z^fps8SL65ijt6t5{nMwoL^ERw{|Lw!KMS@FaFDxNtzpth_%{Ph2hBa&m{{szY`$k> zP16*nUahIlBWocV7}u1)XbF?zg}H_E0Cx`JIroJJHn;CsghS6!Y7ya8AnMQ7a^z>z zgda!qBTVvPPduBxuB=&_Ruj%M#~8&kNCTSaG367WhHc~|b#&?{Z!UDD4@7IOfGrs| z&Y9{>dB_4azo}?DgMeav}cZ*Lf<9oHdSo><|t%uF+ za|it@)P8P;mR9A@dlLC{8?kI+V{ckt;UJd#BTLgnTf@nCuKC%{FO~*0v8BQ8`w9Q< zgx=dQ`iy6z?DHq2_~MnZ4?0reBN*!L!kBhbZFMYtlAxzT`PV6uLfB$8PL`-&jYYG> zrN45E+UMkS=3&aMQHvuy!YyO=qNxG#)YoQF@mN!0m_M6-&Pgs(Gjhlp5X(BXD;DjpEskP&nex3iZYcH5iaAzx9GC^$c3n*KHZSe?>oThvjhZxfuhWWwQ z@7O23jA5{=kl{U@sC1;m7_OD3O>oXUX&1eM3HO?>UyZcpLfIa^dEjDM#kh zj>8mtDcChVLu+f;I?SA#9v8_2>25amo0!eY5%ozPP9!C8|O@Q7Chn1y-WFXOng8a z(^dr@KWywxIdP6SsjuK^lX~j5RM^9Dl=dR{J8K#bo5@a2X-TKzb5aQRKOD|;fO96T z#EU<3_hFpp!Vz+*U#iAIF5<*iqsVnzy}>4XTyh{p_KaDpTSjf1Gu1;lh$n9jIFoQV>)8x{&a>(F%K>0p4S3=t#|ro+ud}t5asrKf^yQpM zm*Ax)ItTr^cEj*5+(!ILV5nJQ;cd9lRt`Tk40ld`8l8T$^+9j!`e@(y)9^Ea$d7ZT zTm&!Yf^g8!R8w*>mYh$5r!9pqXcE&N+4V@(bdfg!<4SNj&#e~NOm=c*;GnP0FKdtu zz0Fz-;>E_^l)K=Q6|dmw%f?vk;H<#m)LA|B=Y2>Y(bI&OO~BB`#y!!hjcL;{6&N#K z8T>|69wivF={DOEZIit$e8iKBO+O#VON^-&x>ovj16u;UZh3~u@#4?H?+M$0dp(YR z9H!4z#D?|!Hd+tbdZ48dK78MSgP1t*jUX=POgRXiK5T+-Q9QQQ{w}6S*;Z2p%r$IOpSQ%H+@`uR7gJq&fL9bz{CU6I{E;;Uu2`!ZHCJe3 zYH4y{sG|rx-3m8?z6nP>4*9=&^pi#{j7uKVGrS(3n#;fwd%C$ks~mB1fiu-53pmD4 z;tLvaVw2oOmyNJrbsR0!8v@t1@}pMjvKj2xKG<@Hac;Zl^I)!Dt%dk8k5t&}VaG2- ziK-|01gGy8#t=K#t_!}+z?$mZZr~MP_S8yUV&hu0Dvi0y=)^EiEqoF;;+#S+>#x5T zKIT`c_*0ZI`3(GfniiAhJlINMV{h8SoKx=MPUn!d6%NjsYQdOQ(5&+?R)(_iIgPCn z{zV#&IW%fxVp@Um!^WOtHhqma*MY z`*k4Bfa11i?N`yl5%Z#N53n4IUTR@n+6wrBCN?+y#K^Or9z!^(lbVQ=rrW56`IoxX zM|{|e7QUC5PA-18*zCxkb!5%xC#@c~)IXwaMXWb$>`iOJIr>X%;b3oC3*nbq2%a2s z`GO`f`Cf2htHD~B_6)JC8*}wSQz3Bw3(I^4)Y?j%Zs?BR8eIdiRe(1cbEf#jnCc^3 zQXlVGsEgw7M0_^kcjG2T^y&Vzv*|Y3JFC>XNKJ|`4&!W>sPlt*Dxk}xKixAiyuK1Y z2e>$8Q&b+Y`N7lcQXgXF^9*ANuRO~O2XPWhaGW#kC8rL-lSAr|2(8=FB=xCOYa+2* z5VO*er`T#?H|+sE?p$DqH|ZAM96F#0?*Q|yu`CR-VGo8%<6 zRp8rJO@ue;Z2aFt#Hz=!Exb=T2%baHS^!_#O?i=u04LG({1If1#IP&pxG@JOdH`RdLHqw5L;A196JwG%m zP*Wa$PDS%!u1&ylT8K)3@xaF3^o+o{<{eb+&o$pqL)&4VJgVvU)28jCH8-4t-`k}4 zr1qjg{8^s>;(CEKJu{VnGlMbF@>HLrIBAph@I#YVYb0Z$MCLHqo+o{!>IN@fUSyS5BShqCzaX*I* zc+vBgJuY)jf7Z6aQ486xCD0IySfYvhO?dPe`W~d7ZY@9Z4}w2=$LRe-9=VSeVITB5 zG>DD8sfJE`HE>0UQDcb1SkzUDxd0B1_0|dBm9Von#p0acnNJ?Zj3+j|7SuqyObWMP z*$=@tId-Bq9fy8SaZc7*Fto9S&jH|RH)$kap@T1Rh8f!k969CrjySQ=&gQf+elGml zT{z=*n&_>=oSescO;Rz}1z*!OAR9i3m=6cV3*$6vWAZg=W9B{xF8bkZxaqNUE>2Pt zR za81faJ9DqV*t-kv>(In{7ODAk*o<}+i+SpGqDJ8$H=EQ#;Jkr(#AcreT(ZNLHq-hLN1trIpoy=V%WsiXo$->QyeEpFK`2nSh|gIsAm|M zxZVDoAF-x5!byL&n3?!_CioW_I5;nBAUO6WUUCr6MqNI~xL=KhFBLpBu(3DsaV|`z zUIgC)yW3h4%Ka>RH&*%jU~}$A-6ooJU*+n_hrY7iCwkeNbaGCx%)4HVg;V?sV0Y@S za^V~Tw%LGZ9O0!eaeC}dZA`mhT3zB~dvPA)aO%=I(=jh&_T-`;--{OA7Rw2=xbyKl zwKQK|e`3etxfDkW>~j4e&UF0{U-=9?fVlk{AJ?K$8|yK3e)^fN!#Wpzg+FnYd7bN^ zn>cBC7vMQ#FWmDA%=hfty@5}N_Tm1>h>y0VU5MWe;J{G>ydoU)F&f#OJ%@)ruSjT;@73SB5;gp}7lsWX%{?p7qkOe%*VF=EPd}!%ws^=Mrbm zs9B-IHVB=oG#>hmK)24*fZS5|+_s)Za96ANqS1?5twOvq)Y^0o7dz@-0xfai$bcSG z?xIO@Pl8T29P81e)q}nR(36ckgonA7sK-R5-pD zU)g6_Sley+${wOG8_(Ao=V@Za_&ml~a6FHA&cqt_;UM;>^O@NXY=epw zGWh86WS@$SI+NAD5S#38UVr#KKbxLAuSvY7nCi>x%%HlCF_sC#^TcMg*B}pdt3dt4 zrpHP`zTJkL3ZQ}bkj5qTbMAfOGH||yl+U1AY`MO2T}(Q;k9hu>=Je|kYgnafNG$(r zQ-!)l;%&H&iNcuO35cD{G+NbHv7LBd>$J#+Yi#YjeJ1FNSl2K8eZR zd9KkW+;YzfIqEC-tmd7G#`htp75A|{vgb>8S4axLJVHtEu@@m!+7|b!QpD$?SAfE5j`GTg~ zIOb_o157dweg7mDny;r7z)5^^>ib9Hlb4M+u`zF6hgK;)oTn`w<96h$KQl<3b${a7 zM1LcEbj^P72uJ!p?sMeG;tN_Ha!dx6@1;JvO*Hp`n|9NBh(9^lbbsMwEm=1kVZWMe zRlsE@PV}-DtX^Nv$+d?y(&yy3+CPu5QN34`#Ga1rv_7wd%Hq=j>(nB$&g)AI{y@i<4E*yhrJmIa$19QDAO zzVBenK8+`QT>_qdCOzZ|6RQ{D7aRSH6sA}iB}cD8M+IV=v=u5}$tmDcgP8rWp5XPN zm%XlB!{>26>>MX6BYEhkmt!tXi^IIrH7$%=u8rv< ze0v69n@x&?``$)GWAt-@^RlK%MP{wNh&_lyelMwTa<9ft!oOF*&!i;*b1g2u ztVtKLx_EMALmg@>}v}NFs^DogcW)6a9O!CvlM!luln6)g{ z#>7YrzLzFEAxErcmz?4bh>qFkh(SNWh*sUkxYU{lo-!PIzM_eJ4|uXL&)&2zI7ghs z5Ik*>HV4;s2hJll^d?^7yKtCvQTL#OF9ke>2aeW+vBk#T6odG59BwgkG1qFCmt1qf z+l2W@o_OQ5QELe>w3{^0zszMW=AdY9;&dCiQxrxt38vein>y)J=J06%Zw74aO&U2@ zfWuTLa*99Si;l!gp*1CXZw!GyS=oqX>wqmDwk#YvKmAQwgpt6E}5~ICN062`hO>zLE#yN;BoF*F|ty$kl)F=vp&gI>zO&o32^C(3pVvLH79f zZ1Rx9q?5clPGYiFu_|T~KMbIWjv<%0jS4S06DKzMle6=X=sa2+<92OKpH6TLDqfD+ zOuW6yPyVf>5q`A}J&DEm`>V<(IN>MWR3CB>W14g75`Olkb&=S17WlUtrLhPxWSuIJ zhrG|gdwraTv5plU_Su)APKVmHmG84Upu>L{?#rov{!UhWWvy!9U+3`8hJO)bdUa_-}0nQ6N-`6W*otNv+?-}9|huj>q>70y5o8(XnTrO-wh*gMQKFbp$jkR9o z&_d1B$M|adM#W*S)N9hf99U1`*Y!z_Imfs)4!wE}#9wk~LQJx zi*v%mym~NRi9`R4CiCotPi*w@O&R5&-FrEnF~Gsz6q9pF@Nr%Xo7IUd{t|X-V{^#L~}K8x!|J)X-*sC76Mb^ zh)bL)hVZqk`n3Sp<%l6R_9hM;&-i`tZ*jyIz3ltIlaOZT(V^n%He$$=1q|(`nDkG< zq3?rg$Cx})yVxu6jE8yJq=}8aDTa=xo;-(t2K)wKV{h{3oW!F4FvguYbj_R>jlx&t z!dG&{C?EZZqb(7KlT-eGuV9F0qmCTlTMa&80A6ar+l_gSMVr{zn{pLAeHf!c`E$(H z0l#6*Moh-kiC)@Ge1hfghhr1}Sor9<4!igl0cU&Kdg`???er6j#1LDyBZkg1h`H3c zX3Z;A45=A$v;|!F$SWAW7rz4dB~OdipN?@p4n24JNE09Srh1aE+GVaoi$y--#3q`= zR_daG>)DFAfJ=WHP=7>incC> zHt|YxT^k&+h!Y$A*~He&nA)?x@5tz}jkaHNz>|-8j${qQ#@@8Xf~OC2j8XnMG@zBk zuMRf$CV$S^NZY@OSRA@$nb-OFJ`w}Z%KTgtg)`XNp`r9B{JWcr7S54Fo_iaCD}s%^ zx+FwBCvq+pM+OdgE*A~VwGMU}vo?9!n0DcJ`iqn3O*tB$ad9|fg!jLLa|BuofhE7> zq1*WXDA;;|>u~srjlF5Dh$ok+77~-(^eu5{PQ1$OSDG7d(3721S4Y>Fc+YIgiwD3I}^G?8+8p8&>=zP>oJJ*Gu zWlA+))}#Tk$Z4t{B7(@^|z4tyCPcFC@QVwO`2D%@;J` zu7+OIUKr4Pm`^~{M}KNyyas5~^{v$Wh-2gWa9tVG^m&ZyYa{Kw)vGw<-6B|rjfzu50Gcy4ZR93T z2C(||k-3=8GuDiL(pW#%irl94b>^A_EZ0N)^<4EeVh+Q=#zNQsx;C(OtP?rqd%2Z} zQE|ekR^}3SJnqw3cowwq%zE*ICA9p;*#7L1q77c{Pgv+l*vl7u+asZRN* zx{G$30rxxLW3}3|u30DHdm`*Z=N=Rv_Hp2E#2)cs4fK5~81htsC!Yr}vdJogweraAiYnq$gKzYZ~uT$>V*uQON9voS`4I$tE8 zTC8t|+WUf8sjVgVMUi%{aGa|4wVY3K?$cj*o%@t?Qo9(#daQ&7lWyUw!nu><&{d+w zg6TsptHAArJ`)!;u<1F=JzuU9e#iBT*9z0x@cPm3yoQ211#6kFou7>7yiT!(Wr#x^ zCT^~W7whDf1NTF=bIr6hV$5b{0fn8gTy-CmeF!ZZupsxz|j&%l=Cv5t{7D0P5?! z?%4?YRqlBliLczB%CXph>p z1j}oL4|&Al8sp5P6n0Zy^p*3G_exXUi+|Tu=Y)I~ z)@{VFruCqksH=IFzw*RvgSjAhD=ni4QC&n~vN{YpOiijDqr zG0r94;Uo71>Z2C%p;j-(S*O{y{OimbW7NF()dN?5D*nF?4%&J&PQlb7R*9My8~Mq_ zIa8ekU!WXXf$P#Zm}4RQ`(PJNy_S6%mi%1~UBZ_F4nMHYx^j)%9UQURm@ygK8ON(I zQfJAX@l5N=oLEEhvFSOmuDZ5rXw`K}j9&P6VvfD3mYgGZ3SZDhfQ!qS=ncW{ z{vMsUGx1!n-ctj0nK(piHbH2TvmTRn)+rYUV{**KHEYtw%&k|g2j@A?)5f&v^+}=u zO=4C7tLMWx`I#4~A+L#&hs>XXH*%e%CjP&p0Y_X}w^HpK7yk?JM(!sP&vQL~uQY0? z*MWP&SqDBRh0h0tC#Psw3I8P6O>3T*J6cEjNId+91FsK$T+ ze>TRfgsl+%a&6b|@pYVowlEkk`dmokB2Nr-3XWVgnC}CxDX(G&HWfOnafrY4Ddo5h zYIfE%%MrIg8`G}=F|+A|L$49Jgjdf)=cn#G@C_qpQ$6xEE#&F|t`B(jCOqc`;3I1$ z@!50DxIVg#wbtv(Io6Q%VqT_NhI3UUtWUXvvl)3esCvgMoNl9ueuKc&0Bg!4^*nsv zf_eRXQB)rKaDD{yI)*V!dPR#|7sX%r=+g5^gQARypvcV?4)Gu1)dMY+@ zn67ioBcSOKE>8u%@0*2xC&dx5sW+{+;@`<<;<@)0^IBJ7E*(dg!MFHk)EaY%1vYQY z`HCO$OlwUI^{9{R{|x1)YifpX5pZ4=FN7GTJ=iF*l(Qdx%^DwlVjY@Wz%{J-QDY4B z>+#c2k4DXpm@15m;U_g1U=G??{JGvf*z>VIV$=6Z5n`2t-!wPK7@B^;@n7!N30 z2678e;6<-f9CFPDr_4#uy0V6hDK_1YI>b&bJr4cc%!>u96{U)@Nu3^ z*W^?F_6+{53%EMqbCf*^eJ92>=;d#smZ-l!L9FSzPJi-IBj;Dbw+UF<*!1`Tg|%mJ zP6H>JN>vd>6LTXco6f;}-82$Az!x;(HsxX?>{q>pQdjXMf*M%M9#x}C=;T;*;%y|R z&P6*LYZ1v?`KBVbyh6KfAsgn=ZORm7llr!+^%kwU;HrnM2Zt$F&YSiEeHhcUrlL)B zNQ|Lv#35E{FL>Ihn|n7|<(s6|xfHPzF2Y)(Cyq^D=URoQoi2?SmnmBX{8Dh3@^!P5 zM;c=aztpuui$|R3<9o?rB`^)}HPv&-;ZK~{WUX{tn%WBzhrMYnSR-nX+Ugu)E3d@A z=U$BaH+qvc&ZS|FJZyTMy_lmdS*=SPa7oHWJI#G+EOn^U=7}M<@Nmo~n)p6aWB8HZ zl&2n(KBA)-KC4{TnmDPg#B;;;sXEdpUDaM<&?dF)fWF4rxKH7rolRoM9BonyA8=JT zVvEfCF$6y1+4Q<618-aH*9PEH!NcBEAI=dewG64ToKNCUjO;DlMmwA2;HH=Jrai=( z*bMfb@M>e)nWyAbruI_CZTQ)9m1mWzx!B?_!JfonI)~lt5}$nmxLXys)TCOCWxbpj zUWZB)M%G)$2)}4#Z(0lHL_brVsHp;T!lkeIF!C+O!MXZ5qt7NCF8DHFh?RR|)$RD) zrEIaBK+|m;v-F+7~Ni6+MF)?hy=Pfp$E4jeC z&Djk0EA>e1JXK8HCg+UAV{h8u%#Dmi;NZM)q+d3=pE)mkBK8h^uECsc>xQiz`OqdU z4Yq#ZIs}Wc>DgJh#BUh5^vg%N=;LRtU>8i(dMSRHD*-MU{;@b};OESPIF>6JeqBoQ zO2xrEO#70#xp9$?+TtBL^g0p4{gJCMc{HGjR_1J5qW2=}kmfSS+KLY~SE*dYCTqeN zjLoLkjWx2Z_PToY?bI~s6X|KwkV`^{K>cN;2i|=LcH-LLCaw^Bsj>Gw#WO#qi#XNAP zy&iJZgE*&6Vz4*uMaHM5WWJy|Ihap@L*FWJnQBrDtwT8CaJbc8>XiZv_lm4_x z4a@!qSG-!sLHK4VU)f(eA351{9QT0JW?S%cR7wl+rhO=}h$l_g_dmKakF#ZR>8T#}n^6I=rLyoy_F5;GTe(|XWHu==?yJhE0EoH~ZO*u+))O#cG4u7am+kS}Oei0{36R3qaQsc{&fVTd*5DE=eB za$Y#o!DFf;d1YUAgLA|YuNk(yd3dHoZ>l%v$RT@E=SWqx5f0*fDu3N3`z%Ru5yvK6 z8L*qQbKX<~$wAh+2>y-8%Z+CkJjAl;*Q%mx?A+`bJjdUS?~Pz%Z@Oo4j#&BkL&4M5 zu4=(p%4_IhfY7SLGmkq5!y7 zWmA+M`U+0gE~hklALxFv4v7jQJc40wT1Un$Wo-DF)}K5nD))${ZD14B8bq)n1bqcG zbUXAVRpZ~zG#m41nLoNGNVigrrQUPl6LMfWF%E!V!s&agP{VRw{MjqHQG1fy)Merl zt@&zl7%>|({p4E(f97iPXa4b+cRni;Oa0WEhJ)j7^g6a*#VJwqjBPqcbUmD}R(Nu< zIW^N(i+n4tMGeuL_DK)sh?7Q~*yOsT+hlL+Hrb;iic9YK5}Up0e4(xs9B%tl&X0D* zE6*Fk+xS2HMSnly=U!*$DOzK$kIp;!9{en7*(ip3Yt>k4lLJf(c!)LCQupU`Q@8Tx z{e&$BeyK_a$J|p13L|yZbr8c=1-}~j(ce@@;gov$kXw?LUpfL&ukf%p@h}GCi596F zdsDtrQ~Iz;enrU1ZB3Kai78s>C+j4+r^CM#THHA3!zTI$fpv??HM7yt_b0C7wqnGo znn_N=LHWfu*mcTRxs=|Ed%sq1V$)%3f-Og3b^itjwieh{;6g51iye49p6us(#<|hG zX0oOdOZ2dBM%-%nQ?uCh>n!u=R2urVd}Q66oGeQTa2@|clkC?x;FyzXPqMDmXVOK@ zjBVPRtS5bn)jE>jxkjuvYun?(5npa|$TMaOa2d)b^`tLxji`N=Oa19*%1yZBc~j?? z+6uoLx73Bb?k}|+fF>Oye6-2lsRAY+ISk%3`tyD(?=#+9^{OUveeQ;D zufmCrW;LcS?_GXvOdI2oI|oNHj%}U$++StNU+y(}O!BdbHuk1HLfv}K%P#jd*g3zpPOg_>y2(mz=0rD^)DnlajZ@X3x)j z{Cvmvf=hr+KG(^5>Na^k)P3pCrsL$<(1feFbOQe0;{^P__z9kqr|0GHkJ^TI^?0U~ zUQ$+?Tyz<^Li>6=Nll5$cI8#HdEZI&e7&3Ct}mhufAGPRg@v4QSBkz(Y7!yIm(tB#-+d(8;Oyd&lqXZxO@WBqitcnj3`@Pn9mn& z3*-E-bw9J6XUaU*4xh7Xlfpk=ZjY10Usb2VR{Aq?4P%n$QAfkg6T?4Cqiold+3uc| zu$N$SD*FvL+)#8e%I`^BFwtI*d8MZJ#LaGW1$+OEW`Ir@(jL%@x|9%6UG-#_O#>8luPGaR&-bodnzV-8fcq$&Ai#kX-D9#rvbJSo(Hxq zoG>V}kc_9OS7#&+Y>Y zCWb%bbfE9Y!O5OD`&tU>utxq2*Ukz*WSA>abHeFeI5GTPL=t-8WlZm`f95?-`AWWe zK3A7c!2kcdTD&*u;M}P@NAu`9Ilsg1_I$tMcg|1o z+Vgv&KM;q+ajx(BvD=Q*x<~Z9)Bla}+n#UPD|+6k^SA@IJ%4O!^t`j4*G!9^ck=I> zzU}!*zHQH6qvlO@{_%u;y#K+$^^p4N=NIi?=5Blb$1}G*pZ!1l7yXay zEQy|X^1u4nw&yQgVb9C{X>r8Qetz5jb;T|0KA_u@t%r(;ys}W@t!pF{$s~`DsXr)SMtL+Peb20Pt8g3o@N{ku(xym zn{l2#+Rusil=#PclJ<=EBu$I=birPTzTuE~k9P|C1HhRCJNm8z<2`)`Ay!Jfrx4?k zG{nb|i+K8@ctV-c;60=BZ zO)N?riP9wArMMz zAheiZLN6hvga9G%|Gt^MyV<=anS4I~|Nr;PO7C{x%zJO%ym?c1c6a~X*m~r-(u8yX zI+WMoe8e|F*Ex{UhOomB4}4P)`XH?(khA1)$ONq3Z8x@dDrC$?d7c58r$Odql=Z2& zK85Un>w|V*bEp2tOjga34WC4s`HUwz*;~v z(pd}NS$ka>he0oVYgh09ni0Qg71G6dGvRwfKIqp$e&xYP15h~=I!uG@kmn^+AZJ(P z3FkrNVJ-Ar4_HO%zz)sG&noD!sTKB^1^q6BO#qb_APo5GX-H!)=nUAj2d?)8Kf)#< z-F1|I$XdM-K96e#yQ~7vpu@T<=u$1x8J!ND{J;V00ZRa*gri(4_k&!r4SZwN2;Km~ z0P7*MavtolJ9In}a*jY4pc$~)1{^k7>qM9td?xUNXR`~}2pdJ2?T5CZ6>t(@Jz)Qf zs@Pe8*8%>EtJp(;>6cWo(*b3dR_C7Y&MB+Rumf5FQNZzl(*YL&t_9o)cpUHs;1fXkb?6%aCO|Eq8E`aUDPS0ID&R`MuK^DO zUI4rW_!RIhV7oQ&8-NuM04xLy0!{^70Js*g7Vvw(8-VWsJ6~VL4gwqo2m^irxCZbb z;Lm{106zkDyrGI!0=$4Gz)^q|fJ*^40`3I-4)7A-1HiukTi;m4b_3`DHGp%E*v;ZQ2m4NF3zXfan`~~m{;2XepH&?N}05bt5 zz6Q$2Y3bWF5oM`1kCAo0UQEw0p{NGY|8!8dl4E%#ZKW*0Fjv zht0*)>GRlOSQBVuO>91EW(!ygYh`V$oprE*kk zvtHK6`dNe>!?!96dPj8*$S+GjId+baqM{Zb9Mqdk&UvG*vae{ zY$ZE|oytzbJEzZJXR@={+3Xy4E<2B{V&}69*oEvOb}_qzUCJ(Fm$NI_mFy~ZHM@pg zi#3Pq*cx^{yMf)vZelmHTi7qzt?XCqHuh_FJNpe=%kE%zvb)&b>>hS6`z^bV-OnCi z53+~Y!|W0EDAq$BV~?{Z*puvc>?!tp_B4Bj{eeBpo@39m7uX-!dbWYR$X;SEvp=y{ z*sJU{_Bwlm{h4iKZ?eCzx7a53Hv21khrP?*WAC#Mu-^O;`8jW{{Qt?DhK%ygYNW41{hLTW!QDZ|( zIMfqP)I=0b7uPn|LPAg#8R!Ut(iciXM}>|gHP^OxM&eyVy)`v8hyMqqb_DAq(J(3I z4@INCQ1?5FxS6N$JIFcgXQboM1eBgyViG~79epHwQ$i4lNi zL0t9^#g=yFaCh_ItTchI2qj`@Tm)l01~pQhy@~ihCmNlh?o?-LAU7%%83=c#RN<+3 zXQH=TuQwPA1b3n_=~Xf&tk4;W^~RNC1QTz&I`P|6Jh;;!)2~QGQsF!da=5}lEAq%) zSka>=j7-Kyaui92Yc)xS%aXY!S)-D09z++N{0;yWvcSTh2GB4uph%X2S=#i>V{x(RiXWH8LnN&1vHUg9&&vIkPD9&Sd1+{P7yb!I4Cy zuRm*`?x92iJumzm6-25SJQ*b}5nrK=;-%3!m=cwShT zYg;D1pLeBHN%I6zRx`m7zrQ()421f^o&8}|t|B~eMWjb6(Fk&B6kbjG0u3jkp>EVN z*|d?kQbO8LIj6nIQ*p1{D2>fIL9%lYWfh5aXB}P&9|*%VS&4~wA9uFp zXbq(TPxN(lqDi8rl3Qaan+Z5f*GMX?3dkZ!UoczhN!b#FXw>CF5-;j-Mzdtg9A6ee zJ0406C9;K*3O3edqEjtRtyu(jwll~OIfmY%#*KOno^>2F{IU3om~fMR8(%+ zN<3J2r>Y2fcq$Q!C41uuwWshX?z<|E<)LUK+tdtq#(R5{+>g27`4ZY6wpl*uF)+MtJN(Nq0w!mpl+&|tZrzEd(fqalATH! z@@$H>qAT1NiHUxZcg<+dgeT>XM(vI#MvCw!Q$0$p6aso9u}HF?Cm?ZUx-zA~;@vDN zl_qu386rF<*-VU-9(DOh4XvF>i7pjgqVZVYF$044xP1^eS*>!7tHuCYMHp4j|67E#2{fu1GB0iN=F-@R30{ zCS0B)+(_9t8rx(sG=Nz|B?E}il?xdfgsNda9#QD279ERGN;o9OVaX6$I;pqdxZFx) z1C;)RBxFV!gk(kMjIauFAqmEmW2~#Mn=>F7mH2x$AxogMZy>0B7LHIYa>@6Zx|1CMN(O# zb|<I$)l0aC9NFg%FnC!=VXqv?K!bBGY$pXxgeohIsCZ5akM2~nk2CTcO< zl4EJ~)gK;8M3SjUcUCt+D8*3-@-Z-acNg^uS<0&{zoYXZ54o86l@t9}|h;V5*JeY3b1D%8xdjp8!HHjbcT%E}J{Pp$}wR!$J`d8F1das$YlCrOiKLm@1Q zDZ_e_p(Wrr4Mc~Mat?SfA4G`Zh$J!_l^uG>(b*wgrtIWlUUq83)k(Ljgk%PF97zxA z(ul@Kq(L30NDt~bk{;Bh5$=^pdBC)G!vdyXBkrd&ByNm^tXd0|_ zh0%A0vx5c^l^)OtEIp#hV8X@%O-5*6?XT#bia3tB1NT3%7x&29vtiTjsbc-_Ok>+i zbhGZoy*AKI_;r@f^j1X_E(44L5`ZqiBS^=GvjtEM*c$Nlqg8AZ z;17TY0Ji`x1DpyN2E+hefDXX9*t2>d&eH)q0=|9(_vrvn0d50a1{eh#4QK+~hV*U# zTmU#3&;w`ym;n0&rU1T&%ufO90S^IMpwmq_JHUSkU=P67fbSp1y*I#%fOUX70k;6I z0GtgN1uOyt06M^400#K@p(^$=;BmkWfYSjfz#>2ZU;<17>WeAC`tI@a8Wd#-?WfENLq0Gk05?nmAL`vXh>AD{uy0q6lN2b>PL2yhc% zEnppBJzyi?L%=tHtsg)>0J8xuKm*`#KtEs@a5~@;z#71vfOUZNfK7m}0oy|Vy#NOS zRzk1kfL_3nfO!B5U z1#k)AOh5|I184?#06IW5U}pdWe0*0Gdkydi;1<9IfD-^wKpUVQU<1qsOap8W`0h^d z0bT<<4!9d|1K=XSseoev#{d=q>H!A8bigD41AK!z`z~NT;1R07fXe_Y0mA?~ddla7 zQ;qSSp=fw6pSagDwtK~#XuK;F<@e`UwSqOoyO%PyuYxu5sd+0O7BO~!651X^HwLPM zCbouCZT-|q)b`S(oNhTLm$Gjw<`1O?hf;xX*HB+8zZr=1b|4-6Vi{C0VNdsj1w-M) zNOL$rD>tE7cep+gUN#htb&s(1MBh4+Ooa!6G&?;wht`kD8?CN=L6mKg?xj3{u?1yy z!;w_8m?g6(CO}I+7HHzpus@ZE3IinA(^7aKk{pbNMqr^Z`?D0@ilzT>%*Ss9w9@dA zt>apydW00lUXrLeJ8PNP8pWuYeO5;K73qqYx(O|GCs70iW3W&yTS@Yo_)V1gy>e9D zax5h$+3zL!FkUjAXpSc%dP;nWS+va2bc3|8CIL+g`_9ah)URM%iM@H@)v#`2bMG>p5h0Y5t( z*L|26g%kcL7P^U@&8=vUCFD?q4KhDGBNblACwWA+ngznW0_ADZvr)A@#|$M?BCrKZ zu#DYGb`#~^7>4s;{)KnpAq;8%8WJ!Ji;oBfHod$d4vTWT)Uv0_sidQk!LE2H(G%cL ze$3*fpbmSB)eQ`$MlzJhE%Qg?$*>f1bou5R1!LXykM=M+kX5=ZP zi-xghxfWS`YDH^*e1*`Fu|H94J%%V^=|RcI4Qc!OLxX(Xl`X7j=Zh-}0b5p%a!)N7 ziliD*K3Jw_OUs+X;iU=&d+(>@6mG)}`Ak+1cr95bExWb6F}_?W7d$6|oDB^qH2`EO z%)OG3=Pqvy4R%Blsi9ExufIat8M zPMp4Ia~xHeH|2K#OK*kg#m*dx8x-4JSO>T|BHR5;33plMB^ ztBOSD4`PQ^U(}B#GJ(B5Bq=)57mv;7w-wj{LWjE8@?Q3{EEn%9Uli%qrqI%LVW&`r zmvJ_^H-3 z*d@hni=9KF=fj?^XgzL{q_{F`fHh!w8r>7_DNdv`g&pgMV%^xWhCD}6ML6~qFzPkA zU!wLbE?a?Y@s0((B@BV`v4X}=cXoN+ZXoH%TY481^d}xTrrg0f*MbUs! z$!BE(y96?WN#P?s*kQ*@6={X&iZ58|am5uh4RtZ>>{GCGmayAT2}xHMc975k9v#6x zKcRD7lsEIx`kx4)MywY*4wd|K*TXO!IE_!zepgSt!hf(2Pq7Wm@;a`Yv6iY-N9?_m z>ME?(Lw0ElEe)fMrd#feJpqa)YU@M|N6nZ39b5acrHtE}VLu*ZQUlnEy=dVGb}N!; zQ6qS%9uEvIB1Ws&87P-i1iKkU9@8E%AgGnm)YWNfSo>96ljcf=#_mNfw>}yVrIuqS zBgcYp+`e#PId(Y`9#g7!5_>7h(t{%iXdUX}ExjRtot301wYeEWjEK1JrAe^+kxK>v z4`L1xFG-o-T-P)wGoo9G5l0^lanSqG*zA15`Cz;w6dellQC%B_@qrPDSZ$!AwmIFb zVonj@eKH@$+C+s!Sg@(Nz0Jl4jVFpRl`>G?udI&7>V7QTM6ma#74AXHU~ElALm2mn za>6Gny^1zsGmUxq*ciMRPbV|jZ4(!UA~dvW#Q-L%bWiA=?^SvU&V&(iAN7RriOgIG zVFMMxq%vQKC+fvLxn>N6$+h|r$7eDqv2@tU6We1L%HR%YPu*}goCtZT=bJVd^V6)T zVDuxDIyw*xs|IPnvXE^{A&MU>Is|*zj#8+YEg_J-!nygJh(->zNhBKPL$1Rrf|!3{ zvnOULtqmBS&qbrjwvnVLvRPj^EXXnSl0xC5Kn!3y1CYq3}Qg z!`U`$yIIJZ`TUYJWUPzgghePo(dqe#=_z4bJTp&Z#tJygATKUYdknz!4A}m@T-kw}g#$ASVO%H9^+Y=Yk zdNDW5M#_^i&!(I;$#Zg~^#ex#-RPXto!_=fJ4DP2nSs)!OVPX!VP6jSq<>S1QnKN)z3|{n%CS)O- zNxal2D;_6IMi#u9*TQ^JYluf_2gnN;tERfunqA@8B&?^{Y$5i!i`HIP#K!$atc_Us zbxT-y&&R_5d*=5NC0~a6$v=3El%ACzEmI`jvFD?KruSXDiyGrH@qvsRHMmKGn>9GS>_O(YYH*tdw`*{R26t+3yh1`H->tzt z8r-YFYcx2ji%OnPgJYVgibwOI!s|46y#}A7!RKml`o5xUuX!5$Fbz)czmVx0HF%Q- zpRd7D;Z^(#G+=js`zhgP*6t zS84F`HTVS@{6YDfn`y`ykFAqsLjbGMDIE`PPlyKGf1@Z}>CdD@ZU!TS+MEWmFcogxkNjRmyQNqs# zzDdF<{dXmt(%VCWXVOP{l>X*)`~;EyR}xO?eC?E6+YkJd{sakErH^>R zGwB0QAIkVLjk3y#7w(xsG#6!+nt(B)<=}&A<35NFMK`X4=(h)K4WPVzy8YghDDBNV zi8C%$x)joD>y1^Dh&FxvR6H%G@|~>Q!JYS>w0W1kC!IcVZ&g}pS~}1DGu|7zscMp6 z4$O0{Eyq!|?Y7&3j`IC6Y|xBnWq!)h9QbMcb79ZZ0kWR*^-t05{{`N%5=Xh_s8Eiy z?%sXGyQRv?Cy?v18_-59IeFydDuv*tx5UMD)X3vF>Do=y9I%=bM)~;`&_8zl8`oD- zV4mZoA4Fh{a=vGb^tB58y`cZ&ns?Xi#ok-<;TjqVtB;KQ6RzVN3npS$!W&1wQOP>r zIOYwS$*GT%UV7~>o4&=I?}Rj`I)41vq=JW#Rax*De_H~@(ScZe za2eMBhL*1w9-+}Jj#{5TP**=^ZgAdV4UJ9nn-{dSwzYRGq~{a=XCDRKLuq>px<}>z z47>c#a181T4?%$t(6KA}(~Vc)eZ(c;MCI56^qW9i2;}~m44RM ztyfH+bT`fq0iFarM*!ZJ0UH4y0#cxP60)BIYy`Xu*!m=-i*x@)$P0k-yb}&AM|yQH z>^;f$9L7`_KurfAkRMB)6=RuQfNcd>2mHS0Mc8!UME5SnpX*0b`V-Qh5vUIMegc0rPrnBC3*eT>79JC7YN{()`4(~` z|213AONnl|=GBJkeXH>!fMjjKL2gU_OJ@PV6oh*>t_dX?x=>Ia76=3=w7NQTA<%-q zGpgyYdWLU?k7#^^;>V}r_aP2M`3_LRV~`&Ha1ej`T96}-XgHAw;lGq1=Lzr&(C`Gn zAHYADz(zU%1uKa7H4q--<7to#(wEXi03BcfqL2k32LN#hg$z#MgN}rPm4u|(p#YC2 zekFZMo9n>S=NOctGjyRp5(2qO)iv$m7aHI(-0RNm5q5J~TGl&MFp&Jp% z2iYG4WP_Xo3Ms5S3j8@F;|MT-79Py~m(B`swS`a1gN$!U&bjd*0{RDogpFN{nKNkbdZd zAB7($LIuAM7XI!PVE z1Z##+@Qe0$U-&8g33nwwmHyMgI4i9+T>+E>o>;|Q5x;O!LZlM{)Q+pfr5on7lyRN| zZ_)Lfs>Gl2@xm!l0cw7jrRp8 z3SyCJnih1R0;=Xm5dH-%XAnO;jD&(guuvih&BG5B0-79%{E*l*KQ!^7g;n$WzzKCg zRpbDLupc@BHNU_hlKx2!lI1^&G+?+=i3cGCDq)22!zc8l%0W312V(JWm@#8t*g>?n z1|J+4$c$KFlNgqi;GNqC}1qk!0Rmi4~2p~!}z$7s$Vvw@Nejwuqj6{skBV#|} zSMpCJJ|8EfA4CA*0i+J4Lk9)mUtxnI!byD@H-_gDkpce{NdKm4pJCq_`}zPBL;g+# zoQ-H{~JQTGvwJwLymlL82ApQWrrwZi=1#{ae zQ9hq?!B1pl95WCqu7Kbge;F4dghz5(Zebrd6mneRpwJ9IkQvB{55-6)?rDhULV=?e zKsZGZqu?SIg+Cz5&PQb@RG~;B_W9^nInoH^fKc%JaG^wVW(DQ?Ae=}+A`T$wE5zdv z=~J!=;l#M+WIphU6f#T-IbtY%I;9yEeuQUC!lQ{qeFQkEIxH^+ABDq;29==C$`85dc>fhg z7Gn;0qT-I!*b)fe#0CGSKoJ5mj))N6Vsmm7g2;#XP3MM}u{wxHf$PSl;D_@-R5ghc)k&y?2+?~hbqxAbe1Ig9Sn(_C&t;^4cv3*LhffUEpKoM$^I)8!dv;T2tkv~+u(46bRr7t_w_Ga%EWExGHRtDNp0@zP z0*VI2o8<>Gz5|lwLpZ83EKniRSV1gKq}`gktw112Sx2Z6zDwSUOXSlQI7QMymvCf781aLUpKyg%lylGp0?D}{iDD71u+W*Kgp)KLK&~Ya z%0eD~o-`teng8+2jA%-n{=qExDHXDVP>CYbM*t}Th#yI2?H2$w{uO?HO7nC2H2;>J z(dvqJRQRsswA2P8QvCAg{J}+e-x9MwJC9my9*Wy!&UAxd_0ZFZ0gfqtxwF#1KnxD>tIXPj7mHu`b-D@O7q|Z8V_m)2uR!}d3DUSsBVTLd z|BDOzrET3O{O0&SzpPkaJFDe$O+1c%H>%wy*7Hc zA>P@kGEl+v+FQqLpZs+#Z*sD;m#`CmW7uGbUY|w1fZ}qz(Q6FF@Gg=>A+IZLf2Di* zNiwtTysU#d-C*V&EO>bky;l;ieG+d5%zVYKn4gfJ@yya2iHha5grBtI{beb7bM1ID zEc=wdwXK1ip5By_tB*S0IsSJTz3z!pukp@^;u2rORIKPvLv;?~HKZNyu~ zTn<$_!8zeLUTK&Z;jihzXICW$(CXwL2d$_rd76gO`Q#o|#2HokYy1HHa+1G7y2STn zvkk4re%d^1gi>e{OxOlalA_sFVvEqN0oDRy4t+^;yokHc*k8KcG+%zxgVSxiuN`{ zdQ}4+wSTp@Dl?AS6kb0qC!nT-->5!5+%B_;&aR*&RZeAHwKDN~MgDe4Sq+(4=JiwF zqR3lgplDlP(qGdB#XE3%Z+eZ&gpC11A$5w?v-Efbg-&nI-ZGiR6e*c6C{DA8v8PXS>jxL(D1WoIoeXRb^t7WhZ zlNeb?S%Q?WT)WXQOJ-Eti_=r-Ye>}j_Zb6Q+CI1XjOq74*Z7Odk#htk)q3XI1#;6} z)p!L<_R1^QPhYDWhfrCb-`CnaR$B$}`r>G)CxrL2_J+E&B~ZdI6kh%&TbWg3Mp?HU z-)xN!CAw9;mWsP5uky0+B1x-!C?{=2|4bPcs2#EnnQ>nMgUPg-^k|%4(Aug@m-4%` z-RXVyMKUkz;vc`h7~cusNH0_tFptW{em@36iGuE=qSe?ZlU^OZAKtBMFtpYw>X+1i z(P}QA&E@Y^v{jCZCO@S}*;pfKAYB&K1LFez#dq~YLd9KzKkY5_s`as!v%-^q2wpTj zc^z3*PGVl0-+@#<#$V7r20DLhW1gv)Dou@Vpn#}+3L8PzBbT>zDA9|T`4?s{mUep^ zUO!AP#xBHOB<+r$(C;G89g(D%0~M-zMfIk)-EM)-NLRdRKQvf~yQm+5zqryx>;+!T zFz`8~LMh9<{y<}W2|vQU2z(JUf7LG8zxNFEX1WG%t!~(Ev>VJiqqUH3x#IWW&7npEEZ57s;yH z=Htk#(7#~usN_nz=PjSSw+D(St+IJTV_T6mB8?uZb%;#Ajtg<~)1bcjsqNJZ(bX8X zs6Wr7AJir!-|>+8cj>ZNzA*nyH7uN;X=?n06m&~jXimM-+AFV_R1(x>Q!HV1`{Ktu zzp#=yw0w47sGjAvo2q=YH)igVE)3HrV3IYwH4cSMR;y88xHVSgjf50YSfmF-w&Xtv})RS7Rz#rV zrZyVE(ygCD#;>Qg{78y0w9+s92jya^wU^e!$D?bhdPMp*QGhnj}%W6zUe&wqMC%w4_HN_MuqQAxtkk%F+z}L=G;f!))mMq&vBez~w zp$Hw;MuRkbYE5rHFEneDWvKR&=H*nC1HTu`7Y;+14axWQOY?S&o8A|RM)@bP^9xty zV_dX_tfb0ohrggTHFV;hR(>Vnh$=nDL(4y`iSNCJ@gc%Qc5}T-9#x?NDa&+z|4>(c z&(P=>7#bKD$!vh(&1(Vis(kskl#hQfK7R_b{y~1rp){R;taL@}RI zlKc|#a?Me)9E<9gE3ZI1TtctH`7EhlaX%Pa0VxhQb~_dptJT*pTt9!M%uQE22yFJz z2(jc&GIjf;^)Y-;Jrx>`B*)U%`LWRp6F@P=DWJ7vC#}BitqW+I6MZfovx!ooWM_db zipV7^@cjt5$otTiR*^zete2K5sJhL5zBHlKBbyA$#i%kZ_F~0{&1>5;wqV$aZ3?~ z;{Jot_sBq3JW5})#g4G_n5m#Vm1nASDafKJv(jm(%R+csk)ByCKR8Z$|3X>}Q}%F- z#pbkuI?|1A4fE$S#T+-oS2qwzL7d#6l(K(Xp3I}NvO0hMH2oH)A58P-S5;;E3@ts= zgU3)YTdw8Xr_{TSR6JSz#?F&XC!h2J`9~v>FAFN4Oy_kxwEmH31lu4I`GjlAGLzSF z@MQ8@kLR1_52f-Nv`{+Z;K`&jClOkXJul-*XG?f!JTwNIW%L>&ea6Q88{YX7$Xn(u zcB6-sg{aoIh%k-IijFCQ*2k{yBOp7Ns zTX0*IZL?{NBvavmG4W{n(*nlH`Z@y~{NBINqn#`!|Rf1M4 zUy~17UnwR*rKy}Qo-!Smp31noSX!zw@)xC~T&c@clP?S>Q_2p;Vo!9aWr#hWw3#%L zM4yuP;WgO?;u*KG)2GL8rLrccp~)BaWrX96k-^5$U|LFZDAkSId&)R29h%Q|?f)fgHHsT9=k70OpBzC7ureYYi?9E``3sy#BLZ21#- z>m#v9vL8L0Dx0!D)ZdQGVzrmFJ~97iyPeRL`hOg(qEV z^g)M^^{2vmYs;c`40pa%wpDhl<#BO!-Bh+)l%!MMr;v}Xg#B=zJko<6nck=1&s_3* z=F2IfWS>u3&DtJqmJ7&M=$qn)t1_=CzpTy*eXcrc`G+g}I%R`uWCq7T#S{Po?F}LpIh71RM()*geJ`#pKniw6aHvqusIsyy90T0xfMrl zY*l4G2K_qfTH5Ls2{pCqjYU?VuB|rM(AikqtmYmIZ$UeCw$#obW+S(z**HG6K(5OISRC;L33-5)ay5AN`^o3O|g3y{Aynx5&)w6Cm6^_xQd~PV#6VU*l&&1rXGIBpm6SGcarm!Q^x9I$yY8~uju4{l)qSW^dE~IYXgB!|NMse8W$Op zE)BssbK7!S7PSo(9h&gcl28;A@N^@r$+{{%WzVJ`liyS*mTC>B{CGX4FVwwM%_ZAb zNk`m6)mlx>rb+~^W@qBW=6k(H1=B(J@SvupfR z$wR$we*VFftb3L=5FSkR=Vi!4Uy?2usUPyQYUhQu4F;7!ZM~CP640th zbIVxh*igjx{k|c*Q3?wI*g6wVbhd;rp1~>o!sLSTgDO51ncDWeTPZz%^S5F!*d2-H zqm=U%94lRsbaVVNy~bhCHjL`2VS%BMI==;F6|qr49x=RAbE@0c%=%2O?(I#j?aj^e zF<(?S1(bc2&N+RZs%(pQd~(^OeW`<1$@0t~BwD;vCW>bY!#&CavU1f`>6Xc#GUCuy z4oPMQ))kZm1vOQEn%d}Ke@IQJu}fASr^Tv=LJ?8NH}6+x$V*(|^OEPbP1Rm3IbH);x^q@_hN8N;H@po@nEIPBb zr`x1@^g%YGN zXWWX?+{};XEn!WW_^?s7l&th~zJ@>^N{zhw zXgriR#~M13m(ub&#Aj*pr7Y(+`wfDuGv|*_W(hRy7TxoYCwfckgh%Z1Wl>HKudkxd z>EyMTiY}8{5xts*2D-wDWQJ7Afl3y?-<6L_V|!mb9?e50%hI%MwC0t|p>D!dzN+DG zZ{;s*!h3tgn|&hr?%vDk2h;S0@>(LE^NW3}k_3$%NJbu-@%LxhtsVjGP7nEuL6W`l zU#j)f*pQb&qPrj455#&xCS#JY61tNN%5|-flV5_W99qJm9^%N5s&&NklX(6imq;ap zFX^d;$nn_kI)KkzsR=Z7Gq2Vf8o!b&VV%bK5FWWtJDS!mK^1M5OsyA*;GHF9kVaC9 z+iGmk)O?thKqW_&7KjVUQPDNm7NlzqEiIZ}ZgHsUrrJ(zwJnA8!5!J6=`5@b6pdHq z2gHTaDd8WQdVnlqiV?8Qt5o8ua^OB)ASGEZZ91j%sMT}aMpEgSW8|@9lqwt!bv`hh zuB8v^@#$pIavVbvs)Cf$38D~{y9k-0ljF%6#o}}P?eNGTIYp7KOO;P`{W?6@obf%i zJ^YZXxK3U@bMz?U_wC*p!vj%&e<)EC%p})AmhgqJRhiyUnNFji-L&cD6RBeU3FQkP zPV1J@D{~=jPm{|n#}B1U&&gyjD_G8St}m+VZZUmI@s39gIX^iTC~nW}AR~W*g^Mq1 z98r9QUstO3<037goR6GxDP_#!`7GKll5&x&Tve^FsvXK}SE&*ewriGXTz1W| zmz1fj$g%pdDld{GZJ~os^9@sNzalZ0R719Ba87$rdAnQs^I!$n)Y9L{EXE?s_Jhzj zluF^ngau_%`uS*b>#f>W`M*b&)hwH$*4|R#MXmS*7W6^bg`m$C`qvsI=GGs;(!J zQsq_SFQii`8jU_mnH8#$Ds@!ty+#h+6EH|m!}vn<9bq{YM?*_#kBb&r^hHtwc%&_3B8V(z7xX`w_iD@E zc2ZeZwg=^tn^H)kPpEU9qfY_4Qud+bGff2{s){dLNL?0W zgB)^=Pf;FA(U2T%1E|d#Z71u9gjW=^0i`uoI^0dct6+-Tb1XDSFNv=csVt_oH_u`ot{?6_CPFKG;?e3%a=e$xh>(-awdokr zUR;8@P1DL~K_gL0fUH9vT9q9Yd&}8T z#dCh#22r;FY8|9>7|rvh#nK%3k|sD!c2esqEla5q1$2 z06ep1FLvGad$Cr?KlJ6P?A6Dnvd6o?TQQBj_p@otu){QV@=nv(lq@IN%5X@h=AaFFr>97w7%I zS8kQQN47KY>)>t%6J&EhmVW@0*K1(?v%=n(E=JA&5_ zngKS*LZBakHX&ePE;|UB3CN1DZrCLSo3VlIB{y4?&7i{L#_I z_5g1K`1&{(<$e(PCe8bJE*ZCoI;@h-Lg)d|+W^bypv%GhO3(C=>Ers$S7cD0NT0NA z2on}9rdK_;XES8Pq3sZCnUZqEkXvn8FpXX+2p&8);m z{&){I47q2vx78nPn^{SZ?O}R^w^_Sqj)aply`CMmb>Raz;eoE`NF@ZslJ1#!4#AP^ z?hg-yk_Y3%cZqlsZyq?fJ3inDB?k^!uAf;sfX9A%@xUc^rjPSvf_-K5)~dquZN_qpzC9n(+N zPtjNE^?HlGM!!JcpEq?Zur{3jFXL1jFm>c(PFGI zE--c&ml&5Bmm5co=Nm6Et~TCbyw|wSxWV{}ag*_L=4IyP z=27$c=1a`0&3BmZHLo*oFu!8nWd7XzwV7EaTc%hlEqaT^Qe#98!ZEVC@Pj9SjO zTw+;mxx;d=Wu0Y%lOP)mtsr8tVdUhjoc{nRU5!)Ox=466#Q5BuUI!(Kev8uWwyz-DYiuCSe8(k@)s8zH_d3=&HaK2!Y;t_= z_}amolbutXl}^3W;;eBlaCSJCIF~t>J4c=8J1=prcHZH<*SXHQ!TE}Flk;=u*G}e| z?3&`Lbm?6dSB-0dtHZU#wam5LHR`(1b+v1a>n_(ju3g-$8cP0E2r?vX~^l#}u*3U4^ zGR!vU3?_rk;DR>=47VFzFuZ4|HpY#Y8uu~HF-1*RnZB@Wi!zu6>(7P#kF*Y3@3Ovb z{lPlJcC;;SyU6x{?Je6x`+@dm`;h%g*y?@zcCb!|<9Nq)j^8^zb?of4I*)Rm?7YSK zyz@)v9xjio+jWNPcGt_UZ(aMi1MXwo=eh53Z{^w1LxTZ~lh|E`<4hCGORUFRZ?kTP za@)pkx5w>k>}8Hq96LH)&Q;D@*JG|DJ=b`i_I%-)=4CZv4&u`X_3Mo<8(%YSgg3uy zTwy-Je6jgv^IG$R=2y+LEmq3~mY3|49A`Lx=PYx%T_di0T%WlPc1PSdy5Dy1?K#qe z#G6I`Q=!{VH>f*9ccbnl-75Wc`Zx98>-RV8Wj@eaXN_CWwBBNU!@AUVq3vpT(qC-{ z+ka=@-@Vpzq4yQC^AeGdX}Wp3VcmMmKP@}Le;3=fweM{|-hPJt7W-QJM*Ci{lHGB( zbE$W=_Zja7?^|9B0LTQaP4~R6LjRinPQ!v7YCqLg;|{y0dulv?B)wJ%y|zLf z)LUGZI!m+Va?2Z*Pp#8zi*0w>K0LTK3omY{RfS^t7LB_q%TQyy#`?8QT@Kujww(&w_8QA^uGaBM`=_ z3}2YoW`@xg=Bg--lXVyAR_h+n{lT~`2E%21jP5qwWxCn^4+oo6#{F-1dzHP`-e7M> zTkuQ!$M!ky1@2|;PPWc;Go6UrN_T|e3e%gW_pC|#4bBgo?~#r*B5qgR-nt#F)8JEcQO;jE|LsIv za~Z~Zj6HAov!UO(wdoAgw^o~NnRBi4Ku?qB8PDH5{ob=F?IkqIVr;qYGTkJ-L4Upe zIsK7_lML4xo;G}BH~{T_4{G!E#=DFk82@QJ+7vOZFx_A}%$zj;+58XlHkPZ=(*E62 zW&4}$3j3}0S`Qm6!?+J?0J;<`^{DP+-7fn5^d^0s{&@XO`bYJD)lW238O#QUp$R=t z!m!G8rD=|Nwkw5_KizeK>t5FfuFbA(+y}UIZl^owzTN$Ix5e{wv_n67YP>1$wcc0Z zw`Jt&Y!BUH-4y-a`da;5eN>-Bk9U{;0>gub#|^I=-ZlKq@QvXk%kI|cRx>=h*?NR^ zh4nYqhpkUoKSnFRqpjK&b__etbzI^2&|yaV@<-=1R|M%-pk=(;{juBaIoIPw8Qte) zt3)}^(_N*T>v+?_R+nM!!PwEp0b`|UrfGZYB~dWo#H} z{~o>mRAZg-KI7xYKN{aM{@wVaaVOK`raziKHT@I4^>*gD=3%sl-q1Mj&h`S@j-Bj#+THd!sO5LqpSJ(q)#kp&{gu1jGwNCCIUO}%JMYfk z-+N#3vdv{|CDPqSKS|%CU#kC;exv>{LyO@9!yd+I$ngy0EaPlr$~bI1-k35Cn~ujw zVx{RJj3J&hJ#Bih#a*KQJ6_{L;9$=?n9)Wtz1C{nIDb2W^Y(@7S+%%yhnp-aF(v)3vpG*!`hpIsu*B@LTxvJe}Hw5d-`KG%M&xA&-R?Rk#fR{ulad^)Kq14E=_csKv|R?Vn;yxu@w6liPF$S{%3K8B2#F_N5KI>fX{FCzs=g(X_x|X_H+%Z^k*z>Mu2k$IzgZFsvZQhOO z$Av%I(Z0Q`dtWzMuhaLT{k%c{1V-`u8|u&=d}f#jE#{gAQ4_v2^_aJ{j9BJc&#>-= z@xgRQz2hp!GmbXbpzBwzM_d=V7kjSu)Os(cJdTR8?$O4*pun`}SW-fuq-Bgpj_X}@m|p?;o)5%sl>TOD^f9>GZRMbxqR&exrj zUHiBWclEkXcD?Uz^xWv#-b<4%T7&*UcbxuA{RR4MjXN8wjE5TkfL8Vm;~A!Q^I51< zf4~gkLEE#oT`^X@6LleuF?glxU+z6U4W4s6FL(yL50HJ=mh(1z2h86N(4D9It!|@k zd%X+&(^dL+4X>G2SWdEBV_9pt-|{48DBD|Y)*kCB>(f>{#;H%(zO`*<-`yU@Ncb1X z$)omX?0-XRGZp?m>^KqLd$a3J*CdR2k_kqivz>IMUO$m3?27^8))3_7m;T+W%^w z=(rDc?q$bc9h)6LIBK0X*Qn<$HQuE6J<^?3up98Zz3yAx1pN;BJ8@u4|pIo7hZb#L_ML)KH!!_ge^P3wo4A%1T? z&~~KlOw0n`v+Zy1!&v+yyT@?`=4>xGs-1S{T<77=sPj1I)6S_bldBbTm1VB8T)%PM zkCOYqwH-!+{qE=7Q#?)&MxLI3dm6nx=p!oFWzaEznf^a@`{+;5pQ=?}6_=gL&tx&UZ1p z{sCjDU0r*k{W!p7#Qd+;b(m|BE9^>Oc73|*96rOo*>wkIg^yyi^}6eQ%w)cImASWa zPj*j5FLi+1=&o@$x(|mB47!Kh$6-crp8Il)Hg9&{?S9Ptf_tO;UH3;A@qX*B@a*83 z?3wDBQ(4tQ61SE3KT2EEJO-uu0eqI6&KzUh72`-%4(sv|WOyq%t? z+gVqsn}u~Jqq6SQj&-M~E{s0;dHsHdZo|(Fml_^HTWvH3`MS^hSn-)++TT=<8nhf^ zk{e9FH9c>73oAPn<~s9{m_N_33|p?ZJZyQ#@^8z&R=2g=`g7~G){WLPY`0oaZ{PbUuuB$l^NI^|x%YQo)|{@(CV0>a-HW<6 zb^Ghh`giq57$TVGd|}uIbN9V4Rv0zC%~zJ1%vYIfEd!R5Ef-sEu{>yb+43R!v3)R` zuCe|eEzE~#VRp35!mMxw>h#T+74C08(jJ9I&)VOx2OX`BgyR}V8Ad%Wm*3Te{`79w zGp-+8v)uDhdiS}%bel1o9`#&^`H90D$9#@0so>*}_jKL*-|8RNf2Q9GE#{S27ny9l z2t7)LX*<)Q=Bd^lY$5x8Xt(ZizVBS)Nq8@!au^il(5eq%rLN52GYlKsO-YQsKR4}a zo?)J4o^95lN4A+=SSt%)Bz_7;YQIG*{1@{9mcx+G^RWK)re%WlAZv>?iT?T?jLhG* z{?lr*(X1e8KLK^+ZLCB6+rGVHs-wYio8tnEOjbK@#X8b`@b#yhFFXJ2{Ht?{>u8Lu zZh-&p>0ax8!2Oly2hZMKulGdERL~=gR)YO|W7xH2aZ6z=5#rAXTccU$u;qW;6u*P#f<|)5*{1J8XOUE?S#d_xv zXg^mvui)!Fo6vK7=iJ@3pKG2ggnD+C>k`+ku8&SQnvXe9ZQ?O=myF zzQlR9^FjCf?rTw-=6IKR-@%xmLg~jhVZ<_mHcyB07%*I9cpIyt(=kIDHa=o}&v=&U zcGEuQHggYFERV3P!V2U)mTxVGSUs3=4#WOWTdVB%+dr_|97|E!S3B*lD_l)j3-}{y z_%WE%vb7bo{KT$@uk4Cdw01)b^-E{G2`%e3R-JWMo6~l-ZH?^+`?>aOV7X%)cRS8> z?&BJ8b$QP8UhHM-D)@c$^}4OlI(O;M(qE&$Q-42Je07G?440$#_{OlU@%P3nO!Le> z%bk{`wkvJj7$+U+IL&b=`m1)-wVMGh zWbk4P{4!RAXB!t`7V?8pXX-Ltgr4YC(_c*gFl}X?WS(knHXmUQVZ8Jk^Zn*G%^#Sz z!y0YBWs&t9>t^dz+y1s|P|NnR2kcj4M)9%3g7)?}jEFyVev2Ak3!l3Kygt%vQw3ksc}n-H&VtqLA;Xi#uPl4mPP0X@F7}!IDu>m1uRG>h zO|+YZU8m_9F!H=j8ioDa(rsO7y$t#^+AhZE@dfnbMyx&_iE-DU{cQVv_IELlq`Q=> zAZ9VvxW6!Z;X`kj%FQF@%P$=AEIp%vy+ym$dZg78s zIn~cR)t+|GI?qPTOUk^x-cvCD`^@_t#t0K|j|%RNb^jXueErrKA0!PY8w|#T@i!Qy zPK1VcV?F)f&@zZs^w-Vrn7y$59cT^qwYpFX4Or9bwViCc0bXyh&$Zv~e8TxR)UD|* zvulp4*>!~LJJ&+@Y^)95hndl~=sj5F1iqfNn@)#23E${%H_fuNSQcA`HN*IYqj+v+k;pc-Pb&!^bRi}Z5L*sE6^W)==sbu*W2X1#e2K=UG!_LW&-ci%5^*Frs)0;WA7av zRki-{4keI~5E4irp;xKG?z3lR@0rl65Smo!y#^%GCG;XC6ancdy@n3bn;|JyW%sa z^OfMm9=M*y(p>47R9tS!Gv1XyQHChvmA%SKYNL48Et&3UFZJI_?GG(kKWW5zp0iV3 zZ8D1(5Fs6rPD%IZu`t}FQ{#D zz!ua4NnZlm|J-lzWZRwimylUt0^!m+>AEzF__s$+rRuvS=T)kK+bvL1$!HDK>EPwj zWdE8rJ5#{(!Smos;5Jr3;Of#z|K6jZqP-cAlp!@o$s=t%GAG zWfpkaK&g_}KTvlh$vVdLLKg*vPT)~x`S;T@RR3|Ux zD@q5Lp+ZK$Xl)GRllB@b%uw%D%VV!~e*dD(4t3%BPM&Lwc6T<*Qwuhr@=CEw`sq^X z*)oe9Qch~gF4-kzW99bAk#J;5%6Vmw9%D#!ZHtXGqpJI`JHl)XuXDk3#q+|G)f+(` z^?6%+yV60;^6sQoi19VCj@W+xX1{A+W`Wz(R{ASx>IL%(SV~q;geRY;vZoW3>tN5A z|I_7V_u0NlM8sOwZmYdL6QpIm|0UTsI#4no1$=?-bk|>jj306Kcxq;WTgg<^n%of1 z@0}d0JXe~i-x0AaqZ)a5IS6QecRjZShLvb;Huu0<6#^re?Ah;G>rM6Ep%;+pTITtp zt)`$>Z^1m5i&&ffPG(4-$;*^uN<%P$j3ADiwcFYVqnP=VC(ipLKhwa!!GD@qwI}eH zzAimxM#&$_$yD`^yXw2|%WmbdeAaMl zwp9l{E73k<2l)&8zx7XY_z+i+*dv*wNzzd{r&@x#pryJ{-J%}QvcWfgtd9WOxZ!=~ z?2(8dvETPf(Q-5Rtr+Ew(vB)3nVRht-~0o3%t`FaJDNqNze;TFXq<+Zi3annK@a~K zT;dQa+CMzQK#1RZ^Y|2Ms5RClE6ld+9`?6HbeVlS+F9GeK?1+7z$q^Rd$y9S8lrxv z)}f}pthzP7)>!LIXFQlb?DV=GgncrMzJ~ea0bM^HM^yKG# z4x@^WvhO%u9Pv0v)N7W~nv5}nJ)KvrLL8_=Old?eZ>dgG*MexBSMRGH^2j3I@=y6vDF!Hi2LYK zj?$&1`acYG49p`g2MLZUmQJ^Vd|z|9bAf}dqE|f%BX-mM#H|XJW}-RE>|hn3<_{8_ zW4IJ6O(pYPgh#7R8dpo{uG@RPH)ZGr?g5(j1-uGXVFe-0;52c&wfmYWKF5LnAD z{i&|P`t33An#HLyZW1{vQ2##hs@70Tx1(VI`qG^VtR*2x#Ht9Xn$%J1Ej^H5$c@QV zeU+u&e!g7P-s$`Fiu6dWu8q($8ePos<|$7bn2eqDwWX-&l6(t6ymRt>8d$xpiPl=W z(fiaHCF~k@J8I9FM80Emnt#Id`lvPr@|LcGMdYW#Zyy*NSQa=KxZ!-aUPg zpdV}|9jC_pfGTsnTo~m*A2^l>c26RG%>lCcGY~s4TDbji5WBj1cYU0`Qa{a!&tODR zFSR#j8=J_cHQXb>CJwrDm=)mHdxLu|q#}7>)}|_*0}>VGZA53#$2*Lg=`km%9H`w; zy7Aqrf~Po7cU>H2d6IiGEME)rC)4Zs4IH??cRlfazppR#NmIqD+o{~p`MEwvZ6_Ps3Ny-hd^Az4(19x9h+kWnu1zswIGq3E~puZnme_(T2B3mJ`!a{ zZ7SnFo}Z}yi+J1k`osHuX)U)>tew^cs~DA1Q}B?@b`j2Hz2^)%jaYE9E8gF{xqU^gAn=+VAU6GAX4cw= zY%|acgv?>;v$)pqIN?$y=`-r28?cdePhv_#T$&nQy&y zimp7|E@ub8XnWZ6I0GB)pXnx>!EW93r@Y6cnw5{SA-=^wI)8ta`@ zTOK7Jma~v`2I}AHZ}c|QW>diLzHx7)Q~%vvi^zM+tl`v^g|mov*h5Z{w`%$IV)`rN zt>JQKb_cs1&T~Du=o30r$!q`?w~%`Mk(tR;*5mh_@;s%(9Lhd94&L^{o6*;h&Zi&I zb_mgFl*5NgSwtR4m7mM?lsamdR!D0HvzQGOV?G>D0$oNHbT#qbf!@)mQ(SRb1P8xQ zx-XTbM!%yz&~oWX9#?!8*ARZ)MY%igeTlkJ-9rS*fNtZp9$_>!IvA^s2gX=;5qh6N z=6B{DbP&-V6RplCVC+A5E_-rNy+844zIDEfzT50(54xF_umgLopRMe$&<&_5UfIF^ z5B#nDYvAJ=1Wr&}{O0V#Hd(}Z43eTbIc~`>og_QCm40*-e<}k($+v2WU^DaF1<@Q# zhNBpS;^C5~taln2XfbE!58owA2G38|1Ej|mes4k+R}KD%gAsc`CDL3Or_5KDQMb6Y z+EgKn;r;G$qPl^veFy4Zj1}+5iOS;b?VV4=%;}qGH}y9mSERqc9H4lcq^nXMxhbs6 z&vHZc6MBi!>SXmR^=mT!R&xJMSY97hM~GgD9{#BQ2YQ!&)a!ZOorx)T=-tbhRlPyf zT4Sx8PQ8?zMR3Sfv|YUQ{GN=?ep!_McV|$V)nq5<^{()`QnCnb!%L-)Iht-bzppl^ zxa9xc`5pVRh~DS2_NShaIwp}SaENCOD-^~%NoNn%^FNlr|;(6a1yv z+fxG@oOh6#zOP+$PUnrn?h_ub_kZ#B4j^>F)X$&5ucbJ3^R+CZ*2_lp$f7LKJ|aio z)<1Xe056X;ZL_br$$W0=sJOoKoTSHlK@T4S2Q!5Xo5@$f*MXh57cXD|Axcqf3% zU4^x(?(N_m33GSH>m}cv1$CCJn*8QD^x4t27vy*a8R@3I2EOSUxvp7YFsFNuvktDT zuI>CYlT;4XP+NM)>o5rhNa6tb3T#5GvXJv(s?+ElACZR&^PXG5;LIilT;OfzF}$D! zos3&B=_}j^+&A2J%R*w?wfZ&AmEP^Zqd%AhG}X!o^egSYpBFTM{3mz(;lb>K7b zj`TGQl`2quwU#DJDbfKHEE(nUaviz7d|JLE%b?&BlzBwg}sf2aer(b_an+GE;9I-Xxe&r=js zs2!;NYj&iKaxl9YFdLd3%}>Gmsu8^pd(K*u=?}7s7(8A2RGuMUrOxWA_0=Y5+qI@} ziZ6^X(Ea+R%^4fZy8r4q1LxlUFHYeGI*m;JME^J7UFTTSw>)uClmN3FuAxm<5u038 z7w6>tdxX?=FyFwmiIsbw65+lGbOL1nZG#b#*`)mOe%)*F8g=es9l6*;%1 zdIl`?A^3A`GEzI3*BQoAkh$GP8*s~Vpm1%eYBv+vs{36@S%rS8xMYA=6_(3TPZR+~ zd#OaJvRavXdjVRkV<;3`YTdNo!A5ep&r!`hq@FHlmNUJmaGsh4y=A-#99Vx4_GE7u z5o@7uz3+-I${OoDS8`SnlL|{^*e^{{DXt)lD7{g>N%^HkI(*?x@DB_Yij88 zyjkblN>&wAwcV^SpnNYuOhWw?{IabNnm(xBXuUJ?1lKt@mXWHB?(^s8k5n zMlu>3Ubl-r{Wni06u^yOChvH&(2th%eF-A_8a%F~~zQ3dMZAq86 z%(I0IA3)>V(YwoAiPaszw+R-%%aVr6)8ztSoEOlty>sV5gYg`x)C4bmb6Df(9T2g2Y`=evMDQ8z= zKyNCsvu2`UIjl5io#(>bTq0{(=n2MZj=J$jxDm^!4)@doh58obtvjn3Vdg_wo(O{M zWYw22UqjhlC7sWcf(3RSPV~-#nmd|DxjXdjUjY` zJB052H9CsyXcrtMqSNh|^cfx8U-J&OqF@X4SY*n^o}Qio;Ey?oS#5m1&_8Cd?%Jk5 zAKD#PT(H=)Ua1`nUuBd>g_Kg@Qx(Z}ZQ#9z3hnd!xh5#0LvZE)H~~A9~s$tm+`Sx!MiY!cq_{M_;$f z^T^}#z9j|+i`YI`Dr9^BZk*W+Hp5uEC^H5$vlHCFLzsa&DATU}lSAvk;vb?%>Sa&1 z=hy*i_U?X*YOxBKO&##JM$Q^11dAA(55zql9aK@dId#$q;=>gs#E4);b!y-D#xB(8 zhfpt`KvQ&%U3Up((JizFnZ3c@Fp%FGoZdXXmQ+IBt%A1OUS=P*CGgOXow_e6Sl~j< zP}Tk*Z&luC<4_$hHt&G}zvsziPry^l(-fXL%=;18&1rs93;O-SR(Y$EwSwLw%=Xi@ zJ2=!>{}#V1Iau^Ru^Nd$$tTU-`1~d96{*jI_S7wp;1?rC^b(GD za;izKq(t)7ENML&?4!~#^kXT!w=+ry@<=((+(@m5-WrzSrm+MJ`8y)TE9w)M*Li2d z$s(J8iEY7s5jMz2$Kt z&`YNUr(<-uZidKT!t>Wd{XP+n!sln#^1l$#^E{IGs9W{%?j%n`UnUr~%Z_d-eonQXX#E|8Y0#p1{_Y2K1Q9`SHz+{ zQdfAnbuh;vRB2=2Viv*lo~M^fgPqN-711i7pb6DKhIzS;N;{K#8a&`JcW=)ZX!m~d zjDWM)Y>l?-z(~n33N9%`?Ael1P0nUqxa`7nNG+$|; z7yG-1Y7^qx%wvz17E%u#k$#b$qP;94*OFVI7#ky}qMp01WTXm?MXRW&KH^~`>i;hI zp_ZT%Ox7NQJQPEfRSP6zoc;}&{s%OJ6{wnGyw$y*vfj&4iJnCX@GGY=nyjkQP4y*r z-SB;gTPM-_3f|{Bs-Xh*K$OHAId^e^T12e@fiW;YbKo~O5TTEu-?FVV}8M| zTL)@>+w4N5`<T%ADm@{PJi-KHK!b^D?ATC1;*C+FP7fe;P0+<|yq z%YD|}lkO@CmD^?CC?fK9`#XPL=QEN+1c#6$O~8||oj$}tgYV&=drPgm1~gj(t?LKd z_fDCm%G#gAkZ7X<)j@lDxhd#1*TN|N02ln!h$6!+MLTrg9fpG-V9qhunUegz~p#z?Y18cYS(0T(iIRPAgslQ&}HCT0s>kyCm zyVO(G;mfcP4Tj~PRzLZM&rdkhA-E?gW-O>}zcPD)?Rn28o znAMHCR5X21FOD{*8}q=vcF-lCG=4EGP=|G_P?Fis^V*~Hw8MGMG_t~u!t zfyrhfPM4vl=t9kZ9X;(>x|a_XOFgT0(;9&*Ia%R=@dR~cQF20E_b2WiAfCx+!q(Bp z+@^~e%wF6J*Ob|lmx^ziXE`}Igq0nF%Flxz1x(^U|gl#1H9!d+dh+iR#HO*W}gK;aye?7E^zH%vk%^qqaDV*t)p~NM$vzq zGl~;~%7JWZV8j+RXchXZIyi`$q7GZ`Sx5JIfok9(`Q^PQA5m!l?|rxTk?lo`rv|*j zGk3sQmun#+Z)ajvboA~;ln=l+Qt=d}=Yasc(Q10|b~q|6-EI1bd7V)v4K}|qZ{l2w z@^qjkD(qX})a^{iaC|3uq$(&U>&rdmxhOD8!D@B|fmow`sHdTIKj!sXA6W(b5(-oP z5nzkNp0zp|5T!h9pzLv=jBJ()aTSh!CEd& z(GGiGI_uFUo5)E|Q9-;{v%t!jS{3?(@vsCN;DUZaS&>06s+T5)*GF4BQ2$0h1z!Ii z%})vR=e3PioUbp~#XC^i-8Di%Cc2PSf5cN%6rX5OPfbv$H7HHzgD&uS3E4z^i@@(t zo_aHm+!~J>z5~3`XVNhIyi?JL?+4W`ir#ksK7$D&%M8#;puFE^xIK@&Yy2^RLIDGm zsz#uGpeY<(54fApVd^ITrRmQm>Vs*-w!I*KPl==Ds0@~XwyYuJZidg^B`fMSO{W(4 zgzEZF&uUb65%iqbP^tdP>Nf)wNx}&_&7Nz24a>0=Kj=}|wTooTrSJ!*13#m=$R_%E zN7=5?bJiv=j&S;SxctXPZg)l2A`!*kZ|J|9p?B*GX6V!yGeM!IBV^2E^hd<4TY)w7t>`-qzG z3vl?&V7lLtk!#T1ehgZ9pS|{heH&CT7l?7&biO_%+h6$F95km-zyovRR~bqFH&Jmu zZv)8HLA*$3(ZSs%BERM&YWiffrzc?*z4T`t*)hA&kF<0rxM!duT82Zc0i3`vRHysR zqvm`f%5~K2kNq9=;cWS(n2v?sDi<4rt`@STiuh@nn(OSg}0>?iqX6%u}bjB~XN=)Um<1#-gYX z+7c7KprXHwmhHaz77nOAD%{m{6Zff99JK$g@Oi)U76ff71G}JsA;z&6M-v~H`S!p9 zWI%IXjhH^1>hL@2tcsk})pjobm;R^z3IPpOP$ihYc$mH1mwGj{PAlP)%eWiE;q-*9 zU(b3U!Ef`Pn#V&XtWWR#tJ#Xo)E#w&lz9CE&h^XQVBZJ6s_1xk@CGh` zJBG4XKCnK-5#gh|ZOi+Z2)eaZ#Gc%C0dxtU+T)2i&(S25<&Atwe1Cu%tq43yT~zD? z`DUBoIgSUe1zzy2LLE!4tDq!HRZxNtrW+b7?W5v&fX5?P4ijF&Wa7l1a%LrzNeBJe z|7&64voM`NXD&f?tqTlc9xBIX#PbeD593pmyG!w*tY?0}1>+K#@eVO99Cb>J@PWAD zXxoBHt|ro7c270u!BrhM&zQk54cmwxuc@Ol`@(#=cz0EOwL~=OPu1-7oRc`mTR`+f za1R7{lfP2mJEvL!&HK`yhq|~~pcOt4C#o+BEDfv*tPgAj$-G2mb;r?FMTELy@J@tF zxuh7pzQy4h>%j3$#gBRde|c|tkUST?)hc-?KA^H_4!YslO$4VICFV2i1YbQu-TW9O z>q|PrNYqR|)cR9J+&ZiMhJv{`8BapHH;lS^IzBs>k=4k<%5JQiMY!viB@KW z;{pbo3w1r>kG%B74XN$FCHv)z1+B{{W^`t6e1?PJ6uTiK-+MCp&$s0IbS$a} z=b;0d+Og&oBIZ31jqEt!%X+-%>%QR|o`gG$!iSnjTtDr-Nagy3Zn_4pz%6iN5$uN; zE5B9S9%_%Z57INmp}y_u{~Dh8E(}j$^3P0mgwO>^p#qb0Q#T~ynmmaHIw#KO+Az9z z<$OvBrG`-19zbRLMybhp-bnTH5){A-BeIO|mZnu=Z{If>z|Oz+e8Kq(MVq=Y@DjW) zRN%oGhzm8Spb8OthtO?ZQft%Eegu*`9M)}+kqHhs8fKvuET3dG1OMKN!u1pT42)jp zz;ycWP|=G%lM2Y$&|;Lr+E3UaiQHBK{MnhjtEc6ttiF{)nM+l|_Ch4&~c zn}d$v6S`@~u@h>Q#hugJ+Cs+_Oij^<9J++KDfwIApxKNEK4+jgD?A`DfoES30IhEm zD!gK`oUm@J@^@$f9e>g`^b%)4w~L^jTZoD_1ohcyb)woIgm))yx-alxbVR8-g=cQ- z?&bah2Gv2kzCc;Bg)ABl&exr~V;!2td!C$d+n?b{TJLS-YfXgsk|_Bd{A6=hbH8<* zXSJBlu^Bb^3%dhPc@|cxG}z_GOjCG+E;m&0rKM10)dIVGC_Q5aOgB{j%TfJ*Cu>Se zqWWZIsj>}L?>HKycSnPdcWb;9J5eD-(usA$k35jyl7^O`4VXkmJXIs?Lab36R5`9ip~7cB4Zm7W zY72$FXQ|SFNH|ITO_TJ_`j3_?B~}+_>07{vZjrwQLwumTS8mfSYi`=hV_$TJw6 zY^`sRwGB7dVgHY?LeD|S1pk(rzHZg{*-3B*dzBRR2%P76{SJ{gvyqFM;$t%Je3+8c zo_*d6zF6x6Fzf-uy|2g*`^gM37znSL_Vlwh~wKB>OT5 zbS66gkEu4p1isdv`9n?Nm-cGe^*p+&2gn(Fm_4!D90hXhC~{TuTnC(mqtR`Ag^$RC z#^sXV6%i(I)6uw&FREqqb#QEXnQK!K1l{s~0nQmFdgV@1UM1SS*j*9q=_lU<%O$0M z?m}>_7jmSMAB4oGFEeJkFPKf}Rkqn@K`2}>aaB-^wIhOlhD+`&J2eQbx;XJI%yp6F z%7^~1250!CG8bo1Nqk~ewI=9#yQ4TCP3+IAhwCMDH!NLk9LF7*J=DTzi#n<=yYE}~ z1#06Le{nZuOr89{0ZrUXdZ}n{NxYRlFqOt26i2BB?h0Hbn*K`i`KSgOqb_p%Ep6#@ zrh=Gl!{u@wWnUUdP&PZ7_#Y&A#QM}e{rtnwxGw$$LxP+d!y~qtd;NpQ{pG?l=^I_dJgF zeHyIkTI!%fC>a_uNyFrO9`Xa`Mh991Old&Dl?l!e-W@?t4ZVzg^T2!^yaO=DS0WCoXHWlnnCR=|^ zHB!iHdaHU{5uN9Pi7oJLM8$H=_Xand3@_0cP1s!gejx~4d6KX z?VPZ$Rkcq1{-JP>XNW2{=}VUK-Y&Xd6FqUPv9SH2mg zPB{2u3-lRF$X2R19`tc76~2Ye=>mHqlT{9uzB+5s9S!#ss;Nz!>Bl0{)u)>oY%jzS z^}zlRZE_>0PfrPRo#2ld=wNQ3avF|e^(?b+V#rYORH(z4gRp^Te*XWVx6#0YEhe!! z`u$^gGQz3kYryh+uiXH3s4P4dOVM2CHYysw8Po7d2YD({Exq+<;2jI;(K7Kid()N7 zXKmm623vjT+_U1DDCH0MYxtXsi5{cK8hX)JbgwQYvl7f~ zoDGVPNH$ojgKDvn-W1Pq8`hwU-UIbP922Ut!l(_yu^aw-Xf-ibX)Aeog2H?Y5f|q~h8wooypYCNF z%C{frcOSxK23a|AikCxAT8)0D4S9DE+Q}L0lyzvGj}rfHpqqY6EXfUPBBAoAg-fgh zlcGKchno$HvXQAKCzu#@2e#4$@|o9P66~`gv8DyHP7fphefPnKbG3#lN(AWH481? z26pOk>7sO7`VCD`m>dhgq%tY&BiQoJR2w7Y0ZJZturcUJ&#NI!QP_yiAr7>w2I{r+gzfKo9OzprdfW z9a26e60K*l(Lwb!Y~2j4FG~DD^mT3UO7BF;{2J7zH28a0c(4d2P1Gb8bYhN378tq( zXr~rhKXO_I;2fI+g0#xsVDBOVj_~h=KmEbkvk}=vO_)Urml~?Jc2ciT|GeK_m0Ie# z_kVSggK*7gwn??0g+9bpIJ@whx}*RR^e5`8B+#*kaxKnK7d)QhiK82sjBrV9p%oL= z$#7WH<$4*k3e}AMs93fde``JZx(AuNs80@oi=8l2;q@*u0pgmO0c^TG5p6CVU{#o^ zGjvSN*rx{S%(1XiWq6tcnbw4vwjLIg=L`;ozipmZ2zj>9FL%rwE-#Fa&6 zEii`hob4_!m^0AN&%?E}gdTAXYRk>AUYYGsyQux4Z7>OOIym=f&e*RwNrJ?iEc=gI zr29X3+Umci*_}XfnTGP=l@kZ!vkT6v0{QL`YJ?MXVt-@q0r-cZOhGKCSHlT2R&VN# z|Lf`NqL%CkpXKm`Yne-P)|(Y3s|1q|W}{6w2`+FM-S1QSS2wuo6k^5iRz=vhUQAm0 zQZVhu(RQ~&L7PNe7IOpIWEXWtH}XjtT#FV{qN=J1?3j~q92(s~UuNZX(PNl(PzmgA z7HFyJsRom^3Z-l~9q4M*hevGZro8j6o}Bc6%d;P_D}YXe3@kn~>QQ74Tq zpw$zpMF;WT7l1|%_e{r;{HLcE?|K~yzU=tQ*MOd;qNCkUboc<}^j6;UJ+fUvze29- zgiEj~s=-mL;XXPlbhL}I3!Whx{9q;c!J!~*S8%{*l=FjE*C6ioLj~{!9D8%-v4w$W z98jB4X(fT5ZO{+0|84x1SJ?dya=L>3S{Ys~5sr8%y5A%#@7ApK}iV z!8}yGu4~x^*EfpFa3a|E3~;k~;AU4)DrE&D&L>x<_wPeTnHvtGiqek?LVT?9EmF z+N@@{@MZOpM#+W#;&Bqd(E4ki)Bh~z`F3i*(7#3EDhufC!ELv(Znx>)bD>-qfo@?x z@A*C6m&UNW-;Dj7P! z_g@FXo679gTmNS+(_HUfTnmoIEFTJ?0aVAGnX~qH_kY2-*ik51TQhNXBAN4n z?J68Du$oJ-*ndy@lT@d|-KGxG9_ufhzDEid*yK{Zu(vEaw(i97)hPQW3+ zxs*QfG(7e>=E9gb*xJEf{;f7_8fXbF)gjP@N-Tl-l>?|L|CgoNj*dT-%FGoX{+DL( z6`BN>{5O}ePhN|D;w{M3Efnop$f%|0Wj}QS<_r+-eZ={r?i0M>bM%Ur=#p99&?o+H?c9b>?c%BBtx4b87oPM>Doj2zAzb95#?pQ=`F?!wAA+b4&?kbZ zU)3WGn|g4jP=FMMQTY@_+V9M@HSjNuXRc`}>%Em=N5H(QtcWWqT;OyKr2u&L8?}U1 z4~F*~OkjDu+v{QFL(t<7pjX~O%@OYIVE*b^W}Rk^MG2zSVw5ZAZC7&o8QLYMf$c}q z|C#)3Tm4&PkoeU1^N=g6wj;JW6Qk!-##+yujv|Rhr|Gp~zpgw4dO5^*kYk$d1)W4pM z=~d1=&7bsb?mg7Tu50Ok|0Rm%{V0JOg4@SA>yehe9 zv<}+WS_{3TNAbBL(*NDh`fu(;(7na*I~G-kGoip$I6|!JIH{A?*SR!DiV$lwLH=5G zs>G?(Gc7<5U2*Au-$D9Jnc!LG%TFxX>->Ct`p??E;p`h}9u*}Zh1QZ-8C?xiK z2hiiD`C2mPY#-Bks@rwJe-fw%Mv(;_by%oB3dNC!x~dUXK@Ymq!SGmX{Xh9{fYubF zzT(-EBSb!S&}uhIzuxqa6POh7B~|lLs)Z}^ZJdKI1!r4^il-6`LZUJotm^_k+CP*m zWQj`5y16DiLk^c)5_T(qey271_`Y~YHp6J1qlWyQT7u78l)g44VV*BrH^KcQ1a5Jj z_#cMHr6|$A4xY$%Fc%}_$?|M5Iq5L<)O~Pne4a{P1yudXgM9#Yo%kf^j zMxWFWUO5CeNTPQFD)!mVI$cX&rx0fO{~(v7lUT=Gvk#fLJ&k%i#`A}Fr>_Px&(HZU zQhQy)(S473(rNGuubiGLkU0<>2xAgl6i(p$u!#TWF8*5!?_?)FFD-q~SkyyKcYlJ( z3L?0;B1J4}4;MBTCB%5;dl2DXW**qwRj8{QdE0p#+Zn<2BgNh-qVl^6M~WUe3T()^ zzo4RYLw+hhW>SEve(V_v1~rR`YK~H1lea7?m&Qz`Jpju8$oInMk|G6`w-(nsoQTg+}1?z3^2{r%pVCQu7MBtQdC* zw?c$(kLG45dYeC)+)|X80~Y;bPrSfm$)3BYic*O zKr8P|MY|^^>nDQUyhKgtijNfUI82SC(ypg=#`p0p>WQBEPsTboYtSZAEMF}q0W_u4 z>4e(3pW@698tI;b`e!*4@b|iR(WM*${W`(<d7Mby$j>K5ioR_D9;?H0b#GlJsy)XETo#>lE1w4Qlo z4UEXIV3O&3wYXH5zRgk9%>%<)gJQ9he$o9iYMXK1{NnsYih8mIzLq+2O-&V^pmeQ5 zAM-PuE4{)0m-Ey?Xw^C~9q$mxPYf)5VXHXUcRBoDvz+z57AfkSLv%9Fm0YO7>(g;h zQQI+>X$ETCd9V>n&{?fPhqjs8=RXqwKKCs0{(<^C*q6h1koXu(E>GW2(Q*zn)1T4j zk7AWE<#GU9Ozsvr3^_l~CT9pmlN53)DpaS?zu(P=}zw8HI*y;(wtYUo#$=jhp=Q7Q45u(3hK`E!C~x_ z&g8U>-fz*|{p8(^LMzycU~MaKCq+KH71}IkQbkvPA29x1%#Ha4m)Q^a5^{<@C_6Ew zwDb;~s20wsPAHf^G1{i&+fgiT$}m4X_>7>H!md{cszf;avCu{LPh`OT_)z)Das{hV1rS zCfe_}R?(?GrhhIc;(jjSrO7ANMj^UQj)rkmS-(DXZ_CYByl1RkL;+V?F5!E>uNI?o{FUx@q`naCW(DHW0X(G7QPt%& z6;x}rPyqI1V!>@@*^R_Obmp(m3gr{};aPqSdZD0En@e<@1CA}*?fqkz13nww)+*lI z3HEH1z<)B3X=QM|Hsn|*&+nzX%A?d#I->Ubh7Rm>}m?-uhotYZ&qqB+k4Ov_6_X; zPaUflVM_07{k75CGavmP|D6;i&fqoqGx&>3N~qddbLJ-YG8)r;boYg!%PD7PPMfy-2%e@j(zjBPRKeLGQF-KJ#_~4*=iE86D*f&PSF~8y z9&|11nTTAC`>k3sGi8~!O)EvU;Kw1?*cXmAz;9P#_H|!o7p1|;xgw&)d7CW1gAFaE zdRd8fRI?L=viTnK4}x;(3ewyc8{Jq8d1%ilf>qNAIPHJDr;IyWH@5%cyTnZrrf-dd82aIZJvQ*=C@! z@YDVW;c~@A3ytDk=6G}m#_p=m-E|&S>&hKevMs;%Z zhPchMbFWB$G(36feUE@IEA0J?DB)ZQ>1$Vjx!Ku3UAiz|^d360Z2wHksHQ%{QC5q4 z%sw+df&+5y66pn7aTbS5Bb1>(pb4$vb0tN)j%J_|;pCN8R9r#L$dSEqgUlpPrl96K z%S5pUM1)|b7nBg+<72wd;dDa_&{XcG_PK|rC6Xvt5)LLFWm9|RDU5^XT+EE(ElfrF zg{eXBwJhAXRt$|(bF zL$u53DFiB385X`1_oR(w7VvV^fJbmt-C~YLMsH4UAvBVe(Oh(*q8&>=whGqn2sQaF z;YH2K99>Je)jBavYOG-1H~WsD%eaLyBctHmoq65yxD=DX)#rmEZMKfUW86Y-mC?>g z<_d7W8&YqMVT#;0#FyRpo3DXmIQNJZ#2H%K-vIA;BDV>A-pEn;5kVc3rc>A5L6+PMab`vwxl43^o__b3r>a3TueF*B%y`VbQ*zzQ5D zn_NND5X&i1=yjbQaSUklekQT}%uX(@mL*bD5pQ^wx|nHyb%_t%v<+mLV`Q;>Xw@|4 zEQ}`0ETGeP3SSb$OoNWF?VqC{y3VZgKTtlkfjf2XyL0Zqieu)`IBMX9sDFOKkMN3# z3{}xXv;fJShhljPecU^0$|z>DHS)H=^D&4@{Ui?i`ygc!{dzt84fk zxchKxvUQ00tk;;$R}nRTkH4m+5nC2Ti&`fGD%v=>1dqEKw~MW02I(9=r#m;wEbz@F zn>^y~Ggk_0$B&dpd0@)A+m#wEv|<16y;SNy)6~+lc^cD2UvW!-%gAg58)10)qqqqt zKizb3_``C{anJ6cuyB-l6J>`72&lfn%Shl%ShDNtDvi_cY*kicUB_XOhWQ>06kn z+XK9QJN557V+yD5zFCnDe3$1Jp5Jlhm{twE#4W8+W=7>;>VHQty)O0<*sZU&Ai6-7n!cBH1(LQGR&g!V+1BAQU~_==kUOH!|h$ z7BzZqW?23=f3%6-B)97p-?B$|R!{8j}lS>Yehwq}|s6qw16&=TKFiWMW${en^B{8N0+-DE^uY!6R z^7D9oHzz6=Z@nSd{B*;|EbNxJf~KJe4R;V@^9kOo?8Ng|_;gib_CS!#Euh8^adl*( zYbfC>kEdxnXDL6LhHt2`ui!n<&^t}C-`U-mDNzMQC||B{Zc%3!q^5htPCO$AaIjYe zRk^9QM3?+ZI56^)cbr>1JED*tNN08e)m}Ne6;6Y`W;Y)H~)Zc@sb*G@1%ntIO9X_Z6J#a7lE6Kd&!(eZv zKrtGiojC%gUY1&{A-9Y;SmqXRykE#mF78mc!UVy$OtC1+y(-ng=8ob`Zp&wXDJHI- z=NSsHx3{3ya#X#M%+a{#@Wyeu1&r7Z&VfTRi=RP<2#Q+VKv@Q^%BI zHd;JyE)nj0H+57Z9pEaF-`{B$>E>KUUNX3I>%~R1uPzk+C2(f;gwwl?Z^gm*E7IG~ z1LhqYsG&Rj(oXQdd%Lp?!^F z#(X(&xzCun7Dn&3Qf><}wH1}_Ic7$@MW<$9XJ3e$+@8=m zT2#biagHvy+^H2!o~MjD~(Z1E{qKTXcZsOE&>zO$AIeC5#TEScX5N>H}4E{d?x8NN#O`M5E zxkbHP283}OHTEIAWsXOpHf#S3{I4k5qR(&{&BJAui*>Dqd#(g7`34~Br%~{}g~{zf z1%C)-*+krnx47pZ1y=ew9D$?9xW+69S4#S448*f{40WNS=03!!>%onZDNK%W>dF~l z0WH~On?dTvpsF0pgxKwN%3m&`|Y~wYKsRF1WC!oN4?k`GqSjb#voDutS zi`*KGhqDi}Jocf@l6WU|>3zo$Cy&80RbjeId9^OHuaiVSk{i^i5gq&m)HRtq!GMmr`KU8LVF$~T)0 z26_hF{ByEGFsjaa+%d!NzLr~H{X=<6QA`48EB~VRL(g;9XoOQC8Et#4_X#I$kv#ycUDmB;f5j%1;H*)X~GaDzc} zTs2c+aWa|(*r^WR(vfL4S5q7uud7Of;IyjKBTl|0pyf194O> z207bJ^;3a6A=-nS4dX<14{XC1aUOriedl}^&LjME1#mYG;^|jN6;TmgLB)|(iBR$h z6}(6hMnGy`4XJ2ejcDKmF;<|K3L?6=8e%_H3OP>Q-Y4i(ROcF6;3nmu?}gSZLg zpjihe@-9yvZ$T8z)#B+Z@bqHMn<#&?+|-H`-2s zmq`UBTi`!NWW4E*Lb>4$e8eqNp!Ve0^nD?L%pJ$y@s4{bLgie<^I~XkROY<>t(M#@ zCKNPLTEX`wk>zG6>v64>A=5Qg9}+Jo(!0I|85zYi-TJT$ecUT~_S1N(U(ivOL({q( z947;Fv@$Ris0b4%RXV%|aMazYI3L;3RF_SuDZ@}rPGx@1HF9nqftdsowHq;qY!T6J zy%NOCq&h^-+3?7>U=bwh!+<*nGZquyI@(9dCrv7@!6siRvxo_~T z{iz={HoN`w7LB>LAeJZ*2|xEWu94>;&sDkUWd=OfJ2XivsP=4h(Z2Ta3Eq!0husDkTu0`=(6DE119xyCD)6w;OMZ3yb9 zBRKSLqr`HdIVsDHByGhFl+J|vtlSN*t3(r&oD$qoKGBccR`m>VR zx=?K=1y(!nFd>h~3ALpL)FofQ0{<>K_fR%KYd9F@Wr=c-?3RPu;Tv;uJ_n6h4nO}) z%?ifwjQ&&lXM)N%+&xi?n=yAYL#QcJzEW}b2I!|xqw~ol>Wd^$ofFhPZ~xIgg(*kS zDYb+LIInGCcFgCf6dRk7D6`wcBaOf#GM9?OxzoEROkH{S*&wFX?7;hVl}ay&{-Hc> zqvgy?VmcJqY93Kv4rlVueK`{-XHi&YAG>ZHOhi@~>WS(udaiVpWf-w(9_rH|F>N*h zwfZjbk6_eajobmxQZx~dn4n>z7#c;FlS*}a)o#q)QS(rf5_1>j5j=Ppd|gv=-4bbv zk_D7+juxkvXX?#ET!Qn+B|kD_yc<*BO5$y~;_u2tkHz%C>3j3Ne2L0@68HSc&TU_~ zukKT`RHI{kZ0?7Vi9w%o0hd(@NPj5P(npck8*oRLYhU{J>?(QCG0X)|SU{cF2$t?T z)4uyMU;7YsVKmHg2W~e!3GXw2TcL{KSxog*!A(1w_>}=lZD2irrO2r z)WvxF&J6#K%s|?1UtzX(HGbo8I-sNCrilN)x`xSkA#aF$m`C8j(e$z9(YnQ>(%mOF zQ#vSpiR=zLTZ@YMHMc|61XUi4uj>cS<*#J#V7!Wjn7C(fzgR19j4|9JvXZHrIqWjz z;W2co+i_rAvvZ&!foA^2aXqTg9Y#qpEhm6k_fl9yp5&&WQaM+emK17Jm0aU0Ih zpl!~5$+3E4G-@MJQ8JO6|HZgw@Xt9^@_WfSueoj6FVNsQc+y{~vE2R9lbUE3b;uu@ zp*LU`enHotAC2AuBKQf;|9c}F>IRAF!Zqo^oGGmH;m)72_dlR^Sd4GvIbCHWHwVV? z)B{;pM~QQYo+A_Ph*ESN^>7??rk0pUy>y%$86$LpQBpxr%sNEt+o+!ZMEPGtu7I28 z8cLWLT-!}S0v>W_bR86QGX&;zAH=X2Dz*-E8o{u>D0FdYH|H*cDcn}J8%2OKJ-RUL zWJM69?7pVx*RRpvvH*o+M13?;QnoMNXP2NvN<{ng}D!U1KX5m|D3(|R;dkP2PHi*Sbu#cL%EYrC&f=XZY*2M4g z2@@Tr;NIT{w|Iv=^d7Hc5Nw^B*nZfqht4!c@XFyR2wm|pB6eouWK2SjaG1C=91Vqr z4*DFotM?_|#L&f@go&L-_4^|l(`w*%8PKg9aN~1EgIyMn=|j(Ws*0N62&eeOcfM+< zu70*x@ILvjZDK^6X+YgoiCSi(bEmJkf8awRTSH=752ZfSo)VdHuteLaeayEFK{H(o z4#$-cBlw7lVeqB+$kAgzgoDiKFXngC@3kh^Ooli5mZ{69>HTebkfESD z-=cthMo$wX_|6Dsdo*VP%je8oosJu(H8+ob3YWALE%grW6)L8b2iZuZ!+NPCYBOPb z*1~CLz;DuyDK_J%T=(Gc%#AviXIzxNM(dd2R0&kH0oijW3fCg^ElW&`TNVz2JTJx{ zvYoel$GZ;~Mg%$!-T8hgF@m>Grnk?C57bMX=z#)cC-*>Zv0Kn3bE@~nh&iRRcn4?5 zj`PILgDt`A5F2O0(^ncX z!?p`-^&D_FXUcaP3cV24WE`sX#d>yAHmjqh9s=5Oj@#oy;hvM2Qu*&&wnkEwZiX2Q zLXT4rT%isX=`hq!b8t}X=95b>LE{&D0Tcc&iEJM$;>$j~dZ)wqyoVhrjLtaYe+6 zdSyPk#9I80k}%3YGmG#KJuBEtNhUs3|Ht_@mzw(^9QSX`$C}Sn{V1xJSUhZ9QBnMe z&P*jIeFFZn7%fbiZ;e%rSq7V#7a;1D!m;8kl;l3v_H+O{*cqdYo58z|a=QNjNpYs2 zIgaqI;7C7n!`CySyn$P?mZul|%sM)RW1bpRl_9<;Us0diITvxUBDPgT6O-_dQX?Dj zG$7n*4$of`#rJm9){We)zzvg$Z6~?0sj9iz+5@<)Fx|}xyxh<@jC;Wxl8W5?pEM|5p>ZqS+E}Sxs$2? zzoSBW3GUWK%u-lJpR$|TWZt0*a?|xM)Qj(M zBu4r^WYY0ys`@Z$nCYzJdFwal{U)dH&5cX}Z-|Tjh?qs)gIrgLI$|l@L4PWdRYq2v zmG#}-VBue)i%iC$WO(X!6 zG`LA&y5Vc~OM9|^D)rnBF;5aqG$mHll_63-bfgwce?!pzNuYv15CbFdqI#L#@rm$b z&BeQMo%*XPvok+suIv^jpPb_DJ)d5J0xy-c6wd=VnytqCm+^J8PUF0R7@lBIV>T@Y^R5$LkH(cKL;`7 zt48Qt63O$S@W6$LG4;h=lS@&v9tDxl4i0}#836Ykf)=GH70w>&!%fs46^yTqGu&Mg z_?H*IE%)ITqpJb=2k(g$`m}ax%D-H)N2vvCxVJgF`?U0PG8;a88}4YhBkh(xSe&`h zoVPF#x(-Z}d`j$@j{a<~r!wmIwscQhaoEe;+p&w@$&1?lIyHVfyBGLcemKw_)Z+#d z2Rq^+o&>hGjvRf!@u|4-3a@HO<`6G|HL8iqWI2;H;?cU^=gdS>Z>(Y-K?Hi68rzQoJ?{SDk;mXRCOoq6O-(3bsxGyEA{ zP8$%ErFe*%sAgMo{5pq|O-&+qZ=~ z(jV{ynb0YI0C(XkoL8LxD&o%F{Y+qP!mVEk%I|3Ovf)RwaG>_!zMpBZ+p9f62Kb06Y)-}w8NZlCqlJ@o1DOHT8DU(rO09N^jM?8XyV|o`v$&o6lL*wT@&G_gP0^% zoZhr5^Q4^VX_LT7SK^9`V$xk@G(+p?0SsWXXe82;rMVw&F}6jM5V(*M)m`G-Y% zm*@V~PLx%wq{S7pv%8ZmQDQkdzyQNCu$U6VwlpPIF{KUGu@WVUhNLuyUZpxwlFlY* zStTirSgEo~Dy_3RC#7{fPA#ddnNuegSE|^Kkv$<64Xae?5!>^5p7%TNyu-pSB)iEb zjeoe;)n4wx%=h_qKlgLreW2cB^lYCAJVbnc3#QIB=xx3U{QFKcLr+!@Q#CK64-TR+ zb|Z|PKj5Ndn)&wy%#^PLQ}{LZw~z3h{Sc?K!!QZ%Wa1bD1&Yzj{kZO9Oy>`=iC6;7 ze;yO)+sTwiQDM6ue$Of9r8T_VJzND;^XkJmxZf2TXYPyB)qRss?op!Phh#eo=k}jv zU*Y9G|JAUO527)9E%~pL*{}zHi#tK_J^_mN2v?=wXXg5Ubh*MGcv+*Dtp92%PaV6x z!(2rCCS9+n+TGcBH##VvWE%UP_U@M{ZaPR``@g_cZmF8&K0Qtkoj@ULH}yEXi~A^@ z+kSeaySSEF<%NaV*}nx&?LBbwlDyb&@Ma4SUV3mhEXdd6(AEY^Gr}By7q_r~%Wd8a zyExHUdmhnV2T$o*aJ@fNXPg>d_t(I#!(jCL*u#q3d|cjNul@eY;nv+iR(l`nffJxJ z8PJ&*a67q=+9fR9TiHC06a9Z#@ilVr8k*im;c~tV+ zODS$oPU-IEEj2IYyNI&W{>O%s?A2QvUyn{<1ntGo$=?;bOtHm3rtAC@IF=vvf875` zaOY2>ko%DTLwwsGW>@=hKDAH5Bl|2l`|Z5eG=C({N?xWs(hk(2?!lGkpDJIB zlE-~$iO<&_tiKA4xZ4|}@_y2nS;hSER~2s~%07X@VNU_|NYgEprZTyh8MuC|5+;e?uN^_k~}~@<1bmcOy|~HrMI*8=v??i|4;m76@FCP zk5x>8S1jQN^bPX$e+ECpwr>#j({CNR2^8oaIGUg38tJPj6MYBl3q@G~f7(EB00dnIPWF*7bvYqR(R^e|z9M)H?29?@)w#>;djoyMymz|ML;J z;@6?K^ICG*E5KlS&{h`SKYzb(kItP}@iygZNQ?KfTp#{SC{S5&?lB=bJDr z|1<20zEd9{v#f{Sz!dRm_+yun1O7KRU~;QDOULsKHgGUooAxM<^-`|SuS1RFZT@$H zOh-Un<(lDROo4wxxA`w1=~q>}5?8p}xkvgUH*s&PdMCf{=i$F!27mhX%$toUSiKwW zX;Pg|4zdmYJnXIS!UlQ;Rd!eXAuhT4nVEjr@CotYYTKi|{HvIiKIRwy_}9P>_&z&J zKU$L4vbPx_FMW>p|1}&x_Mjith!5QxV7x{HAK?yJ*hpW(3;bb_vn4nV{}~cZ&-#Y8 zLpPvVbw6sBd|%-`8ei?)M&FB9%=0T>!j0`KsV6n6P4yL!y2oIHH=$Mcy{hjA{-nCP z_Iear-o<^%|K%p_3;4v`&Lz&t`eWc0d#rA1n8lv*ZenZ^@24rzji{((=ky04@pJ6< z8p$Vb%|9N9AMk;C^lr zeh)6gJw)DD>tBaU(}(!|#XIeGdfHb~iSGctokKbK=ZU=U%ex%jqdS2Qu$_8g#TzPw zb@!2~*95NOrZ9$*^8+x80)864V;foO!)W_HpSdYrCp*7i z#VO$^+kmetZ|v3R-QEf_?qsMOe$#81nfB;B`wRGWzsvvkaNJ}k-Od#AQLxX)D}F+c zbs6daT_{-nUFH8_Cvl2y+6#L9hgEyvbl%M;_*GcVFXi_6ud5%bxdcs)8dT}qgMV2s z?1~?t{<9lS?z`yMH3!G`XkUy!9Evo1K*n!^pYT5aef~GIMSK*m+DlPs?4frnL-XKP zI21mx>Kkf)A2rArig(RuSKJStn+{%A_XT)>9{Big=Qk?{7rKv)*7vvp_&Pj}7c<%3 z%(h5(e#t$`WqA>3%jJQ8;HT{Xy^X@$xfG?zYNF+4u!_6brBA4$-YG83Ul4p5-Ay^a z%j@A(og_AX2Cm_Ce3x(L+l-(_|0P@mzsn?0#=m?ISoc9@lzW&O-$xz%K;wtFg8VOD z@-^rjeUwTxE8lCH9Kjz2Xy*Eu%?|NyEqe7|RxQd`)1khRP9;(GFYtw5%*{y+-}o;F zen;71-w1@!c7`?*{4ke_pXT!6O<*45DBAr;=uK=u{t6wDYZ|X5Uib$xdz6>|epvk} zR4IOX@CTr06(9i(?A`60cRQ*ae+-ZJJ?OMO#J#}d)V!Y$T*1x2VS2oGvVlK})Au8R zhv3+M5Jd6;Sl^zy6LbXg@KKfy9+O(nztYTqS93?>L9gNscq;rQXy56Y2bo{q2Qqsn zim1PM@BlOR0%pUAN_N~pEiEr&^$Q5S8Lpt`6OP?6fsC2lBtNoD?U~E zT0W8YgZBOy=lI`-`6cQ*e?;%_8JH;FArC$eHQ?*O6z_xg_ZR4gJc@eg&%wlcBUx`0 zUC#`gsRQsS?m{~F%>8{xdJRQ3g~ zB&Ys-?Qhq8lU>*VTDbSIdHEtJVj0`XPqJ%y9Mt46Y@{RX^1e>3_G%9~C9Dsh_3KmwUzj+eT#X(1AD%MonbFK!!P5=@iuVIJHXQ)3{}&g z{~CGWw;JEkXzzvX�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%0AyuxJI_IU*iDFAR)$UwO+CJ*v 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 literal 0 HcmV?d00001 diff --git a/dll/win64/Irrlicht.dll b/dll/win64/Irrlicht.dll new file mode 100644 index 0000000000000000000000000000000000000000..fe69b310b455ca9b5f6a232860377b5903d7916c GIT binary patch literal 2885120 zcmd3P4}4U`wf`pBzygbRQ$r1XL04UE5QGR=6N7bcvI}=%BSDO0F(8!xEh>K!{)lM8 zCYbAWpV6w-K5gl1ZL!Z*Y8An1NeHq5k$?UJL5qK?H=-8&g8_y8eZMnzH=E6B+u!SZ zzaJm6Gk509nRCv}oH=u5?%eVz&9*F?&1T16EM~K9M96<$@%zm`?hKpljB}nj!}esK z7th_85q$C7Yv#>g;$FD;rn!q}+~A%$*6d;Z z`}g%&sK5X3f7^BQ-|8QZ|Lt0`@ZlMF-nC@$!*7ak$-~nS{>F9H!z)ENQH1YK81wLQ zJga|L{m>E-Has*}gpCi)6L8}mUWV}IztufF88+LUZkuh4QzTctGRS6g ziD(_fBIB7hTQ8B+724bvOJO5D(>5KTvQRwe`7Bcw{<*+*=eai9SARiBoXtaRu55%Y z7ujsT6E!l`W?MVdX1m2^J3Qe6TairZ_Pep-0$Tx6+z9VY&ROfWt#u?PbdL|KnZ3LQ zNjKf$mIRS^cABJrZkuiTu*I`x)XcEij$a34z-g;S*o-jgpBLS0m;|%Udy2FVw%Oi8 z@F6Md`sW3A!xmbA%S53=o}wjtv+QL{UBa zARgiwUm(7XAldz8=6gucqS-GX;J;}0cEpG!n%!o_VgouzgP#3c!bbX+p?cyV1($VE zV9^^HC+NK&u%>>gpk{HL-acK>J9lofq5px9V8>wF$bEB~HNB!!cWDu?Qww)w)E;e% zGiHSr{);94tB8NF#9tc6|LAim@__tK1q40cBm9X`f}RBYiZt*K-z4CFRtWg*De!?b z@U;?t*d>5}Fa>^K8u)SvFX*420^jj$Px>#G@Hbuz{KYBoo6^7!knl@~0lrTPyq*UB z)Qyr~;y*C5yL>`v;NOt&w^E*uroazQ1OL2)KTZ5AQs7VgsVBdWNcasG0X~odzda3n zqlKUCH82JK!8Gu*CH$*wuZ|Jj`JJBz{t5~Ied6Dg0$-d4et?AUH5~AI3Vfe5@Gp)P z@_&!`Ln-hFp6Mx{Rtf*6=>IA3kEVgY?*@VYWA=v=mvrZMMH={83I9FPzdZ#$kOqFD zgr7tB2UFk&rhzXXc`lWR=%4db;5#<;&aMGE|hjXn8&$}jta=>IA3+ta}J zm-xq!o`EUw52k_t>yIRUj>nGS-T9rL2L3q-e?RHplmcIz2L53QFX+)z;QOS3UnSxH zO!`A9@CTmmDWBOA{%53ra0>jRY2f`5{@VqBKQXL3zbn$fpDW?T_}ZQVA4mg#>W6ZC z5&wfJ@B`DpzaimoWc$uff$!MRli%kg{G1B`Uz`HJDGmIC5`N8h0pBMDUQYvmgGCSF z55NM(*i6iip)~M*3qR?9GzETe8u&pHei++#MGE|hr+V`H`FtVIpNamT0>3>C{EHI) z&y@eb6!-_zz&|44H;~^BSdYp4&QAkhFX2W1*^~lboCZE5;ZGC4o&w(|4g94N{tOS` zLn-hFp6n@~90`9F$K&7>_(#*ge>6|X^Vg#P!}?9;cSRcb?GpY*(z87UK9C0fVF~}{ z`G9{g1%6-}_*x0yi}3SP;5+`3E@{1p=Zdz4R~6nH%i`~?zT%r6J9 zibYT>$tKSj8suyCMzzBNF~S(f?E618LyvCH!gf z`(O(Ez%=kvCH${R&-@hlj`cnHEtc@Nvi}sPz;8+epCjS#Cw!k2cs&h#$84z|&H?;^ z?{=3@C=LAc68>Y-|7Z&Q;56`$Ncc6B&x#cI6OZ@gw^71>kMsvp;J2rNKUE;?$yZ6w zz!dlg)4*RU@&7yFJ1*?b@BB3I10?*evjM*;1->{9{Ha+&o@)rNr@;3~1OHbE-;4b@ zlmdU?_dVtFqJ-Z@`3z2he>4sJ?QG;NK_~ z^ay=;0KQM?hXg&LH1NNZ@M6AxGzETe8u(Qb{y5ufMGE|h$9nQxF5$&|8c2cPo(6u9 zgcto`U<&+$Y2ZI968!$2^mLrxo!|Ls;GdK5LZ56(fiF&lkGq+gfju_h36iE~FTn$( zdI+t&4fWA&WJ5tsul6`5!>i-o?0~;Xiwt_E7Sb9-*G)zf&yBXUg&@^v{)l=6kaImR3>!-zzWua}Qr8+o5H2p@0n zg}@#gu!W+~vnSyJz`>;UcCoyq=hR9MbA>*dFX_2DF0YP9lj!kIV&8y+aLM`5@Wug6 z&p5s%qo(gOc@UGi?Ga!!+So6ylYEyqw$zl1PNC@wJT6VI@#Kl_r5UdWjE;cv`2K*= zsTrSWSqGGJyf$sfo9Jw@S41!QMD{Xcfu~3_YCPUF{Viy02Ql~8o@X1mT@QNP0bO+< z;g$2wwINDEUl-9pff`i{=|Td>-wgy*|5YWrzMhU_abcbo^!*sAGOXs3mFm6O$LwaC0* zX!Re`_v{~eJYXEvj1#KyX85E-xn0Y$*@F6VNUr~T`(rU}<`(1L`WhO$S$kt|YsLh) zjVs^(RB>hBw$)=(CT~Y{(AGAO4dH-w&oj&kdJ6IDKcY{4U!VFnO`rOyKJ`nGC9(=M z{TdINu=3Mb^FmP2@dP$0h&LGV$D)4hzO|Pk_a{+5C}}TMH@RSGME$)*x<2(M`qZBT zRa3R6V4Kh5&WJTHCz2b0#PDwpMy{AX@;qBzd0Q57gbyDJ>b1WKw`U-D+&{8K_ixrB z<-ZB)tDXi~#AUkeHqzdIC)i;bpW*)_VL)v8e?u*{mFH8)Bf-{L`qXpuspsoc zheZ8wG#!P+FJpjOM0XjvFV@`5${JDGre=Fe5I+U7Ma+zBr|n4TrnN-zs6>%{sVql=ZxsZ)291&7fKNo$UR8_6nr?M{W-q`>0LTU}Vr-q$uaqp&DDj*it@Z%bYpNISqWYDH~j+ z$_A%x$lluCTCAmUd+kS1XWvp|trHCU3qVl&qM)x$m3mk+c61c|ylcYZ^M^m{dQQw= zGlz2|bj@G1cFbNV*?s;>z@M28{#9V^4o~?D(N`#gIb#_IRHGBD`V7@+1RToXTReq6 zWiUp(8u4b7v?^;F(d_6?Bk*^#{ZpUfDs>o>@><`{Z#|hGKABNFNHtpOPkaWbCC+EE zL1oDfG{%vvRx{I=)uKi!GH9LIp>K>y&XU)ZH5`1#mLbt_r(Idyf&#&a{pvvL;Y?rT z`mCVQFH#x{MsmI5BTk3bxV`4vWrqE3J)_L<-EG%ZJ3|L1Q2}_GfPqNhvp`n+Hv*or z0L^az)Qo=NEnfvAfkObkx*Qk>mZEA^&nRWxDk^8hfrujzHVf5~mz3Lsu~@9+wWTF2 z5@>xp6G&n^$|Lr^!HDx}_8;QVRo#Z7I&gT2LkA8oaC`uHEPGKipy8djX_4F}Ood9r zlS1G*5O|IdcuuLKV=dBrB~fKf4I-LxCK@LO0eMji{_JpPi|WmzX!G~fvvhw~)h3KDQb0e6ac!>wP%VZlp)IPwzk`3ZP8_%-a{ z%y*{K@R2p&nJz@Yn(xe9U&$`z_G{4!w7{l=#if@{h}Z+{PbgO&@qPx*iC&^`#ZkE8 zC|p3Xd)Z5>kqKgML;LAybEDL*v&~_ZAaoo#zk4IqoC$C}Q-GC9s8UDW%=}ZaGA9++ zJf#4GODPb8sQ`lsI;=vhM7)!z_X;rXjFZI^9ZJJYv`5fTVT+)0n4lPvgJD*=sOc*- z^r)bI3kGAX!cn}^sjqY>r7N8V4XBkzCVr(ww|xj{1X@4H zRR08n0G2>`?q(MwLp~1 zCWc>&Gr;}+*D+HBfvcjV%()~>r}WDp%JDAEcm=b6(17eT*yl9O3$BOF-!=aT^U?Sa ztpSmrfKeJ6avqIHEpq915%cM_nB0Z2UT_v|W3>n{5#$8*Mc$~Yq1})Q<)%8K{=+kC ze=r;7g^9nTnl#-90#?&&J2l-`O!Hkn_tuQDapV3k7ZF0{{uuF~z6`{d1Ie;H8sp)) z1;@e@3Nq>@49(K?$%QzWFmLdAHgj$+w1F`;A9lxKEi%DnzKZsRLDq@FSgTZ;U>&eN zz=E_T3+FACSS|8Elj%uC@#C~8`bZQ!EYt(VTdehC~lgWMw}B;QT+J~%A(SY_YK)E>b?PmGZn>3fg-hQ`6Y@Q zW-po7gOTkyDY7U^i=wYYv0(1Jo?UBADvHnhr)$*R7YcFCzM*DC4=T!1Q9O|r#k~^6 ztQ&6ViNcnO;-;P`IP_=SaD8IvM+RIAjAGbhAe+yjKX)4=LwlmYNF64r_`&=I3wkhe zb1I4sXF6GYd4Z6{j2qIl$YrT0ew`LYyF{_DW@b++K0{~h#>mXHDDIOemfn7JYeA~zJ!ElXDvCGyrIW>k1d1^|Pz*^$@zb;@4taz)7mZ9KP80pPn=B@$ zK>;gZx^SJ;c;;d9@rt$5&ZPNAu74tn+KrQ1|IF)J5^&*_5 zG;Z!C7tg1kq$fc$0`Q!`7x71rE$Z`lF~!G%x)00P$T-*)8NNuVORPi*m3{mP%iChD zZDY-AQA5Wcfs%+u9*?8Ix{Q1k!2v>xr;rt4U5!OCf9R!Pxs_JAV5Gb^i8vo5!Lm3D z6_#U#`G3Q zFaxBcM6i>ER3IrJ4#A{5R*TqZJHu5Q0 zOwiR_2WmU+v+%(R0B5fLpF@ahczcX)2AB$!z2m-#?+P~IBliEBa21o=x+~*Ci25-i zgeY`>w{Yfe>rEwE_6`6$S zzl$0KN{Ifp1lrf4{@ZMHL^X27&lp$+XN442TxeaKHUp&NzbvF+>brtF!6w)i6@V4X z3DZ03A0jyf4}!yP&1s1*K~Re5{n=kUE=J^_AFY=oa}u5f*W{TIFBuga0v9{x zKi!6)K=e{-ptz!{sOsnsN+{awqh~{PM+USG5(dC!n0hXQA%NcLA8S4d|BYshk2iW% z204T5DuPB7cr}!VtU+zCJ7^u{vt&xE4(i?}k(#_x~PB623R~0d*rR2Jq6Yw+Nl`f6?s=*mC42 zR^jb947^G~_VdtwP!aI3QdRg9sscUE(iF;I>T6f_T#zL-M6x<kx1-FFsi~=Zm^yZ3%aO9UNV=3)_ThZm z0zxf{nMia3brTqxWl6gL^N^f>_5%@}rE?kt&@zvK+8L0!f^I1923duH3l+8cj#V;qS2XzqBvX81B4$sSRk5y&6e z;)kCtk6wso_?%nc$}TO=#hzKLMJ;Jv{1N=8TI=ELafZ+4XcP4Nj8MLR!w<)C zwPu7|aet@^-z$L2fpB!t@Z~v1ZdZ#OHRp|NflJ9}v%y)K>uA_llT%uhYpWd?Yc*O+ z>qckTYTuJVZv=g8SoFuX_)A_|yk0OvYsUc(sz7bn^W?Me2ZM&7(F(s=ZPtjEwsHe2 z_KUxc<=C!QR&y;QN!q$(Sv7g?YdKjhbSt=Ln< z9w7X&B|B6>!<7b6S}Us?MHvL>QL5vABxS$3`Q=P zKJYvnOip(oGJem1=p z2yb>yxHEf6?@e@RAL(aIa31M}pVp2{Kw$%M3-?ENv8rWGwd9MXvwX(!KN?8P|-UNP_xI2&i{#S6pm+0ug5~db#uAegtvwCvgK*AFS!~ z9YKAD%UpR1&b;u)Zq%{tm%ifLoJ-FMK$QuhLw!={Q-JdYOXxxU`~X@2V_3^lYR)mh zz81O0Q_vIfc|Z(xfHsK)*)RYCg&ljruAiRfpCAJ7eXN`+flZtf0M=kupPCDeO!(a4 ze$9Z8zdQ?D+aHnkWU8P43bMW48GAu3`ODJFj88R4MvQ;WP+~7&gGpfAYcXvNK@lj56;e4t9v+nDM&s&wkAQNd5T|y|Wb@1XV$OmS=hp zkJyicgE43ni}4Sh=%$_K3`Q<~_uHUo8oagBoFg%j_tIt_X*_tVU+munjK7o{Uj)8* zQ#r?m_CH(8Is@$wzxkv@`xk5a3bg-xwEvfsNEHr%RwkGmKZM zP4z5nRi5oLw#{i)HuNr!ET#I?BDZCzO};ZQT1@D7OXskTk|8yiBIAmOeql-w!VoIf zqRmqIFyl_FAKbOWNOK6o*5}C!^7zK2Ybgs9#o-BTH$d%}J75O{G5)|#ffjxtrqSF1 z_b{e_A4Ugy^;8aXzfbm^zkbjG@umO8MX67R%Y#VOvK*4MQY#LYZ>cTr1q-~ z;vh{PJq?s=$)1|aDA^H|>cuLQ;*dS)uP{;VnaVKR&AGMT(qgSzxW%r8Pq=P*A6Q!2 z)QubmBDy}q(l5f6h-8-yNHc$5Sf4t7s~fo@&?2B4ThfsMP88$38@IQV4cH(W_l4(_ zuW4M&nbDLv$ET0OF^Q{tBU#ZRSG&b<*zeQzIwFeJHz1%fj+8qQjn;FC%>-pb{jU+N z`^8iEJ?;5<_!sLCIqE#8?iY_C(izri)MnJ_%+G8Rz?#t-)b)Fj0CW!_h}N&gFBeyH zqV>N*BqL*6{gVhsOCv^@$yWb`J#_;1l+w@(D=1@i9ia4j{u--Eq%KG`R@2ni>-lS} zCdGO^e~s0oTNl(Dt4V=g&tGHp1Nh}I!6-eT*Yn9(P12}+ik`D0CXE>56TP14!6CeLz-o3w9H0X7LC6ikUSRhd;2_OZI>k)yx?X>WWDzjZVE z2-I~m2A=}@x*35}K8M-|e}nNCsGBjL&-2>=Cn^KnX#ky00pc@&1Y?^m3VOvUkja0s zlC$H<{)U#CoNa2~*f#Yd{Efrk4`Xdeupt3|&3d>f4T7 zO>GLy14rx>aWOM)F?k#C^^S8=_X~Ewqw4Yf-)ZqE4xx%jH^fYbG;a&2Q5o88HRm&Q z*lMR*YD^O9s3&{jU$9G_ZnIP!7Q%vyKK1O=7A;8~!6Jus-z6czqgA_QKgju9Dl;6b z2^t5Ag-TNzccAeNq0)+ldQ%!XIT%8*6$>S&H2zwo+zI@}Le(ja_llHek-}f4aWzsf z>j-713=^79x#I>TDvfikEb2UDiQtZ_MOM(tqQXO#2=3rmQW`I@vewEh5!{h4vcApV z4Z74|_rw+1mUWnIza%uY+Lm>hN+XSA`CwNX-%31S7`}`L^oG^cHfm8=D4oX52?&?c z_(bBttu#tKM66z=k@Sz)p)`?i;4mnD%-*XRqBeCz%esu(rNqu+z|Np{HWGf!CIaXk z4CAIi?RYWQFRU$7jn!;mb!3>qI;Hj!B4LM6M}!%y>s@;`fY>lznv=9%-qz+~DM{?fkq?G)n;eFQC+gTMaTgK+;B zY(exppDIx<3`QfkGFs}DfscW-bfiK^w$~4UgvSIq z>P9RI4YkFh;xb9az?R~bFE1_WcK!6(K{q(2&HQqC;he7XnqtvwI3Z8$B49-c;l5&yJsFE(ZagRU0+02tI7pLU*pIO1 zNRl_c*1&?D;#ZCnXaJ+6D{k#mAkV$tA}jEpZd?N`I-N2keO{02FMtxWHnSZi`?RUHjN z$%*PECyZOUU95|k)nB^Ff8;@^)1$@*Fz<^)`Adfjgb&WFN2gYw9z)s=Fv<{ET(MQNT)MrD97&*7Q!=R*u&s!_@I`kX~TH);ZRA z80&&FFOIwgZ6uMuXCbEpLO4H?@QL-0c>iLfd652{NcPsFRA*x~`ToUpprL>9+e^3} zOn(2Oiyrn4cO{&mmBJk=PO>c=8Qa8zY5FQJURg1Jym*jJ{j<=CM!RafYMy-+7izUn z`Xaa4eUW9oqJGS6nKobKCP&o2F$+;Gvau7DNBz%c*s^Wm+Z-PCS)Q-P#!=MYVuyhh z^>58YR@C2a$0bTp|IXevJAysg;_2nyxPC0^-*2<^MsTQ?cskri6nHn&)(45ELp*(G zv-JZpvyVpopY;Xw5~muO>?YUkpi+zYpNNiidQf$6NM|`jj07%$hoJxZp9l^yWpEe{ zMQk8FQJ&SRDo=Y)kB{W`o}=paK1fG`4RK$e%s{vm?k*;HGw0~`zJS6kAfD~kbAk2T z%X+q3&kjDr0h>{KpBDKO_<|^QtC4G+=EO0uEef(<{|PpzB9-fLA_R5p#@iz6At}rQ zo3Vwol_4a)69Pi?N;8OYheEaY|Gh#GEDOZT<;rqXzpfm&^F?I{MM3lJiK3?QUq@b| z1kNt)G@q2vgT4;`W{Dp3w9{9R%+d;3^ppF(h9#6CW$~h-I=?Kl>+7mZDU)ETzbv-~ z{z=igh;CX!CI4?8GRQ+)yB9!ju-7-%@0U>7lv{%#`w-DGwF40aPm;_N2M#M!k9&B{2G z%r20!s{eI%?KqjmUYx@SC_tAK9a_Y|EP9*BMy!ij!X_1nvnsnYO2k>Uig+@TIYmC} z`CsSMm*Gk9f*5EhNbrgncpaL^AKJyMD29ej6p3@2C==(_Dl{v@lguuVva0_F>}m;i z5CaXt1iOfV-HJp$4Bsv-1z@n7C=zEkQ6|o=RcKa**2Qj+NTI8O$?X0|LQ9Dl#&JSR zi5NRW~35&i&L zyyq6CB%=3!c`l}cWfjq}a%F5xz}l`iGM+z$qop$^+OhV%oMi@_=227RRC-~d$5+Qc zM{z*#?S%&axjG)}74!dC z9|NpN9Ko4hyBhQ5<#F%c?8NNFRIwTs>)RJnSCgE*_kMznwn#O$Y>g;hLc|M*ONwx` zM&pZ!+`yfxR!_y&(AJ=?xhp5(&ER&Ndu7AmWnm1{Pc(fw-mI8@IO^9hL!!p=d1#mZ zZ{CihNcz0}L4Dz#Pq2-Jx8ItV)5K8*KQK>*YpW3Q)wc^On_ze-gV$+D2pG0cV1N)w zLY$Bj2X zwN}#|)Sne^S^~ZgtDJ8a7X7CI<)W7(%QIl~dp^~ai!gUg+u>6RPU3Gr;6j)4X9{1? z3te#=SYl+*Qbus-bs?UnnPzy-AnQ&~thl~aO3C1CUC=POXDNk($TgG>!V2&h166)y z@^O^UsjWb4A4U$&hlRIh$XA!h)}KX>iF6j9?pF$Sp#oR!yiff~^=@TKi*il&$U8l-N)R2MoxcVLTa}+|daf2DP2Nk|I%+X>I1j z&Dd@(I0^)<$nc|uLfKQT+^9L}OK$Fkj^eL&IuO-(M*EG%cTo$^QxpXv5e`Z77Ayil zb=C9m;@yg^zrSIG#(PUGHHCj6R@NR6TeXKj-y_+z6#)VGH=IC0`$-WYB88?DNGU1> zQmV*6KT;z;4}sCU@cWpj4z(llD^IhGJmgs`Bln84XV_{M0>-fpPh>(&c^X9cN4~3< zFT`;~95_)LHUT^kd8!kE-}uaDbYM}K(d;vDFd$Nip1BJzxx)AnV1T@tDU2dG(x>+O+zuoMEmLXFKWPvF4wk?uBQw!c}?gWE@qCtlQ7S zR`nk`aLg@W94qIIA}4X0Kxv4ADZIR^H2fJ6+-%{1a>OLHUx*sh(w_KigK#}h1&?eg zYMhsePMza#SMF`WGLU_W=iI!AQ$NAQau|Ry^WN!fsCILs$?clkM;AueuBy*={J##=^|3AvCdp&Dq z)hy2xtqhLs_@dU;F3@YBGE!o1%Pkcj;i6k+7n~v*~rrw`iZnNfL z;DnLc4m&PrI5^PM*xeh^gmBgcBagFXRps%QF$j6uY`OX7NQ%Ay@9b|yuoom_fC6s-W={;pbq!z-;V`*l{S4*5grM)-H4@yfxxC z{7yDBW;?cej(?A`p&}D!Z!(k(wyeEbdyup0-HreC+u#0{+2!UJZ-dRfAMoym%65|9 zV$In({+;H4E5+;%FN3O7os2~>+a6U*zFJ&I(HC0O15cIL9^1zG7zYoJE33bcVL(6Z zJg`C`pzF-MRoF%@v@qaZ=!A5ASExA76;p9Ab6YU7xl_u08#uwc>{ja`~v-b`t>p^PtbQ-<-T&p6t(-{7ZL5C#LR)!mp-L996#CIgd8Bct$+ z0J7#V8TqDS<*1QcG1rQmTV&4Xepx1g3U*+j`IjE4#J}B2#cVsw!h#8i_#a0O=T;4K ztA_m%rEw|*guymiu#XwGS{j@O@MVyhXtC&N$Tq+)7}8W1o;gBMDq<0zLH*7lU?`1Bbp6mam{1Rx4gO{twTE z3U0?cBQEo+SJC`fA0i2;)?;j9PWHDTZ#|wjVm@K_h>$7dt%rxcock4c(SmlV5E)=w z@a_rV$GTyLv|u{XjAd?KH#1ILH?u2Nk*68ohP4Pi7`qyaLa35*)D!f$K~9KuN6IUF z*!MCQfF5C(Fva}Y?r+IDj(l6i_JyDUXD9n#g(7AvG6V6&tk|U7EoSfmAWxu(xsLSl zQOuMA`~#TyVETylF9zRoifuVffS9j1FMv+%@wD9$XCGpm?1eI-Yf)sYie5ug^Yg#q)b$TYBC9@3K44v`e$ z#N28>;kZ!XR3?@Ia&jw(Pj?0J2@tCb&W(VPvn31dK>}A7hY`{!JcEt-7FS&rTyIUMdG;G(gPvZ99?Q){^jY*`Ox*ivTf1Uc7r>Yv zGN&2$n()l;3ox4IagZV^W-G591bDHjlohKeDCt}bm@L_k0npqcNP!iMv%k}YEgZR5 zEbKHL4a!W>4F{qdPCzdln{RIYK8f!|LY|MgN=#+-Oz0^dO9X{uaO8L!Hdk@;h?heU zYWp$IS_=)^?g7TLFx;N>tV1-_u!YXGjQ`!j_^%MN$Hcd2AxF{3btt3Cixpw-f-%k2 z!{MUhE;cw^Hlw#daMKUt_L{htMJfFP_p-I~I-0=?H^O}LKAEAk=#JQ*oC=%+z3wOb7NxY&BCggHqZUg_P)riG1b@^ zv7hZjE#5i0zltiV$WLbmPuuv7_ajTt#qoBaYMhexqhBnY?N@RlcF$oyLoMcoXg%hL zR3yv+LbvI%QX|)k*&pE568wuRBsg?@3ZgfxoGwHtVn(f0vD{9s_xH$%MFZgvG4=ld z{e`r8m8bnxBnI|K0aye%7O|x1mgEYsfBFWg&6-*fDT@hi%XlfF?=sh7k;vyrSzO*$^W1J_beHNPD;2GP zn^%&>IysKWes=ea?oYk1w-c9Z=WOSgTt^Bi<@J# z)H9%x0AlWa)Q4n*#)U5rOsLeVP2-(Pw*pulH! zEBHT>W3&y4aupCTuygDRHsvFN=Yx2FU}J5NMOBShqvhC}*t~GiVx3ssL>G5Xu*rcI zxTPrHh5FnV<X?!n^Yyo-i(BtS#aVZSkRn{(C4;sr5xR*nV4NZD&%51& z*;8JjcRRgh@)Et8rK!xd&$DbLWf9!bqXl^3zhq<*7q|`wh|Ysk+X=;F>!7 z(moWk$N<1kScyy$Q6&9b?8gZx5e2yGc2>)C1F|rmL^4TGhHtSDh)p>{lN_EMkVyFC zSB4ALkmOf#L=;KC5w-VL_05bhLDbCzMiMoHsurtcx2lo8bt$2{)tpFW#dx@jLXfnG z=s!`hf>RNKiM#&UdRd96m*g>$u2#{m7GtRlOUC}OYU9GOBrPgNrmd{3~H-_mq5>xJZd~fnPq}a)HB_g4OZnQ3)UTSM6>rl!Xs`;G0}Cr}2Sn zhmj#SUxg3+0X}#0fnO+!cJqP%*Bb!(7x=)rZWTW8%i#mZr69ryz7#eum&$=~G{yN1 z3t4Wgq^=Q?)-To?0jn4DV&M)*a*JbqK(98oV6mQGp4W9=F*0uxmW4Km6pMg%Km3e? zmv0m{JEnZ^I{au4pjEKPIk*C=g24|gr@e}mfwd>Qu1Y)?bRaEZ2B^jfpT26Y`O^Rn zKJw*Mc)u^Y0D}%w+fRQ8lOf`Hj!IA2Fm)L%7I+z>*#1gf3n9BdXiIhz`gBV(wtlJYzr)gpn2h6flQc&hhQP>M<%575@!Av zJ^|W&G?b7HTyQ7K!nJBzhC3luz2h@OeVgoX)H1QHPyxerK>~KllL9ilhu4 z;4iHG-yrxSZL|n@-==H?017sQ$5*g{BFGY^RGfIfIsaV{KV=srb_h}x^uy}eE2vjO zFA3tO?3Tpi;qOu%#gdZKo;j~Tv}2Wju4s*pwO`*FA00|+4bc=3lhqopf{j;|0#YCv zB!n0?kwwD@VOF90P1zD>C}=+L&cD7jzyYixv;*pvt0N(hpc#fej|TbIH_JZQ?EfRp zviCySEY%#rAiMwvwf~~5c?R!!iZwoOlWCS)-M8U|iORWHJ>Fd{{C{DJJe;mx(K*QQhJm5 z)lkW6q>N2+6Qsl}^RGw_w`Hm&hiacoLP5;tcB=@bD$&d}pGrv+4D-{GLN?Ecso|TLKBkbnNWuSE#X)W$v zxA^`VX^xb!;S*rr0+_|pGZstB=EQKIiH*L@{1n%X#gj$as%7S1lG4QMA@PiD$T*TM zlDG#V_w=Rda$9M9_x>hWF4;p9mP=_%!g9I(6&@Q~S)s42!ktyt&iy^Fb+=mH=5sfz zWg&{eu_kx!gJS3Y^OuQf1yKB}cI|Hx2Fvr96kvf!r@wHx;?6M|Adl^o+xT>t$~Ti< z6qZYGIQ?_B=v{`vl}^vXx#ayCvMZS$P-}aM>RGjBmlur1ki@ZY_Rh zHsj|CcoMcbc5rUo-Um7QVnb-&n`4uy)c%~Kg4D;4GsD_PCO{)H13RhIHjGWe}u!wZJvGwE*G&i zhR2~aYPMj4BP8eS-JC8t#NexALE0u&J7ogqc}(A3_6L0-<>s$BeG2;nD|ummz@4A4 zKlUcuA46Ff^E(_ENmF@Y!T=fNH`Y*12?t&v^6#_&&7Zj;VGwbge4YFCd|e2>xKBowFIH%(|C?jlAQmN3A`Rbmn+OF{FcgZ~^$m@5Anj&`0SUQl{dX)Kk8 z&t#jTQDjRaBHLc<6F~-Ip9rC9Y)FU)${rp_DI=wze<%6^-mwyf0j~Xk(}-<`183$m z)aEz-%z~=%6>y_FtFhgPh~8ZwdOB8KbpSvj_N)-WyEZi;PO^o8$j|7S7yZoo-hxlu zu2orqu?~G(VIIPyZl#Iwzteh#7Z}P_xHzd6oT-v^64HM2cGCrLO6wHIhF!l0->LVDT?|`t&rX3=raTrYz$J7uDpaqaTYTVf-j@dA&7^^09tSx zDVXIcz@*zMCQ)1@#iT}Z$OzO7@{V(!A1d?>niro3!mJOw+e>TQybtc>B&@(d7%}I# zE%Xv~0tbp>=Lv7=#Zg?{9R)0h4`q4O-H}Y!0vsVvpkXyULo0BZXLQHWgA5c+A)~A8 zKCH{qups#-4?PPD%g221?-hh>Q)=a7m+-290KKLEyegbK$7U2Q2h{hJ=uX(=!v0Rd zY1t4OqWcl8Mgi=KO+F|NlVb`DqEBIC18r3St7a>v{AxKtUV{=ZAn6pWpK3ZEUZXj1 znnuHG$a)PaIEsiP=}2f5tADxfClPUDK^fKtTfuMs<|Xd9xCUGaLSY8M1mdRBl_AoMCo zu3}eoRf}`?FQBsOuSn<%p!oe1^1PF9^|ohk}7D!j@XnJNSvSv#2qGu2S8aP z$Dx=%WlxYJA@rtbK9aag^gP6>;CvExBMMo=KJ*^JU}A}F80PX6BppGpyxi=liM~Du z@6@n5mSlBRUDdH%jVMxu(&%*4iM5*b&SGo<5G`b6x#{kPrLxXwbO9e}#;)N*EL~p5 z-`NfPo!S)CXWxmL_FmopK-9lhjN3PGuBVHT%5}+f__qR2?K+mdVLi${hVoA$d=}@i z5VV_XyBFTmt^N;L&d+xcaw=(juEGKC*@sZ>UEOaYIBL#FDlUtX?p&5A@8s|7ulPF^ z>Tb3jC7ik+$A#OX{ydV7nYGhAI|&66+zASN*rB=`nik<8U1;1KKU*WGT&Sbjd_f{- zD)h)~Xtdd*bbnFQFE!Z6I3ySrm*$6gO0$co1l=L0GN(r$_zs zgkT#iG_pfgE=-^ykIUmC$3x?tHfUMkL!-{F0j66p9W@|LZ*0OZ9-0xDqq^a{?*XJG zqkM`9z$$eHu&x!)IZr)_5I7z}5Y!*}m3(>(f!@f47P2-XFkitPGE#V2esVAdomV1bB&0&}HpF!R>f%tW%{yaSAu9+<*VR zIbxSox;sEBH7*n?AiESAcH85+mdnj9Wec6gPfQAJ+b(MA(zZ~t;7%+JtG{IIRZw(@ z`u0Ttwc+7?mVhSt8oIpZPhXUDjj-sVQtd_uFjy4W|@CNv97kFina71K>b3Q-cZ0&UO;ED=;DeWkGbaX?zCXSNumXo zLl=&t#DPmFXTJ;_@mVM8hqi&SYU0JtI51`nOnTP5$=TvMP(|f82_Z>q7jhP};OxhQ zoYw*uJQ!wuX%6Q9H)(NmC>My93xOtG{Un@|F+}RC4(lr@FJ%g@_BqXp2pm%po z5+VXU{o4=)J-APoSn%=+?Eprv!D}rDe4gc9HUjN~8q-ET7xq67bHX-pn;VZwJkWe7UnPtrMsO=I@kuL2ykK}5Y87r$ctFIt(yV8) z*oA+|iQs)CMg{1YbJ^(=Z53wckA~OcmtTHJIh<ME zl6~?~H>2DaKWj4=?{j;;emtf%;R+D1AK%YszJ7e4z!yJUjrYia0Um+)8_4ts{O6y) z#v}0GcmsLqncyP+3Ys|5o%Rjn2^(-|CxXlU$+UP0`5$%}LxcZuAy>Fc!JnohOmZIc z>~!3HjQgN?IZy#_-ICu2^q?;5`+&GddI1mg{ycRL` zL*724vow-hXdV?iv)H6~Ty)b_cHFn@Gs5qRCjrUJ+fF)!`kL?+Ze8GsAgHqI;mmQJ zB`#_qT)nW+G}LO&wI3R6ixOqdJ0dbkj2QK zI!P*(FTH9D;U9|RW|jqZ=(3Y)ZW@*yeO`oBG>DA;!3Zl(2RPDTCb<93@e=uRBUAGq)}dpjlsT} zB{|+#vw)#G^wq?|9D#>90ts`7!B@PRbt`KgY3;(k;@k}w_? z6vg=zCsK@h zJIW>=@&0i=J6$5dsHe;lkIbi_5(&7!(4BZd`-=PJ#Qk)9ujK%SXb~E0%h}L`Yi~s0@*-cM#(#94gfVmAD$(|!p#LjT`4>vLwHi>oN zMj4FB>d z9*%_#1{rk*m#$eTM|mJ1btvFqV6=sQ$!Y-10Klv)D=IE&frYd=Dh9rcv2kRK-3qZQ zqv9eh8Dr;Rj3d138chxz@sIM%v%Vj5!1x58l&HBGg5jNkkZqxsg}W@p*CY6HQ4y|0 zEMDT&m*Be*OPmnW$d=&DZH>oo_26X^+26&74suoAM9)_o$Ij9F;SNvSf*KWjh z6dM7(j=MnPx8gKX_F6y#W*xp5UHeB7UBB5*TJ^Gx_+(2Rw{oH84r2;;!wNuQewIbk zN7Cn2`&UUXY`f$OLKE_uN#v>W?Ik!(mT%JeTE1qv7S&@r&ctW2jEU$nc%4$5G4bLR zjKLb;wX5LK+A40(O>e?GdfXmFd;vZ&&hIB}QP#YI1&0w3Z$DfDpOb5a9d0O>>fkTb z1b!#F_#1-d8p>mAMm~S%yAxkhs>P?bTIx@JhW1(F6dzD3*{hVc9?5DoGksYtYJ}gp z+-}`e7arLy>>?MohGk? z5ho%}MqG%v7{Ti*-dslV5XoaCACY`U+=#dX^&fEkqn5m++#beAEO~Y5qIkog_Sg=* zvENrzj+bBm<&}p&@RYo|>?eFNJL1Im6?2=!jVZUle8&7T0)ID)cY#VB^m>eQ^7m>N zf2ZW?Q}P)3K|X(f=;7X!u?mmpSM_E#L-!_B(I|i(ud$DZP8*(z_=v zy?f%)yC*Kad*af&Coa8v;?lcENY979t;Tlv*uRIMT6~Vq>fpaa2cHnhM+bi=vuFQS z(ZOldtA@R~Ot)iY=xer@>ApNWV-Ci!kn}Y>8N*rJH%X3$6>}q9XLK_)nPIw>iCc`QO8lnL>-?oChEYwBUT+> zp^j6iLq!LT*8_3yWBnTmCF**XF;N$Iwd&f+n5e6rF;Uk}#zb9v7!!59%$VQ@D*P3Dcn_gz$r7r@OJ6Pz3Zc{ZTm^`r)A(FN5kaT% zxe5_Mr}4Q)A;LGrTt$eW)A(GY5kaT%xx9#=)A(Gd^VMY!s|HRl<>KyjMYrFra*^b_ z8?BF(kne7^JscyxyV3ISi1_YCyQ{ef(dud*LbN#?Bfh)Q;wl`Ace{_2cOODEa7|?B znaGB(MPeX<&ZU;LEQQHD!kCoT`gVTn$^7uijM_m)t6JYFCYb)u zWP=hPrmoU0Vus0Tk4(h;@`AaClgcD#$!kjoV~oE7C>!3-?>8Zm>nMl)+!x~v7hkjn z^vu`}d?m?I^4hY)V%?7G_L2WXO&@V&cFFFg6Ex#YAlN}A(Kn)EU1Z-9(BXjx_oeqkZM>d) z#Swf>67G{+QAux^`VBIYJt?U_asBG0?J^w~F1*eNulmPPhw7_g=T`r~&ZPNR!c_lI zM7dU}hV_dxx439x3v&^|wywr36MCMfaNSHSM#|+#!OJVWVlecYIN6HZlEltj=yN1v z*MsY#>dz3;=FVB&e8Y2(!L%L3w`Mo|5ZHen7PbN2Hxm?Z3I66!zyJ z2w}35vA&7egBUAJtGQN%0}>uH&97OMp7QU#FM3 z@mGMqLi}NYOuHI|;iAb9-)pcNrLYVgMrk4JNbyYvm-vE1u2JfN1!uKVGO)_VxA*Y!9mf`8d&z$EpVy4UIx{dK05FMk9*r0~nu=H$^b2xG(8iRDg1?;`tU2tu)sPzRDGf zB5^k(FY@PQWQ4F8SiJ|yJT(=1o+%h%ISn2_L%B+B;(wZDB|>hH~Jbv9No-mkvTYy1b(p92@;eX`DQgz?i7^*^iFXyo`fM) zo{$DC&ThK`c*UI9Tr+@HTqGSoK#d)6*S($=A#2v|%17dW5~*Q-K{xw6+6!gnydb#dOnJ*y?o6r|LV2zlnI_ zjXj~i@`Q#3vZ4TqpW%<~wrD7mA-XDn$&+&6ipD?sP#%6};8R36u@O?8_`z}&_2H{S zpWuNSIJ5{=RUf5{ERY$jdlBd(dK_RwGKdJR0C81E@%IH;JBBJ21JD)9$IqfX-T)!V z2!%kMsFX!#;32dEBvyAy9v68CN19ilxZq+x9u|?f5a_A;vKtpjb_Lw52io67UR^T^ zWM$iU3xuRg2rU!Q0a;Cml!g{zJf~EF6xTrf;ai-7iO^_?m|VL^ zmrF=Qa08^G2Aq-;brQK`56vMs4=n<Y>fTPMV&;>mI+;gxEL&=65?mwuD~eS8Rw%i!2&S^h9W0~)^#l+k*rBD zggn+JnnADtG$E?h(0s@xg%1F`*b77z6xAZDF^T~%ys#udAO>w|1jX7!EubbeAJn8& zK>CC;brHrKXqQSJHHN;jx-cmdU4`=OYHTJ``d!_Lgm9RM8oHze>B<@=dg9Wtg)Sxv>P|3lroz(-YHd;bXu7&ST*#Wq^1v8Ea;)+n?l4Q*$VnXm^Y5anV}R9Y>i zq7@-QtXc!%Hr-C4SMBLV`?ja`ecM{kTVKITH6W6xC_$~@t);C!Zj4sERMDf(|NC2e z&t!4|QPFe$e8}v*pZ)CTx^B;U*0a`S>O@r2&k%`J&-faEGeZH(tcpH(qHmPW&kVj7 z9jXmR2k?Y!sbCslqoZ@UF9*blw=*tNO~><6)B^(S!`CI$I)Ff_2V$|8gaeQTA)ta` zQ;i#G63Z|^l49K|%Yv+$eVJPD3V+*p5Y?O^8Zlrt)Q8IiRbSHCHXVhY5v86DHx-g! zLlG7fhA&~R9v~%AMUI)AM-n-HOIf5SnGvPOGgMVKf3Ix$3?{nM-c>=+frQ+Z7wD)#i zZVJ-+ESkug?Qt#%%>n#41bONWLHfb611yK6N$N)>AfXL%Fh0yR8@56zE$~_g^nY6sX#L(fjOGv^G6_ zG7ZtT9-+)R5F+2=@m{$ylj*p;w9wt!dW3_Izx&$970zrc-dJ3C5^8|V`b>9S&wSRf zMUk4C))Ucg2mVl5?>a?WLU*D!$PLNL19UvQ$lcsNZoh&y;;#)gkpWEk`vFM|WoX>R zKh-WnbSI(0`5WHMV-p*!2|`@$dUbta>p{1%P5?0O_nsOta3iK)d4M6`&-;lL*TX(Y z5Bn6`bV`ck9hMwBVw-m{niZgOyZ71sbTj<-_NGB~KkeTJ-`OVbI{&-F*;nb?rs~57 z4ew<=-sLFR`2LZO3c51BI@rmvW^eY6wPrIoxt$#RN8%^41SgSUoJ5vuWzWIe2)ocH zF1|)PB(Epjow$o+Yv%DJV=<<)ArmXap=85a{yO=t+pD=kzLxIRin7K#Q0hE9DB77G zTVt~E+U)&Ot4yH95mqndsUKpJkd`oVtyz`};xW*7er*6_9jeg?P`1l(2zeC*GW*`v#s>(^0a?VQ)Fx zRI)0fqt-S?fF4xSgZ}iRT5W#GZ}!3l?PsaFo@{%ES$n^*7wtVFXm3Y1H(bJ^6uI{u^^Vtc%8&egAiVkX83WKPNx&5y>5Yl-*e9&INOT-=q24nVr9C=I?>l@$Wc) z_p}}p%pWzaZ&gjXIn1k5KwPx3_iuUAm)$RRAG3~~(&^I%cRe)KhOcO1*mF2FLYz=d z!IbP2kX%OGK}8C^snGw(iVfg18*kFsm)V;Es!f5dnT2PJ`~EkF=&!RE{lx*DVo|Q6 z!G2dkd;w~+8Da@=qvrs!3qo$VAKRz5%k4vCPst?bzEqPaVt=Hu3elj-ai^CHuTo#vBVBFe zPoe`UVWJ(dPgAW)KiKaLwy0hVJ%=1|o?ANqw*e)jrYKf;nQmw9E=vC*(@SxaDg6w; z^o#XK$)eRd462SaJE@DI3zMaxt-ud*o++;lvCqF>jgCS>d93v^p>Oq==WD-Ky6{Z( ztwsP$2k|48On?6OtB)>l?=b`|8Z)4C$<#LobS`rbY2muLrStEXWgzfLQ5s>;8x^Ob zXSj!2GpVzE;;3Ox7rUTvrmhA|CXHuR1XhGuXb9w?q+3R`Wf~l>8P*DAI|8XK82`r5 zEv4o0rT4ZTULU#>aV~V{x)ZwFK8A=#o`#yzaNAR8K5H9FL*F&jDKWxcvTnywMC=C8 z{qcZ|ocH}9>>G}KTXAsv**7p?6=y`J#|bLy?jUML+Rfy_ zr%w7bDzn~Q-&iy1fVRK54VAUyD?{I1N52oi$!zcb^r!cwSbAY0rK+eCgQ8aF%KBJd zSs^SVz zsbHh(ox6KkuH^jgwq2NX8_MG~<*mojF6?jXL${19S^7|Gxw=;nx^q1v)er@f+`F0m zBF1WRW$i@2S#2i?L(0YIm>F>=n=Hm|M-ffcHR4};f1m+XW7qHn`m`kk*GA;r(rDd37haW2`HlvY=@UDz<|M=1f7CR&Z-T`OPH@~YiK15q;r&3O zmV~I`W*nlnpNLv0JuTzReF%!x<9(ezXC5H9R1FSKYpCziU&*O~j5rvGX6lP!U$}5| zV(zPm74J-9L|_tgA0+RAtq1srPY$GtcNCP3ph0?e$Z|Vc_h4xGwQ7QUU~=xd8bbB9 z9+Ezdy;mr$+P%fQg|`e)<^c`Sc=w(p6xiqA>`!GL@M&TqJuc)Fy~x_iaUb>0W2fFp zPiOTwx!jws2e+}hDScJ9Ru$^`J&Cz*BQ5^PDXNpP(HOGWWGnx%dSGUixA)*|4~KjB z-YU>utisIAVndeAZHky1$(`0XH)l8*K&9Z3MPgPS@j2=9ScLukTUuNluT^F0Yb6p% zQt+V0-p3@a6Uxa z+AI%YbrQ*F2zKaQI6s7R0CT?w9`%gfOZ{yAYXmwCEXt)jk%jJn;x`_<4 zV(D*WT-+nEW_JH%iXr9BF}$HdP-r;e4|Y2_L>1*tm!Z7Z94BYIYR#Su_Pqs zZe*Bz96?tzI(2kGJpI+eWa_u(B|n+|W_7Y?*O(`A>v;@!XF|=4ps+U6ikpcRJ?Xhf zlM6_aA)qJz33ES#Kd8Ab8_jYJYW#-Q9w>p`|TC@=8!-{YhjtGz{5 zE-O+}JnsT41X{!g-EntABIP^l_byRG`maKa``aSq^HWxe-%_kv4&Wm&@HU#+B%DcP z9=u)sXu>7bs>6+q1lPc?0 zwtPZ*Ty4DO_|_9Axl`*P$oK4q$9{v#d?q&ffVL+vVynw>ZR(#w{n1eTWlFX>yqbhB z4OktM(qn5AMK7qDQ6fDav4kd`nq*HrFZtOwx72M+;IyxKd{iZti| zfRa{*K}S-gKD~C!Q0KeWpSwO`wBnLQHgXjVd@g4UdT^4m_t(K(OT5pOMc#$`=y6eVrc0K zC1t;O$`V@_$~G!m8!2zQkR2r{c=>G^6*}oLRJ(`WacE`1LUiVAUAC;petrHVyPwJZ zw)ypW=_jEazmJdRA8VzUO-M@x2@4O)%N5S%Vn0~34Y2CF=XcMGa+)Ecx%dgYNi zDjFOB4M+Kw$7-pbrGz&Brfd%ywXs*@EH&cYe3^~kWHrP=>m5Gq)k9ZRSOT8bNH6JKe(r=ZdemFPiqkNMBbTZc}%gy}E)7_$hQjwcO;b=a`zn zMTb?@`g*j$D6Dlmfo1o@WQ>`!wQ#-k|1ms$D3?EM)t0To(lunrllidB9<; z=(KmiA{$8qj0u(c?ku7k8({pRYye}(XD(%Fkj zz+4e#oxclZ7jMuw_gj;RGL%en+~;;b3G^jyBhBFB+mMkySvD54xY1^KS)4KUr=jVl z>@-jtBf;JXr$061@jLiw)7_Q7)DXp)u(GDk)Y)sj&v6P*^YB96Jn&84G*G)nUb8@5 z*-4-><UlWhB6s zCscbUSp99m6lJO1Zl>z&yMy(t>C-!xAA=}%-okVho7`mIs9W%KNfjrQ;2m&@b++V@ZjxRcAx+DEX$vB z8D2((H^B0!5DD|WI^XPSa0&{#qp?&&vWca}#}YJHy99*LJOIfXPpRfi?NowtX`Lel zb^qnNuTM6q*xz%AS;M0@X&WlKHt5-P%lw|Lt-XBH!aDPSmtDWp|4zrnAQL+)%WbE# z2kEu(b$9uu`47F?@T7lQqX+c|BGwcI8*88Vq)u!6n+;Gy59*Ij+9@?iw_Q!-&Pv!q z6(^7W0lkU*=Z?#yp;*@@g|vezT83`L-F+WO2@&YiX!nZ@Jw{(KEV|riM3!K>uTdeb z7cl@PwIkt|I7CcqF27xH;g+N(RTJtgHEFEta9`s(rKw5dTqm5G6mcUXQ;o6Ob4D#Z z-j`1#J?m&mX}4blp}n>TKz%kIUD0O4}9--Lg?Jw@SBJALX|h z-E8*!Om3}Yo!d?MCHtkp25qWr=xr~zxZmuc=qya*!mYgV1J}y%oDlokx^zp ztM*EK3)))a7lz_$H*;X^HTV{-(rEMiCW3i|T*$AbM2 zo&D(~lNd5fP7%&a04h8Fqle36smB&M=X4ZX2Wvj=92xcn)_goR!z^ZQBngW?9?QAo zh!Eb&xIspx7&Ch9L0>GoGeF52{pdX2_jT%hP&#o+q8Y zyH_dl3e@r}b#2hi4)3c}h<|$$?(xpzo{HIVwzo5ef8juk*RWK(hm>yBBC|2vs-LsY z``&0Zv&W zHuZ0F-iku2V9T>H6!u1~`}|c#u?dLF{F~U=#M53E?O0cY=gN8+lGo2p z4Z~e!VS+_?+oQeINiaOWhSs|D8A0iP%PV~LY8B^}F5#fj5_g@IHF8PREnXty^3(xV z(vz8uXg`;HLYfO-4?YNS*{lgDkPMyCyqnS{OR4=qga*AXIt2RQOB$Nf6$#w}CTlQ8 z4#3|X_bg)#vpOZL?2p(sKdueDv@Y4Du_h`hc3}FM`{LB4$!g|iJ4)^BoVC`eX^}kr z1&3%fUq^!dnlkcl=5GUJUVd3QP)OhBW8)#^k7-Sy^Uc{!DmEmd=R{{_`>r7vxL;~Z z_r=d?MF)U~%h*HHHBp>&-_Q;G-rWIJ*@j@>4bDe&hS0fzpJvVwR`qbxvXUD-6!_Mn zB%E)?J_;l}Q-;4YTV$p?QzrO*cBI5Zgc>-qFq)|~OO0;2!S^>nk!}2$KSB|*8F%xv zMK_O_J4CFZxW7N})`bmL+2MR9d*M#K*uVqjl*zuTEK%asZ4g)l4z8=7k#ARz&XV1e zaJSRHe}v~38Btm?LZl%yGsNx3xT-BOJ^L$vFY>p8XAFU4x;uk4h^)6}Vpug3qK1b@ zq7Y3g*6&C3(^%r&aku$4YNR!s{q>8U%!3)HiB6hT)r@{K;cM<>dzvIhFKk02q;i0GB?^0Ca48Y$4v?GIODi3pzgWfv$yEi2Hw5;AW= zHRHWtCwyXPf9!!~HfI1O{Qmko<9E1Y*RZxzAwb}_kL^i0THhnip9Z>ncYJp+&gX<1 z;g{(1cj!XkE0^_tO&{*hfmnmSe--Y};|37y!~KMsJ<4e6un**Q>qE>iy>g4zB-86TIlLie!ae8Zpbt8IL# z4^COdj>6K)m5evNm)@K>>kv|j|&c=a62L0^`!3T?4Q_JP198kTudN2@VFL9lnj_%_Q+wG?nZ!_CUC1IAC# zgMtU0eot&AbQouc1|roqm=6g=D9A5fBRfx^vM6ha(ywPN+F0EbovN`+x__f%ZTqt+ z%s9YNq_wOzUtqSo;2pnRf@!zcM0BQvJCdl@n~1BFIfS4e4Cfq4BNi`M5biTUi7K}7 zrag+PoIKv-7FR|UF>=!Y2_>vD{(#_Phl(C&AnfGOACN@M>9qH&zl;iuDrv_(=V~q` z(l}}c!+{o|!u#gAVg^bkV6WSQy+}H}jiS7NOwZ=eoL+%vGu*L%(&YJ=yX2+P{W-5gvGcMG?AM{+ozquSzYdL^kzK`(6YSw444sd#CE} z!XMLa=jW@p^%ds#2S-dtwbN3K&w%;)h8(%)=10Ig&sp|-D-u~81ZFwhQ<06nofwCkZI2cqWGrdXAPHduww!WZN~6~$!-6;KV> zz8LP#Q%%whaFKF=i?jn=q#ocR{XjGokFk9r4^u|92FQP@sg+^&&81Q7cy5js4IuUb zhS+nWc%n0;7O|e?O?}cw>P6=ZsXtngk4u4OpB9w#PdT$`+WnZAj>U;55 zUPL=K6g8zU8WF4ed+2KU72NTK96|iS<9Xv!Yy@%8xLkDRp2p>csRPF4(`$0$^0=s2 zFfMuPl>y^3TH{m2&g6jcvGj0|o;N<0zH8nPeSa{$`QT?2NJ%d+g8CAXGWx>F1|Lj zq!;^J$8GBrfs2S}Ic6&0FJW1rwKI;{C?w^3p&K>3TBsL-iqW%v(pj+nZH59)bJBBu zj@Il3%~NWg7YH+w(OzP`yB4X{o3hm>fR`dRBncSo5(C78VrVH|j%Y)?maE>GCi7W9 zmeK27ec{ms?M+3TM2^4a#xot;Uv#?S&(MZ~j_yKkwaZeFiZdi5GDi8X#tK%nwUcxw z<%@t>dxd1`W)l>%+dZFu=~djYx+4&vG-I+*q&wS;x>mWnYU3{~IM5`aXT0-O!{We|}NLDSP8$Fml zRCsqyV;)jh{-tSIru9h0D+L<=B4A@bqPCC!-tb59E8YfRm?+vj5Dc?oTSZn#q@`8< zeazi%3`kNU(X<$uzn~vun4<0@iS#OQjzoHeNpB3A_nRbUX0KWR!Eq(fEe0`t?#P@x zJLVw?ea`By=lWA+f9$j&w8Rp!@wr=QOszW)gFjkJ6$iTc|2!~A@yAYZxV8{L<0{`_D_=6{V> z6Gz#5R*>0p=AWK@pV0dXd(W}a-1}3q?>Q*z`Yx3S7l6}9w+fZB!{I*WctjAZ- zlE;t;5g(s{BdpTeV|IP2l)XuVytunUNixFnWsf&!Vf3;Q`E(qSjEIN$N@z)n?|1xm zxY$qAGpJopqk!U*dmr3fB%Z?X>f&~WvrK3rXm$Qt0PkD}iK z0Fm!BS2_F~-5)=Pg8!lL^D{nR`+z8lrb36n&x7*w6$JT)z|Vgej0SW;^hf0lfuDcO z&v%obZwUMx68;C_r@_B)&WHa&cxmu&?+yO@;iK?-zTn^98~pdfLwhgyxAz0#|1zwH z_6Gh91{*9{gDg8d?RfkUAJNQRp{LtY4x?jNb zeO|R1aO(&E<4DNDKPOrq0>(zJ>LXX7C1v^0sx`8p(74m8e%xtCJ`_F~K&wIjs(##Q zU4FisgM0@4tNL*#Z9N5~GPLCCAfG}1syyyAzb#8nFQi=t^{eu@(){V!*G+1+LHnva zZZ!Y1S!g^_?+w~l<#D0;AIZKy$f)(I^3c*xF$O-x?gHYn)LM{h6kAT~0&;C~zE8lt ziL4onVB;)0AlR4lIdbt|lI}&DWA2q#Ar4+)oW=(0)Xv6a|##a702d;`sdgEdS^*1R`;VdYLF^f2R$uKPv)P!ymt zeNiflGE^3eH|Sl~9#v9u3D1Ef|4R$4C_7%sYTkh#ZfGk>Q{ z)IvsD6v@R>Nt#UCI{^aV!v@O5v+E^Yu2PG6y6e{>4)_Rrim#m1*{frzi>{Se--RhB zSri?Ih%PbLlTllZex}N>?R;(79tH)Bxz9x12ja_~4=r6qc7g`Bws3?YwCwLZWmi=d zp*06PbGM+%=)sc^o{YeN31*g9gYLGOr+TP6Wji_Zx};xKxPG*5&foFXdNa|>WX0%z1961kREw2U#xbMtL=-`_Qh)ZVzqs-8m~rlQhmRW z>MSyl#oti!OyGu=V&^xN-wPFfjle)a{(m_rah9UW59IGqSY@QoD90L>55h!hlYJRB zYS*LDB7tu5ZTu#?RbfpxTecRZ-l6AC@6={98mpq5aWYDr>9yTpDIX!lQOX?eJWB~J zs{SDbx08|2%6wk=8B)WT88JW9NSW>JS;uf-vPTBNoQ6!e4}aIeMi`^DN^# z)VD}Vx<$El6qvdaJ?1Da>%Eyby)%EpkNxFZP_a?IzuBwdHlRf7P7IOK>v@?t@_4DolHS;j5&)3(Y`EF0Us~Bt0yoLZdEz8Yh0!;5 zMPVe}dn9jTX;zNB{bIt9Di?A;!`$`uDuR-7B)3Mf5@SkX;q-l-!hb^Kcp=G8qNt1B;LxV|68xB)# z!HA+{ji^fe(ty`^-$PNJOcSA=H;|NHdxv}mlA?(9Xa71!QKl)on2}=Hd-HymPfwPB zlri@!R}CO1((J6%+DA}0H7l13Ug)>~1Bl79MoeNmJ{k~{X1eG7?(Q5hIs4)q zF)@HdJAW0lM0uZn_+{qN4zD9kMyb}(HMh{RfNvn@#W&@mS5Xh)26!G1SQEw>XIC(~InePF5b`0JapL z+pr-Edwwlki|a-o_z|kmG8T}n@$wqw{;CgKF+?>J6Q{uj;=r) znY{<{ao5n~qsPSIJ?nMVjuO;7kgYoodcUUhcE!0}N$LY@3xs_h$Bi z(j5a)vw;|sabJ_Vzx5>eugr%7_UkV#-0sZA!19teTb?aq4RmPckh-1oSr}4;41%?H z+|lQDC)WzqVfN^Viow#U^)%l!Ces|D#u!^Yax`NGIb$Aj+#`KQGjtzG+dR+6=Zx(E zIc~>F8ws;El=~PAgwAy`+vyh#2^_lQ>eh{l^+TQCI)_iA+KqU_d*hFz;NuL#R@YptajAm*5=vK%(~gcYOk2z>zo(80zdv&$gj+y=ndLC?t{#&XlKA?r>1sS z-gcCRjx9f^@S623>)*sl#kFqfifGCyCTi3}ZC>xEXUEYARH=MFC*sHA*{k)8f2`~W zsR_li<3;zi5%Kq^sQXXGZ7GEER8ar`B|`33Lu(#&&MUq~ZK+jTat&$iuGEXXG$%c( zTcYzBAi(SlI~ipS6|+0uu9$zj6?9Zg?fo+!T}Nr5r8m-xystxRrgoRkj@7*s>d=`z z=#$1O>8@&5K0Z=jEFkV}bc@3{UN24-tq}N8c7$Ebk?q`=(Q0fmI1zP6V@SNd*o=wW>4&-yT2gQF0fT}X14}7KRv8dwtQ&H0 zfcY8cp?kOIph561`wIB=Z*d?6y<7a8HfZ{Z{7NvEjZrGM#DnHhY)3~X+tHE9c64O29UYk*VWM<;WIPDZ zmYVVZ_Ncpwg>#KWfJ;UpGIwmI&?4!ZvIK~AC|?4-7>QStZ`pG4`4yYhIA`nccX#^K z=|5xcv(YWj$5Ou&yUv_Z<+yqs!w};P6%uvdUR%YR#B2YV2t_#6-dU0e)kD0xz4)Dy zzdBpTCsUZrFT&`(D-N@&W5e;gQ;#m_voBAkDx9uJ38etBPPk)M`HLM+d11RVip|ML zl^t7uqPGZ_3b6gPVP$*muTB^H+>BQ!vQCw4gZd=oW+D}57Z)cmHf`^Iu_K7)@_{sRNQ@- zZ!Y!qMbY%>!{P*Ec>{On#S;a2;C*cKvG`U;9w)7#FO4Svr?lNh)6W)t?QixWffS0i zJd34&(Y~-fxFlyGF9>*ePvv=Yfq7>LnmyNIBl|No%o`}15M?2mk^vg>c_jLSC0>vcK zS5y{fSOIp&(#6Y2M?D>Zo{XmpBip&kBWXCc)o?wuW+V@F z1^+qLWd};<6zz(-_e4*i_rS=z>@j7B6YSl$LAS7}VAx^t2+6|oP#H3?ys{t5=Dpcb zeXd;iydSwT%@w|+4n9^GqiyY6SKzLTddc}5)IXJJ0_Dz6<7Kp&pzSf zk1XH-AR+#n6U5UC~S3FG!5WcL7RhBLo4k}dQt|MCwIvP`8%;boYJO{m; zgijM2ex{-*q9?fR4m1{MW#@pSa9+lFzINY|GL z{@NE67qqc;6(-PG_rm>S*!5Pei>xVZUo^6yP1;I_XldOG4~V7bBX0U{Dht{U)f-NV z+b8&V^-rf@WQBpp21@b;aBE_Ik9_q_~e@HMeX&h~hUH z$Dvi)|Bm^=4T;jajb=MVQ;CiIT$D)z3^1-Uf`#>@xArH&m&vqs-1g1^#%BMMAAJNd zE91XGifvXUn2!J19~#-(Yh-S+ks$!V!0~YCE}UdmZamNw2jej_Hy-C}Jmz?B*A5tu z&wqEoc#O7$(6Xs{AL~6vW3luV1g@Z$Q>LnmfBG?do(|wb67#TcVDax`j7<#xaIBf86F-rr6tJ8)HdOc{o<}qILQhvzv0ECvclRG81XI z0g{DFXYA6eN%ZbQq+%fY!0GMP1BUN;O9(AHB5(L^#VW1;@I5_n_s zN6+>!eBb=y;NhDsQDA!k+`4LFoMi1H|oYNX+2?fW*zr+UGtys zJI4M zb#v+bzcgf$$PyjvS=RT$&Ms7`A}loQVad%Eh()p5*s|5Ecrxo}cf3(C|9R)Uc&XMG z98za}VT+x3*j74GTk0T%mGb>VQH(>>1-$FB+(|B5oeCk~X~napZAb4I|MhH6e0+jD z65X8ixD~s}?w1@(#kC}QSWO(}%M(HCChtw_Xp`EOr+?l}Z7j!V*75nx^6kralRv** zh%7;y&UhDX3hdW+Q@#u#Jsk>bAS52|0CZECn5>=N&vagHxNy@ z4`j}0!KD@^dA^{C=z;O~?@aXcE%c5@?IcAo7V;yc)yuPxPYkw@hv>Fmtaw2qf_k zey7F9t8IUf$!r zI1+$Ein#kywEZ&4M-S1!tYCDXFQhLfDV~mJ1*2%me~(b~fG-r`-@+v3cNB^q2!x`_ z;i4&i7;*RQoLID@zgV=5ogb)|pr|$vKWzU6mB-k%Vk)6!>lh2xxZWf7ESaTmW4G-g zNDU&EaS-sK0>K0C>K2hXC$wz!_Gc9}P-GeY{XrtjXzd`+GJAT2_&kASmTDP>*DPB6 z7sq{DO+F(_|Fi8~isioA``4hom417VReL{ao2=|s9Bt1{H{vjIV z`g7XA{`?1`mEWK1`t>Kr;s?!*1j@OQ!JYXkC8;xcEI!*AeX`Q11~%x*Q*gU@SRad@ z*`LJ+k69MaV;+n5&zrm#{*LT_^q~HK2mbywQuhge7ukRvTJLfUE3r2W>(-+LgFcJj zGMHZ#J>2$e@7TfYGb_&w6b6((YGsPQsZ9ZMZ>Jgw55DvXdw$h;$exAqOe-uKkL z{Fe2x_jBGwld||c^ms|os*1U$cT-(EPL-YoE-$52PB8NIu|tjDpzmLMJ>c@D!V8!@ zcm|U<3y(Y|@A#S@?e=D3hxhULPkdWN1m26xYtQ|Itni^!bN9&Mo8BjXcK`ve=idkO z_gV1iIXmk26ZOdF?h_bP%k8`k_SLRF#j)@VO4A1~^RwqLPc4E_OH z+Ft>J_GA8){WKrO;LBK{nbxDEpVGrr8>aNwzrW5yS`uI9QNod$K9z@kU@8wj7*gZ0 zS{jd&25UUj0@HZpTF|HP__HZIRutQkX!+B03Zn_!9wyfPCpwRp`k4C&79E|${Y{gl zpsDCjEQVUg=JXxnmkIYiZ|bLf{-Q$#-l@OW!vN-vLn2HU6N*!s&(XaLmge|qP6P4T ztBqld$TB}#fWFXLke~%H_IcjlO7oZ?C$phsjV#{L-wtZ-X?^YCy0NjeFi(EugJJw_%3rWw;xE|SDH(pXuK#lV zpS`Es41RoI_y3lHozKc+=bzMi_C2oGN6@B6wEU^cG0gu7%XJK#;b!pjMuecA|3T|@ zhHE+#-GsRzGRIAY-Yb8Vr9f+Cg}Zaiy*qvg`wbS!U&vb{KWJ-Y7P5KlGnx8-d23`2 zRA$%6e_O6KGMRIy*ajV@6zPJ0_BWm^(JC}+c?thC%S+bBzU3wB<8rN!ealO&kNbbk z`ZzGXWPQBtwg@2Ut^S$#=M(+b$MfKai+Wk^u*}zSJa+6hd)JX$#N}K*fH>Af?;rsr z`l-hyvrb!$P3-Dq>YA|3{NCR+MqM($upLe;qin|$a|`W&$~;OtqB6(OHmS@tv;&Im zMX-T-n~#bIy*`!`iQhl;5VH2!hB$-I{Eg}C{jS*~uvO1Q1x^Vs+vTJ$;jj2EcC(3t zn`xbEW|?U1Sd5Yr;ZEI zMr7Ky2qbE>b6hPi+v$-h$usGZf6@k~=lq;;g~CLFGpn+n$ol!tZYi7ngc^jA0Re^j zj0`GpDUxt^-6{YdJ8Ma?0H)#i`~|?7FxUOHvLj z>p?nn_kIowNDUpsV+v_tzl zDMlw6mM*=sHSE;RD``7`&166E;6&B5pg6}vW6Z{##W#_;VVFtp3XMmyD!wfJ=6PPA| zXxSgJ;tFO4kHz3lwU7%8Gq)MgBB4;eSD*p-ll2>)#U8B>ggsyT(NNe^6iY?Q-HF91 zXOxdR?-p--{D^IAY%G)yH)!ZliPUEmmB#NxW3;QWgjp}>otD#Y5EVe4;2-{XUmE(6 z&_oIIe`OL81llMzKsu%ur6UV0#ux}RvfbIs>@48#99+AD0ET%JDI!O|eEe(NTl{M@ z{A&dNz5s+_eY%Fp&zVaT5My zpF%c{Ne-sQNin88YV7#@Fc_j_sw@FDRskBZfo*VT!#?GQ{c9fzAKz(2a`>36Eei(3 z_+cX8*Y9^cP9r$wI}OPD!^eSRVEAaTWc)Cg8N)|mkJJ}WeK(7b)q7@;1Nh@$`7+BP z$5Z0Il`r>0yxiCrDfF)WcvfqA`d6>UgMp*OZX%hP6wr!~|8ac$z{2 zN}n0%Lt6G0pIQu`TEHiC9a(&8`OxsGr9VCm(S{EapQwE>KE2b3e4zM5i~8ZyZU$r@ z;uAFviBBzi$Il{Dg7|@t1@Qx42N3=Efr>+x3mrI4+D}|~V*bI&&XU^8OH-EBF7QMYnh?s6_zUzG5oba#Y2~RmE zyp_nTC)U~zNCNz0yl@Xqri%|IcxCGhH+oZQm>a!0RbNbO7}hIp^o~@0sT=J~)rZ~a zhE)AXH`<-5FL$GxQuU+UXiuuX!i_$n^Zq_fDyf5b2M0Pu zhpHDV)i6uFNRK4`<)N*Y zxY6@f!yK#OLaSk()zE4+EV3G|Pz{UQ8D~|pc&Xh~xQkcXO{Kf|YP+d&7q7OP(e7e- z@lc(MueF=8?&6==O%29M+M`HxJd1_r1dM0xv|m%*i=i~`&=o>)90x&1Cc4%?$Mh$Q zI+G{-sp*6ViBL*F@B>@FO1!q`QiRHl>`XkAaF5y%Zr_dZ;idJzcPen&_8AVVXE)_)8;ZjLhokT|`UeIBB zF3o#$U4vpwHV|Wy-49dL_lq$ZK|@h>Zohb2gYe@kL*vKjy~K}>0r-I}a)2K&2;oQM zF0kO8@Z)5GE-~ynHSZg2-n(tyH`%=R*t|bt^S;d>>q&#G?FLy-8)SJvmX8OcRaoTx z;sIqPiXL`~wy0g@YS$=hSB13;i~w(|tX*INcnccONI(j#7I!tgn z5jfgca0)EqkqlV;U+*0jwFeZLGHtrKk!SK)1-wX@V@IKk9>W8vQ|E=2%5Rrc!tC?; zo|g&BXk=R<=6%c4n7gY!J+j&>U{{huS)rxBH_*FM{)}U;ZwTq8LHQ0Ad<){y?l(7@%aN%Y-!)f;ZZ~=v+7vg4};4?%kk(X+-$%F(%&pGGpfC{+l z?R1E{c$=!~=p5w~t^u`L& z8oQYN!?n*rE777U;aa4hwnN>Igydctj+ZF@JB7h z5487Cx!!_6fvH-0c-TtzL+Mp?HH590u7;7irY;}l&3XH6&W_%05RxALW&8g2?W!x) z;rUhm`^cjUI({Lh`C^BwOJTeF3K#tT`aqnzU9IDT5?$Q8JAR>R$gB&QRasG&;SeFI z@9Hwd@$WQH{+;HDyDxTiXj=R`&4=#%&9Oln%KMU@^z7Ojdh#jG3jr4Y-SmX`23=6( zy`U$FGxvs`oX1I-y`?8OxY{E<$$LK}J;AU$M^7}p|KsTi4gUWfJ*odlj-H(Q`X1@Y z4F?aTC(A9xrzfW$I*^{M?xQvnhoUFtcth-?C-W`$0D3Yl{6CbQfZ4LjJR)?`<6I89 zb`gLntRQ;RR8sHdM#ddCg!V;E7Ef= z&;CK41w}U%68!k?tiP7@@Q*>k6|yu{`0Dz?)&p)Uq21ncqGQV88)P+*7Xtq->EUN- z+6LyIzWe+xGdd{$vAfUzMA;DeUtKh?J+_~dizj(&4+5}PL(^e;UwTzgy`mZl;zyNq zxI;ejZn9Dkm9l`e4cna5<=y=CyxOqAkI1@~_19W*-(a~nD0h{*l)C%|C;gevl-li0cNMFxsfM+9 zv~KtHV-4F8*(xO8x`ew!y_6bbULOA8x7Q4;`q7@w+=x922f!P3%zKg@b1_Gp*^uRpRjdkdpuyWl&VL6X%O`O>oKzhH=cu4J z;;px}_wWfy;vD#-ab6rx{v>b!bc#cQZ;a}AqplH?B!9llioU9;Lw?0(AzPAX!6-C|Y)2RA> zukcW$@hPQsTNi!`6_=^JX0J}V2To3plxMBh12|VpD9gps)UeEbIBY1c+j{ACTjz{i zt67?pI;Hpgy3GqG`#Q33>GbXX#KR1tUt)_C&2-1=x)vTYDP6jZMj+G!$A>nh6L0dS zp0JrX{Vl^SNY|yF;~p4whoy>d?JdizVz|08n*Bj7uO zBadL82%zY|Wa@N5QEcVukv=do(kR%eHvOKwjV00(%e|ui5(u=l*u#Hb75|}L$v5tC_x*^k0;!mP^hdS$StSA_`Ct8a!sR$2zDeDs|%_Ge=!F}|= zFyVEX%wDMxpn{>Dm7Xh7LoVEt`X;l-%Vf4PYcl(>fgcaBn01&3@0dmpsDZ2fJ;#-F6OY}RTRKKT(^?N4z%QMS$ z_vKOgy`VzBNHzR^qlz!f8Z07by_~|}Da%cmE71C}>;5`w-Rp9o5hLWU>hg(aC4LH_ zH0yJe=2oB5tP9nz^C?Xao`~SzRh~R?PA-krJs4WP5rqSBcTd>Zv8y<=Q`xKQNKz}mWs$PJ?P69C#BXZ+R{|CzV)l_uxP5lttYTsq!=>DrNphrHBO`y zLn|&}w;s#3$Vj|%b18T0v22Tsa_g~di&VJvm0T*_`YJ9}ZvAL3quu&yF4b=RST1AT z`Wh}ZiN()K84<6$KeXZ{Olb{bB$3mqq#}yAp=jpbpox>x#bs(AZ0AF3U&piK)TR{+ zG&XY|L@yNzEv-N(M7&s9xt*4BbG3PN=VodpONKK1{FPm%aKdF#g%d7IlY+-@0nTb=8dPswvl1bFQlsmuQf;PMrv>{f$ zA!tN*(1=YzBYJ{HJQ6fwThNFngGOu*8u4_{2rp>Fb3r3^290K$TeVP z(15Fh2CNPm@cp0x*EXep90n8w{oqbRYH7K)t*kjq%U9bi!?LtoFl>!lT7IqFGB``i zwS8qxTUvg--7-W=%e5l41}-hX!EPC-rRBf1TgGZ>`Ayu4QVCO~8okdgtWU*`7>BY| z*9d$oIq~KqH13ohXrjM7PN6#&_>P?S{sQ$ZfzVE zv~gI_#$iDlhXrjM7PN6#(8ggw8;1pL92T^37;OYw<@5zfGC)`{l6s$!)ccI2-e)BB zJ|n638A-j*Na}q?Qtva8dY_Th`;4UCXC(DLBdPZpNxc|JFaCNT9oK|5zNpM=VPx9B zI_j-t`X`kV05aq81a=n3I2Tk{@MwN6-@e-j(!7}4jzeeT`&ICLLQ3~pEK3kK?l=tg zR?MyxmlC$6xRkOl#U;$f6qk|gOmQh^Yl;hdVLo?+LW?^>p~W4c&~AkNFzsKmA*TIH zcErYVVN0w=%WlWr;G{U5#UTyJGo5rNh9Hx~h2UvOk*^b)&LfiWHbj(2H$To=ewuIK zr{!9HX041O+;GEYKEF7Jb7KslUPv?z7JUlZT4>Xo8*)6$R`^^ z%TF=t*cr$tzhMdG%O^df`{WY`f_v}igvlrONj_m`u25jbo`&R;s1H_AAFQH2SVeuX zVlPti3A>S!Poh3pMSZYhLo!-rGKhl=axaV736CU;?vo6%?`uHLuo`aoKx#mi=tP!a z^QMPA&D0fHS%RKOmM8=Rql}fw644TqC8DJ!OGLvaOGHPSED;rBA*U}(L@P{|h>EL_ zScSYGVi>QxJGA1 zZ!!t&-eeNky~!l7dy`3E_a>7B>|XW;_%D4^a!;)MhM$e(_Sk@7*8~h3W@!u?W@!u?W@!u? zW@!u?W@!u?W@!w2YOLmL@>KP;$!SWy44 zpnfrH)h}kP`o*kOznHb^7qeFVV%DmE81+AT>FNL#diM`*_9^MgvQhCJpN(?VV?p`5 zVxzDe*eJ(L#YUxnDW6WL=?b(*?n@j>XN>A@#%(AWZ0)lZeQ|IE*DBLl zTQn}`^eMREx3QIx@@Z41pAnrJB`|jMj36*kOLIuKEe&s0%R%Oci1;rI#?SqNR}^3%3T%ODZfMQo##&Eqt; zpZlszGx35p4e^%x&*f#bE@Kw{kiQK8=k*I7HQ6B{@H#^LG(_(M)9~Q2iRqlb&Yp(B9oyd@oPd=Z*y(> zF+eQ`=UO+Cd>yyR%F0mHgO*kmS^8@0Cz5W{ReZdrNqY$odtYj`BDC?us50b{5=C*U zAj{p}(?`oG6uxayWV>;7BWT(p%M+^Nn0eD?K4m;wil{{6GKI-$Y1RzsCyY8N)Dq#R zEK=fquU~<`A6Ot5+)arq-bIPgz7iR^yaFksDB7`+R<+P7YuQA#%u&nq)30UGbmQC6 zx_d%Pq7Y8E?WYEiStw@7gUYyCbjL115h;nEc5cCLg|M41OZO;L%qO#9&BXESPWbmx0&= z`VJZZ}J*=;rN9c5YFg_eGKe+d0byeX};;0a>G3V5`O1+aEEV7bIy+ezd$ z-|#Wqv1?dpSp^?yFGhxsH&;fKk01)Ns!|YzU0|pp7wzOKOGqrhT_O?eN?{9VfeZZS z?S!GvoQ_`F53074APVr;_)=K)o%qhi*d3o6%{uneE%OG2euhP=?N^A8F# zggTz{HM0j2a6VhWn&RonxgMI*7xdvY8GFtr=Bi&}OeI>C)ADO1=Bod`GFRiYp(|Xd z3Msd=GAO;TU#DdYar7!#Ik=jWvN?|Rb6D4QQ_(?G)PAKy;L)n}{M`oY5r^yjRz9MA{`&)5JYDdGYD|vJ5Da}N68@@#{5&b z!513_$?eG$-g#xVIxk7gd0fUJBjD?kPv_XD+|1Jr*F}CpyxpGTD|PXXgIIwb7u5(l zzsML;C%*&&qP3CG*Hwd8QqQf_&tawu`y${`A~ zlB%sFl<|~g8)3DiP>9s?r0Dx3?Ld|-p3V9TWoW#bxnL4VX-uS@Q9^-4ngEs>a`{B{ z2VCA$v!m`0HtAJ1;z(th2k*~c$D(ofW4KP8zn7NzW4ML8-HqWi8oj3>42q&WmGXYZ zZ(vD#IerdK@>>`;4Vs40A5RRXZSb5?Hh>yCjp1Go;7>2|2N1)LK|mOq(M8-PWLgbh zXa@1ib~Ad`l)=Mi0Fx`kzJC|vmMt^@yn*Gs!>IKRH~flrbQOu@61OC@Mg?D=jJkh@tAv);!3(e_(>6oLx>B50dG5)`TLeb=i zIGh}L`XSi40x4*goTB@^v&pSE3c5dy`)FokyzaHO$9DWp{IIJZnJ`XtAL%{^^5wC( z`t3e9&lW=ls_waU7yfN2|5!uS%p( zg9pvTA?}K~3awgG(E2IW^>wCJgaMM^PbtI#fC$G|g5j}R(IebaSWdOdnx~yK-OQ$O z!hTxhq=P2V9JR`Tbm&$7|uY)ihLZOOv-*^&kQTC#AjT9O67 zx_CA5sSwH(n@*CBoTW+fk+U>OLUNWS$p>d?5}>qJ3f4&`Z#BLbd8_yXmbY%&hw|3z zSV|0*w;s882zjex-rmStZt?QL;ueVl3z))(BW?XH+lnw zqrDbW2M*o9g5E)12!<{zWEuHD#?nZ>UlHqb=kE&1TYq8eNL&u*3tI)`9w1@;*KvIk)(hO{B&1b+jgE#Vzl%6-VZ`;+DN?ML(Hp(z}+aEc7cUblEoQcy1P&D%{w~;vy2NdYxmc zet>KAPAHjJCOEEVLj4zkGbiE{FI9bSBt&)h-mtp z!t}&K!lgDL;63Q;iAQip%Gsps>PtaHp4vvzHa}^zv=0@OO;QiHRk}@r0%#X1ye-wH z;v@$HrOk{pJ40vQ8x2kEoEK4-qlI(FWaQ6vM16YH zsXNxcS*;FQLK$0rBP`3{tR=au8CHsA^NKq%MQuOZ@hso! z+|H$;lO9_*e@v#|{@FX#uj<}U_1E=&oo@E|1Kfx8^^HtkcdygN3QM@ql3~Cii%7sh zwn@zr@%>Q@zy^QGt2HuJit*U7VV1T;bZX;5_FMM~9`SJO?lf>bVlTk)7Z)HWD}KO; z^w|Q(s5|o8{h*Nq;>6?uBMCR|B`7w2`hA09)_*GP8+DT37D1!#_6&^5F(~7Zp!ka& z_XVK%Re|D{1Nh&4eM14?-dFd_-g9*3c@O>B>+**LwO_Jz8?AdGw4~}iL7Knc7MbR6 zoJ0NQ`FeV7lUtaK*SR5-6fnG=zk7`uDoPd#1*jqW@^UcJ(8z zYa!dovxws?(bZxc({4D_R)m7+9?|ruPqVpt z4pke?u{(;HC;e~BrA)PA$If^Webj4NQh}CAlxjbH7kp$;q#ap5$nMqVnN08XMTRRG*(zx z@$mV1=N?mln1#I5ve7%~Cr9!ydKWJ+&Y01)?ip$!{iA+*C+Q7TH=`?bOZS1VXWzd5 zWBbb9l7GP4CwQwPYlfMKB3AF{PD&tZ!GW)*h;Px#He<(zh#5@>?H}5|GiQFEd$aWKK$M@`&~uSy`oHca2s2p`mW9;V;6U!(TIh zcvfqi)zx^uyk~SZHv5-x{sqao{fpQjH_nj_a^r=xPi3~G8s{ms)lwG)sk2gzSCG2A zoi^yja)CDQQp-(%OAlYQRfBMXS2`j_juq;3@Rb5hGi{pkGLk6XsImUv?)m(-2j z_OQIiEXFMa=z}&RYH{>5liBIIMJ3 z!j0teCyKfURoC)2i8|fJwW&T%QfXZ z=>WQ&Rt*5f1q_LD&=LY&uIzoeq7DQay{)KNM4cValE3FVyXRuxQp85|En zF8OD*@WXMh%eH{s-iflsR7N1$n(&<8!2t*BeQ^)#!)Q25tCS?`%^h3+@OCEqUe8@O z_C3?i5^FzoIPM$JuuL=N3I(y$elbo|#8Tsnxt4G(ahpq1XF%lkVzrrB<|Y9R^#no^fqFpN%`aF@H6>Bey(X}9#!10l{`;(zc)7(Wlg^! z<)Fi9Go&0B8XM=2N8rTm#Y^+Qpbte`atQ<+ZVJ#tq2_--!D{!vE=bh zALZ?@d7B~aIIg&gjI)aze}=!;y5iW&wSSRpr+P0Tk2+=#S+@G3aWXpkQfHiGJIQPJVmXX|L_qNI1 zhX67&t0e&3;Ii^N{XXC1E*4SE6}Kt%o&L`lB8QfW;2NP6phtWtcQ^{O^j=;hecwOH zx+U9qYCXkqmk9fkDSPG|dh1dB^a~E1>+xI{|WYy%&W?k&7xE!Ih!LFLS9>qy!a zpSZ1@p8$h>o9b?rTK1B(I@O^wIx*3F3B$~ArsD?X?6_U^7qso?q+H!OZpZbyq{P$w zTRtzcs5P$t<~pkm1Z>VR`YgWZ;kQrM;1H0u!?N_Kc1pPQuz<3><$Xs`TDMQ z6|H}JMd^#2I-^|*A+th_?}e;QgvUc$@ZVK;-Swo|OWo+@f!43|DvcCYxi(JW%qoq9 z@AM*QOh2jYTH0{M~2z=B^gAm;e1Ru4~Ug{CnniCd{TMu)K*B4<($Y zuCx4*P+I1@B($))gR5qAHf_TH#dOSMuU8!%x2jWs>5Fu$gF8?eb;ECZbMVbdO| zus(oE5tCWNQphk%>BH)I6>}SVY_?jQ^v^tf;uc}sn_0b`iv0r?@W}LGN01k>Mp6}W z1$TBlfqf2cSs$R-(2J_fYMtKCmLVLI8HmE5nN_}^$;zy@X;-mgLBUlFb%M>dd#TAeJ5;wWJz* zlIdIgS<`}qsA$x6v9hS_%<8aBMvs=M-}4wq=7|jFkU;^|a`oqD+m_4Lu%~Q3$yST1 zvMpLkFIF}_Nd-;+N3N69BHo92pILpAb&=k8?8>ykarEV@TQn%SzC1$Ge_4{g%=T~_ zsc+?_`n5bomso=PD=?i&YY{V_#dP?J6T@boe<03e^(TQ40;78!59VR5wh~0Bp8a#i zJB=nIJsGU*4zRM&$I3*2mC*nz6V-0x9NL!}KgVsnFg5-{w{c!-{5-d@H8sA~ZCsQZ zzsPO8A~pUBcX>NQnX*NJYf6jM3R7K}-Xdj-0C%}&CAA`$8^`_OcAl9xCf7C1Lu!S@ zVR!leN8Gu6(#ZO?hN$M%%d3m3JL0FnTTQLCcZikBY#DOQ8_AmC-+?{DV6o6QAp zJ@0$?ke&I@^_l0HdFGjCo|)-0>GbPcYxEFpD zoy#=PCjt2^oq^@5Dd*8pvfWhWoX?zmp%h95N1m5|#!z15-`Nxxo8AIPS z4T7he^)~Rhe>9qf%=NY{rhop>eOrgzn_f*Obz2`drLB~{M*El^PW7aDSx&*%$_h0oS2F zynfNwzW$XA{_V7sF+%$T;@=(k&3xFFnShH6nDPtDALr7r_=N>kiOD14{zz9a&#Z@o zh1B01Nd*1ef0o_!m#)wPzBh&vwK-j(26>|iBXx9z8ueA}baaK5;QLZn=qBSB;Y2=9 zz6zJ`j>e0lT%o|9pFjBn{FU-o#$QEO(CYMpw4HK-qm3gtz62n_2$$S9Z5aN(fd%o< z0`3%Oh=&?*8j*BxmLTfj+=Q$X@-EyrKoRzl?k6Chz4n4D({;l=cc$xxdoE26Rp3mD zhbG|!?J1qE+%!s19dVJTwbuPCPUR=jwRqYMl89 zU)2`F(Ms;;W4h#Osx0vlT&8%YcRbAT%*BlQ;bnZ$REQ`zJ3o*c`2&hvQBWRLfp z$7Imi-&=;|Z)H+$2k4^+JTSW6jU%X_fBYhv?R1wdq|Vr87~pH!P5YR^uVDM_5!@z} zAAHyIIH=BN){pR&K816M)ZDs(y3QrhH5?|{Ou*F9zS4(r&qo}npIuBWW)5||ULb-& z{k&2F-r(=+W&FrA|L^==qSFYAbr|7m5+`O-cu^A~gqc%QuhnShDqv>U-jOt5AU{Wm zr}NIm_JFbT3VMPvCp(%Dsh30&7jo|kkCE5((TNaPr7N~lcQ!pvD&$au!cbw!O1vv9 zuA0>qJ}AfCcD2#vT+!z{>+&Uw^MUR1B{X{G-+gCYe3SXU_$Iz<4sxM;Ga1aq+{Q=f zlm)t~+hmd+Y6_Men`|DGQ2r^6y0crc(;Ed|s_JNB$|SFPj#SJ-Q&;Ft{$By(jD9ep z28{dX{x4(0f^qi$A294n+Da3;>=NNlb|C#KvGo14b5~2kN!@2#Oh@W7+~57pshUfs z^jY2yv-W(p1DpBC$m(AIO&yXqeVFq~hq}T&;+?#8-xdC&<)Zn2-h`kUzh(}6i8Ifi z*?SjtC-U0}?Fus$!fCmrrG|A%BLBG0ega+CHP1!jE$ef2KC~|y|3y1K;!b%mK-^DP z>B~9X)v_87(_dC7wk=8eHGGEARyrnU`Qz01GDW$#eG#qV68U4c2C~kJw@y^ie9qpa z4W^ORoE$|!CwiED9j>TpOr2ZzM- zag7a3en#^hIR z4rImV7VnQuFV5zHcVa&kjemvMX^Oo=v0owf0%9*1r}}Cs14r+k3+p(tk^=GgRF_=U zwE$P?8*p*7$OFD+9Lk-#(ZJWnm-5I}o?CI1ryUn(6%Kh;;|RkzN-S52e~GKaYjAPa zX`G!k@r_z*B-_;sY>I%WxBgFmI+Zo&&SZO?NbB5Lpm;PaND+3sFj-Z^9bk9* zj}RU>LU{2J!i5m6mY1=k!<~Q;_nePQX716R@?>WB$;JEy_$%cv2odW$PR+tACb0Im zLeW=|Kd-9jnjEACV$gb6KuNHS1n`+6C4S~N@@K|gnh`tR6m=D%?Nz42*j1(bW9OA- zH=lP#Zgu=lLAh@L3O3YHo7*;S97oJo2uao280>aW%{e-2Losn8Ho@*SBq`s|l7JIkw2A?D)9Fthnx3&W7|1-Or_VFyPD)cIDiwk4uz=gLD0fJxvO4-)gY#CsEwqz(+ z|DyD!87qdQzwp$d<$q1-vuLV&X+K!>77r{p@x7sSOjMpS!E_pVJRFUFE^7$z{&d2_ zC#Dnr=YXrq(BpitR%a;vJzfS4ZQ{A7EUY&d9?xCr^t5gOTONW&D`%8wV zztTXVQl}3||In|phcxfAO21lAj~$Z!oJ~X1XDhu}ySuM=a4VZIMHt*=9?K&AF2QsE zko05bj9?6f2Xx_|D!pm1L;4hl1UX9%4Q*_r64$Bl*+U91o-vf@RZ1^z;+|;=H!S6> ztB1C7tP*Oy;^q%2_)80p7PYj=nK>Y_M96(C64%h5=8fz}-6xXoCO6cooIjk9?mTDS zBE2KpLN-Nrxxp#086F8>9e{d$@^I>PkN%WEuM%JKy6en^nFU>M3Q{2<W810UKb zHvo7?dXFF_&)4@woozhrE;Y}bbz+yikCne%vob(Wk5?5a=Ic~ZZC|kH*Y$KBui`yj zk0;-!^o;m>!>wAFf&2};Lk zLhAr3Oo9f-VE7{`7{i~F8gbn#(aS^}X9*Xc>dr@QXJ@yjL%4EoZ#IFc?UVEl%`mn= zx3_=rq^mw~(&+~Ul7EOPk#l?72P~ufZ_Yat@4Xdm`Qp%k{r*@pVd}u6yVC+etaCU8 zWU{OBeig8AyNddyief)Hw)(^5SFVNI!Dv7V$n=KPdtvnARgw6;A2hijdqt2Fpv+9ALUZ}rr$F>!4i&ouKRE2(ycsy^@}=49aF#iK;~l(YvsiB zJ~+)DZE_^eS^aDE??nn_8-}+}?3*YA?INgyApS01V-inqCb+|GT8^Nd$luv67BHpx zKx`avXG=YNyP6AV)_zX*Tg{Fl^ABLdriXlz1>6} zh&{ls&A(b1u}qQUKZVn62B=5JQUgwrm^%dbe~ztqBS zqT=_Ogz$4jxr{k2031SMUwxVU;j$=|JFps?==bI_s%EsKx`JjHh)kV z6HcuhFTWyl7z8FNes4rk@!u-Nf!HK|ZN`9t6Hb{NFQXy__@7P1F%!jDQi}M!r8p3t zUzp*hE2UMaAz|3Mfv0wHfz_1wnB+UPeVKqltpXii+Q_6p)%>Y6u5`eL5)&69KU}1Mi zyE{!MRVAjeFU&oNqju44+$WY5WtDgIzRY~$EE|W^#fF0>zp}{OUB0$&5$xSRyv$Fe zGCGBfWD4Y+i%+w2ho-6gabrG<=GP>u?oTA+Nr8n{IJPhQh7J2Z3uuB_*E1@avGDX1 zMTWaSI(ROrcBWE@0SMI7}7rz51nC@L069tBDhMSFab}qqb2D(!lhpGJn zr$thAddmdmrW6vH-|F${?}_Hh8xhywo;WIy(0o$Ba`0 z*QgoJ=79}V`|cqk)mDQzJ}OcTw?jY|h%R7Qh-QFc4BK3~14Q{< zNi+4(_Bk208N$FI`CRR1o$(B6a`O!EAtaWjyz-8H*U8Eof+p3zdbMx&hBgs&<f%Z&>(XsU@h~Y*05$(IN{Zi9|G{&BlP28;AOvYe@OH)_E6$C63zO-tQDB< zQ3CT;V|`TRJR-!_8s2G1V?d6=$2^KCK8SxcSQA0;sw3hp!z()BEu~q8CYO#p>PSud z*l=C&J!s;!&oj#BNFqmbeWkQ-KgU?uuopcBwJ)gl6?p9vz)`VRfR^=@2RIkWdVR@4 zua7kN>n9zNGQ)%4ShB>P89riv^5Ac<=PFA9o_EjaQoz4$F#K}_f21IjJ_gu`IcH$$ zqTA=87m#LhOez!s!Ng?{_lB$Uv4bs6qBPpj~Ur>U$9y-Hg{6h8-WZ%@3H) zz)cRlhA6V0X(|+_5HnZ~NW%=4GBJazM%q@Y13@K@%!_zp42EE4Cb!HmO|51Xm!g)K z-dATGky^trfH@jR^EDqB&NpcEr`u=f)$)p|jKh%YRjEA{*5G5y`gHdGxS)`BdM(Qw zUlFyeZG>&vE^?YJa=*3k(?!ET&v3rgyq%#BGs?QXc4?G#;3pimXQ&9{;Ce61?#?L8 z7+UX3$_Cl+H&dFm;a|j4oIsvQ(qZ_=@bo-N^c3g2Wf)@ismuN#e*iJnveb|>8W?0L zg6NvJ8j$p1hMb7_f=blh$=W&u4|x9Lh#hlapHb)d8fR;; zO(V|P$%GsTB`*TX0R{`2nRRfljK>~5=_B3WGUwZ}W&j;Hn9|7q#xTe)R(~tbV_N0L zMSuaX0mI6>;o|Pn20J{g0T$3B9Cu@YRRPH&GUcC}nly(ozcnI4P(y}3s!I`oe&CQ9 zgl})Ygul5*oPV@o=FZO@hr*S~(LieEM^Hz1S8teh>c}jRumk{iHL}3yHyaascweZE zz-K^bn5E@xPrh-?doOzHMdN~vuTf2(JPjLE<~O~%$N`zC4kw|F)3YxOc8oD19UAOi zL9qc2`~|nj?Fv3D$G5iC+?m~m6y~%VPT|qN!7fo67j9ThI(Ko-I8~Rrr0~!9Q@k9Z z`u2cnSvR#&5Wf)7eZKK%c%j#ND<5jswFuDQhkV1?vv=tLw|J`9ISfmd3N2fj2^dH` z$vge{PzK@Sni7i-_MwqdVcCX4F2Lf*`aS8F23MH*2 zdyGGYk~Zj~6yl@!HOKYfO)-)b*Hqszs0+B4U1N~;8&0T5OHEhb18NN#Wp&Q?2gl)R z1B(?Fg~kTZC^Yq>ahU#JTP@+_$o+pk;JEX%OmFa5p?aUsKSI*5SS4e^^ZXZQg1?_%)|T(C_LyaA-O5W4H*mUfTT_nn)&}iwyFW{g zl`t=qc&n9Wyx3a;v`D4KSW#1h4B5ycPx6<-|m07QR>U$YNRcbo4 zTTmZ%Kn;Swe>~CuShb*Ci)(3Ugb>D+QB%=0JBMg;Kbc2+(WOnvmC1Et)aZW=WVtIA z8eN*mf~3I|4|AzHId&+Dku-%P;_aB;FAE4`+2{;o!*k_upuQ_3FHTTzH7jzh{HwA(fzckZq z)A5O!?7WS7`)Aez!t z(lT;$@L;_cLN&tXdnQS1YwS|_fs$sxmHHxsHDuz~TW?~{+;>DdOtO@_=g?R&08a{o zTitu^hnZYJ&fxm5tN4fO_iLKzS84;J*4vCcDMzc(8#{C~RNJ*^ znmH=#=}ezAVWquR#=otNv_@gjYGyG;BYcnh;GunI!Y@1UCe!{Q^rkWZMPVrpr%_aPF8UQ8Qp9x#tGw)_h{NpCAIG7 z_DKKxp6YFx@H~ICDl_dfO)*Ubx)0LTSm7*??9j++IpfTX==+c1Hy5%4R0e(x1_$GJ zYgI`_icKw-iq>!`JK2Ea;(<6m@y!ez?;80(f#b*j{DE-1)DZN4497;lTt#;(o~c*7 zpaO>r>8|}7GU~M_4DPj%s1Cg|j7hVdnW4qdJUp98U0e;1ce9hn`lHTK&i4)9r%Fu} z&7{IB+k0jRQ;_D4%&FdVLEhX7SQ4P=K@QW>P!O0duTHYWUH0D@G^rXfgeIRpLcf>L zxOqV^3390)<#L z>YlLo;xC%5Ji1g#0nVb`X!Eo^C$3aFuxEei?-^KpH*W|QKM3~-W}+?V9^Czb(DqY9 zvJZ_m1a#AsSwbI6@$@+jBg78FKS+jTl;Y2!_v6pHYRJQ1BtfU8kB<7{=+l_RICA38 zzkJMTSFD0e4Ho<}D?|3}}{olff@FOtq zIhp962SWd;`Ks)rpnsMWoC~x*LNQI(t?gf~KFlnX2x$=)@m1+yH~U>{kemjt zpCok$(sG0JW0TGKX%2P!VZ7f}4k^yqboDH1jbJm>Iw*dZNy>mO1C9XKCB%O?D8xuD z{Xbs+VAIry&fF>UOQU>4U!!F_BgDd$QebJ%$=7-*0O=}2=^?`t4jhQR0__W=!dq#k z4tozpdlu2lIzqnhZ`F%K%f^taoPBmB&i1v6&w1yPYZ=%(%volCWVBh|(6xeoVpDvP zu5>mELy3UeI(4u9k}_)_4;w0~QTipmv*=R`C(D16{3Q!NhrhX*iu75!@KbzNm7L)_ zE4X0cSmQ6l->}eU{Ac5DOiasOl;d=@_Jci};w{iQzSax*u=VQx{T{ybn2{jh!bX+= zcq~BLQBKsXc6WEl`i8C89k#O@_=D~YSSj-Br{TMr3G@@uPpy9H^fO04^Yzo9pCxK{ z&=k39n`{$>J;r0iTo>Da9yGq>V7!8Zeua@(Z+25(27*N2&hy8hC=I`{X zPkz&}=%AdgdF>$Ls<%zK_`Z73+`u>i?~QrZ-pN<`q_1=fC&_9Ln#Td_gKzUu!1=Kr z{&b-1=_-y`U4J20=`M~YJ0r1w*Ps)SFA2} z@JqfG%jkR6b30hc+;`f$Nfvah zi$giwrbg_ERzYcTY$Mv6$(p=<7j2iqjQw`lP&Wdwi1rICladdGDqmf=PFGKtk~FKg zQdUa?>Tfy;Y&T@Iw$AdJ)=&BS6@MG}JK<0K z(KGMFy%V>SzpU(noPvUaT>kVg&pHM9o;$*GkK~LL*GK=1pqrTA27{kZkzA@Fe1O3H zzScW*DU)7jcYbKtcmi1|5?{hGhX#%rFL5JIr91trnoWDOD|6|bjd{wNxT22}GZ%d; zz!3_kf*AEQ6%p_(S zQt})XO{A{Yw38b_0PHkCoN9?WKMK5t;-nQd5Lr&(h#2BYNKw~Sp&=v~&)|!Ug z*=!b{Q~mBAt}MzD<31l9Lv2C0JQWdmk8a z{P8=K%c;$ao1w*pIPvASfT@0!E_;yMblOO!0?hY7c1JCAFs47IMP18vG|7^NVs+@q zx3290N?&%HV#u$y`F?=>=f$_JdeBfZT`((!Z08Q8=2n1^^L*9B2Pctd@uxEH8!#+R z)GCBqf@6PjbLCHzY~f3^TAmD0GfND3AXrFgE(t#>q%vzsL)!bjepG9g6=Hms9?(P^ zl(+OoiX5DTH01FduOFc{LTN^Fm*lPZz%K}->PiB#?d0Va~)gb$c zk=Pz?|G257EY_VZw}S9U8yVP>TuO&x5CnO@IWIXTpzJ%~*=)0RD0>;%CsjE+cs_n| zcVzBk%eLKuB^|Fd#yi8h>j^fH+;FKkBUlrt!|bd8zxzoaI87)^ug( zIfZ?Zcwwa>YY+lgf|Gux&vA0g=%41o)>&-l7%nevKbX^3!Vxt3l!2G5W-;CSYyEi4 zGrd7xw3?-7dX+CVTNqKGhb!8uDhqsSy_kL@9pV%2=+DzJL}rV&=50A(PD!J4 zJC>YT!wH|x7r+sSffzN3>OOAv5Ted=q6Pl*;)R=ZLBkC%m?92zW;Y&dXkm%ZbuVR5 z#p~`uMZ1~l?FeM#cANf6@Dhfa^PuP^ai(4F#0NFZo22(LyhyprNMG6In|u&+rqipP z=Lgu!d-N+rA+6CENpQ=NZUqqkOmU1O4@1L{RmVqS7;~vJJq$w*YJdlSOd}RA?w2o} ziPo}?^@&@%6llUdNt2~XLa+d1=u(qVlpsRAa zVXviCP6ti^4FnqqJtPEKO8^Hz<3XYEmfc!|(p*1fk5t zXH-87%Ti9?@^7mfioYoHN5hv2>c^M9hQpUBe<;38<~`ZWpwGN(l+JNm~*<#+YH=ws-0Rf@y% zHLquLc}FV6u=Pp)8>YUV&BN6%?fRxWX1#C5zDUbj4riyY^qCn=XbG%2hrm_L(g_i zDOwSoWDDE#~sbtB~U%+ayCHBEU&2`mB<$J{XxYvjE3&whyCNrJipK< z6*lcUR-0V2=n-^4ofyKj(q6bQor0>=tG8OH+~a>D1C@bEJ$%t?Hbg*!d%UT=TOFkL zz#T^o=63;e+B_s1+r#c(pHT&yWnwY_Z@0Xi%9kR`u>GZW`2MoGb7+6D_;Olikp-Jd zDeHd)w8BVP`2k2USDMC(4EZdk(j$pU|4lNo6rvVm`Ot1YY@9Qiu=m_}NN%nCt!iAj zMw?L;2Vx8OK>DImbLP`l;mk2WX|`*2lp-h6Woj@rcg5-mGTw}iFp!>bS@8L~XSO2A z!`{rOO(F*#hox{aRE&=ANZqgITgyw!YYVf+KgNCF$qtO^{zgwg9S?I1z4Gffe7P}{fu+;D_op&o5$h3pP{)|7 zABTZu7|ds4%!4mAA4O4n+mn*aNEmr~z;0`j!l1Ee4>un;#DRXJg!swcrC z?$;ia_A*WAliR^1riM{&(UhS!+Tt=b!9xF%*F_d+ezP+P{Uj6Ge*Q#ff7aV0V~`ym zNwgiLD;su_Z5SI@@w1K}!r|0j?$c(s%_KkMUj8#_lc)7@^=V)EHtN+I& zPNSFl^=;}`DMRbG_)m=|v(1#c|6;$fiZu3-*h^K*Sdt|K>^b1=$)k`Q5p^EH^3lv( zY_;kvfp0C$b{e+B_84y@cZemGZ|&xNCxq5RJ0_M<*-HZ&2<~UAi?UJ=Bp?TRW6BsW zFfKg9I!#mo?)CH@9IfHRma_+zAGJq$$EbkcSu09e<8c>YXcny7G$Qrl=!D&o_%A&x zGMI$zV6KjQ!kSK|P3Df=o~lGxmW?;w7~m{Tq$sO*J@8iBex^rDH3e2Xy#G{evs62` zsS8Rz#5}npdHWiZARWl6fIt;e<2)=)GMyG^pVXP^J6D4^DT0IjDn;-ZVk%T<9m?tN z%@vv`TPe&Aa8S_^r=}o%sMVNj^F7=l1lwXzZyiJ&OBYY7zm?Ns%yeJHyJby;o1 zM4Sr>)NKv^E=c1q)7;%4&PW7D>Y9e}o2};5`=bG_c&srCHYV=ET}!6JqR}7fkQ6UDE-N!oGbN=?e`AHltZKq* zxHZnK3DdFc7#uVQ^E;HEF3tw>&g4a$>GsCplh>4BQ~l;Z06^n#0LYLe4UW-tifo+uk&kwYxe7XgdgUdI?84{w;Ji19=N31!3x7pC%2aDA&JwIynTsKni%!? zR|5hgeycIkHf9=D*`OJ9m5Re%jq9#HU4>ekZ9&PrxJU6?DbW3902(08i8@Y$s>jc; zJz`5t3m6^NVAYz4M-nM0zHh2F;~jyMD*(zOj$_!3bGx^IOM16~-)de7Qac-fRI{)k z7Prz)*l}u^KDw-JqTLXv;hNHvVQmjb&=5sr8qGnvqe4luiP9j>??-l_m!a8!MyAOu zSeOtPxoN1vAmEXdrGl^ZbPe>_{f6Ye*0E;T>ni!5Hw6qz=1`JBO`6V@oI^>SN#a4( z(LR?Z_1F5(YAqAN9^+bjRp${j4@zb@c9_&+&}iC>K+)g)3-8A;7R5b1s8^-y9gD4IwSJm7IEy*Orha7i-w>f%Ah(3 zkcNZk4JpQJL=$DVnVDs+?Q8voX$9l#(d0!;ttSA}3KjK{P-O>Qx)0}Oz|NY{bnnEN z(xH&{Q|`TuxKl0C$r3wUzhBZ!16n(zs@#K*Y4b@GA~FW#Qt?wohb#sQJCjjolV(sb z@U$8iaF-m$xM^C%`Deq85c-+aZ0dRKq&JD}iqy+6jSND+S5*oa&D*dl8IX}*-Q)dU z4m88gaJB)xHa!|!wscU+m#^r*L*JXfJ^g9G`Ju$&@{Z&Vvr?PazHIlBlX$zQflw{5 zyxA;}+yRXnU-TAO={0y-ADa?VjAp9JiQ7^`n6z;-MD<*ZS26iLwB*!wiFD(<3XJ{+ zn|tq86*D0|?^ThW)R~GiS2Tm?gxqdp1S|3H2H__8$(#+Qo!K==yIy!g_H zy{p;?WqN1ETxORT^S7^Q;DIVuwRQxH-8@fdl@p7YtBqhzbv}Pg4?oh=c_?oWDJC|U z0n7V#dwB8#K$wZ@lsqw$IT+LA3$jpE~c(pE!B#-gMOm38(Ase-syW|Pr>A@Pq zP6*M&sKen?sF=iwF?+vZYCy}RW`=n(CA>%50B7yxhSkKF9-?{H&FSv!MX=e%CcvjV z^??W{3xiJ7yx~10FcCb|+UXXjf?rMrBM9gP9Glopg@TJz*egDNc+WiFxB43?>|8_D zKr+)jL6ZWW@Om#C$ro&TjUv3p3x94HjDhCZ&&9_Sf20(@NqW0gYap39KpN+ z{7fqLzfViQ0X$8XDg$Gm_F`$u)c{48qM65_Zvtsq0L2$kGl?Py+mw#X;PY&-uk>JM zXjLjyPp4BvjVa=bUg+9`AsfssS{hm*U+FH+7_#kPE;Yc=hD|K=A4lO~9qBv)c0@hu z28rfmw2WwlT&)eQoMZ7XDRnjBTCXMMa2H@CzO36iJ=WQU)3t05zXRR@4+UI&c z#`CZ=G!_mZ~d@S?^A_+@3$a=2l^4Oxxz zS`N?s#)1Wn=d>KYcHzRWHQKF#vdcHy9k3fHoI4M#01Yd!GBhgx%X_zf;h3xqS{t}C zOd?OpeuCt7=I(Z{Z)GDvi8tF@cgLqeCI1(`LjE$fV6+MLwlRnaE+D2tF^4-ds_##* zGJ4DaWCSd$L*Sg2#nNpw| zLz)UF;HU0}JQzY= ziHy%fh5Xj>R(O3Me+T)f?=ZIIv#NQ|gp>KRLcG>e>f*V!&{xVE;dR_xFl)cBbPwLW zcritP5*s#ICl_5-KmoHjS6y_Ko-sL=zZk6*6-ry>N+vE@XE`7W!s61Kjn=Ik+#pWGoqQ(hFk}c>fed{ zrI$0CAnn-OfRDbfK!{rVpmO!9A;y_qIB9tAf?C>pj=orjW&c(%@FOKUxJkHn*U})6zai=rX za!}_o7LB?upHx+qn|zZu?aS?Sb8@>A7qVd9;l4t+b8%ti(~HljayC_W?#YWf$6SyY zT~Nb*w=Z#C61%*R&!5LnQBHC@R;B*Rr?20wy$RAra&vvH763SS?=2Ko`RL;7qT0KB zOh(4lxjl`elH0sOx+#OolG~~7G_N{d{H;j@`;yz8O_AIVYU-q>ssh#WG8F?PWy$)` zSCrS?Ja^nXNj)zhRj%3a?gyliM=qJGvxcTgGb?X?N<9_)jB|M6g$0eQCPRL^Rt3qQ zHM>E8ZZ1j0etqK7!uZkx-{hr*k$7%&Zr8HpEn_u_92cQ&BLSF)G;=r>WS>Oa3uP*& z6fVk*3rsypA|1t3%tGD`pPG9-@U?LB_-7R*jCtkxQ`y`*Yy0An6FPeLf(iKj zmkVLkKL5pqB>!aYZYJW=?XUZ0?-66S4~0Es%BDnssDB)f?gcI)dxA^Ys;ZIA>Z^L&NI+f+ws=;~GsG zkVc2aME=Y>TmW|Ip0KZUN)JENJNUVH4L_H!=4Wm@Ki4&9T*#*W)bfgJTkfBe2f+UM z1^Pum@N-nvAM*249RQdo_}ik(nH1f?bSHtMUaz!;G{s>GRri=WqSBYpcY@vgMAq|D zdk;T#tN5AI#t#Sm`9)LA?@c;UOF{IX3ybx8?P&d8SxP$|lJ5pdA^y-f{eDxTlE3;4 z{nk$s7)!>1j?qXT{tJac1EK{=!1+VWxE3&qdpH$=A1c&uA?u71viUC*8OU4LLlhEM zI*ZoZj~JYc_F_9sMrxh|UdXP2q8I5>xgi$0g&+{9QveosJ53`kHr2t%2?B-S`ah~>g8(gP6K?YauA~CYP9(01CJ^LaMLr0Q&YPXx8w}skW1B+{^qJ5sPkmh z4zWyMfe)FyroC#RZLUEQ1$)i(sslLFI!h(fL{&vP5p?)wmJloCDYf`Yj{&??z}BLH z$y5BF=|%M~qK(A1lcdiPL~H$5O4t@6fWm)zss^RqPK0fR(hWnjB*ByrtkWxI-No>R(dOZkyA8rTW2(irP;( zMws+po2TzLh|o~1`y1(5FH^Sa@?R;aUP^taXB!#yMU(w(Wq4UXd-=Y)q=H8wk=`YO z^5Aoh*4I4v%rlP!Fi}m`M;Xk9AuDDhMgbNUx%@2M1v8n_&Cm4p{9JqwKbNoKXD(wL z?j(_x(G9c7SOXxLsQX+7{ry+*Y@^W5xe%-reVV_8)T&yFF5>duEyWqI zY2NqdSI&XY|0#^IPmB?8nVX;WUHb9=ct(@S6NU%+>MzO@w}XeJ86ATS(uMrAT=Q%F z(ZFS?4JNJ??b zI(RO>+x4Tu>Qtdx$!~Rq`}e!d`RWoaRl_UzTgl&@{N2Uh-TeKUzjgd=+;CF^0n;nsr-xV2qajVroqY3{XZUXX>%hus>Jc7>G=KRuZTWBh5kFyv zpPGC5X}XJ_nRfy^om?ze6Gq)ZTnOe5ue5=6hj3w`{+eGC%OLQFS9nQpzTZni|M%D2 z?S+cSO&j?UfoB3u(Q*7O1&X3YS^?MR(#Pu$t6#2>Z$G~2!f>6q-_kwuZN;~!ugZ66 z{!>pQQ!t386lx|V>69M2t(21L53yGwR2?c~`vzeDz{C+x12# zUB0f63hJsx`^h735#D{r6O^a$s0o+12yZx1TM$Z2emgR^+Z5;6;$VmMJ3m5k)pI4k zrJ)jke)uC46Ea8G^Ei>7>-+Yx=vKjwGzb1@2_peXR}3RSO+}L5s!9svtp<@K@XH?( zva3o)n{eSg%4DQ)6I(r+0Ua4QpgsK(`wi0i6ekuYtDI-CkaRkKIDXS(2c3hyw%f$h zlA9BC+3Xi43ddHVZmisK^EZ65N0^creQZ_YyzDR`Cr9RPub$hflSjE7oapmcbsU@* z;%0^JgCXCv$A~2gRHb6OZEVNE#iyCXeO1omc%t2XfLvvMqaA&TykkR^n{T>i*#X~e#&Fent12-&+n#U)o{-szoebVaQWU~RQPyO-!^lwVt(;pH%xnMu z2XBZyEdIw{!zgCAZ{=LU%|fL>>N1uvAX}99pT@tzFeI?}Ph(j4x0tt77)YJ}Mg0H2 zgZHE1|3>=%<1(JvZ~H%QW3-t5zp07=p#D=hHq2cemD_K=TK28Xk`~0$`@3y;urP|qDmAI5H|5Dz(c58D_cQ5z(KjteML0>Nq z#SZ7(a*eeYnv%!^zF-Qzp6a>Xk=(}xq7&T-e9@-_Uq@ta55Xz;2t03M6!-!bKF-HU zl@NVO;60TA-cLiQFx1KS`D@h4zdn2?m*C+2gC`veN2-TO`zMPl)d$7D&J$OwkHEf| zycxJ=Lr0p{v~*fTs*A+f>dm3z$y$lkOZGUgWVoznXJnOZ$=v7;qkr#lZ zv8-3!>1tW|01nXBOF`_PJgz^lB-Rwj#AvxSC~u+i>L7GIYUWgPnSoNx)ud&ci{M{B zpt%#0?KS)t2O1=7TcOl zi`7;^PAL)%ix8^Pb!0TzWVTIKW~xawSsBwc3qStaz`!P#^f$TG)FSB47}8|*0e_wH z8u53sZN15CX{^k)$tLrFCM%iOP9;VnOSS$y+hkj_X|kG23H?M?3a{pjCYzdVlWooE zCM$Eg$$a>8D4^aPo%ecjg-X=jDfJgY29L^!3Vc$gx zAb-&0AJA$({E#?Zxov7jnEF@O6{N?a{AA+t*$U2q+6}b=~hp& za)h@Yke;m>-ej+)ewHF8pjI0!{v+P|F4LYu-75Fuw?3}z%3TDw*MDBSul_|+nRP4R zb2hR^{>!|`0wOyUa3YcHrpo(8;*2tEk1i0{jJ&#wRY>t8T7^8SAak+64y8s`F2WF0+OYaR^7kk=5_F?lBNJLwf{n_`S2T?U zS(m9%Ka^S5V^eK1MI&8rp`>Y}y{wePWtBzKiqU#0L#KWYrE;+w)kOs?YKo=>lq2N3 ztV16qd`RjW@Mr+~SqXu2j0|pMc785jtxTKnA`PSUg60+xQ}cpKQ!lav!&q z@%+vw+0xcLnmT{rTbFlMB=IfGhmV;TukyW%f;_tkm?=G4S>DJwI;#WbI^=#G@DSiq zvyGLnXg|6@W4dE4QwO!5n`VY<|ABP-(J-f~uqVR?wEwBbrLq@A_29f3VH#hn_Gc#_ z;`**P;@1^cUYBbAb*A}G_Ba1;ji+#ZsS{V}Jz0zS+j?wJp@MuiNJ<=19hyMU+aEWnWQs@7e<`Tf z2AN|6i7`(o=qVdiW>a-2Xfr|O9p<(&ic2Y=Bk|=CC5oF{JmSmi_^=m?djrNod9e8Eob@aO*@HoD?d0_7d^DyI}L8lQ2V z=i-2GUH7~spyVBeoqHhUTUS^xFBC8IE9t^NYhagYquy|g%=-2I>F=UgLnm1pVvid_ zQD74W^VdMiC9$73Q`Y{NBPYArX~oHP!-fd=%Vvh6R#KFn2Q-1PgEsIB zD*xv)?;*1sGUwq?(ftLuIL2x&9xLXnyd(DW04{0ekhTPew6RiLoHFZFSSM(mh;?eM zQ)ityI9;);`8D=8-U&!7ablCwVJcLy+@S@I?w`*mOl{!X?;g|Yr>(eRKYcmNli1LX z>5kiN8yxz$C~HhH?R&g!DwVSu?RRMxl{HajNAXzfpz%BKe1`i)22}aqx|VkUER}%k z+q&h%|3f2@OTqq77Rc&azQv1<#y^{wnH@@A!c4SWDH1p5M-o5L5Dm7K8hwM=|BH|J zrYW=7_t-RB559OnmW5-Ae5uo?P$ z8+A@4%p#Kbmv*AW$QT-X2HuaBasKZ8kDp}F7x{~>{c?ojTRKH&Gb~q_H-GJm#p@Lp zZ~cOT+(qNFsQgazU?n~2l=nH&8>QWtXE&bmekQ|-3s$*ZWt5%Bcc)QbV&xJo664eE zaof)_!9@Ziu@XL~;5PRLc@irR3aUTZBs-NezC!PR9$4`*5#|}rJG<4Y#L8WAbPNHt z3MeY?XkMu_Jma~-q=>KRF$wd1!gYLwNuS6+{ao{9P~&)bF&rxxR7C4U;U&!&GyD6@ zOZshU4|9U@&CkFjIaJov#~iWg4CTIJ4~pVFxURe51Wh4h{@sRm6W&dD56O4A|6=1V z3Y$D@h+9M4dg40V7UG->IGY+Sjdi{ozoIl=Q-&(KEaI!)xeir%}c&cco(0$_@p&W9R~Sf+F#R05DjnIMbI(~ z8@!iqe$W9b8@@dFh7#E)hh}2XnpjY>jYY(2K;TxrM7S${^Yv^h#BatzeSeknn!E6f ztgQ7lHOQkA!(F~*8)f~LxUG%!?z%TILrvT!Zthlo#)KEp7WaZPHM{O~?<|#jM~X{w zf@SDwb;)LERg(S3T99>VD+t74xZ*}s~%b3zY@AI@v{a))&C-}Ycg0#^OWi_9s98%bu2 z?{*|FDpi@+5)iw8HJL~ImQCiPxh5BWmw)kDNJ6FgH*J)O^vvtoxp+Dhdn7y36@HDh zgylbGI$-z|ytA$MO()EdYkHm=?jrG@}*W8}0IzM{ZVFY_j$8PAC>a?SN^?LeV=^`L?KRQoWFscd4gFPA#UoS>| za&`X$q<-*}1MOyBZ|*T!@-5MBha3F&cavVO6hc`T@eZ$jdL`qWQ+517I~q1)akrYv zIA(i=tkhGZY?uKyG&>X@nA?+2pfKw-o$WI>7nNb;nz~F??|}s{sTbj zddnIwiXF;s9Dg4@i>^LuL@xAj#x(yMveKK*URLl zXhin30@XDO;R0Dh7yNLAh&OR$%pazGh;3f`f=6gy%cs;n+8aCQZ@hl-(XoTaE-sH9 zJg)J&R5Pc2iDv%uF-LA@?@vwJQZ0pB*_Qg&R+U_+8;WXMw&@x5&KC-f=~m!H#;4ZB zI&$M5+jq5xgtE~3!c=BZH0sbgV|QO=Y&Y4aKcmMW?(CNBSy+vuM(XT*v4CI{8Q`-5 zi}_yLXSZ=L* zDKs%y;7e4}>BVd%WIdSmGjU{eC!q)HehwN>r(APID31sL(z%J>pUP5}69+-IHU0S? zqd8Vz4zFLs1YGSr?PmXz@IP~nv%TeT9_9H~G|~|~f9uy^k}Zd8S1bJU_l(+$ zjignI(A#W95nfn~BoQZ$$!dC2=S5k~uMAS0PUye(F(eXY+Yt}1cW=0TY*z1gO@nGM zP`0g^#1R1y9KOeQ*4D)*s2u?^cdaPk*9TI1uOdVIE`9c1inpb=#UN}H0kPgZU+Y1G zxuw2VZ9BFc(z3y~Yyya{c18+P-?|q$1PIu$uZSI*1RK~1WERm3&8u=37WmeMBlBWz z**sQsz7;M-u=IU+{7zr%4^x#bF`hy$te59dz_+ZEWFUMG->D{D`xXfNg@u4hE7FyU zAJkNUqjNZS)_5`;sA)p;-IK`rE?8<_DPJC#>is&I6=LEJD`XZSHbFKK3OTPor1y*R zo5aues_89&Hz7+XT*AQ8b76sgWpyGaM z*}o}{{<3DnB@{HTva{*v2Pv09a$w&l=7lQR4}YWaxDA&P8FAiF{4pVu;6VYiUfkyX zHhlA{D)+3v2agZwIQRKTY-w>;Q!TQ9U+dQUg2WijCyEWGj;Kcm8?>`e5J24xl>n^rJ- z{U_GIZn*A;3Ro$OY&yZK0bY@=l!SR+FjpX$;QkXcJ5sWS?%*~vXGum@FQ_ylh|&s; zjKR?>SfiQo0{lixN}NlP4`wkR&WhxXzmy44_s^LG2pZgpOlgFX(8L(wWE!~Rq)yz3 z5<>-uAZt%^`H8n)>Z6$)dDTtih(={qXzD6ZaP^W%%YI| zH+F^1Vlp}A-ID{%z2RST@{>Pm)2)JS74EAit3cIqcM4&Y&eUI_>?{<2jii-5wSc<{ zfI7Sp>E4-|V;Vu-cUHx3z6*B+?#hW%nd6UwRytRxIYk!9dw@vSe)r%qo!jU4@OaNB z`cD6T$!Z&ASE2LTQ_#5_=`+$*S^m2hz(Wt7>02=+m(o{p+hS|p8IyB(@%Pr&JlyKs zhm$V|<`hW16O?dBvxbH!Q>>$)H;452Cydv(J3>?NjCL_&!kB}r6b{~_jxVHWGns{* zJ4VA?!p@^%)*16_xT>Dd_K?$wA~%RhN#hqTaPl^Xh_9$<3{t6k>Lym3dB-5)L-gKPO)_&C?RB2DU+#W2 zPNuD!krL|;#X5@Rz7A;h`Od#fBCkI;X5Dj^%Ee?)c7jDWV{TZ~v~u4~7S=~IT5Iu@ zx9>{9M61IX7|se~k4VeSVBxdoN9OJU!@G)%E|g6?hf2hXxvW;59pSs+Gyh3r%nv? zuP?f*;!Qmgr&pgS78LG2_lxJ^S+R^fjq}mpHO|$K|J+IiFKZ#Vx5V^jW}}q&X&0mW(VmDXhI^pf{aF4H5$C2)X`)E;I{aIFv3*PZ(^**Hl&22MT z-1g6k;hwzS`-%EYRuD+0e|z4p&lFeHR_6Xk@qp4V zu$ArdD$@a2W(`+`GM7l<$YlYnCb@mAavDOtd3NS`dhXXV zqD#M0*V45Q8HNR>rRzQPmhx@bKLXtPxU`^8xG$g>gM91rvo>l1xyHAmUK}qmX372U zBqOVsMskAFa(IvV+r>EC$(4LTxef4-x-pjBs8oBuK%R`?2acD>-qCxSiZUef)*FW4 zR968Q>kiGU>|S)L-7gRs*Q8jebQGkSm+YEXd2r#25$EOryMGjzz?d7p`YnQ75p)^MMxFWstWr|i9T*vrTGs=gem1mGx zTQ~Hjicv|5*`pYNq?nf#Bfu2nDkkd1yrLMvp_o3!2x8^=yJEDC zQ=s7Ax6tARU5Prj!3%9lcI>P7t-IhVJJ8;I!Q049?c7dpLl9tt_bTmj$ETH%E$SQ- z>fDpVYFzmY@!Ix{ac16^F$7V#GX(F0r*06AP{vf=lD{$EhpujK-aQ`xA80 zzvu5^{!R<$WPP5$^ZC1DYEITQxHscI%b(?m{fsZg9aAB2$pQcJ27DcLRQ{mv42EiA z3{SPJ)bLYX-dL`ZN}PMkkqOQceF>NqN#xK{1;EqhayC2E@8)h{NKVQ0BQ z8RN~V9gfqPHq1Vx``ebWoBcdix!1 z$`pV*yQpL>=qAj9po&YrNj+cpkkm<|uhxE>*6M1ph#R0;LKBMw2&F`&2Kn#xcFqNKL!45p3i{=`9f`Z zY=LxCRZc5h=z_W`=ifvt$Qh`?mbvu;rtjGO%|PpOVp1|_sHLAx)A%He`$eisSl94G z&dJa(whG@TnXn+H4zHcj-T6ZCG2Kuk2-=nQY^BAWBv+(D{yL+%+L=0k-qgydTkMPN zqsd|jTz?jXSQ}p^Vf+so5tWC1%OB;-j4n{=UUW;w0DGbST`s#ZyNDpt8)wqvd?Ld8 zT@iMA*jCZ=(C7JWhc~0lJ!zh@^$(-!q4%MtcTIL+4Oiuy$Awjs*$2Z$yXQP7ulu}s z-lp_URP8wSX8g(Rk@z?$k;`zcc1}Ql#i}uRQEKSk@yadbOiu3dkEblue9`T;zue0*LZN4I5XN9nCm|r#eLHzE7 z*|7f2yvydh^->62?cAwg!&MwZ9Z|QAAW?UYT%O{LB+l+gpfX8J>TnF-izW(x!vguf zNMc+EUHqTjeFpt2Y*~gPKn2_3H(D}_UkU@L8LKe-EsC!43&2&h+}x zH+@na?*HPCEw}IIzsy*lI3_^io9_mQyV)N9HF+rHigm940Dw3vq;_GxCEiy0401lp zjCG`6$1>w?*rA<%&%QB(J8Yh**|LvC%vZQ>PSZyO^Hxj^&d->8C%_$Me#K0@xmPLu zU79dhIBCwfwoj7+7cy4o{<(h^-f@Vsm?Ww z-aIadjYla_FmCJ#n9odBO>60-Y^Sr2-T)I5A71uFuPoL8$N?52Hs;OMpWj_i=~#bC zHbr3! z;8X-{WcODDNS(G!CT1_> zD*N9~}8ixAW3F;SQuq%bmw&>*M@_HJ+(HiLQ8cTNq! zMZbT%TIXKzsy}NV48mTbSrCm^sIT{vOB->JOE;r=dV~Pzw>OS+g6uCCK ziJ@b~Bi9oJ)Ywn1b?-^8jYlRIQ3J`9*)@hC*Y1ENms;ok$19NQlr*^*cuxcwvx z928V_AA*8GQ!ErbK}DJYx6$2!N?_0+@F-ZMi%_P zA8r<`3s`avCG9bg7q&5dgj$iNu=Z%7@EbTDg|#aD;1u>!52CQ_vh1jOAC{ULqrcAw zsuYFW{%RJ^CGz^)CwTr^aSX|hU3hUhP$Po z$yh@wZ`(9|k!OZIQ0jd)mY~%E_tb@2{Z20}$JT%89L(4QuFnRQ@li_PRqngrG-+6F zFD-NT>mxCJJ|A_)`rX(&$1v#c{YlEvovv<;fJ;&G0e(i-A{Pd=jiCo~%-e!(( zUCq_bv>fM|@zV-AU&=-Oa$HKz{ExALEce8{5Q|F^3agKx;+o$Cfbno0hNV%56Ffc8 z1m#xtml?7HO_~MtK!d44_T_@N7K?HgBhUjpJ!{T3p{FJ23=@>dpP!?y)Q2g#)H!8Z zLX;)PTt=wA15v&M=5F36uo0if!JP^f5_E$IZRp;3_kjfk`xZ#$MhAxy!f1eEQwws2 zDuBMzXcTx-SLlViW5PP&yF)bvO>U#dxL`h^lo>!_XT-l5M+gEh zjseW{BR#Qz+4_80M>VhopYdE->il@hUfs|$>R@XJJyDEb$RIkDrYG>k!nDC2C1K5n zR+2We2!4j=Z*w4SHTo^@NXc&&iE7h$6>}ifu6R$X4MVS>Sqgali>zvx|w zaTj&IltTwA7tI3h^K@Tzm&B;169ZZHu>$w#zxW9pfG@CQI^ab|=zx1Qe&XT4;HKCP zSS#e#4K+Qp`#l%a;{vq6yezdnw0?x?c26)grWA~T7=xZ9GxiX+PoiQdxWwju9TV3w z)-_}P?cG!8n%nGSMebd_?8i9WrCkx0WQl+tBz07L>`3 z$|(hlM{(;Loh-S@y=fFGyD5dvbiQ*j6A!jc%C;ZLZCmrQvrO?#zc5#Ik{z26wKk%G z7Zmif2M#yyzQhBeamee>G)@v&W#!34CLDGIbyfD$GDH~WTD7zQf7~4`Bnyp*S?fJMAejpnM6Uz?> z$gm-yj1GgG4SD$;3!j0ka51U~pyS!i#EpP*thUjCW@|M5`N~Cw3!jxGPSDV3FdP*B zo_GvitS$!Y+3!5d<$J!?zk$4{9$`w1zFbJG6_QeY@e$5z(YbFd+kMODoaYVwBQWsX9W0^dJ`{;hjKptX z&2z0P3sxsaKkYv90_uo|BC*ZIdcM2qF*U4IJ+5}*Erq-*-%kHY6b7rEsz)(B7|m1Y z)cGTD;mGfUwKR6!rkmEBQhk}~g;+K?~m&?;zCVMt@g z>m{(hFg6vHp~8i{Q!^Xpb)p8PUw9}kPdZOesTh4yV|Bzi+4P@HoM}~kgm8AfZ8h55YabzVt;c?FAaED_gZjRag>svaE1sQpx@9`T( zgx=g0`b{b08dQfEJvC7piXal@oP z{>bTnG+g@snm@RFo~a3Qj__icO_@XLVqLoV(=|7L9!5(EL-j2$VIHiB&n++$PYoTh zCcY@(zPd#=j`=4X{=dAv3w%`7x%Zzi2}FtRNd=8Hma)Vd3f5TAlNhu!WQNSZ1W-T{ z4N41Q6cq|dz$y?3Ak*zAR!{Yu+LqILs_)y2oYrztE4e5M7a@29FV%S87%#yKx1#g^ z{??w!1+k~+{Lgvw`DFIqYpuQZTF+YRS%X&pZnBd_JL(jiiZ%e5A^bH1eg8OXl(A$ zXlxh@3j8}a!&zkNTbgUE%3ig{=R)(|7N#Qs`!-R&;@)jE*9Y>~acz1%ujz0etz5)| zm9rwhnyd8VGubve^RZ00Sk&wS3&q9-nE`ue=RmfM&i?!~?UO@M&u(~*jPv&(QtVr@ zslJi&C7;)g314?m$RCuy02$oCuxF>UtxZC9&$xJYf9VT7!daH$_7KRq-gsXu}6!NIH# zoDMr^S{Ilg9Q!AOYu;8U9x(z1dULh!G2>#&BuR9tG{ktk4!^9A!5z0TYr{$_dEmmxA(=UyyWS+8i>5;bxrC(xu>aSaQsr3)otB<-tA=3c)*s}1;j>b z!!(RNS3UyJ61$Yv?gC)9K=`0~+YO>ulHdT*2|zz4voog`h%%iAAwp7aS(iOoPeTG% zqtK`QDT(TC$j@cMyG&Uq=8%F=y=SBnXsRF-C4d(^9#(=n`GaPJ5)B^~sEM~>EzhKXB)^`f1+}#mg8awF zvo}+Dk_@@xKWkaCd|sOxGwL5|3}e8|G|hPyb8z5w)~X+=Gj=*4)f9{{1)&_X+n64Ws_=9J-rsyIEYs82Ix4lV?wMbst_*_=-1#-Y z%&#kx^Q*rzP7R3HIm!9u_D0BxDTY)#**mxS?$?Tr`C1k=)L)BdY=qvBY}KM)=joKN z2-3>W6sqcBQXJ>J%N#UxTi6~Z`r1BX%iT#Ix7TQ8oF~D#HnC&;f2_~KeK&_M!k7Bf z1FNH6MrmJq?eYC!6WyUoWU^Qo<_N+0>S`j%db^1-vmcmKXv2@PsrF-tpPI>uNVa`x zwmIC{OR_zCN-oW+%XA7sY6uKz+_yva?xa1G-M>73S-LrI4h(p9qd8oPp;*7f>WmYE zCA;RomX0592wECp=-VPd)ca6*41DxSpLBi9D)X7BHT#|09urD1-Z`Ym9xG;r{kltA z(al+r_)kT2nK?W6dFHJBVIaOVGd%pmq-TIA(J11BhDUKK&Meg$aLOpBGl;SO$9=We zb-H2Byud1~23J@)CN*HM5)BnIzhQfe;5bR0kd{2LL%SjA-W<0-*e|F0^B(*S=QIem zNZgqF6J$lrcOH4}b8IU=$I`z;y&3+wOA4-u#20pjJ)eZ*w{(R|zNo1fV+Tu)#!8Qt zlpd-hP9ysdnw>@iWAah%W0Tp)CG-!+h)aC3QNAcWT6Y$MwSsyf1dgMBQF@f~dFn`Z zN5Ebw+R^0zn9d3sF_TDMRKPI5JWMhV`sHDYdC)Hp24?1$8SJtYQZVbo;`9?2l8`QN zq3rj}`P6LgS|FUs{6cY)a3W;Rq1QbxlE@rQ&3SZgc5E&O(Ye_&tsk)RgC*ZKYykTc zbW5O`YEBpzA9SJfGY*{LWm^n2)$l=j?HlGeUwn0TU7k7LwIul!5$LQTPcXw~Qx$9H^jRv>|+Z9}cF2cpjbQ)CeO zVjReSw}~!uAa5-&MDl+`!D>rsuC z4rcs<0i8p7{9Qb=Pao*z?_w*c4p!%*Zh9Lckv8(%4!Fk++WPMtP8M z?jrAh(BH+!A0!gT_jj>3l_TDFAAc85kn_Lm@1ke_kR2DOah_3deQ(nY+Ty%1O|Wls z`gaI~_ar0G;=yLGGZN9XlGai#Y(JfRHs^t-oeRkv*$8v%peyl^@IiM7h=Tdmoa1gV zYSc!53P(alqt09lm99dFK+sFo&m{fKz+}v~#I%!!GGE}awkv6zu8*NW=yp3D+EUY`i@rR1Q9w;G;mm-QOwg|skD3LIQLu-tbIkZ*^qnPdT-_{xe zC_ppBMz6~Q?q!WG^P`r7G(0pl+wcy=VFE zbk5@*4Yk3gb#m%4MUf!TZ)eeghqdLn!r5VapKV``nI;4k<{FFc7blop9t$avFH^{oZHzxBc)j)}qi8mg%(VO7_CS4S?o0%-M(NmNZjl?!VMAVgCELpZX; zl^3;XH4-rtSV#2ikI;`Nxca*k!yP*cysNYO1^GzT{5Q=js>lFgQN-SDmbs7(W{&C< zhKY1&gOvE~l^yiU{#)4o^ImR>EAr|t(U!{Ay0_jm=hjuSD9>7X4Flt<-~IWrUg~$j?+7WhsSN;F_$)rS=uNXTg;DaGL<<0Jz{i+I z-Xb|(&Y*`XoV=aFw3!zuEjFE9a`1=jl4SWQQplS{deiyrX;bWEw^%O4w!6jHV$1Q( z7xI~6J1GWOfjgj((pqgGdtBdz)d)*KxLZP+cFPNIEQS(7+MOkU7K zY}s0p!gjnv7tW~$x87JRFq)A=shN>6+LVA?I`nI_CT#JycIg~P3(#|*m1Yy#sVVKm z;qh4;l;CRhdhUIT>YZEub8=@8p(EiFf4s0t_@O ze}s#Zyn>2bE6IpRg`R}87O&-}d>ucv_waM$L+Ehot6;kpMrMj?6ZUHjRV8nak~}MU z|4D0T2IwBA6(;Bc_CDUw0~80bD(Hf@{1Ls&Lzi;yQ>8pCZsZ5-s-Pp@a_}Qj2oz8y zXEE5bqE;{Ovj!>R&y8)Q)I68%`!K;{S)WGxB8v zCx<2qy2ppl*O098@f(PoA}CRt7YdwT7n2Jf1~OCWjd%J(7M^5^Xy+DBOQOZ5QI$J5 zB+!k@&(T-a3guQItPXJ{9+Ni&Fio7FZYb;^w_Q1cf{A9tgE}v7(3Rv8`-aBIM=$|h z)V*8RWK#sq4DN$#yxc=ga35VW$V>-y`0D_F%uI8*@-Mw?(37EVF&L=)m{02b3Sk09AEkLs>b1j~y&mT5&SZZX02dTAxwR$>Med9-vt#LzL}PhL)2(lDCO!5z$}*Ofcr~KFntuw| zd)KJNAh?~53`j*YUNmzo*vgjU3)+SX@s(aTP`X zmSCvF(RF19oy6{vrp3+XWxwFO0~?a*IKBSX*FYv-kc#jOwn1F9*RrR+X0Rk#X3H^q zix*vS(M&S0T)EX+Jqk^8IH$NPrA6Stso+iQF`No4eO5GDD|6+O!o}6XZpymYWYwG` zgg|rC_I=7pE>#9Rr!uEg1|ofH!|NW6$G+VZaSxCDY6DH_Q^|bOIm3+P^5-xFWL8(fVgo6)~vCqpqQX$8o5F%=I> zjiV;t?_Y7CX3}xgIR4xTz=?3D(umQ<{2=gg?l}NY4x1)5nS;J+jr7m@X`IffNS83R*T|y!`Yy}#`A|PqD??W z98O{gwn^1H)`L3A>~(&N4;Yw=0uiTv4%OHRXE_)Dirfa=WA#Yx-67~zt4^J$HlWER zy8>t@GoDvcpZF{+Gi((=@GNG&$F~sFWH}E!a7G#~jPR5fZsG$)NwJt)xoN*baPU4W zS1nQ}TtS)3!kc9O5P892lowF=3ECgxWh!dFZmrh2XXFR+*GB}K_1XRF4}Zs6c|VDi zF$Ckkavx&(X9weBabXIVfGsLGd?!o~o}B!U*hKL74%JMx!znAPvvH%z5(16br->Z= zDl@B-?Wbg8bq4Vsy6LmiSXYV0!0K!-NMruHF3w|tFx&Vtm35w2fB3wb>*^0z)y$$l zR?N>FOZj7zxTi2=gB&Of8T@u#hHcTnQFz#7+Y&6SOvj9?y zkj*aE`#BsBcvE?rlsxwd0nB+c75}%Mk5L`!Aoda0ul|e4KuH(>qT0AGQ~0FHR{WhL zg9utz5UmO4`WRaw-#Igln7}W89JH?3tAsaxcBZNupP@*>ythj^c-SXS@)qZ_J*M2JgAytG07@ zBiKs6TlaIO>#hf1~h60m@D4VZvH)FL*DB_`D zUZH4`Iad^rVft3}9(RhzmNUl0y}mw|=Mnkr@q%7z4kza;u~xmQnAJ=&G?fUr;JqGH zy5F6;M|hmiOioSVAK?eZz`3B28@dY|PgKK_QQ!br8yU2O6(FA}Oj)3BVtQA-OO6^3 ztqQ#88H+@BTk*>R1QfgREpofKCaAcAbOoLxjH-znsOaC72b8c&KLD)aJyHbNik}TTWMU z=2_Q#GmS{AXa1jAcw}MNHLcs#W@uwY-bhB|Aijh~f%q3q1Z-`wR=o(Asfq4YH4_p- ziFMNn^WYS$=vjYPv^vGl>2a%o*UVaLZa+B+E!VrU@JQB*0R^x>>}`V^JSJ zylfH+b(15|W5P!dQ2{eT@#ekPk4R#s`MF7S|0C8UYlY8y#|-LTE#tDeWqp!*8S7e0 zh1)Cgxn*r|`vbx(4!Z$yt2-@;f<)r=T6a*ZB>q*;^Oe1mw9)x=mN`w@MI64T6bT7!GJoqIg3oO>&$P!6s{D`1^$$CG;@TYD>}KmQhQ7ek!7jzQXj4O zp$6$@6=z&Yt$2afFK~3Xhr3($s{Et^l{XQIX$;{*3#e-HLn^dGKL)80BbcJ$5oC?u z$gE7^bA)X1%(A`bK>Q5Sxi(-2+p}Zoy5u2k(scyOG*x^DI~Y2vZdvH1lX#Ok9Bl`! zRqbGvoWN66JM+5g6`m@Y1>Py`BY0%oE8ZgMQf7*v-DF~%DyVbCnwdx712$+@}I1Bk9r&olBxDG&0 z_?Se7$RXmHKY3Lm!>}*V>MzhqDiQ;?P{n0MBZw~jo-D)N6%-v6LH z@QvMHB@b*%<%r|ZM;`bGa{iyl1HlbR)&bsbj%*T#)Oo%{kZ*IYqgAq*h6Pj>wV|P~ zdmGD%5ohR^RwLm&C8>H-=yKN$3jnsdJ7e(QjlO=vb>8&aUJkg;*@ZKfVaNC38T96# zDE`ZicNtp6e?gdH6w}Yxq)D>u5L1)v3mExuY?B-YV7TA9EQ=dWT63JDygO;9wX2jH znlyG%}S26`)y-T>Puyb!FN{awN@wyG*NZ=G1vJOou>j!}opr8zR2+`bfUV zx!;)EVlHN)&p5v~wwXqg%H>WSi$8kC2X;t&lOkd`q8|9pvJD!U+cYw6{1(k3vAx=h zHIZPwq*z|PD($Jy<*!KJqC6T4%)oO4R!=x@FdUm*QM=KZkw<;Z!gG@XUFE?o*yTL< zO=DL-Sod=6yNNnSOo2Ga-cP>)m2Ss!-{>#mZGumGM7qofxC>%&x8U1aH~;OsuTY z={n!M@I!S1AKoVUwnS%bkVgF#`lVtc?$GU+tXpr_U2ehpPP$$Fr@ap?dbV z%pX-ijU(*6Pb{@X)P{$?HE>K4vFZ1KlkbmBe_-KB@yUKur<1WqAvY#^oyX`T?ro~= zzXf7f6IEoLW@FUTReawA+|(^(-oZkefy<+HJmcDe`Q-fOkDn(3_OwF7Dh%0Wd9kT0 z?9w9mG)>mTHsULInquXvC2fa2HG|fb`t&h1?;g7}zo8>NA)fLg=jRt8G6=0EhC+H7 zT&c3^l8yT8{8)K>t~7-r_S4bW@9!fCGYjWx_%|vPvfr`qYbP=6*&B}id@Xmu;&o#2 zS*!k?o`>TXXCqIO<`BbrI&i~x;kuOT+eUV&Mx^~Nh#uD^G5Bb!fQyiy9c+u*q&zJD5^z~=zI&ogWzE>N7y=fx_?0;$FH|#ka_MrQL0)rOQB=E`C zOYYKxS%7P69FYu<4DAuxF2RG97b;^;si(3G44AjsOnu zFv004_mox3&@cqb3Rs)d*j~QhUpDsbNbBjncf z!aWl1q~GE$h@G@ummybhNxOZ|JUqJHZ(a#nn=cGWv*A?g3^#1)$HUD70|#FXJf6wB zo&5ukYYGMJttxfL^W2BxH+?~v=6xSp(2`GYvqB|1t=q@YkdTLitP6^jpRop`_BC|ctaMk$69rEQR4iwNV~kDj-ul&# z01jU;wyvHl_;hQtP$d$p#)tF8>lEZnBntlUxbLwb~^X7ZwoaHT(KJVO}(PBz4v1 zZ}inAi0S3scE=9mmaF0YaM%u1k9-F0dPH|KqV~SxHSTuj6Gi}!!N)qY>ne`@Y!-gp zqy*b^FOedcu2A+w7!4yZE4OQ_u@Zt!0KN&>CVXZjo^dh=N3yi)Q1J|Qsh@&yUHgHE zJ(coX19o*-4*KRa&I@~*!yYGSPo2U(QxWw%6ZJF)i_0fjtAs=`F389kkLx)mI)3Mv zgkTzfxaoE92?}ZAIC)_ganzo&h7-HEu-r%2=y)z3jmueuy`wP4Uc;+#`A389R>8bA z`VI1G_giADh@s~VF2P@+9M53{el|9mxIHfA;x=#b^GH$ED#@e6tm4pe9{QKMZOq}=fz2d zI;htrLT%yrPlW3PNIT=s033s5jY_bCcV@(vhiNf)S+V6&?kKNgo+%kKJGooxhVD}H zlBK+N`SwXC9qht%PpYYDC9ulnaw9CmF%jb3 z_F@ZQ-Q41vDtoa=d=B2#-q$MCGGloVx8svbzsb%FBYoH{;4A6ST%21D+uA;AuQQ|J z>4Iu2H2VOmK|UTv=^81YlM0#`naOM6Iosw1i)WqhyY*}s zwL-Z*=X~?#KvO)h(Y&db?yBacR3XA5ok%e^yAz4i9#RgWyb#z(`#Nmzj}^bYt^&*?W^CvB^oa)h|Xza)gcQn_cQ^f;(X^xwNZCuk0MpMQRff6QdL%| z70!LVQlrV#Sv=T;Vy60MdD|A zr(7g9x;J_exG^X6kbWM~4`fG9NYYeZ6Qk3p4@+G*$GE!=9p&ztwfszfKzG06XX-kB zr1zCG{c+trskAoTffRG5!`aO-zP6`!aCeQPwD)!QDL+#W^=*H^9&{1P$7@rg74d9! za^C|44Nch*sV{L}G++hhY4!DHG7IL%f;E*FJvNWwNaf8sHqYOahtg!i+~D!vR0?Erry&xhfTXXYjxkOQ1?qH{~VLm>r-FqS+5p;sb}3E!_#SZm8pql z=F)QFyMQt8H^c?PD|F)*aDu)Cy$)H)RwZqoL>m}=Dzv)6kuYjz2dtaAtSb*dlp^t| zyx=Eg2-!rvR&+@l;J2&JWVUn09=R1^!-%~hyUD&!XPThB<^eOE_bQ;tl;r*tup7hI zwXGw=o^pDT;RhtPmF%`AZVPy}21>RsJV`Eup{q-p=Re!|4IELxvk1n_x$l#(^=-ae z)y2Hpu!2=)o8)ADI;C-x>&(;Y+vR*B%i7WzVJI?*Vtg3l*rmX2Vg*J!c4@VHH_9%( z!Mz)8moo0k#gA)^?z9*9V*x+Ct1!At+7FWUZJ2Mxm({C#;$&UNS?W4Ciq|cQmuHBe z>ZR`-D+tG`v-oHK^!vHOfvE1_-{HTD|3e1Np)3DzJza`Dd^^AX)eo=XGCTJ0T_#P3 z(gS59(rd02jW)^ttaxr-U75xzY^XF0yJl_>hk*7>^J3H(&u)Zp+{QPt_O=IM@$LFt z;fT1vTe2{3K0IYJye4*G8R&MRPp=wMg)h`k96>nUx$rON=Emk0hKuJ`SSy?8@1`02 zINv@SD=|irc;P3Xg-pW8H1_|>$TY&Fp1e_#it0(oG=vSo`Qa=i7vzk7ls00>fz+ZO zdw=HbJolApe4TfVOoQCt&?)M{T)SG56JMZVM#26-L%1M4P#+%Qp?Ynoo4IN))wL*j z9nJN7Jo}T^psvvvBWXq!n#>=L-`Pmx7+Ng;_CXg*D^M_{*Z5N~{CUP1OUAzzR}QLk zeg7aCiI4I#C1A7T!DvcXfjEqi5nqll+lT*7`PdCz1+qpQH2+b+$}1d%G{=f$JLh-V zfbMhbI&!R86O<9Zc>KmoKh zd7VSQkh0bQR*?<^;`B%gF#z@uO_d{~pgnewAsg&)2C1W^LFK;s!Eh}J=p5BZ@1R7? zl=@1SX375CiawC@H2z$1oY=Infd#>;g+ul`8?4D@jOlvek4ZUth+wzo)u=}cZ z(qaQpP5ArP>ory8XkS-pfBcJ;P1>04^t_)mVW*m$I{p|O8M#}^(BF;05z`x_-N5~d25v~Lp47qI_| zRjM_%DQLgR8FfYeT0X~VmCCFYKj*&NUI0eZ#Q3PC<(>n$F=w@jF%XXOIeS;bA!HrTeWkIg{XTPI8=DpI>>V4M)dg>K$slX_9OyOssj=~l zbB4Dx9U5Y{4{bU4%+Titwj2Ji-B!|G*Wc5~?sWvuQFQ~fskO~N9J@XL9;)6H=7-+u zK;XPR1SA@FAAqGqe}5Qw5=hcD`fGKYNlC_mBSnYdf~?WjiuEuCy@RY(YiMs@`U*rZ582Pf$n;aB=#{3?T>uD)*tUFI& zczW$$AWuizrXxd8nGM;^!J%wRr&CX|7O`+b1DgYh$wkI4(FBg} zu51)~rseja{19ztGEN!b3l47yB-)IX?`3{{Qg4k?8H&15r&TuO2@c3}U+}c_DvfP$ z5)Q$VF6)kTM%o3>CxL@6C@0U;qMSPuw5!{HP!D_>yWxY+ejwc!K5c=6y9FQi;(N>l z2o8iNa9I(;-7JAf;3>6(MS0`xXi-6;jmcb;JG|Whr!8o26Kry*BRI4zIM7t0sbFdl zu1&&*T1IIxs?%dQ|M|#YOvy2xDaE;_xaZm4h3TLR zm}K|w$O15lmc-KypMPQ939~B!TP#?@d|bYShjQ3H@xiZ1_=M(c6e~HA8qg`T3)tf( z>0m9UmGNGr{TAGFOicI=`sM#Fr=q?7)r*(nGXnkpl2w`>;z%UTN-nJVdtQr%yk?qhD0ZEZ+Il5E}6;yiA06rSVd+WrXVPwLFzw<6N8xH_%&(g@Do z?VSi!lREkFlire4#%^~;{luFlACE)u_}?wL$7jK@l6!qUE$x_*&MmOdBz&jn0=E-~_@^ZXUud#J z14!W2UH;XD6ei4Lt6O-xE|lDr7@X~v-0YT2xFtVo4IOk#{w-NDkr@2O@AS#gM|7N0 zK)}e9+pswKh=bo|#6km{+3hSXZur{0eE43j3jFw>v-mFYg{M-g{9dQfxCxo6T$zbN zBGz&ZB!nBBNa09^6jt)Z!#_&r6 zr}7hfY}k5uY%n@=2@Hgz;rk+W`lBRb_5?_$38>~{3^bM( z+v)iRR&}9E-8ui-l?|;f$07lk^_WlqDMR-ni2TE6LUB_!u)xFi^dX^=WRI5*W`#%X z+PO@j6Mu_%8B%wfv*>hIjQg_lB#x2QT(_Y(KXHXe$>D4b{gR&1#=T}#AH36W`yYSO zjMu%+fG1Qt9&e`JTW+s(0HrKO3}Z$65*_FsE5<4H$?t!v#`bvpcSp6`9Xwx3xJjom z(AZi|RmcgEs|s<^Zt8VciMu#6%4645*Dqe0_7AMVClz^cud3*aSi~O;R9givMQ3h{ z+PllaJsHr2MCn{(_AX>x_G)eXxW)@$db_p88!R3-sOH2(W4NI?x1?!)7yoF)wX_@< zlTifydG?z{9IsdWiFbIq46QitxGY7A9AHg5^Lv+&XOzG*7hS~ddCl`nIESM{=N&wr z1dit?EztX}qPTV5-nuOE&wSJ5Rc*7*+g?|tgiA>1yiBi+GWEQK^AzdAUd0K21S$eI zwOLo9&@DU2suw$l(IqJ(pM}o5QQo^s>Cn2z6csbQ>I%N-9g`hsIGn-Ln5<2Hy0X#i zm_ZbsZ)&%$L|OByH>mw3u5da>Y+t!GV1>7rw4n=7y88AUoq(xCov*qqi+8rVt$Cey zc(39IsF6OI)RGVbwqfIwd?T&y#MWgxDC^HQca%w<=WsG&f|eu|D7M1BT}LrvwT|PJ zZ#^W-xQ`X7#NHoUJkWS0x&|SmCKa>EN(>%I5wL>cyOy6ruv@ZDi!B}!TRb!xyXKt4 z;P)Oh1x^!Vw!GCXupzd1b8K-71zHn>x4H#3kcIF+dpPTL>!N~kyT54s^!g*;sm&y% z^K11-&a+m8=}7&NDr?2}xEa3d=9i6$%v8Lz>~z|^S|jb6XqQM>%z zkliX}qQ3NMk9`vex5xZE)H45Vy~76%QY8XE*YrHp-BC49Ydap=zCQX| z0BeP!{`prgS+ws#Mmb)Y9vqH*6C16m0KG*pT!CBF6b!S}NxP?NstwvWv75Tf7)tGQ zrgaxiI4}SBIE6z45%$Q-p1yr6q6v`y3e7{|vV^^jqgqvM7XF#fLk2c5(X65+?epK* zC+#3LI!IeJZuaWm@lpwX)6QbxI3MCN3wbb>lbL&P1wEUA;c}q$8KQy3rd5bnj4Niao-AW{LG2~PIWju3Se*)zj zk_KyovPu}vcm9jR`6gSF7!WIV)~nyloH+szt^zg+MAq^*0NtMm3EMLR+26qRp>yci zIn2n@wCs{;7HJk~tb=RLF=_Gpjb~76J<~z%0vGsQMyTQ*O>g<`%bovjm@dK}KCyyW zR+TV08{r29ZCltq>e(JFZV-02R^>5TpsaHvBZY;%XKo#3u4munUI(8$GcMJ|Yx zeV(v}jmo#C9hkia(WgITPuZOjnHk)TZu+BdSPSy3^|u!Z34;2XTt$JWU@BAucV~6Z z;?TP^6GYreeBd3af|935qU577<}I;b3e2llHCgA0VH!l%#d({?X*-$E+uLOCAv`Y8 z=x#|1D)|EVwJEUdjl@!&EjU0Q8M1I#WM(tbP5U=)QgqW*k8r^sS3>AG^S<-x=ol+! z#clV{U=#k$15I`RC#PKtO_Z2i8O4JNvT-_m{bcKSr z<)oWT(r-6I!?>QPSB_x-CHZfucmiVh`2v?mfo4&;VkF*>UsyhzjoN$exI(6|{Z|

kY7r$7qO>?@+#-=is;uXb>LSfF|UK2%R0gwObWTF%`Vjc^UsmfNpmYS$69-@_{r#PlN0yoWIpdWaEOycF8$wb=Bfw6ev( zq3Vzm#l~K8pOMethcYF2E?(n`m__!Z!gH;h?TUE-g}+eRW+J+&@Pc2T%MiywsI8$5 zB$)$5VL9quY_hGP&8Z|}Q3eXatAqUCvo<$z8olZth!B=s_h9(ka?EeFHzCR;vIb(TW!cu0DS{`0G_j)A>`# zDSwQgsZgjOxr!|!jxQm5r*+=$`4=dAv$A*f${v!+KGo1{8>Gb+@jOQy$l3S-@4S$$ zRMgN0XPR*fZbFZ>I^%edBTo*R5vi%Lin@HxxrzLC(iqH;Aa(y%4_Q58;!&TE)FjMZF;&ow?0pBskH0USA{ zOLkswQXkJ>%T+!eM9?aVpU$+h&F-Ip)@gr!DMhLZ!XUeOl30Pj+g? z`=?%RG?}%fPGUe-m`*XxC2nL3?qXN8hM|+euEnfRYEtYR{>`+71FV9BpIFnoMDjCo zUyS^q_#t;*zrqK?==JGCVVEDQxoVE5;I@|MB>s^)BeIULr_rc5~HJqDwB`FStTJW$0ON?(PAy)_{A5!a}Hka`6@s%F_~~zx092;b3UuIVez7L>y8Fq z6R`&6n*FG;*>Y>LpH9}28k_h9?{}V)X0O&Tq8JU#BdRQ(*I?)_=T%&NSnF3w2pWx_ z)VN7shKv0ig+O{P^1mvxirJB>SS#y3xR5j?!&><<^|}qYprNT(L-3!}+TA7lX+G_? z;Y$seP6LuX8MCWb1*x9&dX3%REHg2hDRF zhk**Rd<};awZpWM*a0$@${mlNMaS-$(X7--+(nx)-OLF#`#J#{uA%v6l(Lbg4zMbX zDEBl+JlmYD!oEq;->moL(^xCQbfUsp5i_K}kfdus4hZWTyNxI|o=BM#@-h2uqynB* z(i@8Q-{f=BhjP!e8??OVxxhUSbeH#;XXAgfFc}}lTA@Rqk%WSruFI~wMl^p|MAal$ zr80i@WB1Cs04j^6bnhPl_-C*X`-eRv5u*B>ayw=8~QZ3nP{lQ$NEZf~{jcooRv@ijg!A(vw9Je9^X(EpuXESZ&GF#n_g=tWzElk)&e zX(sI6r&b-j)q~Pf{+vvLk&7cH53C+RII{DQ^wY?tUis!9 z;r!x9Vjh?^L6b!JOFV9z<8}@m`2mf-|DV<9^S}_--=n*^S=6NpoF6RJyK)z3w~C;g zr?Fqe^!GFUuS${i?)aiQ(YcP-kB!H&-XrdIw{a&kxV!wor%$4a zoABrVzO_np5~5YYSoBvEi|-_(SfFX+%!abX%QDMcu7Jw;m&$+={6t@@jLT%7{HhbH z$@!O)*<2ew^s7;~%@>&wzu*F@4i?YOt{WDyj}p6q$}iEY&JJxiUuu~gKS%6W+*W*} zW|Z;4&gAWO!oI-kG%ut92CCzIMBvdn@TZz^DorrZc5a~lV^)9}0lL3WCxbxAbJi+} zMdH^p+g}Pdy-m}GxgS2gCg2Y9!k-9-mO!cWZa_c{2=QU_ea5;7nH4R7Qm3H+VvRdE ziKl@?T{t;3E`UFGVQ`3eA^nYKsqN0kb!N_JvLvf?CQ?CpysnY=7qSK)Hye=P!ui1r z&^JUvZc4pq+R+*823&XhH{6wMKdjiK7kdD>tj~M2e-V6KZ8hH#XN@wOZ3WnP5o4{L$QMnfw2H0csWiY+@w@N)m(}XFg*2 zv{{j#>bX~Bn&f^!{4&MoIQ6UIb7%us)U#9BMK?#|BeuyA*YI#`cm$1)*c`CC8^T}( z3hM!8FDr*jUaS-ag%In=$I2xHO=96s74=CUH{oZ7Fm2KC+1xWu$A<0b6K&>PKIm>t zy*`=4C$(VtB$v^Al8c{D9f^RkE_&(6WM2-a@ARy zTOOa4zZbM;m*&OF^6XMjpihBLnv!5LXNx=&52O!V+~yV}n@d|2PC{$=v-$4CGQ%;} z9S&wwsV}wuz8q&pjALTHLC=7bYedu#_Ra8g3{7Ld&xv;)d)IL$`b4$^bb8qSe;(IN zFJBjp-KhVK2x1zY>SSX?WRJ~buIpw(5$2+1iiZ#_j?IsSp5syw3+?4HA{KguOJOY3 z!DV#Q>v^%z``n3X=qi7Y9i@ zJp?C!C=Es$J_-j)j#{^snvL?}Y}#ZtN><#dthl#W9A8qa1&cFlG_&4fZkqT`b7(Rf z4}+L&^DSOy?K~!HsEs+r*_vUH>7R{%a27%6IofQ8_R?gGacQxQ!|>8Vm3vF&Msa7n zdyg-&L+{gS8&Be;emnFjZAQk_$fRjRz9Gx>eGi(&`lPk$Om2D>D`hhH?+O2eI74%8 zn5{9;YVFfNJaWhitP#mZ3d9vv$~rQ07X^V_AtSXq#dFZ@YzkW%R2>|+M)hb};J ze{29EXt*Q0-Ff?_|DEZULMQXw?HoCjw)0zhZ|6O{H|^;E=zcyWmfX+dgX&!CT-=7F z;*kR2uQ5^nC*qNI+egiD1JETmbT^b%Uow3?vyn)PMEDv15H?c~I1jJZ1bCjrjRe$s zi2rrYEjMbBXh+v}uC0*0Nn0U%lO4(zDuac|lrI2*i3t_{?_sRc0ZB@o0Caa4jMY2v zR)#3{uin?^u-s2p+^xJDc@=3G{KL^FLj$4<^r8s#3!^bakPztCy63mKUguXgmHee!raJc+E!d~Nh_C-^ou97g(_Nq?7LPuKS8q#Y>PW37@t0oKJ(9GAhR!9-Ig z-#KE|L_O(F5O4)6FJfD=g|{_OGb(agkmdFim}#2#nO9GX{V zHgAw%U#h_18IDGPrL=$=7p^zGg=lg+tWA27-ZvzZOEI|w6O+VrEo5HpJVij{44-VT z^E1U#{K{Z)?k3)cem*ANuHWF)fEV^2bSORna5yPq6lP~C`j5?_YKPcy1$?x>%k0r9 z6Lkm^bob(4uI&lBt2jVz5TJ#T*47Sook)DKuY9=T0WG8)%VhORtz}oA07!mME!p(7-apXrre`xgc6nWVTt;QqmUL7{>Ei8J9@ zd}a+Ht2hltJVdVIH24IbfjMLzb589E1hgCF#Uw{cy@fY5L#&DJ7{0FQ_49y3+dVmj z;&oKRv`B^UO~r$TDiXJ%WSh03lh)c}a!2Ahr^7M~wDSYG;f7*1DR^HsnN9(%V!O`b zFo+N$lapZQY0(r9j6g_0-9$JJ$2=6v4%i1_ho#3#@hG=`Lf&`B=heU7uW&pBHaf|r zSs{gUoM)JJ-Hf^lfd91>7#^$@!c57pU{y6pKVOw5vL7Mwsq$Zw#QLIi&Cg@ny=91bJf4y_U7Dg?1Y zLCh>uB9Z|$0nb21;B%pOGF?bT$95O$-&VeC-SIPKsNp(+zCG0v28au$iUoEX-2Qn}FGegJ`ooz;x5b*U(yMup;Zz z@Z@J}=AK67Qd%z%5YM-tipU>+%I9I8ynO(fDbJ^I=pXLIPl0Hur^dx@9d5w6>np&i zm}tkM!Wq3#q1kn0O;%|Rk*@t&qnKc^e%di(V-OgE-7^<0Wnsm}uz=c~=qybr=E>jL zKE*ZG8j-7bRh_Hg*hxYy82?ei{uoUzlxzNFc=PT<_TELlUiMb;$?2|NZyaK2>%&C% z=Fak&2SWtSxkJk2(yFfqAmig1Z10lXEX)miy2L7x+zA^RcCal=6j1vuL+^9SnC0^1 zeYyjYvJ{;aGfh9j@yi`(x*~9@m;@sI;1Y=RgCH<;pC|&T7H6_v04qcC7=Gsj2M064 zx*+v3A84O5f{~y=Ryp5NVO5J?uULN+5qTJGyavU_;%@-1$Ji_`K@)b~&_rXs&ZRW} z%Y+f96{5+tM-n^Bas6`V2u;VNj7>_y_2wnlMJynfu$BN+Jv2P@atih{2q_QaE2y3C zaG<2oLMp+;id`x0Hztn@av_L202}o2UVyl4G5d3AJnzC_d_0OWyB41nnb{PcxjhOs zR_@_sHzK6h)^yZ1gEBTbC{L)oSg;xuz4x@XLU4+#{$9Bq=H1C&<9R6@o1DwP&tSKB<`l{`%q+xFVj+$aM|sGi zH+Xf6O%79J6201Qid0aff+AHaGK2qWvgb9-TtxaJ(r@*|?ygr?8(c!vJI2Z1_w_W_ z9~q`=e|i$}6r7yC;w6J`-1r>Ef8ipQi&G>x#WR~`8~=rZrt80Ot&#JB4ddnMEPwW)mCY9Uy7Ie*_=H$HK%)67moE1xx0 zl{p8>o=dMmg|w^ z|4yaPH$!*z8p_@0qUKoH+9Y~*@v|!mg{p1^0~kz;mdC=nq^k}ekxW~5 zNI%-ZD5Y%)9PF|`W(`kjNF-{llGfURl)xicvJ94Pttf(Uy8D3{Fw;DgiF$UhUWYSo zF$>FN;Jqy)8%>K+>$j4L*eo3+1YyoJ4vHhUu4oKfK~B$#6XLrv*?#E7lplL(!l`p1 zd#^N*=Am?opX{KHH2ZOF;LQvVz~OjFTdfz1#eTS7J`^D8i+!YXx*gMdN^CmZ52+*y zjG;3c6I%mKf5U^%-q6q%T>aTi##YkaJGANGvqN7RxYuq93~!VP=^;|EtUNUEP@v%r zkNhnhv93h_rt;$X{lCd5NEIL*cUV{o7IExkh+vU5y^giO_6c@gKMX9#*?H+>>}bDi zna?J`Lt(bxb+m~?cSM>{(g_#eann}B%+C1+K*Dfec32v;@h2!Df=>12F2uxDf_$> za&SHIvC){StT~)zU4ijPMa|(sv#l#$S3zDw_wfVWqV`vL!@evEw^QbZeRA`hGvj^h ziY*j=$t^(&ZY!>MT2I?lEm>PtF8rx_B3%c+uHvv~+)0x}_UR$}Uj0tFmlkX_Rhb%S zj%gcNI4z>Mnx%r#drdc*lBJ(9rOC*damcjKypZ9(;5MyyV=Ax*YmvHGP8J%a84(;I ziAc3p{*c`+Xcd^zDbU~{gEYh0t@h^*d)U6*&y=ldg{c}r3k~AzG8~?xg-DzZz!YrO zP#OK30!L79mRs}=0dSk#sdsT#vrT1YZ5sqI_iiWHzh3vR=N zNxs?#F>aN&HlqhbOa+{h2e;`~GYC8cO~7tj;|2%I&*vVrL#YbIQA4=L@2vb$Bp6+F z&G-tv_^1?(SpZUmtmoEv;Rgs>n9H8j?u!SsaAIvEcSfJbixs+W-=83i!4GTzT0P`z z3G{wWmFHxgnah%K5rT~#c)*LpEG5Y))fm?&)fnTF${v%AXR2%%sa(7^u{2`-KJLnQ zG#nYUaAbI9b2vWu-@ecOW;|>C7<_3QT>Ur$=Z5M}AeL@Nf6S>Xm|xKJdcRnASl=Fe zs&i_tFuc#Mya6X*<#reD5x_+V5U*rkm|+bGQjv|V|Dd0hv#VVawKMh{&wqfo+ke0r z$NCSjn~Vp69E{)s35=Uxp8p5ee=kjw42we%Xooh)qrlJX;4WypK~K{GZ2hg1r*PhFdQ~q+p z(3zy*b2tTJ2swexvoDhZi#V=}g7I-*py3omcW@CQBb#j4tpr7hwvo69L-G@$^06QK zPR&4BFyT(&=KYlr*w++L1I(lXP@r(Fjn8Eb(~lpT)s$1DvNNZnwtA}SAlh}x4^XAH!B$yM3& zJ2kd`qt77~CQ;*}5_He%>RQi*i^7f&@uPP`Ytj(&RwU#TyD41Al}jHCjKqKA=S z{SwR7kuT#!7gO9{;z*avgV-9C+lQI_X#O}ip}t~&B0Yr^KQv?$MV-K16SD*HNCKA& z3vyAWv0Lg#dwn%o3b8o<6za?rjl8oE;-rDlwnOW?O; z;qCS|c}@@AZ8Bn^dlQ4#Q8s9Q6kCjUpU`c%6E9x;TWf`dP&jPYE=8Yo19MI1>>}YL z`>CM9J}<^L_uQL!Qz!<}xmlF6*B}G@C7-(uJ$9!aJy@P^L%TCX4HyVxWf8(n3a6>o zB)vEm|BK!bChOi{QAWSoGld}PN1vEh`;M-7P#K7W5pP;;2CKN=cN0lIaf>1iXJO=nYu6xGbpybzKy84$PEd_h^5j?UF2L>t0dDIdqYAPaHqmJ8Bl zCLW*c!QucAkh8Nj)MD;hLmxrsConm{)-RD*U4{DGnze#ceDF-IUr8`bBjj?|G|7C6 zhB`xORTLW647_5wLsag>MV>YgGmG8%OuNk3n>n34smV*>aeV5>&m6)x2|$LN_cqk} z6KlGt3s8RD^nNN+M4eYx<&*$F1&itPmO#T71FV%(*vUBwU(LIG5USUo?R2z!&P2TN zTDen*-FR)Vr9tjXGUG;9t%mGK4Y!MkscF zCV?4!Iqbo}WV_lFrEOS-*K-TE8dOkIwD0 zeE$s~N;&CBTq$GENUc&^A=cPj_6Zk+Y4?moYf#94#J)IV+trPZFGRkv>% zRpK8zVn5!r`bQk86!E*1G&W_swP;8U$BE>8Nx(4kr`H#y)qZA&?v7{YmXzOF_cg_S zEx*l4ECl$WyMW(Jgh{^k1WU6D26ud}CRd)Ff8;D$wcE=18pOUgbN|7!6!)x6U7Lhq&+W!| zK}T@Eb>0qZ`5yo?2LI0MrxVbt;E?lwZa7ory9j6`Cj?h@>7>!Bqlj|{S$w}y?K!OE zEgXKFMWpJq?gp|tMc<+s;}y28ksCsMQIf!AR^=B8V_5JmcS97)&#JsuJ)f)YVslox zlrqFrQs_J@=TzP@M;FCH%NeUm6zpsnt)=2Z(>kl*BCFs-oxHYuIMv#+YbwpLwzU3V za}ayg!dlGQ@+wd7SX&Mx)M$ab(tuyb$V$##6<_E^QLHNES*)^6KQz1IIsRo&bF&%+ zUo$6%|A^WWz&`@OOLA@&Y1}7?gEG&YnhN=4n3xDNlJWqEl9c_Y%fulL<|@b+Bwo;c z5M$SgL)q`zA!)4vd6{8m9BB;<(w%(D;q!}vA|Ih8kr(nmAb?PQ zd(KOy>8$}Dtzt{eJcS<6EFyi{NRR1-eJO|OCKFtpI5xAD+a2fAuXnK4`RQ{m*9*GE ze6Q%s-?N{@TTvKozGd&%^Oov=arn(%i9@8ej4>AdAN>1SqS)rKMPIP(8p%Fz%Cm^G zQ~6qgL+Jk@oY|~%?wANs62JIbB=4lPK@5<$xRG*g3L-(7z0URHK9?=lN!va>OI!Uq zh=6s*_uSOAjCJ`TYgnj*!d(yqDH}oA#;m0=D-%nI8e59)oRG~R_7T-L&?kv&crA(&mL&y4c!jHi%qvyZQ zE6=F4@$s~wbdvM)QvqOU)bNhg@bUhzJy{1V8ZF-OXQsg>hbZx-g*1&|6QxN~SBgB7 zlQVqsOaYCQcxJ^!G1?)ej?;%8_zT+~b|lYox$%za_AY1n?!PyJ%*;$3$DCO2 z=brin7W{o8TI~~G>aht%rlMgb`+3vqO$9u)E-U0$!_4@yh*MINBdn*CTx52&?&(># zOy#ZXdU98PN#fF+8uK?{((0HVM=v(pedzsk8lR1UvHnh}(W8e9~khIMi zfI{o71Ap^AAi`S6(kTfg7NNYilbent3O&0B@uvh?JEoDf>$TRO?dXN@Vs|Mc7+dxn z7t+IaOdvNbMOgs$ewGPgpJz-6`#fVp*yp+MnCGHnp80@FABGz?sg;6rZ5HEhh&Wgj zGjIur1lEUFzlw0&opOB%JipX4C}v{W1SJyLU%v9?WF<4MY6vA= zf_fIu>)>959f5-{J$vLaCK~gCAnzkTc=pY1rWCFYLqm6q252SG5)YK?7AYDp2wa20lUi^MLj9ErF3u zC?N)ib_GX%94gr#u!ba~QrAx1mIl8H!`aJ)xn8g98r-hqhwAj*DwG2u^wB{y_1Z z(KQo$=~IO5RT@e380|X*$FN<&{=ojlJmnNjU}~73ooFZokb-GwohvvyCErRsRZ=~= z_VMJa&N@!rypSvm`Ep)nnj#M~j=Z4Sjp4X7TaXk;X)MLxgYsIW$_ns zWkc}*Ix$wj-W_OY^579>&Fomlr9`;lBx(wfnM&D^i_^5{}Rvm!Pxq> zykwSV*oMfS;H&?QCiy{pIY23V?aRE%XuL`kKj&R}Hk#v48HdS0r57!yTl7(SY*bvo zBT{G4o+KS@CX9A-PIhqiI5>1-l~m1gu$`dwFhZ?|9XWitiz&*=AAH-sv(kdYKXX-B z7NEj%3xdO83y>NPyJcg@8dgeN^CTYzq44|TGc`w-U9#!bP;*xFpvLa%-2v8__)(*5=@A8UI<)2^5R&!D&zMwSNC;*(_^)a8Li)K_l}F?imnr zo1n<$6*w$NaII8aV%=P2!rXsh&Y=P8s)Vz1x=yP2)o*oveU>@O?&TgxRKDu`kvvAA z!;~iF9jBfmeC@UVB)98}ZFFYeOuQD2nXC%#zK^TqSsFE%E> zxW)0CJe`{*TK&TDQb5DJ_Fc~LgqT;f@G3m+KB9oRaS178) zSg(6T=61=TP{}pb*2?cdD$saFn_s2?zh*iVn5j`P#T;30&#z}x$#PvK%k{}x5+n~? z$5lwpkX0OdgiYi$ql+tyS(viC#>`E*GD%uUP7fz$%y1Wiv0s?uBW#kZ5H~ML5TIME zNy*N+&nox?uL;81AsMCPtH_=CGD~0anZAU|mYMeMl-KNqkKw)e_IL1&Z?Dvw%-8dn zuda~*oNl3LS>3{o#w|hxAqrj%dlprosw{5+#6KJn@%&l60a!psY6yjvw`>GQYr=&i zn{Y}$G%h;Ev-cxEt(xd#h&0N&$(g{9w=|#hGJec_(@oA;e!PV$PsU(0$#6S|s@G=suR(qX+P)EOv9*ZT{6F8d-qNhvWz5&WoxOY zx-c%2xg8c_YlTo+63v8ItF7`@y2dydLt^0jU;hM4Juc2H0`6Mr-63cg33sd~^sW}& z0cwOGsf=33TDofeCpfa0u+8I$4|j4ZBsG%;8sbY#{2tU!?)~cB`;XDZ{KiNV!g35_pN5-sTAy1X502qoBhoaCB1B zd7;)gOJG&

}d`ci^SdxI19y^X_;k99>uG$_|9xKm}`dcoxw?6mYh|iVaWI5XMxNPueoGsTitKwS!vu8S{979y2TT2gh#7qw62W?Nb{@^jKd)-y|-jo9p9hyjj{1;TTicH58} z#sDW-2D+35!~A_gf3`Q)qaMyZ!GcL7FW`U_{ctnRpo^;LjO!&a!;Z>lgiY275!fJ` zfn}2x7A!b4E&mVQgT3b}1Qsx-y><++du7Fpf=m85l1<|-694Y!;HaJ>DinzGxew7V<9$=NF!y}^^rf?)t566_GX{w3Xshv$tlnwM<(2O zt@5r@?Uina3*DMgtCGwnJSh$@%7jUmTCGya+z7cxWz0P-T-YAz!ZKsDz&{dZ9ZbY4 z@eGO=$)M%Rgh9?Ai3bi2+y2b42cBXbwR8m4`*hL|CWl(>3Z8d&AI%Nn_Ym940-e`g z!%YTn^rQYoT>h~`-8RijwWV3BTlK|pZzl4CQ&2&VhX*S69~)2F+%*tef38!l&pgmg z(G^5*7lI4@#|@N9V25d2~|nwos?C8J7Dpg z+ByCqki%3xc(JpRO`QC>bx1z6gOzFMvNe=pAC%{$Wbw(o;_qs&F(@ycGfVIHi54L+ z=w8~vgGfvF(rbe!G!WuTyKYd1Kz7=q+)jM@1FPeX%XZ$$tboiP z6Ck7;BGk%2$sj%g`6bz%G|R0u&-jl%_*wGH!SdUdswuw02aTiS-t~RFfTOJnY=7Ro zO6d~9_JAO%`!2V{#Lbp9akKidZTYMGW?K!NJmF)gS3yvN5>>;GF47lTZb^xoEo0*5 z9ul`Le~@2Sel<^&U#lP}uSAu9+LgDYXLI8T*7ffrY5q~%F0X~Ihi-@Ujz}U-BKWvFgxEuVA45dpwFAk`$+jrvYx5` zb-%vt4)wpbNDw?c|2;d;|2Ls@c>XJQp8xqB)qlp$^B=Gy_>UNoKajU%+ABB95o|yZ|9I?&DXmB#rsdJw0Sg(Mjc6SmuaW5OL5f_5? zTF%{Uy>92H=DmOJg7zhFRNgl+!1CIHO7A1>mb5USe>T4mWi&=v4z!aIRxOKMs6%sU zwWl$ZJZ(S(7km5uA#cF7K7s5vLLCb?*p+IS$MgV2J)Yu3sBk=I&&J(!PUgS$x)zws z)3K(E)3N^j!JplS{zTYDv(($D^1AQTL5zUdbATuZ!%b9HiHVcwz*8}7oLmxf_MkHT z>zqIu?vPOL2Z-0;Gmw2_0`atbzu~JatJ8|3iOLg-F?yg-W)BpWV)#IzOdlwe@dJf2 zf1t1&d!n7RxbWsG?=|;*0|Q0cC+thb__L8AIR|xuR(RLNX@#Yn8!4212Zgfmpinj* z6w1oOmeCoQgWGt)zvK4<1F4(Ufq9~clR!DsM6#>x?l(v#UCd^ zIVwKTSyj=w_zl+kifIM&bGZ6DNPsp$4ufkC)}Zb|=47fAF4m^iyNN=;wxth0sr!Q@bn-CrNi;M+5$p3!2s)WCZF{ zEj_`RU7C99JPys037rJE8nio1VTkq!{kBffCh+>UcU02lCL}kiK%5lO{W%HL*d<&lf=Q= zC`L}Q0aDRPyoG5j6V9ChcPcvRJAlsBmza873cwO&3+f$g);b|TtP?zh1+&^7?1ZZ- z)dSgU5oo96rco%+9!*Rwrx1ZU@%zNoafzwpyQfapsUThBJYsGiJ^OZP#`i$q8H&9p ziw7=Gbnb#&oukcU-krzTIjD#&ZteHIqJz##aS(N%u|ke%5kxBH1M~mD$(2wz|oe~;y=jHu8=%t>6L6|gp@#x2$@$C zP~!zBsm9f7cvBgLDx(d$%81<|SVusaP6b{k`FnU$euc`fO@B^RqNA6P{F`0SM{s^D z(XLH=bVKu>39=nM%DA5vX30pMj~-HH=cD=}j-$-yBj{|R;lFpzQ5ruvcs{x<`l@l1 zAwHahNo<2>cQRv}XT2&uZb22CB=llNZ#=QElfRyAGahso$JVkEtR?qq%l#m^58V7M z*7?LaYst5ozct%t-01SMDW26qUTun-XWdBNRrPd)Jk9*IQ>MeewL&^@O)L-F^KzY~*cop!?{UUBhr^RB3JPo{EDe9$PnL#F%i9fT8gab4e5zx( zo3^4_b81w@&hCR*=_B<0s_|^?l4HK^;*E(R9*m+q^A(q-^I_t^Df%;sv)7T<=@*fP z-Z%!zOIx}=O`Khts40U3C_`rQsFzjIg$h2>k_%8LkDn`D=&$0o$B9Y)y5$s7YVa$< zaKNDmrPlhF#0Cb?N!-;AH@C1cRy3lnXZ$&-6gZl!E&I5XKBb&M%C^l1ywdUpTbvyNYWT?XfNXYF37zWy+TZUgiWN_AbT^FmekbxPuFGWxIWN z%;fe|N%8~2tlXTF^YNH;)gK^AsU#2*U6-$Kp-NM+uE0MD^V=0rOWhVvj(O*tgR`Xe ziWmb-ra&!d_t)(v5q#6W@~iV|i3UliZBM{DwzEIXkPnLAv$Nuty5g|rPy4?*!p7LI z`=6$fpkUk13PxPPz2#i>Y5!4LWO%OV{~<+FrvY`8_2(TLwz_Qa^aNt^Q*p+)OEyLaPL{cufASlz8pknNblY_NKO+&GUR;Hx=*)?bngP*m zS8C~lZdZ9f(qdVaysDExqd{}#Dy5F9Nj&Tp(uddaN|}`e*^Qw8j0Orc^Oi24Bnm8H zQD3r%thZZMRo}rAxmOdUb1QWez?IR2(g|)L@YfxqyeHTC2lF5~m*$d00FaE-1WSo@ z()WepoDx&1i(Re2ua&i_WNbBs>P@Wge{buja2-rf9ck4S``_ffI*B3Y3Qqh& z%xWfEC>)m=`FJ=K#zA+;|3)Vy*~^%Oj(gm$_YyWNMOYGT z8nomPiJ!~}6a|la*I8`!!?`)tKQdCj7GfFq9#SQUu9cdi=BunO5%sv2er6R&f>rWz zv$hg*DO!x!yxVGIO}1BZbbL?S%Vgs55FUTy9uMX56&~4tl)yWNNj=QZJ{}-vh|=$k z@=7M9ce_m}{nOa%hSDDn@O=~)3nPCoBKW@q$9CkZ*=iS$TwMca?xe0|uC5Z#M4nU? zRGL`sQ?>s*)j-Z~@0VVqtLnj>RrNJj6<;6?)_GxDhgvU$g!IezsjFh?&Z>BCl=UpL ziaUy26-TIwCxOXTF@0xM+~KM~L+%;>MP`KV%Dn~U?(d*%YC#%JX@AoJVXMrW9oA^E zFRJy320n8+@@8u_ie{ddRU-&UuSW&V@*|$P9<^&d!X!gwJL^$2f8f!I+2byGVqg}= zkm%|{Yu-j}+*Uw0W)p4t0^}GrUM+TTysoOX`-OH6H+i4SCPg)nO4hBiJ_o0+2>Z_8cjdgs7l!)3jfl}O!Y>k~C z?Y{DDN;6-)7&gM17`(a#SSo8bipuPVXC3%|HsMZS2?*E$n?$MUHdwuztDJ2yO*ly8 z_^rUrvT~bc%rB-+8EQ8rhwyNW9uDQ^ctfS-em1Z#~vQ$Lxx-anGDxGHM1t z)$TWB*%;g(uPS0_ihxct>s$omuu{JxP-m!N*PYeyRjVP?b_0}zj-}U1J>cb-v#CCw zqv+>4MwxahTr4} zLe3ul<9s*pXEJG`&BlqNO`@QH9%T?;Vu)MlTuY5J)wo5viC3toqR*u|$541HvG(8oI*KdW2Gtt6m=C zderq#olW}>u2jcZ8mUj!QhHucR0?R6B!Pu=aY>~qUWLL40TKE{Sfz_11=5w`C9Icl zs8otw5rk7k5qKmjRgHqOA*fPSa2v>~v?}Jrttj=Ri@KPhuw2na6rIyB zT1r(0joynI(5$++WN~QaolqXxKEi6-UFQ8(x_tIM9r7mNEVmTpy{mLuIVg`7+BN*1 zbU0;F7x+G&C!$WF)Y~L4@=wMu+C1KDJLdd!E!cE<2fB6Xd}e_c4<}^f`AIK=6+1eT zTS8M6+ZW%`e*>9Ql<*|B|Nc|^h&9)wtz%9EbJ4Npv4YQ}g<{R46?FykrwutTu3<8L z5qhX9#Glt-CQ@M7zEF@fF(*HhdaQbs!|XH^Q-bmP&$queTdGtIQo5=~YYhuI=r6T{ zFsE20>*DxKk4Rf{c074;3F=L6NBDNQ$l`1$&2QAzXY4Dh0&XE$*RaD_^s9^u7D27_ zY8vp`n-far=0OYU7PWks8%k~`-HTBt)F(^2Q}bw2x>HhGk>+-pK;ZDB)WW;Wz1tdW z4@EaD7fsHNuG@uR&8S9P0(a&T`;Nu3x}ZJ!tSGZ~k~6~5oZk4kmF>Clb2mx??vIMU zkFwqM50bme9fA&^yuO)povQs%+wo>Eu1d~o7y>Rq_!n(o)5eq!k6!R?{Km!O=t>uC-YtqA+Glrzxr4 zSkg%$#T@v_!-q(NM^dl>!s8U$d1$CK@A1bDF&-@*Ad&Q9%0YUc;jvVYGI>(&_lX9_ z>cQSVgL{}_viTc=lu?ao-}G!wlybYJG)#DT-1mhIV#i&{PywYWgNh_&mtW~E%P%^o0aNrUKLU(11E0RnnNH(-({m1YU-$#JWVYjU6s%I(&o%bQ(u zQrRNbZf4$CqUp%nd!)^|y(DgLKwnJUvqK;z;&0ZaQf0jsHE!E5Vma5U4_}OVoOE}T z<*t%imj!LFQ0a?Gyw;{1u%Le_5Yi18%yMUm)47uK(z(Yw;0)B;t;1qz<^+=~=Gbsm z?D{G|3UPwDQxt?ux*#TuB$@5Ln-`xB1+bRg!0kjkT*RhK- zMmBNinbIqUwcXHa3d@u>?$&%kd>Bw*?ct2Cg>5JngEnCpgO;;D#DO%vmsauW3;pc` zH96la!>Xu%9d-e> zRn=^$9)IKc!-yRQTq>q74z;W>p7o3ducu}5vVlhUiz`KwD<_q-Hy+%byFw(@+cSs_ zP?_DG+n$P_-q13+eIV5Kb$!~4x+s5@coSf(&Mz?)b~y#@zNCa>xu-)%e{jhGmQ&4&??^0*T+Vanv9Ui7g|q!w*?q=N>snnDcrxuCMvzYynATMBud%xjtdrK3NE zqf~M4gevcw4e&k#J&D{0(y&)1O4@7M-U+p;dsW`SYUs35e!0CeVA69KXRVSNW=-%V zNpS(3-EBF>i;O*-=Yc8uX*!e%8g5(9Gv=~2SvwC08T5F3PuK6q?$MJt38A;AR5PaXwJk}p;}u)1*y4d-hbI|~7IWVX`F}_mfXL<4#_b zjr+UWbt2Vd*XrcS(eTuk#m%|-p{uGGGUS2Vfjl5)yO^s!oG3)%-Vbb|>13gt3;|`> z*?#rU0II27tQGp;X5KQV+fc?YJqt5AKL|*DG{>%nC3y7Ul-#sw+B=1-U(!YY_&vf| zTdEiu>|sJjZ&<)Uw!I%aQ_bcMpO#%JgC>%Xj%|IFcXER_`sze&u6w)67^-_mUwwYU zjyD2?iaGmS;<8F27k!>$cj=#POk4+z^CUIKG&)FL%k90B$MMy$IhAp|&i%^u@kDL7 zPCW9OKz@9KC_-Y64`0;byeZ>>z({aFe9g6TeQ$MQ9$&Db(+CzP0HzykKFVXB?>%e$ z9FCf|S0>=+A_ei5x3Zi5Qseb;g19EWv-E0YwWgnqibthbWh>tufv-jonv8_wE&bU| z{)lyPLz}2q_J+1j1>$BmwDst51XJ7NRf?^xgstrgU3Kwpj^@eC9-j|g2;|tMVssq` z5uW(aoltBzU9DTBf=uIgwIqs)!{8a)t3^}qHEWIe4F|7drrs4Wzga=d+>*)UxYZbD z75L6wyxv~Y2e5i&H_9NXHYs_{8j{?0R7v>6;5j@X)8$^T%Q z&0Y)_XUtrL%-Ac}3!)j-v63H?uT#nC8TTzyYq-|ejLpurSVwlKRV-0zT?a{!V1Mpd z7F7}F6LJhYa~(+SPD@5!r9;bp!AfQCb9wI#E&Dg#0rtESh|78yqYcr}(Vd}XEtZXl zxf?1iLK}=)x92Ax~6h3DN z%0OY4MP#6GZ7L##!kdWzWA>F{CPK@uN=F1JyqpM!LPi7E?*{RgThjj(fMZ08feUbn zC8pHC*BpWL0DRG0j=s#ASh}XysEJ!KN~~#jpCmmK)Ze0buIqJ)ULyHax~QQ4RF?3d zddpp@L@FNvgHiRZfaMybr8MLmv8ZMni2QOHPJ1!k)?`Z!GgWUv3*G@EYC zA(jzngaP2rE8&6}tCtw(G-Cgxj*?ijG6Sn66bi5!lggLtpHRBxUr2()C`$CkRXf<` zum*->5iTj{3s^kQVbM`Ahea$aQDePfaU~L4rdn>O^%I88;6B0V)Lk-u;IXvm{_TB^ zRL9c~Oh~iN#*Wuf@(Ic0*`Io5fy{ioKZFUx!wF-(oM+ z?^hR>j1R5o263UbE`BQ&Qx;lrx5fOIi)ln7c*QLibCZj?7&^A%YK!ssbx6;|N&lgA zt=X>hW`$bsX1MMYmGU2;QS!4+YWloUQq5O_r0@$~hmMld`)?c449Q5`g!aWH=PBR{ zRWJ?N*A8@OnR9?kV%z`>99`Zp6ad(2R#~mJ+y^qm@|j)JvXxa-s}DLS%nu9|ztt>c z8b(_F=9Vn>x82Dx(K1o49RMSkfMghA2Ep0^M4GG&FrmM6yPouEN;m6?&jtbGy5E_v z5xz)+5gEd=o5=Q~OQe$EocW>}UStEZLGq!Zd2~Pq$3Rqr-h<^>tGI#4IzQ((44vO# zjI0JK?LSd!mby?4{U+iG2<@34hDtZ8?w}>L0-4-Sok(bSdY2~&U#tz@-{R@?lEovq zqtBG?0S)9L!gqj2Ku2cP`WO1E@XE5IT?Fxd?5R+<}5cckBiM;Mhx}^+I&3v?W=%2UYpM_%s9@lu(wkIJ=i(v}Fcnjzd$$NrQ&i z%k$PtdmT-RIr(NAZP8e_v6Fik^w>Gz?-&}9QUn;+p-;-8{mk5)StfxNGZ9bRZgy0p zSB^hM%!EOVFbQ_;elqDF$)d}o6k8u1fOM{0uaRUeHZxiE^iwNIvM@_1u9kfU6MbMz z9n~luOwliHkJnbVqnbEs`$F!I=McF=)J{@~kE%tz;#W#(a$SVG-lnQxFaP7^{BB2-nWCUV8K_ z0PeGB4tD^8yPem}liPJRq&A)GH{D*doGmL;L%=XLbobD>yhMY~0nPC3W?yxpely!m zwww(;hNnvJXUZRa2+kQN18>GcQ{RqNygffJ_T@Jv*!#m5BZ1NkY~vV5yDib6s^r2l z?W9DXm?g*W%SnL_IW#-DGW2tX3GZ%}Y0ekU{kiS(u64UaV#aK{E!g*!QAT+V%qP!; zS5hM{7@c!Vic@1y1FtN3TK2%0r}xPmhU~N2$NGojGFD~E{d{I6=Oq9B3wKUZ&iLel z!_zR5TN7vNW|NL6!Rpyz{>JjhbU3@zzk?B+ybRsWvwH^5FS+N@H`M-9b;|w|wN@r) zWJ?0^O#H&l;sWs;6;Ix|PEX!Te!W5TLpyTvo>5-E#zl3KgHjgtb)xj3T9Q9pPl|t} z%OyIV$~BrOR_s2a$n_)vWiat+ss*X&-puG&+dGZli64cLsfpwf&)SLDc(L^d$}B z&g+jhKO(_XR^#NBhXgUQ>6V8CW$uD6rHX4ZF{9yN=x*V?UvpxzSs#Q@wO?+f%?8)i zDY}lD%0cf($0E+iYD8hCrB4N&;&D9T=`H3xC5)UEOV-H-RIFm-{3?v|VE6}{e~%u3 zP4WYx-o}%YxsPFqi7PHr%>C!@!PU!Twc>Y&9|VZmi2yjOEZBcX#XmHhQzApTNbC3 znW=IbvRa*bxYX(&YfH_VNa~%@lC@<@Yv-jwetZ8)CRG2rXH$?y)~qc> zuHF#O4i2o9x-JkN&))+Y#+s%roqB-N3XbeP?6V`g?TY$q*PrqU=ll)*1ON9fK^s>1 zG!EiE2vR?SJ@g+-rDEa5j_E8__Fdo}JN;WpZocK`G_^{nbQBNW)1ucsKJYw^n#2R` z{BG;YZrnSKxK?5`n78bbctFqFx<)nbUh-N&ZMzlS)|K11tIPb+wytpM`L%6b#f?Ql zuLsfKnTb53LW!1Zsm-l!!FvA1$fw9<1!{*AlcO2Q$-G_mVl`eB=D^=rL{UH<9C0)j zQOu07h$5(B5k+XlB8vEmMeHDSEaD9ob8E?JLM<|$uC-~Zu3T4 zmJ}dmd(a*~&YizUyydd(+LICyz#>pPN@*6Yru~i))d<>ZC$6=#3Af))JT z>RwyGiDk_uf3JgN?D-9@5_&HsVsEr`ek#Kyu}vFtvyb*_-q7Q~J2O8&Qp3CE5x?os6!?FM z-jQ7+(_w(qsfrR!w^8{cT*HAO)oQHWzDnIj(!El;?!f}Myv-8jFFr6;(QWA-RpZuy zMDo_%7P<#@EnUFG=6O=pB-u!a9QAdq25Cnb`v2OpqzoyXfi2vPjaE0=PKsTK?0Cm_pzLgP#!5}!~ zLF}kL7nQ~YQTGx>u8Hr%*N^I`8c?}2*0UW@e_YThHv^)&bgjC^rzwOCVJ z^@Ns<<~V-Hm%tEx?1Djhv7<>jR(Td?kQ}L``GS1u`qc!{Z^}@Ubcd@3{#~>vI8P7j zKA7DY#zZZ24(}afs`p^)Hfx(O9ej8!JTvjpt7h}~w6}fW)NsZ2D^L$~$=U;^b_(!d zp?emWL>N4cb>1{~Fcs7C7ZiG@!F4_{@Tfm_f7YaF1?+9&UJh5oBJGp2-Agdxy|z9< zEi`jWH*0vSOIGNxD$e0l@re6a!A@X0et@V#q&hxOoJrqLQ%_U&6~3)g!mIpYYD43kw!pqVvo$0TvNpSU8;c4JJm$`HS~!v&)*|x0gQFp&D`y8oa-~ zQ+^$5mpG?=SkT7>JzY>^wy%>*w0*1#z|ws3xKZ(LshL5ZrsrD-?rn>PH@0f;@rr1{ zd^Gebr8-(9Bat{UuSw=!qw70t)ka59lMd%zBV}pS5v#93SvsCS&>5xNC3sV=DtJtP z!UvqyZgweT%z_&@Mw4Z{@cziX9_2vik}q=%u`zV?%aO#d|LRYR}JXBxw z_j0#CU`Wl!0MRlhd-+MpamUD6J*I^i-G{Nl zRVU8PheVho?C0P9c&CncJvnGD^=8O^f;U6f6L8;F4m1m!%?iZ7d55)ueu^je;V%`vo~THD;i>Qy8=LW~Z!0GdaE>HVzi2 zNkV96sYS8~M=a8`qG`;c;gX;JWAxoBx^}Yz{zq@oO3WN8 zvmQzNOh(`HbsX?D9w zWLg4zWT$AKXf1i$N@-)j%T@wv63ZScT3M1$Q_8xXcQ@5$7i>8KYZFu6BV~S3%l5qa zyWWQ&DQn9f+?C$43qM``qrBM#InPQT_Zj~q620#iFx|hkE4TNJ+D9wi4qdsFLNcm2 zhl;8%{JUC!f2{a^!TjUnQhItn?iPcpoZn@v7dw*QeA%QIZ&rJ|;)HG&*%03gp+Nk? z=TxUGy~xqbz*ALA|EvfaU-)Bfxzupwqzeib9A94E8pkA0 zftBh>_vcxESK9H;DHwPnTJh?FW4Wqu;Z|kVdXF`cfhQDWw>RQB&&G3}_7@7SRPSG1 z_(}?L4f>FOCaGJBQgQSq&;L2#G+!|8lL53dm#)`14Aje0_MWjnWGq)ywmGq+EfW7S z9yE-~KN_-&pkCEjEt{jF-X-~rLPj69S0F2lqoxBfg1z)Z8$$&)d@7y|P3_u}gI;%K zPA7JnVKblbpFx%a*Hy7;!6Y=MPOZYmT(!6NtYkr0_m~a{^!ROUUZ%BK7nzp1i%c7< zT6_vFWCy{m?Sd;<#O2yI)VdZ#IUCrr1e3TVzyGJiREn@Q@lfsU#vqDRB}XS@GiHC; z0gQ9^$r@RzBDAqIKQR^4j?;9bg^~-71*Aw7ej3m3h5j zSJmD92lf(J1YJ+=nlFFS0n2fsR?|ovPt3{Le~>q3V=2xJ`^|sQ0{5}jwq0#$%eAE~ z-yVKnmc|xlDE1g;tS0~Shm6&oi&4^(xo%Fqe1*Oniu`<2oCwY}$ z3d7HQ=_GITm&EbFYoO_wxGXFd`xS3GFwk>3g08KYE)zr3QGwMZs~73K7!y)J#d&7x zw>-niV+3#ZAhZ^6& z93uNe&s8RLD9F7~q9*ho$fsF)1F-V;3ERu+#MP^L>t4EsUuFr(P;D|h-}bvRy09>` zn+i{-zN!RABI(p>VqEIF`R878VMF75SQ;GbCQiWwQFKnUJ6bHRg0O@|Kw+ucsOpZ6 z&*!}+amsPT>F$BzA_`-PQ{p^V2hXQhd8gn%^0`Ln=2Qb}pt1;s=dL0A)*$^f|0l9M zowDx}_0{9$>anx$qoqSEO~=3N+`dnGe|B22q(@85ly&mQi>Mbyw$5-nzR* z@eu*^;1r3`2& z&eTso-HE-N(o_nJ%TRkcdy?{hYcEIVxstG-5%*FqzBsGRua@nJck$s>JmD26&bALQ z4V4_T>Ojqs?`#E4eTHJ0Bf9?$L*YWwh)biFe4G8By0mj$S{l8ib^6OltMYc?Layx5 zBx}kOXES@Zd$lY!u}I6KpC;-em?rA+cB|MJs(!ZZIsA!XTJGFO7Ox|xN~blY7Ejv4#CYxtLqbNM$I0yOB(V5qPYO64Yi)ebh8I-6$=sk=L?!X$ z85|ofBA5Cd?!S{p;Nsf9&P1wA{wwt68Qhy7^IYri^|6hY-5=5X?>~SHE~Q6P_U|7B zi5fEfjFKR+Pl=mJWYi3_{3)mZ4U+Eb;9S%{|NQ--%G1YIV@(Br=^&)X|8rLkfV{*b zR}J04i4jB??xpLSsTvY5b3m?!k{#4=`^XwPC?_MOJE-CH?~H`uU#OvFNhL)#H#Koe z!8rTc0qm@#g3yD_@dgZM6IYRndtxx|#36CUb&i>qj*~B1F`{GQBcp0EqYML2_+33Y zcK_ULg|W&QJu=Gm#Bj=muKbYRrP;$LSsePu92q!QCpylO17lSw*XHbQnQCwkW#S!^ z@*{u;vW=plVzsKhC#qU{&`+u?DF%fggu|13|E;|b&~1$}J_MAW{WKLU!diB6+M24w zv~|_qMuJXE2CO6O;jfp!&HVN8=kvFfzco~PF?*mB3Fic1We}Dr1j17PM71idAXb&? zipTNt$>ouu%haDiWcitc5M~~s}M4m9ob*}q*cPh7to07aq7(f zjQvG48$ZMTqNI(z$N^5x|HtevqTKhtWPcH%l(VfkmMTBb{$eqCKF|K5s{bNQ=YC%1RyWeVRq_hd~jTRaUEjd`O*4pzel{!*jM-4B{P z=?X-EXKu7wI$QiQR9SID)2UCSI|!vc3*o(0#pN$((~X@)#`Pc%W%ihCj>0c;#9W!! zOTY(C$Q-|GcbRHK_Z(w)lakY4T=Pj&ete)yWh172=jSo0y)hGhdpM(>B}Xi^w~_lZ zjdh#}dptWG+byNsS~rOxrOHLo>&pF=B@>D*+UUcqu$5Od~eWBIB(&yL$c0~hQ7BEZ#(`=zn4zM znOh^xpMJ%54Nbd-W>4(6QlF#fYY_k7GLt(MD$5WFI(|~PP3ASgb%`a9K*NmJ#^hBr zzxvz=I!<|a9xN8SGGFZWES}TMc&$?JHjbilclHHrw32ys?;gZLhA*|E>I8mI;k^Ar zU(#V&rmbvIY2zP7Zo{@|VVkl&p8UaPnO$_tB6|~6m`jB?OocJY+wHgFo2QpXwsmJW z7TzB*()_f4);Z#u?Sy70zEjifSySdO^DAQx&eG|Topjhf!Zl3M$`< zUJ_B?Yg_JHNxs|~uUGm?-UqnVOP+$zxCcuba4^uJmi4vgFlzEvGNr3of+BX0*Bl2i z!}Frex@o(S)k`)ub;pB6QlD|2mP=MJ(*&jGuwNa5Nr#mjcCm+NMVnnJ4u@$`k7h_Y z{FH25qR!?Wgv~o0lEaIgR;(`62aa&(Ie>OFUfScyJG2WLF=U?ob9%_U^c#KDD{lah zVAQNNn4b1a&i?FCW9LuvZE!XiuHNNDsRuvf<;;ee>x9AN%onP(M#Wu~3#=u@ut~ zAfpaOpRq%oCzsj)8n|X%di*GM{J=Gf0VYm`|=ETJL zL-aUp4uAFh&Ev0uzeVvxOSARnu|ZPPJ*~mU>$JHpu+h6SY9o89vz@t^)f_n019Z!! z$1xPPi|FiWY`Y?(=b&ZAfI(#^DwdmLn|7j8_FY9fLao;m6A%i`1$%>w$5AMcG67>J zJrvbpM{15ZLW0M$g>g|8qc&9)8_cBME;?;z%wT*^Cj7$FF{vjLe&LfbsfYDGwudS* zmg)x8j5%mp^p?IoipIv9GiU>icSMw?ZCr2Z5X8#lx#9M)Vk(gJ<=s{|H$CLL-N+mZb&-jNktentm zwGFUm{GZI$bYUuL1s`0uY(Cn0y)9bF4)g=F#ft~sE`$@aOX+X(tV&Gr&MMYWp1~lW zQO1~WL&2O!^2{hEpXAN1=49UezP=vO$-GBi(9B&P5KTMr7&iaymPy`isE?zEl$^4J zvJf~XjPVLrSox(Is?=8XzAC;$qme1fFaL?ilv$qfp|ZGXIn{L1Gbe36%t(+rvpk+S zEu1_9@0`=dqBB*@Un%~!RV9ptt9jA@zU~prBT%11R@`!tE5aX)f<7}jPal#qt}MyC zd9<9EUr$D6`TX=O#~%v-wA>356`IR)9XE63dmVNpqybs0?lOVY&Sf&6uY;@)e(mWyoJzs^%zR8Q(#3S=e)`Y6 zg6CD`2$7o=I3e-^5fc1oTa=f$K`Cs~4%WWFgviP^QjlEjEni1gX*Y4u9!X1XcIZ@l z)@FY>*EoTsUXUbb^)Neq|8MswZq^$AH}_iNM@5#{PU1TMjQcF^5i79DWZ;PzH~0sy zv*;YStYB)vyw7LDc^8qa#dAgc{x$rmY4ABtk35wXL8k8 z1yb+B`n(cleSR-mF)vJ(n7G-pCTXff zN8)D7pST%Av9!3{BE9Q7c{9>J@#8l{LGHD9%#yiWF1UVmkjqFYt_78MvC%Ck=lvzujbtd1>ChdPwzW?n%?o7TPPo<2I?|+q)|6}<+D|}e<530`D z9sI2P4Ag4^O2l7%5+%R&I-I@*`c+}fCwfwl#x>y>K{2%1`2E(%-L9B2FmIKq<_;>>b4M!OCs8{(4|7B?Mm z-#j4okDs-_++a!y)Z_pC9DFXYh%de3yw#;JG|7o?^f3&*bBaSPx;KMh<`=JNTsFbJ z*Z3N$c%s_w-vk|SjU}2uV@+RoY%@@0VINundHM#%tX5T+ht_JDLU5R5Jf;AE+dXh5 z(#u*c>qIg}4YTJ*+3$0z;URd#->4vP`XZ)!*37lyh9SM<~ znGRI$$LN|}{5hw9)!wWKUOS2y?Rx5f-(? z!g~4quE*UHC!q5wb{RJy-r(kl$(P9T8;zOMaX1yEi6Ni6U6)Vj|n-57nFrhL#p-Fji?4j)ESyowRS?2){jb$H%yvk4t8)h zSTJ{>+o{O}b754|sDWqN2AVphmr%=U90^W7)9Z1)^@UlxkLD&3UR2yi5m`=JKgf4#shI8l%fblMiEMl zB5*@DtLaV7*$DQ*cS%-LIG_jz?85=sd)&ZDq2Fq)rPiw-OVxV#gvV3+r7u|fLsZ=V zqv5p+=9Y(3wSRG#FHo(K;k8y%>*bH6YCS|SM+WKRKZcD$)%-^z?`|-rar}+WRLx%; z-g~LAzhii<25%b2{~WxsZqtAK@S26+oHQoBIK0v~?C*mB4jB`I_q*v@GvLh^Eh&m= z{jt#&ZJu1jXmbIhEj&2denqAIR}QaP@P72bF#Nh&cRq$QYMrfG%ZAq~cncp&)j9&+ zf2ih%cBST*L>vO*lpYUHJesOG!0#7;_qM&LwRw20THg!1Qnl_FUbnty&gQ)hzp3^8 zz};Ejk4giZzJdF*QDQ`T{a-!A4P3YS|MdeAvNSagwf&ImjM|hpKwj%p0!!`}&ep}k z`w$oP8N{p@L#gZvZdznk)Ox8Rko#ouMRY&#E>kOpC%6JCtm}eWyty;gxmhfNgFyTa zbdc9jTL+VnH7UjO9K|D#ydd0cLh;wU<}R5`c5=^0LN55m-5S7wRIT^IM;53{Nc| zoz*mMpv&umoy~6glZ9O2<}JS|cWw5TQO9;_iM(EelKWpT8h5!IMr}FVpsUb&)8FG~?x!8Rcc+h@^}oz<7#9B8N9*3Hr-*}2=6yM;!#D>RK!JnEw_ z=b)7(iAf+ozF7PF#*$)5t|J_KO?U^P{v6vZj6#cH!YjcZe7%jyU7-Lr;8~J51>H5& z_Iqk(?Ffh$xXJqlV`0MM(enJpaT7XIRIA9S*1<-#P{Ye=`XelNHcAXld+@MZ)*#_( zoNi~?{?-$v@r6d4wpQNemZ!4)Gf|SWP3;r@_uf=Thio=l-u#q&I)(4wMZj_!?Lt5_ zhz;4_0NL9F+)g$G6(cqTN7;q|njtl2gcn8)wH9+J9%A^kfA1bpg&S-HXEY@K>eu(B z8p_~TOdj#M{5Hy4Py07vowWai;WdjNe1NgHvo7p(Ph(ValfUn~P%R0k(}+nkLN`iN z6GrIPy8=dNli$CU-1n0^MdSWoW=Snpn3yem?7w#oj~lg_T-h!{Y2&5o_EpPS)N(lF z&Gl->_&R>X$0@OobCACCei*{Rp8ClR8ZC1)vgh~@9{$MyqQ77O*zA~$?uz(0_PQ7A zz}}suMjS^Mk?b&edr5;Nk4xWnn-ZqLyEYd-3^vYxhwVk#;OKKP=+h}_N|`1CVMISP zUCH?@Kjr#~>!(&fG`6eG#n&=0#rDbm3pT9SN?)wQ$*A``9_QFO<=}BUD^Bx?(pPBc zjx}3atW`lUBhLa9@r<3S6FXQSFx6YfGr9@79G-Jts?uetkh?(V`~@^Ypq7Fd(sd1P?K}72)Z^IpF5IHyihn&yeGdg=He>N1pn6R1V&m^=o z`26|Ut54ytb_o8EHKc*7PXX5uIx5L%$nu|91$>_x2RRbHdq%+bMZfQy4E(Jg1o65K z+RlWsO%a2DCRYdP^`WE8Ff-tG66KE*xU+TuZWMGLJP0l#InWu&`k%nN_JA}>&05nC zczb~+1KvJf1KhT4)$>tFZO{CRuL9nijaeOvUV|5!7fhjl7T&tl_y1ebAh23sh5+kU zoX%htC5wY}A-7D=M{$`PU>`{W>|eF&r53zkI%&R-x;+hS#(e*x<27?UL^AMOI~-(1 zWZ<_xNEgTrdS>_%_yq#_#7vO26r9FVaMD`Ai!2`lqbR!v^hx}#NfO+C;7eK$m|!N) zC)}-RY^4a)Uef$(&@Jd!Bun@mO{H<71{Tx6yMqmY5N$z&{Xj69A8K^Lh9H5L=PW5=KkZ-5DC*Y%_Yg=f0Fu`RAvq98hV?Nv z0)`0&1DcbW3<;9tQfseMM-jzAqbr%S{jV7`!T448wb}Yt8xNm@U*jZ(;CCNuI~;Hl zPx;#aWLBT%Bu zH$keC#)MjrrWp8{_p8))<4DHS;CMBDa9r4mD#4U?GN^? z0+5gky!sah1=4$o@PVgP0G9cOt(92cWt=A-yEvdFO<^@L~ z@CjASliKi>GlJo8a;h<7(j#;?@&8iYEup&^^FQM}?;qO_-Dtnr9=ePSYyC_2=j_tEyH<@VGR9t7}Us)W|+_n zXlA*Gl_guL&dzg&`f$T29IT@WuJW-X4d3R-RwggICnO&8M1vWqL<)5cuDG@9hb6M&6{{`SVK825FtTD!u*R7=*KuHE+TPN>;)N8@reFXg{ z>;NQf5nf7zbcjHz{HNfVl!+e)(pDN3NI}?^1yuzkE%RWhn4tfc{0zquR4eZrX^;+@ z(0P7Giave;{A9xOPS{XXMq`2}2-_kC$V0Uj++9!5e*ix_g6Fc^QeW+#g(v;JYT0V? zy&7mqzyx7ivqAAthXr@9Cg{Hk{0#?2-)qUgr-1n%e6P8g-^<}=Z2(dbwsks?dL2l8 z1hAr7dLsT$mSGx(^W%mL$B~Zc^pDQXfLd(QOsLCaKLcbF6&*a`@eFyZliwU=Yi*`v zV_%a;6ybuqSM29p=6wGHnX_9JLtP5bTAix+2r5p^r?foR)$in`nf33k`a`YTGcl|x zB||*tKT=g5W>qpD{?Yo@46je}&DU=Iy!v(~*}*FIAiEiA-QT`I;l1fDADIcC@!Ml` zJ{q#UmvHJ1M}KcY$lP%294}<1d#PI@9Rw~cKw1crh1Wf#W$WyA>=WLg^)6Y%ud34LUzpxq%{yH&jZ$Cf7(SG}Zy`_t06M-rCa z5d>J0&gw`k{fJnHrImVmxS6`M8f&#xnW?>k+nroz$Pj#LN%ve5#@?_z$TnY^SB}Kt zl@GyDK|X&t>n&OYXWUS>Wl!*8RU`~O)m}|=wYMR?^4nJD=i4M=Gp3;bVQXcuhc@^> zxj8kmMxGAu^b9xHbDa4qyNHYI0A`b4t(R{GJmeXfqpnfBLE$Z_b~5CN87I*tBj)d3 z!eHZpTXv6oze{(@L2rADi|~zLgNF}a%KgH)kri+iGE+Ju@YVls>c2*f?slUGqkXB^ zC?0WZ;m&mJK9XW8&6fj$L%VHqobwzO_YQE}m=UlQJ^E@7+0fJ#m1mp}JZwZ|WO{R> zGPzXp^K4zPy8(KJTQ!MzFvr0FpV%=3-rAWjWB)=iRL@8!B6PPwlaDte? z%4Q<=KG!O`W7G^!9Q%t4UU5OUf`I*AN~O{Jkd7ntj2$gX`}!q@-q?)lWX-OivSubJ zdxOWAx_dA&v03yK&7z`MNN*?dRI`V2Rw!;?#T~6U3WaO9AX*f&QeRV?oFCRqP~4Gv zJZG%Qh2|L=XJNF> z&^nX0S^E4X6JH`50luJ24q?k3!fpmZ|7ApshgJMt&mV?k!PuP+M>o5`vw-4hl%Y+A zNTe8WL#^UnwC^nj$mI^^>jRi?OTlbfC}QEaIvj6`-pBF}`}1H)AE7Yb@B_nm(68ti@eybq0;ZZPq+6CmDX`R-E~G|Tit{uUryV6z^~?c^e1%G#o*|un(P0y0Nd!@ zF`cDnZQ&+ZIJSi>^T_hAW19AsE?kL{(peZI;n-iu5>uA_n)Xd+>5i>Z&hFT9D-e8= z#&J9R95#GTv*F{`k`cqlo!{xyuFUBwMwuj8&5tl@qRwaDBa9p#VMCf9AuJG12*W{$ z)IL3@Rxm75yKoa%T$&M)sem$y_+SIp0Fk}nh7^$Vv^+I-Y87NCdR#x9zX&(Eyf{>_v~0cc`^@6-DI*QZ)PXu{(i!}y((M>Id# znm>M6^FRCEh~{Tt5Fpk5Xtf{S@{Qosf76RBIwuE<&h#M==_st@Cn<ao|8;-rAIH+IKp&dx}8R_nTI5iB!hT0*N%5jBNH&5CAf_|&MeX^dV6%1p*lSW8aP zG+B>`3DB7`Now7gCi4$5bfKfP*TZRW3!zpXZe zK6Zn~cfkuT=u}`!b<<(d`xq7)5n+vpii@(coJs3s;RUZ8g#Pe#Xh|nyovDSi6QuV# zr1#N9Eu>rNku9X=BFgnj-1s7C;tetPpVDXe%=rO}p>8k()T4u42ao1)fWP#jVx8Oh zx?-KP`SHFDnZxL$O^VVQCWPk4z5(=%AP0Rv(~SASF4LCLWCAf3d-I`QJik zb%##RJ0pg%gwR<%eAK)XPGlj%gJsJy^0O#TsZ#_Cb4T!ghu-lx(RG(r+^u^2(IUJ{ zxM`>Hc_u!}ifqKxY--fFtYg|RIJd}EeH~-e2H=@bvlugLpQpe}6sXZqtb4_O977LU zA=TcNuOTDMzxRkNeXTDe>-_khBeJZ!g`NlStp09Sf8YDx>+i+Er6RNLV4MrrY(L;U zqGJ;qc?=nO?^b!fyM%DxuZV)hDr5MtZvq1J+xerrHW1t%7;F56oj;bD zAmAB)?06>5xv7?napBmv@Pm$2y*s}@@Rbq#%K=vZ7^m;(*E|I$lJ7W?#-Tg}9x7P+ zTg}7*8}w>#Wl1v~i+eA+4FvKNn6EM?{+MVfIWn7LUwBWib_ExX-8uchLwDzCrB+lrrWzVW0p7l*FAiO6biA1uS&^^1eD zVxfEX=c-ccD=Ag6ViYJOFby{y7^sS&FE3Rw0x60??^@4<-f~--X;rXU(w5qMDxC0~ z>QYUIVhK$0y6K!3?`Hb+|K5ufOqyPRP5D+-=60t#T^nDFmtP@H zE{$I^DDz&vn(xFpF1K5xEc4|WZ}*Y%?=gUjc!gy_w4L9jS(6 z(S;#jt4~lH=h72$umdf=dMtTnHB{n!-hUtqXY;f1v^1jub9c$ny_H^!!=9Q_|KCZ` z7oOwvpjy@!n?rXTN<2pQvEeN2CP#1H@>KI9PL%YlqVQ?XbuPw+!#k#jw>4rq3_H`E zjca8tMHlfgyjEMh<=-8@%J>NEBS#nj%vl>0_vx2Qgnr>z9a(KqUy5~Rb?Jq~Ckx;D zPf>#2ctRa6Tz{Q#!ZmZSWJYO(7F}k}^84=vEy=v+UUDcIG;*`nV(j)h#G-pz>Ef4H zW6Flv2(vq_EUUR9=58vbZ)TZ%PIsf4&d26KZ}M;;pf}I>Z+;W51wAF+pYd<_1|hvI zXjzn-)wGN3Wlbx+U%O-f@*O0Nzn{%lmjCS?BypBD1C6y=CJ}NU(%*eR2e0;7WZ^A1 zr%cVdVe5rVx)#?(HSN;&7v=Tw@YXfL23!>@q-_d%V;Jm!cate;v2SL@(%3p~8eYDx zJJu;=cE{E$z`$Y8z?itJV_h^kJDdD{mF?K{y}Wn$6~ymw1@SL7Qe zcjbdt+vUE0+BHJn@Y{wx1_!byTI_@3RC@QQ1l6p@tUbCDRb7AFr8?&xRp{5VWHBO8 z4e;Am3Q2>9nMSO1k?r(nHEOuW5Xbr~<9y6ai*VFmaS-JvmM*bdm{4TrI6F|K`>mZa zxvZJ%K_T%O>%qILq^7VbRz9f_ZH;HrJI;&?7t_lp2O24pcWXjpVsdtq)0lYP|4BC| zj(cXbr1c=wdZX~<6~4)k3+hIp?3s-723Pwc(XS!3pKrC-(--S@e(C{|jj5lL$NFb= zXlWcXvlmOpiOW}m@YRHCK=@k!1WT)1Z5fYQY+qW|M_t!HdQq?+W z9sMpm(Mv;n2+$6>Pv+oVI0D}97`*4C>Kh5~FIE}6KY3;c@LpwU0lZ5u8v$>ueMx!$ z9U4FZIvlt+JLI+}(%_kAuUT(T12ZW5OQ`OUu2veQ=zqk@bPH^? zXkqaD#no@y{~_NG{guhtI5JFqKP^TJ(Lva9Dj)62jR!IEN>iV5)m4U?=BIann)#L% zpyvF4-63kkd^dv&gphzYpDVAImDPCXV${gIFK8$Ane>H=-$q=Hyw!+{Z&qHh#1KQ# zX`nmii*!I=7+#_;Tf1X#2gGFSz?hG2u`(poZN@@DFIkO3EPs_J|84}9%;&8t#@G`n z@a|QLvJX6sgROYiAM@fl_o|#f`&{LQ*qog2U)FAvz^9~7N!evh8Cw+{UjQAiUvW5H zHacE7haFgQHgx_O|By4Ng%5XHJPGrVxV)1p(4D%xhpEx)AEtVfb&3Gqn$7AI3BJEO z2^tOR2enifEOjc(T1CY%skNkT7w-(sDRMp>-*wT`qmG;-Jnxkrip{+bF&8eAcNo=) zuG=aUlpF*5pm+a6<^&$$yJOph?0E9P#D8dbd{?-Ho_}ny_yvt7>+mevNFpC>tKP^k zwz9pHy!qX+u<~`sMhDr)4veXCSy_EC)KitbO6`(8=3V)*Ab9;seT3Lp)dJ$hgz^di zHAL5K<@jx^qO9d6c$2g74|w=@895>o>GMu*eD@9aKZ<>E?6kibbqyI`Fwn!HZ}o+J zf}tko=Z1n)zGb7JD!H;`odEj5l^O|RX~7F*9(Do%qG@7piqOjn>0m(b|ITCT#7Oj> ziAO!D7@O1=GO7EGY`hpNKT7oesbTbfhNE!f1A0Gxx2B1e<>RxPIFmriHKvmp%rHq! z;*}-60(HX*Y!@f5buU%*ZhPPknT)bvX2HD~5HkRxb-5^u0dWLCr13Wl8sl%LmuEn; zyP&~DK}KKg94iMdxBqVd6C9`@zhQHpH;#7L4r`75J&H-j)#&BDQ^AZDs!sC3kCm*} zAVWN^4H+26N*P!$R#d6~r&i4!@b7>39Oj$%Q_bX<_ghmVLoe_9Ro=tG1I&6E8;kK7 z=ch66`Kb3)RoClzvDR&khtzo0U(c`dew|XIaBAuMh{dLtTziXFG=6=wG1pDIM+Y9O zta#;;2e*WxC|!2-<;A_+@~T8G>SL)<;grrq2Q{&vgJsY`=-*|LfCkE=TBby4kRApb zo27k1fUbC6tuDlub}2$5JvlLSvnJQQih#uRDDcdQMBFncgEk-TwfN-C9V9<2SrB%b z&iMC(G$mM%M$U(LqQcDwF@+54Olv#PYj1sZA~H6f&{T`(*Kv7a%^YoDmcFeEDV1K~ zKBY)&*m@=A@U0sB3ENm}au0_NW}W1X>oHH`UT)5$ycOGy$XYU&PrH-{zjd$uvs$J! z@i@>l1Md2`pQ>vU-ywogy-SbY^8R9Pg_{*5CcaGIzr9?azHs8^aan#tSTw5e7{$L( zw13uMTMrXuZQZT3vDVgq^61*?xyjm!{@vR8MYpvz&E5*fD@aWI3W4A3+WPS(+RAlp zeMj}p8`9SA$ZBo9s4};c)-vUB9$i~=U0c5;f__bRZM|l1g*^%q6P4K??b`a}CEB_n zWc_MW{KvFA*sp7dvbGXRi&$Hi^XS^zdZYF07$RuP>3`-;u(!f-3KA0!B=FaWkR=Ph zrMAYqwk9dQV@O-C|1D_iWgh$&NNbt$6pya0R@YYSJ!@-;>6+%vu(!f81&N8r5crc_ zTfcshwmSE;ekD|2$&j`#A*=Q4LY0|kZJo`dYiq1)>s`vxuZ>;yz5Zrzg|8||O#H3t z>}|7t9i_HTcWv#b`qt6MK^%UGtk%{cD)TXEEmOwu=-RsdCx*j!{%URA^J{DCFZNcr zSpnmaz(3Emm3)D={6g#3vx=`C($+qyeiaIi4r?nr-LHsiYZ8squTx!H74}wGq98Hx zZ~}k3k-NfopQo+GuC0d@-$x$@`?Wh!)~{@(l~`MU2PD_87yixq^&NE~IcA$_Vdh<6 zZ-uoA5))4$@K?IF>eN=)wRMN$8;7*DgeYsPNongyYngH(kFKqGuC2%4wYL7vwe^I( z72c&FG4XB!zu2{P-*dEeYk}eLaMhPTq^+}3Z5e#k)>bUt*2h1#e*Mg~b%JZ_HrG~% zYwK#YbytgxjRVzIxoaz1ZQV#82XXk-R9gl|A89R9_Di?b;oAC7*VgNg+1U7{YwKFq z)^%zt?%G=VENwlxhxO}4#g`3f>pzGx9R65ojn-C@M~A}_*H#-5e6K5ATg&aOut7m$ z;tvS?SC?78-t48Vde>H!;@8v1!G7&el(ki)w0vtTk4M+mx*H6Krw~C~Uvh1oW^aX) z6(lB3A@CbqTUBc7z1^)}U0aEtBYb){b!x3a5vA=S76!*n)<@T6@#4R9gmUN2vWAd4 zU=~tx!3M4A4G3)JktvJtVub@^j<$Td&&Fob+2|X8$3a=mH8)~YF4ln>RZAZSkxk7l zJ=D|Go`~JxpQZ`vnUbeigZfHuDK|g0erhH58)3bib9$JGiPIUOJ6{hcIR7&=-t4dZ zv203GAKt~YQc@?*7`oK=e!mayWl$lG5S!BErx zN8Y=DM_FC_|G8p>kqHVKD@fF+K~SThCI&S_X2=Z8V3a!o(oz+Q7lfIB1vQ!kncwSJ z+G@2uZKbVk?WyNidaBmeY7;;LA`-PKUI|+Djq!roB3@wrpYML(xg-R&J?H;C|L6Jh zJY;6}yWh3unBJKz8?Ap( zuc*=bCm*@Q_0^V0)s&Luj7hx{KQkF`q)?MD#bQ3ODxA0Z3IUFP?}E zXie&6M;~EC*p@Q~rlq$3tA1w7ier%#m#;96^Nm$G(PQ!IN{fh&OX1gC6{r&47+ok~ zw}fMIv3$>njA=k>Se}MNunRu;ne(gz?2JBu4KtCwN4bc1;$Q43xJ`BaiH`T^Z9Q!~ z{e`_ft&ax2W*QhAw#>Z9cyswIyeu#24V@6J!^XaMl0xr=i{Xr*w|~H~eSpWqGWTE} zmjCrm8eA#hvh*_!KE43ny}hSO9+sEA+XpAGloa_SauE_>84|U!j`Y*NrY3BVcs7M+Alz*xHGc)f$!F2NesDJ7G{+ah>sp0)E8UN8e z=RZCEm^jzPN%^sfHW2{F-m#wC{w4mcmEgf-Igi3nZ-E zZ@$J#oMsth>YzTzr~EW0>7dT?VEw+y^7uY)ndK2Z4103Z-+Q;YKumj$`c45}^ZzCMKjae&xiuG4VYI#jCP$a<6)BfDRg zk_9&|6c&DKQ{%Zg(UZhGQ~F^K@n+o5 zj^$F^xVi@RDsA4!%1BjHAH6L$-Q2V#`-{H5&YGn`j94|pN{{9&H67XI?aNhl*W8HzE@JV>PsZ%wZc zH@(pjm{W^l;|;c3YYhRt!K~j56o-IDhOL%XCf*mnODjDk-nuhtuz#1ZuV_u0pUR6a z8)N_4B>Hz&Ay(m{n4&n=yH1}?Hhb|^rOG`_-?lT1$4imd1MY!|aIJp|u?z$*c>a5)!EI=mlSaz}(a#S^reDV=A~7$8u<=EPN!_fm)4R(-keoAugs<`M>^iw zRnK=o*Vd(|MpGHrI(I+-l}MZS%MD2nIOqFwc<$4&+4# zIWzixds8db&>euDNAy*}Nka|+&q3=u(oPr`s7kA&rFHq?Sw(9)>5sgO+)6_RFE}xW ze8{-xR8n<_`@rfjWlrtgjjwxaTHh@2KFBp2P5)O{n@cHH-+iy?O1ejDl+(NMiqL)l{RlvfS1jCLmfQGiiER5Df34}> zUsM+=s#{oei^_^_aVX#b0Q&&2&;hV71z=xZs{>-+mxItVpgqGMsR~3(s?Sp5r{{L(i1~!hN3hf5Trj+n=#i4mXJ(YFl>h zR!*GSaLX6zvqq-$S(8fbzpP@%NEE(e%n~@On5&b=qs2PX=(1!1N)-OOnT?3#Rcu6h z6fIMnfVmC?d$Lj)I5)DA#;QZRB35Lk0TZ$=pIIQb$f36e&mjBJYd=q-rwZgSVyu5B zP7+}9j-y(`B&=K#82K(M;W+)1A8gv;!Z?H zR>_H%r}sPZ)f~!&^10O9>$5u8%2#{x{MCViC2xchkM5=`d+LVfvGk^Unm)~Kpb@WK zgsZ;aWa^(%R?~Rl&^%vqi%j>Om$4-GCcVuc(RZs=S+tf5Q49A94(r|5^p`_qy2O6E zo+_zC>`XzVrae&U3>=ZcV5ufK)A7tT+3m!B08VkN|+EhW`eS5}(ut7d+nu9TJ61RUqC~3f(+WD}0TU48~*y zeiU=A!PuF+7}7mo-eA-E8o$*U%HJMp`#U+;|E8Ob7K29n42Bl5PK)Hfs-0+VY$KwOD?UiLaSgGY2y_FZXx=1||u{v>@b(LG)ocWb)M0>k(i`;Ki z#X*Qx+Ift~-vu?wDp$%+shErTWMet2&8v8UznFBx-swrBWfp-OEpz=KU5rO4gqzTj zFZ?8-V}T@wd9IX?2SVYGzQN|X)tt~dT5R~zd>986_M4vvHjOZwKgavmG+i!=fEbL0 zyCdz_tr({o`>utbC!1E5;Y5dwg|O|iFULo@E1rfny9czOpcyG00ll8_g1wbw1e^dg z(O1y!I3H?WSvDm%%5{Pi;8$V)g&WGk=I+1PP&GC~jm?m5ASewUdZ~J;Lp?J zdFtN0gxPG<$NAm*XF^}v80!G1we~o11u>$lTv26-`W84JiUj%O@<#(Gm9bc&XU*7 zTda!J5bA2K!!(N`Wd?GrEb;4CQyQ`E5E(|edb;^`hGBAWa`V7gz?Y1E8vkoNHzt&f zZe2rxCl~bz`XEnEOyZT)rQ{}m(^viNGDm~caurL&ymfNKn#EiAg?RF%bUDiBebhrv zy+_+dZgyYhn(Ww4^X~WBsL?-S9o~ItTi5XJ4AFcOh^(=eR|MPMDh%a6B9>$S_fn|rMo*4+)sGobihr^TSRdi*yxZ|H$3%oD znLSNBM)Kg`-NE?O8M>L4lkYflaZu7f2%o5_Gw`#%k7m}|RosH6Yt&YWS9wosN31*3 zd)g*GMj99?*zJvts=)sq#f@w4r|5k-r+d6NUukGBQjAm0YEzRq{vyyvD9+D{k2B+9 z0@uXn%ozQWl19#hG#4X->Eh<7K9j}J#F^>+RFw@fo)PC#l8mV{?6>YvADjot4awr_ z9ZR0?F@k>H=9TKJ8AXgoGh6MaLql215dzyrA#Y~7)&Hw^YozR5ee~xFXe{+0)gL;& z!+vy$=HY-Y(s0{d6?(Ylqy zF>_w_$>+($#Cc(>)4q*zSw8<;l1RM8dCk^=9z|>rlD>%BRKjJ&Nq-)6eTSa=EuY8! zM#tyL#&B5}uj|4e824|mj*tNIgEeRFF`^Fa+{ilI7YL(*!S=)3jG1}!x?>T+y)6mD zyZiB$yUDH0Dv)lJC%oisx#m!_9XYpZdYiw;UdWbo)ZFxzRBE=Q8gh~ku2l4hQ9mD> z(HWB;9lpca3tep`r{&Mkh5+HR3)CXA`wy{(zz+ec>z%_ zK8I>M;(?c`g-`t!r&b5kNlms#s)Fku{pwgI0Dj#VDadb(lu5QkTFx;DpJNN(?Ez5` z4XggA_n5{?5O$m@MNXAsr%I_^b-Cb1itM#lng+JGFObK*z)kPIm*;yClWbOuiup>n zBArU_KF3}y3BE9oeyJ-g)Xr27sLs#LRNc%g51DZxzlODWp^ioj2Oq&jFD#aWZ$8vw zuRMo7NUYsz|7^CixaVo`^R$rb&GPM%ZkxHg?$Y$^o4GUk`mZ|wVxGVla!DEn3q3Rc z4*h&BGxurw!Bmc^gWS%Af0~_s7kj}5M;`1+Kfk1>85kM*Nl@<4PZQrXnNne10pTQq z$jqCB5`!TJDOa5BASE%e#I`Q!3oDLrJRdhgvzCOcu{!ogiQ{@ayl6dlR&1&WwY4RDO<3qAom2wpR_OhNN(XL7z45$bnS{pP<|Bpc$bD=J=iLoqIo!~dcHU)}zl}o$ZP}-dNUg5uG*(t{ z(Nl|MbK=6*wtDV?WPTdWUN#=-U0f-YxN{AiFyd@-OL)ydm4CTNDF!E{+NDYT$#C<8rU`{k(z zUj%1lNI1=Q&@oq{W5z@K=e)@v8KHf_$yk2Q05SmoW6Hq+9(3Nk&B%o6PRq1|zkTpE zc`k2$HvQmlR`)TGlg&VmL*WsOSli46?Ir}(9nx5cvJ3KtzMZ9MWU>{=WM|HzAx9>| z77DXzr0c!y9~bwbJtyG^>UlCEw5;U?M=+8Qf7~dJe~+k)Mb~W>e?b|mgSGEV)N`CF z?|PO}Giz;BVz5_d20PrWk*_RoSU>{6iIdaV>SMq8f_a+gy#H8cmjAW)2bl4>C{5?+ zohA=ga`Zkp#pLJ}Rz6#Udg2u%SE#sYFSiXHCyv=n4m63cur0GyNi}G87gm+l>!MGH z3q^>7PabyYVhI9sD#*oFV~k`GB3T2K!n3_?Cc9Un@Xc#fMT{*myEX+Z@47rNT~Mh<*J`hp?tqaP<}7p?b$1nWYZ{a z(T|`b?E?0k3TrDC&w|y;Zf1V97p$g+LV{uOdF`$=nI6w83OKh9D@-5{3Ew* zq^Q-g;QcbIMD*)z{yrtp@Yz~s*)(kE*W|Nx?fKuLVupryrTw!mrrhyMo5{DXTKpe#E(anR25gAb*~Yx+n;AcWEl{^~lLV_q654VE@oO zBL+J}U~f3SsN8HZqc?n>^tpl5v7}#cIF-|9R76yAtx-j%Fo&(<&}9`8wSAm`}8~+EeH8 zQljt%<0xD=Z%UU%x55VFKs z4=xe{mX$k14RIU7b^>DJ%lMfNiZSspLE@0IVq#U>t~oXb<*Ug*aaNUS{3nKE=#=)8b>KOeNH{FS7-Q{!PLWie zGJ~T2hXF1Y^NY_}9*jTG$Q$-kZk@!ChworG(zph#$XdTe9A#i})28GoyBl|ywOSm7PisS2!g z+)q3Nk1_G9?cY{OJbOo{_J>wG#)-h0iVW|hM^?a29o^@2n3MY)&ZD*;6L7#nwlaR@i zSVBFv%KyGdX&01nVL0g)9voc4vEI$HVDgXY<}-1`*z4xQ+wu-bZXA0w?qaX;Eu08| z-skNVL)o<=vpH%mdZ99yKc~K_n#R_uhV@IMiAhW>3R$-s?F`0@B74N7&y(g#R$tX$ z%4F7RxEfvFY(ECKF>B;V6{!y{>ZlCmJMY*taXzL6){YLei=N^#^j3V#JM6{f!a$&2 zZ~Gkav(jIEWnQ`8JC47;gb$4UL17$>3Bbc*A$a{azZXW5x6rZ!#p6fFbucxMYlM#98V}v12-7Q{0RaFwW zt|?Ccu1@#Qq>T3K?d*v>m1>zjrY7X&e8U1LI*} zxB!j`SsQ!2f8qh};}yvJhp~d3KF&5k0*hS;!!r;DI|)LnsgQ>9cc&NLmJ=xzByaO5 zzI7eRpVUHegs=ii0?iyBp3#t9Mzesi1{1@6c)7Sqhf+bnUg7xq7Bu3OJ*Qss){sf? zGnFpZbM~Zfvc1ITG}`Bz$DCcwd-mxl$ROB8X0=h<&tkI$U^ETJ`QfiTJ~}}s&BgZF z!&MPb{>tN&18eGLJAbJJt5K27(ALYURiSMaHntdotpH+&y>9Nlq`&fn*u#Qdlg8OG zsN#%(Ih-#|*WZpbK7?=SQA*f4>;B8kAT=sykov|Tqc}A#zt9YF;djI%s6KFzR_u1&Y#3OqoD)K$2{w+I`8YIWNbi_$r5%d7B4|?-{Ii z4s)^UiWT z4NNB)Up5d^YmHqE6W@5Vkc8^d+G+(_S>|+Xzq8QqMN!Fdb|W01J)k`OENkQ z#c5eiwASflb*7Vqh1(vdi}=AY@AsPyqEt@J`vT_uUi+ch98ot^?_Bbrz?*tjyCFS30hB^3XjjWOP*dgx?CN4p=d_On#n%)gq&jqS?FTL2;v_E%c zxHeI6wy(Oipn<@v5JerT!()_N3K z)g4P-3XELuj{}(=HC>JTt!^S^;YcGyJ;fj%VkM|_^h-wNc`vJH9oV4~H_IAD?n9%W zrj9T9n7{g}m%TSP8+Sy*$FUx;Y4Y|vRM%yhodE2FYj!w5-!V+zleaqX4q!V#zW5sS z&mw^_Ns_ALarTsX3C%2VW3AltV@B{R_$P4 zm49?f*7haW`>UT{vaWkL5RFJ``OiR7s71al;6M`2t+#wdBsB`4D)Ypc-^pw^hYd+M z3aPWkdvn_Ji|Dy8+3v5tezy1KaZE%&xwkD3WL;NV?;<|sJL#yBF?@RdhA!RgpeNCU_#RhLOwR5`%$Q2Y5kl*Xy zm26}8uk=+vzGORr)?@w@5z+-vr%MBzQ(bo8n)(HWzk#*Q*O9|=$(>LmhF ziYii~cnvr)>Cb}t;ZL!dci})dOpIc7!CgkB`z*udG5BCBCX3r^$jp-3NC&@1<^tooC{oA zbF9P7>0Zwv&zz-F*2c@3$qIY!gXHG00x<5WyQNyb`u~bjND_joq@0`%2ZT_{UCGqWjQc*r&hWyjL6eX7B z2J`p$6U*`<`Fo7NByLGMA&WWLH$I@@NIt+u%7ak;bM~TMWkJfOQxzkH{-*Y1 z?9V!|EpS(I*EpIpmil#!(dYf+IAa{Da1n|;g=&imCr)==U?Ic75rgM)O{Zcmk~PzOGzcpb&b_Ue^o;Uy1s-3Kt3h=ZA6 z;!$DaVW%O|mt^>>NZGVODlboTB&adaw%gxGHIkS}<8^N1+wBRICnoOi9>Jef-Lnr; z_gKn>Y=)2x;t-0PHsmL2_v0TD_TDUq6w%8bf7$HZC|+5q9m7lx+lC&BsUZN2oOdid zcB8-gvfI5k-+)%op}T)f6WuW@UB6(E_H~bE^S4R+lG-G!-Emnk;c^aFyN;SEj)v2S z;Wr}A4@lZo2)U25{1tF19n%;1t-T_0>-*wZoQ>}HYi|#%9-SOlwXy<^bu053wjR-m zEZg4Xv+fp^!ovcXSzR{fu&-~jrpXK&@F=}1-Avfzw_Y%;a%NHKg6+a!`Fc?dC_o+g>9lBWDW9hr`|{7;AA%ks{a;Kw&K8G z6C5+U;AZ_O>G}y3_06z2IGiai?pj5$ukpqOtfv|b*n=D(s`xqkNx{t&|Nl{`-?FyKB(6rA7l!6+UiH~FeRUh;s*!}P+6Y!>k* z+aSN{2xNPwF?kqTK~%n%)@2RJB`Y_F+MmzTNnx*1yZ%C?U>zyd^uRl2Sq>o*p;Hh|0V9`k-LS-!f3b!y3fq_JHJr93<+E&_wM{;=?w;`mSxGpo~^ew){ z)>Ij{og0bOD!izxl>93v$#dtz13Y)?|CN4JIPzku&7Qsa)#3wtL!T?{edt=c^TB!0 zx}ye!a-4m9I=E&ptkDUsUcyw3k+(> z&|`efm7lla?RJ8^-6S)ce4{3wpx9qoP#hZ~f!V|eX8he^QxIHvX@s2Jc!?CHo)USx zmEi1F>^i#*bwc0pnk$aI`o->U*TMa}4>g`|ae4;FRGJ1BhI$)Hd`E*38QF~|Q;cQ5 zFg~NAyTlbfvTNBlOlEw6R$iLNOVV2-o!r|P*_aQ>L+cQ~PKoegb3TOTAF{uF20quM zjWi0OhnQ84OjGaGS*1r0>^!xu1FRLq?`{`e*3j5z9=v9!2oM1p@f{(wF*tISHsJsVwgvC+Oi@LMf5s;8|KPZ~o6NltT( zTX(WJXtjt=pbhikOt$vU#98M|mHOlXm3JS)@00n>KzM(G%(Y5%jfj;?TTgdpJIl9H~VPsHMf#*WbPb&e!8^Bh#EUbupuDq@L-` z>eX~1QTU&@5!3m*z=s~usWp7$XhJO$f5bZv>49a|5_oBJAK$dmX5carTsqgiUf$%l zD^BGHp2j^D^MY2FcLZu1F24SgsK}4YvLK+0xAWE?4FXZII_e|)>LXO%p&jF+Z%D?0 z3p%_3sk4GJm;9}zNlp}ge=^-hmScyhNnT877s+_h9^Q1lN%iTyc`iRvDkY9oeq?7OROW*@J zr|b7w%07dV*}yLw{gvRGaJ(M48E$ZMv`a;$_KL$`*4!M1>t(4-JrlQB(3j8x?rU&vbf}foM-%sGOR<5-`y{gBgy!A8Th|C6!;^0!=DHI`!h7u7yR=MK+i}+?Gj3~Xp+zW1-sFiN?HM20dHts4) z)v&i^zMv$=Uzr))7C2#7Sg*MOwnos%YFd}rA9h3rk$takgHJcVV%B}rm+e#(W1+b^L*~CST)i_Chrcrz<60c3$jj&_NJUv$)1X;%w1^ zE-aZ;6CW=P@=CTx>yX_7D(S?a0|Czs;)JVMuq+Nhi)m5m*;a3|mT(bF(u}nd$r+j@q|G zQf!ZFo%`{tC_0b>=7pArIEyW@4c!I)_*CQ!4pu{+yw>zgonZHt?dNZ2Nfo1KPd8+q zp)47)UcXyfc^Fej&;`qs@|Y3s=EvFm&|4;059z^W*q0B>rU72WWF;oPN>%v9WYHJuqU!Ml)Ydfy9N_ zS)9Y%8v78umkcV#4juY+@5~-F_c4Ex6S(dvApkr``?~kQf?4_pdzoHV?w_^Lh5ZaGNN+))d^p z>fl1EMB%rb7dhS)UgLa)910gZU%h<2%K0i`&#gP0ujh!=xLA;{W1O$d+aY9YKAHc| zyI}?2(AGxmoaRpUF$mv~@?Gt;AK+#ZQ$Y#m<(_7mEzh+C!c~}CF=y}d>(cJvbS+w7w z|Wz};oHP^2Z~%xh{1rDmCp=`lr9?*^gg;J>JuP+PL(@A8fJmrl z!1^G9(#!hL^}ZQp`r}v{4Bs;ML$d_d(xA4Yd9rQKz=J><7B<#XFCI^f`kIt=0<^*7 zp5&*uMW;05+8JRJxs2mIz6O`IvaC1T`%X9dnD=mnq|C5-K6mh})81vCnLv?;?7tmj z=B<-?>SUf|`sCvwqUS0w@d@UUtVn7HUs6z z3JQ3s=+5`Y$rHZ8F$`}pu-r%!O@9%8q|{~7GB{`%ZuH~~JBWsJo~BRO2;*~uU-!lZ zny|S&r|Stnrnpi!sD8S$Z`V5**A-OOi!Qp047#(n36mECUb=kr9>wG~s-47H@Ai zuNe&Qc)FL%I+huH> zr=FPFIG=Md1*s2Y<9|# zz+H;Lb_7#lYJ;mHX|MH2nVMCl$9iS{iza98*Ocl4pf7r-?|~Gfin=vJiKV914CM-j za>_}mp`2tre&G4o8PEAy<4GmsJjHmmm8DKlQh6X4JF>zDf7 zOP(2x`@jp<{;F$NHk@VjmFSBWOR^b^80EyP$}g8#h~DZj3}Gu)F6r3QBppMp7SiO! z!GzUlaF@%d8!e-K2*#H#=Ku0NP4}6KgM-%hB`8pLZB|`9L_Dy>OM>w~m>TgvNTX)Q zhnU(O`u>xXKTqyy64TF(*3s`j$TZzBB4ckuN?N#iw}9kZ`mitgIrP_F{je%7*+t{# zVZst;l~P?D6+AUAW=-R!M*I(Z_4;3ETJ&OOq)QJC~Qm@~3 zxT!r)PkPF4T^|+av*wWjYf!YMam*+DBr z3m=;4EHUmyff=s6!Tn6Od>PPs|Aj#YM!zI$U?X3{QWO7moeH^TAf>MhSX)PL3AOF& zr|SjqbQoMUx>Yhuv3up1V${=4lW*c@QI)!-(>vx2l`eQ z5FOU)uO9D_e|TUw%zZaIg}8m!{cO1?-q~%Zmjv^lF`dym!Q)|c$huQ#BrXOYp)$N= zRD*utqmb?v7B}@QXtj6U!x#iAlBg>W<=?GW*={-w$cOmBKKSN&kOqfeenBE~dFn7< zi4$dG+hPCec(du9GmUDL+5Ik(m4~CBYj~h=9p42Fxr1|U%)Bs}?nlCE|g`Os+ zuA|eYqZlpRbE4Z*1nM0W?EnF4vsJyPER7WP!x>R}j1=v5$JovU2dvkF?c6F2;@bY+ z&m{BqS+mEE!AoZLSlkyr3w``n&|A}{;Ods&Da;^J6BaSEJ;#NWh!ypeaKIRurB5(= z%OO8qU;;Vq{Q(4_ruG7yC-{#C9E5UxjpC-PsWbkpjVx?kHDeRmYjd%;N32^Mu!o15 zS}P*?8+lMls;BR*H8Wyn0^~0o3-J7xH5$Y}6XD3-kJzUF>Yjb_aR&WE=>;h2v~Ri4 zpkL27Qvkj$Lj+`=_Lpi!6DP_X{r3bJ)0iWsfC~EW=p0@+QMQ+Wh+rM&97afAlWW$P z-e=||>`>5GpO?C{H7A(AJ-vPTupQ*envaTN|iNS}6L1 ze#8s;F&wuj7a#Qj+UZHnC9P&Q|^-zu9tIWhI2~PPMrGA zxnhc7?=nMue1g@hZ2SH)VbYORjq&0s&WEW2Bfz&(prhI1aN@kPU;PZ1{U4XztH#Ix zqiIjsUmX|{N>cK>hc{hI#w-Mr?+(*h_HO}%Yc$eN^wQW@I?B~D_dc7lLt`i5nVcId z6{me~j|p}1mUl4IJ5XsR*X(8`bnQormFlb!fTq*V8ONmC;ehyr)4yJ=x%%m>)=;n0 z+EKngL9?(5GW5`HzmJG{`eE-z8ffIc;ps-uPd|~#&+OPACLb^wpMhVUzWjBq;Q#8w zBpFxkrMYzeUfMy3JcCyTN1LyqR_l528UZe2rq_kj?|!zxPCedq(B?s+n6h^SD@ za+Ph}nJR;@D}l2kGcnj}o-p!SFMI_K7|&=ko>No6ikvS&YYx+MzRncZGmM6q?&O`t zptNi9Az4%9ruRWw19LeP#5TgK*#ZL{i**&10d;qi|f~HEb0Y1aWyWWEM zT!14Dz!W|Vyl;LLc&a3LqT{YRzYyM)J>VH6_ZTfmzNb=^qG7jFr8$tL(G)@!nU29kjegIeLOu+FaI zv6E&pL2=7nVaHLTcPGYze*Bvxvg0d|$WMnKKq7t3@4rYb=VqwoG=oPR`g+Xo|DWgu zSyZ{uTzcsrbLfRq=}a^9GKF8g=w-{0KI!E{K}%;26TOrS?LjYyq=R$QF*$v(lz?`C zf_1swd1tmZ!!nE(s`(XY^~+ew)x*9Ly)UsyuB`P3=H!WzhMC6a;gkxlDtlW@0Ci$W%!U1i8Qi=qe*D`b(@4wa z$7$r51UCkGpsPsym{0g|-^lyrS3uqwLo>)D)Q3HLqw!~Iu3XmxUn&07-{r=6+63+~ zm7-{Ql%?;dvyEH75fDUO@Muc!qSSTXS>xp26#~)fidD z$PgL(_F(y2z{m6sIw6Lw-9ev+#+JZ6i(*$geL0g>jSCUNidyZSLR+${gj2hd*??sa zt;@8=PQ(UWlgTeoZ2UXSW^URt{vEWX&Ah0Wo^cssk`g>gER$#{G0ix2Gg>L@5VFlh zmC`(-HgknWSN80wf~=V=rW=lwXx|FEM&` zA)(ahE967?$sQk0Q7dG`sPhsq=%YpIceRaL}o} zXuJ!*XXqo3wOu)SOHFgq@h4P7XF9&u3FtKOH%=rcx`}aR=~(x9&UQFzoi z@1ujA{COSjUFwyCbIG6QzWcrP@L@NF-rLzJ^kST9S+nSv7zUj+N*g@y);qsaqjB_& zr6SSNphZy62PPbI1LH~SXYw)b#tudASR^L^!0k}MTc+ZVv_MjHs|nh6D#s&88iMbZ z?QNFvZ{xiY!K#v2SqMW^S+eMOo`d<|-(3oaFzp;(Ppsjn5I zlU3Jw8XSMnl)7(#{o1d=Axc!wlJ1^PdTO{ro_Z-&bjnwc7966^pto0hW3$>DX4Y$# zK6HS6VItL}{qHu}b9~pC$r=5wR?;l9s?>oRag`v)(BY#<QN3&Q#`XrD% zO-K*NZ_rOx1*dM4y*T+8WyRHtJWIA}DF=lI){!jGJ)9WLjQo4}nXf)pjNVgqt*60n z=tvAvgcTj>##@nFtAjAOBhcxhE&6teY|+-mvKJ*ch2!T`FZC=T1D09gh77aaE7jRA znK`4+bk_q4%NK&xk9(URh5l%6w2#&XHFbK=;EO{z${ab=Fs%VW%U3M6O;60=x%M-@ zq6p^5YANIr(C(wiH4D2z*{VR&w%77ePhmXIM;pisxpDGdJUD6SnG=UL?#io}IFvWz zwMA7ocpA>jIuFUY(o+M3ZS*N8XbnL1Px@2Le8mNM-a)w>f5Umj9C<^<5HIW*;R|wg z)wYDTn^lk@P?w)Y%ZkN>>%$fvwV(K{aUR)+s{^vOTGx6;zvNHMC7SQ0X!+=;RY;4u z9Qp?5k3V;C|L7r39Og#^V@8ix){d8!pdA@RHd_2_DoqOH0 zzNW{M{*frJa3v)~7D5OlCgj>bQnFU*Rkz#22g>l?%jeY93aUqrE_zf`)~-u-Vlc>VA9Re$`!>yPfM{*ec-Ke?~^Z{Bgx@jhexhkMP} zg9op_p)dTbI(Yrp`>H?ffcl1ii0i^3F!RYIVip#t4On}v5Hiu*314n?ZIO4C;`}f# zCr*4{W@WinW9n`e9aOoj` z;&7kSJ;0ji>F&p$wyr#C+GSFP|goEox{igXR;SAT^z2>($?K`?&+l6ahi1XJY30`!Q26UbRb2KRdm zzauJBn1Z2E1yDia|a3{&~ukS%GHD5?CH=cMPz0{umKc<(`Qb1(U%e?qRf~{x|96JfQy%>E-yc486Q}>Q|zdcB*}4dRc!$2L5flD0+cZv{AAn5qhrOayeT} zO&{c9=%v)S4=Llq2c(xLxlh$hPi$b*X12ZAM4QPAW`j9bNk}O->?CX*7qt3&9~|LJ zj6K_W=BZ?O{>~70d`0qKu4#TZdP>AXpi({}9X*Oo>TbXH(Slq>Gx>ORv^e&Hk04!>J@!obA0yRSgm^)e>QY+}8FkKogce=;=B z2KXwE#tp}G&IuqfXSE^_*2>FVWlyS+%E1GKunXzdM33|8sd5u#Ru!S zuMvoO_T6vqOInjkLe?#NnHy*83dWm_bDgt=P16=OzRxXelD4o(W(%95t z=6b4MX*l2djQymjdah?FqBcs7?RL$N6jIc0Lc(*1wj^(2GCRO)WU%Y7PsEvu%Ytuu zU+R|XSC(zAy4us=<@{*eLh=XN1-zU28SQVj9Q(ba(|5l7xNJ9L2qsSb_Hp>trS;1k zbvlDh-KEC!YqE|VQZLA~`-X5(V?SIf@w3M^Wl*KPO37=hpY^VKAIMzTgWI3F6UyHl z9hl^+)AeuB2fx+e@g<-1SO3$yYNaa2?CEuN(s*r&eSW!yr0JSiV_)QvzR*lnBymq!4wM&ku1cm|?d49J zLF*L}3d|yyPtMA%_Le*{;Q?4wkple2$tgMj@ZJG37#qMYz;3*XQmBujhIrm?E`jr1 zuATD7#^*9Qp3PF5WNO3IW;qvkFQXswO~Wz7r#m%14Ok!f#qT_3S#b7uYLQjl6`sWM ztg4hgD{Os7YDr&W%xO>U4<+u_kKp`GKGbh1Kcp9Ym4l+Zb41A6VB$aFf2~n1XOFX- zH#_WaeC5#ov7NB0s#`V!#rr*Te?j7Ef;Y|m1^z@sE^r0yGzXf)PYVpZW3u3RTh3xK z#r_P;mwLj~-J?Xj8$f4;tvl6ay5`tlVO4#>dzU&{@Jt7#Trz!x75>wEn}Wwv*kJVY zH@OIykQiE}^L)8FPJ7?~D($uOY|q?|m4%kr5-xWZoB+9(P=71y(%>R=RVBhgj`z{^ z+y@bYN&2h}wUwTH(E1(Ww8~0jHg>vLWC^*n*$!E5?o5N}t```IK93Wx~+8J0M=wTMUJ8owJxSpKlOry5_`{ZZj^t_|PdA1t`)^6(T2hZS)%3#uBQ^Dbl z@YF!jzsDGx@yCTR`l?@T7#CdlnRu1aCuQ@;9Fy;IU~(&ILKn6=>};?%oZn^>FpjUp z`ziv$vd8^Z4Y0@1!Y557*yCg0#!+D5tIp43qxFV8YVrT&@1z_^SPlZJa0$W7^*YW8 z$m+k}k5fa!>M-NiBZluj`T>t{ehesHs7d2T!v`bE47-2cKK2k;X2PsU7YX*m`!wo1HEMV8_PrEY zCQ@H~wHPXmn?cjwvb$ZZinbhf`glLMr9)CFm{$P6rKA+hDHQoELpu(z?!!Y1pHsKF zV=0(F$ezrOmtv?Q>I_50rn92PIenPypFKRJ!`928_$5Ull=-1J5jOD^r5stcK$_mE z;l#?F6ef(^`b60uu*J|Y-j=n(GS&p@|1!hXE$Xa1@i zJq^Rnj;8}JUPsb1&H^f~-bT+Dj$_Jl4}o4?vf+n6abiV!Iso)f0Idp@VkDJ1w3bT{ zc$#@rwz5^qpGLB3G8k=k`a1~U#=>y^q0y7+Zzw_Xrg$!xjvXmXJN?ge`~sj`mwJ+0 zebqY~#*pMwY40pA3;r1g+EeL47YsC`&VSPGuP!xh;&8ij+0!!TC8n_>r^e%sq5HH< zk?9J3_+W?*F1hLk9>)finXcUb>1WBtD>%uJD2L5txw!E>ac#~tN}u5zXXg55_dNbS z(Tn~vE~G@7BftiF3$PzRd}R1YoH(D}FiQ~IT@c+}e6EG)?zKnK5hN3&0o|`>u+BHc z)o*fR)IdG7>MCHxDe07)9B3NrDp!-C|KDT9@e)U13rJd9tC_X-huYriXZVS~y1}z_ zWY9W4ln)`)p;EsP+27>FMY*D%C|JaW?U;}lTS*G@=y|eAF|Woj zwOuvsnoq=f@cD$66ZlT1=($|wR&7O)w7lL2Yb#gRkwWJE8ujlM-9O})FnoH*+K0?Y z6X$=Weub=8oE{w;9Vd}jDjJ#9SQjk1V*3w!)tQM-XUJfZ?#++%fF*#bvzG3F=GC>V z1V07@W+$jMQOTN6NtSBI%$JtRNG9ATp?N!)O?(?rFFM_>a=LSLbiAR5$w!Df!8B)@ zOs|Gz_ewuL@yv5 ztpVjm5!H#}lGT_}T*?tmd3F+Ky)uXnCnA5uAx!`Oij}V2zITta1Sud+Faoh&^*j%D z+TY;;XV1GXkk{r_Z!rk^uHeDQTlO<>dY*aCH_r~?83Yp`STJ&k{rpkv0zGx1OTUsX zbg3u*gXE^FrP$q9GnSMACTxvHu3XfySQeP7rJgty#w|sqncuSK2HX($8N15%=%Eu5 zgU_*NdgxhGJ3Q}a1ioEu#9@nQ^&I?!UrdD6ZH5Me7H9czVipqD%eT zV&0U%Hs90W2`zep)Zqi{b9m4F9z7Jn>yP#?scukrYk@)Q1NaOJo#YM4ce7Xu?H^-d zeT!A5V!mp&cA8uwZ>^>vQTU$xyfs5sU?(&7zFDV=)r_FUn97XDc501wgIizq6W&#S zGe{mlNcG}Kep~c#bh06KHZz8&>|#3Qmx3|5El~YV!!#^{ny?Dxw85GX{1UD2`gniLJ9I^@}CY9KJ=LeU z-Zr3VYT0jayS^r}=pT!L6VAsW{z*GO8`_?a3}^>hC>z>rpmh&SA-B*D<2szy*!{Sy zQ(eAkqZW$JtG$w|qoMht{SEDm(ch7!$NC^GUfmAElXP|JO#|`vK(=6eTZ_9#B)({! zc3pNkXQ%V2(^g$6o0-X)!kN6BU5!_Qd>w_^fUh_l)>ZIX|L^T>hmpVqVYzxAsw2i2 zUX-lFs3`gCNaU|`C4Zgk%3tR?^4B6HrGY5aO}f%ZVvIMK|3ZWa!E;5|lZt$C{EH?d zcOA!>fe##0uKQ5TlSHHO@ugO6xi3DxoJ-jG7{wmO2T9=GudLp;Y?ZdHp}|GZV*bTI zc%WD|GPvj!o*f%KkG%wuY+_LyB1YuOZf$^R%`bO>+EVR8@!E1e!tvTseAL5AwG;J{ z*K~)5zxpxnswXtjCKdP#m7zs@)fyXUv<7#E#Dzt1k_(;sxJSNIBzEpO%I|;RjFL@R zqm0*SknuW=k!?Do@M)Olvo?hnbyhn31!Nli4(w`gW$G}($P|n`o$=Y#25wzxB=OC% z&1Ot>9L(2p^=NE6AK zX?l9MLvCtAq(&nmGg>huR$K9vwjM{HBOi>6zt2*g&s~3?DcX=KQda+CQ9i<{6GO3= zzs{XKc=?PniK=Qfy`{voIp+3Jc}d)S78Ucq1V5ir`S}p${BQXAIP3MmvkLFI{X5`c&`_7#h=Kf~~ zqx%QZ@HMjSc~_aOEivXQXp>W}One2^*BGgDxN+n<2+D~117S-+*nBYQO>V=hz`zLR z%i0IJpJHE&mRWi6T!s|)6{N-^ZyNm5T%+2SSJ{1<-m8!W@Rp!;Us)slFvqBhiHV^% ze%Z`rcVlA0Lw()O$DI3Ti@aodx0iT-pnz+N{Vd&6CA%lB)<&?L0-W?Vb4D>jXwWC2Y>AN3E*%T>(F6r zqtEJ>LI8)dVvrC=p*UWc=OfjH?z2*rgr!pr_3b%JogTd>Jx!_ZLVc-eI-aI|f zN^a)ehV$tcgtIF@JHIJ;+qiDWriwt)(Z}f=H^{2#$4yVegUWe(*>l2~+f!~T+N?$< zsEzRE;Wb}-G80KCG3qmp;r3eV`Lv6Thm`JtxI3cR;UH(^W{k;LTBoum?M;Gy<*(v}l4 z_co*1?|T&aGABH8fAHg-;gNenN((Xg4vJF#gNU<{gvTpsu%G4I>x+YZ;I|gIC7-J# zQGix59}kCIenk=m1NDpQ1^g7JQKskE18M)!`cU;V*W;|HSzjYTxzH;30lF8mrB*+) zlFa4@NZ-T=8PU~@U07(^SbnMT;K}HRg||}TtrLYsg_3%SzI`zmzm@~;C&9R{*nYYT zWlJsRy$eg@vZ_pmITikMm{V01b`6C8BqqatF08R{->%fGO?$zFR3Qiz@{@}@MiGRg zCMSH>*mKcIT`B!EnOmm2s<%?q&Dfr9D9}D!MeM9mrQ)6`fhkB&BJmsO!?Y4U5fHJt z#jh^6Pv?OIVmdbFOy|wSvw3#|5bnHKQg?3+n@Pj(Ea~Ke`aHENX@5=4jF}NX_(x~*6u%58mjozerEB} zjxy^9d5{q+R98cw6AB{GFMui*Kokq~y_DOI%I*5Mpg>~I6cC13x2bkauI=$E#y7@| zdbPYbk%d25-kYR{U|Z+cR_+BpI_J#Ru1h(y2dfqpdz-_2%Q|mOEUu|sIL6z2mMX}H zQMufPifdFAd0UP!>;peV934-tsr=TM=y5fx7mle}{jD)HiPk1qyva8PX0Gouio4!W zeU{|hVAaf`*bMj(!QZSQ?w@fShzo-88C0b@etsv&EBMf0oU!_fyH8M2aj#92klZ6xE}ttXaKaOfY_Q(8R0P7Mq_3^g)^=d>9c?;(3Bcdny`d+B+jyRU8AU z26QlfQBl_!roWi`f>rfJF`SQ_X3aC*I@-H+UfFME4|rb1Tc{- z4uT$dMv9H36u&i7-Tmnk>us|?-D|MP{`9O^agEt{#U5lZxnc6l}-NV1WSA5NT>MPins=TlG8psLv0CRr9KqSgCp*4f) zs=F1j^P;3MVKsFkM?Cm;My!uRAHRxxk8X|=|G+4kT*Qyb^xC!gR0WN(lkNF8yBJ|A z%x1ezq2)qtyFQVB-3U$ViS9 zC;p9kl8aGMTwqi%#zru`BU_KXrc+bznh2)bq6}j=UaoQ!8tiH4;)`S+Xlk!9G`=pJ zxV)Hd!~kzFDIHKvmj8>Rnh)ipvaMqS%rdUrsGsn~lyODj3pW;5UrqReK`(@0&}-%< z6|tnW6PRYfhe5Hyj-r~Ntf@Nb*3MIx4m&WOA*};v<2`U7YBhuJBWv8&2@93F|jGoD3^i0LN zrO{j`0Q2~xBTa){x^ff^q_N8_Dp~QgMnzi*y`Can-znHxPhmMvl#G#li~xrcAyoAG zZ{SjkSZpN~f0T~5&-zb(Kyg z^n`xnAgG-sD8^+nogP3xx^COhk8}oxV>z3JhB`x5uz6;YN}Z72I2@LhOMiPv&%ybh zu{JMsR&rtvN3~5ls)a}XGsU&atlGWeT4+>iKbJx!Kkn#qjIs~jweJb(BQ`)Mc(jq~ zLlkR$ZbAglH}oguq_lCb99$a*E1PeO@vyW~v9xxx=F;n_FTU1mE7ES8iV{q-dqXd& zZ76lby%BP8QFxi(k~f?@x|R9HRlFm5I4AcC9k4mJ zS2!nsZhyXtuSiV@W_+0if zhW4e=M5pvv-*5_S|B1n?CC;*l`&pjV@%|1mzpgc%B4K#4NVw1S`e1rI2U)Mb`WVO1 zFIulzu~1*OUdN@@>(~D|EXUmE$zoO1vQnZ+C4dr$tK!luk@b1hi` z)WSK=nWf}XuF=Mv1gpTg{J{#v;+o`Q6H1)qV)9&c0(gfhFTgmH;Li==BqmdOtNa&un$;W{5%iueFf_C>-^sch-Us?})`V znDdTUzQcHU_`M@)SXQ6#8GML8Gw$Wjyu0|bV6|O?#sIIrZ#9^*%$!vKEZLg}5pvl|z3^Y!$$h7vt0@=o8b@&UZs(9isMiz-8&YAi*M)@-8h zKlFQx539LJ1-F{iOy2VKA9?4tdCMR7duQ2HufwNs?i1cwt$aL#Qg!BIJlF*vKkWB6 zm!ju5eKR`NTODBDLCsEnC-3++YOSYM&gDMu>1|62eBSald*?mJaBa+P@AR`CXes5} zCOh$mV{!y*8`pi4HOV_=$O@hS^>OuV*pc*1ZGN=$db)C9IfZjKt5YR($UAF`p0(+Z z`L-Uz^>EgPA1L_96GdHO2WBRkrwtsaDIq;@$p#zr(G$2Z!X*i$8 zW)$8JvbskLOtGr)<-)<<>Fu=r5nxsGi2y^>myPz_00M}4|8l?g^d}pNKJ?BwYcVkN z^KtWY$k+KPw`@ZX)480kd_^aq0W%R2+Q8=}>-aN&Eq@lR0obfozSVZ%+nEm`eCVC^ zB=0QU%@^is&_r&@8dQsm*(Ifz88RnJhYZDUO@2{P$JcRP{}gl&IkK4 zKWn3R%KFQ_vo?EAf5Ch6%@8V&h-U!F>GCC4tE{+Z*({Zr$;i|jud>pf_0CjTSg(G`x173lV6C_or1Vkwn^bl>VzsL()+AS( zoLbKa0*kTYWY%=Z`ar(Ni$U;hhcPV-bDqxMB_Sm=c zqG#IA?mY(M(X7q9{kIRjb344VHht)w`8faALxHo}c(#RkhIVE?t^yJCB%$I4v?S#( z(4*obz2%IWYba<+U7z`azU@_KcK~+1ezoyyCii8{-b={_m2A-Sr@ZCQ^Xl^yKCZ&Y zO_zK3@eKN?h1^MJwt8o^n?+<6kb3k2rKE$MwbvA@aYiXn=j#9O{y3uF!L zv}utvj%LOOEi2(S6f(1&&lgZL(WODd^#>ltUt(gG!f#9&rv zGvgDu>7Zry4(E1GhUXo0DTFqAGq@@|1hz!Mg;3MX6$L<@d5r!{E&|$&&*;%5YxV6@ zzD-`|oz4|>gKn&#?j?Ync?AC_68ONX2R%^Bj2FDqcL@F%o-8%s@&!(}%wAF~K)c)P z#^M%p0q|f06nwz9iLKu0yLoL{C9sz6cGtevd&xApd1eBY{D~z=#VTzgTj&o*u77H; zwPX2kH~&Opa;`s7hduT?ichg$Ddf&Jg1_z1{5`r{_O>m#$Wrn9%If(HB`&Su?t?Ht zXQ;TXvnZ6frY4wgM-tbRa`ief>7%-baVtG%-fCh0;|KPk5OvHviK(sfqICnH z?C%23B(0p8>`ZiyU{>!!mV6{1u*Hv4NP-Omi-gVb;hGU2)Rm=h_lBJ-x-!|4>-`j zzDIo1OWiVT8DGuwJ~n0xIf63w3WE*w0{E*4-@)XQW;rqe z-)Y(}UpIHA_|ya{*UmhB-n6ll593iayXOrdMn0FMrb`Z{_@?%Z*IO9vXT?eA^-%&D-OpSz8p zYJkId;g6gOIrgD>pX!T!7C-S3 zfKZu@P~tYd>x&ym_Cj7&pa$kY+xAdVp&4?4%Ta@h$_QBPhCFC}(D)MYV^3wB^%`U3T}Y$pmtu$l9b=V9HOdIK@I8i8_$@94^6($4S?jH$eI&%&Ou<0(`pLFkCF86qjU_j|mVT|V z#I4g#PpbENZ`S>QI`z~$rxlr0YSOpn^f_KRIWXS(Z-3?SMz7Aw_mdiLrN%o{F_puBbC?4e&6H1)I&Onak$#{58&oM3e;X%iP|5boU#c5jG$S)O4 zcB0^Lg#mmRwsw&K#GCj&#}37;jD87cDm=ATlt$u9J0tNGJGcfX{Dz~4PSKw~G3IPv z;)Yyb^}g%B8JYho##160!}FgHwY^rv-8U!r8mn@mr%kkm9&hqBDPJd-IkrZ7#_Nru zO~u!7L397uOSP8&cu#GW{{$z%j%J_zI~VeJ10Q3Yn*SbazwHgeI^T)RS0DgE)}NE1 zpF3q~X-q`dlqi_5nMpGFANz{u+sL>x?creOsp6ViMe})^7nuc+9lD#^vBGSw750cN znQg0Z3U&?r{z~1QOZ%9dMe9X3HTG%mNr#^b-|hUrnY~Lo@XXfr+-7ZEaF?ktmkUeH z-t{3mSPE*)=2iH#*}ROqgW0^SZK=KMN4(o}?^0(1CHC(P0PS6gNR7SWDM4^Huhizm z)+LDSQU7FGebyecb@kF09LQgK>{la+-80D|V6}Chix+G3X1~%d#>)1y`)Jpx<(6Bf zvj6L1a65gtd*1pe=1pCTpp1Y@2)Dp|rZ%k~n@vmiM{2iX(-O6c8_nII@Wj`7S)V}| zSo+NE(sw96v4{-B(?f|x4`s+)H2#U9@#`HL7j<`z#@S;&5mk#ip!3Zl=s;p_ZlHR{ z^-DtYH*iPS!X1WZDx!0*zD=@jy+E6n0y@V`vTm=|4^g-Op!9Zh5BeTwHCJ!sopDvo z7wFRvUcejpXmm0(e-kd$3vIQNi6M>TzdtEaRu!?FL%N~#(<7FNlSGg`NYLtipevim zThx}Xs<|xPCe8}fN$;^2+{Y!?iSrih(llPrhL#G%w9UTT9_R!>j$OVw6 zk=kuPdos1#I=HZZL}jz%qQMXlJ5GVwcIg;Y6%b*wqwd!3>%i2WY6UbXlrf61yxxh3 zyq=;tn8eO|^R;1)7`Fzye`n8l^e~C1%>K%CZ1W6FTi4f%sBUdD)O?=_$5(W>p<1Zd zq3$0Wp;^?f9X3VHmvW(si1>4tm=|Odv-C&l^Lx8b?}3lP%{zzXwEG6@mu#umad3VC zgKJ4*I$BCcO^q*zETQX^nzyXt3^v-LR3YL?Mb5G`%WD(H0?z zSV4mc$o63st5$l|imkV$x3=Y4MXYb(MG`76s>5zfG>6b-`~u$n@tF| zxBp&0hUeLtd1lVcoH=vm%y~gKXC_k%sQTs;bk26f@6_JOGqPJw_FkBHb-3-=^!|Xz zVQ$Z)XwK9s^ERdk$&J<1!}I^dtTR4SqtqzdDaJ-ME_XF5rvxC}NJ?eRbB+pt^AB1% zN=b_`2D)zFoIfjwN+R#X!?|BVj*3sEGY}}80iVY$Tq5r((mTFU_I5{IS$2C}Im3QN z1%H)fYd*hivx8&@$qp+!${#yUXeQaeve`{!H<5jzvYYvvM>eCIH%r-fw==G9cf|F` zZjX2JpxjM%OskSc;rNvY*@n+sV{Jw7a28h&HT$zZqgBz zWIE{^z+XGxDxC22x%naQdplHPc8h|d*wz!CnvLqRh3QwO2L30g%iHOEf5^wo37C5|19A1dy^}9=IKya7ok{Vio#6{r_83=o zCgm8@s~h%C4!g2dl&zwytV`RchE?{NQMO)TK?Q%6dnencLsA?=5} zbK;_qA~z@UHorMG>$G_IP<^zLRtM*Na{=)f)o!JxjMPyjbCoFCgalh%XV5a%&VG{Hk|$ zpFvJ6aSk&7opN{c z>r*dw{1*)RKrHBG$aF=n2lTJR=tR%~zzBFYF7BXFmF4|*mpD8aSyL2K8b_eV8?T6Dqmoq?@ zXkii~BP;W;VZeW(kYt{6L*(+z=}8BUuqRjrj@WL_{jl%-|99!nVdvk%P!%! z&%IZg2p5`SNbOdwo(_RMJty^Ar1kK;tnC?6GOjPrZ=7xgaE(?3m$e2G0RFySy zz`r}Li_qQ{3$1}Zev&9 z2&@W5Yz=>5L#Vy0vUYj+@UF18k*UYo!v?q(G?G^r`K8L#D|Z_^01zY+)?jM&9~8A;*mR$rg)Qcwy@A!6oR^W!q_0_Ri%C8C9wOa3u z>v3?f_M17w&eJgRY|+yqMzXk*#x)Af=maS^l@#x+sI}Q-TUR8-&sfT@nObc)za|>< zRcW(%h4WX(A}ZrBr>GLRvSm^MjWA7nXn+Xwoj38+yx1JZlu$z~Idp;YXjW(%U%UpY zxF!|12!q%4X6r*1S^tnDWR0yc$I)!WiT~uv7pKedyrXCWCXC)A>gr>I#)>*%&ZW#1QcIS(V3{_h0SCm}of39Je z&M;8Oe#@2+SqYYmPxk*8coFlulPlL#I}A@^?C+mtdbpUj{kC{4IxZp`HFvMK<8%_@ zWsBk_>vd^}YGF~RL1_(oo2lYWWjrKHW>x{Qvp2Ceuy; zEBYrdyE_is^Jt3XKNN*7nPX2KlV!=5_Qe}E$-(d*G$_hK9bAF7e9lH#OEj*r1iE2f zsQt&!F|PZtZ4QRIm#yZV70!vjF~LV&zmpL0mc7b@O?__f zq`I8ODroF!x&p1q_f9Jbtg9(qvQ>9sq7%3- zw7sEExd|K{+wT{ekS_GD@*q8gN{Vr>VF6M}DAedi-T5`X%0H10O+*1XaqJ9`*PTn_ zAun=aU1HsS08NwzC!Uwzaz1pw&^ZkM8rYHZj8m;nD=2nZ<>BopC}KP=pM628Y30`h z9?YFGha*C=D^|T>(W_{QrF3xzDwMwSc!C}#LlYNY*fw7bMryyQ^JdS~#KHe6-T zZBYk&D&0WbwqC8g2JN&p$?%CKb%|IZ+d!!~)W%DroWBQSM0?;K99a*JuLsB1*yU{5 zfV>-bXz41;?#}GfWO|WRY{D(dQbeDwdhdaDhP~cuBi{KxD$oXsP}*l zpdNfkB5#uY&Ti#NHsd?0Yg+=>olU7gh1obP^?S&lFz zf#|;qL#{NxYTG;CwO1MsVf9Pm*E8~FeOgB>G zH{$#2)`xZZ=6lr`V1b!1OjzR#5e-B=hCAbjnE%lmj;G?a7BOn^48l(#hPl*E z;aMm^>@>?H<`(TLpRx!^|&8TiSI^*xQw&2M?)Z=Gzn9x#hgw zS`M&rI#ofhWx55SsJ9CqVih#A6vPaTf>ul)XEEC7)CJvv)uH6T{EOcyeqt;0Fp+79 zUsYyj;*t9`6Ha;=zk0&K1%4?h-`|ub4hS)=L~y*52of!#9pJMvd*M96 zyw0hgU)~<`d;iUtXL$>I`!R_6RwliNhn7-&P$aU_I*HOHZe^IX2EENt+J)u`hAQIK zhV4Xi@m*zZwzP+j%umS!>M)3r#5YY3n=JX8NVOh*?!>kX+s6NK{D!Q{p!a2=^`Ip{ z5}J~FFSKdYJJUS;1pZ!Sj`ch`1lN3}4yWS!^BF8lC9R%XQ zda}gZ;+#PdgGSje{-C#k{o(}9jQlJc4AE9n(-5V{hv88}nf3oprrX*dwwqg36VIR9 zrnbY>Oerv{?GKiReiph_ADnJoA2Pg`l?O4x4!h2=(?`>CWezXGvYF;uI3W}tb}Yn@gHPcM$vM(SZuxZut;OPV z__@RUaDr=X!u(AK6(5JZBrR3&S4l%N+9qV~Cw4Y6_LHB|-meQSp6@VW)y{r0WB&68 z6=a9Jx2QSFAHk=tZfW}_$BtLub@%r4r`f}!gR4KL{i>h(_tws`!s}XgB#hX-v+Ry^ zIy(}!?}Vk{kaZ0ewvmMrjCWSP#<iN7s<;Kpv>-a3)$rs z4wlQi;cf;*!WlfQYo4|`d;Y+te>uN~%Arp)>p?wZ5hLSE^|KBmS*|jQ3_* zMF{OW?5SYf$KEv5yPE|bE2#&3tq3_M2I8^&Pw zyP=M+<%I&bbn6*d8dpbw_X&h$K9Ch=7lG~^XmeIRB-A$FIdKqhERnMAU_Sd}R(G&K zk2GvjOmU!<0$RCQF$AGkoD7J_-d(()gY zB{59q`XP<{#5FP_)kxGlU*h-waW(P+AlD_@nk5I=;q{u=Kcx-_ZqV`2+s$fO_qJ8p z<2-DowdOmt=O0S{HYLJnV=M ziFum?HK!MFUaY@h>(Z^)CTqEbyWQCVUCK3>{xm-ZEO~TL{rFn z=?VYP_*mpU?7cMd(y#62tNc#&p9K1Uv_E$@bAn#O6baQiOQhYwo!dW$Z`>kvw&I6s z<|`3(YH7hG#l^oh^k$(4xKzJJ5P2q%gU zeSB<|Dfka|Xx!(keJ8h$il+&zTcofE$(9EE-6XpRPt$fdj(O;Ba--S*6jTFOhWdse zGpWyVxWx)CpOj5flo%>ow-6IkRcF@Mx^{TBI!&=M_iOPhW)wI?vvhH!Nm@Cy-K}$t z{Fhs%Lc4WZ<^6!~x2L}uX&%q~1bKK`OFrHFlTq)`G;0@4mbrLsl_<-cEyfGs5quUW z{=9b|vq#`UK+KTgmT`YDR^##|WVm0dG{0D*(N%n?%5#aP0sj8Iw-E(pnYR%zoDxle zZL>0K1nhLYsquf7K!CgX%=lDW#tpjM%q(9$T>0-Ey!@{uRv%jboP(FYV7T&MK6v?O zB^Dl9{~-r2ziGJgzd8P({k?rScz%5F@*Ts~-*)iwpBk?I+5^g4{M32aI@KzJBMsqd zUasVDtu-YdKXRz%w0%43eG;d@8(t~h@P28>`?$~YHiVY!e-{$E;P7APK^?-?8v`{P zt^cf?p2QiP(RZ5OVgfvzT~Pg-w&TzxeO{zwCHIZf5=Hsgy|o;M`z&P48|vaCtgo#6 z>fc=17nS3{qCK*QyEKZC*+tbm+NN>kOa1*_Q1~yX1ox4h}=M?dJ!SZ)_{YD9|KU)ahQN|_Z{Q6b1 z|Lckhj9C_y&r{A-<8)k|EF+4-&;jKZcw_Lz> z)S0>%Tv0A*A}LTa2IfTmu9Ef0=#Vvcsk8PkXA~;soFWWvMt`FueucGxxujf)S5)X< zMx8HoM61L8Wb_$TI{8WDuY!1}fJY(cP##6`P!XeD7{n3W=uinM2v5s+AkZx5QNanG$GCV1@0mdk^5ArE zLOe8qM-|8VFqkc|0VO8K!#TnUJ%to{3M=#!TIlKH#bg+Y93h6%gc*7YHS`p2=qcpTQ`n)W&_mBE zVDQ`jtKWV&XR{ALj}O3;J^;Nw0MGdV>~e@{0eHy=;8h<0;{))955OKDfOmZW_WJ;! zU2OqKH@@6&e1+fmO26@2{Ki-Ljo*>c`07~VcG)6mb#!d}aB{peN1{XvN@va;_Lbr2 z%vo(;8IjJMd+aNN(wQT^&w|yNbFY16XgYJ&@`}Yav*)z+;w*e90)X(jjWL*~qH-l!G@YTe_BLttGf=^Gur>Ef4 zQ}F5O!&d|Lj1YWE6MT9KK0O7Wo`O$L!KbI-(-Zh!2wXppk@tzn?n6`5gq4=9l@@X< zEtC%{#xJ+hLT;sDp6ON^GNlu~GFxkHl*VyiixXrqBy*j@M{~hhzg?Q{shs<27Yo=(%`Jxfj|M zuc`1tFU4!dd7-{|O{EulHC{6T#kzP+6;0r{7QyJ#EoXV5H`K%)+r+!JiT$>T57k7r z-$Jh6LV<0e(6)f(EG?AS7D{akWwwQKwU8*9NEBc7phDG;v(;DH>L=Lht85P@`Sl0= z`lGh~dRu>kt$&8Cf2OT}maV^u`f=__jIbkHK(`B3f3vOsGF$&VTYrnKf1zLhB3J*C zP6k*_EYZ1Dtt?q#Un;yMEA7iTZ;7NhYR;;ls>LND59-ts8*oP9X#-0eIeesDR?e)e z{!<{agksUTPfS8+RaDo#;SC{uPEY;uJL-?e2C(Q*0sMb8-W_aWa-(^hl{1A24%PN4 z^l^~oJJPhn+|-zZyDdtcY_Rfi>q*e`1V8uE0K>3sPC&00E^vp7+U`AA7 zybA2%K!we54+ai!1gE?iEJL!pqFkd4hZS5O^Y$RI;TOrleB1*NCpC(hJ}f{XB~Iv` zpUalr&E5;YH4BT?!jrF}4r<+CN@VyR4Sb;sAJ_cSD_7v>bW;)w;lNCpSZ^`!TqD!t zb+se@5*W8@PT-qe3Yjn>aBdg&K>V~{1kT+$_@hVpi1J;5b=cmntIZzuTUXkCoXy7v z{jwwVCH=;9-+q6H{oH{XSU2(@fY$M4pn`iSu{V|UIxPOl!VvYI81-9>?sN`b$SJcy zceR7=;4;s{zvbL|8I}U$lU8>F>PbTN9a4&2B9%3MJ^G)V!r~8g@vD1D5C8H%2{5M= z*8O!N?>n|gc#J-Ntxv^~q4^qSiM(9u=X%ZNRz0Y9w1*SkE?dpj+*Zg_ciuG*j73ww z0>M%Rf~9dNb6;J_AD5exgJgf@SIUl(9VNS7*$w>7B)f_1Dx2L*b~D+RDSIA&3#0Ll zcG?-=)$t?Y5o-Q=pysb7o73H)1*`sayE`}D_(GdHkJaw6#y#vl9k&t7$m?>6J?_!V zqq{>|9M($E=DIg+^zKcS>dk!djt`QEXK6L+ZK7Q@pVj_&cgL#q+a2k*)$Z-o?v8uX zZ)^OwjvvW7rmNjs%Y*6A!D(3eMPiA@IxQ~>L#Oz{+ZeLOd!df~C_h7NyO>dA=ea9U zD`D%;;kJaAalBNfzm-(PyGfrzC|UxXLt6+Z6l!2CsyG|?ri}c@;AxW zL#cV06?&mXnLnS5CYESW(rNg|wh3@-@g*80Shn~QjS)Ose2In#rY*iiBLvqLU!nm@ ze~r8wXUBncOEgOL-i9@}0sjwP%RgFflf1ZkvlOGb|6!0i`pI6Tm-nF0*O3$ISXi1B z=zN*9Iy{-i5-SB<=pp{e604@2l%tilQW&+GBBimJD2bjcDL*nXS{hiUcz#yi!x62{ z+vZev8Vb!RgyIP$H$m|!dKYUp@K^T?X|ZD8p}z356~d~)Jd zv)Zl^57v~Hzehb37O*+RZ}%kG>4zzeGw|G-yzosW>>Bkq6-jtnhDLxCtHL*Ft3rZm z-%EL~FXxy^G02vraEYlpdJ=)!W(CcpwOsXZzcp+At=a^e_D;Tx)d@8ACJAaawTYXg z2BgqXsu9ud$qfR4=S)4JN%X^Z1>!9`lmYpW`oygYmr{++7@^6H1)Y|n=-qsd7VbXv zdH#UEPxY5gknZA&J@TrDx&PvKwcdyJIfC{N8eM*mBfaSk$DT{|7aeFkiqX-C)hX*U z*Z!E!axpn;{wnoz_%8aiy8m_ngxUm_iWzc{PHJlgzRJPy&Fvj07=iCFFMODtlf#&k zG<=6y2rPVuX+j))hcOig!1waMJNPCEzIq2=kUj*N0$Fylmmqy|Ta6of4$mk#qHZeJ z6>`;q7yPoAx1a)k-|nM6{lv`0C!wFWBy@Bp3B@y90n`)40i6T*5zX14-zXV}pwjNQ zkI#Q+eWjW8l@6)T{!XtC?F$?F#%|a@R;$EY;(mY9{|(>*xOH^L-OAYC@yf_UZ_*ot zXa9)SBA47vGWRb7IXSJzx|}X@ylowS?DhqUqk2Mz#_jhG0Az|k$v5C-vj&!{<#tl$u`zh@g>{*-8YLfxn7*f-c2&u>E%sw&OODF z@}i(S%qHlspOn9C|I!1_=c={VH9bz$ANuJa{}xlAId7FwFJahpO{}^Qn?C z?BoF%Eun(#;XfB)^XQr_xz#M(FJAudW2KK&=ONjCIa2lcK<7TefYXk4o}6dePdzNK zRH5SV0TREc_xMfx%O&jPeTjKV9Hg~=0(i6Tq5p|kuSwqUL2~zLG=phZJn|9*GFf~i zEjSyOE)**8jQgCoCBxrrVBM%_;@s?-7&D-nV+n@6`Z#d@m%O14NQEfxzDG3R*p4G1xhlWj zdnJkpm1APZH%c%PEx|~%G{;=@@3OIIDKGH$;afP zFJ8-Vbah8WOtQKokLbayb|s6)Q;s+Ci}&9>HVaNFTHUxd(0Lstyq8gd3#`MaqAokR z3Ag$<7hk+KKKqgC+3VXr#W;1TR_|FX`mD1}Tg!dag6F*x5cGt-XSui-WdFpe@lY;I z;1MEgL(2=Y&~vuO@Ykc&i`TYrS(>uKb2`ql3Gj9V)|Fy28Oi!;Nz2qw_1?v`UgINZ z`Zca^Ps%m|J!T#b8 z)%(Rg^!|NRN*M_B1+ZW2j_8<^W#063fjJx9r59VKc#Y3-O%x2%I^nk?h?#YpS*bA@ zzm=S$Pz}hf=AaY)YF5jk$qi91j-E8NW zQVhmOcD)ahfljbIiB$Ka*ah1b9_L_}PlCWOu(uqJK(vmd!c{MXI<_Sv$75~O*cX8u z0Y77qZ6+S32=6RR`t#^gjn{ykB;fXIiCWy(KiZ#4oH~w;IlYxju06o(MSg_*IP_D;r>^aXT> zLsb)7zT|Ze@Pqg-=`5*Cd?rgiOo}2^xiDm(&UbzmLRFJSxBdaXrfL$Yqeu-_Jz@(7 zmi`q5IidjmO#Y85SS=`-WHV{R3Or-t;@jJ*Qu?)!oJ3I&vy`Wqmr``=ik=qJNWW1Y zDa29_0IL_@KK})vYye6Ihdxmzb{A#T!uTYlQ+-Ml-_?JfLw28#-*Ol6{Xd5*jPekJI#-*1*B%-Msx8`p<+t>+T9j^uII<~GTT72<1{>aK0QnPwB&?Sn$@iCBG4kQ^}1z38uUM8m& z;chgG*7#kWuFAX&=u%y!AJR(s7Z9I(-lHX^78Sa9Eru8NccnRI0DQq*R>!Td7mb?J zw~ax^x+0ut$|Z@2Mi)lCf*$h~l0(VO@!IleckMXMQrLToS35-l|#P6W6PMwq`fji6UqbeS8iLnL*ugv-Xq~DGfhsA?jk**p7r3iCDngI7}t92I%Ro zT(%WWysmIgUuOT#Cb8aY3}{Ks#=v?{%sb5bF!>A&h*s2?pueI_{kD~r;>gPu#-LV_scIF{O_-^l`m^Whl)=*V` zOPTdody54?4TP$SvRW6Y0f5ZUYJJ5$zCrbeIv~#yknUp~AkA5MAbb-t;B%gDKcmkb zbVrLW5*17M1EL(!GbSq=9sT0L$@{vMJT3{Z@)q2w2ATexcaa9Quxc|k?lfIjbeA?L9H)4 znq6DQVBHY7VIr#wq=fzb=oC;sG4|qrORuovBkeXm8!DAa)*^`u%d^d~ox`rSx6B-L z_)-+*3j~h^uD49~9ik`@O-6q#B3DLU84%LQ^;(UVc;uTe0F^!G%j-Af>O6oWEmjmN>#V3O z;cG=h=6d=}2EL}&(-B~-EtS=pldPSfxn&a1u~_mo#`UQ0r}QcR9(+08;tQXBYm%k0 zchQZ%4{gr2XfugV?^%`7cmCV>Lwn#4A0?}8dymuJaA=f59?(g_GXhJW*4n_km3AMv zjVO}*U%}im=EeVpCnevp6&uInyGNY#A{jTD55ND{WMCasHCanGi(BEE0b>LS zNWuutkm{pkoc1DM`5J|bmSD?^+(t`(SS!BfcJVds_2n~iU~b}(+fb+HgxCO!L%Ot* zXIiFbF&Oq9)i#8@USQGgrOc|3v}ds@>@hMS@O=HiwjWeOQ z&+R|*Tob!1oTzCw8$RnRed0gqK~lTBBaib1$AL|HfS}#U;&MI)(I0f$vxGn9KtTDO z-4Q9_Qual^?90jG{ok`?cc#kjb7f!ej=bf{{>3l5FIoJgEBiWZ9H_B_lF}J9zdxRa zJsa|RAE>6-%lv#9=w9Y0#BTOJmjua*b(8cUNj?X2T(^#vizJk+=O0+43LpgfSs1lU zXh-myh~#QBq(E$>W7G8LHCMjlFZX(k7QVXLF1L|p^eQbkyLXCou=2|o{-bUCheYDz zFaY|RE--O8*j-YW^HE(#cV%65vgI7Pqr-h|^_2WJRw0%XHqMGZBtt(iZ-ZSS$DWc# z#=OAz7dg-?RM9aUh_c;*D8PJk-?%*YurPs_=D)Uk#P}EM2|)1dv^_^SDg4pLLS zaAk?NjV;#N8)ct>@4d?ME1+Zs*;->*&Nw(}RlfN8-Y9X&}b^(k71p792( zhVkmhyXYfX=gf$R1QmlJv3&1ozzz8D(>XS+8DP^4vZLmkz~k=lAqAF<(5`FJ%v>ZqT6{5tb?MJ2 zVi}dUVTtjOc6B6=>8NU`%Mrmj_)aktQE-ex)~I+mZf5nZxbwAy!_ zdLCxJ>GSGPS21VdVppD;6Ze)kN%VwEalS-qfi+2cY;#UDaroPaGuvaY`iIzPJhmP| zi)ekM5221F^^4ayO1~DLxY$xdV0-xMr7Tha&Kh(inCi9ev~5VwsqYf;OL&+5<|1882^@gQ=w!CHxO#eNeJ|C)Gj48&YJs z((Fd-S~$D zLd}Ytv~^PDqAyLFc_&IZ@P5{Va5CdlGLU6bj0IB7z^$$g|$>CRHwe z#<_B6N^UX13qFvUN#~a}sEIFTuM`rU@(GF0)A&t?@9uIPjtZ}$f~!GrDNNB!bMIB@ z@skr66)AJ0liIIrI3v?ZISmSx*lV^}p?TUG>xw7rF}Hr-F4{tK*-eg+SE?qrNin5m zK0Rc)gW6i3*sfgWlS#x`iN=-KcUPJ(-62tpO;|xfi5WYPupH@%Ih^01N@O{o?B^x6 zLNzvp8T`w15vH`r%D~xMbP@HTQnJkV&ttJ|k6=y*1&Vn;?_&&n%n8RIH5w6r zZfXbSrkc5_WNt!OTif&_eLe(!U7#Zr=Ib?o9fyfJC?|o(np37DTqfl9o-0nm* zj~k$P>pdZl7)@CbPJXDmZP0!xez;IaJC1*a_W1X&;)f$u1^KQ2WuIBC4YgG(Y?;V)m0l3=B3DZ}rYt-(K`780W*tF=ru)K(Q_s|KD~tw*Q^l?il?k-9AWU@+vpCokHa zxg^vvv-oV!4Rg?vD3I;ByDsPV^*Md8Gswg*${$#ddEZY6pM*+@;)pe~uyi~Vw@f1x zH<9}lA7f&)T@-|QVb)OX#z^Oj_*w0-A1&S< zj^_vytHSZg`xV%Fu@#+JZ zHD35SbR=ru&`Ul`YZX8CaKYow-~~I)t*h+9T*FuAl79=v1RG2{iQeq{`MsJ&y9Sm{ ztM8W3@kBx>jIBy`jED4&B=!p}UOOjUCSVb*oo z99tdgcw&UD=R^H_1VhL0y&*LjZ}A%Ss{aL6b=dP4-RwPH>pcv&1mtkTLBgXIAm;>+ zbvOxGkM^PJWZ=3J?P=>Gt}rYuptknFx^VfTP|iLMn@5Z2&l3vHv*QH{+Facu#VVIm zjx7^pof>!4wMmT6Jdw_3bMXpo;(5z;b&-fQfXhKMU1^9@*bHZWNBB)^OOHVSCPjAb zfb#IFZBcIGv`y+r=XOu%Yq6{G%dW;X)VRxJlV*7X?eNYC$Y9+vF$vr+1IdpO+z$5t z*gD|bZ-N>ofmzxwft6m1cf=n?{?P zH#u&Ula~1GE(-OSUJ9WEsWj6`p*n9`2?f`O6AN;5$LhNkYsm{fn7unEcv3R7cgqMl zEQ|E;4OcXc>q8wli4xn8_oL;ODD_Y#y9Leffg3-{e55kK$nB#A5wI}M3v_M;2kF|y z_FKUIS_atf=m0Ss*kdxle##cY!%X#_mUF!bBHe=O+Wa<_aLRelQ8ewH#WC*m!uVO7 zFKXQ(4vy%QJ=cSpUSvHcn{CJV{wN?KL~IXozjcK7Y;qHax$5%@=J#jzS$(k=nYz%V zn+#?DDvt0B!Vjns-0L%~m!*cb*Bl3o{?PWOhn05w7({Al>;{Ow_@6!hQ4)guD`kw0a81$JA*55|q3UeIk>3=vkE30aD zRiN`m2i*E)>ZL!Mwi_1lLLECw&7!#jh*t@Ke#Z^WT0P1^;B9Yg> z)J+;?axLaUiQQE;Wj;tv%-ukZT=o%L*iH<0Ia&v9VmdEP^?SXk8i071eyjYzV)gb@ zO`nPIx$AJRdGBT)@wxT*qD>z_6^nZV%TM2uBuM%X6`$f(@X%J>vIF@v*t-~(y`6Tj znKp2B>m>tiFQ)Ck2Uo!$Mk((Xs)sv&J7Co1qjAe62LU9r>jEk<_A*<8;OaBM3_#xf z?!X{a*!01JK>7Zoks}AzEv}NCZynH-sV<9`#NHl+mu2SF=79ydin*3h zGU4bub)YHuOrft`Y|N!8w6$uL^qS3_D~9V+foS(()RRL!knl+7-m6LmQRl#~_l~qU zbWtDu4oWF*kTQpAb&eSgD_B6EkzU5yVuoV#MSbSViw7|3cpZ2|#=++EZTg^zRG)TJ zp+vzY7=7o6xKBE9@Svrk5z|a7@6A!`gZhwiM^nk2I(+ukQPkrcM-ZBoAuO=> z+ZkSEB_)szmF~DL$ANm!Z{=S1aNM*YNhVFg22Nru!TZa5Z5gy%N<8QXx9sh)4|6*H z_;$xuJl??k#Fd)&T`oH!JCWid5%F@5jq+eV|5gc0 zx5rGC>?iTrSKEcrk@isHEZy5fJ7Xd%?2r4qBl*;Y=-A3}lEoWbQK)sJD0W|Xc_rQY z85bPwu_sYxk94tV*pq(iS}P`LMS#*{Holz1zjL7TlUyU?R!%qp`+E4O09VatcX>S< z`e7ig-NOd`$kz`=KI4qqO92@dY{2Y51`&SpbE#xc#tycm%rb1rs3*-&m-v#!kX=v< zZ}zzLrP_Y>{a3WRo0(1G(G0P4k7;>_;gBc--@kZyZaGOBBPT0nu1=u?@`C#KJoKRE z?cr~KI8MidrPkfn>$~$~-fL2KUFgLsopUAYFU{6|6txq+pn^`X)sRJT4Rzh?5^-(O zPe`GejyxvheFO?rw0-*_p_1u*(@oL-9Xb&1ipH0gk=(v|1^<53zFd#|?)I5H7*ZxP ziiyJ+xx_EQ%k+qnXyR5Ck9bo`P3`kq626hc@NRTb0$yA(e;HBB7=EK|hBR}~v??2;qObUEHho8na_1v?f!mYWl}u8`7R(PJFuqMYE+Ecr`Kpm0K& z{=KX$SC3g``O5lBEy}VseNkDy(l0E_jn3UzT9>mKpN|V|oIV6zvzqV{IjdR!%*^MX zO6+B@9(j^!eFCV?!H>c@AMv6Xap$~7P_{0ma>jDO@l=<>|Dth$NMRRtDs|1c44l5)su!g zdF!b-O)Io(N?yN_a!j)dm_546Os-r`8k^}SRVho53PORiiA>0+4YtyHyh_54b1^Gl zjSnxeo+-oCbSZG%DS*}g5`Fc1_#&?ZJ#3h>a-e^)Tm0@VUZvhe?nrem!i5kEW=P*6 z%QL$cS!p2yp4bZ8KOfrBk$aT3ruCGeeVi)^yEnLxI)4xDV{8qdNA7VwY{Wd^DRbC% znJ{$w9h@Z4ygP*@YyyCs8}fF<6ZW_FS~$_1MExz$`7r$sdk<&SC7dBlM}gL@>l#EhdHvx|0ZFK0uL@#?S7`p&I#qfiEsDInK}w7 zIrVuY=Og7JrBn0f3uNPWx;e|UP{Ji8pW2?knqdF+* z;&x;NO(^y8Z*`S3QJIrhL`9KNnum?4Lo6CTXYfF)?{UNaI-xz{9 zE9R;$r4~_+$fjv`;oF9~DosqsL&e#p3qA`8 z3*(@Guh0R<0JTd(B$jhQZ(aP*m|Hn{r8aoy1_gVAGD7NG3^GgHQ$(cgbdsNE~ z=lz3L!dR(7XJU!HTh+Eu+1bUitKu7`qMq0Q*kI^K;FhJf`&ilrlf@TZrEQpX$OY@r zy8jcwwXHiplstp#0-bABStbNHNcCJPcADk&9wn`3e(fHJFe{_gn_4c#KZAs7)m*2v zjhC=lFpLaV8TVtHAANmLs`oEI3%~{H znEzkUkyVV|s;JkvoQnJJv+$k||G7gqL|%2Wp-g~+Zo~{o-nQQ64}kiue;TNtP3>3z z8+iRW)_5cuva7i?YvaBYvAtQh6oplilU<-H!!*g)S!E33c5UN3=ma}pl&VZ=ukK{K zND_E2(0KtHHbkp%>^Jh=#;PC1A2YH{Y~8&!grl;)ID;(F`BZ=)}TYnIFt+EoL@D zYqNh1(FT>agD>+$)7i2lo30G3yH(g3O@t8D*Of$bw$$hB5Ehilkl|E&hXhNbmhd;b zu`-(T8&GH-aTWSwe8-j-SbC}|@aj*jG&lB&<+%(_*m5$TrOo6i`lp5JB5S#IEzE5# zmU?drBnW77r65uwp$OV-7=rFddp@6$*&XTB8$ty^?KmFW|6Oh~T0?hf1X)M$N$2poM%PDo#m@Y-Hp|v^;Z^S zh)(3X0$tzKv_ywYi=8#i&5!KuQ^wpx{kgGRZvT&@x6Kkvu@_ujA1_R5FIk9EgyNE0Z?}luAreYyeu+SA$0T_Q3&mZ+3AE=gv7$=h7ubthS#Wv#a0A_oK@beSTBk& z6X=vCWF6?JvS+g8wO$bM{-B#o5zsJu>t!MD-KYO7IuP-8VAe4);yvs3vk3Z|-saHp z8^SryCVMc|4E%BvKFN!wgmN}{J=QsSO8IEcg#m&WmCBN#rf-Zf4yUWPHUrW zr{(m4HeCHDe|-I3(e<`^FZX&Xzdl}cqw0Rnultd7xAXNj{uw(2Q5owjR7BLy;sZx( z1W9&_z)86qEW2m0a~v{ctTx-pJBn;KROk3ZC1d8H-55_d{=oryZ1*`DAXj_KnL}%y zK+Tq)7`FP4AD>6vNN7W(xA}BYk%V|gy<$l0tcz! z?czyTH^-l$ds@(A`LiZD)jz*GtC^{pHU(5~Gp#s5ZE8d|o|LC3}EYm?k{nD^8Q8 zvSD1bm|S8kvdx(%_ejn=B_HK6dgX*P;x_AY(Byo?%4LRfoZ=try}y`0T2CtxZ6DWQ z{{d43jg4_HfajvR#rt~HFzyINsL|a{h1QeTlj#6t^|JOnjY73oKW@xP`H*KBpkiajmEgtX5F` zRuulX&ihJYIxe-|K}~NjH!m}}Xqt(`-l+J5_&4=4NHTwCS*5r5H-jWqki_3vC9YIO z%$g8X$}8v*sG861rM6zPhf5`k;|25KK4{O{H%b*we!llp=2VmtX<`~Jp6y!vmVVOO z6#mY3Eq;p@r_tIJ{?4{7!c8_bW;$;3q$DqbiC;xq2n-#jCyYq0qczXKxaQa zu9saf0~3@NX`na`O|HV|+!vZP3TR?+aR~`U6gffYW72VPHZb^n{B-e>HK$@^d7gUYtfv)4(VEb{NkZqBWY;YLdh+p zR)nkD3g+K$UAy2_Rb$5p0sn!aIG)$a;~Kn72Bc92qhfG;_OyS>?RRR)4)IUs= zEB~0OAdIg3-cTtwh`$YViX+gVRgQmi;w1%bR|$8jbkhq0EkemBamw7eQb$V5(@^`I zyNB+NAA(ExgC2@YBn`!-RMC>KrV8mFgl8(m_(kJZ#AW5O{SyC7Pb1!b>jd%@96;i1HLz?SRLmQJ)|GcD z5e6bs|9u&s7`SeUY?n)n$WHmgKxeB4i}Q^o@rYtmz0BY1SeU+LPM!vtm57LxeSEu* zCoa4%A89`2=R`@tFMTY)^JsF8HQD5NQ}IoQw86PAj7L6?YmAmWoX_q49Gv;Qj@vIk)+N0~(px0Gtf?WXUrv%ka{l-M zqs!3}UxUrDoDD6XNSwi52GvrZo;F8OOyeut*Xn(3^H}xub4@e!)H;SF>J3z2PxEPs zNykNV-iCaYNQLpNlK4okHkXhjENbaw*Gg@h+wS<3LX#8Iu69->g)7b8dix{FkErSA zhgaJaOI*GxKBbBFuKc%h(3og?zHz$cD)U<|HtKM;^fH}vyLDt z?`ajiiK|9jA!{Lp^0kmc1*wH34-Okj6lEoT2@Cg%LeoE0gE5VzbR5A4c=+j0yL1+k z(s}sl50UOoZW6()6rq52u;I}y*=Iu_te?{q3*ysmGEr@gSf!ppG z7|7EJWDq!@D2`qvlDgAG8!%h1O+>O8YhTqKb`ju55^>;jQSbQ-`WRRTBAm-Ou=d-s zmxo88G=vv0gOAoNVeKsrYHnRpfDZ;)@UoYoZ^I@(17+Z|opX|4*!$Ol@q5vk)1HO^ z<4<q^PQSzuT<(O9-yi6_m3Q>;14~!fM6PvO`}pHl>7qS#InJX0OBXUS;sL)1 zP1`*sF(n&09AUrXkvHNIlPvz4Mow4UUhmRm%fCbgoU_OC?fI7%K<%Z)(%4rgbAA(C zKH+FzD&5EV%iKSYYgvygNCgw86pNQj-bkW0n=KSO=%*vqR~7`W8w;Tcdlxk@TN{BX z1plYqbRJ%HL)Be@Wy{rv<9je|Np*uDiF*=PCF^pIwY~{1yuk0t1*g-KQ{u5V;xS|G zXZIwFuT(eF-6+NGcV!y>qcp#Q%(^2mTXK))tgCwidIbFMe(ON^mCf`o3?08Y?NXp) zbI?}{clW%Gxj_qM7mzzi83Md@^Y-_ZPKm!IAbEr%FN1X=a_<@e#Y&W}j3 z&N{YsG^->DmbA7xF~zzSDTyK`OJDf7e29C)JRfbfQ4d~Wc6~W!v?i&LHhwc`SPgW- z%DNin`HcXoR7A$v$tu*aRezE(oQg$)>2o-}LW>A-{e6P3IR5$uAl5+g}gq@)bk!9ik4j zUo|8@Xnzk4K%T_coz3w7@$oN__b)Q|8+zXP@>4_4I|KAd(aIHVJa4o=!7$uW=W_8b zn<8vPD?ik*6fz}_fgy4Wy7|2%|YACq&KV4WgbFrejiQKo9}=S2cjJh;<#+8it_I zjuSu(CMW~zd8S2>^!hyh26{AfeSUB2-?2W=v9@MFIIun~(j0t!zEC^t`mFF<`~O~_ zpFdBtWAS%J!cN(c_3~KHKXtvl^{?snUR^OVuE;?F32YWFg! z-{{Tcc9&#fO^0^eoPEipt%d&dk!kw3koAJHB!_prWqg?-i?fImI5~oC>1W1xCGvi! zeh6`wSk+2zNr}`cE@+U!@j6R7IuEl+Ufmw;6-XdpYoxTMGC2n*bkuv3_se4NSbTE2 zk)&*0PR~#={Nt#nF%c(!Tcg~uX|202V-;}1*j)zOfRjb5#uXp$gp?RBEj&chNw@$+)y%H2o1QYPc4&i;@{9siN^1;MF$pCH2(b|DgHj4di-7O z+j;r>+ILf^lfRum+8>gVYS@296H9vNU3xs^|5gds|E(}iGKwWaIP3pb_=cn+Zk_yE z|F^=n^w;TlKu}`zfin(i$urBi2R$(wx1NjR9r`TZVO#1D>c%^4V}82YbBwqn#g?qQ z>U6ipsZ6J?O6xws%a3~&tY~iB`g!J3D( z#Har545&5Yx5kBVN#KOr)fTT&F1rgGa@%-}wrPPAZdONZf_)2|V4<)H_Kgp0kMSn% zJ`-?C6m0U+q`Gd_43*qYbubAvRF3+Mc=O9LuJmtWj-WL@|?m=qSlCD(r7e*G|t}Y%TTL9_ExRb zRp-t%H84*Hx3`+XnIUCwRS6{-Y;U!Nl)uB?YUq90>(evt%kDckjQ3tAXiJ=Yi5+nK1WV(j zOsSPBSYaxyI~vDIhG|wo^3$2bh!%PYjoj3lh9h7wJ*ejN!o394hfk zi6KPmSo8ZM)9bxKATIq^7Rc^G3@vuEpFCw^7PLLqqjJaGLaq}Lp0yr=PtXaJf3mceMs*INgG)a zB_{JlaOttM{` zd27w_%Jcc@c^cv4rRn7-SgiP@5>R7W%UG{W=?!@pgT_pxs!U;LH~aR0DfB23dIXkA_Uo+2%Vj+td3R#uC5Ir+-o&8? zxDi-7OVkj3OxGz|{SAY?-v?rkxxh8MKBHN5IyMh!PZoDW+S`0!dk!62E|ts4t1S_B zdPKjq*oRpFv+PU*P9Hq8U;1|qF3|_m`m#I4HU*a6Wxq@bJ^EMj6P)fZ2D^pZ?dH`& zZqF8hs`A2ob!yZP7-J3aRYi7yS7-F}bM(~lUqkx)s{{Lc?}7c*+T$>P$_b}~ZyBht z^dn4`CHfUAkRKplK4_{R$8_3e1zIhQ&IQ8# z#kOJj_b}tXV%N))*V=RoBk2Hymd4R8Z}oheXS+il@S~;i!I$lK_qy*^(UDc;ttM}c zdD-Q4y1aJs+R0l^-b%BHJak49v8?!=+Q=g(y@@3p7y0Hmy8^lS+lioBD{zDDgG;b0 zP)b4mdQq%A6?E%wCqDyA-TQPIjg+FE)IyGiG9N2N{q7CXHM=?=A!zrBC>==b^|-@B!!zHyMLycams;>p|U=wPCFlx6Wy(-aan3xVc|yI5$xGu|$^ z53Y8&+@Smh<UH085u62-j|gJ^OpQtip9I|IbkdK6=S zeN=|NbaqyJsWm>p|FM80IlY4H5(@?H+7fyo+a!*v^p{h(yk*!SX&L>H=z{t4x)O9a`-S6nM*brzsE41CYkUA2K5j~ihpgvt`K*rx z;Bo-4+|%xBEda-T3;=&ct6C#aH6EWZb_DWUJ~dv^jxq?!fdGVu2Vkrlfj1ri0MLUA zNn{;8#-Ij|out3C?CA>I9nDZkR}KF8FDk=4t!T66WX*VrqZH3qWsx7{0r2hXQ#774 zz#$N&$>NBgyHF_$l?VQTT1plQ_K)H~W{2V!`|a>^@lJtV9jiWWBn}|0_Y6A_fzIz* zsgIEMYFVrZX`}I_!Vheybq#d#&9!5*`WI3RD5W`D8|i$r<*1mq(+=7T=0}uekLhou z2xirRPV^_(q%Cz?*~j2okNG&T?J;XK)F-{#{{_EMe}5SfSXz>i!q|zjqrP57d0^_* zdxd>xlq${JTx~%f+A{{AbO05cZ`qS9E?VERuQ5YxE-Qu~fu+B|iE;mT`RAk;cfUMv zzO`#Kwf}Q0f>(gV{|?KTI&W*8_codlXu_tL7Kq8=mqs`Y!3J3Nzt?p_{Jog`3Ns0y zb%Nq2v}fs?*PPZ~oz)VQn7P@U`jNcOh#c{Ao+&(2u3^UEkp*XNN@~*P!Y%S@~)hnI`5hie`$pt-h!C@-jy2df(!rQV8K?ECvELQLeE1yd@oPm9e;}6@v zmKEr%;U`N;UV=OCM2yGPBf9XcKx{4dl`0khCeJ9V@0O;uWqEu zqKR9zM;+HUBF(=g97#H9G0}zj7nQNp$qaWtg57J{WqkMvSV45ASaQTFE&AG1ThcgRS znH8ym>~sF8=DUL5%`7;{T#zb=t(jl2z!khCvtZDCHB~T}E(qDvJOwighRx_yLA-SN zH5R#oM`sp{8gshenP|EoD6Sg+{C-BS>&@e-g7xWwrLN!;nFSln_fiELAn-=EP&VRw zq|7qA)U1`)KMxMhA!-%4;RYH+s^Bkd7G%~q!-P{c&PX?1;hH`zv*1kgsZ_z4>4M{2 z!B1xvoMqmL`MsW%E?DUb?td?%*G*Wm$99MIR}~B>MUOJn|YLTsMlEQ_J^rYeW0K7%-B@T^U@%M z9SHxDS+K>t3#ua(g}F%=jJksF@2B@v#>UG2VYa6VvfKJtRPPEtt%53}j78>$se+4` z^9oUfhJHCTb2HqVo?+;cy-}e+mq`rN(b#UzcU45%(@k}`rsiZ6>oiq0&*uSV=~)73NPDZ2ioLxr-M>c8gMP7<>0-UE*tU#fx0pNp zVz;D=;o(V3=|`zzSnaK1V&`IyVji2q#OkM=*IniaZ6f+%T2jRs%sWi2U+W#|T3>Rt z#xjbnHplwKR`XGpW}q*%-clPZ+g%7>W-A`RI);<~dbT8Xrbc%pxx-quaMI9Trjtg- zzL(n3gZ?$2HoBqpk!OBcVB)1d3 zr)#K?oGmr5E+6K+yl#Eg=iDt}`+H?q9u~#BZ(ZO=J@ZEe)FV6t`dTzTBIE8v zFzd1`Gf5X`{hzP8ty0J3?vUH`$~gl7R|4hj#(>A4NI z)-*hrwkgHIE zKDsaC3>%VC6X6jlJN+YbeE#wkH$Ibw8K2LW|Lyj3DDyGxD-ve9{nU@l_9q8j`{Rad zA4kuW)qe-a7s?#8eHWiIAE$*r+PKR2m+=^snZ}p@A}9*^>&u70lg3x>pS<@lNm+2D zIlFdf-{a>TfVr+o!C&UDVQEiF_qZxLaWwKnj9LxCe4vXHkI{q?|uincT&xn&M_AMeB$6jU$B zZzD+8)Iw>Wpl0|R*BC~dW6>!_-*sfnD!LMe>)H{a<>4cebvFK%ZVH0#CcXN21y)Mg zZ^&Xrx*{;`nXvgITrb_)ydzFJCMy~bsO6{(^voE40x}Ufu~Ux?meo#~rSpdpIdJHx~bT1%H+NRmI|`1!M7=XkGlw zhRE`-&(v-F;i=nrEa|ebaXqs^7vM~it11~DP2$E)8Th69#j93ZeR-O`uw3v?X>vD< z3+=q@H0ypm^ky+rf2kebfnKj>N>?*pYkZ}Gb8K?>lWUB%-twj!fpTmL6iXV0RV&!@ z_ox*B>q?Hg(fDM)O&etR=TlX;;!0Iye9VP5-p^=B&KdnVh1s(IceRFP0g zpR>$nC3H`A4C9cxH05@E4!zGj`YRdtnXjBI=rZmze_Lh+R@+>94_hL90xs#S{h!M_ zO~#``?=$Zv@1J;|IpV7ayU#Qe4{HBM&j0OwW^nph&iD_B+V2q0%VBqetQTa2aRv)- zdn7TXBw4uR+QJ#rWA&|b9@1mWl$qJ)(+QhKnJMY|0nD=%3sbuLh*RalVtZbQ(Fi;(oX^|&|>|RU{l7-=_YiG6u z;AI=kTv}jHY}lQPG@#*>8IhSY23l!TEB*8!vlaDby*1F@_eYuTHP>}-M$D6}3k1=- z?=i>yq{Q|Z2|)Og4bGB#J8QW@t|pSBZQIomZ|9tF^|hr7(1|&_0%y^ZwK@L>IY`Q~v_ zU|8;B3SH7+=3YPPFoYr3p!lk3wo*pTG(&Vu@`-8_xUN;VO&>c>3v6ox^L}RC^p>*p zI9<*-z0F8!oazv=jqmE8#Tm?-Qih{y--X&MsZptdMrl+&$EYwORg6rjN)`kasrtVe zm;w7ndQug#6);ka5W_Tg4*_9u8)7jd(0LQ(@wZULX)X5%^HR|fXtRvYWdpQH1g0=O zE=@5iQi=KISE)n>%P(1AevnFJLHLP9CZ0-UHT#K$rX`gKd+R5bnDbMKCBuz2T}(bf zC#(Ad*L{}pwioPX=UpP{yVw@aiE9%^$ug1my|LQOCP#Vw)k(UvySkx!@=V8VOwEtR zrS1O81ZXb)+c@ZaQs10p>2nUEIrg&D{`)9jQvglsL|&b%iC*CS#f7Ht$cRaAcMw9g zPo5whK)Z$L0l$fo-{hcsgsr0APwbG>&Q9}&y=B^IW^iC~iUc41AVZPh(O*h*jr57@ zjqYImNc$l@5Zs90l5v`eNIqcqLD!kLI`cFOmJ{;ucO6o#dZE!thc2N#cHJ`I_ zk9q=x#iti4SWjJI?%fC?C6pWA6^qa9g<{ux{b*rEu1(C#o>LuSSxyCOWAO`idAnlq z1wHkN`PkXF?u^B+?&4A$d!vVRyqz zcqsrP-ebG@ontPU0AbtI@j=e~AJ%zCC8mw=A{XNYXdLd+#wDf^cp>tFs*TQlZ(Mz% z;H2)z%l2m?_CkFk_vmQOv*u#XUe+6ZW(tjZ~fz53z}d*u+DM>Jks`r$L1eLL_arGkAKp-qahZ2w+LR z-%n;tE}qk|iR1SUwPEfc-HTlr>e!rvGm%Pc?7Z3C@z|Bs^(DBE`vKRS-r{Q?)5@y% zT5-5E#jPBxwPJM}S~;SN3om4+i5!FDbKIZD7hemv(~TzFiZ`qV!R&91?~(!aLOEY( zx0T&fE>UsE)umau?8O1ba(=aqT?t+n>Xt6;|AJWRrStp8cTJpJ+H!?*)9x=&C!8wB z7xAg`dl8>1w-@oL@_G@UDyJ9m$ziI`Zfg{tr2ISC`tg?K*WX~p>QnK5p{o@_nU~K0 zJpv4^0T=)@tn30u9da@@J(b?%V0`ifPw!Qkr7~7j)Z5%>?YJt+;Bi=b zJJ9)cj_)KiAcUXBYv92%z|z=T?Xgif`kYz#|CoCp_$aF@|DTWqA_SkH!KNBD)wCPL zmQ-jPI%sE-nJ^9QRIzG(VzkD8h=9!R{khLG$s}Ui?RWS4`|=|5JkR}m?!D)pd+s^so{Ro>`UFv= z75k#`1vt}K+>OhAd}DUmp^?S~=v8kS7ob;t5D$%{kCRTX1~Bv*rR=iW&MzcUL#)@m zP)kR@A!S!_6#T*$oh>9(3Mk#zAcYOF$Dxw3`r?SVu!R{o)TDC?fi(4E4R&XAN*!;<4(Gi~8wFZ%3 zV_U=pQIBEJTrzlkW4EJ?9IGp&g7`pd547ehi?3tpD`EROIHO0Sm-mS?;yR?-g#r7I zSXKthCf1I1^&{Lt$T`noSxMddiTqFds_(4N1%TU~d^lx_Np26>j{$2F7m#zEkslfs zy1hJ+pJ8p}0PXc0_H5_oXA%Z|TbI6^`8Y}G!zw!OcGG!%^b4*ySQKZlc)5X`R*Z+1 z_nx38!-?+T=tW?Y=p*`OaSW9unzXn(eMsX~zQ4It{9H!uI6L$_v)h?+`e9~#2;F*Y zSMTw5=#T=7-M~Wxa;Us|x$`|P0JGXE3%MOKD9?gTOznXEkvycdQrnWB0LZS%6c zNR}7Lg5p=T^qMTY_J>Aiw1#@gHu;~-bVGl8Z}BEmYv@JeS{hkg2*)3305Tq06M3xV(OEe) z6N@D-)%B}mc!t#;o{P;h{)pDBaN-fshRz$;@uBdw;ujBS4Q}l0BEh(9D_=OGz8uMCrRKgDe( zbD-&x@Y{i=NH`4;%=Ti_VA$O zeLQGJ15=PZ4qwWnr}DhPQ+fJ$@;JaF5|68gNv!Fs#Cj^RCa@CAI);aQZ&5)J4-yOc zlvqzC78WXTDNi1nsg&&JLE0znnmr}9L3Dvu^Cj~X6Sus{#22Ah7om^am- zr_x`^Q|XuRI-UoKTX`t4o=UuiXXYS?dGI{{OeryQ?SKmP% zSBklTH{o~REkmW40}PorpHu!cjHP$L9EGIBi8{rIEGpipdN_)-L=X4q)O5wgn@5=- zJHA#if5+)59E0p}o+;+`)Wnw#_%unDJNu_SogrF1t&3PzsJWY<)eSSBMgo>SnQA7z z$u3`Uci=>76MyZ_V?j0fOZ&}1zUAxpPrEgv_BcvtB~@$KzI}xVoeH^Cg?#06z?!(Z zhA>KM4ae_OJOwp4D@{Q+mznQ2dD?ZpQ)$Y+Mr9{%E^uSyzuGw!xCuhNiEp5`5(Py~ z;+yxV`SG?K1$}tBNwvvMqU8uTt2?qBuZr8TB>fp&*Y5Xx6b6eQuckT7n}Fh?hqNF@Ewzswt0#>L~_rBKsPYt z{J8WTL*=>CK9eTTJx-9M%X5zzZREKJPc`9;ORS6dZX?fqbCijzpKsze5VwIi#tcj0 zCyDzXl;@tsU>L7$VEM3KbZl^@)nLyqryv!hwXydEH)fw=jxaR;%ktdnxnW#Y{ffYv%|X;vw>fl~=L3eJjpB%O6W{Ub%ck6}vjf(REBVzaEe@2% zt`7WGy~p~vT9hqnPwomdJ$#Dz5p1Ex^9b74uS5#B+gw_=lC&|q`IImbVSD)!Jh~Ja z|CF$@-1Qz!6#8|S$>}rfT>P_bN!de=HHTn6BO^HXYV9X%s8kpivJG6_9C@yc>*oY!n*{mku+l;#-79qFOmB$@_8lD_?qjFVmwIBCAMYgv1 zg`2JN9npmyleVK`x~>@UaI17uW9%%me~BaR2(^Wi9T8vG%0DUNg_{XspA+l!J!h3a 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̅-Awj78(q?g!b^B52Fka=|= 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�M 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%0Av-w` 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

6k2}E} zhYHVj{$pemKdSIHF{Qi7K*VN63}aW>XuJpQaFdobzmRiv6WZwcV#`O*9#eCtlU>~T zM`Yk;M4x@QCX6lb;2l_JE5ff6I5@e66G1p}gcD8VB^B=`@_4XfKkS`E9!~UehZB87 z!i$SAkE1R4@ti5wk=g@jm-E}*|Xx*`0Mws2)mQ7$o8%~Nk8kp`nY@Kwt+_y!nJ{8r)DLECGGUkbaFK?qX)ZkV zX+J#YI9%o~m8Q^-C%vY!3A?z;*?%jkBY>E?=?oyhr9=|e{mx0Rw$xuLNj-)G5?yHX z`Wkpy13Xs(BdkrBW$Cxl((BbqW?#K3<-e?)-yo;y;~M?%sZ+6a-N~Yd)2kbU$z65c z%(oNnpqwB2w)sr?T_~p?j;;H>)Y7Xdkiu?bl@)yY^kCwMpsdn!5EPkI;$G8rZ(1IJYwE?p$xA9B?WvU%{ijOeho!H9Tc#~)| zs@{}?eZ;x;G5xW1Pv>`V3~71nMFSZ(PgU8Yo+crRhennEye4`<73@r9-rl&@^@k@S^>kT(YDl9%pfACj-&OOl4wR7 z5D*13D#9zc(SXXPVeA;M(?>6%fzA3rbKQ7;F5$~EyJh37OPA{~jC{LRkJQ^KJ?6YU zc}e!VzYC@U|2FeBV?dtN{>~RO!JcVe+1q;#nXqe`H|A}39s&hb&Hk@_G?+S)!;V(y zfFg}=m+mQ<#>AJ_FM0L46Lk>JKEWAez~U05ZA%UIgE1U9F6&k8jc=E`BIWt7q-w&i zRm9dkj_cm{C>D3c;tqV#BKS5&*_(#bsA9t_M!hAj)@o?w{EQSGC&W^Bni1z42n3D0@Aw-W8&XbSoEP0~mR z6*d_*2+#fyX?DpJ_$_ySD>kdMl58~I9H}AOnDlKGzpl~A6a6hqp1ZavsN+Om~d{ZHk^4FsatBSuEjqQ@?uD7q>T)SEoU|7^ev74 zcB*N-MEaeNP3S7nFEm7mI;h1+p|r0d6LPOu!Fc4#|6JvLY!!PabWLBf>$<-MrD#1j z_=iuYY=eKJ;L9&-$8Ks0W_^7PHJcZ|sQYda)vdR&d=}A~LlcqR1N3DxaaiFH+AfrU z0n&m}=U1PZG7Az48NS0+#w97d}E9`hw-4fl?NtJ3{pd84EacL zM>S-`)hx4^HMGd`ux52CLnhTiSdo<%BdkzbKZS=fszg=7wH@X^o=k88d;`MFFEGw` zOok)p0<(0v?EvxApx3VaYud8KT7Fz?P2+T(GBrn;F8Z;9m*)NM%G(FZEZ0R3RPhX7 zy}?f44j>Z>e`VqL*iC0jS27+Ojo7l6=tE9gTQk6JmUsA}WilCMIR;zRN8evYUBl0j zlsiE&cYgTTRDXFJ(s&+^qw*^127@$SzI}Y`g6+YXAR(BhmVxO-Jv`nldM16zBaN3o zF&=xlOL~GSBO5P&cDyjo<(t5|`~ElubJ7vTSAPTy7;hXU0i^t0w=@vawXL&u?m5I&o5s80x~Y_>G&-6uAV^A`HP$UR_40( (Npp5_^hL%QP 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
N5|TbFy8l$ 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%0De=zS#cVv|P+TBc!G0sN8u$Z7vF$ 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 literal 0 HcmV?d00001 diff --git a/inc/CDynamicMeshBuffer.h b/inc/CDynamicMeshBuffer.h new file mode 100644 index 0000000..016af9c --- /dev/null +++ b/inc/CDynamicMeshBuffer.h @@ -0,0 +1,116 @@ +// Copyright (C) 2008-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __C_DYNAMIC_MESHBUFFER_H_INCLUDED__ +#define __C_DYNAMIC_MESHBUFFER_H_INCLUDED__ + +#include "IDynamicMeshBuffer.h" + +#include "CVertexBuffer.h" +#include "CIndexBuffer.h" + +namespace irr +{ +namespace scene +{ + + class CDynamicMeshBuffer: public IDynamicMeshBuffer + { + public: + //! constructor + CDynamicMeshBuffer(video::E_VERTEX_TYPE vertexType, video::E_INDEX_TYPE indexType) + { + VertexBuffer=new CVertexBuffer(vertexType); + IndexBuffer=new CIndexBuffer(indexType); + } + + //! destructor + virtual ~CDynamicMeshBuffer() + { + if (VertexBuffer) + VertexBuffer->drop(); + if (IndexBuffer) + IndexBuffer->drop(); + } + + virtual IVertexBuffer& getVertexBuffer() const + { + return *VertexBuffer; + } + + virtual IIndexBuffer& getIndexBuffer() const + { + return *IndexBuffer; + } + + virtual void setVertexBuffer(IVertexBuffer *newVertexBuffer) + { + if (newVertexBuffer) + newVertexBuffer->grab(); + if (VertexBuffer) + VertexBuffer->drop(); + + VertexBuffer=newVertexBuffer; + } + + virtual void setIndexBuffer(IIndexBuffer *newIndexBuffer) + { + if (newIndexBuffer) + newIndexBuffer->grab(); + if (IndexBuffer) + IndexBuffer->drop(); + + IndexBuffer=newIndexBuffer; + } + + //! Get Material of this buffer. + virtual const video::SMaterial& getMaterial() const + { + return Material; + } + + //! Get Material of this buffer. + virtual video::SMaterial& getMaterial() + { + return Material; + } + + //! Get bounding box + virtual const core::aabbox3d& getBoundingBox() const + { + return BoundingBox; + } + + //! Set bounding box + virtual void setBoundingBox( const core::aabbox3df& box) + { + BoundingBox = box; + } + + //! Recalculate bounding box + virtual void recalculateBoundingBox() + { + if (!getVertexBuffer().size()) + BoundingBox.reset(0,0,0); + else + { + BoundingBox.reset(getVertexBuffer()[0].Pos); + for (u32 i=1; i BoundingBox; + private: + IVertexBuffer *VertexBuffer; + IIndexBuffer *IndexBuffer; + }; + + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/CIndexBuffer.h b/inc/CIndexBuffer.h new file mode 100644 index 0000000..4ecadb7 --- /dev/null +++ b/inc/CIndexBuffer.h @@ -0,0 +1,226 @@ +// Copyright (C) 2008-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __C_INDEX_BUFFER_H_INCLUDED__ +#define __C_INDEX_BUFFER_H_INCLUDED__ + +#include "IIndexBuffer.h" + +namespace irr +{ +namespace scene +{ + + class CIndexBuffer : public IIndexBuffer + { + + class IIndexList + { + public: + virtual ~IIndexList(){}; + + virtual u32 stride() const =0; + virtual u32 size() const =0; + virtual void push_back(const u32 &element) =0; + virtual u32 operator [](u32 index) const =0; + virtual u32 getLast() =0; + virtual void setValue(u32 index, u32 value) =0; + virtual void set_used(u32 usedNow) =0; + virtual void reallocate(u32 new_size) =0; + virtual u32 allocated_size() const =0; + virtual void* pointer() =0; + virtual video::E_INDEX_TYPE getType() const =0; + }; + + template + class CSpecificIndexList : public IIndexList + { + public: + core::array Indices; + + virtual u32 stride() const {return sizeof(T);} + + virtual u32 size() const {return Indices.size();} + + virtual void push_back(const u32 &element) + { + // push const ref due to compiler problem with gcc 4.6, big endian + Indices.push_back((const T&)element); + } + + virtual u32 operator [](u32 index) const + { + return (u32)(Indices[index]); + } + + virtual u32 getLast() {return (u32)Indices.getLast();} + + virtual void setValue(u32 index, u32 value) + { + Indices[index]=(T)value; + } + + virtual void set_used(u32 usedNow) + { + Indices.set_used(usedNow); + } + + virtual void reallocate(u32 new_size) + { + Indices.reallocate(new_size); + } + + virtual u32 allocated_size() const + { + return Indices.allocated_size(); + } + + virtual void* pointer() {return Indices.pointer();} + + virtual video::E_INDEX_TYPE getType() const + { + if (sizeof(T)==sizeof(u16)) + return video::EIT_16BIT; + else + return video::EIT_32BIT; + } + }; + + public: + IIndexList *Indices; + + CIndexBuffer(video::E_INDEX_TYPE IndexType) :Indices(0), MappingHint(EHM_NEVER), ChangedID(1) + { + setType(IndexType); + } + + CIndexBuffer(const IIndexBuffer &IndexBufferCopy) :Indices(0), MappingHint(EHM_NEVER), ChangedID(1) + { + setType(IndexBufferCopy.getType()); + reallocate(IndexBufferCopy.size()); + + for (u32 n=0;n; + break; + } + case video::EIT_32BIT: + { + NewIndices=new CSpecificIndexList; + break; + } + } + + if (Indices) + { + NewIndices->reallocate( Indices->size() ); + + for(u32 n=0;nsize();++n) + NewIndices->push_back((*Indices)[n]); + + delete Indices; + } + + Indices=NewIndices; + } + + virtual void* getData() {return Indices->pointer();} + + virtual video::E_INDEX_TYPE getType() const {return Indices->getType();} + + virtual u32 stride() const {return Indices->stride();} + + virtual u32 size() const + { + return Indices->size(); + } + + virtual void push_back(const u32 &element) + { + Indices->push_back(element); + } + + virtual u32 operator [](u32 index) const + { + return (*Indices)[index]; + } + + virtual u32 getLast() + { + return Indices->getLast(); + } + + virtual void setValue(u32 index, u32 value) + { + Indices->setValue(index, value); + } + + virtual void set_used(u32 usedNow) + { + Indices->set_used(usedNow); + } + + virtual void reallocate(u32 new_size) + { + Indices->reallocate(new_size); + } + + virtual u32 allocated_size() const + { + return Indices->allocated_size(); + } + + virtual void* pointer() + { + return Indices->pointer(); + } + + //! get the current hardware mapping hint + virtual E_HARDWARE_MAPPING getHardwareMappingHint() const + { + return MappingHint; + } + + //! set the hardware mapping hint, for driver + virtual void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint ) + { + MappingHint=NewMappingHint; + } + + //! flags the mesh as changed, reloads hardware buffers + virtual void setDirty() + { + ++ChangedID; + } + + //! Get the currently used ID for identification of changes. + /** This shouldn't be used for anything outside the VideoDriver. */ + virtual u32 getChangedID() const {return ChangedID;} + + E_HARDWARE_MAPPING MappingHint; + u32 ChangedID; + }; + + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/CMeshBuffer.h b/inc/CMeshBuffer.h new file mode 100644 index 0000000..24a95e2 --- /dev/null +++ b/inc/CMeshBuffer.h @@ -0,0 +1,301 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __T_MESH_BUFFER_H_INCLUDED__ +#define __T_MESH_BUFFER_H_INCLUDED__ + +#include "irrArray.h" +#include "IMeshBuffer.h" + +namespace irr +{ +namespace scene +{ + //! Template implementation of the IMeshBuffer interface + template + class CMeshBuffer : public IMeshBuffer + { + public: + //! Default constructor for empty meshbuffer + CMeshBuffer():ChangedID_Vertex(1),ChangedID_Index(1),MappingHint_Vertex(EHM_NEVER), MappingHint_Index(EHM_NEVER) + { + #ifdef _DEBUG + setDebugName("SMeshBuffer"); + #endif + } + + + //! Get material of this meshbuffer + /** \return Material of this buffer */ + virtual const video::SMaterial& getMaterial() const + { + return Material; + } + + + //! Get material of this meshbuffer + /** \return Material of this buffer */ + virtual video::SMaterial& getMaterial() + { + return Material; + } + + + //! Get pointer to vertices + /** \return Pointer to vertices. */ + virtual const void* getVertices() const + { + return Vertices.const_pointer(); + } + + + //! Get pointer to vertices + /** \return Pointer to vertices. */ + virtual void* getVertices() + { + return Vertices.pointer(); + } + + + //! Get number of vertices + /** \return Number of vertices. */ + virtual u32 getVertexCount() const + { + return Vertices.size(); + } + + //! Get type of index data which is stored in this meshbuffer. + /** \return Index type of this buffer. */ + virtual video::E_INDEX_TYPE getIndexType() const + { + return video::EIT_16BIT; + } + + //! Get pointer to indices + /** \return Pointer to indices. */ + virtual const u16* getIndices() const + { + return Indices.const_pointer(); + } + + + //! Get pointer to indices + /** \return Pointer to indices. */ + virtual u16* getIndices() + { + return Indices.pointer(); + } + + + //! Get number of indices + /** \return Number of indices. */ + virtual u32 getIndexCount() const + { + return Indices.size(); + } + + + //! Get the axis aligned bounding box + /** \return Axis aligned bounding box of this buffer. */ + virtual const core::aabbox3d& getBoundingBox() const + { + return BoundingBox; + } + + + //! Set the axis aligned bounding box + /** \param box New axis aligned bounding box for this buffer. */ + //! set user axis aligned bounding box + virtual void setBoundingBox(const core::aabbox3df& box) + { + BoundingBox = box; + } + + + //! Recalculate the bounding box. + /** should be called if the mesh changed. */ + virtual void recalculateBoundingBox() + { + if (Vertices.empty()) + BoundingBox.reset(0,0,0); + else + { + BoundingBox.reset(Vertices[0].Pos); + for (u32 i=1; i(vertices)[i]); + BoundingBox.addInternalPoint(reinterpret_cast(vertices)[i].Pos); + } + + Indices.reallocate(getIndexCount()+numIndices); + for (i=0; igetVertexCount()); + for (i=0; igetVertexCount(); ++i) + { + Vertices.push_back(reinterpret_cast(other->getVertices())[i]); + } + + Indices.reallocate(getIndexCount()+other->getIndexCount()); + for (i=0; igetIndexCount(); ++i) + { + Indices.push_back(other->getIndices()[i]+vertexCount); + } + BoundingBox.addInternalBox(other->getBoundingBox()); + */ + } + + + //! get the current hardware mapping hint + virtual E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const + { + return MappingHint_Vertex; + } + + //! get the current hardware mapping hint + virtual E_HARDWARE_MAPPING getHardwareMappingHint_Index() const + { + return MappingHint_Index; + } + + //! set the hardware mapping hint, for driver + virtual void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint, E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX ) + { + if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_VERTEX) + MappingHint_Vertex=NewMappingHint; + if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_INDEX) + MappingHint_Index=NewMappingHint; + } + + + //! flags the mesh as changed, reloads hardware buffers + virtual void setDirty(E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX) + { + if (Buffer==EBT_VERTEX_AND_INDEX ||Buffer==EBT_VERTEX) + ++ChangedID_Vertex; + if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_INDEX) + ++ChangedID_Index; + } + + //! Get the currently used ID for identification of changes. + /** This shouldn't be used for anything outside the VideoDriver. */ + virtual u32 getChangedID_Vertex() const {return ChangedID_Vertex;} + + //! Get the currently used ID for identification of changes. + /** This shouldn't be used for anything outside the VideoDriver. */ + virtual u32 getChangedID_Index() const {return ChangedID_Index;} + + u32 ChangedID_Vertex; + u32 ChangedID_Index; + + //! hardware mapping hint + E_HARDWARE_MAPPING MappingHint_Vertex; + E_HARDWARE_MAPPING MappingHint_Index; + + //! Material for this meshbuffer. + video::SMaterial Material; + //! Vertices of this buffer + core::array Vertices; + //! Indices into the vertices of this buffer. + core::array Indices; + //! Bounding box of this meshbuffer. + core::aabbox3d BoundingBox; + }; + + //! Standard meshbuffer + typedef CMeshBuffer SMeshBuffer; + //! Meshbuffer with two texture coords per vertex, e.g. for lightmaps + typedef CMeshBuffer SMeshBufferLightMap; + //! Meshbuffer with vertices having tangents stored, e.g. for normal mapping + typedef CMeshBuffer SMeshBufferTangents; +} // end namespace scene +} // end namespace irr + +#endif + + diff --git a/inc/CVertexBuffer.h b/inc/CVertexBuffer.h new file mode 100644 index 0000000..975b0e7 --- /dev/null +++ b/inc/CVertexBuffer.h @@ -0,0 +1,210 @@ +// Copyright (C) 2008-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __C_VERTEX_BUFFER_H_INCLUDED__ +#define __C_VERTEX_BUFFER_H_INCLUDED__ + +#include "IVertexBuffer.h" + + +namespace irr +{ +namespace scene +{ + + class CVertexBuffer : public IVertexBuffer + { + class IVertexList + { + public: + virtual ~IVertexList(){}; + + virtual u32 stride() const =0; + + virtual u32 size() const =0; + + virtual void push_back (const video::S3DVertex &element) =0; + virtual video::S3DVertex& operator [](const u32 index) const =0; + virtual video::S3DVertex& getLast() =0; + virtual void set_used(u32 usedNow) =0; + virtual void reallocate(u32 new_size) =0; + virtual u32 allocated_size() const =0; + virtual video::S3DVertex* pointer() =0; + virtual video::E_VERTEX_TYPE getType() const =0; + }; + + template + class CSpecificVertexList : public IVertexList + { + public: + core::array Vertices; + + virtual u32 stride() const {return sizeof(T);} + + virtual u32 size() const {return Vertices.size();} + + virtual void push_back (const video::S3DVertex &element) + {Vertices.push_back((T&)element);} + + virtual video::S3DVertex& operator [](const u32 index) const + {return (video::S3DVertex&)Vertices[index];} + + virtual video::S3DVertex& getLast() + {return (video::S3DVertex&)Vertices.getLast();} + + virtual void set_used(u32 usedNow) + {Vertices.set_used(usedNow);} + + virtual void reallocate(u32 new_size) + {Vertices.reallocate(new_size);} + + virtual u32 allocated_size() const + { + return Vertices.allocated_size(); + } + + virtual video::S3DVertex* pointer() {return Vertices.pointer();} + + virtual video::E_VERTEX_TYPE getType() const {return T().getType();} + }; + + public: + IVertexList *Vertices; + + CVertexBuffer(video::E_VERTEX_TYPE vertexType) : Vertices(0), + MappingHint(EHM_NEVER), ChangedID(1) + { + setType(vertexType); + } + + CVertexBuffer(const IVertexBuffer &VertexBufferCopy) : + Vertices(0), MappingHint(EHM_NEVER), + ChangedID(1) + { + setType(VertexBufferCopy.getType()); + reallocate(VertexBufferCopy.size()); + + for (u32 n=0;n; + break; + } + case video::EVT_2TCOORDS: + { + NewVertices=new CSpecificVertexList; + break; + } + case video::EVT_TANGENTS: + { + NewVertices=new CSpecificVertexList; + break; + } + } + if (Vertices) + { + NewVertices->reallocate( Vertices->size() ); + + for(u32 n=0;nsize();++n) + NewVertices->push_back((*Vertices)[n]); + + delete Vertices; + } + + Vertices=NewVertices; + } + + virtual void* getData() {return Vertices->pointer();} + + virtual video::E_VERTEX_TYPE getType() const {return Vertices->getType();} + + virtual u32 stride() const {return Vertices->stride();} + + virtual u32 size() const + { + return Vertices->size(); + } + + virtual void push_back (const video::S3DVertex &element) + { + Vertices->push_back(element); + } + + virtual video::S3DVertex& operator [](const u32 index) const + { + return (*Vertices)[index]; + } + + virtual video::S3DVertex& getLast() + { + return Vertices->getLast(); + } + + virtual void set_used(u32 usedNow) + { + Vertices->set_used(usedNow); + } + + virtual void reallocate(u32 new_size) + { + Vertices->reallocate(new_size); + } + + virtual u32 allocated_size() const + { + return Vertices->allocated_size(); + } + + virtual video::S3DVertex* pointer() + { + return Vertices->pointer(); + } + + //! get the current hardware mapping hint + virtual E_HARDWARE_MAPPING getHardwareMappingHint() const + { + return MappingHint; + } + + //! set the hardware mapping hint, for driver + virtual void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint ) + { + MappingHint=NewMappingHint; + } + + //! flags the mesh as changed, reloads hardware buffers + virtual void setDirty() + { + ++ChangedID; + } + + //! Get the currently used ID for identification of changes. + /** This shouldn't be used for anything outside the VideoDriver. */ + virtual u32 getChangedID() const {return ChangedID;} + + E_HARDWARE_MAPPING MappingHint; + u32 ChangedID; + }; + + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/EAttributes.h b/inc/EAttributes.h new file mode 100644 index 0000000..121b6b3 --- /dev/null +++ b/inc/EAttributes.h @@ -0,0 +1,101 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __E_ATTRIBUTES_H_INCLUDED__ +#define __E_ATTRIBUTES_H_INCLUDED__ + +namespace irr +{ +namespace io +{ + +//! Types of attributes available for IAttributes +enum E_ATTRIBUTE_TYPE +{ + // integer attribute + EAT_INT = 0, + + // float attribute + EAT_FLOAT, + + // string attribute + EAT_STRING, + + // boolean attribute + EAT_BOOL, + + // enumeration attribute + EAT_ENUM, + + // color attribute + EAT_COLOR, + + // floating point color attribute + EAT_COLORF, + + // 3d vector attribute + EAT_VECTOR3D, + + // 2d position attribute + EAT_POSITION2D, + + // vector 2d attribute + EAT_VECTOR2D, + + // rectangle attribute + EAT_RECT, + + // matrix attribute + EAT_MATRIX, + + // quaternion attribute + EAT_QUATERNION, + + // 3d bounding box + EAT_BBOX, + + // plane + EAT_PLANE, + + // 3d triangle + EAT_TRIANGLE3D, + + // line 2d + EAT_LINE2D, + + // line 3d + EAT_LINE3D, + + // array of stringws attribute + EAT_STRINGWARRAY, + + // array of float + EAT_FLOATARRAY, + + // array of int + EAT_INTARRAY, + + // binary data attribute + EAT_BINARY, + + // texture reference attribute + EAT_TEXTURE, + + // user pointer void* + EAT_USER_POINTER, + + // dimension attribute + EAT_DIMENSION2D, + + // known attribute type count + EAT_COUNT, + + // unknown attribute + EAT_UNKNOWN +}; + +} // end namespace io +} // end namespace irr + +#endif diff --git a/inc/ECullingTypes.h b/inc/ECullingTypes.h new file mode 100644 index 0000000..7178c05 --- /dev/null +++ b/inc/ECullingTypes.h @@ -0,0 +1,41 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __E_CULLING_TYPES_H_INCLUDED__ +#define __E_CULLING_TYPES_H_INCLUDED__ + +#include "irrTypes.h" + +namespace irr +{ +namespace scene +{ + + //! An enumeration for all types of automatic culling for built-in scene nodes + enum E_CULLING_TYPE + { + EAC_OFF = 0, + EAC_BOX = 1, + EAC_FRUSTUM_BOX = 2, + EAC_FRUSTUM_SPHERE = 4, + EAC_OCC_QUERY = 8 + }; + + //! Names for culling type + const c8* const AutomaticCullingNames[] = + { + "false", + "box", // camera box against node box + "frustum_box", // camera frustum against node box + "frustum_sphere", // camera frustum against node sphere + "occ_query", // occlusion query + 0 + }; + +} // end namespace scene +} // end namespace irr + + +#endif // __E_CULLING_TYPES_H_INCLUDED__ + diff --git a/inc/EDebugSceneTypes.h b/inc/EDebugSceneTypes.h new file mode 100644 index 0000000..64ebcaa --- /dev/null +++ b/inc/EDebugSceneTypes.h @@ -0,0 +1,50 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __E_DEBUG_SCENE_TYPES_H_INCLUDED__ +#define __E_DEBUG_SCENE_TYPES_H_INCLUDED__ + +namespace irr +{ +namespace scene +{ + + //! An enumeration for all types of debug data for built-in scene nodes (flags) + enum E_DEBUG_SCENE_TYPE + { + //! No Debug Data ( Default ) + EDS_OFF = 0, + + //! Show Bounding Boxes of SceneNode + EDS_BBOX = 1, + + //! Show Vertex Normals + EDS_NORMALS = 2, + + //! Shows Skeleton/Tags + EDS_SKELETON = 4, + + //! Overlays Mesh Wireframe + EDS_MESH_WIRE_OVERLAY = 8, + + //! Temporary use transparency Material Type + EDS_HALF_TRANSPARENCY = 16, + + //! Show Bounding Boxes of all MeshBuffers + EDS_BBOX_BUFFERS = 32, + + //! EDS_BBOX | EDS_BBOX_BUFFERS + EDS_BBOX_ALL = EDS_BBOX | EDS_BBOX_BUFFERS, + + //! Show all debug infos + EDS_FULL = 0xffffffff + }; + + +} // end namespace scene +} // end namespace irr + + +#endif // __E_DEBUG_SCENE_TYPES_H_INCLUDED__ + diff --git a/inc/EDeviceTypes.h b/inc/EDeviceTypes.h new file mode 100644 index 0000000..d7e9627 --- /dev/null +++ b/inc/EDeviceTypes.h @@ -0,0 +1,60 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __E_DEVICE_TYPES_H_INCLUDED__ +#define __E_DEVICE_TYPES_H_INCLUDED__ + +namespace irr +{ + + //! An enum for the different device types supported by the Irrlicht Engine. + enum E_DEVICE_TYPE + { + + //! A device native to Microsoft Windows + /** This device uses the Win32 API and works in all versions of Windows. */ + EIDT_WIN32, + + //! A device native to Windows CE devices + /** This device works on Windows Mobile, Pocket PC and Microsoft SmartPhone devices */ + EIDT_WINCE, + + //! A device native to Unix style operating systems. + /** This device uses the X11 windowing system and works in Linux, Solaris, FreeBSD, OSX and + other operating systems which support X11. */ + EIDT_X11, + + //! A device native to Mac OSX + /** This device uses Apple's Cocoa API and works in Mac OSX 10.2 and above. */ + EIDT_OSX, + + //! A device which uses Simple DirectMedia Layer + /** The SDL device works under all platforms supported by SDL but first must be compiled + in by defining the IRR_USE_SDL_DEVICE macro in IrrCompileConfig.h */ + EIDT_SDL, + + //! A device for raw framebuffer access + /** Best used with embedded devices and mobile systems. + Does not need X11 or other graphical subsystems. + May support hw-acceleration via OpenGL-ES for FBDirect */ + EIDT_FRAMEBUFFER, + + //! A simple text only device supported by all platforms. + /** This device allows applications to run from the command line without opening a window. + It can render the output of the software drivers to the console as ASCII. It only supports + mouse and keyboard in Windows operating systems. */ + EIDT_CONSOLE, + + //! This selection allows Irrlicht to choose the best device from the ones available. + /** If this selection is chosen then Irrlicht will try to use the IrrlichtDevice native + to your operating system. If this is unavailable then the X11, SDL and then console device + will be tried. This ensures that Irrlicht will run even if your platform is unsupported, + although it may not be able to render anything. */ + EIDT_BEST + }; + +} // end namespace irr + +#endif // __E_DEVICE_TYPES_H_INCLUDED__ + diff --git a/inc/EDriverFeatures.h b/inc/EDriverFeatures.h new file mode 100644 index 0000000..931314e --- /dev/null +++ b/inc/EDriverFeatures.h @@ -0,0 +1,133 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __E_DRIVER_FEATURES_H_INCLUDED__ +#define __E_DRIVER_FEATURES_H_INCLUDED__ + +namespace irr +{ +namespace video +{ + + //! enumeration for querying features of the video driver. + enum E_VIDEO_DRIVER_FEATURE + { + //! Is driver able to render to a surface? + EVDF_RENDER_TO_TARGET = 0, + + //! Is hardeware transform and lighting supported? + EVDF_HARDWARE_TL, + + //! Are multiple textures per material possible? + EVDF_MULTITEXTURE, + + //! Is driver able to render with a bilinear filter applied? + EVDF_BILINEAR_FILTER, + + //! Can the driver handle mip maps? + EVDF_MIP_MAP, + + //! Can the driver update mip maps automatically? + EVDF_MIP_MAP_AUTO_UPDATE, + + //! Are stencilbuffers switched on and does the device support stencil buffers? + EVDF_STENCIL_BUFFER, + + //! Is Vertex Shader 1.1 supported? + EVDF_VERTEX_SHADER_1_1, + + //! Is Vertex Shader 2.0 supported? + EVDF_VERTEX_SHADER_2_0, + + //! Is Vertex Shader 3.0 supported? + EVDF_VERTEX_SHADER_3_0, + + //! Is Pixel Shader 1.1 supported? + EVDF_PIXEL_SHADER_1_1, + + //! Is Pixel Shader 1.2 supported? + EVDF_PIXEL_SHADER_1_2, + + //! Is Pixel Shader 1.3 supported? + EVDF_PIXEL_SHADER_1_3, + + //! Is Pixel Shader 1.4 supported? + EVDF_PIXEL_SHADER_1_4, + + //! Is Pixel Shader 2.0 supported? + EVDF_PIXEL_SHADER_2_0, + + //! Is Pixel Shader 3.0 supported? + EVDF_PIXEL_SHADER_3_0, + + //! Are ARB vertex programs v1.0 supported? + EVDF_ARB_VERTEX_PROGRAM_1, + + //! Are ARB fragment programs v1.0 supported? + EVDF_ARB_FRAGMENT_PROGRAM_1, + + //! Is GLSL supported? + EVDF_ARB_GLSL, + + //! Is HLSL supported? + EVDF_HLSL, + + //! Are non-square textures supported? + EVDF_TEXTURE_NSQUARE, + + //! Are non-power-of-two textures supported? + EVDF_TEXTURE_NPOT, + + //! Are framebuffer objects supported? + EVDF_FRAMEBUFFER_OBJECT, + + //! Are vertex buffer objects supported? + EVDF_VERTEX_BUFFER_OBJECT, + + //! Supports Alpha To Coverage + EVDF_ALPHA_TO_COVERAGE, + + //! Supports Color masks (disabling color planes in output) + EVDF_COLOR_MASK, + + //! Supports multiple render targets at once + EVDF_MULTIPLE_RENDER_TARGETS, + + //! Supports separate blend settings for multiple render targets + EVDF_MRT_BLEND, + + //! Supports separate color masks for multiple render targets + EVDF_MRT_COLOR_MASK, + + //! Supports separate blend functions for multiple render targets + EVDF_MRT_BLEND_FUNC, + + //! Supports geometry shaders + EVDF_GEOMETRY_SHADER, + + //! Supports occlusion queries + EVDF_OCCLUSION_QUERY, + + //! Supports polygon offset/depth bias for avoiding z-fighting + EVDF_POLYGON_OFFSET, + + //! Support for different blend functions. Without, only ADD is available + EVDF_BLEND_OPERATIONS, + + //! Support for texture coord transformation via texture matrix + EVDF_TEXTURE_MATRIX, + + //! Support for NVidia's CG shader language + EVDF_CG, + + //! Only used for counting the elements of this enum + EVDF_COUNT + }; + +} // end namespace video +} // end namespace irr + + +#endif + diff --git a/inc/EDriverTypes.h b/inc/EDriverTypes.h new file mode 100644 index 0000000..609e261 --- /dev/null +++ b/inc/EDriverTypes.h @@ -0,0 +1,64 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __E_DRIVER_TYPES_H_INCLUDED__ +#define __E_DRIVER_TYPES_H_INCLUDED__ + +namespace irr +{ +namespace video +{ + + //! An enum for all types of drivers the Irrlicht Engine supports. + enum E_DRIVER_TYPE + { + //! Null driver, useful for applications to run the engine without visualisation. + /** The null device is able to load textures, but does not + render and display any graphics. */ + EDT_NULL, + + //! The Irrlicht Engine Software renderer. + /** Runs on all platforms, with every hardware. It should only + be used for 2d graphics, but it can also perform some primitive + 3d functions. These 3d drawing functions are quite fast, but + very inaccurate, and don't even support clipping in 3D mode. */ + EDT_SOFTWARE, + + //! The Burning's Software Renderer, an alternative software renderer + /** Basically it can be described as the Irrlicht Software + renderer on steroids. It rasterizes 3D geometry perfectly: It + is able to perform correct 3d clipping, perspective correct + texture mapping, perspective correct color mapping, and renders + sub pixel correct, sub texel correct primitives. In addition, + it does bilinear texel filtering and supports more materials + than the EDT_SOFTWARE driver. This renderer has been written + entirely by Thomas Alten, thanks a lot for this huge + contribution. */ + EDT_BURNINGSVIDEO, + + //! Direct3D8 device, only available on Win32 platforms. + /** Performs hardware accelerated rendering of 3D and 2D + primitives. */ + EDT_DIRECT3D8, + + //! Direct3D 9 device, only available on Win32 platforms. + /** Performs hardware accelerated rendering of 3D and 2D + primitives. */ + EDT_DIRECT3D9, + + //! OpenGL device, available on most platforms. + /** Performs hardware accelerated rendering of 3D and 2D + primitives. */ + EDT_OPENGL, + + //! No driver, just for counting the elements + EDT_COUNT + }; + +} // end namespace video +} // end namespace irr + + +#endif + diff --git a/inc/EGUIAlignment.h b/inc/EGUIAlignment.h new file mode 100644 index 0000000..d4caeea --- /dev/null +++ b/inc/EGUIAlignment.h @@ -0,0 +1,38 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __E_GUI_ALIGNMENT_H_INCLUDED__ +#define __E_GUI_ALIGNMENT_H_INCLUDED__ + +namespace irr +{ +namespace gui +{ +enum EGUI_ALIGNMENT +{ + //! Aligned to parent's top or left side (default) + EGUIA_UPPERLEFT=0, + //! Aligned to parent's bottom or right side + EGUIA_LOWERRIGHT, + //! Aligned to the center of parent + EGUIA_CENTER, + //! Stretched to fit parent + EGUIA_SCALE +}; + +//! Names for alignments +const c8* const GUIAlignmentNames[] = +{ + "upperLeft", + "lowerRight", + "center", + "scale", + 0 +}; + +} // namespace gui +} // namespace irr + +#endif // __E_GUI_ALIGNMENT_H_INCLUDED__ + diff --git a/inc/EGUIElementTypes.h b/inc/EGUIElementTypes.h new file mode 100644 index 0000000..aace9e1 --- /dev/null +++ b/inc/EGUIElementTypes.h @@ -0,0 +1,140 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __E_GUI_ELEMENT_TYPES_H_INCLUDED__ +#define __E_GUI_ELEMENT_TYPES_H_INCLUDED__ + +#include "irrTypes.h" + +namespace irr +{ +namespace gui +{ + +//! List of all basic Irrlicht GUI elements. +/** An IGUIElement returns this when calling IGUIElement::getType(); */ +enum EGUI_ELEMENT_TYPE +{ + //! A button (IGUIButton) + EGUIET_BUTTON = 0, + + //! A check box (IGUICheckBox) + EGUIET_CHECK_BOX, + + //! A combo box (IGUIComboBox) + EGUIET_COMBO_BOX, + + //! A context menu (IGUIContextMenu) + EGUIET_CONTEXT_MENU, + + //! A menu (IGUIMenu) + EGUIET_MENU, + + //! An edit box (IGUIEditBox) + EGUIET_EDIT_BOX, + + //! A file open dialog (IGUIFileOpenDialog) + EGUIET_FILE_OPEN_DIALOG, + + //! A color select open dialog (IGUIColorSelectDialog) + EGUIET_COLOR_SELECT_DIALOG, + + //! A in/out fader (IGUIInOutFader) + EGUIET_IN_OUT_FADER, + + //! An image (IGUIImage) + EGUIET_IMAGE, + + //! A list box (IGUIListBox) + EGUIET_LIST_BOX, + + //! A mesh viewer (IGUIMeshViewer) + EGUIET_MESH_VIEWER, + + //! A message box (IGUIWindow) + EGUIET_MESSAGE_BOX, + + //! A modal screen + EGUIET_MODAL_SCREEN, + + //! A scroll bar (IGUIScrollBar) + EGUIET_SCROLL_BAR, + + //! A spin box (IGUISpinBox) + EGUIET_SPIN_BOX, + + //! A static text (IGUIStaticText) + EGUIET_STATIC_TEXT, + + //! A tab (IGUITab) + EGUIET_TAB, + + //! A tab control + EGUIET_TAB_CONTROL, + + //! A Table + EGUIET_TABLE, + + //! A tool bar (IGUIToolBar) + EGUIET_TOOL_BAR, + + //! A Tree View + EGUIET_TREE_VIEW, + + //! A window + EGUIET_WINDOW, + + //! Unknown type. + EGUIET_ELEMENT, + + //! The root of the GUI + EGUIET_ROOT, + + //! Not an element, amount of elements in there + EGUIET_COUNT, + + //! This enum is never used, it only forces the compiler to compile this enumeration to 32 bit. + EGUIET_FORCE_32_BIT = 0x7fffffff + +}; + +//! Names for built-in element types +const c8* const GUIElementTypeNames[] = +{ + "button", + "checkBox", + "comboBox", + "contextMenu", + "menu", + "editBox", + "fileOpenDialog", + "colorSelectDialog", + "inOutFader", + "image", + "listBox", + "meshViewer", + "messageBox", + "modalScreen", + "scrollBar", + "spinBox", + "staticText", + "tab", + "tabControl", + "table", + "toolBar", + "treeview", + "window", + "element", + "root", + 0 +}; + +} // end namespace gui +} // end namespace irr + +#endif + + + + diff --git a/inc/EHardwareBufferFlags.h b/inc/EHardwareBufferFlags.h new file mode 100644 index 0000000..27d5610 --- /dev/null +++ b/inc/EHardwareBufferFlags.h @@ -0,0 +1,44 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __E_HARDWARE_BUFFER_FLAGS_INCLUDED__ +#define __E_HARDWARE_BUFFER_FLAGS_INCLUDED__ + +namespace irr +{ +namespace scene +{ + + enum E_HARDWARE_MAPPING + { + //! Don't store on the hardware + EHM_NEVER=0, + + //! Rarely changed, usually stored completely on the hardware + EHM_STATIC, + + //! Sometimes changed, driver optimized placement + EHM_DYNAMIC, + + //! Always changed, cache optimizing on the GPU + EHM_STREAM + }; + + enum E_BUFFER_TYPE + { + //! Does not change anything + EBT_NONE=0, + //! Change the vertex mapping + EBT_VERTEX, + //! Change the index mapping + EBT_INDEX, + //! Change both vertex and index mapping to the same value + EBT_VERTEX_AND_INDEX + }; + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/EMaterialFlags.h b/inc/EMaterialFlags.h new file mode 100644 index 0000000..e336adc --- /dev/null +++ b/inc/EMaterialFlags.h @@ -0,0 +1,95 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __E_MATERIAL_FLAGS_H_INCLUDED__ +#define __E_MATERIAL_FLAGS_H_INCLUDED__ + +namespace irr +{ +namespace video +{ + + //! Material flags + enum E_MATERIAL_FLAG + { + //! Draw as wireframe or filled triangles? Default: false + EMF_WIREFRAME = 0x1, + + //! Draw as point cloud or filled triangles? Default: false + EMF_POINTCLOUD = 0x2, + + //! Flat or Gouraud shading? Default: true + EMF_GOURAUD_SHADING = 0x4, + + //! Will this material be lighted? Default: true + EMF_LIGHTING = 0x8, + + //! Is the ZBuffer enabled? Default: true + EMF_ZBUFFER = 0x10, + + //! May be written to the zbuffer or is it readonly. Default: true + /** This flag is ignored, if the material type is a transparent type. */ + EMF_ZWRITE_ENABLE = 0x20, + + //! Is backface culling enabled? Default: true + EMF_BACK_FACE_CULLING = 0x40, + + //! Is frontface culling enabled? Default: false + /** Overrides EMF_BACK_FACE_CULLING if both are enabled. */ + EMF_FRONT_FACE_CULLING = 0x80, + + //! Is bilinear filtering enabled? Default: true + EMF_BILINEAR_FILTER = 0x100, + + //! Is trilinear filtering enabled? Default: false + /** If the trilinear filter flag is enabled, + the bilinear filtering flag is ignored. */ + EMF_TRILINEAR_FILTER = 0x200, + + //! Is anisotropic filtering? Default: false + /** In Irrlicht you can use anisotropic texture filtering in + conjunction with bilinear or trilinear texture filtering + to improve rendering results. Primitives will look less + blurry with this flag switched on. */ + EMF_ANISOTROPIC_FILTER = 0x400, + + //! Is fog enabled? Default: false + EMF_FOG_ENABLE = 0x800, + + //! Normalizes normals. Default: false + /** You can enable this if you need to scale a dynamic lighted + model. Usually, its normals will get scaled too then and it + will get darker. If you enable the EMF_NORMALIZE_NORMALS flag, + the normals will be normalized again, and the model will look + as bright as it should. */ + EMF_NORMALIZE_NORMALS = 0x1000, + + //! Access to all layers texture wrap settings. Overwrites separate layer settings. + EMF_TEXTURE_WRAP = 0x2000, + + //! AntiAliasing mode + EMF_ANTI_ALIASING = 0x4000, + + //! ColorMask bits, for enabling the color planes + EMF_COLOR_MASK = 0x8000, + + //! ColorMaterial enum for vertex color interpretation + EMF_COLOR_MATERIAL = 0x10000, + + //! Flag for enabling/disabling mipmap usage + EMF_USE_MIP_MAPS = 0x20000, + + //! Flag for blend operation + EMF_BLEND_OPERATION = 0x40000, + + //! Flag for polygon offset + EMF_POLYGON_OFFSET = 0x80000 + }; + +} // end namespace video +} // end namespace irr + + +#endif // __E_MATERIAL_FLAGS_H_INCLUDED__ + diff --git a/inc/EMaterialTypes.h b/inc/EMaterialTypes.h new file mode 100644 index 0000000..5e5e075 --- /dev/null +++ b/inc/EMaterialTypes.h @@ -0,0 +1,234 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __E_MATERIAL_TYPES_H_INCLUDED__ +#define __E_MATERIAL_TYPES_H_INCLUDED__ + +namespace irr +{ +namespace video +{ + + //! Abstracted and easy to use fixed function/programmable pipeline material modes. + enum E_MATERIAL_TYPE + { + //! Standard solid material. + /** Only first texture is used, which is supposed to be the + diffuse material. */ + EMT_SOLID = 0, + + //! Solid material with 2 texture layers. + /** The second is blended onto the first using the alpha value + of the vertex colors. This material is currently not implemented in OpenGL. + */ + EMT_SOLID_2_LAYER, + + //! Material type with standard lightmap technique + /** There should be 2 textures: The first texture layer is a + diffuse map, the second is a light map. Dynamic light is + ignored. */ + EMT_LIGHTMAP, + + //! Material type with lightmap technique like EMT_LIGHTMAP. + /** But lightmap and diffuse texture are added instead of modulated. */ + EMT_LIGHTMAP_ADD, + + //! Material type with standard lightmap technique + /** There should be 2 textures: The first texture layer is a + diffuse map, the second is a light map. Dynamic light is + ignored. The texture colors are effectively multiplied by 2 + for brightening. Like known in DirectX as D3DTOP_MODULATE2X. */ + EMT_LIGHTMAP_M2, + + //! Material type with standard lightmap technique + /** There should be 2 textures: The first texture layer is a + diffuse map, the second is a light map. Dynamic light is + ignored. The texture colors are effectively multiplyied by 4 + for brightening. Like known in DirectX as D3DTOP_MODULATE4X. */ + EMT_LIGHTMAP_M4, + + //! Like EMT_LIGHTMAP, but also supports dynamic lighting. + EMT_LIGHTMAP_LIGHTING, + + //! Like EMT_LIGHTMAP_M2, but also supports dynamic lighting. + EMT_LIGHTMAP_LIGHTING_M2, + + //! Like EMT_LIGHTMAP_4, but also supports dynamic lighting. + EMT_LIGHTMAP_LIGHTING_M4, + + //! Detail mapped material. + /** The first texture is diffuse color map, the second is added + to this and usually displayed with a bigger scale value so that + it adds more detail. The detail map is added to the diffuse map + using ADD_SIGNED, so that it is possible to add and substract + color from the diffuse map. For example a value of + (127,127,127) will not change the appearance of the diffuse map + at all. Often used for terrain rendering. */ + EMT_DETAIL_MAP, + + //! Look like a reflection of the environment around it. + /** To make this possible, a texture called 'sphere map' is + used, which must be set as the first texture. */ + EMT_SPHERE_MAP, + + //! A reflecting material with an optional non reflecting texture layer. + /** The reflection map should be set as first texture. */ + EMT_REFLECTION_2_LAYER, + + //! A transparent material. + /** Only the first texture is used. The new color is calculated + by simply adding the source color and the dest color. This + means if for example a billboard using a texture with black + background and a red circle on it is drawn with this material, + the result is that only the red circle will be drawn a little + bit transparent, and everything which was black is 100% + transparent and not visible. This material type is useful for + particle effects. */ + EMT_TRANSPARENT_ADD_COLOR, + + //! Makes the material transparent based on the texture alpha channel. + /** The final color is blended together from the destination + color and the texture color, using the alpha channel value as + blend factor. Only first texture is used. If you are using + this material with small textures, it is a good idea to load + the texture in 32 bit mode + (video::IVideoDriver::setTextureCreationFlag()). Also, an alpha + ref is used, which can be manipulated using + SMaterial::MaterialTypeParam. This value controls how sharp the + edges become when going from a transparent to a solid spot on + the texture. */ + EMT_TRANSPARENT_ALPHA_CHANNEL, + + //! Makes the material transparent based on the texture alpha channel. + /** If the alpha channel value is greater than 127, a + pixel is written to the target, otherwise not. This + material does not use alpha blending and is a lot faster + than EMT_TRANSPARENT_ALPHA_CHANNEL. It is ideal for drawing + stuff like leafes of plants, because the borders are not + blurry but sharp. Only first texture is used. If you are + using this material with small textures and 3d object, it + is a good idea to load the texture in 32 bit mode + (video::IVideoDriver::setTextureCreationFlag()). */ + EMT_TRANSPARENT_ALPHA_CHANNEL_REF, + + //! Makes the material transparent based on the vertex alpha value. + EMT_TRANSPARENT_VERTEX_ALPHA, + + //! A transparent reflecting material with an optional additional non reflecting texture layer. + /** The reflection map should be set as first texture. The + transparency depends on the alpha value in the vertex colors. A + texture which will not reflect can be set as second texture. + Please note that this material type is currently not 100% + implemented in OpenGL. */ + EMT_TRANSPARENT_REFLECTION_2_LAYER, + + //! A solid normal map renderer. + /** First texture is the color map, the second should be the + normal map. Note that you should use this material only when + drawing geometry consisting of vertices of type + S3DVertexTangents (EVT_TANGENTS). You can convert any mesh into + this format using IMeshManipulator::createMeshWithTangents() + (See SpecialFX2 Tutorial). This shader runs on vertex shader + 1.1 and pixel shader 1.1 capable hardware and falls back to a + fixed function lighted material if this hardware is not + available. Only two lights are supported by this shader, if + there are more, the nearest two are chosen. */ + EMT_NORMAL_MAP_SOLID, + + //! A transparent normal map renderer. + /** First texture is the color map, the second should be the + normal map. Note that you should use this material only when + drawing geometry consisting of vertices of type + S3DVertexTangents (EVT_TANGENTS). You can convert any mesh into + this format using IMeshManipulator::createMeshWithTangents() + (See SpecialFX2 Tutorial). This shader runs on vertex shader + 1.1 and pixel shader 1.1 capable hardware and falls back to a + fixed function lighted material if this hardware is not + available. Only two lights are supported by this shader, if + there are more, the nearest two are chosen. */ + EMT_NORMAL_MAP_TRANSPARENT_ADD_COLOR, + + //! A transparent (based on the vertex alpha value) normal map renderer. + /** First texture is the color map, the second should be the + normal map. Note that you should use this material only when + drawing geometry consisting of vertices of type + S3DVertexTangents (EVT_TANGENTS). You can convert any mesh into + this format using IMeshManipulator::createMeshWithTangents() + (See SpecialFX2 Tutorial). This shader runs on vertex shader + 1.1 and pixel shader 1.1 capable hardware and falls back to a + fixed function lighted material if this hardware is not + available. Only two lights are supported by this shader, if + there are more, the nearest two are chosen. */ + EMT_NORMAL_MAP_TRANSPARENT_VERTEX_ALPHA, + + //! Just like EMT_NORMAL_MAP_SOLID, but uses parallax mapping. + /** Looks a lot more realistic. This only works when the + hardware supports at least vertex shader 1.1 and pixel shader + 1.4. First texture is the color map, the second should be the + normal map. The normal map texture should contain the height + value in the alpha component. The + IVideoDriver::makeNormalMapTexture() method writes this value + automatically when creating normal maps from a heightmap when + using a 32 bit texture. The height scale of the material + (affecting the bumpiness) is being controlled by the + SMaterial::MaterialTypeParam member. If set to zero, the + default value (0.02f) will be applied. Otherwise the value set + in SMaterial::MaterialTypeParam is taken. This value depends on + with which scale the texture is mapped on the material. Too + high or low values of MaterialTypeParam can result in strange + artifacts. */ + EMT_PARALLAX_MAP_SOLID, + + //! A material like EMT_PARALLAX_MAP_SOLID, but transparent. + /** Using EMT_TRANSPARENT_ADD_COLOR as base material. */ + EMT_PARALLAX_MAP_TRANSPARENT_ADD_COLOR, + + //! A material like EMT_PARALLAX_MAP_SOLID, but transparent. + /** Using EMT_TRANSPARENT_VERTEX_ALPHA as base material. */ + EMT_PARALLAX_MAP_TRANSPARENT_VERTEX_ALPHA, + + //! BlendFunc = source * sourceFactor + dest * destFactor ( E_BLEND_FUNC ) + /** Using only first texture. Generic blending method. */ + EMT_ONETEXTURE_BLEND, + + //! This value is not used. It only forces this enumeration to compile to 32 bit. + EMT_FORCE_32BIT = 0x7fffffff + }; + + //! Array holding the built in material type names + const char* const sBuiltInMaterialTypeNames[] = + { + "solid", + "solid_2layer", + "lightmap", + "lightmap_add", + "lightmap_m2", + "lightmap_m4", + "lightmap_light", + "lightmap_light_m2", + "lightmap_light_m4", + "detail_map", + "sphere_map", + "reflection_2layer", + "trans_add", + "trans_alphach", + "trans_alphach_ref", + "trans_vertex_alpha", + "trans_reflection_2layer", + "normalmap_solid", + "normalmap_trans_add", + "normalmap_trans_vertexalpha", + "parallaxmap_solid", + "parallaxmap_trans_add", + "parallaxmap_trans_vertexalpha", + "onetexture_blend", + 0 + }; + +} // end namespace video +} // end namespace irr + + +#endif // __E_MATERIAL_TYPES_H_INCLUDED__ + diff --git a/inc/EMeshWriterEnums.h b/inc/EMeshWriterEnums.h new file mode 100644 index 0000000..ceeaa7a --- /dev/null +++ b/inc/EMeshWriterEnums.h @@ -0,0 +1,59 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __E_MESH_WRITER_ENUMS_H_INCLUDED__ +#define __E_MESH_WRITER_ENUMS_H_INCLUDED__ + +#include "irrTypes.h" + +namespace irr +{ +namespace scene +{ + + //! An enumeration for all supported types of built-in mesh writers + /** A scene mesh writers is represented by a four character code + such as 'irrm' or 'coll' instead of simple numbers, to avoid + name clashes with external mesh writers.*/ + enum EMESH_WRITER_TYPE + { + //! Irrlicht native mesh writer, for static .irrmesh files. + EMWT_IRR_MESH = MAKE_IRR_ID('i','r','r','m'), + + //! COLLADA mesh writer for .dae and .xml files + EMWT_COLLADA = MAKE_IRR_ID('c','o','l','l'), + + //! STL mesh writer for .stl files + EMWT_STL = MAKE_IRR_ID('s','t','l',0), + + //! OBJ mesh writer for .obj files + EMWT_OBJ = MAKE_IRR_ID('o','b','j',0), + + //! PLY mesh writer for .ply files + EMWT_PLY = MAKE_IRR_ID('p','l','y',0) + }; + + + //! flags configuring mesh writing + enum E_MESH_WRITER_FLAGS + { + //! no writer flags + EMWF_NONE = 0, + + //! write lightmap textures out if possible + EMWF_WRITE_LIGHTMAPS = 0x1, + + //! write in a way that consumes less disk space + EMWF_WRITE_COMPRESSED = 0x2, + + //! write in binary format rather than text + EMWF_WRITE_BINARY = 0x4 + }; + +} // end namespace scene +} // end namespace irr + + +#endif // __E_MESH_WRITER_ENUMS_H_INCLUDED__ + diff --git a/inc/EMessageBoxFlags.h b/inc/EMessageBoxFlags.h new file mode 100644 index 0000000..ed2d766 --- /dev/null +++ b/inc/EMessageBoxFlags.h @@ -0,0 +1,36 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __E_MESSAGE_BOX_FLAGS_H_INCLUDED__ +#define __E_MESSAGE_BOX_FLAGS_H_INCLUDED__ + +namespace irr +{ +namespace gui +{ + +//! enumeration for message box layout flags +enum EMESSAGE_BOX_FLAG +{ + //! Flag for the ok button + EMBF_OK = 0x1, + + //! Flag for the cancel button + EMBF_CANCEL = 0x2, + + //! Flag for the yes button + EMBF_YES = 0x4, + + //! Flag for the no button + EMBF_NO = 0x8, + + //! This value is not used. It only forces this enumeration to compile in 32 bit. + EMBF_FORCE_32BIT = 0x7fffffff +}; + +} // namespace gui +} // namespace irr + +#endif + diff --git a/inc/EPrimitiveTypes.h b/inc/EPrimitiveTypes.h new file mode 100644 index 0000000..7c61d42 --- /dev/null +++ b/inc/EPrimitiveTypes.h @@ -0,0 +1,56 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __E_PRIMITIVE_TYPES_H_INCLUDED__ +#define __E_PRIMITIVE_TYPES_H_INCLUDED__ + +namespace irr +{ +namespace scene +{ + + //! Enumeration for all primitive types there are. + enum E_PRIMITIVE_TYPE + { + //! All vertices are non-connected points. + EPT_POINTS=0, + + //! All vertices form a single connected line. + EPT_LINE_STRIP, + + //! Just as LINE_STRIP, but the last and the first vertex is also connected. + EPT_LINE_LOOP, + + //! Every two vertices are connected creating n/2 lines. + EPT_LINES, + + //! After the first two vertices each vertex defines a new triangle. + //! Always the two last and the new one form a new triangle. + EPT_TRIANGLE_STRIP, + + //! After the first two vertices each vertex defines a new triangle. + //! All around the common first vertex. + EPT_TRIANGLE_FAN, + + //! Explicitly set all vertices for each triangle. + EPT_TRIANGLES, + + //! After the first two vertices each further tw vetices create a quad with the preceding two. + EPT_QUAD_STRIP, + + //! Every four vertices create a quad. + EPT_QUADS, + + //! Just as LINE_LOOP, but filled. + EPT_POLYGON, + + //! The single vertices are expanded to quad billboards on the GPU. + EPT_POINT_SPRITES + }; + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/ESceneNodeAnimatorTypes.h b/inc/ESceneNodeAnimatorTypes.h new file mode 100644 index 0000000..078739d --- /dev/null +++ b/inc/ESceneNodeAnimatorTypes.h @@ -0,0 +1,58 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __E_SCENE_NODE_ANIMATOR_TYPES_H_INCLUDED__ +#define __E_SCENE_NODE_ANIMATOR_TYPES_H_INCLUDED__ + +namespace irr +{ +namespace scene +{ + + //! An enumeration for all types of built-in scene node animators + enum ESCENE_NODE_ANIMATOR_TYPE + { + //! Fly circle scene node animator + ESNAT_FLY_CIRCLE = 0, + + //! Fly straight scene node animator + ESNAT_FLY_STRAIGHT, + + //! Follow spline scene node animator + ESNAT_FOLLOW_SPLINE, + + //! Rotation scene node animator + ESNAT_ROTATION, + + //! Texture scene node animator + ESNAT_TEXTURE, + + //! Deletion scene node animator + ESNAT_DELETION, + + //! Collision respose scene node animator + ESNAT_COLLISION_RESPONSE, + + //! FPS camera animator + ESNAT_CAMERA_FPS, + + //! Maya camera animator + ESNAT_CAMERA_MAYA, + + //! Amount of built-in scene node animators + ESNAT_COUNT, + + //! Unknown scene node animator + ESNAT_UNKNOWN, + + //! This enum is never used, it only forces the compiler to compile this enumeration to 32 bit. + ESNAT_FORCE_32_BIT = 0x7fffffff + }; + +} // end namespace scene +} // end namespace irr + + +#endif + diff --git a/inc/ESceneNodeTypes.h b/inc/ESceneNodeTypes.h new file mode 100644 index 0000000..3d43105 --- /dev/null +++ b/inc/ESceneNodeTypes.h @@ -0,0 +1,106 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __E_SCENE_NODE_TYPES_H_INCLUDED__ +#define __E_SCENE_NODE_TYPES_H_INCLUDED__ + +#include "irrTypes.h" + +namespace irr +{ +namespace scene +{ + + //! An enumeration for all types of built-in scene nodes + /** A scene node type is represented by a four character code + such as 'cube' or 'mesh' instead of simple numbers, to avoid + name clashes with external scene nodes.*/ + enum ESCENE_NODE_TYPE + { + //! of type CSceneManager (note that ISceneManager is not(!) an ISceneNode) + ESNT_SCENE_MANAGER = MAKE_IRR_ID('s','m','n','g'), + + //! simple cube scene node + ESNT_CUBE = MAKE_IRR_ID('c','u','b','e'), + + //! Sphere scene node + ESNT_SPHERE = MAKE_IRR_ID('s','p','h','r'), + + //! Text Scene Node + ESNT_TEXT = MAKE_IRR_ID('t','e','x','t'), + + //! Water Surface Scene Node + ESNT_WATER_SURFACE = MAKE_IRR_ID('w','a','t','r'), + + //! Terrain Scene Node + ESNT_TERRAIN = MAKE_IRR_ID('t','e','r','r'), + + //! Sky Box Scene Node + ESNT_SKY_BOX = MAKE_IRR_ID('s','k','y','_'), + + //! Sky Dome Scene Node + ESNT_SKY_DOME = MAKE_IRR_ID('s','k','y','d'), + + //! Shadow Volume Scene Node + ESNT_SHADOW_VOLUME = MAKE_IRR_ID('s','h','d','w'), + + //! Octree Scene Node + ESNT_OCTREE = MAKE_IRR_ID('o','c','t','r'), + + //! Mesh Scene Node + ESNT_MESH = MAKE_IRR_ID('m','e','s','h'), + + //! Light Scene Node + ESNT_LIGHT = MAKE_IRR_ID('l','g','h','t'), + + //! Empty Scene Node + ESNT_EMPTY = MAKE_IRR_ID('e','m','t','y'), + + //! Dummy Transformation Scene Node + ESNT_DUMMY_TRANSFORMATION = MAKE_IRR_ID('d','m','m','y'), + + //! Camera Scene Node + ESNT_CAMERA = MAKE_IRR_ID('c','a','m','_'), + + //! Billboard Scene Node + ESNT_BILLBOARD = MAKE_IRR_ID('b','i','l','l'), + + //! Animated Mesh Scene Node + ESNT_ANIMATED_MESH = MAKE_IRR_ID('a','m','s','h'), + + //! Particle System Scene Node + ESNT_PARTICLE_SYSTEM = MAKE_IRR_ID('p','t','c','l'), + + //! Quake3 Shader Scene Node + ESNT_Q3SHADER_SCENE_NODE = MAKE_IRR_ID('q','3','s','h'), + + //! Quake3 Model Scene Node ( has tag to link to ) + ESNT_MD3_SCENE_NODE = MAKE_IRR_ID('m','d','3','_'), + + //! Volume Light Scene Node + ESNT_VOLUME_LIGHT = MAKE_IRR_ID('v','o','l','l'), + + //! Maya Camera Scene Node + /** Legacy, for loading version <= 1.4.x .irr files */ + ESNT_CAMERA_MAYA = MAKE_IRR_ID('c','a','m','M'), + + //! First Person Shooter Camera + /** Legacy, for loading version <= 1.4.x .irr files */ + ESNT_CAMERA_FPS = MAKE_IRR_ID('c','a','m','F'), + + //! Unknown scene node + ESNT_UNKNOWN = MAKE_IRR_ID('u','n','k','n'), + + //! Will match with any scene node when checking types + ESNT_ANY = MAKE_IRR_ID('a','n','y','_') + }; + + + +} // end namespace scene +} // end namespace irr + + +#endif + diff --git a/inc/EShaderTypes.h b/inc/EShaderTypes.h new file mode 100644 index 0000000..691930c --- /dev/null +++ b/inc/EShaderTypes.h @@ -0,0 +1,90 @@ +#ifndef __E_SHADER_TYPES_H_INCLUDED__ +#define __E_SHADER_TYPES_H_INCLUDED__ + +#include "irrTypes.h" + +namespace irr +{ +namespace video +{ + +//! Compile target enumeration for the addHighLevelShaderMaterial() method. +enum E_VERTEX_SHADER_TYPE +{ + EVST_VS_1_1 = 0, + EVST_VS_2_0, + EVST_VS_2_a, + EVST_VS_3_0, + EVST_VS_4_0, + EVST_VS_4_1, + EVST_VS_5_0, + + //! This is not a type, but a value indicating how much types there are. + EVST_COUNT +}; + +//! Names for all vertex shader types, each entry corresponds to a E_VERTEX_SHADER_TYPE entry. +const c8* const VERTEX_SHADER_TYPE_NAMES[] = { + "vs_1_1", + "vs_2_0", + "vs_2_a", + "vs_3_0", + "vs_4_0", + "vs_4_1", + "vs_5_0", + 0 }; + +//! Compile target enumeration for the addHighLevelShaderMaterial() method. +enum E_PIXEL_SHADER_TYPE +{ + EPST_PS_1_1 = 0, + EPST_PS_1_2, + EPST_PS_1_3, + EPST_PS_1_4, + EPST_PS_2_0, + EPST_PS_2_a, + EPST_PS_2_b, + EPST_PS_3_0, + EPST_PS_4_0, + EPST_PS_4_1, + EPST_PS_5_0, + + //! This is not a type, but a value indicating how much types there are. + EPST_COUNT +}; + +//! Names for all pixel shader types, each entry corresponds to a E_PIXEL_SHADER_TYPE entry. +const c8* const PIXEL_SHADER_TYPE_NAMES[] = { + "ps_1_1", + "ps_1_2", + "ps_1_3", + "ps_1_4", + "ps_2_0", + "ps_2_a", + "ps_2_b", + "ps_3_0", + "ps_4_0", + "ps_4_1", + "ps_5_0", + 0 }; + +//! Enum for supported geometry shader types +enum E_GEOMETRY_SHADER_TYPE +{ + EGST_GS_4_0 = 0, + + //! This is not a type, but a value indicating how much types there are. + EGST_COUNT +}; + +//! String names for supported geometry shader types +const c8* const GEOMETRY_SHADER_TYPE_NAMES[] = { + "gs_4_0", + 0 }; + + +} // end namespace video +} // end namespace irr + +#endif // __E_SHADER_TYPES_H_INCLUDED__ + diff --git a/inc/ETerrainElements.h b/inc/ETerrainElements.h new file mode 100644 index 0000000..b09ac39 --- /dev/null +++ b/inc/ETerrainElements.h @@ -0,0 +1,36 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __E_TERRAIN_ELEMENTS_H__ +#define __E_TERRAIN_ELEMENTS_H__ + +namespace irr +{ +namespace scene +{ + + //! enumeration for patch sizes specifying the size of patches in the TerrainSceneNode + enum E_TERRAIN_PATCH_SIZE + { + //! patch size of 9, at most, use 4 levels of detail with this patch size. + ETPS_9 = 9, + + //! patch size of 17, at most, use 5 levels of detail with this patch size. + ETPS_17 = 17, + + //! patch size of 33, at most, use 6 levels of detail with this patch size. + ETPS_33 = 33, + + //! patch size of 65, at most, use 7 levels of detail with this patch size. + ETPS_65 = 65, + + //! patch size of 129, at most, use 8 levels of detail with this patch size. + ETPS_129 = 129 + }; + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/IAnimatedMesh.h b/inc/IAnimatedMesh.h new file mode 100644 index 0000000..ec6eee0 --- /dev/null +++ b/inc/IAnimatedMesh.h @@ -0,0 +1,115 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_ANIMATED_MESH_H_INCLUDED__ +#define __I_ANIMATED_MESH_H_INCLUDED__ + +#include "aabbox3d.h" +#include "IMesh.h" + +namespace irr +{ +namespace scene +{ + //! Possible types of (animated) meshes. + enum E_ANIMATED_MESH_TYPE + { + //! Unknown animated mesh type. + EAMT_UNKNOWN = 0, + + //! Quake 2 MD2 model file + EAMT_MD2, + + //! Quake 3 MD3 model file + EAMT_MD3, + + //! Maya .obj static model + EAMT_OBJ, + + //! Quake 3 .bsp static Map + EAMT_BSP, + + //! 3D Studio .3ds file + EAMT_3DS, + + //! My3D Mesh, the file format by Zhuck Dimitry + EAMT_MY3D, + + //! Pulsar LMTools .lmts file. This Irrlicht loader was written by Jonas Petersen + EAMT_LMTS, + + //! Cartography Shop .csm file. This loader was created by Saurav Mohapatra. + EAMT_CSM, + + //! .oct file for Paul Nette's FSRad or from Murphy McCauley's Blender .oct exporter. + /** The oct file format contains 3D geometry and lightmaps and + can be loaded directly by Irrlicht */ + EAMT_OCT, + + //! Halflife MDL model file + EAMT_MDL_HALFLIFE, + + //! generic skinned mesh + EAMT_SKINNED + }; + + //! Interface for an animated mesh. + /** There are already simple implementations of this interface available so + you don't have to implement this interface on your own if you need to: + You might want to use irr::scene::SAnimatedMesh, irr::scene::SMesh, + irr::scene::SMeshBuffer etc. */ + class IAnimatedMesh : public IMesh + { + public: + + //! Gets the frame count of the animated mesh. + /** \return The amount of frames. If the amount is 1, + it is a static, non animated mesh. */ + virtual u32 getFrameCount() const = 0; + + //! Gets the animation speed of the animated mesh. + /** \return The number of frames per second to play the + animation with by default. If the amount is 0, + it is a static, non animated mesh. */ + virtual f32 getAnimationSpeed() const = 0; + + //! Sets the animation speed of the animated mesh. + /** \param fps Number of frames per second to play the + animation with by default. If the amount is 0, + it is not animated. The actual speed is set in the + scene node the mesh is instantiated in.*/ + virtual void setAnimationSpeed(f32 fps) =0; + + //! Returns the IMesh interface for a frame. + /** \param frame: Frame number as zero based index. The maximum + frame number is getFrameCount() - 1; + \param detailLevel: Level of detail. 0 is the lowest, 255 the + highest level of detail. Most meshes will ignore the detail level. + \param startFrameLoop: Because some animated meshes (.MD2) are + blended between 2 static frames, and maybe animated in a loop, + the startFrameLoop and the endFrameLoop have to be defined, to + prevent the animation to be blended between frames which are + outside of this loop. + If startFrameLoop and endFrameLoop are both -1, they are ignored. + \param endFrameLoop: see startFrameLoop. + \return Returns the animated mesh based on a detail level. */ + virtual IMesh* getMesh(s32 frame, s32 detailLevel=255, s32 startFrameLoop=-1, s32 endFrameLoop=-1) = 0; + + //! Returns the type of the animated mesh. + /** In most cases it is not neccessary to use this method. + This is useful for making a safe downcast. For example, + if getMeshType() returns EAMT_MD2 it's safe to cast the + IAnimatedMesh to IAnimatedMeshMD2. + \returns Type of the mesh. */ + virtual E_ANIMATED_MESH_TYPE getMeshType() const + { + return EAMT_UNKNOWN; + } + }; + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/IAnimatedMeshMD2.h b/inc/IAnimatedMeshMD2.h new file mode 100644 index 0000000..333394e --- /dev/null +++ b/inc/IAnimatedMeshMD2.h @@ -0,0 +1,79 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_ANIMATED_MESH_MD2_H_INCLUDED__ +#define __I_ANIMATED_MESH_MD2_H_INCLUDED__ + +#include "IAnimatedMesh.h" + +namespace irr +{ +namespace scene +{ + + //! Types of standard md2 animations + enum EMD2_ANIMATION_TYPE + { + EMAT_STAND = 0, + EMAT_RUN, + EMAT_ATTACK, + EMAT_PAIN_A, + EMAT_PAIN_B, + EMAT_PAIN_C, + EMAT_JUMP, + EMAT_FLIP, + EMAT_SALUTE, + EMAT_FALLBACK, + EMAT_WAVE, + EMAT_POINT, + EMAT_CROUCH_STAND, + EMAT_CROUCH_WALK, + EMAT_CROUCH_ATTACK, + EMAT_CROUCH_PAIN, + EMAT_CROUCH_DEATH, + EMAT_DEATH_FALLBACK, + EMAT_DEATH_FALLFORWARD, + EMAT_DEATH_FALLBACKSLOW, + EMAT_BOOM, + + //! Not an animation, but amount of animation types. + EMAT_COUNT + }; + + //! Interface for using some special functions of MD2 meshes + class IAnimatedMeshMD2 : public IAnimatedMesh + { + public: + + //! Get frame loop data for a default MD2 animation type. + /** \param l The EMD2_ANIMATION_TYPE to get the frames for. + \param outBegin The returned beginning frame for animation type specified. + \param outEnd The returned ending frame for the animation type specified. + \param outFPS The number of frames per second, this animation should be played at. + \return beginframe, endframe and frames per second for a default MD2 animation type. */ + virtual void getFrameLoop(EMD2_ANIMATION_TYPE l, s32& outBegin, + s32& outEnd, s32& outFPS) const = 0; + + //! Get frame loop data for a special MD2 animation type, identified by name. + /** \param name Name of the animation. + \param outBegin The returned beginning frame for animation type specified. + \param outEnd The returned ending frame for the animation type specified. + \param outFPS The number of frames per second, this animation should be played at. + \return beginframe, endframe and frames per second for a special MD2 animation type. */ + virtual bool getFrameLoop(const c8* name, + s32& outBegin, s32& outEnd, s32& outFPS) const = 0; + + //! Get amount of md2 animations in this file. + virtual s32 getAnimationCount() const = 0; + + //! Get name of md2 animation. + /** \param nr: Zero based index of animation. */ + virtual const c8* getAnimationName(s32 nr) const = 0; + }; + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/IAnimatedMeshMD3.h b/inc/IAnimatedMeshMD3.h new file mode 100644 index 0000000..93b24c1 --- /dev/null +++ b/inc/IAnimatedMeshMD3.h @@ -0,0 +1,304 @@ +// Copyright (C) 2007-2012 Nikolaus Gebhardt / Thomas Alten +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_ANIMATED_MESH_MD3_H_INCLUDED__ +#define __I_ANIMATED_MESH_MD3_H_INCLUDED__ + +#include "IAnimatedMesh.h" +#include "IQ3Shader.h" +#include "quaternion.h" + +namespace irr +{ +namespace scene +{ + + enum eMD3Models + { + EMD3_HEAD = 0, + EMD3_UPPER, + EMD3_LOWER, + EMD3_WEAPON, + EMD3_NUMMODELS + }; + + //! Animation list + enum EMD3_ANIMATION_TYPE + { + // Animations for both lower and upper parts of the player + EMD3_BOTH_DEATH_1 = 0, + EMD3_BOTH_DEAD_1, + EMD3_BOTH_DEATH_2, + EMD3_BOTH_DEAD_2, + EMD3_BOTH_DEATH_3, + EMD3_BOTH_DEAD_3, + + // Animations for the upper part + EMD3_TORSO_GESTURE, + EMD3_TORSO_ATTACK_1, + EMD3_TORSO_ATTACK_2, + EMD3_TORSO_DROP, + EMD3_TORSO_RAISE, + EMD3_TORSO_STAND_1, + EMD3_TORSO_STAND_2, + + // Animations for the lower part + EMD3_LEGS_WALK_CROUCH, + EMD3_LEGS_WALK, + EMD3_LEGS_RUN, + EMD3_LEGS_BACK, + EMD3_LEGS_SWIM, + EMD3_LEGS_JUMP_1, + EMD3_LEGS_LAND_1, + EMD3_LEGS_JUMP_2, + EMD3_LEGS_LAND_2, + EMD3_LEGS_IDLE, + EMD3_LEGS_IDLE_CROUCH, + EMD3_LEGS_TURN, + + //! Not an animation, but amount of animation types. + EMD3_ANIMATION_COUNT + }; + + struct SMD3AnimationInfo + { + //! First frame + s32 first; + //! Last frame + s32 num; + //! Looping frames + s32 looping; + //! Frames per second + s32 fps; + }; + + +// byte-align structures +#include "irrpack.h" + + //! this holds the header info of the MD3 file + struct SMD3Header + { + c8 headerID[4]; //id of file, always "IDP3" + s32 Version; //this is a version number, always 15 + s8 fileName[68]; //sometimes left Blank... 65 chars, 32bit aligned == 68 chars + s32 numFrames; //number of KeyFrames + s32 numTags; //number of 'tags' per frame + s32 numMeshes; //number of meshes/skins + s32 numMaxSkins; //maximum number of unique skins used in md3 file. artefact md2 + s32 frameStart; //starting position of frame-structur + s32 tagStart; //starting position of tag-structures + s32 tagEnd; //ending position of tag-structures/starting position of mesh-structures + s32 fileSize; + } PACK_STRUCT; + + //! this holds the header info of an MD3 mesh section + struct SMD3MeshHeader + { + c8 meshID[4]; //id, must be IDP3 + c8 meshName[68]; //name of mesh 65 chars, 32 bit aligned == 68 chars + + s32 numFrames; //number of meshframes in mesh + s32 numShader; //number of skins in mesh + s32 numVertices; //number of vertices + s32 numTriangles; //number of Triangles + + s32 offset_triangles; //starting position of Triangle data, relative to start of Mesh_Header + s32 offset_shaders; //size of header + s32 offset_st; //starting position of texvector data, relative to start of Mesh_Header + s32 vertexStart; //starting position of vertex data,relative to start of Mesh_Header + s32 offset_end; + } PACK_STRUCT; + + + //! Compressed Vertex Data + struct SMD3Vertex + { + s16 position[3]; + u8 normal[2]; + } PACK_STRUCT; + + //! Texture Coordinate + struct SMD3TexCoord + { + f32 u; + f32 v; + } PACK_STRUCT; + + //! Triangle Index + struct SMD3Face + { + s32 Index[3]; + } PACK_STRUCT; + + +// Default alignment +#include "irrunpack.h" + + //! Holding Frame Data for a Mesh + struct SMD3MeshBuffer : public IReferenceCounted + { + SMD3MeshHeader MeshHeader; + + core::stringc Shader; + core::array < s32 > Indices; + core::array < SMD3Vertex > Vertices; + core::array < SMD3TexCoord > Tex; + }; + + //! hold a tag info for connecting meshes + /** Basically its an alternate way to describe a transformation. */ + struct SMD3QuaternionTag + { + virtual ~SMD3QuaternionTag() + { + position.X = 0.f; + } + + // construct copy constructor + SMD3QuaternionTag( const SMD3QuaternionTag & copyMe ) + { + *this = copyMe; + } + + // construct for searching + SMD3QuaternionTag( const core::stringc& name ) + : Name ( name ) {} + + // construct from a position and euler angles in degrees + SMD3QuaternionTag ( const core::vector3df &pos, const core::vector3df &angle ) + : position(pos), rotation(angle * core::DEGTORAD) {} + + // set to matrix + void setto ( core::matrix4 &m ) + { + rotation.getMatrix ( m, position ); + } + + bool operator == ( const SMD3QuaternionTag &other ) const + { + return Name == other.Name; + } + + SMD3QuaternionTag & operator=( const SMD3QuaternionTag & copyMe ) + { + Name = copyMe.Name; + position = copyMe.position; + rotation = copyMe.rotation; + return *this; + } + + core::stringc Name; + core::vector3df position; + core::quaternion rotation; + }; + + //! holds a associative list of named quaternions + struct SMD3QuaternionTagList + { + SMD3QuaternionTagList() + { + Container.setAllocStrategy(core::ALLOC_STRATEGY_SAFE); + } + + // construct copy constructor + SMD3QuaternionTagList(const SMD3QuaternionTagList& copyMe) + { + *this = copyMe; + } + + virtual ~SMD3QuaternionTagList() {} + + SMD3QuaternionTag* get(const core::stringc& name) + { + SMD3QuaternionTag search ( name ); + s32 index = Container.linear_search ( search ); + if ( index >= 0 ) + return &Container[index]; + return 0; + } + + u32 size () const + { + return Container.size(); + } + + void set_used(u32 new_size) + { + s32 diff = (s32) new_size - (s32) Container.allocated_size(); + if ( diff > 0 ) + { + SMD3QuaternionTag e(""); + for ( s32 i = 0; i < diff; ++i ) + Container.push_back(e); + } + } + + const SMD3QuaternionTag& operator[](u32 index) const + { + return Container[index]; + } + + SMD3QuaternionTag& operator[](u32 index) + { + return Container[index]; + } + + void push_back(const SMD3QuaternionTag& other) + { + Container.push_back(other); + } + + SMD3QuaternionTagList& operator = (const SMD3QuaternionTagList & copyMe) + { + Container = copyMe.Container; + return *this; + } + + private: + core::array < SMD3QuaternionTag > Container; + }; + + + //! Holding Frames Buffers and Tag Infos + struct SMD3Mesh: public IReferenceCounted + { + SMD3Mesh () + { + MD3Header.numFrames = 0; + } + + virtual ~SMD3Mesh() + { + for (u32 i=0; idrop(); + } + + core::stringc Name; + core::array Buffer; + SMD3QuaternionTagList TagList; + SMD3Header MD3Header; + }; + + + //! Interface for using some special functions of MD3 meshes + class IAnimatedMeshMD3 : public IAnimatedMesh + { + public: + + //! tune how many frames you want to render inbetween. + virtual void setInterpolationShift(u32 shift, u32 loopMode) =0; + + //! get the tag list of the mesh. + virtual SMD3QuaternionTagList* getTagList(s32 frame, s32 detailLevel, s32 startFrameLoop, s32 endFrameLoop) =0; + + //! get the original md3 mesh. + virtual SMD3Mesh* getOriginalMesh() =0; + }; + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/IAnimatedMeshSceneNode.h b/inc/IAnimatedMeshSceneNode.h new file mode 100644 index 0000000..f34161e --- /dev/null +++ b/inc/IAnimatedMeshSceneNode.h @@ -0,0 +1,228 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_ANIMATED_MESH_SCENE_NODE_H_INCLUDED__ +#define __I_ANIMATED_MESH_SCENE_NODE_H_INCLUDED__ + +#include "ISceneNode.h" +#include "IBoneSceneNode.h" +#include "IAnimatedMeshMD2.h" +#include "IAnimatedMeshMD3.h" + +namespace irr +{ +namespace scene +{ + class IShadowVolumeSceneNode; + + enum E_JOINT_UPDATE_ON_RENDER + { + //! do nothing + EJUOR_NONE = 0, + + //! get joints positions from the mesh (for attached nodes, etc) + EJUOR_READ, + + //! control joint positions in the mesh (eg. ragdolls, or set the animation from animateJoints() ) + EJUOR_CONTROL + }; + + + class IAnimatedMeshSceneNode; + + //! Callback interface for catching events of ended animations. + /** Implement this interface and use + IAnimatedMeshSceneNode::setAnimationEndCallback to be able to + be notified if an animation playback has ended. + **/ + class IAnimationEndCallBack : public virtual IReferenceCounted + { + public: + + //! Will be called when the animation playback has ended. + /** See IAnimatedMeshSceneNode::setAnimationEndCallback for + more informations. + \param node: Node of which the animation has ended. */ + virtual void OnAnimationEnd(IAnimatedMeshSceneNode* node) = 0; + }; + + //! Scene node capable of displaying an animated mesh and its shadow. + /** The shadow is optional: If a shadow should be displayed too, just + invoke the IAnimatedMeshSceneNode::createShadowVolumeSceneNode().*/ + class IAnimatedMeshSceneNode : public ISceneNode + { + public: + + //! Constructor + IAnimatedMeshSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id, + const core::vector3df& position = core::vector3df(0,0,0), + const core::vector3df& rotation = core::vector3df(0,0,0), + const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f)) + : ISceneNode(parent, mgr, id, position, rotation, scale) {} + + //! Destructor + virtual ~IAnimatedMeshSceneNode() {} + + //! Sets the current frame number. + /** From now on the animation is played from this frame. + \param frame: Number of the frame to let the animation be started from. + The frame number must be a valid frame number of the IMesh used by this + scene node. Set IAnimatedMesh::getMesh() for details. */ + virtual void setCurrentFrame(f32 frame) = 0; + + //! Sets the frame numbers between the animation is looped. + /** The default is 0 - MaximalFrameCount of the mesh. + \param begin: Start frame number of the loop. + \param end: End frame number of the loop. + \return True if successful, false if not. */ + virtual bool setFrameLoop(s32 begin, s32 end) = 0; + + //! Sets the speed with which the animation is played. + /** \param framesPerSecond: Frames per second played. */ + virtual void setAnimationSpeed(f32 framesPerSecond) = 0; + + //! Gets the speed with which the animation is played. + /** \return Frames per second played. */ + virtual f32 getAnimationSpeed() const =0; + + //! Creates shadow volume scene node as child of this node. + /** The shadow can be rendered using the ZPass or the zfail + method. ZPass is a little bit faster because the shadow volume + creation is easier, but with this method there occur ugly + looking artifacs when the camera is inside the shadow volume. + These error do not occur with the ZFail method. + \param shadowMesh: Optional custom mesh for shadow volume. + \param id: Id of the shadow scene node. This id can be used to + identify the node later. + \param zfailmethod: If set to true, the shadow will use the + zfail method, if not, zpass is used. + \param infinity: Value used by the shadow volume algorithm to + scale the shadow volume (for zfail shadow volume we support only + finite shadows, so camera zfar must be larger than shadow back cap, + which is depend on infinity parameter). + \return Pointer to the created shadow scene node. This pointer + should not be dropped. See IReferenceCounted::drop() for more + information. */ + virtual IShadowVolumeSceneNode* addShadowVolumeSceneNode(const IMesh* shadowMesh=0, + s32 id=-1, bool zfailmethod=true, f32 infinity=1000.0f) = 0; + + + //! Get a pointer to a joint in the mesh (if the mesh is a bone based mesh). + /** With this method it is possible to attach scene nodes to + joints for example possible to attach a weapon to the left hand + of an animated model. This example shows how: + \code + ISceneNode* hand = + yourAnimatedMeshSceneNode->getJointNode("LeftHand"); + hand->addChild(weaponSceneNode); + \endcode + Please note that the joint returned by this method may not exist + before this call and the joints in the node were created by it. + \param jointName: Name of the joint. + \return Pointer to the scene node which represents the joint + with the specified name. Returns 0 if the contained mesh is not + an skinned mesh or the name of the joint could not be found. */ + virtual IBoneSceneNode* getJointNode(const c8* jointName)=0; + + //! same as getJointNode(const c8* jointName), but based on id + virtual IBoneSceneNode* getJointNode(u32 jointID) = 0; + + //! Gets joint count. + /** \return Amount of joints in the mesh. */ + virtual u32 getJointCount() const = 0; + + //! Starts a default MD2 animation. + /** With this method it is easily possible to start a Run, + Attack, Die or whatever animation, if the mesh contained in + this scene node is an md2 mesh. Otherwise, nothing happens. + \param anim: An MD2 animation type, which should be played, for + example EMAT_STAND for the standing animation. + \return True if successful, and false if not, for example if + the mesh in the scene node is not a md2 mesh. */ + virtual bool setMD2Animation(EMD2_ANIMATION_TYPE anim) = 0; + + //! Starts a special MD2 animation. + /** With this method it is easily possible to start a Run, + Attack, Die or whatever animation, if the mesh contained in + this scene node is an md2 mesh. Otherwise, nothing happens. + This method uses a character string to identify the animation. + If the animation is a standard md2 animation, you might want to + start this animation with the EMD2_ANIMATION_TYPE enumeration + instead. + \param animationName: Name of the animation which should be + played. + \return Returns true if successful, and false if not, for + example if the mesh in the scene node is not an md2 mesh, or no + animation with this name could be found. */ + virtual bool setMD2Animation(const c8* animationName) = 0; + + //! Returns the currently displayed frame number. + virtual f32 getFrameNr() const = 0; + //! Returns the current start frame number. + virtual s32 getStartFrame() const = 0; + //! Returns the current end frame number. + virtual s32 getEndFrame() const = 0; + + //! Sets looping mode which is on by default. + /** If set to false, animations will not be played looped. */ + virtual void setLoopMode(bool playAnimationLooped) = 0; + + //! returns the current loop mode + /** When true the animations are played looped */ + virtual bool getLoopMode() const = 0; + + //! Sets a callback interface which will be called if an animation playback has ended. + /** Set this to 0 to disable the callback again. + Please note that this will only be called when in non looped + mode, see IAnimatedMeshSceneNode::setLoopMode(). */ + virtual void setAnimationEndCallback(IAnimationEndCallBack* callback=0) = 0; + + //! Sets if the scene node should not copy the materials of the mesh but use them in a read only style. + /** In this way it is possible to change the materials a mesh + causing all mesh scene nodes referencing this mesh to change + too. */ + virtual void setReadOnlyMaterials(bool readonly) = 0; + + //! Returns if the scene node should not copy the materials of the mesh but use them in a read only style + virtual bool isReadOnlyMaterials() const = 0; + + //! Sets a new mesh + virtual void setMesh(IAnimatedMesh* mesh) = 0; + + //! Returns the current mesh + virtual IAnimatedMesh* getMesh(void) = 0; + + //! Get the absolute transformation for a special MD3 Tag if the mesh is a md3 mesh, or the absolutetransformation if it's a normal scenenode + virtual const SMD3QuaternionTag* getMD3TagTransformation( const core::stringc & tagname) = 0; + + //! Set how the joints should be updated on render + virtual void setJointMode(E_JOINT_UPDATE_ON_RENDER mode)=0; + + //! Sets the transition time in seconds + /** Note: This needs to enable joints, and setJointmode set to + EJUOR_CONTROL. You must call animateJoints(), or the mesh will + not animate. */ + virtual void setTransitionTime(f32 Time) =0; + + //! animates the joints in the mesh based on the current frame. + /** Also takes in to account transitions. */ + virtual void animateJoints(bool CalculateAbsolutePositions=true) = 0; + + //! render mesh ignoring its transformation. + /** Culling is unaffected. */ + virtual void setRenderFromIdentity( bool On )=0; + + //! Creates a clone of this scene node and its children. + /** \param newParent An optional new parent. + \param newManager An optional new scene manager. + \return The newly created clone of this node. */ + virtual ISceneNode* clone(ISceneNode* newParent=0, ISceneManager* newManager=0) = 0; + + }; + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/IAttributeExchangingObject.h b/inc/IAttributeExchangingObject.h new file mode 100644 index 0000000..9c64b7d --- /dev/null +++ b/inc/IAttributeExchangingObject.h @@ -0,0 +1,71 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_ATTRIBUTE_EXCHANGING_OBJECT_H_INCLUDED__ +#define __I_ATTRIBUTE_EXCHANGING_OBJECT_H_INCLUDED__ + +#include "IReferenceCounted.h" + + +namespace irr +{ + +namespace io +{ + +class IAttributes; + +//! Enumeration flags passed through SAttributeReadWriteOptions to the IAttributeExchangingObject object +enum E_ATTRIBUTE_READ_WRITE_FLAGS +{ + //! Serialization/Deserializion is done for an xml file + EARWF_FOR_FILE = 0x00000001, + + //! Serialization/Deserializion is done for an editor property box + EARWF_FOR_EDITOR = 0x00000002, + + //! When writing filenames, relative paths should be used + EARWF_USE_RELATIVE_PATHS = 0x00000004 +}; + + +//! struct holding data describing options +struct SAttributeReadWriteOptions +{ + //! Constructor + SAttributeReadWriteOptions() + : Flags(0), Filename(0) + { + } + + //! Combination of E_ATTRIBUTE_READ_WRITE_FLAGS or other, custom ones + s32 Flags; + + //! Optional filename + const fschar_t* Filename; +}; + + +//! An object which is able to serialize and deserialize its attributes into an attributes object +class IAttributeExchangingObject : virtual public IReferenceCounted +{ +public: + + //! Writes attributes of the object. + /** Implement this to expose the attributes of your scene node animator for + scripting languages, editors, debuggers or xml serialization purposes. */ + virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const {} + + //! Reads attributes of the object. + /** Implement this to set the attributes of your scene node animator for + scripting languages, editors, debuggers or xml deserialization purposes. */ + virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0) {} + +}; + +} // end namespace io +} // end namespace irr + +#endif + diff --git a/inc/IAttributes.h b/inc/IAttributes.h new file mode 100644 index 0000000..bc77180 --- /dev/null +++ b/inc/IAttributes.h @@ -0,0 +1,738 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_ATTRIBUTES_H_INCLUDED__ +#define __I_ATTRIBUTES_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "SColor.h" +#include "vector3d.h" +#include "vector2d.h" +#include "line2d.h" +#include "line3d.h" +#include "triangle3d.h" +#include "position2d.h" +#include "rect.h" +#include "dimension2d.h" +#include "matrix4.h" +#include "quaternion.h" +#include "plane3d.h" +#include "triangle3d.h" +#include "line2d.h" +#include "line3d.h" +#include "irrString.h" +#include "irrArray.h" +#include "IXMLReader.h" +#include "EAttributes.h" +#include "path.h" + +namespace irr +{ +namespace video +{ + class ITexture; +} // end namespace video +namespace io +{ + class IXMLWriter; + +//! Provides a generic interface for attributes and their values and the possiblity to serialize them +class IAttributes : public virtual IReferenceCounted +{ +public: + + //! Returns amount of attributes in this collection of attributes. + virtual u32 getAttributeCount() const = 0; + + //! Returns attribute name by index. + //! \param index: Index value, must be between 0 and getAttributeCount()-1. + virtual const c8* getAttributeName(s32 index) = 0; + + //! Returns the type of an attribute + //! \param attributeName: Name for the attribute + virtual E_ATTRIBUTE_TYPE getAttributeType(const c8* attributeName) = 0; + + //! Returns attribute type by index. + //! \param index: Index value, must be between 0 and getAttributeCount()-1. + virtual E_ATTRIBUTE_TYPE getAttributeType(s32 index) = 0; + + //! Returns the type string of the attribute + //! \param attributeName: String for the attribute type + virtual const wchar_t* getAttributeTypeString(const c8* attributeName) = 0; + + //! Returns the type string of the attribute by index. + //! \param index: Index value, must be between 0 and getAttributeCount()-1. + virtual const wchar_t* getAttributeTypeString(s32 index) = 0; + + //! Returns if an attribute with a name exists + virtual bool existsAttribute(const c8* attributeName) = 0; + + //! Returns attribute index from name, -1 if not found + virtual s32 findAttribute(const c8* attributeName) const =0; + + //! Removes all attributes + virtual void clear() = 0; + + //! Reads attributes from a xml file. + //! \param reader The XML reader to read from + //! \param readCurrentElementOnly If set to true, reading only works if current element has the name 'attributes' or + //! the name specified using elementName. + //! \param elementName The surrounding element name. If it is null, the default one, "attributes" will be taken. + //! If set to false, the first appearing list of attributes are read. + virtual bool read(io::IXMLReader* reader, bool readCurrentElementOnly=false, const wchar_t* elementName=0) = 0; + + //! Write these attributes into a xml file + //! \param writer: The XML writer to write to + //! \param writeXMLHeader: Writes a header to the XML file, required if at the beginning of the file + //! \param elementName: The surrounding element name. If it is null, the default one, "attributes" will be taken. + virtual bool write(io::IXMLWriter* writer, bool writeXMLHeader=false, const wchar_t* elementName=0) = 0; + + + /* + + Integer Attribute + + */ + + //! Adds an attribute as integer + virtual void addInt(const c8* attributeName, s32 value) = 0; + + //! Sets an attribute as integer value + virtual void setAttribute(const c8* attributeName, s32 value) = 0; + + //! Gets an attribute as integer value + //! \param attributeName: Name of the attribute to get. + //! \return Returns value of the attribute previously set by setAttribute() + virtual s32 getAttributeAsInt(const c8* attributeName) const =0; + + //! Gets an attribute as integer value + //! \param index: Index value, must be between 0 and getAttributeCount()-1. + virtual s32 getAttributeAsInt(s32 index) const =0; + + //! Sets an attribute as integer value + virtual void setAttribute(s32 index, s32 value) = 0; + + /* + + Float Attribute + + */ + + //! Adds an attribute as float + virtual void addFloat(const c8* attributeName, f32 value) = 0; + + //! Sets a attribute as float value + virtual void setAttribute(const c8* attributeName, f32 value) = 0; + + //! Gets an attribute as float value + //! \param attributeName: Name of the attribute to get. + //! \return Returns value of the attribute previously set by setAttribute() + virtual f32 getAttributeAsFloat(const c8* attributeName) = 0; + + //! Gets an attribute as float value + //! \param index: Index value, must be between 0 and getAttributeCount()-1. + virtual f32 getAttributeAsFloat(s32 index) = 0; + + //! Sets an attribute as float value + virtual void setAttribute(s32 index, f32 value) = 0; + + /* + + String Attribute + + */ + + //! Adds an attribute as string + virtual void addString(const c8* attributeName, const c8* value) = 0; + + //! Sets an attribute value as string. + //! \param attributeName: Name for the attribute + //! \param value: Value for the attribute. Set this to 0 to delete the attribute + virtual void setAttribute(const c8* attributeName, const c8* value) = 0; + + //! Gets an attribute as string. + //! \param attributeName: Name of the attribute to get. + //! \return Returns value of the attribute previously set by setAttribute() + //! or 0 if attribute is not set. + virtual core::stringc getAttributeAsString(const c8* attributeName) = 0; + + //! Gets an attribute as string. + //! \param attributeName Name of the attribute to get. + //! \param target Buffer where the string is copied to. + virtual void getAttributeAsString(const c8* attributeName, c8* target) = 0; + + //! Returns attribute value as string by index. + //! \param index Index value, must be between 0 and getAttributeCount()-1. + virtual core::stringc getAttributeAsString(s32 index) = 0; + + //! Sets an attribute value as string. + //! \param index Index value, must be between 0 and getAttributeCount()-1. + //! \param value String to which the attribute is set. + virtual void setAttribute(s32 index, const c8* value) = 0; + + // wide strings + + //! Adds an attribute as string + virtual void addString(const c8* attributeName, const wchar_t* value) = 0; + + //! Sets an attribute value as string. + //! \param attributeName: Name for the attribute + //! \param value: Value for the attribute. Set this to 0 to delete the attribute + virtual void setAttribute(const c8* attributeName, const wchar_t* value) = 0; + + //! Gets an attribute as string. + //! \param attributeName: Name of the attribute to get. + //! \return Returns value of the attribute previously set by setAttribute() + //! or 0 if attribute is not set. + virtual core::stringw getAttributeAsStringW(const c8* attributeName) = 0; + + //! Gets an attribute as string. + //! \param attributeName: Name of the attribute to get. + //! \param target: Buffer where the string is copied to. + virtual void getAttributeAsStringW(const c8* attributeName, wchar_t* target) = 0; + + //! Returns attribute value as string by index. + //! \param index: Index value, must be between 0 and getAttributeCount()-1. + virtual core::stringw getAttributeAsStringW(s32 index) = 0; + + //! Sets an attribute value as string. + //! \param index Index value, must be between 0 and getAttributeCount()-1. + //! \param value String to which the attribute is set. + virtual void setAttribute(s32 index, const wchar_t* value) = 0; + + /* + + Binary Data Attribute + + */ + + //! Adds an attribute as binary data + virtual void addBinary(const c8* attributeName, void* data, s32 dataSizeInBytes) = 0; + + //! Sets an attribute as binary data + virtual void setAttribute(const c8* attributeName, void* data, s32 dataSizeInBytes ) = 0; + + //! Gets an attribute as binary data + /** \param attributeName: Name of the attribute to get. + \param outData Pointer to buffer where data shall be stored. + \param maxSizeInBytes Maximum number of bytes to write into outData. + */ + virtual void getAttributeAsBinaryData(const c8* attributeName, void* outData, s32 maxSizeInBytes) = 0; + + //! Gets an attribute as binary data + /** \param index: Index value, must be between 0 and getAttributeCount()-1. + \param outData Pointer to buffer where data shall be stored. + \param maxSizeInBytes Maximum number of bytes to write into outData. + */ + virtual void getAttributeAsBinaryData(s32 index, void* outData, s32 maxSizeInBytes) = 0; + + //! Sets an attribute as binary data + virtual void setAttribute(s32 index, void* data, s32 dataSizeInBytes ) = 0; + + + /* + Array Attribute + */ + + //! Adds an attribute as wide string array + virtual void addArray(const c8* attributeName, const core::array& value) = 0; + + //! Sets an attribute value as a wide string array. + //! \param attributeName: Name for the attribute + //! \param value: Value for the attribute. Set this to 0 to delete the attribute + virtual void setAttribute(const c8* attributeName, const core::array& value) = 0; + + //! Gets an attribute as an array of wide strings. + //! \param attributeName: Name of the attribute to get. + //! \return Returns value of the attribute previously set by setAttribute() + //! or 0 if attribute is not set. + virtual core::array getAttributeAsArray(const c8* attributeName) = 0; + + //! Returns attribute value as an array of wide strings by index. + //! \param index: Index value, must be between 0 and getAttributeCount()-1. + virtual core::array getAttributeAsArray(s32 index) = 0; + + //! Sets an attribute as an array of wide strings + virtual void setAttribute(s32 index, const core::array& value) = 0; + + + /* + + Bool Attribute + + */ + + //! Adds an attribute as bool + virtual void addBool(const c8* attributeName, bool value) = 0; + + //! Sets an attribute as boolean value + virtual void setAttribute(const c8* attributeName, bool value) = 0; + + //! Gets an attribute as boolean value + //! \param attributeName: Name of the attribute to get. + //! \return Returns value of the attribute previously set by setAttribute() + virtual bool getAttributeAsBool(const c8* attributeName) = 0; + + //! Gets an attribute as boolean value + //! \param index: Index value, must be between 0 and getAttributeCount()-1. + virtual bool getAttributeAsBool(s32 index) = 0; + + //! Sets an attribute as boolean value + virtual void setAttribute(s32 index, bool value) = 0; + + /* + + Enumeration Attribute + + */ + + //! Adds an attribute as enum + virtual void addEnum(const c8* attributeName, const c8* enumValue, const c8* const* enumerationLiterals) = 0; + + //! Adds an attribute as enum + virtual void addEnum(const c8* attributeName, s32 enumValue, const c8* const* enumerationLiterals) = 0; + + //! Sets an attribute as enumeration + virtual void setAttribute(const c8* attributeName, const c8* enumValue, const c8* const* enumerationLiterals) = 0; + + //! Gets an attribute as enumeration + //! \param attributeName: Name of the attribute to get. + //! \return Returns value of the attribute previously set by setAttribute() + virtual const c8* getAttributeAsEnumeration(const c8* attributeName) = 0; + + //! Gets an attribute as enumeration + /** \param attributeName: Name of the attribute to get. + \param enumerationLiteralsToUse: Use these enumeration literals to get + the index value instead of the set ones. This is useful when the + attribute list maybe was read from an xml file, and only contains the + enumeration string, but no information about its index. + \return Returns value of the attribute previously set by setAttribute() + */ + virtual s32 getAttributeAsEnumeration(const c8* attributeName, const c8* const* enumerationLiteralsToUse) = 0; + + //! Gets an attribute as enumeration + /** \param index: Index value, must be between 0 and getAttributeCount()-1. + \param enumerationLiteralsToUse: Use these enumeration literals to get + the index value instead of the set ones. This is useful when the + attribute list maybe was read from an xml file, and only contains the + enumeration string, but no information about its index. + \return Returns value of the attribute previously set by setAttribute() + */ + virtual s32 getAttributeAsEnumeration(s32 index, const c8* const* enumerationLiteralsToUse) = 0; + + //! Gets an attribute as enumeration + //! \param index: Index value, must be between 0 and getAttributeCount()-1. + virtual const c8* getAttributeAsEnumeration(s32 index) = 0; + + //! Gets the list of enumeration literals of an enumeration attribute + //! \param attributeName Name of the attribute to get. + //! \param outLiterals Set of strings to choose the enum name from. + virtual void getAttributeEnumerationLiteralsOfEnumeration(const c8* attributeName, core::array& outLiterals) = 0; + + //! Gets the list of enumeration literals of an enumeration attribute + //! \param index: Index value, must be between 0 and getAttributeCount()-1. + //! \param outLiterals Set of strings to choose the enum name from. + virtual void getAttributeEnumerationLiteralsOfEnumeration(s32 index, core::array& outLiterals) = 0; + + //! Sets an attribute as enumeration + virtual void setAttribute(s32 index, const c8* enumValue, const c8* const* enumerationLiterals) = 0; + + + /* + + SColor Attribute + + */ + + //! Adds an attribute as color + virtual void addColor(const c8* attributeName, video::SColor value) = 0; + + + //! Sets a attribute as color + virtual void setAttribute(const c8* attributeName, video::SColor color) = 0; + + //! Gets an attribute as color + //! \param attributeName: Name of the attribute to get. + //! \return Returns value of the attribute previously set by setAttribute() + virtual video::SColor getAttributeAsColor(const c8* attributeName) = 0; + + //! Gets an attribute as color + //! \param index: Index value, must be between 0 and getAttributeCount()-1. + virtual video::SColor getAttributeAsColor(s32 index) = 0; + + //! Sets an attribute as color + virtual void setAttribute(s32 index, video::SColor color) = 0; + + /* + + SColorf Attribute + + */ + + //! Adds an attribute as floating point color + virtual void addColorf(const c8* attributeName, video::SColorf value) = 0; + + //! Sets a attribute as floating point color + virtual void setAttribute(const c8* attributeName, video::SColorf color) = 0; + + //! Gets an attribute as floating point color + //! \param attributeName: Name of the attribute to get. + //! \return Returns value of the attribute previously set by setAttribute() + virtual video::SColorf getAttributeAsColorf(const c8* attributeName) = 0; + + //! Gets an attribute as floating point color + //! \param index: Index value, must be between 0 and getAttributeCount()-1. + virtual video::SColorf getAttributeAsColorf(s32 index) = 0; + + //! Sets an attribute as floating point color + virtual void setAttribute(s32 index, video::SColorf color) = 0; + + + /* + + Vector3d Attribute + + */ + + //! Adds an attribute as 3d vector + virtual void addVector3d(const c8* attributeName, core::vector3df value) = 0; + + //! Sets a attribute as 3d vector + virtual void setAttribute(const c8* attributeName, core::vector3df v) = 0; + + //! Gets an attribute as 3d vector + //! \param attributeName: Name of the attribute to get. + //! \return Returns value of the attribute previously set by setAttribute() + virtual core::vector3df getAttributeAsVector3d(const c8* attributeName) = 0; + + //! Gets an attribute as 3d vector + //! \param index: Index value, must be between 0 and getAttributeCount()-1. + virtual core::vector3df getAttributeAsVector3d(s32 index) = 0; + + //! Sets an attribute as vector + virtual void setAttribute(s32 index, core::vector3df v) = 0; + + /* + + Vector2d Attribute + + */ + + //! Adds an attribute as 2d vector + virtual void addVector2d(const c8* attributeName, core::vector2df value) = 0; + + //! Sets a attribute as 2d vector + virtual void setAttribute(const c8* attributeName, core::vector2df v) = 0; + + //! Gets an attribute as vector + //! \param attributeName: Name of the attribute to get. + //! \return Returns value of the attribute previously set by setAttribute() + virtual core::vector2df getAttributeAsVector2d(const c8* attributeName) = 0; + + //! Gets an attribute as position + //! \param index: Index value, must be between 0 and getAttributeCount()-1. + virtual core::vector2df getAttributeAsVector2d(s32 index) = 0; + + //! Sets an attribute as 2d vector + virtual void setAttribute(s32 index, core::vector2df v) = 0; + + /* + + Position2d Attribute + + */ + + //! Adds an attribute as 2d position + virtual void addPosition2d(const c8* attributeName, core::position2di value) = 0; + + //! Sets a attribute as 2d position + virtual void setAttribute(const c8* attributeName, core::position2di v) = 0; + + //! Gets an attribute as position + //! \param attributeName: Name of the attribute to get. + //! \return Returns value of the attribute previously set by setAttribute() + virtual core::position2di getAttributeAsPosition2d(const c8* attributeName) = 0; + + //! Gets an attribute as position + //! \param index: Index value, must be between 0 and getAttributeCount()-1. + virtual core::position2di getAttributeAsPosition2d(s32 index) = 0; + + //! Sets an attribute as 2d position + virtual void setAttribute(s32 index, core::position2di v) = 0; + + /* + + Rectangle Attribute + + */ + + //! Adds an attribute as rectangle + virtual void addRect(const c8* attributeName, core::rect value) = 0; + + //! Sets an attribute as rectangle + virtual void setAttribute(const c8* attributeName, core::rect v) = 0; + + //! Gets an attribute as rectangle + //! \param attributeName: Name of the attribute to get. + //! \return Returns value of the attribute previously set by setAttribute() + virtual core::rect getAttributeAsRect(const c8* attributeName) = 0; + + //! Gets an attribute as rectangle + //! \param index: Index value, must be between 0 and getAttributeCount()-1. + virtual core::rect getAttributeAsRect(s32 index) = 0; + + //! Sets an attribute as rectangle + virtual void setAttribute(s32 index, core::rect v) = 0; + + + /* + + Dimension2d Attribute + + */ + + //! Adds an attribute as dimension2d + virtual void addDimension2d(const c8* attributeName, core::dimension2d value) = 0; + + //! Sets an attribute as dimension2d + virtual void setAttribute(const c8* attributeName, core::dimension2d v) = 0; + + //! Gets an attribute as dimension2d + //! \param attributeName: Name of the attribute to get. + //! \return Returns value of the attribute previously set by setAttribute() + virtual core::dimension2d getAttributeAsDimension2d(const c8* attributeName) = 0; + + //! Gets an attribute as dimension2d + //! \param index: Index value, must be between 0 and getAttributeCount()-1. + virtual core::dimension2d getAttributeAsDimension2d(s32 index) = 0; + + //! Sets an attribute as dimension2d + virtual void setAttribute(s32 index, core::dimension2d v) = 0; + + + /* + matrix attribute + */ + + //! Adds an attribute as matrix + virtual void addMatrix(const c8* attributeName, const core::matrix4& v) = 0; + + //! Sets an attribute as matrix + virtual void setAttribute(const c8* attributeName, const core::matrix4& v) = 0; + + //! Gets an attribute as a matrix4 + //! \param attributeName: Name of the attribute to get. + //! \return Returns value of the attribute previously set by setAttribute() + virtual core::matrix4 getAttributeAsMatrix(const c8* attributeName) = 0; + + //! Gets an attribute as matrix + //! \param index: Index value, must be between 0 and getAttributeCount()-1. + virtual core::matrix4 getAttributeAsMatrix(s32 index) = 0; + + //! Sets an attribute as matrix + virtual void setAttribute(s32 index, const core::matrix4& v) = 0; + + /* + quaternion attribute + + */ + + //! Adds an attribute as quaternion + virtual void addQuaternion(const c8* attributeName, core::quaternion v) = 0; + + //! Sets an attribute as quaternion + virtual void setAttribute(const c8* attributeName, core::quaternion v) = 0; + + //! Gets an attribute as a quaternion + //! \param attributeName: Name of the attribute to get. + //! \return Returns value of the attribute previously set by setAttribute() + virtual core::quaternion getAttributeAsQuaternion(const c8* attributeName) = 0; + + //! Gets an attribute as quaternion + //! \param index: Index value, must be between 0 and getAttributeCount()-1. + virtual core::quaternion getAttributeAsQuaternion(s32 index) = 0; + + //! Sets an attribute as quaternion + virtual void setAttribute(s32 index, core::quaternion v) = 0; + + /* + + 3d bounding box + + */ + + //! Adds an attribute as axis aligned bounding box + virtual void addBox3d(const c8* attributeName, core::aabbox3df v) = 0; + + //! Sets an attribute as axis aligned bounding box + virtual void setAttribute(const c8* attributeName, core::aabbox3df v) = 0; + + //! Gets an attribute as a axis aligned bounding box + //! \param attributeName: Name of the attribute to get. + //! \return Returns value of the attribute previously set by setAttribute() + virtual core::aabbox3df getAttributeAsBox3d(const c8* attributeName) = 0; + + //! Gets an attribute as axis aligned bounding box + //! \param index: Index value, must be between 0 and getAttributeCount()-1. + virtual core::aabbox3df getAttributeAsBox3d(s32 index) = 0; + + //! Sets an attribute as axis aligned bounding box + virtual void setAttribute(s32 index, core::aabbox3df v) = 0; + + /* + + plane + + */ + + //! Adds an attribute as 3d plane + virtual void addPlane3d(const c8* attributeName, core::plane3df v) = 0; + + //! Sets an attribute as 3d plane + virtual void setAttribute(const c8* attributeName, core::plane3df v) = 0; + + //! Gets an attribute as a 3d plane + //! \param attributeName: Name of the attribute to get. + //! \return Returns value of the attribute previously set by setAttribute() + virtual core::plane3df getAttributeAsPlane3d(const c8* attributeName) = 0; + + //! Gets an attribute as 3d plane + //! \param index: Index value, must be between 0 and getAttributeCount()-1. + virtual core::plane3df getAttributeAsPlane3d(s32 index) = 0; + + //! Sets an attribute as 3d plane + virtual void setAttribute(s32 index, core::plane3df v) = 0; + + + /* + + 3d triangle + + */ + + //! Adds an attribute as 3d triangle + virtual void addTriangle3d(const c8* attributeName, core::triangle3df v) = 0; + + //! Sets an attribute as 3d trianle + virtual void setAttribute(const c8* attributeName, core::triangle3df v) = 0; + + //! Gets an attribute as a 3d triangle + //! \param attributeName: Name of the attribute to get. + //! \return Returns value of the attribute previously set by setAttribute() + virtual core::triangle3df getAttributeAsTriangle3d(const c8* attributeName) = 0; + + //! Gets an attribute as 3d triangle + //! \param index: Index value, must be between 0 and getAttributeCount()-1. + virtual core::triangle3df getAttributeAsTriangle3d(s32 index) = 0; + + //! Sets an attribute as 3d triangle + virtual void setAttribute(s32 index, core::triangle3df v) = 0; + + + /* + + line 2d + + */ + + //! Adds an attribute as a 2d line + virtual void addLine2d(const c8* attributeName, core::line2df v) = 0; + + //! Sets an attribute as a 2d line + virtual void setAttribute(const c8* attributeName, core::line2df v) = 0; + + //! Gets an attribute as a 2d line + //! \param attributeName: Name of the attribute to get. + //! \return Returns value of the attribute previously set by setAttribute() + virtual core::line2df getAttributeAsLine2d(const c8* attributeName) = 0; + + //! Gets an attribute as a 2d line + //! \param index: Index value, must be between 0 and getAttributeCount()-1. + virtual core::line2df getAttributeAsLine2d(s32 index) = 0; + + //! Sets an attribute as a 2d line + virtual void setAttribute(s32 index, core::line2df v) = 0; + + + /* + + line 3d + + */ + + //! Adds an attribute as a 3d line + virtual void addLine3d(const c8* attributeName, core::line3df v) = 0; + + //! Sets an attribute as a 3d line + virtual void setAttribute(const c8* attributeName, core::line3df v) = 0; + + //! Gets an attribute as a 3d line + //! \param attributeName: Name of the attribute to get. + //! \return Returns value of the attribute previously set by setAttribute() + virtual core::line3df getAttributeAsLine3d(const c8* attributeName) = 0; + + //! Gets an attribute as a 3d line + //! \param index: Index value, must be between 0 and getAttributeCount()-1. + virtual core::line3df getAttributeAsLine3d(s32 index) = 0; + + //! Sets an attribute as a 3d line + virtual void setAttribute(s32 index, core::line3df v) = 0; + + + /* + + Texture Attribute + + */ + + //! Adds an attribute as texture reference + virtual void addTexture(const c8* attributeName, video::ITexture* texture, const io::path& filename = "") = 0; + + //! Sets an attribute as texture reference + virtual void setAttribute(const c8* attributeName, video::ITexture* texture, const io::path& filename = "") = 0; + + //! Gets an attribute as texture reference + //! \param attributeName: Name of the attribute to get. + virtual video::ITexture* getAttributeAsTexture(const c8* attributeName) = 0; + + //! Gets an attribute as texture reference + //! \param index: Index value, must be between 0 and getAttributeCount()-1. + virtual video::ITexture* getAttributeAsTexture(s32 index) = 0; + + //! Sets an attribute as texture reference + virtual void setAttribute(s32 index, video::ITexture* texture, const io::path& filename = "") = 0; + + + /* + + User Pointer Attribute + + */ + + //! Adds an attribute as user pointner + virtual void addUserPointer(const c8* attributeName, void* userPointer) = 0; + + //! Sets an attribute as user pointer + virtual void setAttribute(const c8* attributeName, void* userPointer) = 0; + + //! Gets an attribute as user pointer + //! \param attributeName: Name of the attribute to get. + virtual void* getAttributeAsUserPointer(const c8* attributeName) = 0; + + //! Gets an attribute as user pointer + //! \param index: Index value, must be between 0 and getAttributeCount()-1. + virtual void* getAttributeAsUserPointer(s32 index) = 0; + + //! Sets an attribute as user pointer + virtual void setAttribute(s32 index, void* userPointer) = 0; + +}; + +} // end namespace io +} // end namespace irr + +#endif + + + diff --git a/inc/IBillboardSceneNode.h b/inc/IBillboardSceneNode.h new file mode 100644 index 0000000..1c931d7 --- /dev/null +++ b/inc/IBillboardSceneNode.h @@ -0,0 +1,75 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_BILLBOARD_SCENE_NODE_H_INCLUDED__ +#define __I_BILLBOARD_SCENE_NODE_H_INCLUDED__ + +#include "ISceneNode.h" + +namespace irr +{ +namespace scene +{ + +//! A billboard scene node. +/** A billboard is like a 3d sprite: A 2d element, +which always looks to the camera. It is usually used for explosions, fire, +lensflares, particles and things like that. +*/ +class IBillboardSceneNode : public ISceneNode +{ +public: + + //! Constructor + IBillboardSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id, + const core::vector3df& position = core::vector3df(0,0,0)) + : ISceneNode(parent, mgr, id, position) {} + + //! Sets the size of the billboard, making it rectangular. + virtual void setSize(const core::dimension2d& size) = 0; + + //! Sets the size of the billboard with independent widths of the bottom and top edges. + /** \param[in] height The height of the billboard. + \param[in] bottomEdgeWidth The width of the bottom edge of the billboard. + \param[in] topEdgeWidth The width of the top edge of the billboard. + */ + virtual void setSize(f32 height, f32 bottomEdgeWidth, f32 topEdgeWidth) = 0; + + //! Returns the size of the billboard. + /** This will return the width of the bottom edge of the billboard. + Use getWidths() to retrieve the bottom and top edges independently. + \return Size of the billboard. + */ + virtual const core::dimension2d& getSize() const = 0; + + //! Gets the size of the the billboard and handles independent top and bottom edge widths correctly. + /** \param[out] height The height of the billboard. + \param[out] bottomEdgeWidth The width of the bottom edge of the billboard. + \param[out] topEdgeWidth The width of the top edge of the billboard. + */ + virtual void getSize(f32& height, f32& bottomEdgeWidth, f32& topEdgeWidth) const =0; + + //! Set the color of all vertices of the billboard + /** \param[in] overallColor Color to set */ + virtual void setColor(const video::SColor& overallColor) = 0; + + //! Set the color of the top and bottom vertices of the billboard + /** \param[in] topColor Color to set the top vertices + \param[in] bottomColor Color to set the bottom vertices */ + virtual void setColor(const video::SColor& topColor, + const video::SColor& bottomColor) = 0; + + //! Gets the color of the top and bottom vertices of the billboard + /** \param[out] topColor Stores the color of the top vertices + \param[out] bottomColor Stores the color of the bottom vertices */ + virtual void getColor(video::SColor& topColor, + video::SColor& bottomColor) const = 0; +}; + +} // end namespace scene +} // end namespace irr + + +#endif + diff --git a/inc/IBillboardTextSceneNode.h b/inc/IBillboardTextSceneNode.h new file mode 100644 index 0000000..30925da --- /dev/null +++ b/inc/IBillboardTextSceneNode.h @@ -0,0 +1,62 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_BILLBOARD_TEXT_SCENE_NODE_H_INCLUDED__ +#define __I_BILLBOARD_TEXT_SCENE_NODE_H_INCLUDED__ + +#include "IBillboardSceneNode.h" + +namespace irr +{ +namespace scene +{ + +//! A billboard text scene node. +/** Acts like a billboard which displays the currently set text. + Due to the exclusion of RTTI in Irrlicht we have to avoid multiple + inheritance. Hence, changes to the ITextSceneNode interface have + to be copied here manually. +*/ +class IBillboardTextSceneNode : public IBillboardSceneNode +{ +public: + + //! Constructor + IBillboardTextSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id, + const core::vector3df& position = core::vector3df(0,0,0)) + : IBillboardSceneNode(parent, mgr, id, position) {} + + //! Sets the size of the billboard. + virtual void setSize(const core::dimension2d& size) = 0; + + //! Returns the size of the billboard. + virtual const core::dimension2d& getSize() const = 0; + + //! Set the color of all vertices of the billboard + /** \param overallColor: the color to set */ + virtual void setColor(const video::SColor & overallColor) = 0; + + //! Set the color of the top and bottom vertices of the billboard + /** \param topColor: the color to set the top vertices + \param bottomColor: the color to set the bottom vertices */ + virtual void setColor(const video::SColor & topColor, const video::SColor & bottomColor) = 0; + + //! Gets the color of the top and bottom vertices of the billboard + /** \param topColor: stores the color of the top vertices + \param bottomColor: stores the color of the bottom vertices */ + virtual void getColor(video::SColor & topColor, video::SColor & bottomColor) const = 0; + + //! sets the text string + virtual void setText(const wchar_t* text) = 0; + + //! sets the color of the text + virtual void setTextColor(video::SColor color) = 0; +}; + +} // end namespace scene +} // end namespace irr + + +#endif + diff --git a/inc/IBoneSceneNode.h b/inc/IBoneSceneNode.h new file mode 100644 index 0000000..d0063b4 --- /dev/null +++ b/inc/IBoneSceneNode.h @@ -0,0 +1,108 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_BONE_SCENE_NODE_H_INCLUDED__ +#define __I_BONE_SCENE_NODE_H_INCLUDED__ + +#include "ISceneNode.h" + +namespace irr +{ +namespace scene +{ + + //! Enumeration for different bone animation modes + enum E_BONE_ANIMATION_MODE + { + //! The bone is usually animated, unless it's parent is not animated + EBAM_AUTOMATIC=0, + + //! The bone is animated by the skin, if it's parent is not animated then animation will resume from this bone onward + EBAM_ANIMATED, + + //! The bone is not animated by the skin + EBAM_UNANIMATED, + + //! Not an animation mode, just here to count the available modes + EBAM_COUNT + + }; + + enum E_BONE_SKINNING_SPACE + { + //! local skinning, standard + EBSS_LOCAL=0, + + //! global skinning + EBSS_GLOBAL, + + EBSS_COUNT + }; + + //! Names for bone animation modes + const c8* const BoneAnimationModeNames[] = + { + "automatic", + "animated", + "unanimated", + 0, + }; + + + //! Interface for bones used for skeletal animation. + /** Used with ISkinnedMesh and IAnimatedMeshSceneNode. */ + class IBoneSceneNode : public ISceneNode + { + public: + + IBoneSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id=-1) : + ISceneNode(parent, mgr, id),positionHint(-1),scaleHint(-1),rotationHint(-1) { } + + //! Get the name of the bone + /** \deprecated Use getName instead. This method may be removed by Irrlicht 1.9 */ + _IRR_DEPRECATED_ virtual const c8* getBoneName() const { return getName(); } + + //! Get the index of the bone + virtual u32 getBoneIndex() const = 0; + + //! Sets the animation mode of the bone. + /** \return True if successful. (Unused) */ + virtual bool setAnimationMode(E_BONE_ANIMATION_MODE mode) = 0; + + //! Gets the current animation mode of the bone + virtual E_BONE_ANIMATION_MODE getAnimationMode() const = 0; + + //! Get the axis aligned bounding box of this node + virtual const core::aabbox3d& getBoundingBox() const = 0; + + //! Returns the relative transformation of the scene node. + //virtual core::matrix4 getRelativeTransformation() const = 0; + + //! The animation method. + virtual void OnAnimate(u32 timeMs) =0; + + //! The render method. + /** Does nothing as bones are not visible. */ + virtual void render() { } + + //! How the relative transformation of the bone is used + virtual void setSkinningSpace( E_BONE_SKINNING_SPACE space ) =0; + + //! How the relative transformation of the bone is used + virtual E_BONE_SKINNING_SPACE getSkinningSpace() const =0; + + //! Updates the absolute position based on the relative and the parents position + virtual void updateAbsolutePositionOfAllChildren()=0; + + s32 positionHint; + s32 scaleHint; + s32 rotationHint; + }; + + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/ICameraSceneNode.h b/inc/ICameraSceneNode.h new file mode 100644 index 0000000..dfc1b7a --- /dev/null +++ b/inc/ICameraSceneNode.h @@ -0,0 +1,207 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_CAMERA_SCENE_NODE_H_INCLUDED__ +#define __I_CAMERA_SCENE_NODE_H_INCLUDED__ + +#include "ISceneNode.h" +#include "IEventReceiver.h" + +namespace irr +{ +namespace scene +{ + struct SViewFrustum; + + //! Scene Node which is a (controlable) camera. + /** The whole scene will be rendered from the cameras point of view. + Because the ICameraScenNode is a SceneNode, it can be attached to any + other scene node, and will follow its parents movement, rotation and so + on. + */ + class ICameraSceneNode : public ISceneNode, public IEventReceiver + { + public: + + //! Constructor + ICameraSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id, + const core::vector3df& position = core::vector3df(0,0,0), + const core::vector3df& rotation = core::vector3df(0,0,0), + const core::vector3df& scale = core::vector3df(1.0f,1.0f,1.0f)) + : ISceneNode(parent, mgr, id, position, rotation, scale), IsOrthogonal(false) {} + + //! Sets the projection matrix of the camera. + /** The core::matrix4 class has some methods to build a + projection matrix. e.g: + core::matrix4::buildProjectionMatrixPerspectiveFovLH. + Note that the matrix will only stay as set by this method until + one of the following Methods are called: setNearValue, + setFarValue, setAspectRatio, setFOV. + \param projection The new projection matrix of the camera. + \param isOrthogonal Set this to true if the matrix is an + orthogonal one (e.g. from matrix4::buildProjectionMatrixOrtho). + */ + virtual void setProjectionMatrix(const core::matrix4& projection, bool isOrthogonal=false) =0; + + //! Gets the current projection matrix of the camera. + /** \return The current projection matrix of the camera. */ + virtual const core::matrix4& getProjectionMatrix() const =0; + + //! Gets the current view matrix of the camera. + /** \return The current view matrix of the camera. */ + virtual const core::matrix4& getViewMatrix() const =0; + + //! Sets a custom view matrix affector. + /** The matrix passed here, will be multiplied with the view + matrix when it gets updated. This allows for custom camera + setups like, for example, a reflection camera. + \param affector The affector matrix. */ + virtual void setViewMatrixAffector(const core::matrix4& affector) =0; + + //! Get the custom view matrix affector. + /** \return The affector matrix. */ + virtual const core::matrix4& getViewMatrixAffector() const =0; + + //! It is possible to send mouse and key events to the camera. + /** Most cameras may ignore this input, but camera scene nodes + which are created for example with + ISceneManager::addCameraSceneNodeMaya or + ISceneManager::addCameraSceneNodeFPS, may want to get + this input for changing their position, look at target or + whatever. */ + virtual bool OnEvent(const SEvent& event) =0; + + //! Sets the look at target of the camera + /** If the camera's target and rotation are bound ( @see + bindTargetAndRotation() ) then calling this will also change + the camera's scene node rotation to match the target. + Note that setTarget uses the current absolute position + internally, so if you changed setPosition since last rendering you must + call updateAbsolutePosition before using this function. + \param pos Look at target of the camera, in world co-ordinates. */ + virtual void setTarget(const core::vector3df& pos) =0; + + //! Sets the rotation of the node. + /** This only modifies the relative rotation of the node. + If the camera's target and rotation are bound ( @see + bindTargetAndRotation() ) then calling this will also change + the camera's target to match the rotation. + \param rotation New rotation of the node in degrees. */ + virtual void setRotation(const core::vector3df& rotation) =0; + + //! Gets the current look at target of the camera + /** \return The current look at target of the camera, in world co-ordinates */ + virtual const core::vector3df& getTarget() const =0; + + //! Sets the up vector of the camera. + /** \param pos: New upvector of the camera. */ + virtual void setUpVector(const core::vector3df& pos) =0; + + //! Gets the up vector of the camera. + /** \return The up vector of the camera, in world space. */ + virtual const core::vector3df& getUpVector() const =0; + + //! Gets the value of the near plane of the camera. + /** \return The value of the near plane of the camera. */ + virtual f32 getNearValue() const =0; + + //! Gets the value of the far plane of the camera. + /** \return The value of the far plane of the camera. */ + virtual f32 getFarValue() const =0; + + //! Gets the aspect ratio of the camera. + /** \return The aspect ratio of the camera. */ + virtual f32 getAspectRatio() const =0; + + //! Gets the field of view of the camera. + /** \return The field of view of the camera in radians. */ + virtual f32 getFOV() const =0; + + //! Sets the value of the near clipping plane. (default: 1.0f) + /** \param zn: New z near value. */ + virtual void setNearValue(f32 zn) =0; + + //! Sets the value of the far clipping plane (default: 2000.0f) + /** \param zf: New z far value. */ + virtual void setFarValue(f32 zf) =0; + + //! Sets the aspect ratio (default: 4.0f / 3.0f) + /** \param aspect: New aspect ratio. */ + virtual void setAspectRatio(f32 aspect) =0; + + //! Sets the field of view (Default: PI / 2.5f) + /** \param fovy: New field of view in radians. */ + virtual void setFOV(f32 fovy) =0; + + //! Get the view frustum. + /** Needed sometimes by bspTree or LOD render nodes. + \return The current view frustum. */ + virtual const SViewFrustum* getViewFrustum() const =0; + + //! Disables or enables the camera to get key or mouse inputs. + /** If this is set to true, the camera will respond to key + inputs otherwise not. */ + virtual void setInputReceiverEnabled(bool enabled) =0; + + //! Checks if the input receiver of the camera is currently enabled. + virtual bool isInputReceiverEnabled() const =0; + + //! Checks if a camera is orthogonal. + virtual bool isOrthogonal() const + { + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return IsOrthogonal; + } + + //! Binds the camera scene node's rotation to its target position and vice vera, or unbinds them. + /** When bound, calling setRotation() will update the camera's + target position to be along its +Z axis, and likewise calling + setTarget() will update its rotation so that its +Z axis will + point at the target point. FPS camera use this binding by + default; other cameras do not. + \param bound True to bind the camera's scene node rotation + and targetting, false to unbind them. + @see getTargetAndRotationBinding() */ + virtual void bindTargetAndRotation(bool bound) =0; + + //! Queries if the camera scene node's rotation and its target position are bound together. + /** @see bindTargetAndRotation() */ + virtual bool getTargetAndRotationBinding(void) const =0; + + //! Writes attributes of the camera node + virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const + { + ISceneNode::serializeAttributes(out, options); + + if (!out) + return; + out->addBool ("IsOrthogonal", IsOrthogonal ); + } + + //! Reads attributes of the camera node + virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0) + { + ISceneNode::deserializeAttributes(in, options); + if (!in) + return; + + if ( in->findAttribute("IsOrthogonal") ) + IsOrthogonal = in->getAttributeAsBool("IsOrthogonal"); + } + + protected: + + void cloneMembers(ICameraSceneNode* toCopyFrom) + { + IsOrthogonal = toCopyFrom->IsOrthogonal; + } + + bool IsOrthogonal; + }; + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/IColladaMeshWriter.h b/inc/IColladaMeshWriter.h new file mode 100644 index 0000000..6b16319 --- /dev/null +++ b/inc/IColladaMeshWriter.h @@ -0,0 +1,405 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __IRR_I_COLLADA_MESH_WRITER_H_INCLUDED__ +#define __IRR_I_COLLADA_MESH_WRITER_H_INCLUDED__ + +#include "IMeshWriter.h" +#include "ISceneNode.h" +#include "IAnimatedMesh.h" +#include "SMaterial.h" + +namespace irr +{ +namespace io +{ + class IWriteFile; +} // end namespace io + +namespace scene +{ + //! Lighting models - more or less the way Collada categorizes materials + enum E_COLLADA_TECHNIQUE_FX + { + //! Blinn-phong which is default for opengl and dx fixed function pipelines. + //! But several well-known renderers don't support it and prefer phong. + ECTF_BLINN, + //! Phong shading, default in many external renderers. + ECTF_PHONG, + //! diffuse shaded surface that is independent of lighting. + ECTF_LAMBERT, + // constantly shaded surface that is independent of lighting. + ECTF_CONSTANT + }; + + //! How to interpret the opacity in collada + enum E_COLLADA_TRANSPARENT_FX + { + //! default - only alpha channel of color or texture is used. + ECOF_A_ONE = 0, + + //! Alpha values for each RGB channel of color or texture are used. + ECOF_RGB_ZERO = 1 + }; + + //! Color names collada uses in it's color samplers + enum E_COLLADA_COLOR_SAMPLER + { + ECCS_DIFFUSE, + ECCS_AMBIENT, + ECCS_EMISSIVE, + ECCS_SPECULAR, + ECCS_TRANSPARENT, + ECCS_REFLECTIVE + }; + + //! Irrlicht colors which can be mapped to E_COLLADA_COLOR_SAMPLER values + enum E_COLLADA_IRR_COLOR + { + //! Don't write this element at all + ECIC_NONE, + + //! Check IColladaMeshWriterProperties for custom color + ECIC_CUSTOM, + + //! Use SMaterial::DiffuseColor + ECIC_DIFFUSE, + + //! Use SMaterial::AmbientColor + ECIC_AMBIENT, + + //! Use SMaterial::EmissiveColor + ECIC_EMISSIVE, + + //! Use SMaterial::SpecularColor + ECIC_SPECULAR + }; + + //! Control when geometry elements are created + enum E_COLLADA_GEOMETRY_WRITING + { + //! Default - write each mesh exactly once to collada. Optimal but will not work with many tools. + ECGI_PER_MESH, + + //! Write each mesh as often as it's used with different materials-names in the scene. + //! Material names which are used here are created on export, so using the IColladaMeshWriterNames + //! interface you have some control over how many geometries are written. + ECGI_PER_MESH_AND_MATERIAL + }; + + //! Callback interface for properties which can be used to influence collada writing + class IColladaMeshWriterProperties : public virtual IReferenceCounted + { + public: + virtual ~IColladaMeshWriterProperties () {} + + //! Which lighting model should be used in the technique (FX) section when exporting effects (materials) + virtual E_COLLADA_TECHNIQUE_FX getTechniqueFx(const video::SMaterial& material) const = 0; + + //! Which texture index should be used when writing the texture of the given sampler color. + /** \return the index to the texture-layer or -1 if that texture should never be exported + Note: for ECCS_TRANSPARENT by default the alpha channel is used, if you want to use RGB you have to set + also the ECOF_RGB_ZERO flag in getTransparentFx. */ + virtual s32 getTextureIdx(const video::SMaterial & material, E_COLLADA_COLOR_SAMPLER cs) const = 0; + + //! Return which color from Irrlicht should be used for the color requested by collada + /** Note that collada allows exporting either texture or color, not both. + So color mapping is only checked if we have no valid texture already. + By default we try to return best fits when possible. For example ECCS_DIFFUSE is mapped to ECIC_DIFFUSE. + When ECIC_CUSTOM is returned then the result of getCustomColor will be used. */ + virtual E_COLLADA_IRR_COLOR getColorMapping(const video::SMaterial & material, E_COLLADA_COLOR_SAMPLER cs) const = 0; + + //! Return custom colors for certain color types requested by collada. + /** Only used when getColorMapping returns ECIC_CUSTOM for the same paramters. */ + virtual video::SColor getCustomColor(const video::SMaterial & material, E_COLLADA_COLOR_SAMPLER cs) const = 0; + + //! Return the transparence color interpretation. + /** Not this is only about ECCS_TRANSPARENT and does not affect getTransparency. */ + virtual E_COLLADA_TRANSPARENT_FX getTransparentFx(const video::SMaterial& material) const = 0; + + //! Transparency value for that material. + /** This value is additional to transparent settings, if both are set they will be multiplicated. + \return 1.0 for fully transparent, 0.0 for not transparent and not written at all when < 0.f */ + virtual f32 getTransparency(const video::SMaterial& material) const = 0; + + //! Reflectivity value for that material + /** The amount of perfect mirror reflection to be added to the reflected light + \return 0.0 - 1.0 for reflectivity and element is not written at all when < 0.f */ + virtual f32 getReflectivity(const video::SMaterial& material) const = 0; + + //! Return index of refraction for that material + /** By default we don't write that. + \return a value greater equal 0.f to write \ when it is lesser than 0 nothing will be written */ + virtual f32 getIndexOfRefraction(const video::SMaterial& material) const = 0; + + //! Should node be used in scene export? (only needed for scene-writing, ignored in mesh-writing) + //! By default all visible nodes are exported. + virtual bool isExportable(const irr::scene::ISceneNode * node) const = 0; + + //! Return the mesh for the given node. If it has no mesh or shouldn't export it's mesh + //! you can return 0 in which case only the transformation matrix of the node will be used. + // Note: Function is not const because there is no const getMesh() function. + virtual IMesh* getMesh(irr::scene::ISceneNode * node) = 0; + + //! Return if the node has it's own material overwriting the mesh-materials + /** Usually true except for mesh-nodes which have isReadOnlyMaterials set. + This is mostly important for naming (as ISceneNode::getMaterial() already returns the correct material). + You have to override it when exporting custom scenenodes with own materials. + \return true => The node's own material is used, false => ignore node material and use the one from the mesh */ + virtual bool useNodeMaterial(const scene::ISceneNode* node) const = 0; + + }; + + //! Callback interface to use custom names on collada writing. + /** You can either modify names and id's written to collada or you can use + this interface to just find out which names are used on writing. + */ + class IColladaMeshWriterNames : public virtual IReferenceCounted + { + public: + + virtual ~IColladaMeshWriterNames () {} + + //! Return a unique name for the given mesh + /** Note that names really must be unique here per mesh-pointer, so + mostly it's a good idea to return the nameForMesh from + IColladaMeshWriter::getDefaultNameGenerator(). Also names must follow + the xs::NCName standard to be valid, you can run them through + IColladaMeshWriter::toNCName to ensure that. + \param mesh Pointer to the mesh which needs a name + \param instance When E_COLLADA_GEOMETRY_WRITING is not ECGI_PER_MESH then + several instances of the same mesh can be written and this counts them. + */ + virtual irr::core::stringw nameForMesh(const scene::IMesh* mesh, int instance) = 0; + + //! Return a unique name for the given node + /** Note that names really must be unique here per node-pointer, so + mostly it's a good idea to return the nameForNode from + IColladaMeshWriter::getDefaultNameGenerator(). Also names must follow + the xs::NCName standard to be valid, you can run them through + IColladaMeshWriter::toNCName to ensure that. + */ + virtual irr::core::stringw nameForNode(const scene::ISceneNode* node) = 0; + + //! Return a name for the material + /** There is one material created in the writer for each unique name. + So you can use this to control the number of materials which get written. + For example Irrlicht does by default write one material for each material + instanced by a node. So if you know that in your application material + instances per node are identical between different nodes you can reduce + the number of exported materials using that knowledge by using identical + names for such shared materials. + Names must follow the xs::NCName standard to be valid, you can run them + through IColladaMeshWriter::toNCName to ensure that. + */ + virtual irr::core::stringw nameForMaterial(const video::SMaterial & material, int materialId, const scene::IMesh* mesh, const scene::ISceneNode* node) = 0; + }; + + + //! Interface for writing meshes + class IColladaMeshWriter : public IMeshWriter + { + public: + + IColladaMeshWriter() + : Properties(0), DefaultProperties(0), NameGenerator(0), DefaultNameGenerator(0) + , WriteTextures(true), WriteDefaultScene(true), ExportSMaterialOnce(true) + , AmbientLight(0.f, 0.f, 0.f, 1.f) + , GeometryWriting(ECGI_PER_MESH) + { + } + + //! Destructor + virtual ~IColladaMeshWriter() + { + if ( Properties ) + Properties->drop(); + if ( DefaultProperties ) + DefaultProperties->drop(); + if ( NameGenerator ) + NameGenerator->drop(); + if ( DefaultNameGenerator ) + DefaultNameGenerator->drop(); + } + + //! writes a scene starting with the given node + virtual bool writeScene(io::IWriteFile* file, scene::ISceneNode* root) = 0; + + + //! Set if texture information should be written + virtual void setWriteTextures(bool write) + { + WriteTextures = write; + } + + //! Get if texture information should be written + virtual bool getWriteTextures() const + { + return WriteTextures; + } + + //! Set if a default scene should be written when writing meshes. + /** Many collada readers fail to read a mesh if the collada files doesn't contain a scene as well. + The scene is doing an instantiation of the mesh. + When using writeScene this flag is ignored (as we have scene there already) + */ + virtual void setWriteDefaultScene(bool write) + { + WriteDefaultScene = write; + } + + //! Get if a default scene should be written + virtual bool getWriteDefaultScene() const + { + return WriteDefaultScene; + } + + //! Sets ambient color of the scene to write + virtual void setAmbientLight(const video::SColorf &ambientColor) + { + AmbientLight = ambientColor; + } + + //! Return ambient light of the scene which is written + virtual video::SColorf getAmbientLight() const + { + return AmbientLight; + } + + //! Control when and how often a mesh is written + /** Optimally ECGI_PER_MESH would be always sufficent - writing geometry once per mesh. + Unfortunately many tools (at the time of writing this nearly all of them) have trouble + on import when different materials are used per node. So when you override materials + per node and importing the resuling collada has materials problems in other tools try + using other values here. + \param writeStyle One of the E_COLLADA_GEOMETRY_WRITING settings. + */ + virtual void setGeometryWriting(E_COLLADA_GEOMETRY_WRITING writeStyle) + { + GeometryWriting = writeStyle; + } + + //! Get the current style of geometry writing. + virtual E_COLLADA_GEOMETRY_WRITING getGeometryWriting() const + { + return GeometryWriting; + } + + //! Make certain there is only one collada material generated per Irrlicht material + /** Checks before creating a collada material-name if an identical + irr:::video::SMaterial has been exported already. If so don't export it with + another name. This is set by default and leads to way smaller .dae files. + Note that if you need to disable this flag for some reason you can still + get a similar effect using the IColladaMeshWriterNames::nameForMaterial + by returning identical names for identical materials there. + */ + virtual void setExportSMaterialsOnlyOnce(bool exportOnce) + { + ExportSMaterialOnce = exportOnce; + } + + virtual bool getExportSMaterialsOnlyOnce() const + { + return ExportSMaterialOnce; + } + + //! Set properties to use by the meshwriter instead of it's default properties. + /** Overloading properties with an own class allows modifying the writing process in certain ways. + By default properties are set to the DefaultProperties. */ + virtual void setProperties(IColladaMeshWriterProperties * p) + { + if ( p == Properties ) + return; + if ( p ) + p->grab(); + if ( Properties ) + Properties->drop(); + Properties = p; + } + + //! Get properties which are currently used. + virtual IColladaMeshWriterProperties * getProperties() const + { + return Properties; + } + + //! Return the original default properties of the writer. + /** You can use this pointer in your own properties to access and return default values. */ + IColladaMeshWriterProperties * getDefaultProperties() const + { + return DefaultProperties; + } + + //! Install a generator to create custom names on export. + virtual void setNameGenerator(IColladaMeshWriterNames * nameGenerator) + { + if ( nameGenerator == NameGenerator ) + return; + if ( nameGenerator ) + nameGenerator->grab(); + if ( NameGenerator ) + NameGenerator->drop(); + NameGenerator = nameGenerator; + } + + //! Get currently used name generator + virtual IColladaMeshWriterNames * getNameGenerator() const + { + return NameGenerator; + } + + //! Return the original default name generator of the writer. + /** You can use this pointer in your own generator to access and return default values. */ + IColladaMeshWriterNames * getDefaultNameGenerator() const + { + return DefaultNameGenerator; + } + + //! Restrict the characters of oldString a set of allowed characters in xs::NCName and add the prefix. + /** A tool function to help when using a custom name generator to generative valid names for collada names and id's. */ + virtual irr::core::stringw toNCName(const irr::core::stringw& oldString, const irr::core::stringw& prefix=irr::core::stringw(L"_NC_")) const = 0; + + + protected: + // NOTE: You usually should also call setProperties with the same paraemter when using setDefaultProperties + virtual void setDefaultProperties(IColladaMeshWriterProperties * p) + { + if ( p == DefaultProperties ) + return; + if ( p ) + p->grab(); + if ( DefaultProperties ) + DefaultProperties->drop(); + DefaultProperties = p; + } + + // NOTE: You usually should also call setNameGenerator with the same paraemter when using setDefaultProperties + virtual void setDefaultNameGenerator(IColladaMeshWriterNames * p) + { + if ( p == DefaultNameGenerator ) + return; + if ( p ) + p->grab(); + if ( DefaultNameGenerator ) + DefaultNameGenerator->drop(); + DefaultNameGenerator = p; + } + + private: + IColladaMeshWriterProperties * Properties; + IColladaMeshWriterProperties * DefaultProperties; + IColladaMeshWriterNames * NameGenerator; + IColladaMeshWriterNames * DefaultNameGenerator; + bool WriteTextures; + bool WriteDefaultScene; + bool ExportSMaterialOnce; + video::SColorf AmbientLight; + E_COLLADA_GEOMETRY_WRITING GeometryWriting; + }; + + +} // end namespace +} // end namespace + +#endif diff --git a/inc/ICursorControl.h b/inc/ICursorControl.h new file mode 100644 index 0000000..8e6bc1e --- /dev/null +++ b/inc/ICursorControl.h @@ -0,0 +1,192 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_CURSOR_CONTROL_H_INCLUDED__ +#define __I_CURSOR_CONTROL_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "position2d.h" +#include "rect.h" + +namespace irr +{ +namespace gui +{ + + class IGUISpriteBank; + + //! Default icons for cursors + enum ECURSOR_ICON + { + // Following cursors might be system specific, or might use an Irrlicht icon-set. No guarantees so far. + ECI_NORMAL, // arrow + ECI_CROSS, // Crosshair + ECI_HAND, // Hand + ECI_HELP, // Arrow and question mark + ECI_IBEAM, // typical text-selection cursor + ECI_NO, // should not click icon + ECI_WAIT, // hourclass + ECI_SIZEALL, // arrow in all directions + ECI_SIZENESW, // resizes in direction north-east or south-west + ECI_SIZENWSE, // resizes in direction north-west or south-east + ECI_SIZENS, // resizes in direction north or south + ECI_SIZEWE, // resizes in direction west or east + ECI_UP, // up-arrow + + // Implementer note: Should we add system specific cursors, which use guaranteed the system icons, + // then I would recommend using a naming scheme like ECI_W32_CROSS, ECI_X11_CROSSHAIR and adding those + // additionally. + + ECI_COUNT // maximal of defined cursors. Note that higher values can be created at runtime + }; + + //! Names for ECURSOR_ICON + const c8* const GUICursorIconNames[ECI_COUNT+1] = + { + "normal", + "cross", + "hand", + "help", + "ibeam", + "no", + "wait", + "sizeall", + "sizenesw", + "sizenwse", + "sizens", + "sizewe", + "sizeup", + 0 + }; + + //! structure used to set sprites as cursors. + struct SCursorSprite + { + SCursorSprite() + : SpriteBank(0), SpriteId(-1) + { + } + + SCursorSprite( gui::IGUISpriteBank * spriteBank, s32 spriteId, const core::position2d &hotspot=(core::position2d(0,0)) ) + : SpriteBank(spriteBank), SpriteId(spriteId), HotSpot(hotspot) + { + } + + IGUISpriteBank * SpriteBank; + s32 SpriteId; + core::position2d HotSpot; + }; + + //! platform specific behavior flags for the cursor + enum ECURSOR_PLATFORM_BEHAVIOR + { + //! default - no platform specific behavior + ECPB_NONE = 0, + + //! On X11 try caching cursor updates as XQueryPointer calls can be expensive. + /** Update cursor positions only when the irrlicht timer has been updated or the timer is stopped. + This means you usually get one cursor update per device->run() which will be fine in most cases. + See this forum-thread for a more detailed explanation: + http://irrlicht.sourceforge.net/forum/viewtopic.php?f=7&t=45525 + */ + ECPB_X11_CACHE_UPDATES = 1 + }; + + //! Interface to manipulate the mouse cursor. + class ICursorControl : public virtual IReferenceCounted + { + public: + + //! Changes the visible state of the mouse cursor. + /** \param visible: The new visible state. If true, the cursor will be visible, + if false, it will be invisible. */ + virtual void setVisible(bool visible) = 0; + + //! Returns if the cursor is currently visible. + /** \return True if the cursor is visible, false if not. */ + virtual bool isVisible() const = 0; + + //! Sets the new position of the cursor. + /** The position must be + between (0.0f, 0.0f) and (1.0f, 1.0f), where (0.0f, 0.0f) is + the top left corner and (1.0f, 1.0f) is the bottom right corner of the + render window. + \param pos New position of the cursor. */ + virtual void setPosition(const core::position2d &pos) = 0; + + //! Sets the new position of the cursor. + /** The position must be + between (0.0f, 0.0f) and (1.0f, 1.0f), where (0.0f, 0.0f) is + the top left corner and (1.0f, 1.0f) is the bottom right corner of the + render window. + \param x New x-coord of the cursor. + \param y New x-coord of the cursor. */ + virtual void setPosition(f32 x, f32 y) = 0; + + //! Sets the new position of the cursor. + /** \param pos: New position of the cursor. The coordinates are pixel units. */ + virtual void setPosition(const core::position2d &pos) = 0; + + //! Sets the new position of the cursor. + /** \param x New x-coord of the cursor. The coordinates are pixel units. + \param y New y-coord of the cursor. The coordinates are pixel units. */ + virtual void setPosition(s32 x, s32 y) = 0; + + //! Returns the current position of the mouse cursor. + /** \return Returns the current position of the cursor. The returned position + is the position of the mouse cursor in pixel units. */ + virtual const core::position2d& getPosition() = 0; + + //! Returns the current position of the mouse cursor. + /** \return Returns the current position of the cursor. The returned position + is a value between (0.0f, 0.0f) and (1.0f, 1.0f), where (0.0f, 0.0f) is + the top left corner and (1.0f, 1.0f) is the bottom right corner of the + render window. */ + virtual core::position2d getRelativePosition() = 0; + + //! Sets an absolute reference rect for setting and retrieving the cursor position. + /** If this rect is set, the cursor position is not being calculated relative to + the rendering window but to this rect. You can set the rect pointer to 0 to disable + this feature again. This feature is useful when rendering into parts of foreign windows + for example in an editor. + \param rect: A pointer to an reference rectangle or 0 to disable the reference rectangle.*/ + virtual void setReferenceRect(core::rect* rect=0) = 0; + + + //! Sets the active cursor icon + /** Setting cursor icons is so far only supported on Win32 and Linux */ + virtual void setActiveIcon(ECURSOR_ICON iconId) {} + + //! Gets the currently active icon + virtual ECURSOR_ICON getActiveIcon() const { return gui::ECI_NORMAL; } + + //! Add a custom sprite as cursor icon. + /** \return Identification for the icon */ + virtual ECURSOR_ICON addIcon(const gui::SCursorSprite& icon) { return gui::ECI_NORMAL; } + + //! replace a cursor icon. + /** Changing cursor icons is so far only supported on Win32 and Linux + Note that this only changes the icons within your application, system cursors outside your + application will not be affected. + */ + virtual void changeIcon(ECURSOR_ICON iconId, const gui::SCursorSprite& sprite) {} + + //! Return a system-specific size which is supported for cursors. Larger icons will fail, smaller icons might work. + virtual core::dimension2di getSupportedIconSize() const { return core::dimension2di(0,0); } + + //! Set platform specific behavior flags. + virtual void setPlatformBehavior(ECURSOR_PLATFORM_BEHAVIOR behavior) {} + + //! Return platform specific behavior. + /** \return Behavior set by setPlatformBehavior or ECPB_NONE for platforms not implementing specific behaviors. + */ + virtual ECURSOR_PLATFORM_BEHAVIOR getPlatformBehavior() const { return ECPB_NONE; } + }; + + +} // end namespace gui +} // end namespace irr + +#endif + diff --git a/inc/IDummyTransformationSceneNode.h b/inc/IDummyTransformationSceneNode.h new file mode 100644 index 0000000..d5e7f00 --- /dev/null +++ b/inc/IDummyTransformationSceneNode.h @@ -0,0 +1,42 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_DUMMY_TRANSFORMATION_SCENE_NODE_H_INCLUDED__ +#define __I_DUMMY_TRANSFORMATION_SCENE_NODE_H_INCLUDED__ + +#include "ISceneNode.h" + +namespace irr +{ +namespace scene +{ + +//! Dummy scene node for adding additional transformations to the scene graph. +/** This scene node does not render itself, and does not respond to set/getPosition, +set/getRotation and set/getScale. Its just a simple scene node that takes a +matrix as relative transformation, making it possible to insert any transformation +anywhere into the scene graph. +This scene node is for example used by the IAnimatedMeshSceneNode for emulating +joint scene nodes when playing skeletal animations. +*/ +class IDummyTransformationSceneNode : public ISceneNode +{ +public: + + //! Constructor + IDummyTransformationSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id) + : ISceneNode(parent, mgr, id) {} + + //! Returns a reference to the current relative transformation matrix. + /** This is the matrix, this scene node uses instead of scale, translation + and rotation. */ + virtual core::matrix4& getRelativeTransformationMatrix() = 0; +}; + +} // end namespace scene +} // end namespace irr + + +#endif + diff --git a/inc/IDynamicMeshBuffer.h b/inc/IDynamicMeshBuffer.h new file mode 100644 index 0000000..24434df --- /dev/null +++ b/inc/IDynamicMeshBuffer.h @@ -0,0 +1,211 @@ +// Copyright (C) 2008-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_DYNAMIC_MESH_BUFFER_H_INCLUDED__ +#define __I_DYNAMIC_MESH_BUFFER_H_INCLUDED__ + +#include "IMeshBuffer.h" +#include "IVertexBuffer.h" +#include "IIndexBuffer.h" + +namespace irr +{ +namespace scene +{ + + /** a dynamic meshBuffer */ + class IDynamicMeshBuffer : public IMeshBuffer + { + public: + virtual IVertexBuffer &getVertexBuffer() const =0; + virtual IIndexBuffer &getIndexBuffer() const =0; + + virtual void setVertexBuffer(IVertexBuffer *vertexBuffer) =0; + virtual void setIndexBuffer(IIndexBuffer *indexBuffer) =0; + + //! Get the material of this meshbuffer + /** \return Material of this buffer. */ + virtual video::SMaterial& getMaterial() =0; + + //! Get the material of this meshbuffer + /** \return Material of this buffer. */ + virtual const video::SMaterial& getMaterial() const =0; + + //! Get the axis aligned bounding box of this meshbuffer. + /** \return Axis aligned bounding box of this buffer. */ + virtual const core::aabbox3df& getBoundingBox() const =0; + + //! Set axis aligned bounding box + /** \param box User defined axis aligned bounding box to use + for this buffer. */ + virtual void setBoundingBox(const core::aabbox3df& box) =0; + + //! Recalculates the bounding box. Should be called if the mesh changed. + virtual void recalculateBoundingBox() =0; + + //! Append the vertices and indices to the current buffer + /** Only works for compatible vertex types. + \param vertices Pointer to a vertex array. + \param numVertices Number of vertices in the array. + \param indices Pointer to index array. + \param numIndices Number of indices in array. */ + virtual void append(const void* const vertices, u32 numVertices, const u16* const indices, u32 numIndices) + { + + } + + //! Append the meshbuffer to the current buffer + /** Only works for compatible vertex types + \param other Buffer to append to this one. */ + virtual void append(const IMeshBuffer* const other) + { + + } + + // ------------------- To be removed? ------------------- // + + //! get the current hardware mapping hint + virtual E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const + { + return getVertexBuffer().getHardwareMappingHint(); + } + + //! get the current hardware mapping hint + virtual E_HARDWARE_MAPPING getHardwareMappingHint_Index() const + { + return getIndexBuffer().getHardwareMappingHint(); + } + + //! set the hardware mapping hint, for driver + virtual void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint, E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX ) + { + if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_VERTEX) + getVertexBuffer().setHardwareMappingHint(NewMappingHint); + if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_INDEX) + getIndexBuffer().setHardwareMappingHint(NewMappingHint); + } + + //! flags the mesh as changed, reloads hardware buffers + virtual void setDirty(E_BUFFER_TYPE Buffer=EBT_VERTEX_AND_INDEX) + { + if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_VERTEX) + getVertexBuffer().setDirty(); + if (Buffer==EBT_VERTEX_AND_INDEX || Buffer==EBT_INDEX) + getIndexBuffer().setDirty(); + } + + virtual u32 getChangedID_Vertex() const + { + return getVertexBuffer().getChangedID(); + } + + virtual u32 getChangedID_Index() const + { + return getIndexBuffer().getChangedID(); + } + + // ------------------- Old interface ------------------- // + + //! Get type of vertex data which is stored in this meshbuffer. + /** \return Vertex type of this buffer. */ + virtual video::E_VERTEX_TYPE getVertexType() const + { + return getVertexBuffer().getType(); + } + + //! Get access to vertex data. The data is an array of vertices. + /** Which vertex type is used can be determined by getVertexType(). + \return Pointer to array of vertices. */ + virtual const void* getVertices() const + { + return getVertexBuffer().getData(); + } + + //! Get access to vertex data. The data is an array of vertices. + /** Which vertex type is used can be determined by getVertexType(). + \return Pointer to array of vertices. */ + virtual void* getVertices() + { + return getVertexBuffer().getData(); + } + + //! Get amount of vertices in meshbuffer. + /** \return Number of vertices in this buffer. */ + virtual u32 getVertexCount() const + { + return getVertexBuffer().size(); + } + + //! Get type of index data which is stored in this meshbuffer. + /** \return Index type of this buffer. */ + virtual video::E_INDEX_TYPE getIndexType() const + { + return getIndexBuffer().getType(); + } + + //! Get access to Indices. + /** \return Pointer to indices array. */ + virtual const u16* getIndices() const + { + return (u16*)getIndexBuffer().getData(); + } + + //! Get access to Indices. + /** \return Pointer to indices array. */ + virtual u16* getIndices() + { + return (u16*)getIndexBuffer().getData(); + } + + //! Get amount of indices in this meshbuffer. + /** \return Number of indices in this buffer. */ + virtual u32 getIndexCount() const + { + return getIndexBuffer().size(); + } + + //! returns position of vertex i + virtual const core::vector3df& getPosition(u32 i) const + { + return getVertexBuffer()[i].Pos; + } + + //! returns position of vertex i + virtual core::vector3df& getPosition(u32 i) + { + return getVertexBuffer()[i].Pos; + } + + //! returns texture coords of vertex i + virtual const core::vector2df& getTCoords(u32 i) const + { + return getVertexBuffer()[i].TCoords; + } + + //! returns texture coords of vertex i + virtual core::vector2df& getTCoords(u32 i) + { + return getVertexBuffer()[i].TCoords; + } + + //! returns normal of vertex i + virtual const core::vector3df& getNormal(u32 i) const + { + return getVertexBuffer()[i].Normal; + } + + //! returns normal of vertex i + virtual core::vector3df& getNormal(u32 i) + { + return getVertexBuffer()[i].Normal; + } + }; + + +} // end namespace scene +} // end namespace irr + +#endif + + diff --git a/inc/IEventReceiver.h b/inc/IEventReceiver.h new file mode 100644 index 0000000..9c7813f --- /dev/null +++ b/inc/IEventReceiver.h @@ -0,0 +1,490 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_EVENT_RECEIVER_H_INCLUDED__ +#define __I_EVENT_RECEIVER_H_INCLUDED__ + +#include "ILogger.h" +#include "Keycodes.h" +#include "irrString.h" + +namespace irr +{ + //! Enumeration for all event types there are. + enum EEVENT_TYPE + { + //! An event of the graphical user interface. + /** GUI events are created by the GUI environment or the GUI elements in response + to mouse or keyboard events. When a GUI element receives an event it will either + process it and return true, or pass the event to its parent. If an event is not absorbed + before it reaches the root element then it will then be passed to the user receiver. */ + EET_GUI_EVENT = 0, + + //! A mouse input event. + /** Mouse events are created by the device and passed to IrrlichtDevice::postEventFromUser + in response to mouse input received from the operating system. + Mouse events are first passed to the user receiver, then to the GUI environment and its elements, + then finally the input receiving scene manager where it is passed to the active camera. + */ + EET_MOUSE_INPUT_EVENT, + + //! A key input event. + /** Like mouse events, keyboard events are created by the device and passed to + IrrlichtDevice::postEventFromUser. They take the same path as mouse events. */ + EET_KEY_INPUT_EVENT, + + //! A joystick (joypad, gamepad) input event. + /** Joystick events are created by polling all connected joysticks once per + device run() and then passing the events to IrrlichtDevice::postEventFromUser. + They take the same path as mouse events. + Windows, SDL: Implemented. + Linux: Implemented, with POV hat issues. + MacOS / Other: Not yet implemented. + */ + EET_JOYSTICK_INPUT_EVENT, + + //! A log event + /** Log events are only passed to the user receiver if there is one. If they are absorbed by the + user receiver then no text will be sent to the console. */ + EET_LOG_TEXT_EVENT, + + //! A user event with user data. + /** This is not used by Irrlicht and can be used to send user + specific data though the system. The Irrlicht 'window handle' + can be obtained from IrrlichtDevice::getExposedVideoData() + The usage and behavior depends on the operating system: + Windows: send a WM_USER message to the Irrlicht Window; the + wParam and lParam will be used to populate the + UserData1 and UserData2 members of the SUserEvent. + Linux: send a ClientMessage via XSendEvent to the Irrlicht + Window; the data.l[0] and data.l[1] members will be + casted to s32 and used as UserData1 and UserData2. + MacOS: Not yet implemented + */ + EET_USER_EVENT, + + //! This enum is never used, it only forces the compiler to + //! compile these enumeration values to 32 bit. + EGUIET_FORCE_32_BIT = 0x7fffffff + + }; + + //! Enumeration for all mouse input events + enum EMOUSE_INPUT_EVENT + { + //! Left mouse button was pressed down. + EMIE_LMOUSE_PRESSED_DOWN = 0, + + //! Right mouse button was pressed down. + EMIE_RMOUSE_PRESSED_DOWN, + + //! Middle mouse button was pressed down. + EMIE_MMOUSE_PRESSED_DOWN, + + //! Left mouse button was left up. + EMIE_LMOUSE_LEFT_UP, + + //! Right mouse button was left up. + EMIE_RMOUSE_LEFT_UP, + + //! Middle mouse button was left up. + EMIE_MMOUSE_LEFT_UP, + + //! The mouse cursor changed its position. + EMIE_MOUSE_MOVED, + + //! The mouse wheel was moved. Use Wheel value in event data to find out + //! in what direction and how fast. + EMIE_MOUSE_WHEEL, + + //! Left mouse button double click. + //! This event is generated after the second EMIE_LMOUSE_PRESSED_DOWN event. + EMIE_LMOUSE_DOUBLE_CLICK, + + //! Right mouse button double click. + //! This event is generated after the second EMIE_RMOUSE_PRESSED_DOWN event. + EMIE_RMOUSE_DOUBLE_CLICK, + + //! Middle mouse button double click. + //! This event is generated after the second EMIE_MMOUSE_PRESSED_DOWN event. + EMIE_MMOUSE_DOUBLE_CLICK, + + //! Left mouse button triple click. + //! This event is generated after the third EMIE_LMOUSE_PRESSED_DOWN event. + EMIE_LMOUSE_TRIPLE_CLICK, + + //! Right mouse button triple click. + //! This event is generated after the third EMIE_RMOUSE_PRESSED_DOWN event. + EMIE_RMOUSE_TRIPLE_CLICK, + + //! Middle mouse button triple click. + //! This event is generated after the third EMIE_MMOUSE_PRESSED_DOWN event. + EMIE_MMOUSE_TRIPLE_CLICK, + + //! No real event. Just for convenience to get number of events + EMIE_COUNT + }; + + //! Masks for mouse button states + enum E_MOUSE_BUTTON_STATE_MASK + { + EMBSM_LEFT = 0x01, + EMBSM_RIGHT = 0x02, + EMBSM_MIDDLE = 0x04, + + //! currently only on windows + EMBSM_EXTRA1 = 0x08, + + //! currently only on windows + EMBSM_EXTRA2 = 0x10, + + EMBSM_FORCE_32_BIT = 0x7fffffff + }; + + namespace gui + { + + class IGUIElement; + + //! Enumeration for all events which are sendable by the gui system + enum EGUI_EVENT_TYPE + { + //! A gui element has lost its focus. + /** GUIEvent.Caller is losing the focus to GUIEvent.Element. + If the event is absorbed then the focus will not be changed. */ + EGET_ELEMENT_FOCUS_LOST = 0, + + //! A gui element has got the focus. + /** If the event is absorbed then the focus will not be changed. */ + EGET_ELEMENT_FOCUSED, + + //! The mouse cursor hovered over a gui element. + /** If an element has sub-elements you also get this message for the subelements */ + EGET_ELEMENT_HOVERED, + + //! The mouse cursor left the hovered element. + /** If an element has sub-elements you also get this message for the subelements */ + EGET_ELEMENT_LEFT, + + //! An element would like to close. + /** Windows and context menus use this event when they would like to close, + this can be cancelled by absorbing the event. */ + EGET_ELEMENT_CLOSED, + + //! A button was clicked. + EGET_BUTTON_CLICKED, + + //! A scrollbar has changed its position. + EGET_SCROLL_BAR_CHANGED, + + //! A checkbox has changed its check state. + EGET_CHECKBOX_CHANGED, + + //! A new item in a listbox was selected. + /** NOTE: You also get this event currently when the same item was clicked again after more than 500 ms. */ + EGET_LISTBOX_CHANGED, + + //! An item in the listbox was selected, which was already selected. + /** NOTE: You get the event currently only if the item was clicked again within 500 ms or selected by "enter" or "space". */ + EGET_LISTBOX_SELECTED_AGAIN, + + //! A file has been selected in the file dialog + EGET_FILE_SELECTED, + + //! A directory has been selected in the file dialog + EGET_DIRECTORY_SELECTED, + + //! A file open dialog has been closed without choosing a file + EGET_FILE_CHOOSE_DIALOG_CANCELLED, + + //! 'Yes' was clicked on a messagebox + EGET_MESSAGEBOX_YES, + + //! 'No' was clicked on a messagebox + EGET_MESSAGEBOX_NO, + + //! 'OK' was clicked on a messagebox + EGET_MESSAGEBOX_OK, + + //! 'Cancel' was clicked on a messagebox + EGET_MESSAGEBOX_CANCEL, + + //! In an editbox 'ENTER' was pressed + EGET_EDITBOX_ENTER, + + //! The text in an editbox was changed. This does not include automatic changes in text-breaking. + EGET_EDITBOX_CHANGED, + + //! The marked area in an editbox was changed. + EGET_EDITBOX_MARKING_CHANGED, + + //! The tab was changed in an tab control + EGET_TAB_CHANGED, + + //! A menu item was selected in a (context) menu + EGET_MENU_ITEM_SELECTED, + + //! The selection in a combo box has been changed + EGET_COMBO_BOX_CHANGED, + + //! The value of a spin box has changed + EGET_SPINBOX_CHANGED, + + //! A table has changed + EGET_TABLE_CHANGED, + EGET_TABLE_HEADER_CHANGED, + EGET_TABLE_SELECTED_AGAIN, + + //! A tree view node lost selection. See IGUITreeView::getLastEventNode(). + EGET_TREEVIEW_NODE_DESELECT, + + //! A tree view node was selected. See IGUITreeView::getLastEventNode(). + EGET_TREEVIEW_NODE_SELECT, + + //! A tree view node was expanded. See IGUITreeView::getLastEventNode(). + EGET_TREEVIEW_NODE_EXPAND, + + //! A tree view node was collapsed. See IGUITreeView::getLastEventNode(). + EGET_TREEVIEW_NODE_COLLAPSE, + + //! deprecated - use EGET_TREEVIEW_NODE_COLLAPSE instead. This + //! may be removed by Irrlicht 1.9 + EGET_TREEVIEW_NODE_COLLAPS = EGET_TREEVIEW_NODE_COLLAPSE, + + //! No real event. Just for convenience to get number of events + EGET_COUNT + }; + } // end namespace gui + + +//! SEvents hold information about an event. See irr::IEventReceiver for details on event handling. +struct SEvent +{ + //! Any kind of GUI event. + struct SGUIEvent + { + //! IGUIElement who called the event + gui::IGUIElement* Caller; + + //! If the event has something to do with another element, it will be held here. + gui::IGUIElement* Element; + + //! Type of GUI Event + gui::EGUI_EVENT_TYPE EventType; + + }; + + //! Any kind of mouse event. + struct SMouseInput + { + //! X position of mouse cursor + s32 X; + + //! Y position of mouse cursor + s32 Y; + + //! mouse wheel delta, often 1.0 or -1.0, but can have other values < 0.f or > 0.f; + /** Only valid if event was EMIE_MOUSE_WHEEL */ + f32 Wheel; + + //! True if shift was also pressed + bool Shift:1; + + //! True if ctrl was also pressed + bool Control:1; + + //! A bitmap of button states. You can use isButtonPressed() to determine + //! if a button is pressed or not. + //! Currently only valid if the event was EMIE_MOUSE_MOVED + u32 ButtonStates; + + //! Is the left button pressed down? + bool isLeftPressed() const { return 0 != ( ButtonStates & EMBSM_LEFT ); } + + //! Is the right button pressed down? + bool isRightPressed() const { return 0 != ( ButtonStates & EMBSM_RIGHT ); } + + //! Is the middle button pressed down? + bool isMiddlePressed() const { return 0 != ( ButtonStates & EMBSM_MIDDLE ); } + + //! Type of mouse event + EMOUSE_INPUT_EVENT Event; + }; + + //! Any kind of keyboard event. + struct SKeyInput + { + //! Character corresponding to the key (0, if not a character) + wchar_t Char; + + //! Key which has been pressed or released + EKEY_CODE Key; + + //! If not true, then the key was left up + bool PressedDown:1; + + //! True if shift was also pressed + bool Shift:1; + + //! True if ctrl was also pressed + bool Control:1; + }; + + //! A joystick event. + /** Unlike other events, joystick events represent the result of polling + * each connected joystick once per run() of the device. Joystick events will + * not be generated by default. If joystick support is available for the + * active device, _IRR_COMPILE_WITH_JOYSTICK_EVENTS_ is defined, and + * @ref irr::IrrlichtDevice::activateJoysticks() has been called, an event of + * this type will be generated once per joystick per @ref IrrlichtDevice::run() + * regardless of whether the state of the joystick has actually changed. */ + struct SJoystickEvent + { + enum + { + NUMBER_OF_BUTTONS = 32, + + AXIS_X = 0, // e.g. analog stick 1 left to right + AXIS_Y, // e.g. analog stick 1 top to bottom + AXIS_Z, // e.g. throttle, or analog 2 stick 2 left to right + AXIS_R, // e.g. rudder, or analog 2 stick 2 top to bottom + AXIS_U, + AXIS_V, + NUMBER_OF_AXES + }; + + /** A bitmap of button states. You can use IsButtonPressed() to + ( check the state of each button from 0 to (NUMBER_OF_BUTTONS - 1) */ + u32 ButtonStates; + + /** For AXIS_X, AXIS_Y, AXIS_Z, AXIS_R, AXIS_U and AXIS_V + * Values are in the range -32768 to 32767, with 0 representing + * the center position. You will receive the raw value from the + * joystick, and so will usually want to implement a dead zone around + * the center of the range. Axes not supported by this joystick will + * always have a value of 0. On Linux, POV hats are represented as axes, + * usually the last two active axis. + */ + s16 Axis[NUMBER_OF_AXES]; + + /** The POV represents the angle of the POV hat in degrees * 100, + * from 0 to 35,900. A value of 65535 indicates that the POV hat + * is centered (or not present). + * This value is only supported on Windows. On Linux, the POV hat + * will be sent as 2 axes instead. */ + u16 POV; + + //! The ID of the joystick which generated this event. + /** This is an internal Irrlicht index; it does not map directly + * to any particular hardware joystick. */ + u8 Joystick; + + //! A helper function to check if a button is pressed. + bool IsButtonPressed(u32 button) const + { + if(button >= (u32)NUMBER_OF_BUTTONS) + return false; + + return (ButtonStates & (1 << button)) ? true : false; + } + }; + + + //! Any kind of log event. + struct SLogEvent + { + //! Pointer to text which has been logged + const c8* Text; + + //! Log level in which the text has been logged + ELOG_LEVEL Level; + }; + + //! Any kind of user event. + struct SUserEvent + { + //! Some user specified data as int + s32 UserData1; + + //! Another user specified data as int + s32 UserData2; + }; + + EEVENT_TYPE EventType; + union + { + struct SGUIEvent GUIEvent; + struct SMouseInput MouseInput; + struct SKeyInput KeyInput; + struct SJoystickEvent JoystickEvent; + struct SLogEvent LogEvent; + struct SUserEvent UserEvent; + }; + +}; + +//! Interface of an object which can receive events. +/** Many of the engine's classes inherit IEventReceiver so they are able to +process events. Events usually start at a postEventFromUser function and are +passed down through a chain of event receivers until OnEvent returns true. See +irr::EEVENT_TYPE for a description of where each type of event starts, and the +path it takes through the system. */ +class IEventReceiver +{ +public: + + //! Destructor + virtual ~IEventReceiver() {} + + //! Called if an event happened. + /** Please take care that you should only return 'true' when you want to _prevent_ Irrlicht + * from processing the event any further. So 'true' does mean that an event is completely done. + * Therefore your return value for all unprocessed events should be 'false'. + \return True if the event was processed. + */ + virtual bool OnEvent(const SEvent& event) = 0; +}; + + +//! Information on a joystick, returned from @ref irr::IrrlichtDevice::activateJoysticks() +struct SJoystickInfo +{ + //! The ID of the joystick + /** This is an internal Irrlicht index; it does not map directly + * to any particular hardware joystick. It corresponds to the + * irr::SJoystickEvent Joystick ID. */ + u8 Joystick; + + //! The name that the joystick uses to identify itself. + core::stringc Name; + + //! The number of buttons that the joystick has. + u32 Buttons; + + //! The number of axes that the joystick has, i.e. X, Y, Z, R, U, V. + /** Note: with a Linux device, the POV hat (if any) will use two axes. These + * will be included in this count. */ + u32 Axes; + + //! An indication of whether the joystick has a POV hat. + /** A Windows device will identify the presence or absence or the POV hat. A + * Linux device cannot, and will always return POV_HAT_UNKNOWN. */ + enum + { + //! A hat is definitely present. + POV_HAT_PRESENT, + + //! A hat is definitely not present. + POV_HAT_ABSENT, + + //! The presence or absence of a hat cannot be determined. + POV_HAT_UNKNOWN + } PovHat; +}; // struct SJoystickInfo + + +} // end namespace irr + +#endif + diff --git a/inc/IFileArchive.h b/inc/IFileArchive.h new file mode 100644 index 0000000..8bf8cad --- /dev/null +++ b/inc/IFileArchive.h @@ -0,0 +1,132 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt/ Thomas Alten +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_FILE_ARCHIVE_H_INCLUDED__ +#define __I_FILE_ARCHIVE_H_INCLUDED__ + +#include "IReadFile.h" +#include "IFileList.h" + +namespace irr +{ + +namespace io +{ + +//! FileSystemType: which Filesystem should be used for e.g. browsing +enum EFileSystemType +{ + FILESYSTEM_NATIVE = 0, // Native OS FileSystem + FILESYSTEM_VIRTUAL // Virtual FileSystem +}; + +//! Contains the different types of archives +enum E_FILE_ARCHIVE_TYPE +{ + //! A PKZIP archive + EFAT_ZIP = MAKE_IRR_ID('Z','I','P', 0), + + //! A gzip archive + EFAT_GZIP = MAKE_IRR_ID('g','z','i','p'), + + //! A virtual directory + EFAT_FOLDER = MAKE_IRR_ID('f','l','d','r'), + + //! An ID Software PAK archive + EFAT_PAK = MAKE_IRR_ID('P','A','K', 0), + + //! A Nebula Device archive + EFAT_NPK = MAKE_IRR_ID('N','P','K', 0), + + //! A Tape ARchive + EFAT_TAR = MAKE_IRR_ID('T','A','R', 0), + + //! A wad Archive, Quake2, Halflife + EFAT_WAD = MAKE_IRR_ID('W','A','D', 0), + + //! The type of this archive is unknown + EFAT_UNKNOWN = MAKE_IRR_ID('u','n','k','n') +}; + +//! The FileArchive manages archives and provides access to files inside them. +class IFileArchive : public virtual IReferenceCounted +{ +public: + + //! Opens a file based on its name + /** Creates and returns a new IReadFile for a file in the archive. + \param filename The file to open + \return Returns A pointer to the created file on success, + or 0 on failure. */ + virtual IReadFile* createAndOpenFile(const path& filename) =0; + + //! Opens a file based on its position in the file list. + /** Creates and returns + \param index The zero based index of the file. + \return Returns a pointer to the created file on success, or 0 on failure. */ + virtual IReadFile* createAndOpenFile(u32 index) =0; + + //! Returns the complete file tree + /** \return Returns the complete directory tree for the archive, + including all files and folders */ + virtual const IFileList* getFileList() const =0; + + //! get the archive type + virtual E_FILE_ARCHIVE_TYPE getType() const { return EFAT_UNKNOWN; } + + //! An optionally used password string + /** This variable is publicly accessible from the interface in order to + avoid single access patterns to this place, and hence allow some more + obscurity. + */ + core::stringc Password; +}; + +//! Class which is able to create an archive from a file. +/** If you want the Irrlicht Engine be able to load archives of +currently unsupported file formats (e.g .wad), then implement +this and add your new Archive loader with +IFileSystem::addArchiveLoader() to the engine. */ +class IArchiveLoader : public virtual IReferenceCounted +{ +public: + //! Check if the file might be loaded by this class + /** Check based on the file extension (e.g. ".zip") + \param filename Name of file to check. + \return True if file seems to be loadable. */ + virtual bool isALoadableFileFormat(const path& filename) const =0; + + //! Check if the file might be loaded by this class + /** This check may look into the file. + \param file File handle to check. + \return True if file seems to be loadable. */ + virtual bool isALoadableFileFormat(io::IReadFile* file) const =0; + + //! Check to see if the loader can create archives of this type. + /** Check based on the archive type. + \param fileType The archive type to check. + \return True if the archile loader supports this type, false if not */ + virtual bool isALoadableFileFormat(E_FILE_ARCHIVE_TYPE fileType) const =0; + + //! Creates an archive from the filename + /** \param filename File to use. + \param ignoreCase Searching is performed without regarding the case + \param ignorePaths Files are searched for without checking for the directories + \return Pointer to newly created archive, or 0 upon error. */ + virtual IFileArchive* createArchive(const path& filename, bool ignoreCase, bool ignorePaths) const =0; + + //! Creates an archive from the file + /** \param file File handle to use. + \param ignoreCase Searching is performed without regarding the case + \param ignorePaths Files are searched for without checking for the directories + \return Pointer to newly created archive, or 0 upon error. */ + virtual IFileArchive* createArchive(io::IReadFile* file, bool ignoreCase, bool ignorePaths) const =0; +}; + + +} // end namespace io +} // end namespace irr + +#endif + diff --git a/inc/IFileList.h b/inc/IFileList.h new file mode 100644 index 0000000..2eabd7c --- /dev/null +++ b/inc/IFileList.h @@ -0,0 +1,94 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_FILE_LIST_H_INCLUDED__ +#define __I_FILE_LIST_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "path.h" + +namespace irr +{ +namespace io +{ + +//! Provides a list of files and folders. +/** File lists usually contain a list of all files in a given folder, +but can also contain a complete directory structure. */ +class IFileList : public virtual IReferenceCounted +{ +public: + //! Get the number of files in the filelist. + /** \return Amount of files and directories in the file list. */ + virtual u32 getFileCount() const = 0; + + //! Gets the name of a file in the list, based on an index. + /** The path is not included in this name. Use getFullFileName for this. + \param index is the zero based index of the file which name should + be returned. The index must be less than the amount getFileCount() returns. + \return File name of the file. Returns 0, if an error occured. */ + virtual const io::path& getFileName(u32 index) const = 0; + + //! Gets the full name of a file in the list including the path, based on an index. + /** \param index is the zero based index of the file which name should + be returned. The index must be less than the amount getFileCount() returns. + \return File name of the file. Returns 0 if an error occured. */ + virtual const io::path& getFullFileName(u32 index) const = 0; + + //! Returns the size of a file in the file list, based on an index. + /** \param index is the zero based index of the file which should be returned. + The index must be less than the amount getFileCount() returns. + \return The size of the file in bytes. */ + virtual u32 getFileSize(u32 index) const = 0; + + //! Returns the file offset of a file in the file list, based on an index. + /** \param index is the zero based index of the file which should be returned. + The index must be less than the amount getFileCount() returns. + \return The offset of the file in bytes. */ + virtual u32 getFileOffset(u32 index) const = 0; + + //! Returns the ID of a file in the file list, based on an index. + /** This optional ID can be used to link the file list entry to information held + elsewhere. For example this could be an index in an IFileArchive, linking the entry + to its data offset, uncompressed size and CRC. + \param index is the zero based index of the file which should be returned. + The index must be less than the amount getFileCount() returns. + \return The ID of the file. */ + virtual u32 getID(u32 index) const = 0; + + //! Check if the file is a directory + /** \param index The zero based index which will be checked. The index + must be less than the amount getFileCount() returns. + \return True if the file is a directory, else false. */ + virtual bool isDirectory(u32 index) const = 0; + + //! Searches for a file or folder in the list + /** Searches for a file by name + \param filename The name of the file to search for. + \param isFolder True if you are searching for a directory path, false if you are searching for a file + \return Returns the index of the file in the file list, or -1 if + no matching name name was found. */ + virtual s32 findFile(const io::path& filename, bool isFolder=false) const = 0; + + //! Returns the base path of the file list + virtual const io::path& getPath() const = 0; + + //! Add as a file or folder to the list + /** \param fullPath The file name including path, from the root of the file list. + \param isDirectory True if this is a directory rather than a file. + \param offset The file offset inside an archive + \param size The size of the file in bytes. + \param id The ID of the file in the archive which owns it */ + virtual u32 addItem(const io::path& fullPath, u32 offset, u32 size, bool isDirectory, u32 id=0) = 0; + + //! Sorts the file list. You should call this after adding any items to the file list + virtual void sort() = 0; +}; + +} // end namespace irr +} // end namespace io + + +#endif + diff --git a/inc/IFileSystem.h b/inc/IFileSystem.h new file mode 100644 index 0000000..0c5244d --- /dev/null +++ b/inc/IFileSystem.h @@ -0,0 +1,385 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_FILE_SYSTEM_H_INCLUDED__ +#define __I_FILE_SYSTEM_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "IXMLReader.h" +#include "IFileArchive.h" + +namespace irr +{ +namespace video +{ + class IVideoDriver; +} // end namespace video +namespace io +{ + +class IReadFile; +class IWriteFile; +class IFileList; +class IXMLWriter; +class IAttributes; + + +//! The FileSystem manages files and archives and provides access to them. +/** It manages where files are, so that modules which use the the IO do not +need to know where every file is located. A file could be in a .zip-Archive or +as file on disk, using the IFileSystem makes no difference to this. */ +class IFileSystem : public virtual IReferenceCounted +{ +public: + + //! Opens a file for read access. + /** \param filename: Name of file to open. + \return Pointer to the created file interface. + The returned pointer should be dropped when no longer needed. + See IReferenceCounted::drop() for more information. */ + virtual IReadFile* createAndOpenFile(const path& filename) =0; + + //! Creates an IReadFile interface for accessing memory like a file. + /** This allows you to use a pointer to memory where an IReadFile is requested. + \param memory: A pointer to the start of the file in memory + \param len: The length of the memory in bytes + \param fileName: The name given to this file + \param deleteMemoryWhenDropped: True if the memory should be deleted + along with the IReadFile when it is dropped. + \return Pointer to the created file interface. + The returned pointer should be dropped when no longer needed. + See IReferenceCounted::drop() for more information. + */ + virtual IReadFile* createMemoryReadFile(void* memory, s32 len, const path& fileName, bool deleteMemoryWhenDropped=false) =0; + + //! Creates an IReadFile interface for accessing files inside files. + /** This is useful e.g. for archives. + \param fileName: The name given to this file + \param alreadyOpenedFile: Pointer to the enclosing file + \param pos: Start of the file inside alreadyOpenedFile + \param areaSize: The length of the file + \return A pointer to the created file interface. + The returned pointer should be dropped when no longer needed. + See IReferenceCounted::drop() for more information. + */ + virtual IReadFile* createLimitReadFile(const path& fileName, + IReadFile* alreadyOpenedFile, long pos, long areaSize) =0; + + //! Creates an IWriteFile interface for accessing memory like a file. + /** This allows you to use a pointer to memory where an IWriteFile is requested. + You are responsible for allocating enough memory. + \param memory: A pointer to the start of the file in memory (allocated by you) + \param len: The length of the memory in bytes + \param fileName: The name given to this file + \param deleteMemoryWhenDropped: True if the memory should be deleted + along with the IWriteFile when it is dropped. + \return Pointer to the created file interface. + The returned pointer should be dropped when no longer needed. + See IReferenceCounted::drop() for more information. + */ + virtual IWriteFile* createMemoryWriteFile(void* memory, s32 len, const path& fileName, bool deleteMemoryWhenDropped=false) =0; + + + //! Opens a file for write access. + /** \param filename: Name of file to open. + \param append: If the file already exist, all write operations are + appended to the file. + \return Pointer to the created file interface. 0 is returned, if the + file could not created or opened for writing. + The returned pointer should be dropped when no longer needed. + See IReferenceCounted::drop() for more information. */ + virtual IWriteFile* createAndWriteFile(const path& filename, bool append=false) =0; + + //! Adds an archive to the file system. + /** After calling this, the Irrlicht Engine will also search and open + files directly from this archive. This is useful for hiding data from + the end user, speeding up file access and making it possible to access + for example Quake3 .pk3 files, which are just renamed .zip files. By + default Irrlicht supports ZIP, PAK, TAR, PNK, and directories as + archives. You can provide your own archive types by implementing + IArchiveLoader and passing an instance to addArchiveLoader. + Irrlicht supports AES-encrypted zip files, and the advanced compression + techniques lzma and bzip2. + \param filename: Filename of the archive to add to the file system. + \param ignoreCase: If set to true, files in the archive can be accessed without + writing all letters in the right case. + \param ignorePaths: If set to true, files in the added archive can be accessed + without its complete path. + \param archiveType: If no specific E_FILE_ARCHIVE_TYPE is selected then + the type of archive will depend on the extension of the file name. If + you use a different extension then you can use this parameter to force + a specific type of archive. + \param password An optional password, which is used in case of encrypted archives. + \param retArchive A pointer that will be set to the archive that is added. + \return True if the archive was added successfully, false if not. */ + virtual bool addFileArchive(const path& filename, bool ignoreCase=true, + bool ignorePaths=true, + E_FILE_ARCHIVE_TYPE archiveType=EFAT_UNKNOWN, + const core::stringc& password="", + IFileArchive** retArchive=0) =0; + + //! Adds an archive to the file system. + /** After calling this, the Irrlicht Engine will also search and open + files directly from this archive. This is useful for hiding data from + the end user, speeding up file access and making it possible to access + for example Quake3 .pk3 files, which are just renamed .zip files. By + default Irrlicht supports ZIP, PAK, TAR, PNK, and directories as + archives. You can provide your own archive types by implementing + IArchiveLoader and passing an instance to addArchiveLoader. + Irrlicht supports AES-encrypted zip files, and the advanced compression + techniques lzma and bzip2. + If you want to add a directory as an archive, prefix its name with a + slash in order to let Irrlicht recognize it as a folder mount (mypath/). + Using this technique one can build up a search order, because archives + are read first, and can be used more easily with relative filenames. + \param file: Archive to add to the file system. + \param ignoreCase: If set to true, files in the archive can be accessed without + writing all letters in the right case. + \param ignorePaths: If set to true, files in the added archive can be accessed + without its complete path. + \param archiveType: If no specific E_FILE_ARCHIVE_TYPE is selected then + the type of archive will depend on the extension of the file name. If + you use a different extension then you can use this parameter to force + a specific type of archive. + \param password An optional password, which is used in case of encrypted archives. + \param retArchive A pointer that will be set to the archive that is added. + \return True if the archive was added successfully, false if not. */ + virtual bool addFileArchive(IReadFile* file, bool ignoreCase=true, + bool ignorePaths=true, + E_FILE_ARCHIVE_TYPE archiveType=EFAT_UNKNOWN, + const core::stringc& password="", + IFileArchive** retArchive=0) =0; + + //! Adds an archive to the file system. + /** \param archive: The archive to add to the file system. + \return True if the archive was added successfully, false if not. */ + virtual bool addFileArchive(IFileArchive* archive) =0; + + //! Get the number of archives currently attached to the file system + virtual u32 getFileArchiveCount() const =0; + + //! Removes an archive from the file system. + /** This will close the archive and free any file handles, but will not + close resources which have already been loaded and are now cached, for + example textures and meshes. + \param index: The index of the archive to remove + \return True on success, false on failure */ + virtual bool removeFileArchive(u32 index) =0; + + //! Removes an archive from the file system. + /** This will close the archive and free any file handles, but will not + close resources which have already been loaded and are now cached, for + example textures and meshes. Note that a relative filename might be + interpreted differently on each call, depending on the current working + directory. In case you want to remove an archive that was added using + a relative path name, you have to change to the same working directory + again. This means, that the filename given on creation is not an + identifier for the archive, but just a usual filename that is used for + locating the archive to work with. + \param filename The archive pointed to by the name will be removed + \return True on success, false on failure */ + virtual bool removeFileArchive(const path& filename) =0; + + //! Removes an archive from the file system. + /** This will close the archive and free any file handles, but will not + close resources which have already been loaded and are now cached, for + example textures and meshes. + \param archive The archive to remove. + \return True on success, false on failure */ + virtual bool removeFileArchive(const IFileArchive* archive) =0; + + //! Changes the search order of attached archives. + /** + \param sourceIndex: The index of the archive to change + \param relative: The relative change in position, archives with a lower index are searched first */ + virtual bool moveFileArchive(u32 sourceIndex, s32 relative) =0; + + //! Get the archive at a given index. + virtual IFileArchive* getFileArchive(u32 index) =0; + + //! Adds an external archive loader to the engine. + /** Use this function to add support for new archive types to the + engine, for example proprietary or encrypted file storage. */ + virtual void addArchiveLoader(IArchiveLoader* loader) =0; + + //! Gets the number of archive loaders currently added + virtual u32 getArchiveLoaderCount() const = 0; + + //! Retrieve the given archive loader + /** \param index The index of the loader to retrieve. This parameter is an 0-based + array index. + \return A pointer to the specified loader, 0 if the index is incorrect. */ + virtual IArchiveLoader* getArchiveLoader(u32 index) const = 0; + + //! Adds a zip archive to the file system. + /** \deprecated This function is provided for compatibility + with older versions of Irrlicht and may be removed in Irrlicht 1.9, + you should use addFileArchive instead. + After calling this, the Irrlicht Engine will search and open files directly from this archive too. + This is useful for hiding data from the end user, speeding up file access and making it possible to + access for example Quake3 .pk3 files, which are no different than .zip files. + \param filename: Filename of the zip archive to add to the file system. + \param ignoreCase: If set to true, files in the archive can be accessed without + writing all letters in the right case. + \param ignorePaths: If set to true, files in the added archive can be accessed + without its complete path. + \return True if the archive was added successfully, false if not. */ + _IRR_DEPRECATED_ virtual bool addZipFileArchive(const c8* filename, bool ignoreCase=true, bool ignorePaths=true) + { + return addFileArchive(filename, ignoreCase, ignorePaths, EFAT_ZIP); + } + + //! Adds an unzipped archive (or basedirectory with subdirectories..) to the file system. + /** \deprecated This function is provided for compatibility + with older versions of Irrlicht and may be removed in Irrlicht 1.9, + you should use addFileArchive instead. + Useful for handling data which will be in a zip file + \param filename: Filename of the unzipped zip archive base directory to add to the file system. + \param ignoreCase: If set to true, files in the archive can be accessed without + writing all letters in the right case. + \param ignorePaths: If set to true, files in the added archive can be accessed + without its complete path. + \return True if the archive was added successful, false if not. */ + _IRR_DEPRECATED_ virtual bool addFolderFileArchive(const c8* filename, bool ignoreCase=true, bool ignorePaths=true) + { + return addFileArchive(filename, ignoreCase, ignorePaths, EFAT_FOLDER); + } + + //! Adds a pak archive to the file system. + /** \deprecated This function is provided for compatibility + with older versions of Irrlicht and may be removed in Irrlicht 1.9, + you should use addFileArchive instead. + After calling this, the Irrlicht Engine will search and open files directly from this archive too. + This is useful for hiding data from the end user, speeding up file access and making it possible to + access for example Quake2/KingPin/Hexen2 .pak files + \param filename: Filename of the pak archive to add to the file system. + \param ignoreCase: If set to true, files in the archive can be accessed without + writing all letters in the right case. + \param ignorePaths: If set to true, files in the added archive can be accessed + without its complete path.(should not use with Quake2 paks + \return True if the archive was added successful, false if not. */ + _IRR_DEPRECATED_ virtual bool addPakFileArchive(const c8* filename, bool ignoreCase=true, bool ignorePaths=true) + { + return addFileArchive(filename, ignoreCase, ignorePaths, EFAT_PAK); + } + + //! Get the current working directory. + /** \return Current working directory as a string. */ + virtual const path& getWorkingDirectory() =0; + + //! Changes the current working directory. + /** \param newDirectory: A string specifying the new working directory. + The string is operating system dependent. Under Windows it has + the form ":\\\<..>". An example would be: "C:\Windows\" + \return True if successful, otherwise false. */ + virtual bool changeWorkingDirectoryTo(const path& newDirectory) =0; + + //! Converts a relative path to an absolute (unique) path, resolving symbolic links if required + /** \param filename Possibly relative file or directory name to query. + \result Absolute filename which points to the same file. */ + virtual path getAbsolutePath(const path& filename) const =0; + + //! Get the directory a file is located in. + /** \param filename: The file to get the directory from. + \return String containing the directory of the file. */ + virtual path getFileDir(const path& filename) const =0; + + //! Get the base part of a filename, i.e. the name without the directory part. + /** If no directory is prefixed, the full name is returned. + \param filename: The file to get the basename from + \param keepExtension True if filename with extension is returned otherwise everything + after the final '.' is removed as well. */ + virtual path getFileBasename(const path& filename, bool keepExtension=true) const =0; + + //! flatten a path and file name for example: "/you/me/../." becomes "/you" + virtual path& flattenFilename(path& directory, const path& root="/") const =0; + + //! Get the relative filename, relative to the given directory + virtual path getRelativeFilename(const path& filename, const path& directory) const =0; + + //! Creates a list of files and directories in the current working directory and returns it. + /** \return a Pointer to the created IFileList is returned. After the list has been used + it has to be deleted using its IFileList::drop() method. + See IReferenceCounted::drop() for more information. */ + virtual IFileList* createFileList() =0; + + //! Creates an empty filelist + /** \return a Pointer to the created IFileList is returned. After the list has been used + it has to be deleted using its IFileList::drop() method. + See IReferenceCounted::drop() for more information. */ + virtual IFileList* createEmptyFileList(const io::path& path, bool ignoreCase, bool ignorePaths) =0; + + //! Set the active type of file system. + virtual EFileSystemType setFileListSystem(EFileSystemType listType) =0; + + //! Determines if a file exists and could be opened. + /** \param filename is the string identifying the file which should be tested for existence. + \return True if file exists, and false if it does not exist or an error occured. */ + virtual bool existFile(const path& filename) const =0; + + //! Creates a XML Reader from a file which returns all parsed strings as wide characters (wchar_t*). + /** Use createXMLReaderUTF8() if you prefer char* instead of wchar_t*. See IIrrXMLReader for + more information on how to use the parser. + \return 0, if file could not be opened, otherwise a pointer to the created + IXMLReader is returned. After use, the reader + has to be deleted using its IXMLReader::drop() method. + See IReferenceCounted::drop() for more information. */ + virtual IXMLReader* createXMLReader(const path& filename) =0; + + //! Creates a XML Reader from a file which returns all parsed strings as wide characters (wchar_t*). + /** Use createXMLReaderUTF8() if you prefer char* instead of wchar_t*. See IIrrXMLReader for + more information on how to use the parser. + \return 0, if file could not be opened, otherwise a pointer to the created + IXMLReader is returned. After use, the reader + has to be deleted using its IXMLReader::drop() method. + See IReferenceCounted::drop() for more information. */ + virtual IXMLReader* createXMLReader(IReadFile* file) =0; + + //! Creates a XML Reader from a file which returns all parsed strings as ASCII/UTF-8 characters (char*). + /** Use createXMLReader() if you prefer wchar_t* instead of char*. See IIrrXMLReader for + more information on how to use the parser. + \return 0, if file could not be opened, otherwise a pointer to the created + IXMLReader is returned. After use, the reader + has to be deleted using its IXMLReaderUTF8::drop() method. + See IReferenceCounted::drop() for more information. */ + virtual IXMLReaderUTF8* createXMLReaderUTF8(const path& filename) =0; + + //! Creates a XML Reader from a file which returns all parsed strings as ASCII/UTF-8 characters (char*). + /** Use createXMLReader() if you prefer wchar_t* instead of char*. See IIrrXMLReader for + more information on how to use the parser. + \return 0, if file could not be opened, otherwise a pointer to the created + IXMLReader is returned. After use, the reader + has to be deleted using its IXMLReaderUTF8::drop() method. + See IReferenceCounted::drop() for more information. */ + virtual IXMLReaderUTF8* createXMLReaderUTF8(IReadFile* file) =0; + + //! Creates a XML Writer from a file. + /** \return 0, if file could not be opened, otherwise a pointer to the created + IXMLWriter is returned. After use, the reader + has to be deleted using its IXMLWriter::drop() method. + See IReferenceCounted::drop() for more information. */ + virtual IXMLWriter* createXMLWriter(const path& filename) =0; + + //! Creates a XML Writer from a file. + /** \return 0, if file could not be opened, otherwise a pointer to the created + IXMLWriter is returned. After use, the reader + has to be deleted using its IXMLWriter::drop() method. + See IReferenceCounted::drop() for more information. */ + virtual IXMLWriter* createXMLWriter(IWriteFile* file) =0; + + //! Creates a new empty collection of attributes, usable for serialization and more. + /** \param driver: Video driver to be used to load textures when specified as attribute values. + Can be null to prevent automatic texture loading by attributes. + \return Pointer to the created object. + If you no longer need the object, you should call IAttributes::drop(). + See IReferenceCounted::drop() for more information. */ + virtual IAttributes* createEmptyAttributes(video::IVideoDriver* driver=0) =0; +}; + + +} // end namespace io +} // end namespace irr + +#endif + diff --git a/inc/IGPUProgrammingServices.h b/inc/IGPUProgrammingServices.h new file mode 100644 index 0000000..28717d5 --- /dev/null +++ b/inc/IGPUProgrammingServices.h @@ -0,0 +1,474 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_GPU_PROGRAMMING_SERVICES_H_INCLUDED__ +#define __I_GPU_PROGRAMMING_SERVICES_H_INCLUDED__ + +#include "EShaderTypes.h" +#include "EMaterialTypes.h" +#include "EPrimitiveTypes.h" +#include "path.h" + +namespace irr +{ + +namespace io +{ + class IReadFile; +} // end namespace io + +namespace video +{ + +class IVideoDriver; +class IShaderConstantSetCallBack; + +//! Enumeration for different types of shading languages +enum E_GPU_SHADING_LANGUAGE +{ + //! The default language, so HLSL for Direct3D and GLSL for OpenGL. + EGSL_DEFAULT = 0, + + //! Cg shading language.*/ + EGSL_CG +}; + +//! Interface making it possible to create and use programs running on the GPU. +class IGPUProgrammingServices +{ +public: + + //! Destructor + virtual ~IGPUProgrammingServices() {} + + //! Adds a new high-level shading material renderer to the VideoDriver. + /** Currently only HLSL/D3D9 and GLSL/OpenGL are supported. + \param vertexShaderProgram String containing the source of the vertex + shader program. This can be 0 if no vertex program shall be used. + \param vertexShaderEntryPointName Name of the entry function of the + vertexShaderProgram (p.e. "main") + \param vsCompileTarget Vertex shader version the high level shader + shall be compiled to. + \param pixelShaderProgram String containing the source of the pixel + shader program. This can be 0 if no pixel shader shall be used. + \param pixelShaderEntryPointName Entry name of the function of the + pixelShaderProgram (p.e. "main") + \param psCompileTarget Pixel shader version the high level shader + shall be compiled to. + \param geometryShaderProgram String containing the source of the + geometry shader program. This can be 0 if no geometry shader shall be + used. + \param geometryShaderEntryPointName Entry name of the function of the + geometryShaderProgram (p.e. "main") + \param gsCompileTarget Geometry shader version the high level shader + shall be compiled to. + \param inType Type of vertices passed to geometry shader + \param outType Type of vertices created by geometry shader + \param verticesOut Maximal number of vertices created by geometry + shader. If 0, maximal number supported is assumed. + \param callback Pointer to an implementation of + IShaderConstantSetCallBack in which you can set the needed vertex, + pixel, and geometry shader program constants. Set this to 0 if you + don't need this. + \param baseMaterial Base material which renderstates will be used to + shade the material. + \param userData a user data int. This int can be set to any value and + will be set as parameter in the callback method when calling + OnSetConstants(). In this way it is easily possible to use the same + callback method for multiple materials and distinguish between them + during the call. + \param shaderLang a type of shading language used in current shader. + \return Number of the material type which can be set in + SMaterial::MaterialType to use the renderer. -1 is returned if an error + occured, e.g. if a shader program could not be compiled or a compile + target is not reachable. The error strings are then printed to the + error log and can be catched with a custom event receiver. */ + virtual s32 addHighLevelShaderMaterial( + const c8* vertexShaderProgram, + const c8* vertexShaderEntryPointName, + E_VERTEX_SHADER_TYPE vsCompileTarget, + const c8* pixelShaderProgram, + const c8* pixelShaderEntryPointName, + E_PIXEL_SHADER_TYPE psCompileTarget, + const c8* geometryShaderProgram, + const c8* geometryShaderEntryPointName = "main", + E_GEOMETRY_SHADER_TYPE gsCompileTarget = EGST_GS_4_0, + scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES, + scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP, + u32 verticesOut = 0, + IShaderConstantSetCallBack* callback = 0, + E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID, + s32 userData = 0, + E_GPU_SHADING_LANGUAGE shadingLang = EGSL_DEFAULT) = 0; + + //! convenience function for use without geometry shaders + s32 addHighLevelShaderMaterial( + const c8* vertexShaderProgram, + const c8* vertexShaderEntryPointName="main", + E_VERTEX_SHADER_TYPE vsCompileTarget=EVST_VS_1_1, + const c8* pixelShaderProgram=0, + const c8* pixelShaderEntryPointName="main", + E_PIXEL_SHADER_TYPE psCompileTarget=EPST_PS_1_1, + IShaderConstantSetCallBack* callback=0, + E_MATERIAL_TYPE baseMaterial=video::EMT_SOLID, + s32 userData=0, + E_GPU_SHADING_LANGUAGE shadingLang=EGSL_DEFAULT) + { + return addHighLevelShaderMaterial( + vertexShaderProgram, vertexShaderEntryPointName, + vsCompileTarget, pixelShaderProgram, + pixelShaderEntryPointName, psCompileTarget, + 0, "main", EGST_GS_4_0, + scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0, + callback, baseMaterial, userData, shadingLang); + } + + //! convenience function for use with many defaults, without geometry shader + /** All shader names are set to "main" and compile targets are shader + type 1.1. + */ + s32 addHighLevelShaderMaterial( + const c8* vertexShaderProgram, + const c8* pixelShaderProgram=0, + IShaderConstantSetCallBack* callback=0, + E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID, + s32 userData=0) + { + return addHighLevelShaderMaterial( + vertexShaderProgram, "main", + EVST_VS_1_1, pixelShaderProgram, + "main", EPST_PS_1_1, + 0, "main", EGST_GS_4_0, + scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0, + callback, baseMaterial, userData); + } + + //! convenience function for use with many defaults, with geometry shader + /** All shader names are set to "main" and compile targets are shader + type 1.1 and geometry shader 4.0. + */ + s32 addHighLevelShaderMaterial( + const c8* vertexShaderProgram, + const c8* pixelShaderProgram = 0, + const c8* geometryShaderProgram = 0, + scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES, + scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP, + u32 verticesOut = 0, + IShaderConstantSetCallBack* callback = 0, + E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID, + s32 userData = 0 ) + { + return addHighLevelShaderMaterial( + vertexShaderProgram, "main", + EVST_VS_1_1, pixelShaderProgram, + "main", EPST_PS_1_1, + geometryShaderProgram, "main", EGST_GS_4_0, + inType, outType, verticesOut, + callback, baseMaterial, userData); + } + + //! Like IGPUProgrammingServices::addShaderMaterial(), but loads from files. + /** \param vertexShaderProgramFileName Text file containing the source + of the vertex shader program. Set to empty string if no vertex shader + shall be created. + \param vertexShaderEntryPointName Name of the entry function of the + vertexShaderProgram (p.e. "main") + \param vsCompileTarget Vertex shader version the high level shader + shall be compiled to. + \param pixelShaderProgramFileName Text file containing the source of + the pixel shader program. Set to empty string if no pixel shader shall + be created. + \param pixelShaderEntryPointName Entry name of the function of the + pixelShaderProgram (p.e. "main") + \param psCompileTarget Pixel shader version the high level shader + shall be compiled to. + \param geometryShaderProgramFileName Name of the source of + the geometry shader program. Set to empty string if no geometry shader + shall be created. + \param geometryShaderEntryPointName Entry name of the function of the + geometryShaderProgram (p.e. "main") + \param gsCompileTarget Geometry shader version the high level shader + shall be compiled to. + \param inType Type of vertices passed to geometry shader + \param outType Type of vertices created by geometry shader + \param verticesOut Maximal number of vertices created by geometry + shader. If 0, maximal number supported is assumed. + \param callback Pointer to an implementation of + IShaderConstantSetCallBack in which you can set the needed vertex, + pixel, and geometry shader program constants. Set this to 0 if you + don't need this. + \param baseMaterial Base material which renderstates will be used to + shade the material. + \param userData a user data int. This int can be set to any value and + will be set as parameter in the callback method when calling + OnSetConstants(). In this way it is easily possible to use the same + callback method for multiple materials and distinguish between them + during the call. + \param shaderLang a type of shading language used in current shader. + \return Number of the material type which can be set in + SMaterial::MaterialType to use the renderer. -1 is returned if an error + occured, e.g. if a shader program could not be compiled or a compile + target is not reachable. The error strings are then printed to the + error log and can be catched with a custom event receiver. */ + virtual s32 addHighLevelShaderMaterialFromFiles( + const io::path& vertexShaderProgramFileName, + const c8* vertexShaderEntryPointName, + E_VERTEX_SHADER_TYPE vsCompileTarget, + const io::path& pixelShaderProgramFileName, + const c8* pixelShaderEntryPointName, + E_PIXEL_SHADER_TYPE psCompileTarget, + const io::path& geometryShaderProgramFileName, + const c8* geometryShaderEntryPointName = "main", + E_GEOMETRY_SHADER_TYPE gsCompileTarget = EGST_GS_4_0, + scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES, + scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP, + u32 verticesOut = 0, + IShaderConstantSetCallBack* callback = 0, + E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID, + s32 userData = 0, + E_GPU_SHADING_LANGUAGE shadingLang = EGSL_DEFAULT) = 0; + + //! convenience function for use without geometry shaders + s32 addHighLevelShaderMaterialFromFiles( + const io::path& vertexShaderProgramFileName, + const c8* vertexShaderEntryPointName = "main", + E_VERTEX_SHADER_TYPE vsCompileTarget = EVST_VS_1_1, + const io::path& pixelShaderProgramFileName = "", + const c8* pixelShaderEntryPointName = "main", + E_PIXEL_SHADER_TYPE psCompileTarget = EPST_PS_1_1, + IShaderConstantSetCallBack* callback = 0, + E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID, + s32 userData = 0, + E_GPU_SHADING_LANGUAGE shadingLang = EGSL_DEFAULT) + { + return addHighLevelShaderMaterialFromFiles( + vertexShaderProgramFileName, vertexShaderEntryPointName, + vsCompileTarget, pixelShaderProgramFileName, + pixelShaderEntryPointName, psCompileTarget, + "", "main", EGST_GS_4_0, + scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0, + callback, baseMaterial, userData, shadingLang); + } + + //! convenience function for use with many defaults, without geometry shader + /** All shader names are set to "main" and compile targets are shader + type 1.1. + */ + s32 addHighLevelShaderMaterialFromFiles( + const io::path& vertexShaderProgramFileName, + const io::path& pixelShaderProgramFileName = "", + IShaderConstantSetCallBack* callback = 0, + E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID, + s32 userData = 0 ) + { + return addHighLevelShaderMaterialFromFiles( + vertexShaderProgramFileName, "main", + EVST_VS_1_1, pixelShaderProgramFileName, + "main", EPST_PS_1_1, + "", "main", EGST_GS_4_0, + scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0, + callback, baseMaterial, userData); + } + + //! convenience function for use with many defaults, with geometry shader + /** All shader names are set to "main" and compile targets are shader + type 1.1 and geometry shader 4.0. + */ + s32 addHighLevelShaderMaterialFromFiles( + const io::path& vertexShaderProgramFileName, + const io::path& pixelShaderProgramFileName = "", + const io::path& geometryShaderProgramFileName = "", + scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES, + scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP, + u32 verticesOut = 0, + IShaderConstantSetCallBack* callback = 0, + E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID, + s32 userData = 0 ) + { + return addHighLevelShaderMaterialFromFiles( + vertexShaderProgramFileName, "main", + EVST_VS_1_1, pixelShaderProgramFileName, + "main", EPST_PS_1_1, + geometryShaderProgramFileName, "main", EGST_GS_4_0, + inType, outType, verticesOut, + callback, baseMaterial, userData); + } + + //! Like IGPUProgrammingServices::addShaderMaterial(), but loads from files. + /** \param vertexShaderProgram Text file handle containing the source + of the vertex shader program. Set to 0 if no vertex shader shall be + created. + \param vertexShaderEntryPointName Name of the entry function of the + vertexShaderProgram + \param vsCompileTarget Vertex shader version the high level shader + shall be compiled to. + \param pixelShaderProgram Text file handle containing the source of + the pixel shader program. Set to 0 if no pixel shader shall be created. + \param pixelShaderEntryPointName Entry name of the function of the + pixelShaderProgram (p.e. "main") + \param psCompileTarget Pixel shader version the high level shader + shall be compiled to. + \param geometryShaderProgram Text file handle containing the source of + the geometry shader program. Set to 0 if no geometry shader shall be + created. + \param geometryShaderEntryPointName Entry name of the function of the + geometryShaderProgram (p.e. "main") + \param gsCompileTarget Geometry shader version the high level shader + shall be compiled to. + \param inType Type of vertices passed to geometry shader + \param outType Type of vertices created by geometry shader + \param verticesOut Maximal number of vertices created by geometry + shader. If 0, maximal number supported is assumed. + \param callback Pointer to an implementation of + IShaderConstantSetCallBack in which you can set the needed vertex and + pixel shader program constants. Set this to 0 if you don't need this. + \param baseMaterial Base material which renderstates will be used to + shade the material. + \param userData a user data int. This int can be set to any value and + will be set as parameter in the callback method when calling + OnSetConstants(). In this way it is easily possible to use the same + callback method for multiple materials and distinguish between them + during the call. + \param shaderLang a type of shading language used in current shader. + \return Number of the material type which can be set in + SMaterial::MaterialType to use the renderer. -1 is returned if an + error occured, e.g. if a shader program could not be compiled or a + compile target is not reachable. The error strings are then printed to + the error log and can be catched with a custom event receiver. */ + virtual s32 addHighLevelShaderMaterialFromFiles( + io::IReadFile* vertexShaderProgram, + const c8* vertexShaderEntryPointName, + E_VERTEX_SHADER_TYPE vsCompileTarget, + io::IReadFile* pixelShaderProgram, + const c8* pixelShaderEntryPointName, + E_PIXEL_SHADER_TYPE psCompileTarget, + io::IReadFile* geometryShaderProgram, + const c8* geometryShaderEntryPointName = "main", + E_GEOMETRY_SHADER_TYPE gsCompileTarget = EGST_GS_4_0, + scene::E_PRIMITIVE_TYPE inType = scene::EPT_TRIANGLES, + scene::E_PRIMITIVE_TYPE outType = scene::EPT_TRIANGLE_STRIP, + u32 verticesOut = 0, + IShaderConstantSetCallBack* callback = 0, + E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID, + s32 userData = 0, + E_GPU_SHADING_LANGUAGE shadingLang = EGSL_DEFAULT) = 0; + + //! convenience function for use without geometry shaders + s32 addHighLevelShaderMaterialFromFiles( + io::IReadFile* vertexShaderProgram, + const c8* vertexShaderEntryPointName = "main", + E_VERTEX_SHADER_TYPE vsCompileTarget = EVST_VS_1_1, + io::IReadFile* pixelShaderProgram = 0, + const c8* pixelShaderEntryPointName = "main", + E_PIXEL_SHADER_TYPE psCompileTarget = EPST_PS_1_1, + IShaderConstantSetCallBack* callback = 0, + E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID, + s32 userData = 0, + E_GPU_SHADING_LANGUAGE shadingLang = EGSL_DEFAULT) + { + return addHighLevelShaderMaterialFromFiles( + vertexShaderProgram, vertexShaderEntryPointName, + vsCompileTarget, pixelShaderProgram, + pixelShaderEntryPointName, psCompileTarget, + 0, "main", EGST_GS_4_0, + scene::EPT_TRIANGLES, scene::EPT_TRIANGLE_STRIP, 0, + callback, baseMaterial, userData, shadingLang); + } + + //! Adds a new ASM shader material renderer to the VideoDriver + /** Note that it is a good idea to call IVideoDriver::queryFeature() in + advance to check if the IVideoDriver supports the vertex and/or pixel + shader version your are using. + + The material is added to the VideoDriver like with + IVideoDriver::addMaterialRenderer() and can be used like it had been + added with that method. + \param vertexShaderProgram String containing the source of the vertex + shader program. This can be 0 if no vertex program shall be used. + + For DX8 programs, the will always input registers look like this: v0: + position, v1: normal, v2: color, v3: texture cooridnates, v4: texture + coordinates 2 if available. + + For DX9 programs, you can manually set the registers using the dcl_ + statements. + \param pixelShaderProgram String containing the source of the pixel + shader program. This can be 0 if you don't want to use a pixel shader. + \param callback Pointer to an implementation of + IShaderConstantSetCallBack in which you can set the needed vertex and + pixel shader program constants. Set this to 0 if you don't need this. + \param baseMaterial Base material which renderstates will be used to + shade the material. + \param userData a user data int. This int can be set to any value and + will be set as parameter in the callback method when calling + OnSetConstants(). In this way it is easily possible to use the same + callback method for multiple materials and distinguish between them + during the call. + \return Returns the number of the material type which can be set in + SMaterial::MaterialType to use the renderer. -1 is returned if an + error occured. -1 is returned for example if a vertex or pixel shader + program could not be compiled, the error strings are then printed out + into the error log, and can be catched with a custom event receiver. */ + virtual s32 addShaderMaterial(const c8* vertexShaderProgram = 0, + const c8* pixelShaderProgram = 0, + IShaderConstantSetCallBack* callback = 0, + E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID, + s32 userData = 0) = 0; + + //! Like IGPUProgrammingServices::addShaderMaterial(), but loads from files. + /** \param vertexShaderProgram Text file containing the source of the + vertex shader program. Set to 0 if no shader shall be created. + \param pixelShaderProgram Text file containing the source of the pixel + shader program. Set to 0 if no shader shall be created. + \param callback Pointer to an IShaderConstantSetCallback object to + which the OnSetConstants function is called. + \param baseMaterial baseMaterial + \param userData a user data int. This int can be set to any value and + will be set as parameter in the callback method when calling + OnSetConstants(). In this way it is easily possible to use the same + callback method for multiple materials and distinguish between them + during the call. + \return Returns the number of the material type which can be set in + SMaterial::MaterialType to use the renderer. -1 is returned if an + error occured. -1 is returned for example if a vertex or pixel shader + program could not be compiled, the error strings are then printed out + into the error log, and can be catched with a custom event receiver. */ + virtual s32 addShaderMaterialFromFiles(io::IReadFile* vertexShaderProgram, + io::IReadFile* pixelShaderProgram, + IShaderConstantSetCallBack* callback = 0, + E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID, + s32 userData = 0) = 0; + + //! Like IGPUProgrammingServices::addShaderMaterial(), but loads from files. + /** \param vertexShaderProgramFileName Text file name containing the + source of the vertex shader program. Set to 0 if no shader shall be + created. + \param pixelShaderProgramFileName Text file name containing the source + of the pixel shader program. Set to 0 if no shader shall be created. + \param callback Pointer to an IShaderConstantSetCallback object on + which the OnSetConstants function is called. + \param baseMaterial baseMaterial + \param userData a user data int. This int can be set to any value and + will be set as parameter in the callback method when calling + OnSetConstants(). In this way it is easily possible to use the same + callback method for multiple materials and distinguish between them + during the call. + \return Returns the number of the material type which can be set in + SMaterial::MaterialType to use the renderer. -1 is returned if an + error occured. -1 is returned for example if a vertex or pixel shader + program could not be compiled, the error strings are then printed out + into the error log, and can be catched with a custom event receiver. */ + virtual s32 addShaderMaterialFromFiles(const io::path& vertexShaderProgramFileName, + const io::path& pixelShaderProgramFileName, + IShaderConstantSetCallBack* callback = 0, + E_MATERIAL_TYPE baseMaterial = video::EMT_SOLID, + s32 userData = 0) = 0; +}; + + +} // end namespace video +} // end namespace irr + +#endif + diff --git a/inc/IGUIButton.h b/inc/IGUIButton.h new file mode 100644 index 0000000..cc0ada1 --- /dev/null +++ b/inc/IGUIButton.h @@ -0,0 +1,151 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_GUI_BUTTON_H_INCLUDED__ +#define __I_GUI_BUTTON_H_INCLUDED__ + +#include "IGUIElement.h" + +namespace irr +{ + +namespace video +{ + class ITexture; +} // end namespace video + +namespace gui +{ + class IGUIFont; + class IGUISpriteBank; + + enum EGUI_BUTTON_STATE + { + //! The button is not pressed + EGBS_BUTTON_UP=0, + //! The button is currently pressed down + EGBS_BUTTON_DOWN, + //! The mouse cursor is over the button + EGBS_BUTTON_MOUSE_OVER, + //! The mouse cursor is not over the button + EGBS_BUTTON_MOUSE_OFF, + //! The button has the focus + EGBS_BUTTON_FOCUSED, + //! The button doesn't have the focus + EGBS_BUTTON_NOT_FOCUSED, + //! not used, counts the number of enumerated items + EGBS_COUNT + }; + + //! Names for gui button state icons + const c8* const GUIButtonStateNames[] = + { + "buttonUp", + "buttonDown", + "buttonMouseOver", + "buttonMouseOff", + "buttonFocused", + "buttonNotFocused", + 0, + 0, + }; + + //! GUI Button interface. + /** \par This element can create the following events of type EGUI_EVENT_TYPE: + \li EGET_BUTTON_CLICKED + */ + class IGUIButton : public IGUIElement + { + public: + + //! constructor + IGUIButton(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect rectangle) + : IGUIElement(EGUIET_BUTTON, environment, parent, id, rectangle) {} + + //! Sets another skin independent font. + /** If this is set to zero, the button uses the font of the skin. + \param font: New font to set. */ + virtual void setOverrideFont(IGUIFont* font=0) = 0; + + //! Gets the override font (if any) + /** \return The override font (may be 0) */ + virtual IGUIFont* getOverrideFont(void) const = 0; + + //! Get the font which is used right now for drawing + /** Currently this is the override font when one is set and the + font of the active skin otherwise */ + virtual IGUIFont* getActiveFont() const = 0; + + //! Sets an image which should be displayed on the button when it is in normal state. + /** \param image: Image to be displayed */ + virtual void setImage(video::ITexture* image=0) = 0; + + //! Sets a background image for the button when it is in normal state. + /** \param image: Texture containing the image to be displayed + \param pos: Position in the texture, where the image is located */ + virtual void setImage(video::ITexture* image, const core::rect& pos) = 0; + + //! Sets a background image for the button when it is in pressed state. + /** If no images is specified for the pressed state via + setPressedImage(), this image is also drawn in pressed state. + \param image: Image to be displayed */ + virtual void setPressedImage(video::ITexture* image=0) = 0; + + //! Sets an image which should be displayed on the button when it is in pressed state. + /** \param image: Texture containing the image to be displayed + \param pos: Position in the texture, where the image is located */ + virtual void setPressedImage(video::ITexture* image, const core::rect& pos) = 0; + + //! Sets the sprite bank used by the button + virtual void setSpriteBank(IGUISpriteBank* bank=0) = 0; + + //! Sets the animated sprite for a specific button state + /** \param index: Number of the sprite within the sprite bank, use -1 for no sprite + \param state: State of the button to set the sprite for + \param index: The sprite number from the current sprite bank + \param color: The color of the sprite + \param loop: True if the animation should loop, false if not + */ + virtual void setSprite(EGUI_BUTTON_STATE state, s32 index, + video::SColor color=video::SColor(255,255,255,255), bool loop=false) = 0; + + //! Sets if the button should behave like a push button. + /** Which means it can be in two states: Normal or Pressed. With a click on the button, + the user can change the state of the button. */ + virtual void setIsPushButton(bool isPushButton=true) = 0; + + //! Sets the pressed state of the button if this is a pushbutton + virtual void setPressed(bool pressed=true) = 0; + + //! Returns if the button is currently pressed + virtual bool isPressed() const = 0; + + //! Sets if the alpha channel should be used for drawing background images on the button (default is false) + virtual void setUseAlphaChannel(bool useAlphaChannel=true) = 0; + + //! Returns if the alpha channel should be used for drawing background images on the button + virtual bool isAlphaChannelUsed() const = 0; + + //! Returns whether the button is a push button + virtual bool isPushButton() const = 0; + + //! Sets if the button should use the skin to draw its border and button face (default is true) + virtual void setDrawBorder(bool border=true) = 0; + + //! Returns if the border and button face are being drawn using the skin + virtual bool isDrawingBorder() const = 0; + + //! Sets if the button should scale the button images to fit + virtual void setScaleImage(bool scaleImage=true) = 0; + + //! Checks whether the button scales the used images + virtual bool isScalingImage() const = 0; + }; + + +} // end namespace gui +} // end namespace irr + +#endif + diff --git a/inc/IGUICheckBox.h b/inc/IGUICheckBox.h new file mode 100644 index 0000000..d965ef6 --- /dev/null +++ b/inc/IGUICheckBox.h @@ -0,0 +1,38 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_GUI_CHECKBOX_H_INCLUDED__ +#define __I_GUI_CHECKBOX_H_INCLUDED__ + +#include "IGUIElement.h" + +namespace irr +{ +namespace gui +{ + + //! GUI Check box interface. + /** \par This element can create the following events of type EGUI_EVENT_TYPE: + \li EGET_CHECKBOX_CHANGED + */ + class IGUICheckBox : public IGUIElement + { + public: + + //! constructor + IGUICheckBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect rectangle) + : IGUIElement(EGUIET_CHECK_BOX, environment, parent, id, rectangle) {} + + //! Set if box is checked. + virtual void setChecked(bool checked) = 0; + + //! Returns true if box is checked. + virtual bool isChecked() const = 0; + }; + +} // end namespace gui +} // end namespace irr + +#endif + diff --git a/inc/IGUIColorSelectDialog.h b/inc/IGUIColorSelectDialog.h new file mode 100644 index 0000000..0788dbc --- /dev/null +++ b/inc/IGUIColorSelectDialog.h @@ -0,0 +1,30 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_GUI_COLOR_SELECT_DIALOG_H_INCLUDED__ +#define __I_GUI_COLOR_SELECT_DIALOG_H_INCLUDED__ + +#include "IGUIElement.h" + +namespace irr +{ +namespace gui +{ + + //! Standard color chooser dialog. + class IGUIColorSelectDialog : public IGUIElement + { + public: + + //! constructor + IGUIColorSelectDialog(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect rectangle) + : IGUIElement(EGUIET_COLOR_SELECT_DIALOG, environment, parent, id, rectangle) {} + }; + + +} // end namespace gui +} // end namespace irr + +#endif + diff --git a/inc/IGUIComboBox.h b/inc/IGUIComboBox.h new file mode 100644 index 0000000..ebee1ec --- /dev/null +++ b/inc/IGUIComboBox.h @@ -0,0 +1,74 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_GUI_COMBO_BOX_H_INCLUDED__ +#define __I_GUI_COMBO_BOX_H_INCLUDED__ + +#include "IGUIElement.h" + +namespace irr +{ +namespace gui +{ + + //! Combobox widget + /** \par This element can create the following events of type EGUI_EVENT_TYPE: + \li EGET_COMBO_BOX_CHANGED + */ + class IGUIComboBox : public IGUIElement + { + public: + + //! constructor + IGUIComboBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect rectangle) + : IGUIElement(EGUIET_COMBO_BOX, environment, parent, id, rectangle) {} + + //! Returns amount of items in box + virtual u32 getItemCount() const = 0; + + //! Returns string of an item. the idx may be a value from 0 to itemCount-1 + virtual const wchar_t* getItem(u32 idx) const = 0; + + //! Returns item data of an item. the idx may be a value from 0 to itemCount-1 + virtual u32 getItemData(u32 idx) const = 0; + + //! Returns index based on item data + virtual s32 getIndexForItemData(u32 data ) const = 0; + + //! Adds an item and returns the index of it + virtual u32 addItem(const wchar_t* text, u32 data = 0) = 0; + + //! Removes an item from the combo box. + /** Warning. This will change the index of all following items */ + virtual void removeItem(u32 idx) = 0; + + //! Deletes all items in the combo box + virtual void clear() = 0; + + //! Returns id of selected item. returns -1 if no item is selected. + virtual s32 getSelected() const = 0; + + //! Sets the selected item. Set this to -1 if no item should be selected + virtual void setSelected(s32 idx) = 0; + + //! Sets text justification of the text area + /** \param horizontal: EGUIA_UPPERLEFT for left justified (default), + EGUIA_LOWEERRIGHT for right justified, or EGUIA_CENTER for centered text. + \param vertical: EGUIA_UPPERLEFT to align with top edge, + EGUIA_LOWEERRIGHT for bottom edge, or EGUIA_CENTER for centered text (default). */ + virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) = 0; + + //! Set the maximal number of rows for the selection listbox + virtual void setMaxSelectionRows(u32 max) = 0; + + //! Get the maximimal number of rows for the selection listbox + virtual u32 getMaxSelectionRows() const = 0; + }; + + +} // end namespace gui +} // end namespace irr + +#endif + diff --git a/inc/IGUIContextMenu.h b/inc/IGUIContextMenu.h new file mode 100644 index 0000000..9f5ea25 --- /dev/null +++ b/inc/IGUIContextMenu.h @@ -0,0 +1,162 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_GUI_CONTEXT_MENU_H_INCLUDED__ +#define __I_GUI_CONTEXT_MENU_H_INCLUDED__ + +#include "IGUIElement.h" + +namespace irr +{ +namespace gui +{ + //! Close behavior. + //! Default is ECMC_REMOVE + enum ECONTEXT_MENU_CLOSE + { + //! do nothing - menu stays open + ECMC_IGNORE = 0, + + //! remove the gui element + ECMC_REMOVE = 1, + + //! call setVisible(false) + ECMC_HIDE = 2 + + // note to implementors - this is planned as bitset, so continue with 4 if you need to add further flags. + }; + + //! GUI Context menu interface. + /** \par This element can create the following events of type EGUI_EVENT_TYPE: + \li EGET_ELEMENT_CLOSED + \li EGET_MENU_ITEM_SELECTED + */ + class IGUIContextMenu : public IGUIElement + { + public: + + //! constructor + IGUIContextMenu(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect rectangle) + : IGUIElement(EGUIET_CONTEXT_MENU, environment, parent, id, rectangle) {} + + //! set behavior when menus are closed + virtual void setCloseHandling(ECONTEXT_MENU_CLOSE onClose) = 0; + + //! get current behavior when the menu will be closed + virtual ECONTEXT_MENU_CLOSE getCloseHandling() const = 0; + + //! Get amount of menu items + virtual u32 getItemCount() const = 0; + + //! Adds a menu item. + /** \param text: Text of menu item. Set this to 0 to create + an separator instead of a real item, which is the same like + calling addSeparator(); + \param commandId: Command id of menu item, a simple id you may + set to whatever you want. + \param enabled: Specifies if the menu item should be enabled. + \param hasSubMenu: Set this to true if there should be a submenu + at this item. You can access this submenu via getSubMenu(). + \param checked: Specifies if the menu item should be initially checked. + \param autoChecking: Specifies if the item should be checked by clicking + \return Returns the index of the new item */ + virtual u32 addItem(const wchar_t* text, s32 commandId=-1, bool enabled=true, + bool hasSubMenu=false, bool checked=false, bool autoChecking=false) = 0; + + //! Insert a menu item at specified position. + /** \param idx: Position to insert the new element, + should be smaller than itemcount otherwise the item is added to the end. + \param text: Text of menu item. Set this to 0 to create + an separator instead of a real item, which is the same like + calling addSeparator(); + \param commandId: Command id of menu item, a simple id you may + set to whatever you want. + \param enabled: Specifies if the menu item should be enabled. + \param hasSubMenu: Set this to true if there should be a submenu + at this item. You can access this submenu via getSubMenu(). + \param checked: Specifies if the menu item should be initially checked. + \param autoChecking: Specifies if the item should be checked by clicking + \return Returns the index of the new item */ + virtual u32 insertItem(u32 idx, const wchar_t* text, s32 commandId=-1, bool enabled=true, + bool hasSubMenu=false, bool checked=false, bool autoChecking=false) = 0; + + //! Find an item by it's CommandID + /** + \param commandId: We are looking for the first item which has this commandID + \param idxStartSearch: Start searching from this index. + \return Returns the index of the item when found or otherwise -1. */ + virtual s32 findItemWithCommandId(s32 commandId, u32 idxStartSearch=0) const = 0; + + //! Adds a separator item to the menu + virtual void addSeparator() = 0; + + //! Get text of the menu item. + /** \param idx: Zero based index of the menu item */ + virtual const wchar_t* getItemText(u32 idx) const = 0; + + //! Sets text of the menu item. + /** \param idx: Zero based index of the menu item + \param text: New text of the item. */ + virtual void setItemText(u32 idx, const wchar_t* text) = 0; + + //! Check if a menu item is enabled + /** \param idx: Zero based index of the menu item */ + virtual bool isItemEnabled(u32 idx) const = 0; + + //! Sets if the menu item should be enabled. + /** \param idx: Zero based index of the menu item + \param enabled: True if it is enabled, otherwise false. */ + virtual void setItemEnabled(u32 idx, bool enabled) = 0; + + //! Sets if the menu item should be checked. + /** \param idx: Zero based index of the menu item + \param enabled: True if it is enabled, otherwise false. */ + virtual void setItemChecked(u32 idx, bool enabled) = 0; + + //! Check if a menu item is checked + /** \param idx: Zero based index of the menu item */ + virtual bool isItemChecked(u32 idx) const = 0; + + //! Removes a menu item + /** \param idx: Zero based index of the menu item */ + virtual void removeItem(u32 idx) = 0; + + //! Removes all menu items + virtual void removeAllItems() = 0; + + //! Get the selected item in the menu + /** \return Index of the selected item, -1 if none selected. */ + virtual s32 getSelectedItem() const = 0; + + //! Get the command id of a menu item + /** \param idx: Zero based index of the menu item */ + virtual s32 getItemCommandId(u32 idx) const = 0; + + //! Sets the command id of a menu item + /** \param idx: Zero based index of the menu item + \param id: Command id of menu item, a simple id you may + set to whatever you want. */ + virtual void setItemCommandId(u32 idx, s32 id) = 0; + + //! Get a pointer to the submenu of an item. + /** 0 is returned if there is no submenu + \param idx: Zero based index of the menu item + \return Returns a pointer to the submenu of an item. */ + virtual IGUIContextMenu* getSubMenu(u32 idx) const = 0; + + //! should the element change the checked status on clicking + virtual void setItemAutoChecking(u32 idx, bool autoChecking) = 0; + + //! does the element change the checked status on clicking + virtual bool getItemAutoChecking(u32 idx) const = 0; + + //! When an eventparent is set it receives events instead of the usual parent element + virtual void setEventParent(IGUIElement *parent) = 0; + }; + +} // end namespace gui +} // end namespace irr + +#endif + diff --git a/inc/IGUIEditBox.h b/inc/IGUIEditBox.h new file mode 100644 index 0000000..13a9501 --- /dev/null +++ b/inc/IGUIEditBox.h @@ -0,0 +1,135 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_GUI_EDIT_BOX_H_INCLUDED__ +#define __I_GUI_EDIT_BOX_H_INCLUDED__ + +#include "IGUIElement.h" +#include "SColor.h" + +namespace irr +{ +namespace gui +{ + class IGUIFont; + + //! Single line edit box for editing simple text. + /** \par This element can create the following events of type EGUI_EVENT_TYPE: + \li EGET_EDITBOX_ENTER + \li EGET_EDITBOX_CHANGED + \li EGET_EDITBOX_MARKING_CHANGED + */ + class IGUIEditBox : public IGUIElement + { + public: + + //! constructor + IGUIEditBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect rectangle) + : IGUIElement(EGUIET_EDIT_BOX, environment, parent, id, rectangle) {} + + //! Sets another skin independent font. + /** If this is set to zero, the button uses the font of the skin. + \param font: New font to set. */ + virtual void setOverrideFont(IGUIFont* font=0) = 0; + + //! Gets the override font (if any) + /** \return The override font (may be 0) */ + virtual IGUIFont* getOverrideFont() const = 0; + + //! Get the font which is used right now for drawing + /** Currently this is the override font when one is set and the + font of the active skin otherwise */ + virtual IGUIFont* getActiveFont() const = 0; + + //! Sets another color for the text. + /** If set, the edit box does not use the EGDC_BUTTON_TEXT color defined + in the skin, but the set color instead. You don't need to call + IGUIEditBox::enableOverrrideColor(true) after this, this is done + by this function. + If you set a color, and you want the text displayed with the color + of the skin again, call IGUIEditBox::enableOverrideColor(false); + \param color: New color of the text. */ + virtual void setOverrideColor(video::SColor color) = 0; + + //! Gets the override color + virtual video::SColor getOverrideColor() const = 0; + + //! Sets if the text should use the override color or the color in the gui skin. + /** \param enable: If set to true, the override color, which can be set + with IGUIEditBox::setOverrideColor is used, otherwise the + EGDC_BUTTON_TEXT color of the skin. */ + virtual void enableOverrideColor(bool enable) = 0; + + //! Checks if an override color is enabled + /** \return true if the override color is enabled, false otherwise */ + virtual bool isOverrideColorEnabled(void) const = 0; + + //! Sets whether to draw the background + virtual void setDrawBackground(bool draw) = 0; + + //! Turns the border on or off + /** \param border: true if you want the border to be drawn, false if not */ + virtual void setDrawBorder(bool border) = 0; + + //! Sets text justification mode + /** \param horizontal: EGUIA_UPPERLEFT for left justified (default), + EGUIA_LOWERRIGHT for right justified, or EGUIA_CENTER for centered text. + \param vertical: EGUIA_UPPERLEFT to align with top edge, + EGUIA_LOWERRIGHT for bottom edge, or EGUIA_CENTER for centered text (default). */ + virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) = 0; + + //! Enables or disables word wrap. + /** \param enable: If set to true, words going over one line are + broken to the next line. */ + virtual void setWordWrap(bool enable) = 0; + + //! Checks if word wrap is enabled + /** \return true if word wrap is enabled, false otherwise */ + virtual bool isWordWrapEnabled() const = 0; + + //! Enables or disables newlines. + /** \param enable: If set to true, the EGET_EDITBOX_ENTER event will not be fired, + instead a newline character will be inserted. */ + virtual void setMultiLine(bool enable) = 0; + + //! Checks if multi line editing is enabled + /** \return true if multi-line is enabled, false otherwise */ + virtual bool isMultiLineEnabled() const = 0; + + //! Enables or disables automatic scrolling with cursor position + /** \param enable: If set to true, the text will move around with the cursor position */ + virtual void setAutoScroll(bool enable) = 0; + + //! Checks to see if automatic scrolling is enabled + /** \return true if automatic scrolling is enabled, false if not */ + virtual bool isAutoScrollEnabled() const = 0; + + //! Sets whether the edit box is a password box. Setting this to true will + /** disable MultiLine, WordWrap and the ability to copy with ctrl+c or ctrl+x + \param passwordBox: true to enable password, false to disable + \param passwordChar: the character that is displayed instead of letters */ + virtual void setPasswordBox(bool passwordBox, wchar_t passwordChar = L'*') = 0; + + //! Returns true if the edit box is currently a password box. + virtual bool isPasswordBox() const = 0; + + //! Gets the size area of the text in the edit box + /** \return The size in pixels of the text */ + virtual core::dimension2du getTextDimension() = 0; + + //! Sets the maximum amount of characters which may be entered in the box. + /** \param max: Maximum amount of characters. If 0, the character amount is + infinity. */ + virtual void setMax(u32 max) = 0; + + //! Returns maximum amount of characters, previously set by setMax(); + virtual u32 getMax() const = 0; + }; + + +} // end namespace gui +} // end namespace irr + +#endif + diff --git a/inc/IGUIElement.h b/inc/IGUIElement.h new file mode 100644 index 0000000..098cd79 --- /dev/null +++ b/inc/IGUIElement.h @@ -0,0 +1,1037 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_GUI_ELEMENT_H_INCLUDED__ +#define __I_GUI_ELEMENT_H_INCLUDED__ + +#include "IAttributeExchangingObject.h" +#include "irrList.h" +#include "rect.h" +#include "irrString.h" +#include "IEventReceiver.h" +#include "EGUIElementTypes.h" +#include "EGUIAlignment.h" +#include "IAttributes.h" + +namespace irr +{ +namespace gui +{ + +class IGUIEnvironment; + +//! Base class of all GUI elements. +class IGUIElement : public virtual io::IAttributeExchangingObject, public IEventReceiver +{ +public: + + //! Constructor + IGUIElement(EGUI_ELEMENT_TYPE type, IGUIEnvironment* environment, IGUIElement* parent, + s32 id, const core::rect& rectangle) + : Parent(0), RelativeRect(rectangle), AbsoluteRect(rectangle), + AbsoluteClippingRect(rectangle), DesiredRect(rectangle), + MaxSize(0,0), MinSize(1,1), IsVisible(true), IsEnabled(true), + IsSubElement(false), NoClip(false), ID(id), IsTabStop(false), TabOrder(-1), IsTabGroup(false), + AlignLeft(EGUIA_UPPERLEFT), AlignRight(EGUIA_UPPERLEFT), AlignTop(EGUIA_UPPERLEFT), AlignBottom(EGUIA_UPPERLEFT), + Environment(environment), Type(type) + { + #ifdef _DEBUG + setDebugName("IGUIElement"); + #endif + + // if we were given a parent to attach to + if (parent) + { + parent->addChildToEnd(this); + recalculateAbsolutePosition(true); + } + } + + + //! Destructor + virtual ~IGUIElement() + { + // delete all children + core::list::Iterator it = Children.begin(); + for (; it != Children.end(); ++it) + { + (*it)->Parent = 0; + (*it)->drop(); + } + } + + + //! Returns parent of this element. + IGUIElement* getParent() const + { + return Parent; + } + + + //! Returns the relative rectangle of this element. + core::rect getRelativePosition() const + { + return RelativeRect; + } + + + //! Sets the relative rectangle of this element. + /** \param r The absolute position to set */ + void setRelativePosition(const core::rect& r) + { + if (Parent) + { + const core::rect& r2 = Parent->getAbsolutePosition(); + + core::dimension2df d((f32)(r2.getSize().Width), (f32)(r2.getSize().Height)); + + if (AlignLeft == EGUIA_SCALE) + ScaleRect.UpperLeftCorner.X = (f32)r.UpperLeftCorner.X / d.Width; + if (AlignRight == EGUIA_SCALE) + ScaleRect.LowerRightCorner.X = (f32)r.LowerRightCorner.X / d.Width; + if (AlignTop == EGUIA_SCALE) + ScaleRect.UpperLeftCorner.Y = (f32)r.UpperLeftCorner.Y / d.Height; + if (AlignBottom == EGUIA_SCALE) + ScaleRect.LowerRightCorner.Y = (f32)r.LowerRightCorner.Y / d.Height; + } + + DesiredRect = r; + updateAbsolutePosition(); + } + + //! Sets the relative rectangle of this element, maintaining its current width and height + /** \param position The new relative position to set. Width and height will not be changed. */ + void setRelativePosition(const core::position2di & position) + { + const core::dimension2di mySize = RelativeRect.getSize(); + const core::rect rectangle(position.X, position.Y, + position.X + mySize.Width, position.Y + mySize.Height); + setRelativePosition(rectangle); + } + + + //! Sets the relative rectangle of this element as a proportion of its parent's area. + /** \note This method used to be 'void setRelativePosition(const core::rect& r)' + \param r The rectangle to set, interpreted as a proportion of the parent's area. + Meaningful values are in the range [0...1], unless you intend this element to spill + outside its parent. */ + void setRelativePositionProportional(const core::rect& r) + { + if (!Parent) + return; + + const core::dimension2di& d = Parent->getAbsolutePosition().getSize(); + + DesiredRect = core::rect( + core::floor32((f32)d.Width * r.UpperLeftCorner.X), + core::floor32((f32)d.Height * r.UpperLeftCorner.Y), + core::floor32((f32)d.Width * r.LowerRightCorner.X), + core::floor32((f32)d.Height * r.LowerRightCorner.Y)); + + ScaleRect = r; + + updateAbsolutePosition(); + } + + + //! Gets the absolute rectangle of this element + core::rect getAbsolutePosition() const + { + return AbsoluteRect; + } + + + //! Returns the visible area of the element. + core::rect getAbsoluteClippingRect() const + { + return AbsoluteClippingRect; + } + + + //! Sets whether the element will ignore its parent's clipping rectangle + /** \param noClip If true, the element will not be clipped by its parent's clipping rectangle. */ + void setNotClipped(bool noClip) + { + NoClip = noClip; + updateAbsolutePosition(); + } + + + //! Gets whether the element will ignore its parent's clipping rectangle + /** \return true if the element is not clipped by its parent's clipping rectangle. */ + bool isNotClipped() const + { + return NoClip; + } + + + //! Sets the maximum size allowed for this element + /** If set to 0,0, there is no maximum size */ + void setMaxSize(core::dimension2du size) + { + MaxSize = size; + updateAbsolutePosition(); + } + + + //! Sets the minimum size allowed for this element + void setMinSize(core::dimension2du size) + { + MinSize = size; + if (MinSize.Width < 1) + MinSize.Width = 1; + if (MinSize.Height < 1) + MinSize.Height = 1; + updateAbsolutePosition(); + } + + + //! The alignment defines how the borders of this element will be positioned when the parent element is resized. + void setAlignment(EGUI_ALIGNMENT left, EGUI_ALIGNMENT right, EGUI_ALIGNMENT top, EGUI_ALIGNMENT bottom) + { + AlignLeft = left; + AlignRight = right; + AlignTop = top; + AlignBottom = bottom; + + if (Parent) + { + core::rect r(Parent->getAbsolutePosition()); + + core::dimension2df d((f32)r.getSize().Width, (f32)r.getSize().Height); + + if (AlignLeft == EGUIA_SCALE) + ScaleRect.UpperLeftCorner.X = (f32)DesiredRect.UpperLeftCorner.X / d.Width; + if (AlignRight == EGUIA_SCALE) + ScaleRect.LowerRightCorner.X = (f32)DesiredRect.LowerRightCorner.X / d.Width; + if (AlignTop == EGUIA_SCALE) + ScaleRect.UpperLeftCorner.Y = (f32)DesiredRect.UpperLeftCorner.Y / d.Height; + if (AlignBottom == EGUIA_SCALE) + ScaleRect.LowerRightCorner.Y = (f32)DesiredRect.LowerRightCorner.Y / d.Height; + } + } + + + //! Updates the absolute position. + virtual void updateAbsolutePosition() + { + recalculateAbsolutePosition(false); + + // update all children + core::list::Iterator it = Children.begin(); + for (; it != Children.end(); ++it) + { + (*it)->updateAbsolutePosition(); + } + } + + + //! Returns the topmost GUI element at the specific position. + /** + This will check this GUI element and all of its descendants, so it + may return this GUI element. To check all GUI elements, call this + function on device->getGUIEnvironment()->getRootGUIElement(). Note + that the root element is the size of the screen, so doing so (with + an on-screen point) will always return the root element if no other + element is above it at that point. + \param point: The point at which to find a GUI element. + \return The topmost GUI element at that point, or 0 if there are + no candidate elements at this point. + */ + IGUIElement* getElementFromPoint(const core::position2d& point) + { + IGUIElement* target = 0; + + // we have to search from back to front, because later children + // might be drawn over the top of earlier ones. + + core::list::Iterator it = Children.getLast(); + + if (isVisible()) + { + while(it != Children.end()) + { + target = (*it)->getElementFromPoint(point); + if (target) + return target; + + --it; + } + } + + if (isVisible() && isPointInside(point)) + target = this; + + return target; + } + + + //! Returns true if a point is within this element. + /** Elements with a shape other than a rectangle should override this method */ + virtual bool isPointInside(const core::position2d& point) const + { + return AbsoluteClippingRect.isPointInside(point); + } + + + //! Adds a GUI element as new child of this element. + virtual void addChild(IGUIElement* child) + { + addChildToEnd(child); + if (child) + { + child->updateAbsolutePosition(); + } + } + + //! Removes a child. + virtual void removeChild(IGUIElement* child) + { + core::list::Iterator it = Children.begin(); + for (; it != Children.end(); ++it) + if ((*it) == child) + { + (*it)->Parent = 0; + (*it)->drop(); + Children.erase(it); + return; + } + } + + + //! Removes this element from its parent. + virtual void remove() + { + if (Parent) + Parent->removeChild(this); + } + + + //! Draws the element and its children. + virtual void draw() + { + if ( isVisible() ) + { + core::list::Iterator it = Children.begin(); + for (; it != Children.end(); ++it) + (*it)->draw(); + } + } + + + //! animate the element and its children. + virtual void OnPostRender(u32 timeMs) + { + if ( isVisible() ) + { + core::list::Iterator it = Children.begin(); + for (; it != Children.end(); ++it) + (*it)->OnPostRender( timeMs ); + } + } + + + //! Moves this element. + virtual void move(core::position2d absoluteMovement) + { + setRelativePosition(DesiredRect + absoluteMovement); + } + + + //! Returns true if element is visible. + virtual bool isVisible() const + { + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return IsVisible; + } + + + //! Sets the visible state of this element. + virtual void setVisible(bool visible) + { + IsVisible = visible; + } + + + //! Returns true if this element was created as part of its parent control + virtual bool isSubElement() const + { + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return IsSubElement; + } + + + //! Sets whether this control was created as part of its parent. + /** For example, it is true when a scrollbar is part of a listbox. + SubElements are not saved to disk when calling guiEnvironment->saveGUI() */ + virtual void setSubElement(bool subElement) + { + IsSubElement = subElement; + } + + + //! If set to true, the focus will visit this element when using the tab key to cycle through elements. + /** If this element is a tab group (see isTabGroup/setTabGroup) then + ctrl+tab will be used instead. */ + void setTabStop(bool enable) + { + IsTabStop = enable; + } + + + //! Returns true if this element can be focused by navigating with the tab key + bool isTabStop() const + { + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return IsTabStop; + } + + + //! Sets the priority of focus when using the tab key to navigate between a group of elements. + /** See setTabGroup, isTabGroup and getTabGroup for information on tab groups. + Elements with a lower number are focused first */ + void setTabOrder(s32 index) + { + // negative = autonumber + if (index < 0) + { + TabOrder = 0; + IGUIElement *el = getTabGroup(); + while (IsTabGroup && el && el->Parent) + el = el->Parent; + + IGUIElement *first=0, *closest=0; + if (el) + { + // find the highest element number + el->getNextElement(-1, true, IsTabGroup, first, closest, true); + if (first) + { + TabOrder = first->getTabOrder() + 1; + } + } + + } + else + TabOrder = index; + } + + + //! Returns the number in the tab order sequence + s32 getTabOrder() const + { + return TabOrder; + } + + + //! Sets whether this element is a container for a group of elements which can be navigated using the tab key. + /** For example, windows are tab groups. + Groups can be navigated using ctrl+tab, providing isTabStop is true. */ + void setTabGroup(bool isGroup) + { + IsTabGroup = isGroup; + } + + + //! Returns true if this element is a tab group. + bool isTabGroup() const + { + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return IsTabGroup; + } + + + //! Returns the container element which holds all elements in this element's tab group. + IGUIElement* getTabGroup() + { + IGUIElement *ret=this; + + while (ret && !ret->isTabGroup()) + ret = ret->getParent(); + + return ret; + } + + + //! Returns true if element is enabled + /** Currently elements do _not_ care about parent-states. + So if you want to affect childs you have to enable/disable them all. + The only exception to this are sub-elements which also check their parent. + */ + virtual bool isEnabled() const + { + if ( isSubElement() && IsEnabled && getParent() ) + return getParent()->isEnabled(); + + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return IsEnabled; + } + + + //! Sets the enabled state of this element. + virtual void setEnabled(bool enabled) + { + IsEnabled = enabled; + } + + + //! Sets the new caption of this element. + virtual void setText(const wchar_t* text) + { + Text = text; + } + + + //! Returns caption of this element. + virtual const wchar_t* getText() const + { + return Text.c_str(); + } + + + //! Sets the new caption of this element. + virtual void setToolTipText(const wchar_t* text) + { + ToolTipText = text; + } + + + //! Returns caption of this element. + virtual const core::stringw& getToolTipText() const + { + return ToolTipText; + } + + + //! Returns id. Can be used to identify the element. + virtual s32 getID() const + { + return ID; + } + + + //! Sets the id of this element + virtual void setID(s32 id) + { + ID = id; + } + + + //! Called if an event happened. + virtual bool OnEvent(const SEvent& event) + { + return Parent ? Parent->OnEvent(event) : false; + } + + + //! Brings a child to front + /** \return True if successful, false if not. */ + virtual bool bringToFront(IGUIElement* element) + { + core::list::Iterator it = Children.begin(); + for (; it != Children.end(); ++it) + { + if (element == (*it)) + { + Children.erase(it); + Children.push_back(element); + return true; + } + } + + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return false; + } + + + //! Moves a child to the back, so it's siblings are drawn on top of it + /** \return True if successful, false if not. */ + virtual bool sendToBack(IGUIElement* child) + { + core::list::Iterator it = Children.begin(); + if (child == (*it)) // already there + return true; + for (; it != Children.end(); ++it) + { + if (child == (*it)) + { + Children.erase(it); + Children.push_front(child); + return true; + } + } + + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return false; + } + + //! Returns list with children of this element + virtual const core::list& getChildren() const + { + return Children; + } + + + //! Finds the first element with the given id. + /** \param id: Id to search for. + \param searchchildren: Set this to true, if also children of this + element may contain the element with the searched id and they + should be searched too. + \return Returns the first element with the given id. If no element + with this id was found, 0 is returned. */ + virtual IGUIElement* getElementFromId(s32 id, bool searchchildren=false) const + { + IGUIElement* e = 0; + + core::list::ConstIterator it = Children.begin(); + for (; it != Children.end(); ++it) + { + if ((*it)->getID() == id) + return (*it); + + if (searchchildren) + e = (*it)->getElementFromId(id, true); + + if (e) + return e; + } + + return e; + } + + + //! returns true if the given element is a child of this one. + //! \param child: The child element to check + bool isMyChild(IGUIElement* child) const + { + if (!child) + return false; + do + { + if (child->Parent) + child = child->Parent; + + } while (child->Parent && child != this); + + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return child == this; + } + + + //! searches elements to find the closest next element to tab to + /** \param startOrder: The TabOrder of the current element, -1 if none + \param reverse: true if searching for a lower number + \param group: true if searching for a higher one + \param first: element with the highest/lowest known tab order depending on search direction + \param closest: the closest match, depending on tab order and direction + \param includeInvisible: includes invisible elements in the search (default=false) + \return true if successfully found an element, false to continue searching/fail */ + bool getNextElement(s32 startOrder, bool reverse, bool group, + IGUIElement*& first, IGUIElement*& closest, bool includeInvisible=false) const + { + // we'll stop searching if we find this number + s32 wanted = startOrder + ( reverse ? -1 : 1 ); + if (wanted==-2) + wanted = 1073741824; // maximum s32 + + core::list::ConstIterator it = Children.begin(); + + s32 closestOrder, currentOrder; + + while(it != Children.end()) + { + // ignore invisible elements and their children + if ( ( (*it)->isVisible() || includeInvisible ) && + (group == true || (*it)->isTabGroup() == false) ) + { + // only check tab stops and those with the same group status + if ((*it)->isTabStop() && ((*it)->isTabGroup() == group)) + { + currentOrder = (*it)->getTabOrder(); + + // is this what we're looking for? + if (currentOrder == wanted) + { + closest = *it; + return true; + } + + // is it closer than the current closest? + if (closest) + { + closestOrder = closest->getTabOrder(); + if ( ( reverse && currentOrder > closestOrder && currentOrder < startOrder) + ||(!reverse && currentOrder < closestOrder && currentOrder > startOrder)) + { + closest = *it; + } + } + else + if ( (reverse && currentOrder < startOrder) || (!reverse && currentOrder > startOrder) ) + { + closest = *it; + } + + // is it before the current first? + if (first) + { + closestOrder = first->getTabOrder(); + + if ( (reverse && closestOrder < currentOrder) || (!reverse && closestOrder > currentOrder) ) + { + first = *it; + } + } + else + { + first = *it; + } + } + // search within children + if ((*it)->getNextElement(startOrder, reverse, group, first, closest)) + { + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return true; + } + } + ++it; + } + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return false; + } + + + //! Returns the type of the gui element. + /** This is needed for the .NET wrapper but will be used + later for serializing and deserializing. + If you wrote your own GUIElements, you need to set the type for your element as first parameter + in the constructor of IGUIElement. For own (=unknown) elements, simply use EGUIET_ELEMENT as type */ + EGUI_ELEMENT_TYPE getType() const + { + return Type; + } + + //! Returns true if the gui element supports the given type. + /** This is mostly used to check if you can cast a gui element to the class that goes with the type. + Most gui elements will only support their own type, but if you derive your own classes from interfaces + you can overload this function and add a check for the type of the base-class additionally. + This allows for checks comparable to the dynamic_cast of c++ with enabled rtti. + Note that you can't do that by calling BaseClass::hasType(type), but you have to do an explicit + comparison check, because otherwise the base class usually just checks for the membervariable + Type which contains the type of your derived class. + */ + virtual bool hasType(EGUI_ELEMENT_TYPE type) const + { + return type == Type; + } + + + //! Returns the type name of the gui element. + /** This is needed serializing elements. For serializing your own elements, override this function + and return your own type name which is created by your IGUIElementFactory */ + virtual const c8* getTypeName() const + { + return GUIElementTypeNames[Type]; + } + + //! Returns the name of the element. + /** \return Name as character string. */ + virtual const c8* getName() const + { + return Name.c_str(); + } + + + //! Sets the name of the element. + /** \param name New name of the gui element. */ + virtual void setName(const c8* name) + { + Name = name; + } + + + //! Sets the name of the element. + /** \param name New name of the gui element. */ + virtual void setName(const core::stringc& name) + { + Name = name; + } + + + //! Writes attributes of the scene node. + /** Implement this to expose the attributes of your scene node for + scripting languages, editors, debuggers or xml serialization purposes. */ + virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const + { + out->addString("Name", Name.c_str()); + out->addInt("Id", ID ); + out->addString("Caption", getText()); + out->addRect("Rect", DesiredRect); + out->addPosition2d("MinSize", core::position2di(MinSize.Width, MinSize.Height)); + out->addPosition2d("MaxSize", core::position2di(MaxSize.Width, MaxSize.Height)); + out->addEnum("LeftAlign", AlignLeft, GUIAlignmentNames); + out->addEnum("RightAlign", AlignRight, GUIAlignmentNames); + out->addEnum("TopAlign", AlignTop, GUIAlignmentNames); + out->addEnum("BottomAlign", AlignBottom, GUIAlignmentNames); + out->addBool("Visible", IsVisible); + out->addBool("Enabled", IsEnabled); + out->addBool("TabStop", IsTabStop); + out->addBool("TabGroup", IsTabGroup); + out->addInt("TabOrder", TabOrder); + out->addBool("NoClip", NoClip); + } + + + //! Reads attributes of the scene node. + /** Implement this to set the attributes of your scene node for + scripting languages, editors, debuggers or xml deserialization purposes. */ + virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0) + { + setName(in->getAttributeAsString("Name")); + setID(in->getAttributeAsInt("Id")); + setText(in->getAttributeAsStringW("Caption").c_str()); + setVisible(in->getAttributeAsBool("Visible")); + setEnabled(in->getAttributeAsBool("Enabled")); + IsTabStop = in->getAttributeAsBool("TabStop"); + IsTabGroup = in->getAttributeAsBool("TabGroup"); + TabOrder = in->getAttributeAsInt("TabOrder"); + + core::position2di p = in->getAttributeAsPosition2d("MaxSize"); + setMaxSize(core::dimension2du(p.X,p.Y)); + + p = in->getAttributeAsPosition2d("MinSize"); + setMinSize(core::dimension2du(p.X,p.Y)); + + setAlignment((EGUI_ALIGNMENT) in->getAttributeAsEnumeration("LeftAlign", GUIAlignmentNames), + (EGUI_ALIGNMENT)in->getAttributeAsEnumeration("RightAlign", GUIAlignmentNames), + (EGUI_ALIGNMENT)in->getAttributeAsEnumeration("TopAlign", GUIAlignmentNames), + (EGUI_ALIGNMENT)in->getAttributeAsEnumeration("BottomAlign", GUIAlignmentNames)); + + setRelativePosition(in->getAttributeAsRect("Rect")); + + setNotClipped(in->getAttributeAsBool("NoClip")); + } + +protected: + // not virtual because needed in constructor + void addChildToEnd(IGUIElement* child) + { + if (child) + { + child->grab(); // prevent destruction when removed + child->remove(); // remove from old parent + child->LastParentRect = getAbsolutePosition(); + child->Parent = this; + Children.push_back(child); + } + } + + // not virtual because needed in constructor + void recalculateAbsolutePosition(bool recursive) + { + core::rect parentAbsolute(0,0,0,0); + core::rect parentAbsoluteClip; + f32 fw=0.f, fh=0.f; + + if (Parent) + { + parentAbsolute = Parent->AbsoluteRect; + + if (NoClip) + { + IGUIElement* p=this; + while (p && p->Parent) + p = p->Parent; + parentAbsoluteClip = p->AbsoluteClippingRect; + } + else + parentAbsoluteClip = Parent->AbsoluteClippingRect; + } + + const s32 diffx = parentAbsolute.getWidth() - LastParentRect.getWidth(); + const s32 diffy = parentAbsolute.getHeight() - LastParentRect.getHeight(); + + if (AlignLeft == EGUIA_SCALE || AlignRight == EGUIA_SCALE) + fw = (f32)parentAbsolute.getWidth(); + + if (AlignTop == EGUIA_SCALE || AlignBottom == EGUIA_SCALE) + fh = (f32)parentAbsolute.getHeight(); + + switch (AlignLeft) + { + case EGUIA_UPPERLEFT: + break; + case EGUIA_LOWERRIGHT: + DesiredRect.UpperLeftCorner.X += diffx; + break; + case EGUIA_CENTER: + DesiredRect.UpperLeftCorner.X += diffx/2; + break; + case EGUIA_SCALE: + DesiredRect.UpperLeftCorner.X = core::round32(ScaleRect.UpperLeftCorner.X * fw); + break; + } + + switch (AlignRight) + { + case EGUIA_UPPERLEFT: + break; + case EGUIA_LOWERRIGHT: + DesiredRect.LowerRightCorner.X += diffx; + break; + case EGUIA_CENTER: + DesiredRect.LowerRightCorner.X += diffx/2; + break; + case EGUIA_SCALE: + DesiredRect.LowerRightCorner.X = core::round32(ScaleRect.LowerRightCorner.X * fw); + break; + } + + switch (AlignTop) + { + case EGUIA_UPPERLEFT: + break; + case EGUIA_LOWERRIGHT: + DesiredRect.UpperLeftCorner.Y += diffy; + break; + case EGUIA_CENTER: + DesiredRect.UpperLeftCorner.Y += diffy/2; + break; + case EGUIA_SCALE: + DesiredRect.UpperLeftCorner.Y = core::round32(ScaleRect.UpperLeftCorner.Y * fh); + break; + } + + switch (AlignBottom) + { + case EGUIA_UPPERLEFT: + break; + case EGUIA_LOWERRIGHT: + DesiredRect.LowerRightCorner.Y += diffy; + break; + case EGUIA_CENTER: + DesiredRect.LowerRightCorner.Y += diffy/2; + break; + case EGUIA_SCALE: + DesiredRect.LowerRightCorner.Y = core::round32(ScaleRect.LowerRightCorner.Y * fh); + break; + } + + RelativeRect = DesiredRect; + + const s32 w = RelativeRect.getWidth(); + const s32 h = RelativeRect.getHeight(); + + // make sure the desired rectangle is allowed + if (w < (s32)MinSize.Width) + RelativeRect.LowerRightCorner.X = RelativeRect.UpperLeftCorner.X + MinSize.Width; + if (h < (s32)MinSize.Height) + RelativeRect.LowerRightCorner.Y = RelativeRect.UpperLeftCorner.Y + MinSize.Height; + if (MaxSize.Width && w > (s32)MaxSize.Width) + RelativeRect.LowerRightCorner.X = RelativeRect.UpperLeftCorner.X + MaxSize.Width; + if (MaxSize.Height && h > (s32)MaxSize.Height) + RelativeRect.LowerRightCorner.Y = RelativeRect.UpperLeftCorner.Y + MaxSize.Height; + + RelativeRect.repair(); + + AbsoluteRect = RelativeRect + parentAbsolute.UpperLeftCorner; + + if (!Parent) + parentAbsoluteClip = AbsoluteRect; + + AbsoluteClippingRect = AbsoluteRect; + AbsoluteClippingRect.clipAgainst(parentAbsoluteClip); + + LastParentRect = parentAbsolute; + + if ( recursive ) + { + // update all children + core::list::Iterator it = Children.begin(); + for (; it != Children.end(); ++it) + { + (*it)->recalculateAbsolutePosition(recursive); + } + } + } + +protected: + + //! List of all children of this element + core::list Children; + + //! Pointer to the parent + IGUIElement* Parent; + + //! relative rect of element + core::rect RelativeRect; + + //! absolute rect of element + core::rect AbsoluteRect; + + //! absolute clipping rect of element + core::rect AbsoluteClippingRect; + + //! the rectangle the element would prefer to be, + //! if it was not constrained by parent or max/min size + core::rect DesiredRect; + + //! for calculating the difference when resizing parent + core::rect LastParentRect; + + //! relative scale of the element inside its parent + core::rect ScaleRect; + + //! maximum and minimum size of the element + core::dimension2du MaxSize, MinSize; + + //! is visible? + bool IsVisible; + + //! is enabled? + bool IsEnabled; + + //! is a part of a larger whole and should not be serialized? + bool IsSubElement; + + //! does this element ignore its parent's clipping rectangle? + bool NoClip; + + //! caption + core::stringw Text; + + //! tooltip + core::stringw ToolTipText; + + //! users can set this for identificating the element by string + core::stringc Name; + + //! users can set this for identificating the element by integer + s32 ID; + + //! tab stop like in windows + bool IsTabStop; + + //! tab order + s32 TabOrder; + + //! tab groups are containers like windows, use ctrl+tab to navigate + bool IsTabGroup; + + //! tells the element how to act when its parent is resized + EGUI_ALIGNMENT AlignLeft, AlignRight, AlignTop, AlignBottom; + + //! GUI Environment + IGUIEnvironment* Environment; + + //! type of element + EGUI_ELEMENT_TYPE Type; +}; + + +} // end namespace gui +} // end namespace irr + +#endif + diff --git a/inc/IGUIElementFactory.h b/inc/IGUIElementFactory.h new file mode 100644 index 0000000..ca2df8b --- /dev/null +++ b/inc/IGUIElementFactory.h @@ -0,0 +1,66 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_GUI_ELEMENT_FACTORY_H_INCLUDED__ +#define __I_GUI_ELEMENT_FACTORY_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "EGUIElementTypes.h" + +namespace irr +{ + +namespace gui +{ + class IGUIElement; + + //! Interface making it possible to dynamically create GUI elements + /** To be able to add custom elements to Irrlicht and to make it possible for the + scene manager to save and load them, simply implement this interface and register it + in your gui environment via IGUIEnvironment::registerGUIElementFactory. + Note: When implementing your own element factory, don't call IGUIEnvironment::grab() to + increase the reference counter of the environment. This is not necessary because the + it will grab() the factory anyway, and otherwise cyclic references will be created. + */ + class IGUIElementFactory : public virtual IReferenceCounted + { + public: + + //! adds an element to the gui environment based on its type id + /** \param type: Type of the element to add. + \param parent: Parent scene node of the new element, can be null to add to the root. + \return Pointer to the new element or null if not successful. */ + virtual IGUIElement* addGUIElement(EGUI_ELEMENT_TYPE type, IGUIElement* parent=0) = 0; + + //! adds a GUI element to the GUI Environment based on its type name + /** \param typeName: Type name of the element to add. + \param parent: Parent scene node of the new element, can be null to add it to the root. + \return Pointer to the new element or null if not successful. */ + virtual IGUIElement* addGUIElement(const c8* typeName, IGUIElement* parent=0) = 0; + + //! Get amount of GUI element types this factory is able to create + virtual s32 getCreatableGUIElementTypeCount() const = 0; + + //! Get type of a createable element type + /** \param idx: Index of the element type in this factory. Must be a value between 0 and + getCreatableGUIElementTypeCount() */ + virtual EGUI_ELEMENT_TYPE getCreateableGUIElementType(s32 idx) const = 0; + + //! Get type name of a createable GUI element type by index + /** \param idx: Index of the type in this factory. Must be a value between 0 and + getCreatableGUIElementTypeCount() */ + virtual const c8* getCreateableGUIElementTypeName(s32 idx) const = 0; + + //! returns type name of a createable GUI element + /** \param type: Type of GUI element. + \return Name of the type if this factory can create the type, otherwise 0. */ + virtual const c8* getCreateableGUIElementTypeName(EGUI_ELEMENT_TYPE type) const = 0; + }; + + +} // end namespace gui +} // end namespace irr + +#endif // __I_GUI_ELEMENT_FACTORY_H_INCLUDED__ + diff --git a/inc/IGUIEnvironment.h b/inc/IGUIEnvironment.h new file mode 100644 index 0000000..219e419 --- /dev/null +++ b/inc/IGUIEnvironment.h @@ -0,0 +1,620 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_GUI_ENVIRONMENT_H_INCLUDED__ +#define __I_GUI_ENVIRONMENT_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "IGUISkin.h" +#include "rect.h" +#include "EMessageBoxFlags.h" +#include "IEventReceiver.h" +#include "IXMLReader.h" +#include "path.h" + +namespace irr +{ + class IOSOperator; + class IEventReceiver; + + namespace io + { + class IXMLWriter; + class IReadFile; + class IWriteFile; + class IFileSystem; + } // end namespace io + namespace video + { + class IVideoDriver; + class ITexture; + } // end namespace video + +namespace gui +{ + +class IGUIElement; +class IGUIFont; +class IGUISpriteBank; +class IGUIScrollBar; +class IGUIImage; +class IGUIMeshViewer; +class IGUICheckBox; +class IGUIListBox; +class IGUITreeView; +class IGUIImageList; +class IGUIFileOpenDialog; +class IGUIColorSelectDialog; +class IGUIInOutFader; +class IGUIStaticText; +class IGUIEditBox; +class IGUISpinBox; +class IGUITabControl; +class IGUITab; +class IGUITable; +class IGUIContextMenu; +class IGUIComboBox; +class IGUIToolBar; +class IGUIButton; +class IGUIWindow; +class IGUIElementFactory; + +//! GUI Environment. Used as factory and manager of all other GUI elements. +/** \par This element can create the following events of type EGUI_EVENT_TYPE (which are passed on to focused sub-elements): +\li EGET_ELEMENT_FOCUS_LOST +\li EGET_ELEMENT_FOCUSED +\li EGET_ELEMENT_LEFT +\li EGET_ELEMENT_HOVERED +*/ +class IGUIEnvironment : public virtual IReferenceCounted +{ +public: + + //! Draws all gui elements by traversing the GUI environment starting at the root node. + virtual void drawAll() = 0; + + //! Sets the focus to an element. + /** Causes a EGET_ELEMENT_FOCUS_LOST event followed by a + EGET_ELEMENT_FOCUSED event. If someone absorbed either of the events, + then the focus will not be changed. + \param element Pointer to the element which shall get the focus. + \return True on success, false on failure */ + virtual bool setFocus(IGUIElement* element) = 0; + + //! Returns the element which holds the focus. + /** \return Pointer to the element with focus. */ + virtual IGUIElement* getFocus() const = 0; + + //! Returns the element which was last under the mouse cursor + /** NOTE: This information is updated _after_ the user-eventreceiver + received it's mouse-events. To find the hovered element while catching + mouse events you have to use instead: + IGUIEnvironment::getRootGUIElement()->getElementFromPoint(mousePos); + \return Pointer to the element under the mouse. */ + virtual IGUIElement* getHovered() const = 0; + + //! Removes the focus from an element. + /** Causes a EGET_ELEMENT_FOCUS_LOST event. If the event is absorbed + then the focus will not be changed. + \param element Pointer to the element which shall lose the focus. + \return True on success, false on failure */ + virtual bool removeFocus(IGUIElement* element) = 0; + + //! Returns whether the element has focus + /** \param element Pointer to the element which is tested. + \return True if the element has focus, else false. */ + virtual bool hasFocus(IGUIElement* element) const = 0; + + //! Returns the current video driver. + /** \return Pointer to the video driver. */ + virtual video::IVideoDriver* getVideoDriver() const = 0; + + //! Returns the file system. + /** \return Pointer to the file system. */ + virtual io::IFileSystem* getFileSystem() const = 0; + + //! returns a pointer to the OS operator + /** \return Pointer to the OS operator. */ + virtual IOSOperator* getOSOperator() const = 0; + + //! Removes all elements from the environment. + virtual void clear() = 0; + + //! Posts an input event to the environment. + /** Usually you do not have to + use this method, it is used by the engine internally. + \param event The event to post. + \return True if succeeded, else false. */ + virtual bool postEventFromUser(const SEvent& event) = 0; + + //! This sets a new event receiver for gui events. + /** Usually you do not have to + use this method, it is used by the engine internally. + \param evr Pointer to the new receiver. */ + virtual void setUserEventReceiver(IEventReceiver* evr) = 0; + + //! Returns pointer to the current gui skin. + /** \return Pointer to the GUI skin. */ + virtual IGUISkin* getSkin() const = 0; + + //! Sets a new GUI Skin + /** You can use this to change the appearance of the whole GUI + Environment. You can set one of the built-in skins or implement your + own class derived from IGUISkin and enable it using this method. + To set for example the built-in Windows classic skin, use the following + code: + \code + gui::IGUISkin* newskin = environment->createSkin(gui::EGST_WINDOWS_CLASSIC); + environment->setSkin(newskin); + newskin->drop(); + \endcode + \param skin New skin to use. + */ + virtual void setSkin(IGUISkin* skin) = 0; + + //! Creates a new GUI Skin based on a template. + /** Use setSkin() to set the created skin. + \param type The type of the new skin. + \return Pointer to the created skin. + If you no longer need it, you should call IGUISkin::drop(). + See IReferenceCounted::drop() for more information. */ + virtual IGUISkin* createSkin(EGUI_SKIN_TYPE type) = 0; + + + //! Creates the image list from the given texture. + /** \param texture Texture to split into images + \param imageSize Dimension of each image + \param useAlphaChannel Flag whether alpha channel of the texture should be honored. + \return Pointer to the font. Returns 0 if the font could not be loaded. + This pointer should not be dropped. See IReferenceCounted::drop() for + more information. */ + virtual IGUIImageList* createImageList( video::ITexture* texture, + core::dimension2d imageSize, + bool useAlphaChannel ) = 0; + + //! Returns pointer to the font with the specified filename. + /** Loads the font if it was not loaded before. + \param filename Filename of the Font. + \return Pointer to the font. Returns 0 if the font could not be loaded. + This pointer should not be dropped. See IReferenceCounted::drop() for + more information. */ + virtual IGUIFont* getFont(const io::path& filename) = 0; + + //! Adds an externally loaded font to the font list. + /** This method allows to attach an already loaded font to the list of + existing fonts. The font is grabbed if non-null and adding was successful. + \param name Name the font should be stored as. + \param font Pointer to font to add. + \return Pointer to the font stored. This can differ from given parameter if the name previously existed. */ + virtual IGUIFont* addFont(const io::path& name, IGUIFont* font) = 0; + + //! remove loaded font + virtual void removeFont(IGUIFont* font) = 0; + + //! Returns the default built-in font. + /** \return Pointer to the default built-in font. + This pointer should not be dropped. See IReferenceCounted::drop() for + more information. */ + virtual IGUIFont* getBuiltInFont() const = 0; + + //! Returns pointer to the sprite bank with the specified file name. + /** Loads the bank if it was not loaded before. + \param filename Filename of the sprite bank's origin. + \return Pointer to the sprite bank. Returns 0 if it could not be loaded. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual IGUISpriteBank* getSpriteBank(const io::path& filename) = 0; + + //! Adds an empty sprite bank to the manager + /** \param name Name of the new sprite bank. + \return Pointer to the sprite bank. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual IGUISpriteBank* addEmptySpriteBank(const io::path& name) = 0; + + //! Returns the root gui element. + /** This is the first gui element, the (direct or indirect) parent of all + other gui elements. It is a valid IGUIElement, with dimensions the same + size as the screen. + \return Pointer to the root element of the GUI. The returned pointer + should not be dropped. See IReferenceCounted::drop() for more + information. */ + virtual IGUIElement* getRootGUIElement() = 0; + + //! Adds a button element. + /** \param rectangle Rectangle specifying the borders of the button. + \param parent Parent gui element of the button. + \param id Id with which the gui element can be identified. + \param text Text displayed on the button. + \param tooltiptext Text displayed in the tooltip. + \return Pointer to the created button. Returns 0 if an error occurred. + This pointer should not be dropped. See IReferenceCounted::drop() for + more information. */ + virtual IGUIButton* addButton(const core::rect& rectangle, + IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0, const wchar_t* tooltiptext = 0) = 0; + + //! Adds an empty window element. + /** \param rectangle Rectangle specifying the borders of the window. + \param modal Defines if the dialog is modal. This means, that all other + gui elements which were created before the window cannot be used until + it is removed. + \param text Text displayed as the window title. + \param parent Parent gui element of the window. + \param id Id with which the gui element can be identified. + \return Pointer to the created window. Returns 0 if an error occurred. + This pointer should not be dropped. See IReferenceCounted::drop() for + more information. */ + virtual IGUIWindow* addWindow(const core::rect& rectangle, bool modal = false, + const wchar_t* text=0, IGUIElement* parent=0, s32 id=-1) = 0; + + //! Adds a modal screen. + /** This control stops its parent's members from being able to receive + input until its last child is removed, it then deletes itself. + \param parent Parent gui element of the modal. + \return Pointer to the created modal. Returns 0 if an error occurred. + This pointer should not be dropped. See IReferenceCounted::drop() for + more information. */ + virtual IGUIElement* addModalScreen(IGUIElement* parent) = 0; + + //! Adds a message box. + /** \param caption Text to be displayed the title of the message box. + \param text Text to be displayed in the body of the message box. + \param modal Defines if the dialog is modal. This means, that all other + gui elements which were created before the message box cannot be used + until this messagebox is removed. + \param flags Flags specifying the layout of the message box. For example + to create a message box with an OK and a CANCEL button on it, set this + to (EMBF_OK | EMBF_CANCEL). + \param parent Parent gui element of the message box. + \param id Id with which the gui element can be identified. + \param image Optional texture which will be displayed beside the text as an image + \return Pointer to the created message box. Returns 0 if an error + occurred. This pointer should not be dropped. See + IReferenceCounted::drop() for more information. */ + virtual IGUIWindow* addMessageBox(const wchar_t* caption, const wchar_t* text=0, + bool modal = true, s32 flags = EMBF_OK, IGUIElement* parent=0, s32 id=-1, video::ITexture* image=0) = 0; + + //! Adds a scrollbar. + /** \param horizontal Specifies if the scroll bar is drawn horizontal + or vertical. + \param rectangle Rectangle specifying the borders of the scrollbar. + \param parent Parent gui element of the scroll bar. + \param id Id to identify the gui element. + \return Pointer to the created scrollbar. Returns 0 if an error + occurred. This pointer should not be dropped. See + IReferenceCounted::drop() for more information. */ + virtual IGUIScrollBar* addScrollBar(bool horizontal, const core::rect& rectangle, + IGUIElement* parent=0, s32 id=-1) = 0; + + //! Adds an image element. + /** \param image Image to be displayed. + \param pos Position of the image. The width and height of the image is + taken from the image. + \param useAlphaChannel Sets if the image should use the alpha channel + of the texture to draw itself. + \param parent Parent gui element of the image. + \param id Id to identify the gui element. + \param text Title text of the image. + \return Pointer to the created image element. Returns 0 if an error + occurred. This pointer should not be dropped. See + IReferenceCounted::drop() for more information. */ + virtual IGUIImage* addImage(video::ITexture* image, core::position2d pos, + bool useAlphaChannel=true, IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0) = 0; + + //! Adds an image element. + /** Use IGUIImage::setImage later to set the image to be displayed. + \param rectangle Rectangle specifying the borders of the image. + \param parent Parent gui element of the image. + \param id Id to identify the gui element. + \param text Title text of the image. + \param useAlphaChannel Sets if the image should use the alpha channel + of the texture to draw itself. + \return Pointer to the created image element. Returns 0 if an error + occurred. This pointer should not be dropped. See + IReferenceCounted::drop() for more information. */ + virtual IGUIImage* addImage(const core::rect& rectangle, + IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0, bool useAlphaChannel=true) = 0; + + //! Adds a checkbox element. + /** \param checked Define the initial state of the check box. + \param rectangle Rectangle specifying the borders of the check box. + \param parent Parent gui element of the check box. + \param id Id to identify the gui element. + \param text Title text of the check box. + \return Pointer to the created check box. Returns 0 if an error + occurred. This pointer should not be dropped. See + IReferenceCounted::drop() for more information. */ + virtual IGUICheckBox* addCheckBox(bool checked, const core::rect& rectangle, + IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0) = 0; + + //! Adds a list box element. + /** \param rectangle Rectangle specifying the borders of the list box. + \param parent Parent gui element of the list box. + \param id Id to identify the gui element. + \param drawBackground Flag whether the background should be drawn. + \return Pointer to the created list box. Returns 0 if an error occurred. + This pointer should not be dropped. See IReferenceCounted::drop() for + more information. */ + virtual IGUIListBox* addListBox(const core::rect& rectangle, + IGUIElement* parent=0, s32 id=-1, bool drawBackground=false) = 0; + + //! Adds a tree view element. + /** \param rectangle Position and dimension of list box. + \param parent Parent gui element of the list box. + \param id Id to identify the gui element. + \param drawBackground Flag whether the background should be drawn. + \param scrollBarVertical Flag whether a vertical scrollbar should be used + \param scrollBarHorizontal Flag whether a horizontal scrollbar should be used + \return Pointer to the created list box. Returns 0 if an error occurred. + This pointer should not be dropped. See IReferenceCounted::drop() for + more information. */ + virtual IGUITreeView* addTreeView(const core::rect& rectangle, + IGUIElement* parent=0, s32 id=-1, bool drawBackground=false, + bool scrollBarVertical = true, bool scrollBarHorizontal = false) = 0; + + //! Adds a mesh viewer. Not 100% implemented yet. + /** \param rectangle Rectangle specifying the borders of the mesh viewer. + \param parent Parent gui element of the mesh viewer. + \param id Id to identify the gui element. + \param text Title text of the mesh viewer. + \return Pointer to the created mesh viewer. Returns 0 if an error + occurred. This pointer should not be dropped. See + IReferenceCounted::drop() for more information. */ + virtual IGUIMeshViewer* addMeshViewer(const core::rect& rectangle, + IGUIElement* parent=0, s32 id=-1, const wchar_t* text=0) = 0; + + //! Adds a file open dialog. + /** \param title Text to be displayed as the title of the dialog. + \param modal Defines if the dialog is modal. This means, that all other + gui elements which were created before the message box cannot be used + until this messagebox is removed. + \param parent Parent gui element of the dialog. + \param id Id to identify the gui element. + \param restoreCWD If set to true, the current workingn directory will be + restored after the dialog is closed in some way. Otherwise the working + directory will be the one that the file dialog was last showing. + \param startDir Optional path for which the file dialog will be opened. + \return Pointer to the created file open dialog. Returns 0 if an error + occurred. This pointer should not be dropped. See + IReferenceCounted::drop() for more information. */ + virtual IGUIFileOpenDialog* addFileOpenDialog(const wchar_t* title=0, + bool modal=true, IGUIElement* parent=0, s32 id=-1, + bool restoreCWD=false, io::path::char_type* startDir=0) = 0; + + //! Adds a color select dialog. + /** \param title The title of the dialog. + \param modal Defines if the dialog is modal. This means, that all other + gui elements which were created before the dialog cannot be used + until it is removed. + \param parent The parent of the dialog. + \param id The ID of the dialog. + \return Pointer to the created file open dialog. Returns 0 if an error + occurred. This pointer should not be dropped. See + IReferenceCounted::drop() for more information. */ + virtual IGUIColorSelectDialog* addColorSelectDialog(const wchar_t* title = 0, + bool modal=true, IGUIElement* parent=0, s32 id=-1) = 0; + + //! Adds a static text. + /** \param text Text to be displayed. Can be altered after creation by SetText(). + \param rectangle Rectangle specifying the borders of the static text + \param border Set to true if the static text should have a 3d border. + \param wordWrap Enable if the text should wrap into multiple lines. + \param parent Parent item of the element, e.g. a window. + \param id The ID of the element. + \param fillBackground Enable if the background shall be filled. + Defaults to false. + \return Pointer to the created static text. Returns 0 if an error + occurred. This pointer should not be dropped. See + IReferenceCounted::drop() for more information. */ + virtual IGUIStaticText* addStaticText(const wchar_t* text, const core::rect& rectangle, + bool border=false, bool wordWrap=true, IGUIElement* parent=0, s32 id=-1, + bool fillBackground = false) = 0; + + //! Adds an edit box. + /** Supports unicode input from every keyboard around the world, + scrolling, copying and pasting (exchanging data with the clipboard + directly), maximum character amount, marking, and all shortcuts like + ctrl+X, ctrl+V, ctrl+C, shift+Left, shift+Right, Home, End, and so on. + \param text Text to be displayed. Can be altered after creation + by setText(). + \param rectangle Rectangle specifying the borders of the edit box. + \param border Set to true if the edit box should have a 3d border. + \param parent Parent item of the element, e.g. a window. + Set it to 0 to place the edit box directly in the environment. + \param id The ID of the element. + \return Pointer to the created edit box. Returns 0 if an error occurred. + This pointer should not be dropped. See IReferenceCounted::drop() for + more information. */ + virtual IGUIEditBox* addEditBox(const wchar_t* text, const core::rect& rectangle, + bool border=true, IGUIElement* parent=0, s32 id=-1) = 0; + + //! Adds a spin box. + /** An edit box with up and down buttons + \param text Text to be displayed. Can be altered after creation by setText(). + \param rectangle Rectangle specifying the borders of the spin box. + \param border Set to true if the spin box should have a 3d border. + \param parent Parent item of the element, e.g. a window. + Set it to 0 to place the spin box directly in the environment. + \param id The ID of the element. + \return Pointer to the created spin box. Returns 0 if an error occurred. + This pointer should not be dropped. See IReferenceCounted::drop() for + more information. */ + virtual IGUISpinBox* addSpinBox(const wchar_t* text, const core::rect& rectangle, + bool border=true,IGUIElement* parent=0, s32 id=-1) = 0; + + //! Adds an element for fading in or out. + /** \param rectangle Rectangle specifying the borders of the fader. + If the pointer is NULL, the whole screen is used. + \param parent Parent item of the element, e.g. a window. + \param id An identifier for the fader. + \return Pointer to the created in-out-fader. Returns 0 if an error + occurred. This pointer should not be dropped. See + IReferenceCounted::drop() for more information. */ + virtual IGUIInOutFader* addInOutFader(const core::rect* rectangle=0, IGUIElement* parent=0, s32 id=-1) = 0; + + //! Adds a tab control to the environment. + /** \param rectangle Rectangle specifying the borders of the tab control. + \param parent Parent item of the element, e.g. a window. + Set it to 0 to place the tab control directly in the environment. + \param fillbackground Specifies if the background of the tab control + should be drawn. + \param border Specifies if a flat 3d border should be drawn. This is + usually not necessary unless you place the control directly into + the environment without a window as parent. + \param id An identifier for the tab control. + \return Pointer to the created tab control element. Returns 0 if an + error occurred. This pointer should not be dropped. See + IReferenceCounted::drop() for more information. */ + virtual IGUITabControl* addTabControl(const core::rect& rectangle, + IGUIElement* parent=0, bool fillbackground=false, + bool border=true, s32 id=-1) = 0; + + //! Adds tab to the environment. + /** You can use this element to group other elements. This is not used + for creating tabs on tab controls, please use IGUITabControl::addTab() + for this instead. + \param rectangle Rectangle specifying the borders of the tab. + \param parent Parent item of the element, e.g. a window. + Set it to 0 to place the tab directly in the environment. + \param id An identifier for the tab. + \return Pointer to the created tab. Returns 0 if an + error occurred. This pointer should not be dropped. See + IReferenceCounted::drop() for more information. */ + virtual IGUITab* addTab(const core::rect& rectangle, + IGUIElement* parent=0, s32 id=-1) = 0; + + //! Adds a context menu to the environment. + /** \param rectangle Rectangle specifying the borders of the menu. + Note that the menu is resizing itself based on what items you add. + \param parent Parent item of the element, e.g. a window. + Set it to 0 to place the menu directly in the environment. + \param id An identifier for the menu. + \return Pointer to the created context menu. Returns 0 if an + error occurred. This pointer should not be dropped. See + IReferenceCounted::drop() for more information. */ + virtual IGUIContextMenu* addContextMenu(const core::rect& rectangle, + IGUIElement* parent=0, s32 id=-1) = 0; + + //! Adds a menu to the environment. + /** This is like the menu you can find on top of most windows in modern + graphical user interfaces. + \param parent Parent item of the element, e.g. a window. + Set it to 0 to place the menu directly in the environment. + \param id An identifier for the menu. + \return Pointer to the created menu. Returns 0 if an + error occurred. This pointer should not be dropped. See + IReferenceCounted::drop() for more information. */ + virtual IGUIContextMenu* addMenu(IGUIElement* parent=0, s32 id=-1) = 0; + + //! Adds a toolbar to the environment. + /** It is like a menu that is always placed on top of its parent, and + contains buttons. + \param parent Parent item of the element, e.g. a window. + Set it to 0 to place the tool bar directly in the environment. + \param id An identifier for the tool bar. + \return Pointer to the created tool bar. Returns 0 if an + error occurred. This pointer should not be dropped. See + IReferenceCounted::drop() for more information. */ + virtual IGUIToolBar* addToolBar(IGUIElement* parent=0, s32 id=-1) = 0; + + //! Adds a combo box to the environment. + /** \param rectangle Rectangle specifying the borders of the combo box. + \param parent Parent item of the element, e.g. a window. + Set it to 0 to place the combo box directly in the environment. + \param id An identifier for the combo box. + \return Pointer to the created combo box. Returns 0 if an + error occurred. This pointer should not be dropped. See + IReferenceCounted::drop() for more information. */ + virtual IGUIComboBox* addComboBox(const core::rect& rectangle, + IGUIElement* parent=0, s32 id=-1) = 0; + + //! Adds a table to the environment + /** \param rectangle Rectangle specifying the borders of the table. + \param parent Parent item of the element, e.g. a window. Set it to 0 + to place the element directly in the environment. + \param id An identifier for the table. + \param drawBackground Flag whether the background should be drawn. + \return Pointer to the created table. Returns 0 if an error occurred. + This pointer should not be dropped. See IReferenceCounted::drop() for + more information. */ + virtual IGUITable* addTable(const core::rect& rectangle, + IGUIElement* parent=0, s32 id=-1, bool drawBackground=false) =0; + + //! Get the default element factory which can create all built-in elements + /** \return Pointer to the factory. + This pointer should not be dropped. See IReferenceCounted::drop() for + more information. */ + virtual IGUIElementFactory* getDefaultGUIElementFactory() const = 0; + + //! Adds an element factory to the gui environment. + /** Use this to extend the gui environment with new element types which + it should be able to create automatically, for example when loading + data from xml files. + \param factoryToAdd Pointer to new factory. */ + virtual void registerGUIElementFactory(IGUIElementFactory* factoryToAdd) = 0; + + //! Get amount of registered gui element factories. + /** \return Amount of registered gui element factories. */ + virtual u32 getRegisteredGUIElementFactoryCount() const = 0; + + //! Get a gui element factory by index + /** \param index Index of the factory. + \return Factory at given index, or 0 if no such factory exists. */ + virtual IGUIElementFactory* getGUIElementFactory(u32 index) const = 0; + + //! Adds a GUI element by its name + /** Each factory is checked if it can create an element of the given + name. The first match will be created. + \param elementName Name of the element to be created. + \param parent Parent of the new element, if not 0. + \return New GUI element, or 0 if no such element exists. */ + virtual IGUIElement* addGUIElement(const c8* elementName, IGUIElement* parent=0) = 0; + + //! Saves the current gui into a file. + /** \param filename Name of the file. + \param start The GUIElement to start with. Root if 0. + \return True if saving succeeded, else false. */ + virtual bool saveGUI(const io::path& filename, IGUIElement* start=0) = 0; + + //! Saves the current gui into a file. + /** \param file The file to write to. + \param start The GUIElement to start with. Root if 0. + \return True if saving succeeded, else false. */ + virtual bool saveGUI(io::IWriteFile* file, IGUIElement* start=0) = 0; + + //! Loads the gui. Note that the current gui is not cleared before. + /** When a parent is set the elements will be added below the parent, the parent itself does not deserialize. + When the file contains skin-settings from the gui-environment those are always serialized into the + guienvironment independent of the parent setting. + \param filename Name of the file. + \param parent Parent for the loaded GUI, root if 0. + \return True if loading succeeded, else false. */ + virtual bool loadGUI(const io::path& filename, IGUIElement* parent=0) = 0; + + //! Loads the gui. Note that the current gui is not cleared before. + /** When a parent is set the elements will be added below the parent, the parent itself does not deserialize. + When the file contains skin-settings from the gui-environment those are always serialized into the + guienvironment independent of the parent setting. + \param file The file to load from. + \param parent Parent for the loaded GUI, root if 0. + \return True if loading succeeded, else false. */ + virtual bool loadGUI(io::IReadFile* file, IGUIElement* parent=0) = 0; + + //! Writes attributes of the gui environment + virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const =0; + + //! Reads attributes of the gui environment + virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0)=0; + + //! writes an element + virtual void writeGUIElement(io::IXMLWriter* writer, IGUIElement* node) =0; + + //! reads an element + virtual void readGUIElement(io::IXMLReader* reader, IGUIElement* node) =0; +}; + + +} // end namespace gui +} // end namespace irr + +#endif + diff --git a/inc/IGUIFileOpenDialog.h b/inc/IGUIFileOpenDialog.h new file mode 100644 index 0000000..f89413b --- /dev/null +++ b/inc/IGUIFileOpenDialog.h @@ -0,0 +1,44 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_GUI_FILE_OPEN_DIALOG_H_INCLUDED__ +#define __I_GUI_FILE_OPEN_DIALOG_H_INCLUDED__ + +#include "IGUIElement.h" +#include "path.h" + +namespace irr +{ +namespace gui +{ + + //! Standard file chooser dialog. + /** \warning When the user selects a folder this does change the current working directory + + \par This element can create the following events of type EGUI_EVENT_TYPE: + \li EGET_DIRECTORY_SELECTED + \li EGET_FILE_SELECTED + \li EGET_FILE_CHOOSE_DIALOG_CANCELLED + */ + class IGUIFileOpenDialog : public IGUIElement + { + public: + + //! constructor + IGUIFileOpenDialog(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect rectangle) + : IGUIElement(EGUIET_FILE_OPEN_DIALOG, environment, parent, id, rectangle) {} + + //! Returns the filename of the selected file. Returns NULL, if no file was selected. + virtual const wchar_t* getFileName() const = 0; + + //! Returns the directory of the selected file. Returns NULL, if no directory was selected. + virtual const io::path& getDirectoryName() = 0; + }; + + +} // end namespace gui +} // end namespace irr + +#endif + diff --git a/inc/IGUIFont.h b/inc/IGUIFont.h new file mode 100644 index 0000000..2e97c82 --- /dev/null +++ b/inc/IGUIFont.h @@ -0,0 +1,104 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_GUI_FONT_H_INCLUDED__ +#define __I_GUI_FONT_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "SColor.h" +#include "rect.h" +#include "irrString.h" + +namespace irr +{ +namespace gui +{ + +//! An enum for the different types of GUI font. +enum EGUI_FONT_TYPE +{ + //! Bitmap fonts loaded from an XML file or a texture. + EGFT_BITMAP = 0, + + //! Scalable vector fonts loaded from an XML file. + /** These fonts reside in system memory and use no video memory + until they are displayed. These are slower than bitmap fonts + but can be easily scaled and rotated. */ + EGFT_VECTOR, + + //! A font which uses a the native API provided by the operating system. + /** Currently not used. */ + EGFT_OS, + + //! An external font type provided by the user. + EGFT_CUSTOM +}; + +//! Font interface. +class IGUIFont : public virtual IReferenceCounted +{ +public: + + //! Draws some text and clips it to the specified rectangle if wanted. + /** \param text: Text to draw + \param position: Rectangle specifying position where to draw the text. + \param color: Color of the text + \param hcenter: Specifies if the text should be centered horizontally into the rectangle. + \param vcenter: Specifies if the text should be centered vertically into the rectangle. + \param clip: Optional pointer to a rectangle against which the text will be clipped. + If the pointer is null, no clipping will be done. */ + virtual void draw(const core::stringw& text, const core::rect& position, + video::SColor color, bool hcenter=false, bool vcenter=false, + const core::rect* clip=0) = 0; + + //! Calculates the width and height of a given string of text. + /** \return Returns width and height of the area covered by the text if + it would be drawn. */ + virtual core::dimension2d getDimension(const wchar_t* text) const = 0; + + //! Calculates the index of the character in the text which is on a specific position. + /** \param text: Text string. + \param pixel_x: X pixel position of which the index of the character will be returned. + \return Returns zero based index of the character in the text, and -1 if no no character + is on this position. (=the text is too short). */ + virtual s32 getCharacterFromPos(const wchar_t* text, s32 pixel_x) const = 0; + + //! Returns the type of this font + virtual EGUI_FONT_TYPE getType() const { return EGFT_CUSTOM; } + + //! Sets global kerning width for the font. + virtual void setKerningWidth (s32 kerning) = 0; + + //! Sets global kerning height for the font. + virtual void setKerningHeight (s32 kerning) = 0; + + //! Gets kerning values (distance between letters) for the font. If no parameters are provided, + /** the global kerning distance is returned. + \param thisLetter: If this parameter is provided, the left side kerning + for this letter is added to the global kerning value. For example, a + space might only be one pixel wide, but it may be displayed as several + pixels. + \param previousLetter: If provided, kerning is calculated for both + letters and added to the global kerning value. For example, in a font + which supports kerning pairs a string such as 'Wo' may have the 'o' + tucked neatly under the 'W'. + */ + virtual s32 getKerningWidth(const wchar_t* thisLetter=0, const wchar_t* previousLetter=0) const = 0; + + //! Returns the distance between letters + virtual s32 getKerningHeight() const = 0; + + //! Define which characters should not be drawn by the font. + /** For example " " would not draw any space which is usually blank in + most fonts. + \param s String of symbols which are not send down to the videodriver + */ + virtual void setInvisibleCharacters( const wchar_t *s ) = 0; +}; + +} // end namespace gui +} // end namespace irr + +#endif + diff --git a/inc/IGUIFontBitmap.h b/inc/IGUIFontBitmap.h new file mode 100644 index 0000000..c05a652 --- /dev/null +++ b/inc/IGUIFontBitmap.h @@ -0,0 +1,46 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_GUI_FONT_BITMAP_H_INCLUDED__ +#define __I_GUI_FONT_BITMAP_H_INCLUDED__ + +#include "IGUIFont.h" + +namespace irr +{ +namespace gui +{ + class IGUISpriteBank; + +//! Font interface. +class IGUIFontBitmap : public IGUIFont +{ +public: + + //! Returns the type of this font + virtual EGUI_FONT_TYPE getType() const { return EGFT_BITMAP; } + + //! returns the parsed Symbol Information + virtual IGUISpriteBank* getSpriteBank() const = 0; + + //! returns the sprite number from a given character + virtual u32 getSpriteNoFromChar(const wchar_t *c) const = 0; + + //! Gets kerning values (distance between letters) for the font. If no parameters are provided, + /** the global kerning distance is returned. + \param thisLetter: If this parameter is provided, the left side kerning for this letter is added + to the global kerning value. For example, a space might only be one pixel wide, but it may + be displayed as several pixels. + \param previousLetter: If provided, kerning is calculated for both letters and added to the global + kerning value. For example, EGFT_BITMAP will add the right kerning value of previousLetter to the + left side kerning value of thisLetter, then add the global value. + */ + virtual s32 getKerningWidth(const wchar_t* thisLetter=0, const wchar_t* previousLetter=0) const = 0; +}; + +} // end namespace gui +} // end namespace irr + +#endif + diff --git a/inc/IGUIImage.h b/inc/IGUIImage.h new file mode 100644 index 0000000..5e6d347 --- /dev/null +++ b/inc/IGUIImage.h @@ -0,0 +1,58 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_GUI_IMAGE_H_INCLUDED__ +#define __I_GUI_IMAGE_H_INCLUDED__ + +#include "IGUIElement.h" + +namespace irr +{ +namespace video +{ + class ITexture; +} +namespace gui +{ + + //! GUI element displaying an image. + class IGUIImage : public IGUIElement + { + public: + + //! constructor + IGUIImage(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect rectangle) + : IGUIElement(EGUIET_IMAGE, environment, parent, id, rectangle) {} + + //! Sets an image texture + virtual void setImage(video::ITexture* image) = 0; + + //! Gets the image texture + virtual video::ITexture* getImage() const = 0; + + //! Sets the color of the image + virtual void setColor(video::SColor color) = 0; + + //! Sets if the image should scale to fit the element + virtual void setScaleImage(bool scale) = 0; + + //! Sets if the image should use its alpha channel to draw itself + virtual void setUseAlphaChannel(bool use) = 0; + + //! Gets the color of the image + virtual video::SColor getColor() const = 0; + + //! Returns true if the image is scaled to fit, false if not + virtual bool isImageScaled() const = 0; + + //! Returns true if the image is using the alpha channel, false if not + virtual bool isAlphaChannelUsed() const = 0; + }; + + +} // end namespace gui +} // end namespace irr + +#endif + diff --git a/inc/IGUIImageList.h b/inc/IGUIImageList.h new file mode 100644 index 0000000..fb4ca4b --- /dev/null +++ b/inc/IGUIImageList.h @@ -0,0 +1,45 @@ +// This file is part of the "Irrlicht Engine". +// written by Reinhard Ostermeier, reinhard@nospam.r-ostermeier.de + +#ifndef __I_GUI_IMAGE_LIST_H_INCLUDED__ +#define __I_GUI_IMAGE_LIST_H_INCLUDED__ + +#include "IGUIElement.h" +#include "rect.h" +#include "irrTypes.h" + +namespace irr +{ +namespace gui +{ + +//! Font interface. +class IGUIImageList : public virtual IReferenceCounted +{ +public: + + //! Destructor + virtual ~IGUIImageList() {}; + + //! Draws an image and clips it to the specified rectangle if wanted + //! \param index: Index of the image + //! \param destPos: Position of the image to draw + //! \param clip: Optional pointer to a rectalgle against which the text will be clipped. + //! If the pointer is null, no clipping will be done. + virtual void draw(s32 index, const core::position2d& destPos, + const core::rect* clip = 0) = 0; + + //! Returns the count of Images in the list. + //! \return Returns the count of Images in the list. + virtual s32 getImageCount() const = 0; + + //! Returns the size of the images in the list. + //! \return Returns the size of the images in the list. + virtual core::dimension2d getImageSize() const = 0; +}; + +} // end namespace gui +} // end namespace irr + +#endif + diff --git a/inc/IGUIInOutFader.h b/inc/IGUIInOutFader.h new file mode 100644 index 0000000..6846d7b --- /dev/null +++ b/inc/IGUIInOutFader.h @@ -0,0 +1,67 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_GUI_IN_OUT_FADER_H_INCLUDED__ +#define __I_GUI_IN_OUT_FADER_H_INCLUDED__ + +#include "IGUIElement.h" +#include "SColor.h" + +namespace irr +{ +namespace gui +{ + + //! Element for fading out or in + /** Here is a small example on how the class is used. In this example we fade + in from a total red screen in the beginning. As you can see, the fader is not + only useful for dramatic in and out fading, but also to show that the player + is hit in a first person shooter game for example. + \code + gui::IGUIInOutFader* fader = device->getGUIEnvironment()->addInOutFader(); + fader->setColor(video::SColor(0,255,0,0)); + fader->fadeIn(4000); + \endcode + */ + class IGUIInOutFader : public IGUIElement + { + public: + + //! constructor + IGUIInOutFader(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect rectangle) + : IGUIElement(EGUIET_IN_OUT_FADER, environment, parent, id, rectangle) {} + + //! Gets the color to fade out to or to fade in from. + virtual video::SColor getColor() const = 0; + + //! Sets the color to fade out to or to fade in from. + /** \param color: Color to where it is faded out od from it is faded in. */ + virtual void setColor(video::SColor color) = 0; + virtual void setColor(video::SColor source, video::SColor dest) = 0; + + //! Starts the fade in process. + /** In the beginning the whole rect is drawn by the set color + (black by default) and at the end of the overgiven time the + color has faded out. + \param time: Time specifying how long it should need to fade in, + in milliseconds. */ + virtual void fadeIn(u32 time) = 0; + + //! Starts the fade out process. + /** In the beginning everything is visible, and at the end of + the time only the set color (black by the fault) will be drawn. + \param time: Time specifying how long it should need to fade out, + in milliseconds. */ + virtual void fadeOut(u32 time) = 0; + + //! Returns if the fade in or out process is done. + virtual bool isReady() const = 0; + }; + + +} // end namespace gui +} // end namespace irr + +#endif + diff --git a/inc/IGUIListBox.h b/inc/IGUIListBox.h new file mode 100644 index 0000000..de922ce --- /dev/null +++ b/inc/IGUIListBox.h @@ -0,0 +1,138 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_GUI_LIST_BOX_H_INCLUDED__ +#define __I_GUI_LIST_BOX_H_INCLUDED__ + +#include "IGUIElement.h" +#include "SColor.h" + +namespace irr +{ +namespace gui +{ + class IGUISpriteBank; + + //! Enumeration for listbox colors + enum EGUI_LISTBOX_COLOR + { + //! Color of text + EGUI_LBC_TEXT=0, + //! Color of selected text + EGUI_LBC_TEXT_HIGHLIGHT, + //! Color of icon + EGUI_LBC_ICON, + //! Color of selected icon + EGUI_LBC_ICON_HIGHLIGHT, + //! Not used, just counts the number of available colors + EGUI_LBC_COUNT + }; + + + //! Default list box GUI element. + /** \par This element can create the following events of type EGUI_EVENT_TYPE: + \li EGET_LISTBOX_CHANGED + \li EGET_LISTBOX_SELECTED_AGAIN + */ + class IGUIListBox : public IGUIElement + { + public: + //! constructor + IGUIListBox(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect rectangle) + : IGUIElement(EGUIET_LIST_BOX, environment, parent, id, rectangle) {} + + //! returns amount of list items + virtual u32 getItemCount() const = 0; + + //! returns string of a list item. the may id be a value from 0 to itemCount-1 + virtual const wchar_t* getListItem(u32 id) const = 0; + + //! adds an list item, returns id of item + virtual u32 addItem(const wchar_t* text) = 0; + + //! adds an list item with an icon + /** \param text Text of list entry + \param icon Sprite index of the Icon within the current sprite bank. Set it to -1 if you want no icon + \return The id of the new created item */ + virtual u32 addItem(const wchar_t* text, s32 icon) = 0; + + //! Removes an item from the list + virtual void removeItem(u32 index) = 0; + + //! get the the id of the item at the given absolute coordinates + /** \return The id of the listitem or -1 when no item is at those coordinates*/ + virtual s32 getItemAt(s32 xpos, s32 ypos) const = 0; + + //! Returns the icon of an item + virtual s32 getIcon(u32 index) const = 0; + + //! Sets the sprite bank which should be used to draw list icons. + /** This font is set to the sprite bank of the built-in-font by + default. A sprite can be displayed in front of every list item. + An icon is an index within the icon sprite bank. Several + default icons are available in the skin through getIcon. */ + virtual void setSpriteBank(IGUISpriteBank* bank) = 0; + + //! clears the list, deletes all items in the listbox + virtual void clear() = 0; + + //! returns id of selected item. returns -1 if no item is selected. + virtual s32 getSelected() const = 0; + + //! sets the selected item. Set this to -1 if no item should be selected + virtual void setSelected(s32 index) = 0; + + //! sets the selected item. Set this to 0 if no item should be selected + virtual void setSelected(const wchar_t *item) = 0; + + //! set whether the listbox should scroll to newly selected items + virtual void setAutoScrollEnabled(bool scroll) = 0; + + //! returns true if automatic scrolling is enabled, false if not. + virtual bool isAutoScrollEnabled() const = 0; + + //! set all item colors at given index to color + virtual void setItemOverrideColor(u32 index, video::SColor color) = 0; + + //! set all item colors of specified type at given index to color + virtual void setItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType, video::SColor color) = 0; + + //! clear all item colors at index + virtual void clearItemOverrideColor(u32 index) = 0; + + //! clear item color at index for given colortype + virtual void clearItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType) = 0; + + //! has the item at index its color overwritten? + virtual bool hasItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType) const = 0; + + //! return the overwrite color at given item index. + virtual video::SColor getItemOverrideColor(u32 index, EGUI_LISTBOX_COLOR colorType) const = 0; + + //! return the default color which is used for the given colorType + virtual video::SColor getItemDefaultColor(EGUI_LISTBOX_COLOR colorType) const = 0; + + //! set the item at the given index + virtual void setItem(u32 index, const wchar_t* text, s32 icon) = 0; + + //! Insert the item at the given index + /** \return The index on success or -1 on failure. */ + virtual s32 insertItem(u32 index, const wchar_t* text, s32 icon) = 0; + + //! Swap the items at the given indices + virtual void swapItems(u32 index1, u32 index2) = 0; + + //! set global itemHeight + virtual void setItemHeight( s32 height ) = 0; + + //! Sets whether to draw the background + virtual void setDrawBackground(bool draw) = 0; +}; + + +} // end namespace gui +} // end namespace irr + +#endif + diff --git a/inc/IGUIMeshViewer.h b/inc/IGUIMeshViewer.h new file mode 100644 index 0000000..62ff1ab --- /dev/null +++ b/inc/IGUIMeshViewer.h @@ -0,0 +1,53 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_GUI_MESH_VIEWER_H_INCLUDED__ +#define __I_GUI_MESH_VIEWER_H_INCLUDED__ + +#include "IGUIElement.h" + +namespace irr +{ + +namespace video +{ + class SMaterial; +} // end namespace video + +namespace scene +{ + class IAnimatedMesh; +} // end namespace scene + +namespace gui +{ + + //! 3d mesh viewing GUI element. + class IGUIMeshViewer : public IGUIElement + { + public: + + //! constructor + IGUIMeshViewer(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect rectangle) + : IGUIElement(EGUIET_MESH_VIEWER, environment, parent, id, rectangle) {} + + //! Sets the mesh to be shown + virtual void setMesh(scene::IAnimatedMesh* mesh) = 0; + + //! Gets the displayed mesh + virtual scene::IAnimatedMesh* getMesh() const = 0; + + //! Sets the material + virtual void setMaterial(const video::SMaterial& material) = 0; + + //! Gets the material + virtual const video::SMaterial& getMaterial() const = 0; + }; + + +} // end namespace gui +} // end namespace irr + +#endif + diff --git a/inc/IGUIScrollBar.h b/inc/IGUIScrollBar.h new file mode 100644 index 0000000..4064ef9 --- /dev/null +++ b/inc/IGUIScrollBar.h @@ -0,0 +1,65 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_GUI_SCROLL_BAR_H_INCLUDED__ +#define __I_GUI_SCROLL_BAR_H_INCLUDED__ + +#include "IGUIElement.h" + +namespace irr +{ +namespace gui +{ + + //! Default scroll bar GUI element. + /** \par This element can create the following events of type EGUI_EVENT_TYPE: + \li EGET_SCROLL_BAR_CHANGED + */ + class IGUIScrollBar : public IGUIElement + { + public: + + //! constructor + IGUIScrollBar(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect rectangle) + : IGUIElement(EGUIET_SCROLL_BAR, environment, parent, id, rectangle) {} + + //! sets the maximum value of the scrollbar. + virtual void setMax(s32 max) = 0; + //! gets the maximum value of the scrollbar. + virtual s32 getMax() const = 0; + + //! sets the minimum value of the scrollbar. + virtual void setMin(s32 min) = 0; + //! gets the minimum value of the scrollbar. + virtual s32 getMin() const = 0; + + //! gets the small step value + virtual s32 getSmallStep() const = 0; + + //! Sets the small step + /** That is the amount that the value changes by when clicking + on the buttons or using the cursor keys. */ + virtual void setSmallStep(s32 step) = 0; + + //! gets the large step value + virtual s32 getLargeStep() const = 0; + + //! Sets the large step + /** That is the amount that the value changes by when clicking + in the tray, or using the page up and page down keys. */ + virtual void setLargeStep(s32 step) = 0; + + //! gets the current position of the scrollbar + virtual s32 getPos() const = 0; + + //! sets the current position of the scrollbar + virtual void setPos(s32 pos) = 0; + }; + + +} // end namespace gui +} // end namespace irr + +#endif + diff --git a/inc/IGUISkin.h b/inc/IGUISkin.h new file mode 100644 index 0000000..a7cd2d2 --- /dev/null +++ b/inc/IGUISkin.h @@ -0,0 +1,574 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_GUI_SKIN_H_INCLUDED__ +#define __I_GUI_SKIN_H_INCLUDED__ + +#include "IAttributeExchangingObject.h" +#include "EGUIAlignment.h" +#include "SColor.h" +#include "rect.h" + +namespace irr +{ +namespace gui +{ + class IGUIFont; + class IGUISpriteBank; + class IGUIElement; + + //! Enumeration of available default skins. + /** To set one of the skins, use the following code, for example to set + the Windows classic skin: + \code + gui::IGUISkin* newskin = environment->createSkin(gui::EGST_WINDOWS_CLASSIC); + environment->setSkin(newskin); + newskin->drop(); + \endcode + */ + enum EGUI_SKIN_TYPE + { + //! Default windows look and feel + EGST_WINDOWS_CLASSIC=0, + + //! Like EGST_WINDOWS_CLASSIC, but with metallic shaded windows and buttons + EGST_WINDOWS_METALLIC, + + //! Burning's skin + EGST_BURNING_SKIN, + + //! An unknown skin, not serializable at present + EGST_UNKNOWN, + + //! this value is not used, it only specifies the number of skin types + EGST_COUNT + }; + + //! Names for gui element types + const c8* const GUISkinTypeNames[EGST_COUNT+1] = + { + "windowsClassic", + "windowsMetallic", + "burning", + "unknown", + 0, + }; + + + //! Enumeration for skin colors + enum EGUI_DEFAULT_COLOR + { + //! Dark shadow for three-dimensional display elements. + EGDC_3D_DARK_SHADOW = 0, + //! Shadow color for three-dimensional display elements (for edges facing away from the light source). + EGDC_3D_SHADOW, + //! Face color for three-dimensional display elements and for dialog box backgrounds. + EGDC_3D_FACE, + //! Highlight color for three-dimensional display elements (for edges facing the light source.) + EGDC_3D_HIGH_LIGHT, + //! Light color for three-dimensional display elements (for edges facing the light source.) + EGDC_3D_LIGHT, + //! Active window border. + EGDC_ACTIVE_BORDER, + //! Active window title bar text. + EGDC_ACTIVE_CAPTION, + //! Background color of multiple document interface (MDI) applications. + EGDC_APP_WORKSPACE, + //! Text on a button + EGDC_BUTTON_TEXT, + //! Grayed (disabled) text. + EGDC_GRAY_TEXT, + //! Item(s) selected in a control. + EGDC_HIGH_LIGHT, + //! Text of item(s) selected in a control. + EGDC_HIGH_LIGHT_TEXT, + //! Inactive window border. + EGDC_INACTIVE_BORDER, + //! Inactive window caption. + EGDC_INACTIVE_CAPTION, + //! Tool tip text color + EGDC_TOOLTIP, + //! Tool tip background color + EGDC_TOOLTIP_BACKGROUND, + //! Scrollbar gray area + EGDC_SCROLLBAR, + //! Window background + EGDC_WINDOW, + //! Window symbols like on close buttons, scroll bars and check boxes + EGDC_WINDOW_SYMBOL, + //! Icons in a list or tree + EGDC_ICON, + //! Selected icons in a list or tree + EGDC_ICON_HIGH_LIGHT, + //! Grayed (disabled) window symbols like on close buttons, scroll bars and check boxes + EGDC_GRAY_WINDOW_SYMBOL, + //! Window background for editable field (editbox, checkbox-field) + EGDC_EDITABLE, + //! Grayed (disabled) window background for editable field (editbox, checkbox-field) + EGDC_GRAY_EDITABLE, + //! Show focus of window background for editable field (editbox or when checkbox-field is pressed) + EGDC_FOCUSED_EDITABLE, + + //! this value is not used, it only specifies the amount of default colors + //! available. + EGDC_COUNT + }; + + //! Names for default skin colors + const c8* const GUISkinColorNames[EGDC_COUNT+1] = + { + "3DDarkShadow", + "3DShadow", + "3DFace", + "3DHighlight", + "3DLight", + "ActiveBorder", + "ActiveCaption", + "AppWorkspace", + "ButtonText", + "GrayText", + "Highlight", + "HighlightText", + "InactiveBorder", + "InactiveCaption", + "ToolTip", + "ToolTipBackground", + "ScrollBar", + "Window", + "WindowSymbol", + "Icon", + "IconHighlight", + "GrayWindowSymbol", + "Editable", + "GrayEditable", + "FocusedEditable", + 0, + }; + + //! Enumeration for default sizes. + enum EGUI_DEFAULT_SIZE + { + //! default with / height of scrollbar + EGDS_SCROLLBAR_SIZE = 0, + //! height of menu + EGDS_MENU_HEIGHT, + //! width of a window button + EGDS_WINDOW_BUTTON_WIDTH, + //! width of a checkbox check + EGDS_CHECK_BOX_WIDTH, + //! \deprecated This may be removed by Irrlicht 1.9 + EGDS_MESSAGE_BOX_WIDTH, + //! \deprecated This may be removed by Irrlicht 1.9 + EGDS_MESSAGE_BOX_HEIGHT, + //! width of a default button + EGDS_BUTTON_WIDTH, + //! height of a default button + EGDS_BUTTON_HEIGHT, + //! distance for text from background + EGDS_TEXT_DISTANCE_X, + //! distance for text from background + EGDS_TEXT_DISTANCE_Y, + //! distance for text in the title bar, from the left of the window rect + EGDS_TITLEBARTEXT_DISTANCE_X, + //! distance for text in the title bar, from the top of the window rect + EGDS_TITLEBARTEXT_DISTANCE_Y, + //! free space in a messagebox between borders and contents on all sides + EGDS_MESSAGE_BOX_GAP_SPACE, + //! minimal space to reserve for messagebox text-width + EGDS_MESSAGE_BOX_MIN_TEXT_WIDTH, + //! maximal space to reserve for messagebox text-width + EGDS_MESSAGE_BOX_MAX_TEXT_WIDTH, + //! minimal space to reserve for messagebox text-height + EGDS_MESSAGE_BOX_MIN_TEXT_HEIGHT, + //! maximal space to reserve for messagebox text-height + EGDS_MESSAGE_BOX_MAX_TEXT_HEIGHT, + //! pixels to move the button image to the right when a pushbutton is pressed + EGDS_BUTTON_PRESSED_IMAGE_OFFSET_X, + //! pixels to move the button image down when a pushbutton is pressed + EGDS_BUTTON_PRESSED_IMAGE_OFFSET_Y, + //! pixels to move the button text to the right when a pushbutton is pressed + EGDS_BUTTON_PRESSED_TEXT_OFFSET_X, + //! pixels to move the button text down when a pushbutton is pressed + EGDS_BUTTON_PRESSED_TEXT_OFFSET_Y, + + //! this value is not used, it only specifies the amount of default sizes + //! available. + EGDS_COUNT + }; + + + //! Names for default skin sizes + const c8* const GUISkinSizeNames[EGDS_COUNT+1] = + { + "ScrollBarSize", + "MenuHeight", + "WindowButtonWidth", + "CheckBoxWidth", + "MessageBoxWidth", + "MessageBoxHeight", + "ButtonWidth", + "ButtonHeight", + "TextDistanceX", + "TextDistanceY", + "TitleBarTextX", + "TitleBarTextY", + "MessageBoxGapSpace", + "MessageBoxMinTextWidth", + "MessageBoxMaxTextWidth", + "MessageBoxMinTextHeight", + "MessageBoxMaxTextHeight", + "ButtonPressedImageOffsetX", + "ButtonPressedImageOffsetY", + "ButtonPressedTextOffsetX", + "ButtonPressedTextOffsetY", + 0 + }; + + + enum EGUI_DEFAULT_TEXT + { + //! Text for the OK button on a message box + EGDT_MSG_BOX_OK = 0, + //! Text for the Cancel button on a message box + EGDT_MSG_BOX_CANCEL, + //! Text for the Yes button on a message box + EGDT_MSG_BOX_YES, + //! Text for the No button on a message box + EGDT_MSG_BOX_NO, + //! Tooltip text for window close button + EGDT_WINDOW_CLOSE, + //! Tooltip text for window maximize button + EGDT_WINDOW_MAXIMIZE, + //! Tooltip text for window minimize button + EGDT_WINDOW_MINIMIZE, + //! Tooltip text for window restore button + EGDT_WINDOW_RESTORE, + + //! this value is not used, it only specifies the number of default texts + EGDT_COUNT + }; + + //! Names for default skin sizes + const c8* const GUISkinTextNames[EGDT_COUNT+1] = + { + "MessageBoxOkay", + "MessageBoxCancel", + "MessageBoxYes", + "MessageBoxNo", + "WindowButtonClose", + "WindowButtonMaximize", + "WindowButtonMinimize", + "WindowButtonRestore", + 0 + }; + + //! Customizable symbols for GUI + enum EGUI_DEFAULT_ICON + { + //! maximize window button + EGDI_WINDOW_MAXIMIZE = 0, + //! restore window button + EGDI_WINDOW_RESTORE, + //! close window button + EGDI_WINDOW_CLOSE, + //! minimize window button + EGDI_WINDOW_MINIMIZE, + //! resize icon for bottom right corner of a window + EGDI_WINDOW_RESIZE, + //! scroll bar up button + EGDI_CURSOR_UP, + //! scroll bar down button + EGDI_CURSOR_DOWN, + //! scroll bar left button + EGDI_CURSOR_LEFT, + //! scroll bar right button + EGDI_CURSOR_RIGHT, + //! icon for menu children + EGDI_MENU_MORE, + //! tick for checkbox + EGDI_CHECK_BOX_CHECKED, + //! down arrow for dropdown menus + EGDI_DROP_DOWN, + //! smaller up arrow + EGDI_SMALL_CURSOR_UP, + //! smaller down arrow + EGDI_SMALL_CURSOR_DOWN, + //! selection dot in a radio button + EGDI_RADIO_BUTTON_CHECKED, + //! << icon indicating there is more content to the left + EGDI_MORE_LEFT, + //! >> icon indicating that there is more content to the right + EGDI_MORE_RIGHT, + //! icon indicating that there is more content above + EGDI_MORE_UP, + //! icon indicating that there is more content below + EGDI_MORE_DOWN, + //! plus icon for trees + EGDI_EXPAND, + + //! minus icon for trees + EGDI_COLLAPSE, + //! file icon for file selection + EGDI_FILE, + //! folder icon for file selection + EGDI_DIRECTORY, + + //! value not used, it only specifies the number of icons + EGDI_COUNT + }; + + const c8* const GUISkinIconNames[EGDI_COUNT+1] = + { + "windowMaximize", + "windowRestore", + "windowClose", + "windowMinimize", + "windowResize", + "cursorUp", + "cursorDown", + "cursorLeft", + "cursorRight", + "menuMore", + "checkBoxChecked", + "dropDown", + "smallCursorUp", + "smallCursorDown", + "radioButtonChecked", + "moreLeft", + "moreRight", + "moreUp", + "moreDown", + "expand", + "collapse", + "file", + "directory", + 0 + }; + + // Customizable fonts + enum EGUI_DEFAULT_FONT + { + //! For static text, edit boxes, lists and most other places + EGDF_DEFAULT=0, + //! Font for buttons + EGDF_BUTTON, + //! Font for window title bars + EGDF_WINDOW, + //! Font for menu items + EGDF_MENU, + //! Font for tooltips + EGDF_TOOLTIP, + //! this value is not used, it only specifies the amount of default fonts + //! available. + EGDF_COUNT + }; + + const c8* const GUISkinFontNames[EGDF_COUNT+1] = + { + "defaultFont", + "buttonFont", + "windowFont", + "menuFont", + "tooltipFont", + 0 + }; + + //! A skin modifies the look of the GUI elements. + class IGUISkin : public virtual io::IAttributeExchangingObject + { + public: + + //! returns default color + virtual video::SColor getColor(EGUI_DEFAULT_COLOR color) const = 0; + + //! sets a default color + virtual void setColor(EGUI_DEFAULT_COLOR which, video::SColor newColor) = 0; + + //! returns size for the given size type + virtual s32 getSize(EGUI_DEFAULT_SIZE size) const = 0; + + //! Returns a default text. + /** For example for Message box button captions: + "OK", "Cancel", "Yes", "No" and so on. */ + virtual const wchar_t* getDefaultText(EGUI_DEFAULT_TEXT text) const = 0; + + //! Sets a default text. + /** For example for Message box button captions: + "OK", "Cancel", "Yes", "No" and so on. */ + virtual void setDefaultText(EGUI_DEFAULT_TEXT which, const wchar_t* newText) = 0; + + //! sets a default size + virtual void setSize(EGUI_DEFAULT_SIZE which, s32 size) = 0; + + //! returns the default font + virtual IGUIFont* getFont(EGUI_DEFAULT_FONT which=EGDF_DEFAULT) const = 0; + + //! sets a default font + virtual void setFont(IGUIFont* font, EGUI_DEFAULT_FONT which=EGDF_DEFAULT) = 0; + + //! returns the sprite bank + virtual IGUISpriteBank* getSpriteBank() const = 0; + + //! sets the sprite bank + virtual void setSpriteBank(IGUISpriteBank* bank) = 0; + + //! Returns a default icon + /** Returns the sprite index within the sprite bank */ + virtual u32 getIcon(EGUI_DEFAULT_ICON icon) const = 0; + + //! Sets a default icon + /** Sets the sprite index used for drawing icons like arrows, + close buttons and ticks in checkboxes + \param icon: Enum specifying which icon to change + \param index: The sprite index used to draw this icon */ + virtual void setIcon(EGUI_DEFAULT_ICON icon, u32 index) = 0; + + //! draws a standard 3d button pane + /** Used for drawing for example buttons in normal state. + It uses the colors EGDC_3D_DARK_SHADOW, EGDC_3D_HIGH_LIGHT, EGDC_3D_SHADOW and + EGDC_3D_FACE for this. See EGUI_DEFAULT_COLOR for details. + \param element: Pointer to the element which wishes to draw this. This parameter + is usually not used by IGUISkin, but can be used for example by more complex + implementations to find out how to draw the part exactly. + \param rect: Defining area where to draw. + \param clip: Clip area. */ + virtual void draw3DButtonPaneStandard(IGUIElement* element, + const core::rect& rect, + const core::rect* clip=0) = 0; + + //! draws a pressed 3d button pane + /** Used for drawing for example buttons in pressed state. + It uses the colors EGDC_3D_DARK_SHADOW, EGDC_3D_HIGH_LIGHT, EGDC_3D_SHADOW and + EGDC_3D_FACE for this. See EGUI_DEFAULT_COLOR for details. + \param element: Pointer to the element which wishes to draw this. This parameter + is usually not used by IGUISkin, but can be used for example by more complex + implementations to find out how to draw the part exactly. + \param rect: Defining area where to draw. + \param clip: Clip area. */ + virtual void draw3DButtonPanePressed(IGUIElement* element, + const core::rect& rect, + const core::rect* clip=0) = 0; + + //! draws a sunken 3d pane + /** Used for drawing the background of edit, combo or check boxes. + \param element: Pointer to the element which wishes to draw this. This parameter + is usually not used by IGUISkin, but can be used for example by more complex + implementations to find out how to draw the part exactly. + \param bgcolor: Background color. + \param flat: Specifies if the sunken pane should be flat or displayed as sunken + deep into the ground. + \param fillBackGround: Specifies if the background should be filled with the background + color or not be drawn at all. + \param rect: Defining area where to draw. + \param clip: Clip area. */ + virtual void draw3DSunkenPane(IGUIElement* element, + video::SColor bgcolor, bool flat, bool fillBackGround, + const core::rect& rect, + const core::rect* clip=0) = 0; + + //! draws a window background + /** Used for drawing the background of dialogs and windows. + \param element: Pointer to the element which wishes to draw this. This parameter + is usually not used by IGUISkin, but can be used for example by more complex + implementations to find out how to draw the part exactly. + \param titleBarColor: Title color. + \param drawTitleBar: True to enable title drawing. + \param rect: Defining area where to draw. + \param clip: Clip area. + \param checkClientArea: When set to non-null the function will not draw anything, + but will instead return the clientArea which can be used for drawing by the calling window. + That is the area without borders and without titlebar. + \return Returns rect where it would be good to draw title bar text. This will + work even when checkClientArea is set to a non-null value.*/ + virtual core::rect draw3DWindowBackground(IGUIElement* element, + bool drawTitleBar, video::SColor titleBarColor, + const core::rect& rect, + const core::rect* clip=0, + core::rect* checkClientArea=0) = 0; + + //! draws a standard 3d menu pane + /** Used for drawing for menus and context menus. + It uses the colors EGDC_3D_DARK_SHADOW, EGDC_3D_HIGH_LIGHT, EGDC_3D_SHADOW and + EGDC_3D_FACE for this. See EGUI_DEFAULT_COLOR for details. + \param element: Pointer to the element which wishes to draw this. This parameter + is usually not used by IGUISkin, but can be used for example by more complex + implementations to find out how to draw the part exactly. + \param rect: Defining area where to draw. + \param clip: Clip area. */ + virtual void draw3DMenuPane(IGUIElement* element, + const core::rect& rect, + const core::rect* clip=0) = 0; + + //! draws a standard 3d tool bar + /** Used for drawing for toolbars and menus. + \param element: Pointer to the element which wishes to draw this. This parameter + is usually not used by IGUISkin, but can be used for example by more complex + implementations to find out how to draw the part exactly. + \param rect: Defining area where to draw. + \param clip: Clip area. */ + virtual void draw3DToolBar(IGUIElement* element, + const core::rect& rect, + const core::rect* clip=0) = 0; + + //! draws a tab button + /** Used for drawing for tab buttons on top of tabs. + \param element: Pointer to the element which wishes to draw this. This parameter + is usually not used by IGUISkin, but can be used for example by more complex + implementations to find out how to draw the part exactly. + \param active: Specifies if the tab is currently active. + \param rect: Defining area where to draw. + \param clip: Clip area. + \param alignment Alignment of GUI element. */ + virtual void draw3DTabButton(IGUIElement* element, bool active, + const core::rect& rect, const core::rect* clip=0, gui::EGUI_ALIGNMENT alignment=EGUIA_UPPERLEFT) = 0; + + //! draws a tab control body + /** \param element: Pointer to the element which wishes to draw this. This parameter + is usually not used by IGUISkin, but can be used for example by more complex + implementations to find out how to draw the part exactly. + \param border: Specifies if the border should be drawn. + \param background: Specifies if the background should be drawn. + \param rect: Defining area where to draw. + \param clip: Clip area. + \param tabHeight Height of tab. + \param alignment Alignment of GUI element. */ + virtual void draw3DTabBody(IGUIElement* element, bool border, bool background, + const core::rect& rect, const core::rect* clip=0, s32 tabHeight=-1, gui::EGUI_ALIGNMENT alignment=EGUIA_UPPERLEFT ) = 0; + + //! draws an icon, usually from the skin's sprite bank + /** \param element: Pointer to the element which wishes to draw this icon. + This parameter is usually not used by IGUISkin, but can be used for example + by more complex implementations to find out how to draw the part exactly. + \param icon: Specifies the icon to be drawn. + \param position: The position to draw the icon + \param starttime: The time at the start of the animation + \param currenttime: The present time, used to calculate the frame number + \param loop: Whether the animation should loop or not + \param clip: Clip area. */ + virtual void drawIcon(IGUIElement* element, EGUI_DEFAULT_ICON icon, + const core::position2di position, u32 starttime=0, u32 currenttime=0, + bool loop=false, const core::rect* clip=0) = 0; + + //! draws a 2d rectangle. + /** \param element: Pointer to the element which wishes to draw this icon. + This parameter is usually not used by IGUISkin, but can be used for example + by more complex implementations to find out how to draw the part exactly. + \param color: Color of the rectangle to draw. The alpha component specifies how + transparent the rectangle will be. + \param pos: Position of the rectangle. + \param clip: Pointer to rectangle against which the rectangle will be clipped. + If the pointer is null, no clipping will be performed. */ + virtual void draw2DRectangle(IGUIElement* element, const video::SColor &color, + const core::rect& pos, const core::rect* clip = 0) = 0; + + //! get the type of this skin + virtual EGUI_SKIN_TYPE getType() const { return EGST_UNKNOWN; } + }; + + +} // end namespace gui +} // end namespace irr + +#endif + diff --git a/inc/IGUISpinBox.h b/inc/IGUISpinBox.h new file mode 100644 index 0000000..2310161 --- /dev/null +++ b/inc/IGUISpinBox.h @@ -0,0 +1,69 @@ +// Copyright (C) 2006-2012 Michael Zeilfelder +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_GUI_SPIN_BOX_H_INCLUDED__ +#define __I_GUI_SPIN_BOX_H_INCLUDED__ + +#include "IGUIElement.h" + +namespace irr +{ +namespace gui +{ + class IGUIEditBox; + + //! Single line edit box + spin buttons + /** \par This element can create the following events of type EGUI_EVENT_TYPE: + \li EGET_SPINBOX_CHANGED + */ + class IGUISpinBox : public IGUIElement + { + public: + + //! constructor + IGUISpinBox(IGUIEnvironment* environment, IGUIElement* parent, + s32 id, core::rect rectangle) + : IGUIElement(EGUIET_SPIN_BOX, environment, parent, id, rectangle) {} + + //! Access the edit box used in the spin control + virtual IGUIEditBox* getEditBox() const = 0; + + //! set the current value of the spinbox + /** \param val: value to be set in the spinbox */ + virtual void setValue(f32 val) = 0; + + //! Get the current value of the spinbox + virtual f32 getValue() const = 0; + + //! set the range of values which can be used in the spinbox + /** \param min: minimum value + \param max: maximum value */ + virtual void setRange(f32 min, f32 max) = 0; + + //! get the minimum value which can be used in the spinbox + virtual f32 getMin() const = 0; + + //! get the maximum value which can be used in the spinbox + virtual f32 getMax() const = 0; + + //! Step size by which values are changed when pressing the spinbuttons + /** The step size also determines the number of decimal places to display + \param step: stepsize used for value changes when pressing spinbuttons */ + virtual void setStepSize(f32 step=1.f) = 0; + + //! Sets the number of decimal places to display. + //! Note that this also rounds the range to the same number of decimal places. + /** \param places: The number of decimal places to display, use -1 to reset */ + virtual void setDecimalPlaces(s32 places) = 0; + + //! get the current step size + virtual f32 getStepSize() const = 0; + }; + + +} // end namespace gui +} // end namespace irr + +#endif // __I_GUI_SPIN_BOX_H_INCLUDED__ + diff --git a/inc/IGUISpriteBank.h b/inc/IGUISpriteBank.h new file mode 100644 index 0000000..872bbca --- /dev/null +++ b/inc/IGUISpriteBank.h @@ -0,0 +1,95 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_GUI_SPRITE_BANK_H_INCLUDED__ +#define __I_GUI_SPRITE_BANK_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "irrArray.h" +#include "SColor.h" +#include "rect.h" + +namespace irr +{ + +namespace video +{ + class ITexture; +} // end namespace video + +namespace gui +{ + +//! A single sprite frame. +struct SGUISpriteFrame +{ + u32 textureNumber; + u32 rectNumber; +}; + +//! A sprite composed of several frames. +struct SGUISprite +{ + SGUISprite() : Frames(), frameTime(0) {} + + core::array Frames; + u32 frameTime; +}; + + +//! Sprite bank interface. +/** See http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=25742&highlight=spritebank +* for more information how to use the spritebank. +*/ +class IGUISpriteBank : public virtual IReferenceCounted +{ +public: + + //! Returns the list of rectangles held by the sprite bank + virtual core::array< core::rect >& getPositions() = 0; + + //! Returns the array of animated sprites within the sprite bank + virtual core::array< SGUISprite >& getSprites() = 0; + + //! Returns the number of textures held by the sprite bank + virtual u32 getTextureCount() const = 0; + + //! Gets the texture with the specified index + virtual video::ITexture* getTexture(u32 index) const = 0; + + //! Adds a texture to the sprite bank + virtual void addTexture(video::ITexture* texture) = 0; + + //! Changes one of the textures in the sprite bank + virtual void setTexture(u32 index, video::ITexture* texture) = 0; + + //! Add the texture and use it for a single non-animated sprite. + //! The texture and the corresponding rectangle and sprite will all be added to the end of each array. + //! returns the index of the sprite or -1 on failure + virtual s32 addTextureAsSprite(video::ITexture* texture) = 0; + + //! clears sprites, rectangles and textures + virtual void clear() = 0; + + //! Draws a sprite in 2d with position and color + virtual void draw2DSprite(u32 index, const core::position2di& pos, + const core::rect* clip=0, + const video::SColor& color= video::SColor(255,255,255,255), + u32 starttime=0, u32 currenttime=0, + bool loop=true, bool center=false) = 0; + + //! Draws a sprite batch in 2d using an array of positions and a color + virtual void draw2DSpriteBatch(const core::array& indices, const core::array& pos, + const core::rect* clip=0, + const video::SColor& color= video::SColor(255,255,255,255), + u32 starttime=0, u32 currenttime=0, + bool loop=true, bool center=false) = 0; +}; + + +} // end namespace gui +} // end namespace irr + +#endif // __I_GUI_SPRITE_BANK_H_INCLUDED__ + diff --git a/inc/IGUIStaticText.h b/inc/IGUIStaticText.h new file mode 100644 index 0000000..b0594ab --- /dev/null +++ b/inc/IGUIStaticText.h @@ -0,0 +1,135 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_GUI_STATIC_TEXT_H_INCLUDED__ +#define __I_GUI_STATIC_TEXT_H_INCLUDED__ + +#include "IGUIElement.h" +#include "SColor.h" + +namespace irr +{ +namespace gui +{ + class IGUIFont; + + //! Multi or single line text label. + class IGUIStaticText : public IGUIElement + { + public: + + //! constructor + IGUIStaticText(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect rectangle) + : IGUIElement(EGUIET_STATIC_TEXT, environment, parent, id, rectangle) {} + + //! Sets another skin independent font. + /** If this is set to zero, the button uses the font of the skin. + \param font: New font to set. */ + virtual void setOverrideFont(IGUIFont* font=0) = 0; + + //! Gets the override font (if any) + /** \return The override font (may be 0) */ + virtual IGUIFont* getOverrideFont(void) const = 0; + + //! Get the font which is used right now for drawing + /** Currently this is the override font when one is set and the + font of the active skin otherwise */ + virtual IGUIFont* getActiveFont() const = 0; + + //! Sets another color for the text. + /** If set, the static text does not use the EGDC_BUTTON_TEXT color defined + in the skin, but the set color instead. You don't need to call + IGUIStaticText::enableOverrrideColor(true) after this, this is done + by this function. + If you set a color, and you want the text displayed with the color + of the skin again, call IGUIStaticText::enableOverrideColor(false); + \param color: New color of the text. */ + virtual void setOverrideColor(video::SColor color) = 0; + + //! Gets the override color + /** \return: The override color */ + virtual video::SColor getOverrideColor(void) const = 0; + + //! Sets if the static text should use the overide color or the color in the gui skin. + /** \param enable: If set to true, the override color, which can be set + with IGUIStaticText::setOverrideColor is used, otherwise the + EGDC_BUTTON_TEXT color of the skin. */ + virtual void enableOverrideColor(bool enable) = 0; + + //! Checks if an override color is enabled + /** \return true if the override color is enabled, false otherwise */ + virtual bool isOverrideColorEnabled(void) const = 0; + + //! Sets another color for the background. + virtual void setBackgroundColor(video::SColor color) = 0; + + //! Sets whether to draw the background + virtual void setDrawBackground(bool draw) = 0; + + //! Gets the background color + /** \return: The background color */ + virtual video::SColor getBackgroundColor() const = 0; + + //! Checks if background drawing is enabled + /** \return true if background drawing is enabled, false otherwise */ + virtual bool isDrawBackgroundEnabled() const = 0; + + //! Sets whether to draw the border + virtual void setDrawBorder(bool draw) = 0; + + //! Checks if border drawing is enabled + /** \return true if border drawing is enabled, false otherwise */ + virtual bool isDrawBorderEnabled() const = 0; + + //! Sets text justification mode + /** \param horizontal: EGUIA_UPPERLEFT for left justified (default), + EGUIA_LOWEERRIGHT for right justified, or EGUIA_CENTER for centered text. + \param vertical: EGUIA_UPPERLEFT to align with top edge, + EGUIA_LOWEERRIGHT for bottom edge, or EGUIA_CENTER for centered text (default). */ + virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) = 0; + + //! Enables or disables word wrap for using the static text as multiline text control. + /** \param enable: If set to true, words going over one line are + broken on to the next line. */ + virtual void setWordWrap(bool enable) = 0; + + //! Checks if word wrap is enabled + /** \return true if word wrap is enabled, false otherwise */ + virtual bool isWordWrapEnabled(void) const = 0; + + //! Returns the height of the text in pixels when it is drawn. + /** This is useful for adjusting the layout of gui elements based on the height + of the multiline text in this element. + \return Height of text in pixels. */ + virtual s32 getTextHeight() const = 0; + + //! Returns the width of the current text, in the current font + /** If the text is broken, this returns the width of the widest line + \return The width of the text, or the widest broken line. */ + virtual s32 getTextWidth(void) const = 0; + + //! Set whether the text in this label should be clipped if it goes outside bounds + virtual void setTextRestrainedInside(bool restrainedInside) = 0; + + //! Checks if the text in this label should be clipped if it goes outside bounds + virtual bool isTextRestrainedInside() const = 0; + + //! Set whether the string should be interpreted as right-to-left (RTL) text + /** \note This component does not implement the Unicode bidi standard, the + text of the component should be already RTL if you call this. The + main difference when RTL is enabled is that the linebreaks for multiline + elements are performed starting from the end. + */ + virtual void setRightToLeft(bool rtl) = 0; + + //! Checks whether the text in this element should be interpreted as right-to-left + virtual bool isRightToLeft() const = 0; + }; + + +} // end namespace gui +} // end namespace irr + +#endif + diff --git a/inc/IGUITabControl.h b/inc/IGUITabControl.h new file mode 100644 index 0000000..d9b4d12 --- /dev/null +++ b/inc/IGUITabControl.h @@ -0,0 +1,136 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_GUI_TAB_CONTROL_H_INCLUDED__ +#define __I_GUI_TAB_CONTROL_H_INCLUDED__ + +#include "IGUIElement.h" +#include "SColor.h" +#include "IGUISkin.h" + +namespace irr +{ +namespace gui +{ + //! A tab-page, onto which other gui elements could be added. + /** IGUITab refers to the page itself, not to the tab in the tabbar of an IGUITabControl. */ + class IGUITab : public IGUIElement + { + public: + + //! constructor + IGUITab(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect rectangle) + : IGUIElement(EGUIET_TAB, environment, parent, id, rectangle) {} + + //! Returns zero based index of tab if in tabcontrol. + /** Can be accessed later IGUITabControl::getTab() by this number. + Note that this number can change when other tabs are inserted or removed . + */ + virtual s32 getNumber() const = 0; + + //! sets if the tab should draw its background + virtual void setDrawBackground(bool draw=true) = 0; + + //! sets the color of the background, if it should be drawn. + virtual void setBackgroundColor(video::SColor c) = 0; + + //! returns true if the tab is drawing its background, false if not + virtual bool isDrawingBackground() const = 0; + + //! returns the color of the background + virtual video::SColor getBackgroundColor() const = 0; + + //! sets the color of the text + virtual void setTextColor(video::SColor c) = 0; + + //! gets the color of the text + virtual video::SColor getTextColor() const = 0; + }; + + //! A standard tab control + /** \par This element can create the following events of type EGUI_EVENT_TYPE: + \li EGET_TAB_CHANGED + */ + class IGUITabControl : public IGUIElement + { + public: + + //! constructor + IGUITabControl(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect rectangle) + : IGUIElement(EGUIET_TAB_CONTROL, environment, parent, id, rectangle) {} + + //! Adds a tab + virtual IGUITab* addTab(const wchar_t* caption, s32 id=-1) = 0; + + //! Insert the tab at the given index + /** \return The tab on success or NULL on failure. */ + virtual IGUITab* insertTab(s32 idx, const wchar_t* caption, s32 id=-1) = 0; + + //! Removes a tab from the tabcontrol + virtual void removeTab(s32 idx) = 0; + + //! Clears the tabcontrol removing all tabs + virtual void clear() = 0; + + //! Returns amount of tabs in the tabcontrol + virtual s32 getTabCount() const = 0; + + //! Returns a tab based on zero based index + /** \param idx: zero based index of tab. Is a value betwenn 0 and getTabcount()-1; + \return Returns pointer to the Tab. Returns 0 if no tab + is corresponding to this tab. */ + virtual IGUITab* getTab(s32 idx) const = 0; + + //! Brings a tab to front. + /** \param idx: number of the tab. + \return Returns true if successful. */ + virtual bool setActiveTab(s32 idx) = 0; + + //! Brings a tab to front. + /** \param tab: pointer to the tab. + \return Returns true if successful. */ + virtual bool setActiveTab(IGUITab *tab) = 0; + + //! Returns which tab is currently active + virtual s32 getActiveTab() const = 0; + + //! get the the id of the tab at the given absolute coordinates + /** \return The id of the tab or -1 when no tab is at those coordinates*/ + virtual s32 getTabAt(s32 xpos, s32 ypos) const = 0; + + //! Set the height of the tabs + virtual void setTabHeight( s32 height ) = 0; + + //! Get the height of the tabs + /** return Returns the height of the tabs */ + virtual s32 getTabHeight() const = 0; + + //! set the maximal width of a tab. Per default width is 0 which means "no width restriction". + virtual void setTabMaxWidth(s32 width ) = 0; + + //! get the maximal width of a tab + virtual s32 getTabMaxWidth() const = 0; + + //! Set the alignment of the tabs + /** Use EGUIA_UPPERLEFT or EGUIA_LOWERRIGHT */ + virtual void setTabVerticalAlignment( gui::EGUI_ALIGNMENT alignment ) = 0; + + //! Get the alignment of the tabs + /** return Returns the alignment of the tabs */ + virtual gui::EGUI_ALIGNMENT getTabVerticalAlignment() const = 0; + + //! Set the extra width added to tabs on each side of the text + virtual void setTabExtraWidth( s32 extraWidth ) = 0; + + //! Get the extra width added to tabs on each side of the text + /** return Returns the extra width of the tabs */ + virtual s32 getTabExtraWidth() const = 0; + }; + + +} // end namespace gui +} // end namespace irr + +#endif + diff --git a/inc/IGUITable.h b/inc/IGUITable.h new file mode 100644 index 0000000..219d28d --- /dev/null +++ b/inc/IGUITable.h @@ -0,0 +1,205 @@ +// Copyright (C) 2003-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_GUI_TABLE_H_INCLUDED__ +#define __I_GUI_TABLE_H_INCLUDED__ + +#include "IGUIElement.h" +#include "irrTypes.h" +#include "SColor.h" +#include "IGUISkin.h" + +namespace irr +{ +namespace gui +{ + + //! modes for ordering used when a column header is clicked + enum EGUI_COLUMN_ORDERING + { + //! Do not use ordering + EGCO_NONE, + + //! Send a EGET_TABLE_HEADER_CHANGED message when a column header is clicked. + EGCO_CUSTOM, + + //! Sort it ascending by it's ascii value like: a,b,c,... + EGCO_ASCENDING, + + //! Sort it descending by it's ascii value like: z,x,y,... + EGCO_DESCENDING, + + //! Sort it ascending on first click, descending on next, etc + EGCO_FLIP_ASCENDING_DESCENDING, + + //! Not used as mode, only to get maximum value for this enum + EGCO_COUNT + }; + + //! Names for EGUI_COLUMN_ORDERING types + const c8* const GUIColumnOrderingNames[] = + { + "none", + "custom", + "ascend", + "descend", + "ascend_descend", + 0, + }; + + enum EGUI_ORDERING_MODE + { + //! No element ordering + EGOM_NONE, + + //! Elements are ordered from the smallest to the largest. + EGOM_ASCENDING, + + //! Elements are ordered from the largest to the smallest. + EGOM_DESCENDING, + + //! this value is not used, it only specifies the amount of default ordering types + //! available. + EGOM_COUNT + }; + + const c8* const GUIOrderingModeNames[] = + { + "none", + "ascending", + "descending", + 0 + }; + + enum EGUI_TABLE_DRAW_FLAGS + { + EGTDF_ROWS = 1, + EGTDF_COLUMNS = 2, + EGTDF_ACTIVE_ROW = 4, + EGTDF_COUNT + }; + + //! Default list box GUI element. + /** \par This element can create the following events of type EGUI_EVENT_TYPE: + \li EGET_TABLE_CHANGED + \li EGET_TABLE_SELECTED_AGAIN + \li EGET_TABLE_HEADER_CHANGED + */ + class IGUITable : public IGUIElement + { + public: + //! constructor + IGUITable(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect rectangle) + : IGUIElement(EGUIET_TABLE, environment, parent, id, rectangle) {} + + //! Adds a column + /** If columnIndex is outside the current range, do push new colum at the end */ + virtual void addColumn(const wchar_t* caption, s32 columnIndex=-1) = 0; + + //! remove a column from the table + virtual void removeColumn(u32 columnIndex) = 0; + + //! Returns the number of columns in the table control + virtual s32 getColumnCount() const = 0; + + //! Makes a column active. This will trigger an ordering process. + /** \param idx: The id of the column to make active. + \param doOrder: Do also the ordering which depending on mode for active column + \return True if successful. */ + virtual bool setActiveColumn(s32 idx, bool doOrder=false) = 0; + + //! Returns which header is currently active + virtual s32 getActiveColumn() const = 0; + + //! Returns the ordering used by the currently active column + virtual EGUI_ORDERING_MODE getActiveColumnOrdering() const = 0; + + //! Set the width of a column + virtual void setColumnWidth(u32 columnIndex, u32 width) = 0; + + //! Get the width of a column + virtual u32 getColumnWidth(u32 columnIndex) const = 0; + + //! columns can be resized by drag 'n drop + virtual void setResizableColumns(bool resizable) = 0; + + //! can columns be resized by dran 'n drop? + virtual bool hasResizableColumns() const = 0; + + //! This tells the table control which ordering mode should be used when a column header is clicked. + /** \param columnIndex The index of the column header. + \param mode: One of the modes defined in EGUI_COLUMN_ORDERING */ + virtual void setColumnOrdering(u32 columnIndex, EGUI_COLUMN_ORDERING mode) = 0; + + //! Returns which row is currently selected + virtual s32 getSelected() const = 0; + + //! set wich row is currently selected + virtual void setSelected( s32 index ) = 0; + + //! Get amount of rows in the tabcontrol + virtual s32 getRowCount() const = 0; + + //! adds a row to the table + /** \param rowIndex Zero based index of rows. The row will be + inserted at this position, if a row already exist there, it + will be placed after it. If the row is larger than the actual + number of row by more than one, it won't be created. Note that + if you create a row that's not at the end, there might be + performance issues. + \return index of inserted row. */ + virtual u32 addRow(u32 rowIndex) = 0; + + //! Remove a row from the table + virtual void removeRow(u32 rowIndex) = 0; + + //! clears the table rows, but keeps the columns intact + virtual void clearRows() = 0; + + //! Swap two row positions. + virtual void swapRows(u32 rowIndexA, u32 rowIndexB) = 0; + + //! This tells the table to start ordering all the rows. + /** You need to explicitly tell the table to re order the rows + when a new row is added or the cells data is changed. This + makes the system more flexible and doesn't make you pay the + cost of ordering when adding a lot of rows. + \param columnIndex: When set to -1 the active column is used. + \param mode Ordering mode of the rows. */ + virtual void orderRows(s32 columnIndex=-1, EGUI_ORDERING_MODE mode=EGOM_NONE) = 0; + + //! Set the text of a cell + virtual void setCellText(u32 rowIndex, u32 columnIndex, const core::stringw& text) = 0; + + //! Set the text of a cell, and set a color of this cell. + virtual void setCellText(u32 rowIndex, u32 columnIndex, const core::stringw& text, video::SColor color) = 0; + + //! Set the data of a cell + virtual void setCellData(u32 rowIndex, u32 columnIndex, void *data) = 0; + + //! Set the color of a cell text + virtual void setCellColor(u32 rowIndex, u32 columnIndex, video::SColor color) = 0; + + //! Get the text of a cell + virtual const wchar_t* getCellText(u32 rowIndex, u32 columnIndex ) const = 0; + + //! Get the data of a cell + virtual void* getCellData(u32 rowIndex, u32 columnIndex ) const = 0; + + //! clears the table, deletes all items in the table + virtual void clear() = 0; + + //! Set flags, as defined in EGUI_TABLE_DRAW_FLAGS, which influence the layout + virtual void setDrawFlags(s32 flags) = 0; + + //! Get the flags, as defined in EGUI_TABLE_DRAW_FLAGS, which influence the layout + virtual s32 getDrawFlags() const = 0; + }; + + +} // end namespace gui +} // end namespace irr + +#endif + diff --git a/inc/IGUIToolbar.h b/inc/IGUIToolbar.h new file mode 100644 index 0000000..08519fc --- /dev/null +++ b/inc/IGUIToolbar.h @@ -0,0 +1,40 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_GUI_TOOL_BAR_H_INCLUDED__ +#define __I_GUI_TOOL_BAR_H_INCLUDED__ + +#include "IGUIElement.h" + +namespace irr +{ +namespace video +{ + class ITexture; +} // end namespace video +namespace gui +{ + class IGUIButton; + + //! Stays at the top of its parent like the menu bar and contains tool buttons + class IGUIToolBar : public IGUIElement + { + public: + + //! constructor + IGUIToolBar(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect rectangle) + : IGUIElement(EGUIET_TOOL_BAR, environment, parent, id, rectangle) {} + + //! Adds a button to the tool bar + virtual IGUIButton* addButton(s32 id=-1, const wchar_t* text=0,const wchar_t* tooltiptext=0, + video::ITexture* img=0, video::ITexture* pressedimg=0, + bool isPushButton=false, bool useAlphaChannel=false) = 0; + }; + + +} // end namespace gui +} // end namespace irr + +#endif + diff --git a/inc/IGUITreeView.h b/inc/IGUITreeView.h new file mode 100644 index 0000000..5f21022 --- /dev/null +++ b/inc/IGUITreeView.h @@ -0,0 +1,278 @@ +// written by Reinhard Ostermeier, reinhard@nospam.r-ostermeier.de +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_GUI_TREE_VIEW_H_INCLUDED__ +#define __I_GUI_TREE_VIEW_H_INCLUDED__ + +#include "IGUIElement.h" +#include "IGUIImageList.h" +#include "irrTypes.h" + +namespace irr +{ +namespace gui +{ + class IGUIFont; + class IGUITreeView; + + + //! Node for gui tree view + /** \par This element can create the following events of type EGUI_EVENT_TYPE: + \li EGET_TREEVIEW_NODE_EXPAND + \li EGET_TREEVIEW_NODE_COLLAPS + \li EGET_TREEVIEW_NODE_DESELECT + \li EGET_TREEVIEW_NODE_SELECT + */ + class IGUITreeViewNode : public IReferenceCounted + { + public: + //! returns the owner (tree view) of this node + virtual IGUITreeView* getOwner() const = 0; + + //! Returns the parent node of this node. + /** For the root node this will return 0. */ + virtual IGUITreeViewNode* getParent() const = 0; + + //! returns the text of the node + virtual const wchar_t* getText() const = 0; + + //! sets the text of the node + virtual void setText( const wchar_t* text ) = 0; + + //! returns the icon text of the node + virtual const wchar_t* getIcon() const = 0; + + //! sets the icon text of the node + virtual void setIcon( const wchar_t* icon ) = 0; + + //! returns the image index of the node + virtual u32 getImageIndex() const = 0; + + //! sets the image index of the node + virtual void setImageIndex( u32 imageIndex ) = 0; + + //! returns the image index of the node + virtual u32 getSelectedImageIndex() const = 0; + + //! sets the image index of the node + virtual void setSelectedImageIndex( u32 imageIndex ) = 0; + + //! returns the user data (void*) of this node + virtual void* getData() const = 0; + + //! sets the user data (void*) of this node + virtual void setData( void* data ) = 0; + + //! returns the user data2 (IReferenceCounted) of this node + virtual IReferenceCounted* getData2() const = 0; + + //! sets the user data2 (IReferenceCounted) of this node + virtual void setData2( IReferenceCounted* data ) = 0; + + //! returns the child item count + virtual u32 getChildCount() const = 0; + + //! removes all children (recursive) from this node + virtual void clearChildren() = 0; + + //! removes all children (recursive) from this node + /** \deprecated Deprecated in 1.8, use clearChildren() instead. + This method may be removed by Irrlicht 1.9 */ + _IRR_DEPRECATED_ void clearChilds() + { + return clearChildren(); + } + + //! returns true if this node has child nodes + virtual bool hasChildren() const = 0; + + //! returns true if this node has child nodes + /** \deprecated Deprecated in 1.8, use hasChildren() instead. + This method may be removed by Irrlicht 1.9 */ + _IRR_DEPRECATED_ bool hasChilds() const + { + return hasChildren(); + } + + //! Adds a new node behind the last child node. + /** \param text text of the new node + \param icon icon text of the new node + \param imageIndex index of the image for the new node (-1 = none) + \param selectedImageIndex index of the selected image for the new node (-1 = same as imageIndex) + \param data user data (void*) of the new node + \param data2 user data2 (IReferenceCounted*) of the new node + \return The new node + */ + virtual IGUITreeViewNode* addChildBack( + const wchar_t* text, const wchar_t* icon = 0, + s32 imageIndex=-1, s32 selectedImageIndex=-1, + void* data=0, IReferenceCounted* data2=0) =0; + + //! Adds a new node before the first child node. + /** \param text text of the new node + \param icon icon text of the new node + \param imageIndex index of the image for the new node (-1 = none) + \param selectedImageIndex index of the selected image for the new node (-1 = same as imageIndex) + \param data user data (void*) of the new node + \param data2 user data2 (IReferenceCounted*) of the new node + \return The new node + */ + virtual IGUITreeViewNode* addChildFront( + const wchar_t* text, const wchar_t* icon = 0, + s32 imageIndex=-1, s32 selectedImageIndex=-1, + void* data=0, IReferenceCounted* data2=0 ) =0; + + //! Adds a new node behind the other node. + /** The other node has also te be a child node from this node. + \param other Node to insert after + \param text text of the new node + \param icon icon text of the new node + \param imageIndex index of the image for the new node (-1 = none) + \param selectedImageIndex index of the selected image for the new node (-1 = same as imageIndex) + \param data user data (void*) of the new node + \param data2 user data2 (IReferenceCounted*) of the new node + \return The new node or 0 if other is no child node from this + */ + virtual IGUITreeViewNode* insertChildAfter( + IGUITreeViewNode* other, + const wchar_t* text, const wchar_t* icon = 0, + s32 imageIndex=-1, s32 selectedImageIndex=-1, + void* data=0, IReferenceCounted* data2=0) =0; + + //! Adds a new node before the other node. + /** The other node has also te be a child node from this node. + \param other Node to insert before + \param text text of the new node + \param icon icon text of the new node + \param imageIndex index of the image for the new node (-1 = none) + \param selectedImageIndex index of the selected image for the new node (-1 = same as imageIndex) + \param data user data (void*) of the new node + \param data2 user data2 (IReferenceCounted*) of the new node + \return The new node or 0 if other is no child node from this + */ + virtual IGUITreeViewNode* insertChildBefore( + IGUITreeViewNode* other, + const wchar_t* text, const wchar_t* icon = 0, + s32 imageIndex=-1, s32 selectedImageIndex=-1, + void* data=0, IReferenceCounted* data2=0) = 0; + + //! Return the first child node from this node. + /** \return The first child node or 0 if this node has no children. */ + virtual IGUITreeViewNode* getFirstChild() const = 0; + + //! Return the last child node from this node. + /** \return The last child node or 0 if this node has no children. */ + virtual IGUITreeViewNode* getLastChild() const = 0; + + //! Returns the previous sibling node from this node. + /** \return The previous sibling node from this node or 0 if this is + the first node from the parent node. + */ + virtual IGUITreeViewNode* getPrevSibling() const = 0; + + //! Returns the next sibling node from this node. + /** \return The next sibling node from this node or 0 if this is + the last node from the parent node. + */ + virtual IGUITreeViewNode* getNextSibling() const = 0; + + //! Returns the next visible (expanded, may be out of scrolling) node from this node. + /** \return The next visible node from this node or 0 if this is + the last visible node. */ + virtual IGUITreeViewNode* getNextVisible() const = 0; + + //! Deletes a child node. + /** \return Returns true if the node was found as a child and is deleted. */ + virtual bool deleteChild( IGUITreeViewNode* child ) = 0; + + //! Moves a child node one position up. + /** \return True if the node was found as achild node and was not already the first child. */ + virtual bool moveChildUp( IGUITreeViewNode* child ) = 0; + + //! Moves a child node one position down. + /** \return True if the node was found as achild node and was not already the last child. */ + virtual bool moveChildDown( IGUITreeViewNode* child ) = 0; + + //! Returns true if the node is expanded (children are visible). + virtual bool getExpanded() const = 0; + + //! Sets if the node is expanded. + virtual void setExpanded( bool expanded ) = 0; + + //! Returns true if the node is currently selected. + virtual bool getSelected() const = 0; + + //! Sets this node as selected. + virtual void setSelected( bool selected ) = 0; + + //! Returns true if this node is the root node. + virtual bool isRoot() const = 0; + + //! Returns the level of this node. + /** The root node has level 0. Direct children of the root has level 1 ... */ + virtual s32 getLevel() const = 0; + + //! Returns true if this node is visible (all parents are expanded). + virtual bool isVisible() const = 0; + }; + + + //! Default tree view GUI element. + /** Displays a windows like tree buttons to expand/collaps the child + nodes of an node and optional tree lines. Each node consits of an + text, an icon text and a void pointer for user data. */ + class IGUITreeView : public IGUIElement + { + public: + //! constructor + IGUITreeView(IGUIEnvironment* environment, IGUIElement* parent, + s32 id, core::rect rectangle) + : IGUIElement( EGUIET_TREE_VIEW, environment, parent, id, rectangle ) {} + + //! returns the root node (not visible) from the tree. + virtual IGUITreeViewNode* getRoot() const = 0; + + //! returns the selected node of the tree or 0 if none is selected + virtual IGUITreeViewNode* getSelected() const = 0; + + //! returns true if the tree lines are visible + virtual bool getLinesVisible() const = 0; + + //! sets if the tree lines are visible + /** \param visible true for visible, false for invisible */ + virtual void setLinesVisible( bool visible ) = 0; + + //! Sets the font which should be used as icon font. + /** This font is set to the Irrlicht engine built-in-font by + default. Icons can be displayed in front of every list item. + An icon is a string, displayed with the icon font. When using + the build-in-font of the Irrlicht engine as icon font, the icon + strings defined in GUIIcons.h can be used. + */ + virtual void setIconFont( IGUIFont* font ) = 0; + + //! Sets the image list which should be used for the image and selected image of every node. + /** The default is 0 (no images). */ + virtual void setImageList( IGUIImageList* imageList ) = 0; + + //! Returns the image list which is used for the nodes. + virtual IGUIImageList* getImageList() const = 0; + + //! Sets if the image is left of the icon. Default is true. + virtual void setImageLeftOfIcon( bool bLeftOf ) = 0; + + //! Returns if the Image is left of the icon. Default is true. + virtual bool getImageLeftOfIcon() const = 0; + + //! Returns the node which is associated to the last event. + /** This pointer is only valid inside the OnEvent call! */ + virtual IGUITreeViewNode* getLastEventNode() const = 0; + }; + + +} // end namespace gui +} // end namespace irr + +#endif + diff --git a/inc/IGUIWindow.h b/inc/IGUIWindow.h new file mode 100644 index 0000000..23d45da --- /dev/null +++ b/inc/IGUIWindow.h @@ -0,0 +1,74 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_GUI_WINDOW_H_INCLUDED__ +#define __I_GUI_WINDOW_H_INCLUDED__ + +#include "IGUIElement.h" +#include "EMessageBoxFlags.h" + +namespace irr +{ +namespace gui +{ + class IGUIButton; + + //! Default moveable window GUI element with border, caption and close icons. + /** \par This element can create the following events of type EGUI_EVENT_TYPE: + \li EGET_ELEMENT_CLOSED + */ + class IGUIWindow : public IGUIElement + { + public: + + //! constructor + IGUIWindow(IGUIEnvironment* environment, IGUIElement* parent, s32 id, core::rect rectangle) + : IGUIElement(EGUIET_WINDOW, environment, parent, id, rectangle) {} + + //! Returns pointer to the close button + /** You can hide the button by calling setVisible(false) on the result. */ + virtual IGUIButton* getCloseButton() const = 0; + + //! Returns pointer to the minimize button + /** You can hide the button by calling setVisible(false) on the result. */ + virtual IGUIButton* getMinimizeButton() const = 0; + + //! Returns pointer to the maximize button + /** You can hide the button by calling setVisible(false) on the result. */ + virtual IGUIButton* getMaximizeButton() const = 0; + + //! Returns true if the window can be dragged with the mouse, false if not + virtual bool isDraggable() const = 0; + + //! Sets whether the window can be dragged by the mouse + virtual void setDraggable(bool draggable) = 0; + + //! Set if the window background will be drawn + virtual void setDrawBackground(bool draw) = 0; + + //! Get if the window background will be drawn + virtual bool getDrawBackground() const = 0; + + //! Set if the window titlebar will be drawn + //! Note: If the background is not drawn, then the titlebar is automatically also not drawn + virtual void setDrawTitlebar(bool draw) = 0; + + //! Get if the window titlebar will be drawn + virtual bool getDrawTitlebar() const = 0; + + //! Returns the rectangle of the drawable area (without border and without titlebar) + /** The coordinates are given relative to the top-left position of the gui element.
+ So to get absolute positions you have to add the resulting rectangle to getAbsolutePosition().UpperLeftCorner.
+ To get it relative to the parent element you have to add the resulting rectangle to getRelativePosition().UpperLeftCorner. + Beware that adding a menu will not change the clientRect as menus are own gui elements, so in that case you might want to subtract + the menu area additionally. */ + virtual core::rect getClientRect() const = 0; + }; + + +} // end namespace gui +} // end namespace irr + +#endif + diff --git a/inc/IGeometryCreator.h b/inc/IGeometryCreator.h new file mode 100644 index 0000000..22cd013 --- /dev/null +++ b/inc/IGeometryCreator.h @@ -0,0 +1,177 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_GEOMETRY_CREATOR_H_INCLUDED__ +#define __I_GEOMETRY_CREATOR_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "IMesh.h" +#include "IImage.h" + +namespace irr +{ +namespace video +{ + class IVideoDriver; + class SMaterial; +} + +namespace scene +{ + +//! Helper class for creating geometry on the fly. +/** You can get an instance of this class through ISceneManager::getGeometryCreator() */ +class IGeometryCreator : public IReferenceCounted +{ +public: + + //! Creates a simple cube mesh. + /** + \param size Dimensions of the cube. + \return Generated mesh. + */ + virtual IMesh* createCubeMesh(const core::vector3df& size=core::vector3df(5.f,5.f,5.f)) const =0; + + //! Create a pseudo-random mesh representing a hilly terrain. + /** + \param tileSize The size of each tile. + \param tileCount The number of tiles in each dimension. + \param material The material to apply to the mesh. + \param hillHeight The maximum height of the hills. + \param countHills The number of hills along each dimension. + \param textureRepeatCount The number of times to repeat the material texture along each dimension. + \return Generated mesh. + */ + virtual IMesh* createHillPlaneMesh( + const core::dimension2d& tileSize, + const core::dimension2d& tileCount, + video::SMaterial* material, f32 hillHeight, + const core::dimension2d& countHills, + const core::dimension2d& textureRepeatCount) const =0; + + //! Create a simple rectangular textured plane mesh. + /** + \param tileSize The size of each tile. + \param tileCount The number of tiles in each dimension. + \param material The material to apply to the mesh. + \param textureRepeatCount The number of times to repeat the material texture along each dimension. + \return Generated mesh. + */ + IMesh* createPlaneMesh( + const core::dimension2d& tileSize, + const core::dimension2d& tileCount=core::dimension2du(1,1), + video::SMaterial* material=0, + const core::dimension2df& textureRepeatCount=core::dimension2df(1.f,1.f)) const + { + return createHillPlaneMesh(tileSize, tileCount, material, 0.f, core::dimension2df(), textureRepeatCount); + } + + //! Create a terrain mesh from an image representing a heightfield. + /** + \param texture The texture to apply to the terrain. + \param heightmap An image that will be interpreted as a heightmap. The + brightness (average color) of each pixel is interpreted as a height, + with a 255 brightness pixel producing the maximum height. + \param stretchSize The size that each pixel will produce, i.e. a + 512x512 heightmap + and a stretchSize of (10.f, 20.f) will produce a mesh of size + 5120.f x 10240.f + \param maxHeight The maximum height of the terrain. + \param driver The current video driver. + \param defaultVertexBlockSize (to be documented) + \param debugBorders (to be documented) + \return Generated mesh. + */ + virtual IMesh* createTerrainMesh(video::IImage* texture, + video::IImage* heightmap, + const core::dimension2d& stretchSize, + f32 maxHeight, video::IVideoDriver* driver, + const core::dimension2d& defaultVertexBlockSize, + bool debugBorders=false) const =0; + + //! Create an arrow mesh, composed of a cylinder and a cone. + /** + \param tesselationCylinder Number of quads composing the cylinder. + \param tesselationCone Number of triangles composing the cone's roof. + \param height Total height of the arrow + \param cylinderHeight Total height of the cylinder, should be lesser + than total height + \param widthCylinder Diameter of the cylinder + \param widthCone Diameter of the cone's base, should be not smaller + than the cylinder's diameter + \param colorCylinder color of the cylinder + \param colorCone color of the cone + \return Generated mesh. + */ + virtual IMesh* createArrowMesh(const u32 tesselationCylinder = 4, + const u32 tesselationCone = 8, const f32 height = 1.f, + const f32 cylinderHeight = 0.6f, const f32 widthCylinder = 0.05f, + const f32 widthCone = 0.3f, const video::SColor colorCylinder = 0xFFFFFFFF, + const video::SColor colorCone = 0xFFFFFFFF) const =0; + + + //! Create a sphere mesh. + /** + \param radius Radius of the sphere + \param polyCountX Number of quads used for the horizontal tiling + \param polyCountY Number of quads used for the vertical tiling + \return Generated mesh. + */ + virtual IMesh* createSphereMesh(f32 radius = 5.f, + u32 polyCountX = 16, u32 polyCountY = 16) const =0; + + //! Create a cylinder mesh. + /** + \param radius Radius of the cylinder. + \param length Length of the cylinder. + \param tesselation Number of quads around the circumference of the cylinder. + \param color The color of the cylinder. + \param closeTop If true, close the ends of the cylinder, otherwise leave them open. + \param oblique (to be documented) + \return Generated mesh. + */ + virtual IMesh* createCylinderMesh(f32 radius, f32 length, + u32 tesselation, + const video::SColor& color=video::SColor(0xffffffff), + bool closeTop=true, f32 oblique=0.f) const =0; + + //! Create a cone mesh. + /** + \param radius Radius of the cone. + \param length Length of the cone. + \param tesselation Number of quads around the circumference of the cone. + \param colorTop The color of the top of the cone. + \param colorBottom The color of the bottom of the cone. + \param oblique (to be documented) + \return Generated mesh. + */ + virtual IMesh* createConeMesh(f32 radius, f32 length, u32 tesselation, + const video::SColor& colorTop=video::SColor(0xffffffff), + const video::SColor& colorBottom=video::SColor(0xffffffff), + f32 oblique=0.f) const =0; + + //! Create a volume light mesh. + /** + \param subdivideU Horizontal patch count. + \param subdivideV Vertical patch count. + \param footColor Color at the bottom of the light. + \param tailColor Color at the mid of the light. + \param lpDistance Virtual distance of the light point for normals. + \param lightDim Dimensions of the light. + \return Generated mesh. + */ + virtual IMesh* createVolumeLightMesh( + const u32 subdivideU=32, const u32 subdivideV=32, + const video::SColor footColor = 0xffffffff, + const video::SColor tailColor = 0xffffffff, + const f32 lpDistance = 8.f, + const core::vector3df& lightDim = core::vector3df(1.f,1.2f,1.f)) const =0; +}; + + +} // end namespace scene +} // end namespace irr + +#endif // __I_GEOMETRY_CREATOR_H_INCLUDED__ + diff --git a/inc/IImage.h b/inc/IImage.h new file mode 100644 index 0000000..d484293 --- /dev/null +++ b/inc/IImage.h @@ -0,0 +1,155 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_IMAGE_H_INCLUDED__ +#define __I_IMAGE_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "position2d.h" +#include "rect.h" +#include "SColor.h" + +namespace irr +{ +namespace video +{ + +//! Interface for software image data. +/** Image loaders create these images from files. IVideoDrivers convert +these images into their (hardware) textures. +*/ +class IImage : public virtual IReferenceCounted +{ +public: + + //! Lock function. Use this to get a pointer to the image data. + /** After you don't need the pointer anymore, you must call unlock(). + \return Pointer to the image data. What type of data is pointed to + depends on the color format of the image. For example if the color + format is ECF_A8R8G8B8, it is of u32. Be sure to call unlock() after + you don't need the pointer any more. */ + virtual void* lock() = 0; + + //! Unlock function. + /** Should be called after the pointer received by lock() is not + needed anymore. */ + virtual void unlock() = 0; + + //! Returns width and height of image data. + virtual const core::dimension2d& getDimension() const = 0; + + //! Returns bits per pixel. + virtual u32 getBitsPerPixel() const = 0; + + //! Returns bytes per pixel + virtual u32 getBytesPerPixel() const = 0; + + //! Returns image data size in bytes + virtual u32 getImageDataSizeInBytes() const = 0; + + //! Returns image data size in pixels + virtual u32 getImageDataSizeInPixels() const = 0; + + //! Returns a pixel + virtual SColor getPixel(u32 x, u32 y) const = 0; + + //! Sets a pixel + virtual void setPixel(u32 x, u32 y, const SColor &color, bool blend = false ) = 0; + + //! Returns the color format + virtual ECOLOR_FORMAT getColorFormat() const = 0; + + //! Returns mask for red value of a pixel + virtual u32 getRedMask() const = 0; + + //! Returns mask for green value of a pixel + virtual u32 getGreenMask() const = 0; + + //! Returns mask for blue value of a pixel + virtual u32 getBlueMask() const = 0; + + //! Returns mask for alpha value of a pixel + virtual u32 getAlphaMask() const = 0; + + //! Returns pitch of image + virtual u32 getPitch() const =0; + + //! Copies the image into the target, scaling the image to fit + virtual void copyToScaling(void* target, u32 width, u32 height, ECOLOR_FORMAT format=ECF_A8R8G8B8, u32 pitch=0) =0; + + //! Copies the image into the target, scaling the image to fit + virtual void copyToScaling(IImage* target) =0; + + //! copies this surface into another + virtual void copyTo(IImage* target, const core::position2d& pos=core::position2d(0,0)) =0; + + //! copies this surface into another + virtual void copyTo(IImage* target, const core::position2d& pos, const core::rect& sourceRect, const core::rect* clipRect=0) =0; + + //! copies this surface into another, using the alpha mask and cliprect and a color to add with + virtual void copyToWithAlpha(IImage* target, const core::position2d& pos, + const core::rect& sourceRect, const SColor &color, + const core::rect* clipRect = 0) =0; + + //! copies this surface into another, scaling it to fit, appyling a box filter + virtual void copyToScalingBoxFilter(IImage* target, s32 bias = 0, bool blend = false) = 0; + + //! fills the surface with given color + virtual void fill(const SColor &color) =0; + + //! get the amount of Bits per Pixel of the given color format + static u32 getBitsPerPixelFromFormat(const ECOLOR_FORMAT format) + { + switch(format) + { + case ECF_A1R5G5B5: + return 16; + case ECF_R5G6B5: + return 16; + case ECF_R8G8B8: + return 24; + case ECF_A8R8G8B8: + return 32; + case ECF_R16F: + return 16; + case ECF_G16R16F: + return 32; + case ECF_A16B16G16R16F: + return 64; + case ECF_R32F: + return 32; + case ECF_G32R32F: + return 64; + case ECF_A32B32G32R32F: + return 128; + default: + return 0; + } + } + + //! test if the color format is only viable for RenderTarget textures + /** Since we don't have support for e.g. floating point IImage formats + one should test if the color format can be used for arbitrary usage, or + if it is restricted to RTTs. */ + static bool isRenderTargetOnlyFormat(const ECOLOR_FORMAT format) + { + switch(format) + { + case ECF_A1R5G5B5: + case ECF_R5G6B5: + case ECF_R8G8B8: + case ECF_A8R8G8B8: + return false; + default: + return true; + } + } + +}; + +} // end namespace video +} // end namespace irr + +#endif + diff --git a/inc/IImageLoader.h b/inc/IImageLoader.h new file mode 100644 index 0000000..77603f5 --- /dev/null +++ b/inc/IImageLoader.h @@ -0,0 +1,53 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_SURFACE_LOADER_H_INCLUDED__ +#define __I_SURFACE_LOADER_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "IImage.h" +#include "path.h" + +namespace irr +{ +namespace io +{ + class IReadFile; +} // end namespace io +namespace video +{ + +//! Class which is able to create a image from a file. +/** If you want the Irrlicht Engine be able to load textures of +currently unsupported file formats (e.g .gif), then implement +this and add your new Surface loader with +IVideoDriver::addExternalImageLoader() to the engine. */ +class IImageLoader : public virtual IReferenceCounted +{ +public: + + //! Check if the file might be loaded by this class + /** Check is based on the file extension (e.g. ".tga") + \param filename Name of file to check. + \return True if file seems to be loadable. */ + virtual bool isALoadableFileExtension(const io::path& filename) const = 0; + + //! Check if the file might be loaded by this class + /** Check might look into the file. + \param file File handle to check. + \return True if file seems to be loadable. */ + virtual bool isALoadableFileFormat(io::IReadFile* file) const = 0; + + //! Creates a surface from the file + /** \param file File handle to check. + \return Pointer to newly created image, or 0 upon error. */ + virtual IImage* loadImage(io::IReadFile* file) const = 0; +}; + + +} // end namespace video +} // end namespace irr + +#endif + diff --git a/inc/IImageWriter.h b/inc/IImageWriter.h new file mode 100644 index 0000000..fd00793 --- /dev/null +++ b/inc/IImageWriter.h @@ -0,0 +1,45 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef _I_IMAGE_WRITER_H_INCLUDED__ +#define _I_IMAGE_WRITER_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "irrString.h" +#include "coreutil.h" + +namespace irr +{ +namespace io +{ + class IWriteFile; +} // end namespace io + +namespace video +{ + class IImage; + + +//! Interface for writing software image data. +class IImageWriter : public IReferenceCounted +{ +public: + //! Check if this writer can write a file with the given extension + /** \param filename Name of the file to check. + \return True if file extension specifies a writable type. */ + virtual bool isAWriteableFileExtension(const io::path& filename) const = 0; + + //! Write image to file + /** \param file File handle to write to. + \param image Image to write into file. + \param param Writer specific parameter, influencing e.g. quality. + \return True if image was successfully written. */ + virtual bool writeImage(io::IWriteFile *file, IImage *image, u32 param = 0) const = 0; +}; + +} // namespace video +} // namespace irr + +#endif // _I_IMAGE_WRITER_H_INCLUDED__ + diff --git a/inc/IIndexBuffer.h b/inc/IIndexBuffer.h new file mode 100644 index 0000000..ff5738c --- /dev/null +++ b/inc/IIndexBuffer.h @@ -0,0 +1,65 @@ +// Copyright (C) 2008-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_INDEX_BUFFER_H_INCLUDED__ +#define __I_INDEX_BUFFER_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "irrArray.h" + +#include "SVertexIndex.h" + +namespace irr +{ + +namespace video +{ + +} + +namespace scene +{ + + class IIndexBuffer : public virtual IReferenceCounted + { + public: + + virtual void* getData() =0; + + virtual video::E_INDEX_TYPE getType() const =0; + virtual void setType(video::E_INDEX_TYPE IndexType) =0; + + virtual u32 stride() const =0; + + virtual u32 size() const =0; + virtual void push_back (const u32 &element) =0; + virtual u32 operator [](u32 index) const =0; + virtual u32 getLast() =0; + virtual void setValue(u32 index, u32 value) =0; + virtual void set_used(u32 usedNow) =0; + virtual void reallocate(u32 new_size) =0; + virtual u32 allocated_size() const=0; + + virtual void* pointer() =0; + + //! get the current hardware mapping hint + virtual E_HARDWARE_MAPPING getHardwareMappingHint() const =0; + + //! set the hardware mapping hint, for driver + virtual void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint ) =0; + + //! flags the meshbuffer as changed, reloads hardware buffers + virtual void setDirty() = 0; + + //! Get the currently used ID for identification of changes. + /** This shouldn't be used for anything outside the VideoDriver. */ + virtual u32 getChangedID() const = 0; + }; + + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/ILightManager.h b/inc/ILightManager.h new file mode 100644 index 0000000..35fb9cb --- /dev/null +++ b/inc/ILightManager.h @@ -0,0 +1,62 @@ +// Written by Colin MacDonald - all rights assigned to Nikolaus Gebhardt +// Copyright (C) 2008-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_LIGHT_MANAGER_H_INCLUDED__ +#define __I_LIGHT_MANAGER_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "irrArray.h" + +namespace irr +{ +namespace scene +{ + class ILightSceneNode; + + //! ILightManager provides an interface for user applications to manipulate the list of lights in the scene. + /** The light list can be trimmed or re-ordered before device/ hardware + lights are created, and/or individual lights can be switched on and off + before or after each scene node is rendered. It is assumed that the + ILightManager implementation will store any data that it wishes to + retain, i.e. the ISceneManager to which it is assigned, the lightList, + the current render pass, and the current scene node. */ + class ILightManager : public IReferenceCounted + { + public: + //! Called after the scene's light list has been built, but before rendering has begun. + /** As actual device/hardware lights are not created until the + ESNRP_LIGHT render pass, this provides an opportunity for the + light manager to trim or re-order the light list, before any + device/hardware lights have actually been created. + \param lightList: the Scene Manager's light list, which + the light manager may modify. This reference will remain valid + until OnPostRender(). + */ + virtual void OnPreRender(core::array & lightList) = 0; + + //! Called after the last scene node is rendered. + /** After this call returns, the lightList passed to OnPreRender() becomes invalid. */ + virtual void OnPostRender(void) = 0; + + //! Called before a render pass begins + /** \param renderPass: the render pass that's about to begin */ + virtual void OnRenderPassPreRender(E_SCENE_NODE_RENDER_PASS renderPass) = 0; + + //! Called after the render pass specified in OnRenderPassPreRender() ends + /** \param[in] renderPass: the render pass that has finished */ + virtual void OnRenderPassPostRender(E_SCENE_NODE_RENDER_PASS renderPass) = 0; + + //! Called before the given scene node is rendered + /** \param[in] node: the scene node that's about to be rendered */ + virtual void OnNodePreRender(ISceneNode* node) = 0; + + //! Called after the the node specified in OnNodePreRender() has been rendered + /** \param[in] node: the scene node that has just been rendered */ + virtual void OnNodePostRender(ISceneNode* node) = 0; + }; +} // end namespace scene +} // end namespace irr + +#endif diff --git a/inc/ILightSceneNode.h b/inc/ILightSceneNode.h new file mode 100644 index 0000000..3feb207 --- /dev/null +++ b/inc/ILightSceneNode.h @@ -0,0 +1,86 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_LIGHT_SCENE_NODE_H_INCLUDED__ +#define __I_LIGHT_SCENE_NODE_H_INCLUDED__ + +#include "ISceneNode.h" +#include "SLight.h" + +namespace irr +{ +namespace scene +{ + +//! Scene node which is a dynamic light. +/** You can switch the light on and off by making it visible or not. It can be +animated by ordinary scene node animators. If the light type is directional or +spot, the direction of the light source is defined by the rotation of the scene +node (assuming (0,0,1) as the local direction of the light). +*/ +class ILightSceneNode : public ISceneNode +{ +public: + + //! constructor + ILightSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id, + const core::vector3df& position = core::vector3df(0,0,0)) + : ISceneNode(parent, mgr, id, position) {} + + //! Sets the light data associated with this ILightSceneNode + /** \param light The new light data. */ + virtual void setLightData(const video::SLight& light) = 0; + + //! Gets the light data associated with this ILightSceneNode + /** \return The light data. */ + virtual const video::SLight& getLightData() const = 0; + + //! Gets the light data associated with this ILightSceneNode + /** \return The light data. */ + virtual video::SLight& getLightData() = 0; + + //! Sets if the node should be visible or not. + /** All children of this node won't be visible either, when set + to true. + \param isVisible If the node shall be visible. */ + virtual void setVisible(bool isVisible) = 0; + + //! Sets the light's radius of influence. + /** Outside this radius the light won't lighten geometry and cast no + shadows. Setting the radius will also influence the attenuation, setting + it to (0,1/radius,0). If you want to override this behavior, set the + attenuation after the radius. + \param radius The new radius. */ + virtual void setRadius(f32 radius) = 0; + + //! Gets the light's radius of influence. + /** \return The current radius. */ + virtual f32 getRadius() const = 0; + + //! Sets the light type. + /** \param type The new type. */ + virtual void setLightType(video::E_LIGHT_TYPE type) = 0; + + //! Gets the light type. + /** \return The current light type. */ + virtual video::E_LIGHT_TYPE getLightType() const = 0; + + //! Sets whether this light casts shadows. + /** Enabling this flag won't automatically cast shadows, the meshes + will still need shadow scene nodes attached. But one can enable or + disable distinct lights for shadow casting for performance reasons. + \param shadow True if this light shall cast shadows. */ + virtual void enableCastShadow(bool shadow=true) = 0; + + //! Check whether this light casts shadows. + /** \return True if light would cast shadows, else false. */ + virtual bool getCastShadow() const = 0; +}; + +} // end namespace scene +} // end namespace irr + + +#endif + diff --git a/inc/ILogger.h b/inc/ILogger.h new file mode 100644 index 0000000..53f6273 --- /dev/null +++ b/inc/ILogger.h @@ -0,0 +1,102 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_LOGGER_H_INCLUDED__ +#define __I_LOGGER_H_INCLUDED__ + +#include "IReferenceCounted.h" + +namespace irr +{ + +//! Possible log levels. +//! When used has filter ELL_DEBUG means => log everything and ELL_NONE means => log (nearly) nothing. +//! When used to print logging information ELL_DEBUG will have lowest priority while ELL_NONE +//! messages are never filtered and always printed. +enum ELOG_LEVEL +{ + //! Used for printing information helpful in debugging + ELL_DEBUG, + + //! Useful information to print. For example hardware infos or something started/stopped. + ELL_INFORMATION, + + //! Warnings that something isn't as expected and can cause oddities + ELL_WARNING, + + //! Something did go wrong. + ELL_ERROR, + + //! Logs with ELL_NONE will never be filtered. + //! And used as filter it will remove all logging except ELL_NONE messages. + ELL_NONE +}; + + +//! Interface for logging messages, warnings and errors +class ILogger : public virtual IReferenceCounted +{ +public: + + //! Destructor + virtual ~ILogger() {} + + //! Returns the current set log level. + virtual ELOG_LEVEL getLogLevel() const = 0; + + //! Sets a new log level. + /** With this value, texts which are sent to the logger are filtered + out. For example setting this value to ELL_WARNING, only warnings and + errors are printed out. Setting it to ELL_INFORMATION, which is the + default setting, warnings, errors and informational texts are printed + out. + \param ll: new log level filter value. */ + virtual void setLogLevel(ELOG_LEVEL ll) = 0; + + //! Prints out a text into the log + /** \param text: Text to print out. + \param ll: Log level of the text. If the text is an error, set + it to ELL_ERROR, if it is warning set it to ELL_WARNING, and if it + is just an informational text, set it to ELL_INFORMATION. Texts are + filtered with these levels. If you want to be a text displayed, + independent on what level filter is set, use ELL_NONE. */ + virtual void log(const c8* text, ELOG_LEVEL ll=ELL_INFORMATION) = 0; + + //! Prints out a text into the log + /** \param text: Text to print out. + \param hint: Additional info. This string is added after a " :" to the + string. + \param ll: Log level of the text. If the text is an error, set + it to ELL_ERROR, if it is warning set it to ELL_WARNING, and if it + is just an informational text, set it to ELL_INFORMATION. Texts are + filtered with these levels. If you want to be a text displayed, + independent on what level filter is set, use ELL_NONE. */ + virtual void log(const c8* text, const c8* hint, ELOG_LEVEL ll=ELL_INFORMATION) = 0; + virtual void log(const c8* text, const wchar_t* hint, ELOG_LEVEL ll=ELL_INFORMATION) = 0; + + //! Prints out a text into the log + /** \param text: Text to print out. + \param hint: Additional info. This string is added after a " :" to the + string. + \param ll: Log level of the text. If the text is an error, set + it to ELL_ERROR, if it is warning set it to ELL_WARNING, and if it + is just an informational text, set it to ELL_INFORMATION. Texts are + filtered with these levels. If you want to be a text displayed, + independent on what level filter is set, use ELL_NONE. */ + virtual void log(const wchar_t* text, const wchar_t* hint, ELOG_LEVEL ll=ELL_INFORMATION) = 0; + + //! Prints out a text into the log + /** \param text: Text to print out. + \param ll: Log level of the text. If the text is an error, set + it to ELL_ERROR, if it is warning set it to ELL_WARNING, and if it + is just an informational text, set it to ELL_INFORMATION. Texts are + filtered with these levels. If you want to be a text displayed, + independent on what level filter is set, use ELL_NONE. */ + virtual void log(const wchar_t* text, ELOG_LEVEL ll=ELL_INFORMATION) = 0; +}; + +} // end namespace + +#endif + diff --git a/inc/IMaterialRenderer.h b/inc/IMaterialRenderer.h new file mode 100644 index 0000000..a4e1d20 --- /dev/null +++ b/inc/IMaterialRenderer.h @@ -0,0 +1,101 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_MATERIAL_RENDERER_H_INCLUDED__ +#define __I_MATERIAL_RENDERER_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "SMaterial.h" +#include "S3DVertex.h" + +namespace irr +{ +namespace video +{ + +class IVideoDriver; +class IMaterialRendererServices; + +//! Interface for material rendering. +/** Can be used to extend the engine with new materials. Refer to +IVideoDriver::addMaterialRenderer() for more informations on how to extend the +engine with new materials. */ +class IMaterialRenderer : public virtual IReferenceCounted +{ +public: + + //! Called by the IVideoDriver implementation the let the renderer set its needed render states. + /** This is called during the IVideoDriver::setMaterial() call. + When overriding this, you can set some renderstates or for example a + vertex or pixel shader if you like. + \param material: The new material parameters to be set. The renderer + may change the material flags in this material. For example if this + material does not accept the zbuffer = true, it can set it to false. + This is useful, because in the next lastMaterial will be just the + material in this call. + \param lastMaterial: The material parameters which have been set before + this material. + \param resetAllRenderstates: True if all renderstates should really be + reset. This is usually true if the last rendering mode was not a usual + 3d rendering mode, but for example a 2d rendering mode. + You should reset really all renderstates if this is true, no matter if + the lastMaterial had some similar settings. This is used because in + most cases, some common renderstates are not changed if they are + already there, for example bilinear filtering, wireframe, + gouraudshading, lighting, zbuffer, zwriteenable, backfaceculling and + fogenable. + \param services: Interface providing some methods for changing + advanced, internal states of a IVideoDriver. */ + virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial, + bool resetAllRenderstates, IMaterialRendererServices* services) {} + + //! Called every time before a new bunch of geometry is being drawn using this material with for example drawIndexedTriangleList() call. + /** OnSetMaterial should normally only be called if the renderer decides + that the renderstates should be changed, it won't be called if for + example two drawIndexedTriangleList() will be called with the same + material set. This method will be called every time. This is useful for + example for materials with shaders, which don't only set new + renderstates but also shader constants. + \param service: Pointer to interface providing methos for setting + constants and other things. + \param vtxtype: Vertex type with which the next rendering will be done. + This can be used by the material renderer to set some specific + optimized shaders or if this is an incompatible vertex type for this + renderer, to refuse rendering for example. + \return Returns true if everything is ok, and false if nothing should + be rendered. The material renderer can choose to return false for + example if he doesn't support the specified vertex type. This is + actually done in D3D8 and D3D9 when using a normal mapped material with + a vertex type other than EVT_TANGENTS. */ + virtual bool OnRender(IMaterialRendererServices* service, E_VERTEX_TYPE vtxtype) { return true; } + + //! Called by the IVideoDriver to unset this material. + /** Called during the IVideoDriver::setMaterial() call before the new + material will get the OnSetMaterial() call. */ + virtual void OnUnsetMaterial() {} + + //! Returns if the material is transparent. + /** The scene managment needs to know this + for being able to sort the materials by opaque and transparent. */ + virtual bool isTransparent() const { return false; } + + //! Returns the render capability of the material. + /** Because some more complex materials + are implemented in multiple ways and need special hardware capabilities, it is possible + to query how the current material renderer is performing on the current hardware with this + function. + \return Returns 0 if everything is running fine. Any other value is material renderer + specific and means for example that the renderer switched back to a fall back material because + it cannot use the latest shaders. More specific examples: + Fixed function pipeline materials should return 0 in most cases, parallax mapped + material will only return 0 when at least pixel shader 1.4 is available on that machine. */ + virtual s32 getRenderCapability() const { return 0; } +}; + + +} // end namespace video +} // end namespace irr + +#endif + diff --git a/inc/IMaterialRendererServices.h b/inc/IMaterialRendererServices.h new file mode 100644 index 0000000..dafad09 --- /dev/null +++ b/inc/IMaterialRendererServices.h @@ -0,0 +1,115 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_MATERIAL_RENDERER_SERVICES_H_INCLUDED__ +#define __I_MATERIAL_RENDERER_SERVICES_H_INCLUDED__ + +#include "SMaterial.h" +#include "S3DVertex.h" + +namespace irr +{ +namespace video +{ + +class IVideoDriver; + + +//! Interface providing some methods for changing advanced, internal states of a IVideoDriver. +class IMaterialRendererServices +{ +public: + + //! Destructor + virtual ~IMaterialRendererServices() {} + + //! Can be called by an IMaterialRenderer to make its work easier. + /** Sets all basic renderstates if needed. + Basic render states are diffuse, ambient, specular, and emissive color, + specular power, bilinear and trilinear filtering, wireframe mode, + grouraudshading, lighting, zbuffer, zwriteenable, backfaceculling and + fog enabling. + \param material The new material to be used. + \param lastMaterial The material used until now. + \param resetAllRenderstates Set to true if all renderstates should be + set, regardless of their current state. */ + virtual void setBasicRenderStates(const SMaterial& material, + const SMaterial& lastMaterial, + bool resetAllRenderstates) = 0; + + //! Sets a constant for the vertex shader based on a name. + /** This can be used if you used a high level shader language like GLSL + or HLSL to create a shader. Example: If you created a shader which has + variables named 'mWorldViewProj' (containing the WorldViewProjection + matrix) and another one named 'fTime' containing one float, you can set + them in your IShaderConstantSetCallBack derived class like this: + \code + virtual void OnSetConstants(video::IMaterialRendererServices* services, s32 userData) + { + video::IVideoDriver* driver = services->getVideoDriver(); + + f32 time = (f32)os::Timer::getTime()/100000.0f; + services->setVertexShaderConstant("fTime", &time, 1); + + core::matrix4 worldViewProj(driver->getTransform(video::ETS_PROJECTION)); + worldViewProj *= driver->getTransform(video::ETS_VIEW); + worldViewProj *= driver->getTransform(video::ETS_WORLD); + services->setVertexShaderConstant("mWorldViewProj", worldViewProj.M, 16); + } + \endcode + \param name Name of the variable + \param floats Pointer to array of floats + \param count Amount of floats in array. + \return True if successful. + */ + virtual bool setVertexShaderConstant(const c8* name, const f32* floats, int count) = 0; + + //! Bool interface for the above. + virtual bool setVertexShaderConstant(const c8* name, const bool* bools, int count) = 0; + + //! Int interface for the above. + virtual bool setVertexShaderConstant(const c8* name, const s32* ints, int count) = 0; + + //! Sets a vertex shader constant. + /** Can be used if you created a shader using pixel/vertex shader + assembler or ARB_fragment_program or ARB_vertex_program. + \param data: Data to be set in the constants + \param startRegister: First register to be set + \param constantAmount: Amount of registers to be set. One register consists of 4 floats. */ + virtual void setVertexShaderConstant(const f32* data, s32 startRegister, s32 constantAmount=1) = 0; + + //! Sets a constant for the pixel shader based on a name. + /** This can be used if you used a high level shader language like GLSL + or HLSL to create a shader. See setVertexShaderConstant() for an + example on how to use this. + \param name Name of the variable + \param floats Pointer to array of floats + \param count Amount of floats in array. + \return True if successful. */ + virtual bool setPixelShaderConstant(const c8* name, const f32* floats, int count) = 0; + + //! Bool interface for the above. + virtual bool setPixelShaderConstant(const c8* name, const bool* bools, int count) = 0; + + //! Int interface for the above. + virtual bool setPixelShaderConstant(const c8* name, const s32* ints, int count) = 0; + + //! Sets a pixel shader constant. + /** Can be used if you created a shader using pixel/vertex shader + assembler or ARB_fragment_program or ARB_vertex_program. + \param data Data to be set in the constants + \param startRegister First register to be set. + \param constantAmount Amount of registers to be set. One register consists of 4 floats. */ + virtual void setPixelShaderConstant(const f32* data, s32 startRegister, s32 constantAmount=1) = 0; + + //! Get pointer to the IVideoDriver interface + /** \return Pointer to the IVideoDriver interface */ + virtual IVideoDriver* getVideoDriver() = 0; +}; + +} // end namespace video +} // end namespace irr + +#endif + diff --git a/inc/IMesh.h b/inc/IMesh.h new file mode 100644 index 0000000..89f936b --- /dev/null +++ b/inc/IMesh.h @@ -0,0 +1,75 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_MESH_H_INCLUDED__ +#define __I_MESH_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "SMaterial.h" +#include "EHardwareBufferFlags.h" + +namespace irr +{ +namespace scene +{ + class IMeshBuffer; + + //! Class which holds the geometry of an object. + /** An IMesh is nothing more than a collection of some mesh buffers + (IMeshBuffer). SMesh is a simple implementation of an IMesh. + A mesh is usually added to an IMeshSceneNode in order to be rendered. + */ + class IMesh : public virtual IReferenceCounted + { + public: + + //! Get the amount of mesh buffers. + /** \return Amount of mesh buffers (IMeshBuffer) in this mesh. */ + virtual u32 getMeshBufferCount() const = 0; + + //! Get pointer to a mesh buffer. + /** \param nr: Zero based index of the mesh buffer. The maximum value is + getMeshBufferCount() - 1; + \return Pointer to the mesh buffer or 0 if there is no such + mesh buffer. */ + virtual IMeshBuffer* getMeshBuffer(u32 nr) const = 0; + + //! Get pointer to a mesh buffer which fits a material + /** \param material: material to search for + \return Pointer to the mesh buffer or 0 if there is no such + mesh buffer. */ + virtual IMeshBuffer* getMeshBuffer( const video::SMaterial &material) const = 0; + + //! Get an axis aligned bounding box of the mesh. + /** \return Bounding box of this mesh. */ + virtual const core::aabbox3d& getBoundingBox() const = 0; + + //! Set user-defined axis aligned bounding box + /** \param box New bounding box to use for the mesh. */ + virtual void setBoundingBox( const core::aabbox3df& box) = 0; + + //! Sets a flag of all contained materials to a new value. + /** \param flag: Flag to set in all materials. + \param newvalue: New value to set in all materials. */ + virtual void setMaterialFlag(video::E_MATERIAL_FLAG flag, bool newvalue) = 0; + + //! Set the hardware mapping hint + /** This methods allows to define optimization hints for the + hardware. This enables, e.g., the use of hardware buffers on + pltforms that support this feature. This can lead to noticeable + performance gains. */ + virtual void setHardwareMappingHint(E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX) = 0; + + //! Flag the meshbuffer as changed, reloads hardware buffers + /** This method has to be called every time the vertices or + indices have changed. Otherwise, changes won't be updated + on the GPU in the next render cycle. */ + virtual void setDirty(E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX) = 0; + }; + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/IMeshBuffer.h b/inc/IMeshBuffer.h new file mode 100644 index 0000000..99a9f48 --- /dev/null +++ b/inc/IMeshBuffer.h @@ -0,0 +1,154 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_MESH_BUFFER_H_INCLUDED__ +#define __I_MESH_BUFFER_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "SMaterial.h" +#include "aabbox3d.h" +#include "S3DVertex.h" +#include "SVertexIndex.h" +#include "EHardwareBufferFlags.h" +#include "EPrimitiveTypes.h" + +namespace irr +{ +namespace scene +{ + //! Struct for holding a mesh with a single material. + /** A part of an IMesh which has the same material on each face of that + group. Logical groups of an IMesh need not be put into separate mesh + buffers, but can be. Separately animated parts of the mesh must be put + into separate mesh buffers. + Some mesh buffer implementations have limitations on the number of + vertices the buffer can hold. In that case, logical grouping can help. + Moreover, the number of vertices should be optimized for the GPU upload, + which often depends on the type of gfx card. Typial figures are + 1000-10000 vertices per buffer. + SMeshBuffer is a simple implementation of a MeshBuffer, which supports + up to 65535 vertices. + + Since meshbuffers are used for drawing, and hence will be exposed + to the driver, chances are high that they are grab()'ed from somewhere. + It's therefore required to dynamically allocate meshbuffers which are + passed to a video driver and only drop the buffer once it's not used in + the current code block anymore. + */ + class IMeshBuffer : public virtual IReferenceCounted + { + public: + + //! Get the material of this meshbuffer + /** \return Material of this buffer. */ + virtual video::SMaterial& getMaterial() = 0; + + //! Get the material of this meshbuffer + /** \return Material of this buffer. */ + virtual const video::SMaterial& getMaterial() const = 0; + + //! Get type of vertex data which is stored in this meshbuffer. + /** \return Vertex type of this buffer. */ + virtual video::E_VERTEX_TYPE getVertexType() const = 0; + + //! Get access to vertex data. The data is an array of vertices. + /** Which vertex type is used can be determined by getVertexType(). + \return Pointer to array of vertices. */ + virtual const void* getVertices() const = 0; + + //! Get access to vertex data. The data is an array of vertices. + /** Which vertex type is used can be determined by getVertexType(). + \return Pointer to array of vertices. */ + virtual void* getVertices() = 0; + + //! Get amount of vertices in meshbuffer. + /** \return Number of vertices in this buffer. */ + virtual u32 getVertexCount() const = 0; + + //! Get type of index data which is stored in this meshbuffer. + /** \return Index type of this buffer. */ + virtual video::E_INDEX_TYPE getIndexType() const =0; + + //! Get access to Indices. + /** \return Pointer to indices array. */ + virtual const u16* getIndices() const = 0; + + //! Get access to Indices. + /** \return Pointer to indices array. */ + virtual u16* getIndices() = 0; + + //! Get amount of indices in this meshbuffer. + /** \return Number of indices in this buffer. */ + virtual u32 getIndexCount() const = 0; + + //! Get the axis aligned bounding box of this meshbuffer. + /** \return Axis aligned bounding box of this buffer. */ + virtual const core::aabbox3df& getBoundingBox() const = 0; + + //! Set axis aligned bounding box + /** \param box User defined axis aligned bounding box to use + for this buffer. */ + virtual void setBoundingBox(const core::aabbox3df& box) = 0; + + //! Recalculates the bounding box. Should be called if the mesh changed. + virtual void recalculateBoundingBox() = 0; + + //! returns position of vertex i + virtual const core::vector3df& getPosition(u32 i) const = 0; + + //! returns position of vertex i + virtual core::vector3df& getPosition(u32 i) = 0; + + //! returns normal of vertex i + virtual const core::vector3df& getNormal(u32 i) const = 0; + + //! returns normal of vertex i + virtual core::vector3df& getNormal(u32 i) = 0; + + //! returns texture coord of vertex i + virtual const core::vector2df& getTCoords(u32 i) const = 0; + + //! returns texture coord of vertex i + virtual core::vector2df& getTCoords(u32 i) = 0; + + //! Append the vertices and indices to the current buffer + /** Only works for compatible vertex types. + \param vertices Pointer to a vertex array. + \param numVertices Number of vertices in the array. + \param indices Pointer to index array. + \param numIndices Number of indices in array. */ + virtual void append(const void* const vertices, u32 numVertices, const u16* const indices, u32 numIndices) = 0; + + //! Append the meshbuffer to the current buffer + /** Only works for compatible vertex types + \param other Buffer to append to this one. */ + virtual void append(const IMeshBuffer* const other) = 0; + + //! get the current hardware mapping hint + virtual E_HARDWARE_MAPPING getHardwareMappingHint_Vertex() const = 0; + + //! get the current hardware mapping hint + virtual E_HARDWARE_MAPPING getHardwareMappingHint_Index() const = 0; + + //! set the hardware mapping hint, for driver + virtual void setHardwareMappingHint( E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX ) = 0; + + //! flags the meshbuffer as changed, reloads hardware buffers + virtual void setDirty(E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX) = 0; + + //! Get the currently used ID for identification of changes. + /** This shouldn't be used for anything outside the VideoDriver. */ + virtual u32 getChangedID_Vertex() const = 0; + + //! Get the currently used ID for identification of changes. + /** This shouldn't be used for anything outside the VideoDriver. */ + virtual u32 getChangedID_Index() const = 0; + }; + +} // end namespace scene +} // end namespace irr + +#endif + + diff --git a/inc/IMeshCache.h b/inc/IMeshCache.h new file mode 100644 index 0000000..2d2bfa0 --- /dev/null +++ b/inc/IMeshCache.h @@ -0,0 +1,177 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_MESH_CACHE_H_INCLUDED__ +#define __I_MESH_CACHE_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "path.h" + +namespace irr +{ + +namespace scene +{ + class IMesh; + class IAnimatedMesh; + class IAnimatedMeshSceneNode; + class IMeshLoader; + + //! The mesh cache stores already loaded meshes and provides an interface to them. + /** You can access it using ISceneManager::getMeshCache(). All existing + scene managers will return a pointer to the same mesh cache, because it + is shared between them. With this interface, it is possible to manually + add new loaded meshes (if ISceneManager::getMesh() is not sufficient), + to remove them and to iterate through already loaded meshes. */ + class IMeshCache : public virtual IReferenceCounted + { + public: + + //! Destructor + virtual ~IMeshCache() {} + + //! Adds a mesh to the internal list of loaded meshes. + /** Usually, ISceneManager::getMesh() is called to load a mesh + from a file. That method searches the list of loaded meshes if + a mesh has already been loaded and returns a pointer to if it + is in that list and already in memory. Otherwise it loads the + mesh. With IMeshCache::addMesh(), it is possible to pretend + that a mesh already has been loaded. This method can be used + for example by mesh loaders who need to load more than one mesh + with one call. They can add additional meshes with this method + to the scene manager. The COLLADA loader for example uses this + method. + \param name Name of the mesh. When calling + ISceneManager::getMesh() with this name it will return the mesh + set by this method. + \param mesh Pointer to a mesh which will now be referenced by + this name. */ + virtual void addMesh(const io::path& name, IAnimatedMesh* mesh) = 0; + + //! Removes the mesh from the cache. + /** After loading a mesh with getMesh(), the mesh can be + removed from the cache using this method, freeing a lot of + memory. + \param mesh Pointer to the mesh which shall be removed. */ + virtual void removeMesh(const IMesh* const mesh) = 0; + + //! Returns amount of loaded meshes in the cache. + /** You can load new meshes into the cache using getMesh() and + addMesh(). If you ever need to access the internal mesh cache, + you can do this using removeMesh(), getMeshNumber(), + getMeshByIndex() and getMeshName(). + \return Number of meshes in cache. */ + virtual u32 getMeshCount() const = 0; + + //! Returns current index number of the mesh or -1 when not found. + /** \param mesh Pointer to the mesh to search for. + \return Index of the mesh in the cache, or -1 if not found. */ + virtual s32 getMeshIndex(const IMesh* const mesh) const = 0; + + //! Returns a mesh based on its index number. + /** \param index: Index of the mesh, number between 0 and + getMeshCount()-1. + Note that this number is only valid until a new mesh is loaded + or removed. + \return Pointer to the mesh or 0 if there is none with this + number. */ + virtual IAnimatedMesh* getMeshByIndex(u32 index) = 0; + + //! Returns a mesh based on its name (often a filename). + /** \deprecated Use getMeshByName() instead. This method may be removed by + Irrlicht 1.9 */ + _IRR_DEPRECATED_ IAnimatedMesh* getMeshByFilename(const io::path& filename) + { + return getMeshByName(filename); + } + + //! Get the name of a loaded mesh, based on its index. (Name is often identical to the filename). + /** \deprecated Use getMeshName() instead. This method may be removed by + Irrlicht 1.9 */ + _IRR_DEPRECATED_ const io::path& getMeshFilename(u32 index) const + { + return getMeshName(index).getInternalName(); + } + + //! Get the name of a loaded mesh, if there is any. (Name is often identical to the filename). + /** \deprecated Use getMeshName() instead. This method may be removed by + Irrlicht 1.9 */ + _IRR_DEPRECATED_ const io::path& getMeshFilename(const IMesh* const mesh) const + { + return getMeshName(mesh).getInternalName(); + } + + //! Renames a loaded mesh. + /** \deprecated Use renameMesh() instead. This method may be removed by + Irrlicht 1.9 */ + _IRR_DEPRECATED_ bool setMeshFilename(u32 index, const io::path& filename) + { + return renameMesh(index, filename); + } + + //! Renames a loaded mesh. + /** \deprecated Use renameMesh() instead. This method may be removed by + Irrlicht 1.9 */ + _IRR_DEPRECATED_ bool setMeshFilename(const IMesh* const mesh, const io::path& filename) + { + return renameMesh(mesh, filename); + } + + //! Returns a mesh based on its name. + /** \param name Name of the mesh. Usually a filename. + \return Pointer to the mesh or 0 if there is none with this number. */ + virtual IAnimatedMesh* getMeshByName(const io::path& name) = 0; + + //! Get the name of a loaded mesh, based on its index. + /** \param index: Index of the mesh, number between 0 and getMeshCount()-1. + \return The name if mesh was found and has a name, else the path is empty. */ + virtual const io::SNamedPath& getMeshName(u32 index) const = 0; + + //! Get the name of the loaded mesh if there is any. + /** \param mesh Pointer to mesh to query. + \return The name if mesh was found and has a name, else the path is empty. */ + virtual const io::SNamedPath& getMeshName(const IMesh* const mesh) const = 0; + + //! Renames a loaded mesh. + /** Note that renaming meshes might change the ordering of the + meshes, and so the index of the meshes as returned by + getMeshIndex() or taken by some methods will change. + \param index The index of the mesh in the cache. + \param name New name for the mesh. + \return True if mesh was renamed. */ + virtual bool renameMesh(u32 index, const io::path& name) = 0; + + //! Renames the loaded mesh + /** Note that renaming meshes might change the ordering of the + meshes, and so the index of the meshes as returned by + getMeshIndex() or taken by some methods will change. + \param mesh Mesh to be renamed. + \param name New name for the mesh. + \return True if mesh was renamed. */ + virtual bool renameMesh(const IMesh* const mesh, const io::path& name) = 0; + + //! Check if a mesh was already loaded. + /** \param name Name of the mesh. Usually a filename. + \return True if the mesh has been loaded, else false. */ + virtual bool isMeshLoaded(const io::path& name) = 0; + + //! Clears the whole mesh cache, removing all meshes. + /** All meshes will be reloaded completely when using ISceneManager::getMesh() + after calling this method. + Warning: If you have pointers to meshes that were loaded with ISceneManager::getMesh() + and you did not grab them, then they may become invalid. */ + virtual void clear() = 0; + + //! Clears all meshes that are held in the mesh cache but not used anywhere else. + /** Warning: If you have pointers to meshes that were loaded with ISceneManager::getMesh() + and you did not grab them, then they may become invalid. */ + virtual void clearUnusedMeshes() = 0; + }; + + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/IMeshLoader.h b/inc/IMeshLoader.h new file mode 100644 index 0000000..3955fb4 --- /dev/null +++ b/inc/IMeshLoader.h @@ -0,0 +1,53 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_MESH_LOADER_H_INCLUDED__ +#define __I_MESH_LOADER_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "path.h" + +namespace irr +{ +namespace io +{ + class IReadFile; +} // end namespace io +namespace scene +{ + class IAnimatedMesh; + +//! Class which is able to load an animated mesh from a file. +/** If you want Irrlicht be able to load meshes of +currently unsupported file formats (e.g. .cob), then implement +this and add your new Meshloader with +ISceneManager::addExternalMeshLoader() to the engine. */ +class IMeshLoader : public virtual IReferenceCounted +{ +public: + + //! Destructor + virtual ~IMeshLoader() {} + + //! Returns true if the file might be loaded by this class. + /** This decision should be based on the file extension (e.g. ".cob") + only. + \param filename Name of the file to test. + \return True if the file might be loaded by this class. */ + virtual bool isALoadableFileExtension(const io::path& filename) const = 0; + + //! Creates/loads an animated mesh from the file. + /** \param file File handler to load the file from. + \return Pointer to the created mesh. Returns 0 if loading failed. + If you no longer need the mesh, you should call IAnimatedMesh::drop(). + See IReferenceCounted::drop() for more information. */ + virtual IAnimatedMesh* createMesh(io::IReadFile* file) = 0; +}; + + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/IMeshManipulator.h b/inc/IMeshManipulator.h new file mode 100644 index 0000000..d6ac89f --- /dev/null +++ b/inc/IMeshManipulator.h @@ -0,0 +1,393 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_MESH_MANIPULATOR_H_INCLUDED__ +#define __I_MESH_MANIPULATOR_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "vector3d.h" +#include "aabbox3d.h" +#include "matrix4.h" +#include "IAnimatedMesh.h" +#include "IMeshBuffer.h" +#include "SVertexManipulator.h" + +namespace irr +{ +namespace scene +{ + + struct SMesh; + + //! An interface for easy manipulation of meshes. + /** Scale, set alpha value, flip surfaces, and so on. This exists for + fixing problems with wrong imported or exported meshes quickly after + loading. It is not intended for doing mesh modifications and/or + animations during runtime. + */ + class IMeshManipulator : public virtual IReferenceCounted + { + public: + + //! Flips the direction of surfaces. + /** Changes backfacing triangles to frontfacing + triangles and vice versa. + \param mesh Mesh on which the operation is performed. */ + virtual void flipSurfaces(IMesh* mesh) const = 0; + + //! Sets the alpha vertex color value of the whole mesh to a new value. + /** \param mesh Mesh on which the operation is performed. + \param alpha New alpha value. Must be a value between 0 and 255. */ + void setVertexColorAlpha(IMesh* mesh, s32 alpha) const + { + apply(scene::SVertexColorSetAlphaManipulator(alpha), mesh); + } + + //! Sets the alpha vertex color value of the whole mesh to a new value. + /** \param buffer Meshbuffer on which the operation is performed. + \param alpha New alpha value. Must be a value between 0 and 255. */ + void setVertexColorAlpha(IMeshBuffer* buffer, s32 alpha) const + { + apply(scene::SVertexColorSetAlphaManipulator(alpha), buffer); + } + + //! Sets the colors of all vertices to one color + /** \param mesh Mesh on which the operation is performed. + \param color New color. */ + void setVertexColors(IMesh* mesh, video::SColor color) const + { + apply(scene::SVertexColorSetManipulator(color), mesh); + } + + //! Sets the colors of all vertices to one color + /** \param buffer Meshbuffer on which the operation is performed. + \param color New color. */ + void setVertexColors(IMeshBuffer* buffer, video::SColor color) const + { + apply(scene::SVertexColorSetManipulator(color), buffer); + } + + //! Recalculates all normals of the mesh. + /** \param mesh: Mesh on which the operation is performed. + \param smooth: If the normals shall be smoothed. + \param angleWeighted: If the normals shall be smoothed in relation to their angles. More expensive, but also higher precision. */ + virtual void recalculateNormals(IMesh* mesh, bool smooth = false, + bool angleWeighted = false) const=0; + + //! Recalculates all normals of the mesh buffer. + /** \param buffer: Mesh buffer on which the operation is performed. + \param smooth: If the normals shall be smoothed. + \param angleWeighted: If the normals shall be smoothed in relation to their angles. More expensive, but also higher precision. */ + virtual void recalculateNormals(IMeshBuffer* buffer, + bool smooth = false, bool angleWeighted = false) const=0; + + //! Recalculates tangents, requires a tangent mesh + /** \param mesh Mesh on which the operation is performed. + \param recalculateNormals If the normals shall be recalculated, otherwise original normals of the mesh are used unchanged. + \param smooth If the normals shall be smoothed. + \param angleWeighted If the normals shall be smoothed in relation to their angles. More expensive, but also higher precision. + */ + virtual void recalculateTangents(IMesh* mesh, + bool recalculateNormals=false, bool smooth=false, + bool angleWeighted=false) const=0; + + //! Recalculates tangents, requires a tangent mesh buffer + /** \param buffer Meshbuffer on which the operation is performed. + \param recalculateNormals If the normals shall be recalculated, otherwise original normals of the buffer are used unchanged. + \param smooth If the normals shall be smoothed. + \param angleWeighted If the normals shall be smoothed in relation to their angles. More expensive, but also higher precision. + */ + virtual void recalculateTangents(IMeshBuffer* buffer, + bool recalculateNormals=false, bool smooth=false, + bool angleWeighted=false) const=0; + + //! Scales the actual mesh, not a scene node. + /** \param mesh Mesh on which the operation is performed. + \param factor Scale factor for each axis. */ + void scale(IMesh* mesh, const core::vector3df& factor) const + { + apply(SVertexPositionScaleManipulator(factor), mesh, true); + } + + //! Scales the actual meshbuffer, not a scene node. + /** \param buffer Meshbuffer on which the operation is performed. + \param factor Scale factor for each axis. */ + void scale(IMeshBuffer* buffer, const core::vector3df& factor) const + { + apply(SVertexPositionScaleManipulator(factor), buffer, true); + } + + //! Scales the actual mesh, not a scene node. + /** \deprecated Use scale() instead. This method may be removed by Irrlicht 1.9 + \param mesh Mesh on which the operation is performed. + \param factor Scale factor for each axis. */ + _IRR_DEPRECATED_ void scaleMesh(IMesh* mesh, const core::vector3df& factor) const {return scale(mesh,factor);} + + //! Scale the texture coords of a mesh. + /** \param mesh Mesh on which the operation is performed. + \param factor Vector which defines the scale for each axis. + \param level Number of texture coord, starting from 1. Support for level 2 exists for LightMap buffers. */ + void scaleTCoords(scene::IMesh* mesh, const core::vector2df& factor, u32 level=1) const + { + apply(SVertexTCoordsScaleManipulator(factor, level), mesh); + } + + //! Scale the texture coords of a meshbuffer. + /** \param buffer Meshbuffer on which the operation is performed. + \param factor Vector which defines the scale for each axis. + \param level Number of texture coord, starting from 1. Support for level 2 exists for LightMap buffers. */ + void scaleTCoords(scene::IMeshBuffer* buffer, const core::vector2df& factor, u32 level=1) const + { + apply(SVertexTCoordsScaleManipulator(factor, level), buffer); + } + + //! Applies a transformation to a mesh + /** \param mesh Mesh on which the operation is performed. + \param m transformation matrix. */ + void transform(IMesh* mesh, const core::matrix4& m) const + { + apply(SVertexPositionTransformManipulator(m), mesh, true); + } + + //! Applies a transformation to a meshbuffer + /** \param buffer Meshbuffer on which the operation is performed. + \param m transformation matrix. */ + void transform(IMeshBuffer* buffer, const core::matrix4& m) const + { + apply(SVertexPositionTransformManipulator(m), buffer, true); + } + + //! Applies a transformation to a mesh + /** \deprecated Use transform() instead. This method may be removed by Irrlicht 1.9 + \param mesh Mesh on which the operation is performed. + \param m transformation matrix. */ + _IRR_DEPRECATED_ virtual void transformMesh(IMesh* mesh, const core::matrix4& m) const {return transform(mesh,m);} + + //! Creates a planar texture mapping on the mesh + /** \param mesh: Mesh on which the operation is performed. + \param resolution: resolution of the planar mapping. This is + the value specifying which is the relation between world space + and texture coordinate space. */ + virtual void makePlanarTextureMapping(IMesh* mesh, f32 resolution=0.001f) const=0; + + //! Creates a planar texture mapping on the meshbuffer + /** \param meshbuffer: Buffer on which the operation is performed. + \param resolution: resolution of the planar mapping. This is + the value specifying which is the relation between world space + and texture coordinate space. */ + virtual void makePlanarTextureMapping(scene::IMeshBuffer* meshbuffer, f32 resolution=0.001f) const=0; + + //! Creates a planar texture mapping on the buffer + /** This method is currently implemented towards the LWO planar mapping. A more general biasing might be required. + \param mesh Mesh on which the operation is performed. + \param resolutionS Resolution of the planar mapping in horizontal direction. This is the ratio between object space and texture space. + \param resolutionT Resolution of the planar mapping in vertical direction. This is the ratio between object space and texture space. + \param axis The axis along which the texture is projected. The allowed values are 0 (X), 1(Y), and 2(Z). + \param offset Vector added to the vertex positions (in object coordinates). + */ + virtual void makePlanarTextureMapping(scene::IMesh* mesh, + f32 resolutionS, f32 resolutionT, + u8 axis, const core::vector3df& offset) const=0; + + //! Creates a planar texture mapping on the meshbuffer + /** This method is currently implemented towards the LWO planar mapping. A more general biasing might be required. + \param buffer Buffer on which the operation is performed. + \param resolutionS Resolution of the planar mapping in horizontal direction. This is the ratio between object space and texture space. + \param resolutionT Resolution of the planar mapping in vertical direction. This is the ratio between object space and texture space. + \param axis The axis along which the texture is projected. The allowed values are 0 (X), 1(Y), and 2(Z). + \param offset Vector added to the vertex positions (in object coordinates). + */ + virtual void makePlanarTextureMapping(scene::IMeshBuffer* buffer, + f32 resolutionS, f32 resolutionT, + u8 axis, const core::vector3df& offset) const=0; + + //! Clones a static IMesh into a modifiable SMesh. + /** All meshbuffers in the returned SMesh + are of type SMeshBuffer or SMeshBufferLightMap. + \param mesh Mesh to copy. + \return Cloned mesh. If you no longer need the + cloned mesh, you should call SMesh::drop(). See + IReferenceCounted::drop() for more information. */ + virtual SMesh* createMeshCopy(IMesh* mesh) const = 0; + + //! Creates a copy of the mesh, which will only consist of S3DVertexTangents vertices. + /** This is useful if you want to draw tangent space normal + mapped geometry because it calculates the tangent and binormal + data which is needed there. + \param mesh Input mesh + \param recalculateNormals The normals are recalculated if set, + otherwise the original ones are kept. Note that keeping the + normals may introduce inaccurate tangents if the normals are + very different to those calculated from the faces. + \param smooth The normals/tangents are smoothed across the + meshbuffer's faces if this flag is set. + \param angleWeighted Improved smoothing calculation used + \param recalculateTangents Whether are actually calculated, or just the mesh with proper type is created. + \return Mesh consisting only of S3DVertexTangents vertices. If + you no longer need the cloned mesh, you should call + IMesh::drop(). See IReferenceCounted::drop() for more + information. */ + virtual IMesh* createMeshWithTangents(IMesh* mesh, + bool recalculateNormals=false, bool smooth=false, + bool angleWeighted=false, bool recalculateTangents=true) const=0; + + //! Creates a copy of the mesh, which will only consist of S3DVertex2TCoord vertices. + /** \param mesh Input mesh + \return Mesh consisting only of S3DVertex2TCoord vertices. If + you no longer need the cloned mesh, you should call + IMesh::drop(). See IReferenceCounted::drop() for more + information. */ + virtual IMesh* createMeshWith2TCoords(IMesh* mesh) const = 0; + + //! Creates a copy of the mesh, which will only consist of S3DVertex vertices. + /** \param mesh Input mesh + \return Mesh consisting only of S3DVertex vertices. If + you no longer need the cloned mesh, you should call + IMesh::drop(). See IReferenceCounted::drop() for more + information. */ + virtual IMesh* createMeshWith1TCoords(IMesh* mesh) const = 0; + + //! Creates a copy of a mesh with all vertices unwelded + /** \param mesh Input mesh + \return Mesh consisting only of unique faces. All vertices + which were previously shared are now duplicated. If you no + longer need the cloned mesh, you should call IMesh::drop(). See + IReferenceCounted::drop() for more information. */ + virtual IMesh* createMeshUniquePrimitives(IMesh* mesh) const = 0; + + //! Creates a copy of a mesh with vertices welded + /** \param mesh Input mesh + \param tolerance The threshold for vertex comparisons. + \return Mesh without redundant vertices. If you no longer need + the cloned mesh, you should call IMesh::drop(). See + IReferenceCounted::drop() for more information. */ + virtual IMesh* createMeshWelded(IMesh* mesh, f32 tolerance=core::ROUNDING_ERROR_f32) const = 0; + + //! Get amount of polygons in mesh. + /** \param mesh Input mesh + \return Number of polygons in mesh. */ + virtual s32 getPolyCount(IMesh* mesh) const = 0; + + //! Get amount of polygons in mesh. + /** \param mesh Input mesh + \return Number of polygons in mesh. */ + virtual s32 getPolyCount(IAnimatedMesh* mesh) const = 0; + + //! Create a new AnimatedMesh and adds the mesh to it + /** \param mesh Input mesh + \param type The type of the animated mesh to create. + \return Newly created animated mesh with mesh as its only + content. When you don't need the animated mesh anymore, you + should call IAnimatedMesh::drop(). See + IReferenceCounted::drop() for more information. */ + virtual IAnimatedMesh * createAnimatedMesh(IMesh* mesh, + scene::E_ANIMATED_MESH_TYPE type = scene::EAMT_UNKNOWN) const = 0; + + //! Vertex cache optimization according to the Forsyth paper + /** More information can be found at + http://home.comcast.net/~tom_forsyth/papers/fast_vert_cache_opt.html + + The function is thread-safe (read: you can optimize several + meshes in different threads). + + \param mesh Source mesh for the operation. + \return A new mesh optimized for the vertex cache. */ + virtual IMesh* createForsythOptimizedMesh(const IMesh *mesh) const = 0; + + //! Apply a manipulator on the Meshbuffer + /** \param func A functor defining the mesh manipulation. + \param buffer The Meshbuffer to apply the manipulator to. + \param boundingBoxUpdate Specifies if the bounding box should be updated during manipulation. + \return True if the functor was successfully applied, else false. */ + template + bool apply(const Functor& func, IMeshBuffer* buffer, bool boundingBoxUpdate=false) const + { + return apply_(func, buffer, boundingBoxUpdate, func); + } + + + //! Apply a manipulator on the Mesh + /** \param func A functor defining the mesh manipulation. + \param mesh The Mesh to apply the manipulator to. + \param boundingBoxUpdate Specifies if the bounding box should be updated during manipulation. + \return True if the functor was successfully applied, else false. */ + template + bool apply(const Functor& func, IMesh* mesh, bool boundingBoxUpdate=false) const + { + if (!mesh) + return true; + bool result = true; + core::aabbox3df bufferbox; + for (u32 i=0; igetMeshBufferCount(); ++i) + { + result &= apply(func, mesh->getMeshBuffer(i), boundingBoxUpdate); + if (boundingBoxUpdate) + { + if (0==i) + bufferbox.reset(mesh->getMeshBuffer(i)->getBoundingBox()); + else + bufferbox.addInternalBox(mesh->getMeshBuffer(i)->getBoundingBox()); + } + } + if (boundingBoxUpdate) + mesh->setBoundingBox(bufferbox); + return result; + } + +protected: + //! Apply a manipulator based on the type of the functor + /** \param func A functor defining the mesh manipulation. + \param buffer The Meshbuffer to apply the manipulator to. + \param boundingBoxUpdate Specifies if the bounding box should be updated during manipulation. + \param typeTest Unused parameter, which handles the proper call selection based on the type of the Functor which is passed in two times. + \return True if the functor was successfully applied, else false. */ + template + bool apply_(const Functor& func, IMeshBuffer* buffer, bool boundingBoxUpdate, const IVertexManipulator& typeTest) const + { + if (!buffer) + return true; + + core::aabbox3df bufferbox; + for (u32 i=0; igetVertexCount(); ++i) + { + switch (buffer->getVertexType()) + { + case video::EVT_STANDARD: + { + video::S3DVertex* verts = (video::S3DVertex*)buffer->getVertices(); + func(verts[i]); + } + break; + case video::EVT_2TCOORDS: + { + video::S3DVertex2TCoords* verts = (video::S3DVertex2TCoords*)buffer->getVertices(); + func(verts[i]); + } + break; + case video::EVT_TANGENTS: + { + video::S3DVertexTangents* verts = (video::S3DVertexTangents*)buffer->getVertices(); + func(verts[i]); + } + break; + } + if (boundingBoxUpdate) + { + if (0==i) + bufferbox.reset(buffer->getPosition(0)); + else + bufferbox.addInternalPoint(buffer->getPosition(i)); + } + } + if (boundingBoxUpdate) + buffer->setBoundingBox(bufferbox); + return true; + } +}; + +} // end namespace scene +} // end namespace irr + + +#endif diff --git a/inc/IMeshSceneNode.h b/inc/IMeshSceneNode.h new file mode 100644 index 0000000..4541069 --- /dev/null +++ b/inc/IMeshSceneNode.h @@ -0,0 +1,79 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_MESH_SCENE_NODE_H_INCLUDED__ +#define __I_MESH_SCENE_NODE_H_INCLUDED__ + +#include "ISceneNode.h" + +namespace irr +{ +namespace scene +{ + +class IShadowVolumeSceneNode; +class IMesh; + + +//! A scene node displaying a static mesh +class IMeshSceneNode : public ISceneNode +{ +public: + + //! Constructor + /** Use setMesh() to set the mesh to display. + */ + IMeshSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id, + const core::vector3df& position = core::vector3df(0,0,0), + const core::vector3df& rotation = core::vector3df(0,0,0), + const core::vector3df& scale = core::vector3df(1,1,1)) + : ISceneNode(parent, mgr, id, position, rotation, scale) {} + + //! Sets a new mesh to display + /** \param mesh Mesh to display. */ + virtual void setMesh(IMesh* mesh) = 0; + + //! Get the currently defined mesh for display. + /** \return Pointer to mesh which is displayed by this node. */ + virtual IMesh* getMesh(void) = 0; + + //! Creates shadow volume scene node as child of this node. + /** The shadow can be rendered using the ZPass or the zfail + method. ZPass is a little bit faster because the shadow volume + creation is easier, but with this method there occur ugly + looking artifacs when the camera is inside the shadow volume. + These error do not occur with the ZFail method. + \param shadowMesh: Optional custom mesh for shadow volume. + \param id: Id of the shadow scene node. This id can be used to + identify the node later. + \param zfailmethod: If set to true, the shadow will use the + zfail method, if not, zpass is used. + \param infinity: Value used by the shadow volume algorithm to + scale the shadow volume (for zfail shadow volume we support only + finite shadows, so camera zfar must be larger than shadow back cap, + which is depend on infinity parameter). + \return Pointer to the created shadow scene node. This pointer + should not be dropped. See IReferenceCounted::drop() for more + information. */ + virtual IShadowVolumeSceneNode* addShadowVolumeSceneNode(const IMesh* shadowMesh=0, + s32 id=-1, bool zfailmethod=true, f32 infinity=1000.0f) = 0; + + //! Sets if the scene node should not copy the materials of the mesh but use them in a read only style. + /** In this way it is possible to change the materials of a mesh + causing all mesh scene nodes referencing this mesh to change, too. + \param readonly Flag if the materials shall be read-only. */ + virtual void setReadOnlyMaterials(bool readonly) = 0; + + //! Check if the scene node should not copy the materials of the mesh but use them in a read only style + /** This flag can be set by setReadOnlyMaterials(). + \return Whether the materials are read-only. */ + virtual bool isReadOnlyMaterials() const = 0; +}; + +} // end namespace scene +} // end namespace irr + + +#endif + diff --git a/inc/IMeshWriter.h b/inc/IMeshWriter.h new file mode 100644 index 0000000..aef3e28 --- /dev/null +++ b/inc/IMeshWriter.h @@ -0,0 +1,58 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __IRR_I_MESH_WRITER_H_INCLUDED__ +#define __IRR_I_MESH_WRITER_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "EMeshWriterEnums.h" + +namespace irr +{ +namespace io +{ + class IWriteFile; +} // end namespace io + +namespace scene +{ + class IMesh; + + //! Interface for writing meshes + class IMeshWriter : public virtual IReferenceCounted + { + public: + + //! Destructor + virtual ~IMeshWriter() {} + + //! Get the type of the mesh writer + /** For own implementations, use MAKE_IRR_ID as shown in the + EMESH_WRITER_TYPE enumeration to return your own unique mesh + type id. + \return Type of the mesh writer. */ + virtual EMESH_WRITER_TYPE getType() const = 0; + + //! Write a static mesh. + /** \param file File handle to write the mesh to. + \param mesh Pointer to mesh to be written. + \param flags Optional flags to set properties of the writer. + \return True if sucessful */ + virtual bool writeMesh(io::IWriteFile* file, scene::IMesh* mesh, + s32 flags=EMWF_NONE) = 0; + + // Writes an animated mesh + // for future use, no writer is able to write animated meshes currently + /* \return Returns true if sucessful */ + //virtual bool writeAnimatedMesh(io::IWriteFile* file, + // scene::IAnimatedMesh* mesh, + // s32 flags=EMWF_NONE) = 0; + }; + + +} // end namespace +} // end namespace + +#endif + diff --git a/inc/IMetaTriangleSelector.h b/inc/IMetaTriangleSelector.h new file mode 100644 index 0000000..366893a --- /dev/null +++ b/inc/IMetaTriangleSelector.h @@ -0,0 +1,43 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_META_TRIANGLE_SELECTOR_H_INCLUDED__ +#define __I_META_TRIANGLE_SELECTOR_H_INCLUDED__ + +#include "ITriangleSelector.h" + +namespace irr +{ +namespace scene +{ + +//! Interface for making multiple triangle selectors work as one big selector. +/** This is nothing more than a collection of one or more triangle selectors +providing together the interface of one triangle selector. In this way, +collision tests can be done with different triangle soups in one pass. +*/ +class IMetaTriangleSelector : public ITriangleSelector +{ +public: + + //! Adds a triangle selector to the collection of triangle selectors. + /** \param toAdd: Pointer to an triangle selector to add to the list. */ + virtual void addTriangleSelector(ITriangleSelector* toAdd) = 0; + + //! Removes a specific triangle selector from the collection. + /** \param toRemove: Pointer to an triangle selector which is in the + list but will be removed. + \return True if successful, false if not. */ + virtual bool removeTriangleSelector(ITriangleSelector* toRemove) = 0; + + //! Removes all triangle selectors from the collection. + virtual void removeAllTriangleSelectors() = 0; +}; + +} // end namespace scene +} // end namespace irr + + +#endif + diff --git a/inc/IOSOperator.h b/inc/IOSOperator.h new file mode 100644 index 0000000..b5c6236 --- /dev/null +++ b/inc/IOSOperator.h @@ -0,0 +1,50 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_OS_OPERATOR_H_INCLUDED__ +#define __I_OS_OPERATOR_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "irrString.h" + +namespace irr +{ + +//! The Operating system operator provides operation system specific methods and informations. +class IOSOperator : public virtual IReferenceCounted +{ +public: + //! Get the current operation system version as string. + virtual const core::stringc& getOperatingSystemVersion() const = 0; + + //! Get the current operation system version as string. + /** \deprecated Use getOperatingSystemVersion instead. This method will be removed in Irrlicht 1.9. */ + _IRR_DEPRECATED_ const wchar_t* getOperationSystemVersion() const + { + return core::stringw(getOperatingSystemVersion()).c_str(); + } + + //! Copies text to the clipboard + virtual void copyToClipboard(const c8* text) const = 0; + + //! Get text from the clipboard + /** \return Returns 0 if no string is in there. */ + virtual const c8* getTextFromClipboard() const = 0; + + //! Get the processor speed in megahertz + /** \param MHz The integer variable to store the speed in. + \return True if successful, false if not */ + virtual bool getProcessorSpeedMHz(u32* MHz) const = 0; + + //! Get the total and available system RAM + /** \param Total: will contain the total system memory + \param Avail: will contain the available memory + \return True if successful, false if not */ + virtual bool getSystemMemory(u32* Total, u32* Avail) const = 0; + +}; + +} // end namespace + +#endif diff --git a/inc/IParticleAffector.h b/inc/IParticleAffector.h new file mode 100644 index 0000000..f5a18c6 --- /dev/null +++ b/inc/IParticleAffector.h @@ -0,0 +1,72 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_PARTICLE_AFFECTOR_H_INCLUDED__ +#define __I_PARTICLE_AFFECTOR_H_INCLUDED__ + +#include "IAttributeExchangingObject.h" +#include "SParticle.h" + +namespace irr +{ +namespace scene +{ + +//! Types of built in particle affectors +enum E_PARTICLE_AFFECTOR_TYPE +{ + EPAT_NONE = 0, + EPAT_ATTRACT, + EPAT_FADE_OUT, + EPAT_GRAVITY, + EPAT_ROTATE, + EPAT_SCALE, + EPAT_COUNT +}; + +//! Names for built in particle affectors +const c8* const ParticleAffectorTypeNames[] = +{ + "None", + "Attract", + "FadeOut", + "Gravity", + "Rotate", + "Scale", + 0 +}; + +//! A particle affector modifies particles. +class IParticleAffector : public virtual io::IAttributeExchangingObject +{ +public: + + //! constructor + IParticleAffector() : Enabled(true) {} + + //! Affects an array of particles. + /** \param now Current time. (Same as ITimer::getTime() would return) + \param particlearray Array of particles. + \param count Amount of particles in array. */ + virtual void affect(u32 now, SParticle* particlearray, u32 count) = 0; + + //! Sets whether or not the affector is currently enabled. + virtual void setEnabled(bool enabled) { Enabled = enabled; } + + //! Gets whether or not the affector is currently enabled. + virtual bool getEnabled() const { return Enabled; } + + //! Get emitter type + virtual E_PARTICLE_AFFECTOR_TYPE getType() const = 0; + +protected: + bool Enabled; +}; + +} // end namespace scene +} // end namespace irr + + +#endif + diff --git a/inc/IParticleAnimatedMeshSceneNodeEmitter.h b/inc/IParticleAnimatedMeshSceneNodeEmitter.h new file mode 100644 index 0000000..b64d1d6 --- /dev/null +++ b/inc/IParticleAnimatedMeshSceneNodeEmitter.h @@ -0,0 +1,54 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_PARTICLE_ANIMATED_MESH_SCENE_NODE_EMITTER_H_INCLUDED__ +#define __I_PARTICLE_ANIMATED_MESH_SCENE_NODE_EMITTER_H_INCLUDED__ + +#include "IParticleEmitter.h" +#include "IAnimatedMeshSceneNode.h" + +namespace irr +{ +namespace scene +{ + +//! A particle emitter which emits particles from mesh vertices. +class IParticleAnimatedMeshSceneNodeEmitter : public IParticleEmitter +{ +public: + + //! Set Mesh to emit particles from + virtual void setAnimatedMeshSceneNode( IAnimatedMeshSceneNode* node ) = 0; + + //! Set whether to use vertex normal for direction, or direction specified + virtual void setUseNormalDirection( bool useNormalDirection = true ) = 0; + + //! Set the amount that the normal is divided by for getting a particles direction + virtual void setNormalDirectionModifier( f32 normalDirectionModifier ) = 0; + + //! Sets whether to emit min<->max particles for every vertex or to pick min<->max vertices + virtual void setEveryMeshVertex( bool everyMeshVertex = true ) = 0; + + //! Get mesh we're emitting particles from + virtual const IAnimatedMeshSceneNode* getAnimatedMeshSceneNode() const = 0; + + //! Get whether to use vertex normal for direction, or direction specified + virtual bool isUsingNormalDirection() const = 0; + + //! Get the amount that the normal is divided by for getting a particles direction + virtual f32 getNormalDirectionModifier() const = 0; + + //! Gets whether to emit min<->max particles for every vertex or to pick min<->max vertices + virtual bool getEveryMeshVertex() const = 0; + + //! Get emitter type + virtual E_PARTICLE_EMITTER_TYPE getType() const { return EPET_ANIMATED_MESH; } +}; + +} // end namespace scene +} // end namespace irr + + +#endif // __I_PARTICLE_ANIMATED_MESH_SCENE_NODE_EMITTER_H_INCLUDED__ + diff --git a/inc/IParticleAttractionAffector.h b/inc/IParticleAttractionAffector.h new file mode 100644 index 0000000..7e874e8 --- /dev/null +++ b/inc/IParticleAttractionAffector.h @@ -0,0 +1,59 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_PARTICLE_ATTRACTION_AFFECTOR_H_INCLUDED__ +#define __I_PARTICLE_ATTRACTION_AFFECTOR_H_INCLUDED__ + +#include "IParticleAffector.h" + +namespace irr +{ +namespace scene +{ + +//! A particle affector which attracts or detracts particles. +class IParticleAttractionAffector : public IParticleAffector +{ +public: + + //! Set the point that particles will attract to + virtual void setPoint( const core::vector3df& point ) = 0; + + //! Set whether or not the particles are attracting or detracting + virtual void setAttract( bool attract ) = 0; + + //! Set whether or not this will affect particles in the X direction + virtual void setAffectX( bool affect ) = 0; + + //! Set whether or not this will affect particles in the Y direction + virtual void setAffectY( bool affect ) = 0; + + //! Set whether or not this will affect particles in the Z direction + virtual void setAffectZ( bool affect ) = 0; + + //! Get the point that particles are attracted to + virtual const core::vector3df& getPoint() const = 0; + + //! Get whether or not the particles are attracting or detracting + virtual bool getAttract() const = 0; + + //! Get whether or not the particles X position are affected + virtual bool getAffectX() const = 0; + + //! Get whether or not the particles Y position are affected + virtual bool getAffectY() const = 0; + + //! Get whether or not the particles Z position are affected + virtual bool getAffectZ() const = 0; + + //! Get emitter type + virtual E_PARTICLE_AFFECTOR_TYPE getType() const { return EPAT_ATTRACT; } +}; + +} // end namespace scene +} // end namespace irr + + +#endif // __I_PARTICLE_ATTRACTION_AFFECTOR_H_INCLUDED__ + diff --git a/inc/IParticleBoxEmitter.h b/inc/IParticleBoxEmitter.h new file mode 100644 index 0000000..9ea388a --- /dev/null +++ b/inc/IParticleBoxEmitter.h @@ -0,0 +1,36 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_PARTICLE_BOX_EMITTER_H_INCLUDED__ +#define __I_PARTICLE_BOX_EMITTER_H_INCLUDED__ + +#include "IParticleEmitter.h" +#include "aabbox3d.h" + +namespace irr +{ +namespace scene +{ + +//! A particle emitter which emits particles from a box shaped space +class IParticleBoxEmitter : public IParticleEmitter +{ +public: + + //! Set the box shape + virtual void setBox( const core::aabbox3df& box ) = 0; + + //! Get the box shape set + virtual const core::aabbox3df& getBox() const = 0; + + //! Get emitter type + virtual E_PARTICLE_EMITTER_TYPE getType() const { return EPET_BOX; } +}; + +} // end namespace scene +} // end namespace irr + + +#endif + diff --git a/inc/IParticleCylinderEmitter.h b/inc/IParticleCylinderEmitter.h new file mode 100644 index 0000000..cd063b8 --- /dev/null +++ b/inc/IParticleCylinderEmitter.h @@ -0,0 +1,59 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_PARTICLE_CYLINDER_EMITTER_H_INCLUDED__ +#define __I_PARTICLE_CYLINDER_EMITTER_H_INCLUDED__ + +#include "IParticleEmitter.h" + +namespace irr +{ +namespace scene +{ + +//! A particle emitter which emits from a cylindrically shaped space. +class IParticleCylinderEmitter : public IParticleEmitter +{ +public: + + //! Set the center of the radius for the cylinder, at one end of the cylinder + virtual void setCenter( const core::vector3df& center ) = 0; + + //! Set the normal of the cylinder + virtual void setNormal( const core::vector3df& normal ) = 0; + + //! Set the radius of the cylinder + virtual void setRadius( f32 radius ) = 0; + + //! Set the length of the cylinder + virtual void setLength( f32 length ) = 0; + + //! Set whether or not to draw points inside the cylinder + virtual void setOutlineOnly( bool outlineOnly = true ) = 0; + + //! Get the center of the cylinder + virtual const core::vector3df& getCenter() const = 0; + + //! Get the normal of the cylinder + virtual const core::vector3df& getNormal() const = 0; + + //! Get the radius of the cylinder + virtual f32 getRadius() const = 0; + + //! Get the center of the cylinder + virtual f32 getLength() const = 0; + + //! Get whether or not to draw points inside the cylinder + virtual bool getOutlineOnly() const = 0; + + //! Get emitter type + virtual E_PARTICLE_EMITTER_TYPE getType() const { return EPET_CYLINDER; } +}; + +} // end namespace scene +} // end namespace irr + + +#endif + diff --git a/inc/IParticleEmitter.h b/inc/IParticleEmitter.h new file mode 100644 index 0000000..6fc9a2c --- /dev/null +++ b/inc/IParticleEmitter.h @@ -0,0 +1,129 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_PARTICLE_EMITTER_H_INCLUDED__ +#define __I_PARTICLE_EMITTER_H_INCLUDED__ + +#include "IAttributeExchangingObject.h" +#include "SParticle.h" + +namespace irr +{ +namespace scene +{ + +//! Types of built in particle emitters +enum E_PARTICLE_EMITTER_TYPE +{ + EPET_POINT = 0, + EPET_ANIMATED_MESH, + EPET_BOX, + EPET_CYLINDER, + EPET_MESH, + EPET_RING, + EPET_SPHERE, + EPET_COUNT +}; + +//! Names for built in particle emitters +const c8* const ParticleEmitterTypeNames[] = +{ + "Point", + "AnimatedMesh", + "Box", + "Cylinder", + "Mesh", + "Ring", + "Sphere", + 0 +}; + +//! A particle emitter for using with particle systems. +/** A Particle emitter emitts new particles into a particle system. +*/ +class IParticleEmitter : public virtual io::IAttributeExchangingObject +{ +public: + + //! Prepares an array with new particles to emitt into the system + /** \param now Current time. + \param timeSinceLastCall Time elapsed since last call, in milliseconds. + \param outArray Pointer which will point to the array with the new + particles to add into the system. + \return Amount of new particles in the array. Can be 0. */ + virtual s32 emitt(u32 now, u32 timeSinceLastCall, SParticle*& outArray) = 0; + + //! Set direction the emitter emits particles + virtual void setDirection( const core::vector3df& newDirection ) = 0; + + //! Set minimum number of particles the emitter emits per second + virtual void setMinParticlesPerSecond( u32 minPPS ) = 0; + + //! Set maximum number of particles the emitter emits per second + virtual void setMaxParticlesPerSecond( u32 maxPPS ) = 0; + + //! Set minimum starting color for particles + virtual void setMinStartColor( const video::SColor& color ) = 0; + + //! Set maximum starting color for particles + virtual void setMaxStartColor( const video::SColor& color ) = 0; + + //! Set the maximum starting size for particles + virtual void setMaxStartSize( const core::dimension2df& size ) = 0; + + //! Set the minimum starting size for particles + virtual void setMinStartSize( const core::dimension2df& size ) = 0; + + //! Set the minimum particle life-time in milliseconds + virtual void setMinLifeTime( u32 lifeTimeMin ) = 0; + + //! Set the maximum particle life-time in milliseconds + virtual void setMaxLifeTime( u32 lifeTimeMax ) = 0; + + //! Set maximal random derivation from the direction + virtual void setMaxAngleDegrees( s32 maxAngleDegrees ) = 0; + + //! Get direction the emitter emits particles + virtual const core::vector3df& getDirection() const = 0; + + //! Get the minimum number of particles the emitter emits per second + virtual u32 getMinParticlesPerSecond() const = 0; + + //! Get the maximum number of particles the emitter emits per second + virtual u32 getMaxParticlesPerSecond() const = 0; + + //! Get the minimum starting color for particles + virtual const video::SColor& getMinStartColor() const = 0; + + //! Get the maximum starting color for particles + virtual const video::SColor& getMaxStartColor() const = 0; + + //! Get the maximum starting size for particles + virtual const core::dimension2df& getMaxStartSize() const = 0; + + //! Get the minimum starting size for particles + virtual const core::dimension2df& getMinStartSize() const = 0; + + //! Get the minimum particle life-time in milliseconds + virtual u32 getMinLifeTime() const = 0; + + //! Get the maximum particle life-time in milliseconds + virtual u32 getMaxLifeTime() const = 0; + + //! Get maximal random derivation from the direction + virtual s32 getMaxAngleDegrees() const = 0; + + + //! Get emitter type + virtual E_PARTICLE_EMITTER_TYPE getType() const { return EPET_POINT; } +}; + +typedef IParticleEmitter IParticlePointEmitter; + +} // end namespace scene +} // end namespace irr + + +#endif + diff --git a/inc/IParticleFadeOutAffector.h b/inc/IParticleFadeOutAffector.h new file mode 100644 index 0000000..c3ce78b --- /dev/null +++ b/inc/IParticleFadeOutAffector.h @@ -0,0 +1,41 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_PARTICLE_FADE_OUT_AFFECTOR_H_INCLUDED__ +#define __I_PARTICLE_FADE_OUT_AFFECTOR_H_INCLUDED__ + +#include "IParticleAffector.h" + +namespace irr +{ +namespace scene +{ + +//! A particle affector which fades out the particles. +class IParticleFadeOutAffector : public IParticleAffector +{ +public: + + //! Sets the targetColor, i.e. the color the particles will interpolate to over time. + virtual void setTargetColor( const video::SColor& targetColor ) = 0; + + //! Sets the time in milliseconds it takes for each particle to fade out (minimal 1 ms) + virtual void setFadeOutTime( u32 fadeOutTime ) = 0; + + //! Gets the targetColor, i.e. the color the particles will interpolate to over time. + virtual const video::SColor& getTargetColor() const = 0; + + //! Gets the time in milliseconds it takes for each particle to fade out. + virtual u32 getFadeOutTime() const = 0; + + //! Get emitter type + virtual E_PARTICLE_AFFECTOR_TYPE getType() const { return EPAT_FADE_OUT; } +}; + +} // end namespace scene +} // end namespace irr + + +#endif // __I_PARTICLE_FADE_OUT_AFFECTOR_H_INCLUDED__ + diff --git a/inc/IParticleGravityAffector.h b/inc/IParticleGravityAffector.h new file mode 100644 index 0000000..f0e4f8e --- /dev/null +++ b/inc/IParticleGravityAffector.h @@ -0,0 +1,42 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_PARTICLE_GRAVITY_AFFECTOR_H_INCLUDED__ +#define __I_PARTICLE_GRAVITY_AFFECTOR_H_INCLUDED__ + +#include "IParticleAffector.h" + +namespace irr +{ +namespace scene +{ + +//! A particle affector which applies gravity to particles. +class IParticleGravityAffector : public IParticleAffector +{ +public: + + //! Set the time in milliseconds when the gravity force is totally lost + /** At that point the particle does not move any more. */ + virtual void setTimeForceLost( f32 timeForceLost ) = 0; + + //! Set the direction and force of gravity in all 3 dimensions. + virtual void setGravity( const core::vector3df& gravity ) = 0; + + //! Get the time in milliseconds when the gravity force is totally lost + virtual f32 getTimeForceLost() const = 0; + + //! Get the direction and force of gravity. + virtual const core::vector3df& getGravity() const = 0; + + //! Get emitter type + virtual E_PARTICLE_AFFECTOR_TYPE getType() const { return EPAT_GRAVITY; } +}; + +} // end namespace scene +} // end namespace irr + + +#endif // __I_PARTICLE_GRAVITY_AFFECTOR_H_INCLUDED__ + diff --git a/inc/IParticleMeshEmitter.h b/inc/IParticleMeshEmitter.h new file mode 100644 index 0000000..4d066a1 --- /dev/null +++ b/inc/IParticleMeshEmitter.h @@ -0,0 +1,54 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_PARTICLE_MESH_EMITTER_H_INCLUDED__ +#define __I_PARTICLE_MESH_EMITTER_H_INCLUDED__ + +#include "IParticleEmitter.h" +#include "IMesh.h" + +namespace irr +{ +namespace scene +{ + +//! A particle emitter which emits from vertices of a mesh +class IParticleMeshEmitter : public IParticleEmitter +{ +public: + + //! Set Mesh to emit particles from + virtual void setMesh( IMesh* mesh ) = 0; + + //! Set whether to use vertex normal for direction, or direction specified + virtual void setUseNormalDirection( bool useNormalDirection = true ) = 0; + + //! Set the amount that the normal is divided by for getting a particles direction + virtual void setNormalDirectionModifier( f32 normalDirectionModifier ) = 0; + + //! Sets whether to emit min<->max particles for every vertex or to pick min<->max vertices + virtual void setEveryMeshVertex( bool everyMeshVertex = true ) = 0; + + //! Get Mesh we're emitting particles from + virtual const IMesh* getMesh() const = 0; + + //! Get whether to use vertex normal for direction, or direction specified + virtual bool isUsingNormalDirection() const = 0; + + //! Get the amount that the normal is divided by for getting a particles direction + virtual f32 getNormalDirectionModifier() const = 0; + + //! Gets whether to emit min<->max particles for every vertex or to pick min<->max vertices + virtual bool getEveryMeshVertex() const = 0; + + //! Get emitter type + virtual E_PARTICLE_EMITTER_TYPE getType() const { return EPET_MESH; } +}; + +} // end namespace scene +} // end namespace irr + + +#endif + diff --git a/inc/IParticleRingEmitter.h b/inc/IParticleRingEmitter.h new file mode 100644 index 0000000..4330092 --- /dev/null +++ b/inc/IParticleRingEmitter.h @@ -0,0 +1,47 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_PARTICLE_RING_EMITTER_H_INCLUDED__ +#define __I_PARTICLE_RING_EMITTER_H_INCLUDED__ + +#include "IParticleEmitter.h" + +namespace irr +{ +namespace scene +{ + +//! A particle emitter which emits particles along a ring shaped area. +class IParticleRingEmitter : public IParticleEmitter +{ +public: + + //! Set the center of the ring + virtual void setCenter( const core::vector3df& center ) = 0; + + //! Set the radius of the ring + virtual void setRadius( f32 radius ) = 0; + + //! Set the thickness of the ring + virtual void setRingThickness( f32 ringThickness ) = 0; + + //! Get the center of the ring + virtual const core::vector3df& getCenter() const = 0; + + //! Get the radius of the ring + virtual f32 getRadius() const = 0; + + //! Get the thickness of the ring + virtual f32 getRingThickness() const = 0; + + //! Get emitter type + virtual E_PARTICLE_EMITTER_TYPE getType() const { return EPET_RING; } +}; + +} // end namespace scene +} // end namespace irr + + +#endif + diff --git a/inc/IParticleRotationAffector.h b/inc/IParticleRotationAffector.h new file mode 100644 index 0000000..611fc3b --- /dev/null +++ b/inc/IParticleRotationAffector.h @@ -0,0 +1,41 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_PARTICLE_ROTATION_AFFECTOR_H_INCLUDED__ +#define __I_PARTICLE_ROTATION_AFFECTOR_H_INCLUDED__ + +#include "IParticleAffector.h" + +namespace irr +{ +namespace scene +{ + +//! A particle affector which rotates the particle system. +class IParticleRotationAffector : public IParticleAffector +{ +public: + + //! Set the point that particles will rotate around + virtual void setPivotPoint( const core::vector3df& point ) = 0; + + //! Set the speed in degrees per second in all 3 dimensions + virtual void setSpeed( const core::vector3df& speed ) = 0; + + //! Get the point that particles are attracted to + virtual const core::vector3df& getPivotPoint() const = 0; + + //! Get the speed in degrees per second in all 3 dimensions + virtual const core::vector3df& getSpeed() const = 0; + + //! Get emitter type + virtual E_PARTICLE_AFFECTOR_TYPE getType() const { return EPAT_ROTATE; } +}; + +} // end namespace scene +} // end namespace irr + + +#endif // __I_PARTICLE_ROTATION_AFFECTOR_H_INCLUDED__ + diff --git a/inc/IParticleSphereEmitter.h b/inc/IParticleSphereEmitter.h new file mode 100644 index 0000000..edde2da --- /dev/null +++ b/inc/IParticleSphereEmitter.h @@ -0,0 +1,41 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_PARTICLE_SPHERE_EMITTER_H_INCLUDED__ +#define __I_PARTICLE_SPHERE_EMITTER_H_INCLUDED__ + +#include "IParticleEmitter.h" + +namespace irr +{ +namespace scene +{ + +//! A particle emitter which emits from a spherical space. +class IParticleSphereEmitter : public IParticleEmitter +{ +public: + + //! Set the center of the sphere for particle emissions + virtual void setCenter( const core::vector3df& center ) = 0; + + //! Set the radius of the sphere for particle emissions + virtual void setRadius( f32 radius ) = 0; + + //! Get the center of the sphere for particle emissions + virtual const core::vector3df& getCenter() const = 0; + + //! Get the radius of the sphere for particle emissions + virtual f32 getRadius() const = 0; + + //! Get emitter type + virtual E_PARTICLE_EMITTER_TYPE getType() const { return EPET_SPHERE; } +}; + +} // end namespace scene +} // end namespace irr + + +#endif + diff --git a/inc/IParticleSystemSceneNode.h b/inc/IParticleSystemSceneNode.h new file mode 100644 index 0000000..56a47c8 --- /dev/null +++ b/inc/IParticleSystemSceneNode.h @@ -0,0 +1,512 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_PARTICLE_SYSTEM_SCENE_NODE_H_INCLUDED__ +#define __I_PARTICLE_SYSTEM_SCENE_NODE_H_INCLUDED__ + +#include "ISceneNode.h" +#include "IParticleAnimatedMeshSceneNodeEmitter.h" +#include "IParticleBoxEmitter.h" +#include "IParticleCylinderEmitter.h" +#include "IParticleMeshEmitter.h" +#include "IParticleRingEmitter.h" +#include "IParticleSphereEmitter.h" +#include "IParticleAttractionAffector.h" +#include "IParticleFadeOutAffector.h" +#include "IParticleGravityAffector.h" +#include "IParticleRotationAffector.h" +#include "dimension2d.h" + +namespace irr +{ +namespace scene +{ + +//! A particle system scene node for creating snow, fire, exlosions, smoke... +/** A scene node controlling a particle System. The behavior of the particles +can be controlled by setting the right particle emitters and affectors. +You can for example easily create a campfire by doing this: + +\code + scene::IParticleSystemSceneNode* p = scenemgr->addParticleSystemSceneNode(); + p->setParticleSize(core::dimension2d(20.0f, 10.0f)); + scene::IParticleEmitter* em = p->createBoxEmitter( + core::aabbox3d(-5,0,-5,5,1,5), + core::vector3df(0.0f,0.03f,0.0f), + 40,80, video::SColor(0,255,255,255),video::SColor(0,255,255,255), 1100,2000); + p->setEmitter(em); + em->drop(); + scene::IParticleAffector* paf = p->createFadeOutParticleAffector(); + p->addAffector(paf); + paf->drop(); +\endcode + +*/ +class IParticleSystemSceneNode : public ISceneNode +{ +public: + + //! Constructor + IParticleSystemSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id, + const core::vector3df& position = core::vector3df(0,0,0), + const core::vector3df& rotation = core::vector3df(0,0,0), + const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f)) + : ISceneNode(parent, mgr, id, position, rotation, scale) {} + + //! Sets the size of all particles. + virtual void setParticleSize( + const core::dimension2d &size = core::dimension2d(5.0f, 5.0f)) = 0; + + //! Sets if the particles should be global. + /** If they are, the particles are affected by the movement of the + particle system scene node too, otherwise they completely ignore it. + Default is true. */ + virtual void setParticlesAreGlobal(bool global=true) = 0; + + //! Remove all currently visible particles + virtual void clearParticles() = 0; + + //! Do manually update the particles. + //! This should only be called when you want to render the node outside the scenegraph, + //! as the node will care about this otherwise automatically. + virtual void doParticleSystem(u32 time) = 0; + + //! Gets the particle emitter, which creates the particles. + /** \return The particle emitter. Can be 0 if none is set. */ + virtual IParticleEmitter* getEmitter() =0; + + //! Sets the particle emitter, which creates the particles. + /** A particle emitter can be created using one of the createEmitter + methods. For example to create and use a simple PointEmitter, call + IParticleEmitter* p = createPointEmitter(); setEmitter(p); p->drop(); + \param emitter: Sets the particle emitter. You can set this to 0 for + removing the current emitter and stopping the particle system emitting + new particles. */ + virtual void setEmitter(IParticleEmitter* emitter) = 0; + + //! Adds new particle effector to the particle system. + /** A particle affector modifies the particles. For example, the FadeOut + affector lets all particles fade out after some time. It is created and + used in this way: + \code + IParticleAffector* p = createFadeOutParticleAffector(); + addAffector(p); + p->drop(); + \endcode + Please note that an affector is not necessary for the particle system to + work. + \param affector: New affector. */ + virtual void addAffector(IParticleAffector* affector) = 0; + + //! Get a list of all particle affectors. + /** \return The list of particle affectors attached to this node. */ + virtual const core::list& getAffectors() const = 0; + + //! Removes all particle affectors in the particle system. + virtual void removeAllAffectors() = 0; + + //! Creates a particle emitter for an animated mesh scene node + /** \param node: Pointer to the animated mesh scene node to emit + particles from + \param useNormalDirection: If true, the direction of each particle + created will be the normal of the vertex that it's emitting from. The + normal is divided by the normalDirectionModifier parameter, which + defaults to 100.0f. + \param direction: Direction and speed of particle emission. + \param normalDirectionModifier: If the emitter is using the normal + direction then the normal of the vertex that is being emitted from is + divided by this number. + \param mbNumber: This allows you to specify a specific meshBuffer for + the IMesh* to emit particles from. The default value is -1, which + means a random meshBuffer picked from all of the meshes meshBuffers + will be selected to pick a random vertex from. If the value is 0 or + greater, it will only pick random vertices from the meshBuffer + specified by this value. + \param everyMeshVertex: If true, the emitter will emit between min/max + particles every second, for every vertex in the mesh, if false, it will + emit between min/max particles from random vertices in the mesh. + \param minParticlesPerSecond: Minimal amount of particles emitted per + second. + \param maxParticlesPerSecond: Maximal amount of particles emitted per + second. + \param minStartColor: Minimal initial start color of a particle. The + real color of every particle is calculated as random interpolation + between minStartColor and maxStartColor. + \param maxStartColor: Maximal initial start color of a particle. The + real color of every particle is calculated as random interpolation + between minStartColor and maxStartColor. + \param lifeTimeMin: Minimal lifetime of a particle, in milliseconds. + \param lifeTimeMax: Maximal lifetime of a particle, in milliseconds. + \param maxAngleDegrees: Maximal angle in degrees, the emitting + direction of the particle will differ from the original direction. + \param minStartSize: Minimal initial start size of a particle. The + real size of every particle is calculated as random interpolation + between minStartSize and maxStartSize. + \param maxStartSize: Maximal initial start size of a particle. The + real size of every particle is calculated as random interpolation + between minStartSize and maxStartSize. + \return Pointer to the created particle emitter. To set this emitter + as new emitter of this particle system, just call setEmitter(). Note + that you'll have to drop() the returned pointer, after you don't need + it any more, see IReferenceCounted::drop() for more informations. */ + virtual IParticleAnimatedMeshSceneNodeEmitter* createAnimatedMeshSceneNodeEmitter( + scene::IAnimatedMeshSceneNode* node, bool useNormalDirection = true, + const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f), + f32 normalDirectionModifier = 100.0f, s32 mbNumber = -1, + bool everyMeshVertex = false, + u32 minParticlesPerSecond = 5, u32 maxParticlesPerSecond = 10, + const video::SColor& minStartColor = video::SColor(255,0,0,0), + const video::SColor& maxStartColor = video::SColor(255,255,255,255), + u32 lifeTimeMin = 2000, u32 lifeTimeMax = 4000, + s32 maxAngleDegrees = 0, + const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f), + const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) ) = 0; + + //! Creates a box particle emitter. + /** \param box: The box for the emitter. + \param direction: Direction and speed of particle emission. + \param minParticlesPerSecond: Minimal amount of particles emitted per + second. + \param maxParticlesPerSecond: Maximal amount of particles emitted per + second. + \param minStartColor: Minimal initial start color of a particle. The + real color of every particle is calculated as random interpolation + between minStartColor and maxStartColor. + \param maxStartColor: Maximal initial start color of a particle. The + real color of every particle is calculated as random interpolation + between minStartColor and maxStartColor. + \param lifeTimeMin: Minimal lifetime of a particle, in milliseconds. + \param lifeTimeMax: Maximal lifetime of a particle, in milliseconds. + \param maxAngleDegrees: Maximal angle in degrees, the emitting + direction of the particle will differ from the original direction. + \param minStartSize: Minimal initial start size of a particle. The + real size of every particle is calculated as random interpolation + between minStartSize and maxStartSize. + \param maxStartSize: Maximal initial start size of a particle. The + real size of every particle is calculated as random interpolation + between minStartSize and maxStartSize. + \return Pointer to the created particle emitter. To set this emitter + as new emitter of this particle system, just call setEmitter(). Note + that you'll have to drop() the returned pointer, after you don't need + it any more, see IReferenceCounted::drop() for more informations. */ + virtual IParticleBoxEmitter* createBoxEmitter( + const core::aabbox3df& box = core::aabbox3df(-10,28,-10,10,30,10), + const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f), + u32 minParticlesPerSecond = 5, + u32 maxParticlesPerSecond = 10, + const video::SColor& minStartColor = video::SColor(255,0,0,0), + const video::SColor& maxStartColor = video::SColor(255,255,255,255), + u32 lifeTimeMin=2000, u32 lifeTimeMax=4000, + s32 maxAngleDegrees=0, + const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f), + const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) ) = 0; + + //! Creates a particle emitter for emitting from a cylinder + /** \param center: The center of the circle at the base of the cylinder + \param radius: The thickness of the cylinder + \param normal: Direction of the length of the cylinder + \param length: The length of the the cylinder + \param outlineOnly: Whether or not to put points inside the cylinder or + on the outline only + \param direction: Direction and speed of particle emission. + \param minParticlesPerSecond: Minimal amount of particles emitted per + second. + \param maxParticlesPerSecond: Maximal amount of particles emitted per + second. + \param minStartColor: Minimal initial start color of a particle. The + real color of every particle is calculated as random interpolation + between minStartColor and maxStartColor. + \param maxStartColor: Maximal initial start color of a particle. The + real color of every particle is calculated as random interpolation + between minStartColor and maxStartColor. + \param lifeTimeMin: Minimal lifetime of a particle, in milliseconds. + \param lifeTimeMax: Maximal lifetime of a particle, in milliseconds. + \param maxAngleDegrees: Maximal angle in degrees, the emitting + direction of the particle will differ from the original direction. + \param minStartSize: Minimal initial start size of a particle. The + real size of every particle is calculated as random interpolation + between minStartSize and maxStartSize. + \param maxStartSize: Maximal initial start size of a particle. The + real size of every particle is calculated as random interpolation + between minStartSize and maxStartSize. + \return Pointer to the created particle emitter. To set this emitter + as new emitter of this particle system, just call setEmitter(). Note + that you'll have to drop() the returned pointer, after you don't need + it any more, see IReferenceCounted::drop() for more informations. */ + virtual IParticleCylinderEmitter* createCylinderEmitter( + const core::vector3df& center, f32 radius, + const core::vector3df& normal, f32 length, + bool outlineOnly = false, + const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f), + u32 minParticlesPerSecond = 5, u32 maxParticlesPerSecond = 10, + const video::SColor& minStartColor = video::SColor(255,0,0,0), + const video::SColor& maxStartColor = video::SColor(255,255,255,255), + u32 lifeTimeMin = 2000, u32 lifeTimeMax = 4000, + s32 maxAngleDegrees = 0, + const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f), + const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) ) = 0; + + //! Creates a mesh particle emitter. + /** \param mesh: Pointer to mesh to emit particles from + \param useNormalDirection: If true, the direction of each particle + created will be the normal of the vertex that it's emitting from. The + normal is divided by the normalDirectionModifier parameter, which + defaults to 100.0f. + \param direction: Direction and speed of particle emission. + \param normalDirectionModifier: If the emitter is using the normal + direction then the normal of the vertex that is being emitted from is + divided by this number. + \param mbNumber: This allows you to specify a specific meshBuffer for + the IMesh* to emit particles from. The default value is -1, which + means a random meshBuffer picked from all of the meshes meshBuffers + will be selected to pick a random vertex from. If the value is 0 or + greater, it will only pick random vertices from the meshBuffer + specified by this value. + \param everyMeshVertex: If true, the emitter will emit between min/max + particles every second, for every vertex in the mesh, if false, it will + emit between min/max particles from random vertices in the mesh. + \param minParticlesPerSecond: Minimal amount of particles emitted per + second. + \param maxParticlesPerSecond: Maximal amount of particles emitted per + second. + \param minStartColor: Minimal initial start color of a particle. The + real color of every particle is calculated as random interpolation + between minStartColor and maxStartColor. + \param maxStartColor: Maximal initial start color of a particle. The + real color of every particle is calculated as random interpolation + between minStartColor and maxStartColor. + \param lifeTimeMin: Minimal lifetime of a particle, in milliseconds. + \param lifeTimeMax: Maximal lifetime of a particle, in milliseconds. + \param maxAngleDegrees: Maximal angle in degrees, the emitting + direction of the particle will differ from the original direction. + \param minStartSize: Minimal initial start size of a particle. The + real size of every particle is calculated as random interpolation + between minStartSize and maxStartSize. + \param maxStartSize: Maximal initial start size of a particle. The + real size of every particle is calculated as random interpolation + between minStartSize and maxStartSize. + \return Pointer to the created particle emitter. To set this emitter + as new emitter of this particle system, just call setEmitter(). Note + that you'll have to drop() the returned pointer, after you don't need + it any more, see IReferenceCounted::drop() for more informations. */ + virtual IParticleMeshEmitter* createMeshEmitter( + scene::IMesh* mesh, bool useNormalDirection = true, + const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f), + f32 normalDirectionModifier = 100.0f, s32 mbNumber = -1, + bool everyMeshVertex = false, + u32 minParticlesPerSecond = 5, u32 maxParticlesPerSecond = 10, + const video::SColor& minStartColor = video::SColor(255,0,0,0), + const video::SColor& maxStartColor = video::SColor(255,255,255,255), + u32 lifeTimeMin = 2000, u32 lifeTimeMax = 4000, + s32 maxAngleDegrees = 0, + const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f), + const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) ) = 0; + + //! Creates a point particle emitter. + /** \param direction: Direction and speed of particle emission. + \param minParticlesPerSecond: Minimal amount of particles emitted per + second. + \param maxParticlesPerSecond: Maximal amount of particles emitted per + second. + \param minStartColor: Minimal initial start color of a particle. The + real color of every particle is calculated as random interpolation + between minStartColor and maxStartColor. + \param maxStartColor: Maximal initial start color of a particle. The + real color of every particle is calculated as random interpolation + between minStartColor and maxStartColor. + \param lifeTimeMin: Minimal lifetime of a particle, in milliseconds. + \param lifeTimeMax: Maximal lifetime of a particle, in milliseconds. + \param maxAngleDegrees: Maximal angle in degrees, the emitting + direction of the particle will differ from the original direction. + \param minStartSize: Minimal initial start size of a particle. The + real size of every particle is calculated as random interpolation + between minStartSize and maxStartSize. + \param maxStartSize: Maximal initial start size of a particle. The + real size of every particle is calculated as random interpolation + between minStartSize and maxStartSize. + \return Pointer to the created particle emitter. To set this emitter + as new emitter of this particle system, just call setEmitter(). Note + that you'll have to drop() the returned pointer, after you don't need + it any more, see IReferenceCounted::drop() for more informations. */ + virtual IParticlePointEmitter* createPointEmitter( + const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f), + u32 minParticlesPerSecond = 5, + u32 maxParticlesPerSecond = 10, + const video::SColor& minStartColor = video::SColor(255,0,0,0), + const video::SColor& maxStartColor = video::SColor(255,255,255,255), + u32 lifeTimeMin=2000, u32 lifeTimeMax=4000, + s32 maxAngleDegrees=0, + const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f), + const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) ) = 0; + + //! Creates a ring particle emitter. + /** \param center: Center of ring + \param radius: Distance of points from center, points will be rotated + around the Y axis at a random 360 degrees and will then be shifted by + the provided ringThickness values in each axis. + \param ringThickness : thickness of the ring or how wide the ring is + \param direction: Direction and speed of particle emission. + \param minParticlesPerSecond: Minimal amount of particles emitted per + second. + \param maxParticlesPerSecond: Maximal amount of particles emitted per + second. + \param minStartColor: Minimal initial start color of a particle. The + real color of every particle is calculated as random interpolation + between minStartColor and maxStartColor. + \param maxStartColor: Maximal initial start color of a particle. The + real color of every particle is calculated as random interpolation + between minStartColor and maxStartColor. + \param lifeTimeMin: Minimal lifetime of a particle, in milliseconds. + \param lifeTimeMax: Maximal lifetime of a particle, in milliseconds. + \param maxAngleDegrees: Maximal angle in degrees, the emitting + direction of the particle will differ from the original direction. + \param minStartSize: Minimal initial start size of a particle. The + real size of every particle is calculated as random interpolation + between minStartSize and maxStartSize. + \param maxStartSize: Maximal initial start size of a particle. The + real size of every particle is calculated as random interpolation + between minStartSize and maxStartSize. + \return Pointer to the created particle emitter. To set this emitter + as new emitter of this particle system, just call setEmitter(). Note + that you'll have to drop() the returned pointer, after you don't need + it any more, see IReferenceCounted::drop() for more informations. */ + virtual IParticleRingEmitter* createRingEmitter( + const core::vector3df& center, f32 radius, f32 ringThickness, + const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f), + u32 minParticlesPerSecond = 5, + u32 maxParticlesPerSecond = 10, + const video::SColor& minStartColor = video::SColor(255,0,0,0), + const video::SColor& maxStartColor = video::SColor(255,255,255,255), + u32 lifeTimeMin=2000, u32 lifeTimeMax=4000, + s32 maxAngleDegrees=0, + const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f), + const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) ) = 0; + + //! Creates a sphere particle emitter. + /** \param center: Center of sphere + \param radius: Radius of sphere + \param direction: Direction and speed of particle emission. + \param minParticlesPerSecond: Minimal amount of particles emitted per + second. + \param maxParticlesPerSecond: Maximal amount of particles emitted per + second. + \param minStartColor: Minimal initial start color of a particle. The + real color of every particle is calculated as random interpolation + between minStartColor and maxStartColor. + \param maxStartColor: Maximal initial start color of a particle. The + real color of every particle is calculated as random interpolation + between minStartColor and maxStartColor. + \param lifeTimeMin: Minimal lifetime of a particle, in milliseconds. + \param lifeTimeMax: Maximal lifetime of a particle, in milliseconds. + \param maxAngleDegrees: Maximal angle in degrees, the emitting + direction of the particle will differ from the original direction. + \param minStartSize: Minimal initial start size of a particle. The + real size of every particle is calculated as random interpolation + between minStartSize and maxStartSize. + \param maxStartSize: Maximal initial start size of a particle. The + real size of every particle is calculated as random interpolation + between minStartSize and maxStartSize. + \return Pointer to the created particle emitter. To set this emitter + as new emitter of this particle system, just call setEmitter(). Note + that you'll have to drop() the returned pointer, after you don't need + it any more, see IReferenceCounted::drop() for more informations. */ + virtual IParticleSphereEmitter* createSphereEmitter( + const core::vector3df& center, f32 radius, + const core::vector3df& direction = core::vector3df(0.0f,0.03f,0.0f), + u32 minParticlesPerSecond = 5, + u32 maxParticlesPerSecond = 10, + const video::SColor& minStartColor = video::SColor(255,0,0,0), + const video::SColor& maxStartColor = video::SColor(255,255,255,255), + u32 lifeTimeMin=2000, u32 lifeTimeMax=4000, + s32 maxAngleDegrees=0, + const core::dimension2df& minStartSize = core::dimension2df(5.0f,5.0f), + const core::dimension2df& maxStartSize = core::dimension2df(5.0f,5.0f) ) = 0; + + //! Creates a point attraction affector. + /** This affector modifies the positions of the particles and attracts + them to a specified point at a specified speed per second. + \param point: Point to attract particles to. + \param speed: Speed in units per second, to attract to the specified + point. + \param attract: Whether the particles attract or detract from this + point. + \param affectX: Whether or not this will affect the X position of the + particle. + \param affectY: Whether or not this will affect the Y position of the + particle. + \param affectZ: Whether or not this will affect the Z position of the + particle. + \return Pointer to the created particle affector. To add this affector + as new affector of this particle system, just call addAffector(). Note + that you'll have to drop() the returned pointer, after you don't need + it any more, see IReferenceCounted::drop() for more informations. */ + virtual IParticleAttractionAffector* createAttractionAffector( + const core::vector3df& point, f32 speed = 1.0f, bool attract = true, + bool affectX = true, bool affectY = true, bool affectZ = true) = 0; + + //! Creates a scale particle affector. + /** This affector scales the particle to the a multiple of its size defined + by the scaleTo variable. + \param scaleTo: multiple of the size which the particle will be scaled to until deletion + \return Pointer to the created particle affector. + To add this affector as new affector of this particle system, + just call addAffector(). Note that you'll have to drop() the + returned pointer, after you don't need it any more, see + IReferenceCounted::drop() for more information. */ + virtual IParticleAffector* createScaleParticleAffector(const core::dimension2df& scaleTo = core::dimension2df(1.0f, 1.0f)) = 0; + + //! Creates a fade out particle affector. + /** This affector modifies the color of every particle and and reaches + the final color when the particle dies. This affector looks really + good, if the EMT_TRANSPARENT_ADD_COLOR material is used and the + targetColor is video::SColor(0,0,0,0): Particles are fading out into + void with this setting. + \param targetColor: Color whereto the color of the particle is changed. + \param timeNeededToFadeOut: How much time in milli seconds should the + affector need to change the color to the targetColor. + \return Pointer to the created particle affector. To add this affector + as new affector of this particle system, just call addAffector(). Note + that you'll have to drop() the returned pointer, after you don't need + it any more, see IReferenceCounted::drop() for more informations. */ + virtual IParticleFadeOutAffector* createFadeOutParticleAffector( + const video::SColor& targetColor = video::SColor(0,0,0,0), + u32 timeNeededToFadeOut = 1000) = 0; + + //! Creates a gravity affector. + /** This affector modifies the direction of the particle. It assumes + that the particle is fired out of the emitter with huge force, but is + loosing this after some time and is catched by the gravity then. This + affector is ideal for creating things like fountains. + \param gravity: Direction and force of gravity. + \param timeForceLost: Time in milli seconds when the force of the + emitter is totally lost and the particle does not move any more. This + is the time where gravity fully affects the particle. + \return Pointer to the created particle affector. To add this affector + as new affector of this particle system, just call addAffector(). Note + that you'll have to drop() the returned pointer, after you don't need + it any more, see IReferenceCounted::drop() for more informations. */ + virtual IParticleGravityAffector* createGravityAffector( + const core::vector3df& gravity = core::vector3df(0.0f,-0.03f,0.0f), + u32 timeForceLost = 1000) = 0; + + //! Creates a rotation affector. + /** This affector modifies the positions of the particles and attracts + them to a specified point at a specified speed per second. + \param speed: Rotation in degrees per second + \param pivotPoint: Point to rotate the particles around + \return Pointer to the created particle affector. To add this affector + as new affector of this particle system, just call addAffector(). Note + that you'll have to drop() the returned pointer, after you don't need + it any more, see IReferenceCounted::drop() for more informations. */ + virtual IParticleRotationAffector* createRotationAffector( + const core::vector3df& speed = core::vector3df(5.0f,5.0f,5.0f), + const core::vector3df& pivotPoint = core::vector3df(0.0f,0.0f,0.0f) ) = 0; +}; + +} // end namespace scene +} // end namespace irr + + +#endif + diff --git a/inc/IQ3LevelMesh.h b/inc/IQ3LevelMesh.h new file mode 100644 index 0000000..f8ff03f --- /dev/null +++ b/inc/IQ3LevelMesh.h @@ -0,0 +1,46 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_Q3_LEVEL_MESH_H_INCLUDED__ +#define __I_Q3_LEVEL_MESH_H_INCLUDED__ + +#include "IAnimatedMesh.h" +#include "IQ3Shader.h" + +namespace irr +{ +namespace scene +{ + //! Interface for a Mesh which can be loaded directly from a Quake3 .bsp-file. + /** The Mesh tries to load all textures of the map.*/ + class IQ3LevelMesh : public IAnimatedMesh + { + public: + + //! loads the shader definition from file + /** \param filename Name of the shaderfile, defaults to /scripts if fileNameIsValid is false. + \param fileNameIsValid Specifies whether the filename is valid in the current situation. */ + virtual const quake3::IShader* getShader( const c8* filename, bool fileNameIsValid=true ) = 0; + + //! returns a already loaded Shader + virtual const quake3::IShader* getShader(u32 index) const = 0; + + //! get's an interface to the entities + virtual quake3::tQ3EntityList& getEntityList() = 0; + + //! returns the requested brush entity + /** \param num The number from the model key of the entity. + + Use this interface if you parse the entities yourself.*/ + virtual IMesh* getBrushEntityMesh(s32 num) const = 0; + + //! returns the requested brush entity + virtual IMesh* getBrushEntityMesh(quake3::IEntity &ent) const = 0; + }; + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/IQ3Shader.h b/inc/IQ3Shader.h new file mode 100644 index 0000000..735fdf8 --- /dev/null +++ b/inc/IQ3Shader.h @@ -0,0 +1,885 @@ +// Copyright (C) 2006-2012 Nikolaus Gebhardt / Thomas Alten +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_Q3_LEVEL_SHADER_H_INCLUDED__ +#define __I_Q3_LEVEL_SHADER_H_INCLUDED__ + +#include "irrArray.h" +#include "fast_atof.h" +#include "IFileSystem.h" +#include "IVideoDriver.h" +#include "coreutil.h" + +namespace irr +{ +namespace scene +{ +namespace quake3 +{ + + static core::stringc irrEmptyStringc(""); + + //! Hold the different Mesh Types used for getMesh + enum eQ3MeshIndex + { + E_Q3_MESH_GEOMETRY = 0, + E_Q3_MESH_ITEMS, + E_Q3_MESH_BILLBOARD, + E_Q3_MESH_FOG, + E_Q3_MESH_UNRESOLVED, + E_Q3_MESH_SIZE + }; + + /*! used to customize Quake3 BSP Loader + */ + + struct Q3LevelLoadParameter + { + Q3LevelLoadParameter () + :defaultLightMapMaterial ( video::EMT_LIGHTMAP_M4 ), + defaultModulate ( video::EMFN_MODULATE_4X ), + defaultFilter ( video::EMF_BILINEAR_FILTER ), + patchTesselation ( 8 ), + verbose ( 0 ), + startTime ( 0 ), endTime ( 0 ), + mergeShaderBuffer ( 1 ), + cleanUnResolvedMeshes ( 1 ), + loadAllShaders ( 0 ), + loadSkyShader ( 0 ), + alpharef ( 1 ), + swapLump ( 0 ), + #ifdef __BIG_ENDIAN__ + swapHeader ( 1 ) + #else + swapHeader ( 0 ) + #endif + { + memcpy ( scriptDir, "scripts\x0", 8 ); + } + + video::E_MATERIAL_TYPE defaultLightMapMaterial; + video::E_MODULATE_FUNC defaultModulate; + video::E_MATERIAL_FLAG defaultFilter; + s32 patchTesselation; + s32 verbose; + u32 startTime; + u32 endTime; + s32 mergeShaderBuffer; + s32 cleanUnResolvedMeshes; + s32 loadAllShaders; + s32 loadSkyShader; + s32 alpharef; + s32 swapLump; + s32 swapHeader; + c8 scriptDir [ 64 ]; + }; + + // some useful typedefs + typedef core::array< core::stringc > tStringList; + typedef core::array< video::ITexture* > tTexArray; + + // string helper.. TODO: move to generic files + inline s16 isEqual ( const core::stringc &string, u32 &pos, const c8 *list[], u16 listSize ) + { + const char * in = string.c_str () + pos; + + for ( u16 i = 0; i != listSize; ++i ) + { + if (string.size() < pos) + return -2; + u32 len = (u32) strlen ( list[i] ); + if (string.size() < pos+len) + continue; + if ( in [len] != 0 && in [len] != ' ' ) + continue; + if ( strncmp ( in, list[i], len ) ) + continue; + + pos += len + 1; + return (s16) i; + } + return -2; + } + + inline f32 getAsFloat ( const core::stringc &string, u32 &pos ) + { + const char * in = string.c_str () + pos; + + f32 value = 0.f; + pos += (u32) ( core::fast_atof_move ( in, value ) - in ) + 1; + return value; + } + + //! get a quake3 vector translated to irrlicht position (x,-z,y ) + inline core::vector3df getAsVector3df ( const core::stringc &string, u32 &pos ) + { + core::vector3df v; + + v.X = getAsFloat ( string, pos ); + v.Z = getAsFloat ( string, pos ); + v.Y = getAsFloat ( string, pos ); + + return v; + } + + + /* + extract substrings + */ + inline void getAsStringList ( tStringList &list, s32 max, const core::stringc &string, u32 &startPos ) + { + list.clear (); + + s32 finish = 0; + s32 endPos; + do + { + endPos = string.findNext ( ' ', startPos ); + if ( endPos == -1 ) + { + finish = 1; + endPos = string.size(); + } + + list.push_back ( string.subString ( startPos, endPos - startPos ) ); + startPos = endPos + 1; + + if ( list.size() >= (u32) max ) + finish = 1; + + } while ( !finish ); + + } + + //! A blend function for a q3 shader. + struct SBlendFunc + { + SBlendFunc ( video::E_MODULATE_FUNC mod ) + : type ( video::EMT_SOLID ), modulate ( mod ), + param0( 0.f ), + isTransparent ( 0 ) {} + + video::E_MATERIAL_TYPE type; + video::E_MODULATE_FUNC modulate; + + f32 param0; + u32 isTransparent; + }; + + // parses the content of Variable cull + inline bool getCullingFunction ( const core::stringc &cull ) + { + if ( cull.size() == 0 ) + return true; + + bool ret = true; + static const c8 * funclist[] = { "none", "disable", "twosided" }; + + u32 pos = 0; + switch ( isEqual ( cull, pos, funclist, 3 ) ) + { + case 0: + case 1: + case 2: + ret = false; + break; + } + return ret; + } + + // parses the content of Variable depthfunc + // return a z-test + inline u8 getDepthFunction ( const core::stringc &string ) + { + u8 ret = video::ECFN_LESSEQUAL; + + if ( string.size() == 0 ) + return ret; + + static const c8 * funclist[] = { "lequal","equal" }; + + u32 pos = 0; + switch ( isEqual ( string, pos, funclist, 2 ) ) + { + case 0: + ret = video::ECFN_LESSEQUAL; + break; + case 1: + ret = video::ECFN_EQUAL; + break; + } + return ret; + } + + + /*! + parses the content of Variable blendfunc,alphafunc + it also make a hint for rendering as transparent or solid node. + + we assume a typical quake scene would look like this.. + 1) Big Static Mesh ( solid ) + 2) static scene item ( may use transparency ) but rendered in the solid pass + 3) additional transparency item in the transparent pass + + it's not 100% accurate! it just empirical.. + */ + inline static void getBlendFunc ( const core::stringc &string, SBlendFunc &blendfunc ) + { + if ( string.size() == 0 ) + return; + + // maps to E_BLEND_FACTOR + static const c8 * funclist[] = + { + "gl_zero", + "gl_one", + "gl_dst_color", + "gl_one_minus_dst_color", + "gl_src_color", + "gl_one_minus_src_color", + "gl_src_alpha", + "gl_one_minus_src_alpha", + "gl_dst_alpha", + "gl_one_minus_dst_alpha", + "gl_src_alpha_sat", + + "add", + "filter", + "blend", + + "ge128", + "gt0", + }; + + + u32 pos = 0; + s32 srcFact = isEqual ( string, pos, funclist, 16 ); + + if ( srcFact < 0 ) + return; + + u32 resolved = 0; + s32 dstFact = isEqual ( string, pos, funclist, 16 ); + + switch ( srcFact ) + { + case video::EBF_ZERO: + switch ( dstFact ) + { + // gl_zero gl_src_color == gl_dst_color gl_zero + case video::EBF_SRC_COLOR: + blendfunc.type = video::EMT_ONETEXTURE_BLEND; + blendfunc.param0 = video::pack_textureBlendFunc ( video::EBF_DST_COLOR, video::EBF_ZERO, blendfunc.modulate ); + blendfunc.isTransparent = 1; + resolved = 1; + break; + } break; + + case video::EBF_ONE: + switch ( dstFact ) + { + // gl_one gl_zero + case video::EBF_ZERO: + blendfunc.type = video::EMT_SOLID; + blendfunc.isTransparent = 0; + resolved = 1; + break; + + // gl_one gl_one + case video::EBF_ONE: + blendfunc.type = video::EMT_TRANSPARENT_ADD_COLOR; + blendfunc.isTransparent = 1; + resolved = 1; + break; + } break; + + case video::EBF_SRC_ALPHA: + switch ( dstFact ) + { + // gl_src_alpha gl_one_minus_src_alpha + case video::EBF_ONE_MINUS_SRC_ALPHA: + blendfunc.type = video::EMT_TRANSPARENT_ALPHA_CHANNEL; + blendfunc.param0 = 1.f/255.f; + blendfunc.isTransparent = 1; + resolved = 1; + break; + } break; + + case 11: + // add + blendfunc.type = video::EMT_TRANSPARENT_ADD_COLOR; + blendfunc.isTransparent = 1; + resolved = 1; + break; + case 12: + // filter = gl_dst_color gl_zero or gl_zero gl_src_color + blendfunc.type = video::EMT_ONETEXTURE_BLEND; + blendfunc.param0 = video::pack_textureBlendFunc ( video::EBF_DST_COLOR, video::EBF_ZERO, blendfunc.modulate ); + blendfunc.isTransparent = 1; + resolved = 1; + break; + case 13: + // blend = gl_src_alpha gl_one_minus_src_alpha + blendfunc.type = video::EMT_TRANSPARENT_ALPHA_CHANNEL; + blendfunc.param0 = 1.f/255.f; + blendfunc.isTransparent = 1; + resolved = 1; + break; + case 14: + // alphafunc ge128 + blendfunc.type = video::EMT_TRANSPARENT_ALPHA_CHANNEL; + blendfunc.param0 = 0.5f; + blendfunc.isTransparent = 1; + resolved = 1; + break; + case 15: + // alphafunc gt0 + blendfunc.type = video::EMT_TRANSPARENT_ALPHA_CHANNEL; + blendfunc.param0 = 1.f / 255.f; + blendfunc.isTransparent = 1; + resolved = 1; + break; + + } + + // use the generic blender + if ( 0 == resolved ) + { + blendfunc.type = video::EMT_ONETEXTURE_BLEND; + blendfunc.param0 = video::pack_textureBlendFunc ( + (video::E_BLEND_FACTOR) srcFact, + (video::E_BLEND_FACTOR) dstFact, + blendfunc.modulate); + + blendfunc.isTransparent = 1; + } + } + + // random noise [-1;1] + struct Noiser + { + static f32 get () + { + static u32 RandomSeed = 0x69666966; + RandomSeed = (RandomSeed * 3631 + 1); + + f32 value = ( (f32) (RandomSeed & 0x7FFF ) * (1.0f / (f32)(0x7FFF >> 1) ) ) - 1.f; + return value; + } + }; + + enum eQ3ModifierFunction + { + TCMOD = 0, + DEFORMVERTEXES = 1, + RGBGEN = 2, + TCGEN = 3, + MAP = 4, + ALPHAGEN = 5, + + FUNCTION2 = 0x10, + SCROLL = FUNCTION2 + 1, + SCALE = FUNCTION2 + 2, + ROTATE = FUNCTION2 + 3, + STRETCH = FUNCTION2 + 4, + TURBULENCE = FUNCTION2 + 5, + WAVE = FUNCTION2 + 6, + + IDENTITY = FUNCTION2 + 7, + VERTEX = FUNCTION2 + 8, + TEXTURE = FUNCTION2 + 9, + LIGHTMAP = FUNCTION2 + 10, + ENVIRONMENT = FUNCTION2 + 11, + DOLLAR_LIGHTMAP = FUNCTION2 + 12, + BULGE = FUNCTION2 + 13, + AUTOSPRITE = FUNCTION2 + 14, + AUTOSPRITE2 = FUNCTION2 + 15, + TRANSFORM = FUNCTION2 + 16, + EXACTVERTEX = FUNCTION2 + 17, + CONSTANT = FUNCTION2 + 18, + LIGHTINGSPECULAR = FUNCTION2 + 19, + MOVE = FUNCTION2 + 20, + NORMAL = FUNCTION2 + 21, + IDENTITYLIGHTING = FUNCTION2 + 22, + + WAVE_MODIFIER_FUNCTION = 0x30, + SINUS = WAVE_MODIFIER_FUNCTION + 1, + COSINUS = WAVE_MODIFIER_FUNCTION + 2, + SQUARE = WAVE_MODIFIER_FUNCTION + 3, + TRIANGLE = WAVE_MODIFIER_FUNCTION + 4, + SAWTOOTH = WAVE_MODIFIER_FUNCTION + 5, + SAWTOOTH_INVERSE = WAVE_MODIFIER_FUNCTION + 6, + NOISE = WAVE_MODIFIER_FUNCTION + 7, + + + UNKNOWN = -2 + + }; + + struct SModifierFunction + { + SModifierFunction () + : masterfunc0 ( UNKNOWN ), masterfunc1( UNKNOWN ), func ( SINUS ), + tcgen( TEXTURE ), rgbgen ( IDENTITY ), alphagen ( UNKNOWN ), + base ( 0 ), amp ( 1 ), phase ( 0 ), frequency ( 1 ), + wave ( 1 ), + x ( 0 ), y ( 0 ), z( 0 ), count( 0 ) {} + + // "tcmod","deformvertexes","rgbgen", "tcgen" + eQ3ModifierFunction masterfunc0; + // depends + eQ3ModifierFunction masterfunc1; + // depends + eQ3ModifierFunction func; + + eQ3ModifierFunction tcgen; + eQ3ModifierFunction rgbgen; + eQ3ModifierFunction alphagen; + + union + { + f32 base; + f32 bulgewidth; + }; + + union + { + f32 amp; + f32 bulgeheight; + }; + + f32 phase; + + union + { + f32 frequency; + f32 bulgespeed; + }; + + union + { + f32 wave; + f32 div; + }; + + f32 x; + f32 y; + f32 z; + u32 count; + + f32 evaluate ( f32 dt ) const + { + // phase in 0 and 1.. + f32 x = core::fract( (dt + phase ) * frequency ); + f32 y = 0.f; + + switch ( func ) + { + case SINUS: + y = sinf ( x * core::PI * 2.f ); + break; + case COSINUS: + y = cosf ( x * core::PI * 2.f ); + break; + case SQUARE: + y = x < 0.5f ? 1.f : -1.f; + break; + case TRIANGLE: + y = x < 0.5f ? ( 4.f * x ) - 1.f : ( -4.f * x ) + 3.f; + break; + case SAWTOOTH: + y = x; + break; + case SAWTOOTH_INVERSE: + y = 1.f - x; + break; + case NOISE: + y = Noiser::get(); + break; + default: + break; + } + + return base + ( y * amp ); + } + + + }; + + inline core::vector3df getMD3Normal ( u32 i, u32 j ) + { + const f32 lng = i * 2.0f * core::PI / 255.0f; + const f32 lat = j * 2.0f * core::PI / 255.0f; + return core::vector3df(cosf ( lat ) * sinf ( lng ), + sinf ( lat ) * sinf ( lng ), + cosf ( lng )); + } + + // + inline void getModifierFunc ( SModifierFunction& fill, const core::stringc &string, u32 &pos ) + { + if ( string.size() == 0 ) + return; + + static const c8 * funclist[] = + { + "sin","cos","square", + "triangle", "sawtooth","inversesawtooth", "noise" + }; + + fill.func = (eQ3ModifierFunction) isEqual ( string,pos, funclist,7 ); + fill.func = fill.func == UNKNOWN ? SINUS : (eQ3ModifierFunction) ((u32) fill.func + WAVE_MODIFIER_FUNCTION + 1); + + fill.base = getAsFloat ( string, pos ); + fill.amp = getAsFloat ( string, pos ); + fill.phase = getAsFloat ( string, pos ); + fill.frequency = getAsFloat ( string, pos ); + } + + + // name = "a b c .." + struct SVariable + { + core::stringc name; + core::stringc content; + + SVariable ( const c8 * n, const c8 *c = 0 ) : name ( n ), content (c) {} + virtual ~SVariable () {} + + void clear () + { + name = ""; + content = ""; + } + + s32 isValid () const + { + return name.size(); + } + + bool operator == ( const SVariable &other ) const + { + return 0 == strcmp ( name.c_str(), other.name.c_str () ); + } + + bool operator < ( const SVariable &other ) const + { + return 0 > strcmp ( name.c_str(), other.name.c_str () ); + } + + }; + + + // string database. "a" = "Hello", "b" = "1234.6" + struct SVarGroup + { + SVarGroup () { Variable.setAllocStrategy ( core::ALLOC_STRATEGY_SAFE ); } + virtual ~SVarGroup () {} + + u32 isDefined ( const c8 * name, const c8 * content = 0 ) const + { + for ( u32 i = 0; i != Variable.size (); ++i ) + { + if ( 0 == strcmp ( Variable[i].name.c_str(), name ) && + ( 0 == content || strstr ( Variable[i].content.c_str(), content ) ) + ) + { + return i + 1; + } + } + return 0; + } + + // searches for Variable name and returns is content + // if Variable is not found a reference to an Empty String is returned + const core::stringc &get( const c8 * name ) const + { + SVariable search ( name ); + s32 index = Variable.linear_search ( search ); + if ( index < 0 ) + return irrEmptyStringc; + + return Variable [ index ].content; + } + + // set the Variable name + void set ( const c8 * name, const c8 * content = 0 ) + { + u32 index = isDefined ( name, 0 ); + if ( 0 == index ) + { + Variable.push_back ( SVariable ( name, content ) ); + } + else + { + Variable [ index ].content = content; + } + } + + + core::array < SVariable > Variable; + }; + + //! holding a group a variable + struct SVarGroupList: public IReferenceCounted + { + SVarGroupList () + { + VariableGroup.setAllocStrategy ( core::ALLOC_STRATEGY_SAFE ); + } + virtual ~SVarGroupList () {} + + core::array < SVarGroup > VariableGroup; + }; + + + //! A Parsed Shader Holding Variables ordered in Groups + struct IShader + { + IShader () + : ID ( 0 ), VarGroup ( 0 ) {} + virtual ~IShader () {} + + void operator = (const IShader &other ) + { + ID = other.ID; + VarGroup = other.VarGroup; + name = other.name; + } + + bool operator == (const IShader &other ) const + { + return 0 == strcmp ( name.c_str(), other.name.c_str () ); + //return name == other.name; + } + + bool operator < (const IShader &other ) const + { + return strcmp ( name.c_str(), other.name.c_str () ) < 0; + //return name < other.name; + } + + u32 getGroupSize () const + { + if ( 0 == VarGroup ) + return 0; + return VarGroup->VariableGroup.size (); + } + + const SVarGroup * getGroup ( u32 stage ) const + { + if ( 0 == VarGroup || stage >= VarGroup->VariableGroup.size () ) + return 0; + + return &VarGroup->VariableGroup [ stage ]; + } + + // id + s32 ID; + SVarGroupList *VarGroup; // reference + + // Shader: shader name ( also first variable in first Vargroup ) + // Entity: classname ( variable in Group(1) ) + core::stringc name; + }; + + typedef IShader IEntity; + + typedef core::array < IEntity > tQ3EntityList; + + /* + dump shader like original layout, regardless of internal data holding + no recursive folding.. + */ + inline void dumpVarGroup ( core::stringc &dest, const SVarGroup * group, s32 stack ) + { + core::stringc buf; + s32 i; + + + if ( stack > 0 ) + { + buf = ""; + for ( i = 0; i < stack - 1; ++i ) + buf += '\t'; + + buf += "{\n"; + dest.append ( buf ); + } + + for ( u32 g = 0; g != group->Variable.size(); ++g ) + { + buf = ""; + for ( i = 0; i < stack; ++i ) + buf += '\t'; + + buf += group->Variable[g].name; + buf += " "; + buf += group->Variable[g].content; + buf += "\n"; + dest.append ( buf ); + } + + if ( stack > 1 ) + { + buf = ""; + for ( i = 0; i < stack - 1; ++i ) + buf += '\t'; + + buf += "}\n"; + dest.append ( buf ); + } + + } + + /*! + dump a Shader or an Entity + */ + inline core::stringc & dumpShader ( core::stringc &dest, const IShader * shader, bool entity = false ) + { + if ( 0 == shader ) + return dest; + + const SVarGroup * group; + + const u32 size = shader->VarGroup->VariableGroup.size (); + for ( u32 i = 0; i != size; ++i ) + { + group = &shader->VarGroup->VariableGroup[ i ]; + dumpVarGroup ( dest, group, core::clamp( (int)i, 0, 2 ) ); + } + + if ( !entity ) + { + if ( size <= 1 ) + { + dest.append ( "{\n" ); + } + dest.append ( "}\n" ); + } + return dest; + } + + + /* + quake3 doesn't care much about tga & jpg + load one or multiple files stored in name started at startPos to the texture array textures + if texture is not loaded 0 will be added ( to find missing textures easier) + */ + inline void getTextures(tTexArray &textures, + const core::stringc &name, u32 &startPos, + io::IFileSystem *fileSystem, + video::IVideoDriver* driver) + { + static const char* extension[] = + { + ".jpg", + ".jpeg", + ".png", + ".dds", + ".tga", + ".bmp", + ".pcx" + }; + + tStringList stringList; + getAsStringList(stringList, -1, name, startPos); + + textures.clear(); + + io::path loadFile; + for ( u32 i = 0; i!= stringList.size (); ++i ) + { + video::ITexture* texture = 0; + for (u32 g = 0; g != 7 ; ++g) + { + core::cutFilenameExtension ( loadFile, stringList[i] ); + + if ( loadFile == "$whiteimage" ) + { + texture = driver->getTexture( "$whiteimage" ); + if ( 0 == texture ) + { + core::dimension2du s ( 2, 2 ); + u32 image[4] = { 0xFFFFFFFF, 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF }; + video::IImage* w = driver->createImageFromData ( video::ECF_A8R8G8B8, s,&image ); + texture = driver->addTexture( "$whiteimage", w ); + w->drop (); + } + + } + else + if ( loadFile == "$redimage" ) + { + texture = driver->getTexture( "$redimage" ); + if ( 0 == texture ) + { + core::dimension2du s ( 2, 2 ); + u32 image[4] = { 0xFFFF0000, 0xFFFF0000,0xFFFF0000,0xFFFF0000 }; + video::IImage* w = driver->createImageFromData ( video::ECF_A8R8G8B8, s,&image ); + texture = driver->addTexture( "$redimage", w ); + w->drop (); + } + } + else + if ( loadFile == "$blueimage" ) + { + texture = driver->getTexture( "$blueimage" ); + if ( 0 == texture ) + { + core::dimension2du s ( 2, 2 ); + u32 image[4] = { 0xFF0000FF, 0xFF0000FF,0xFF0000FF,0xFF0000FF }; + video::IImage* w = driver->createImageFromData ( video::ECF_A8R8G8B8, s,&image ); + texture = driver->addTexture( "$blueimage", w ); + w->drop (); + } + } + else + if ( loadFile == "$checkerimage" ) + { + texture = driver->getTexture( "$checkerimage" ); + if ( 0 == texture ) + { + core::dimension2du s ( 2, 2 ); + u32 image[4] = { 0xFFFFFFFF, 0xFF000000,0xFF000000,0xFFFFFFFF }; + video::IImage* w = driver->createImageFromData ( video::ECF_A8R8G8B8, s,&image ); + texture = driver->addTexture( "$checkerimage", w ); + w->drop (); + } + } + else + if ( loadFile == "$lightmap" ) + { + texture = 0; + } + else + { + loadFile.append ( extension[g] ); + } + + if ( fileSystem->existFile ( loadFile ) ) + { + texture = driver->getTexture( loadFile ); + if ( texture ) + break; + texture = 0; + } + } + // take 0 Texture + textures.push_back(texture); + } + } + + + //! Manages various Quake3 Shader Styles + class IShaderManager : public IReferenceCounted + { + }; + +} // end namespace quake3 +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/IRandomizer.h b/inc/IRandomizer.h new file mode 100644 index 0000000..2d7d1d8 --- /dev/null +++ b/inc/IRandomizer.h @@ -0,0 +1,33 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_RANDOMIZER_H_INCLUDED__ +#define __I_RANDOMIZER_H_INCLUDED__ + +#include "IReferenceCounted.h" + +namespace irr +{ + +//! Interface for generating random numbers +class IRandomizer : public virtual IReferenceCounted +{ +public: + //! resets the randomizer + /** \param value Initialization value (seed) */ + virtual void reset(s32 value=0x0f0f0f0f) =0; + + //! generates a pseudo random number in the range 0..randMax() + virtual s32 rand() const =0; + + //! generates a pseudo random number in the range 0..1 + virtual f32 frand() const =0; + + //! get maxmimum number generated by rand() + virtual s32 randMax() const =0; +}; + +} // end namespace irr + +#endif diff --git a/inc/IReadFile.h b/inc/IReadFile.h new file mode 100644 index 0000000..eb4f0bd --- /dev/null +++ b/inc/IReadFile.h @@ -0,0 +1,58 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_READ_FILE_H_INCLUDED__ +#define __I_READ_FILE_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "coreutil.h" + +namespace irr +{ +namespace io +{ + + //! Interface providing read acess to a file. + class IReadFile : public virtual IReferenceCounted + { + public: + //! Reads an amount of bytes from the file. + /** \param buffer Pointer to buffer where read bytes are written to. + \param sizeToRead Amount of bytes to read from the file. + \return How many bytes were read. */ + virtual s32 read(void* buffer, u32 sizeToRead) = 0; + + //! Changes position in file + /** \param finalPos Destination position in the file. + \param relativeMovement If set to true, the position in the file is + changed relative to current position. Otherwise the position is changed + from beginning of file. + \return True if successful, otherwise false. */ + virtual bool seek(long finalPos, bool relativeMovement = false) = 0; + + //! Get size of file. + /** \return Size of the file in bytes. */ + virtual long getSize() const = 0; + + //! Get the current position in the file. + /** \return Current position in the file in bytes. */ + virtual long getPos() const = 0; + + //! Get name of file. + /** \return File name as zero terminated character string. */ + virtual const io::path& getFileName() const = 0; + }; + + //! Internal function, please do not use. + IReadFile* createReadFile(const io::path& fileName); + //! Internal function, please do not use. + IReadFile* createLimitReadFile(const io::path& fileName, IReadFile* alreadyOpenedFile, long pos, long areaSize); + //! Internal function, please do not use. + IReadFile* createMemoryReadFile(void* memory, long size, const io::path& fileName, bool deleteMemoryWhenDropped); + +} // end namespace io +} // end namespace irr + +#endif + diff --git a/inc/IReferenceCounted.h b/inc/IReferenceCounted.h new file mode 100644 index 0000000..0eb23a5 --- /dev/null +++ b/inc/IReferenceCounted.h @@ -0,0 +1,170 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_IREFERENCE_COUNTED_H_INCLUDED__ +#define __I_IREFERENCE_COUNTED_H_INCLUDED__ + +#include "irrTypes.h" + +namespace irr +{ + + //! Base class of most objects of the Irrlicht Engine. + /** This class provides reference counting through the methods grab() and drop(). + It also is able to store a debug string for every instance of an object. + Most objects of the Irrlicht + Engine are derived from IReferenceCounted, and so they are reference counted. + + When you create an object in the Irrlicht engine, calling a method + which starts with 'create', an object is created, and you get a pointer + to the new object. If you no longer need the object, you have + to call drop(). This will destroy the object, if grab() was not called + in another part of you program, because this part still needs the object. + Note, that you only need to call drop() to the object, if you created it, + and the method had a 'create' in it. + + A simple example: + + If you want to create a texture, you may want to call an imaginable method + IDriver::createTexture. You call + ITexture* texture = driver->createTexture(dimension2d(128, 128)); + If you no longer need the texture, call texture->drop(). + + If you want to load a texture, you may want to call imaginable method + IDriver::loadTexture. You do this like + ITexture* texture = driver->loadTexture("example.jpg"); + You will not have to drop the pointer to the loaded texture, because + the name of the method does not start with 'create'. The texture + is stored somewhere by the driver. + */ + class IReferenceCounted + { + public: + + //! Constructor. + IReferenceCounted() + : DebugName(0), ReferenceCounter(1) + { + } + + //! Destructor. + virtual ~IReferenceCounted() + { + } + + //! Grabs the object. Increments the reference counter by one. + /** Someone who calls grab() to an object, should later also + call drop() to it. If an object never gets as much drop() as + grab() calls, it will never be destroyed. The + IReferenceCounted class provides a basic reference counting + mechanism with its methods grab() and drop(). Most objects of + the Irrlicht Engine are derived from IReferenceCounted, and so + they are reference counted. + + When you create an object in the Irrlicht engine, calling a + method which starts with 'create', an object is created, and + you get a pointer to the new object. If you no longer need the + object, you have to call drop(). This will destroy the object, + if grab() was not called in another part of you program, + because this part still needs the object. Note, that you only + need to call drop() to the object, if you created it, and the + method had a 'create' in it. + + A simple example: + + If you want to create a texture, you may want to call an + imaginable method IDriver::createTexture. You call + ITexture* texture = driver->createTexture(dimension2d(128, 128)); + If you no longer need the texture, call texture->drop(). + If you want to load a texture, you may want to call imaginable + method IDriver::loadTexture. You do this like + ITexture* texture = driver->loadTexture("example.jpg"); + You will not have to drop the pointer to the loaded texture, + because the name of the method does not start with 'create'. + The texture is stored somewhere by the driver. */ + void grab() const { ++ReferenceCounter; } + + //! Drops the object. Decrements the reference counter by one. + /** The IReferenceCounted class provides a basic reference + counting mechanism with its methods grab() and drop(). Most + objects of the Irrlicht Engine are derived from + IReferenceCounted, and so they are reference counted. + + When you create an object in the Irrlicht engine, calling a + method which starts with 'create', an object is created, and + you get a pointer to the new object. If you no longer need the + object, you have to call drop(). This will destroy the object, + if grab() was not called in another part of you program, + because this part still needs the object. Note, that you only + need to call drop() to the object, if you created it, and the + method had a 'create' in it. + + A simple example: + + If you want to create a texture, you may want to call an + imaginable method IDriver::createTexture. You call + ITexture* texture = driver->createTexture(dimension2d(128, 128)); + If you no longer need the texture, call texture->drop(). + If you want to load a texture, you may want to call imaginable + method IDriver::loadTexture. You do this like + ITexture* texture = driver->loadTexture("example.jpg"); + You will not have to drop the pointer to the loaded texture, + because the name of the method does not start with 'create'. + The texture is stored somewhere by the driver. + \return True, if the object was deleted. */ + bool drop() const + { + // someone is doing bad reference counting. + _IRR_DEBUG_BREAK_IF(ReferenceCounter <= 0) + + --ReferenceCounter; + if (!ReferenceCounter) + { + delete this; + return true; + } + + return false; + } + + //! Get the reference count. + /** \return Current value of the reference counter. */ + s32 getReferenceCount() const + { + return ReferenceCounter; + } + + //! Returns the debug name of the object. + /** The Debugname may only be set and changed by the object + itself. This method should only be used in Debug mode. + \return Returns a string, previously set by setDebugName(); */ + const c8* getDebugName() const + { + return DebugName; + } + + protected: + + //! Sets the debug name of the object. + /** The Debugname may only be set and changed by the object + itself. This method should only be used in Debug mode. + \param newName: New debug name to set. */ + void setDebugName(const c8* newName) + { + DebugName = newName; + } + + private: + + //! The debug name. + const c8* DebugName; + + //! The reference counter. Mutable to do reference counting on const objects. + mutable s32 ReferenceCounter; + }; + +} // end namespace irr + +#endif + diff --git a/inc/ISceneCollisionManager.h b/inc/ISceneCollisionManager.h new file mode 100644 index 0000000..726936a --- /dev/null +++ b/inc/ISceneCollisionManager.h @@ -0,0 +1,205 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_SCENE_COLLISION_MANAGER_H_INCLUDED__ +#define __I_SCENE_COLLISION_MANAGER_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "vector3d.h" +#include "triangle3d.h" +#include "position2d.h" +#include "line3d.h" + +namespace irr +{ + +namespace scene +{ + class ISceneNode; + class ICameraSceneNode; + class ITriangleSelector; + + //! The Scene Collision Manager provides methods for performing collision tests and picking on scene nodes. + class ISceneCollisionManager : public virtual IReferenceCounted + { + public: + + //! Finds the nearest collision point of a line and lots of triangles, if there is one. + /** \param ray: Line with which collisions are tested. + \param selector: TriangleSelector containing the triangles. It + can be created for example using + ISceneManager::createTriangleSelector() or + ISceneManager::createTriangleOctreeSelector(). + \param outCollisionPoint: If a collision is detected, this will + contain the position of the nearest collision to the line-start. + \param outTriangle: If a collision is detected, this will + contain the triangle with which the ray collided. + \param outNode: If a collision is detected, this will contain + the scene node associated with the triangle that was hit. + \return True if a collision was detected and false if not. */ + virtual bool getCollisionPoint(const core::line3d& ray, + ITriangleSelector* selector, core::vector3df& outCollisionPoint, + core::triangle3df& outTriangle, ISceneNode*& outNode) =0; + + //! Collides a moving ellipsoid with a 3d world with gravity and returns the resulting new position of the ellipsoid. + /** This can be used for moving a character in a 3d world: The + character will slide at walls and is able to walk up stairs. + The method used how to calculate the collision result position + is based on the paper "Improved Collision detection and + Response" by Kasper Fauerby. + \param selector: TriangleSelector containing the triangles of + the world. It can be created for example using + ISceneManager::createTriangleSelector() or + ISceneManager::createTriangleOctreeSelector(). + \param ellipsoidPosition: Position of the ellipsoid. + \param ellipsoidRadius: Radius of the ellipsoid. + \param ellipsoidDirectionAndSpeed: Direction and speed of the + movement of the ellipsoid. + \param triout: Optional parameter where the last triangle + causing a collision is stored, if there is a collision. + \param hitPosition: Return value for the position of the collision + \param outFalling: Is set to true if the ellipsoid is falling + down, caused by gravity. + \param outNode: the node with which the ellipoid collided (if any) + \param slidingSpeed: DOCUMENTATION NEEDED. + \param gravityDirectionAndSpeed: Direction and force of gravity. + \return New position of the ellipsoid. */ + virtual core::vector3df getCollisionResultPosition( + ITriangleSelector* selector, + const core::vector3df &ellipsoidPosition, + const core::vector3df& ellipsoidRadius, + const core::vector3df& ellipsoidDirectionAndSpeed, + core::triangle3df& triout, + core::vector3df& hitPosition, + bool& outFalling, + ISceneNode*& outNode, + f32 slidingSpeed = 0.0005f, + const core::vector3df& gravityDirectionAndSpeed + = core::vector3df(0.0f, 0.0f, 0.0f)) = 0; + + //! Returns a 3d ray which would go through the 2d screen coodinates. + /** \param pos: Screen coordinates in pixels. + \param camera: Camera from which the ray starts. If null, the + active camera is used. + \return Ray starting from the position of the camera and ending + at a length of the far value of the camera at a position which + would be behind the 2d screen coodinates. */ + virtual core::line3d getRayFromScreenCoordinates( + const core::position2d& pos, ICameraSceneNode* camera = 0) = 0; + + //! Calculates 2d screen position from a 3d position. + /** \param pos: 3D position in world space to be transformed + into 2d. + \param camera: Camera to be used. If null, the currently active + camera is used. + \param useViewPort: Calculate screen coordinates relative to + the current view port. Please note that unless the driver does + not take care of the view port, it is usually best to get the + result in absolute screen coordinates (flag=false). + \return 2d screen coordinates which a object in the 3d world + would have if it would be rendered to the screen. If the 3d + position is behind the camera, it is set to (-1000,-1000). In + most cases you can ignore this fact, because if you use this + method for drawing a decorator over a 3d object, it will be + clipped by the screen borders. */ + virtual core::position2d getScreenCoordinatesFrom3DPosition( + const core::vector3df& pos, ICameraSceneNode* camera=0, bool useViewPort=false) = 0; + + //! Gets the scene node, which is currently visible under the given screencoordinates, viewed from the currently active camera. + /** The collision tests are done using a bounding box for each + scene node. You can limit the recursive search so just all children of the specified root are tested. + \param pos: Position in pixel screen coordinates, under which + the returned scene node will be. + \param idBitMask: Only scene nodes with an id with bits set + like in this mask will be tested. If the BitMask is 0, this + feature is disabled. + Please note that the default node id of -1 will match with + every bitmask != 0 + \param bNoDebugObjects: Doesn't take debug objects into account + when true. These are scene nodes with IsDebugObject() = true. + \param root If different from 0, the search is limited to the children of this node. + \return Visible scene node under screen coordinates with + matching bits in its id. If there is no scene node under this + position, 0 is returned. */ + virtual ISceneNode* getSceneNodeFromScreenCoordinatesBB(const core::position2d& pos, + s32 idBitMask=0, bool bNoDebugObjects=false, ISceneNode* root=0) =0; + + //! Returns the nearest scene node which collides with a 3d ray and whose id matches a bitmask. + /** The collision tests are done using a bounding box for each + scene node. The recursive search can be limited be specifying a scene node. + \param ray Line with which collisions are tested. + \param idBitMask Only scene nodes with an id which matches at + least one of the bits contained in this mask will be tested. + However, if this parameter is 0, then all nodes are checked. + \param bNoDebugObjects: Doesn't take debug objects into account when true. These + are scene nodes with IsDebugObject() = true. + \param root If different from 0, the search is limited to the children of this node. + \return Scene node nearest to ray.start, which collides with + the ray and matches the idBitMask, if the mask is not null. If + no scene node is found, 0 is returned. */ + virtual ISceneNode* getSceneNodeFromRayBB(const core::line3d& ray, + s32 idBitMask=0, bool bNoDebugObjects=false, ISceneNode* root=0) =0; + + //! Get the scene node, which the given camera is looking at and whose id matches the bitmask. + /** A ray is simply casted from the position of the camera to + the view target position, and all scene nodes are tested + against this ray. The collision tests are done using a bounding + box for each scene node. + \param camera: Camera from which the ray is casted. + \param idBitMask: Only scene nodes with an id which matches at least one of the + bits contained in this mask will be tested. However, if this parameter is 0, then + all nodes are checked. + feature is disabled. + Please note that the default node id of -1 will match with + every bitmask != 0 + \param bNoDebugObjects: Doesn't take debug objects into account + when true. These are scene nodes with IsDebugObject() = true. + \return Scene node nearest to the camera, which collides with + the ray and matches the idBitMask, if the mask is not null. If + no scene node is found, 0 is returned. */ + virtual ISceneNode* getSceneNodeFromCameraBB(ICameraSceneNode* camera, + s32 idBitMask=0, bool bNoDebugObjects = false) = 0; + + //! Perform a ray/box and ray/triangle collision check on a heirarchy of scene nodes. + /** This checks all scene nodes under the specified one, first by ray/bounding + box, and then by accurate ray/triangle collision, finding the nearest collision, + and the scene node containg it. It returns the node hit, and (via output + parameters) the position of the collision, and the triangle that was hit. + + All scene nodes in the hierarchy tree under the specified node are checked. Only + nodes that are visible, with an ID that matches at least one bit in the supplied + bitmask, and which have a triangle selector are considered as candidates for being hit. + You do not have to build a meta triangle selector; the individual triangle selectors + of each candidate scene node are used automatically. + + \param ray: Line with which collisions are tested. + \param outCollisionPoint: If a collision is detected, this will contain the + position of the nearest collision. + \param outTriangle: If a collision is detected, this will contain the triangle + with which the ray collided. + \param idBitMask: Only scene nodes with an id which matches at least one of the + bits contained in this mask will be tested. However, if this parameter is 0, then + all nodes are checked. + \param collisionRootNode: the scene node at which to begin checking. Only this + node and its children will be checked. If you want to check the entire scene, + pass 0, and the root scene node will be used (this is the default). + \param noDebugObjects: when true, debug objects are not considered viable targets. + Debug objects are scene nodes with IsDebugObject() = true. + \return Returns the scene node containing the hit triangle nearest to ray.start. + If no collision is detected, then 0 is returned. */ + virtual ISceneNode* getSceneNodeAndCollisionPointFromRay( + core::line3df ray, + core::vector3df & outCollisionPoint, + core::triangle3df & outTriangle, + s32 idBitMask = 0, + ISceneNode * collisionRootNode = 0, + bool noDebugObjects = false) = 0; + }; + + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/ISceneLoader.h b/inc/ISceneLoader.h new file mode 100644 index 0000000..45a80f3 --- /dev/null +++ b/inc/ISceneLoader.h @@ -0,0 +1,62 @@ +// Copyright (C) 2010-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_SCENE_LOADER_H_INCLUDED__ +#define __I_SCENE_LOADER_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "path.h" + +namespace irr +{ +namespace io +{ + class IReadFile; +} // end namespace io +namespace scene +{ + class ISceneNode; + class ISceneUserDataSerializer; + +//! Class which can load a scene into the scene manager. +/** If you want Irrlicht to be able to load currently unsupported +scene file formats (e.g. .vrml), then implement this and add your +new Sceneloader to the engine with ISceneManager::addExternalSceneLoader(). */ +class ISceneLoader : public virtual IReferenceCounted +{ +public: + + //! Returns true if the class might be able to load this file. + /** This decision should be based on the file extension (e.g. ".vrml") + only. + \param filename Name of the file to test. + \return True if the extension is a recognised type. */ + virtual bool isALoadableFileExtension(const io::path& filename) const = 0; + + //! Returns true if the class might be able to load this file. + /** This decision will be based on a quick look at the contents of the file. + \param file The file to test. + \return True if the extension is a recognised type. */ + virtual bool isALoadableFileFormat(io::IReadFile* file) const = 0; + + //! Loads the scene into the scene manager. + /** \param file File which contains the scene. + \param userDataSerializer: If you want to load user data which may be attached + to some some scene nodes in the file, implement the ISceneUserDataSerializer + interface and provide it as parameter here. Otherwise, simply specify 0 as this + parameter. + \param rootNode The node to load the scene into, if none is provided then the + scene will be loaded into the root node. + \return Returns true on success, false on failure. Returns 0 if loading failed. */ + virtual bool loadScene(io::IReadFile* file, ISceneUserDataSerializer* userDataSerializer=0, + ISceneNode* rootNode=0) = 0; + +}; + + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/ISceneManager.h b/inc/ISceneManager.h new file mode 100644 index 0000000..8041348 --- /dev/null +++ b/inc/ISceneManager.h @@ -0,0 +1,1663 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_SCENE_MANAGER_H_INCLUDED__ +#define __I_SCENE_MANAGER_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "irrArray.h" +#include "irrString.h" +#include "path.h" +#include "vector3d.h" +#include "dimension2d.h" +#include "SColor.h" +#include "ETerrainElements.h" +#include "ESceneNodeTypes.h" +#include "ESceneNodeAnimatorTypes.h" +#include "EMeshWriterEnums.h" +#include "SceneParameters.h" +#include "IGeometryCreator.h" +#include "ISkinnedMesh.h" + +namespace irr +{ + struct SKeyMap; + struct SEvent; + +namespace io +{ + class IReadFile; + class IAttributes; + class IWriteFile; + class IFileSystem; +} // end namespace io + +namespace gui +{ + class IGUIFont; + class IGUIEnvironment; +} // end namespace gui + +namespace video +{ + class IVideoDriver; + class SMaterial; + class IImage; + class ITexture; +} // end namespace video + +namespace scene +{ + //! Enumeration for render passes. + /** A parameter passed to the registerNodeForRendering() method of the ISceneManager, + specifying when the node wants to be drawn in relation to the other nodes. */ + enum E_SCENE_NODE_RENDER_PASS + { + //! No pass currently active + ESNRP_NONE =0, + + //! Camera pass. The active view is set up here. The very first pass. + ESNRP_CAMERA =1, + + //! In this pass, lights are transformed into camera space and added to the driver + ESNRP_LIGHT =2, + + //! This is used for sky boxes. + ESNRP_SKY_BOX =4, + + //! All normal objects can use this for registering themselves. + /** This value will never be returned by + ISceneManager::getSceneNodeRenderPass(). The scene manager + will determine by itself if an object is transparent or solid + and register the object as SNRT_TRANSPARENT or SNRT_SOLD + automatically if you call registerNodeForRendering with this + value (which is default). Note that it will register the node + only as ONE type. If your scene node has both solid and + transparent material types register it twice (one time as + SNRT_SOLID, the other time as SNRT_TRANSPARENT) and in the + render() method call getSceneNodeRenderPass() to find out the + current render pass and render only the corresponding parts of + the node. */ + ESNRP_AUTOMATIC =24, + + //! Solid scene nodes or special scene nodes without materials. + ESNRP_SOLID =8, + + //! Transparent scene nodes, drawn after solid nodes. They are sorted from back to front and drawn in that order. + ESNRP_TRANSPARENT =16, + + //! Transparent effect scene nodes, drawn after Transparent nodes. They are sorted from back to front and drawn in that order. + ESNRP_TRANSPARENT_EFFECT =32, + + //! Drawn after the solid nodes, before the transparent nodes, the time for drawing shadow volumes + ESNRP_SHADOW =64 + }; + + class IAnimatedMesh; + class IAnimatedMeshSceneNode; + class IBillboardSceneNode; + class IBillboardTextSceneNode; + class ICameraSceneNode; + class IDummyTransformationSceneNode; + class ILightManager; + class ILightSceneNode; + class IMesh; + class IMeshBuffer; + class IMeshCache; + class IMeshLoader; + class IMeshManipulator; + class IMeshSceneNode; + class IMeshWriter; + class IMetaTriangleSelector; + class IParticleSystemSceneNode; + class ISceneCollisionManager; + class ISceneLoader; + class ISceneNode; + class ISceneNodeAnimator; + class ISceneNodeAnimatorCollisionResponse; + class ISceneNodeAnimatorFactory; + class ISceneNodeFactory; + class ISceneUserDataSerializer; + class ITerrainSceneNode; + class ITextSceneNode; + class ITriangleSelector; + class IVolumeLightSceneNode; + + namespace quake3 + { + struct IShader; + } // end namespace quake3 + + //! The Scene Manager manages scene nodes, mesh recources, cameras and all the other stuff. + /** All Scene nodes can be created only here. There is a always growing + list of scene nodes for lots of purposes: Indoor rendering scene nodes + like the Octree (addOctreeSceneNode()) or the terrain renderer + (addTerrainSceneNode()), different Camera scene nodes + (addCameraSceneNode(), addCameraSceneNodeMaya()), scene nodes for Light + (addLightSceneNode()), Billboards (addBillboardSceneNode()) and so on. + A scene node is a node in the hierachical scene graph. Every scene node + may have children, which are other scene nodes. Children move relative + the their parents position. If the parent of a node is not visible, its + children won't be visible, too. In this way, it is for example easily + possible to attach a light to a moving car or to place a walking + character on a moving platform on a moving ship. + The SceneManager is also able to load 3d mesh files of different + formats. Take a look at getMesh() to find out what formats are + supported. If these formats are not enough, use + addExternalMeshLoader() to add new formats to the engine. + */ + class ISceneManager : public virtual IReferenceCounted + { + public: + + //! Get pointer to an animateable mesh. Loads the file if not loaded already. + /** + * If you want to remove a loaded mesh from the cache again, use removeMesh(). + * Currently there are the following mesh formats supported: + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
FormatDescription
3D Studio (.3ds)Loader for 3D-Studio files which lots of 3D packages + * are able to export. Only static meshes are currently + * supported by this importer.
3D World Studio (.smf)Loader for Leadwerks SMF mesh files, a simple mesh format + * containing static geometry for games. The proprietary .STF texture format + * is not supported yet. This loader was originally written by Joseph Ellis.
Bliz Basic B3D (.b3d)Loader for blitz basic files, developed by Mark + * Sibly. This is the ideal animated mesh format for game + * characters as it is both rigidly defined and widely + * supported by modeling and animation software. + * As this format supports skeletal animations, an + * ISkinnedMesh will be returned by this importer.
Cartography shop 4 (.csm)Cartography Shop is a modeling program for creating + * architecture and calculating lighting. Irrlicht can + * directly import .csm files thanks to the IrrCSM library + * created by Saurav Mohapatra which is now integrated + * directly in Irrlicht. If you are using this loader, + * please note that you'll have to set the path of the + * textures before loading .csm files. You can do this + * using + * SceneManager->getParameters()->setAttribute(scene::CSM_TEXTURE_PATH, + * "path/to/your/textures");
COLLADA (.dae, .xml)COLLADA is an open Digital Asset Exchange Schema for + * the interactive 3D industry. There are exporters and + * importers for this format available for most of the + * big 3d packagesat http://collada.org. Irrlicht can + * import COLLADA files by using the + * ISceneManager::getMesh() method. COLLADA files need + * not contain only one single mesh but multiple meshes + * and a whole scene setup with lights, cameras and mesh + * instances, this loader can set up a scene as + * described by the COLLADA file instead of loading and + * returning one single mesh. By default, this loader + * behaves like the other loaders and does not create + * instances, but it can be switched into this mode by + * using + * SceneManager->getParameters()->setAttribute(COLLADA_CREATE_SCENE_INSTANCES, true); + * Created scene nodes will be named as the names of the + * nodes in the COLLADA file. The returned mesh is just + * a dummy object in this mode. Meshes included in the + * scene will be added into the scene manager with the + * following naming scheme: + * "path/to/file/file.dea#meshname". The loading of such + * meshes is logged. Currently, this loader is able to + + + * create meshes (made of only polygons), lights, and + * cameras. Materials and animations are currently not + * supported but this will change with future releases. + *
Delgine DeleD (.dmf)DeleD (delgine.com) is a 3D editor and level-editor + * combined into one and is specifically designed for 3D + * game-development. With this loader, it is possible to + * directly load all geometry is as well as textures and + * lightmaps from .dmf files. To set texture and + * material paths, see scene::DMF_USE_MATERIALS_DIRS and + * scene::DMF_TEXTURE_PATH. It is also possible to flip + * the alpha texture by setting + * scene::DMF_FLIP_ALPHA_TEXTURES to true and to set the + * material transparent reference value by setting + * scene::DMF_ALPHA_CHANNEL_REF to a float between 0 and + * 1. The loader is based on Salvatore Russo's .dmf + * loader, I just changed some parts of it. Thanks to + * Salvatore for his work and for allowing me to use his + * code in Irrlicht and put it under Irrlicht's license. + * For newer and more enchanced versions of the loader, + * take a look at delgine.com. + *
DirectX (.x)Platform independent importer (so not D3D-only) for + * .x files. Most 3D packages can export these natively + * and there are several tools for them available, e.g. + * the Maya exporter included in the DX SDK. + * .x files can include skeletal animations and Irrlicht + * is able to play and display them, users can manipulate + * the joints via the ISkinnedMesh interface. Currently, + * Irrlicht only supports uncompressed .x files.
Half-Life model (.mdl)This loader opens Half-life 1 models, it was contributed + * by Fabio Concas and adapted by Thomas Alten.
Irrlicht Mesh (.irrMesh)This is a static mesh format written in XML, native + * to Irrlicht and written by the irr mesh writer. + * This format is exported by the CopperCube engine's + * lightmapper.
LightWave (.lwo)Native to NewTek's LightWave 3D, the LWO format is well + * known and supported by many exporters. This loader will + * import LWO2 models including lightmaps, bumpmaps and + * reflection textures.
Maya (.obj)Most 3D software can create .obj files which contain + * static geometry without material data. The material + * files .mtl are also supported. This importer for + * Irrlicht can load them directly.
Milkshape (.ms3d).MS3D files contain models and sometimes skeletal + * animations from the Milkshape 3D modeling and animation + * software. Like the other skeletal mesh loaders, oints + * are exposed via the ISkinnedMesh animated mesh type.
My3D (.my3d).my3D is a flexible 3D file format. The My3DTools + * contains plug-ins to export .my3D files from several + * 3D packages. With this built-in importer, Irrlicht + * can read and display those files directly. This + * loader was written by Zhuck Dimitry who also created + * the whole My3DTools package. If you are using this + * loader, please note that you can set the path of the + * textures before loading .my3d files. You can do this + * using + * SceneManager->getParameters()->setAttribute(scene::MY3D_TEXTURE_PATH, + * "path/to/your/textures"); + *
OCT (.oct)The oct file format contains 3D geometry and + * lightmaps and can be loaded directly by Irrlicht. OCT + * files
can be created by FSRad, Paul Nette's + * radiosity processor or exported from Blender using + * OCTTools which can be found in the exporters/OCTTools + * directory of the SDK. Thanks to Murphy McCauley for + * creating all this.
OGRE Meshes (.mesh)Ogre .mesh files contain 3D data for the OGRE 3D + * engine. Irrlicht can read and display them directly + * with this importer. To define materials for the mesh, + * copy a .material file named like the corresponding + * .mesh file where the .mesh file is. (For example + * ogrehead.material for ogrehead.mesh). Thanks to + * Christian Stehno who wrote and contributed this + * loader.
Pulsar LMTools (.lmts)LMTools is a set of tools (Windows & Linux) for + * creating lightmaps. Irrlicht can directly read .lmts + * files thanks to
the importer created by Jonas + * Petersen. If you are using this loader, please note + * that you can set the path of the textures before + * loading .lmts files. You can do this using + * SceneManager->getParameters()->setAttribute(scene::LMTS_TEXTURE_PATH, + * "path/to/your/textures"); + * Notes for
this version of the loader:
+ * - It does not recognise/support user data in the + * *.lmts files.
+ * - The TGAs generated by LMTools don't work in + * Irrlicht for some reason (the textures are upside + * down). Opening and resaving them in a graphics app + * will solve the problem.
Quake 3 levels (.bsp)Quake 3 is a popular game by IDSoftware, and .pk3 + * files contain .bsp files and textures/lightmaps + * describing huge prelighted levels. Irrlicht can read + * .pk3 and .bsp files directly and thus render Quake 3 + * levels directly. Written by Nikolaus Gebhardt + * enhanced by Dean P. Macri with the curved surfaces + * feature.
Quake 2 models (.md2)Quake 2 models are characters with morph target + * animation. Irrlicht can read, display and animate + * them directly with this importer.
Quake 3 models (.md3)Quake 3 models are characters with morph target + * animation, they contain mount points for weapons and body + * parts and are typically made of several sections which are + * manually joined together.
Stanford Triangle (.ply)Invented by Stanford University and known as the native + * format of the infamous "Stanford Bunny" model, this is a + * popular static mesh format used by 3D scanning hardware + * and software. This loader supports extremely large models + * in both ASCII and binary format, but only has rudimentary + * material support in the form of vertex colors and texture + * coordinates.
Stereolithography (.stl)The STL format is used for rapid prototyping and + * computer-aided manufacturing, thus has no support for + * materials.
+ * + * To load and display a mesh quickly, just do this: + * \code + * SceneManager->addAnimatedMeshSceneNode( + * SceneManager->getMesh("yourmesh.3ds")); + * \endcode + * If you would like to implement and add your own file format loader to Irrlicht, + * see addExternalMeshLoader(). + * \param filename: Filename of the mesh to load. + * \return Null if failed, otherwise pointer to the mesh. + * This pointer should not be dropped. See IReferenceCounted::drop() for more information. + **/ + virtual IAnimatedMesh* getMesh(const io::path& filename) = 0; + + //! Get pointer to an animateable mesh. Loads the file if not loaded already. + /** Works just as getMesh(const char* filename). If you want to + remove a loaded mesh from the cache again, use removeMesh(). + \param file File handle of the mesh to load. + \return NULL if failed and pointer to the mesh if successful. + This pointer should not be dropped. See + IReferenceCounted::drop() for more information. */ + virtual IAnimatedMesh* getMesh(io::IReadFile* file) = 0; + + //! Get interface to the mesh cache which is shared beween all existing scene managers. + /** With this interface, it is possible to manually add new loaded + meshes (if ISceneManager::getMesh() is not sufficient), to remove them and to iterate + through already loaded meshes. */ + virtual IMeshCache* getMeshCache() = 0; + + //! Get the video driver. + /** \return Pointer to the video Driver. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual video::IVideoDriver* getVideoDriver() = 0; + + //! Get the active GUIEnvironment + /** \return Pointer to the GUIEnvironment + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual gui::IGUIEnvironment* getGUIEnvironment() = 0; + + //! Get the active FileSystem + /** \return Pointer to the FileSystem + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual io::IFileSystem* getFileSystem() = 0; + + //! adds Volume Lighting Scene Node. + /** Example Usage: + scene::IVolumeLightSceneNode * n = smgr->addVolumeLightSceneNode(0, -1, + 32, 32, //Subdivide U/V + video::SColor(0, 180, 180, 180), //foot color + video::SColor(0, 0, 0, 0) //tail color + ); + if (n) + { + n->setScale(core::vector3df(46.0f, 45.0f, 46.0f)); + n->getMaterial(0).setTexture(0, smgr->getVideoDriver()->getTexture("lightFalloff.png")); + } + \return Pointer to the volumeLight if successful, otherwise NULL. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual IVolumeLightSceneNode* addVolumeLightSceneNode(ISceneNode* parent=0, s32 id=-1, + const u32 subdivU = 32, const u32 subdivV = 32, + const video::SColor foot = video::SColor(51, 0, 230, 180), + const video::SColor tail = video::SColor(0, 0, 0, 0), + const core::vector3df& position = core::vector3df(0,0,0), + const core::vector3df& rotation = core::vector3df(0,0,0), + const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f)) = 0; + + //! Adds a cube scene node + /** \param size: Size of the cube, uniformly in each dimension. + \param parent: Parent of the scene node. Can be 0 if no parent. + \param id: Id of the node. This id can be used to identify the scene node. + \param position: Position of the space relative to its parent + where the scene node will be placed. + \param rotation: Initital rotation of the scene node. + \param scale: Initial scale of the scene node. + \return Pointer to the created test scene node. This + pointer should not be dropped. See IReferenceCounted::drop() + for more information. */ + virtual IMeshSceneNode* addCubeSceneNode(f32 size=10.0f, ISceneNode* parent=0, s32 id=-1, + const core::vector3df& position = core::vector3df(0,0,0), + const core::vector3df& rotation = core::vector3df(0,0,0), + const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f)) = 0; + + //! Adds a sphere scene node of the given radius and detail + /** \param radius: Radius of the sphere. + \param polyCount: The number of vertices in horizontal and + vertical direction. The total polyCount of the sphere is + polyCount*polyCount. This parameter must be less than 256 to + stay within the 16-bit limit of the indices of a meshbuffer. + \param parent: Parent of the scene node. Can be 0 if no parent. + \param id: Id of the node. This id can be used to identify the scene node. + \param position: Position of the space relative to its parent + where the scene node will be placed. + \param rotation: Initital rotation of the scene node. + \param scale: Initial scale of the scene node. + \return Pointer to the created test scene node. This + pointer should not be dropped. See IReferenceCounted::drop() + for more information. */ + virtual IMeshSceneNode* addSphereSceneNode(f32 radius=5.0f, s32 polyCount=16, + ISceneNode* parent=0, s32 id=-1, + const core::vector3df& position = core::vector3df(0,0,0), + const core::vector3df& rotation = core::vector3df(0,0,0), + const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f)) = 0; + + //! Adds a scene node for rendering an animated mesh model. + /** \param mesh: Pointer to the loaded animated mesh to be displayed. + \param parent: Parent of the scene node. Can be NULL if no parent. + \param id: Id of the node. This id can be used to identify the scene node. + \param position: Position of the space relative to its parent where the + scene node will be placed. + \param rotation: Initital rotation of the scene node. + \param scale: Initial scale of the scene node. + \param alsoAddIfMeshPointerZero: Add the scene node even if a 0 pointer is passed. + \return Pointer to the created scene node. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual IAnimatedMeshSceneNode* addAnimatedMeshSceneNode(IAnimatedMesh* mesh, + ISceneNode* parent=0, s32 id=-1, + const core::vector3df& position = core::vector3df(0,0,0), + const core::vector3df& rotation = core::vector3df(0,0,0), + const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f), + bool alsoAddIfMeshPointerZero=false) = 0; + + //! Adds a scene node for rendering a static mesh. + /** \param mesh: Pointer to the loaded static mesh to be displayed. + \param parent: Parent of the scene node. Can be NULL if no parent. + \param id: Id of the node. This id can be used to identify the scene node. + \param position: Position of the space relative to its parent where the + scene node will be placed. + \param rotation: Initital rotation of the scene node. + \param scale: Initial scale of the scene node. + \param alsoAddIfMeshPointerZero: Add the scene node even if a 0 pointer is passed. + \return Pointer to the created scene node. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual IMeshSceneNode* addMeshSceneNode(IMesh* mesh, ISceneNode* parent=0, s32 id=-1, + const core::vector3df& position = core::vector3df(0,0,0), + const core::vector3df& rotation = core::vector3df(0,0,0), + const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f), + bool alsoAddIfMeshPointerZero=false) = 0; + + //! Adds a scene node for rendering a animated water surface mesh. + /** Looks really good when the Material type EMT_TRANSPARENT_REFLECTION + is used. + \param waveHeight: Height of the water waves. + \param waveSpeed: Speed of the water waves. + \param waveLength: Lenght of a water wave. + \param mesh: Pointer to the loaded static mesh to be displayed with water waves on it. + \param parent: Parent of the scene node. Can be NULL if no parent. + \param id: Id of the node. This id can be used to identify the scene node. + \param position: Position of the space relative to its parent where the + scene node will be placed. + \param rotation: Initital rotation of the scene node. + \param scale: Initial scale of the scene node. + \return Pointer to the created scene node. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual ISceneNode* addWaterSurfaceSceneNode(IMesh* mesh, + f32 waveHeight=2.0f, f32 waveSpeed=300.0f, f32 waveLength=10.0f, + ISceneNode* parent=0, s32 id=-1, + const core::vector3df& position = core::vector3df(0,0,0), + const core::vector3df& rotation = core::vector3df(0,0,0), + const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f)) = 0; + + + //! Adds a scene node for rendering using a octree to the scene graph. + /** This a good method for rendering + scenes with lots of geometry. The Octree is built on the fly from the mesh. + \param mesh: The mesh containing all geometry from which the octree will be build. + If this animated mesh has more than one frames in it, the first frame is taken. + \param parent: Parent node of the octree node. + \param id: id of the node. This id can be used to identify the node. + \param minimalPolysPerNode: Specifies the minimal polygons contained a octree node. + If a node gets less polys than this value it will not be split into + smaller nodes. + \param alsoAddIfMeshPointerZero: Add the scene node even if a 0 pointer is passed. + \return Pointer to the Octree if successful, otherwise 0. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual IMeshSceneNode* addOctreeSceneNode(IAnimatedMesh* mesh, ISceneNode* parent=0, + s32 id=-1, s32 minimalPolysPerNode=512, bool alsoAddIfMeshPointerZero=false) = 0; + + //! Adds a scene node for rendering using a octree to the scene graph. + /** \deprecated Use addOctreeSceneNode instead. This method may be removed by Irrlicht 1.9. */ + _IRR_DEPRECATED_ IMeshSceneNode* addOctTreeSceneNode(IAnimatedMesh* mesh, ISceneNode* parent=0, + s32 id=-1, s32 minimalPolysPerNode=512, bool alsoAddIfMeshPointerZero=false) + { + return addOctreeSceneNode(mesh, parent, id, minimalPolysPerNode, alsoAddIfMeshPointerZero); + } + + //! Adds a scene node for rendering using a octree to the scene graph. + /** This a good method for rendering scenes with lots of + geometry. The Octree is built on the fly from the mesh, much + faster then a bsp tree. + \param mesh: The mesh containing all geometry from which the octree will be build. + \param parent: Parent node of the octree node. + \param id: id of the node. This id can be used to identify the node. + \param minimalPolysPerNode: Specifies the minimal polygons contained a octree node. + If a node gets less polys than this value it will not be split into + smaller nodes. + \param alsoAddIfMeshPointerZero: Add the scene node even if a 0 pointer is passed. + \return Pointer to the octree if successful, otherwise 0. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual IMeshSceneNode* addOctreeSceneNode(IMesh* mesh, ISceneNode* parent=0, + s32 id=-1, s32 minimalPolysPerNode=256, bool alsoAddIfMeshPointerZero=false) = 0; + + //! Adds a scene node for rendering using a octree to the scene graph. + /** \deprecated Use addOctreeSceneNode instead. This method may be removed by Irrlicht 1.9. */ + _IRR_DEPRECATED_ IMeshSceneNode* addOctTreeSceneNode(IMesh* mesh, ISceneNode* parent=0, + s32 id=-1, s32 minimalPolysPerNode=256, bool alsoAddIfMeshPointerZero=false) + { + return addOctreeSceneNode(mesh, parent, id, minimalPolysPerNode, alsoAddIfMeshPointerZero); + } + + //! Adds a camera scene node to the scene graph and sets it as active camera. + /** This camera does not react on user input like for example the one created with + addCameraSceneNodeFPS(). If you want to move or animate it, use animators or the + ISceneNode::setPosition(), ICameraSceneNode::setTarget() etc methods. + By default, a camera's look at position (set with setTarget()) and its scene node + rotation (set with setRotation()) are independent. If you want to be able to + control the direction that the camera looks by using setRotation() then call + ICameraSceneNode::bindTargetAndRotation(true) on it. + \param position: Position of the space relative to its parent where the camera will be placed. + \param lookat: Position where the camera will look at. Also known as target. + \param parent: Parent scene node of the camera. Can be null. If the parent moves, + the camera will move too. + \param id: id of the camera. This id can be used to identify the camera. + \param makeActive Flag whether this camera should become the active one. + Make sure you always have one active camera. + \return Pointer to interface to camera if successful, otherwise 0. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual ICameraSceneNode* addCameraSceneNode(ISceneNode* parent = 0, + const core::vector3df& position = core::vector3df(0,0,0), + const core::vector3df& lookat = core::vector3df(0,0,100), + s32 id=-1, bool makeActive=true) = 0; + + //! Adds a maya style user controlled camera scene node to the scene graph. + /** This is a standard camera with an animator that provides mouse control similar + to camera in the 3D Software Maya by Alias Wavefront. + The camera does not react on setPosition anymore after applying this animator. Instead + use setTarget, to fix the target the camera the camera hovers around. And setDistance + to set the current distance from that target, i.e. the radius of the orbit the camera + hovers on. + \param parent: Parent scene node of the camera. Can be null. + \param rotateSpeed: Rotation speed of the camera. + \param zoomSpeed: Zoom speed of the camera. + \param translationSpeed: TranslationSpeed of the camera. + \param id: id of the camera. This id can be used to identify the camera. + \param distance Initial distance of the camera from the object + \param makeActive Flag whether this camera should become the active one. + Make sure you always have one active camera. + \return Returns a pointer to the interface of the camera if successful, otherwise 0. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual ICameraSceneNode* addCameraSceneNodeMaya(ISceneNode* parent=0, + f32 rotateSpeed=-1500.f, f32 zoomSpeed=200.f, + f32 translationSpeed=1500.f, s32 id=-1, f32 distance=70.f, + bool makeActive=true) =0; + + //! Adds a camera scene node with an animator which provides mouse and keyboard control appropriate for first person shooters (FPS). + /** This FPS camera is intended to provide a demonstration of a + camera that behaves like a typical First Person Shooter. It is + useful for simple demos and prototyping but is not intended to + provide a full solution for a production quality game. It binds + the camera scene node rotation to the look-at target; @see + ICameraSceneNode::bindTargetAndRotation(). With this camera, + you look with the mouse, and move with cursor keys. If you want + to change the key layout, you can specify your own keymap. For + example to make the camera be controlled by the cursor keys AND + the keys W,A,S, and D, do something like this: + \code + SKeyMap keyMap[8]; + keyMap[0].Action = EKA_MOVE_FORWARD; + keyMap[0].KeyCode = KEY_UP; + keyMap[1].Action = EKA_MOVE_FORWARD; + keyMap[1].KeyCode = KEY_KEY_W; + + keyMap[2].Action = EKA_MOVE_BACKWARD; + keyMap[2].KeyCode = KEY_DOWN; + keyMap[3].Action = EKA_MOVE_BACKWARD; + keyMap[3].KeyCode = KEY_KEY_S; + + keyMap[4].Action = EKA_STRAFE_LEFT; + keyMap[4].KeyCode = KEY_LEFT; + keyMap[5].Action = EKA_STRAFE_LEFT; + keyMap[5].KeyCode = KEY_KEY_A; + + keyMap[6].Action = EKA_STRAFE_RIGHT; + keyMap[6].KeyCode = KEY_RIGHT; + keyMap[7].Action = EKA_STRAFE_RIGHT; + keyMap[7].KeyCode = KEY_KEY_D; + + camera = sceneManager->addCameraSceneNodeFPS(0, 100, 500, -1, keyMap, 8); + \endcode + \param parent: Parent scene node of the camera. Can be null. + \param rotateSpeed: Speed in degress with which the camera is + rotated. This can be done only with the mouse. + \param moveSpeed: Speed in units per millisecond with which + the camera is moved. Movement is done with the cursor keys. + \param id: id of the camera. This id can be used to identify + the camera. + \param keyMapArray: Optional pointer to an array of a keymap, + specifying what keys should be used to move the camera. If this + is null, the default keymap is used. You can define actions + more then one time in the array, to bind multiple keys to the + same action. + \param keyMapSize: Amount of items in the keymap array. + \param noVerticalMovement: Setting this to true makes the + camera only move within a horizontal plane, and disables + vertical movement as known from most ego shooters. Default is + 'false', with which it is possible to fly around in space, if + no gravity is there. + \param jumpSpeed: Speed with which the camera is moved when + jumping. + \param invertMouse: Setting this to true makes the camera look + up when the mouse is moved down and down when the mouse is + moved up, the default is 'false' which means it will follow the + movement of the mouse cursor. + \param makeActive Flag whether this camera should become the active one. + Make sure you always have one active camera. + \return Pointer to the interface of the camera if successful, + otherwise 0. This pointer should not be dropped. See + IReferenceCounted::drop() for more information. */ + virtual ICameraSceneNode* addCameraSceneNodeFPS(ISceneNode* parent = 0, + f32 rotateSpeed = 100.0f, f32 moveSpeed = 0.5f, s32 id=-1, + SKeyMap* keyMapArray=0, s32 keyMapSize=0, bool noVerticalMovement=false, + f32 jumpSpeed = 0.f, bool invertMouse=false, + bool makeActive=true) = 0; + + //! Adds a dynamic light scene node to the scene graph. + /** The light will cast dynamic light on all + other scene nodes in the scene, which have the material flag video::MTF_LIGHTING + turned on. (This is the default setting in most scene nodes). + \param parent: Parent scene node of the light. Can be null. If the parent moves, + the light will move too. + \param position: Position of the space relative to its parent where the light will be placed. + \param color: Diffuse color of the light. Ambient or Specular colors can be set manually with + the ILightSceneNode::getLightData() method. + \param radius: Radius of the light. + \param id: id of the node. This id can be used to identify the node. + \return Pointer to the interface of the light if successful, otherwise NULL. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual ILightSceneNode* addLightSceneNode(ISceneNode* parent = 0, + const core::vector3df& position = core::vector3df(0,0,0), + video::SColorf color = video::SColorf(1.0f, 1.0f, 1.0f), + f32 radius=100.0f, s32 id=-1) = 0; + + //! Adds a billboard scene node to the scene graph. + /** A billboard is like a 3d sprite: A 2d element, + which always looks to the camera. It is usually used for things + like explosions, fire, lensflares and things like that. + \param parent Parent scene node of the billboard. Can be null. + If the parent moves, the billboard will move too. + \param size Size of the billboard. This size is 2 dimensional + because a billboard only has width and height. + \param position Position of the space relative to its parent + where the billboard will be placed. + \param id An id of the node. This id can be used to identify + the node. + \param colorTop The color of the vertices at the top of the + billboard (default: white). + \param colorBottom The color of the vertices at the bottom of + the billboard (default: white). + \return Pointer to the billboard if successful, otherwise NULL. + This pointer should not be dropped. See + IReferenceCounted::drop() for more information. */ + virtual IBillboardSceneNode* addBillboardSceneNode(ISceneNode* parent = 0, + const core::dimension2d& size = core::dimension2d(10.0f, 10.0f), + const core::vector3df& position = core::vector3df(0,0,0), s32 id=-1, + video::SColor colorTop = 0xFFFFFFFF, video::SColor colorBottom = 0xFFFFFFFF) = 0; + + //! Adds a skybox scene node to the scene graph. + /** A skybox is a big cube with 6 textures on it and + is drawn around the camera position. + \param top: Texture for the top plane of the box. + \param bottom: Texture for the bottom plane of the box. + \param left: Texture for the left plane of the box. + \param right: Texture for the right plane of the box. + \param front: Texture for the front plane of the box. + \param back: Texture for the back plane of the box. + \param parent: Parent scene node of the skybox. A skybox usually has no parent, + so this should be null. Note: If a parent is set to the skybox, the box will not + change how it is drawn. + \param id: An id of the node. This id can be used to identify the node. + \return Pointer to the sky box if successful, otherwise NULL. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual ISceneNode* addSkyBoxSceneNode(video::ITexture* top, video::ITexture* bottom, + video::ITexture* left, video::ITexture* right, video::ITexture* front, + video::ITexture* back, ISceneNode* parent = 0, s32 id=-1) = 0; + + //! Adds a skydome scene node to the scene graph. + /** A skydome is a large (half-) sphere with a panoramic texture + on the inside and is drawn around the camera position. + \param texture: Texture for the dome. + \param horiRes: Number of vertices of a horizontal layer of the sphere. + \param vertRes: Number of vertices of a vertical layer of the sphere. + \param texturePercentage: How much of the height of the + texture is used. Should be between 0 and 1. + \param spherePercentage: How much of the sphere is drawn. + Value should be between 0 and 2, where 1 is an exact + half-sphere and 2 is a full sphere. + \param radius The Radius of the sphere + \param parent: Parent scene node of the dome. A dome usually has no parent, + so this should be null. Note: If a parent is set, the dome will not + change how it is drawn. + \param id: An id of the node. This id can be used to identify the node. + \return Pointer to the sky dome if successful, otherwise NULL. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual ISceneNode* addSkyDomeSceneNode(video::ITexture* texture, + u32 horiRes=16, u32 vertRes=8, + f32 texturePercentage=0.9, f32 spherePercentage=2.0,f32 radius = 1000.f, + ISceneNode* parent=0, s32 id=-1) = 0; + + //! Adds a particle system scene node to the scene graph. + /** \param withDefaultEmitter: Creates a default working point emitter + which emitts some particles. Set this to true to see a particle system + in action. If set to false, you'll have to set the emitter you want by + calling IParticleSystemSceneNode::setEmitter(). + \param parent: Parent of the scene node. Can be NULL if no parent. + \param id: Id of the node. This id can be used to identify the scene node. + \param position: Position of the space relative to its parent where the + scene node will be placed. + \param rotation: Initital rotation of the scene node. + \param scale: Initial scale of the scene node. + \return Pointer to the created scene node. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual IParticleSystemSceneNode* addParticleSystemSceneNode( + bool withDefaultEmitter=true, ISceneNode* parent=0, s32 id=-1, + const core::vector3df& position = core::vector3df(0,0,0), + const core::vector3df& rotation = core::vector3df(0,0,0), + const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f)) = 0; + + //! Adds a terrain scene node to the scene graph. + /** This node implements is a simple terrain renderer which uses + a technique known as geo mip mapping + for reducing the detail of triangle blocks which are far away. + The code for the TerrainSceneNode is based on the terrain + renderer by Soconne and the GeoMipMapSceneNode developed by + Spintz. They made their code available for Irrlicht and allowed + it to be distributed under this licence. I only modified some + parts. A lot of thanks go to them. + + This scene node is capable of loading terrains and updating + the indices at runtime to enable viewing very large terrains + very quickly. It uses a CLOD (Continuous Level of Detail) + algorithm which updates the indices for each patch based on + a LOD (Level of Detail) which is determined based on a patch's + distance from the camera. + + The patch size of the terrain must always be a size of 2^N+1, + i.e. 8+1(9), 16+1(17), etc. + The MaxLOD available is directly dependent on the patch size + of the terrain. LOD 0 contains all of the indices to draw all + the triangles at the max detail for a patch. As each LOD goes + up by 1 the step taken, in generating indices increases by + -2^LOD, so for LOD 1, the step taken is 2, for LOD 2, the step + taken is 4, LOD 3 - 8, etc. The step can be no larger than + the size of the patch, so having a LOD of 8, with a patch size + of 17, is asking the algoritm to generate indices every 2^8 ( + 256 ) vertices, which is not possible with a patch size of 17. + The maximum LOD for a patch size of 17 is 2^4 ( 16 ). So, + with a MaxLOD of 5, you'll have LOD 0 ( full detail ), LOD 1 ( + every 2 vertices ), LOD 2 ( every 4 vertices ), LOD 3 ( every + 8 vertices ) and LOD 4 ( every 16 vertices ). + \param heightMapFileName: The name of the file on disk, to read vertex data from. This should + be a gray scale bitmap. + \param parent: Parent of the scene node. Can be 0 if no parent. + \param id: Id of the node. This id can be used to identify the scene node. + \param position: The absolute position of this node. + \param rotation: The absolute rotation of this node. ( NOT YET IMPLEMENTED ) + \param scale: The scale factor for the terrain. If you're + using a heightmap of size 129x129 and would like your terrain + to be 12900x12900 in game units, then use a scale factor of ( + core::vector ( 100.0f, 100.0f, 100.0f ). If you use a Y + scaling factor of 0.0f, then your terrain will be flat. + \param vertexColor: The default color of all the vertices. If no texture is associated + with the scene node, then all vertices will be this color. Defaults to white. + \param maxLOD: The maximum LOD (level of detail) for the node. Only change if you + know what you are doing, this might lead to strange behavior. + \param patchSize: patch size of the terrain. Only change if you + know what you are doing, this might lead to strange behavior. + \param smoothFactor: The number of times the vertices are smoothed. + \param addAlsoIfHeightmapEmpty: Add terrain node even with empty heightmap. + \return Pointer to the created scene node. Can be null + if the terrain could not be created, for example because the + heightmap could not be loaded. The returned pointer should + not be dropped. See IReferenceCounted::drop() for more + information. */ + virtual ITerrainSceneNode* addTerrainSceneNode( + const io::path& heightMapFileName, + ISceneNode* parent=0, s32 id=-1, + const core::vector3df& position = core::vector3df(0.0f,0.0f,0.0f), + const core::vector3df& rotation = core::vector3df(0.0f,0.0f,0.0f), + const core::vector3df& scale = core::vector3df(1.0f,1.0f,1.0f), + video::SColor vertexColor = video::SColor(255,255,255,255), + s32 maxLOD=5, E_TERRAIN_PATCH_SIZE patchSize=ETPS_17, s32 smoothFactor=0, + bool addAlsoIfHeightmapEmpty = false) = 0; + + //! Adds a terrain scene node to the scene graph. + /** Just like the other addTerrainSceneNode() method, but takes an IReadFile + pointer as parameter for the heightmap. For more informations take a look + at the other function. + \param heightMapFile: The file handle to read vertex data from. This should + be a gray scale bitmap. + \param parent: Parent of the scene node. Can be 0 if no parent. + \param id: Id of the node. This id can be used to identify the scene node. + \param position: The absolute position of this node. + \param rotation: The absolute rotation of this node. ( NOT YET IMPLEMENTED ) + \param scale: The scale factor for the terrain. If you're + using a heightmap of size 129x129 and would like your terrain + to be 12900x12900 in game units, then use a scale factor of ( + core::vector ( 100.0f, 100.0f, 100.0f ). If you use a Y + scaling factor of 0.0f, then your terrain will be flat. + \param vertexColor: The default color of all the vertices. If no texture is associated + with the scene node, then all vertices will be this color. Defaults to white. + \param maxLOD: The maximum LOD (level of detail) for the node. Only change if you + know what you are doing, this might lead to strange behavior. + \param patchSize: patch size of the terrain. Only change if you + know what you are doing, this might lead to strange behavior. + \param smoothFactor: The number of times the vertices are smoothed. + \param addAlsoIfHeightmapEmpty: Add terrain node even with empty heightmap. + \return Pointer to the created scene node. Can be null + if the terrain could not be created, for example because the + heightmap could not be loaded. The returned pointer should + not be dropped. See IReferenceCounted::drop() for more + information. */ + virtual ITerrainSceneNode* addTerrainSceneNode( + io::IReadFile* heightMapFile, + ISceneNode* parent=0, s32 id=-1, + const core::vector3df& position = core::vector3df(0.0f,0.0f,0.0f), + const core::vector3df& rotation = core::vector3df(0.0f,0.0f,0.0f), + const core::vector3df& scale = core::vector3df(1.0f,1.0f,1.0f), + video::SColor vertexColor = video::SColor(255,255,255,255), + s32 maxLOD=5, E_TERRAIN_PATCH_SIZE patchSize=ETPS_17, s32 smoothFactor=0, + bool addAlsoIfHeightmapEmpty = false) = 0; + + //! Adds a quake3 scene node to the scene graph. + /** A Quake3 Scene renders multiple meshes for a specific HighLanguage Shader (Quake3 Style ) + \return Pointer to the quake3 scene node if successful, otherwise NULL. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual IMeshSceneNode* addQuake3SceneNode(const IMeshBuffer* meshBuffer, const quake3::IShader * shader, + ISceneNode* parent=0, s32 id=-1 + ) = 0; + + + //! Adds an empty scene node to the scene graph. + /** Can be used for doing advanced transformations + or structuring the scene graph. + \return Pointer to the created scene node. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual ISceneNode* addEmptySceneNode(ISceneNode* parent=0, s32 id=-1) = 0; + + //! Adds a dummy transformation scene node to the scene graph. + /** This scene node does not render itself, and does not respond to set/getPosition, + set/getRotation and set/getScale. Its just a simple scene node that takes a + matrix as relative transformation, making it possible to insert any transformation + anywhere into the scene graph. + \return Pointer to the created scene node. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual IDummyTransformationSceneNode* addDummyTransformationSceneNode( + ISceneNode* parent=0, s32 id=-1) = 0; + + //! Adds a text scene node, which is able to display 2d text at a position in three dimensional space + virtual ITextSceneNode* addTextSceneNode(gui::IGUIFont* font, const wchar_t* text, + video::SColor color=video::SColor(100,255,255,255), + ISceneNode* parent = 0, const core::vector3df& position = core::vector3df(0,0,0), + s32 id=-1) = 0; + + //! Adds a text scene node, which uses billboards. The node, and the text on it, will scale with distance. + /** + \param font The font to use on the billboard. Pass 0 to use the GUI environment's default font. + \param text The text to display on the billboard. + \param parent The billboard's parent. Pass 0 to use the root scene node. + \param size The billboard's width and height. + \param position The billboards position relative to its parent. + \param id: An id of the node. This id can be used to identify the node. + \param colorTop: The color of the vertices at the top of the billboard (default: white). + \param colorBottom: The color of the vertices at the bottom of the billboard (default: white). + \return Pointer to the billboard if successful, otherwise NULL. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual IBillboardTextSceneNode* addBillboardTextSceneNode( gui::IGUIFont* font, const wchar_t* text, + ISceneNode* parent = 0, + const core::dimension2d& size = core::dimension2d(10.0f, 10.0f), + const core::vector3df& position = core::vector3df(0,0,0), s32 id=-1, + video::SColor colorTop = 0xFFFFFFFF, video::SColor colorBottom = 0xFFFFFFFF) = 0; + + //! Adds a Hill Plane mesh to the mesh pool. + /** The mesh is generated on the fly + and looks like a plane with some hills on it. It is uses mostly for quick + tests of the engine only. You can specify how many hills there should be + on the plane and how high they should be. Also you must specify a name for + the mesh, because the mesh is added to the mesh pool, and can be retrieved + again using ISceneManager::getMesh() with the name as parameter. + \param name: The name of this mesh which must be specified in order + to be able to retrieve the mesh later with ISceneManager::getMesh(). + \param tileSize: Size of a tile of the mesh. (10.0f, 10.0f) would be a + good value to start, for example. + \param tileCount: Specifies how much tiles there will be. If you specifiy + for example that a tile has the size (10.0f, 10.0f) and the tileCount is + (10,10), than you get a field of 100 tiles which has the dimension 100.0fx100.0f. + \param material: Material of the hill mesh. + \param hillHeight: Height of the hills. If you specify a negative value + you will get holes instead of hills. If the height is 0, no hills will be + created. + \param countHills: Amount of hills on the plane. There will be countHills.X + hills along the X axis and countHills.Y along the Y axis. So in total there + will be countHills.X * countHills.Y hills. + \param textureRepeatCount: Defines how often the texture will be repeated in + x and y direction. + return Null if the creation failed. The reason could be that you + specified some invalid parameters or that a mesh with that name already + exists. If successful, a pointer to the mesh is returned. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual IAnimatedMesh* addHillPlaneMesh(const io::path& name, + const core::dimension2d& tileSize, const core::dimension2d& tileCount, + video::SMaterial* material = 0, f32 hillHeight = 0.0f, + const core::dimension2d& countHills = core::dimension2d(0.0f, 0.0f), + const core::dimension2d& textureRepeatCount = core::dimension2d(1.0f, 1.0f)) = 0; + + //! Adds a static terrain mesh to the mesh pool. + /** The mesh is generated on the fly + from a texture file and a height map file. Both files may be huge + (8000x8000 pixels would be no problem) because the generator splits the + files into smaller textures if necessary. + You must specify a name for the mesh, because the mesh is added to the mesh pool, + and can be retrieved again using ISceneManager::getMesh() with the name as parameter. + \param meshname: The name of this mesh which must be specified in order + to be able to retrieve the mesh later with ISceneManager::getMesh(). + \param texture: Texture for the terrain. Please note that this is not a + hardware texture as usual (ITexture), but an IImage software texture. + You can load this texture with IVideoDriver::createImageFromFile(). + \param heightmap: A grayscaled heightmap image. Like the texture, + it can be created with IVideoDriver::createImageFromFile(). The amount + of triangles created depends on the size of this texture, so use a small + heightmap to increase rendering speed. + \param stretchSize: Parameter defining how big a is pixel on the heightmap. + \param maxHeight: Defines how high a white pixel on the heighmap is. + \param defaultVertexBlockSize: Defines the initial dimension between vertices. + \return Null if the creation failed. The reason could be that you + specified some invalid parameters, that a mesh with that name already + exists, or that a texture could not be found. If successful, a pointer to the mesh is returned. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual IAnimatedMesh* addTerrainMesh(const io::path& meshname, + video::IImage* texture, video::IImage* heightmap, + const core::dimension2d& stretchSize = core::dimension2d(10.0f,10.0f), + f32 maxHeight=200.0f, + const core::dimension2d& defaultVertexBlockSize = core::dimension2d(64,64)) = 0; + + //! add a static arrow mesh to the meshpool + /** \param name Name of the mesh + \param vtxColorCylinder color of the cylinder + \param vtxColorCone color of the cone + \param tesselationCylinder Number of quads the cylinder side consists of + \param tesselationCone Number of triangles the cone's roof consits of + \param height Total height of the arrow + \param cylinderHeight Total height of the cylinder, should be lesser than total height + \param widthCylinder Diameter of the cylinder + \param widthCone Diameter of the cone's base, should be not smaller than the cylinder's diameter + \return Pointer to the arrow mesh if successful, otherwise 0. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual IAnimatedMesh* addArrowMesh(const io::path& name, + video::SColor vtxColorCylinder=0xFFFFFFFF, + video::SColor vtxColorCone=0xFFFFFFFF, + u32 tesselationCylinder=4, u32 tesselationCone=8, + f32 height=1.f, f32 cylinderHeight=0.6f, + f32 widthCylinder=0.05f, f32 widthCone=0.3f) = 0; + + //! add a static sphere mesh to the meshpool + /** \param name Name of the mesh + \param radius Radius of the sphere + \param polyCountX Number of quads used for the horizontal tiling + \param polyCountY Number of quads used for the vertical tiling + \return Pointer to the sphere mesh if successful, otherwise 0. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual IAnimatedMesh* addSphereMesh(const io::path& name, + f32 radius=5.f, u32 polyCountX = 16, + u32 polyCountY = 16) = 0; + + //! Add a volume light mesh to the meshpool + /** \param name Name of the mesh + \param SubdivideU Horizontal subdivision count + \param SubdivideV Vertical subdivision count + \param FootColor Color of the bottom of the light + \param TailColor Color of the top of the light + \return Pointer to the volume light mesh if successful, otherwise 0. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. + */ + virtual IAnimatedMesh* addVolumeLightMesh(const io::path& name, + const u32 SubdivideU = 32, const u32 SubdivideV = 32, + const video::SColor FootColor = video::SColor(51, 0, 230, 180), + const video::SColor TailColor = video::SColor(0, 0, 0, 0)) = 0; + + //! Gets the root scene node. + /** This is the scene node which is parent + of all scene nodes. The root scene node is a special scene node which + only exists to manage all scene nodes. It will not be rendered and cannot + be removed from the scene. + \return Pointer to the root scene node. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual ISceneNode* getRootSceneNode() = 0; + + //! Get the first scene node with the specified id. + /** \param id: The id to search for + \param start: Scene node to start from. All children of this scene + node are searched. If null is specified, the root scene node is + taken. + \return Pointer to the first scene node with this id, + and null if no scene node could be found. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual ISceneNode* getSceneNodeFromId(s32 id, ISceneNode* start=0) = 0; + + //! Get the first scene node with the specified name. + /** \param name: The name to search for + \param start: Scene node to start from. All children of this scene + node are searched. If null is specified, the root scene node is + taken. + \return Pointer to the first scene node with this id, + and null if no scene node could be found. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual ISceneNode* getSceneNodeFromName(const c8* name, ISceneNode* start=0) = 0; + + //! Get the first scene node with the specified type. + /** \param type: The type to search for + \param start: Scene node to start from. All children of this scene + node are searched. If null is specified, the root scene node is + taken. + \return Pointer to the first scene node with this type, + and null if no scene node could be found. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual ISceneNode* getSceneNodeFromType(scene::ESCENE_NODE_TYPE type, ISceneNode* start=0) = 0; + + //! Get scene nodes by type. + /** \param type: Type of scene node to find (ESNT_ANY will return all child nodes). + \param outNodes: array to be filled with results. + \param start: Scene node to start from. All children of this scene + node are searched. If null is specified, the root scene node is + taken. */ + virtual void getSceneNodesFromType(ESCENE_NODE_TYPE type, + core::array& outNodes, + ISceneNode* start=0) = 0; + + //! Get the current active camera. + /** \return The active camera is returned. Note that this can + be NULL, if there was no camera created yet. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual ICameraSceneNode* getActiveCamera() const =0; + + //! Sets the currently active camera. + /** The previous active camera will be deactivated. + \param camera: The new camera which should be active. */ + virtual void setActiveCamera(ICameraSceneNode* camera) = 0; + + //! Sets the color of stencil buffers shadows drawn by the scene manager. + virtual void setShadowColor(video::SColor color = video::SColor(150,0,0,0)) = 0; + + //! Get the current color of shadows. + virtual video::SColor getShadowColor() const = 0; + + //! Registers a node for rendering it at a specific time. + /** This method should only be used by SceneNodes when they get a + ISceneNode::OnRegisterSceneNode() call. + \param node: Node to register for drawing. Usually scene nodes would set 'this' + as parameter here because they want to be drawn. + \param pass: Specifies when the node wants to be drawn in relation to the other nodes. + For example, if the node is a shadow, it usually wants to be drawn after all other nodes + and will use ESNRP_SHADOW for this. See scene::E_SCENE_NODE_RENDER_PASS for details. + \return scene will be rendered ( passed culling ) */ + virtual u32 registerNodeForRendering(ISceneNode* node, + E_SCENE_NODE_RENDER_PASS pass = ESNRP_AUTOMATIC) = 0; + + //! Draws all the scene nodes. + /** This can only be invoked between + IVideoDriver::beginScene() and IVideoDriver::endScene(). Please note that + the scene is not only drawn when calling this, but also animated + by existing scene node animators, culling of scene nodes is done, etc. */ + virtual void drawAll() = 0; + + //! Creates a rotation animator, which rotates the attached scene node around itself. + /** \param rotationSpeed Specifies the speed of the animation in degree per 10 milliseconds. + \return The animator. Attach it to a scene node with ISceneNode::addAnimator() + and the animator will animate it. + If you no longer need the animator, you should call ISceneNodeAnimator::drop(). + See IReferenceCounted::drop() for more information. */ + virtual ISceneNodeAnimator* createRotationAnimator(const core::vector3df& rotationSpeed) = 0; + + //! Creates a fly circle animator, which lets the attached scene node fly around a center. + /** \param center: Center of the circle. + \param radius: Radius of the circle. + \param speed: The orbital speed, in radians per millisecond. + \param direction: Specifies the upvector used for alignment of the mesh. + \param startPosition: The position on the circle where the animator will + begin. Value is in multiples of a circle, i.e. 0.5 is half way around. (phase) + \param radiusEllipsoid: if radiusEllipsoid != 0 then radius2 froms a ellipsoid + begin. Value is in multiples of a circle, i.e. 0.5 is half way around. (phase) + \return The animator. Attach it to a scene node with ISceneNode::addAnimator() + and the animator will animate it. + If you no longer need the animator, you should call ISceneNodeAnimator::drop(). + See IReferenceCounted::drop() for more information. */ + virtual ISceneNodeAnimator* createFlyCircleAnimator( + const core::vector3df& center=core::vector3df(0.f,0.f,0.f), + f32 radius=100.f, f32 speed=0.001f, + const core::vector3df& direction=core::vector3df(0.f, 1.f, 0.f), + f32 startPosition = 0.f, + f32 radiusEllipsoid = 0.f) = 0; + + //! Creates a fly straight animator, which lets the attached scene node fly or move along a line between two points. + /** \param startPoint: Start point of the line. + \param endPoint: End point of the line. + \param timeForWay: Time in milli seconds how long the node should need to + move from the start point to the end point. + \param loop: If set to false, the node stops when the end point is reached. + If loop is true, the node begins again at the start. + \param pingpong Flag to set whether the animator should fly + back from end to start again. + \return The animator. Attach it to a scene node with ISceneNode::addAnimator() + and the animator will animate it. + If you no longer need the animator, you should call ISceneNodeAnimator::drop(). + See IReferenceCounted::drop() for more information. */ + virtual ISceneNodeAnimator* createFlyStraightAnimator(const core::vector3df& startPoint, + const core::vector3df& endPoint, u32 timeForWay, bool loop=false, bool pingpong = false) = 0; + + //! Creates a texture animator, which switches the textures of the target scene node based on a list of textures. + /** \param textures: List of textures to use. + \param timePerFrame: Time in milliseconds, how long any texture in the list + should be visible. + \param loop: If set to to false, the last texture remains set, and the animation + stops. If set to true, the animation restarts with the first texture. + \return The animator. Attach it to a scene node with ISceneNode::addAnimator() + and the animator will animate it. + If you no longer need the animator, you should call ISceneNodeAnimator::drop(). + See IReferenceCounted::drop() for more information. */ + virtual ISceneNodeAnimator* createTextureAnimator(const core::array& textures, + s32 timePerFrame, bool loop=true) = 0; + + //! Creates a scene node animator, which deletes the scene node after some time automatically. + /** \param timeMs: Time in milliseconds, after when the node will be deleted. + \return The animator. Attach it to a scene node with ISceneNode::addAnimator() + and the animator will animate it. + If you no longer need the animator, you should call ISceneNodeAnimator::drop(). + See IReferenceCounted::drop() for more information. */ + virtual ISceneNodeAnimator* createDeleteAnimator(u32 timeMs) = 0; + + //! Creates a special scene node animator for doing automatic collision detection and response. + /** See ISceneNodeAnimatorCollisionResponse for details. + \param world: Triangle selector holding all triangles of the world with which + the scene node may collide. You can create a triangle selector with + ISceneManager::createTriangleSelector(); + \param sceneNode: SceneNode which should be manipulated. After you added this animator + to the scene node, the scene node will not be able to move through walls and is + affected by gravity. If you need to teleport the scene node to a new position without + it being effected by the collision geometry, then call sceneNode->setPosition(); then + animator->setTargetNode(sceneNode); + \param ellipsoidRadius: Radius of the ellipsoid with which collision detection and + response is done. If you have got a scene node, and you are unsure about + how big the radius should be, you could use the following code to determine + it: + \code + const core::aabbox3d& box = yourSceneNode->getBoundingBox(); + core::vector3df radius = box.MaxEdge - box.getCenter(); + \endcode + \param gravityPerSecond: Sets the gravity of the environment, as an acceleration in + units per second per second. If your units are equivalent to metres, then + core::vector3df(0,-10.0f,0) would give an approximately realistic gravity. + You can disable gravity by setting it to core::vector3df(0,0,0). + \param ellipsoidTranslation: By default, the ellipsoid for collision detection is created around + the center of the scene node, which means that the ellipsoid surrounds + it completely. If this is not what you want, you may specify a translation + for the ellipsoid. + \param slidingValue: DOCUMENTATION NEEDED. + \return The animator. Attach it to a scene node with ISceneNode::addAnimator() + and the animator will cause it to do collision detection and response. + If you no longer need the animator, you should call ISceneNodeAnimator::drop(). + See IReferenceCounted::drop() for more information. */ + virtual ISceneNodeAnimatorCollisionResponse* createCollisionResponseAnimator( + ITriangleSelector* world, ISceneNode* sceneNode, + const core::vector3df& ellipsoidRadius = core::vector3df(30,60,30), + const core::vector3df& gravityPerSecond = core::vector3df(0,-10.0f,0), + const core::vector3df& ellipsoidTranslation = core::vector3df(0,0,0), + f32 slidingValue = 0.0005f) = 0; + + //! Creates a follow spline animator. + /** The animator modifies the position of + the attached scene node to make it follow a hermite spline. + It uses a subset of hermite splines: either cardinal splines + (tightness != 0.5) or catmull-rom-splines (tightness == 0.5). + The animator moves from one control point to the next in + 1/speed seconds. This code was sent in by Matthias Gall. + If you no longer need the animator, you should call ISceneNodeAnimator::drop(). + See IReferenceCounted::drop() for more information. */ + virtual ISceneNodeAnimator* createFollowSplineAnimator(s32 startTime, + const core::array< core::vector3df >& points, + f32 speed = 1.0f, f32 tightness = 0.5f, bool loop=true, bool pingpong=false) = 0; + + //! Creates a simple ITriangleSelector, based on a mesh. + /** Triangle selectors + can be used for doing collision detection. Don't use this selector + for a huge amount of triangles like in Quake3 maps. + Instead, use for example ISceneManager::createOctreeTriangleSelector(). + Please note that the created triangle selector is not automaticly attached + to the scene node. You will have to call ISceneNode::setTriangleSelector() + for this. To create and attach a triangle selector is done like this: + \code + ITriangleSelector* s = sceneManager->createTriangleSelector(yourMesh, + yourSceneNode); + yourSceneNode->setTriangleSelector(s); + s->drop(); + \endcode + \param mesh: Mesh of which the triangles are taken. + \param node: Scene node of which visibility and transformation is used. + \return The selector, or null if not successful. + If you no longer need the selector, you should call ITriangleSelector::drop(). + See IReferenceCounted::drop() for more information. */ + virtual ITriangleSelector* createTriangleSelector(IMesh* mesh, ISceneNode* node) = 0; + + //! Creates a simple ITriangleSelector, based on an animated mesh scene node. + /** Details of the mesh associated with the node will be extracted internally. + Call ITriangleSelector::update() to have the triangle selector updated based + on the current frame of the animated mesh scene node. + \param node The animated mesh scene node from which to build the selector + */ + virtual ITriangleSelector* createTriangleSelector(IAnimatedMeshSceneNode* node) = 0; + + + //! Creates a simple dynamic ITriangleSelector, based on a axis aligned bounding box. + /** Triangle selectors + can be used for doing collision detection. Every time when triangles are + queried, the triangle selector gets the bounding box of the scene node, + an creates new triangles. In this way, it works good with animated scene nodes. + \param node: Scene node of which the bounding box, visibility and transformation is used. + \return The selector, or null if not successful. + If you no longer need the selector, you should call ITriangleSelector::drop(). + See IReferenceCounted::drop() for more information. */ + virtual ITriangleSelector* createTriangleSelectorFromBoundingBox(ISceneNode* node) = 0; + + //! Creates a Triangle Selector, optimized by an octree. + /** Triangle selectors + can be used for doing collision detection. This triangle selector is + optimized for huge amounts of triangle, it organizes them in an octree. + Please note that the created triangle selector is not automaticly attached + to the scene node. You will have to call ISceneNode::setTriangleSelector() + for this. To create and attach a triangle selector is done like this: + \code + ITriangleSelector* s = sceneManager->createOctreeTriangleSelector(yourMesh, + yourSceneNode); + yourSceneNode->setTriangleSelector(s); + s->drop(); + \endcode + For more informations and examples on this, take a look at the collision + tutorial in the SDK. + \param mesh: Mesh of which the triangles are taken. + \param node: Scene node of which visibility and transformation is used. + \param minimalPolysPerNode: Specifies the minimal polygons contained a octree node. + If a node gets less polys the this value, it will not be splitted into + smaller nodes. + \return The selector, or null if not successful. + If you no longer need the selector, you should call ITriangleSelector::drop(). + See IReferenceCounted::drop() for more information. */ + virtual ITriangleSelector* createOctreeTriangleSelector(IMesh* mesh, + ISceneNode* node, s32 minimalPolysPerNode=32) = 0; + + //! //! Creates a Triangle Selector, optimized by an octree. + /** \deprecated Use createOctreeTriangleSelector instead. This method may be removed by Irrlicht 1.9. */ + _IRR_DEPRECATED_ ITriangleSelector* createOctTreeTriangleSelector(IMesh* mesh, + ISceneNode* node, s32 minimalPolysPerNode=32) + { + return createOctreeTriangleSelector(mesh, node, minimalPolysPerNode); + } + + //! Creates a meta triangle selector. + /** A meta triangle selector is nothing more than a + collection of one or more triangle selectors providing together + the interface of one triangle selector. In this way, + collision tests can be done with different triangle soups in one pass. + \return The selector, or null if not successful. + If you no longer need the selector, you should call ITriangleSelector::drop(). + See IReferenceCounted::drop() for more information. */ + virtual IMetaTriangleSelector* createMetaTriangleSelector() = 0; + + //! Creates a triangle selector which can select triangles from a terrain scene node. + /** \param node: Pointer to the created terrain scene node + \param LOD: Level of detail, 0 for highest detail. + \return The selector, or null if not successful. + If you no longer need the selector, you should call ITriangleSelector::drop(). + See IReferenceCounted::drop() for more information. */ + virtual ITriangleSelector* createTerrainTriangleSelector( + ITerrainSceneNode* node, s32 LOD=0) = 0; + + //! Adds an external mesh loader for extending the engine with new file formats. + /** If you want the engine to be extended with + file formats it currently is not able to load (e.g. .cob), just implement + the IMeshLoader interface in your loading class and add it with this method. + Using this method it is also possible to override built-in mesh loaders with + newer or updated versions without the need to recompile the engine. + \param externalLoader: Implementation of a new mesh loader. */ + virtual void addExternalMeshLoader(IMeshLoader* externalLoader) = 0; + + //! Returns the number of mesh loaders supported by Irrlicht at this time + virtual u32 getMeshLoaderCount() const = 0; + + //! Retrieve the given mesh loader + /** \param index The index of the loader to retrieve. This parameter is an 0-based + array index. + \return A pointer to the specified loader, 0 if the index is incorrect. */ + virtual IMeshLoader* getMeshLoader(u32 index) const = 0; + + //! Adds an external scene loader for extending the engine with new file formats. + /** If you want the engine to be extended with + file formats it currently is not able to load (e.g. .vrml), just implement + the ISceneLoader interface in your loading class and add it with this method. + Using this method it is also possible to override the built-in scene loaders + with newer or updated versions without the need to recompile the engine. + \param externalLoader: Implementation of a new mesh loader. */ + virtual void addExternalSceneLoader(ISceneLoader* externalLoader) = 0; + + //! Returns the number of scene loaders supported by Irrlicht at this time + virtual u32 getSceneLoaderCount() const = 0; + + //! Retrieve the given scene loader + /** \param index The index of the loader to retrieve. This parameter is an 0-based + array index. + \return A pointer to the specified loader, 0 if the index is incorrect. */ + virtual ISceneLoader* getSceneLoader(u32 index) const = 0; + + //! Get pointer to the scene collision manager. + /** \return Pointer to the collision manager + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual ISceneCollisionManager* getSceneCollisionManager() = 0; + + //! Get pointer to the mesh manipulator. + /** \return Pointer to the mesh manipulator + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual IMeshManipulator* getMeshManipulator() = 0; + + //! Adds a scene node to the deletion queue. + /** The scene node is immediatly + deleted when it's secure. Which means when the scene node does not + execute animators and things like that. This method is for example + used for deleting scene nodes by their scene node animators. In + most other cases, a ISceneNode::remove() call is enough, using this + deletion queue is not necessary. + See ISceneManager::createDeleteAnimator() for details. + \param node: Node to detete. */ + virtual void addToDeletionQueue(ISceneNode* node) = 0; + + //! Posts an input event to the environment. + /** Usually you do not have to + use this method, it is used by the internal engine. */ + virtual bool postEventFromUser(const SEvent& event) = 0; + + //! Clears the whole scene. + /** All scene nodes are removed. */ + virtual void clear() = 0; + + //! Get interface to the parameters set in this scene. + /** String parameters can be used by plugins and mesh loaders. + For example the CMS and LMTS loader want a parameter named 'CSM_TexturePath' + and 'LMTS_TexturePath' set to the path were attached textures can be found. See + CSM_TEXTURE_PATH, LMTS_TEXTURE_PATH, MY3D_TEXTURE_PATH, + COLLADA_CREATE_SCENE_INSTANCES, DMF_TEXTURE_PATH and DMF_USE_MATERIALS_DIRS*/ + virtual io::IAttributes* getParameters() = 0; + + //! Get current render pass. + /** All scene nodes are being rendered in a specific order. + First lights, cameras, sky boxes, solid geometry, and then transparent + stuff. During the rendering process, scene nodes may want to know what the scene + manager is rendering currently, because for example they registered for rendering + twice, once for transparent geometry and once for solid. When knowing what rendering + pass currently is active they can render the correct part of their geometry. */ + virtual E_SCENE_NODE_RENDER_PASS getSceneNodeRenderPass() const = 0; + + //! Get the default scene node factory which can create all built in scene nodes + /** \return Pointer to the default scene node factory + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual ISceneNodeFactory* getDefaultSceneNodeFactory() = 0; + + //! Adds a scene node factory to the scene manager. + /** Use this to extend the scene manager with new scene node types which it should be + able to create automaticly, for example when loading data from xml files. */ + virtual void registerSceneNodeFactory(ISceneNodeFactory* factoryToAdd) = 0; + + //! Get amount of registered scene node factories. + virtual u32 getRegisteredSceneNodeFactoryCount() const = 0; + + //! Get a scene node factory by index + /** \return Pointer to the requested scene node factory, or 0 if it does not exist. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual ISceneNodeFactory* getSceneNodeFactory(u32 index) = 0; + + //! Get the default scene node animator factory which can create all built-in scene node animators + /** \return Pointer to the default scene node animator factory + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual ISceneNodeAnimatorFactory* getDefaultSceneNodeAnimatorFactory() = 0; + + //! Adds a scene node animator factory to the scene manager. + /** Use this to extend the scene manager with new scene node animator types which it should be + able to create automaticly, for example when loading data from xml files. */ + virtual void registerSceneNodeAnimatorFactory(ISceneNodeAnimatorFactory* factoryToAdd) = 0; + + //! Get amount of registered scene node animator factories. + virtual u32 getRegisteredSceneNodeAnimatorFactoryCount() const = 0; + + //! Get scene node animator factory by index + /** \return Pointer to the requested scene node animator factory, or 0 if it does not exist. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual ISceneNodeAnimatorFactory* getSceneNodeAnimatorFactory(u32 index) = 0; + + //! Get typename from a scene node type or null if not found + virtual const c8* getSceneNodeTypeName(ESCENE_NODE_TYPE type) = 0; + + //! Returns a typename from a scene node animator type or null if not found + virtual const c8* getAnimatorTypeName(ESCENE_NODE_ANIMATOR_TYPE type) = 0; + + //! Adds a scene node to the scene by name + /** \return Pointer to the scene node added by a factory + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual ISceneNode* addSceneNode(const char* sceneNodeTypeName, ISceneNode* parent=0) = 0; + + //! creates a scene node animator based on its type name + /** \param typeName: Type of the scene node animator to add. + \param target: Target scene node of the new animator. + \return Returns pointer to the new scene node animator or null if not successful. You need to + drop this pointer after calling this, see IReferenceCounted::drop() for details. */ + virtual ISceneNodeAnimator* createSceneNodeAnimator(const char* typeName, ISceneNode* target=0) = 0; + + //! Creates a new scene manager. + /** This can be used to easily draw and/or store two + independent scenes at the same time. The mesh cache will be + shared between all existing scene managers, which means if you + load a mesh in the original scene manager using for example + getMesh(), the mesh will be available in all other scene + managers too, without loading. + The original/main scene manager will still be there and + accessible via IrrlichtDevice::getSceneManager(). If you need + input event in this new scene manager, for example for FPS + cameras, you'll need to forward input to this manually: Just + implement an IEventReceiver and call + yourNewSceneManager->postEventFromUser(), and return true so + that the original scene manager doesn't get the event. + Otherwise, all input will go to the main scene manager + automatically. + If you no longer need the new scene manager, you should call + ISceneManager::drop(). + See IReferenceCounted::drop() for more information. */ + virtual ISceneManager* createNewSceneManager(bool cloneContent=false) = 0; + + //! Saves the current scene into a file. + /** Scene nodes with the option isDebugObject set to true are + not being saved. The scene is usually written to an .irr file, + an xml based format. .irr files can Be edited with the Irrlicht + Engine Editor, irrEdit (http://www.ambiera.com/irredit/). To + load .irr files again, see ISceneManager::loadScene(). + \param filename Name of the file. + \param userDataSerializer If you want to save some user data + for every scene node into the file, implement the + ISceneUserDataSerializer interface and provide it as parameter + here. Otherwise, simply specify 0 as this parameter. + \param node Node which is taken as the top node of the scene. + This node and all of its descendants are saved into the scene + file. Pass 0 or the scene manager to save the full scene (which + is also the default). + \return True if successful. */ + virtual bool saveScene(const io::path& filename, ISceneUserDataSerializer* userDataSerializer=0, ISceneNode* node=0) = 0; + + //! Saves the current scene into a file. + /** Scene nodes with the option isDebugObject set to true are + not being saved. The scene is usually written to an .irr file, + an xml based format. .irr files can Be edited with the Irrlicht + Engine Editor, irrEdit (http://www.ambiera.com/irredit/). To + load .irr files again, see ISceneManager::loadScene(). + \param file File where the scene is saved into. + \param userDataSerializer If you want to save some user data + for every scene node into the file, implement the + ISceneUserDataSerializer interface and provide it as parameter + here. Otherwise, simply specify 0 as this parameter. + \param node Node which is taken as the top node of the scene. + This node and all of its descendants are saved into the scene + file. Pass 0 or the scene manager to save the full scene (which + is also the default). + \return True if successful. */ + virtual bool saveScene(io::IWriteFile* file, ISceneUserDataSerializer* userDataSerializer=0, ISceneNode* node=0) = 0; + + //! Saves the current scene into a file. + /** Scene nodes with the option isDebugObject set to true are + not being saved. The scene is usually written to an .irr file, + an xml based format. .irr files can Be edited with the Irrlicht + Engine Editor, irrEdit (http://www.ambiera.com/irredit/). To + load .irr files again, see ISceneManager::loadScene(). + \param writer XMLWriter with which the scene is saved. + \param currentPath Path which is used for relative file names. + Usually the directory of the file written into. + \param userDataSerializer If you want to save some user data + for every scene node into the file, implement the + ISceneUserDataSerializer interface and provide it as parameter + here. Otherwise, simply specify 0 as this parameter. + \param node Node which is taken as the top node of the scene. + This node and all of its descendants are saved into the scene + file. Pass 0 or the scene manager to save the full scene (which + is also the default). + \return True if successful. */ + virtual bool saveScene(io::IXMLWriter* writer, const io::path& currentPath, ISceneUserDataSerializer* userDataSerializer=0, ISceneNode* node=0) = 0; + + //! Loads a scene. Note that the current scene is not cleared before. + /** The scene is usually loaded from an .irr file, an xml based + format, but other scene formats can be added to the engine via + ISceneManager::addExternalSceneLoader. .irr files can Be edited + with the Irrlicht Engine Editor, irrEdit + (http://www.ambiera.com/irredit/) or saved directly by the engine + using ISceneManager::saveScene(). + \param filename Name of the file to load from. + \param userDataSerializer If you want to load user data + possibily saved in that file for some scene nodes in the file, + implement the ISceneUserDataSerializer interface and provide it + as parameter here. Otherwise, simply specify 0 as this + parameter. + \param rootNode Node which is taken as the root node of the + scene. Pass 0 to add the scene directly to the scene manager + (which is also the default). + \return True if successful. */ + virtual bool loadScene(const io::path& filename, ISceneUserDataSerializer* userDataSerializer=0, ISceneNode* rootNode=0) = 0; + + //! Loads a scene. Note that the current scene is not cleared before. + /** The scene is usually loaded from an .irr file, an xml based + format, but other scene formats can be added to the engine via + ISceneManager::addExternalSceneLoader. .irr files can Be edited + with the Irrlicht Engine Editor, irrEdit + (http://www.ambiera.com/irredit/) or saved directly by the engine + using ISceneManager::saveScene(). + \param file File where the scene is loaded from. + \param userDataSerializer If you want to load user data + possibily saved in that file for some scene nodes in the file, + implement the ISceneUserDataSerializer interface and provide it + as parameter here. Otherwise, simply specify 0 as this + parameter. + \param rootNode Node which is taken as the root node of the + scene. Pass 0 to add the scene directly to the scene manager + (which is also the default). + \return True if successful. */ + virtual bool loadScene(io::IReadFile* file, ISceneUserDataSerializer* userDataSerializer=0, ISceneNode* rootNode=0) = 0; + + //! Get a mesh writer implementation if available + /** Note: You need to drop() the pointer after use again, see IReferenceCounted::drop() + for details. */ + virtual IMeshWriter* createMeshWriter(EMESH_WRITER_TYPE type) = 0; + + //! Get a skinned mesh, which is not available as header-only code + /** Note: You need to drop() the pointer after use again, see IReferenceCounted::drop() + for details. */ + virtual ISkinnedMesh* createSkinnedMesh() = 0; + + //! Sets ambient color of the scene + virtual void setAmbientLight(const video::SColorf &ambientColor) = 0; + + //! Get ambient color of the scene + virtual const video::SColorf& getAmbientLight() const = 0; + + //! Register a custom callbacks manager which gets callbacks during scene rendering. + /** \param[in] lightManager: the new callbacks manager. You may pass 0 to remove the + current callbacks manager and restore the default behavior. */ + virtual void setLightManager(ILightManager* lightManager) = 0; + + //! Get an instance of a geometry creator. + /** The geometry creator provides some helper methods to create various types of + basic geometry. This can be useful for custom scene nodes. */ + virtual const IGeometryCreator* getGeometryCreator(void) const = 0; + + //! Check if node is culled in current view frustum + /** Please note that depending on the used culling method this + check can be rather coarse, or slow. A positive result is + correct, though, i.e. if this method returns true the node is + positively not visible. The node might still be invisible even + if this method returns false. + \param node The scene node which is checked for culling. + \return True if node is not visible in the current scene, else + false. */ + virtual bool isCulled(const ISceneNode* node) const =0; + }; + + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/ISceneNode.h b/inc/ISceneNode.h new file mode 100644 index 0000000..63d74f0 --- /dev/null +++ b/inc/ISceneNode.h @@ -0,0 +1,858 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_SCENE_NODE_H_INCLUDED__ +#define __I_SCENE_NODE_H_INCLUDED__ + +#include "IAttributeExchangingObject.h" +#include "ESceneNodeTypes.h" +#include "ECullingTypes.h" +#include "EDebugSceneTypes.h" +#include "ISceneNodeAnimator.h" +#include "ITriangleSelector.h" +#include "SMaterial.h" +#include "irrString.h" +#include "aabbox3d.h" +#include "matrix4.h" +#include "irrList.h" +#include "IAttributes.h" + +namespace irr +{ +namespace scene +{ + class ISceneManager; + + //! Typedef for list of scene nodes + typedef core::list ISceneNodeList; + //! Typedef for list of scene node animators + typedef core::list ISceneNodeAnimatorList; + + //! Scene node interface. + /** A scene node is a node in the hierarchical scene graph. Every scene + node may have children, which are also scene nodes. Children move + relative to their parent's position. If the parent of a node is not + visible, its children won't be visible either. In this way, it is for + example easily possible to attach a light to a moving car, or to place + a walking character on a moving platform on a moving ship. + */ + class ISceneNode : virtual public io::IAttributeExchangingObject + { + public: + + //! Constructor + ISceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id=-1, + const core::vector3df& position = core::vector3df(0,0,0), + const core::vector3df& rotation = core::vector3df(0,0,0), + const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f)) + : RelativeTranslation(position), RelativeRotation(rotation), RelativeScale(scale), + Parent(0), SceneManager(mgr), TriangleSelector(0), ID(id), + AutomaticCullingState(EAC_BOX), DebugDataVisible(EDS_OFF), + IsVisible(true), IsDebugObject(false) + { + if (parent) + parent->addChild(this); + + updateAbsolutePosition(); + } + + + //! Destructor + virtual ~ISceneNode() + { + // delete all children + removeAll(); + + // delete all animators + ISceneNodeAnimatorList::Iterator ait = Animators.begin(); + for (; ait != Animators.end(); ++ait) + (*ait)->drop(); + + if (TriangleSelector) + TriangleSelector->drop(); + } + + + //! This method is called just before the rendering process of the whole scene. + /** Nodes may register themselves in the render pipeline during this call, + precalculate the geometry which should be renderered, and prevent their + children from being able to register themselves if they are clipped by simply + not calling their OnRegisterSceneNode method. + If you are implementing your own scene node, you should overwrite this method + with an implementation code looking like this: + \code + if (IsVisible) + SceneManager->registerNodeForRendering(this); + + ISceneNode::OnRegisterSceneNode(); + \endcode + */ + virtual void OnRegisterSceneNode() + { + if (IsVisible) + { + ISceneNodeList::Iterator it = Children.begin(); + for (; it != Children.end(); ++it) + (*it)->OnRegisterSceneNode(); + } + } + + + //! OnAnimate() is called just before rendering the whole scene. + /** Nodes may calculate or store animations here, and may do other useful things, + depending on what they are. Also, OnAnimate() should be called for all + child scene nodes here. This method will be called once per frame, independent + of whether the scene node is visible or not. + \param timeMs Current time in milliseconds. */ + virtual void OnAnimate(u32 timeMs) + { + if (IsVisible) + { + // animate this node with all animators + + ISceneNodeAnimatorList::Iterator ait = Animators.begin(); + while (ait != Animators.end()) + { + // continue to the next node before calling animateNode() + // so that the animator may remove itself from the scene + // node without the iterator becoming invalid + ISceneNodeAnimator* anim = *ait; + ++ait; + anim->animateNode(this, timeMs); + } + + // update absolute position + updateAbsolutePosition(); + + // perform the post render process on all children + + ISceneNodeList::Iterator it = Children.begin(); + for (; it != Children.end(); ++it) + (*it)->OnAnimate(timeMs); + } + } + + + //! Renders the node. + virtual void render() = 0; + + + //! Returns the name of the node. + /** \return Name as character string. */ + virtual const c8* getName() const + { + return Name.c_str(); + } + + + //! Sets the name of the node. + /** \param name New name of the scene node. */ + virtual void setName(const c8* name) + { + Name = name; + } + + + //! Sets the name of the node. + /** \param name New name of the scene node. */ + virtual void setName(const core::stringc& name) + { + Name = name; + } + + + //! Get the axis aligned, not transformed bounding box of this node. + /** This means that if this node is an animated 3d character, + moving in a room, the bounding box will always be around the + origin. To get the box in real world coordinates, just + transform it with the matrix you receive with + getAbsoluteTransformation() or simply use + getTransformedBoundingBox(), which does the same. + \return The non-transformed bounding box. */ + virtual const core::aabbox3d& getBoundingBox() const = 0; + + + //! Get the axis aligned, transformed and animated absolute bounding box of this node. + /** \return The transformed bounding box. */ + virtual const core::aabbox3d getTransformedBoundingBox() const + { + core::aabbox3d box = getBoundingBox(); + AbsoluteTransformation.transformBoxEx(box); + return box; + } + + + //! Get the absolute transformation of the node. Is recalculated every OnAnimate()-call. + /** NOTE: For speed reasons the absolute transformation is not + automatically recalculated on each change of the relative + transformation or by a transformation change of an parent. Instead the + update usually happens once per frame in OnAnimate. You can enforce + an update with updateAbsolutePosition(). + \return The absolute transformation matrix. */ + virtual const core::matrix4& getAbsoluteTransformation() const + { + return AbsoluteTransformation; + } + + + //! Returns the relative transformation of the scene node. + /** The relative transformation is stored internally as 3 + vectors: translation, rotation and scale. To get the relative + transformation matrix, it is calculated from these values. + \return The relative transformation matrix. */ + virtual core::matrix4 getRelativeTransformation() const + { + core::matrix4 mat; + mat.setRotationDegrees(RelativeRotation); + mat.setTranslation(RelativeTranslation); + + if (RelativeScale != core::vector3df(1.f,1.f,1.f)) + { + core::matrix4 smat; + smat.setScale(RelativeScale); + mat *= smat; + } + + return mat; + } + + + //! Returns whether the node should be visible (if all of its parents are visible). + /** This is only an option set by the user, but has nothing to + do with geometry culling + \return The requested visibility of the node, true means + visible (if all parents are also visible). */ + virtual bool isVisible() const + { + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return IsVisible; + } + + //! Check whether the node is truly visible, taking into accounts its parents' visibility + /** \return true if the node and all its parents are visible, + false if this or any parent node is invisible. */ + virtual bool isTrulyVisible() const + { + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + if(!IsVisible) + return false; + + if(!Parent) + return true; + + return Parent->isTrulyVisible(); + } + + //! Sets if the node should be visible or not. + /** All children of this node won't be visible either, when set + to false. Invisible nodes are not valid candidates for selection by + collision manager bounding box methods. + \param isVisible If the node shall be visible. */ + virtual void setVisible(bool isVisible) + { + IsVisible = isVisible; + } + + + //! Get the id of the scene node. + /** This id can be used to identify the node. + \return The id. */ + virtual s32 getID() const + { + return ID; + } + + + //! Sets the id of the scene node. + /** This id can be used to identify the node. + \param id The new id. */ + virtual void setID(s32 id) + { + ID = id; + } + + + //! Adds a child to this scene node. + /** If the scene node already has a parent it is first removed + from the other parent. + \param child A pointer to the new child. */ + virtual void addChild(ISceneNode* child) + { + if (child && (child != this)) + { + // Change scene manager? + if (SceneManager != child->SceneManager) + child->setSceneManager(SceneManager); + + child->grab(); + child->remove(); // remove from old parent + Children.push_back(child); + child->Parent = this; + } + } + + + //! Removes a child from this scene node. + /** If found in the children list, the child pointer is also + dropped and might be deleted if no other grab exists. + \param child A pointer to the child which shall be removed. + \return True if the child was removed, and false if not, + e.g. because it couldn't be found in the children list. */ + virtual bool removeChild(ISceneNode* child) + { + ISceneNodeList::Iterator it = Children.begin(); + for (; it != Children.end(); ++it) + if ((*it) == child) + { + (*it)->Parent = 0; + (*it)->drop(); + Children.erase(it); + return true; + } + + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return false; + } + + + //! Removes all children of this scene node + /** The scene nodes found in the children list are also dropped + and might be deleted if no other grab exists on them. + */ + virtual void removeAll() + { + ISceneNodeList::Iterator it = Children.begin(); + for (; it != Children.end(); ++it) + { + (*it)->Parent = 0; + (*it)->drop(); + } + + Children.clear(); + } + + + //! Removes this scene node from the scene + /** If no other grab exists for this node, it will be deleted. + */ + virtual void remove() + { + if (Parent) + Parent->removeChild(this); + } + + + //! Adds an animator which should animate this node. + /** \param animator A pointer to the new animator. */ + virtual void addAnimator(ISceneNodeAnimator* animator) + { + if (animator) + { + Animators.push_back(animator); + animator->grab(); + } + } + + + //! Get a list of all scene node animators. + /** \return The list of animators attached to this node. */ + const core::list& getAnimators() const + { + return Animators; + } + + + //! Removes an animator from this scene node. + /** If the animator is found, it is also dropped and might be + deleted if not other grab exists for it. + \param animator A pointer to the animator to be deleted. */ + virtual void removeAnimator(ISceneNodeAnimator* animator) + { + ISceneNodeAnimatorList::Iterator it = Animators.begin(); + for (; it != Animators.end(); ++it) + { + if ((*it) == animator) + { + (*it)->drop(); + Animators.erase(it); + return; + } + } + } + + + //! Removes all animators from this scene node. + /** The animators might also be deleted if no other grab exists + for them. */ + virtual void removeAnimators() + { + ISceneNodeAnimatorList::Iterator it = Animators.begin(); + for (; it != Animators.end(); ++it) + (*it)->drop(); + + Animators.clear(); + } + + + //! Returns the material based on the zero based index i. + /** To get the amount of materials used by this scene node, use + getMaterialCount(). This function is needed for inserting the + node into the scene hierarchy at an optimal position for + minimizing renderstate changes, but can also be used to + directly modify the material of a scene node. + \param num Zero based index. The maximal value is getMaterialCount() - 1. + \return The material at that index. */ + virtual video::SMaterial& getMaterial(u32 num) + { + return video::IdentityMaterial; + } + + + //! Get amount of materials used by this scene node. + /** \return Current amount of materials of this scene node. */ + virtual u32 getMaterialCount() const + { + return 0; + } + + + //! Sets all material flags at once to a new value. + /** Useful, for example, if you want the whole mesh to be + affected by light. + \param flag Which flag of all materials to be set. + \param newvalue New value of that flag. */ + void setMaterialFlag(video::E_MATERIAL_FLAG flag, bool newvalue) + { + for (u32 i=0; i= video::MATERIAL_MAX_TEXTURES) + return; + + for (u32 i=0; i& getChildren() const + { + return Children; + } + + + //! Changes the parent of the scene node. + /** \param newParent The new parent to be used. */ + virtual void setParent(ISceneNode* newParent) + { + grab(); + remove(); + + Parent = newParent; + + if (Parent) + Parent->addChild(this); + + drop(); + } + + + //! Returns the triangle selector attached to this scene node. + /** The Selector can be used by the engine for doing collision + detection. You can create a TriangleSelector with + ISceneManager::createTriangleSelector() or + ISceneManager::createOctreeTriangleSelector and set it with + ISceneNode::setTriangleSelector(). If a scene node got no triangle + selector, but collision tests should be done with it, a triangle + selector is created using the bounding box of the scene node. + \return A pointer to the TriangleSelector or 0, if there + is none. */ + virtual ITriangleSelector* getTriangleSelector() const + { + return TriangleSelector; + } + + + //! Sets the triangle selector of the scene node. + /** The Selector can be used by the engine for doing collision + detection. You can create a TriangleSelector with + ISceneManager::createTriangleSelector() or + ISceneManager::createOctreeTriangleSelector(). Some nodes may + create their own selector by default, so it would be good to + check if there is already a selector in this node by calling + ISceneNode::getTriangleSelector(). + \param selector New triangle selector for this scene node. */ + virtual void setTriangleSelector(ITriangleSelector* selector) + { + if (TriangleSelector != selector) + { + if (TriangleSelector) + TriangleSelector->drop(); + + TriangleSelector = selector; + if (TriangleSelector) + TriangleSelector->grab(); + } + } + + + //! Updates the absolute position based on the relative and the parents position + /** Note: This does not recursively update the parents absolute positions, so if you have a deeper + hierarchy you might want to update the parents first.*/ + virtual void updateAbsolutePosition() + { + if (Parent) + { + AbsoluteTransformation = + Parent->getAbsoluteTransformation() * getRelativeTransformation(); + } + else + AbsoluteTransformation = getRelativeTransformation(); + } + + + //! Returns the parent of this scene node + /** \return A pointer to the parent. */ + scene::ISceneNode* getParent() const + { + return Parent; + } + + + //! Returns type of the scene node + /** \return The type of this node. */ + virtual ESCENE_NODE_TYPE getType() const + { + return ESNT_UNKNOWN; + } + + + //! Writes attributes of the scene node. + /** Implement this to expose the attributes of your scene node + for scripting languages, editors, debuggers or xml + serialization purposes. + \param out The attribute container to write into. + \param options Additional options which might influence the + serialization. */ + virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const + { + if (!out) + return; + out->addString ("Name", Name.c_str()); + out->addInt ("Id", ID ); + + out->addVector3d("Position", getPosition() ); + out->addVector3d("Rotation", getRotation() ); + out->addVector3d("Scale", getScale() ); + + out->addBool ("Visible", IsVisible ); + out->addInt ("AutomaticCulling", AutomaticCullingState); + out->addInt ("DebugDataVisible", DebugDataVisible ); + out->addBool ("IsDebugObject", IsDebugObject ); + } + + + //! Reads attributes of the scene node. + /** Implement this to set the attributes of your scene node for + scripting languages, editors, debuggers or xml deserialization + purposes. + \param in The attribute container to read from. + \param options Additional options which might influence the + deserialization. */ + virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0) + { + if (!in) + return; + Name = in->getAttributeAsString("Name"); + ID = in->getAttributeAsInt("Id"); + + setPosition(in->getAttributeAsVector3d("Position")); + setRotation(in->getAttributeAsVector3d("Rotation")); + setScale(in->getAttributeAsVector3d("Scale")); + + IsVisible = in->getAttributeAsBool("Visible"); + s32 tmpState = in->getAttributeAsEnumeration("AutomaticCulling", + scene::AutomaticCullingNames); + if (tmpState != -1) + AutomaticCullingState = (u32)tmpState; + else + AutomaticCullingState = in->getAttributeAsInt("AutomaticCulling"); + + DebugDataVisible = in->getAttributeAsInt("DebugDataVisible"); + IsDebugObject = in->getAttributeAsBool("IsDebugObject"); + + updateAbsolutePosition(); + } + + //! Creates a clone of this scene node and its children. + /** \param newParent An optional new parent. + \param newManager An optional new scene manager. + \return The newly created clone of this node. */ + virtual ISceneNode* clone(ISceneNode* newParent=0, ISceneManager* newManager=0) + { + return 0; // to be implemented by derived classes + } + + //! Retrieve the scene manager for this node. + /** \return The node's scene manager. */ + virtual ISceneManager* getSceneManager(void) const { return SceneManager; } + + protected: + + //! A clone function for the ISceneNode members. + /** This method can be used by clone() implementations of + derived classes + \param toCopyFrom The node from which the values are copied + \param newManager The new scene manager. */ + void cloneMembers(ISceneNode* toCopyFrom, ISceneManager* newManager) + { + Name = toCopyFrom->Name; + AbsoluteTransformation = toCopyFrom->AbsoluteTransformation; + RelativeTranslation = toCopyFrom->RelativeTranslation; + RelativeRotation = toCopyFrom->RelativeRotation; + RelativeScale = toCopyFrom->RelativeScale; + ID = toCopyFrom->ID; + setTriangleSelector(toCopyFrom->TriangleSelector); + AutomaticCullingState = toCopyFrom->AutomaticCullingState; + DebugDataVisible = toCopyFrom->DebugDataVisible; + IsVisible = toCopyFrom->IsVisible; + IsDebugObject = toCopyFrom->IsDebugObject; + + if (newManager) + SceneManager = newManager; + else + SceneManager = toCopyFrom->SceneManager; + + // clone children + + ISceneNodeList::Iterator it = toCopyFrom->Children.begin(); + for (; it != toCopyFrom->Children.end(); ++it) + (*it)->clone(this, newManager); + + // clone animators + + ISceneNodeAnimatorList::Iterator ait = toCopyFrom->Animators.begin(); + for (; ait != toCopyFrom->Animators.end(); ++ait) + { + ISceneNodeAnimator* anim = (*ait)->createClone(this, SceneManager); + if (anim) + { + addAnimator(anim); + anim->drop(); + } + } + } + + //! Sets the new scene manager for this node and all children. + //! Called by addChild when moving nodes between scene managers + void setSceneManager(ISceneManager* newManager) + { + SceneManager = newManager; + + ISceneNodeList::Iterator it = Children.begin(); + for (; it != Children.end(); ++it) + (*it)->setSceneManager(newManager); + } + + //! Name of the scene node. + core::stringc Name; + + //! Absolute transformation of the node. + core::matrix4 AbsoluteTransformation; + + //! Relative translation of the scene node. + core::vector3df RelativeTranslation; + + //! Relative rotation of the scene node. + core::vector3df RelativeRotation; + + //! Relative scale of the scene node. + core::vector3df RelativeScale; + + //! Pointer to the parent + ISceneNode* Parent; + + //! List of all children of this node + core::list Children; + + //! List of all animator nodes + core::list Animators; + + //! Pointer to the scene manager + ISceneManager* SceneManager; + + //! Pointer to the triangle selector + ITriangleSelector* TriangleSelector; + + //! ID of the node. + s32 ID; + + //! Automatic culling state + u32 AutomaticCullingState; + + //! Flag if debug data should be drawn, such as Bounding Boxes. + u32 DebugDataVisible; + + //! Is the node visible? + bool IsVisible; + + //! Is debug object? + bool IsDebugObject; + }; + + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/ISceneNodeAnimator.h b/inc/ISceneNodeAnimator.h new file mode 100644 index 0000000..c69474b --- /dev/null +++ b/inc/ISceneNodeAnimator.h @@ -0,0 +1,78 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_SCENE_NODE_ANIMATOR_H_INCLUDED__ +#define __I_SCENE_NODE_ANIMATOR_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "vector3d.h" +#include "ESceneNodeAnimatorTypes.h" +#include "IAttributeExchangingObject.h" +#include "IEventReceiver.h" + +namespace irr +{ +namespace io +{ + class IAttributes; +} // end namespace io +namespace scene +{ + class ISceneNode; + class ISceneManager; + + //! Animates a scene node. Can animate position, rotation, material, and so on. + /** A scene node animator is able to animate a scene node in a very simple way. It may + change its position, rotation, scale and/or material. There are lots of animators + to choose from. You can create scene node animators with the ISceneManager interface. + */ + class ISceneNodeAnimator : public io::IAttributeExchangingObject, public IEventReceiver + { + public: + //! Animates a scene node. + /** \param node Node to animate. + \param timeMs Current time in milli seconds. */ + virtual void animateNode(ISceneNode* node, u32 timeMs) =0; + + //! Creates a clone of this animator. + /** Please note that you will have to drop + (IReferenceCounted::drop()) the returned pointer after calling this. */ + virtual ISceneNodeAnimator* createClone(ISceneNode* node, + ISceneManager* newManager=0) =0; + + //! Returns true if this animator receives events. + /** When attached to an active camera, this animator will be + able to respond to events such as mouse and keyboard events. */ + virtual bool isEventReceiverEnabled() const + { + return false; + } + + //! Event receiver, override this function for camera controlling animators + virtual bool OnEvent(const SEvent& event) + { + return false; + } + + //! Returns type of the scene node animator + virtual ESCENE_NODE_ANIMATOR_TYPE getType() const + { + return ESNAT_UNKNOWN; + } + + //! Returns if the animator has finished. + /** This is only valid for non-looping animators with a discrete end state. + \return true if the animator has finished, false if it is still running. */ + virtual bool hasFinished(void) const + { + return false; + } + }; + + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/ISceneNodeAnimatorCameraFPS.h b/inc/ISceneNodeAnimatorCameraFPS.h new file mode 100644 index 0000000..adfe9e9 --- /dev/null +++ b/inc/ISceneNodeAnimatorCameraFPS.h @@ -0,0 +1,69 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_SCENE_NODE_ANIMATOR_CAMERA_FPS_H_INCLUDED__ +#define __I_SCENE_NODE_ANIMATOR_CAMERA_FPS_H_INCLUDED__ + +#include "ISceneNodeAnimator.h" +#include "IEventReceiver.h" +#include "irrArray.h" + +namespace irr +{ + struct SKeyMap; + +namespace scene +{ + + //! Special scene node animator for FPS cameras + /** This scene node animator can be attached to a camera to make it act + like a first person shooter + */ + class ISceneNodeAnimatorCameraFPS : public ISceneNodeAnimator + { + public: + + //! Returns the speed of movement in units per millisecond + virtual f32 getMoveSpeed() const = 0; + + //! Sets the speed of movement in units per millisecond + virtual void setMoveSpeed(f32 moveSpeed) = 0; + + //! Returns the rotation speed in degrees + /** The degrees are equivalent to a half screen movement of the mouse, + i.e. if the mouse cursor had been moved to the border of the screen since + the last animation. */ + virtual f32 getRotateSpeed() const = 0; + + //! Set the rotation speed in degrees + virtual void setRotateSpeed(f32 rotateSpeed) = 0; + + //! Sets the keyboard mapping for this animator (old style) + /** \param map Array of keyboard mappings, see irr::SKeyMap + \param count Size of the keyboard map array. */ + virtual void setKeyMap(SKeyMap *map, u32 count) = 0; + + //! Sets the keyboard mapping for this animator + //! \param keymap The new keymap array + virtual void setKeyMap(const core::array& keymap) = 0; + + //! Gets the keyboard mapping for this animator + virtual const core::array& getKeyMap() const = 0; + + //! Sets whether vertical movement should be allowed. + /** If vertical movement is enabled then the camera may fight with + gravity causing camera shake. Disable this if the camera has + a collision animator with gravity enabled. */ + virtual void setVerticalMovement(bool allow) = 0; + + //! Sets whether the Y axis of the mouse should be inverted. + /** If enabled then moving the mouse down will cause + the camera to look up. It is disabled by default. */ + virtual void setInvertMouse(bool invert) = 0; + }; +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/ISceneNodeAnimatorCameraMaya.h b/inc/ISceneNodeAnimatorCameraMaya.h new file mode 100644 index 0000000..ebee950 --- /dev/null +++ b/inc/ISceneNodeAnimatorCameraMaya.h @@ -0,0 +1,58 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_SCENE_NODE_ANIMATOR_CAMERA_MAYA_H_INCLUDED__ +#define __I_SCENE_NODE_ANIMATOR_CAMERA_MAYA_H_INCLUDED__ + +#include "ISceneNodeAnimator.h" + +namespace irr +{ + +namespace scene +{ + + //! Special scene node animator for Maya-style cameras + /** This scene node animator can be attached to a camera to make it act like a 3d + modelling tool. + The camera is moving relative to the target with the mouse, by pressing either + of the three buttons. + In order to move the camera, set a new target for the camera. The distance defines + the current orbit radius the camera moves on. Distance can be changed via the setter + or by mouse events. + */ + class ISceneNodeAnimatorCameraMaya : public ISceneNodeAnimator + { + public: + + //! Returns the speed of movement + virtual f32 getMoveSpeed() const = 0; + + //! Sets the speed of movement + virtual void setMoveSpeed(f32 moveSpeed) = 0; + + //! Returns the rotation speed + virtual f32 getRotateSpeed() const = 0; + + //! Set the rotation speed + virtual void setRotateSpeed(f32 rotateSpeed) = 0; + + //! Returns the zoom speed + virtual f32 getZoomSpeed() const = 0; + + //! Set the zoom speed + virtual void setZoomSpeed(f32 zoomSpeed) = 0; + + //! Returns the current distance, i.e. orbit radius + virtual f32 getDistance() const = 0; + + //! Set the distance + virtual void setDistance(f32 distance) = 0; + }; + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/ISceneNodeAnimatorCollisionResponse.h b/inc/ISceneNodeAnimatorCollisionResponse.h new file mode 100644 index 0000000..e2bba8a --- /dev/null +++ b/inc/ISceneNodeAnimatorCollisionResponse.h @@ -0,0 +1,171 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_SCENE_NODE_ANIMATOR_COLLISION_RESPONSE_H_INCLUDED__ +#define __I_SCENE_NODE_ANIMATOR_COLLISION_RESPONSE_H_INCLUDED__ + +#include "ISceneNode.h" + +namespace irr +{ +namespace scene +{ + + class ISceneNodeAnimatorCollisionResponse; + + //! Callback interface for catching events of collisions. + /** Implement this interface and use + ISceneNodeAnimatorCollisionResponse::setCollisionCallback to be able to + be notified if a collision has occurred. + **/ + class ICollisionCallback : public virtual IReferenceCounted + { + public: + + //! Will be called when a collision occurrs. + /** See ISceneNodeAnimatorCollisionResponse::setCollisionCallback for more information. + \param animator: Collision response animator in which the collision occurred. You can call + this animator's methods to find the node, collisionPoint and/or collision triangle. + \retval true if the collision was handled in the animator. The animator's target + node will *not* be stopped at the collision point, but will instead move fully + to the location that triggered the collision check. + \retval false if the collision was not handled in the animator. The animator's + target node will be moved to the collision position. + */ + virtual bool onCollision(const ISceneNodeAnimatorCollisionResponse& animator) = 0; + }; + + //! Special scene node animator for doing automatic collision detection and response. + /** This scene node animator can be attached to any single scene node + and will then prevent it from moving through specified collision geometry + (e.g. walls and floors of the) world, as well as having it fall under gravity. + This animator provides a simple implementation of first person shooter cameras. + Attach it to a camera, and the camera will behave as the player control in a + first person shooter game: The camera stops and slides at walls, walks up stairs, + falls down if there is no floor under it, and so on. + + The animator will treat any change in the position of its target scene + node as movement, including a setPosition(), as movement. If you want to + teleport the target scene node manually to a location without it being effected + by collision geometry, then call setTargetNode(node) after calling node->setPosition(). + */ + class ISceneNodeAnimatorCollisionResponse : public ISceneNodeAnimator + { + public: + + //! Destructor + virtual ~ISceneNodeAnimatorCollisionResponse() {} + + //! Check if the attached scene node is falling. + /** Falling means that there is no blocking wall from the scene + node in the direction of the gravity. The implementation of + this method is very fast, no collision detection is done when + invoking it. + \return True if the scene node is falling, false if not. */ + virtual bool isFalling() const = 0; + + //! Sets the radius of the ellipsoid for collision detection and response. + /** If you have a scene node, and you are unsure about how big + the radius should be, you could use the following code to + determine it: + \code + core::aabbox box = yourSceneNode->getBoundingBox(); + core::vector3df radius = box.MaxEdge - box.getCenter(); + \endcode + \param radius: New radius of the ellipsoid. */ + virtual void setEllipsoidRadius(const core::vector3df& radius) = 0; + + //! Returns the radius of the ellipsoid for collision detection and response. + /** \return Radius of the ellipsoid. */ + virtual core::vector3df getEllipsoidRadius() const = 0; + + //! Sets the gravity of the environment. + /** A good example value would be core::vector3df(0,-100.0f,0) + for letting gravity affect all object to fall down. For bigger + gravity, make increase the length of the vector. You can + disable gravity by setting it to core::vector3df(0,0,0); + \param gravity: New gravity vector. */ + virtual void setGravity(const core::vector3df& gravity) = 0; + + //! Get current vector of gravity. + //! \return Gravity vector. */ + virtual core::vector3df getGravity() const = 0; + + //! 'Jump' the animator, by adding a jump speed opposite to its gravity + /** \param jumpSpeed The initial speed of the jump; the velocity will be opposite + to this animator's gravity vector. */ + virtual void jump(f32 jumpSpeed) = 0; + + //! Should the Target react on collision ( default = true ) + virtual void setAnimateTarget ( bool enable ) = 0; + virtual bool getAnimateTarget () const = 0; + + //! Set translation of the collision ellipsoid. + /** By default, the ellipsoid for collision detection is + created around the center of the scene node, which means that + the ellipsoid surrounds it completely. If this is not what you + want, you may specify a translation for the ellipsoid. + \param translation: Translation of the ellipsoid relative + to the position of the scene node. */ + virtual void setEllipsoidTranslation(const core::vector3df &translation) = 0; + + //! Get the translation of the ellipsoid for collision detection. + /** See + ISceneNodeAnimatorCollisionResponse::setEllipsoidTranslation() + for more details. + \return Translation of the ellipsoid relative to the position + of the scene node. */ + virtual core::vector3df getEllipsoidTranslation() const = 0; + + //! Sets a triangle selector holding all triangles of the world with which the scene node may collide. + /** \param newWorld: New triangle selector containing triangles + to let the scene node collide with. */ + virtual void setWorld(ITriangleSelector* newWorld) = 0; + + //! Get the current triangle selector containing all triangles for collision detection. + virtual ITriangleSelector* getWorld() const = 0; + + //! Set the single node that this animator will act on. + /** \param node The new target node. Setting this will force the animator to update + its last target position for the node, allowing setPosition() to teleport + the node through collision geometry. */ + virtual void setTargetNode(ISceneNode * node) = 0; + + //! Gets the single node that this animator is acting on. + /** \return The node that this animator is acting on. */ + virtual ISceneNode* getTargetNode(void) const = 0; + + //! Returns true if a collision occurred during the last animateNode() + virtual bool collisionOccurred() const = 0; + + //! Returns the last point of collision. + virtual const core::vector3df & getCollisionPoint() const = 0; + + //! Returns the last triangle that caused a collision + virtual const core::triangle3df & getCollisionTriangle() const = 0; + + //! Returns the position that the target node will be moved to, unless the collision is consumed in a callback. + /** + If you have a collision callback registered, and it consumes the collision, then the + node will ignore the collision and will not stop at this position. Instead, it will + move fully to the position that caused the collision to occur. */ + virtual const core::vector3df & getCollisionResultPosition(void) const = 0; + + //! Returns the node that was collided with. + virtual ISceneNode* getCollisionNode(void) const = 0; + + //! Sets a callback interface which will be called if a collision occurs. + /** \param callback: collision callback handler that will be called when a collision + occurs. Set this to 0 to disable the callback. + */ + virtual void setCollisionCallback(ICollisionCallback* callback) = 0; + + }; + + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/ISceneNodeAnimatorFactory.h b/inc/ISceneNodeAnimatorFactory.h new file mode 100644 index 0000000..8afe3ef --- /dev/null +++ b/inc/ISceneNodeAnimatorFactory.h @@ -0,0 +1,69 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_SCENE_NODE_ANIMATOR_FACTORY_H_INCLUDED__ +#define __I_SCENE_NODE_ANIMATOR_FACTORY_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "ESceneNodeAnimatorTypes.h" + +namespace irr +{ +namespace scene +{ + class ISceneNode; + class ISceneNodeAnimator; + + //! Interface for dynamic creation of scene node animators + /** To be able to add custom scene node animators to Irrlicht and to make it possible for the + scene manager to save and load those external animators, simply implement this + interface and register it in you scene manager via ISceneManager::registerSceneNodeAnimatorFactory. + Note: When implementing your own scene node factory, don't call ISceneNodeManager::grab() to + increase the reference counter of the scene node manager. This is not necessary because the + scene node manager will grab() the factory anyway, and otherwise cyclic references will + be created and the scene manager and all its nodes won't get deallocated. + */ + class ISceneNodeAnimatorFactory : public virtual IReferenceCounted + { + public: + + //! creates a scene node animator based on its type id + /** \param type: Type of the scene node animator to add. + \param target: Target scene node of the new animator. + \return Returns pointer to the new scene node animator or null if not successful. You need to + drop this pointer after calling this, see IReferenceCounted::drop() for details. */ + virtual ISceneNodeAnimator* createSceneNodeAnimator(ESCENE_NODE_ANIMATOR_TYPE type, ISceneNode* target) = 0; + + //! creates a scene node animator based on its type name + /** \param typeName: Type of the scene node animator to add. + \param target: Target scene node of the new animator. + \return Returns pointer to the new scene node animator or null if not successful. You need to + drop this pointer after calling this, see IReferenceCounted::drop() for details. */ + virtual ISceneNodeAnimator* createSceneNodeAnimator(const c8* typeName, ISceneNode* target) = 0; + + //! returns amount of scene node animator types this factory is able to create + virtual u32 getCreatableSceneNodeAnimatorTypeCount() const = 0; + + //! returns type of a createable scene node animator type + /** \param idx: Index of scene node animator type in this factory. Must be a value between 0 and + getCreatableSceneNodeTypeCount() */ + virtual ESCENE_NODE_ANIMATOR_TYPE getCreateableSceneNodeAnimatorType(u32 idx) const = 0; + + //! returns type name of a createable scene node animator type + /** \param idx: Index of scene node animator type in this factory. Must be a value between 0 and + getCreatableSceneNodeAnimatorTypeCount() */ + virtual const c8* getCreateableSceneNodeAnimatorTypeName(u32 idx) const = 0; + + //! returns type name of a createable scene node animator type + /** \param type: Type of scene node animator. + \return: Returns name of scene node animator type if this factory can create the type, otherwise 0. */ + virtual const c8* getCreateableSceneNodeAnimatorTypeName(ESCENE_NODE_ANIMATOR_TYPE type) const = 0; + }; + + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/ISceneNodeFactory.h b/inc/ISceneNodeFactory.h new file mode 100644 index 0000000..247b47b --- /dev/null +++ b/inc/ISceneNodeFactory.h @@ -0,0 +1,68 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_SCENE_NODE_FACTORY_H_INCLUDED__ +#define __I_SCENE_NODE_FACTORY_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "ESceneNodeTypes.h" + +namespace irr +{ + +namespace scene +{ + class ISceneNode; + + //! Interface for dynamic creation of scene nodes + /** To be able to add custom scene nodes to Irrlicht and to make it possible for the + scene manager to save and load those external scene nodes, simply implement this + interface and register it in you scene manager via ISceneManager::registerSceneNodeFactory. + Note: When implementing your own scene node factory, don't call ISceneNodeManager::grab() to + increase the reference counter of the scene node manager. This is not necessary because the + scene node manager will grab() the factory anyway, and otherwise cyclic references will + be created and the scene manager and all its nodes won't get deallocated. + */ + class ISceneNodeFactory : public virtual IReferenceCounted + { + public: + //! adds a scene node to the scene graph based on its type id + /** \param type: Type of the scene node to add. + \param parent: Parent scene node of the new node, can be null to add the scene node to the root. + \return Returns pointer to the new scene node or null if not successful. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual ISceneNode* addSceneNode(ESCENE_NODE_TYPE type, ISceneNode* parent=0) = 0; + + //! adds a scene node to the scene graph based on its type name + /** \param typeName: Type name of the scene node to add. + \param parent: Parent scene node of the new node, can be null to add the scene node to the root. + \return Returns pointer to the new scene node or null if not successful. + This pointer should not be dropped. See IReferenceCounted::drop() for more information. */ + virtual ISceneNode* addSceneNode(const c8* typeName, ISceneNode* parent=0) = 0; + + //! returns amount of scene node types this factory is able to create + virtual u32 getCreatableSceneNodeTypeCount() const = 0; + + //! returns type of a createable scene node type + /** \param idx: Index of scene node type in this factory. Must be a value between 0 and + getCreatableSceneNodeTypeCount() */ + virtual ESCENE_NODE_TYPE getCreateableSceneNodeType(u32 idx) const = 0; + + //! returns type name of a createable scene node type by index + /** \param idx: Index of scene node type in this factory. Must be a value between 0 and + getCreatableSceneNodeTypeCount() */ + virtual const c8* getCreateableSceneNodeTypeName(u32 idx) const = 0; + + //! returns type name of a createable scene node type + /** \param type: Type of scene node. + \return: Returns name of scene node type if this factory can create the type, otherwise 0. */ + virtual const c8* getCreateableSceneNodeTypeName(ESCENE_NODE_TYPE type) const = 0; + }; + + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/ISceneUserDataSerializer.h b/inc/ISceneUserDataSerializer.h new file mode 100644 index 0000000..0e63440 --- /dev/null +++ b/inc/ISceneUserDataSerializer.h @@ -0,0 +1,51 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_SCENE_USER_DATA_SERIALIZER_H_INCLUDED__ +#define __I_SCENE_USER_DATA_SERIALIZER_H_INCLUDED__ + +#include "IReferenceCounted.h" + +namespace irr +{ +namespace io +{ + class IAttributes; +} // end namespace io +namespace scene +{ + class ISceneNode; + +//! Interface to read and write user data to and from .irr files. +/** This interface is to be implemented by the user, to make it possible to read +and write user data when reading or writing .irr files via ISceneManager. +To be used with ISceneManager::loadScene() and ISceneManager::saveScene() */ +class ISceneUserDataSerializer +{ +public: + + virtual ~ISceneUserDataSerializer() {} + + //! Called when the scene manager create a scene node while loading a file. + virtual void OnCreateNode(ISceneNode* node) = 0; + + //! Called when the scene manager read a scene node while loading a file. + /** The userData pointer contains a list of attributes with userData which + were attached to the scene node in the read scene file.*/ + virtual void OnReadUserData(ISceneNode* forSceneNode, io::IAttributes* userData) = 0; + + //! Called when the scene manager is writing a scene node to an xml file for example. + /** Implement this method and return a list of attributes containing the user data + you want to be saved together with the scene node. Return 0 if no user data should + be added. Please note that the scene manager will call drop() to the returned pointer + after it no longer needs it, so if you didn't create a new object for the return value + and returning a longer existing IAttributes object, simply call grab() before returning it. */ + virtual io::IAttributes* createUserData(ISceneNode* forSceneNode) = 0; +}; + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/IShaderConstantSetCallBack.h b/inc/IShaderConstantSetCallBack.h new file mode 100644 index 0000000..f88393f --- /dev/null +++ b/inc/IShaderConstantSetCallBack.h @@ -0,0 +1,85 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_SHADER_CONSTANT_SET_CALLBACT_H_INCLUDED__ +#define __I_SHADER_CONSTANT_SET_CALLBACT_H_INCLUDED__ + +#include "IReferenceCounted.h" + +namespace irr +{ +namespace video +{ + class IMaterialRendererServices; + class SMaterial; + +//! Interface making it possible to set constants for gpu programs every frame. +/** Implement this interface in an own class and pass a pointer to it to one of +the methods in IGPUProgrammingServices when creating a shader. The +OnSetConstants method will be called every frame now. */ +class IShaderConstantSetCallBack : public virtual IReferenceCounted +{ +public: + + //! Called to let the callBack know the used material (optional method) + /** + \code + class MyCallBack : public IShaderConstantSetCallBack + { + const video::SMaterial *UsedMaterial; + + OnSetMaterial(const video::SMaterial& material) + { + UsedMaterial=&material; + } + + OnSetConstants(IMaterialRendererServices* services, s32 userData) + { + services->setVertexShaderConstant("myColor", reinterpret_cast(&UsedMaterial->color), 4); + } + } + \endcode + */ + virtual void OnSetMaterial(const SMaterial& material) { } + + //! Called by the engine when the vertex and/or pixel shader constants for an material renderer should be set. + /** + Implement the IShaderConstantSetCallBack in an own class and implement your own + OnSetConstants method using the given IMaterialRendererServices interface. + Pass a pointer to this class to one of the methods in IGPUProgrammingServices + when creating a shader. The OnSetConstants method will now be called every time + before geometry is being drawn using your shader material. A sample implementation + would look like this: + \code + virtual void OnSetConstants(video::IMaterialRendererServices* services, s32 userData) + { + video::IVideoDriver* driver = services->getVideoDriver(); + + // set clip matrix at register 4 + core::matrix4 worldViewProj(driver->getTransform(video::ETS_PROJECTION)); + worldViewProj *= driver->getTransform(video::ETS_VIEW); + worldViewProj *= driver->getTransform(video::ETS_WORLD); + services->setVertexShaderConstant(&worldViewProj.M[0], 4, 4); + // for high level shading languages, this would be another solution: + //services->setVertexShaderConstant("mWorldViewProj", worldViewProj.M, 16); + + // set some light color at register 9 + video::SColorf col(0.0f,1.0f,1.0f,0.0f); + services->setVertexShaderConstant(reinterpret_cast(&col), 9, 1); + // for high level shading languages, this would be another solution: + //services->setVertexShaderConstant("myColor", reinterpret_cast(&col), 4); + } + \endcode + \param services: Pointer to an interface providing methods to set the constants for the shader. + \param userData: Userdata int which can be specified when creating the shader. + */ + virtual void OnSetConstants(IMaterialRendererServices* services, s32 userData) = 0; +}; + + +} // end namespace video +} // end namespace irr + +#endif + diff --git a/inc/IShadowVolumeSceneNode.h b/inc/IShadowVolumeSceneNode.h new file mode 100644 index 0000000..40781a9 --- /dev/null +++ b/inc/IShadowVolumeSceneNode.h @@ -0,0 +1,38 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_SHADOW_VOLUME_SCENE_NODE_H_INCLUDED__ +#define __I_SHADOW_VOLUME_SCENE_NODE_H_INCLUDED__ + +#include "ISceneNode.h" + +namespace irr +{ +namespace scene +{ + class IMesh; + + //! Scene node for rendering a shadow volume into a stencil buffer. + class IShadowVolumeSceneNode : public ISceneNode + { + public: + + //! constructor + IShadowVolumeSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id) + : ISceneNode(parent, mgr, id) {} + + //! Sets the mesh from which the shadow volume should be generated. + /** To optimize shadow rendering, use a simpler mesh for shadows. + */ + virtual void setShadowMesh(const IMesh* mesh) = 0; + + //! Updates the shadow volumes for current light positions. + virtual void updateShadowVolumes() = 0; + }; + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/ISkinnedMesh.h b/inc/ISkinnedMesh.h new file mode 100644 index 0000000..5f0f9cb --- /dev/null +++ b/inc/ISkinnedMesh.h @@ -0,0 +1,219 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_SKINNED_MESH_H_INCLUDED__ +#define __I_SKINNED_MESH_H_INCLUDED__ + +#include "irrArray.h" +#include "IBoneSceneNode.h" +#include "IAnimatedMesh.h" +#include "SSkinMeshBuffer.h" + +namespace irr +{ +namespace scene +{ + + enum E_INTERPOLATION_MODE + { + // constant does use the current key-values without interpolation + EIM_CONSTANT = 0, + + // linear interpolation + EIM_LINEAR, + + //! count of all available interpolation modes + EIM_COUNT + }; + + + //! Interface for using some special functions of Skinned meshes + class ISkinnedMesh : public IAnimatedMesh + { + public: + + //! Gets joint count. + /** \return Amount of joints in the skeletal animated mesh. */ + virtual u32 getJointCount() const = 0; + + //! Gets the name of a joint. + /** \param number: Zero based index of joint. The last joint + has the number getJointCount()-1; + \return Name of joint and null if an error happened. */ + virtual const c8* getJointName(u32 number) const = 0; + + //! Gets a joint number from its name + /** \param name: Name of the joint. + \return Number of the joint or -1 if not found. */ + virtual s32 getJointNumber(const c8* name) const = 0; + + //! Use animation from another mesh + /** The animation is linked (not copied) based on joint names + so make sure they are unique. + \return True if all joints in this mesh were + matched up (empty names will not be matched, and it's case + sensitive). Unmatched joints will not be animated. */ + virtual bool useAnimationFrom(const ISkinnedMesh *mesh) = 0; + + //! Update Normals when Animating + /** \param on If false don't animate, which is faster. + Else update normals, which allows for proper lighting of + animated meshes. */ + virtual void updateNormalsWhenAnimating(bool on) = 0; + + //! Sets Interpolation Mode + virtual void setInterpolationMode(E_INTERPOLATION_MODE mode) = 0; + + //! Animates this mesh's joints based on frame input + virtual void animateMesh(f32 frame, f32 blend)=0; + + //! Preforms a software skin on this mesh based of joint positions + virtual void skinMesh() = 0; + + //! converts the vertex type of all meshbuffers to tangents. + /** E.g. used for bump mapping. */ + virtual void convertMeshToTangents() = 0; + + //! Allows to enable hardware skinning. + /* This feature is not implementated in Irrlicht yet */ + virtual bool setHardwareSkinning(bool on) = 0; + + //! A vertex weight + struct SWeight + { + //! Index of the mesh buffer + u16 buffer_id; //I doubt 32bits is needed + + //! Index of the vertex + u32 vertex_id; //Store global ID here + + //! Weight Strength/Percentage (0-1) + f32 strength; + + private: + //! Internal members used by CSkinnedMesh + friend class CSkinnedMesh; + bool *Moved; + core::vector3df StaticPos; + core::vector3df StaticNormal; + }; + + + //! Animation keyframe which describes a new position + struct SPositionKey + { + f32 frame; + core::vector3df position; + }; + + //! Animation keyframe which describes a new scale + struct SScaleKey + { + f32 frame; + core::vector3df scale; + }; + + //! Animation keyframe which describes a new rotation + struct SRotationKey + { + f32 frame; + core::quaternion rotation; + }; + + //! Joints + struct SJoint + { + SJoint() : UseAnimationFrom(0), GlobalSkinningSpace(false), + positionHint(-1),scaleHint(-1),rotationHint(-1) + { + } + + //! The name of this joint + core::stringc Name; + + //! Local matrix of this joint + core::matrix4 LocalMatrix; + + //! List of child joints + core::array Children; + + //! List of attached meshes + core::array AttachedMeshes; + + //! Animation keys causing translation change + core::array PositionKeys; + + //! Animation keys causing scale change + core::array ScaleKeys; + + //! Animation keys causing rotation change + core::array RotationKeys; + + //! Skin weights + core::array Weights; + + //! Unnecessary for loaders, will be overwritten on finalize + core::matrix4 GlobalMatrix; + core::matrix4 GlobalAnimatedMatrix; + core::matrix4 LocalAnimatedMatrix; + core::vector3df Animatedposition; + core::vector3df Animatedscale; + core::quaternion Animatedrotation; + + core::matrix4 GlobalInversedMatrix; //the x format pre-calculates this + + private: + //! Internal members used by CSkinnedMesh + friend class CSkinnedMesh; + + SJoint *UseAnimationFrom; + bool GlobalSkinningSpace; + + s32 positionHint; + s32 scaleHint; + s32 rotationHint; + }; + + + //Interface for the mesh loaders (finalize should lock these functions, and they should have some prefix like loader_ + + //these functions will use the needed arrays, set values, etc to help the loaders + + //! exposed for loaders: to add mesh buffers + virtual core::array& getMeshBuffers() = 0; + + //! exposed for loaders: joints list + virtual core::array& getAllJoints() = 0; + + //! exposed for loaders: joints list + virtual const core::array& getAllJoints() const = 0; + + //! loaders should call this after populating the mesh + virtual void finalize() = 0; + + //! Adds a new meshbuffer to the mesh, access it as last one + virtual SSkinMeshBuffer* addMeshBuffer() = 0; + + //! Adds a new joint to the mesh, access it as last one + virtual SJoint* addJoint(SJoint *parent=0) = 0; + + //! Adds a new weight to the mesh, access it as last one + virtual SWeight* addWeight(SJoint *joint) = 0; + + //! Adds a new position key to the mesh, access it as last one + virtual SPositionKey* addPositionKey(SJoint *joint) = 0; + //! Adds a new scale key to the mesh, access it as last one + virtual SScaleKey* addScaleKey(SJoint *joint) = 0; + //! Adds a new rotation key to the mesh, access it as last one + virtual SRotationKey* addRotationKey(SJoint *joint) = 0; + + //! Check if the mesh is non-animated + virtual bool isStatic()=0; + }; + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/ITerrainSceneNode.h b/inc/ITerrainSceneNode.h new file mode 100644 index 0000000..4802710 --- /dev/null +++ b/inc/ITerrainSceneNode.h @@ -0,0 +1,182 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +// The code for the TerrainSceneNode is based on the terrain renderer by +// Soconne and the GeoMipMapSceneNode developed by Spintz. They made their +// code available for Irrlicht and allowed it to be distributed under this +// licence. I only modified some parts. A lot of thanks go to them. + +#ifndef __I_TERRAIN_SCENE_NODE_H__ +#define __I_TERRAIN_SCENE_NODE_H__ + +#include "ETerrainElements.h" +#include "ISceneNode.h" +#include "IDynamicMeshBuffer.h" +#include "irrArray.h" + +namespace irr +{ +namespace io +{ + class IReadFile; +} // end namespace io +namespace scene +{ + class IMesh; + + //! A scene node for displaying terrain using the geo mip map algorithm. + /** The code for the TerrainSceneNode is based on the Terrain renderer by Soconne and + * the GeoMipMapSceneNode developed by Spintz. They made their code available for Irrlicht + * and allowed it to be distributed under this licence. I only modified some parts. + * A lot of thanks go to them. + * + * This scene node is capable of very quickly loading + * terrains and updating the indices at runtime to enable viewing very large terrains. It uses a + * CLOD (Continuous Level of Detail) algorithm which updates the indices for each patch based on + * a LOD (Level of Detail) which is determined based on a patch's distance from the camera. + * + * The Patch Size of the terrain must always be a size of ( 2^N+1, i.e. 8+1(9), 16+1(17), etc. ). + * The MaxLOD available is directly dependent on the patch size of the terrain. LOD 0 contains all + * of the indices to draw all the triangles at the max detail for a patch. As each LOD goes up by 1 + * the step taken, in generating indices increases by - 2^LOD, so for LOD 1, the step taken is 2, for + * LOD 2, the step taken is 4, LOD 3 - 8, etc. The step can be no larger than the size of the patch, + * so having a LOD of 8, with a patch size of 17, is asking the algoritm to generate indices every + * 2^8 ( 256 ) vertices, which is not possible with a patch size of 17. The maximum LOD for a patch + * size of 17 is 2^4 ( 16 ). So, with a MaxLOD of 5, you'll have LOD 0 ( full detail ), LOD 1 ( every + * 2 vertices ), LOD 2 ( every 4 vertices ), LOD 3 ( every 8 vertices ) and LOD 4 ( every 16 vertices ). + **/ + class ITerrainSceneNode : public ISceneNode + { + public: + //! Constructor + ITerrainSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id, + const core::vector3df& position = core::vector3df(0.0f, 0.0f, 0.0f), + const core::vector3df& rotation = core::vector3df(0.0f, 0.0f, 0.0f), + const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f) ) + : ISceneNode (parent, mgr, id, position, rotation, scale) {} + + //! Get the bounding box of the terrain. + /** \return The bounding box of the entire terrain. */ + virtual const core::aabbox3d& getBoundingBox() const =0; + + //! Get the bounding box of a patch + /** \return The bounding box of the chosen patch. */ + virtual const core::aabbox3d& getBoundingBox(s32 patchX, s32 patchZ) const =0; + + //! Get the number of indices currently in the meshbuffer + /** \return The index count. */ + virtual u32 getIndexCount() const =0; + + //! Get pointer to the mesh + /** \return Pointer to the mesh. */ + virtual IMesh* getMesh() =0; + + //! Get pointer to the buffer used by the terrain (most users will not need this) + virtual IMeshBuffer* getRenderBuffer() =0; + + + //! Gets the meshbuffer data based on a specified level of detail. + /** \param mb A reference to an IDynamicMeshBuffer object + \param LOD The level of detail you want the indices from. */ + virtual void getMeshBufferForLOD(IDynamicMeshBuffer& mb, s32 LOD=0) const =0; + + //! Gets the indices for a specified patch at a specified Level of Detail. + /** \param indices A reference to an array of u32 indices. + \param patchX Patch x coordinate. + \param patchZ Patch z coordinate. + \param LOD The level of detail to get for that patch. If -1, + then get the CurrentLOD. If the CurrentLOD is set to -1, + meaning it's not shown, then it will retrieve the triangles at + the highest LOD (0). + \return Number of indices put into the buffer. */ + virtual s32 getIndicesForPatch(core::array& indices, + s32 patchX, s32 patchZ, s32 LOD=0) =0; + + //! Populates an array with the CurrentLOD of each patch. + /** \param LODs A reference to a core::array to hold the + values + \return Number of elements in the array */ + virtual s32 getCurrentLODOfPatches(core::array& LODs) const =0; + + //! Manually sets the LOD of a patch + /** \param patchX Patch x coordinate. + \param patchZ Patch z coordinate. + \param LOD The level of detail to set the patch to. */ + virtual void setLODOfPatch(s32 patchX, s32 patchZ, s32 LOD=0) =0; + + //! Get center of terrain. + virtual const core::vector3df& getTerrainCenter() const =0; + + //! Get height of a point of the terrain. + virtual f32 getHeight(f32 x, f32 y) const =0; + + //! Sets the movement camera threshold. + /** It is used to determine when to recalculate + indices for the scene node. The default value is 10.0f. */ + virtual void setCameraMovementDelta(f32 delta) =0; + + //! Sets the rotation camera threshold. + /** It is used to determine when to recalculate + indices for the scene node. The default value is 1.0f. */ + virtual void setCameraRotationDelta(f32 delta) =0; + + //! Sets whether or not the node should dynamically update its associated selector when the geomipmap data changes. + /** \param bVal: Boolean value representing whether or not to update selector dynamically. */ + virtual void setDynamicSelectorUpdate(bool bVal) =0; + + //! Override the default generation of distance thresholds. + /** For determining the LOD a patch is rendered at. If any LOD + is overridden, then the scene node will no longer apply scaling + factors to these values. If you override these distances, and + then apply a scale to the scene node, it is your responsibility + to update the new distances to work best with your new terrain + size. */ + virtual bool overrideLODDistance(s32 LOD, f64 newDistance) =0; + + //! Scales the base texture, similar to makePlanarTextureMapping. + /** \param scale The scaling amount. Values above 1.0 + increase the number of time the texture is drawn on the + terrain. Values below 0 will decrease the number of times the + texture is drawn on the terrain. Using negative values will + flip the texture, as well as still scaling it. + \param scale2 If set to 0 (default value), this will set the + second texture coordinate set to the same values as in the + first set. If this is another value than zero, it will scale + the second texture coordinate set by this value. */ + virtual void scaleTexture(f32 scale = 1.0f, f32 scale2=0.0f) =0; + + //! Initializes the terrain data. Loads the vertices from the heightMapFile. + /** The file must contain a loadable image of the heightmap. The heightmap + must be square. + \param file The file to read the image from. File is not rewinded. + \param vertexColor Color of all vertices. + \param smoothFactor Number of smoothing passes. */ + virtual bool loadHeightMap(io::IReadFile* file, + video::SColor vertexColor=video::SColor(255,255,255,255), + s32 smoothFactor=0) =0; + + //! Initializes the terrain data. Loads the vertices from the heightMapFile. + /** The data is interpreted as (signed) integers of the given bit size or + floats (with 32bits, signed). Allowed bitsizes for integers are + 8, 16, and 32. The heightmap must be square. + \param file The file to read the RAW data from. File is not rewinded. + \param bitsPerPixel Size of data if integers used, for floats always use 32. + \param signedData Whether we use signed or unsigned ints, ignored for floats. + \param floatVals Whether the data is float or int. + \param width Width (and also Height, as it must be square) of the heightmap. Use 0 for autocalculating from the filesize. + \param vertexColor Color of all vertices. + \param smoothFactor Number of smoothing passes. */ + virtual bool loadHeightMapRAW(io::IReadFile* file, s32 bitsPerPixel=16, + bool signedData=false, bool floatVals=false, s32 width=0, + video::SColor vertexColor=video::SColor(255,255,255,255), + s32 smoothFactor=0) =0; + + }; + +} // end namespace scene +} // end namespace irr + + +#endif // __I_TERRAIN_SCENE_NODE_H__ + diff --git a/inc/ITextSceneNode.h b/inc/ITextSceneNode.h new file mode 100644 index 0000000..e715a46 --- /dev/null +++ b/inc/ITextSceneNode.h @@ -0,0 +1,37 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_TEXT_SCENE_NODE_H_INCLUDED__ +#define __I_TEXT_SCENE_NODE_H_INCLUDED__ + +#include "ISceneNode.h" + +namespace irr +{ +namespace scene +{ + +//! A scene node for displaying 2d text at a position in three dimensional space +class ITextSceneNode : public ISceneNode +{ +public: + + //! constructor + ITextSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id, + const core::vector3df& position = core::vector3df(0,0,0)) + : ISceneNode(parent, mgr, id, position) {} + + //! sets the text string + virtual void setText(const wchar_t* text) = 0; + + //! sets the color of the text + virtual void setTextColor(video::SColor color) = 0; +}; + +} // end namespace scene +} // end namespace irr + + +#endif + diff --git a/inc/ITexture.h b/inc/ITexture.h new file mode 100644 index 0000000..66f039d --- /dev/null +++ b/inc/ITexture.h @@ -0,0 +1,219 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_TEXTURE_H_INCLUDED__ +#define __I_TEXTURE_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "IImage.h" +#include "dimension2d.h" +#include "EDriverTypes.h" +#include "path.h" +#include "matrix4.h" + +namespace irr +{ +namespace video +{ + + +//! Enumeration flags telling the video driver in which format textures should be created. +enum E_TEXTURE_CREATION_FLAG +{ + /** Forces the driver to create 16 bit textures always, independent of + which format the file on disk has. When choosing this you may lose + some color detail, but gain much speed and memory. 16 bit textures can + be transferred twice as fast as 32 bit textures and only use half of + the space in memory. + When using this flag, it does not make sense to use the flags + ETCF_ALWAYS_32_BIT, ETCF_OPTIMIZED_FOR_QUALITY, or + ETCF_OPTIMIZED_FOR_SPEED at the same time. */ + ETCF_ALWAYS_16_BIT = 0x00000001, + + /** Forces the driver to create 32 bit textures always, independent of + which format the file on disk has. Please note that some drivers (like + the software device) will ignore this, because they are only able to + create and use 16 bit textures. + When using this flag, it does not make sense to use the flags + ETCF_ALWAYS_16_BIT, ETCF_OPTIMIZED_FOR_QUALITY, or + ETCF_OPTIMIZED_FOR_SPEED at the same time. */ + ETCF_ALWAYS_32_BIT = 0x00000002, + + /** Lets the driver decide in which format the textures are created and + tries to make the textures look as good as possible. Usually it simply + chooses the format in which the texture was stored on disk. + When using this flag, it does not make sense to use the flags + ETCF_ALWAYS_16_BIT, ETCF_ALWAYS_32_BIT, or ETCF_OPTIMIZED_FOR_SPEED at + the same time. */ + ETCF_OPTIMIZED_FOR_QUALITY = 0x00000004, + + /** Lets the driver decide in which format the textures are created and + tries to create them maximizing render speed. + When using this flag, it does not make sense to use the flags + ETCF_ALWAYS_16_BIT, ETCF_ALWAYS_32_BIT, or ETCF_OPTIMIZED_FOR_QUALITY, + at the same time. */ + ETCF_OPTIMIZED_FOR_SPEED = 0x00000008, + + /** Automatically creates mip map levels for the textures. */ + ETCF_CREATE_MIP_MAPS = 0x00000010, + + /** Discard any alpha layer and use non-alpha color format. */ + ETCF_NO_ALPHA_CHANNEL = 0x00000020, + + //! Allow the Driver to use Non-Power-2-Textures + /** BurningVideo can handle Non-Power-2 Textures in 2D (GUI), but not in 3D. */ + ETCF_ALLOW_NON_POWER_2 = 0x00000040, + + /** This flag is never used, it only forces the compiler to compile + these enumeration values to 32 bit. */ + ETCF_FORCE_32_BIT_DO_NOT_USE = 0x7fffffff +}; + +//! Enum for the mode for texture locking. Read-Only, write-only or read/write. +enum E_TEXTURE_LOCK_MODE +{ + //! The default mode. Texture can be read and written to. + ETLM_READ_WRITE = 0, + + //! Read only. The texture is downloaded, but not uploaded again. + /** Often used to read back shader generated textures. */ + ETLM_READ_ONLY, + + //! Write only. The texture is not downloaded and might be uninitialised. + /** The updated texture is uploaded to the GPU. + Used for initialising the shader from the CPU. */ + ETLM_WRITE_ONLY +}; + +//! Interface of a Video Driver dependent Texture. +/** An ITexture is created by an IVideoDriver by using IVideoDriver::addTexture +or IVideoDriver::getTexture. After that, the texture may only be used by this +VideoDriver. As you can imagine, textures of the DirectX and the OpenGL device +will, e.g., not be compatible. An exception is the Software device and the +NULL device, their textures are compatible. If you try to use a texture +created by one device with an other device, the device will refuse to do that +and write a warning or an error message to the output buffer. +*/ +class ITexture : public virtual IReferenceCounted +{ +public: + + //! constructor + ITexture(const io::path& name) : NamedPath(name) + { + } + + //! Lock function. + /** Locks the Texture and returns a pointer to access the + pixels. After lock() has been called and all operations on the pixels + are done, you must call unlock(). + Locks are not accumulating, hence one unlock will do for an arbitrary + number of previous locks. You should avoid locking different levels without + unlocking inbetween, though, because only the last level locked will be + unlocked. + The size of the i-th mipmap level is defined as max(getSize().Width>>i,1) + and max(getSize().Height>>i,1) + \param mode Specifies what kind of changes to the locked texture are + allowed. Unspecified behavior will arise if texture is written in read + only mode or read from in write only mode. + Support for this feature depends on the driver, so don't rely on the + texture being write-protected when locking with read-only, etc. + \param mipmapLevel Number of the mipmapLevel to lock. 0 is main texture. + Non-existing levels will silently fail and return 0. + \return Returns a pointer to the pixel data. The format of the pixel can + be determined by using getColorFormat(). 0 is returned, if + the texture cannot be locked. */ + virtual void* lock(E_TEXTURE_LOCK_MODE mode=ETLM_READ_WRITE, u32 mipmapLevel=0) = 0; + + //! Unlock function. Must be called after a lock() to the texture. + /** One should avoid to call unlock more than once before another lock. + The last locked mip level will be unlocked. */ + virtual void unlock() = 0; + + //! Get original size of the texture. + /** The texture is usually scaled, if it was created with an unoptimal + size. For example if the size was not a power of two. This method + returns the size of the texture it had before it was scaled. Can be + useful when drawing 2d images on the screen, which should have the + exact size of the original texture. Use ITexture::getSize() if you want + to know the real size it has now stored in the system. + \return The original size of the texture. */ + virtual const core::dimension2d& getOriginalSize() const = 0; + + //! Get dimension (=size) of the texture. + /** \return The size of the texture. */ + virtual const core::dimension2d& getSize() const = 0; + + //! Get driver type of texture. + /** This is the driver, which created the texture. This method is used + internally by the video devices, to check, if they may use a texture + because textures may be incompatible between different devices. + \return Driver type of texture. */ + virtual E_DRIVER_TYPE getDriverType() const = 0; + + //! Get the color format of texture. + /** \return The color format of texture. */ + virtual ECOLOR_FORMAT getColorFormat() const = 0; + + //! Get pitch of the main texture (in bytes). + /** The pitch is the amount of bytes used for a row of pixels in a + texture. + \return Pitch of texture in bytes. */ + virtual u32 getPitch() const = 0; + + //! Check whether the texture has MipMaps + /** \return True if texture has MipMaps, else false. */ + virtual bool hasMipMaps() const { return false; } + + //! Returns if the texture has an alpha channel + virtual bool hasAlpha() const { + return getColorFormat () == video::ECF_A8R8G8B8 || getColorFormat () == video::ECF_A1R5G5B5; + } + + //! Regenerates the mip map levels of the texture. + /** Required after modifying the texture, usually after calling unlock(). + \param mipmapData Optional parameter to pass in image data which will be + used instead of the previously stored or automatically generated mipmap + data. The data has to be a continuous pixel data for all mipmaps until + 1x1 pixel. Each mipmap has to be half the width and height of the previous + level. At least one pixel will be always kept.*/ + virtual void regenerateMipMapLevels(void* mipmapData=0) = 0; + + //! Check whether the texture is a render target + /** Render targets can be set as such in the video driver, in order to + render a scene into the texture. Once unbound as render target, they can + be used just as usual textures again. + \return True if this is a render target, otherwise false. */ + virtual bool isRenderTarget() const { return false; } + + //! Get name of texture (in most cases this is the filename) + const io::SNamedPath& getName() const { return NamedPath; } + +protected: + + //! Helper function, helps to get the desired texture creation format from the flags. + /** \return Either ETCF_ALWAYS_32_BIT, ETCF_ALWAYS_16_BIT, + ETCF_OPTIMIZED_FOR_QUALITY, or ETCF_OPTIMIZED_FOR_SPEED. */ + inline E_TEXTURE_CREATION_FLAG getTextureFormatFromFlags(u32 flags) + { + if (flags & ETCF_OPTIMIZED_FOR_SPEED) + return ETCF_OPTIMIZED_FOR_SPEED; + if (flags & ETCF_ALWAYS_16_BIT) + return ETCF_ALWAYS_16_BIT; + if (flags & ETCF_ALWAYS_32_BIT) + return ETCF_ALWAYS_32_BIT; + if (flags & ETCF_OPTIMIZED_FOR_QUALITY) + return ETCF_OPTIMIZED_FOR_QUALITY; + return ETCF_OPTIMIZED_FOR_SPEED; + } + + io::SNamedPath NamedPath; +}; + + +} // end namespace video +} // end namespace irr + +#endif + diff --git a/inc/ITimer.h b/inc/ITimer.h new file mode 100644 index 0000000..610d6fa --- /dev/null +++ b/inc/ITimer.h @@ -0,0 +1,103 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_TIMER_H_INCLUDED__ +#define __I_TIMER_H_INCLUDED__ + +#include "IReferenceCounted.h" + +namespace irr +{ + +//! Interface for getting and manipulating the virtual time +class ITimer : public virtual IReferenceCounted +{ +public: + //! Returns current real time in milliseconds of the system. + /** This value does not start with 0 when the application starts. + For example in one implementation the value returned could be the + amount of milliseconds which have elapsed since the system was started. + */ + virtual u32 getRealTime() const = 0; + + enum EWeekday + { + EWD_SUNDAY=0, + EWD_MONDAY, + EWD_TUESDAY, + EWD_WEDNESDAY, + EWD_THURSDAY, + EWD_FRIDAY, + EWD_SATURDAY + }; + + struct RealTimeDate + { + // Hour of the day, from 0 to 23 + u32 Hour; + // Minute of the hour, from 0 to 59 + u32 Minute; + // Second of the minute, due to extra seconds from 0 to 61 + u32 Second; + // Year of the gregorian calender + s32 Year; + // Month of the year, from 1 to 12 + u32 Month; + // Day of the month, from 1 to 31 + u32 Day; + // Weekday for the current day + EWeekday Weekday; + // Day of the year, from 1 to 366 + u32 Yearday; + // Whether daylight saving is on + bool IsDST; + }; + + virtual RealTimeDate getRealTimeAndDate() const = 0; + + //! Returns current virtual time in milliseconds. + /** This value starts with 0 and can be manipulated using setTime(), + stopTimer(), startTimer(), etc. This value depends on the set speed of + the timer if the timer is stopped, etc. If you need the system time, + use getRealTime() */ + virtual u32 getTime() const = 0; + + //! sets current virtual time + virtual void setTime(u32 time) = 0; + + //! Stops the virtual timer. + /** The timer is reference counted, which means everything which calls + stop() will also have to call start(), otherwise the timer may not + start/stop correctly again. */ + virtual void stop() = 0; + + //! Starts the virtual timer. + /** The timer is reference counted, which means everything which calls + stop() will also have to call start(), otherwise the timer may not + start/stop correctly again. */ + virtual void start() = 0; + + //! Sets the speed of the timer + /** The speed is the factor with which the time is running faster or + slower then the real system time. */ + virtual void setSpeed(f32 speed = 1.0f) = 0; + + //! Returns current speed of the timer + /** The speed is the factor with which the time is running faster or + slower then the real system time. */ + virtual f32 getSpeed() const = 0; + + //! Returns if the virtual timer is currently stopped + virtual bool isStopped() const = 0; + + //! Advances the virtual time + /** Makes the virtual timer update the time value based on the real + time. This is called automatically when calling IrrlichtDevice::run(), + but you can call it manually if you don't use this method. */ + virtual void tick() = 0; +}; + +} // end namespace irr + +#endif diff --git a/inc/ITriangleSelector.h b/inc/ITriangleSelector.h new file mode 100644 index 0000000..9d038df --- /dev/null +++ b/inc/ITriangleSelector.h @@ -0,0 +1,131 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_TRIANGLE_SELECTOR_H_INCLUDED__ +#define __I_TRIANGLE_SELECTOR_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "triangle3d.h" +#include "aabbox3d.h" +#include "matrix4.h" +#include "line3d.h" + +namespace irr +{ +namespace scene +{ + +class ISceneNode; + +//! Interface to return triangles with specific properties. +/** Every ISceneNode may have a triangle selector, available with +ISceneNode::getTriangleScelector() or ISceneManager::createTriangleSelector. +This is used for doing collision detection: For example if you know, that a +collision may have happened in the area between (1,1,1) and (10,10,10), you +can get all triangles of the scene node in this area with the +ITriangleSelector easily and check every triangle if it collided. */ +class ITriangleSelector : public virtual IReferenceCounted +{ +public: + + //! Get amount of all available triangles in this selector + virtual s32 getTriangleCount() const = 0; + + //! Gets the triangles for one associated node. + /** + This returns all triangles for one scene node associated with this + selector. If there is more than one scene node associated (e.g. for + an IMetaTriangleSelector) this this function may be called multiple + times to retrieve all triangles. + \param triangles Array where the resulting triangles will be + written to. + \param arraySize Size of the target array. + \param outTriangleCount: Amount of triangles which have been written + into the array. + \param transform Pointer to matrix for transforming the triangles + before they are returned. Useful for example to scale all triangles + down into an ellipsoid space. If this pointer is null, no + transformation will be done. */ + virtual void getTriangles(core::triangle3df* triangles, s32 arraySize, + s32& outTriangleCount, const core::matrix4* transform=0) const = 0; + + //! Gets the triangles for one associated node which may lie within a specific bounding box. + /** + This returns all triangles for one scene node associated with this + selector. If there is more than one scene node associated (e.g. for + an IMetaTriangleSelector) this this function may be called multiple + times to retrieve all triangles. + + This method will return at least the triangles that intersect the box, + but may return other triangles as well. + \param triangles Array where the resulting triangles will be written + to. + \param arraySize Size of the target array. + \param outTriangleCount Amount of triangles which have been written + into the array. + \param box Only triangles which are in this axis aligned bounding box + will be written into the array. + \param transform Pointer to matrix for transforming the triangles + before they are returned. Useful for example to scale all triangles + down into an ellipsoid space. If this pointer is null, no + transformation will be done. */ + virtual void getTriangles(core::triangle3df* triangles, s32 arraySize, + s32& outTriangleCount, const core::aabbox3d& box, + const core::matrix4* transform=0) const = 0; + + //! Gets the triangles for one associated node which have or may have contact with a 3d line. + /** + This returns all triangles for one scene node associated with this + selector. If there is more than one scene node associated (e.g. for + an IMetaTriangleSelector) this this function may be called multiple + times to retrieve all triangles. + + Please note that unoptimized triangle selectors also may return + triangles which are not in contact at all with the 3d line. + \param triangles Array where the resulting triangles will be written + to. + \param arraySize Size of the target array. + \param outTriangleCount Amount of triangles which have been written + into the array. + \param line Only triangles which may be in contact with this 3d line + will be written into the array. + \param transform Pointer to matrix for transforming the triangles + before they are returned. Useful for example to scale all triangles + down into an ellipsoid space. If this pointer is null, no + transformation will be done. */ + virtual void getTriangles(core::triangle3df* triangles, s32 arraySize, + s32& outTriangleCount, const core::line3d& line, + const core::matrix4* transform=0) const = 0; + + //! Get scene node associated with a given triangle. + /** + This allows to find which scene node (potentially of several) is + associated with a specific triangle. + + \param triangleIndex: the index of the triangle for which you want to find + the associated scene node. + \return The scene node associated with that triangle. + */ + virtual ISceneNode* getSceneNodeForTriangle(u32 triangleIndex) const = 0; + + //! Get number of TriangleSelectors that are part of this one + /** Only useful for MetaTriangleSelector, others return 1 + */ + virtual u32 getSelectorCount() const = 0; + + //! Get TriangleSelector based on index based on getSelectorCount + /** Only useful for MetaTriangleSelector, others return 'this' or 0 + */ + virtual ITriangleSelector* getSelector(u32 index) = 0; + + //! Get TriangleSelector based on index based on getSelectorCount + /** Only useful for MetaTriangleSelector, others return 'this' or 0 + */ + virtual const ITriangleSelector* getSelector(u32 index) const = 0; +}; + +} // end namespace scene +} // end namespace irr + +#endif diff --git a/inc/IVertexBuffer.h b/inc/IVertexBuffer.h new file mode 100644 index 0000000..04606b2 --- /dev/null +++ b/inc/IVertexBuffer.h @@ -0,0 +1,52 @@ +// Copyright (C) 2008-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_VERTEX_BUFFER_H_INCLUDED__ +#define __I_VERTEX_BUFFER_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "irrArray.h" +#include "S3DVertex.h" + +namespace irr +{ +namespace scene +{ + + class IVertexBuffer : public virtual IReferenceCounted + { + public: + virtual void* getData() =0; + virtual video::E_VERTEX_TYPE getType() const =0; + virtual void setType(video::E_VERTEX_TYPE vertexType) =0; + virtual u32 stride() const =0; + virtual u32 size() const =0; + virtual void push_back(const video::S3DVertex &element) =0; + virtual video::S3DVertex& operator [](const u32 index) const =0; + virtual video::S3DVertex& getLast() =0; + virtual void set_used(u32 usedNow) =0; + virtual void reallocate(u32 new_size) =0; + virtual u32 allocated_size() const =0; + virtual video::S3DVertex* pointer() =0; + + //! get the current hardware mapping hint + virtual E_HARDWARE_MAPPING getHardwareMappingHint() const =0; + + //! set the hardware mapping hint, for driver + virtual void setHardwareMappingHint( E_HARDWARE_MAPPING NewMappingHint ) =0; + + //! flags the meshbuffer as changed, reloads hardware buffers + virtual void setDirty() =0; + + //! Get the currently used ID for identification of changes. + /** This shouldn't be used for anything outside the VideoDriver. */ + virtual u32 getChangedID() const = 0; + }; + + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/IVideoDriver.h b/inc/IVideoDriver.h new file mode 100644 index 0000000..b3af407 --- /dev/null +++ b/inc/IVideoDriver.h @@ -0,0 +1,1471 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __IRR_I_VIDEO_DRIVER_H_INCLUDED__ +#define __IRR_I_VIDEO_DRIVER_H_INCLUDED__ + +#include "rect.h" +#include "SColor.h" +#include "ITexture.h" +#include "irrArray.h" +#include "matrix4.h" +#include "plane3d.h" +#include "dimension2d.h" +#include "position2d.h" +#include "SMaterial.h" +#include "IMeshBuffer.h" +#include "triangle3d.h" +#include "EDriverTypes.h" +#include "EDriverFeatures.h" +#include "SExposedVideoData.h" + +namespace irr +{ +namespace io +{ + class IAttributes; + struct SAttributeReadWriteOptions; + class IReadFile; + class IWriteFile; +} // end namespace io +namespace scene +{ + class IMeshBuffer; + class IMesh; + class IMeshManipulator; + class ISceneNode; +} // end namespace scene + +namespace video +{ + struct S3DVertex; + struct S3DVertex2TCoords; + struct S3DVertexTangents; + struct SLight; + class IImageLoader; + class IImageWriter; + class IMaterialRenderer; + class IGPUProgrammingServices; + + //! enumeration for geometry transformation states + enum E_TRANSFORMATION_STATE + { + //! View transformation + ETS_VIEW = 0, + //! World transformation + ETS_WORLD, + //! Projection transformation + ETS_PROJECTION, + //! Texture transformation + ETS_TEXTURE_0, + //! Texture transformation + ETS_TEXTURE_1, + //! Texture transformation + ETS_TEXTURE_2, + //! Texture transformation + ETS_TEXTURE_3, +#if _IRR_MATERIAL_MAX_TEXTURES_>4 + //! Texture transformation + ETS_TEXTURE_4, +#if _IRR_MATERIAL_MAX_TEXTURES_>5 + //! Texture transformation + ETS_TEXTURE_5, +#if _IRR_MATERIAL_MAX_TEXTURES_>6 + //! Texture transformation + ETS_TEXTURE_6, +#if _IRR_MATERIAL_MAX_TEXTURES_>7 + //! Texture transformation + ETS_TEXTURE_7, +#endif +#endif +#endif +#endif + //! Not used + ETS_COUNT + }; + + //! enumeration for signaling resources which were lost after the last render cycle + /** These values can be signaled by the driver, telling the app that some resources + were lost and need to be recreated. Irrlicht will sometimes recreate the actual objects, + but the content needs to be recreated by the application. */ + enum E_LOST_RESOURCE + { + //! The whole device/driver is lost + ELR_DEVICE = 1, + //! All texture are lost, rare problem + ELR_TEXTURES = 2, + //! The Render Target Textures are lost, typical problem for D3D + ELR_RTTS = 4, + //! The HW buffers are lost, will be recreated automatically, but might require some more time this frame + ELR_HW_BUFFERS = 8 + }; + + //! Special render targets, which usually map to dedicated hardware + /** These render targets (besides 0 and 1) need not be supported by gfx cards */ + enum E_RENDER_TARGET + { + //! Render target is the main color frame buffer + ERT_FRAME_BUFFER=0, + //! Render target is a render texture + ERT_RENDER_TEXTURE, + //! Multi-Render target textures + ERT_MULTI_RENDER_TEXTURES, + //! Render target is the main color frame buffer + ERT_STEREO_LEFT_BUFFER, + //! Render target is the right color buffer (left is the main buffer) + ERT_STEREO_RIGHT_BUFFER, + //! Render to both stereo buffers at once + ERT_STEREO_BOTH_BUFFERS, + //! Auxiliary buffer 0 + ERT_AUX_BUFFER0, + //! Auxiliary buffer 1 + ERT_AUX_BUFFER1, + //! Auxiliary buffer 2 + ERT_AUX_BUFFER2, + //! Auxiliary buffer 3 + ERT_AUX_BUFFER3, + //! Auxiliary buffer 4 + ERT_AUX_BUFFER4 + }; + + //! Enum for the types of fog distributions to choose from + enum E_FOG_TYPE + { + EFT_FOG_EXP=0, + EFT_FOG_LINEAR, + EFT_FOG_EXP2 + }; + + const c8* const FogTypeNames[] = + { + "FogExp", + "FogLinear", + "FogExp2", + 0 + }; + + struct SOverrideMaterial + { + //! The Material values + SMaterial Material; + //! Which values are taken for override + /** OR'ed values from E_MATERIAL_FLAGS. */ + u32 EnableFlags; + //! Set in which render passes the material override is active. + /** OR'ed values from E_SCENE_NODE_RENDER_PASS. */ + u16 EnablePasses; + //! Global enable flag, overwritten by the SceneManager in each pass + /** The Scenemanager uses the EnablePass array and sets Enabled to + true if the Override material is enabled in the current pass. */ + bool Enabled; + + //! Default constructor + SOverrideMaterial() : EnableFlags(0), EnablePasses(0), Enabled(false) {} + + //! Apply the enabled overrides + void apply(SMaterial& material) + { + if (Enabled) + { + for (u32 i=0; i<32; ++i) + { + const u32 num=(1<* sourceRect=0) =0; + + //! Presents the rendered image to the screen. + /** Applications must call this method after performing any + rendering. + \return False if failed and true if succeeded. */ + virtual bool endScene() =0; + + //! Queries the features of the driver. + /** Returns true if a feature is available + \param feature Feature to query. + \return True if the feature is available, false if not. */ + virtual bool queryFeature(E_VIDEO_DRIVER_FEATURE feature) const =0; + + //! Disable a feature of the driver. + /** Can also be used to enable the features again. It is not + possible to enable unsupported features this way, though. + \param feature Feature to disable. + \param flag When true the feature is disabled, otherwise it is enabled. */ + virtual void disableFeature(E_VIDEO_DRIVER_FEATURE feature, bool flag=true) =0; + + //! Get attributes of the actual video driver + /** The following names can be queried for the given types: + MaxTextures (int) The maximum number of simultaneous textures supported by the driver. This can be less than the supported number of textures of the driver. Use _IRR_MATERIAL_MAX_TEXTURES_ to adapt the number. + MaxSupportedTextures (int) The maximum number of simultaneous textures supported by the fixed function pipeline of the (hw) driver. The actual supported number of textures supported by the engine can be lower. + MaxLights (int) Number of hardware lights supported in the fixed function pipieline of the driver, typically 6-8. Use light manager or deferred shading for more. + MaxAnisotropy (int) Number of anisotropy levels supported for filtering. At least 1, max is typically at 16 or 32. + MaxUserClipPlanes (int) Number of additional clip planes, which can be set by the user via dedicated driver methods. + MaxAuxBuffers (int) Special render buffers, which are currently not really usable inside Irrlicht. Only supported by OpenGL + MaxMultipleRenderTargets (int) Number of render targets which can be bound simultaneously. Rendering to MRTs is done via shaders. + MaxIndices (int) Number of indices which can be used in one render call (i.e. one mesh buffer). + MaxTextureSize (int) Dimension that a texture may have, both in width and height. + MaxGeometryVerticesOut (int) Number of vertices the geometry shader can output in one pass. Only OpenGL so far. + MaxTextureLODBias (float) Maximum value for LOD bias. Is usually at around 16, but can be lower on some systems. + Version (int) Version of the driver. Should be Major*100+Minor + ShaderLanguageVersion (int) Version of the high level shader language. Should be Major*100+Minor. + AntiAlias (int) Number of Samples the driver uses for each pixel. 0 and 1 means anti aliasing is off, typical values are 2,4,8,16,32 + */ + virtual const io::IAttributes& getDriverAttributes() const=0; + + //! Check if the driver was recently reset. + /** For d3d devices you will need to recreate the RTTs if the + driver was reset. Should be queried right after beginScene(). + */ + virtual bool checkDriverReset() =0; + + //! Sets transformation matrices. + /** \param state Transformation type to be set, e.g. view, + world, or projection. + \param mat Matrix describing the transformation. */ + virtual void setTransform(E_TRANSFORMATION_STATE state, const core::matrix4& mat) =0; + + //! Returns the transformation set by setTransform + /** \param state Transformation type to query + \return Matrix describing the transformation. */ + virtual const core::matrix4& getTransform(E_TRANSFORMATION_STATE state) const =0; + + //! Retrieve the number of image loaders + /** \return Number of image loaders */ + virtual u32 getImageLoaderCount() const = 0; + + //! Retrieve the given image loader + /** \param n The index of the loader to retrieve. This parameter is an 0-based + array index. + \return A pointer to the specified loader, 0 if the index is incorrect. */ + virtual IImageLoader* getImageLoader(u32 n) = 0; + + //! Retrieve the number of image writers + /** \return Number of image writers */ + virtual u32 getImageWriterCount() const = 0; + + //! Retrieve the given image writer + /** \param n The index of the writer to retrieve. This parameter is an 0-based + array index. + \return A pointer to the specified writer, 0 if the index is incorrect. */ + virtual IImageWriter* getImageWriter(u32 n) = 0; + + //! Sets a material. + /** All 3d drawing functions will draw geometry using this material thereafter. + \param material: Material to be used from now on. */ + virtual void setMaterial(const SMaterial& material) =0; + + //! Get access to a named texture. + /** Loads the texture from disk if it is not + already loaded and generates mipmap levels if desired. + Texture loading can be influenced using the + setTextureCreationFlag() method. The texture can be in several + imageformats, such as BMP, JPG, TGA, PCX, PNG, and PSD. + \param filename Filename of the texture to be loaded. + \return Pointer to the texture, or 0 if the texture + could not be loaded. This pointer should not be dropped. See + IReferenceCounted::drop() for more information. */ + virtual ITexture* getTexture(const io::path& filename) = 0; + + //! Get access to a named texture. + /** Loads the texture from disk if it is not + already loaded and generates mipmap levels if desired. + Texture loading can be influenced using the + setTextureCreationFlag() method. The texture can be in several + imageformats, such as BMP, JPG, TGA, PCX, PNG, and PSD. + \param file Pointer to an already opened file. + \return Pointer to the texture, or 0 if the texture + could not be loaded. This pointer should not be dropped. See + IReferenceCounted::drop() for more information. */ + virtual ITexture* getTexture(io::IReadFile* file) =0; + + //! Returns a texture by index + /** \param index: Index of the texture, must be smaller than + getTextureCount() Please note that this index might change when + adding or removing textures + \return Pointer to the texture, or 0 if the texture was not + set or index is out of bounds. This pointer should not be + dropped. See IReferenceCounted::drop() for more information. */ + virtual ITexture* getTextureByIndex(u32 index) =0; + + //! Returns amount of textures currently loaded + /** \return Amount of textures currently loaded */ + virtual u32 getTextureCount() const = 0; + + //! Renames a texture + /** \param texture Pointer to the texture to rename. + \param newName New name for the texture. This should be a unique name. */ + virtual void renameTexture(ITexture* texture, const io::path& newName) = 0; + + //! Creates an empty texture of specified size. + /** \param size: Size of the texture. + \param name A name for the texture. Later calls to + getTexture() with this name will return this texture + \param format Desired color format of the texture. Please note + that the driver may choose to create the texture in another + color format. + \return Pointer to the newly created texture. This pointer + should not be dropped. See IReferenceCounted::drop() for more + information. */ + virtual ITexture* addTexture(const core::dimension2d& size, + const io::path& name, ECOLOR_FORMAT format = ECF_A8R8G8B8) = 0; + + //! Creates a texture from an IImage. + /** \param name A name for the texture. Later calls of + getTexture() with this name will return this texture + \param image Image the texture is created from. + \param mipmapData Optional pointer to a set of images which + build up the whole mipmap set. Must be images of the same color + type as image. If this parameter is not given, the mipmaps are + derived from image. + \return Pointer to the newly created texture. This pointer + should not be dropped. See IReferenceCounted::drop() for more + information. */ + virtual ITexture* addTexture(const io::path& name, IImage* image, void* mipmapData=0) = 0; + + //! Adds a new render target texture to the texture cache. + /** \param size Size of the texture, in pixels. Width and + height should be a power of two (e.g. 64, 128, 256, 512, ...) + and it should not be bigger than the backbuffer, because it + shares the zbuffer with the screen buffer. + \param name An optional name for the RTT. + \param format The color format of the render target. Floating point formats are supported. + \return Pointer to the created texture or 0 if the texture + could not be created. This pointer should not be dropped. See + IReferenceCounted::drop() for more information. */ + virtual ITexture* addRenderTargetTexture(const core::dimension2d& size, + const io::path& name = "rt", const ECOLOR_FORMAT format = ECF_UNKNOWN) =0; + + //! Removes a texture from the texture cache and deletes it. + /** This method can free a lot of memory! + Please note that after calling this, the pointer to the + ITexture may no longer be valid, if it was not grabbed before + by other parts of the engine for storing it longer. So it is a + good idea to set all materials which are using this texture to + 0 or another texture first. + \param texture Texture to delete from the engine cache. */ + virtual void removeTexture(ITexture* texture) =0; + + //! Removes all textures from the texture cache and deletes them. + /** This method can free a lot of memory! + Please note that after calling this, the pointer to the + ITexture may no longer be valid, if it was not grabbed before + by other parts of the engine for storing it longer. So it is a + good idea to set all materials which are using this texture to + 0 or another texture first. */ + virtual void removeAllTextures() =0; + + //! Remove hardware buffer + virtual void removeHardwareBuffer(const scene::IMeshBuffer* mb) =0; + + //! Remove all hardware buffers + virtual void removeAllHardwareBuffers() =0; + + //! Create occlusion query. + /** Use node for identification and mesh for occlusion test. */ + virtual void addOcclusionQuery(scene::ISceneNode* node, + const scene::IMesh* mesh=0) =0; + + //! Remove occlusion query. + virtual void removeOcclusionQuery(scene::ISceneNode* node) =0; + + //! Remove all occlusion queries. + virtual void removeAllOcclusionQueries() =0; + + //! Run occlusion query. Draws mesh stored in query. + /** If the mesh shall not be rendered visible, use + overrideMaterial to disable the color and depth buffer. */ + virtual void runOcclusionQuery(scene::ISceneNode* node, bool visible=false) =0; + + //! Run all occlusion queries. Draws all meshes stored in queries. + /** If the meshes shall not be rendered visible, use + overrideMaterial to disable the color and depth buffer. */ + virtual void runAllOcclusionQueries(bool visible=false) =0; + + //! Update occlusion query. Retrieves results from GPU. + /** If the query shall not block, set the flag to false. + Update might not occur in this case, though */ + virtual void updateOcclusionQuery(scene::ISceneNode* node, bool block=true) =0; + + //! Update all occlusion queries. Retrieves results from GPU. + /** If the query shall not block, set the flag to false. + Update might not occur in this case, though */ + virtual void updateAllOcclusionQueries(bool block=true) =0; + + //! Return query result. + /** Return value is the number of visible pixels/fragments. + The value is a safe approximation, i.e. can be larger than the + actual value of pixels. */ + virtual u32 getOcclusionQueryResult(scene::ISceneNode* node) const =0; + + //! Sets a boolean alpha channel on the texture based on a color key. + /** This makes the texture fully transparent at the texels where + this color key can be found when using for example draw2DImage + with useAlphachannel==true. The alpha of other texels is not modified. + \param texture Texture whose alpha channel is modified. + \param color Color key color. Every texel with this color will + become fully transparent as described above. Please note that the + colors of a texture may be converted when loading it, so the + color values may not be exactly the same in the engine and for + example in picture edit programs. To avoid this problem, you + could use the makeColorKeyTexture method, which takes the + position of a pixel instead a color value. + \param zeroTexels \deprecated If set to true, then any texels that match + the color key will have their color, as well as their alpha, set to zero + (i.e. black). This behavior matches the legacy (buggy) behavior prior + to release 1.5 and is provided for backwards compatibility only. + This parameter may be removed by Irrlicht 1.9. */ + virtual void makeColorKeyTexture(video::ITexture* texture, + video::SColor color, + bool zeroTexels = false) const =0; + + //! Sets a boolean alpha channel on the texture based on the color at a position. + /** This makes the texture fully transparent at the texels where + the color key can be found when using for example draw2DImage + with useAlphachannel==true. The alpha of other texels is not modified. + \param texture Texture whose alpha channel is modified. + \param colorKeyPixelPos Position of a pixel with the color key + color. Every texel with this color will become fully transparent as + described above. + \param zeroTexels \deprecated If set to true, then any texels that match + the color key will have their color, as well as their alpha, set to zero + (i.e. black). This behavior matches the legacy (buggy) behavior prior + to release 1.5 and is provided for backwards compatibility only. + This parameter may be removed by Irrlicht 1.9. */ + virtual void makeColorKeyTexture(video::ITexture* texture, + core::position2d colorKeyPixelPos, + bool zeroTexels = false) const =0; + + //! Creates a normal map from a height map texture. + /** If the target texture has 32 bit, the height value is + stored in the alpha component of the texture as addition. This + value is used by the video::EMT_PARALLAX_MAP_SOLID material and + similar materials. + \param texture Texture whose alpha channel is modified. + \param amplitude Constant value by which the height + information is multiplied.*/ + virtual void makeNormalMapTexture(video::ITexture* texture, f32 amplitude=1.0f) const =0; + + //! Sets a new render target. + /** This will only work if the driver supports the + EVDF_RENDER_TO_TARGET feature, which can be queried with + queryFeature(). Usually, rendering to textures is done in this + way: + \code + // create render target + ITexture* target = driver->addRenderTargetTexture(core::dimension2d(128,128), "rtt1"); + + // ... + + driver->setRenderTarget(target); // set render target + // .. draw stuff here + driver->setRenderTarget(0); // set previous render target + \endcode + Please note that you cannot render 3D or 2D geometry with a + render target as texture on it when you are rendering the scene + into this render target at the same time. It is usually only + possible to render into a texture between the + IVideoDriver::beginScene() and endScene() method calls. + \param texture New render target. Must be a texture created with + IVideoDriver::addRenderTargetTexture(). If set to 0, it sets + the previous render target which was set before the last + setRenderTarget() call. + \param clearBackBuffer Clears the backbuffer of the render + target with the color parameter + \param clearZBuffer Clears the zBuffer of the rendertarget. + Note that because the frame buffer may share the zbuffer with + the rendertarget, its zbuffer might be partially cleared too + by this. + \param color The background color for the render target. + \return True if sucessful and false if not. */ + virtual bool setRenderTarget(video::ITexture* texture, + bool clearBackBuffer=true, bool clearZBuffer=true, + SColor color=video::SColor(0,0,0,0)) =0; + + //! set or reset special render targets + /** This method enables access to special color buffers such as + stereoscopic buffers or auxiliary buffers. + \param target Enum value for the render target + \param clearTarget Clears the target buffer with the color + parameter + \param clearZBuffer Clears the zBuffer of the rendertarget. + Note that because the main frame buffer may share the zbuffer with + the rendertarget, its zbuffer might be partially cleared too + by this. + \param color The background color for the render target. + \return True if sucessful and false if not. */ + virtual bool setRenderTarget(E_RENDER_TARGET target, bool clearTarget=true, + bool clearZBuffer=true, + SColor color=video::SColor(0,0,0,0)) =0; + + //! Sets new multiple render targets. + virtual bool setRenderTarget(const core::array& texture, + bool clearBackBuffer=true, bool clearZBuffer=true, + SColor color=video::SColor(0,0,0,0)) =0; + + //! Sets a new viewport. + /** Every rendering operation is done into this new area. + \param area: Rectangle defining the new area of rendering + operations. */ + virtual void setViewPort(const core::rect& area) =0; + + //! Gets the area of the current viewport. + /** \return Rectangle of the current viewport. */ + virtual const core::rect& getViewPort() const =0; + + //! Draws a vertex primitive list + /** Note that, depending on the index type, some vertices might be not + accessible through the index list. The limit is at 65535 vertices for 16bit + indices. Please note that currently not all primitives are available for + all drivers, and some might be emulated via triangle renders. + \param vertices Pointer to array of vertices. + \param vertexCount Amount of vertices in the array. + \param indexList Pointer to array of indices. These define the vertices used + for each primitive. Depending on the pType, indices are interpreted as single + objects (for point like primitives), pairs (for lines), triplets (for + triangles), or quads. + \param primCount Amount of Primitives + \param vType Vertex type, e.g. video::EVT_STANDARD for S3DVertex. + \param pType Primitive type, e.g. scene::EPT_TRIANGLE_FAN for a triangle fan. + \param iType Index type, e.g. video::EIT_16BIT for 16bit indices. */ + virtual void drawVertexPrimitiveList(const void* vertices, u32 vertexCount, + const void* indexList, u32 primCount, + E_VERTEX_TYPE vType=EVT_STANDARD, + scene::E_PRIMITIVE_TYPE pType=scene::EPT_TRIANGLES, + E_INDEX_TYPE iType=EIT_16BIT) =0; + + //! Draws a vertex primitive list in 2d + /** Compared to the general (3d) version of this method, this + one sets up a 2d render mode, and uses only x and y of vectors. + Note that, depending on the index type, some vertices might be + not accessible through the index list. The limit is at 65535 + vertices for 16bit indices. Please note that currently not all + primitives are available for all drivers, and some might be + emulated via triangle renders. This function is not available + for the sw drivers. + \param vertices Pointer to array of vertices. + \param vertexCount Amount of vertices in the array. + \param indexList Pointer to array of indices. These define the + vertices used for each primitive. Depending on the pType, + indices are interpreted as single objects (for point like + primitives), pairs (for lines), triplets (for triangles), or + quads. + \param primCount Amount of Primitives + \param vType Vertex type, e.g. video::EVT_STANDARD for S3DVertex. + \param pType Primitive type, e.g. scene::EPT_TRIANGLE_FAN for a triangle fan. + \param iType Index type, e.g. video::EIT_16BIT for 16bit indices. */ + virtual void draw2DVertexPrimitiveList(const void* vertices, u32 vertexCount, + const void* indexList, u32 primCount, + E_VERTEX_TYPE vType=EVT_STANDARD, + scene::E_PRIMITIVE_TYPE pType=scene::EPT_TRIANGLES, + E_INDEX_TYPE iType=EIT_16BIT) =0; + + //! Draws an indexed triangle list. + /** Note that there may be at maximum 65536 vertices, because + the index list is an array of 16 bit values each with a maximum + value of 65536. If there are more than 65536 vertices in the + list, results of this operation are not defined. + \param vertices Pointer to array of vertices. + \param vertexCount Amount of vertices in the array. + \param indexList Pointer to array of indices. + \param triangleCount Amount of Triangles. Usually amount of indices / 3. */ + void drawIndexedTriangleList(const S3DVertex* vertices, + u32 vertexCount, const u16* indexList, u32 triangleCount) + { + drawVertexPrimitiveList(vertices, vertexCount, indexList, triangleCount, EVT_STANDARD, scene::EPT_TRIANGLES, EIT_16BIT); + } + + //! Draws an indexed triangle list. + /** Note that there may be at maximum 65536 vertices, because + the index list is an array of 16 bit values each with a maximum + value of 65536. If there are more than 65536 vertices in the + list, results of this operation are not defined. + \param vertices Pointer to array of vertices. + \param vertexCount Amount of vertices in the array. + \param indexList Pointer to array of indices. + \param triangleCount Amount of Triangles. Usually amount of indices / 3. */ + void drawIndexedTriangleList(const S3DVertex2TCoords* vertices, + u32 vertexCount, const u16* indexList, u32 triangleCount) + { + drawVertexPrimitiveList(vertices, vertexCount, indexList, triangleCount, EVT_2TCOORDS, scene::EPT_TRIANGLES, EIT_16BIT); + } + + //! Draws an indexed triangle list. + /** Note that there may be at maximum 65536 vertices, because + the index list is an array of 16 bit values each with a maximum + value of 65536. If there are more than 65536 vertices in the + list, results of this operation are not defined. + \param vertices Pointer to array of vertices. + \param vertexCount Amount of vertices in the array. + \param indexList Pointer to array of indices. + \param triangleCount Amount of Triangles. Usually amount of indices / 3. */ + void drawIndexedTriangleList(const S3DVertexTangents* vertices, + u32 vertexCount, const u16* indexList, u32 triangleCount) + { + drawVertexPrimitiveList(vertices, vertexCount, indexList, triangleCount, EVT_TANGENTS, scene::EPT_TRIANGLES, EIT_16BIT); + } + + //! Draws an indexed triangle fan. + /** Note that there may be at maximum 65536 vertices, because + the index list is an array of 16 bit values each with a maximum + value of 65536. If there are more than 65536 vertices in the + list, results of this operation are not defined. + \param vertices Pointer to array of vertices. + \param vertexCount Amount of vertices in the array. + \param indexList Pointer to array of indices. + \param triangleCount Amount of Triangles. Usually amount of indices - 2. */ + void drawIndexedTriangleFan(const S3DVertex* vertices, + u32 vertexCount, const u16* indexList, u32 triangleCount) + { + drawVertexPrimitiveList(vertices, vertexCount, indexList, triangleCount, EVT_STANDARD, scene::EPT_TRIANGLE_FAN, EIT_16BIT); + } + + //! Draws an indexed triangle fan. + /** Note that there may be at maximum 65536 vertices, because + the index list is an array of 16 bit values each with a maximum + value of 65536. If there are more than 65536 vertices in the + list, results of this operation are not defined. + \param vertices Pointer to array of vertices. + \param vertexCount Amount of vertices in the array. + \param indexList Pointer to array of indices. + \param triangleCount Amount of Triangles. Usually amount of indices - 2. */ + void drawIndexedTriangleFan(const S3DVertex2TCoords* vertices, + u32 vertexCount, const u16* indexList, u32 triangleCount) + { + drawVertexPrimitiveList(vertices, vertexCount, indexList, triangleCount, EVT_2TCOORDS, scene::EPT_TRIANGLE_FAN, EIT_16BIT); + } + + //! Draws an indexed triangle fan. + /** Note that there may be at maximum 65536 vertices, because + the index list is an array of 16 bit values each with a maximum + value of 65536. If there are more than 65536 vertices in the + list, results of this operation are not defined. + \param vertices Pointer to array of vertices. + \param vertexCount Amount of vertices in the array. + \param indexList Pointer to array of indices. + \param triangleCount Amount of Triangles. Usually amount of indices - 2. */ + void drawIndexedTriangleFan(const S3DVertexTangents* vertices, + u32 vertexCount, const u16* indexList, u32 triangleCount) + { + drawVertexPrimitiveList(vertices, vertexCount, indexList, triangleCount, EVT_TANGENTS, scene::EPT_TRIANGLE_FAN, EIT_16BIT); + } + + //! Draws a 3d line. + /** For some implementations, this method simply calls + drawVertexPrimitiveList for some triangles. + Note that the line is drawn using the current transformation + matrix and material. So if you need to draw the 3D line + independently of the current transformation, use + \code + driver->setMaterial(someMaterial); + driver->setTransform(video::ETS_WORLD, core::IdentityMatrix); + \endcode + for some properly set up material before drawing the line. + Some drivers support line thickness set in the material. + \param start Start of the 3d line. + \param end End of the 3d line. + \param color Color of the line. */ + virtual void draw3DLine(const core::vector3df& start, + const core::vector3df& end, SColor color = SColor(255,255,255,255)) =0; + + //! Draws a 3d triangle. + /** This method calls drawVertexPrimitiveList for some triangles. + This method works with all drivers because it simply calls + drawVertexPrimitiveList, but it is hence not very fast. + Note that the triangle is drawn using the current + transformation matrix and material. So if you need to draw it + independently of the current transformation, use + \code + driver->setMaterial(someMaterial); + driver->setTransform(video::ETS_WORLD, core::IdentityMatrix); + \endcode + for some properly set up material before drawing the triangle. + \param triangle The triangle to draw. + \param color Color of the line. */ + virtual void draw3DTriangle(const core::triangle3df& triangle, + SColor color = SColor(255,255,255,255)) =0; + + //! Draws a 3d axis aligned box. + /** This method simply calls draw3DLine for the edges of the + box. Note that the box is drawn using the current transformation + matrix and material. So if you need to draw it independently of + the current transformation, use + \code + driver->setMaterial(someMaterial); + driver->setTransform(video::ETS_WORLD, core::IdentityMatrix); + \endcode + for some properly set up material before drawing the box. + \param box The axis aligned box to draw + \param color Color to use while drawing the box. */ + virtual void draw3DBox(const core::aabbox3d& box, + SColor color = SColor(255,255,255,255)) =0; + + //! Draws a 2d image without any special effects + /** \param texture Pointer to texture to use. + \param destPos Upper left 2d destination position where the + image will be drawn. */ + virtual void draw2DImage(const video::ITexture* texture, + const core::position2d& destPos) =0; + + //! Draws a 2d image using a color + /** (if color is other than + Color(255,255,255,255)) and the alpha channel of the texture. + \param texture Texture to be drawn. + \param destPos Upper left 2d destination position where the + image will be drawn. + \param sourceRect Source rectangle in the image. + \param clipRect Pointer to rectangle on the screen where the + image is clipped to. + If this pointer is NULL the image is not clipped. + \param color Color with which the image is drawn. If the color + equals Color(255,255,255,255) it is ignored. Note that the + alpha component is used: If alpha is other than 255, the image + will be transparent. + \param useAlphaChannelOfTexture: If true, the alpha channel of + the texture is used to draw the image.*/ + virtual void draw2DImage(const video::ITexture* texture, const core::position2d& destPos, + const core::rect& sourceRect, const core::rect* clipRect =0, + SColor color=SColor(255,255,255,255), bool useAlphaChannelOfTexture=false) =0; + + //! Draws a set of 2d images, using a color and the alpha channel of the texture. + /** The images are drawn beginning at pos and concatenated in + one line. All drawings are clipped against clipRect (if != 0). + The subtextures are defined by the array of sourceRects and are + chosen by the indices given. + \param texture Texture to be drawn. + \param pos Upper left 2d destination position where the image + will be drawn. + \param sourceRects Source rectangles of the image. + \param indices List of indices which choose the actual + rectangle used each time. + \param kerningWidth Offset to Position on X + \param clipRect Pointer to rectangle on the screen where the + image is clipped to. + If this pointer is 0 then the image is not clipped. + \param color Color with which the image is drawn. + Note that the alpha component is used. If alpha is other than + 255, the image will be transparent. + \param useAlphaChannelOfTexture: If true, the alpha channel of + the texture is used to draw the image. */ + virtual void draw2DImageBatch(const video::ITexture* texture, + const core::position2d& pos, + const core::array >& sourceRects, + const core::array& indices, + s32 kerningWidth=0, + const core::rect* clipRect=0, + SColor color=SColor(255,255,255,255), + bool useAlphaChannelOfTexture=false) =0; + + //! Draws a set of 2d images, using a color and the alpha channel of the texture. + /** All drawings are clipped against clipRect (if != 0). + The subtextures are defined by the array of sourceRects and are + positioned using the array of positions. + \param texture Texture to be drawn. + \param positions Array of upper left 2d destinations where the + images will be drawn. + \param sourceRects Source rectangles of the image. + \param clipRect Pointer to rectangle on the screen where the + images are clipped to. + If this pointer is 0 then the image is not clipped. + \param color Color with which the image is drawn. + Note that the alpha component is used. If alpha is other than + 255, the image will be transparent. + \param useAlphaChannelOfTexture: If true, the alpha channel of + the texture is used to draw the image. */ + virtual void draw2DImageBatch(const video::ITexture* texture, + const core::array >& positions, + const core::array >& sourceRects, + const core::rect* clipRect=0, + SColor color=SColor(255,255,255,255), + bool useAlphaChannelOfTexture=false) =0; + + //! Draws a part of the texture into the rectangle. Note that colors must be an array of 4 colors if used. + /** Suggested and first implemented by zola. + \param texture The texture to draw from + \param destRect The rectangle to draw into + \param sourceRect The rectangle denoting a part of the texture + \param clipRect Clips the destination rectangle (may be 0) + \param colors Array of 4 colors denoting the color values of + the corners of the destRect + \param useAlphaChannelOfTexture True if alpha channel will be + blended. */ + virtual void draw2DImage(const video::ITexture* texture, const core::rect& destRect, + const core::rect& sourceRect, const core::rect* clipRect =0, + const video::SColor * const colors=0, bool useAlphaChannelOfTexture=false) =0; + + //! Draws a 2d rectangle. + /** \param color Color of the rectangle to draw. The alpha + component will not be ignored and specifies how transparent the + rectangle will be. + \param pos Position of the rectangle. + \param clip Pointer to rectangle against which the rectangle + will be clipped. If the pointer is null, no clipping will be + performed. */ + virtual void draw2DRectangle(SColor color, const core::rect& pos, + const core::rect* clip =0) =0; + + //! Draws a 2d rectangle with a gradient. + /** \param colorLeftUp Color of the upper left corner to draw. + The alpha component will not be ignored and specifies how + transparent the rectangle will be. + \param colorRightUp Color of the upper right corner to draw. + The alpha component will not be ignored and specifies how + transparent the rectangle will be. + \param colorLeftDown Color of the lower left corner to draw. + The alpha component will not be ignored and specifies how + transparent the rectangle will be. + \param colorRightDown Color of the lower right corner to draw. + The alpha component will not be ignored and specifies how + transparent the rectangle will be. + \param pos Position of the rectangle. + \param clip Pointer to rectangle against which the rectangle + will be clipped. If the pointer is null, no clipping will be + performed. */ + virtual void draw2DRectangle(const core::rect& pos, + SColor colorLeftUp, SColor colorRightUp, + SColor colorLeftDown, SColor colorRightDown, + const core::rect* clip =0) =0; + + //! Draws the outline of a 2D rectangle. + /** \param pos Position of the rectangle. + \param color Color of the rectangle to draw. The alpha component + specifies how transparent the rectangle outline will be. */ + virtual void draw2DRectangleOutline(const core::recti& pos, + SColor color=SColor(255,255,255,255)) =0; + + //! Draws a 2d line. Both start and end will be included in coloring. + /** \param start Screen coordinates of the start of the line + in pixels. + \param end Screen coordinates of the start of the line in + pixels. + \param color Color of the line to draw. */ + virtual void draw2DLine(const core::position2d& start, + const core::position2d& end, + SColor color=SColor(255,255,255,255)) =0; + + //! Draws a pixel. + /** \param x The x-position of the pixel. + \param y The y-position of the pixel. + \param color Color of the pixel to draw. */ + virtual void drawPixel(u32 x, u32 y, const SColor& color) =0; + + //! Draws a non filled concyclic regular 2d polygon. + /** This method can be used to draw circles, but also + triangles, tetragons, pentagons, hexagons, heptagons, octagons, + enneagons, decagons, hendecagons, dodecagon, triskaidecagons, + etc. I think you'll got it now. And all this by simply + specifying the vertex count. Welcome to the wonders of + geometry. + \param center Position of center of circle (pixels). + \param radius Radius of circle in pixels. + \param color Color of the circle. + \param vertexCount Amount of vertices of the polygon. Specify 2 + to draw a line, 3 to draw a triangle, 4 for tetragons and a lot + (>10) for nearly a circle. */ + virtual void draw2DPolygon(core::position2d center, + f32 radius, + video::SColor color=SColor(100,255,255,255), + s32 vertexCount=10) =0; + + //! Draws a shadow volume into the stencil buffer. + /** To draw a stencil shadow, do this: First, draw all geometry. + Then use this method, to draw the shadow volume. Then, use + IVideoDriver::drawStencilShadow() to visualize the shadow. + Please note that the code for the opengl version of the method + is based on free code sent in by Philipp Dortmann, lots of + thanks go to him! + \param triangles Array of 3d vectors, specifying the shadow + volume. + \param zfail If set to true, zfail method is used, otherwise + zpass. + \param debugDataVisible The debug data that is enabled for this + shadow node + */ + virtual void drawStencilShadowVolume(const core::array& triangles, bool zfail=true, u32 debugDataVisible=0) =0; + + //! Fills the stencil shadow with color. + /** After the shadow volume has been drawn into the stencil + buffer using IVideoDriver::drawStencilShadowVolume(), use this + to draw the color of the shadow. + Please note that the code for the opengl version of the method + is based on free code sent in by Philipp Dortmann, lots of + thanks go to him! + \param clearStencilBuffer Set this to false, if you want to + draw every shadow with the same color, and only want to call + drawStencilShadow() once after all shadow volumes have been + drawn. Set this to true, if you want to paint every shadow with + its own color. + \param leftUpEdge Color of the shadow in the upper left corner + of screen. + \param rightUpEdge Color of the shadow in the upper right + corner of screen. + \param leftDownEdge Color of the shadow in the lower left + corner of screen. + \param rightDownEdge Color of the shadow in the lower right + corner of screen. */ + virtual void drawStencilShadow(bool clearStencilBuffer=false, + video::SColor leftUpEdge = video::SColor(255,0,0,0), + video::SColor rightUpEdge = video::SColor(255,0,0,0), + video::SColor leftDownEdge = video::SColor(255,0,0,0), + video::SColor rightDownEdge = video::SColor(255,0,0,0)) =0; + + //! Draws a mesh buffer + /** \param mb Buffer to draw */ + virtual void drawMeshBuffer(const scene::IMeshBuffer* mb) =0; + + //! Draws normals of a mesh buffer + /** \param mb Buffer to draw the normals of + \param length length scale factor of the normals + \param color Color the normals are rendered with + */ + virtual void drawMeshBufferNormals(const scene::IMeshBuffer* mb, f32 length=10.f, SColor color=0xffffffff) =0; + + //! Sets the fog mode. + /** These are global values attached to each 3d object rendered, + which has the fog flag enabled in its material. + \param color Color of the fog + \param fogType Type of fog used + \param start Only used in linear fog mode (linearFog=true). + Specifies where fog starts. + \param end Only used in linear fog mode (linearFog=true). + Specifies where fog ends. + \param density Only used in exponential fog mode + (linearFog=false). Must be a value between 0 and 1. + \param pixelFog Set this to false for vertex fog, and true if + you want per-pixel fog. + \param rangeFog Set this to true to enable range-based vertex + fog. The distance from the viewer is used to compute the fog, + not the z-coordinate. This is better, but slower. This might not + be available with all drivers and fog settings. */ + virtual void setFog(SColor color=SColor(0,255,255,255), + E_FOG_TYPE fogType=EFT_FOG_LINEAR, + f32 start=50.0f, f32 end=100.0f, f32 density=0.01f, + bool pixelFog=false, bool rangeFog=false) =0; + + //! Gets the fog mode. + virtual void getFog(SColor& color, E_FOG_TYPE& fogType, + f32& start, f32& end, f32& density, + bool& pixelFog, bool& rangeFog) = 0; + + //! Get the current color format of the color buffer + /** \return Color format of the color buffer. */ + virtual ECOLOR_FORMAT getColorFormat() const =0; + + //! Get the size of the screen or render window. + /** \return Size of screen or render window. */ + virtual const core::dimension2d& getScreenSize() const =0; + + //! Get the size of the current render target + /** This method will return the screen size if the driver + doesn't support render to texture, or if the current render + target is the screen. + \return Size of render target or screen/window */ + virtual const core::dimension2d& getCurrentRenderTargetSize() const =0; + + //! Returns current frames per second value. + /** This value is updated approximately every 1.5 seconds and + is only intended to provide a rough guide to the average frame + rate. It is not suitable for use in performing timing + calculations or framerate independent movement. + \return Approximate amount of frames per second drawn. */ + virtual s32 getFPS() const =0; + + //! Returns amount of primitives (mostly triangles) which were drawn in the last frame. + /** Together with getFPS() very useful method for statistics. + \param mode Defines if the primitives drawn are accumulated or + counted per frame. + \return Amount of primitives drawn in the last frame. */ + virtual u32 getPrimitiveCountDrawn( u32 mode =0 ) const =0; + + //! Deletes all dynamic lights which were previously added with addDynamicLight(). + virtual void deleteAllDynamicLights() =0; + + //! adds a dynamic light, returning an index to the light + //! \param light: the light data to use to create the light + //! \return An index to the light, or -1 if an error occurs + virtual s32 addDynamicLight(const SLight& light) =0; + + //! Returns the maximal amount of dynamic lights the device can handle + /** \return Maximal amount of dynamic lights. */ + virtual u32 getMaximalDynamicLightAmount() const =0; + + //! Returns amount of dynamic lights currently set + /** \return Amount of dynamic lights currently set */ + virtual u32 getDynamicLightCount() const =0; + + //! Returns light data which was previously set by IVideoDriver::addDynamicLight(). + /** \param idx Zero based index of the light. Must be 0 or + greater and smaller than IVideoDriver::getDynamicLightCount. + \return Light data. */ + virtual const SLight& getDynamicLight(u32 idx) const =0; + + //! Turns a dynamic light on or off + //! \param lightIndex: the index returned by addDynamicLight + //! \param turnOn: true to turn the light on, false to turn it off + virtual void turnLightOn(s32 lightIndex, bool turnOn) =0; + + //! Gets name of this video driver. + /** \return Returns the name of the video driver, e.g. in case + of the Direct3D8 driver, it would return "Direct3D 8.1". */ + virtual const wchar_t* getName() const =0; + + //! Adds an external image loader to the engine. + /** This is useful if the Irrlicht Engine should be able to load + textures of currently unsupported file formats (e.g. gif). The + IImageLoader only needs to be implemented for loading this file + format. A pointer to the implementation can be passed to the + engine using this method. + \param loader Pointer to the external loader created. */ + virtual void addExternalImageLoader(IImageLoader* loader) =0; + + //! Adds an external image writer to the engine. + /** This is useful if the Irrlicht Engine should be able to + write textures of currently unsupported file formats (e.g + .gif). The IImageWriter only needs to be implemented for + writing this file format. A pointer to the implementation can + be passed to the engine using this method. + \param writer: Pointer to the external writer created. */ + virtual void addExternalImageWriter(IImageWriter* writer) =0; + + //! Returns the maximum amount of primitives + /** (mostly vertices) which the device is able to render with + one drawVertexPrimitiveList call. + \return Maximum amount of primitives. */ + virtual u32 getMaximalPrimitiveCount() const =0; + + //! Enables or disables a texture creation flag. + /** These flags define how textures should be created. By + changing this value, you can influence for example the speed of + rendering a lot. But please note that the video drivers take + this value only as recommendation. It could happen that you + enable the ETCF_ALWAYS_16_BIT mode, but the driver still creates + 32 bit textures. + \param flag Texture creation flag. + \param enabled Specifies if the given flag should be enabled or + disabled. */ + virtual void setTextureCreationFlag(E_TEXTURE_CREATION_FLAG flag, bool enabled=true) =0; + + //! Returns if a texture creation flag is enabled or disabled. + /** You can change this value using setTextureCreationFlag(). + \param flag Texture creation flag. + \return The current texture creation flag enabled mode. */ + virtual bool getTextureCreationFlag(E_TEXTURE_CREATION_FLAG flag) const =0; + + //! Creates a software image from a file. + /** No hardware texture will be created for this image. This + method is useful for example if you want to read a heightmap + for a terrain renderer. + \param filename Name of the file from which the image is + created. + \return The created image. + If you no longer need the image, you should call IImage::drop(). + See IReferenceCounted::drop() for more information. */ + virtual IImage* createImageFromFile(const io::path& filename) = 0; + + //! Creates a software image from a file. + /** No hardware texture will be created for this image. This + method is useful for example if you want to read a heightmap + for a terrain renderer. + \param file File from which the image is created. + \return The created image. + If you no longer need the image, you should call IImage::drop(). + See IReferenceCounted::drop() for more information. */ + virtual IImage* createImageFromFile(io::IReadFile* file) =0; + + //! Writes the provided image to a file. + /** Requires that there is a suitable image writer registered + for writing the image. + \param image Image to write. + \param filename Name of the file to write. + \param param Control parameter for the backend (e.g. compression + level). + \return True on successful write. */ + virtual bool writeImageToFile(IImage* image, const io::path& filename, u32 param = 0) = 0; + + //! Writes the provided image to a file. + /** Requires that there is a suitable image writer registered + for writing the image. + \param image Image to write. + \param file An already open io::IWriteFile object. The name + will be used to determine the appropriate image writer to use. + \param param Control parameter for the backend (e.g. compression + level). + \return True on successful write. */ + virtual bool writeImageToFile(IImage* image, io::IWriteFile* file, u32 param =0) =0; + + //! Creates a software image from a byte array. + /** No hardware texture will be created for this image. This + method is useful for example if you want to read a heightmap + for a terrain renderer. + \param format Desired color format of the texture + \param size Desired size of the image + \param data A byte array with pixel color information + \param ownForeignMemory If true, the image will use the data + pointer directly and own it afterwards. If false, the memory + will by copied internally. + \param deleteMemory Whether the memory is deallocated upon + destruction. + \return The created image. + If you no longer need the image, you should call IImage::drop(). + See IReferenceCounted::drop() for more information. */ + virtual IImage* createImageFromData(ECOLOR_FORMAT format, + const core::dimension2d& size, void *data, + bool ownForeignMemory=false, + bool deleteMemory = true) =0; + + //! Creates an empty software image. + /** + \param format Desired color format of the image. + \param size Size of the image to create. + \return The created image. + If you no longer need the image, you should call IImage::drop(). + See IReferenceCounted::drop() for more information. */ + virtual IImage* createImage(ECOLOR_FORMAT format, const core::dimension2d& size) =0; + + //! Creates a software image by converting it to given format from another image. + /** \deprecated Create an empty image and use copyTo(). This method may be removed by Irrlicht 1.9. + \param format Desired color format of the image. + \param imageToCopy Image to copy to the new image. + \return The created image. + If you no longer need the image, you should call IImage::drop(). + See IReferenceCounted::drop() for more information. */ + _IRR_DEPRECATED_ virtual IImage* createImage(ECOLOR_FORMAT format, IImage *imageToCopy) =0; + + //! Creates a software image from a part of another image. + /** \deprecated Create an empty image and use copyTo(). This method may be removed by Irrlicht 1.9. + \param imageToCopy Image to copy to the new image in part. + \param pos Position of rectangle to copy. + \param size Extents of rectangle to copy. + \return The created image. + If you no longer need the image, you should call IImage::drop(). + See IReferenceCounted::drop() for more information. */ + _IRR_DEPRECATED_ virtual IImage* createImage(IImage* imageToCopy, + const core::position2d& pos, + const core::dimension2d& size) =0; + + //! Creates a software image from a part of a texture. + /** + \param texture Texture to copy to the new image in part. + \param pos Position of rectangle to copy. + \param size Extents of rectangle to copy. + \return The created image. + If you no longer need the image, you should call IImage::drop(). + See IReferenceCounted::drop() for more information. */ + virtual IImage* createImage(ITexture* texture, + const core::position2d& pos, + const core::dimension2d& size) =0; + + //! Event handler for resize events. Only used by the engine internally. + /** Used to notify the driver that the window was resized. + Usually, there is no need to call this method. */ + virtual void OnResize(const core::dimension2d& size) =0; + + //! Adds a new material renderer to the video device. + /** Use this method to extend the VideoDriver with new material + types. To extend the engine using this method do the following: + Derive a class from IMaterialRenderer and override the methods + you need. For setting the right renderstates, you can try to + get a pointer to the real rendering device using + IVideoDriver::getExposedVideoData(). Add your class with + IVideoDriver::addMaterialRenderer(). To use an object being + displayed with your new material, set the MaterialType member of + the SMaterial struct to the value returned by this method. + If you simply want to create a new material using vertex and/or + pixel shaders it would be easier to use the + video::IGPUProgrammingServices interface which you can get + using the getGPUProgrammingServices() method. + \param renderer A pointer to the new renderer. + \param name Optional name for the material renderer entry. + \return The number of the material type which can be set in + SMaterial::MaterialType to use the renderer. -1 is returned if + an error occured. For example if you tried to add an material + renderer to the software renderer or the null device, which do + not accept material renderers. */ + virtual s32 addMaterialRenderer(IMaterialRenderer* renderer, const c8* name =0) =0; + + //! Get access to a material renderer by index. + /** \param idx Id of the material renderer. Can be a value of + the E_MATERIAL_TYPE enum or a value which was returned by + addMaterialRenderer(). + \return Pointer to material renderer or null if not existing. */ + virtual IMaterialRenderer* getMaterialRenderer(u32 idx) =0; + + //! Get amount of currently available material renderers. + /** \return Amount of currently available material renderers. */ + virtual u32 getMaterialRendererCount() const =0; + + //! Get name of a material renderer + /** This string can, e.g., be used to test if a specific + renderer already has been registered/created, or use this + string to store data about materials: This returned name will + be also used when serializing materials. + \param idx Id of the material renderer. Can be a value of the + E_MATERIAL_TYPE enum or a value which was returned by + addMaterialRenderer(). + \return String with the name of the renderer, or 0 if not + exisiting */ + virtual const c8* getMaterialRendererName(u32 idx) const =0; + + //! Sets the name of a material renderer. + /** Will have no effect on built-in material renderers. + \param idx: Id of the material renderer. Can be a value of the + E_MATERIAL_TYPE enum or a value which was returned by + addMaterialRenderer(). + \param name: New name of the material renderer. */ + virtual void setMaterialRendererName(s32 idx, const c8* name) =0; + + //! Creates material attributes list from a material + /** This method is useful for serialization and more. + Please note that the video driver will use the material + renderer names from getMaterialRendererName() to write out the + material type name, so they should be set before. + \param material The material to serialize. + \param options Additional options which might influence the + serialization. + \return The io::IAttributes container holding the material + properties. */ + virtual io::IAttributes* createAttributesFromMaterial(const video::SMaterial& material, + io::SAttributeReadWriteOptions* options=0) =0; + + //! Fills an SMaterial structure from attributes. + /** Please note that for setting material types of the + material, the video driver will need to query the material + renderers for their names, so all non built-in materials must + have been created before calling this method. + \param outMaterial The material to set the properties for. + \param attributes The attributes to read from. */ + virtual void fillMaterialStructureFromAttributes(video::SMaterial& outMaterial, io::IAttributes* attributes) =0; + + //! Returns driver and operating system specific data about the IVideoDriver. + /** This method should only be used if the engine should be + extended without having to modify the source of the engine. + \return Collection of device dependent pointers. */ + virtual const SExposedVideoData& getExposedVideoData() =0; + + //! Get type of video driver + /** \return Type of driver. */ + virtual E_DRIVER_TYPE getDriverType() const =0; + + //! Gets the IGPUProgrammingServices interface. + /** \return Pointer to the IGPUProgrammingServices. Returns 0 + if the video driver does not support this. For example the + Software driver and the Null driver will always return 0. */ + virtual IGPUProgrammingServices* getGPUProgrammingServices() =0; + + //! Returns a pointer to the mesh manipulator. + virtual scene::IMeshManipulator* getMeshManipulator() =0; + + //! Clears the ZBuffer. + /** Note that you usually need not to call this method, as it + is automatically done in IVideoDriver::beginScene() or + IVideoDriver::setRenderTarget() if you enable zBuffer. But if + you have to render some special things, you can clear the + zbuffer during the rendering process with this method any time. + */ + virtual void clearZBuffer() =0; + + //! Make a screenshot of the last rendered frame. + /** \return An image created from the last rendered frame. */ + virtual IImage* createScreenShot(video::ECOLOR_FORMAT format=video::ECF_UNKNOWN, video::E_RENDER_TARGET target=video::ERT_FRAME_BUFFER) =0; + + //! Check if the image is already loaded. + /** Works similar to getTexture(), but does not load the texture + if it is not currently loaded. + \param filename Name of the texture. + \return Pointer to loaded texture, or 0 if not found. */ + virtual video::ITexture* findTexture(const io::path& filename) = 0; + + //! Set or unset a clipping plane. + /** There are at least 6 clipping planes available for the user + to set at will. + \param index The plane index. Must be between 0 and + MaxUserClipPlanes. + \param plane The plane itself. + \param enable If true, enable the clipping plane else disable + it. + \return True if the clipping plane is usable. */ + virtual bool setClipPlane(u32 index, const core::plane3df& plane, bool enable=false) =0; + + //! Enable or disable a clipping plane. + /** There are at least 6 clipping planes available for the user + to set at will. + \param index The plane index. Must be between 0 and + MaxUserClipPlanes. + \param enable If true, enable the clipping plane else disable + it. */ + virtual void enableClipPlane(u32 index, bool enable) =0; + + //! Set the minimum number of vertices for which a hw buffer will be created + /** \param count Number of vertices to set as minimum. */ + virtual void setMinHardwareBufferVertexCount(u32 count) =0; + + //! Get the global Material, which might override local materials. + /** Depending on the enable flags, values from this Material + are used to override those of local materials of some + meshbuffer being rendered. + \return Reference to the Override Material. */ + virtual SOverrideMaterial& getOverrideMaterial() =0; + + //! Get the 2d override material for altering its values + /** The 2d override materual allows to alter certain render + states of the 2d methods. Not all members of SMaterial are + honored, especially not MaterialType and Textures. Moreover, + the zbuffer is always ignored, and lighting is always off. All + other flags can be changed, though some might have to effect + in most cases. + Please note that you have to enable/disable this effect with + enableInitMaterial2D(). This effect is costly, as it increases + the number of state changes considerably. Always reset the + values when done. + \return Material reference which should be altered to reflect + the new settings. + */ + virtual SMaterial& getMaterial2D() =0; + + //! Enable the 2d override material + /** \param enable Flag which tells whether the material shall be + enabled or disabled. */ + virtual void enableMaterial2D(bool enable=true) =0; + + //! Get the graphics card vendor name. + virtual core::stringc getVendorInfo() =0; + + //! Only used by the engine internally. + /** The ambient color is set in the scene manager, see + scene::ISceneManager::setAmbientLight(). + \param color New color of the ambient light. */ + virtual void setAmbientLight(const SColorf& color) =0; + + //! Only used by the engine internally. + /** Passes the global material flag AllowZWriteOnTransparent. + Use the SceneManager attribute to set this value from your app. + \param flag Default behavior is to disable ZWrite, i.e. false. */ + virtual void setAllowZWriteOnTransparent(bool flag) =0; + + //! Get the maximum texture size supported. + virtual core::dimension2du getMaxTextureSize() const =0; + + //! Color conversion convenience function + /** Convert an image (as array of pixels) from source to destination + array, thereby converting the color format. The pixel size is + determined by the color formats. + \param sP Pointer to source + \param sF Color format of source + \param sN Number of pixels to convert, both array must be large enough + \param dP Pointer to destination + \param dF Color format of destination + */ + virtual void convertColor(const void* sP, ECOLOR_FORMAT sF, s32 sN, + void* dP, ECOLOR_FORMAT dF) const =0; + }; + +} // end namespace video +} // end namespace irr + + +#endif diff --git a/inc/IVideoModeList.h b/inc/IVideoModeList.h new file mode 100644 index 0000000..aef0f5a --- /dev/null +++ b/inc/IVideoModeList.h @@ -0,0 +1,62 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __IRR_I_VIDEO_MODE_LIST_H_INCLUDED__ +#define __IRR_I_VIDEO_MODE_LIST_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "dimension2d.h" + +namespace irr +{ +namespace video +{ + + //! A list of all available video modes. + /** You can get a list via IrrlichtDevice::getVideoModeList(). If you are confused + now, because you think you have to create an Irrlicht Device with a video + mode before being able to get the video mode list, let me tell you that + there is no need to start up an Irrlicht Device with EDT_DIRECT3D8, EDT_OPENGL or + EDT_SOFTWARE: For this (and for lots of other reasons) the null device, + EDT_NULL exists.*/ + class IVideoModeList : public virtual IReferenceCounted + { + public: + + //! Gets amount of video modes in the list. + /** \return Returns amount of video modes. */ + virtual s32 getVideoModeCount() const = 0; + + //! Get the screen size of a video mode in pixels. + /** \param modeNumber: zero based index of the video mode. + \return Size of screen in pixels of the specified video mode. */ + virtual core::dimension2d getVideoModeResolution(s32 modeNumber) const = 0; + + //! Get a supported screen size with certain constraints. + /** \param minSize: Minimum dimensions required. + \param maxSize: Maximum dimensions allowed. + \return Size of screen in pixels which matches the requirements. + as good as possible. */ + virtual core::dimension2d getVideoModeResolution(const core::dimension2d& minSize, const core::dimension2d& maxSize) const = 0; + + //! Get the pixel depth of a video mode in bits. + /** \param modeNumber: zero based index of the video mode. + \return Size of each pixel of the specified video mode in bits. */ + virtual s32 getVideoModeDepth(s32 modeNumber) const = 0; + + //! Get current desktop screen resolution. + /** \return Size of screen in pixels of the current desktop video mode. */ + virtual const core::dimension2d& getDesktopResolution() const = 0; + + //! Get the pixel depth of a video mode in bits. + /** \return Size of each pixel of the current desktop video mode in bits. */ + virtual s32 getDesktopDepth() const = 0; + }; + +} // end namespace video +} // end namespace irr + + +#endif + diff --git a/inc/IVolumeLightSceneNode.h b/inc/IVolumeLightSceneNode.h new file mode 100644 index 0000000..8ae2d17 --- /dev/null +++ b/inc/IVolumeLightSceneNode.h @@ -0,0 +1,60 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h +// +// created by Dean Wadsworth aka Varmint Dec 31 2007 + +#ifndef __I_VOLUME_LIGHT_SCENE_NODE_H_INCLUDED__ +#define __I_VOLUME_LIGHT_SCENE_NODE_H_INCLUDED__ + +#include "ISceneNode.h" + +namespace irr +{ +namespace scene +{ + class IMeshBuffer; + + class IVolumeLightSceneNode : public ISceneNode + { + public: + + //! constructor + IVolumeLightSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id, + const core::vector3df& position, + const core::vector3df& rotation, + const core::vector3df& scale) + : ISceneNode(parent, mgr, id, position, rotation, scale) {}; + + //! Returns type of the scene node + virtual ESCENE_NODE_TYPE getType() const { return ESNT_VOLUME_LIGHT; } + + //! Sets the number of segments across the U axis + virtual void setSubDivideU(const u32 inU) =0; + + //! Sets the number of segments across the V axis + virtual void setSubDivideV(const u32 inV) =0; + + //! Returns the number of segments across the U axis + virtual u32 getSubDivideU() const =0; + + //! Returns the number of segments across the V axis + virtual u32 getSubDivideV() const =0; + + //! Sets the color of the base of the light + virtual void setFootColor(const video::SColor inColor) =0; + + //! Sets the color of the tip of the light + virtual void setTailColor(const video::SColor inColor) =0; + + //! Returns the color of the base of the light + virtual video::SColor getFootColor() const =0; + + //! Returns the color of the tip of the light + virtual video::SColor getTailColor() const =0; + }; + +} // end namespace scene +} // end namespace irr + +#endif diff --git a/inc/IWriteFile.h b/inc/IWriteFile.h new file mode 100644 index 0000000..7bc9f20 --- /dev/null +++ b/inc/IWriteFile.h @@ -0,0 +1,50 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_WRITE_FILE_H_INCLUDED__ +#define __I_WRITE_FILE_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "path.h" + +namespace irr +{ +namespace io +{ + + //! Interface providing write access to a file. + class IWriteFile : public virtual IReferenceCounted + { + public: + //! Writes an amount of bytes to the file. + /** \param buffer Pointer to buffer of bytes to write. + \param sizeToWrite Amount of bytes to write to the file. + \return How much bytes were written. */ + virtual s32 write(const void* buffer, u32 sizeToWrite) = 0; + + //! Changes position in file + /** \param finalPos Destination position in the file. + \param relativeMovement If set to true, the position in the file is + changed relative to current position. Otherwise the position is changed + from begin of file. + \return True if successful, otherwise false. */ + virtual bool seek(long finalPos, bool relativeMovement = false) = 0; + + //! Get the current position in the file. + /** \return Current position in the file in bytes. */ + virtual long getPos() const = 0; + + //! Get name of file. + /** \return File name as zero terminated character string. */ + virtual const path& getFileName() const = 0; + }; + + //! Internal function, please do not use. + IWriteFile* createWriteFile(const io::path& fileName, bool append); + +} // end namespace io +} // end namespace irr + +#endif + diff --git a/inc/IXMLReader.h b/inc/IXMLReader.h new file mode 100644 index 0000000..ec47c00 --- /dev/null +++ b/inc/IXMLReader.h @@ -0,0 +1,31 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_XML_READER_H_INCLUDED__ +#define __I_XML_READER_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "irrXML.h" + +namespace irr +{ +namespace io +{ + //! An xml reader for wide characters, derived from IReferenceCounted. + /** This XML Parser can read any type of text files from any source + Irrlicht can read. Just call IFileSystem::createXMLReader(). For more + informations on how to use the parser, see IIrrXMLReader */ + typedef IIrrXMLReader IXMLReader; + + //! An xml reader for ASCII or UTF-8 characters, derived from IReferenceCounted. + /** This XML Parser can read any type of text files from any source + Irrlicht can read. Just call IFileSystem::createXMLReaderUTF8(). For + more informations on how to use the parser, see IIrrXMLReader */ + typedef IIrrXMLReader IXMLReaderUTF8; + +} // end namespace io +} // end namespace irr + +#endif + diff --git a/inc/IXMLWriter.h b/inc/IXMLWriter.h new file mode 100644 index 0000000..8b43bc9 --- /dev/null +++ b/inc/IXMLWriter.h @@ -0,0 +1,77 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_XML_WRITER_H_INCLUDED__ +#define __I_XML_WRITER_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "irrArray.h" +#include "irrString.h" + +namespace irr +{ +namespace io +{ + + //! Interface providing methods for making it easier to write XML files. + /** This XML Writer writes xml files using in the platform dependent + wchar_t format and sets the xml-encoding correspondingly. */ + class IXMLWriter : public virtual IReferenceCounted + { + public: + //! Writes an xml 1.0 header. + /** Looks like <?xml version="1.0"?>. This should always + be called before writing anything other, because also the text + file header for unicode texts is written out with this method. */ + virtual void writeXMLHeader() = 0; + + //! Writes an xml element with maximal 5 attributes like "" or + //! <foo optAttr="value" />. + /** The element can be empty or not. + \param name: Name of the element + \param empty: Specifies if the element should be empty. Like + "". If You set this to false, something like this is + written instead: "". + \param attr1Name: 1st attributes name + \param attr1Value: 1st attributes value + \param attr2Name: 2nd attributes name + \param attr2Value: 2nd attributes value + \param attr3Name: 3rd attributes name + \param attr3Value: 3rd attributes value + \param attr4Name: 4th attributes name + \param attr4Value: 4th attributes value + \param attr5Name: 5th attributes name + \param attr5Value: 5th attributes value */ + virtual void writeElement(const wchar_t* name, bool empty=false, + const wchar_t* attr1Name = 0, const wchar_t* attr1Value = 0, + const wchar_t* attr2Name = 0, const wchar_t* attr2Value = 0, + const wchar_t* attr3Name = 0, const wchar_t* attr3Value = 0, + const wchar_t* attr4Name = 0, const wchar_t* attr4Value = 0, + const wchar_t* attr5Name = 0, const wchar_t* attr5Value = 0) = 0; + + //! Writes an xml element with any number of attributes + virtual void writeElement(const wchar_t* name, bool empty, + core::array &names, core::array &values) = 0; + + //! Writes a comment into the xml file + virtual void writeComment(const wchar_t* comment) = 0; + + //! Writes the closing tag for an element. Like "" + virtual void writeClosingTag(const wchar_t* name) = 0; + + //! Writes a text into the file. + /** All occurrences of special characters such as + & (&), < (<), > (>), and " (") are automaticly + replaced. */ + virtual void writeText(const wchar_t* text) = 0; + + //! Writes a line break + virtual void writeLineBreak() = 0; + }; + +} // end namespace io +} // end namespace irr + +#endif + diff --git a/inc/IrrCompileConfig.h b/inc/IrrCompileConfig.h new file mode 100644 index 0000000..c2c5d12 --- /dev/null +++ b/inc/IrrCompileConfig.h @@ -0,0 +1,832 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __IRR_COMPILE_CONFIG_H_INCLUDED__ +#define __IRR_COMPILE_CONFIG_H_INCLUDED__ + +//! Irrlicht SDK Version +#define IRRLICHT_VERSION_MAJOR 1 +#define IRRLICHT_VERSION_MINOR 8 +#define IRRLICHT_VERSION_REVISION 4 +// This flag will be defined only in SVN, the official release code will have +// it undefined +//#define IRRLICHT_VERSION_SVN -alpha +#define IRRLICHT_SDK_VERSION "1.8.4" + +#include // TODO: Although included elsewhere this is required at least for mingw + +//! The defines for different operating system are: +//! _IRR_XBOX_PLATFORM_ for XBox +//! _IRR_WINDOWS_ for all irrlicht supported Windows versions +//! _IRR_WINDOWS_CE_PLATFORM_ for Windows CE +//! _IRR_WINDOWS_API_ for Windows or XBox +//! _IRR_LINUX_PLATFORM_ for Linux (it is defined here if no other os is defined) +//! _IRR_SOLARIS_PLATFORM_ for Solaris +//! _IRR_OSX_PLATFORM_ for Apple systems running OSX +//! _IRR_POSIX_API_ for Posix compatible systems +//! Note: PLATFORM defines the OS specific layer, API can group several platforms + +//! DEVICE is the windowing system used, several PLATFORMs support more than one DEVICE +//! Irrlicht can be compiled with more than one device +//! _IRR_COMPILE_WITH_WINDOWS_DEVICE_ for Windows API based device +//! _IRR_COMPILE_WITH_WINDOWS_CE_DEVICE_ for Windows CE API based device +//! _IRR_COMPILE_WITH_OSX_DEVICE_ for Cocoa native windowing on OSX +//! _IRR_COMPILE_WITH_X11_DEVICE_ for Linux X11 based device +//! _IRR_COMPILE_WITH_SDL_DEVICE_ for platform independent SDL framework +//! _IRR_COMPILE_WITH_CONSOLE_DEVICE_ for no windowing system, used as a fallback +//! _IRR_COMPILE_WITH_FB_DEVICE_ for framebuffer systems + +//! Passing defines to the compiler which have NO in front of the _IRR definename is an alternative +//! way which can be used to disable defines (instead of outcommenting them in this header). +//! So defines can be controlled from Makefiles or Projectfiles which allows building +//! different library versions without having to change the sources. +//! Example: NO_IRR_COMPILE_WITH_X11_ would disable X11 + + +//! Uncomment this line to compile with the SDL device +//#define _IRR_COMPILE_WITH_SDL_DEVICE_ +#ifdef NO_IRR_COMPILE_WITH_SDL_DEVICE_ +#undef _IRR_COMPILE_WITH_SDL_DEVICE_ +#endif + +//! Comment this line to compile without the fallback console device. +#define _IRR_COMPILE_WITH_CONSOLE_DEVICE_ +#ifdef NO_IRR_COMPILE_WITH_CONSOLE_DEVICE_ +#undef _IRR_COMPILE_WITH_CONSOLE_DEVICE_ +#endif + +//! WIN32 for Windows32 +//! WIN64 for Windows64 +// The windows platform and API support SDL and WINDOW device +#if defined(_WIN32) || defined(_WIN64) || defined(WIN32) || defined(WIN64) +#define _IRR_WINDOWS_ +#define _IRR_WINDOWS_API_ +#define _IRR_COMPILE_WITH_WINDOWS_DEVICE_ +#endif + +//! WINCE is a very restricted environment for mobile devices +#if defined(_WIN32_WCE) +#define _IRR_WINDOWS_ +#define _IRR_WINDOWS_API_ +#define _IRR_WINDOWS_CE_PLATFORM_ +#define _IRR_COMPILE_WITH_WINDOWS_CE_DEVICE_ +#endif + +#if defined(_MSC_VER) && (_MSC_VER < 1300) +# error "Only Microsoft Visual Studio 7.0 and later are supported." +#endif + +// XBox only suppots the native Window stuff +#if defined(_XBOX) + #undef _IRR_WINDOWS_ + #define _IRR_XBOX_PLATFORM_ + #define _IRR_WINDOWS_API_ + //#define _IRR_COMPILE_WITH_WINDOWS_DEVICE_ + #undef _IRR_COMPILE_WITH_WINDOWS_DEVICE_ + //#define _IRR_COMPILE_WITH_SDL_DEVICE_ + + #include +#endif + +#if defined(__APPLE__) || defined(MACOSX) +#if !defined(MACOSX) +#define MACOSX // legacy support +#endif +#define _IRR_OSX_PLATFORM_ +#define _IRR_COMPILE_WITH_OSX_DEVICE_ +#endif + +#if !defined(_IRR_WINDOWS_API_) && !defined(_IRR_OSX_PLATFORM_) +#ifndef _IRR_SOLARIS_PLATFORM_ +#define _IRR_LINUX_PLATFORM_ +#endif +#define _IRR_POSIX_API_ +#define _IRR_COMPILE_WITH_X11_DEVICE_ +#endif + + +//! Define _IRR_COMPILE_WITH_JOYSTICK_SUPPORT_ if you want joystick events. +#define _IRR_COMPILE_WITH_JOYSTICK_EVENTS_ +#ifdef NO_IRR_COMPILE_WITH_JOYSTICK_EVENTS_ +#undef _IRR_COMPILE_WITH_JOYSTICK_EVENTS_ +#endif + + +//! Maximum number of texture an SMaterial can have, up to 8 are supported by Irrlicht. +#define _IRR_MATERIAL_MAX_TEXTURES_ 4 + +//! Define _IRR_COMPILE_WITH_DIRECT3D_8_ and _IRR_COMPILE_WITH_DIRECT3D_9_ to +//! compile the Irrlicht engine with Direct3D8 and/or DIRECT3D9. +/** If you only want to use the software device or opengl you can disable those defines. +This switch is mostly disabled because people do not get the g++ compiler compile +directX header files, and directX is only available on Windows platforms. If you +are using Dev-Cpp, and want to compile this using a DX dev pack, you can define +_IRR_COMPILE_WITH_DX9_DEV_PACK_. So you simply need to add something like this +to the compiler settings: -DIRR_COMPILE_WITH_DX9_DEV_PACK +and this to the linker settings: -ld3dx9 -ld3dx8 + +Microsoft have chosen to remove D3D8 headers from their recent DXSDKs, and +so D3D8 support is now disabled by default. If you really want to build +with D3D8 support, then you will have to source a DXSDK with the appropriate +headers, e.g. Summer 2004. This is a Microsoft issue, not an Irrlicht one. +*/ +#if defined(_IRR_WINDOWS_API_) && (!defined(__GNUC__) || defined(IRR_COMPILE_WITH_DX9_DEV_PACK)) + +//! Define _IRR_COMPILE_WITH_DIRECTINPUT_JOYSTICK_ if you want to use DirectInput for joystick handling. +/** This only applies to Windows devices, currently only supported under Win32 device. +If not defined, Windows Multimedia library is used, which offers also broad support for joystick devices. */ +#define _IRR_COMPILE_WITH_DIRECTINPUT_JOYSTICK_ +#ifdef NO_IRR_COMPILE_WITH_DIRECTINPUT_JOYSTICK_ +#undef _IRR_COMPILE_WITH_DIRECTINPUT_JOYSTICK_ +#endif +// can't get this to compile currently under borland, can be removed if someone has a better solution +#if defined(__BORLANDC__) +#undef _IRR_COMPILE_WITH_DIRECTINPUT_JOYSTICK_ +#endif + +//! Only define _IRR_COMPILE_WITH_DIRECT3D_8_ if you have an appropriate DXSDK, e.g. Summer 2004 +// #define _IRR_COMPILE_WITH_DIRECT3D_8_ +#define _IRR_COMPILE_WITH_DIRECT3D_9_ + +#ifdef NO_IRR_COMPILE_WITH_DIRECT3D_8_ +#undef _IRR_COMPILE_WITH_DIRECT3D_8_ +#endif +#ifdef NO_IRR_COMPILE_WITH_DIRECT3D_9_ +#undef _IRR_COMPILE_WITH_DIRECT3D_9_ +#endif + +#endif + +//! Define _IRR_COMPILE_WITH_OPENGL_ to compile the Irrlicht engine with OpenGL. +/** If you do not wish the engine to be compiled with OpenGL, comment this +define out. */ +#define _IRR_COMPILE_WITH_OPENGL_ +#ifdef NO_IRR_COMPILE_WITH_OPENGL_ +#undef _IRR_COMPILE_WITH_OPENGL_ +#endif + +//! Define _IRR_COMPILE_WITH_SOFTWARE_ to compile the Irrlicht engine with software driver +/** If you do not need the software driver, or want to use Burning's Video instead, +comment this define out */ +#define _IRR_COMPILE_WITH_SOFTWARE_ +#ifdef NO_IRR_COMPILE_WITH_SOFTWARE_ +#undef _IRR_COMPILE_WITH_SOFTWARE_ +#endif + +//! Define _IRR_COMPILE_WITH_BURNINGSVIDEO_ to compile the Irrlicht engine with Burning's video driver +/** If you do not need this software driver, you can comment this define out. */ +#define _IRR_COMPILE_WITH_BURNINGSVIDEO_ +#ifdef NO_IRR_COMPILE_WITH_BURNINGSVIDEO_ +#undef _IRR_COMPILE_WITH_BURNINGSVIDEO_ +#endif + +//! Define _IRR_COMPILE_WITH_X11_ to compile the Irrlicht engine with X11 support. +/** If you do not wish the engine to be compiled with X11, comment this +define out. */ +// Only used in LinuxDevice. +#define _IRR_COMPILE_WITH_X11_ +#ifdef NO_IRR_COMPILE_WITH_X11_ +#undef _IRR_COMPILE_WITH_X11_ +#endif + +//! Define _IRR_OPENGL_USE_EXTPOINTER_ if the OpenGL renderer should use OpenGL extensions via function pointers. +/** On some systems there is no support for the dynamic extension of OpenGL + via function pointers such that this has to be undef'ed. */ +#if !defined(_IRR_OSX_PLATFORM_) && !defined(_IRR_SOLARIS_PLATFORM_) +#define _IRR_OPENGL_USE_EXTPOINTER_ +#endif + +//! On some Linux systems the XF86 vidmode extension or X11 RandR are missing. Use these flags +//! to remove the dependencies such that Irrlicht will compile on those systems, too. +//! If you don't need colored cursors you can also disable the Xcursor extension +#if defined(_IRR_LINUX_PLATFORM_) && defined(_IRR_COMPILE_WITH_X11_) +#define _IRR_LINUX_X11_VIDMODE_ +//#define _IRR_LINUX_X11_RANDR_ +#ifdef NO_IRR_LINUX_X11_VIDMODE_ +#undef _IRR_LINUX_X11_VIDMODE_ +#endif +#ifdef NO_IRR_LINUX_X11_RANDR_ +#undef _IRR_LINUX_X11_RANDR_ +#endif + +//! X11 has by default only monochrome cursors, but using the Xcursor library we can also get color cursor support. +//! If you have the need for custom color cursors on X11 then enable this and make sure you also link +//! to the Xcursor library in your Makefile/Projectfile. +//#define _IRR_LINUX_XCURSOR_ +#ifdef NO_IRR_LINUX_XCURSOR_ +#undef _IRR_LINUX_XCURSOR_ +#endif + +#endif + +//! Define _IRR_COMPILE_WITH_GUI_ to compile the engine with the built-in GUI +/** Disable this if you are using an external library to draw the GUI. If you disable this then +you will not be able to use anything provided by the GUI Environment, including loading fonts. */ +#define _IRR_COMPILE_WITH_GUI_ +#ifdef NO_IRR_COMPILE_WITH_GUI_ +#undef _IRR_COMPILE_WITH_GUI_ +#endif + +//! Define _IRR_WCHAR_FILESYSTEM to enable unicode filesystem support for the engine. +/** This enables the engine to read/write from unicode filesystem. If you +disable this feature, the engine behave as before (ansi). This is currently only supported +for Windows based systems. You also have to set #define UNICODE for this to compile. +*/ +//#define _IRR_WCHAR_FILESYSTEM +#ifdef NO_IRR_WCHAR_FILESYSTEM +#undef _IRR_WCHAR_FILESYSTEM +#endif + +//! Define _IRR_COMPILE_WITH_JPEGLIB_ to enable compiling the engine using libjpeg. +/** This enables the engine to read jpeg images. If you comment this out, +the engine will no longer read .jpeg images. */ +#define _IRR_COMPILE_WITH_LIBJPEG_ +#ifdef NO_IRR_COMPILE_WITH_LIBJPEG_ +#undef _IRR_COMPILE_WITH_LIBJPEG_ +#endif + +//! Define _IRR_USE_NON_SYSTEM_JPEG_LIB_ to let irrlicht use the jpeglib which comes with irrlicht. +/** If this is commented out, Irrlicht will try to compile using the jpeg lib installed in the system. + This is only used when _IRR_COMPILE_WITH_LIBJPEG_ is defined. */ +#define _IRR_USE_NON_SYSTEM_JPEG_LIB_ +#ifdef NO_IRR_USE_NON_SYSTEM_JPEG_LIB_ +#undef _IRR_USE_NON_SYSTEM_JPEG_LIB_ +#endif + +//! Define _IRR_COMPILE_WITH_LIBPNG_ to enable compiling the engine using libpng. +/** This enables the engine to read png images. If you comment this out, +the engine will no longer read .png images. */ +#define _IRR_COMPILE_WITH_LIBPNG_ +#ifdef NO_IRR_COMPILE_WITH_LIBPNG_ +#undef _IRR_COMPILE_WITH_LIBPNG_ +#endif + +//! Define _IRR_USE_NON_SYSTEM_LIBPNG_ to let irrlicht use the libpng which comes with irrlicht. +/** If this is commented out, Irrlicht will try to compile using the libpng installed in the system. + This is only used when _IRR_COMPILE_WITH_LIBPNG_ is defined. */ +#define _IRR_USE_NON_SYSTEM_LIB_PNG_ +#ifdef NO_IRR_USE_NON_SYSTEM_LIB_PNG_ +#undef _IRR_USE_NON_SYSTEM_LIB_PNG_ +#endif + +//! Define _IRR_D3D_NO_SHADER_DEBUGGING to disable shader debugging in D3D9 +/** If _IRR_D3D_NO_SHADER_DEBUGGING is undefined in IrrCompileConfig.h, +it is possible to debug all D3D9 shaders in VisualStudio. All shaders +(which have been generated in memory or read from archives for example) will be emitted +into a temporary file at runtime for this purpose. To debug your shaders, choose +Debug->Direct3D->StartWithDirect3DDebugging in Visual Studio, and for every shader a +file named 'irr_dbg_shader_%%.vsh' or 'irr_dbg_shader_%%.psh' will be created. Drag'n'drop +the file you want to debug into visual studio. That's it. You can now set breakpoints and +watch registers, variables etc. This works with ASM, HLSL, and both with pixel and vertex shaders. +Note that the engine will run in D3D REF for this, which is a lot slower than HAL. */ +#define _IRR_D3D_NO_SHADER_DEBUGGING +#ifdef NO_IRR_D3D_NO_SHADER_DEBUGGING +#undef _IRR_D3D_NO_SHADER_DEBUGGING +#endif + +//! Define _IRR_D3D_USE_LEGACY_HLSL_COMPILER to enable the old HLSL compiler in recent DX SDKs +/** This enables support for ps_1_x shaders for recent DX SDKs. Otherwise, support +for this shader model is not available anymore in SDKs after Oct2006. You need to +distribute the OCT2006_d3dx9_31_x86.cab or OCT2006_d3dx9_31_x64.cab though, in order +to provide the user with the proper DLL. That's why it's disabled by default. */ +//#define _IRR_D3D_USE_LEGACY_HLSL_COMPILER +#ifdef NO_IRR_D3D_USE_LEGACY_HLSL_COMPILER +#undef _IRR_D3D_USE_LEGACY_HLSL_COMPILER +#endif + +//! Define _IRR_COMPILE_WITH_CG_ to enable Cg Shading Language support +//#define _IRR_COMPILE_WITH_CG_ +#ifdef NO_IRR_COMPILE_WITH_CG_ +#undef _IRR_COMPILE_WITH_CG_ +#endif +#if !defined(_IRR_COMPILE_WITH_OPENGL_) && !defined(_IRR_COMPILE_WITH_DIRECT3D_9_) +#undef _IRR_COMPILE_WITH_CG_ +#endif + +//! Define _IRR_USE_NVIDIA_PERFHUD_ to opt-in to using the nVidia PerHUD tool +/** Enable, by opting-in, to use the nVidia PerfHUD performance analysis driver +tool . */ +#undef _IRR_USE_NVIDIA_PERFHUD_ + +//! Define one of the three setting for Burning's Video Software Rasterizer +/** So if we were marketing guys we could say Irrlicht has 4 Software-Rasterizers. + In a Nutshell: + All Burnings Rasterizers use 32 Bit Backbuffer, 32Bit Texture & 32 Bit Z or WBuffer, + 16 Bit/32 Bit can be adjusted on a global flag. + + BURNINGVIDEO_RENDERER_BEAUTIFUL + 32 Bit + Vertexcolor + Lighting + Per Pixel Perspective Correct + SubPixel/SubTexel Correct + + Bilinear Texturefiltering + WBuffer + + BURNINGVIDEO_RENDERER_FAST + 32 Bit + Per Pixel Perspective Correct + SubPixel/SubTexel Correct + WBuffer + + Bilinear Dithering TextureFiltering + WBuffer + + BURNINGVIDEO_RENDERER_ULTRA_FAST + 16Bit + SubPixel/SubTexel Correct + ZBuffer +*/ + +#define BURNINGVIDEO_RENDERER_BEAUTIFUL +//#define BURNINGVIDEO_RENDERER_FAST +//#define BURNINGVIDEO_RENDERER_ULTRA_FAST +//#define BURNINGVIDEO_RENDERER_CE + +//! Uncomment the following line if you want to ignore the deprecated warnings +//#define IGNORE_DEPRECATED_WARNING + +//! Define _IRR_COMPILE_WITH_IRR_SCENE_LOADER_ if you want to be able to load +/** .irr scenes using ISceneManager::loadScene */ +#define _IRR_COMPILE_WITH_IRR_SCENE_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_IRR_SCENE_LOADER_ +#undef _IRR_COMPILE_WITH_IRR_SCENE_LOADER_ +#endif + +//! Define _IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_ if you want to use bone based +/** animated meshes. If you compile without this, you will be unable to load +B3D, MS3D or X meshes */ +#define _IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_ +#ifdef NO_IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_ +#undef _IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_ +#endif + +#ifdef _IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_ +//! Define _IRR_COMPILE_WITH_B3D_LOADER_ if you want to use Blitz3D files +#define _IRR_COMPILE_WITH_B3D_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_B3D_LOADER_ +#undef _IRR_COMPILE_WITH_B3D_LOADER_ +#endif +//! Define _IRR_COMPILE_WITH_MS3D_LOADER_ if you want to Milkshape files +#define _IRR_COMPILE_WITH_MS3D_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_MS3D_LOADER_ +#undef _IRR_COMPILE_WITH_MS3D_LOADER_ +#endif +//! Define _IRR_COMPILE_WITH_X_LOADER_ if you want to use Microsoft X files +#define _IRR_COMPILE_WITH_X_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_X_LOADER_ +#undef _IRR_COMPILE_WITH_X_LOADER_ +#endif +//! Define _IRR_COMPILE_WITH_OGRE_LOADER_ if you want to load Ogre 3D files +#define _IRR_COMPILE_WITH_OGRE_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_OGRE_LOADER_ +#undef _IRR_COMPILE_WITH_OGRE_LOADER_ +#endif +#endif // _IRR_COMPILE_WITH_SKINNED_MESH_SUPPORT_ + +//! Define _IRR_COMPILE_WITH_IRR_MESH_LOADER_ if you want to load Irrlicht Engine .irrmesh files +#define _IRR_COMPILE_WITH_IRR_MESH_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_IRR_MESH_LOADER_ +#undef _IRR_COMPILE_WITH_IRR_MESH_LOADER_ +#endif +//! Define _IRR_COMPILE_WITH_HALFLIFE_LOADER_ if you want to load Halflife animated files +#define _IRR_COMPILE_WITH_HALFLIFE_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_HALFLIFE_LOADER_ +#undef _IRR_COMPILE_WITH_HALFLIFE_LOADER_ +#endif +//! Define _IRR_COMPILE_WITH_MD2_LOADER_ if you want to load Quake 2 animated files +#define _IRR_COMPILE_WITH_MD2_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_MD2_LOADER_ +#undef _IRR_COMPILE_WITH_MD2_LOADER_ +#endif +//! Define _IRR_COMPILE_WITH_MD3_LOADER_ if you want to load Quake 3 animated files +#define _IRR_COMPILE_WITH_MD3_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_MD3_LOADER_ +#undef _IRR_COMPILE_WITH_MD3_LOADER_ +#endif +//! Define _IRR_COMPILE_WITH_3DS_LOADER_ if you want to load 3D Studio Max files +#define _IRR_COMPILE_WITH_3DS_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_3DS_LOADER_ +#undef _IRR_COMPILE_WITH_3DS_LOADER_ +#endif +//! Define _IRR_COMPILE_WITH_COLLADA_LOADER_ if you want to load Collada files +#define _IRR_COMPILE_WITH_COLLADA_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_COLLADA_LOADER_ +#undef _IRR_COMPILE_WITH_COLLADA_LOADER_ +#endif +//! Define _IRR_COMPILE_WITH_CSM_LOADER_ if you want to load Cartography Shop files +#define _IRR_COMPILE_WITH_CSM_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_CSM_LOADER_ +#undef _IRR_COMPILE_WITH_CSM_LOADER_ +#endif +//! Define _IRR_COMPILE_WITH_BSP_LOADER_ if you want to load Quake 3 BSP files +#define _IRR_COMPILE_WITH_BSP_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_BSP_LOADER_ +#undef _IRR_COMPILE_WITH_BSP_LOADER_ +#endif +//! Define _IRR_COMPILE_WITH_DMF_LOADER_ if you want to load DeleD files +#define _IRR_COMPILE_WITH_DMF_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_DMF_LOADER_ +#undef _IRR_COMPILE_WITH_DMF_LOADER_ +#endif +//! Define _IRR_COMPILE_WITH_LMTS_LOADER_ if you want to load LMTools files +#define _IRR_COMPILE_WITH_LMTS_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_LMTS_LOADER_ +#undef _IRR_COMPILE_WITH_LMTS_LOADER_ +#endif +//! Define _IRR_COMPILE_WITH_MY3D_LOADER_ if you want to load MY3D files +#define _IRR_COMPILE_WITH_MY3D_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_MY3D_LOADER_ +#undef _IRR_COMPILE_WITH_MY3D_LOADER_ +#endif +//! Define _IRR_COMPILE_WITH_OBJ_LOADER_ if you want to load Wavefront OBJ files +#define _IRR_COMPILE_WITH_OBJ_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_OBJ_LOADER_ +#undef _IRR_COMPILE_WITH_OBJ_LOADER_ +#endif +//! Define _IRR_COMPILE_WITH_OCT_LOADER_ if you want to load FSRad OCT files +#define _IRR_COMPILE_WITH_OCT_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_OCT_LOADER_ +#undef _IRR_COMPILE_WITH_OCT_LOADER_ +#endif +//! Define _IRR_COMPILE_WITH_LWO_LOADER_ if you want to load Lightwave3D files +#define _IRR_COMPILE_WITH_LWO_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_LWO_LOADER_ +#undef _IRR_COMPILE_WITH_LWO_LOADER_ +#endif +//! Define _IRR_COMPILE_WITH_STL_LOADER_ if you want to load stereolithography files +#define _IRR_COMPILE_WITH_STL_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_STL_LOADER_ +#undef _IRR_COMPILE_WITH_STL_LOADER_ +#endif +//! Define _IRR_COMPILE_WITH_PLY_LOADER_ if you want to load Polygon (Stanford Triangle) files +#define _IRR_COMPILE_WITH_PLY_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_PLY_LOADER_ +#undef _IRR_COMPILE_WITH_PLY_LOADER_ +#endif +//! Define _IRR_COMPILE_WITH_SMF_LOADER_ if you want to load 3D World Studio mesh files +#define _IRR_COMPILE_WITH_SMF_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_SMF_LOADER_ +#undef _IRR_COMPILE_WITH_SMF_LOADER_ +#endif + +//! Define _IRR_COMPILE_WITH_IRR_WRITER_ if you want to write static .irrMesh files +#define _IRR_COMPILE_WITH_IRR_WRITER_ +#ifdef NO_IRR_COMPILE_WITH_IRR_WRITER_ +#undef _IRR_COMPILE_WITH_IRR_WRITER_ +#endif +//! Define _IRR_COMPILE_WITH_COLLADA_WRITER_ if you want to write Collada files +#define _IRR_COMPILE_WITH_COLLADA_WRITER_ +#ifdef NO_IRR_COMPILE_WITH_COLLADA_WRITER_ +#undef _IRR_COMPILE_WITH_COLLADA_WRITER_ +#endif +//! Define _IRR_COMPILE_WITH_STL_WRITER_ if you want to write .stl files +#define _IRR_COMPILE_WITH_STL_WRITER_ +#ifdef NO_IRR_COMPILE_WITH_STL_WRITER_ +#undef _IRR_COMPILE_WITH_STL_WRITER_ +#endif +//! Define _IRR_COMPILE_WITH_OBJ_WRITER_ if you want to write .obj files +#define _IRR_COMPILE_WITH_OBJ_WRITER_ +#ifdef NO_IRR_COMPILE_WITH_OBJ_WRITER_ +#undef _IRR_COMPILE_WITH_OBJ_WRITER_ +#endif +//! Define _IRR_COMPILE_WITH_PLY_WRITER_ if you want to write .ply files +#define _IRR_COMPILE_WITH_PLY_WRITER_ +#ifdef NO_IRR_COMPILE_WITH_PLY_WRITER_ +#undef _IRR_COMPILE_WITH_PLY_WRITER_ +#endif + +//! Define _IRR_COMPILE_WITH_BMP_LOADER_ if you want to load .bmp files +//! Disabling this loader will also disable the built-in font +#define _IRR_COMPILE_WITH_BMP_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_BMP_LOADER_ +#undef _IRR_COMPILE_WITH_BMP_LOADER_ +#endif +//! Define _IRR_COMPILE_WITH_JPG_LOADER_ if you want to load .jpg files +#define _IRR_COMPILE_WITH_JPG_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_JPG_LOADER_ +#undef _IRR_COMPILE_WITH_JPG_LOADER_ +#endif +//! Define _IRR_COMPILE_WITH_PCX_LOADER_ if you want to load .pcx files +#define _IRR_COMPILE_WITH_PCX_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_PCX_LOADER_ +#undef _IRR_COMPILE_WITH_PCX_LOADER_ +#endif +//! Define _IRR_COMPILE_WITH_PNG_LOADER_ if you want to load .png files +#define _IRR_COMPILE_WITH_PNG_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_PNG_LOADER_ +#undef _IRR_COMPILE_WITH_PNG_LOADER_ +#endif +//! Define _IRR_COMPILE_WITH_PPM_LOADER_ if you want to load .ppm/.pgm/.pbm files +#define _IRR_COMPILE_WITH_PPM_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_PPM_LOADER_ +#undef _IRR_COMPILE_WITH_PPM_LOADER_ +#endif +//! Define _IRR_COMPILE_WITH_PSD_LOADER_ if you want to load .psd files +#define _IRR_COMPILE_WITH_PSD_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_PSD_LOADER_ +#undef _IRR_COMPILE_WITH_PSD_LOADER_ +#endif +//! Define _IRR_COMPILE_WITH_DDS_LOADER_ if you want to load .dds files +// Outcommented because +// a) it doesn't compile on 64-bit currently +// b) anyone enabling it should be aware that S3TC compression algorithm which might be used in that loader +// is patented in the US by S3 and they do collect license fees when it's used in applications. +// So if you are unfortunate enough to develop applications for US market and their broken patent system be careful. +// #define _IRR_COMPILE_WITH_DDS_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_DDS_LOADER_ +#undef _IRR_COMPILE_WITH_DDS_LOADER_ +#endif +//! Define _IRR_COMPILE_WITH_TGA_LOADER_ if you want to load .tga files +#define _IRR_COMPILE_WITH_TGA_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_TGA_LOADER_ +#undef _IRR_COMPILE_WITH_TGA_LOADER_ +#endif +//! Define _IRR_COMPILE_WITH_WAL_LOADER_ if you want to load .wal files +#define _IRR_COMPILE_WITH_WAL_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_WAL_LOADER_ +#undef _IRR_COMPILE_WITH_WAL_LOADER_ +#endif +//! Define _IRR_COMPILE_WITH_LMP_LOADER_ if you want to load .lmp files +#define _IRR_COMPILE_WITH_LMP_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_LMP_LOADER_ +#undef _IRR_COMPILE_WITH_LMP_LOADER_ +#endif +//! Define _IRR_COMPILE_WITH_RGB_LOADER_ if you want to load Silicon Graphics .rgb/.rgba/.sgi/.int/.inta/.bw files +#define _IRR_COMPILE_WITH_RGB_LOADER_ +#ifdef NO_IRR_COMPILE_WITH_RGB_LOADER_ +#undef _IRR_COMPILE_WITH_RGB_LOADER_ +#endif + +//! Define _IRR_COMPILE_WITH_BMP_WRITER_ if you want to write .bmp files +#define _IRR_COMPILE_WITH_BMP_WRITER_ +#ifdef NO_IRR_COMPILE_WITH_BMP_WRITER_ +#undef _IRR_COMPILE_WITH_BMP_WRITER_ +#endif +//! Define _IRR_COMPILE_WITH_JPG_WRITER_ if you want to write .jpg files +#define _IRR_COMPILE_WITH_JPG_WRITER_ +#ifdef NO_IRR_COMPILE_WITH_JPG_WRITER_ +#undef _IRR_COMPILE_WITH_JPG_WRITER_ +#endif +//! Define _IRR_COMPILE_WITH_PCX_WRITER_ if you want to write .pcx files +#define _IRR_COMPILE_WITH_PCX_WRITER_ +#ifdef NO_IRR_COMPILE_WITH_PCX_WRITER_ +#undef _IRR_COMPILE_WITH_PCX_WRITER_ +#endif +//! Define _IRR_COMPILE_WITH_PNG_WRITER_ if you want to write .png files +#define _IRR_COMPILE_WITH_PNG_WRITER_ +#ifdef NO_IRR_COMPILE_WITH_PNG_WRITER_ +#undef _IRR_COMPILE_WITH_PNG_WRITER_ +#endif +//! Define _IRR_COMPILE_WITH_PPM_WRITER_ if you want to write .ppm files +#define _IRR_COMPILE_WITH_PPM_WRITER_ +#ifdef NO_IRR_COMPILE_WITH_PPM_WRITER_ +#undef _IRR_COMPILE_WITH_PPM_WRITER_ +#endif +//! Define _IRR_COMPILE_WITH_PSD_WRITER_ if you want to write .psd files +#define _IRR_COMPILE_WITH_PSD_WRITER_ +#ifdef NO_IRR_COMPILE_WITH_PSD_WRITER_ +#undef _IRR_COMPILE_WITH_PSD_WRITER_ +#endif +//! Define _IRR_COMPILE_WITH_TGA_WRITER_ if you want to write .tga files +#define _IRR_COMPILE_WITH_TGA_WRITER_ +#ifdef NO_IRR_COMPILE_WITH_TGA_WRITER_ +#undef _IRR_COMPILE_WITH_TGA_WRITER_ +#endif + +//! Define __IRR_COMPILE_WITH_ZIP_ARCHIVE_LOADER_ if you want to open ZIP and GZIP archives +/** ZIP reading has several more options below to configure. */ +#define __IRR_COMPILE_WITH_ZIP_ARCHIVE_LOADER_ +#ifdef NO__IRR_COMPILE_WITH_ZIP_ARCHIVE_LOADER_ +#undef __IRR_COMPILE_WITH_ZIP_ARCHIVE_LOADER_ +#endif +#ifdef __IRR_COMPILE_WITH_ZIP_ARCHIVE_LOADER_ +//! Define _IRR_COMPILE_WITH_ZLIB_ to enable compiling the engine using zlib. +/** This enables the engine to read from compressed .zip archives. If you +disable this feature, the engine can still read archives, but only uncompressed +ones. */ +#define _IRR_COMPILE_WITH_ZLIB_ +#ifdef NO_IRR_COMPILE_WITH_ZLIB_ +#undef _IRR_COMPILE_WITH_ZLIB_ +#endif +//! Define _IRR_USE_NON_SYSTEM_ZLIB_ to let irrlicht use the zlib which comes with irrlicht. +/** If this is commented out, Irrlicht will try to compile using the zlib +installed on the system. This is only used when _IRR_COMPILE_WITH_ZLIB_ is +defined. */ +#define _IRR_USE_NON_SYSTEM_ZLIB_ +#ifdef NO_IRR_USE_NON_SYSTEM_ZLIB_ +#undef _IRR_USE_NON_SYSTEM_ZLIB_ +#endif +//! Define _IRR_COMPILE_WITH_ZIP_ENCRYPTION_ if you want to read AES-encrypted ZIP archives +#define _IRR_COMPILE_WITH_ZIP_ENCRYPTION_ +#ifdef NO_IRR_COMPILE_WITH_ZIP_ENCRYPTION_ +#undef _IRR_COMPILE_WITH_ZIP_ENCRYPTION_ +#endif +//! Define _IRR_COMPILE_WITH_BZIP2_ if you want to support bzip2 compressed zip archives +/** bzip2 is superior to the original zip file compression modes, but requires +a certain amount of memory for decompression and adds several files to the +library. */ +#define _IRR_COMPILE_WITH_BZIP2_ +#ifdef NO_IRR_COMPILE_WITH_BZIP2_ +#undef _IRR_COMPILE_WITH_BZIP2_ +#endif +//! Define _IRR_USE_NON_SYSTEM_BZLIB_ to let irrlicht use the bzlib which comes with irrlicht. +/** If this is commented out, Irrlicht will try to compile using the bzlib +installed on the system. This is only used when _IRR_COMPILE_WITH_BZLIB_ is +defined. */ +#define _IRR_USE_NON_SYSTEM_BZLIB_ +#ifdef NO_IRR_USE_NON_SYSTEM_BZLIB_ +#undef _IRR_USE_NON_SYSTEM_BZLIB_ +#endif +//! Define _IRR_COMPILE_WITH_LZMA_ if you want to use LZMA compressed zip files. +/** LZMA is a very efficient compression code, known from 7zip. Irrlicht +currently only supports zip archives, though. */ +#define _IRR_COMPILE_WITH_LZMA_ +#ifdef NO_IRR_COMPILE_WITH_LZMA_ +#undef _IRR_COMPILE_WITH_LZMA_ +#endif +#endif + +//! Define __IRR_COMPILE_WITH_MOUNT_ARCHIVE_LOADER_ if you want to mount folders as archives +#define __IRR_COMPILE_WITH_MOUNT_ARCHIVE_LOADER_ +#ifdef NO__IRR_COMPILE_WITH_MOUNT_ARCHIVE_LOADER_ +#undef __IRR_COMPILE_WITH_MOUNT_ARCHIVE_LOADER_ +#endif +//! Define __IRR_COMPILE_WITH_PAK_ARCHIVE_LOADER_ if you want to open ID software PAK archives +#define __IRR_COMPILE_WITH_PAK_ARCHIVE_LOADER_ +#ifdef NO__IRR_COMPILE_WITH_PAK_ARCHIVE_LOADER_ +#undef __IRR_COMPILE_WITH_PAK_ARCHIVE_LOADER_ +#endif +//! Define __IRR_COMPILE_WITH_NPK_ARCHIVE_LOADER_ if you want to open Nebula Device NPK archives +#define __IRR_COMPILE_WITH_NPK_ARCHIVE_LOADER_ +#ifdef NO__IRR_COMPILE_WITH_NPK_ARCHIVE_LOADER_ +#undef __IRR_COMPILE_WITH_NPK_ARCHIVE_LOADER_ +#endif +//! Define __IRR_COMPILE_WITH_TAR_ARCHIVE_LOADER_ if you want to open TAR archives +#define __IRR_COMPILE_WITH_TAR_ARCHIVE_LOADER_ +#ifdef NO__IRR_COMPILE_WITH_TAR_ARCHIVE_LOADER_ +#undef __IRR_COMPILE_WITH_TAR_ARCHIVE_LOADER_ +#endif +//! Define __IRR_COMPILE_WITH_WAD_ARCHIVE_LOADER_ if you want to open WAD archives +#define __IRR_COMPILE_WITH_WAD_ARCHIVE_LOADER_ +#ifdef NO__IRR_COMPILE_WITH_WAD_ARCHIVE_LOADER_ +#undef __IRR_COMPILE_WITH_WAD_ARCHIVE_LOADER_ +#endif + +//! Set FPU settings +/** Irrlicht should use approximate float and integer fpu techniques +precision will be lower but speed higher. currently X86 only +*/ +#if !defined(_IRR_OSX_PLATFORM_) && !defined(_IRR_SOLARIS_PLATFORM_) + //#define IRRLICHT_FAST_MATH + #ifdef NO_IRRLICHT_FAST_MATH + #undef IRRLICHT_FAST_MATH + #endif +#endif + +// Some cleanup and standard stuff + +#ifdef _IRR_WINDOWS_API_ + +// To build Irrlicht as a static library, you must define _IRR_STATIC_LIB_ in both the +// Irrlicht build, *and* in the user application, before #including +#ifndef _IRR_STATIC_LIB_ +#ifdef IRRLICHT_EXPORTS +#define IRRLICHT_API __declspec(dllexport) +#else +#define IRRLICHT_API __declspec(dllimport) +#endif // IRRLICHT_EXPORT +#else +#define IRRLICHT_API +#endif // _IRR_STATIC_LIB_ + +// Declare the calling convention. +#if defined(_STDCALL_SUPPORTED) +#define IRRCALLCONV __stdcall +#else +#define IRRCALLCONV __cdecl +#endif // STDCALL_SUPPORTED + +#else // _IRR_WINDOWS_API_ + +// Force symbol export in shared libraries built with gcc. +#if (__GNUC__ >= 4) && !defined(_IRR_STATIC_LIB_) && defined(IRRLICHT_EXPORTS) +#define IRRLICHT_API __attribute__ ((visibility("default"))) +#else +#define IRRLICHT_API +#endif + +#define IRRCALLCONV + +#endif // _IRR_WINDOWS_API_ + +// We need to disable DIRECT3D9 support for Visual Studio 6.0 because +// those $%&$!! disabled support for it since Dec. 2004 and users are complaining +// about linker errors. Comment this out only if you are knowing what you are +// doing. (Which means you have an old DX9 SDK and VisualStudio6). +#ifdef _MSC_VER +#if (_MSC_VER < 1300 && !defined(__GNUC__)) +#undef _IRR_COMPILE_WITH_DIRECT3D_9_ +#pragma message("Compiling Irrlicht with Visual Studio 6.0, support for DX9 is disabled.") +#endif +#endif + +// XBox does not have OpenGL or DirectX9 +#if defined(_IRR_XBOX_PLATFORM_) + #undef _IRR_COMPILE_WITH_OPENGL_ + #undef _IRR_COMPILE_WITH_DIRECT3D_9_ +#endif + +//! WinCE does not have OpenGL or DirectX9. use minimal loaders +#if defined(_WIN32_WCE) + #undef _IRR_COMPILE_WITH_OPENGL_ + #undef _IRR_COMPILE_WITH_DIRECT3D_8_ + #undef _IRR_COMPILE_WITH_DIRECT3D_9_ + + #undef BURNINGVIDEO_RENDERER_BEAUTIFUL + #undef BURNINGVIDEO_RENDERER_FAST + #undef BURNINGVIDEO_RENDERER_ULTRA_FAST + #define BURNINGVIDEO_RENDERER_CE + + #undef _IRR_COMPILE_WITH_WINDOWS_DEVICE_ + #define _IRR_COMPILE_WITH_WINDOWS_CE_DEVICE_ + //#define _IRR_WCHAR_FILESYSTEM + + #undef _IRR_COMPILE_WITH_IRR_MESH_LOADER_ + //#undef _IRR_COMPILE_WITH_MD2_LOADER_ + #undef _IRR_COMPILE_WITH_MD3_LOADER_ + #undef _IRR_COMPILE_WITH_3DS_LOADER_ + #undef _IRR_COMPILE_WITH_COLLADA_LOADER_ + #undef _IRR_COMPILE_WITH_CSM_LOADER_ + #undef _IRR_COMPILE_WITH_BSP_LOADER_ + #undef _IRR_COMPILE_WITH_DMF_LOADER_ + #undef _IRR_COMPILE_WITH_LMTS_LOADER_ + #undef _IRR_COMPILE_WITH_MY3D_LOADER_ + #undef _IRR_COMPILE_WITH_OBJ_LOADER_ + #undef _IRR_COMPILE_WITH_OCT_LOADER_ + #undef _IRR_COMPILE_WITH_OGRE_LOADER_ + #undef _IRR_COMPILE_WITH_LWO_LOADER_ + #undef _IRR_COMPILE_WITH_STL_LOADER_ + #undef _IRR_COMPILE_WITH_IRR_WRITER_ + #undef _IRR_COMPILE_WITH_COLLADA_WRITER_ + #undef _IRR_COMPILE_WITH_STL_WRITER_ + #undef _IRR_COMPILE_WITH_OBJ_WRITER_ + //#undef _IRR_COMPILE_WITH_BMP_LOADER_ + //#undef _IRR_COMPILE_WITH_JPG_LOADER_ + #undef _IRR_COMPILE_WITH_PCX_LOADER_ + //#undef _IRR_COMPILE_WITH_PNG_LOADER_ + #undef _IRR_COMPILE_WITH_PPM_LOADER_ + #undef _IRR_COMPILE_WITH_PSD_LOADER_ + //#undef _IRR_COMPILE_WITH_TGA_LOADER_ + #undef _IRR_COMPILE_WITH_WAL_LOADER_ + #undef _IRR_COMPILE_WITH_BMP_WRITER_ + #undef _IRR_COMPILE_WITH_JPG_WRITER_ + #undef _IRR_COMPILE_WITH_PCX_WRITER_ + #undef _IRR_COMPILE_WITH_PNG_WRITER_ + #undef _IRR_COMPILE_WITH_PPM_WRITER_ + #undef _IRR_COMPILE_WITH_PSD_WRITER_ + #undef _IRR_COMPILE_WITH_TGA_WRITER_ + +#endif + +#ifndef _IRR_WINDOWS_API_ + #undef _IRR_WCHAR_FILESYSTEM +#endif + +#if defined(__sparc__) || defined(__sun__) +#define __BIG_ENDIAN__ +#endif + +#if defined(_IRR_SOLARIS_PLATFORM_) + #undef _IRR_COMPILE_WITH_JOYSTICK_EVENTS_ +#endif + +//! Define __IRR_HAS_S64 if the irr::s64 type should be enable (needs long long, available on most platforms, but not part of ISO C++ 98) +#define __IRR_HAS_S64 +#ifdef NO__IRR_HAS_S64 +#undef __IRR_HAS_S64 +#endif + +#if defined(__BORLANDC__) + #include + + // Borland 5.5.1 does not have _strcmpi defined + #if __BORLANDC__ == 0x551 + // #define _strcmpi strcmpi + #undef _tfinddata_t + #undef _tfindfirst + #undef _tfindnext + + #define _tfinddata_t __tfinddata_t + #define _tfindfirst __tfindfirst + #define _tfindnext __tfindnext + typedef long intptr_t; + #endif + +#endif + +#ifdef _DEBUG + //! A few attributes are written in CSceneManager when _IRR_SCENEMANAGER_DEBUG is enabled + // NOTE: Those attributes were used always until 1.8.0 and became a global define for 1.8.1 + // which is only enabled in debug because it had a large (sometimes >5%) impact on speed. + // A better solution in the long run is to break the interface and remove _all_ attribute + // access in functions like CSceneManager::drawAll and instead put that information in some + // own struct/class or in CSceneManager. + // See http://irrlicht.sourceforge.net/forum/viewtopic.php?f=2&t=48211 for the discussion. + #define _IRR_SCENEMANAGER_DEBUG + #ifdef NO_IRR_SCENEMANAGER_DEBUG + #undef _IRR_SCENEMANAGER_DEBUG + #endif +#endif + +#endif // __IRR_COMPILE_CONFIG_H_INCLUDED__ + diff --git a/inc/IrrlichtDevice.h b/inc/IrrlichtDevice.h new file mode 100644 index 0000000..536e10b --- /dev/null +++ b/inc/IrrlichtDevice.h @@ -0,0 +1,322 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_IRRLICHT_DEVICE_H_INCLUDED__ +#define __I_IRRLICHT_DEVICE_H_INCLUDED__ + +#include "IReferenceCounted.h" +#include "dimension2d.h" +#include "IVideoDriver.h" +#include "EDriverTypes.h" +#include "EDeviceTypes.h" +#include "IEventReceiver.h" +#include "ICursorControl.h" +#include "IVideoModeList.h" +#include "ITimer.h" +#include "IOSOperator.h" + +namespace irr +{ + class ILogger; + class IEventReceiver; + class IRandomizer; + + namespace io { + class IFileSystem; + } // end namespace io + + namespace gui { + class IGUIEnvironment; + } // end namespace gui + + namespace scene { + class ISceneManager; + } // end namespace scene + + //! The Irrlicht device. You can create it with createDevice() or createDeviceEx(). + /** This is the most important class of the Irrlicht Engine. You can + access everything in the engine if you have a pointer to an instance of + this class. There should be only one instance of this class at any + time. + */ + class IrrlichtDevice : public virtual IReferenceCounted + { + public: + + //! Runs the device. + /** Also increments the virtual timer by calling + ITimer::tick();. You can prevent this + by calling ITimer::stop(); before and ITimer::start() after + calling IrrlichtDevice::run(). Returns false if device wants + to be deleted. Use it in this way: + \code + while(device->run()) + { + // draw everything here + } + \endcode + If you want the device to do nothing if the window is inactive + (recommended), use the slightly enhanced code shown at isWindowActive(). + + Note if you are running Irrlicht inside an external, custom + created window: Calling Device->run() will cause Irrlicht to + dispatch windows messages internally. + If you are running Irrlicht in your own custom window, you can + also simply use your own message loop using GetMessage, + DispatchMessage and whatever and simply don't use this method. + But note that Irrlicht will not be able to fetch user input + then. See irr::SIrrlichtCreationParameters::WindowId for more + informations and example code. + */ + virtual bool run() = 0; + + //! Cause the device to temporarily pause execution and let other processes run. + /** This should bring down processor usage without major + performance loss for Irrlicht */ + virtual void yield() = 0; + + //! Pause execution and let other processes to run for a specified amount of time. + /** It may not wait the full given time, as sleep may be interrupted + \param timeMs: Time to sleep for in milisecs. + \param pauseTimer: If true, pauses the device timer while sleeping + */ + virtual void sleep(u32 timeMs, bool pauseTimer=false) = 0; + + //! Provides access to the video driver for drawing 3d and 2d geometry. + /** \return Pointer the video driver. */ + virtual video::IVideoDriver* getVideoDriver() = 0; + + //! Provides access to the virtual file system. + /** \return Pointer to the file system. */ + virtual io::IFileSystem* getFileSystem() = 0; + + //! Provides access to the 2d user interface environment. + /** \return Pointer to the gui environment. */ + virtual gui::IGUIEnvironment* getGUIEnvironment() = 0; + + //! Provides access to the scene manager. + /** \return Pointer to the scene manager. */ + virtual scene::ISceneManager* getSceneManager() = 0; + + //! Provides access to the cursor control. + /** \return Pointer to the mouse cursor control interface. */ + virtual gui::ICursorControl* getCursorControl() = 0; + + //! Provides access to the message logger. + /** \return Pointer to the logger. */ + virtual ILogger* getLogger() = 0; + + //! Gets a list with all video modes available. + /** If you are confused now, because you think you have to + create an Irrlicht Device with a video mode before being able + to get the video mode list, let me tell you that there is no + need to start up an Irrlicht Device with EDT_DIRECT3D8, + EDT_OPENGL or EDT_SOFTWARE: For this (and for lots of other + reasons) the null driver, EDT_NULL exists. + \return Pointer to a list with all video modes supported + by the gfx adapter. */ + virtual video::IVideoModeList* getVideoModeList() = 0; + + //! Provides access to the operation system operator object. + /** The OS operator provides methods for + getting system specific informations and doing system + specific operations, such as exchanging data with the clipboard + or reading the operation system version. + \return Pointer to the OS operator. */ + virtual IOSOperator* getOSOperator() = 0; + + //! Provides access to the engine's timer. + /** The system time can be retrieved by it as + well as the virtual time, which also can be manipulated. + \return Pointer to the ITimer object. */ + virtual ITimer* getTimer() = 0; + + //! Provides access to the engine's currently set randomizer. + /** \return Pointer to the IRandomizer object. */ + virtual IRandomizer* getRandomizer() const =0; + + //! Sets a new randomizer. + /** \param r Pointer to the new IRandomizer object. This object is + grab()'ed by the engine and will be released upon the next setRandomizer + call or upon device destruction. */ + virtual void setRandomizer(IRandomizer* r) =0; + + //! Creates a new default randomizer. + /** The default randomizer provides the random sequence known from previous + Irrlicht versions and is the initial randomizer set on device creation. + \return Pointer to the default IRandomizer object. */ + virtual IRandomizer* createDefaultRandomizer() const =0; + + //! Sets the caption of the window. + /** \param text: New text of the window caption. */ + virtual void setWindowCaption(const wchar_t* text) = 0; + + //! Returns if the window is active. + /** If the window is inactive, + nothing needs to be drawn. So if you don't want to draw anything + when the window is inactive, create your drawing loop this way: + \code + while(device->run()) + { + if (device->isWindowActive()) + { + // draw everything here + } + else + device->yield(); + } + \endcode + \return True if window is active. */ + virtual bool isWindowActive() const = 0; + + //! Checks if the Irrlicht window has focus + /** \return True if window has focus. */ + virtual bool isWindowFocused() const = 0; + + //! Checks if the Irrlicht window is minimized + /** \return True if window is minimized. */ + virtual bool isWindowMinimized() const = 0; + + //! Checks if the Irrlicht window is running in fullscreen mode + /** \return True if window is fullscreen. */ + virtual bool isFullscreen() const = 0; + + //! Get the current color format of the window + /** \return Color format of the window. */ + virtual video::ECOLOR_FORMAT getColorFormat() const = 0; + + //! Notifies the device that it should close itself. + /** IrrlichtDevice::run() will always return false after closeDevice() was called. */ + virtual void closeDevice() = 0; + + //! Get the version of the engine. + /** The returned string + will look like this: "1.2.3" or this: "1.2". + \return String which contains the version. */ + virtual const c8* getVersion() const = 0; + + //! Sets a new user event receiver which will receive events from the engine. + /** Return true in IEventReceiver::OnEvent to prevent the event from continuing along + the chain of event receivers. The path that an event takes through the system depends + on its type. See irr::EEVENT_TYPE for details. + \param receiver New receiver to be used. */ + virtual void setEventReceiver(IEventReceiver* receiver) = 0; + + //! Provides access to the current event receiver. + /** \return Pointer to the current event receiver. Returns 0 if there is none. */ + virtual IEventReceiver* getEventReceiver() = 0; + + //! Sends a user created event to the engine. + /** Is is usually not necessary to use this. However, if you + are using an own input library for example for doing joystick + input, you can use this to post key or mouse input events to + the engine. Internally, this method only delegates the events + further to the scene manager and the GUI environment. */ + virtual bool postEventFromUser(const SEvent& event) = 0; + + //! Sets the input receiving scene manager. + /** If set to null, the main scene manager (returned by + GetSceneManager()) will receive the input + \param sceneManager New scene manager to be used. */ + virtual void setInputReceivingSceneManager(scene::ISceneManager* sceneManager) = 0; + + //! Sets if the window should be resizable in windowed mode. + /** The default is false. This method only works in windowed + mode. + \param resize Flag whether the window should be resizable. */ + virtual void setResizable(bool resize=false) = 0; + + //! Minimizes the window if possible. + virtual void minimizeWindow() =0; + + //! Maximizes the window if possible. + virtual void maximizeWindow() =0; + + //! Restore the window to normal size if possible. + virtual void restoreWindow() =0; + + //! Activate any joysticks, and generate events for them. + /** Irrlicht contains support for joysticks, but does not generate joystick events by default, + as this would consume joystick info that 3rd party libraries might rely on. Call this method to + activate joystick support in Irrlicht and to receive irr::SJoystickEvent events. + \param joystickInfo On return, this will contain an array of each joystick that was found and activated. + \return true if joysticks are supported on this device and _IRR_COMPILE_WITH_JOYSTICK_EVENTS_ + is defined, false if joysticks are not supported or support is compiled out. + */ + virtual bool activateJoysticks(core::array& joystickInfo) =0; + + //! Set the current Gamma Value for the Display + virtual bool setGammaRamp(f32 red, f32 green, f32 blue, + f32 relativebrightness, f32 relativecontrast) =0; + + //! Get the current Gamma Value for the Display + virtual bool getGammaRamp(f32 &red, f32 &green, f32 &blue, + f32 &brightness, f32 &contrast) =0; + + //! Remove messages pending in the system message loop + /** This function is usually used after messages have been buffered for a longer time, for example + when loading a large scene. Clearing the message loop prevents that mouse- or buttonclicks which users + have pressed in the meantime will now trigger unexpected actions in the gui.
+ So far the following messages are cleared:
+ Win32: All keyboard and mouse messages
+ Linux: All keyboard and mouse messages
+ All other devices are not yet supported here.
+ The function is still somewhat experimental, as the kind of messages we clear is based on just a few use-cases. + If you think further messages should be cleared, or some messages should not be cleared here, then please tell us. */ + virtual void clearSystemMessages() = 0; + + //! Get the type of the device. + /** This allows the user to check which windowing system is currently being + used. */ + virtual E_DEVICE_TYPE getType() const = 0; + + //! Check if a driver type is supported by the engine. + /** Even if true is returned the driver may not be available + for a configuration requested when creating the device. */ + static bool isDriverSupported(video::E_DRIVER_TYPE driver) + { + switch (driver) + { + case video::EDT_NULL: + return true; + case video::EDT_SOFTWARE: +#ifdef _IRR_COMPILE_WITH_SOFTWARE_ + return true; +#else + return false; +#endif + case video::EDT_BURNINGSVIDEO: +#ifdef _IRR_COMPILE_WITH_BURNINGSVIDEO_ + return true; +#else + return false; +#endif + case video::EDT_DIRECT3D8: +#ifdef _IRR_COMPILE_WITH_DIRECT3D_8_ + return true; +#else + return false; +#endif + case video::EDT_DIRECT3D9: +#ifdef _IRR_COMPILE_WITH_DIRECT3D_9_ + return true; +#else + return false; +#endif + case video::EDT_OPENGL: +#ifdef _IRR_COMPILE_WITH_OPENGL_ + return true; +#else + return false; +#endif + default: + return false; + } + } + }; + +} // end namespace irr + +#endif + diff --git a/inc/Keycodes.h b/inc/Keycodes.h new file mode 100644 index 0000000..e56eca1 --- /dev/null +++ b/inc/Keycodes.h @@ -0,0 +1,173 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __IRR_KEY_CODES_H_INCLUDED__ +#define __IRR_KEY_CODES_H_INCLUDED__ + +namespace irr +{ + + enum EKEY_CODE + { + KEY_LBUTTON = 0x01, // Left mouse button + KEY_RBUTTON = 0x02, // Right mouse button + KEY_CANCEL = 0x03, // Control-break processing + KEY_MBUTTON = 0x04, // Middle mouse button (three-button mouse) + KEY_XBUTTON1 = 0x05, // Windows 2000/XP: X1 mouse button + KEY_XBUTTON2 = 0x06, // Windows 2000/XP: X2 mouse button + KEY_BACK = 0x08, // BACKSPACE key + KEY_TAB = 0x09, // TAB key + KEY_CLEAR = 0x0C, // CLEAR key + KEY_RETURN = 0x0D, // ENTER key + KEY_SHIFT = 0x10, // SHIFT key + KEY_CONTROL = 0x11, // CTRL key + KEY_MENU = 0x12, // ALT key + KEY_PAUSE = 0x13, // PAUSE key + KEY_CAPITAL = 0x14, // CAPS LOCK key + KEY_KANA = 0x15, // IME Kana mode + KEY_HANGUEL = 0x15, // IME Hanguel mode (maintained for compatibility use KEY_HANGUL) + KEY_HANGUL = 0x15, // IME Hangul mode + KEY_JUNJA = 0x17, // IME Junja mode + KEY_FINAL = 0x18, // IME final mode + KEY_HANJA = 0x19, // IME Hanja mode + KEY_KANJI = 0x19, // IME Kanji mode + KEY_ESCAPE = 0x1B, // ESC key + KEY_CONVERT = 0x1C, // IME convert + KEY_NONCONVERT = 0x1D, // IME nonconvert + KEY_ACCEPT = 0x1E, // IME accept + KEY_MODECHANGE = 0x1F, // IME mode change request + KEY_SPACE = 0x20, // SPACEBAR + KEY_PRIOR = 0x21, // PAGE UP key + KEY_NEXT = 0x22, // PAGE DOWN key + KEY_END = 0x23, // END key + KEY_HOME = 0x24, // HOME key + KEY_LEFT = 0x25, // LEFT ARROW key + KEY_UP = 0x26, // UP ARROW key + KEY_RIGHT = 0x27, // RIGHT ARROW key + KEY_DOWN = 0x28, // DOWN ARROW key + KEY_SELECT = 0x29, // SELECT key + KEY_PRINT = 0x2A, // PRINT key + KEY_EXECUT = 0x2B, // EXECUTE key + KEY_SNAPSHOT = 0x2C, // PRINT SCREEN key + KEY_INSERT = 0x2D, // INS key + KEY_DELETE = 0x2E, // DEL key + KEY_HELP = 0x2F, // HELP key + KEY_KEY_0 = 0x30, // 0 key + KEY_KEY_1 = 0x31, // 1 key + KEY_KEY_2 = 0x32, // 2 key + KEY_KEY_3 = 0x33, // 3 key + KEY_KEY_4 = 0x34, // 4 key + KEY_KEY_5 = 0x35, // 5 key + KEY_KEY_6 = 0x36, // 6 key + KEY_KEY_7 = 0x37, // 7 key + KEY_KEY_8 = 0x38, // 8 key + KEY_KEY_9 = 0x39, // 9 key + KEY_KEY_A = 0x41, // A key + KEY_KEY_B = 0x42, // B key + KEY_KEY_C = 0x43, // C key + KEY_KEY_D = 0x44, // D key + KEY_KEY_E = 0x45, // E key + KEY_KEY_F = 0x46, // F key + KEY_KEY_G = 0x47, // G key + KEY_KEY_H = 0x48, // H key + KEY_KEY_I = 0x49, // I key + KEY_KEY_J = 0x4A, // J key + KEY_KEY_K = 0x4B, // K key + KEY_KEY_L = 0x4C, // L key + KEY_KEY_M = 0x4D, // M key + KEY_KEY_N = 0x4E, // N key + KEY_KEY_O = 0x4F, // O key + KEY_KEY_P = 0x50, // P key + KEY_KEY_Q = 0x51, // Q key + KEY_KEY_R = 0x52, // R key + KEY_KEY_S = 0x53, // S key + KEY_KEY_T = 0x54, // T key + KEY_KEY_U = 0x55, // U key + KEY_KEY_V = 0x56, // V key + KEY_KEY_W = 0x57, // W key + KEY_KEY_X = 0x58, // X key + KEY_KEY_Y = 0x59, // Y key + KEY_KEY_Z = 0x5A, // Z key + KEY_LWIN = 0x5B, // Left Windows key (Microsoft® Natural® keyboard) + KEY_RWIN = 0x5C, // Right Windows key (Natural keyboard) + KEY_APPS = 0x5D, // Applications key (Natural keyboard) + KEY_SLEEP = 0x5F, // Computer Sleep key + KEY_NUMPAD0 = 0x60, // Numeric keypad 0 key + KEY_NUMPAD1 = 0x61, // Numeric keypad 1 key + KEY_NUMPAD2 = 0x62, // Numeric keypad 2 key + KEY_NUMPAD3 = 0x63, // Numeric keypad 3 key + KEY_NUMPAD4 = 0x64, // Numeric keypad 4 key + KEY_NUMPAD5 = 0x65, // Numeric keypad 5 key + KEY_NUMPAD6 = 0x66, // Numeric keypad 6 key + KEY_NUMPAD7 = 0x67, // Numeric keypad 7 key + KEY_NUMPAD8 = 0x68, // Numeric keypad 8 key + KEY_NUMPAD9 = 0x69, // Numeric keypad 9 key + KEY_MULTIPLY = 0x6A, // Multiply key + KEY_ADD = 0x6B, // Add key + KEY_SEPARATOR = 0x6C, // Separator key + KEY_SUBTRACT = 0x6D, // Subtract key + KEY_DECIMAL = 0x6E, // Decimal key + KEY_DIVIDE = 0x6F, // Divide key + KEY_F1 = 0x70, // F1 key + KEY_F2 = 0x71, // F2 key + KEY_F3 = 0x72, // F3 key + KEY_F4 = 0x73, // F4 key + KEY_F5 = 0x74, // F5 key + KEY_F6 = 0x75, // F6 key + KEY_F7 = 0x76, // F7 key + KEY_F8 = 0x77, // F8 key + KEY_F9 = 0x78, // F9 key + KEY_F10 = 0x79, // F10 key + KEY_F11 = 0x7A, // F11 key + KEY_F12 = 0x7B, // F12 key + KEY_F13 = 0x7C, // F13 key + KEY_F14 = 0x7D, // F14 key + KEY_F15 = 0x7E, // F15 key + KEY_F16 = 0x7F, // F16 key + KEY_F17 = 0x80, // F17 key + KEY_F18 = 0x81, // F18 key + KEY_F19 = 0x82, // F19 key + KEY_F20 = 0x83, // F20 key + KEY_F21 = 0x84, // F21 key + KEY_F22 = 0x85, // F22 key + KEY_F23 = 0x86, // F23 key + KEY_F24 = 0x87, // F24 key + KEY_NUMLOCK = 0x90, // NUM LOCK key + KEY_SCROLL = 0x91, // SCROLL LOCK key + KEY_LSHIFT = 0xA0, // Left SHIFT key + KEY_RSHIFT = 0xA1, // Right SHIFT key + KEY_LCONTROL = 0xA2, // Left CONTROL key + KEY_RCONTROL = 0xA3, // Right CONTROL key + KEY_LMENU = 0xA4, // Left MENU key + KEY_RMENU = 0xA5, // Right MENU key + KEY_OEM_1 = 0xBA, // for US ";:" + KEY_PLUS = 0xBB, // Plus Key "+" + KEY_COMMA = 0xBC, // Comma Key "," + KEY_MINUS = 0xBD, // Minus Key "-" + KEY_PERIOD = 0xBE, // Period Key "." + KEY_OEM_2 = 0xBF, // for US "/?" + KEY_OEM_3 = 0xC0, // for US "`~" + KEY_OEM_4 = 0xDB, // for US "[{" + KEY_OEM_5 = 0xDC, // for US "\|" + KEY_OEM_6 = 0xDD, // for US "]}" + KEY_OEM_7 = 0xDE, // for US "'"" + KEY_OEM_8 = 0xDF, // None + KEY_OEM_AX = 0xE1, // for Japan "AX" + KEY_OEM_102 = 0xE2, // "<>" or "\|" + KEY_ATTN = 0xF6, // Attn key + KEY_CRSEL = 0xF7, // CrSel key + KEY_EXSEL = 0xF8, // ExSel key + KEY_EREOF = 0xF9, // Erase EOF key + KEY_PLAY = 0xFA, // Play key + KEY_ZOOM = 0xFB, // Zoom key + KEY_PA1 = 0xFD, // PA1 key + KEY_OEM_CLEAR = 0xFE, // Clear key + + KEY_KEY_CODES_COUNT = 0xFF // this is not a key, but the amount of keycodes there are. + }; + +} // end namespace irr + +#endif + diff --git a/inc/S3DVertex.h b/inc/S3DVertex.h new file mode 100644 index 0000000..706cf4b --- /dev/null +++ b/inc/S3DVertex.h @@ -0,0 +1,274 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __S_3D_VERTEX_H_INCLUDED__ +#define __S_3D_VERTEX_H_INCLUDED__ + +#include "vector3d.h" +#include "vector2d.h" +#include "SColor.h" + +namespace irr +{ +namespace video +{ + +//! Enumeration for all vertex types there are. +enum E_VERTEX_TYPE +{ + //! Standard vertex type used by the Irrlicht engine, video::S3DVertex. + EVT_STANDARD = 0, + + //! Vertex with two texture coordinates, video::S3DVertex2TCoords. + /** Usually used for geometry with lightmaps or other special materials. */ + EVT_2TCOORDS, + + //! Vertex with a tangent and binormal vector, video::S3DVertexTangents. + /** Usually used for tangent space normal mapping. */ + EVT_TANGENTS +}; + +//! Array holding the built in vertex type names +const char* const sBuiltInVertexTypeNames[] = +{ + "standard", + "2tcoords", + "tangents", + 0 +}; + +//! standard vertex used by the Irrlicht engine. +struct S3DVertex +{ + //! default constructor + S3DVertex() {} + + //! constructor + S3DVertex(f32 x, f32 y, f32 z, f32 nx, f32 ny, f32 nz, SColor c, f32 tu, f32 tv) + : Pos(x,y,z), Normal(nx,ny,nz), Color(c), TCoords(tu,tv) {} + + //! constructor + S3DVertex(const core::vector3df& pos, const core::vector3df& normal, + SColor color, const core::vector2d& tcoords) + : Pos(pos), Normal(normal), Color(color), TCoords(tcoords) {} + + //! Position + core::vector3df Pos; + + //! Normal vector + core::vector3df Normal; + + //! Color + SColor Color; + + //! Texture coordinates + core::vector2d TCoords; + + bool operator==(const S3DVertex& other) const + { + return ((Pos == other.Pos) && (Normal == other.Normal) && + (Color == other.Color) && (TCoords == other.TCoords)); + } + + bool operator!=(const S3DVertex& other) const + { + return ((Pos != other.Pos) || (Normal != other.Normal) || + (Color != other.Color) || (TCoords != other.TCoords)); + } + + bool operator<(const S3DVertex& other) const + { + return ((Pos < other.Pos) || + ((Pos == other.Pos) && (Normal < other.Normal)) || + ((Pos == other.Pos) && (Normal == other.Normal) && (Color < other.Color)) || + ((Pos == other.Pos) && (Normal == other.Normal) && (Color == other.Color) && (TCoords < other.TCoords))); + } + + E_VERTEX_TYPE getType() const + { + return EVT_STANDARD; + } + + S3DVertex getInterpolated(const S3DVertex& other, f32 d) + { + d = core::clamp(d, 0.0f, 1.0f); + return S3DVertex(Pos.getInterpolated(other.Pos, d), + Normal.getInterpolated(other.Normal, d), + Color.getInterpolated(other.Color, d), + TCoords.getInterpolated(other.TCoords, d)); + } +}; + + +//! Vertex with two texture coordinates. +/** Usually used for geometry with lightmaps +or other special materials. +*/ +struct S3DVertex2TCoords : public S3DVertex +{ + //! default constructor + S3DVertex2TCoords() : S3DVertex() {} + + //! constructor with two different texture coords, but no normal + S3DVertex2TCoords(f32 x, f32 y, f32 z, SColor c, f32 tu, f32 tv, f32 tu2, f32 tv2) + : S3DVertex(x,y,z, 0.0f, 0.0f, 0.0f, c, tu,tv), TCoords2(tu2,tv2) {} + + //! constructor with two different texture coords, but no normal + S3DVertex2TCoords(const core::vector3df& pos, SColor color, + const core::vector2d& tcoords, const core::vector2d& tcoords2) + : S3DVertex(pos, core::vector3df(), color, tcoords), TCoords2(tcoords2) {} + + //! constructor with all values + S3DVertex2TCoords(const core::vector3df& pos, const core::vector3df& normal, const SColor& color, + const core::vector2d& tcoords, const core::vector2d& tcoords2) + : S3DVertex(pos, normal, color, tcoords), TCoords2(tcoords2) {} + + //! constructor with all values + S3DVertex2TCoords(f32 x, f32 y, f32 z, f32 nx, f32 ny, f32 nz, SColor c, f32 tu, f32 tv, f32 tu2, f32 tv2) + : S3DVertex(x,y,z, nx,ny,nz, c, tu,tv), TCoords2(tu2,tv2) {} + + //! constructor with the same texture coords and normal + S3DVertex2TCoords(f32 x, f32 y, f32 z, f32 nx, f32 ny, f32 nz, SColor c, f32 tu, f32 tv) + : S3DVertex(x,y,z, nx,ny,nz, c, tu,tv), TCoords2(tu,tv) {} + + //! constructor with the same texture coords and normal + S3DVertex2TCoords(const core::vector3df& pos, const core::vector3df& normal, + SColor color, const core::vector2d& tcoords) + : S3DVertex(pos, normal, color, tcoords), TCoords2(tcoords) {} + + //! constructor from S3DVertex + S3DVertex2TCoords(S3DVertex& o) : S3DVertex(o) {} + + //! Second set of texture coordinates + core::vector2d TCoords2; + + //! Equality operator + bool operator==(const S3DVertex2TCoords& other) const + { + return ((static_cast(*this)==other) && + (TCoords2 == other.TCoords2)); + } + + //! Inequality operator + bool operator!=(const S3DVertex2TCoords& other) const + { + return ((static_cast(*this)!=other) || + (TCoords2 != other.TCoords2)); + } + + bool operator<(const S3DVertex2TCoords& other) const + { + return ((static_cast(*this) < other) || + ((static_cast(*this) == other) && (TCoords2 < other.TCoords2))); + } + + E_VERTEX_TYPE getType() const + { + return EVT_2TCOORDS; + } + + S3DVertex2TCoords getInterpolated(const S3DVertex2TCoords& other, f32 d) + { + d = core::clamp(d, 0.0f, 1.0f); + return S3DVertex2TCoords(Pos.getInterpolated(other.Pos, d), + Normal.getInterpolated(other.Normal, d), + Color.getInterpolated(other.Color, d), + TCoords.getInterpolated(other.TCoords, d), + TCoords2.getInterpolated(other.TCoords2, d)); + } +}; + + +//! Vertex with a tangent and binormal vector. +/** Usually used for tangent space normal mapping. */ +struct S3DVertexTangents : public S3DVertex +{ + //! default constructor + S3DVertexTangents() : S3DVertex() { } + + //! constructor + S3DVertexTangents(f32 x, f32 y, f32 z, f32 nx=0.0f, f32 ny=0.0f, f32 nz=0.0f, + SColor c = 0xFFFFFFFF, f32 tu=0.0f, f32 tv=0.0f, + f32 tanx=0.0f, f32 tany=0.0f, f32 tanz=0.0f, + f32 bx=0.0f, f32 by=0.0f, f32 bz=0.0f) + : S3DVertex(x,y,z, nx,ny,nz, c, tu,tv), Tangent(tanx,tany,tanz), Binormal(bx,by,bz) { } + + //! constructor + S3DVertexTangents(const core::vector3df& pos, SColor c, + const core::vector2df& tcoords) + : S3DVertex(pos, core::vector3df(), c, tcoords) { } + + //! constructor + S3DVertexTangents(const core::vector3df& pos, + const core::vector3df& normal, SColor c, + const core::vector2df& tcoords, + const core::vector3df& tangent=core::vector3df(), + const core::vector3df& binormal=core::vector3df()) + : S3DVertex(pos, normal, c, tcoords), Tangent(tangent), Binormal(binormal) { } + + //! Tangent vector along the x-axis of the texture + core::vector3df Tangent; + + //! Binormal vector (tangent x normal) + core::vector3df Binormal; + + bool operator==(const S3DVertexTangents& other) const + { + return ((static_cast(*this)==other) && + (Tangent == other.Tangent) && + (Binormal == other.Binormal)); + } + + bool operator!=(const S3DVertexTangents& other) const + { + return ((static_cast(*this)!=other) || + (Tangent != other.Tangent) || + (Binormal != other.Binormal)); + } + + bool operator<(const S3DVertexTangents& other) const + { + return ((static_cast(*this) < other) || + ((static_cast(*this) == other) && (Tangent < other.Tangent)) || + ((static_cast(*this) == other) && (Tangent == other.Tangent) && (Binormal < other.Binormal))); + } + + E_VERTEX_TYPE getType() const + { + return EVT_TANGENTS; + } + + S3DVertexTangents getInterpolated(const S3DVertexTangents& other, f32 d) + { + d = core::clamp(d, 0.0f, 1.0f); + return S3DVertexTangents(Pos.getInterpolated(other.Pos, d), + Normal.getInterpolated(other.Normal, d), + Color.getInterpolated(other.Color, d), + TCoords.getInterpolated(other.TCoords, d), + Tangent.getInterpolated(other.Tangent, d), + Binormal.getInterpolated(other.Binormal, d)); + } +}; + + + +inline u32 getVertexPitchFromType(E_VERTEX_TYPE vertexType) +{ + switch (vertexType) + { + case video::EVT_2TCOORDS: + return sizeof(video::S3DVertex2TCoords); + case video::EVT_TANGENTS: + return sizeof(video::S3DVertexTangents); + default: + return sizeof(video::S3DVertex); + } +} + + +} // end namespace video +} // end namespace irr + +#endif + diff --git a/inc/SAnimatedMesh.h b/inc/SAnimatedMesh.h new file mode 100644 index 0000000..f962f30 --- /dev/null +++ b/inc/SAnimatedMesh.h @@ -0,0 +1,189 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __S_ANIMATED_MESH_H_INCLUDED__ +#define __S_ANIMATED_MESH_H_INCLUDED__ + +#include "IAnimatedMesh.h" +#include "IMesh.h" +#include "aabbox3d.h" +#include "irrArray.h" + +namespace irr +{ +namespace scene +{ + + //! Simple implementation of the IAnimatedMesh interface. + struct SAnimatedMesh : public IAnimatedMesh + { + //! constructor + SAnimatedMesh(scene::IMesh* mesh=0, scene::E_ANIMATED_MESH_TYPE type=scene::EAMT_UNKNOWN) : IAnimatedMesh(), FramesPerSecond(25.f), Type(type) + { + #ifdef _DEBUG + setDebugName("SAnimatedMesh"); + #endif + addMesh(mesh); + recalculateBoundingBox(); + } + + //! destructor + virtual ~SAnimatedMesh() + { + // drop meshes + for (u32 i=0; idrop(); + } + + //! Gets the frame count of the animated mesh. + /** \return Amount of frames. If the amount is 1, it is a static, non animated mesh. */ + virtual u32 getFrameCount() const + { + return Meshes.size(); + } + + //! Gets the default animation speed of the animated mesh. + /** \return Amount of frames per second. If the amount is 0, it is a static, non animated mesh. */ + virtual f32 getAnimationSpeed() const + { + return FramesPerSecond; + } + + //! Gets the frame count of the animated mesh. + /** \param fps Frames per second to play the animation with. If the amount is 0, it is not animated. + The actual speed is set in the scene node the mesh is instantiated in.*/ + virtual void setAnimationSpeed(f32 fps) + { + FramesPerSecond=fps; + } + + //! Returns the IMesh interface for a frame. + /** \param frame: Frame number as zero based index. The maximum frame number is + getFrameCount() - 1; + \param detailLevel: Level of detail. 0 is the lowest, + 255 the highest level of detail. Most meshes will ignore the detail level. + \param startFrameLoop: start frame + \param endFrameLoop: end frame + \return The animated mesh based on a detail level. */ + virtual IMesh* getMesh(s32 frame, s32 detailLevel=255, s32 startFrameLoop=-1, s32 endFrameLoop=-1) + { + if (Meshes.empty()) + return 0; + + return Meshes[frame]; + } + + //! adds a Mesh + void addMesh(IMesh* mesh) + { + if (mesh) + { + mesh->grab(); + Meshes.push_back(mesh); + } + } + + //! Returns an axis aligned bounding box of the mesh. + /** \return A bounding box of this mesh is returned. */ + virtual const core::aabbox3d& getBoundingBox() const + { + return Box; + } + + //! set user axis aligned bounding box + virtual void setBoundingBox(const core::aabbox3df& box) + { + Box = box; + } + + //! Recalculates the bounding box. + void recalculateBoundingBox() + { + Box.reset(0,0,0); + + if (Meshes.empty()) + return; + + Box = Meshes[0]->getBoundingBox(); + + for (u32 i=1; igetBoundingBox()); + } + + //! Returns the type of the animated mesh. + virtual E_ANIMATED_MESH_TYPE getMeshType() const + { + return Type; + } + + //! returns amount of mesh buffers. + virtual u32 getMeshBufferCount() const + { + if (Meshes.empty()) + return 0; + + return Meshes[0]->getMeshBufferCount(); + } + + //! returns pointer to a mesh buffer + virtual IMeshBuffer* getMeshBuffer(u32 nr) const + { + if (Meshes.empty()) + return 0; + + return Meshes[0]->getMeshBuffer(nr); + } + + //! Returns pointer to a mesh buffer which fits a material + /** \param material: material to search for + \return Returns the pointer to the mesh buffer or + NULL if there is no such mesh buffer. */ + virtual IMeshBuffer* getMeshBuffer( const video::SMaterial &material) const + { + if (Meshes.empty()) + return 0; + + return Meshes[0]->getMeshBuffer(material); + } + + //! Set a material flag for all meshbuffers of this mesh. + virtual void setMaterialFlag(video::E_MATERIAL_FLAG flag, bool newvalue) + { + for (u32 i=0; isetMaterialFlag(flag, newvalue); + } + + //! set the hardware mapping hint, for driver + virtual void setHardwareMappingHint( E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX ) + { + for (u32 i=0; isetHardwareMappingHint(newMappingHint, buffer); + } + + //! flags the meshbuffer as changed, reloads hardware buffers + virtual void setDirty(E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX) + { + for (u32 i=0; isetDirty(buffer); + } + + //! All meshes defining the animated mesh + core::array Meshes; + + //! The bounding box of this mesh + core::aabbox3d Box; + + //! Default animation speed of this mesh. + f32 FramesPerSecond; + + //! The type of the mesh. + E_ANIMATED_MESH_TYPE Type; + }; + + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/SColor.h b/inc/SColor.h new file mode 100644 index 0000000..f57b4a9 --- /dev/null +++ b/inc/SColor.h @@ -0,0 +1,697 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __COLOR_H_INCLUDED__ +#define __COLOR_H_INCLUDED__ + +#include "irrTypes.h" +#include "irrMath.h" + +namespace irr +{ +namespace video +{ + //! An enum for the color format of textures used by the Irrlicht Engine. + /** A color format specifies how color information is stored. */ + enum ECOLOR_FORMAT + { + //! 16 bit color format used by the software driver. + /** It is thus preferred by all other irrlicht engine video drivers. + There are 5 bits for every color component, and a single bit is left + for alpha information. */ + ECF_A1R5G5B5 = 0, + + //! Standard 16 bit color format. + ECF_R5G6B5, + + //! 24 bit color, no alpha channel, but 8 bit for red, green and blue. + ECF_R8G8B8, + + //! Default 32 bit color format. 8 bits are used for every component: red, green, blue and alpha. + ECF_A8R8G8B8, + + /** Floating Point formats. The following formats may only be used for render target textures. */ + + //! 16 bit floating point format using 16 bits for the red channel. + ECF_R16F, + + //! 32 bit floating point format using 16 bits for the red channel and 16 bits for the green channel. + ECF_G16R16F, + + //! 64 bit floating point format 16 bits are used for the red, green, blue and alpha channels. + ECF_A16B16G16R16F, + + //! 32 bit floating point format using 32 bits for the red channel. + ECF_R32F, + + //! 64 bit floating point format using 32 bits for the red channel and 32 bits for the green channel. + ECF_G32R32F, + + //! 128 bit floating point format. 32 bits are used for the red, green, blue and alpha channels. + ECF_A32B32G32R32F, + + //! Unknown color format: + ECF_UNKNOWN + }; + + + //! Creates a 16 bit A1R5G5B5 color + inline u16 RGBA16(u32 r, u32 g, u32 b, u32 a=0xFF) + { + return (u16)((a & 0x80) << 8 | + (r & 0xF8) << 7 | + (g & 0xF8) << 2 | + (b & 0xF8) >> 3); + } + + + //! Creates a 16 bit A1R5G5B5 color + inline u16 RGB16(u32 r, u32 g, u32 b) + { + return RGBA16(r,g,b); + } + + + //! Creates a 16bit A1R5G5B5 color, based on 16bit input values + inline u16 RGB16from16(u16 r, u16 g, u16 b) + { + return (0x8000 | + (r & 0x1F) << 10 | + (g & 0x1F) << 5 | + (b & 0x1F)); + } + + + //! Converts a 32bit (X8R8G8B8) color to a 16bit A1R5G5B5 color + inline u16 X8R8G8B8toA1R5G5B5(u32 color) + { + return (u16)(0x8000 | + ( color & 0x00F80000) >> 9 | + ( color & 0x0000F800) >> 6 | + ( color & 0x000000F8) >> 3); + } + + + //! Converts a 32bit (A8R8G8B8) color to a 16bit A1R5G5B5 color + inline u16 A8R8G8B8toA1R5G5B5(u32 color) + { + return (u16)(( color & 0x80000000) >> 16| + ( color & 0x00F80000) >> 9 | + ( color & 0x0000F800) >> 6 | + ( color & 0x000000F8) >> 3); + } + + + //! Converts a 32bit (A8R8G8B8) color to a 16bit R5G6B5 color + inline u16 A8R8G8B8toR5G6B5(u32 color) + { + return (u16)(( color & 0x00F80000) >> 8 | + ( color & 0x0000FC00) >> 5 | + ( color & 0x000000F8) >> 3); + } + + + //! Convert A8R8G8B8 Color from A1R5G5B5 color + /** build a nicer 32bit Color by extending dest lower bits with source high bits. */ + inline u32 A1R5G5B5toA8R8G8B8(u16 color) + { + return ( (( -( (s32) color & 0x00008000 ) >> (s32) 31 ) & 0xFF000000 ) | + (( color & 0x00007C00 ) << 9) | (( color & 0x00007000 ) << 4) | + (( color & 0x000003E0 ) << 6) | (( color & 0x00000380 ) << 1) | + (( color & 0x0000001F ) << 3) | (( color & 0x0000001C ) >> 2) + ); + } + + + //! Returns A8R8G8B8 Color from R5G6B5 color + inline u32 R5G6B5toA8R8G8B8(u16 color) + { + return 0xFF000000 | + ((color & 0xF800) << 8)| + ((color & 0x07E0) << 5)| + ((color & 0x001F) << 3); + } + + + //! Returns A1R5G5B5 Color from R5G6B5 color + inline u16 R5G6B5toA1R5G5B5(u16 color) + { + return 0x8000 | (((color & 0xFFC0) >> 1) | (color & 0x1F)); + } + + + //! Returns R5G6B5 Color from A1R5G5B5 color + inline u16 A1R5G5B5toR5G6B5(u16 color) + { + return (((color & 0x7FE0) << 1) | (color & 0x1F)); + } + + + + //! Returns the alpha component from A1R5G5B5 color + /** In Irrlicht, alpha refers to opacity. + \return The alpha value of the color. 0 is transparent, 1 is opaque. */ + inline u32 getAlpha(u16 color) + { + return ((color >> 15)&0x1); + } + + + //! Returns the red component from A1R5G5B5 color. + /** Shift left by 3 to get 8 bit value. */ + inline u32 getRed(u16 color) + { + return ((color >> 10)&0x1F); + } + + + //! Returns the green component from A1R5G5B5 color + /** Shift left by 3 to get 8 bit value. */ + inline u32 getGreen(u16 color) + { + return ((color >> 5)&0x1F); + } + + + //! Returns the blue component from A1R5G5B5 color + /** Shift left by 3 to get 8 bit value. */ + inline u32 getBlue(u16 color) + { + return (color & 0x1F); + } + + + //! Returns the average from a 16 bit A1R5G5B5 color + inline s32 getAverage(s16 color) + { + return ((getRed(color)<<3) + (getGreen(color)<<3) + (getBlue(color)<<3)) / 3; + } + + + //! Class representing a 32 bit ARGB color. + /** The color values for alpha, red, green, and blue are + stored in a single u32. So all four values may be between 0 and 255. + Alpha in Irrlicht is opacity, so 0 is fully transparent, 255 is fully opaque (solid). + This class is used by most parts of the Irrlicht Engine + to specify a color. Another way is using the class SColorf, which + stores the color values in 4 floats. + This class must consist of only one u32 and must not use virtual functions. + */ + class SColor + { + public: + + //! Constructor of the Color. Does nothing. + /** The color value is not initialized to save time. */ + SColor() {} + + //! Constructs the color from 4 values representing the alpha, red, green and blue component. + /** Must be values between 0 and 255. */ + SColor (u32 a, u32 r, u32 g, u32 b) + : color(((a & 0xff)<<24) | ((r & 0xff)<<16) | ((g & 0xff)<<8) | (b & 0xff)) {} + + //! Constructs the color from a 32 bit value. Could be another color. + SColor(u32 clr) + : color(clr) {} + + //! Returns the alpha component of the color. + /** The alpha component defines how opaque a color is. + \return The alpha value of the color. 0 is fully transparent, 255 is fully opaque. */ + u32 getAlpha() const { return color>>24; } + + //! Returns the red component of the color. + /** \return Value between 0 and 255, specifying how red the color is. + 0 means no red, 255 means full red. */ + u32 getRed() const { return (color>>16) & 0xff; } + + //! Returns the green component of the color. + /** \return Value between 0 and 255, specifying how green the color is. + 0 means no green, 255 means full green. */ + u32 getGreen() const { return (color>>8) & 0xff; } + + //! Returns the blue component of the color. + /** \return Value between 0 and 255, specifying how blue the color is. + 0 means no blue, 255 means full blue. */ + u32 getBlue() const { return color & 0xff; } + + //! Get lightness of the color in the range [0,255] + f32 getLightness() const + { + return 0.5f*(core::max_(core::max_(getRed(),getGreen()),getBlue())+core::min_(core::min_(getRed(),getGreen()),getBlue())); + } + + //! Get luminance of the color in the range [0,255]. + f32 getLuminance() const + { + return 0.3f*getRed() + 0.59f*getGreen() + 0.11f*getBlue(); + } + + //! Get average intensity of the color in the range [0,255]. + u32 getAverage() const + { + return ( getRed() + getGreen() + getBlue() ) / 3; + } + + //! Sets the alpha component of the Color. + /** The alpha component defines how transparent a color should be. + \param a The alpha value of the color. 0 is fully transparent, 255 is fully opaque. */ + void setAlpha(u32 a) { color = ((a & 0xff)<<24) | (color & 0x00ffffff); } + + //! Sets the red component of the Color. + /** \param r: Has to be a value between 0 and 255. + 0 means no red, 255 means full red. */ + void setRed(u32 r) { color = ((r & 0xff)<<16) | (color & 0xff00ffff); } + + //! Sets the green component of the Color. + /** \param g: Has to be a value between 0 and 255. + 0 means no green, 255 means full green. */ + void setGreen(u32 g) { color = ((g & 0xff)<<8) | (color & 0xffff00ff); } + + //! Sets the blue component of the Color. + /** \param b: Has to be a value between 0 and 255. + 0 means no blue, 255 means full blue. */ + void setBlue(u32 b) { color = (b & 0xff) | (color & 0xffffff00); } + + //! Calculates a 16 bit A1R5G5B5 value of this color. + /** \return 16 bit A1R5G5B5 value of this color. */ + u16 toA1R5G5B5() const { return A8R8G8B8toA1R5G5B5(color); } + + //! Converts color to OpenGL color format + /** From ARGB to RGBA in 4 byte components for endian aware + passing to OpenGL + \param dest: address where the 4x8 bit OpenGL color is stored. */ + void toOpenGLColor(u8* dest) const + { + *dest = (u8)getRed(); + *++dest = (u8)getGreen(); + *++dest = (u8)getBlue(); + *++dest = (u8)getAlpha(); + } + + //! Sets all four components of the color at once. + /** Constructs the color from 4 values representing the alpha, + red, green and blue components of the color. Must be values + between 0 and 255. + \param a: Alpha component of the color. The alpha component + defines how transparent a color should be. Has to be a value + between 0 and 255. 255 means not transparent (opaque), 0 means + fully transparent. + \param r: Sets the red component of the Color. Has to be a + value between 0 and 255. 0 means no red, 255 means full red. + \param g: Sets the green component of the Color. Has to be a + value between 0 and 255. 0 means no green, 255 means full + green. + \param b: Sets the blue component of the Color. Has to be a + value between 0 and 255. 0 means no blue, 255 means full blue. */ + void set(u32 a, u32 r, u32 g, u32 b) + { + color = (((a & 0xff)<<24) | ((r & 0xff)<<16) | ((g & 0xff)<<8) | (b & 0xff)); + } + void set(u32 col) { color = col; } + + //! Compares the color to another color. + /** \return True if the colors are the same, and false if not. */ + bool operator==(const SColor& other) const { return other.color == color; } + + //! Compares the color to another color. + /** \return True if the colors are different, and false if they are the same. */ + bool operator!=(const SColor& other) const { return other.color != color; } + + //! comparison operator + /** \return True if this color is smaller than the other one */ + bool operator<(const SColor& other) const { return (color < other.color); } + + //! Adds two colors, result is clamped to 0..255 values + /** \param other Color to add to this color + \return Addition of the two colors, clamped to 0..255 values */ + SColor operator+(const SColor& other) const + { + return SColor(core::min_(getAlpha() + other.getAlpha(), 255u), + core::min_(getRed() + other.getRed(), 255u), + core::min_(getGreen() + other.getGreen(), 255u), + core::min_(getBlue() + other.getBlue(), 255u)); + } + + //! Interpolates the color with a f32 value to another color + /** \param other: Other color + \param d: value between 0.0f and 1.0f + \return Interpolated color. */ + SColor getInterpolated(const SColor &other, f32 d) const + { + d = core::clamp(d, 0.f, 1.f); + const f32 inv = 1.0f - d; + return SColor((u32)core::round32(other.getAlpha()*inv + getAlpha()*d), + (u32)core::round32(other.getRed()*inv + getRed()*d), + (u32)core::round32(other.getGreen()*inv + getGreen()*d), + (u32)core::round32(other.getBlue()*inv + getBlue()*d)); + } + + //! Returns interpolated color. ( quadratic ) + /** \param c1: first color to interpolate with + \param c2: second color to interpolate with + \param d: value between 0.0f and 1.0f. */ + SColor getInterpolated_quadratic(const SColor& c1, const SColor& c2, f32 d) const + { + // this*(1-d)*(1-d) + 2 * c1 * (1-d) + c2 * d * d; + d = core::clamp(d, 0.f, 1.f); + const f32 inv = 1.f - d; + const f32 mul0 = inv * inv; + const f32 mul1 = 2.f * d * inv; + const f32 mul2 = d * d; + + return SColor( + core::clamp( core::floor32( + getAlpha() * mul0 + c1.getAlpha() * mul1 + c2.getAlpha() * mul2 ), 0, 255 ), + core::clamp( core::floor32( + getRed() * mul0 + c1.getRed() * mul1 + c2.getRed() * mul2 ), 0, 255 ), + core::clamp ( core::floor32( + getGreen() * mul0 + c1.getGreen() * mul1 + c2.getGreen() * mul2 ), 0, 255 ), + core::clamp ( core::floor32( + getBlue() * mul0 + c1.getBlue() * mul1 + c2.getBlue() * mul2 ), 0, 255 )); + } + + //! set the color by expecting data in the given format + /** \param data: must point to valid memory containing color information in the given format + \param format: tells the format in which data is available + */ + void setData(const void *data, ECOLOR_FORMAT format) + { + switch (format) + { + case ECF_A1R5G5B5: + color = A1R5G5B5toA8R8G8B8(*(u16*)data); + break; + case ECF_R5G6B5: + color = R5G6B5toA8R8G8B8(*(u16*)data); + break; + case ECF_A8R8G8B8: + color = *(u32*)data; + break; + case ECF_R8G8B8: + { + u8* p = (u8*)data; + set(255, p[0],p[1],p[2]); + } + break; + default: + color = 0xffffffff; + break; + } + } + + //! Write the color to data in the defined format + /** \param data: target to write the color. Must contain sufficiently large memory to receive the number of bytes neede for format + \param format: tells the format used to write the color into data + */ + void getData(void *data, ECOLOR_FORMAT format) + { + switch(format) + { + case ECF_A1R5G5B5: + { + u16 * dest = (u16*)data; + *dest = video::A8R8G8B8toA1R5G5B5( color ); + } + break; + + case ECF_R5G6B5: + { + u16 * dest = (u16*)data; + *dest = video::A8R8G8B8toR5G6B5( color ); + } + break; + + case ECF_R8G8B8: + { + u8* dest = (u8*)data; + dest[0] = (u8)getRed(); + dest[1] = (u8)getGreen(); + dest[2] = (u8)getBlue(); + } + break; + + case ECF_A8R8G8B8: + { + u32 * dest = (u32*)data; + *dest = color; + } + break; + + default: + break; + } + } + + //! color in A8R8G8B8 Format + u32 color; + }; + + + //! Class representing a color with four floats. + /** The color values for red, green, blue + and alpha are each stored in a 32 bit floating point variable. + So all four values may be between 0.0f and 1.0f. + Another, faster way to define colors is using the class SColor, which + stores the color values in a single 32 bit integer. + */ + class SColorf + { + public: + //! Default constructor for SColorf. + /** Sets red, green and blue to 0.0f and alpha to 1.0f. */ + SColorf() : r(0.0f), g(0.0f), b(0.0f), a(1.0f) {} + + //! Constructs a color from up to four color values: red, green, blue, and alpha. + /** \param r: Red color component. Should be a value between + 0.0f meaning no red and 1.0f, meaning full red. + \param g: Green color component. Should be a value between 0.0f + meaning no green and 1.0f, meaning full green. + \param b: Blue color component. Should be a value between 0.0f + meaning no blue and 1.0f, meaning full blue. + \param a: Alpha color component of the color. The alpha + component defines how transparent a color should be. Has to be + a value between 0.0f and 1.0f, 1.0f means not transparent + (opaque), 0.0f means fully transparent. */ + SColorf(f32 r, f32 g, f32 b, f32 a = 1.0f) : r(r), g(g), b(b), a(a) {} + + //! Constructs a color from 32 bit Color. + /** \param c: 32 bit color from which this SColorf class is + constructed from. */ + SColorf(SColor c) + { + const f32 inv = 1.0f / 255.0f; + r = c.getRed() * inv; + g = c.getGreen() * inv; + b = c.getBlue() * inv; + a = c.getAlpha() * inv; + } + + //! Converts this color to a SColor without floats. + SColor toSColor() const + { + return SColor((u32)core::round32(a*255.0f), (u32)core::round32(r*255.0f), (u32)core::round32(g*255.0f), (u32)core::round32(b*255.0f)); + } + + //! Sets three color components to new values at once. + /** \param rr: Red color component. Should be a value between 0.0f meaning + no red (=black) and 1.0f, meaning full red. + \param gg: Green color component. Should be a value between 0.0f meaning + no green (=black) and 1.0f, meaning full green. + \param bb: Blue color component. Should be a value between 0.0f meaning + no blue (=black) and 1.0f, meaning full blue. */ + void set(f32 rr, f32 gg, f32 bb) {r = rr; g =gg; b = bb; } + + //! Sets all four color components to new values at once. + /** \param aa: Alpha component. Should be a value between 0.0f meaning + fully transparent and 1.0f, meaning opaque. + \param rr: Red color component. Should be a value between 0.0f meaning + no red and 1.0f, meaning full red. + \param gg: Green color component. Should be a value between 0.0f meaning + no green and 1.0f, meaning full green. + \param bb: Blue color component. Should be a value between 0.0f meaning + no blue and 1.0f, meaning full blue. */ + void set(f32 aa, f32 rr, f32 gg, f32 bb) {a = aa; r = rr; g =gg; b = bb; } + + //! Interpolates the color with a f32 value to another color + /** \param other: Other color + \param d: value between 0.0f and 1.0f + \return Interpolated color. */ + SColorf getInterpolated(const SColorf &other, f32 d) const + { + d = core::clamp(d, 0.f, 1.f); + const f32 inv = 1.0f - d; + return SColorf(other.r*inv + r*d, + other.g*inv + g*d, other.b*inv + b*d, other.a*inv + a*d); + } + + //! Returns interpolated color. ( quadratic ) + /** \param c1: first color to interpolate with + \param c2: second color to interpolate with + \param d: value between 0.0f and 1.0f. */ + inline SColorf getInterpolated_quadratic(const SColorf& c1, const SColorf& c2, + f32 d) const + { + d = core::clamp(d, 0.f, 1.f); + // this*(1-d)*(1-d) + 2 * c1 * (1-d) + c2 * d * d; + const f32 inv = 1.f - d; + const f32 mul0 = inv * inv; + const f32 mul1 = 2.f * d * inv; + const f32 mul2 = d * d; + + return SColorf (r * mul0 + c1.r * mul1 + c2.r * mul2, + g * mul0 + c1.g * mul1 + c2.g * mul2, + b * mul0 + c1.b * mul1 + c2.b * mul2, + a * mul0 + c1.a * mul1 + c2.a * mul2); + } + + + //! Sets a color component by index. R=0, G=1, B=2, A=3 + void setColorComponentValue(s32 index, f32 value) + { + switch(index) + { + case 0: r = value; break; + case 1: g = value; break; + case 2: b = value; break; + case 3: a = value; break; + } + } + + //! Returns the alpha component of the color in the range 0.0 (transparent) to 1.0 (opaque) + f32 getAlpha() const { return a; } + + //! Returns the red component of the color in the range 0.0 to 1.0 + f32 getRed() const { return r; } + + //! Returns the green component of the color in the range 0.0 to 1.0 + f32 getGreen() const { return g; } + + //! Returns the blue component of the color in the range 0.0 to 1.0 + f32 getBlue() const { return b; } + + //! red color component + f32 r; + + //! green color component + f32 g; + + //! blue component + f32 b; + + //! alpha color component + f32 a; + }; + + + //! Class representing a color in HSL format + /** The color values for hue, saturation, luminance + are stored in 32bit floating point variables. Hue is in range [0,360], + Luminance and Saturation are in percent [0,100] + */ + class SColorHSL + { + public: + SColorHSL ( f32 h = 0.f, f32 s = 0.f, f32 l = 0.f ) + : Hue ( h ), Saturation ( s ), Luminance ( l ) {} + + void fromRGB(const SColorf &color); + void toRGB(SColorf &color) const; + + f32 Hue; + f32 Saturation; + f32 Luminance; + + private: + inline f32 toRGB1(f32 rm1, f32 rm2, f32 rh) const; + + }; + + inline void SColorHSL::fromRGB(const SColorf &color) + { + const f32 maxVal = core::max_(color.getRed(), color.getGreen(), color.getBlue()); + const f32 minVal = (f32)core::min_(color.getRed(), color.getGreen(), color.getBlue()); + Luminance = (maxVal+minVal)*50; + if (core::equals(maxVal, minVal)) + { + Hue=0.f; + Saturation=0.f; + return; + } + + const f32 delta = maxVal-minVal; + if ( Luminance <= 50 ) + { + Saturation = (delta)/(maxVal+minVal); + } + else + { + Saturation = (delta)/(2-maxVal-minVal); + } + Saturation *= 100; + + if (core::equals(maxVal, color.getRed())) + Hue = (color.getGreen()-color.getBlue())/delta; + else if (core::equals(maxVal, color.getGreen())) + Hue = 2+((color.getBlue()-color.getRed())/delta); + else // blue is max + Hue = 4+((color.getRed()-color.getGreen())/delta); + + Hue *= 60.0f; + while ( Hue < 0.f ) + Hue += 360; + } + + + inline void SColorHSL::toRGB(SColorf &color) const + { + const f32 l = Luminance/100; + if (core::iszero(Saturation)) // grey + { + color.set(l, l, l); + return; + } + + f32 rm2; + + if ( Luminance <= 50 ) + { + rm2 = l + l * (Saturation/100); + } + else + { + rm2 = l + (1 - l) * (Saturation/100); + } + + const f32 rm1 = 2.0f * l - rm2; + + const f32 h = Hue / 360.0f; + color.set( toRGB1(rm1, rm2, h + 1.f/3.f), + toRGB1(rm1, rm2, h), + toRGB1(rm1, rm2, h - 1.f/3.f) + ); + } + + + // algorithm from Foley/Van-Dam + inline f32 SColorHSL::toRGB1(f32 rm1, f32 rm2, f32 rh) const + { + if (rh<0) + rh += 1; + if (rh>1) + rh -= 1; + + if (rh < 1.f/6.f) + rm1 = rm1 + (rm2 - rm1) * rh*6.f; + else if (rh < 0.5f) + rm1 = rm2; + else if (rh < 2.f/3.f) + rm1 = rm1 + (rm2 - rm1) * ((2.f/3.f)-rh)*6.f; + + return rm1; + } + +} // end namespace video +} // end namespace irr + +#endif diff --git a/inc/SExposedVideoData.h b/inc/SExposedVideoData.h new file mode 100644 index 0000000..2415d55 --- /dev/null +++ b/inc/SExposedVideoData.h @@ -0,0 +1,90 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __S_EXPOSED_VIDEO_DATA_H_INCLUDED__ +#define __S_EXPOSED_VIDEO_DATA_H_INCLUDED__ + +// forward declarations for internal pointers +struct IDirect3D9; +struct IDirect3DDevice9; +struct IDirect3D8; +struct IDirect3DDevice8; + +namespace irr +{ +namespace video +{ + +//! structure for holding data describing a driver and operating system specific data. +/** This data can be retrived by IVideoDriver::getExposedVideoData(). Use this with caution. +This only should be used to make it possible to extend the engine easily without +modification of its source. Note that this structure does not contain any valid data, if +you are using the software or the null device. +*/ +struct SExposedVideoData +{ + SExposedVideoData() {OpenGLWin32.HDc=0; OpenGLWin32.HRc=0; OpenGLWin32.HWnd=0;} + explicit SExposedVideoData(void* Window) {OpenGLWin32.HDc=0; OpenGLWin32.HRc=0; OpenGLWin32.HWnd=Window;} + + union + { + struct + { + //! Pointer to the IDirect3D9 interface + IDirect3D9* D3D9; + + //! Pointer to the IDirect3DDevice9 interface + IDirect3DDevice9* D3DDev9; + + //! Window handle. + /** Get with for example HWND h = reinterpret_cast(exposedData.D3D9.HWnd) */ + void* HWnd; + + } D3D9; + + struct + { + //! Pointer to the IDirect3D8 interface + IDirect3D8* D3D8; + + //! Pointer to the IDirect3DDevice8 interface + IDirect3DDevice8* D3DDev8; + + //! Window handle. + /** Get with for example with: HWND h = reinterpret_cast(exposedData.D3D8.HWnd) */ + void* HWnd; + + } D3D8; + + struct + { + //! Private GDI Device Context. + /** Get if for example with: HDC h = reinterpret_cast(exposedData.OpenGLWin32.HDc) */ + void* HDc; + + //! Permanent Rendering Context. + /** Get if for example with: HGLRC h = reinterpret_cast(exposedData.OpenGLWin32.HRc) */ + void* HRc; + + //! Window handle. + /** Get with for example with: HWND h = reinterpret_cast(exposedData.OpenGLWin32.HWnd) */ + void* HWnd; + } OpenGLWin32; + + struct + { + // XWindow handles + void* X11Display; + void* X11Context; + unsigned long X11Window; + } OpenGLLinux; + }; +}; + +} // end namespace video +} // end namespace irr + + +#endif + diff --git a/inc/SIrrCreationParameters.h b/inc/SIrrCreationParameters.h new file mode 100644 index 0000000..0c30b74 --- /dev/null +++ b/inc/SIrrCreationParameters.h @@ -0,0 +1,296 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_IRRLICHT_CREATION_PARAMETERS_H_INCLUDED__ +#define __I_IRRLICHT_CREATION_PARAMETERS_H_INCLUDED__ + +#include "EDriverTypes.h" +#include "EDeviceTypes.h" +#include "dimension2d.h" +#include "ILogger.h" + +namespace irr +{ + class IEventReceiver; + + //! Structure for holding Irrlicht Device creation parameters. + /** This structure is used in the createDeviceEx() function. */ + struct SIrrlichtCreationParameters + { + //! Constructs a SIrrlichtCreationParameters structure with default values. + SIrrlichtCreationParameters() : + DeviceType(EIDT_BEST), + DriverType(video::EDT_BURNINGSVIDEO), + WindowSize(core::dimension2d(800, 600)), + Bits(16), + ZBufferBits(16), + Fullscreen(false), + Stencilbuffer(false), + Vsync(false), + AntiAlias(0), + HandleSRGB(false), + WithAlphaChannel(false), + Doublebuffer(true), + IgnoreInput(false), + Stereobuffer(false), + HighPrecisionFPU(false), + EventReceiver(0), + WindowId(0), +#ifdef _DEBUG + LoggingLevel(ELL_DEBUG), +#else + LoggingLevel(ELL_INFORMATION), +#endif + DisplayAdapter(0), + DriverMultithreaded(false), + UsePerformanceTimer(true), + SDK_version_do_not_use(IRRLICHT_SDK_VERSION) + { + } + + SIrrlichtCreationParameters(const SIrrlichtCreationParameters& other) : + SDK_version_do_not_use(IRRLICHT_SDK_VERSION) + {*this = other;} + + SIrrlichtCreationParameters& operator=(const SIrrlichtCreationParameters& other) + { + DeviceType = other.DeviceType; + DriverType = other.DriverType; + WindowSize = other.WindowSize; + Bits = other.Bits; + ZBufferBits = other.ZBufferBits; + Fullscreen = other.Fullscreen; + Stencilbuffer = other.Stencilbuffer; + Vsync = other.Vsync; + AntiAlias = other.AntiAlias; + HandleSRGB = other.HandleSRGB; + WithAlphaChannel = other.WithAlphaChannel; + Doublebuffer = other.Doublebuffer; + IgnoreInput = other.IgnoreInput; + Stereobuffer = other.Stereobuffer; + HighPrecisionFPU = other.HighPrecisionFPU; + EventReceiver = other.EventReceiver; + WindowId = other.WindowId; + LoggingLevel = other.LoggingLevel; + DriverMultithreaded = other.DriverMultithreaded; + DisplayAdapter = other.DisplayAdapter; + UsePerformanceTimer = other.UsePerformanceTimer; + return *this; + } + + //! Type of the device. + /** This setting decides the windowing system used by the device, most device types are native + to a specific operating system and so may not be available. + EIDT_WIN32 is only available on Windows desktops, + EIDT_WINCE is only available on Windows mobile devices, + EIDT_COCOA is only available on Mac OSX, + EIDT_X11 is available on Linux, Solaris, BSD and other operating systems which use X11, + EIDT_SDL is available on most systems if compiled in, + EIDT_CONSOLE is usually available but can only render to text, + EIDT_BEST will select the best available device for your operating system. + Default: EIDT_BEST. */ + E_DEVICE_TYPE DeviceType; + + //! Type of video driver used to render graphics. + /** This can currently be video::EDT_NULL, video::EDT_SOFTWARE, + video::EDT_BURNINGSVIDEO, video::EDT_DIRECT3D8, + video::EDT_DIRECT3D9, and video::EDT_OPENGL. + Default: Software. */ + video::E_DRIVER_TYPE DriverType; + + //! Size of the window or the video mode in fullscreen mode. Default: 800x600 + core::dimension2d WindowSize; + + //! Minimum Bits per pixel of the color buffer in fullscreen mode. Ignored if windowed mode. Default: 16. + u8 Bits; + + //! Minimum Bits per pixel of the depth buffer. Default: 16. + u8 ZBufferBits; + + //! Should be set to true if the device should run in fullscreen. + /** Otherwise the device runs in windowed mode. Default: false. */ + bool Fullscreen; + + //! Specifies if the stencil buffer should be enabled. + /** Set this to true, if you want the engine be able to draw + stencil buffer shadows. Note that not all drivers are able to + use the stencil buffer, hence it can be ignored during device + creation. Without the stencil buffer no shadows will be drawn. + Default: false. */ + bool Stencilbuffer; + + //! Specifies vertical syncronisation. + /** If set to true, the driver will wait for the vertical + retrace period, otherwise not. May be silently ignored. + Default: false */ + bool Vsync; + + //! Specifies if the device should use fullscreen anti aliasing + /** Makes sharp/pixelated edges softer, but requires more + performance. Also, 2D elements might look blurred with this + switched on. The resulting rendering quality also depends on + the hardware and driver you are using, your program might look + different on different hardware with this. So if you are + writing a game/application with AntiAlias switched on, it would + be a good idea to make it possible to switch this option off + again by the user. + The value is the maximal antialiasing factor requested for + the device. The cretion method will automatically try smaller + values if no window can be created with the given value. + Value one is usually the same as 0 (disabled), but might be a + special value on some platforms. On D3D devices it maps to + NONMASKABLE. + Default value: 0 - disabled */ + u8 AntiAlias; + + //! Flag to enable proper sRGB and linear color handling + /** In most situations, it is desireable to have the color handling in + non-linear sRGB color space, and only do the intermediate color + calculations in linear RGB space. If this flag is enabled, the device and + driver try to assure that all color input and output are color corrected + and only the internal color representation is linear. This means, that + the color output is properly gamma-adjusted to provide the brighter + colors for monitor display. And that blending and lighting give a more + natural look, due to proper conversion from non-linear colors into linear + color space for blend operations. If this flag is enabled, all texture colors + (which are usually in sRGB space) are correctly displayed. However vertex colors + and other explicitly set values have to be manually encoded in linear color space. + Default value: false. */ + bool HandleSRGB; + + //! Whether the main framebuffer uses an alpha channel. + /** In some situations it might be desireable to get a color + buffer with an alpha channel, e.g. when rendering into a + transparent window or overlay. If this flag is set the device + tries to create a framebuffer with alpha channel. + If this flag is set, only color buffers with alpha channel + are considered. Otherwise, it depends on the actual hardware + if the colorbuffer has an alpha channel or not. + Default value: false */ + bool WithAlphaChannel; + + //! Whether the main framebuffer uses doublebuffering. + /** This should be usually enabled, in order to avoid render + artifacts on the visible framebuffer. However, it might be + useful to use only one buffer on very small devices. If no + doublebuffering is available, the drivers will fall back to + single buffers. Default value: true */ + bool Doublebuffer; + + //! Specifies if the device should ignore input events + /** This is only relevant when using external I/O handlers. + External windows need to take care of this themselves. + Currently only supported by X11. + Default value: false */ + bool IgnoreInput; + + //! Specifies if the device should use stereo buffers + /** Some high-end gfx cards support two framebuffers for direct + support of stereoscopic output devices. If this flag is set the + device tries to create a stereo context. + Currently only supported by OpenGL. + Default value: false */ + bool Stereobuffer; + + //! Specifies if the device should use high precision FPU setting + /** This is only relevant for DirectX Devices, which switch to + low FPU precision by default for performance reasons. However, + this may lead to problems with the other computations of the + application. In this case setting this flag to true should help + - on the expense of performance loss, though. + Default value: false */ + bool HighPrecisionFPU; + + //! A user created event receiver. + IEventReceiver* EventReceiver; + + //! Window Id. + /** If this is set to a value other than 0, the Irrlicht Engine + will be created in an already existing window. For windows, set + this to the HWND of the window you want. The windowSize and + FullScreen options will be ignored when using the WindowId + parameter. Default this is set to 0. + To make Irrlicht run inside the custom window, you still will + have to draw Irrlicht on your own. You can use this loop, as + usual: + \code + while (device->run()) + { + driver->beginScene(true, true, 0); + smgr->drawAll(); + driver->endScene(); + } + \endcode + Instead of this, you can also simply use your own message loop + using GetMessage, DispatchMessage and whatever. Calling + IrrlichtDevice::run() will cause Irrlicht to dispatch messages + internally too. You need not call Device->run() if you want to + do your own message dispatching loop, but Irrlicht will not be + able to fetch user input then and you have to do it on your own + using the window messages, DirectInput, or whatever. Also, + you'll have to increment the Irrlicht timer. + An alternative, own message dispatching loop without + device->run() would look like this: + \code + MSG msg; + while (true) + { + if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + + if (msg.message == WM_QUIT) + break; + } + + // increase virtual timer time + device->getTimer()->tick(); + + // draw engine picture + driver->beginScene(true, true, 0); + smgr->drawAll(); + driver->endScene(); + } + \endcode + However, there is no need to draw the picture this often. Just + do it how you like. */ + void* WindowId; + + //! Specifies the logging level used in the logging interface. + /** The default value is ELL_INFORMATION. You can access the ILogger interface + later on from the IrrlichtDevice with getLogger() and set another level. + But if you need more or less logging information already from device creation, + then you have to change it here. + */ + ELOG_LEVEL LoggingLevel; + + //! Allows to select which graphic card is used for rendering when more than one card is in the system. + /** So far only supported on D3D */ + u32 DisplayAdapter; + + //! Create the driver multithreaded. + /** Default is false. Enabling this can slow down your application. + Note that this does _not_ make Irrlicht threadsafe, but only the underlying driver-API for the graphiccard. + So far only supported on D3D. */ + bool DriverMultithreaded; + + //! Enables use of high performance timers on Windows platform. + /** When performance timers are not used, standard GetTickCount() + is used instead which usually has worse resolution, but also less + problems with speed stepping and other techniques. + */ + bool UsePerformanceTimer; + + //! Don't use or change this parameter. + /** Always set it to IRRLICHT_SDK_VERSION, which is done by default. + This is needed for sdk version checks. */ + const c8* const SDK_version_do_not_use; + }; + + +} // end namespace irr + +#endif + diff --git a/inc/SKeyMap.h b/inc/SKeyMap.h new file mode 100644 index 0000000..55aa5f9 --- /dev/null +++ b/inc/SKeyMap.h @@ -0,0 +1,41 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __S_KEY_MAP_H_INCLUDED__ +#define __S_KEY_MAP_H_INCLUDED__ + +#include "Keycodes.h" + +namespace irr +{ + + //! enumeration for key actions. Used for example in the FPS Camera. + enum EKEY_ACTION + { + EKA_MOVE_FORWARD = 0, + EKA_MOVE_BACKWARD, + EKA_STRAFE_LEFT, + EKA_STRAFE_RIGHT, + EKA_JUMP_UP, + EKA_CROUCH, + EKA_COUNT, + + //! This value is not used. It only forces this enumeration to compile in 32 bit. + EKA_FORCE_32BIT = 0x7fffffff + }; + + //! Struct storing which key belongs to which action. + struct SKeyMap + { + SKeyMap() {} + SKeyMap(EKEY_ACTION action, EKEY_CODE keyCode) : Action(action), KeyCode(keyCode) {} + + EKEY_ACTION Action; + EKEY_CODE KeyCode; + }; + +} // end namespace irr + +#endif + diff --git a/inc/SLight.h b/inc/SLight.h new file mode 100644 index 0000000..022c40a --- /dev/null +++ b/inc/SLight.h @@ -0,0 +1,98 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __S_LIGHT_H_INCLUDED__ +#define __S_LIGHT_H_INCLUDED__ + +#include "SColor.h" + +namespace irr +{ +namespace video +{ + +//! Enumeration for different types of lights +enum E_LIGHT_TYPE +{ + //! point light, it has a position in space and radiates light in all directions + ELT_POINT, + //! spot light, it has a position in space, a direction, and a limited cone of influence + ELT_SPOT, + //! directional light, coming from a direction from an infinite distance + ELT_DIRECTIONAL, + + //! Only used for counting the elements of this enum + ELT_COUNT +}; + +//! Names for light types +const c8* const LightTypeNames[] = +{ + "Point", + "Spot", + "Directional", + 0 +}; + +//! structure for holding data describing a dynamic point light. +/** Irrlicht supports point lights, spot lights, and directional lights. +*/ +struct SLight +{ + SLight() : AmbientColor(0.f,0.f,0.f), DiffuseColor(1.f,1.f,1.f), + SpecularColor(1.f,1.f,1.f), Attenuation(1.f,0.f,0.f), + OuterCone(45.f), InnerCone(0.f), Falloff(2.f), + Position(0.f,0.f,0.f), Direction(0.f,0.f,1.f), + Radius(100.f), Type(ELT_POINT), CastShadows(true) + {} + + //! Ambient color emitted by the light + SColorf AmbientColor; + + //! Diffuse color emitted by the light. + /** This is the primary color you want to set. */ + SColorf DiffuseColor; + + //! Specular color emitted by the light. + /** For details how to use specular highlights, see SMaterial::Shininess */ + SColorf SpecularColor; + + //! Attenuation factors (constant, linear, quadratic) + /** Changes the light strength fading over distance. + Can also be altered by setting the radius, Attenuation will change to + (0,1.f/radius,0). Can be overridden after radius was set. */ + core::vector3df Attenuation; + + //! The angle of the spot's outer cone. Ignored for other lights. + f32 OuterCone; + + //! The angle of the spot's inner cone. Ignored for other lights. + f32 InnerCone; + + //! The light strength's decrease between Outer and Inner cone. + f32 Falloff; + + //! Read-ONLY! Position of the light. + /** If Type is ELT_DIRECTIONAL, it is ignored. Changed via light scene node's position. */ + core::vector3df Position; + + //! Read-ONLY! Direction of the light. + /** If Type is ELT_POINT, it is ignored. Changed via light scene node's rotation. */ + core::vector3df Direction; + + //! Read-ONLY! Radius of light. Everything within this radius will be lighted. + f32 Radius; + + //! Read-ONLY! Type of the light. Default: ELT_POINT + E_LIGHT_TYPE Type; + + //! Read-ONLY! Does the light cast shadows? + bool CastShadows:1; +}; + +} // end namespace video +} // end namespace irr + +#endif + diff --git a/inc/SMaterial.h b/inc/SMaterial.h new file mode 100644 index 0000000..a1c3ff4 --- /dev/null +++ b/inc/SMaterial.h @@ -0,0 +1,685 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __S_MATERIAL_H_INCLUDED__ +#define __S_MATERIAL_H_INCLUDED__ + +#include "SColor.h" +#include "matrix4.h" +#include "irrArray.h" +#include "irrMath.h" +#include "EMaterialTypes.h" +#include "EMaterialFlags.h" +#include "SMaterialLayer.h" + +namespace irr +{ +namespace video +{ + class ITexture; + + //! Flag for EMT_ONETEXTURE_BLEND, ( BlendFactor ) BlendFunc = source * sourceFactor + dest * destFactor + enum E_BLEND_FACTOR + { + EBF_ZERO = 0, //!< src & dest (0, 0, 0, 0) + EBF_ONE, //!< src & dest (1, 1, 1, 1) + EBF_DST_COLOR, //!< src (destR, destG, destB, destA) + EBF_ONE_MINUS_DST_COLOR, //!< src (1-destR, 1-destG, 1-destB, 1-destA) + EBF_SRC_COLOR, //!< dest (srcR, srcG, srcB, srcA) + EBF_ONE_MINUS_SRC_COLOR, //!< dest (1-srcR, 1-srcG, 1-srcB, 1-srcA) + EBF_SRC_ALPHA, //!< src & dest (srcA, srcA, srcA, srcA) + EBF_ONE_MINUS_SRC_ALPHA, //!< src & dest (1-srcA, 1-srcA, 1-srcA, 1-srcA) + EBF_DST_ALPHA, //!< src & dest (destA, destA, destA, destA) + EBF_ONE_MINUS_DST_ALPHA, //!< src & dest (1-destA, 1-destA, 1-destA, 1-destA) + EBF_SRC_ALPHA_SATURATE //!< src (min(srcA, 1-destA), idem, ...) + }; + + //! Values defining the blend operation used when blend is enabled + enum E_BLEND_OPERATION + { + EBO_NONE = 0, //!< No blending happens + EBO_ADD, //!< Default blending adds the color values + EBO_SUBTRACT, //!< This mode subtracts the color values + EBO_REVSUBTRACT,//!< This modes subtracts destination from source + EBO_MIN, //!< Choose minimum value of each color channel + EBO_MAX, //!< Choose maximum value of each color channel + EBO_MIN_FACTOR, //!< Choose minimum value of each color channel after applying blend factors, not widely supported + EBO_MAX_FACTOR, //!< Choose maximum value of each color channel after applying blend factors, not widely supported + EBO_MIN_ALPHA, //!< Choose minimum value of each color channel based on alpha value, not widely supported + EBO_MAX_ALPHA //!< Choose maximum value of each color channel based on alpha value, not widely supported + }; + + //! MaterialTypeParam: e.g. DirectX: D3DTOP_MODULATE, D3DTOP_MODULATE2X, D3DTOP_MODULATE4X + enum E_MODULATE_FUNC + { + EMFN_MODULATE_1X = 1, + EMFN_MODULATE_2X = 2, + EMFN_MODULATE_4X = 4 + }; + + //! Comparison function, e.g. for depth buffer test + enum E_COMPARISON_FUNC + { + //! Test never succeeds, this equals disable + ECFN_NEVER=0, + //! <= test, default for e.g. depth test + ECFN_LESSEQUAL=1, + //! Exact equality + ECFN_EQUAL=2, + //! exclusive less comparison, i.e. < + ECFN_LESS, + //! Succeeds almost always, except for exact equality + ECFN_NOTEQUAL, + //! >= test + ECFN_GREATEREQUAL, + //! inverse of <= + ECFN_GREATER, + //! test succeeds always + ECFN_ALWAYS + }; + + //! Enum values for enabling/disabling color planes for rendering + enum E_COLOR_PLANE + { + //! No color enabled + ECP_NONE=0, + //! Alpha enabled + ECP_ALPHA=1, + //! Red enabled + ECP_RED=2, + //! Green enabled + ECP_GREEN=4, + //! Blue enabled + ECP_BLUE=8, + //! All colors, no alpha + ECP_RGB=14, + //! All planes enabled + ECP_ALL=15 + }; + + //! Source of the alpha value to take + /** This is currently only supported in EMT_ONETEXTURE_BLEND. You can use an + or'ed combination of values. Alpha values are modulated (multiplicated). */ + enum E_ALPHA_SOURCE + { + //! Use no alpha, somewhat redundant with other settings + EAS_NONE=0, + //! Use vertex color alpha + EAS_VERTEX_COLOR, + //! Use texture alpha channel + EAS_TEXTURE + }; + + //! EMT_ONETEXTURE_BLEND: pack srcFact, dstFact, Modulate and alpha source to MaterialTypeParam + /** alpha source can be an OR'ed combination of E_ALPHA_SOURCE values. */ + inline f32 pack_textureBlendFunc ( const E_BLEND_FACTOR srcFact, const E_BLEND_FACTOR dstFact, const E_MODULATE_FUNC modulate=EMFN_MODULATE_1X, const u32 alphaSource=EAS_TEXTURE ) + { + const u32 tmp = (alphaSource << 12) | (modulate << 8) | (srcFact << 4) | dstFact; + return FR(tmp); + } + + //! EMT_ONETEXTURE_BLEND: unpack srcFact & dstFact and Modulo to MaterialTypeParam + /** The fields don't use the full byte range, so we could pack even more... */ + inline void unpack_textureBlendFunc ( E_BLEND_FACTOR &srcFact, E_BLEND_FACTOR &dstFact, + E_MODULATE_FUNC &modulo, u32& alphaSource, const f32 param ) + { + const u32 state = IR(param); + alphaSource = (state & 0x0000F000) >> 12; + modulo = E_MODULATE_FUNC( ( state & 0x00000F00 ) >> 8 ); + srcFact = E_BLEND_FACTOR ( ( state & 0x000000F0 ) >> 4 ); + dstFact = E_BLEND_FACTOR ( ( state & 0x0000000F ) ); + } + + //! EMT_ONETEXTURE_BLEND: has BlendFactor Alphablending + inline bool textureBlendFunc_hasAlpha ( const E_BLEND_FACTOR factor ) + { + switch ( factor ) + { + case EBF_SRC_ALPHA: + case EBF_ONE_MINUS_SRC_ALPHA: + case EBF_DST_ALPHA: + case EBF_ONE_MINUS_DST_ALPHA: + case EBF_SRC_ALPHA_SATURATE: + return true; + default: + return false; + } + } + + + //! These flags are used to specify the anti-aliasing and smoothing modes + /** Techniques supported are multisampling, geometry smoothing, and alpha + to coverage. + Some drivers don't support a per-material setting of the anti-aliasing + modes. In those cases, FSAA/multisampling is defined by the device mode + chosen upon creation via irr::SIrrCreationParameters. + */ + enum E_ANTI_ALIASING_MODE + { + //! Use to turn off anti-aliasing for this material + EAAM_OFF=0, + //! Default anti-aliasing mode + EAAM_SIMPLE=1, + //! High-quality anti-aliasing, not always supported, automatically enables SIMPLE mode + EAAM_QUALITY=3, + //! Line smoothing + EAAM_LINE_SMOOTH=4, + //! point smoothing, often in software and slow, only with OpenGL + EAAM_POINT_SMOOTH=8, + //! All typical anti-alias and smooth modes + EAAM_FULL_BASIC=15, + //! Enhanced anti-aliasing for transparent materials + /** Usually used with EMT_TRANSPARENT_ALPHA_REF and multisampling. */ + EAAM_ALPHA_TO_COVERAGE=16 + }; + + //! These flags allow to define the interpretation of vertex color when lighting is enabled + /** Without lighting being enabled the vertex color is the only value defining the fragment color. + Once lighting is enabled, the four values for diffuse, ambient, emissive, and specular take over. + With these flags it is possible to define which lighting factor shall be defined by the vertex color + instead of the lighting factor which is the same for all faces of that material. + The default is to use vertex color for the diffuse value, another pretty common value is to use + vertex color for both diffuse and ambient factor. */ + enum E_COLOR_MATERIAL + { + //! Don't use vertex color for lighting + ECM_NONE=0, + //! Use vertex color for diffuse light, this is default + ECM_DIFFUSE, + //! Use vertex color for ambient light + ECM_AMBIENT, + //! Use vertex color for emissive light + ECM_EMISSIVE, + //! Use vertex color for specular light + ECM_SPECULAR, + //! Use vertex color for both diffuse and ambient light + ECM_DIFFUSE_AND_AMBIENT + }; + + //! Flags for the definition of the polygon offset feature + /** These flags define whether the offset should be into the screen, or towards the eye. */ + enum E_POLYGON_OFFSET + { + //! Push pixel towards the far plane, away from the eye + /** This is typically used for rendering inner areas. */ + EPO_BACK=0, + //! Pull pixels towards the camera. + /** This is typically used for polygons which should appear on top + of other elements, such as decals. */ + EPO_FRONT=1 + }; + + //! Names for polygon offset direction + const c8* const PolygonOffsetDirectionNames[] = + { + "Back", + "Front", + 0 + }; + + + //! Maximum number of texture an SMaterial can have. + const u32 MATERIAL_MAX_TEXTURES = _IRR_MATERIAL_MAX_TEXTURES_; + + //! Struct for holding parameters for a material renderer + class SMaterial + { + public: + //! Default constructor. Creates a solid, lit material with white colors + SMaterial() + : MaterialType(EMT_SOLID), AmbientColor(255,255,255,255), DiffuseColor(255,255,255,255), + EmissiveColor(0,0,0,0), SpecularColor(255,255,255,255), + Shininess(0.0f), MaterialTypeParam(0.0f), MaterialTypeParam2(0.0f), Thickness(1.0f), + ZBuffer(ECFN_LESSEQUAL), AntiAliasing(EAAM_SIMPLE), ColorMask(ECP_ALL), + ColorMaterial(ECM_DIFFUSE), BlendOperation(EBO_NONE), + PolygonOffsetFactor(0), PolygonOffsetDirection(EPO_FRONT), + Wireframe(false), PointCloud(false), GouraudShading(true), + Lighting(true), ZWriteEnable(true), BackfaceCulling(true), FrontfaceCulling(false), + FogEnable(false), NormalizeNormals(false), UseMipMaps(true) + { } + + //! Copy constructor + /** \param other Material to copy from. */ + SMaterial(const SMaterial& other) + { + // These pointers are checked during assignment + for (u32 i=0; igetMaterial(0).Shininess = 20.0f; + \endcode + + You can change the color of the highlights using + \code + sceneNode->getMaterial(0).SpecularColor.set(255,255,255,255); + \endcode + + The specular color of the dynamic lights + (SLight::SpecularColor) will influence the the highlight color + too, but they are set to a useful value by default when + creating the light scene node. Here is a simple example on how + to use specular highlights: + \code + // load and display mesh + scene::IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( + smgr->getMesh("data/faerie.md2")); + node->setMaterialTexture(0, driver->getTexture("data/Faerie2.pcx")); // set diffuse texture + node->setMaterialFlag(video::EMF_LIGHTING, true); // enable dynamic lighting + node->getMaterial(0).Shininess = 20.0f; // set size of specular highlights + + // add white light + scene::ILightSceneNode* light = smgr->addLightSceneNode(0, + core::vector3df(5,5,5), video::SColorf(1.0f, 1.0f, 1.0f)); + \endcode */ + f32 Shininess; + + //! Free parameter, dependent on the material type. + /** Mostly ignored, used for example in EMT_PARALLAX_MAP_SOLID + and EMT_TRANSPARENT_ALPHA_CHANNEL. */ + f32 MaterialTypeParam; + + //! Second free parameter, dependent on the material type. + /** Mostly ignored. */ + f32 MaterialTypeParam2; + + //! Thickness of non-3dimensional elements such as lines and points. + f32 Thickness; + + //! Is the ZBuffer enabled? Default: ECFN_LESSEQUAL + /** Values are from E_COMPARISON_FUNC. */ + u8 ZBuffer; + + //! Sets the antialiasing mode + /** Values are chosen from E_ANTI_ALIASING_MODE. Default is + EAAM_SIMPLE|EAAM_LINE_SMOOTH, i.e. simple multi-sample + anti-aliasing and lime smoothing is enabled. */ + u8 AntiAliasing; + + //! Defines the enabled color planes + /** Values are defined as or'ed values of the E_COLOR_PLANE enum. + Only enabled color planes will be rendered to the current render + target. Typical use is to disable all colors when rendering only to + depth or stencil buffer, or using Red and Green for Stereo rendering. */ + u8 ColorMask:4; + + //! Defines the interpretation of vertex color in the lighting equation + /** Values should be chosen from E_COLOR_MATERIAL. + When lighting is enabled, vertex color can be used instead of the + material values for light modulation. This allows to easily change e.g. the + diffuse light behavior of each face. The default, ECM_DIFFUSE, will result in + a very similar rendering as with lighting turned off, just with light shading. */ + u8 ColorMaterial:3; + + //! Store the blend operation of choice + /** Values to be chosen from E_BLEND_OPERATION. The actual way to use this value + is not yet determined, so ignore it for now. */ + E_BLEND_OPERATION BlendOperation:4; + + //! Factor specifying how far the polygon offset should be made + /** Specifying 0 disables the polygon offset. The direction is specified spearately. + The factor can be from 0 to 7.*/ + u8 PolygonOffsetFactor:3; + + //! Flag defining the direction the polygon offset is applied to. + /** Can be to front or to back, specififed by values from E_POLYGON_OFFSET. */ + E_POLYGON_OFFSET PolygonOffsetDirection:1; + + //! Draw as wireframe or filled triangles? Default: false + /** The user can access a material flag using + \code material.Wireframe=true \endcode + or \code material.setFlag(EMF_WIREFRAME, true); \endcode */ + bool Wireframe:1; + + //! Draw as point cloud or filled triangles? Default: false + bool PointCloud:1; + + //! Flat or Gouraud shading? Default: true + bool GouraudShading:1; + + //! Will this material be lighted? Default: true + bool Lighting:1; + + //! Is the zbuffer writeable or is it read-only. Default: true. + /** This flag is forced to false if the MaterialType is a + transparent type and the scene parameter + ALLOW_ZWRITE_ON_TRANSPARENT is not set. */ + bool ZWriteEnable:1; + + //! Is backface culling enabled? Default: true + bool BackfaceCulling:1; + + //! Is frontface culling enabled? Default: false + bool FrontfaceCulling:1; + + //! Is fog enabled? Default: false + bool FogEnable:1; + + //! Should normals be normalized? + /** Always use this if the mesh lit and scaled. Default: false */ + bool NormalizeNormals:1; + + //! Shall mipmaps be used if available + /** Sometimes, disabling mipmap usage can be useful. Default: true */ + bool UseMipMaps:1; + + //! Gets the texture transformation matrix for level i + /** \param i The desired level. Must not be larger than MATERIAL_MAX_TEXTURES. + \return Texture matrix for texture level i. */ + core::matrix4& getTextureMatrix(u32 i) + { + return TextureLayer[i].getTextureMatrix(); + } + + //! Gets the immutable texture transformation matrix for level i + /** \param i The desired level. + \return Texture matrix for texture level i, or identity matrix for levels larger than MATERIAL_MAX_TEXTURES. */ + const core::matrix4& getTextureMatrix(u32 i) const + { + if (i=MATERIAL_MAX_TEXTURES) + return; + TextureLayer[i].setTextureMatrix(mat); + } + + //! Gets the i-th texture + /** \param i The desired level. + \return Texture for texture level i, if defined, else 0. */ + ITexture* getTexture(u32 i) const + { + return i < MATERIAL_MAX_TEXTURES ? TextureLayer[i].Texture : 0; + } + + //! Sets the i-th texture + /** If i>=MATERIAL_MAX_TEXTURES this setting will be ignored. + \param i The desired level. + \param tex Texture for texture level i. */ + void setTexture(u32 i, ITexture* tex) + { + if (i>=MATERIAL_MAX_TEXTURES) + return; + TextureLayer[i].Texture = tex; + } + + //! Sets the Material flag to the given value + /** \param flag The flag to be set. + \param value The new value for the flag. */ + void setFlag(E_MATERIAL_FLAG flag, bool value) + { + switch (flag) + { + case EMF_WIREFRAME: + Wireframe = value; break; + case EMF_POINTCLOUD: + PointCloud = value; break; + case EMF_GOURAUD_SHADING: + GouraudShading = value; break; + case EMF_LIGHTING: + Lighting = value; break; + case EMF_ZBUFFER: + ZBuffer = value; break; + case EMF_ZWRITE_ENABLE: + ZWriteEnable = value; break; + case EMF_BACK_FACE_CULLING: + BackfaceCulling = value; break; + case EMF_FRONT_FACE_CULLING: + FrontfaceCulling = value; break; + case EMF_BILINEAR_FILTER: + { + for (u32 i=0; i MatrixAllocator; + + //! Texture Matrix + /** Do not access this element directly as the internal + ressource management has to cope with Null pointers etc. */ + core::matrix4* TextureMatrix; + }; + +} // end namespace video +} // end namespace irr + +#endif // __S_MATERIAL_LAYER_H_INCLUDED__ diff --git a/inc/SMesh.h b/inc/SMesh.h new file mode 100644 index 0000000..efac56e --- /dev/null +++ b/inc/SMesh.h @@ -0,0 +1,140 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __S_MESH_H_INCLUDED__ +#define __S_MESH_H_INCLUDED__ + +#include "IMesh.h" +#include "IMeshBuffer.h" +#include "aabbox3d.h" +#include "irrArray.h" + +namespace irr +{ +namespace scene +{ + //! Simple implementation of the IMesh interface. + struct SMesh : public IMesh + { + //! constructor + SMesh() + { + #ifdef _DEBUG + setDebugName("SMesh"); + #endif + } + + //! destructor + virtual ~SMesh() + { + // drop buffers + for (u32 i=0; idrop(); + } + + //! clean mesh + virtual void clear() + { + for (u32 i=0; idrop(); + MeshBuffers.clear(); + BoundingBox.reset ( 0.f, 0.f, 0.f ); + } + + + //! returns amount of mesh buffers. + virtual u32 getMeshBufferCount() const + { + return MeshBuffers.size(); + } + + //! returns pointer to a mesh buffer + virtual IMeshBuffer* getMeshBuffer(u32 nr) const + { + return MeshBuffers[nr]; + } + + //! returns a meshbuffer which fits a material + /** reverse search */ + virtual IMeshBuffer* getMeshBuffer( const video::SMaterial & material) const + { + for (s32 i = (s32)MeshBuffers.size()-1; i >= 0; --i) + { + if ( material == MeshBuffers[i]->getMaterial()) + return MeshBuffers[i]; + } + + return 0; + } + + //! returns an axis aligned bounding box + virtual const core::aabbox3d& getBoundingBox() const + { + return BoundingBox; + } + + //! set user axis aligned bounding box + virtual void setBoundingBox( const core::aabbox3df& box) + { + BoundingBox = box; + } + + //! recalculates the bounding box + void recalculateBoundingBox() + { + if (MeshBuffers.size()) + { + BoundingBox = MeshBuffers[0]->getBoundingBox(); + for (u32 i=1; igetBoundingBox()); + } + else + BoundingBox.reset(0.0f, 0.0f, 0.0f); + } + + //! adds a MeshBuffer + /** The bounding box is not updated automatically. */ + void addMeshBuffer(IMeshBuffer* buf) + { + if (buf) + { + buf->grab(); + MeshBuffers.push_back(buf); + } + } + + //! sets a flag of all contained materials to a new value + virtual void setMaterialFlag(video::E_MATERIAL_FLAG flag, bool newvalue) + { + for (u32 i=0; igetMaterial().setFlag(flag, newvalue); + } + + //! set the hardware mapping hint, for driver + virtual void setHardwareMappingHint( E_HARDWARE_MAPPING newMappingHint, E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX ) + { + for (u32 i=0; isetHardwareMappingHint(newMappingHint, buffer); + } + + //! flags the meshbuffer as changed, reloads hardware buffers + virtual void setDirty(E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX) + { + for (u32 i=0; isetDirty(buffer); + } + + //! The meshbuffers of this mesh + core::array MeshBuffers; + + //! The bounding box of this mesh + core::aabbox3d BoundingBox; + }; + + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/SMeshBuffer.h b/inc/SMeshBuffer.h new file mode 100644 index 0000000..2c3b7e2 --- /dev/null +++ b/inc/SMeshBuffer.h @@ -0,0 +1,7 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +// replaced by template +#include "CMeshBuffer.h" + diff --git a/inc/SMeshBufferLightMap.h b/inc/SMeshBufferLightMap.h new file mode 100644 index 0000000..2c3b7e2 --- /dev/null +++ b/inc/SMeshBufferLightMap.h @@ -0,0 +1,7 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +// replaced by template +#include "CMeshBuffer.h" + diff --git a/inc/SMeshBufferTangents.h b/inc/SMeshBufferTangents.h new file mode 100644 index 0000000..2c3b7e2 --- /dev/null +++ b/inc/SMeshBufferTangents.h @@ -0,0 +1,7 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +// replaced by template +#include "CMeshBuffer.h" + diff --git a/inc/SParticle.h b/inc/SParticle.h new file mode 100644 index 0000000..c69c483 --- /dev/null +++ b/inc/SParticle.h @@ -0,0 +1,56 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __S_PARTICLE_H_INCLUDED__ +#define __S_PARTICLE_H_INCLUDED__ + +#include "vector3d.h" +#include "dimension2d.h" +#include "SColor.h" + +namespace irr +{ +namespace scene +{ + //! Struct for holding particle data + struct SParticle + { + //! Position of the particle + core::vector3df pos; + + //! Direction and speed of the particle + core::vector3df vector; + + //! Start life time of the particle + u32 startTime; + + //! End life time of the particle + u32 endTime; + + //! Current color of the particle + video::SColor color; + + //! Original color of the particle. + /** That's the color of the particle it had when it was emitted. */ + video::SColor startColor; + + //! Original direction and speed of the particle. + /** The direction and speed the particle had when it was emitted. */ + core::vector3df startVector; + + //! Scale of the particle. + /** The current scale of the particle. */ + core::dimension2df size; + + //! Original scale of the particle. + /** The scale of the particle when it was emitted. */ + core::dimension2df startSize; + }; + + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/SSharedMeshBuffer.h b/inc/SSharedMeshBuffer.h new file mode 100644 index 0000000..016b796 --- /dev/null +++ b/inc/SSharedMeshBuffer.h @@ -0,0 +1,242 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __S_SHARED_MESH_BUFFER_H_INCLUDED__ +#define __S_SHARED_MESH_BUFFER_H_INCLUDED__ + +#include "irrArray.h" +#include "IMeshBuffer.h" + +namespace irr +{ +namespace scene +{ + //! Implementation of the IMeshBuffer interface with shared vertex list + struct SSharedMeshBuffer : public IMeshBuffer + { + //! constructor + SSharedMeshBuffer() : IMeshBuffer(), Vertices(0), ChangedID_Vertex(1), ChangedID_Index(1), MappingHintVertex(EHM_NEVER), MappingHintIndex(EHM_NEVER) + { + #ifdef _DEBUG + setDebugName("SSharedMeshBuffer"); + #endif + } + + //! constructor + SSharedMeshBuffer(core::array *vertices) : IMeshBuffer(), Vertices(vertices) + { + #ifdef _DEBUG + setDebugName("SSharedMeshBuffer"); + #endif + } + + //! returns the material of this meshbuffer + virtual const video::SMaterial& getMaterial() const + { + return Material; + } + + //! returns the material of this meshbuffer + virtual video::SMaterial& getMaterial() + { + return Material; + } + + //! returns pointer to vertices + virtual const void* getVertices() const + { + if (Vertices) + return Vertices->const_pointer(); + else + return 0; + } + + //! returns pointer to vertices + virtual void* getVertices() + { + if (Vertices) + return Vertices->pointer(); + else + return 0; + } + + //! returns amount of vertices + virtual u32 getVertexCount() const + { + if (Vertices) + return Vertices->size(); + else + return 0; + } + + //! returns pointer to Indices + virtual const u16* getIndices() const + { + return Indices.const_pointer(); + } + + //! returns pointer to Indices + virtual u16* getIndices() + { + return Indices.pointer(); + } + + //! returns amount of indices + virtual u32 getIndexCount() const + { + return Indices.size(); + } + + //! Get type of index data which is stored in this meshbuffer. + virtual video::E_INDEX_TYPE getIndexType() const + { + return video::EIT_16BIT; + } + + //! returns an axis aligned bounding box + virtual const core::aabbox3d& getBoundingBox() const + { + return BoundingBox; + } + + //! set user axis aligned bounding box + virtual void setBoundingBox( const core::aabbox3df& box) + { + BoundingBox = box; + } + + //! returns which type of vertex data is stored. + virtual video::E_VERTEX_TYPE getVertexType() const + { + return video::EVT_STANDARD; + } + + //! recalculates the bounding box. should be called if the mesh changed. + virtual void recalculateBoundingBox() + { + if (!Vertices || Vertices->empty() || Indices.empty()) + BoundingBox.reset(0,0,0); + else + { + BoundingBox.reset((*Vertices)[Indices[0]].Pos); + for (u32 i=1; i *Vertices; + + //! Array of Indices + core::array Indices; + + //! ID used for hardware buffer management + u32 ChangedID_Vertex; + + //! ID used for hardware buffer management + u32 ChangedID_Index; + + //! Bounding box + core::aabbox3df BoundingBox; + + //! hardware mapping hint + E_HARDWARE_MAPPING MappingHintVertex; + E_HARDWARE_MAPPING MappingHintIndex; + }; + + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/SSkinMeshBuffer.h b/inc/SSkinMeshBuffer.h new file mode 100644 index 0000000..d47de19 --- /dev/null +++ b/inc/SSkinMeshBuffer.h @@ -0,0 +1,404 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_SKIN_MESH_BUFFER_H_INCLUDED__ +#define __I_SKIN_MESH_BUFFER_H_INCLUDED__ + +#include "IMeshBuffer.h" +#include "S3DVertex.h" + + +namespace irr +{ +namespace scene +{ + + +//! A mesh buffer able to choose between S3DVertex2TCoords, S3DVertex and S3DVertexTangents at runtime +struct SSkinMeshBuffer : public IMeshBuffer +{ + //! Default constructor + SSkinMeshBuffer(video::E_VERTEX_TYPE vt=video::EVT_STANDARD) : + ChangedID_Vertex(1), ChangedID_Index(1), VertexType(vt), + MappingHint_Vertex(EHM_NEVER), MappingHint_Index(EHM_NEVER), + BoundingBoxNeedsRecalculated(true) + { + #ifdef _DEBUG + setDebugName("SSkinMeshBuffer"); + #endif + } + + //! Get Material of this buffer. + virtual const video::SMaterial& getMaterial() const + { + return Material; + } + + //! Get Material of this buffer. + virtual video::SMaterial& getMaterial() + { + return Material; + } + + //! Get standard vertex at given index + virtual video::S3DVertex *getVertex(u32 index) + { + switch (VertexType) + { + case video::EVT_2TCOORDS: + return (video::S3DVertex*)&Vertices_2TCoords[index]; + case video::EVT_TANGENTS: + return (video::S3DVertex*)&Vertices_Tangents[index]; + default: + return &Vertices_Standard[index]; + } + } + + //! Get pointer to vertex array + virtual const void* getVertices() const + { + switch (VertexType) + { + case video::EVT_2TCOORDS: + return Vertices_2TCoords.const_pointer(); + case video::EVT_TANGENTS: + return Vertices_Tangents.const_pointer(); + default: + return Vertices_Standard.const_pointer(); + } + } + + //! Get pointer to vertex array + virtual void* getVertices() + { + switch (VertexType) + { + case video::EVT_2TCOORDS: + return Vertices_2TCoords.pointer(); + case video::EVT_TANGENTS: + return Vertices_Tangents.pointer(); + default: + return Vertices_Standard.pointer(); + } + } + + //! Get vertex count + virtual u32 getVertexCount() const + { + switch (VertexType) + { + case video::EVT_2TCOORDS: + return Vertices_2TCoords.size(); + case video::EVT_TANGENTS: + return Vertices_Tangents.size(); + default: + return Vertices_Standard.size(); + } + } + + //! Get type of index data which is stored in this meshbuffer. + /** \return Index type of this buffer. */ + virtual video::E_INDEX_TYPE getIndexType() const + { + return video::EIT_16BIT; + } + + //! Get pointer to index array + virtual const u16* getIndices() const + { + return Indices.const_pointer(); + } + + //! Get pointer to index array + virtual u16* getIndices() + { + return Indices.pointer(); + } + + //! Get index count + virtual u32 getIndexCount() const + { + return Indices.size(); + } + + //! Get bounding box + virtual const core::aabbox3d& getBoundingBox() const + { + return BoundingBox; + } + + //! Set bounding box + virtual void setBoundingBox( const core::aabbox3df& box) + { + BoundingBox = box; + } + + //! Recalculate bounding box + virtual void recalculateBoundingBox() + { + if(!BoundingBoxNeedsRecalculated) + return; + + BoundingBoxNeedsRecalculated = false; + + switch (VertexType) + { + case video::EVT_STANDARD: + { + if (Vertices_Standard.empty()) + BoundingBox.reset(0,0,0); + else + { + BoundingBox.reset(Vertices_Standard[0].Pos); + for (u32 i=1; i Vertices_Tangents; + core::array Vertices_2TCoords; + core::array Vertices_Standard; + core::array Indices; + + u32 ChangedID_Vertex; + u32 ChangedID_Index; + + //ISkinnedMesh::SJoint *AttachedJoint; + core::matrix4 Transformation; + + video::SMaterial Material; + video::E_VERTEX_TYPE VertexType; + + core::aabbox3d BoundingBox; + + // hardware mapping hint + E_HARDWARE_MAPPING MappingHint_Vertex:3; + E_HARDWARE_MAPPING MappingHint_Index:3; + + bool BoundingBoxNeedsRecalculated:1; +}; + + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/SVertexIndex.h b/inc/SVertexIndex.h new file mode 100644 index 0000000..bc775ec --- /dev/null +++ b/inc/SVertexIndex.h @@ -0,0 +1,79 @@ +// Copyright (C) 2008-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __S_VERTEX_INDEX_H_INCLUDED__ +#define __S_VERTEX_INDEX_H_INCLUDED__ + +#include "irrTypes.h" + + +namespace irr +{ +namespace video +{ +enum E_INDEX_TYPE +{ + EIT_16BIT = 0, + EIT_32BIT +}; + + +/* +//! vertex index used by the Irrlicht engine. +template +struct SSpecificVertexIndex +{ + T Index; + + //! default constructor + SSpecificVertexIndex() {} + + //! constructor + SSpecificVertexIndex(u32 _index) :Index(_index) {} + + bool operator==(const SSpecificVertexIndex& other) const + { + return (Index == other.Index); + } + + bool operator!=(const SSpecificVertexIndex& other) const + { + return (Index != other.Index); + } + + bool operator<(const SSpecificVertexIndex& other) const + { + return (Index < other.Index); + } + + SSpecificVertexIndex operator+(const u32& other) const + { + return SSpecificVertexIndex(Index + other); + } + + operator const u32() const + { + return (const u32)Index; + } + + E_INDEX_TYPE getType() const + { + if (sizeof(T)==sizeof(u16)) + return video::EIT_16BIT; + return video::EIT_32BIT; + } + +}; + +//typedef SSpecificVertexIndex SVertexIndex; + +typedef u32 SVertexIndex; +*/ + + +} // end namespace video +} // end namespace irr + +#endif + diff --git a/inc/SVertexManipulator.h b/inc/SVertexManipulator.h new file mode 100644 index 0000000..592544b --- /dev/null +++ b/inc/SVertexManipulator.h @@ -0,0 +1,292 @@ +// Copyright (C) 2009-2012 Christian Stehno +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __S_VERTEX_MANIPULATOR_H_INCLUDED__ +#define __S_VERTEX_MANIPULATOR_H_INCLUDED__ + +#include "S3DVertex.h" +#include "SColor.h" + +namespace irr +{ +namespace scene +{ + + class IMesh; + class IMeshBuffer; + struct SMesh; + + //! Interface for vertex manipulators. + /** You should derive your manipulator from this class if it shall be called for every vertex, getting as parameter just the vertex. + */ + struct IVertexManipulator + { + }; + //! Vertex manipulator to set color to a fixed color for all vertices + class SVertexColorSetManipulator : public IVertexManipulator + { + public: + SVertexColorSetManipulator(video::SColor color) : Color(color) {} + void operator()(video::S3DVertex& vertex) const + { + vertex.Color=Color; + } + private: + video::SColor Color; + }; + //! Vertex manipulator to set the alpha value of the vertex color to a fixed value + class SVertexColorSetAlphaManipulator : public IVertexManipulator + { + public: + SVertexColorSetAlphaManipulator(u32 alpha) : Alpha(alpha) {} + void operator()(video::S3DVertex& vertex) const + { + vertex.Color.setAlpha(Alpha); + } + private: + u32 Alpha; + }; + //! Vertex manipulator which invertes the RGB values + class SVertexColorInvertManipulator : public IVertexManipulator + { + public: + void operator()(video::S3DVertex& vertex) const + { + vertex.Color.setRed(255-vertex.Color.getRed()); + vertex.Color.setGreen(255-vertex.Color.getGreen()); + vertex.Color.setBlue(255-vertex.Color.getBlue()); + } + }; + //! Vertex manipulator to set vertex color to one of two values depending on a given threshold + /** If average of the color value is >Threshold the High color is chosen, else Low. */ + class SVertexColorThresholdManipulator : public IVertexManipulator + { + public: + SVertexColorThresholdManipulator(u8 threshold, video::SColor low, + video::SColor high) : Threshold(threshold), Low(low), High(high) {} + void operator()(video::S3DVertex& vertex) const + { + vertex.Color = ((u8)vertex.Color.getAverage()>Threshold)?High:Low; + } + private: + u8 Threshold; + video::SColor Low; + video::SColor High; + }; + //! Vertex manipulator which adjusts the brightness by the given amount + /** A positive value increases brightness, a negative value darkens the colors. */ + class SVertexColorBrightnessManipulator : public IVertexManipulator + { + public: + SVertexColorBrightnessManipulator(s32 amount) : Amount(amount) {} + void operator()(video::S3DVertex& vertex) const + { + vertex.Color.setRed(core::clamp(vertex.Color.getRed()+Amount, 0u, 255u)); + vertex.Color.setGreen(core::clamp(vertex.Color.getGreen()+Amount, 0u, 255u)); + vertex.Color.setBlue(core::clamp(vertex.Color.getBlue()+Amount, 0u, 255u)); + } + private: + s32 Amount; + }; + //! Vertex manipulator which adjusts the contrast by the given factor + /** Factors over 1 increase contrast, below 1 reduce it. */ + class SVertexColorContrastManipulator : public IVertexManipulator + { + public: + SVertexColorContrastManipulator(f32 factor) : Factor(factor) {} + void operator()(video::S3DVertex& vertex) const + { + vertex.Color.setRed(core::clamp(core::round32((vertex.Color.getRed()-128)*Factor)+128, 0, 255)); + vertex.Color.setGreen(core::clamp(core::round32((vertex.Color.getGreen()-128)*Factor)+128, 0, 255)); + vertex.Color.setBlue(core::clamp(core::round32((vertex.Color.getBlue()-128)*Factor)+128, 0, 255)); + } + private: + f32 Factor; + }; + //! Vertex manipulator which adjusts the contrast by the given factor and brightness by a signed amount. + /** Factors over 1 increase contrast, below 1 reduce it. + A positive amount increases brightness, a negative one darkens the colors. */ + class SVertexColorContrastBrightnessManipulator : public IVertexManipulator + { + public: + SVertexColorContrastBrightnessManipulator(f32 factor, s32 amount) : Factor(factor), Amount(amount+128) {} + void operator()(video::S3DVertex& vertex) const + { + vertex.Color.setRed(core::clamp(core::round32((vertex.Color.getRed()-128)*Factor)+Amount, 0, 255)); + vertex.Color.setGreen(core::clamp(core::round32((vertex.Color.getGreen()-128)*Factor)+Amount, 0, 255)); + vertex.Color.setBlue(core::clamp(core::round32((vertex.Color.getBlue()-128)*Factor)+Amount, 0, 255)); + } + private: + f32 Factor; + s32 Amount; + }; + //! Vertex manipulator which adjusts the brightness by a gamma operation + /** A value over one increases brightness, one below darkens the colors. */ + class SVertexColorGammaManipulator : public IVertexManipulator + { + public: + SVertexColorGammaManipulator(f32 gamma) : Gamma(1.f) + { + if (gamma != 0.f) + Gamma = 1.f/gamma; + } + void operator()(video::S3DVertex& vertex) const + { + vertex.Color.setRed(core::clamp(core::round32(powf((f32)(vertex.Color.getRed()),Gamma)), 0, 255)); + vertex.Color.setGreen(core::clamp(core::round32(powf((f32)(vertex.Color.getGreen()),Gamma)), 0, 255)); + vertex.Color.setBlue(core::clamp(core::round32(powf((f32)(vertex.Color.getBlue()),Gamma)), 0, 255)); + } + private: + f32 Gamma; + }; + //! Vertex manipulator which scales the color values + /** Can e.g be used for white balance, factor would be 255.f/brightest color. */ + class SVertexColorScaleManipulator : public IVertexManipulator + { + public: + SVertexColorScaleManipulator(f32 factor) : Factor(factor) {} + void operator()(video::S3DVertex& vertex) const + { + vertex.Color.setRed(core::clamp(core::round32(vertex.Color.getRed()*Factor), 0, 255)); + vertex.Color.setGreen(core::clamp(core::round32(vertex.Color.getGreen()*Factor), 0, 255)); + vertex.Color.setBlue(core::clamp(core::round32(vertex.Color.getBlue()*Factor), 0, 255)); + } + private: + f32 Factor; + }; + //! Vertex manipulator which desaturates the color values + /** Uses the lightness value of the color. */ + class SVertexColorDesaturateToLightnessManipulator : public IVertexManipulator + { + public: + void operator()(video::S3DVertex& vertex) const + { + vertex.Color=core::round32(vertex.Color.getLightness()); + } + }; + //! Vertex manipulator which desaturates the color values + /** Uses the average value of the color. */ + class SVertexColorDesaturateToAverageManipulator : public IVertexManipulator + { + public: + void operator()(video::S3DVertex& vertex) const + { + vertex.Color=vertex.Color.getAverage(); + } + }; + //! Vertex manipulator which desaturates the color values + /** Uses the luminance value of the color. */ + class SVertexColorDesaturateToLuminanceManipulator : public IVertexManipulator + { + public: + void operator()(video::S3DVertex& vertex) const + { + vertex.Color=core::round32(vertex.Color.getLuminance()); + } + }; + //! Vertex manipulator which interpolates the color values + /** Uses linear interpolation. */ + class SVertexColorInterpolateLinearManipulator : public IVertexManipulator + { + public: + SVertexColorInterpolateLinearManipulator(video::SColor color, f32 factor) : + Color(color), Factor(factor) {} + void operator()(video::S3DVertex& vertex) const + { + vertex.Color=vertex.Color.getInterpolated(Color, Factor); + } + private: + video::SColor Color; + f32 Factor; + }; + //! Vertex manipulator which interpolates the color values + /** Uses linear interpolation. */ + class SVertexColorInterpolateQuadraticManipulator : public IVertexManipulator + { + public: + SVertexColorInterpolateQuadraticManipulator(video::SColor color1, video::SColor color2, f32 factor) : + Color1(color1), Color2(color2), Factor(factor) {} + void operator()(video::S3DVertex& vertex) const + { + vertex.Color=vertex.Color.getInterpolated_quadratic(Color1, Color2, Factor); + } + private: + video::SColor Color1; + video::SColor Color2; + f32 Factor; + }; + + //! Vertex manipulator which scales the position of the vertex + class SVertexPositionScaleManipulator : public IVertexManipulator + { + public: + SVertexPositionScaleManipulator(const core::vector3df& factor) : Factor(factor) {} + template + void operator()(VType& vertex) const + { + vertex.Pos *= Factor; + } + private: + core::vector3df Factor; + }; + + //! Vertex manipulator which scales the position of the vertex along the normals + /** This can look more pleasing than the usual Scale operator, but + depends on the mesh geometry. + */ + class SVertexPositionScaleAlongNormalsManipulator : public IVertexManipulator + { + public: + SVertexPositionScaleAlongNormalsManipulator(const core::vector3df& factor) : Factor(factor) {} + template + void operator()(VType& vertex) const + { + vertex.Pos += vertex.Normal*Factor; + } + private: + core::vector3df Factor; + }; + + //! Vertex manipulator which transforms the position of the vertex + class SVertexPositionTransformManipulator : public IVertexManipulator + { + public: + SVertexPositionTransformManipulator(const core::matrix4& m) : Transformation(m) {} + template + void operator()(VType& vertex) const + { + Transformation.transformVect(vertex.Pos); + } + private: + core::matrix4 Transformation; + }; + + //! Vertex manipulator which scales the TCoords of the vertex + class SVertexTCoordsScaleManipulator : public IVertexManipulator + { + public: + SVertexTCoordsScaleManipulator(const core::vector2df& factor, u32 uvSet=1) : Factor(factor), UVSet(uvSet) {} + void operator()(video::S3DVertex2TCoords& vertex) const + { + if (1==UVSet) + vertex.TCoords *= Factor; + else if (2==UVSet) + vertex.TCoords2 *= Factor; + } + template + void operator()(VType& vertex) const + { + if (1==UVSet) + vertex.TCoords *= Factor; + } + private: + core::vector2df Factor; + u32 UVSet; + }; + +} // end namespace scene +} // end namespace irr + + +#endif diff --git a/inc/SViewFrustum.h b/inc/SViewFrustum.h new file mode 100644 index 0000000..d2b5b9a --- /dev/null +++ b/inc/SViewFrustum.h @@ -0,0 +1,370 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __S_VIEW_FRUSTUM_H_INCLUDED__ +#define __S_VIEW_FRUSTUM_H_INCLUDED__ + +#include "plane3d.h" +#include "vector3d.h" +#include "line3d.h" +#include "aabbox3d.h" +#include "matrix4.h" +#include "IVideoDriver.h" + +namespace irr +{ +namespace scene +{ + + //! Defines the view frustum. That's the space visible by the camera. + /** The view frustum is enclosed by 6 planes. These six planes share + eight points. A bounding box around these eight points is also stored in + this structure. + */ + struct SViewFrustum + { + enum VFPLANES + { + //! Far plane of the frustum. That is the plane farest away from the eye. + VF_FAR_PLANE = 0, + //! Near plane of the frustum. That is the plane nearest to the eye. + VF_NEAR_PLANE, + //! Left plane of the frustum. + VF_LEFT_PLANE, + //! Right plane of the frustum. + VF_RIGHT_PLANE, + //! Bottom plane of the frustum. + VF_BOTTOM_PLANE, + //! Top plane of the frustum. + VF_TOP_PLANE, + + //! Amount of planes enclosing the view frustum. Should be 6. + VF_PLANE_COUNT + }; + + + //! Default Constructor + SViewFrustum() {} + + //! Copy Constructor + SViewFrustum(const SViewFrustum& other); + + //! This constructor creates a view frustum based on a projection and/or view matrix. + SViewFrustum(const core::matrix4& mat); + + //! This constructor creates a view frustum based on a projection and/or view matrix. + inline void setFrom(const core::matrix4& mat); + + //! transforms the frustum by the matrix + /** \param mat: Matrix by which the view frustum is transformed.*/ + void transform(const core::matrix4& mat); + + //! returns the point which is on the far left upper corner inside the the view frustum. + core::vector3df getFarLeftUp() const; + + //! returns the point which is on the far left bottom corner inside the the view frustum. + core::vector3df getFarLeftDown() const; + + //! returns the point which is on the far right top corner inside the the view frustum. + core::vector3df getFarRightUp() const; + + //! returns the point which is on the far right bottom corner inside the the view frustum. + core::vector3df getFarRightDown() const; + + //! returns the point which is on the near left upper corner inside the the view frustum. + core::vector3df getNearLeftUp() const; + + //! returns the point which is on the near left bottom corner inside the the view frustum. + core::vector3df getNearLeftDown() const; + + //! returns the point which is on the near right top corner inside the the view frustum. + core::vector3df getNearRightUp() const; + + //! returns the point which is on the near right bottom corner inside the the view frustum. + core::vector3df getNearRightDown() const; + + //! returns a bounding box enclosing the whole view frustum + const core::aabbox3d &getBoundingBox() const; + + //! recalculates the bounding box member based on the planes + inline void recalculateBoundingBox(); + + //! get the given state's matrix based on frustum E_TRANSFORMATION_STATE + core::matrix4& getTransform( video::E_TRANSFORMATION_STATE state); + + //! get the given state's matrix based on frustum E_TRANSFORMATION_STATE + const core::matrix4& getTransform( video::E_TRANSFORMATION_STATE state) const; + + //! clips a line to the view frustum. + /** \return True if the line was clipped, false if not */ + bool clipLine(core::line3d& line) const; + + //! the position of the camera + core::vector3df cameraPosition; + + //! all planes enclosing the view frustum. + core::plane3d planes[VF_PLANE_COUNT]; + + //! bounding box around the view frustum + core::aabbox3d boundingBox; + + private: + //! Hold a copy of important transform matrices + enum E_TRANSFORMATION_STATE_FRUSTUM + { + ETS_VIEW = 0, + ETS_PROJECTION = 1, + ETS_COUNT_FRUSTUM + }; + + //! Hold a copy of important transform matrices + core::matrix4 Matrices[ETS_COUNT_FRUSTUM]; + }; + + + /*! + Copy constructor ViewFrustum + */ + inline SViewFrustum::SViewFrustum(const SViewFrustum& other) + { + cameraPosition=other.cameraPosition; + boundingBox=other.boundingBox; + + u32 i; + for (i=0; i &SViewFrustum::getBoundingBox() const + { + return boundingBox; + } + + inline void SViewFrustum::recalculateBoundingBox() + { + boundingBox.reset ( cameraPosition ); + + boundingBox.addInternalPoint(getFarLeftUp()); + boundingBox.addInternalPoint(getFarRightUp()); + boundingBox.addInternalPoint(getFarLeftDown()); + boundingBox.addInternalPoint(getFarRightDown()); + } + + //! This constructor creates a view frustum based on a projection + //! and/or view matrix. + inline void SViewFrustum::setFrom(const core::matrix4& mat) + { + // left clipping plane + planes[VF_LEFT_PLANE].Normal.X = mat[3 ] + mat[0]; + planes[VF_LEFT_PLANE].Normal.Y = mat[7 ] + mat[4]; + planes[VF_LEFT_PLANE].Normal.Z = mat[11] + mat[8]; + planes[VF_LEFT_PLANE].D = mat[15] + mat[12]; + + // right clipping plane + planes[VF_RIGHT_PLANE].Normal.X = mat[3 ] - mat[0]; + planes[VF_RIGHT_PLANE].Normal.Y = mat[7 ] - mat[4]; + planes[VF_RIGHT_PLANE].Normal.Z = mat[11] - mat[8]; + planes[VF_RIGHT_PLANE].D = mat[15] - mat[12]; + + // top clipping plane + planes[VF_TOP_PLANE].Normal.X = mat[3 ] - mat[1]; + planes[VF_TOP_PLANE].Normal.Y = mat[7 ] - mat[5]; + planes[VF_TOP_PLANE].Normal.Z = mat[11] - mat[9]; + planes[VF_TOP_PLANE].D = mat[15] - mat[13]; + + // bottom clipping plane + planes[VF_BOTTOM_PLANE].Normal.X = mat[3 ] + mat[1]; + planes[VF_BOTTOM_PLANE].Normal.Y = mat[7 ] + mat[5]; + planes[VF_BOTTOM_PLANE].Normal.Z = mat[11] + mat[9]; + planes[VF_BOTTOM_PLANE].D = mat[15] + mat[13]; + + // far clipping plane + planes[VF_FAR_PLANE].Normal.X = mat[3 ] - mat[2]; + planes[VF_FAR_PLANE].Normal.Y = mat[7 ] - mat[6]; + planes[VF_FAR_PLANE].Normal.Z = mat[11] - mat[10]; + planes[VF_FAR_PLANE].D = mat[15] - mat[14]; + + // near clipping plane + planes[VF_NEAR_PLANE].Normal.X = mat[2]; + planes[VF_NEAR_PLANE].Normal.Y = mat[6]; + planes[VF_NEAR_PLANE].Normal.Z = mat[10]; + planes[VF_NEAR_PLANE].D = mat[14]; + + // normalize normals + u32 i; + for ( i=0; i != VF_PLANE_COUNT; ++i) + { + const f32 len = -core::reciprocal_squareroot( + planes[i].Normal.getLengthSQ()); + planes[i].Normal *= len; + planes[i].D *= len; + } + + // make bounding box + recalculateBoundingBox(); + } + + /*! + View Frustum depends on Projection & View Matrix + */ + inline core::matrix4& SViewFrustum::getTransform(video::E_TRANSFORMATION_STATE state ) + { + u32 index = 0; + switch ( state ) + { + case video::ETS_PROJECTION: + index = SViewFrustum::ETS_PROJECTION; break; + case video::ETS_VIEW: + index = SViewFrustum::ETS_VIEW; break; + default: + break; + } + return Matrices [ index ]; + } + + /*! + View Frustum depends on Projection & View Matrix + */ + inline const core::matrix4& SViewFrustum::getTransform(video::E_TRANSFORMATION_STATE state ) const + { + u32 index = 0; + switch ( state ) + { + case video::ETS_PROJECTION: + index = SViewFrustum::ETS_PROJECTION; break; + case video::ETS_VIEW: + index = SViewFrustum::ETS_VIEW; break; + default: + break; + } + return Matrices [ index ]; + } + + //! Clips a line to the frustum + inline bool SViewFrustum::clipLine(core::line3d& line) const + { + bool wasClipped = false; + for (u32 i=0; i < VF_PLANE_COUNT; ++i) + { + if (planes[i].classifyPointRelation(line.start) == core::ISREL3D_FRONT) + { + line.start = line.start.getInterpolated(line.end, + planes[i].getKnownIntersectionWithLine(line.start, line.end)); + wasClipped = true; + } + if (planes[i].classifyPointRelation(line.end) == core::ISREL3D_FRONT) + { + line.end = line.start.getInterpolated(line.end, + planes[i].getKnownIntersectionWithLine(line.start, line.end)); + wasClipped = true; + } + } + return wasClipped; + } + + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/SceneParameters.h b/inc/SceneParameters.h new file mode 100644 index 0000000..827ae42 --- /dev/null +++ b/inc/SceneParameters.h @@ -0,0 +1,182 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __I_SCENE_PARAMETERS_H_INCLUDED__ +#define __I_SCENE_PARAMETERS_H_INCLUDED__ + +/*! \file SceneParameters.h + \brief Header file containing all scene parameters for modifying mesh loading etc. + + This file includes all parameter names which can be set using ISceneManager::getParameters() + to modify the behavior of plugins and mesh loaders. +*/ + +namespace irr +{ +namespace scene +{ + //! Name of the parameter for changing how Irrlicht handles the ZWrite flag for transparent (blending) materials + /** The default behavior in Irrlicht is to disable writing to the + z-buffer for all really transparent, i.e. blending materials. This + avoids problems with intersecting faces, but can also break renderings. + If transparent materials should use the SMaterial flag for ZWriteEnable + just as other material types use this attribute. + Use it like this: + \code + SceneManager->getParameters()->setAttribute(scene::ALLOW_ZWRITE_ON_TRANSPARENT, true); + \endcode + **/ + const c8* const ALLOW_ZWRITE_ON_TRANSPARENT = "Allow_ZWrite_On_Transparent"; + + //! Name of the parameter for changing the texture path of the built-in csm loader. + /** Use it like this: + \code + SceneManager->getParameters()->setAttribute(scene::CSM_TEXTURE_PATH, "path/to/your/textures"); + \endcode + **/ + const c8* const CSM_TEXTURE_PATH = "CSM_TexturePath"; + + //! Name of the parameter for changing the texture path of the built-in lmts loader. + /** Use it like this: + \code + SceneManager->getParameters()->setAttribute(scene::LMTS_TEXTURE_PATH, "path/to/your/textures"); + \endcode + **/ + const c8* const LMTS_TEXTURE_PATH = "LMTS_TexturePath"; + + //! Name of the parameter for changing the texture path of the built-in my3d loader. + /** Use it like this: + \code + SceneManager->getParameters()->setAttribute(scene::MY3D_TEXTURE_PATH, "path/to/your/textures"); + \endcode + **/ + const c8* const MY3D_TEXTURE_PATH = "MY3D_TexturePath"; + + //! Name of the parameter specifying the COLLADA mesh loading mode + /** + Specifies if the COLLADA loader should create instances of the models, lights and + cameras when loading COLLADA meshes. By default, this is set to false. If this is + set to true, the ISceneManager::getMesh() method will only return a pointer to a + dummy mesh and create instances of all meshes and lights and cameras in the collada + file by itself. Example: + \code + SceneManager->getParameters()->setAttribute(scene::COLLADA_CREATE_SCENE_INSTANCES, true); + \endcode + */ + const c8* const COLLADA_CREATE_SCENE_INSTANCES = "COLLADA_CreateSceneInstances"; + + //! Name of the parameter for changing the texture path of the built-in DMF loader. + /** This path is prefixed to the file names defined in the Deled file when loading + textures. This allows to alter the paths for a specific project setting. + Use it like this: + \code + SceneManager->getStringParameters()->setAttribute(scene::DMF_TEXTURE_PATH, "path/to/your/textures"); + \endcode + **/ + const c8* const DMF_TEXTURE_PATH = "DMF_TexturePath"; + + //! Name of the parameter for preserving DMF textures dir structure with built-in DMF loader. + /** If this parameter is set to true, the texture directory defined in the Deled file + is ignored, and only the texture name is used to find the proper file. Otherwise, the + texture path is also used, which allows to use a nicer media layout. + Use it like this: + \code + //this way you won't use this setting (default) + SceneManager->getParameters()->setAttribute(scene::DMF_IGNORE_MATERIALS_DIRS, false); + \endcode + \code + //this way you'll use this setting + SceneManager->getParameters()->setAttribute(scene::DMF_IGNORE_MATERIALS_DIRS, true); + \endcode + **/ + const c8* const DMF_IGNORE_MATERIALS_DIRS = "DMF_IgnoreMaterialsDir"; + + //! Name of the parameter for setting reference value of alpha in transparent materials. + /** Use it like this: + \code + //this way you'll set alpha ref to 0.1 + SceneManager->getParameters()->setAttribute(scene::DMF_ALPHA_CHANNEL_REF, 0.1); + \endcode + **/ + const c8* const DMF_ALPHA_CHANNEL_REF = "DMF_AlphaRef"; + + //! Name of the parameter for choose to flip or not tga files. + /** Use it like this: + \code + //this way you'll choose to flip alpha textures + SceneManager->getParameters()->setAttribute(scene::DMF_FLIP_ALPHA_TEXTURES, true); + \endcode + **/ + const c8* const DMF_FLIP_ALPHA_TEXTURES = "DMF_FlipAlpha"; + + + //! Name of the parameter for changing the texture path of the built-in obj loader. + /** Use it like this: + \code + SceneManager->getParameters()->setAttribute(scene::OBJ_TEXTURE_PATH, "path/to/your/textures"); + \endcode + **/ + const c8* const OBJ_TEXTURE_PATH = "OBJ_TexturePath"; + + //! Flag to avoid loading group structures in .obj files + /** Use it like this: + \code + SceneManager->getParameters()->setAttribute(scene::OBJ_LOADER_IGNORE_GROUPS, true); + \endcode + **/ + const c8* const OBJ_LOADER_IGNORE_GROUPS = "OBJ_IgnoreGroups"; + + + //! Flag to avoid loading material .mtl file for .obj files + /** Use it like this: + \code + SceneManager->getParameters()->setAttribute(scene::OBJ_LOADER_IGNORE_MATERIAL_FILES, true); + \endcode + **/ + const c8* const OBJ_LOADER_IGNORE_MATERIAL_FILES = "OBJ_IgnoreMaterialFiles"; + + + //! Flag to ignore the b3d file's mipmapping flag + /** Instead Irrlicht's texture creation flag is used. Use it like this: + \code + SceneManager->getParameters()->setAttribute(scene::B3D_LOADER_IGNORE_MIPMAP_FLAG, true); + \endcode + **/ + const c8* const B3D_LOADER_IGNORE_MIPMAP_FLAG = "B3D_IgnoreMipmapFlag"; + + //! Name of the parameter for changing the texture path of the built-in b3d loader. + /** Use it like this: + \code + SceneManager->getParameters()->setAttribute(scene::B3D_TEXTURE_PATH, "path/to/your/textures"); + \endcode + **/ + const c8* const B3D_TEXTURE_PATH = "B3D_TexturePath"; + + //! Flag set as parameter when the scene manager is used as editor + /** In this way special animators like deletion animators can be stopped from + deleting scene nodes for example */ + const c8* const IRR_SCENE_MANAGER_IS_EDITOR = "IRR_Editor"; + + //! Name of the parameter for setting the length of debug normals. + /** Use it like this: + \code + SceneManager->getParameters()->setAttribute(scene::DEBUG_NORMAL_LENGTH, 1.5f); + \endcode + **/ + const c8* const DEBUG_NORMAL_LENGTH = "DEBUG_Normal_Length"; + + //! Name of the parameter for setting the color of debug normals. + /** Use it like this: + \code + SceneManager->getParameters()->setAttributeAsColor(scene::DEBUG_NORMAL_COLOR, video::SColor(255, 255, 255, 255)); + \endcode + **/ + const c8* const DEBUG_NORMAL_COLOR = "DEBUG_Normal_Color"; + + +} // end namespace scene +} // end namespace irr + +#endif + diff --git a/inc/aabbox3d.h b/inc/aabbox3d.h new file mode 100644 index 0000000..ae4e3ae --- /dev/null +++ b/inc/aabbox3d.h @@ -0,0 +1,332 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __IRR_AABBOX_3D_H_INCLUDED__ +#define __IRR_AABBOX_3D_H_INCLUDED__ + +#include "irrMath.h" +#include "plane3d.h" +#include "line3d.h" + +namespace irr +{ +namespace core +{ + +//! Axis aligned bounding box in 3d dimensional space. +/** Has some useful methods used with occlusion culling or clipping. +*/ +template +class aabbox3d +{ + public: + + //! Default Constructor. + aabbox3d(): MinEdge(-1,-1,-1), MaxEdge(1,1,1) {} + //! Constructor with min edge and max edge. + aabbox3d(const vector3d& min, const vector3d& max): MinEdge(min), MaxEdge(max) {} + //! Constructor with only one point. + aabbox3d(const vector3d& init): MinEdge(init), MaxEdge(init) {} + //! Constructor with min edge and max edge as single values, not vectors. + aabbox3d(T minx, T miny, T minz, T maxx, T maxy, T maxz): MinEdge(minx, miny, minz), MaxEdge(maxx, maxy, maxz) {} + + // operators + //! Equality operator + /** \param other box to compare with. + \return True if both boxes are equal, else false. */ + inline bool operator==(const aabbox3d& other) const { return (MinEdge == other.MinEdge && other.MaxEdge == MaxEdge);} + //! Inequality operator + /** \param other box to compare with. + \return True if both boxes are different, else false. */ + inline bool operator!=(const aabbox3d& other) const { return !(MinEdge == other.MinEdge && other.MaxEdge == MaxEdge);} + + // functions + + //! Resets the bounding box to a one-point box. + /** \param x X coord of the point. + \param y Y coord of the point. + \param z Z coord of the point. */ + void reset(T x, T y, T z) + { + MaxEdge.set(x,y,z); + MinEdge = MaxEdge; + } + + //! Resets the bounding box. + /** \param initValue New box to set this one to. */ + void reset(const aabbox3d& initValue) + { + *this = initValue; + } + + //! Resets the bounding box to a one-point box. + /** \param initValue New point. */ + void reset(const vector3d& initValue) + { + MaxEdge = initValue; + MinEdge = initValue; + } + + //! Adds a point to the bounding box + /** The box grows bigger, if point was outside of the box. + \param p: Point to add into the box. */ + void addInternalPoint(const vector3d& p) + { + addInternalPoint(p.X, p.Y, p.Z); + } + + //! Adds another bounding box + /** The box grows bigger, if the new box was outside of the box. + \param b: Other bounding box to add into this box. */ + void addInternalBox(const aabbox3d& b) + { + addInternalPoint(b.MaxEdge); + addInternalPoint(b.MinEdge); + } + + //! Adds a point to the bounding box + /** The box grows bigger, if point is outside of the box. + \param x X coordinate of the point to add to this box. + \param y Y coordinate of the point to add to this box. + \param z Z coordinate of the point to add to this box. */ + void addInternalPoint(T x, T y, T z) + { + if (x>MaxEdge.X) MaxEdge.X = x; + if (y>MaxEdge.Y) MaxEdge.Y = y; + if (z>MaxEdge.Z) MaxEdge.Z = z; + + if (x getCenter() const + { + return (MinEdge + MaxEdge) / 2; + } + + //! Get extent of the box (maximal distance of two points in the box) + /** \return Extent of the bounding box. */ + vector3d getExtent() const + { + return MaxEdge - MinEdge; + } + + //! Check if the box is empty. + /** This means that there is no space between the min and max edge. + \return True if box is empty, else false. */ + bool isEmpty() const + { + return MinEdge.equals ( MaxEdge ); + } + + //! Get the volume enclosed by the box in cubed units + T getVolume() const + { + const vector3d e = getExtent(); + return e.X * e.Y * e.Z; + } + + //! Get the surface area of the box in squared units + T getArea() const + { + const vector3d e = getExtent(); + return 2*(e.X*e.Y + e.X*e.Z + e.Y*e.Z); + } + + //! Stores all 8 edges of the box into an array + /** \param edges: Pointer to array of 8 edges. */ + void getEdges(vector3d *edges) const + { + const core::vector3d middle = getCenter(); + const core::vector3d diag = middle - MaxEdge; + + /* + Edges are stored in this way: + Hey, am I an ascii artist, or what? :) niko. + /3--------/7 + / | / | + / | / | + 1---------5 | + | /2- - -|- -6 + | / | / + |/ | / + 0---------4/ + */ + + edges[0].set(middle.X + diag.X, middle.Y + diag.Y, middle.Z + diag.Z); + edges[1].set(middle.X + diag.X, middle.Y - diag.Y, middle.Z + diag.Z); + edges[2].set(middle.X + diag.X, middle.Y + diag.Y, middle.Z - diag.Z); + edges[3].set(middle.X + diag.X, middle.Y - diag.Y, middle.Z - diag.Z); + edges[4].set(middle.X - diag.X, middle.Y + diag.Y, middle.Z + diag.Z); + edges[5].set(middle.X - diag.X, middle.Y - diag.Y, middle.Z + diag.Z); + edges[6].set(middle.X - diag.X, middle.Y + diag.Y, middle.Z - diag.Z); + edges[7].set(middle.X - diag.X, middle.Y - diag.Y, middle.Z - diag.Z); + } + + //! Repairs the box. + /** Necessary if for example MinEdge and MaxEdge are swapped. */ + void repair() + { + T t; + + if (MinEdge.X > MaxEdge.X) + { t=MinEdge.X; MinEdge.X = MaxEdge.X; MaxEdge.X=t; } + if (MinEdge.Y > MaxEdge.Y) + { t=MinEdge.Y; MinEdge.Y = MaxEdge.Y; MaxEdge.Y=t; } + if (MinEdge.Z > MaxEdge.Z) + { t=MinEdge.Z; MinEdge.Z = MaxEdge.Z; MaxEdge.Z=t; } + } + + //! Calculates a new interpolated bounding box. + /** d=0 returns other, d=1 returns this, all other values blend between + the two boxes. + \param other Other box to interpolate between + \param d Value between 0.0f and 1.0f. + \return Interpolated box. */ + aabbox3d getInterpolated(const aabbox3d& other, f32 d) const + { + f32 inv = 1.0f - d; + return aabbox3d((other.MinEdge*inv) + (MinEdge*d), + (other.MaxEdge*inv) + (MaxEdge*d)); + } + + //! Determines if a point is within this box. + /** Border is included (IS part of the box)! + \param p: Point to check. + \return True if the point is within the box and false if not */ + bool isPointInside(const vector3d& p) const + { + return (p.X >= MinEdge.X && p.X <= MaxEdge.X && + p.Y >= MinEdge.Y && p.Y <= MaxEdge.Y && + p.Z >= MinEdge.Z && p.Z <= MaxEdge.Z); + } + + //! Determines if a point is within this box and not its borders. + /** Border is excluded (NOT part of the box)! + \param p: Point to check. + \return True if the point is within the box and false if not. */ + bool isPointTotalInside(const vector3d& p) const + { + return (p.X > MinEdge.X && p.X < MaxEdge.X && + p.Y > MinEdge.Y && p.Y < MaxEdge.Y && + p.Z > MinEdge.Z && p.Z < MaxEdge.Z); + } + + //! Check if this box is completely inside the 'other' box. + /** \param other: Other box to check against. + \return True if this box is completly inside the other box, + otherwise false. */ + bool isFullInside(const aabbox3d& other) const + { + return (MinEdge.X >= other.MinEdge.X && MinEdge.Y >= other.MinEdge.Y && MinEdge.Z >= other.MinEdge.Z && + MaxEdge.X <= other.MaxEdge.X && MaxEdge.Y <= other.MaxEdge.Y && MaxEdge.Z <= other.MaxEdge.Z); + } + + //! Determines if the axis-aligned box intersects with another axis-aligned box. + /** \param other: Other box to check a intersection with. + \return True if there is an intersection with the other box, + otherwise false. */ + bool intersectsWithBox(const aabbox3d& other) const + { + return (MinEdge.X <= other.MaxEdge.X && MinEdge.Y <= other.MaxEdge.Y && MinEdge.Z <= other.MaxEdge.Z && + MaxEdge.X >= other.MinEdge.X && MaxEdge.Y >= other.MinEdge.Y && MaxEdge.Z >= other.MinEdge.Z); + } + + //! Tests if the box intersects with a line + /** \param line: Line to test intersection with. + \return True if there is an intersection , else false. */ + bool intersectsWithLine(const line3d& line) const + { + return intersectsWithLine(line.getMiddle(), line.getVector().normalize(), + (T)(line.getLength() * 0.5)); + } + + //! Tests if the box intersects with a line + /** \param linemiddle Center of the line. + \param linevect Vector of the line. + \param halflength Half length of the line. + \return True if there is an intersection, else false. */ + bool intersectsWithLine(const vector3d& linemiddle, + const vector3d& linevect, T halflength) const + { + const vector3d e = getExtent() * (T)0.5; + const vector3d t = getCenter() - linemiddle; + + if ((fabs(t.X) > e.X + halflength * fabs(linevect.X)) || + (fabs(t.Y) > e.Y + halflength * fabs(linevect.Y)) || + (fabs(t.Z) > e.Z + halflength * fabs(linevect.Z)) ) + return false; + + T r = e.Y * (T)fabs(linevect.Z) + e.Z * (T)fabs(linevect.Y); + if (fabs(t.Y*linevect.Z - t.Z*linevect.Y) > r ) + return false; + + r = e.X * (T)fabs(linevect.Z) + e.Z * (T)fabs(linevect.X); + if (fabs(t.Z*linevect.X - t.X*linevect.Z) > r ) + return false; + + r = e.X * (T)fabs(linevect.Y) + e.Y * (T)fabs(linevect.X); + if (fabs(t.X*linevect.Y - t.Y*linevect.X) > r) + return false; + + return true; + } + + //! Classifies a relation with a plane. + /** \param plane Plane to classify relation to. + \return Returns ISREL3D_FRONT if the box is in front of the plane, + ISREL3D_BACK if the box is behind the plane, and + ISREL3D_CLIPPED if it is on both sides of the plane. */ + EIntersectionRelation3D classifyPlaneRelation(const plane3d& plane) const + { + vector3d nearPoint(MaxEdge); + vector3d farPoint(MinEdge); + + if (plane.Normal.X > (T)0) + { + nearPoint.X = MinEdge.X; + farPoint.X = MaxEdge.X; + } + + if (plane.Normal.Y > (T)0) + { + nearPoint.Y = MinEdge.Y; + farPoint.Y = MaxEdge.Y; + } + + if (plane.Normal.Z > (T)0) + { + nearPoint.Z = MinEdge.Z; + farPoint.Z = MaxEdge.Z; + } + + if (plane.Normal.dotProduct(nearPoint) + plane.D > (T)0) + return ISREL3D_FRONT; + + if (plane.Normal.dotProduct(farPoint) + plane.D > (T)0) + return ISREL3D_CLIPPED; + + return ISREL3D_BACK; + } + + //! The near edge + vector3d MinEdge; + + //! The far edge + vector3d MaxEdge; +}; + + //! Typedef for a f32 3d bounding box. + typedef aabbox3d aabbox3df; + //! Typedef for an integer 3d bounding box. + typedef aabbox3d aabbox3di; + +} // end namespace core +} // end namespace irr + +#endif + diff --git a/inc/coreutil.h b/inc/coreutil.h new file mode 100644 index 0000000..eaf0097 --- /dev/null +++ b/inc/coreutil.h @@ -0,0 +1,188 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __IRR_CORE_UTIL_H_INCLUDED__ +#define __IRR_CORE_UTIL_H_INCLUDED__ + +#include "irrString.h" +#include "path.h" + +namespace irr +{ +namespace core +{ + +/*! \file coreutil.h + \brief File containing useful basic utility functions +*/ + +// ----------- some basic quite often used string functions ----------------- + +//! search if a filename has a proper extension +inline s32 isFileExtension ( const io::path& filename, + const io::path& ext0, + const io::path& ext1, + const io::path& ext2) +{ + s32 extPos = filename.findLast ( '.' ); + if ( extPos < 0 ) + return 0; + + extPos += 1; + if ( filename.equals_substring_ignore_case ( ext0, extPos ) ) return 1; + if ( filename.equals_substring_ignore_case ( ext1, extPos ) ) return 2; + if ( filename.equals_substring_ignore_case ( ext2, extPos ) ) return 3; + return 0; +} + +//! search if a filename has a proper extension +inline bool hasFileExtension ( const io::path& filename, + const io::path& ext0, + const io::path& ext1 = "", + const io::path& ext2 = "") +{ + return isFileExtension ( filename, ext0, ext1, ext2 ) > 0; +} + +//! cut the filename extension from a source file path and store it in a dest file path +inline io::path& cutFilenameExtension ( io::path &dest, const io::path &source ) +{ + s32 endPos = source.findLast ( '.' ); + dest = source.subString ( 0, endPos < 0 ? source.size () : endPos ); + return dest; +} + +//! get the filename extension from a file path +inline io::path& getFileNameExtension ( io::path &dest, const io::path &source ) +{ + s32 endPos = source.findLast ( '.' ); + if ( endPos < 0 ) + dest = ""; + else + dest = source.subString ( endPos, source.size () ); + return dest; +} + +//! delete path from filename +inline io::path& deletePathFromFilename(io::path& filename) +{ + // delete path from filename + const fschar_t* s = filename.c_str(); + const fschar_t* p = s + filename.size(); + + // search for path separator or beginning + while ( *p != '/' && *p != '\\' && p != s ) + p--; + + if ( p != s ) + { + ++p; + filename = p; + } + return filename; +} + +//! trim paths +inline io::path& deletePathFromPath(io::path& filename, s32 pathCount) +{ + // delete path from filename + s32 i = filename.size(); + + // search for path separator or beginning + while ( i>=0 ) + { + if ( filename[i] == '/' || filename[i] == '\\' ) + { + if ( --pathCount <= 0 ) + break; + } + --i; + } + + if ( i>0 ) + { + filename [ i + 1 ] = 0; + filename.validate(); + } + else + filename=""; + return filename; +} + +//! looks if file is in the same directory of path. returns offset of directory. +//! 0 means in same directory. 1 means file is direct child of path +inline s32 isInSameDirectory ( const io::path& path, const io::path& file ) +{ + s32 subA = 0; + s32 subB = 0; + s32 pos; + + if ( path.size() && !path.equalsn ( file, path.size() ) ) + return -1; + + pos = 0; + while ( (pos = path.findNext ( '/', pos )) >= 0 ) + { + subA += 1; + pos += 1; + } + + pos = 0; + while ( (pos = file.findNext ( '/', pos )) >= 0 ) + { + subB += 1; + pos += 1; + } + + return subB - subA; +} + +// splits a path into components +static inline void splitFilename(const io::path &name, io::path* path=0, + io::path* filename=0, io::path* extension=0, bool make_lower=false) +{ + s32 i = name.size(); + s32 extpos = i; + + // search for path separator or beginning + while ( i >= 0 ) + { + if ( name[i] == '.' ) + { + extpos = i; + if ( extension ) + *extension = name.subString ( extpos + 1, name.size() - (extpos + 1), make_lower ); + } + else + if ( name[i] == '/' || name[i] == '\\' ) + { + if ( filename ) + *filename = name.subString ( i + 1, extpos - (i + 1), make_lower ); + if ( path ) + { + *path = name.subString ( 0, i + 1, make_lower ); + path->replace ( '\\', '/' ); + } + return; + } + i -= 1; + } + if ( filename ) + *filename = name.subString ( 0, extpos, make_lower ); +} + + +//! some standard function ( to remove dependencies ) +#undef isdigit +#undef isspace +#undef isupper +inline s32 isdigit(s32 c) { return c >= '0' && c <= '9'; } +inline s32 isspace(s32 c) { return c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v'; } +inline s32 isupper(s32 c) { return c >= 'A' && c <= 'Z'; } + + +} // end namespace core +} // end namespace irr + +#endif diff --git a/inc/dimension2d.h b/inc/dimension2d.h new file mode 100644 index 0000000..c9d0652 --- /dev/null +++ b/inc/dimension2d.h @@ -0,0 +1,224 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __IRR_DIMENSION2D_H_INCLUDED__ +#define __IRR_DIMENSION2D_H_INCLUDED__ + +#include "irrTypes.h" +#include "irrMath.h" // for irr::core::equals() + +namespace irr +{ +namespace core +{ + template + class vector2d; + + //! Specifies a 2 dimensional size. + template + class dimension2d + { + public: + //! Default constructor for empty dimension + dimension2d() : Width(0), Height(0) {} + //! Constructor with width and height + dimension2d(const T& width, const T& height) + : Width(width), Height(height) {} + + dimension2d(const vector2d& other); // Defined in vector2d.h + + //! Use this constructor only where you are sure that the conversion is valid. + template + explicit dimension2d(const dimension2d& other) : + Width((T)other.Width), Height((T)other.Height) { } + + template + dimension2d& operator=(const dimension2d& other) + { + Width = (T) other.Width; + Height = (T) other.Height; + return *this; + } + + + //! Equality operator + bool operator==(const dimension2d& other) const + { + return core::equals(Width, other.Width) && + core::equals(Height, other.Height); + } + + //! Inequality operator + bool operator!=(const dimension2d& other) const + { + return ! (*this == other); + } + + bool operator==(const vector2d& other) const; // Defined in vector2d.h + + bool operator!=(const vector2d& other) const + { + return !(*this == other); + } + + //! Set to new values + dimension2d& set(const T& width, const T& height) + { + Width = width; + Height = height; + return *this; + } + + //! Divide width and height by scalar + dimension2d& operator/=(const T& scale) + { + Width /= scale; + Height /= scale; + return *this; + } + + //! Divide width and height by scalar + dimension2d operator/(const T& scale) const + { + return dimension2d(Width/scale, Height/scale); + } + + //! Multiply width and height by scalar + dimension2d& operator*=(const T& scale) + { + Width *= scale; + Height *= scale; + return *this; + } + + //! Multiply width and height by scalar + dimension2d operator*(const T& scale) const + { + return dimension2d(Width*scale, Height*scale); + } + + //! Add another dimension to this one. + dimension2d& operator+=(const dimension2d& other) + { + Width += other.Width; + Height += other.Height; + return *this; + } + + //! Add two dimensions + dimension2d operator+(const dimension2d& other) const + { + return dimension2d(Width+other.Width, Height+other.Height); + } + + //! Subtract a dimension from this one + dimension2d& operator-=(const dimension2d& other) + { + Width -= other.Width; + Height -= other.Height; + return *this; + } + + //! Subtract one dimension from another + dimension2d operator-(const dimension2d& other) const + { + return dimension2d(Width-other.Width, Height-other.Height); + } + + //! Get area + T getArea() const + { + return Width*Height; + } + + //! Get the optimal size according to some properties + /** This is a function often used for texture dimension + calculations. The function returns the next larger or + smaller dimension which is a power-of-two dimension + (2^n,2^m) and/or square (Width=Height). + \param requirePowerOfTwo Forces the result to use only + powers of two as values. + \param requireSquare Makes width==height in the result + \param larger Choose whether the result is larger or + smaller than the current dimension. If one dimension + need not be changed it is kept with any value of larger. + \param maxValue Maximum texturesize. if value > 0 size is + clamped to maxValue + \return The optimal dimension under the given + constraints. */ + dimension2d getOptimalSize( + bool requirePowerOfTwo=true, + bool requireSquare=false, + bool larger=true, + u32 maxValue = 0) const + { + u32 i=1; + u32 j=1; + if (requirePowerOfTwo) + { + while (i<(u32)Width) + i<<=1; + if (!larger && i!=1 && i!=(u32)Width) + i>>=1; + while (j<(u32)Height) + j<<=1; + if (!larger && j!=1 && j!=(u32)Height) + j>>=1; + } + else + { + i=(u32)Width; + j=(u32)Height; + } + + if (requireSquare) + { + if ((larger && (i>j)) || (!larger && (i 0 && i > maxValue) + i = maxValue; + + if ( maxValue > 0 && j > maxValue) + j = maxValue; + + return dimension2d((T)i,(T)j); + } + + //! Get the interpolated dimension + /** \param other Other dimension to interpolate with. + \param d Value between 0.0f and 1.0f. + \return Interpolated dimension. */ + dimension2d getInterpolated(const dimension2d& other, f32 d) const + { + f32 inv = (1.0f - d); + return dimension2d( (T)(other.Width*inv + Width*d), (T)(other.Height*inv + Height*d)); + } + + + //! Width of the dimension. + T Width; + //! Height of the dimension. + T Height; + }; + + //! Typedef for an f32 dimension. + typedef dimension2d dimension2df; + //! Typedef for an unsigned integer dimension. + typedef dimension2d dimension2du; + + //! Typedef for an integer dimension. + /** There are few cases where negative dimensions make sense. Please consider using + dimension2du instead. */ + typedef dimension2d dimension2di; + + +} // end namespace core +} // end namespace irr + +#endif + diff --git a/inc/driverChoice.h b/inc/driverChoice.h new file mode 100644 index 0000000..8f17c38 --- /dev/null +++ b/inc/driverChoice.h @@ -0,0 +1,45 @@ +// Copyright (C) 2009-2012 Christian Stehno +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __E_DRIVER_CHOICE_H_INCLUDED__ +#define __E_DRIVER_CHOICE_H_INCLUDED__ + +#include +#include +#include "EDriverTypes.h" +#include "irrTypes.h" +#include "IrrlichtDevice.h" + +namespace irr +{ + +//! ask user for driver +static irr::video::E_DRIVER_TYPE driverChoiceConsole(bool allDrivers=true) +{ + const char* const names[] = {"NullDriver","Software Renderer","Burning's Video","Direct3D 8.1","Direct3D 9.0c","OpenGL 1.x/2.x/3.x"}; + printf("Please select the driver you want:\n"); + irr::u32 i=0; + for (i=irr::video::EDT_COUNT; i>0; --i) + { + if (allDrivers || (irr::IrrlichtDevice::isDriverSupported(irr::video::E_DRIVER_TYPE(i-1)))) + printf(" (%c) %s\n", 'a'+irr::video::EDT_COUNT-i, names[i-1]); + } + + char c; + std::cin >> c; + c = irr::video::EDT_COUNT+'a'-c; + + for (i=irr::video::EDT_COUNT; i>0; --i) + { + if (!(allDrivers || (irr::IrrlichtDevice::isDriverSupported(irr::video::E_DRIVER_TYPE(i-1))))) + --c; + if ((char)i==c) + return irr::video::E_DRIVER_TYPE(i-1); + } + return irr::video::EDT_COUNT; +} + +} // end namespace irr + +#endif diff --git a/inc/fast_atof.h b/inc/fast_atof.h new file mode 100644 index 0000000..d11f7b4 --- /dev/null +++ b/inc/fast_atof.h @@ -0,0 +1,364 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine" and the "irrXML" project. +// For conditions of distribution and use, see copyright notice in irrlicht.h and irrXML.h + +#ifndef __FAST_ATOF_H_INCLUDED__ +#define __FAST_ATOF_H_INCLUDED__ + +#include "irrMath.h" +#include "irrString.h" + +namespace irr +{ +namespace core +{ + //! Selection of characters which count as decimal point in fast_atof + // TODO: This should probably also be used in irr::core::string, but the float-to-string code + // used there has to be rewritten first. + IRRLICHT_API extern irr::core::stringc LOCALE_DECIMAL_POINTS; + +// we write [17] here instead of [] to work around a swig bug +const float fast_atof_table[17] = { + 0.f, + 0.1f, + 0.01f, + 0.001f, + 0.0001f, + 0.00001f, + 0.000001f, + 0.0000001f, + 0.00000001f, + 0.000000001f, + 0.0000000001f, + 0.00000000001f, + 0.000000000001f, + 0.0000000000001f, + 0.00000000000001f, + 0.000000000000001f, + 0.0000000000000001f +}; + +//! Convert a simple string of base 10 digits into an unsigned 32 bit integer. +/** \param[in] in: The string of digits to convert. No leading chars are + allowed, only digits 0 to 9. Parsing stops at the first non-digit. + \param[out] out: (optional) If provided, it will be set to point at the + first character not used in the calculation. + \return The unsigned integer value of the digits. If the string specifies + too many digits to encode in an u32 then INT_MAX will be returned. +*/ +inline u32 strtoul10(const char* in, const char** out=0) +{ + if (!in) + { + if (out) + *out = in; + return 0; + } + + bool overflow=false; + u32 unsignedValue = 0; + while ( ( *in >= '0') && ( *in <= '9' )) + { + const u32 tmp = ( unsignedValue * 10 ) + ( *in - '0' ); + if (tmp (u32)INT_MAX) + { + if (negative) + return (s32)INT_MIN; + else + return (s32)INT_MAX; + } + else + { + if (negative) + return -((s32)unsignedValue); + else + return (s32)unsignedValue; + } +} + +//! Convert a hex-encoded character to an unsigned integer. +/** \param[in] in The digit to convert. Only digits 0 to 9 and chars A-F,a-f + will be considered. + \return The unsigned integer value of the digit. 0xffffffff if the input is + not hex +*/ +inline u32 ctoul16(char in) +{ + if (in >= '0' && in <= '9') + return in - '0'; + else if (in >= 'a' && in <= 'f') + return 10u + in - 'a'; + else if (in >= 'A' && in <= 'F') + return 10u + in - 'A'; + else + return 0xffffffff; +} + +//! Convert a simple string of base 16 digits into an unsigned 32 bit integer. +/** \param[in] in: The string of digits to convert. No leading chars are + allowed, only digits 0 to 9 and chars A-F,a-f are allowed. Parsing stops + at the first illegal char. + \param[out] out: (optional) If provided, it will be set to point at the + first character not used in the calculation. + \return The unsigned integer value of the digits. If the string specifies + too many digits to encode in an u32 then INT_MAX will be returned. +*/ +inline u32 strtoul16(const char* in, const char** out=0) +{ + if (!in) + { + if (out) + *out = in; + return 0; + } + + bool overflow=false; + u32 unsignedValue = 0; + while (true) + { + u32 tmp = 0; + if ((*in >= '0') && (*in <= '9')) + tmp = (unsignedValue << 4u) + (*in - '0'); + else if ((*in >= 'A') && (*in <= 'F')) + tmp = (unsignedValue << 4u) + (*in - 'A') + 10; + else if ((*in >= 'a') && (*in <= 'f')) + tmp = (unsignedValue << 4u) + (*in - 'a') + 10; + else + break; + if (tmp= '0') && (*in <= '7')) + tmp = (unsignedValue << 3u) + (*in - '0'); + else + break; + if (tmp= '0') && ( *in <= '9' ) ) + { + // If it looks like we're going to overflow, bail out + // now and start using floating point. + if (intValue >= MAX_SAFE_U32_VALUE) + break; + + intValue = (intValue * 10) + (*in - '0'); + ++in; + } + + f32 floatValue = (f32)intValue; + + // If there are any digits left to parse, then we need to use + // floating point arithmetic from here. + while ( ( *in >= '0') && ( *in <= '9' ) ) + { + floatValue = (floatValue * 10.f) + (f32)(*in - '0'); + ++in; + if (floatValue > FLT_MAX) // Just give up. + break; + } + + if (out) + *out = in; + + return floatValue; +} + +//! Provides a fast function for converting a string into a float. +/** This is not guaranteed to be as accurate as atof(), but is + approximately 6 to 8 times as fast. + \param[in] in The string to convert. + \param[out] result The resultant float will be written here. + \return Pointer to the first character in the string that wasn't used + to create the float value. +*/ +inline const char* fast_atof_move(const char* in, f32& result) +{ + // Please run the regression test when making any modifications to this function. + + result = 0.f; + if (!in) + return 0; + + const bool negative = ('-' == *in); + if (negative || ('+'==*in)) + ++in; + + f32 value = strtof10(in, &in); + + if ( LOCALE_DECIMAL_POINTS.findFirst(*in) >= 0 ) + { + const char* afterDecimal = ++in; + const f32 decimal = strtof10(in, &afterDecimal); + value += decimal * fast_atof_table[afterDecimal - in]; + in = afterDecimal; + } + + if ('e' == *in || 'E' == *in) + { + ++in; + // Assume that the exponent is a whole number. + // strtol10() will deal with both + and - signs, + // but calculate as f32 to prevent overflow at FLT_MAX + value *= powf(10.f, (f32)strtol10(in, &in)); + } + + result = negative?-value:value; + return in; +} + +//! Convert a string to a floating point number +/** \param floatAsString The string to convert. + \param out Optional pointer to the first character in the string that + wasn't used to create the float value. + \result Float value parsed from the input string +*/ +inline float fast_atof(const char* floatAsString, const char** out=0) +{ + float ret; + if (out) + *out=fast_atof_move(floatAsString, ret); + else + fast_atof_move(floatAsString, ret); + return ret; +} + +} // end namespace core +} // end namespace irr + +#endif + diff --git a/inc/heapsort.h b/inc/heapsort.h new file mode 100644 index 0000000..a2e2c38 --- /dev/null +++ b/inc/heapsort.h @@ -0,0 +1,70 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __IRR_HEAPSORT_H_INCLUDED__ +#define __IRR_HEAPSORT_H_INCLUDED__ + +#include "irrTypes.h" + +namespace irr +{ +namespace core +{ + +//! Sinks an element into the heap. +template +inline void heapsink(T*array, s32 element, s32 max) +{ + while ((element<<1) < max) // there is a left child + { + s32 j = (element<<1); + + if (j+1 < max && array[j] < array[j+1]) + j = j+1; // take right child + + if (array[element] < array[j]) + { + T t = array[j]; // swap elements + array[j] = array[element]; + array[element] = t; + element = j; + } + else + return; + } +} + + +//! Sorts an array with size 'size' using heapsort. +template +inline void heapsort(T* array_, s32 size) +{ + // for heapsink we pretent this is not c++, where + // arrays start with index 0. So we decrease the array pointer, + // the maximum always +2 and the element always +1 + + T* virtualArray = array_ - 1; + s32 virtualSize = size + 2; + s32 i; + + // build heap + + for (i=((size-1)/2); i>=0; --i) + heapsink(virtualArray, i+1, virtualSize-1); + + // sort array, leave out the last element (0) + for (i=size-1; i>0; --i) + { + T t = array_[0]; + array_[0] = array_[i]; + array_[i] = t; + heapsink(virtualArray, 1, i + 1); + } +} + +} // end namespace core +} // end namespace irr + +#endif + diff --git a/inc/irrAllocator.h b/inc/irrAllocator.h new file mode 100644 index 0000000..8a80359 --- /dev/null +++ b/inc/irrAllocator.h @@ -0,0 +1,124 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine" and the "irrXML" project. +// For conditions of distribution and use, see copyright notice in irrlicht.h and irrXML.h + +#ifndef __IRR_ALLOCATOR_H_INCLUDED__ +#define __IRR_ALLOCATOR_H_INCLUDED__ + +#include "irrTypes.h" +#include +// necessary for older compilers +#include + +namespace irr +{ +namespace core +{ + +#ifdef DEBUG_CLIENTBLOCK +#undef DEBUG_CLIENTBLOCK +#define DEBUG_CLIENTBLOCK new +#endif + +//! Very simple allocator implementation, containers using it can be used across dll boundaries +template +class irrAllocator +{ +public: + + //! Destructor + virtual ~irrAllocator() {} + + //! Allocate memory for an array of objects + T* allocate(size_t cnt) + { + return (T*)internal_new(cnt* sizeof(T)); + } + + //! Deallocate memory for an array of objects + void deallocate(T* ptr) + { + internal_delete(ptr); + } + + //! Construct an element + void construct(T* ptr, const T&e) + { + new ((void*)ptr) T(e); + } + + //! Destruct an element + void destruct(T* ptr) + { + ptr->~T(); + } + +protected: + + virtual void* internal_new(size_t cnt) + { + return operator new(cnt); + } + + virtual void internal_delete(void* ptr) + { + operator delete(ptr); + } + +}; + + +//! Fast allocator, only to be used in containers inside the same memory heap. +/** Containers using it are NOT able to be used it across dll boundaries. Use this +when using in an internal class or function or when compiled into a static lib */ +template +class irrAllocatorFast +{ +public: + + //! Allocate memory for an array of objects + T* allocate(size_t cnt) + { + return (T*)operator new(cnt* sizeof(T)); + } + + //! Deallocate memory for an array of objects + void deallocate(T* ptr) + { + operator delete(ptr); + } + + //! Construct an element + void construct(T* ptr, const T&e) + { + new ((void*)ptr) T(e); + } + + //! Destruct an element + void destruct(T* ptr) + { + ptr->~T(); + } +}; + + + +#ifdef DEBUG_CLIENTBLOCK +#undef DEBUG_CLIENTBLOCK +#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__) +#endif + +//! defines an allocation strategy +enum eAllocStrategy +{ + ALLOC_STRATEGY_SAFE = 0, + ALLOC_STRATEGY_DOUBLE = 1, + ALLOC_STRATEGY_SQRT = 2 +}; + + +} // end namespace core +} // end namespace irr + +#endif + diff --git a/inc/irrArray.h b/inc/irrArray.h new file mode 100644 index 0000000..f9d338d --- /dev/null +++ b/inc/irrArray.h @@ -0,0 +1,627 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine" and the "irrXML" project. +// For conditions of distribution and use, see copyright notice in irrlicht.h and irrXML.h + +#ifndef __IRR_ARRAY_H_INCLUDED__ +#define __IRR_ARRAY_H_INCLUDED__ + +#include "irrTypes.h" +#include "heapsort.h" +#include "irrAllocator.h" +#include "irrMath.h" + +namespace irr +{ +namespace core +{ + +//! Self reallocating template array (like stl vector) with additional features. +/** Some features are: Heap sorting, binary search methods, easier debugging. +*/ +template > +class array +{ + +public: + + //! Default constructor for empty array. + array() + : data(0), allocated(0), used(0), + strategy(ALLOC_STRATEGY_DOUBLE), free_when_destroyed(true), is_sorted(true) + { + } + + + //! Constructs an array and allocates an initial chunk of memory. + /** \param start_count Amount of elements to pre-allocate. */ + array(u32 start_count) + : data(0), allocated(0), used(0), + strategy(ALLOC_STRATEGY_DOUBLE), free_when_destroyed(true), is_sorted(true) + { + reallocate(start_count); + } + + + //! Copy constructor + array(const array& other) : data(0) + { + *this = other; + } + + + //! Destructor. + /** Frees allocated memory, if set_free_when_destroyed was not set to + false by the user before. */ + ~array() + { + clear(); + } + + + //! Reallocates the array, make it bigger or smaller. + /** \param new_size New size of array. + \param canShrink Specifies whether the array is reallocated even if + enough space is available. Setting this flag to false can speed up + array usage, but may use more memory than required by the data. + */ + void reallocate(u32 new_size, bool canShrink=true) + { + if (allocated==new_size) + return; + if (!canShrink && (new_size < allocated)) + return; + + T* old_data = data; + + data = allocator.allocate(new_size); //new T[new_size]; + allocated = new_size; + + // copy old data + s32 end = used < new_size ? used : new_size; + + for (s32 i=0; iused) // access violation + + if (used + 1 > allocated) + { + // this doesn't work if the element is in the same + // array. So we'll copy the element first to be sure + // we'll get no data corruption + const T e(element); + + // increase data block + u32 newAlloc; + switch ( strategy ) + { + case ALLOC_STRATEGY_DOUBLE: + newAlloc = used + 1 + (allocated < 500 ? + (allocated < 5 ? 5 : used) : used >> 2); + break; + default: + case ALLOC_STRATEGY_SAFE: + newAlloc = used + 1; + break; + } + reallocate( newAlloc); + + // move array content and construct new element + // first move end one up + for (u32 i=used; i>index; --i) + { + if (i index) + allocator.destruct(&data[index]); + allocator.construct(&data[index], e); // data[index] = e; + } + else + { + // element inserted not at end + if ( used > index ) + { + // create one new element at the end + allocator.construct(&data[used], data[used-1]); + + // move the rest of the array content + for (u32 i=used-1; i>index; --i) + { + data[i] = data[i-1]; + } + // insert the new element + data[index] = element; + } + else + { + // insert the new element to the end + allocator.construct(&data[index], element); + } + } + // set to false as we don't know if we have the comparison operators + is_sorted = false; + ++used; + } + + + //! Clears the array and deletes all allocated memory. + void clear() + { + if (free_when_destroyed) + { + for (u32 i=0; i& operator=(const array& other) + { + if (this == &other) + return *this; + strategy = other.strategy; + + if (data) + clear(); + + //if (allocated < other.allocated) + if (other.allocated == 0) + data = 0; + else + data = allocator.allocate(other.allocated); // new T[other.allocated]; + + used = other.used; + free_when_destroyed = true; + is_sorted = other.is_sorted; + allocated = other.allocated; + + for (u32 i=0; i& other) const + { + if (used != other.used) + return false; + + for (u32 i=0; i& other) const + { + return !(*this==other); + } + + + //! Direct access operator + T& operator [](u32 index) + { + _IRR_DEBUG_BREAK_IF(index>=used) // access violation + + return data[index]; + } + + + //! Direct const access operator + const T& operator [](u32 index) const + { + _IRR_DEBUG_BREAK_IF(index>=used) // access violation + + return data[index]; + } + + + //! Gets last element. + T& getLast() + { + _IRR_DEBUG_BREAK_IF(!used) // access violation + + return data[used-1]; + } + + + //! Gets last element + const T& getLast() const + { + _IRR_DEBUG_BREAK_IF(!used) // access violation + + return data[used-1]; + } + + + //! Gets a pointer to the array. + /** \return Pointer to the array. */ + T* pointer() + { + return data; + } + + + //! Gets a const pointer to the array. + /** \return Pointer to the array. */ + const T* const_pointer() const + { + return data; + } + + + //! Get number of occupied elements of the array. + /** \return Size of elements in the array which are actually occupied. */ + u32 size() const + { + return used; + } + + + //! Get amount of memory allocated. + /** \return Amount of memory allocated. The amount of bytes + allocated would be allocated_size() * sizeof(ElementTypeUsed); */ + u32 allocated_size() const + { + return allocated; + } + + + //! Check if array is empty. + /** \return True if the array is empty false if not. */ + bool empty() const + { + return used == 0; + } + + + //! Sorts the array using heapsort. + /** There is no additional memory waste and the algorithm performs + O(n*log n) in worst case. */ + void sort() + { + if (!is_sorted && used>1) + heapsort(data, used); + is_sorted = true; + } + + + //! Performs a binary search for an element, returns -1 if not found. + /** The array will be sorted before the binary search if it is not + already sorted. Caution is advised! Be careful not to call this on + unsorted const arrays, or the slower method will be used. + \param element Element to search for. + \return Position of the searched element if it was found, + otherwise -1 is returned. */ + s32 binary_search(const T& element) + { + sort(); + return binary_search(element, 0, used-1); + } + + + //! Performs a binary search for an element if possible, returns -1 if not found. + /** This method is for const arrays and so cannot call sort(), if the array is + not sorted then linear_search will be used instead. Potentially very slow! + \param element Element to search for. + \return Position of the searched element if it was found, + otherwise -1 is returned. */ + s32 binary_search(const T& element) const + { + if (is_sorted) + return binary_search(element, 0, used-1); + else + return linear_search(element); + } + + + //! Performs a binary search for an element, returns -1 if not found. + /** \param element: Element to search for. + \param left First left index + \param right Last right index. + \return Position of the searched element if it was found, otherwise -1 + is returned. */ + s32 binary_search(const T& element, s32 left, s32 right) const + { + if (!used) + return -1; + + s32 m; + + do + { + m = (left+right)>>1; + + if (element < data[m]) + right = m - 1; + else + left = m + 1; + + } while((element < data[m] || data[m] < element) && left<=right); + // this last line equals to: + // " while((element != array[m]) && left<=right);" + // but we only want to use the '<' operator. + // the same in next line, it is "(element == array[m])" + + + if (!(element < data[m]) && !(data[m] < element)) + return m; + + return -1; + } + + + //! Performs a binary search for an element, returns -1 if not found. + //! it is used for searching a multiset + /** The array will be sorted before the binary search if it is not + already sorted. + \param element Element to search for. + \param &last return lastIndex of equal elements + \return Position of the first searched element if it was found, + otherwise -1 is returned. */ + s32 binary_search_multi(const T& element, s32 &last) + { + sort(); + s32 index = binary_search(element, 0, used-1); + if ( index < 0 ) + return index; + + // The search can be somewhere in the middle of the set + // look linear previous and past the index + last = index; + + while ( index > 0 && !(element < data[index - 1]) && !(data[index - 1] < element) ) + { + index -= 1; + } + // look linear up + while ( last < (s32) used - 1 && !(element < data[last + 1]) && !(data[last + 1] < element) ) + { + last += 1; + } + + return index; + } + + + //! Finds an element in linear time, which is very slow. + /** Use binary_search for faster finding. Only works if ==operator is + implemented. + \param element Element to search for. + \return Position of the searched element if it was found, otherwise -1 + is returned. */ + s32 linear_search(const T& element) const + { + for (u32 i=0; i=0; --i) + if (data[i] == element) + return i; + + return -1; + } + + + //! Erases an element from the array. + /** May be slow, because all elements following after the erased + element have to be copied. + \param index: Index of element to be erased. */ + void erase(u32 index) + { + _IRR_DEBUG_BREAK_IF(index>=used) // access violation + + for (u32 i=index+1; i=used || count<1) + return; + if (index+count>used) + count = used-index; + + u32 i; + for (i=index; i= index+count) // not already destructed before loop + allocator.destruct(&data[i-count]); + + allocator.construct(&data[i-count], data[i]); // data[i-count] = data[i]; + + if (i >= used-count) // those which are not overwritten + allocator.destruct(&data[i]); + } + + used-= count; + } + + + //! Sets if the array is sorted + void set_sorted(bool _is_sorted) + { + is_sorted = _is_sorted; + } + + + //! Swap the content of this array container with the content of another array + /** Afterwards this object will contain the content of the other object and the other + object will contain the content of this object. + \param other Swap content with this object */ + void swap(array& other) + { + core::swap(data, other.data); + core::swap(allocated, other.allocated); + core::swap(used, other.used); + core::swap(allocator, other.allocator); // memory is still released by the same allocator used for allocation + eAllocStrategy helper_strategy(strategy); // can't use core::swap with bitfields + strategy = other.strategy; + other.strategy = helper_strategy; + bool helper_free_when_destroyed(free_when_destroyed); + free_when_destroyed = other.free_when_destroyed; + other.free_when_destroyed = helper_free_when_destroyed; + bool helper_is_sorted(is_sorted); + is_sorted = other.is_sorted; + other.is_sorted = helper_is_sorted; + } + + +private: + T* data; + u32 allocated; + u32 used; + TAlloc allocator; + eAllocStrategy strategy:4; + bool free_when_destroyed:1; + bool is_sorted:1; +}; + + +} // end namespace core +} // end namespace irr + +#endif + diff --git a/inc/irrList.h b/inc/irrList.h new file mode 100644 index 0000000..a84afd5 --- /dev/null +++ b/inc/irrList.h @@ -0,0 +1,416 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __IRR_LIST_H_INCLUDED__ +#define __IRR_LIST_H_INCLUDED__ + +#include "irrTypes.h" +#include "irrAllocator.h" +#include "irrMath.h" + +namespace irr +{ +namespace core +{ + + +//! Doubly linked list template. +template +class list +{ +private: + + //! List element node with pointer to previous and next element in the list. + struct SKListNode + { + SKListNode(const T& e) : Next(0), Prev(0), Element(e) {} + + SKListNode* Next; + SKListNode* Prev; + T Element; + }; + +public: + class ConstIterator; + + //! List iterator. + class Iterator + { + public: + Iterator() : Current(0) {} + + Iterator& operator ++() { Current = Current->Next; return *this; } + Iterator& operator --() { Current = Current->Prev; return *this; } + Iterator operator ++(s32) { Iterator tmp = *this; Current = Current->Next; return tmp; } + Iterator operator --(s32) { Iterator tmp = *this; Current = Current->Prev; return tmp; } + + Iterator& operator +=(s32 num) + { + if(num > 0) + { + while (num-- && this->Current != 0) ++(*this); + } + else + { + while(num++ && this->Current != 0) --(*this); + } + return *this; + } + + Iterator operator + (s32 num) const { Iterator tmp = *this; return tmp += num; } + Iterator& operator -=(s32 num) { return (*this)+=(-num); } + Iterator operator - (s32 num) const { return (*this)+ (-num); } + + bool operator ==(const Iterator& other) const { return Current == other.Current; } + bool operator !=(const Iterator& other) const { return Current != other.Current; } + bool operator ==(const ConstIterator& other) const { return Current == other.Current; } + bool operator !=(const ConstIterator& other) const { return Current != other.Current; } + + #if defined (_MSC_VER) && (_MSC_VER < 1300) + #pragma warning(disable:4284) // infix notation problem when using iterator operator -> + #endif + + T & operator * () { return Current->Element; } + T * operator ->() { return &Current->Element; } + + private: + explicit Iterator(SKListNode* begin) : Current(begin) {} + + SKListNode* Current; + + friend class list; + friend class ConstIterator; + }; + + //! List iterator for const access. + class ConstIterator + { + public: + + ConstIterator() : Current(0) {} + ConstIterator(const Iterator& iter) : Current(iter.Current) {} + + ConstIterator& operator ++() { Current = Current->Next; return *this; } + ConstIterator& operator --() { Current = Current->Prev; return *this; } + ConstIterator operator ++(s32) { ConstIterator tmp = *this; Current = Current->Next; return tmp; } + ConstIterator operator --(s32) { ConstIterator tmp = *this; Current = Current->Prev; return tmp; } + + ConstIterator& operator +=(s32 num) + { + if(num > 0) + { + while(num-- && this->Current != 0) ++(*this); + } + else + { + while(num++ && this->Current != 0) --(*this); + } + return *this; + } + + ConstIterator operator + (s32 num) const { ConstIterator tmp = *this; return tmp += num; } + ConstIterator& operator -=(s32 num) { return (*this)+=(-num); } + ConstIterator operator - (s32 num) const { return (*this)+ (-num); } + + bool operator ==(const ConstIterator& other) const { return Current == other.Current; } + bool operator !=(const ConstIterator& other) const { return Current != other.Current; } + bool operator ==(const Iterator& other) const { return Current == other.Current; } + bool operator !=(const Iterator& other) const { return Current != other.Current; } + + const T & operator * () { return Current->Element; } + const T * operator ->() { return &Current->Element; } + + ConstIterator & operator =(const Iterator & iterator) { Current = iterator.Current; return *this; } + + private: + explicit ConstIterator(SKListNode* begin) : Current(begin) {} + + SKListNode* Current; + + friend class Iterator; + friend class list; + }; + + //! Default constructor for empty list. + list() + : First(0), Last(0), Size(0) {} + + + //! Copy constructor. + list(const list& other) : First(0), Last(0), Size(0) + { + *this = other; + } + + + //! Destructor + ~list() + { + clear(); + } + + + //! Assignment operator + void operator=(const list& other) + { + if(&other == this) + { + return; + } + + clear(); + + SKListNode* node = other.First; + while(node) + { + push_back(node->Element); + node = node->Next; + } + } + + + //! Returns amount of elements in list. + /** \return Amount of elements in the list. */ + u32 size() const + { + return Size; + } + u32 getSize() const + { + return Size; + } + + + //! Clears the list, deletes all elements in the list. + /** All existing iterators of this list will be invalid. */ + void clear() + { + while(First) + { + SKListNode * next = First->Next; + allocator.destruct(First); + allocator.deallocate(First); + First = next; + } + + //First = 0; handled by loop + Last = 0; + Size = 0; + } + + + //! Checks for empty list. + /** \return True if the list is empty and false if not. */ + bool empty() const + { + return (First == 0); + } + + + //! Adds an element at the end of the list. + /** \param element Element to add to the list. */ + void push_back(const T& element) + { + SKListNode* node = allocator.allocate(1); + allocator.construct(node, element); + + ++Size; + + if (First == 0) + First = node; + + node->Prev = Last; + + if (Last != 0) + Last->Next = node; + + Last = node; + } + + + //! Adds an element at the begin of the list. + /** \param element: Element to add to the list. */ + void push_front(const T& element) + { + SKListNode* node = allocator.allocate(1); + allocator.construct(node, element); + + ++Size; + + if (First == 0) + { + Last = node; + First = node; + } + else + { + node->Next = First; + First->Prev = node; + First = node; + } + } + + + //! Gets first node. + /** \return A list iterator pointing to the beginning of the list. */ + Iterator begin() + { + return Iterator(First); + } + + + //! Gets first node. + /** \return A const list iterator pointing to the beginning of the list. */ + ConstIterator begin() const + { + return ConstIterator(First); + } + + + //! Gets end node. + /** \return List iterator pointing to null. */ + Iterator end() + { + return Iterator(0); + } + + + //! Gets end node. + /** \return Const list iterator pointing to null. */ + ConstIterator end() const + { + return ConstIterator(0); + } + + + //! Gets last element. + /** \return List iterator pointing to the last element of the list. */ + Iterator getLast() + { + return Iterator(Last); + } + + + //! Gets last element. + /** \return Const list iterator pointing to the last element of the list. */ + ConstIterator getLast() const + { + return ConstIterator(Last); + } + + + //! Inserts an element after an element. + /** \param it Iterator pointing to element after which the new element + should be inserted. + \param element The new element to be inserted into the list. + */ + void insert_after(const Iterator& it, const T& element) + { + SKListNode* node = allocator.allocate(1); + allocator.construct(node, element); + + node->Next = it.Current->Next; + + if (it.Current->Next) + it.Current->Next->Prev = node; + + node->Prev = it.Current; + it.Current->Next = node; + ++Size; + + if (it.Current == Last) + Last = node; + } + + + //! Inserts an element before an element. + /** \param it Iterator pointing to element before which the new element + should be inserted. + \param element The new element to be inserted into the list. + */ + void insert_before(const Iterator& it, const T& element) + { + SKListNode* node = allocator.allocate(1); + allocator.construct(node, element); + + node->Prev = it.Current->Prev; + + if (it.Current->Prev) + it.Current->Prev->Next = node; + + node->Next = it.Current; + it.Current->Prev = node; + ++Size; + + if (it.Current == First) + First = node; + } + + + //! Erases an element. + /** \param it Iterator pointing to the element which shall be erased. + \return Iterator pointing to next element. */ + Iterator erase(Iterator& it) + { + // suggest changing this to a const Iterator& and + // working around line: it.Current = 0 (possibly with a mutable, or just let it be garbage?) + + Iterator returnIterator(it); + ++returnIterator; + + if(it.Current == First) + { + First = it.Current->Next; + } + else + { + it.Current->Prev->Next = it.Current->Next; + } + + if(it.Current == Last) + { + Last = it.Current->Prev; + } + else + { + it.Current->Next->Prev = it.Current->Prev; + } + + allocator.destruct(it.Current); + allocator.deallocate(it.Current); + it.Current = 0; + --Size; + + return returnIterator; + } + + //! Swap the content of this list container with the content of another list + /** Afterwards this object will contain the content of the other object and the other + object will contain the content of this object. Iterators will afterwards be valid for + the swapped object. + \param other Swap content with this object */ + void swap(list& other) + { + core::swap(First, other.First); + core::swap(Last, other.Last); + core::swap(Size, other.Size); + core::swap(allocator, other.allocator); // memory is still released by the same allocator used for allocation + } + + +private: + + SKListNode* First; + SKListNode* Last; + u32 Size; + irrAllocator allocator; + +}; + + +} // end namespace core +}// end namespace irr + +#endif + diff --git a/inc/irrMap.h b/inc/irrMap.h new file mode 100644 index 0000000..6e15174 --- /dev/null +++ b/inc/irrMap.h @@ -0,0 +1,1127 @@ +// Copyright (C) 2006-2012 by Kat'Oun +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __IRR_MAP_H_INCLUDED__ +#define __IRR_MAP_H_INCLUDED__ + +#include "irrTypes.h" +#include "irrMath.h" + +namespace irr +{ +namespace core +{ + +//! map template for associative arrays using a red-black tree +template +class map +{ + //! red/black tree for map + template + class RBTree + { + public: + + RBTree(const KeyTypeRB& k, const ValueTypeRB& v) + : LeftChild(0), RightChild(0), Parent(0), Key(k), + Value(v), IsRed(true) {} + + void setLeftChild(RBTree* p) + { + LeftChild=p; + if (p) + p->setParent(this); + } + + void setRightChild(RBTree* p) + { + RightChild=p; + if (p) + p->setParent(this); + } + + void setParent(RBTree* p) { Parent=p; } + + void setValue(const ValueTypeRB& v) { Value = v; } + + void setRed() { IsRed = true; } + void setBlack() { IsRed = false; } + + RBTree* getLeftChild() const { return LeftChild; } + RBTree* getRightChild() const { return RightChild; } + RBTree* getParent() const { return Parent; } + + const ValueTypeRB& getValue() const + { + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return Value; + } + + ValueTypeRB& getValue() + { + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return Value; + } + + const KeyTypeRB& getKey() const + { + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return Key; + } + + bool isRoot() const + { + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return Parent==0; + } + + bool isLeftChild() const + { + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return (Parent != 0) && (Parent->getLeftChild()==this); + } + + bool isRightChild() const + { + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return (Parent!=0) && (Parent->getRightChild()==this); + } + + bool isLeaf() const + { + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return (LeftChild==0) && (RightChild==0); + } + + unsigned int getLevel() const + { + if (isRoot()) + return 1; + else + return getParent()->getLevel() + 1; + } + + + bool isRed() const + { + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return IsRed; + } + + bool isBlack() const + { + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return !IsRed; + } + + private: + RBTree(); + + RBTree* LeftChild; + RBTree* RightChild; + + RBTree* Parent; + + KeyTypeRB Key; + ValueTypeRB Value; + + bool IsRed; + }; // RBTree + + public: + + typedef RBTree Node; + // We need the forwad declaration for the friend declaration + class ConstIterator; + + //! Normal Iterator + class Iterator + { + friend class ConstIterator; + public: + + Iterator() : Root(0), Cur(0) {} + + // Constructor(Node*) + Iterator(Node* root) : Root(root) + { + reset(); + } + + // Copy constructor + Iterator(const Iterator& src) : Root(src.Root), Cur(src.Cur) {} + + void reset(bool atLowest=true) + { + if (atLowest) + Cur = getMin(Root); + else + Cur = getMax(Root); + } + + bool atEnd() const + { + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return Cur==0; + } + + Node* getNode() const + { + return Cur; + } + + Iterator& operator=(const Iterator& src) + { + Root = src.Root; + Cur = src.Cur; + return (*this); + } + + void operator++(int) + { + inc(); + } + + void operator--(int) + { + dec(); + } + + Node* operator->() + { + return getNode(); + } + + Node& operator*() + { + _IRR_DEBUG_BREAK_IF(atEnd()) // access violation + + return *Cur; + } + + private: + + Node* getMin(Node* n) const + { + while(n && n->getLeftChild()) + n = n->getLeftChild(); + return n; + } + + Node* getMax(Node* n) const + { + while(n && n->getRightChild()) + n = n->getRightChild(); + return n; + } + + void inc() + { + // Already at end? + if (Cur==0) + return; + + if (Cur->getRightChild()) + { + // If current node has a right child, the next higher node is the + // node with lowest key beneath the right child. + Cur = getMin(Cur->getRightChild()); + } + else if (Cur->isLeftChild()) + { + // No right child? Well if current node is a left child then + // the next higher node is the parent + Cur = Cur->getParent(); + } + else + { + // Current node neither is left child nor has a right child. + // Ie it is either right child or root + // The next higher node is the parent of the first non-right + // child (ie either a left child or the root) up in the + // hierarchy. Root's parent is 0. + while(Cur->isRightChild()) + Cur = Cur->getParent(); + Cur = Cur->getParent(); + } + } + + void dec() + { + // Already at end? + if (Cur==0) + return; + + if (Cur->getLeftChild()) + { + // If current node has a left child, the next lower node is the + // node with highest key beneath the left child. + Cur = getMax(Cur->getLeftChild()); + } + else if (Cur->isRightChild()) + { + // No left child? Well if current node is a right child then + // the next lower node is the parent + Cur = Cur->getParent(); + } + else + { + // Current node neither is right child nor has a left child. + // Ie it is either left child or root + // The next higher node is the parent of the first non-left + // child (ie either a right child or the root) up in the + // hierarchy. Root's parent is 0. + + while(Cur->isLeftChild()) + Cur = Cur->getParent(); + Cur = Cur->getParent(); + } + } + + Node* Root; + Node* Cur; + }; // Iterator + + //! Const Iterator + class ConstIterator + { + friend class Iterator; + public: + + ConstIterator() : Root(0), Cur(0) {} + + // Constructor(Node*) + ConstIterator(const Node* root) : Root(root) + { + reset(); + } + + // Copy constructor + ConstIterator(const ConstIterator& src) : Root(src.Root), Cur(src.Cur) {} + ConstIterator(const Iterator& src) : Root(src.Root), Cur(src.Cur) {} + + void reset(bool atLowest=true) + { + if (atLowest) + Cur = getMin(Root); + else + Cur = getMax(Root); + } + + bool atEnd() const + { + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return Cur==0; + } + + const Node* getNode() const + { + return Cur; + } + + ConstIterator& operator=(const ConstIterator& src) + { + Root = src.Root; + Cur = src.Cur; + return (*this); + } + + void operator++(int) + { + inc(); + } + + void operator--(int) + { + dec(); + } + + const Node* operator->() + { + return getNode(); + } + + const Node& operator*() + { + _IRR_DEBUG_BREAK_IF(atEnd()) // access violation + + return *Cur; + } + + private: + + const Node* getMin(const Node* n) const + { + while(n && n->getLeftChild()) + n = n->getLeftChild(); + return n; + } + + const Node* getMax(const Node* n) const + { + while(n && n->getRightChild()) + n = n->getRightChild(); + return n; + } + + void inc() + { + // Already at end? + if (Cur==0) + return; + + if (Cur->getRightChild()) + { + // If current node has a right child, the next higher node is the + // node with lowest key beneath the right child. + Cur = getMin(Cur->getRightChild()); + } + else if (Cur->isLeftChild()) + { + // No right child? Well if current node is a left child then + // the next higher node is the parent + Cur = Cur->getParent(); + } + else + { + // Current node neither is left child nor has a right child. + // Ie it is either right child or root + // The next higher node is the parent of the first non-right + // child (ie either a left child or the root) up in the + // hierarchy. Root's parent is 0. + while(Cur->isRightChild()) + Cur = Cur->getParent(); + Cur = Cur->getParent(); + } + } + + void dec() + { + // Already at end? + if (Cur==0) + return; + + if (Cur->getLeftChild()) + { + // If current node has a left child, the next lower node is the + // node with highest key beneath the left child. + Cur = getMax(Cur->getLeftChild()); + } + else if (Cur->isRightChild()) + { + // No left child? Well if current node is a right child then + // the next lower node is the parent + Cur = Cur->getParent(); + } + else + { + // Current node neither is right child nor has a left child. + // Ie it is either left child or root + // The next higher node is the parent of the first non-left + // child (ie either a right child or the root) up in the + // hierarchy. Root's parent is 0. + + while(Cur->isLeftChild()) + Cur = Cur->getParent(); + Cur = Cur->getParent(); + } + } + + const Node* Root; + const Node* Cur; + }; // ConstIterator + + + //! Parent First Iterator. + /** Traverses the tree from top to bottom. Typical usage is + when storing the tree structure, because when reading it + later (and inserting elements) the tree structure will + be the same. */ + class ParentFirstIterator + { + public: + + ParentFirstIterator() : Root(0), Cur(0) {} + + explicit ParentFirstIterator(Node* root) : Root(root), Cur(0) + { + reset(); + } + + void reset() + { + Cur = Root; + } + + bool atEnd() const + { + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return Cur==0; + } + + Node* getNode() + { + return Cur; + } + + ParentFirstIterator& operator=(const ParentFirstIterator& src) + { + Root = src.Root; + Cur = src.Cur; + return (*this); + } + + void operator++(int) + { + inc(); + } + + Node* operator -> () + { + return getNode(); + } + + Node& operator* () + { + _IRR_DEBUG_BREAK_IF(atEnd()) // access violation + + return *getNode(); + } + + private: + + void inc() + { + // Already at end? + if (Cur==0) + return; + + // First we try down to the left + if (Cur->getLeftChild()) + { + Cur = Cur->getLeftChild(); + } + else if (Cur->getRightChild()) + { + // No left child? The we go down to the right. + Cur = Cur->getRightChild(); + } + else + { + // No children? Move up in the hierarcy until + // we either reach 0 (and are finished) or + // find a right uncle. + while (Cur!=0) + { + // But if parent is left child and has a right "uncle" the parent + // has already been processed but the uncle hasn't. Move to + // the uncle. + if (Cur->isLeftChild() && Cur->getParent()->getRightChild()) + { + Cur = Cur->getParent()->getRightChild(); + return; + } + Cur = Cur->getParent(); + } + } + } + + Node* Root; + Node* Cur; + + }; // ParentFirstIterator + + + //! Parent Last Iterator + /** Traverse the tree from bottom to top. + Typical usage is when deleting all elements in the tree + because you must delete the children before you delete + their parent. */ + class ParentLastIterator + { + public: + + ParentLastIterator() : Root(0), Cur(0) {} + + explicit ParentLastIterator(Node* root) : Root(root), Cur(0) + { + reset(); + } + + void reset() + { + Cur = getMin(Root); + } + + bool atEnd() const + { + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return Cur==0; + } + + Node* getNode() + { + return Cur; + } + + ParentLastIterator& operator=(const ParentLastIterator& src) + { + Root = src.Root; + Cur = src.Cur; + return (*this); + } + + void operator++(int) + { + inc(); + } + + Node* operator -> () + { + return getNode(); + } + + Node& operator* () + { + _IRR_DEBUG_BREAK_IF(atEnd()) // access violation + + return *getNode(); + } + private: + + Node* getMin(Node* n) + { + while(n!=0 && (n->getLeftChild()!=0 || n->getRightChild()!=0)) + { + if (n->getLeftChild()) + n = n->getLeftChild(); + else + n = n->getRightChild(); + } + return n; + } + + void inc() + { + // Already at end? + if (Cur==0) + return; + + // Note: Starting point is the node as far down to the left as possible. + + // If current node has an uncle to the right, go to the + // node as far down to the left from the uncle as possible + // else just go up a level to the parent. + if (Cur->isLeftChild() && Cur->getParent()->getRightChild()) + { + Cur = getMin(Cur->getParent()->getRightChild()); + } + else + Cur = Cur->getParent(); + } + + Node* Root; + Node* Cur; + }; // ParentLastIterator + + + // AccessClass is a temporary class used with the [] operator. + // It makes it possible to have different behavior in situations like: + // myTree["Foo"] = 32; + // If "Foo" already exists update its value else insert a new element. + // int i = myTree["Foo"] + // If "Foo" exists return its value. + class AccessClass + { + // Let map be the only one who can instantiate this class. + friend class map; + + public: + + // Assignment operator. Handles the myTree["Foo"] = 32; situation + void operator=(const ValueType& value) + { + // Just use the Set method, it handles already exist/not exist situation + Tree.set(Key,value); + } + + // ValueType operator + operator ValueType() + { + Node* node = Tree.find(Key); + + // Not found + _IRR_DEBUG_BREAK_IF(node==0) // access violation + + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return node->getValue(); + } + + private: + + AccessClass(map& tree, const KeyType& key) : Tree(tree), Key(key) {} + + AccessClass(); + + map& Tree; + const KeyType& Key; + }; // AccessClass + + + // Constructor. + map() : Root(0), Size(0) {} + + // Destructor + ~map() + { + clear(); + } + + //------------------------------ + // Public Commands + //------------------------------ + + //! Inserts a new node into the tree + /** \param keyNew: the index for this value + \param v: the value to insert + \return True if successful, false if it fails (already exists) */ + bool insert(const KeyType& keyNew, const ValueType& v) + { + // First insert node the "usual" way (no fancy balance logic yet) + Node* newNode = new Node(keyNew,v); + if (!insert(newNode)) + { + delete newNode; + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return false; + } + + // Then attend a balancing party + while (!newNode->isRoot() && (newNode->getParent()->isRed())) + { + if (newNode->getParent()->isLeftChild()) + { + // If newNode is a left child, get its right 'uncle' + Node* newNodesUncle = newNode->getParent()->getParent()->getRightChild(); + if ( newNodesUncle!=0 && newNodesUncle->isRed()) + { + // case 1 - change the colors + newNode->getParent()->setBlack(); + newNodesUncle->setBlack(); + newNode->getParent()->getParent()->setRed(); + // Move newNode up the tree + newNode = newNode->getParent()->getParent(); + } + else + { + // newNodesUncle is a black node + if ( newNode->isRightChild()) + { + // and newNode is to the right + // case 2 - move newNode up and rotate + newNode = newNode->getParent(); + rotateLeft(newNode); + } + // case 3 + newNode->getParent()->setBlack(); + newNode->getParent()->getParent()->setRed(); + rotateRight(newNode->getParent()->getParent()); + } + } + else + { + // If newNode is a right child, get its left 'uncle' + Node* newNodesUncle = newNode->getParent()->getParent()->getLeftChild(); + if ( newNodesUncle!=0 && newNodesUncle->isRed()) + { + // case 1 - change the colors + newNode->getParent()->setBlack(); + newNodesUncle->setBlack(); + newNode->getParent()->getParent()->setRed(); + // Move newNode up the tree + newNode = newNode->getParent()->getParent(); + } + else + { + // newNodesUncle is a black node + if (newNode->isLeftChild()) + { + // and newNode is to the left + // case 2 - move newNode up and rotate + newNode = newNode->getParent(); + rotateRight(newNode); + } + // case 3 + newNode->getParent()->setBlack(); + newNode->getParent()->getParent()->setRed(); + rotateLeft(newNode->getParent()->getParent()); + } + + } + } + // Color the root black + Root->setBlack(); + return true; + } + + //! Replaces the value if the key already exists, otherwise inserts a new element. + /** \param k The index for this value + \param v The new value of */ + void set(const KeyType& k, const ValueType& v) + { + Node* p = find(k); + if (p) + p->setValue(v); + else + insert(k,v); + } + + //! Removes a node from the tree and returns it. + /** The returned node must be deleted by the user + \param k the key to remove + \return A pointer to the node, or 0 if not found */ + Node* delink(const KeyType& k) + { + Node* p = find(k); + if (p == 0) + return 0; + + // Rotate p down to the left until it has no right child, will get there + // sooner or later. + while(p->getRightChild()) + { + // "Pull up my right child and let it knock me down to the left" + rotateLeft(p); + } + // p now has no right child but might have a left child + Node* left = p->getLeftChild(); + + // Let p's parent point to p's child instead of point to p + if (p->isLeftChild()) + p->getParent()->setLeftChild(left); + + else if (p->isRightChild()) + p->getParent()->setRightChild(left); + + else + { + // p has no parent => p is the root. + // Let the left child be the new root. + setRoot(left); + } + + // p is now gone from the tree in the sense that + // no one is pointing at it, so return it. + + --Size; + return p; + } + + //! Removes a node from the tree and deletes it. + /** \return True if the node was found and deleted */ + bool remove(const KeyType& k) + { + Node* p = find(k); + return remove(p); + } + + //! Removes a node from the tree and deletes it. + /** \return True if the node was found and deleted */ + bool remove(Node* p) + { + if (p == 0) + { + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return false; + } + + // Rotate p down to the left until it has no right child, will get there + // sooner or later. + while(p->getRightChild()) + { + // "Pull up my right child and let it knock me down to the left" + rotateLeft(p); + } + // p now has no right child but might have a left child + Node* left = p->getLeftChild(); + + // Let p's parent point to p's child instead of point to p + if (p->isLeftChild()) + p->getParent()->setLeftChild(left); + + else if (p->isRightChild()) + p->getParent()->setRightChild(left); + + else + { + // p has no parent => p is the root. + // Let the left child be the new root. + setRoot(left); + } + + // p is now gone from the tree in the sense that + // no one is pointing at it. Let's get rid of it. + delete p; + + --Size; + return true; + } + + //! Clear the entire tree + void clear() + { + ParentLastIterator i(getParentLastIterator()); + + while(!i.atEnd()) + { + Node* p = i.getNode(); + i++; // Increment it before it is deleted + // else iterator will get quite confused. + delete p; + } + Root = 0; + Size= 0; + } + + //! Is the tree empty? + //! \return Returns true if empty, false if not + bool empty() const + { + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return Root == 0; + } + + //! \deprecated Use empty() instead. This method may be removed by Irrlicht 1.9 + _IRR_DEPRECATED_ bool isEmpty() const + { + return empty(); + } + + //! Search for a node with the specified key. + //! \param keyToFind: The key to find + //! \return Returns 0 if node couldn't be found. + Node* find(const KeyType& keyToFind) const + { + Node* pNode = Root; + + while(pNode!=0) + { + const KeyType& key=pNode->getKey(); + + if (keyToFind == key) + return pNode; + else if (keyToFind < key) + pNode = pNode->getLeftChild(); + else //keyToFind > key + pNode = pNode->getRightChild(); + } + + return 0; + } + + //! Gets the root element. + //! \return Returns a pointer to the root node, or + //! 0 if the tree is empty. + Node* getRoot() const + { + return Root; + } + + //! Returns the number of nodes in the tree. + u32 size() const + { + return Size; + } + + //! Swap the content of this map container with the content of another map + /** Afterwards this object will contain the content of the other object and the other + object will contain the content of this object. Iterators will afterwards be valid for + the swapped object. + \param other Swap content with this object */ + void swap(map& other) + { + core::swap(Root, other.Root); + core::swap(Size, other.Size); + } + + //------------------------------ + // Public Iterators + //------------------------------ + + //! Returns an iterator + Iterator getIterator() const + { + Iterator it(getRoot()); + return it; + } + + //! Returns a Constiterator + ConstIterator getConstIterator() const + { + Iterator it(getRoot()); + return it; + } + + //! Returns a ParentFirstIterator. + //! Traverses the tree from top to bottom. Typical usage is + //! when storing the tree structure, because when reading it + //! later (and inserting elements) the tree structure will + //! be the same. + ParentFirstIterator getParentFirstIterator() const + { + ParentFirstIterator it(getRoot()); + return it; + } + + //! Returns a ParentLastIterator to traverse the tree from + //! bottom to top. + //! Typical usage is when deleting all elements in the tree + //! because you must delete the children before you delete + //! their parent. + ParentLastIterator getParentLastIterator() const + { + ParentLastIterator it(getRoot()); + return it; + } + + //------------------------------ + // Public Operators + //------------------------------ + + //! operator [] for access to elements + /** for example myMap["key"] */ + AccessClass operator[](const KeyType& k) + { + return AccessClass(*this, k); + } + private: + + //------------------------------ + // Disabled methods + //------------------------------ + // Copy constructor and assignment operator deliberately + // defined but not implemented. The tree should never be + // copied, pass along references to it instead. + explicit map(const map& src); + map& operator = (const map& src); + + //! Set node as new root. + /** The node will be set to black, otherwise core dumps may arise + (patch provided by rogerborg). + \param newRoot Node which will be the new root + */ + void setRoot(Node* newRoot) + { + Root = newRoot; + if (Root != 0) + { + Root->setParent(0); + Root->setBlack(); + } + } + + //! Insert a node into the tree without using any fancy balancing logic. + /** \return false if that key already exist in the tree. */ + bool insert(Node* newNode) + { + bool result=true; // Assume success + + if (Root==0) + { + setRoot(newNode); + Size = 1; + } + else + { + Node* pNode = Root; + const KeyType& keyNew = newNode->getKey(); + while (pNode) + { + const KeyType& key=pNode->getKey(); + + if (keyNew == key) + { + result = false; + pNode = 0; + } + else if (keyNew < key) + { + if (pNode->getLeftChild() == 0) + { + pNode->setLeftChild(newNode); + pNode = 0; + } + else + pNode = pNode->getLeftChild(); + } + else // keyNew > key + { + if (pNode->getRightChild()==0) + { + pNode->setRightChild(newNode); + pNode = 0; + } + else + { + pNode = pNode->getRightChild(); + } + } + } + + if (result) + ++Size; + } + + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return result; + } + + //! Rotate left. + //! Pull up node's right child and let it knock node down to the left + void rotateLeft(Node* p) + { + Node* right = p->getRightChild(); + + p->setRightChild(right->getLeftChild()); + + if (p->isLeftChild()) + p->getParent()->setLeftChild(right); + else if (p->isRightChild()) + p->getParent()->setRightChild(right); + else + setRoot(right); + + right->setLeftChild(p); + } + + //! Rotate right. + //! Pull up node's left child and let it knock node down to the right + void rotateRight(Node* p) + { + Node* left = p->getLeftChild(); + + p->setLeftChild(left->getRightChild()); + + if (p->isLeftChild()) + p->getParent()->setLeftChild(left); + else if (p->isRightChild()) + p->getParent()->setRightChild(left); + else + setRoot(left); + + left->setRightChild(p); + } + + //------------------------------ + // Private Members + //------------------------------ + Node* Root; // The top node. 0 if empty. + u32 Size; // Number of nodes in the tree +}; + +} // end namespace core +} // end namespace irr + +#endif // __IRR_MAP_H_INCLUDED__ + diff --git a/inc/irrMath.h b/inc/irrMath.h new file mode 100644 index 0000000..4351027 --- /dev/null +++ b/inc/irrMath.h @@ -0,0 +1,732 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __IRR_MATH_H_INCLUDED__ +#define __IRR_MATH_H_INCLUDED__ + +#include "IrrCompileConfig.h" +#include "irrTypes.h" +#include +#include +#include // for abs() etc. +#include // For INT_MAX / UINT_MAX + +#if defined(_IRR_SOLARIS_PLATFORM_) || defined(__BORLANDC__) || defined (__BCPLUSPLUS__) || defined (_WIN32_WCE) + #define sqrtf(X) (irr::f32)sqrt((irr::f64)(X)) + #define sinf(X) (irr::f32)sin((irr::f64)(X)) + #define cosf(X) (irr::f32)cos((irr::f64)(X)) + #define asinf(X) (irr::f32)asin((irr::f64)(X)) + #define acosf(X) (irr::f32)acos((irr::f64)(X)) + #define atan2f(X,Y) (irr::f32)atan2((irr::f64)(X),(irr::f64)(Y)) + #define ceilf(X) (irr::f32)ceil((irr::f64)(X)) + #define floorf(X) (irr::f32)floor((irr::f64)(X)) + #define powf(X,Y) (irr::f32)pow((irr::f64)(X),(irr::f64)(Y)) + #define fmodf(X,Y) (irr::f32)fmod((irr::f64)(X),(irr::f64)(Y)) + #define fabsf(X) (irr::f32)fabs((irr::f64)(X)) + #define logf(X) (irr::f32)log((irr::f64)(X)) +#endif + +#ifndef FLT_MAX +#define FLT_MAX 3.402823466E+38F +#endif + +#ifndef FLT_MIN +#define FLT_MIN 1.17549435e-38F +#endif + +namespace irr +{ +namespace core +{ + + //! Rounding error constant often used when comparing f32 values. + + const s32 ROUNDING_ERROR_S32 = 0; +#ifdef __IRR_HAS_S64 + const s64 ROUNDING_ERROR_S64 = 0; +#endif + const f32 ROUNDING_ERROR_f32 = 0.000001f; + const f64 ROUNDING_ERROR_f64 = 0.00000001; + +#ifdef PI // make sure we don't collide with a define +#undef PI +#endif + //! Constant for PI. + const f32 PI = 3.14159265359f; + + //! Constant for reciprocal of PI. + const f32 RECIPROCAL_PI = 1.0f/PI; + + //! Constant for half of PI. + const f32 HALF_PI = PI/2.0f; + +#ifdef PI64 // make sure we don't collide with a define +#undef PI64 +#endif + //! Constant for 64bit PI. + const f64 PI64 = 3.1415926535897932384626433832795028841971693993751; + + //! Constant for 64bit reciprocal of PI. + const f64 RECIPROCAL_PI64 = 1.0/PI64; + + //! 32bit Constant for converting from degrees to radians + const f32 DEGTORAD = PI / 180.0f; + + //! 32bit constant for converting from radians to degrees (formally known as GRAD_PI) + const f32 RADTODEG = 180.0f / PI; + + //! 64bit constant for converting from degrees to radians (formally known as GRAD_PI2) + const f64 DEGTORAD64 = PI64 / 180.0; + + //! 64bit constant for converting from radians to degrees + const f64 RADTODEG64 = 180.0 / PI64; + + //! Utility function to convert a radian value to degrees + /** Provided as it can be clearer to write radToDeg(X) than RADTODEG * X + \param radians The radians value to convert to degrees. + */ + inline f32 radToDeg(f32 radians) + { + return RADTODEG * radians; + } + + //! Utility function to convert a radian value to degrees + /** Provided as it can be clearer to write radToDeg(X) than RADTODEG * X + \param radians The radians value to convert to degrees. + */ + inline f64 radToDeg(f64 radians) + { + return RADTODEG64 * radians; + } + + //! Utility function to convert a degrees value to radians + /** Provided as it can be clearer to write degToRad(X) than DEGTORAD * X + \param degrees The degrees value to convert to radians. + */ + inline f32 degToRad(f32 degrees) + { + return DEGTORAD * degrees; + } + + //! Utility function to convert a degrees value to radians + /** Provided as it can be clearer to write degToRad(X) than DEGTORAD * X + \param degrees The degrees value to convert to radians. + */ + inline f64 degToRad(f64 degrees) + { + return DEGTORAD64 * degrees; + } + + //! returns minimum of two values. Own implementation to get rid of the STL (VS6 problems) + template + inline const T& min_(const T& a, const T& b) + { + return a < b ? a : b; + } + + //! returns minimum of three values. Own implementation to get rid of the STL (VS6 problems) + template + inline const T& min_(const T& a, const T& b, const T& c) + { + return a < b ? min_(a, c) : min_(b, c); + } + + //! returns maximum of two values. Own implementation to get rid of the STL (VS6 problems) + template + inline const T& max_(const T& a, const T& b) + { + return a < b ? b : a; + } + + //! returns maximum of three values. Own implementation to get rid of the STL (VS6 problems) + template + inline const T& max_(const T& a, const T& b, const T& c) + { + return a < b ? max_(b, c) : max_(a, c); + } + + //! returns abs of two values. Own implementation to get rid of STL (VS6 problems) + template + inline T abs_(const T& a) + { + return a < (T)0 ? -a : a; + } + + //! returns linear interpolation of a and b with ratio t + //! \return: a if t==0, b if t==1, and the linear interpolation else + template + inline T lerp(const T& a, const T& b, const f32 t) + { + return (T)(a*(1.f-t)) + (b*t); + } + + //! clamps a value between low and high + template + inline const T clamp (const T& value, const T& low, const T& high) + { + return min_ (max_(value,low), high); + } + + //! swaps the content of the passed parameters + // Note: We use the same trick as boost and use two template arguments to + // avoid ambiguity when swapping objects of an Irrlicht type that has not + // it's own swap overload. Otherwise we get conflicts with some compilers + // in combination with stl. + template + inline void swap(T1& a, T2& b) + { + T1 c(a); + a = b; + b = c; + } + + //! returns if a equals b, taking possible rounding errors into account + inline bool equals(const f64 a, const f64 b, const f64 tolerance = ROUNDING_ERROR_f64) + { + return (a + tolerance >= b) && (a - tolerance <= b); + } + + //! returns if a equals b, taking possible rounding errors into account + inline bool equals(const f32 a, const f32 b, const f32 tolerance = ROUNDING_ERROR_f32) + { + return (a + tolerance >= b) && (a - tolerance <= b); + } + + union FloatIntUnion32 + { + FloatIntUnion32(float f1 = 0.0f) : f(f1) {} + // Portable sign-extraction + bool sign() const { return (i >> 31) != 0; } + + irr::s32 i; + irr::f32 f; + }; + + //! We compare the difference in ULP's (spacing between floating-point numbers, aka ULP=1 means there exists no float between). + //\result true when numbers have a ULP <= maxUlpDiff AND have the same sign. + inline bool equalsByUlp(f32 a, f32 b, int maxUlpDiff) + { + // Based on the ideas and code from Bruce Dawson on + // http://www.altdevblogaday.com/2012/02/22/comparing-floating-point-numbers-2012-edition/ + // When floats are interpreted as integers the two nearest possible float numbers differ just + // by one integer number. Also works the other way round, an integer of 1 interpreted as float + // is for example the smallest possible float number. + + FloatIntUnion32 fa(a); + FloatIntUnion32 fb(b); + + // Different signs, we could maybe get difference to 0, but so close to 0 using epsilons is better. + if ( fa.sign() != fb.sign() ) + { + // Check for equality to make sure +0==-0 + if (fa.i == fb.i) + return true; + return false; + } + + // Find the difference in ULPs. + int ulpsDiff = abs_(fa.i- fb.i); + if (ulpsDiff <= maxUlpDiff) + return true; + + return false; + } + +#if 0 + //! returns if a equals b, not using any rounding tolerance + inline bool equals(const s32 a, const s32 b) + { + return (a == b); + } + + //! returns if a equals b, not using any rounding tolerance + inline bool equals(const u32 a, const u32 b) + { + return (a == b); + } +#endif + //! returns if a equals b, taking an explicit rounding tolerance into account + inline bool equals(const s32 a, const s32 b, const s32 tolerance = ROUNDING_ERROR_S32) + { + return (a + tolerance >= b) && (a - tolerance <= b); + } + + //! returns if a equals b, taking an explicit rounding tolerance into account + inline bool equals(const u32 a, const u32 b, const s32 tolerance = ROUNDING_ERROR_S32) + { + return (a + tolerance >= b) && (a - tolerance <= b); + } + +#ifdef __IRR_HAS_S64 + //! returns if a equals b, taking an explicit rounding tolerance into account + inline bool equals(const s64 a, const s64 b, const s64 tolerance = ROUNDING_ERROR_S64) + { + return (a + tolerance >= b) && (a - tolerance <= b); + } +#endif + + //! returns if a equals zero, taking rounding errors into account + inline bool iszero(const f64 a, const f64 tolerance = ROUNDING_ERROR_f64) + { + return fabs(a) <= tolerance; + } + + //! returns if a equals zero, taking rounding errors into account + inline bool iszero(const f32 a, const f32 tolerance = ROUNDING_ERROR_f32) + { + return fabsf(a) <= tolerance; + } + + //! returns if a equals not zero, taking rounding errors into account + inline bool isnotzero(const f32 a, const f32 tolerance = ROUNDING_ERROR_f32) + { + return fabsf(a) > tolerance; + } + + //! returns if a equals zero, taking rounding errors into account + inline bool iszero(const s32 a, const s32 tolerance = 0) + { + return ( a & 0x7ffffff ) <= tolerance; + } + + //! returns if a equals zero, taking rounding errors into account + inline bool iszero(const u32 a, const u32 tolerance = 0) + { + return a <= tolerance; + } + +#ifdef __IRR_HAS_S64 + //! returns if a equals zero, taking rounding errors into account + inline bool iszero(const s64 a, const s64 tolerance = 0) + { + return abs_(a) <= tolerance; + } +#endif + + inline s32 s32_min(s32 a, s32 b) + { + const s32 mask = (a - b) >> 31; + return (a & mask) | (b & ~mask); + } + + inline s32 s32_max(s32 a, s32 b) + { + const s32 mask = (a - b) >> 31; + return (b & mask) | (a & ~mask); + } + + inline s32 s32_clamp (s32 value, s32 low, s32 high) + { + return s32_min(s32_max(value,low), high); + } + + /* + float IEEE-754 bit represenation + + 0 0x00000000 + 1.0 0x3f800000 + 0.5 0x3f000000 + 3 0x40400000 + +inf 0x7f800000 + -inf 0xff800000 + +NaN 0x7fc00000 or 0x7ff00000 + in general: number = (sign ? -1:1) * 2^(exponent) * 1.(mantissa bits) + */ + + typedef union { u32 u; s32 s; f32 f; } inttofloat; + + #define F32_AS_S32(f) (*((s32 *) &(f))) + #define F32_AS_U32(f) (*((u32 *) &(f))) + #define F32_AS_U32_POINTER(f) ( ((u32 *) &(f))) + + #define F32_VALUE_0 0x00000000 + #define F32_VALUE_1 0x3f800000 + #define F32_SIGN_BIT 0x80000000U + #define F32_EXPON_MANTISSA 0x7FFFFFFFU + + //! code is taken from IceFPU + //! Integer representation of a floating-point value. +#ifdef IRRLICHT_FAST_MATH + #define IR(x) ((u32&)(x)) +#else + inline u32 IR(f32 x) {inttofloat tmp; tmp.f=x; return tmp.u;} +#endif + + //! Absolute integer representation of a floating-point value + #define AIR(x) (IR(x)&0x7fffffff) + + //! Floating-point representation of an integer value. +#ifdef IRRLICHT_FAST_MATH + #define FR(x) ((f32&)(x)) +#else + inline f32 FR(u32 x) {inttofloat tmp; tmp.u=x; return tmp.f;} + inline f32 FR(s32 x) {inttofloat tmp; tmp.s=x; return tmp.f;} +#endif + + //! integer representation of 1.0 + #define IEEE_1_0 0x3f800000 + //! integer representation of 255.0 + #define IEEE_255_0 0x437f0000 + +#ifdef IRRLICHT_FAST_MATH + #define F32_LOWER_0(f) (F32_AS_U32(f) > F32_SIGN_BIT) + #define F32_LOWER_EQUAL_0(f) (F32_AS_S32(f) <= F32_VALUE_0) + #define F32_GREATER_0(f) (F32_AS_S32(f) > F32_VALUE_0) + #define F32_GREATER_EQUAL_0(f) (F32_AS_U32(f) <= F32_SIGN_BIT) + #define F32_EQUAL_1(f) (F32_AS_U32(f) == F32_VALUE_1) + #define F32_EQUAL_0(f) ( (F32_AS_U32(f) & F32_EXPON_MANTISSA ) == F32_VALUE_0) + + // only same sign + #define F32_A_GREATER_B(a,b) (F32_AS_S32((a)) > F32_AS_S32((b))) + +#else + + #define F32_LOWER_0(n) ((n) < 0.0f) + #define F32_LOWER_EQUAL_0(n) ((n) <= 0.0f) + #define F32_GREATER_0(n) ((n) > 0.0f) + #define F32_GREATER_EQUAL_0(n) ((n) >= 0.0f) + #define F32_EQUAL_1(n) ((n) == 1.0f) + #define F32_EQUAL_0(n) ((n) == 0.0f) + #define F32_A_GREATER_B(a,b) ((a) > (b)) +#endif + + +#ifndef REALINLINE + #ifdef _MSC_VER + #define REALINLINE __forceinline + #else + #define REALINLINE inline + #endif +#endif + +#if defined(__BORLANDC__) || defined (__BCPLUSPLUS__) + + // 8-bit bools in borland builder + + //! conditional set based on mask and arithmetic shift + REALINLINE u32 if_c_a_else_b ( const c8 condition, const u32 a, const u32 b ) + { + return ( ( -condition >> 7 ) & ( a ^ b ) ) ^ b; + } + + //! conditional set based on mask and arithmetic shift + REALINLINE u32 if_c_a_else_0 ( const c8 condition, const u32 a ) + { + return ( -condition >> 31 ) & a; + } +#else + + //! conditional set based on mask and arithmetic shift + REALINLINE u32 if_c_a_else_b ( const s32 condition, const u32 a, const u32 b ) + { + return ( ( -condition >> 31 ) & ( a ^ b ) ) ^ b; + } + + //! conditional set based on mask and arithmetic shift + REALINLINE u16 if_c_a_else_b ( const s16 condition, const u16 a, const u16 b ) + { + return ( ( -condition >> 15 ) & ( a ^ b ) ) ^ b; + } + + //! conditional set based on mask and arithmetic shift + REALINLINE u32 if_c_a_else_0 ( const s32 condition, const u32 a ) + { + return ( -condition >> 31 ) & a; + } +#endif + + /* + if (condition) state |= m; else state &= ~m; + */ + REALINLINE void setbit_cond ( u32 &state, s32 condition, u32 mask ) + { + // 0, or any postive to mask + //s32 conmask = -condition >> 31; + state ^= ( ( -condition >> 31 ) ^ state ) & mask; + } + + inline f32 round_( f32 x ) + { + return floorf( x + 0.5f ); + } + + REALINLINE void clearFPUException () + { +#ifdef IRRLICHT_FAST_MATH + return; +#ifdef feclearexcept + feclearexcept(FE_ALL_EXCEPT); +#elif defined(_MSC_VER) + __asm fnclex; +#elif defined(__GNUC__) && defined(__x86__) + __asm__ __volatile__ ("fclex \n\t"); +#else +# warn clearFPUException not supported. +#endif +#endif + } + + // calculate: sqrt ( x ) + REALINLINE f32 squareroot(const f32 f) + { + return sqrtf(f); + } + + // calculate: sqrt ( x ) + REALINLINE f64 squareroot(const f64 f) + { + return sqrt(f); + } + + // calculate: sqrt ( x ) + REALINLINE s32 squareroot(const s32 f) + { + return static_cast(squareroot(static_cast(f))); + } + +#ifdef __IRR_HAS_S64 + // calculate: sqrt ( x ) + REALINLINE s64 squareroot(const s64 f) + { + return static_cast(squareroot(static_cast(f))); + } +#endif + + // calculate: 1 / sqrt ( x ) + REALINLINE f64 reciprocal_squareroot(const f64 x) + { + return 1.0 / sqrt(x); + } + + // calculate: 1 / sqrtf ( x ) + REALINLINE f32 reciprocal_squareroot(const f32 f) + { +#if defined ( IRRLICHT_FAST_MATH ) + #if defined(_MSC_VER) + // SSE reciprocal square root estimate, accurate to 12 significant + // bits of the mantissa + f32 recsqrt; + __asm rsqrtss xmm0, f // xmm0 = rsqrtss(f) + __asm movss recsqrt, xmm0 // return xmm0 + return recsqrt; + +/* + // comes from Nvidia + u32 tmp = (u32(IEEE_1_0 << 1) + IEEE_1_0 - *(u32*)&x) >> 1; + f32 y = *(f32*)&tmp; + return y * (1.47f - 0.47f * x * y * y); +*/ + #else + return 1.f / sqrtf(f); + #endif +#else // no fast math + return 1.f / sqrtf(f); +#endif + } + + // calculate: 1 / sqrtf( x ) + REALINLINE s32 reciprocal_squareroot(const s32 x) + { + return static_cast(reciprocal_squareroot(static_cast(x))); + } + + // calculate: 1 / x + REALINLINE f32 reciprocal( const f32 f ) + { +#if defined (IRRLICHT_FAST_MATH) + + // SSE Newton-Raphson reciprocal estimate, accurate to 23 significant + // bi ts of the mantissa + // One Newtown-Raphson Iteration: + // f(i+1) = 2 * rcpss(f) - f * rcpss(f) * rcpss(f) + f32 rec; + __asm rcpss xmm0, f // xmm0 = rcpss(f) + __asm movss xmm1, f // xmm1 = f + __asm mulss xmm1, xmm0 // xmm1 = f * rcpss(f) + __asm mulss xmm1, xmm0 // xmm2 = f * rcpss(f) * rcpss(f) + __asm addss xmm0, xmm0 // xmm0 = 2 * rcpss(f) + __asm subss xmm0, xmm1 // xmm0 = 2 * rcpss(f) + // - f * rcpss(f) * rcpss(f) + __asm movss rec, xmm0 // return xmm0 + return rec; + + + //! i do not divide through 0.. (fpu expection) + // instead set f to a high value to get a return value near zero.. + // -1000000000000.f.. is use minus to stay negative.. + // must test's here (plane.normal dot anything ) checks on <= 0.f + //u32 x = (-(AIR(f) != 0 ) >> 31 ) & ( IR(f) ^ 0xd368d4a5 ) ^ 0xd368d4a5; + //return 1.f / FR ( x ); + +#else // no fast math + return 1.f / f; +#endif + } + + // calculate: 1 / x + REALINLINE f64 reciprocal ( const f64 f ) + { + return 1.0 / f; + } + + + // calculate: 1 / x, low precision allowed + REALINLINE f32 reciprocal_approxim ( const f32 f ) + { +#if defined( IRRLICHT_FAST_MATH) + + // SSE Newton-Raphson reciprocal estimate, accurate to 23 significant + // bi ts of the mantissa + // One Newtown-Raphson Iteration: + // f(i+1) = 2 * rcpss(f) - f * rcpss(f) * rcpss(f) + f32 rec; + __asm rcpss xmm0, f // xmm0 = rcpss(f) + __asm movss xmm1, f // xmm1 = f + __asm mulss xmm1, xmm0 // xmm1 = f * rcpss(f) + __asm mulss xmm1, xmm0 // xmm2 = f * rcpss(f) * rcpss(f) + __asm addss xmm0, xmm0 // xmm0 = 2 * rcpss(f) + __asm subss xmm0, xmm1 // xmm0 = 2 * rcpss(f) + // - f * rcpss(f) * rcpss(f) + __asm movss rec, xmm0 // return xmm0 + return rec; + + +/* + // SSE reciprocal estimate, accurate to 12 significant bits of + f32 rec; + __asm rcpss xmm0, f // xmm0 = rcpss(f) + __asm movss rec , xmm0 // return xmm0 + return rec; +*/ +/* + register u32 x = 0x7F000000 - IR ( p ); + const f32 r = FR ( x ); + return r * (2.0f - p * r); +*/ +#else // no fast math + return 1.f / f; +#endif + } + + + REALINLINE s32 floor32(f32 x) + { +#ifdef IRRLICHT_FAST_MATH + const f32 h = 0.5f; + + s32 t; + +#if defined(_MSC_VER) + __asm + { + fld x + fsub h + fistp t + } +#elif defined(__GNUC__) + __asm__ __volatile__ ( + "fsub %2 \n\t" + "fistpl %0" + : "=m" (t) + : "t" (x), "f" (h) + : "st" + ); +#else +# warn IRRLICHT_FAST_MATH not supported. + return (s32) floorf ( x ); +#endif + return t; +#else // no fast math + return (s32) floorf ( x ); +#endif + } + + + REALINLINE s32 ceil32 ( f32 x ) + { +#ifdef IRRLICHT_FAST_MATH + const f32 h = 0.5f; + + s32 t; + +#if defined(_MSC_VER) + __asm + { + fld x + fadd h + fistp t + } +#elif defined(__GNUC__) + __asm__ __volatile__ ( + "fadd %2 \n\t" + "fistpl %0 \n\t" + : "=m"(t) + : "t"(x), "f"(h) + : "st" + ); +#else +# warn IRRLICHT_FAST_MATH not supported. + return (s32) ceilf ( x ); +#endif + return t; +#else // not fast math + return (s32) ceilf ( x ); +#endif + } + + + + REALINLINE s32 round32(f32 x) + { +#if defined(IRRLICHT_FAST_MATH) + s32 t; + +#if defined(_MSC_VER) + __asm + { + fld x + fistp t + } +#elif defined(__GNUC__) + __asm__ __volatile__ ( + "fistpl %0 \n\t" + : "=m"(t) + : "t"(x) + : "st" + ); +#else +# warn IRRLICHT_FAST_MATH not supported. + return (s32) round_(x); +#endif + return t; +#else // no fast math + return (s32) round_(x); +#endif + } + + inline f32 f32_max3(const f32 a, const f32 b, const f32 c) + { + return a > b ? (a > c ? a : c) : (b > c ? b : c); + } + + inline f32 f32_min3(const f32 a, const f32 b, const f32 c) + { + return a < b ? (a < c ? a : c) : (b < c ? b : c); + } + + inline f32 fract ( f32 x ) + { + return x - floorf ( x ); + } + +} // end namespace core +} // end namespace irr + +#ifndef IRRLICHT_FAST_MATH + using irr::core::IR; + using irr::core::FR; +#endif + +#endif + diff --git a/inc/irrString.h b/inc/irrString.h new file mode 100644 index 0000000..752ea1a --- /dev/null +++ b/inc/irrString.h @@ -0,0 +1,1368 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine" and the "irrXML" project. +// For conditions of distribution and use, see copyright notice in irrlicht.h and irrXML.h + +#ifndef __IRR_STRING_H_INCLUDED__ +#define __IRR_STRING_H_INCLUDED__ + +#include "irrTypes.h" +#include "irrAllocator.h" +#include "irrMath.h" +#include +#include +#include + +namespace irr +{ +namespace core +{ + +//! Very simple string class with some useful features. +/** string and string both accept Unicode AND ASCII/Latin-1, +so you can assign Unicode to string and ASCII/Latin-1 to string +(and the other way round) if you want to. + +However, note that the conversation between both is not done using any encoding. +This means that c8 strings are treated as ASCII/Latin-1, not UTF-8, and +are simply expanded to the equivalent wchar_t, while Unicode/wchar_t +characters are truncated to 8-bit ASCII/Latin-1 characters, discarding all +other information in the wchar_t. +*/ + +enum eLocaleID +{ + IRR_LOCALE_ANSI = 0, + IRR_LOCALE_GERMAN = 1 +}; + +static eLocaleID locale_current = IRR_LOCALE_ANSI; +static inline void locale_set ( eLocaleID id ) +{ + locale_current = id; +} + +//! Returns a character converted to lower case +static inline u32 locale_lower ( u32 x ) +{ + switch ( locale_current ) + { + case IRR_LOCALE_GERMAN: + case IRR_LOCALE_ANSI: + break; + } + // ansi + return x >= 'A' && x <= 'Z' ? x + 0x20 : x; +} + +//! Returns a character converted to upper case +static inline u32 locale_upper ( u32 x ) +{ + switch ( locale_current ) + { + case IRR_LOCALE_GERMAN: + case IRR_LOCALE_ANSI: + break; + } + + // ansi + return x >= 'a' && x <= 'z' ? x + ( 'A' - 'a' ) : x; +} + + +template > +class string +{ +public: + + typedef T char_type; + + //! Default constructor + string() + : array(0), allocated(1), used(1) + { + array = allocator.allocate(1); // new T[1]; + array[0] = 0; + } + + + //! Constructor + string(const string& other) + : array(0), allocated(0), used(0) + { + *this = other; + } + + //! Constructor from other string types + template + string(const string& other) + : array(0), allocated(0), used(0) + { + *this = other; + } + + + //! Constructs a string from a float + explicit string(const double number) + : array(0), allocated(0), used(0) + { + c8 tmpbuf[255]; + snprintf(tmpbuf, 255, "%0.6f", number); + *this = tmpbuf; + } + + + //! Constructs a string from an int + explicit string(int number) + : array(0), allocated(0), used(0) + { + // store if negative and make positive + + bool negative = false; + if (number < 0) + { + number *= -1; + negative = true; + } + + // temporary buffer for 16 numbers + + c8 tmpbuf[16]={0}; + u32 idx = 15; + + // special case '0' + + if (!number) + { + tmpbuf[14] = '0'; + *this = &tmpbuf[14]; + return; + } + + // add numbers + + while(number && idx) + { + --idx; + tmpbuf[idx] = (c8)('0' + (number % 10)); + number /= 10; + } + + // add sign + + if (negative) + { + --idx; + tmpbuf[idx] = '-'; + } + + *this = &tmpbuf[idx]; + } + + + //! Constructs a string from an unsigned int + explicit string(unsigned int number) + : array(0), allocated(0), used(0) + { + // temporary buffer for 16 numbers + + c8 tmpbuf[16]={0}; + u32 idx = 15; + + // special case '0' + + if (!number) + { + tmpbuf[14] = '0'; + *this = &tmpbuf[14]; + return; + } + + // add numbers + + while(number && idx) + { + --idx; + tmpbuf[idx] = (c8)('0' + (number % 10)); + number /= 10; + } + + *this = &tmpbuf[idx]; + } + + + //! Constructs a string from a long + explicit string(long number) + : array(0), allocated(0), used(0) + { + // store if negative and make positive + + bool negative = false; + if (number < 0) + { + number *= -1; + negative = true; + } + + // temporary buffer for 16 numbers + + c8 tmpbuf[16]={0}; + u32 idx = 15; + + // special case '0' + + if (!number) + { + tmpbuf[14] = '0'; + *this = &tmpbuf[14]; + return; + } + + // add numbers + + while(number && idx) + { + --idx; + tmpbuf[idx] = (c8)('0' + (number % 10)); + number /= 10; + } + + // add sign + + if (negative) + { + --idx; + tmpbuf[idx] = '-'; + } + + *this = &tmpbuf[idx]; + } + + + //! Constructs a string from an unsigned long + explicit string(unsigned long number) + : array(0), allocated(0), used(0) + { + // temporary buffer for 16 numbers + + c8 tmpbuf[16]={0}; + u32 idx = 15; + + // special case '0' + + if (!number) + { + tmpbuf[14] = '0'; + *this = &tmpbuf[14]; + return; + } + + // add numbers + + while(number && idx) + { + --idx; + tmpbuf[idx] = (c8)('0' + (number % 10)); + number /= 10; + } + + *this = &tmpbuf[idx]; + } + + + //! Constructor for copying a string from a pointer with a given length + template + string(const B* const c, u32 length) + : array(0), allocated(0), used(0) + { + if (!c) + { + // correctly init the string to an empty one + *this=""; + return; + } + + allocated = used = length+1; + array = allocator.allocate(used); // new T[used]; + + for (u32 l = 0; l + string(const B* const c) + : array(0), allocated(0), used(0) + { + *this = c; + } + + + //! Destructor + ~string() + { + allocator.deallocate(array); // delete [] array; + } + + + //! Assignment operator + string& operator=(const string& other) + { + if (this == &other) + return *this; + + used = other.size()+1; + if (used>allocated) + { + allocator.deallocate(array); // delete [] array; + allocated = used; + array = allocator.allocate(used); //new T[used]; + } + + const T* p = other.c_str(); + for (u32 i=0; i + string& operator=(const string& other) + { + *this = other.c_str(); + return *this; + } + + + //! Assignment operator for strings, ascii and unicode + template + string& operator=(const B* const c) + { + if (!c) + { + if (!array) + { + array = allocator.allocate(1); //new T[1]; + allocated = 1; + } + used = 1; + array[0] = 0x0; + return *this; + } + + if ((void*)c == (void*)array) + return *this; + + u32 len = 0; + const B* p = c; + do + { + ++len; + } while(*p++); + + // we'll keep the old string for a while, because the new + // string could be a part of the current string. + T* oldArray = array; + + used = len; + if (used>allocated) + { + allocated = used; + array = allocator.allocate(used); //new T[used]; + } + + for (u32 l = 0; l operator+(const string& other) const + { + string str(*this); + str.append(other); + + return str; + } + + + //! Append operator for strings, ascii and unicode + template + string operator+(const B* const c) const + { + string str(*this); + str.append(c); + + return str; + } + + + //! Direct access operator + T& operator [](const u32 index) + { + _IRR_DEBUG_BREAK_IF(index>=used) // bad index + return array[index]; + } + + + //! Direct access operator + const T& operator [](const u32 index) const + { + _IRR_DEBUG_BREAK_IF(index>=used) // bad index + return array[index]; + } + + + //! Equality operator + bool operator==(const T* const str) const + { + if (!str) + return false; + + u32 i; + for (i=0; array[i] && str[i]; ++i) + if (array[i] != str[i]) + return false; + + return (!array[i] && !str[i]); + } + + + //! Equality operator + bool operator==(const string& other) const + { + for (u32 i=0; array[i] && other.array[i]; ++i) + if (array[i] != other.array[i]) + return false; + + return used == other.used; + } + + + //! Is smaller comparator + bool operator<(const string& other) const + { + for (u32 i=0; array[i] && other.array[i]; ++i) + { + const s32 diff = array[i] - other.array[i]; + if (diff) + return (diff < 0); + } + + return (used < other.used); + } + + + //! Inequality operator + bool operator!=(const T* const str) const + { + return !(*this == str); + } + + + //! Inequality operator + bool operator!=(const string& other) const + { + return !(*this == other); + } + + + //! Returns length of the string's content + /** \return Length of the string's content in characters, excluding + the trailing NUL. */ + u32 size() const + { + return used-1; + } + + //! Informs if the string is empty or not. + //! \return True if the string is empty, false if not. + bool empty() const + { + return (size() == 0); + } + + //! Returns character string + /** \return pointer to C-style NUL terminated string. */ + const T* c_str() const + { + return array; + } + + + //! Makes the string lower case. + string& make_lower() + { + for (u32 i=0; array[i]; ++i) + array[i] = locale_lower ( array[i] ); + return *this; + } + + + //! Makes the string upper case. + string& make_upper() + { + for (u32 i=0; array[i]; ++i) + array[i] = locale_upper ( array[i] ); + return *this; + } + + + //! Compares the strings ignoring case. + /** \param other: Other string to compare. + \return True if the strings are equal ignoring case. */ + bool equals_ignore_case(const string& other) const + { + for(u32 i=0; array[i] && other[i]; ++i) + if (locale_lower( array[i]) != locale_lower(other[i])) + return false; + + return used == other.used; + } + + //! Compares the strings ignoring case. + /** \param other: Other string to compare. + \param sourcePos: where to start to compare in the string + \return True if the strings are equal ignoring case. */ + bool equals_substring_ignore_case(const string&other, const s32 sourcePos = 0 ) const + { + if ( (u32) sourcePos >= used ) + return false; + + u32 i; + for( i=0; array[sourcePos + i] && other[i]; ++i) + if (locale_lower( array[sourcePos + i]) != locale_lower(other[i])) + return false; + + return array[sourcePos + i] == 0 && other[i] == 0; + } + + + //! Compares the strings ignoring case. + /** \param other: Other string to compare. + \return True if this string is smaller ignoring case. */ + bool lower_ignore_case(const string& other) const + { + for(u32 i=0; array[i] && other.array[i]; ++i) + { + s32 diff = (s32) locale_lower ( array[i] ) - (s32) locale_lower ( other.array[i] ); + if ( diff ) + return diff < 0; + } + + return used < other.used; + } + + + //! compares the first n characters of the strings + /** \param other Other string to compare. + \param n Number of characters to compare + \return True if the n first characters of both strings are equal. */ + bool equalsn(const string& other, u32 n) const + { + u32 i; + for(i=0; array[i] && other[i] && i < n; ++i) + if (array[i] != other[i]) + return false; + + // if one (or both) of the strings was smaller then they + // are only equal if they have the same length + return (i == n) || (used == other.used); + } + + + //! compares the first n characters of the strings + /** \param str Other string to compare. + \param n Number of characters to compare + \return True if the n first characters of both strings are equal. */ + bool equalsn(const T* const str, u32 n) const + { + if (!str) + return false; + u32 i; + for(i=0; array[i] && str[i] && i < n; ++i) + if (array[i] != str[i]) + return false; + + // if one (or both) of the strings was smaller then they + // are only equal if they have the same length + return (i == n) || (array[i] == 0 && str[i] == 0); + } + + + //! Appends a character to this string + /** \param character: Character to append. */ + string& append(T character) + { + if (used + 1 > allocated) + reallocate(used + 1); + + ++used; + + array[used-2] = character; + array[used-1] = 0; + + return *this; + } + + + //! Appends a char string to this string + /** \param other: Char string to append. */ + /** \param length: The length of the string to append. */ + string& append(const T* const other, u32 length=0xffffffff) + { + if (!other) + return *this; + + u32 len = 0; + const T* p = other; + while(*p) + { + ++len; + ++p; + } + if (len > length) + len = length; + + if (used + len > allocated) + reallocate(used + len); + + --used; + ++len; + + for (u32 l=0; l& append(const string& other) + { + if (other.size() == 0) + return *this; + + --used; + u32 len = other.size()+1; + + if (used + len > allocated) + reallocate(used + len); + + for (u32 l=0; l& append(const string& other, u32 length) + { + if (other.size() == 0) + return *this; + + if (other.size() < length) + { + append(other); + return *this; + } + + if (used + length > allocated) + reallocate(used + length); + + --used; + + for (u32 l=0; l + s32 findFirstCharNotInList(const B* const c, u32 count=1) const + { + if (!c || !count) + return -1; + + for (u32 i=0; i + s32 findLastCharNotInList(const B* const c, u32 count=1) const + { + if (!c || !count) + return -1; + + for (s32 i=(s32)(used-2); i>=0; --i) + { + u32 j; + for (j=0; j=0; --i) + if (array[i] == c) + return i; + + return -1; + } + + //! finds last occurrence of a character of a list in string + /** \param c: List of strings to find. For example if the method + should find the last occurrence of 'a' or 'b', this parameter should be "ab". + \param count: Amount of characters in the list. Usually, + this should be strlen(c) + \return Position where one of the characters has been found, + or -1 if not found. */ + s32 findLastChar(const T* const c, u32 count=1) const + { + if (!c || !count) + return -1; + + for (s32 i=(s32)used-2; i>=0; --i) + for (u32 j=0; j + s32 find(const B* const str, const u32 start = 0) const + { + if (str && *str) + { + u32 len = 0; + + while (str[len]) + ++len; + + if (len > used-1) + return -1; + + for (u32 i=start; i subString(u32 begin, s32 length, bool make_lower = false ) const + { + // if start after string + // or no proper substring length + if ((length <= 0) || (begin>=size())) + return string(""); + // clamp length to maximal value + if ((length+begin) > size()) + length = size()-begin; + + string o; + o.reserve(length+1); + + s32 i; + if ( !make_lower ) + { + for (i=0; i& operator += (T c) + { + append(c); + return *this; + } + + + //! Appends a char string to this string + /** \param c Char string to append. */ + string& operator += (const T* const c) + { + append(c); + return *this; + } + + + //! Appends a string to this string + /** \param other String to append. */ + string& operator += (const string& other) + { + append(other); + return *this; + } + + + //! Appends a string representation of a number to this string + /** \param i Number to append. */ + string& operator += (const int i) + { + append(string(i)); + return *this; + } + + + //! Appends a string representation of a number to this string + /** \param i Number to append. */ + string& operator += (const unsigned int i) + { + append(string(i)); + return *this; + } + + + //! Appends a string representation of a number to this string + /** \param i Number to append. */ + string& operator += (const long i) + { + append(string(i)); + return *this; + } + + + //! Appends a string representation of a number to this string + /** \param i Number to append. */ + string& operator += (const unsigned long i) + { + append(string(i)); + return *this; + } + + + //! Appends a string representation of a number to this string + /** \param i Number to append. */ + string& operator += (const double i) + { + append(string(i)); + return *this; + } + + + //! Appends a string representation of a number to this string + /** \param i Number to append. */ + string& operator += (const float i) + { + append(string(i)); + return *this; + } + + + //! Replaces all characters of a special type with another one + /** \param toReplace Character to replace. + \param replaceWith Character replacing the old one. */ + string& replace(T toReplace, T replaceWith) + { + for (u32 i=0; i& replace(const string& toReplace, const string& replaceWith) + { + if (toReplace.size() == 0) + return *this; + + const T* other = toReplace.c_str(); + const T* replace = replaceWith.c_str(); + const u32 other_size = toReplace.size(); + const u32 replace_size = replaceWith.size(); + + // Determine the delta. The algorithm will change depending on the delta. + s32 delta = replace_size - other_size; + + // A character for character replace. The string will not shrink or grow. + if (delta == 0) + { + s32 pos = 0; + while ((pos = find(other, pos)) != -1) + { + for (u32 i = 0; i < replace_size; ++i) + array[pos + i] = replace[i]; + ++pos; + } + return *this; + } + + // We are going to be removing some characters. The string will shrink. + if (delta < 0) + { + u32 i = 0; + for (u32 pos = 0; pos < used; ++i, ++pos) + { + // Is this potentially a match? + if (array[pos] == *other) + { + // Check to see if we have a match. + u32 j; + for (j = 0; j < other_size; ++j) + { + if (array[pos + j] != other[j]) + break; + } + + // If we have a match, replace characters. + if (j == other_size) + { + for (j = 0; j < replace_size; ++j) + array[i + j] = replace[j]; + i += replace_size - 1; + pos += other_size - 1; + continue; + } + } + + // No match found, just copy characters. + array[i] = array[pos]; + } + array[i-1] = 0; + used = i; + + return *this; + } + + // We are going to be adding characters, so the string size will increase. + // Count the number of times toReplace exists in the string so we can allocate the new size. + u32 find_count = 0; + s32 pos = 0; + while ((pos = find(other, pos)) != -1) + { + ++find_count; + ++pos; + } + + // Re-allocate the string now, if needed. + u32 len = delta * find_count; + if (used + len > allocated) + reallocate(used + len); + + // Start replacing. + pos = 0; + while ((pos = find(other, pos)) != -1) + { + T* start = array + pos + other_size - 1; + T* ptr = array + used - 1; + T* end = array + delta + used -1; + + // Shift characters to make room for the string. + while (ptr != start) + { + *end = *ptr; + --ptr; + --end; + } + + // Add the new string now. + for (u32 i = 0; i < replace_size; ++i) + array[pos + i] = replace[i]; + + pos += replace_size; + used += delta; + } + + return *this; + } + + + //! Removes characters from a string. + /** \param c: Character to remove. */ + string& remove(T c) + { + u32 pos = 0; + u32 found = 0; + for (u32 i=0; i& remove(const string& toRemove) + { + u32 size = toRemove.size(); + if ( size == 0 ) + return *this; + u32 pos = 0; + u32 found = 0; + for (u32 i=0; i& removeChars(const string & characters) + { + if (characters.size() == 0) + return *this; + + u32 pos = 0; + u32 found = 0; + for (u32 i=0; i& trim(const string & whitespace = " \t\n\r") + { + // find start and end of the substring without the specified characters + const s32 begin = findFirstCharNotInList(whitespace.c_str(), whitespace.used); + if (begin == -1) + return (*this=""); + + const s32 end = findLastCharNotInList(whitespace.c_str(), whitespace.used); + + return (*this = subString(begin, (end +1) - begin)); + } + + + //! Erases a character from the string. + /** May be slow, because all elements + following after the erased element have to be copied. + \param index: Index of element to be erased. */ + string& erase(u32 index) + { + _IRR_DEBUG_BREAK_IF(index>=used) // access violation + + for (u32 i=index+1; i& validate() + { + // terminate on existing null + for (u32 i=0; i 0 ) + { + used = allocated; + array[used-1] = 0; + } + else + { + used = 0; + } + + return *this; + } + + //! gets the last char of a string or null + T lastChar() const + { + return used > 1 ? array[used-2] : 0; + } + + //! split string into parts. + /** This method will split a string at certain delimiter characters + into the container passed in as reference. The type of the container + has to be given as template parameter. It must provide a push_back and + a size method. + \param ret The result container + \param c C-style string of delimiter characters + \param count Number of delimiter characters + \param ignoreEmptyTokens Flag to avoid empty substrings in the result + container. If two delimiters occur without a character in between, an + empty substring would be placed in the result. If this flag is set, + only non-empty strings are stored. + \param keepSeparators Flag which allows to add the separator to the + result string. If this flag is true, the concatenation of the + substrings results in the original string. Otherwise, only the + characters between the delimiters are returned. + \return The number of resulting substrings + */ + template + u32 split(container& ret, const T* const c, u32 count=1, bool ignoreEmptyTokens=true, bool keepSeparators=false) const + { + if (!c) + return 0; + + const u32 oldSize=ret.size(); + u32 lastpos = 0; + bool lastWasSeparator = false; + for (u32 i=0; i(&array[lastpos], i - lastpos)); + foundSeparator = true; + lastpos = (keepSeparators ? i : i + 1); + break; + } + } + lastWasSeparator = foundSeparator; + } + if ((used - 1) > lastpos) + ret.push_back(string(&array[lastpos], (used - 1) - lastpos)); + return ret.size()-oldSize; + } + +private: + + //! Reallocate the array, make it bigger or smaller + void reallocate(u32 new_size) + { + T* old_array = array; + + array = allocator.allocate(new_size); //new T[new_size]; + allocated = new_size; + + u32 amount = used < new_size ? used : new_size; + for (u32 i=0; i stringc; + +//! Typedef for wide character strings +typedef string stringw; + + +} // end namespace core +} // end namespace irr + +#endif + diff --git a/inc/irrTypes.h b/inc/irrTypes.h new file mode 100644 index 0000000..cfeaf84 --- /dev/null +++ b/inc/irrTypes.h @@ -0,0 +1,250 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __IRR_TYPES_H_INCLUDED__ +#define __IRR_TYPES_H_INCLUDED__ + +#include "IrrCompileConfig.h" + +namespace irr +{ + +//! 8 bit unsigned variable. +/** This is a typedef for unsigned char, it ensures portability of the engine. */ +#if defined(_MSC_VER) || ((__BORLANDC__ >= 0x530) && !defined(__STRICT_ANSI__)) +typedef unsigned __int8 u8; +#else +typedef unsigned char u8; +#endif + +//! 8 bit signed variable. +/** This is a typedef for signed char, it ensures portability of the engine. */ +#if defined(_MSC_VER) || ((__BORLANDC__ >= 0x530) && !defined(__STRICT_ANSI__)) +typedef __int8 s8; +#else +typedef signed char s8; +#endif + +//! 8 bit character variable. +/** This is a typedef for char, it ensures portability of the engine. */ +typedef char c8; + + + +//! 16 bit unsigned variable. +/** This is a typedef for unsigned short, it ensures portability of the engine. */ +#if defined(_MSC_VER) || ((__BORLANDC__ >= 0x530) && !defined(__STRICT_ANSI__)) +typedef unsigned __int16 u16; +#else +typedef unsigned short u16; +#endif + +//! 16 bit signed variable. +/** This is a typedef for signed short, it ensures portability of the engine. */ +#if defined(_MSC_VER) || ((__BORLANDC__ >= 0x530) && !defined(__STRICT_ANSI__)) +typedef __int16 s16; +#else +typedef signed short s16; +#endif + + + +//! 32 bit unsigned variable. +/** This is a typedef for unsigned int, it ensures portability of the engine. */ +#if defined(_MSC_VER) || ((__BORLANDC__ >= 0x530) && !defined(__STRICT_ANSI__)) +typedef unsigned __int32 u32; +#else +typedef unsigned int u32; +#endif + +//! 32 bit signed variable. +/** This is a typedef for signed int, it ensures portability of the engine. */ +#if defined(_MSC_VER) || ((__BORLANDC__ >= 0x530) && !defined(__STRICT_ANSI__)) +typedef __int32 s32; +#else +typedef signed int s32; +#endif + + +#ifdef __IRR_HAS_S64 +//! 64 bit unsigned variable. +/** This is a typedef for 64bit uint, it ensures portability of the engine. */ +#if defined(_MSC_VER) || ((__BORLANDC__ >= 0x530) && !defined(__STRICT_ANSI__)) +typedef unsigned __int64 u64; +#elif __GNUC__ +#if __WORDSIZE == 64 +typedef unsigned long int u64; +#else +__extension__ typedef unsigned long long u64; +#endif +#else +typedef unsigned long long u64; +#endif + +//! 64 bit signed variable. +/** This is a typedef for 64bit int, it ensures portability of the engine. */ +#if defined(_MSC_VER) || ((__BORLANDC__ >= 0x530) && !defined(__STRICT_ANSI__)) +typedef __int64 s64; +#elif __GNUC__ +#if __WORDSIZE == 64 +typedef long int s64; +#else +__extension__ typedef long long s64; +#endif +#else +typedef long long s64; +#endif +#endif // __IRR_HAS_S64 + + + +//! 32 bit floating point variable. +/** This is a typedef for float, it ensures portability of the engine. */ +typedef float f32; + +//! 64 bit floating point variable. +/** This is a typedef for double, it ensures portability of the engine. */ +typedef double f64; + + +} // end namespace irr + + +#include +#ifdef _IRR_WINDOWS_API_ +//! Defines for s{w,n}printf because these methods do not match the ISO C +//! standard on Windows platforms, but it does on all others. +//! These should be int snprintf(char *str, size_t size, const char *format, ...); +//! and int swprintf(wchar_t *wcs, size_t maxlen, const wchar_t *format, ...); +#if defined(_MSC_VER) && _MSC_VER > 1310 && !defined (_WIN32_WCE) +#define swprintf swprintf_s +#define snprintf sprintf_s +#elif !defined(__CYGWIN__) +#define swprintf _snwprintf +#define snprintf _snprintf +#endif + +// define the wchar_t type if not already built in. +#ifdef _MSC_VER +#ifndef _WCHAR_T_DEFINED +//! A 16 bit wide character type. +/** + Defines the wchar_t-type. + In VS6, its not possible to tell + the standard compiler to treat wchar_t as a built-in type, and + sometimes we just don't want to include the huge stdlib.h or wchar.h, + so we'll use this. +*/ +typedef unsigned short wchar_t; +#define _WCHAR_T_DEFINED +#endif // wchar is not defined +#endif // microsoft compiler +#endif // _IRR_WINDOWS_API_ + +namespace irr +{ + +//! Type name for character type used by the file system. +/** Should the wide character version of the FileSystem be used it is a +16 bit character variable. Used for unicode Filesystem and unicode strings. +Else it is a 8 bit character variable. Used for ansi Filesystem and non-unicode +strings +*/ +#if defined(_IRR_WCHAR_FILESYSTEM) + typedef wchar_t fschar_t; + #define _IRR_TEXT(X) L##X +#else + typedef char fschar_t; + #define _IRR_TEXT(X) X +#endif + +} // end namespace irr + +//! define a break macro for debugging. +#if defined(_DEBUG) +#if defined(_IRR_WINDOWS_API_) && defined(_MSC_VER) && !defined (_WIN32_WCE) + #if defined(WIN64) || defined(_WIN64) // using portable common solution for x64 configuration + #include + #define _IRR_DEBUG_BREAK_IF( _CONDITION_ ) if (_CONDITION_) {_CrtDbgBreak();} + #else + #define _IRR_DEBUG_BREAK_IF( _CONDITION_ ) if (_CONDITION_) {_asm int 3} + #endif +#else +#include "assert.h" +#define _IRR_DEBUG_BREAK_IF( _CONDITION_ ) assert( !(_CONDITION_) ); +#endif +#else +#define _IRR_DEBUG_BREAK_IF( _CONDITION_ ) +#endif + +//! Defines a deprecated macro which generates a warning at compile time +/** The usage is simple +For typedef: typedef _IRR_DEPRECATED_ int test1; +For classes/structs: class _IRR_DEPRECATED_ test2 { ... }; +For methods: class test3 { _IRR_DEPRECATED_ virtual void foo() {} }; +For functions: template _IRR_DEPRECATED_ void test4(void) {} +**/ +#if defined(IGNORE_DEPRECATED_WARNING) +#define _IRR_DEPRECATED_ +#elif _MSC_VER >= 1310 //vs 2003 or higher +#define _IRR_DEPRECATED_ __declspec(deprecated) +#elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) // all versions above 3.0 should support this feature +#define _IRR_DEPRECATED_ __attribute__ ((deprecated)) +#else +#define _IRR_DEPRECATED_ +#endif + +//! Defines a small statement to work around a microsoft compiler bug. +/** The microsoft compiler 7.0 - 7.1 has a bug: +When you call unmanaged code that returns a bool type value of false from managed code, +the return value may appear as true. See +http://support.microsoft.com/default.aspx?kbid=823071 for details. +Compiler version defines: VC6.0 : 1200, VC7.0 : 1300, VC7.1 : 1310, VC8.0 : 1400*/ +#if defined(_IRR_WINDOWS_API_) && defined(_MSC_VER) && (_MSC_VER > 1299) && (_MSC_VER < 1400) +#define _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX __asm mov eax,100 +#else +#define _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX +#endif // _IRR_MANAGED_MARSHALLING_BUGFIX + + +// memory debugging +#if defined(_DEBUG) && defined(IRRLICHT_EXPORTS) && defined(_MSC_VER) && \ + (_MSC_VER > 1299) && !defined(_IRR_DONT_DO_MEMORY_DEBUGGING_HERE) && !defined(_WIN32_WCE) + + #define CRTDBG_MAP_ALLOC + #define _CRTDBG_MAP_ALLOC + #define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__) + #include + #include + #define new DEBUG_CLIENTBLOCK +#endif + +// disable truncated debug information warning in visual studio 6 by default +#if defined(_MSC_VER) && (_MSC_VER < 1300 ) +#pragma warning( disable: 4786) +#endif // _MSC + + +//! ignore VC8 warning deprecated +/** The microsoft compiler */ +#if defined(_IRR_WINDOWS_API_) && defined(_MSC_VER) && (_MSC_VER >= 1400) + //#pragma warning( disable: 4996) + //#define _CRT_SECURE_NO_DEPRECATE 1 + //#define _CRT_NONSTDC_NO_DEPRECATE 1 +#endif + + +//! creates four CC codes used in Irrlicht for simple ids +/** some compilers can create those by directly writing the +code like 'code', but some generate warnings so we use this macro here */ +#define MAKE_IRR_ID(c0, c1, c2, c3) \ + ((irr::u32)(irr::u8)(c0) | ((irr::u32)(irr::u8)(c1) << 8) | \ + ((irr::u32)(irr::u8)(c2) << 16) | ((irr::u32)(irr::u8)(c3) << 24 )) + +#if defined(__BORLANDC__) || defined (__BCPLUSPLUS__) +#define _strcmpi(a,b) strcmpi(a,b) +#endif + +#endif // __IRR_TYPES_H_INCLUDED__ + diff --git a/inc/irrXML.h b/inc/irrXML.h new file mode 100644 index 0000000..2ca2d31 --- /dev/null +++ b/inc/irrXML.h @@ -0,0 +1,575 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine" and the "irrXML" project. +// For conditions of distribution and use, see copyright notice in irrlicht.h and/or irrXML.h + +#ifndef __IRR_XML_H_INCLUDED__ +#define __IRR_XML_H_INCLUDED__ + +#include +#include "IrrCompileConfig.h" + +/** \mainpage irrXML 1.2 API documentation +

+ + \section intro Introduction + + Welcome to the irrXML API documentation. + Here you'll find any information you'll need to develop applications with + irrXML. If you look for a tutorial on how to start, take a look at the \ref irrxmlexample, + at the homepage of irrXML at www.ambiera.com/irrxml/ + or into the SDK in the directory example. + + irrXML is intended to be a high speed and easy-to-use XML Parser for C++, and + this documentation is an important part of it. If you have any questions or + suggestions, just send a email to the author of the engine, Nikolaus Gebhardt + (niko (at) irrlicht3d.org). For more informations about this parser, see \ref history. + + \section features Features + + irrXML provides forward-only, read-only + access to a stream of non validated XML data. It was fully implemented by + Nikolaus Gebhardt. Its current features are: + + - It it fast as lighting and has very low memory usage. It was + developed with the intention of being used in 3D games, as it already has been. + - irrXML is very small: It only consists of 60 KB of code and can be added easily + to your existing project. + - Of course, it is platform independent and works with lots of compilers. + - It is able to parse ASCII, UTF-8, UTF-16 and UTF-32 text files, both in + little and big endian format. + - Independent of the input file format, the parser can return all strings in ASCII, UTF-8, + UTF-16 and UTF-32 format. + - With its optional file access abstraction it has the advantage that it can read not + only from files but from any type of data (memory, network, ...). For example when + used with the Irrlicht Engine, it directly reads from compressed .zip files. + - Just like the Irrlicht Engine for which it was originally created, it is extremely easy + to use. + - It has no external dependencies, it does not even need the STL. + + Although irrXML has some strenghts, it currently also has the following limitations: + + - The input xml file is not validated and assumed to be correct. + + \section irrxmlexample Example + + The following code demonstrates the basic usage of irrXML. A simple xml + file like this is parsed: + \code + + + + + + Welcome to the Mesh Viewer of the "Irrlicht Engine". + + + \endcode + + The code for parsing this file would look like this: + \code + #include + using namespace irr; // irrXML is located in the namespace irr::io + using namespace io; + + #include // we use STL strings to store data in this example + + void main() + { + // create the reader using one of the factory functions + + IrrXMLReader* xml = createIrrXMLReader("config.xml"); + + // strings for storing the data we want to get out of the file + std::string modelFile; + std::string messageText; + std::string caption; + + // parse the file until end reached + + while(xml && xml->read()) + { + switch(xml->getNodeType()) + { + case EXN_TEXT: + // in this xml file, the only text which occurs is the messageText + messageText = xml->getNodeData(); + break; + case EXN_ELEMENT: + { + if (!strcmp("model", xml->getNodeName())) + modelFile = xml->getAttributeValue("file"); + else + if (!strcmp("messageText", xml->getNodeName())) + caption = xml->getAttributeValue("caption"); + } + break; + } + } + + // delete the xml parser after usage + delete xml; + } + \endcode + + \section howto How to use + + Simply add the source files in the /src directory of irrXML to your project. Done. + + \section license License + + The irrXML license is based on the zlib license. Basicly, this means you can do with + irrXML whatever you want: + + Copyright (C) 2002-2012 Nikolaus Gebhardt + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source distribution. + + \section history History + + As lots of references in this documentation and the source show, this xml + parser has originally been a part of the + Irrlicht Engine. But because + the parser has become very useful with the latest release, people asked for a + separate version of it, to be able to use it in non Irrlicht projects. With + irrXML 1.0, this has now been done. +*/ + +namespace irr +{ +namespace io +{ + //! Enumeration of all supported source text file formats + enum ETEXT_FORMAT + { + //! ASCII, file without byte order mark, or not a text file + ETF_ASCII, + + //! UTF-8 format + ETF_UTF8, + + //! UTF-16 format, big endian + ETF_UTF16_BE, + + //! UTF-16 format, little endian + ETF_UTF16_LE, + + //! UTF-32 format, big endian + ETF_UTF32_BE, + + //! UTF-32 format, little endian + ETF_UTF32_LE + }; + + + //! Enumeration for all xml nodes which are parsed by IrrXMLReader + enum EXML_NODE + { + //! No xml node. This is usually the node if you did not read anything yet. + EXN_NONE, + + //! An xml element such as <foo> + EXN_ELEMENT, + + //! End of an xml element such as </foo> + EXN_ELEMENT_END, + + //! Text within an xml element: <foo> this is the text. </foo> + //! Also text between 2 xml elements: </foo> this is the text. <foo> + EXN_TEXT, + + //! An xml comment like <!-- I am a comment --> or a DTD definition. + EXN_COMMENT, + + //! An xml cdata section like <![CDATA[ this is some CDATA ]]> + EXN_CDATA, + + //! Unknown element. + EXN_UNKNOWN + }; + + //! Callback class for file read abstraction. + /** With this, it is possible to make the xml parser read in other + things than just files. The Irrlicht engine is using this for example to + read xml from compressed .zip files. To make the parser read in + any other data, derive a class from this interface, implement the + two methods to read your data and give a pointer to an instance of + your implementation when calling createIrrXMLReader(), + createIrrXMLReaderUTF16() or createIrrXMLReaderUTF32() */ + class IFileReadCallBack + { + public: + + //! Destructor + virtual ~IFileReadCallBack() {} + + //! Reads an amount of bytes from the file. + /** \param buffer: Pointer to buffer where to read bytes will be written to. + \param sizeToRead: Amount of bytes to read from the file. + \return Returns how much bytes were read. */ + virtual int read(void* buffer, int sizeToRead) = 0; + + //! Returns size of file in bytes + virtual long getSize() const = 0; + }; + + //! Empty class to be used as parent class for IrrXMLReader. + /** If you need another class as base class for the xml reader, you can do this by creating + the reader using for example new CXMLReaderImpl(yourcallback); + The Irrlicht Engine for example needs IReferenceCounted as base class for every object to + let it automaticly reference countend, hence it replaces IXMLBase with IReferenceCounted. + See irrXML.cpp on how this can be done in detail. */ + class IXMLBase + { + }; + + //! Interface providing easy read access to a XML file. + /** You can create an instance of this reader using one of the factory functions + createIrrXMLReader(), createIrrXMLReaderUTF16() and createIrrXMLReaderUTF32(). + If using the parser from the Irrlicht Engine, please use IFileSystem::createXMLReader() + instead. + For a detailed intro how to use the parser, see \ref irrxmlexample and \ref features. + + The typical usage of this parser looks like this: + \code + #include + using namespace irr; // irrXML is located in the namespace irr::io + using namespace io; + + void main() + { + // create the reader using one of the factory functions + IrrXMLReader* xml = createIrrXMLReader("config.xml"); + + if (xml == 0) + return; // file could not be opened + + // parse the file until end reached + while(xml->read()) + { + // based on xml->getNodeType(), do something. + } + + // delete the xml parser after usage + delete xml; + } + \endcode + See \ref irrxmlexample for a more detailed example. + */ + template + class IIrrXMLReader : public super_class + { + public: + + //! Destructor + virtual ~IIrrXMLReader() {} + + //! Reads forward to the next xml node. + /** \return Returns false, if there was no further node. */ + virtual bool read() = 0; + + //! Returns the type of the current XML node. + virtual EXML_NODE getNodeType() const = 0; + + //! Returns attribute count of the current XML node. + /** This is usually + non null if the current node is EXN_ELEMENT, and the element has attributes. + \return Returns amount of attributes of this xml node. */ + virtual unsigned int getAttributeCount() const = 0; + + //! Returns name of an attribute. + /** \param idx: Zero based index, should be something between 0 and getAttributeCount()-1. + \return Name of the attribute, 0 if an attribute with this index does not exist. */ + virtual const char_type* getAttributeName(int idx) const = 0; + + //! Returns the value of an attribute. + /** \param idx: Zero based index, should be something between 0 and getAttributeCount()-1. + \return Value of the attribute, 0 if an attribute with this index does not exist. */ + virtual const char_type* getAttributeValue(int idx) const = 0; + + //! Returns the value of an attribute. + /** \param name: Name of the attribute. + \return Value of the attribute, 0 if an attribute with this name does not exist. */ + virtual const char_type* getAttributeValue(const char_type* name) const = 0; + + //! Returns the value of an attribute in a safe way. + /** Like getAttributeValue(), but does not + return 0 if the attribute does not exist. An empty string ("") is returned then. + \param name: Name of the attribute. + \return Value of the attribute, and "" if an attribute with this name does not exist */ + virtual const char_type* getAttributeValueSafe(const char_type* name) const = 0; + + //! Returns the value of an attribute as integer. + /** \param name Name of the attribute. + \return Value of the attribute as integer, and 0 if an attribute with this name does not exist or + the value could not be interpreted as integer. */ + virtual int getAttributeValueAsInt(const char_type* name) const = 0; + + //! Returns the value of an attribute as integer. + /** \param idx: Zero based index, should be something between 0 and getAttributeCount()-1. + \return Value of the attribute as integer, and 0 if an attribute with this index does not exist or + the value could not be interpreted as integer. */ + virtual int getAttributeValueAsInt(int idx) const = 0; + + //! Returns the value of an attribute as float. + /** \param name: Name of the attribute. + \return Value of the attribute as float, and 0 if an attribute with this name does not exist or + the value could not be interpreted as float. */ + virtual float getAttributeValueAsFloat(const char_type* name) const = 0; + + //! Returns the value of an attribute as float. + /** \param idx: Zero based index, should be something between 0 and getAttributeCount()-1. + \return Value of the attribute as float, and 0 if an attribute with this index does not exist or + the value could not be interpreted as float. */ + virtual float getAttributeValueAsFloat(int idx) const = 0; + + //! Returns the name of the current node. + /** Only valid, if the node type is EXN_ELEMENT. + \return Name of the current node or 0 if the node has no name. */ + virtual const char_type* getNodeName() const = 0; + + //! Returns data of the current node. + /** Only valid if the node has some + data and it is of type EXN_TEXT, EXN_COMMENT, EXN_CDATA or EXN_UNKNOWN. */ + virtual const char_type* getNodeData() const = 0; + + //! Returns if an element is an empty element, like <foo /> + virtual bool isEmptyElement() const = 0; + + //! Returns format of the source xml file. + /** It is not necessary to use + this method because the parser will convert the input file format + to the format wanted by the user when creating the parser. This + method is useful to get/display additional informations. */ + virtual ETEXT_FORMAT getSourceFormat() const = 0; + + //! Returns format of the strings returned by the parser. + /** This will be UTF8 for example when you created a parser with + IrrXMLReaderUTF8() and UTF32 when it has been created using + IrrXMLReaderUTF32. It should not be necessary to call this + method and only exists for informational purposes. */ + virtual ETEXT_FORMAT getParserFormat() const = 0; + }; + + + template + struct xmlChar + { + T c; + xmlChar() {} + xmlChar(char in) : c(static_cast(in)) {} + xmlChar(wchar_t in) : c(static_cast(in)) {} +#if defined(__BORLANDC__) + // Note - removing explicit for borland was to get it to even compile. + // There haven't been any kind of tests for that besides that. + xmlChar(unsigned char in) : c(static_cast(in)) {} + xmlChar(unsigned short in) : c(static_cast(in)) {} + xmlChar(unsigned int in) : c(static_cast(in)) {} + xmlChar(unsigned long in) : c(static_cast(in)) {} +#else + explicit xmlChar(unsigned char in) : c(static_cast(in)) {} + explicit xmlChar(unsigned short in) : c(static_cast(in)) {} + explicit xmlChar(unsigned int in) : c(static_cast(in)) {} + explicit xmlChar(unsigned long in) : c(static_cast(in)) {} +#endif + operator T() const { return c; } + void operator=(int t) { c=static_cast(t); } + }; + + //! defines the utf-16 type. + /** Not using wchar_t for this because + wchar_t has 16 bit on windows and 32 bit on other operating systems. */ + typedef xmlChar char16; + + //! defines the utf-32 type. + /** Not using wchar_t for this because + wchar_t has 16 bit on windows and 32 bit on other operating systems. */ + typedef xmlChar char32; + + //! A UTF-8 or ASCII character xml parser. + /** This means that all character data will be returned in 8 bit ASCII or UTF-8 by this parser. + The file to read can be in any format, it will be converted to UTF-8 if it is not + in this format. + Create an instance of this with createIrrXMLReader(); + See IIrrXMLReader for description on how to use it. */ + typedef IIrrXMLReader IrrXMLReader; + + //! A UTF-16 xml parser. + /** This means that all character data will be returned in UTF-16 by this parser. + The file to read can be in any format, it will be converted to UTF-16 if it is not + in this format. + Create an instance of this with createIrrXMLReaderUTF16(); + See IIrrXMLReader for description on how to use it. */ + typedef IIrrXMLReader IrrXMLReaderUTF16; + + //! A UTF-32 xml parser. + /** This means that all character data will be returned in UTF-32 by this parser. + The file to read can be in any format, it will be converted to UTF-32 if it is not + in this format. + Create an instance of this with createIrrXMLReaderUTF32(); + See IIrrXMLReader for description on how to use it. */ + typedef IIrrXMLReader IrrXMLReaderUTF32; + + + //! Creates an instance of an UFT-8 or ASCII character xml parser. + /** This means that all character data will be returned in 8 bit ASCII or UTF-8. + The file to read can be in any format, it will be converted to UTF-8 if it is not in this format. + If you are using the Irrlicht Engine, it is better not to use this function but + IFileSystem::createXMLReaderUTF8() instead. + \param filename: Name of file to be opened. + \return Returns a pointer to the created xml parser. This pointer should be + deleted using 'delete' after no longer needed. Returns 0 if an error occured + and the file could not be opened. */ + IRRLICHT_API IrrXMLReader* IRRCALLCONV createIrrXMLReader(const char* filename); + + //! Creates an instance of an UFT-8 or ASCII character xml parser. + /** This means that all character data will be returned in 8 bit ASCII or UTF-8. The file to read can + be in any format, it will be converted to UTF-8 if it is not in this format. + If you are using the Irrlicht Engine, it is better not to use this function but + IFileSystem::createXMLReaderUTF8() instead. + \param file: Pointer to opened file, must have been opened in binary mode, e.g. + using fopen("foo.bar", "wb"); The file will not be closed after it has been read. + \return Returns a pointer to the created xml parser. This pointer should be + deleted using 'delete' after no longer needed. Returns 0 if an error occured + and the file could not be opened. */ + IRRLICHT_API IrrXMLReader* IRRCALLCONV createIrrXMLReader(FILE* file); + + //! Creates an instance of an UFT-8 or ASCII character xml parser. + /** This means that all character data will be returned in 8 bit ASCII or UTF-8. The file to read can + be in any format, it will be converted to UTF-8 if it is not in this format. + If you are using the Irrlicht Engine, it is better not to use this function but + IFileSystem::createXMLReaderUTF8() instead. + \param callback: Callback for file read abstraction. Implement your own + callback to make the xml parser read in other things than just files. See + IFileReadCallBack for more information about this. + \param deleteCallback: if true, the callback will be deleted after the file + has been read. Otherwise the caller si responsible for cleaning it up. + \return Returns a pointer to the created xml parser. This pointer should be + deleted using 'delete' after no longer needed. Returns 0 if an error occured + and the file could not be opened. */ + IRRLICHT_API IrrXMLReader* IRRCALLCONV createIrrXMLReader(IFileReadCallBack* callback, + bool deleteCallback = false); + + //! Creates an instance of an UFT-16 xml parser. + /** This means that + all character data will be returned in UTF-16. The file to read can + be in any format, it will be converted to UTF-16 if it is not in this format. + If you are using the Irrlicht Engine, it is better not to use this function but + IFileSystem::createXMLReader() instead. + \param filename: Name of file to be opened. + \return Returns a pointer to the created xml parser. This pointer should be + deleted using 'delete' after no longer needed. Returns 0 if an error occured + and the file could not be opened. */ + IRRLICHT_API IrrXMLReaderUTF16* IRRCALLCONV createIrrXMLReaderUTF16(const char* filename); + + //! Creates an instance of an UFT-16 xml parser. + /** This means that all character data will be returned in UTF-16. The file to read can + be in any format, it will be converted to UTF-16 if it is not in this format. + If you are using the Irrlicht Engine, it is better not to use this function but + IFileSystem::createXMLReader() instead. + \param file: Pointer to opened file, must have been opened in binary mode, e.g. + using fopen("foo.bar", "wb"); The file will not be closed after it has been read. + \return Returns a pointer to the created xml parser. This pointer should be + deleted using 'delete' after no longer needed. Returns 0 if an error occured + and the file could not be opened. */ + IRRLICHT_API IrrXMLReaderUTF16* IRRCALLCONV createIrrXMLReaderUTF16(FILE* file); + + //! Creates an instance of an UFT-16 xml parser. + /** This means that all character data will be returned in UTF-16. The file to read can + be in any format, it will be converted to UTF-16 if it is not in this format. + If you are using the Irrlicht Engine, it is better not to use this function but + IFileSystem::createXMLReader() instead. + \param callback: Callback for file read abstraction. Implement your own + callback to make the xml parser read in other things than just files. See + IFileReadCallBack for more information about this. + \param deleteCallback: if true, the callback will be deleted after the file + has been read. Otherwise the caller si responsible for cleaning it up. + \return Returns a pointer to the created xml parser. This pointer should be + deleted using 'delete' after no longer needed. Returns 0 if an error occured + and the file could not be opened. */ + IRRLICHT_API IrrXMLReaderUTF16* IRRCALLCONV createIrrXMLReaderUTF16(IFileReadCallBack* callback, + bool deleteCallback = false); + + + //! Creates an instance of an UFT-32 xml parser. + /** This means that all character data will be returned in UTF-32. The file to read can + be in any format, it will be converted to UTF-32 if it is not in this format. + If you are using the Irrlicht Engine, it is better not to use this function but + IFileSystem::createXMLReader() instead. + \param filename: Name of file to be opened. + \return Returns a pointer to the created xml parser. This pointer should be + deleted using 'delete' after no longer needed. Returns 0 if an error occured + and the file could not be opened. */ + IRRLICHT_API IrrXMLReaderUTF32* IRRCALLCONV createIrrXMLReaderUTF32(const char* filename); + + //! Creates an instance of an UFT-32 xml parser. + /** This means that all character data will be returned in UTF-32. The file to read can + be in any format, it will be converted to UTF-32 if it is not in this format. + if you are using the Irrlicht Engine, it is better not to use this function but + IFileSystem::createXMLReader() instead. + \param file: Pointer to opened file, must have been opened in binary mode, e.g. + using fopen("foo.bar", "wb"); The file will not be closed after it has been read. + \return Returns a pointer to the created xml parser. This pointer should be + deleted using 'delete' after no longer needed. Returns 0 if an error occured + and the file could not be opened. */ + IRRLICHT_API IrrXMLReaderUTF32* IRRCALLCONV createIrrXMLReaderUTF32(FILE* file); + + //! Creates an instance of an UFT-32 xml parser. + /** This means that + all character data will be returned in UTF-32. The file to read can + be in any format, it will be converted to UTF-32 if it is not in this format. + If you are using the Irrlicht Engine, it is better not to use this function but + IFileSystem::createXMLReader() instead. + \param callback: Callback for file read abstraction. Implement your own + callback to make the xml parser read in other things than just files. See + IFileReadCallBack for more information about this. + \param deleteCallback: if true, the callback will be deleted after the file + has been read. Otherwise the caller si responsible for cleaning it up. + \return Returns a pointer to the created xml parser. This pointer should be + deleted using 'delete' after no longer needed. Returns 0 if an error occured + and the file could not be opened. */ + IRRLICHT_API IrrXMLReaderUTF32* IRRCALLCONV createIrrXMLReaderUTF32(IFileReadCallBack* callback, + bool deleteCallback = false); + + + /*! \file irrXML.h + \brief Header file of the irrXML, the Irrlicht XML parser. + + This file includes everything needed for using irrXML, + the XML parser of the Irrlicht Engine. To use irrXML, + you only need to include this file in your project: + + \code + #include + \endcode + + It is also common to use the two namespaces in which irrXML is included, + directly after including irrXML.h: + + \code + #include + using namespace irr; + using namespace io; + \endcode + */ + +} // end namespace io +} // end namespace irr + +#endif // __IRR_XML_H_INCLUDED__ + diff --git a/inc/irrlicht.h b/inc/irrlicht.h new file mode 100644 index 0000000..184c896 --- /dev/null +++ b/inc/irrlicht.h @@ -0,0 +1,394 @@ +/* irrlicht.h -- interface of the 'Irrlicht Engine' + + Copyright (C) 2002-2012 Nikolaus Gebhardt + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Please note that the Irrlicht Engine is based in part on the work of the + Independent JPEG Group, the zlib and the libPng. This means that if you use + the Irrlicht Engine in your product, you must acknowledge somewhere in your + documentation that you've used the IJG code. It would also be nice to mention + that you use the Irrlicht Engine, the zlib and libPng. See the README files + in the jpeglib, the zlib and libPng for further informations. +*/ + +#ifndef __IRRLICHT_H_INCLUDED__ +#define __IRRLICHT_H_INCLUDED__ + +#include "IrrCompileConfig.h" +#include "aabbox3d.h" +#include "CDynamicMeshBuffer.h" +#include "CIndexBuffer.h" +#include "CMeshBuffer.h" +#include "coreutil.h" +#include "CVertexBuffer.h" +#include "dimension2d.h" +#include "ECullingTypes.h" +#include "EDebugSceneTypes.h" +#include "EDriverFeatures.h" +#include "EDriverTypes.h" +#include "EGUIAlignment.h" +#include "EGUIElementTypes.h" +#include "EHardwareBufferFlags.h" +#include "EMaterialFlags.h" +#include "EMaterialTypes.h" +#include "EMeshWriterEnums.h" +#include "EMessageBoxFlags.h" +#include "ESceneNodeAnimatorTypes.h" +#include "ESceneNodeTypes.h" +#include "ETerrainElements.h" +#include "fast_atof.h" +#include "heapsort.h" +#include "IAnimatedMesh.h" +#include "IAnimatedMeshMD2.h" +#include "IAnimatedMeshMD3.h" +#include "IAnimatedMeshSceneNode.h" +#include "IAttributeExchangingObject.h" +#include "IAttributes.h" +#include "IBillboardSceneNode.h" +#include "IBillboardTextSceneNode.h" +#include "IBoneSceneNode.h" +#include "ICameraSceneNode.h" +#include "ICursorControl.h" +#include "IDummyTransformationSceneNode.h" +#include "IDynamicMeshBuffer.h" +#include "IEventReceiver.h" +#include "IFileList.h" +#include "IFileSystem.h" +#include "IGeometryCreator.h" +#include "IGPUProgrammingServices.h" +#include "IGUIButton.h" +#include "IGUICheckBox.h" +#include "IGUIColorSelectDialog.h" +#include "IGUIComboBox.h" +#include "IGUIContextMenu.h" +#include "IGUIEditBox.h" +#include "IGUIElement.h" +#include "IGUIElementFactory.h" +#include "IGUIEnvironment.h" +#include "IGUIFileOpenDialog.h" +#include "IGUIFont.h" +#include "IGUIFontBitmap.h" +#include "IGUIImage.h" +#include "IGUIInOutFader.h" +#include "IGUIListBox.h" +#include "IGUIMeshViewer.h" +#include "IGUIScrollBar.h" +#include "IGUISkin.h" +#include "IGUISpinBox.h" +#include "IGUISpriteBank.h" +#include "IGUIStaticText.h" +#include "IGUITabControl.h" +#include "IGUITable.h" +#include "IGUIToolbar.h" +#include "IGUIWindow.h" +#include "IGUITreeView.h" +#include "IImage.h" +#include "IImageLoader.h" +#include "IImageWriter.h" +#include "IIndexBuffer.h" +#include "ILightSceneNode.h" +#include "ILogger.h" +#include "IMaterialRenderer.h" +#include "IMaterialRendererServices.h" +#include "IMesh.h" +#include "IMeshBuffer.h" +#include "IMeshCache.h" +#include "IMeshLoader.h" +#include "IMeshManipulator.h" +#include "IMeshSceneNode.h" +#include "IMeshWriter.h" +#include "IColladaMeshWriter.h" +#include "IMetaTriangleSelector.h" +#include "IOSOperator.h" +#include "IParticleSystemSceneNode.h" // also includes all emitters and attractors +#include "IQ3LevelMesh.h" +#include "IQ3Shader.h" +#include "IReadFile.h" +#include "IReferenceCounted.h" +#include "irrArray.h" +#include "IRandomizer.h" +#include "IrrlichtDevice.h" +#include "irrList.h" +#include "irrMap.h" +#include "irrMath.h" +#include "irrString.h" +#include "irrTypes.h" +#include "path.h" +#include "irrXML.h" +#include "ISceneCollisionManager.h" +#include "ISceneLoader.h" +#include "ISceneManager.h" +#include "ISceneNode.h" +#include "ISceneNodeAnimator.h" +#include "ISceneNodeAnimatorCameraFPS.h" +#include "ISceneNodeAnimatorCameraMaya.h" +#include "ISceneNodeAnimatorCollisionResponse.h" +#include "ISceneNodeAnimatorFactory.h" +#include "ISceneNodeFactory.h" +#include "ISceneUserDataSerializer.h" +#include "IShaderConstantSetCallBack.h" +#include "IShadowVolumeSceneNode.h" +#include "ISkinnedMesh.h" +#include "ITerrainSceneNode.h" +#include "ITextSceneNode.h" +#include "ITexture.h" +#include "ITimer.h" +#include "ITriangleSelector.h" +#include "IVertexBuffer.h" +#include "IVideoDriver.h" +#include "IVideoModeList.h" +#include "IVolumeLightSceneNode.h" +#include "IWriteFile.h" +#include "IXMLReader.h" +#include "IXMLWriter.h" +#include "ILightManager.h" +#include "Keycodes.h" +#include "line2d.h" +#include "line3d.h" +#include "matrix4.h" +#include "plane3d.h" +#include "position2d.h" +#include "quaternion.h" +#include "rect.h" +#include "S3DVertex.h" +#include "SAnimatedMesh.h" +#include "SceneParameters.h" +#include "SColor.h" +#include "SExposedVideoData.h" +#include "SIrrCreationParameters.h" +#include "SKeyMap.h" +#include "SLight.h" +#include "SMaterial.h" +#include "SMesh.h" +#include "SMeshBuffer.h" +#include "SMeshBufferLightMap.h" +#include "SMeshBufferTangents.h" +#include "SParticle.h" +#include "SSharedMeshBuffer.h" +#include "SSkinMeshBuffer.h" +#include "SVertexIndex.h" +#include "SViewFrustum.h" +#include "triangle3d.h" +#include "vector2d.h" +#include "vector3d.h" + +/*! \mainpage Irrlicht Engine 1.8 API documentation + * + *
+ * + * \section intro Introduction + * + * Welcome to the Irrlicht Engine API documentation. + * Here you'll find any information you'll need to develop applications with + * the Irrlicht Engine. If you are looking for a tutorial on how to start, you'll + * find some on the homepage of the Irrlicht Engine at + * irrlicht.sourceforge.net + * or inside the SDK in the examples directory. + * + * The Irrlicht Engine is intended to be an easy-to-use 3d engine, so + * this documentation is an important part of it. If you have any questions or + * suggestions, just send a email to the author of the engine, Nikolaus Gebhardt + * (niko (at) irrlicht3d.org). + * + * + * \section links Links + * + * Namespaces: A very good place to start reading + * the documentation.
+ * Class list: List of all classes with descriptions.
+ * Class members: Good place to find forgotten features.
+ * + * \section irrexample Short example + * + * A simple application, starting up the engine, loading a Quake 2 animated + * model file and the corresponding texture, animating and displaying it + * in front of a blue background and placing a user controlable 3d camera + * would look like the following code. I think this example shows the usage + * of the engine quite well: + * + * \code + * #include + * using namespace irr; + * + * int main() + * { + * // start up the engine + * IrrlichtDevice *device = createDevice(video::EDT_DIRECT3D8, + * core::dimension2d(640,480)); + * + * video::IVideoDriver* driver = device->getVideoDriver(); + * scene::ISceneManager* scenemgr = device->getSceneManager(); + * + * device->setWindowCaption(L"Hello World!"); + * + * // load and show quake2 .md2 model + * scene::ISceneNode* node = scenemgr->addAnimatedMeshSceneNode( + * scenemgr->getMesh("quake2model.md2")); + * + * // if everything worked, add a texture and disable lighting + * if (node) + * { + * node->setMaterialTexture(0, driver->getTexture("texture.bmp")); + * node->setMaterialFlag(video::EMF_LIGHTING, false); + * } + * + * // add a first person shooter style user controlled camera + * scenemgr->addCameraSceneNodeFPS(); + * + * // draw everything + * while(device->run() && driver) + * { + * driver->beginScene(true, true, video::SColor(255,0,0,255)); + * scenemgr->drawAll(); + * driver->endScene(); + * } + * + * // delete device + * device->drop(); + * return 0; + * } + * \endcode + * + * Irrlicht can load a lot of file formats automaticly, see irr::scene::ISceneManager::getMesh() + * for a detailed list. So if you would like to replace the simple blue screen background by + * a cool Quake 3 Map, optimized by an octree, just insert this code + * somewhere before the while loop: + * + * \code + * // add .pk3 archive to the file system + * device->getFileSystem()->addZipFileArchive("quake3map.pk3"); + * + * // load .bsp file and show it using an octree + * scenemgr->addOctreeSceneNode( + * scenemgr->getMesh("quake3map.bsp")); + * \endcode + * + * As you can see, the engine uses namespaces. Everything in the engine is + * placed into the namespace 'irr', but there are also 5 sub namespaces. + * You can find a list of all namespaces with descriptions at the + * namespaces page. + * This is also a good place to start reading the documentation. If you + * don't want to write the namespace names all the time, just use all namespaces like + * this: + * \code + * using namespace core; + * using namespace scene; + * using namespace video; + * using namespace io; + * using namespace gui; + * \endcode + * + * There is a lot more the engine can do, but I hope this gave a short + * overview over the basic features of the engine. For more examples, please take + * a look into the examples directory of the SDK. + */ + +#include "SIrrCreationParameters.h" + +//! Everything in the Irrlicht Engine can be found in this namespace. +namespace irr +{ + //! Creates an Irrlicht device. The Irrlicht device is the root object for using the engine. + /** If you need more parameters to be passed to the creation of the Irrlicht Engine device, + use the createDeviceEx() function. + \param deviceType: Type of the device. This can currently be video::EDT_NULL, + video::EDT_SOFTWARE, video::EDT_BURNINGSVIDEO, video::EDT_DIRECT3D8, video::EDT_DIRECT3D9 and video::EDT_OPENGL. + \param windowSize: Size of the window or the video mode in fullscreen mode. + \param bits: Bits per pixel in fullscreen mode. Ignored if windowed mode. + \param fullscreen: Should be set to true if the device should run in fullscreen. Otherwise + the device runs in windowed mode. + \param stencilbuffer: Specifies if the stencil buffer should be enabled. Set this to true, + if you want the engine be able to draw stencil buffer shadows. Note that not all + devices are able to use the stencil buffer. If they don't no shadows will be drawn. + \param vsync: Specifies vertical syncronisation: If set to true, the driver will wait + for the vertical retrace period, otherwise not. + \param receiver: A user created event receiver. + \return Returns pointer to the created IrrlichtDevice or null if the + device could not be created. + */ + extern "C" IRRLICHT_API IrrlichtDevice* IRRCALLCONV createDevice( + video::E_DRIVER_TYPE deviceType = video::EDT_SOFTWARE, + // parantheses are necessary for some compilers + const core::dimension2d& windowSize = (core::dimension2d(640,480)), + u32 bits = 16, + bool fullscreen = false, + bool stencilbuffer = false, + bool vsync = false, + IEventReceiver* receiver = 0); + + //! typedef for Function Pointer + typedef IrrlichtDevice* (IRRCALLCONV *funcptr_createDevice )( + video::E_DRIVER_TYPE deviceType, + const core::dimension2d& windowSize, + u32 bits, + bool fullscreen, + bool stencilbuffer, + bool vsync, + IEventReceiver* receiver); + + + //! Creates an Irrlicht device with the option to specify advanced parameters. + /** Usually you should used createDevice() for creating an Irrlicht Engine device. + Use this function only if you wish to specify advanced parameters like a window + handle in which the device should be created. + \param parameters: Structure containing advanced parameters for the creation of the device. + See irr::SIrrlichtCreationParameters for details. + \return Returns pointer to the created IrrlichtDevice or null if the + device could not be created. */ + extern "C" IRRLICHT_API IrrlichtDevice* IRRCALLCONV createDeviceEx( + const SIrrlichtCreationParameters& parameters); + + //! typedef for Function Pointer + typedef IrrlichtDevice* (IRRCALLCONV *funcptr_createDeviceEx )( const SIrrlichtCreationParameters& parameters ); + + + // THE FOLLOWING IS AN EMPTY LIST OF ALL SUB NAMESPACES + // EXISTING ONLY FOR THE DOCUMENTATION SOFTWARE DOXYGEN. + + //! Basic classes such as vectors, planes, arrays, lists, and so on can be found in this namespace. + namespace core + { + } + + //! The gui namespace contains useful classes for easy creation of a graphical user interface. + namespace gui + { + } + + //! This namespace provides interfaces for input/output: Reading and writing files, accessing zip archives, xml files, ... + namespace io + { + } + + //! All scene management can be found in this namespace: Mesh loading, special scene nodes like octrees and billboards, ... + namespace scene + { + } + + //! The video namespace contains classes for accessing the video driver. All 2d and 3d rendering is done here. + namespace video + { + } +} + +/*! \file irrlicht.h + \brief Main header file of the irrlicht, the only file needed to include. +*/ + +#endif + diff --git a/inc/irrpack.h b/inc/irrpack.h new file mode 100644 index 0000000..d030b6b --- /dev/null +++ b/inc/irrpack.h @@ -0,0 +1,39 @@ +// Copyright (C) 2007-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +// include this file right before the data structures to be 1-aligned +// and add to each structure the PACK_STRUCT define just like this: +// struct mystruct +// { +// ... +// } PACK_STRUCT; +// Always include the irrunpack.h file right after the last type declared +// like this, and do not put any other types with different alignment +// in between! + +// byte-align structures +#if defined(_MSC_VER) || defined(__BORLANDC__) || defined (__BCPLUSPLUS__) +# pragma warning(disable: 4103) +# pragma pack( push, packing ) +# pragma pack( 1 ) +# define PACK_STRUCT +#elif defined( __DMC__ ) +# pragma pack( push, 1 ) +# define PACK_STRUCT +#elif defined( __GNUC__ ) + // Using pragma pack might work with earlier gcc versions already, but + // it started to be necessary with gcc 4.7 on mingw unless compiled with -mno-ms-bitfields. + // And I found some hints on the web that older gcc versions on the other hand had sometimes + // trouble with pragma pack while they worked with __attribute__((packed)). +# if (__GNUC__ > 4 ) || ((__GNUC__ == 4 ) && (__GNUC_MINOR__ >= 7)) +# pragma pack( push, packing ) +# pragma pack( 1 ) +# define PACK_STRUCT +# else +# define PACK_STRUCT __attribute__((packed)) + #endif +#else +# error compiler not supported +#endif + diff --git a/inc/irrunpack.h b/inc/irrunpack.h new file mode 100644 index 0000000..e86f351 --- /dev/null +++ b/inc/irrunpack.h @@ -0,0 +1,20 @@ +// Copyright (C) 2007-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +// include this file to switch back to default alignment +// file belongs to irrpack.h, see there for more info + +// Default alignment +#if defined(_MSC_VER) || defined(__BORLANDC__) || defined (__BCPLUSPLUS__) +# pragma pack( pop, packing ) +#elif defined (__DMC__) +# pragma pack( pop ) +#elif defined( __GNUC__ ) +# if (__GNUC__ > 4 ) || ((__GNUC__ == 4 ) && (__GNUC_MINOR__ >= 7)) +# pragma pack( pop, packing ) +# endif +#endif + +#undef PACK_STRUCT + diff --git a/inc/line2d.h b/inc/line2d.h new file mode 100644 index 0000000..22590dc --- /dev/null +++ b/inc/line2d.h @@ -0,0 +1,274 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __IRR_LINE_2D_H_INCLUDED__ +#define __IRR_LINE_2D_H_INCLUDED__ + +#include "irrTypes.h" +#include "vector2d.h" + +namespace irr +{ +namespace core +{ + +//! 2D line between two points with intersection methods. +template +class line2d +{ + public: + //! Default constructor for line going from (0,0) to (1,1). + line2d() : start(0,0), end(1,1) {} + //! Constructor for line between the two points. + line2d(T xa, T ya, T xb, T yb) : start(xa, ya), end(xb, yb) {} + //! Constructor for line between the two points given as vectors. + line2d(const vector2d& start, const vector2d& end) : start(start), end(end) {} + //! Copy constructor. + line2d(const line2d& other) : start(other.start), end(other.end) {} + + // operators + + line2d operator+(const vector2d& point) const { return line2d(start + point, end + point); } + line2d& operator+=(const vector2d& point) { start += point; end += point; return *this; } + + line2d operator-(const vector2d& point) const { return line2d(start - point, end - point); } + line2d& operator-=(const vector2d& point) { start -= point; end -= point; return *this; } + + bool operator==(const line2d& other) const + { return (start==other.start && end==other.end) || (end==other.start && start==other.end);} + bool operator!=(const line2d& other) const + { return !(start==other.start && end==other.end) || (end==other.start && start==other.end);} + + // functions + //! Set this line to new line going through the two points. + void setLine(const T& xa, const T& ya, const T& xb, const T& yb){start.set(xa, ya); end.set(xb, yb);} + //! Set this line to new line going through the two points. + void setLine(const vector2d& nstart, const vector2d& nend){start.set(nstart); end.set(nend);} + //! Set this line to new line given as parameter. + void setLine(const line2d& line){start.set(line.start); end.set(line.end);} + + //! Get length of line + /** \return Length of the line. */ + T getLength() const { return start.getDistanceFrom(end); } + + //! Get squared length of the line + /** \return Squared length of line. */ + T getLengthSQ() const { return start.getDistanceFromSQ(end); } + + //! Get middle of the line + /** \return center of the line. */ + vector2d getMiddle() const + { + return (start + end)/(T)2; + } + + //! Get the vector of the line. + /** \return The vector of the line. */ + vector2d getVector() const { return vector2d(end.X - start.X, end.Y - start.Y); } + + //! Tests if this line intersects with another line. + /** \param l: Other line to test intersection with. + \param checkOnlySegments: Default is to check intersection between the begin and endpoints. + When set to false the function will check for the first intersection point when extending the lines. + \param out: If there is an intersection, the location of the + intersection will be stored in this vector. + \return True if there is an intersection, false if not. */ + bool intersectWith(const line2d& l, vector2d& out, bool checkOnlySegments=true) const + { + // Uses the method given at: + // http://local.wasp.uwa.edu.au/~pbourke/geometry/lineline2d/ + const f32 commonDenominator = (f32)(l.end.Y - l.start.Y)*(end.X - start.X) - + (l.end.X - l.start.X)*(end.Y - start.Y); + + const f32 numeratorA = (f32)(l.end.X - l.start.X)*(start.Y - l.start.Y) - + (l.end.Y - l.start.Y)*(start.X -l.start.X); + + const f32 numeratorB = (f32)(end.X - start.X)*(start.Y - l.start.Y) - + (end.Y - start.Y)*(start.X -l.start.X); + + if(equals(commonDenominator, 0.f)) + { + // The lines are either coincident or parallel + // if both numerators are 0, the lines are coincident + if(equals(numeratorA, 0.f) && equals(numeratorB, 0.f)) + { + // Try and find a common endpoint + if(l.start == start || l.end == start) + out = start; + else if(l.end == end || l.start == end) + out = end; + // now check if the two segments are disjunct + else if (l.start.X>start.X && l.end.X>start.X && l.start.X>end.X && l.end.X>end.X) + return false; + else if (l.start.Y>start.Y && l.end.Y>start.Y && l.start.Y>end.Y && l.end.Y>end.Y) + return false; + else if (l.start.X maxp; + vector2d minp; + if ((start.X>l.start.X && start.X>l.end.X && start.X>end.X) || (start.Y>l.start.Y && start.Y>l.end.Y && start.Y>end.Y)) + maxp=start; + else if ((end.X>l.start.X && end.X>l.end.X && end.X>start.X) || (end.Y>l.start.Y && end.Y>l.end.Y && end.Y>start.Y)) + maxp=end; + else if ((l.start.X>start.X && l.start.X>l.end.X && l.start.X>end.X) || (l.start.Y>start.Y && l.start.Y>l.end.Y && l.start.Y>end.Y)) + maxp=l.start; + else + maxp=l.end; + if (maxp != start && ((start.X(); + if (start != maxp && start != minp) + out += start; + if (end != maxp && end != minp) + out += end; + if (l.start != maxp && l.start != minp) + out += l.start; + if (l.end != maxp && l.end != minp) + out += l.end; + out.X = (T)(out.X/2); + out.Y = (T)(out.Y/2); + } + + return true; // coincident + } + + return false; // parallel + } + + // Get the point of intersection on this line, checking that + // it is within the line segment. + const f32 uA = numeratorA / commonDenominator; + if(checkOnlySegments && (uA < 0.f || uA > 1.f) ) + return false; // Outside the line segment + + const f32 uB = numeratorB / commonDenominator; + if(checkOnlySegments && (uB < 0.f || uB > 1.f)) + return false; // Outside the line segment + + // Calculate the intersection point. + out.X = (T)(start.X + uA * (end.X - start.X)); + out.Y = (T)(start.Y + uA * (end.Y - start.Y)); + return true; + } + + //! Get unit vector of the line. + /** \return Unit vector of this line. */ + vector2d getUnitVector() const + { + T len = (T)(1.0 / getLength()); + return vector2d((end.X - start.X) * len, (end.Y - start.Y) * len); + } + + //! Get angle between this line and given line. + /** \param l Other line for test. + \return Angle in degrees. */ + f64 getAngleWith(const line2d& l) const + { + vector2d vect = getVector(); + vector2d vect2 = l.getVector(); + return vect.getAngleWith(vect2); + } + + //! Tells us if the given point lies to the left, right, or on the line. + /** \return 0 if the point is on the line + <0 if to the left, or >0 if to the right. */ + T getPointOrientation(const vector2d& point) const + { + return ( (end.X - start.X) * (point.Y - start.Y) - + (point.X - start.X) * (end.Y - start.Y) ); + } + + //! Check if the given point is a member of the line + /** \return True if point is between start and end, else false. */ + bool isPointOnLine(const vector2d& point) const + { + T d = getPointOrientation(point); + return (d == 0 && point.isBetweenPoints(start, end)); + } + + //! Check if the given point is between start and end of the line. + /** Assumes that the point is already somewhere on the line. */ + bool isPointBetweenStartAndEnd(const vector2d& point) const + { + return point.isBetweenPoints(start, end); + } + + //! Get the closest point on this line to a point + /** \param checkOnlySegments: Default (true) is to return a point on the line-segment (between begin and end) of the line. + When set to false the function will check for the first the closest point on the the line even when outside the segment. */ + vector2d getClosestPoint(const vector2d& point, bool checkOnlySegments=true) const + { + vector2d c((f64)(point.X-start.X), (f64)(point.Y- start.Y)); + vector2d v((f64)(end.X-start.X), (f64)(end.Y-start.Y)); + f64 d = v.getLength(); + if ( d == 0 ) // can't tell much when the line is just a single point + return start; + v /= d; + f64 t = v.dotProduct(c); + + if ( checkOnlySegments ) + { + if (t < 0) return vector2d((T)start.X, (T)start.Y); + if (t > d) return vector2d((T)end.X, (T)end.Y); + } + + v *= t; + return vector2d((T)(start.X + v.X), (T)(start.Y + v.Y)); + } + + //! Start point of the line. + vector2d start; + //! End point of the line. + vector2d end; +}; + + // partial specialization to optimize lines (avoiding casts) + template <> + inline vector2df line2d::getClosestPoint(const vector2df& point, bool checkOnlySegments) const + { + vector2df c = point - start; + vector2df v = end - start; + f32 d = (f32)v.getLength(); + if ( d == 0 ) // can't tell much when the line is just a single point + return start; + v /= d; + f32 t = v.dotProduct(c); + + if ( checkOnlySegments ) + { + if (t < 0) return start; + if (t > d) return end; + } + + v *= t; + return start + v; + } + + + //! Typedef for an f32 line. + typedef line2d line2df; + //! Typedef for an integer line. + typedef line2d line2di; + +} // end namespace core +} // end namespace irr + +#endif + diff --git a/inc/line3d.h b/inc/line3d.h new file mode 100644 index 0000000..5e1437a --- /dev/null +++ b/inc/line3d.h @@ -0,0 +1,144 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __IRR_LINE_3D_H_INCLUDED__ +#define __IRR_LINE_3D_H_INCLUDED__ + +#include "irrTypes.h" +#include "vector3d.h" + +namespace irr +{ +namespace core +{ + +//! 3D line between two points with intersection methods. +template +class line3d +{ + public: + + //! Default constructor + /** line from (0,0,0) to (1,1,1) */ + line3d() : start(0,0,0), end(1,1,1) {} + //! Constructor with two points + line3d(T xa, T ya, T za, T xb, T yb, T zb) : start(xa, ya, za), end(xb, yb, zb) {} + //! Constructor with two points as vectors + line3d(const vector3d& start, const vector3d& end) : start(start), end(end) {} + + // operators + + line3d operator+(const vector3d& point) const { return line3d(start + point, end + point); } + line3d& operator+=(const vector3d& point) { start += point; end += point; return *this; } + + line3d operator-(const vector3d& point) const { return line3d(start - point, end - point); } + line3d& operator-=(const vector3d& point) { start -= point; end -= point; return *this; } + + bool operator==(const line3d& other) const + { return (start==other.start && end==other.end) || (end==other.start && start==other.end);} + bool operator!=(const line3d& other) const + { return !(start==other.start && end==other.end) || (end==other.start && start==other.end);} + + // functions + //! Set this line to a new line going through the two points. + void setLine(const T& xa, const T& ya, const T& za, const T& xb, const T& yb, const T& zb) + {start.set(xa, ya, za); end.set(xb, yb, zb);} + //! Set this line to a new line going through the two points. + void setLine(const vector3d& nstart, const vector3d& nend) + {start.set(nstart); end.set(nend);} + //! Set this line to new line given as parameter. + void setLine(const line3d& line) + {start.set(line.start); end.set(line.end);} + + //! Get length of line + /** \return Length of line. */ + T getLength() const { return start.getDistanceFrom(end); } + + //! Get squared length of line + /** \return Squared length of line. */ + T getLengthSQ() const { return start.getDistanceFromSQ(end); } + + //! Get middle of line + /** \return Center of line. */ + vector3d getMiddle() const + { + return (start + end)/(T)2; + } + + //! Get vector of line + /** \return vector of line. */ + vector3d getVector() const + { + return end - start; + } + + //! Check if the given point is between start and end of the line. + /** Assumes that the point is already somewhere on the line. + \param point The point to test. + \return True if point is on the line between start and end, else false. + */ + bool isPointBetweenStartAndEnd(const vector3d& point) const + { + return point.isBetweenPoints(start, end); + } + + //! Get the closest point on this line to a point + /** \param point The point to compare to. + \return The nearest point which is part of the line. */ + vector3d getClosestPoint(const vector3d& point) const + { + vector3d c = point - start; + vector3d v = end - start; + T d = (T)v.getLength(); + v /= d; + T t = v.dotProduct(c); + + if (t < (T)0.0) + return start; + if (t > d) + return end; + + v *= t; + return start + v; + } + + //! Check if the line intersects with a shpere + /** \param sorigin: Origin of the shpere. + \param sradius: Radius of the sphere. + \param outdistance: The distance to the first intersection point. + \return True if there is an intersection. + If there is one, the distance to the first intersection point + is stored in outdistance. */ + bool getIntersectionWithSphere(vector3d sorigin, T sradius, f64& outdistance) const + { + const vector3d q = sorigin - start; + T c = q.getLength(); + T v = q.dotProduct(getVector().normalize()); + T d = sradius * sradius - (c*c - v*v); + + if (d < 0.0) + return false; + + outdistance = v - core::squareroot ( d ); + return true; + } + + // member variables + + //! Start point of line + vector3d start; + //! End point of line + vector3d end; +}; + + //! Typedef for an f32 line. + typedef line3d line3df; + //! Typedef for an integer line. + typedef line3d line3di; + +} // end namespace core +} // end namespace irr + +#endif + diff --git a/inc/matrix4.h b/inc/matrix4.h new file mode 100644 index 0000000..6a29d55 --- /dev/null +++ b/inc/matrix4.h @@ -0,0 +1,2244 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __IRR_MATRIX_H_INCLUDED__ +#define __IRR_MATRIX_H_INCLUDED__ + +#include "irrMath.h" +#include "vector3d.h" +#include "vector2d.h" +#include "plane3d.h" +#include "aabbox3d.h" +#include "rect.h" +#include "irrString.h" + +// enable this to keep track of changes to the matrix +// and make simpler identity check for seldomly changing matrices +// otherwise identity check will always compare the elements +//#define USE_MATRIX_TEST + +// this is only for debugging purposes +//#define USE_MATRIX_TEST_DEBUG + +#if defined( USE_MATRIX_TEST_DEBUG ) + +struct MatrixTest +{ + MatrixTest () : ID(0), Calls(0) {} + char buf[256]; + int Calls; + int ID; +}; +static MatrixTest MTest; + +#endif + +namespace irr +{ +namespace core +{ + + //! 4x4 matrix. Mostly used as transformation matrix for 3d calculations. + /** The matrix is a D3D style matrix, row major with translations in the 4th row. */ + template + class CMatrix4 + { + public: + + //! Constructor Flags + enum eConstructor + { + EM4CONST_NOTHING = 0, + EM4CONST_COPY, + EM4CONST_IDENTITY, + EM4CONST_TRANSPOSED, + EM4CONST_INVERSE, + EM4CONST_INVERSE_TRANSPOSED + }; + + //! Default constructor + /** \param constructor Choose the initialization style */ + CMatrix4( eConstructor constructor = EM4CONST_IDENTITY ); + //! Copy constructor + /** \param other Other matrix to copy from + \param constructor Choose the initialization style */ + CMatrix4(const CMatrix4& other, eConstructor constructor = EM4CONST_COPY); + + //! Simple operator for directly accessing every element of the matrix. + T& operator()(const s32 row, const s32 col) + { +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix=false; +#endif + return M[ row * 4 + col ]; + } + + //! Simple operator for directly accessing every element of the matrix. + const T& operator()(const s32 row, const s32 col) const { return M[row * 4 + col]; } + + //! Simple operator for linearly accessing every element of the matrix. + T& operator[](u32 index) + { +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix=false; +#endif + return M[index]; + } + + //! Simple operator for linearly accessing every element of the matrix. + const T& operator[](u32 index) const { return M[index]; } + + //! Sets this matrix equal to the other matrix. + inline CMatrix4& operator=(const CMatrix4 &other); + + //! Sets all elements of this matrix to the value. + inline CMatrix4& operator=(const T& scalar); + + //! Returns pointer to internal array + const T* pointer() const { return M; } + T* pointer() + { +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix=false; +#endif + return M; + } + + //! Returns true if other matrix is equal to this matrix. + bool operator==(const CMatrix4 &other) const; + + //! Returns true if other matrix is not equal to this matrix. + bool operator!=(const CMatrix4 &other) const; + + //! Add another matrix. + CMatrix4 operator+(const CMatrix4& other) const; + + //! Add another matrix. + CMatrix4& operator+=(const CMatrix4& other); + + //! Subtract another matrix. + CMatrix4 operator-(const CMatrix4& other) const; + + //! Subtract another matrix. + CMatrix4& operator-=(const CMatrix4& other); + + //! set this matrix to the product of two matrices + /** Calculate b*a */ + inline CMatrix4& setbyproduct(const CMatrix4& other_a,const CMatrix4& other_b ); + + //! Set this matrix to the product of two matrices + /** Calculate b*a, no optimization used, + use it if you know you never have a identity matrix */ + CMatrix4& setbyproduct_nocheck(const CMatrix4& other_a,const CMatrix4& other_b ); + + //! Multiply by another matrix. + /** Calculate other*this */ + CMatrix4 operator*(const CMatrix4& other) const; + + //! Multiply by another matrix. + /** Calculate and return other*this */ + CMatrix4& operator*=(const CMatrix4& other); + + //! Multiply by scalar. + CMatrix4 operator*(const T& scalar) const; + + //! Multiply by scalar. + CMatrix4& operator*=(const T& scalar); + + //! Set matrix to identity. + inline CMatrix4& makeIdentity(); + + //! Returns true if the matrix is the identity matrix + inline bool isIdentity() const; + + //! Returns true if the matrix is orthogonal + inline bool isOrthogonal() const; + + //! Returns true if the matrix is the identity matrix + bool isIdentity_integer_base () const; + + //! Set the translation of the current matrix. Will erase any previous values. + CMatrix4& setTranslation( const vector3d& translation ); + + //! Gets the current translation + vector3d getTranslation() const; + + //! Set the inverse translation of the current matrix. Will erase any previous values. + CMatrix4& setInverseTranslation( const vector3d& translation ); + + //! Make a rotation matrix from Euler angles. The 4th row and column are unmodified. + inline CMatrix4& setRotationRadians( const vector3d& rotation ); + + //! Make a rotation matrix from Euler angles. The 4th row and column are unmodified. + CMatrix4& setRotationDegrees( const vector3d& rotation ); + + //! Returns the rotation, as set by setRotation(). + /** This code was orginally written by by Chev. */ + core::vector3d getRotationDegrees() const; + + //! Make an inverted rotation matrix from Euler angles. + /** The 4th row and column are unmodified. */ + inline CMatrix4& setInverseRotationRadians( const vector3d& rotation ); + + //! Make an inverted rotation matrix from Euler angles. + /** The 4th row and column are unmodified. */ + inline CMatrix4& setInverseRotationDegrees( const vector3d& rotation ); + + //! Make a rotation matrix from angle and axis, assuming left handed rotation. + /** The 4th row and column are unmodified. */ + inline CMatrix4& setRotationAxisRadians(const T& angle, const vector3d& axis); + + //! Set Scale + CMatrix4& setScale( const vector3d& scale ); + + //! Set Scale + CMatrix4& setScale( const T scale ) { return setScale(core::vector3d(scale,scale,scale)); } + + //! Get Scale + core::vector3d getScale() const; + + //! Translate a vector by the inverse of the translation part of this matrix. + void inverseTranslateVect( vector3df& vect ) const; + + //! Rotate a vector by the inverse of the rotation part of this matrix. + void inverseRotateVect( vector3df& vect ) const; + + //! Rotate a vector by the rotation part of this matrix. + void rotateVect( vector3df& vect ) const; + + //! An alternate transform vector method, writing into a second vector + void rotateVect(core::vector3df& out, const core::vector3df& in) const; + + //! An alternate transform vector method, writing into an array of 3 floats + void rotateVect(T *out,const core::vector3df &in) const; + + //! Transforms the vector by this matrix + void transformVect( vector3df& vect) const; + + //! Transforms input vector by this matrix and stores result in output vector + void transformVect( vector3df& out, const vector3df& in ) const; + + //! An alternate transform vector method, writing into an array of 4 floats + void transformVect(T *out,const core::vector3df &in) const; + + //! An alternate transform vector method, reading from and writing to an array of 3 floats + void transformVec3(T *out, const T * in) const; + + //! Translate a vector by the translation part of this matrix. + void translateVect( vector3df& vect ) const; + + //! Transforms a plane by this matrix + void transformPlane( core::plane3d &plane) const; + + //! Transforms a plane by this matrix + void transformPlane( const core::plane3d &in, core::plane3d &out) const; + + //! Transforms a axis aligned bounding box + /** The result box of this operation may not be accurate at all. For + correct results, use transformBoxEx() */ + void transformBox(core::aabbox3d& box) const; + + //! Transforms a axis aligned bounding box + /** The result box of this operation should by accurate, but this operation + is slower than transformBox(). */ + void transformBoxEx(core::aabbox3d& box) const; + + //! Multiplies this matrix by a 1x4 matrix + void multiplyWith1x4Matrix(T* matrix) const; + + //! Calculates inverse of matrix. Slow. + /** \return Returns false if there is no inverse matrix.*/ + bool makeInverse(); + + + //! Inverts a primitive matrix which only contains a translation and a rotation + /** \param out: where result matrix is written to. */ + bool getInversePrimitive ( CMatrix4& out ) const; + + //! Gets the inversed matrix of this one + /** \param out: where result matrix is written to. + \return Returns false if there is no inverse matrix. */ + bool getInverse(CMatrix4& out) const; + + //! Builds a right-handed perspective projection matrix based on a field of view + CMatrix4& buildProjectionMatrixPerspectiveFovRH(f32 fieldOfViewRadians, f32 aspectRatio, f32 zNear, f32 zFar); + + //! Builds a left-handed perspective projection matrix based on a field of view + CMatrix4& buildProjectionMatrixPerspectiveFovLH(f32 fieldOfViewRadians, f32 aspectRatio, f32 zNear, f32 zFar); + + //! Builds a left-handed perspective projection matrix based on a field of view, with far plane at infinity + CMatrix4& buildProjectionMatrixPerspectiveFovInfinityLH(f32 fieldOfViewRadians, f32 aspectRatio, f32 zNear, f32 epsilon=0); + + //! Builds a right-handed perspective projection matrix. + CMatrix4& buildProjectionMatrixPerspectiveRH(f32 widthOfViewVolume, f32 heightOfViewVolume, f32 zNear, f32 zFar); + + //! Builds a left-handed perspective projection matrix. + CMatrix4& buildProjectionMatrixPerspectiveLH(f32 widthOfViewVolume, f32 heightOfViewVolume, f32 zNear, f32 zFar); + + //! Builds a left-handed orthogonal projection matrix. + CMatrix4& buildProjectionMatrixOrthoLH(f32 widthOfViewVolume, f32 heightOfViewVolume, f32 zNear, f32 zFar); + + //! Builds a right-handed orthogonal projection matrix. + CMatrix4& buildProjectionMatrixOrthoRH(f32 widthOfViewVolume, f32 heightOfViewVolume, f32 zNear, f32 zFar); + + //! Builds a left-handed look-at matrix. + CMatrix4& buildCameraLookAtMatrixLH( + const vector3df& position, + const vector3df& target, + const vector3df& upVector); + + //! Builds a right-handed look-at matrix. + CMatrix4& buildCameraLookAtMatrixRH( + const vector3df& position, + const vector3df& target, + const vector3df& upVector); + + //! Builds a matrix that flattens geometry into a plane. + /** \param light: light source + \param plane: plane into which the geometry if flattened into + \param point: value between 0 and 1, describing the light source. + If this is 1, it is a point light, if it is 0, it is a directional light. */ + CMatrix4& buildShadowMatrix(const core::vector3df& light, core::plane3df plane, f32 point=1.0f); + + //! Builds a matrix which transforms a normalized Device Coordinate to Device Coordinates. + /** Used to scale <-1,-1><1,1> to viewport, for example from <-1,-1> <1,1> to the viewport <0,0><0,640> */ + CMatrix4& buildNDCToDCMatrix( const core::rect& area, f32 zScale); + + //! Creates a new matrix as interpolated matrix from two other ones. + /** \param b: other matrix to interpolate with + \param time: Must be a value between 0 and 1. */ + CMatrix4 interpolate(const core::CMatrix4& b, f32 time) const; + + //! Gets transposed matrix + CMatrix4 getTransposed() const; + + //! Gets transposed matrix + inline void getTransposed( CMatrix4& dest ) const; + + //! Builds a matrix that rotates from one vector to another + /** \param from: vector to rotate from + \param to: vector to rotate to + */ + CMatrix4& buildRotateFromTo(const core::vector3df& from, const core::vector3df& to); + + //! Builds a combined matrix which translates to a center before rotation and translates from origin afterwards + /** \param center Position to rotate around + \param translate Translation applied after the rotation + */ + void setRotationCenter(const core::vector3df& center, const core::vector3df& translate); + + //! Builds a matrix which rotates a source vector to a look vector over an arbitrary axis + /** \param camPos: viewer position in world coo + \param center: object position in world-coo and rotation pivot + \param translation: object final translation from center + \param axis: axis to rotate about + \param from: source vector to rotate from + */ + void buildAxisAlignedBillboard(const core::vector3df& camPos, + const core::vector3df& center, + const core::vector3df& translation, + const core::vector3df& axis, + const core::vector3df& from); + + /* + construct 2D Texture transformations + rotate about center, scale, and transform. + */ + //! Set to a texture transformation matrix with the given parameters. + CMatrix4& buildTextureTransform( f32 rotateRad, + const core::vector2df &rotatecenter, + const core::vector2df &translate, + const core::vector2df &scale); + + //! Set texture transformation rotation + /** Rotate about z axis, recenter at (0.5,0.5). + Doesn't clear other elements than those affected + \param radAngle Angle in radians + \return Altered matrix */ + CMatrix4& setTextureRotationCenter( f32 radAngle ); + + //! Set texture transformation translation + /** Doesn't clear other elements than those affected. + \param x Offset on x axis + \param y Offset on y axis + \return Altered matrix */ + CMatrix4& setTextureTranslate( f32 x, f32 y ); + + //! Set texture transformation translation, using a transposed representation + /** Doesn't clear other elements than those affected. + \param x Offset on x axis + \param y Offset on y axis + \return Altered matrix */ + CMatrix4& setTextureTranslateTransposed( f32 x, f32 y ); + + //! Set texture transformation scale + /** Doesn't clear other elements than those affected. + \param sx Scale factor on x axis + \param sy Scale factor on y axis + \return Altered matrix. */ + CMatrix4& setTextureScale( f32 sx, f32 sy ); + + //! Set texture transformation scale, and recenter at (0.5,0.5) + /** Doesn't clear other elements than those affected. + \param sx Scale factor on x axis + \param sy Scale factor on y axis + \return Altered matrix. */ + CMatrix4& setTextureScaleCenter( f32 sx, f32 sy ); + + //! Sets all matrix data members at once + CMatrix4& setM(const T* data); + + //! Sets if the matrix is definitely identity matrix + void setDefinitelyIdentityMatrix( bool isDefinitelyIdentityMatrix); + + //! Gets if the matrix is definitely identity matrix + bool getDefinitelyIdentityMatrix() const; + + //! Compare two matrices using the equal method + bool equals(const core::CMatrix4& other, const T tolerance=(T)ROUNDING_ERROR_f64) const; + + private: + //! Matrix data, stored in row-major order + T M[16]; +#if defined ( USE_MATRIX_TEST ) + //! Flag is this matrix is identity matrix + mutable u32 definitelyIdentityMatrix; +#endif +#if defined ( USE_MATRIX_TEST_DEBUG ) + u32 id; + mutable u32 calls; +#endif + + }; + + // Default constructor + template + inline CMatrix4::CMatrix4( eConstructor constructor ) +#if defined ( USE_MATRIX_TEST ) + : definitelyIdentityMatrix(BIT_UNTESTED) +#endif +#if defined ( USE_MATRIX_TEST_DEBUG ) + ,id ( MTest.ID++), calls ( 0 ) +#endif + { + switch ( constructor ) + { + case EM4CONST_NOTHING: + case EM4CONST_COPY: + break; + case EM4CONST_IDENTITY: + case EM4CONST_INVERSE: + default: + makeIdentity(); + break; + } + } + + // Copy constructor + template + inline CMatrix4::CMatrix4( const CMatrix4& other, eConstructor constructor) +#if defined ( USE_MATRIX_TEST ) + : definitelyIdentityMatrix(BIT_UNTESTED) +#endif +#if defined ( USE_MATRIX_TEST_DEBUG ) + ,id ( MTest.ID++), calls ( 0 ) +#endif + { + switch ( constructor ) + { + case EM4CONST_IDENTITY: + makeIdentity(); + break; + case EM4CONST_NOTHING: + break; + case EM4CONST_COPY: + *this = other; + break; + case EM4CONST_TRANSPOSED: + other.getTransposed(*this); + break; + case EM4CONST_INVERSE: + if (!other.getInverse(*this)) + memset(M, 0, 16*sizeof(T)); + break; + case EM4CONST_INVERSE_TRANSPOSED: + if (!other.getInverse(*this)) + memset(M, 0, 16*sizeof(T)); + else + *this=getTransposed(); + break; + } + } + + //! Add another matrix. + template + inline CMatrix4 CMatrix4::operator+(const CMatrix4& other) const + { + CMatrix4 temp ( EM4CONST_NOTHING ); + + temp[0] = M[0]+other[0]; + temp[1] = M[1]+other[1]; + temp[2] = M[2]+other[2]; + temp[3] = M[3]+other[3]; + temp[4] = M[4]+other[4]; + temp[5] = M[5]+other[5]; + temp[6] = M[6]+other[6]; + temp[7] = M[7]+other[7]; + temp[8] = M[8]+other[8]; + temp[9] = M[9]+other[9]; + temp[10] = M[10]+other[10]; + temp[11] = M[11]+other[11]; + temp[12] = M[12]+other[12]; + temp[13] = M[13]+other[13]; + temp[14] = M[14]+other[14]; + temp[15] = M[15]+other[15]; + + return temp; + } + + //! Add another matrix. + template + inline CMatrix4& CMatrix4::operator+=(const CMatrix4& other) + { + M[0]+=other[0]; + M[1]+=other[1]; + M[2]+=other[2]; + M[3]+=other[3]; + M[4]+=other[4]; + M[5]+=other[5]; + M[6]+=other[6]; + M[7]+=other[7]; + M[8]+=other[8]; + M[9]+=other[9]; + M[10]+=other[10]; + M[11]+=other[11]; + M[12]+=other[12]; + M[13]+=other[13]; + M[14]+=other[14]; + M[15]+=other[15]; + + return *this; + } + + //! Subtract another matrix. + template + inline CMatrix4 CMatrix4::operator-(const CMatrix4& other) const + { + CMatrix4 temp ( EM4CONST_NOTHING ); + + temp[0] = M[0]-other[0]; + temp[1] = M[1]-other[1]; + temp[2] = M[2]-other[2]; + temp[3] = M[3]-other[3]; + temp[4] = M[4]-other[4]; + temp[5] = M[5]-other[5]; + temp[6] = M[6]-other[6]; + temp[7] = M[7]-other[7]; + temp[8] = M[8]-other[8]; + temp[9] = M[9]-other[9]; + temp[10] = M[10]-other[10]; + temp[11] = M[11]-other[11]; + temp[12] = M[12]-other[12]; + temp[13] = M[13]-other[13]; + temp[14] = M[14]-other[14]; + temp[15] = M[15]-other[15]; + + return temp; + } + + //! Subtract another matrix. + template + inline CMatrix4& CMatrix4::operator-=(const CMatrix4& other) + { + M[0]-=other[0]; + M[1]-=other[1]; + M[2]-=other[2]; + M[3]-=other[3]; + M[4]-=other[4]; + M[5]-=other[5]; + M[6]-=other[6]; + M[7]-=other[7]; + M[8]-=other[8]; + M[9]-=other[9]; + M[10]-=other[10]; + M[11]-=other[11]; + M[12]-=other[12]; + M[13]-=other[13]; + M[14]-=other[14]; + M[15]-=other[15]; + + return *this; + } + + //! Multiply by scalar. + template + inline CMatrix4 CMatrix4::operator*(const T& scalar) const + { + CMatrix4 temp ( EM4CONST_NOTHING ); + + temp[0] = M[0]*scalar; + temp[1] = M[1]*scalar; + temp[2] = M[2]*scalar; + temp[3] = M[3]*scalar; + temp[4] = M[4]*scalar; + temp[5] = M[5]*scalar; + temp[6] = M[6]*scalar; + temp[7] = M[7]*scalar; + temp[8] = M[8]*scalar; + temp[9] = M[9]*scalar; + temp[10] = M[10]*scalar; + temp[11] = M[11]*scalar; + temp[12] = M[12]*scalar; + temp[13] = M[13]*scalar; + temp[14] = M[14]*scalar; + temp[15] = M[15]*scalar; + + return temp; + } + + //! Multiply by scalar. + template + inline CMatrix4& CMatrix4::operator*=(const T& scalar) + { + M[0]*=scalar; + M[1]*=scalar; + M[2]*=scalar; + M[3]*=scalar; + M[4]*=scalar; + M[5]*=scalar; + M[6]*=scalar; + M[7]*=scalar; + M[8]*=scalar; + M[9]*=scalar; + M[10]*=scalar; + M[11]*=scalar; + M[12]*=scalar; + M[13]*=scalar; + M[14]*=scalar; + M[15]*=scalar; + + return *this; + } + + //! Multiply by another matrix. + template + inline CMatrix4& CMatrix4::operator*=(const CMatrix4& other) + { +#if defined ( USE_MATRIX_TEST ) + // do checks on your own in order to avoid copy creation + if ( !other.isIdentity() ) + { + if ( this->isIdentity() ) + { + return (*this = other); + } + else + { + CMatrix4 temp ( *this ); + return setbyproduct_nocheck( temp, other ); + } + } + return *this; +#else + CMatrix4 temp ( *this ); + return setbyproduct_nocheck( temp, other ); +#endif + } + + //! multiply by another matrix + // set this matrix to the product of two other matrices + // goal is to reduce stack use and copy + template + inline CMatrix4& CMatrix4::setbyproduct_nocheck(const CMatrix4& other_a,const CMatrix4& other_b ) + { + const T *m1 = other_a.M; + const T *m2 = other_b.M; + + M[0] = m1[0]*m2[0] + m1[4]*m2[1] + m1[8]*m2[2] + m1[12]*m2[3]; + M[1] = m1[1]*m2[0] + m1[5]*m2[1] + m1[9]*m2[2] + m1[13]*m2[3]; + M[2] = m1[2]*m2[0] + m1[6]*m2[1] + m1[10]*m2[2] + m1[14]*m2[3]; + M[3] = m1[3]*m2[0] + m1[7]*m2[1] + m1[11]*m2[2] + m1[15]*m2[3]; + + M[4] = m1[0]*m2[4] + m1[4]*m2[5] + m1[8]*m2[6] + m1[12]*m2[7]; + M[5] = m1[1]*m2[4] + m1[5]*m2[5] + m1[9]*m2[6] + m1[13]*m2[7]; + M[6] = m1[2]*m2[4] + m1[6]*m2[5] + m1[10]*m2[6] + m1[14]*m2[7]; + M[7] = m1[3]*m2[4] + m1[7]*m2[5] + m1[11]*m2[6] + m1[15]*m2[7]; + + M[8] = m1[0]*m2[8] + m1[4]*m2[9] + m1[8]*m2[10] + m1[12]*m2[11]; + M[9] = m1[1]*m2[8] + m1[5]*m2[9] + m1[9]*m2[10] + m1[13]*m2[11]; + M[10] = m1[2]*m2[8] + m1[6]*m2[9] + m1[10]*m2[10] + m1[14]*m2[11]; + M[11] = m1[3]*m2[8] + m1[7]*m2[9] + m1[11]*m2[10] + m1[15]*m2[11]; + + M[12] = m1[0]*m2[12] + m1[4]*m2[13] + m1[8]*m2[14] + m1[12]*m2[15]; + M[13] = m1[1]*m2[12] + m1[5]*m2[13] + m1[9]*m2[14] + m1[13]*m2[15]; + M[14] = m1[2]*m2[12] + m1[6]*m2[13] + m1[10]*m2[14] + m1[14]*m2[15]; + M[15] = m1[3]*m2[12] + m1[7]*m2[13] + m1[11]*m2[14] + m1[15]*m2[15]; +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix=false; +#endif + return *this; + } + + + //! multiply by another matrix + // set this matrix to the product of two other matrices + // goal is to reduce stack use and copy + template + inline CMatrix4& CMatrix4::setbyproduct(const CMatrix4& other_a, const CMatrix4& other_b ) + { +#if defined ( USE_MATRIX_TEST ) + if ( other_a.isIdentity () ) + return (*this = other_b); + else + if ( other_b.isIdentity () ) + return (*this = other_a); + else + return setbyproduct_nocheck(other_a,other_b); +#else + return setbyproduct_nocheck(other_a,other_b); +#endif + } + + //! multiply by another matrix + template + inline CMatrix4 CMatrix4::operator*(const CMatrix4& m2) const + { +#if defined ( USE_MATRIX_TEST ) + // Testing purpose.. + if ( this->isIdentity() ) + return m2; + if ( m2.isIdentity() ) + return *this; +#endif + + CMatrix4 m3 ( EM4CONST_NOTHING ); + + const T *m1 = M; + + m3[0] = m1[0]*m2[0] + m1[4]*m2[1] + m1[8]*m2[2] + m1[12]*m2[3]; + m3[1] = m1[1]*m2[0] + m1[5]*m2[1] + m1[9]*m2[2] + m1[13]*m2[3]; + m3[2] = m1[2]*m2[0] + m1[6]*m2[1] + m1[10]*m2[2] + m1[14]*m2[3]; + m3[3] = m1[3]*m2[0] + m1[7]*m2[1] + m1[11]*m2[2] + m1[15]*m2[3]; + + m3[4] = m1[0]*m2[4] + m1[4]*m2[5] + m1[8]*m2[6] + m1[12]*m2[7]; + m3[5] = m1[1]*m2[4] + m1[5]*m2[5] + m1[9]*m2[6] + m1[13]*m2[7]; + m3[6] = m1[2]*m2[4] + m1[6]*m2[5] + m1[10]*m2[6] + m1[14]*m2[7]; + m3[7] = m1[3]*m2[4] + m1[7]*m2[5] + m1[11]*m2[6] + m1[15]*m2[7]; + + m3[8] = m1[0]*m2[8] + m1[4]*m2[9] + m1[8]*m2[10] + m1[12]*m2[11]; + m3[9] = m1[1]*m2[8] + m1[5]*m2[9] + m1[9]*m2[10] + m1[13]*m2[11]; + m3[10] = m1[2]*m2[8] + m1[6]*m2[9] + m1[10]*m2[10] + m1[14]*m2[11]; + m3[11] = m1[3]*m2[8] + m1[7]*m2[9] + m1[11]*m2[10] + m1[15]*m2[11]; + + m3[12] = m1[0]*m2[12] + m1[4]*m2[13] + m1[8]*m2[14] + m1[12]*m2[15]; + m3[13] = m1[1]*m2[12] + m1[5]*m2[13] + m1[9]*m2[14] + m1[13]*m2[15]; + m3[14] = m1[2]*m2[12] + m1[6]*m2[13] + m1[10]*m2[14] + m1[14]*m2[15]; + m3[15] = m1[3]*m2[12] + m1[7]*m2[13] + m1[11]*m2[14] + m1[15]*m2[15]; + return m3; + } + + + + template + inline vector3d CMatrix4::getTranslation() const + { + return vector3d(M[12], M[13], M[14]); + } + + + template + inline CMatrix4& CMatrix4::setTranslation( const vector3d& translation ) + { + M[12] = translation.X; + M[13] = translation.Y; + M[14] = translation.Z; +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix=false; +#endif + return *this; + } + + template + inline CMatrix4& CMatrix4::setInverseTranslation( const vector3d& translation ) + { + M[12] = -translation.X; + M[13] = -translation.Y; + M[14] = -translation.Z; +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix=false; +#endif + return *this; + } + + template + inline CMatrix4& CMatrix4::setScale( const vector3d& scale ) + { + M[0] = scale.X; + M[5] = scale.Y; + M[10] = scale.Z; +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix=false; +#endif + return *this; + } + + //! Returns the absolute values of the scales of the matrix. + /** + Note that this returns the absolute (positive) values unless only scale is set. + Unfortunately it does not appear to be possible to extract any original negative + values. The best that we could do would be to arbitrarily make one scale + negative if one or three of them were negative. + FIXME - return the original values. + */ + template + inline vector3d CMatrix4::getScale() const + { + // See http://www.robertblum.com/articles/2005/02/14/decomposing-matrices + + // Deal with the 0 rotation case first + // Prior to Irrlicht 1.6, we always returned this value. + if(core::iszero(M[1]) && core::iszero(M[2]) && + core::iszero(M[4]) && core::iszero(M[6]) && + core::iszero(M[8]) && core::iszero(M[9])) + return vector3d(M[0], M[5], M[10]); + + // We have to do the full calculation. + return vector3d(sqrtf(M[0] * M[0] + M[1] * M[1] + M[2] * M[2]), + sqrtf(M[4] * M[4] + M[5] * M[5] + M[6] * M[6]), + sqrtf(M[8] * M[8] + M[9] * M[9] + M[10] * M[10])); + } + + template + inline CMatrix4& CMatrix4::setRotationDegrees( const vector3d& rotation ) + { + return setRotationRadians( rotation * core::DEGTORAD ); + } + + template + inline CMatrix4& CMatrix4::setInverseRotationDegrees( const vector3d& rotation ) + { + return setInverseRotationRadians( rotation * core::DEGTORAD ); + } + + template + inline CMatrix4& CMatrix4::setRotationRadians( const vector3d& rotation ) + { + const f64 cr = cos( rotation.X ); + const f64 sr = sin( rotation.X ); + const f64 cp = cos( rotation.Y ); + const f64 sp = sin( rotation.Y ); + const f64 cy = cos( rotation.Z ); + const f64 sy = sin( rotation.Z ); + + M[0] = (T)( cp*cy ); + M[1] = (T)( cp*sy ); + M[2] = (T)( -sp ); + + const f64 srsp = sr*sp; + const f64 crsp = cr*sp; + + M[4] = (T)( srsp*cy-cr*sy ); + M[5] = (T)( srsp*sy+cr*cy ); + M[6] = (T)( sr*cp ); + + M[8] = (T)( crsp*cy+sr*sy ); + M[9] = (T)( crsp*sy-sr*cy ); + M[10] = (T)( cr*cp ); +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix=false; +#endif + return *this; + } + + + //! Returns a rotation that is equivalent to that set by setRotationDegrees(). + /** This code was sent in by Chev. Note that it does not necessarily return + the *same* Euler angles as those set by setRotationDegrees(), but the rotation will + be equivalent, i.e. will have the same result when used to rotate a vector or node. */ + template + inline core::vector3d CMatrix4::getRotationDegrees() const + { + const CMatrix4 &mat = *this; + core::vector3d scale = getScale(); + // we need to check for negative scale on to axes, which would bring up wrong results + if (scale.Y<0 && scale.Z<0) + { + scale.Y =-scale.Y; + scale.Z =-scale.Z; + } + else if (scale.X<0 && scale.Z<0) + { + scale.X =-scale.X; + scale.Z =-scale.Z; + } + else if (scale.X<0 && scale.Y<0) + { + scale.X =-scale.X; + scale.Y =-scale.Y; + } + const core::vector3d invScale(core::reciprocal(scale.X),core::reciprocal(scale.Y),core::reciprocal(scale.Z)); + + f64 Y = -asin(core::clamp(mat[2]*invScale.X, -1.0, 1.0)); + const f64 C = cos(Y); + Y *= RADTODEG64; + + f64 rotx, roty, X, Z; + + if (!core::iszero(C)) + { + const f64 invC = core::reciprocal(C); + rotx = mat[10] * invC * invScale.Z; + roty = mat[6] * invC * invScale.Y; + X = atan2( roty, rotx ) * RADTODEG64; + rotx = mat[0] * invC * invScale.X; + roty = mat[1] * invC * invScale.X; + Z = atan2( roty, rotx ) * RADTODEG64; + } + else + { + X = 0.0; + rotx = mat[5] * invScale.Y; + roty = -mat[4] * invScale.Y; + Z = atan2( roty, rotx ) * RADTODEG64; + } + + // fix values that get below zero + if (X < 0.0) X += 360.0; + if (Y < 0.0) Y += 360.0; + if (Z < 0.0) Z += 360.0; + + return vector3d((T)X,(T)Y,(T)Z); + } + + + //! Sets matrix to rotation matrix of inverse angles given as parameters + template + inline CMatrix4& CMatrix4::setInverseRotationRadians( const vector3d& rotation ) + { + f64 cr = cos( rotation.X ); + f64 sr = sin( rotation.X ); + f64 cp = cos( rotation.Y ); + f64 sp = sin( rotation.Y ); + f64 cy = cos( rotation.Z ); + f64 sy = sin( rotation.Z ); + + M[0] = (T)( cp*cy ); + M[4] = (T)( cp*sy ); + M[8] = (T)( -sp ); + + f64 srsp = sr*sp; + f64 crsp = cr*sp; + + M[1] = (T)( srsp*cy-cr*sy ); + M[5] = (T)( srsp*sy+cr*cy ); + M[9] = (T)( sr*cp ); + + M[2] = (T)( crsp*cy+sr*sy ); + M[6] = (T)( crsp*sy-sr*cy ); + M[10] = (T)( cr*cp ); +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix=false; +#endif + return *this; + } + + //! Sets matrix to rotation matrix defined by axis and angle, assuming LH rotation + template + inline CMatrix4& CMatrix4::setRotationAxisRadians( const T& angle, const vector3d& axis ) + { + const f64 c = cos(angle); + const f64 s = sin(angle); + const f64 t = 1.0 - c; + + const f64 tx = t * axis.X; + const f64 ty = t * axis.Y; + const f64 tz = t * axis.Z; + + const f64 sx = s * axis.X; + const f64 sy = s * axis.Y; + const f64 sz = s * axis.Z; + + M[0] = (T)(tx * axis.X + c); + M[1] = (T)(tx * axis.Y + sz); + M[2] = (T)(tx * axis.Z - sy); + + M[4] = (T)(ty * axis.X - sz); + M[5] = (T)(ty * axis.Y + c); + M[6] = (T)(ty * axis.Z + sx); + + M[8] = (T)(tz * axis.X + sy); + M[9] = (T)(tz * axis.Y - sx); + M[10] = (T)(tz * axis.Z + c); + +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix=false; +#endif + return *this; + } + + + /*! + */ + template + inline CMatrix4& CMatrix4::makeIdentity() + { + memset(M, 0, 16*sizeof(T)); + M[0] = M[5] = M[10] = M[15] = (T)1; +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix=true; +#endif + return *this; + } + + + /* + check identity with epsilon + solve floating range problems.. + */ + template + inline bool CMatrix4::isIdentity() const + { +#if defined ( USE_MATRIX_TEST ) + if (definitelyIdentityMatrix) + return true; +#endif + if (!core::equals( M[12], (T)0 ) || !core::equals( M[13], (T)0 ) || !core::equals( M[14], (T)0 ) || !core::equals( M[15], (T)1 )) + return false; + + if (!core::equals( M[ 0], (T)1 ) || !core::equals( M[ 1], (T)0 ) || !core::equals( M[ 2], (T)0 ) || !core::equals( M[ 3], (T)0 )) + return false; + + if (!core::equals( M[ 4], (T)0 ) || !core::equals( M[ 5], (T)1 ) || !core::equals( M[ 6], (T)0 ) || !core::equals( M[ 7], (T)0 )) + return false; + + if (!core::equals( M[ 8], (T)0 ) || !core::equals( M[ 9], (T)0 ) || !core::equals( M[10], (T)1 ) || !core::equals( M[11], (T)0 )) + return false; +/* + if (!core::equals( M[ 0], (T)1 ) || + !core::equals( M[ 5], (T)1 ) || + !core::equals( M[10], (T)1 ) || + !core::equals( M[15], (T)1 )) + return false; + + for (s32 i=0; i<4; ++i) + for (s32 j=0; j<4; ++j) + if ((j != i) && (!iszero((*this)(i,j)))) + return false; +*/ +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix=true; +#endif + return true; + } + + + /* Check orthogonality of matrix. */ + template + inline bool CMatrix4::isOrthogonal() const + { + T dp=M[0] * M[4 ] + M[1] * M[5 ] + M[2 ] * M[6 ] + M[3 ] * M[7 ]; + if (!iszero(dp)) + return false; + dp = M[0] * M[8 ] + M[1] * M[9 ] + M[2 ] * M[10] + M[3 ] * M[11]; + if (!iszero(dp)) + return false; + dp = M[0] * M[12] + M[1] * M[13] + M[2 ] * M[14] + M[3 ] * M[15]; + if (!iszero(dp)) + return false; + dp = M[4] * M[8 ] + M[5] * M[9 ] + M[6 ] * M[10] + M[7 ] * M[11]; + if (!iszero(dp)) + return false; + dp = M[4] * M[12] + M[5] * M[13] + M[6 ] * M[14] + M[7 ] * M[15]; + if (!iszero(dp)) + return false; + dp = M[8] * M[12] + M[9] * M[13] + M[10] * M[14] + M[11] * M[15]; + return (iszero(dp)); + } + + + /* + doesn't solve floating range problems.. + but takes care on +/- 0 on translation because we are changing it.. + reducing floating point branches + but it needs the floats in memory.. + */ + template + inline bool CMatrix4::isIdentity_integer_base() const + { +#if defined ( USE_MATRIX_TEST ) + if (definitelyIdentityMatrix) + return true; +#endif + if(IR(M[0])!=F32_VALUE_1) return false; + if(IR(M[1])!=0) return false; + if(IR(M[2])!=0) return false; + if(IR(M[3])!=0) return false; + + if(IR(M[4])!=0) return false; + if(IR(M[5])!=F32_VALUE_1) return false; + if(IR(M[6])!=0) return false; + if(IR(M[7])!=0) return false; + + if(IR(M[8])!=0) return false; + if(IR(M[9])!=0) return false; + if(IR(M[10])!=F32_VALUE_1) return false; + if(IR(M[11])!=0) return false; + + if(IR(M[12])!=0) return false; + if(IR(M[13])!=0) return false; + if(IR(M[13])!=0) return false; + if(IR(M[15])!=F32_VALUE_1) return false; + +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix=true; +#endif + return true; + } + + + template + inline void CMatrix4::rotateVect( vector3df& vect ) const + { + vector3df tmp = vect; + vect.X = tmp.X*M[0] + tmp.Y*M[4] + tmp.Z*M[8]; + vect.Y = tmp.X*M[1] + tmp.Y*M[5] + tmp.Z*M[9]; + vect.Z = tmp.X*M[2] + tmp.Y*M[6] + tmp.Z*M[10]; + } + + //! An alternate transform vector method, writing into a second vector + template + inline void CMatrix4::rotateVect(core::vector3df& out, const core::vector3df& in) const + { + out.X = in.X*M[0] + in.Y*M[4] + in.Z*M[8]; + out.Y = in.X*M[1] + in.Y*M[5] + in.Z*M[9]; + out.Z = in.X*M[2] + in.Y*M[6] + in.Z*M[10]; + } + + //! An alternate transform vector method, writing into an array of 3 floats + template + inline void CMatrix4::rotateVect(T *out, const core::vector3df& in) const + { + out[0] = in.X*M[0] + in.Y*M[4] + in.Z*M[8]; + out[1] = in.X*M[1] + in.Y*M[5] + in.Z*M[9]; + out[2] = in.X*M[2] + in.Y*M[6] + in.Z*M[10]; + } + + template + inline void CMatrix4::inverseRotateVect( vector3df& vect ) const + { + vector3df tmp = vect; + vect.X = tmp.X*M[0] + tmp.Y*M[1] + tmp.Z*M[2]; + vect.Y = tmp.X*M[4] + tmp.Y*M[5] + tmp.Z*M[6]; + vect.Z = tmp.X*M[8] + tmp.Y*M[9] + tmp.Z*M[10]; + } + + template + inline void CMatrix4::transformVect( vector3df& vect) const + { + f32 vector[3]; + + vector[0] = vect.X*M[0] + vect.Y*M[4] + vect.Z*M[8] + M[12]; + vector[1] = vect.X*M[1] + vect.Y*M[5] + vect.Z*M[9] + M[13]; + vector[2] = vect.X*M[2] + vect.Y*M[6] + vect.Z*M[10] + M[14]; + + vect.X = vector[0]; + vect.Y = vector[1]; + vect.Z = vector[2]; + } + + template + inline void CMatrix4::transformVect( vector3df& out, const vector3df& in) const + { + out.X = in.X*M[0] + in.Y*M[4] + in.Z*M[8] + M[12]; + out.Y = in.X*M[1] + in.Y*M[5] + in.Z*M[9] + M[13]; + out.Z = in.X*M[2] + in.Y*M[6] + in.Z*M[10] + M[14]; + } + + + template + inline void CMatrix4::transformVect(T *out, const core::vector3df &in) const + { + out[0] = in.X*M[0] + in.Y*M[4] + in.Z*M[8] + M[12]; + out[1] = in.X*M[1] + in.Y*M[5] + in.Z*M[9] + M[13]; + out[2] = in.X*M[2] + in.Y*M[6] + in.Z*M[10] + M[14]; + out[3] = in.X*M[3] + in.Y*M[7] + in.Z*M[11] + M[15]; + } + + template + inline void CMatrix4::transformVec3(T *out, const T * in) const + { + out[0] = in[0]*M[0] + in[1]*M[4] + in[2]*M[8] + M[12]; + out[1] = in[0]*M[1] + in[1]*M[5] + in[2]*M[9] + M[13]; + out[2] = in[0]*M[2] + in[1]*M[6] + in[2]*M[10] + M[14]; + } + + + //! Transforms a plane by this matrix + template + inline void CMatrix4::transformPlane( core::plane3d &plane) const + { + vector3df member; + // Transform the plane member point, i.e. rotate, translate and scale it. + transformVect(member, plane.getMemberPoint()); + + // Transform the normal by the transposed inverse of the matrix + CMatrix4 transposedInverse(*this, EM4CONST_INVERSE_TRANSPOSED); + vector3df normal = plane.Normal; + transposedInverse.transformVect(normal); + + plane.setPlane(member, normal); + } + + //! Transforms a plane by this matrix + template + inline void CMatrix4::transformPlane( const core::plane3d &in, core::plane3d &out) const + { + out = in; + transformPlane( out ); + } + + //! Transforms the edge-points of a bounding box + //! Deprecated as it's usually not what people need (regards only 2 corners, but other corners might be outside the box after transformation) + //! Use transformBoxEx instead. + template + _IRR_DEPRECATED_ inline void CMatrix4::transformBox(core::aabbox3d& box) const + { +#if defined ( USE_MATRIX_TEST ) + if (isIdentity()) + return; +#endif + + transformVect(box.MinEdge); + transformVect(box.MaxEdge); + box.repair(); + } + + //! Transforms a axis aligned bounding box more accurately than transformBox() + template + inline void CMatrix4::transformBoxEx(core::aabbox3d& box) const + { +#if defined ( USE_MATRIX_TEST ) + if (isIdentity()) + return; +#endif + + const f32 Amin[3] = {box.MinEdge.X, box.MinEdge.Y, box.MinEdge.Z}; + const f32 Amax[3] = {box.MaxEdge.X, box.MaxEdge.Y, box.MaxEdge.Z}; + + f32 Bmin[3]; + f32 Bmax[3]; + + Bmin[0] = Bmax[0] = M[12]; + Bmin[1] = Bmax[1] = M[13]; + Bmin[2] = Bmax[2] = M[14]; + + const CMatrix4 &m = *this; + + for (u32 i = 0; i < 3; ++i) + { + for (u32 j = 0; j < 3; ++j) + { + const f32 a = m(j,i) * Amin[j]; + const f32 b = m(j,i) * Amax[j]; + + if (a < b) + { + Bmin[i] += a; + Bmax[i] += b; + } + else + { + Bmin[i] += b; + Bmax[i] += a; + } + } + } + + box.MinEdge.X = Bmin[0]; + box.MinEdge.Y = Bmin[1]; + box.MinEdge.Z = Bmin[2]; + + box.MaxEdge.X = Bmax[0]; + box.MaxEdge.Y = Bmax[1]; + box.MaxEdge.Z = Bmax[2]; + } + + + //! Multiplies this matrix by a 1x4 matrix + template + inline void CMatrix4::multiplyWith1x4Matrix(T* matrix) const + { + /* + 0 1 2 3 + 4 5 6 7 + 8 9 10 11 + 12 13 14 15 + */ + + T mat[4]; + mat[0] = matrix[0]; + mat[1] = matrix[1]; + mat[2] = matrix[2]; + mat[3] = matrix[3]; + + matrix[0] = M[0]*mat[0] + M[4]*mat[1] + M[8]*mat[2] + M[12]*mat[3]; + matrix[1] = M[1]*mat[0] + M[5]*mat[1] + M[9]*mat[2] + M[13]*mat[3]; + matrix[2] = M[2]*mat[0] + M[6]*mat[1] + M[10]*mat[2] + M[14]*mat[3]; + matrix[3] = M[3]*mat[0] + M[7]*mat[1] + M[11]*mat[2] + M[15]*mat[3]; + } + + template + inline void CMatrix4::inverseTranslateVect( vector3df& vect ) const + { + vect.X = vect.X-M[12]; + vect.Y = vect.Y-M[13]; + vect.Z = vect.Z-M[14]; + } + + template + inline void CMatrix4::translateVect( vector3df& vect ) const + { + vect.X = vect.X+M[12]; + vect.Y = vect.Y+M[13]; + vect.Z = vect.Z+M[14]; + } + + + template + inline bool CMatrix4::getInverse(CMatrix4& out) const + { + /// Calculates the inverse of this Matrix + /// The inverse is calculated using Cramers rule. + /// If no inverse exists then 'false' is returned. + +#if defined ( USE_MATRIX_TEST ) + if ( this->isIdentity() ) + { + out=*this; + return true; + } +#endif + const CMatrix4 &m = *this; + + f32 d = (m(0, 0) * m(1, 1) - m(0, 1) * m(1, 0)) * (m(2, 2) * m(3, 3) - m(2, 3) * m(3, 2)) - + (m(0, 0) * m(1, 2) - m(0, 2) * m(1, 0)) * (m(2, 1) * m(3, 3) - m(2, 3) * m(3, 1)) + + (m(0, 0) * m(1, 3) - m(0, 3) * m(1, 0)) * (m(2, 1) * m(3, 2) - m(2, 2) * m(3, 1)) + + (m(0, 1) * m(1, 2) - m(0, 2) * m(1, 1)) * (m(2, 0) * m(3, 3) - m(2, 3) * m(3, 0)) - + (m(0, 1) * m(1, 3) - m(0, 3) * m(1, 1)) * (m(2, 0) * m(3, 2) - m(2, 2) * m(3, 0)) + + (m(0, 2) * m(1, 3) - m(0, 3) * m(1, 2)) * (m(2, 0) * m(3, 1) - m(2, 1) * m(3, 0)); + + if( core::iszero ( d, FLT_MIN ) ) + return false; + + d = core::reciprocal ( d ); + + out(0, 0) = d * (m(1, 1) * (m(2, 2) * m(3, 3) - m(2, 3) * m(3, 2)) + + m(1, 2) * (m(2, 3) * m(3, 1) - m(2, 1) * m(3, 3)) + + m(1, 3) * (m(2, 1) * m(3, 2) - m(2, 2) * m(3, 1))); + out(0, 1) = d * (m(2, 1) * (m(0, 2) * m(3, 3) - m(0, 3) * m(3, 2)) + + m(2, 2) * (m(0, 3) * m(3, 1) - m(0, 1) * m(3, 3)) + + m(2, 3) * (m(0, 1) * m(3, 2) - m(0, 2) * m(3, 1))); + out(0, 2) = d * (m(3, 1) * (m(0, 2) * m(1, 3) - m(0, 3) * m(1, 2)) + + m(3, 2) * (m(0, 3) * m(1, 1) - m(0, 1) * m(1, 3)) + + m(3, 3) * (m(0, 1) * m(1, 2) - m(0, 2) * m(1, 1))); + out(0, 3) = d * (m(0, 1) * (m(1, 3) * m(2, 2) - m(1, 2) * m(2, 3)) + + m(0, 2) * (m(1, 1) * m(2, 3) - m(1, 3) * m(2, 1)) + + m(0, 3) * (m(1, 2) * m(2, 1) - m(1, 1) * m(2, 2))); + out(1, 0) = d * (m(1, 2) * (m(2, 0) * m(3, 3) - m(2, 3) * m(3, 0)) + + m(1, 3) * (m(2, 2) * m(3, 0) - m(2, 0) * m(3, 2)) + + m(1, 0) * (m(2, 3) * m(3, 2) - m(2, 2) * m(3, 3))); + out(1, 1) = d * (m(2, 2) * (m(0, 0) * m(3, 3) - m(0, 3) * m(3, 0)) + + m(2, 3) * (m(0, 2) * m(3, 0) - m(0, 0) * m(3, 2)) + + m(2, 0) * (m(0, 3) * m(3, 2) - m(0, 2) * m(3, 3))); + out(1, 2) = d * (m(3, 2) * (m(0, 0) * m(1, 3) - m(0, 3) * m(1, 0)) + + m(3, 3) * (m(0, 2) * m(1, 0) - m(0, 0) * m(1, 2)) + + m(3, 0) * (m(0, 3) * m(1, 2) - m(0, 2) * m(1, 3))); + out(1, 3) = d * (m(0, 2) * (m(1, 3) * m(2, 0) - m(1, 0) * m(2, 3)) + + m(0, 3) * (m(1, 0) * m(2, 2) - m(1, 2) * m(2, 0)) + + m(0, 0) * (m(1, 2) * m(2, 3) - m(1, 3) * m(2, 2))); + out(2, 0) = d * (m(1, 3) * (m(2, 0) * m(3, 1) - m(2, 1) * m(3, 0)) + + m(1, 0) * (m(2, 1) * m(3, 3) - m(2, 3) * m(3, 1)) + + m(1, 1) * (m(2, 3) * m(3, 0) - m(2, 0) * m(3, 3))); + out(2, 1) = d * (m(2, 3) * (m(0, 0) * m(3, 1) - m(0, 1) * m(3, 0)) + + m(2, 0) * (m(0, 1) * m(3, 3) - m(0, 3) * m(3, 1)) + + m(2, 1) * (m(0, 3) * m(3, 0) - m(0, 0) * m(3, 3))); + out(2, 2) = d * (m(3, 3) * (m(0, 0) * m(1, 1) - m(0, 1) * m(1, 0)) + + m(3, 0) * (m(0, 1) * m(1, 3) - m(0, 3) * m(1, 1)) + + m(3, 1) * (m(0, 3) * m(1, 0) - m(0, 0) * m(1, 3))); + out(2, 3) = d * (m(0, 3) * (m(1, 1) * m(2, 0) - m(1, 0) * m(2, 1)) + + m(0, 0) * (m(1, 3) * m(2, 1) - m(1, 1) * m(2, 3)) + + m(0, 1) * (m(1, 0) * m(2, 3) - m(1, 3) * m(2, 0))); + out(3, 0) = d * (m(1, 0) * (m(2, 2) * m(3, 1) - m(2, 1) * m(3, 2)) + + m(1, 1) * (m(2, 0) * m(3, 2) - m(2, 2) * m(3, 0)) + + m(1, 2) * (m(2, 1) * m(3, 0) - m(2, 0) * m(3, 1))); + out(3, 1) = d * (m(2, 0) * (m(0, 2) * m(3, 1) - m(0, 1) * m(3, 2)) + + m(2, 1) * (m(0, 0) * m(3, 2) - m(0, 2) * m(3, 0)) + + m(2, 2) * (m(0, 1) * m(3, 0) - m(0, 0) * m(3, 1))); + out(3, 2) = d * (m(3, 0) * (m(0, 2) * m(1, 1) - m(0, 1) * m(1, 2)) + + m(3, 1) * (m(0, 0) * m(1, 2) - m(0, 2) * m(1, 0)) + + m(3, 2) * (m(0, 1) * m(1, 0) - m(0, 0) * m(1, 1))); + out(3, 3) = d * (m(0, 0) * (m(1, 1) * m(2, 2) - m(1, 2) * m(2, 1)) + + m(0, 1) * (m(1, 2) * m(2, 0) - m(1, 0) * m(2, 2)) + + m(0, 2) * (m(1, 0) * m(2, 1) - m(1, 1) * m(2, 0))); + +#if defined ( USE_MATRIX_TEST ) + out.definitelyIdentityMatrix = definitelyIdentityMatrix; +#endif + return true; + } + + + //! Inverts a primitive matrix which only contains a translation and a rotation + //! \param out: where result matrix is written to. + template + inline bool CMatrix4::getInversePrimitive ( CMatrix4& out ) const + { + out.M[0 ] = M[0]; + out.M[1 ] = M[4]; + out.M[2 ] = M[8]; + out.M[3 ] = 0; + + out.M[4 ] = M[1]; + out.M[5 ] = M[5]; + out.M[6 ] = M[9]; + out.M[7 ] = 0; + + out.M[8 ] = M[2]; + out.M[9 ] = M[6]; + out.M[10] = M[10]; + out.M[11] = 0; + + out.M[12] = (T)-(M[12]*M[0] + M[13]*M[1] + M[14]*M[2]); + out.M[13] = (T)-(M[12]*M[4] + M[13]*M[5] + M[14]*M[6]); + out.M[14] = (T)-(M[12]*M[8] + M[13]*M[9] + M[14]*M[10]); + out.M[15] = 1; + +#if defined ( USE_MATRIX_TEST ) + out.definitelyIdentityMatrix = definitelyIdentityMatrix; +#endif + return true; + } + + /*! + */ + template + inline bool CMatrix4::makeInverse() + { +#if defined ( USE_MATRIX_TEST ) + if (definitelyIdentityMatrix) + return true; +#endif + CMatrix4 temp ( EM4CONST_NOTHING ); + + if (getInverse(temp)) + { + *this = temp; + return true; + } + + return false; + } + + + template + inline CMatrix4& CMatrix4::operator=(const CMatrix4 &other) + { + if (this==&other) + return *this; + memcpy(M, other.M, 16*sizeof(T)); +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix=other.definitelyIdentityMatrix; +#endif + return *this; + } + + + template + inline CMatrix4& CMatrix4::operator=(const T& scalar) + { + for (s32 i = 0; i < 16; ++i) + M[i]=scalar; + +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix=false; +#endif + return *this; + } + + + template + inline bool CMatrix4::operator==(const CMatrix4 &other) const + { +#if defined ( USE_MATRIX_TEST ) + if (definitelyIdentityMatrix && other.definitelyIdentityMatrix) + return true; +#endif + for (s32 i = 0; i < 16; ++i) + if (M[i] != other.M[i]) + return false; + + return true; + } + + + template + inline bool CMatrix4::operator!=(const CMatrix4 &other) const + { + return !(*this == other); + } + + + // Builds a right-handed perspective projection matrix based on a field of view + template + inline CMatrix4& CMatrix4::buildProjectionMatrixPerspectiveFovRH( + f32 fieldOfViewRadians, f32 aspectRatio, f32 zNear, f32 zFar) + { + const f64 h = reciprocal(tan(fieldOfViewRadians*0.5)); + _IRR_DEBUG_BREAK_IF(aspectRatio==0.f); //divide by zero + const T w = static_cast(h / aspectRatio); + + _IRR_DEBUG_BREAK_IF(zNear==zFar); //divide by zero + M[0] = w; + M[1] = 0; + M[2] = 0; + M[3] = 0; + + M[4] = 0; + M[5] = (T)h; + M[6] = 0; + M[7] = 0; + + M[8] = 0; + M[9] = 0; + M[10] = (T)(zFar/(zNear-zFar)); // DirectX version +// M[10] = (T)(zFar+zNear/(zNear-zFar)); // OpenGL version + M[11] = -1; + + M[12] = 0; + M[13] = 0; + M[14] = (T)(zNear*zFar/(zNear-zFar)); // DirectX version +// M[14] = (T)(2.0f*zNear*zFar/(zNear-zFar)); // OpenGL version + M[15] = 0; + +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix=false; +#endif + return *this; + } + + + // Builds a left-handed perspective projection matrix based on a field of view + template + inline CMatrix4& CMatrix4::buildProjectionMatrixPerspectiveFovLH( + f32 fieldOfViewRadians, f32 aspectRatio, f32 zNear, f32 zFar) + { + const f64 h = reciprocal(tan(fieldOfViewRadians*0.5)); + _IRR_DEBUG_BREAK_IF(aspectRatio==0.f); //divide by zero + const T w = static_cast(h / aspectRatio); + + _IRR_DEBUG_BREAK_IF(zNear==zFar); //divide by zero + M[0] = w; + M[1] = 0; + M[2] = 0; + M[3] = 0; + + M[4] = 0; + M[5] = (T)h; + M[6] = 0; + M[7] = 0; + + M[8] = 0; + M[9] = 0; + M[10] = (T)(zFar/(zFar-zNear)); + M[11] = 1; + + M[12] = 0; + M[13] = 0; + M[14] = (T)(-zNear*zFar/(zFar-zNear)); + M[15] = 0; + +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix=false; +#endif + return *this; + } + + + // Builds a left-handed perspective projection matrix based on a field of view, with far plane culling at infinity + template + inline CMatrix4& CMatrix4::buildProjectionMatrixPerspectiveFovInfinityLH( + f32 fieldOfViewRadians, f32 aspectRatio, f32 zNear, f32 epsilon) + { + const f64 h = reciprocal(tan(fieldOfViewRadians*0.5)); + _IRR_DEBUG_BREAK_IF(aspectRatio==0.f); //divide by zero + const T w = static_cast(h / aspectRatio); + + M[0] = w; + M[1] = 0; + M[2] = 0; + M[3] = 0; + + M[4] = 0; + M[5] = (T)h; + M[6] = 0; + M[7] = 0; + + M[8] = 0; + M[9] = 0; + M[10] = (T)(1.f-epsilon); + M[11] = 1; + + M[12] = 0; + M[13] = 0; + M[14] = (T)(zNear*(epsilon-1.f)); + M[15] = 0; + +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix=false; +#endif + return *this; + } + + + // Builds a left-handed orthogonal projection matrix. + template + inline CMatrix4& CMatrix4::buildProjectionMatrixOrthoLH( + f32 widthOfViewVolume, f32 heightOfViewVolume, f32 zNear, f32 zFar) + { + _IRR_DEBUG_BREAK_IF(widthOfViewVolume==0.f); //divide by zero + _IRR_DEBUG_BREAK_IF(heightOfViewVolume==0.f); //divide by zero + _IRR_DEBUG_BREAK_IF(zNear==zFar); //divide by zero + M[0] = (T)(2/widthOfViewVolume); + M[1] = 0; + M[2] = 0; + M[3] = 0; + + M[4] = 0; + M[5] = (T)(2/heightOfViewVolume); + M[6] = 0; + M[7] = 0; + + M[8] = 0; + M[9] = 0; + M[10] = (T)(1/(zFar-zNear)); + M[11] = 0; + + M[12] = 0; + M[13] = 0; + M[14] = (T)(zNear/(zNear-zFar)); + M[15] = 1; + +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix=false; +#endif + return *this; + } + + + // Builds a right-handed orthogonal projection matrix. + template + inline CMatrix4& CMatrix4::buildProjectionMatrixOrthoRH( + f32 widthOfViewVolume, f32 heightOfViewVolume, f32 zNear, f32 zFar) + { + _IRR_DEBUG_BREAK_IF(widthOfViewVolume==0.f); //divide by zero + _IRR_DEBUG_BREAK_IF(heightOfViewVolume==0.f); //divide by zero + _IRR_DEBUG_BREAK_IF(zNear==zFar); //divide by zero + M[0] = (T)(2/widthOfViewVolume); + M[1] = 0; + M[2] = 0; + M[3] = 0; + + M[4] = 0; + M[5] = (T)(2/heightOfViewVolume); + M[6] = 0; + M[7] = 0; + + M[8] = 0; + M[9] = 0; + M[10] = (T)(1/(zNear-zFar)); + M[11] = 0; + + M[12] = 0; + M[13] = 0; + M[14] = (T)(zNear/(zNear-zFar)); + M[15] = 1; + +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix=false; +#endif + return *this; + } + + + // Builds a right-handed perspective projection matrix. + template + inline CMatrix4& CMatrix4::buildProjectionMatrixPerspectiveRH( + f32 widthOfViewVolume, f32 heightOfViewVolume, f32 zNear, f32 zFar) + { + _IRR_DEBUG_BREAK_IF(widthOfViewVolume==0.f); //divide by zero + _IRR_DEBUG_BREAK_IF(heightOfViewVolume==0.f); //divide by zero + _IRR_DEBUG_BREAK_IF(zNear==zFar); //divide by zero + M[0] = (T)(2*zNear/widthOfViewVolume); + M[1] = 0; + M[2] = 0; + M[3] = 0; + + M[4] = 0; + M[5] = (T)(2*zNear/heightOfViewVolume); + M[6] = 0; + M[7] = 0; + + M[8] = 0; + M[9] = 0; + M[10] = (T)(zFar/(zNear-zFar)); + M[11] = -1; + + M[12] = 0; + M[13] = 0; + M[14] = (T)(zNear*zFar/(zNear-zFar)); + M[15] = 0; + +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix=false; +#endif + return *this; + } + + + // Builds a left-handed perspective projection matrix. + template + inline CMatrix4& CMatrix4::buildProjectionMatrixPerspectiveLH( + f32 widthOfViewVolume, f32 heightOfViewVolume, f32 zNear, f32 zFar) + { + _IRR_DEBUG_BREAK_IF(widthOfViewVolume==0.f); //divide by zero + _IRR_DEBUG_BREAK_IF(heightOfViewVolume==0.f); //divide by zero + _IRR_DEBUG_BREAK_IF(zNear==zFar); //divide by zero + M[0] = (T)(2*zNear/widthOfViewVolume); + M[1] = 0; + M[2] = 0; + M[3] = 0; + + M[4] = 0; + M[5] = (T)(2*zNear/heightOfViewVolume); + M[6] = 0; + M[7] = 0; + + M[8] = 0; + M[9] = 0; + M[10] = (T)(zFar/(zFar-zNear)); + M[11] = 1; + + M[12] = 0; + M[13] = 0; + M[14] = (T)(zNear*zFar/(zNear-zFar)); + M[15] = 0; +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix=false; +#endif + return *this; + } + + + // Builds a matrix that flattens geometry into a plane. + template + inline CMatrix4& CMatrix4::buildShadowMatrix(const core::vector3df& light, core::plane3df plane, f32 point) + { + plane.Normal.normalize(); + const f32 d = plane.Normal.dotProduct(light); + + M[ 0] = (T)(-plane.Normal.X * light.X + d); + M[ 1] = (T)(-plane.Normal.X * light.Y); + M[ 2] = (T)(-plane.Normal.X * light.Z); + M[ 3] = (T)(-plane.Normal.X * point); + + M[ 4] = (T)(-plane.Normal.Y * light.X); + M[ 5] = (T)(-plane.Normal.Y * light.Y + d); + M[ 6] = (T)(-plane.Normal.Y * light.Z); + M[ 7] = (T)(-plane.Normal.Y * point); + + M[ 8] = (T)(-plane.Normal.Z * light.X); + M[ 9] = (T)(-plane.Normal.Z * light.Y); + M[10] = (T)(-plane.Normal.Z * light.Z + d); + M[11] = (T)(-plane.Normal.Z * point); + + M[12] = (T)(-plane.D * light.X); + M[13] = (T)(-plane.D * light.Y); + M[14] = (T)(-plane.D * light.Z); + M[15] = (T)(-plane.D * point + d); +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix=false; +#endif + return *this; + } + + // Builds a left-handed look-at matrix. + template + inline CMatrix4& CMatrix4::buildCameraLookAtMatrixLH( + const vector3df& position, + const vector3df& target, + const vector3df& upVector) + { + vector3df zaxis = target - position; + zaxis.normalize(); + + vector3df xaxis = upVector.crossProduct(zaxis); + xaxis.normalize(); + + vector3df yaxis = zaxis.crossProduct(xaxis); + + M[0] = (T)xaxis.X; + M[1] = (T)yaxis.X; + M[2] = (T)zaxis.X; + M[3] = 0; + + M[4] = (T)xaxis.Y; + M[5] = (T)yaxis.Y; + M[6] = (T)zaxis.Y; + M[7] = 0; + + M[8] = (T)xaxis.Z; + M[9] = (T)yaxis.Z; + M[10] = (T)zaxis.Z; + M[11] = 0; + + M[12] = (T)-xaxis.dotProduct(position); + M[13] = (T)-yaxis.dotProduct(position); + M[14] = (T)-zaxis.dotProduct(position); + M[15] = 1; +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix=false; +#endif + return *this; + } + + + // Builds a right-handed look-at matrix. + template + inline CMatrix4& CMatrix4::buildCameraLookAtMatrixRH( + const vector3df& position, + const vector3df& target, + const vector3df& upVector) + { + vector3df zaxis = position - target; + zaxis.normalize(); + + vector3df xaxis = upVector.crossProduct(zaxis); + xaxis.normalize(); + + vector3df yaxis = zaxis.crossProduct(xaxis); + + M[0] = (T)xaxis.X; + M[1] = (T)yaxis.X; + M[2] = (T)zaxis.X; + M[3] = 0; + + M[4] = (T)xaxis.Y; + M[5] = (T)yaxis.Y; + M[6] = (T)zaxis.Y; + M[7] = 0; + + M[8] = (T)xaxis.Z; + M[9] = (T)yaxis.Z; + M[10] = (T)zaxis.Z; + M[11] = 0; + + M[12] = (T)-xaxis.dotProduct(position); + M[13] = (T)-yaxis.dotProduct(position); + M[14] = (T)-zaxis.dotProduct(position); + M[15] = 1; +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix=false; +#endif + return *this; + } + + + // creates a new matrix as interpolated matrix from this and the passed one. + template + inline CMatrix4 CMatrix4::interpolate(const core::CMatrix4& b, f32 time) const + { + CMatrix4 mat ( EM4CONST_NOTHING ); + + for (u32 i=0; i < 16; i += 4) + { + mat.M[i+0] = (T)(M[i+0] + ( b.M[i+0] - M[i+0] ) * time); + mat.M[i+1] = (T)(M[i+1] + ( b.M[i+1] - M[i+1] ) * time); + mat.M[i+2] = (T)(M[i+2] + ( b.M[i+2] - M[i+2] ) * time); + mat.M[i+3] = (T)(M[i+3] + ( b.M[i+3] - M[i+3] ) * time); + } + return mat; + } + + + // returns transposed matrix + template + inline CMatrix4 CMatrix4::getTransposed() const + { + CMatrix4 t ( EM4CONST_NOTHING ); + getTransposed ( t ); + return t; + } + + + // returns transposed matrix + template + inline void CMatrix4::getTransposed( CMatrix4& o ) const + { + o[ 0] = M[ 0]; + o[ 1] = M[ 4]; + o[ 2] = M[ 8]; + o[ 3] = M[12]; + + o[ 4] = M[ 1]; + o[ 5] = M[ 5]; + o[ 6] = M[ 9]; + o[ 7] = M[13]; + + o[ 8] = M[ 2]; + o[ 9] = M[ 6]; + o[10] = M[10]; + o[11] = M[14]; + + o[12] = M[ 3]; + o[13] = M[ 7]; + o[14] = M[11]; + o[15] = M[15]; +#if defined ( USE_MATRIX_TEST ) + o.definitelyIdentityMatrix=definitelyIdentityMatrix; +#endif + } + + + // used to scale <-1,-1><1,1> to viewport + template + inline CMatrix4& CMatrix4::buildNDCToDCMatrix( const core::rect& viewport, f32 zScale) + { + const f32 scaleX = (viewport.getWidth() - 0.75f ) * 0.5f; + const f32 scaleY = -(viewport.getHeight() - 0.75f ) * 0.5f; + + const f32 dx = -0.5f + ( (viewport.UpperLeftCorner.X + viewport.LowerRightCorner.X ) * 0.5f ); + const f32 dy = -0.5f + ( (viewport.UpperLeftCorner.Y + viewport.LowerRightCorner.Y ) * 0.5f ); + + makeIdentity(); + M[12] = (T)dx; + M[13] = (T)dy; + return setScale(core::vector3d((T)scaleX, (T)scaleY, (T)zScale)); + } + + //! Builds a matrix that rotates from one vector to another + /** \param from: vector to rotate from + \param to: vector to rotate to + + http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToMatrix/index.htm + */ + template + inline CMatrix4& CMatrix4::buildRotateFromTo(const core::vector3df& from, const core::vector3df& to) + { + // unit vectors + core::vector3df f(from); + core::vector3df t(to); + f.normalize(); + t.normalize(); + + // axis multiplication by sin + core::vector3df vs(t.crossProduct(f)); + + // axis of rotation + core::vector3df v(vs); + v.normalize(); + + // cosinus angle + T ca = f.dotProduct(t); + + core::vector3df vt(v * (1 - ca)); + + M[0] = vt.X * v.X + ca; + M[5] = vt.Y * v.Y + ca; + M[10] = vt.Z * v.Z + ca; + + vt.X *= v.Y; + vt.Z *= v.X; + vt.Y *= v.Z; + + M[1] = vt.X - vs.Z; + M[2] = vt.Z + vs.Y; + M[3] = 0; + + M[4] = vt.X + vs.Z; + M[6] = vt.Y - vs.X; + M[7] = 0; + + M[8] = vt.Z - vs.Y; + M[9] = vt.Y + vs.X; + M[11] = 0; + + M[12] = 0; + M[13] = 0; + M[14] = 0; + M[15] = 1; + + return *this; + } + + //! Builds a matrix which rotates a source vector to a look vector over an arbitrary axis + /** \param camPos: viewer position in world coord + \param center: object position in world-coord, rotation pivot + \param translation: object final translation from center + \param axis: axis to rotate about + \param from: source vector to rotate from + */ + template + inline void CMatrix4::buildAxisAlignedBillboard( + const core::vector3df& camPos, + const core::vector3df& center, + const core::vector3df& translation, + const core::vector3df& axis, + const core::vector3df& from) + { + // axis of rotation + core::vector3df up = axis; + up.normalize(); + const core::vector3df forward = (camPos - center).normalize(); + const core::vector3df right = up.crossProduct(forward).normalize(); + + // correct look vector + const core::vector3df look = right.crossProduct(up); + + // rotate from to + // axis multiplication by sin + const core::vector3df vs = look.crossProduct(from); + + // cosinus angle + const f32 ca = from.dotProduct(look); + + core::vector3df vt(up * (1.f - ca)); + + M[0] = static_cast(vt.X * up.X + ca); + M[5] = static_cast(vt.Y * up.Y + ca); + M[10] = static_cast(vt.Z * up.Z + ca); + + vt.X *= up.Y; + vt.Z *= up.X; + vt.Y *= up.Z; + + M[1] = static_cast(vt.X - vs.Z); + M[2] = static_cast(vt.Z + vs.Y); + M[3] = 0; + + M[4] = static_cast(vt.X + vs.Z); + M[6] = static_cast(vt.Y - vs.X); + M[7] = 0; + + M[8] = static_cast(vt.Z - vs.Y); + M[9] = static_cast(vt.Y + vs.X); + M[11] = 0; + + setRotationCenter(center, translation); + } + + + //! Builds a combined matrix which translate to a center before rotation and translate afterwards + template + inline void CMatrix4::setRotationCenter(const core::vector3df& center, const core::vector3df& translation) + { + M[12] = -M[0]*center.X - M[4]*center.Y - M[8]*center.Z + (center.X - translation.X ); + M[13] = -M[1]*center.X - M[5]*center.Y - M[9]*center.Z + (center.Y - translation.Y ); + M[14] = -M[2]*center.X - M[6]*center.Y - M[10]*center.Z + (center.Z - translation.Z ); + M[15] = (T) 1.0; +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix=false; +#endif + } + + /*! + Generate texture coordinates as linear functions so that: + u = Ux*x + Uy*y + Uz*z + Uw + v = Vx*x + Vy*y + Vz*z + Vw + The matrix M for this case is: + Ux Vx 0 0 + Uy Vy 0 0 + Uz Vz 0 0 + Uw Vw 0 0 + */ + + + template + inline CMatrix4& CMatrix4::buildTextureTransform( f32 rotateRad, + const core::vector2df &rotatecenter, + const core::vector2df &translate, + const core::vector2df &scale) + { + const f32 c = cosf(rotateRad); + const f32 s = sinf(rotateRad); + + M[0] = (T)(c * scale.X); + M[1] = (T)(s * scale.Y); + M[2] = 0; + M[3] = 0; + + M[4] = (T)(-s * scale.X); + M[5] = (T)(c * scale.Y); + M[6] = 0; + M[7] = 0; + + M[8] = (T)(c * scale.X * rotatecenter.X + -s * rotatecenter.Y + translate.X); + M[9] = (T)(s * scale.Y * rotatecenter.X + c * rotatecenter.Y + translate.Y); + M[10] = 1; + M[11] = 0; + + M[12] = 0; + M[13] = 0; + M[14] = 0; + M[15] = 1; +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix=false; +#endif + return *this; + } + + + // rotate about z axis, center ( 0.5, 0.5 ) + template + inline CMatrix4& CMatrix4::setTextureRotationCenter( f32 rotateRad ) + { + const f32 c = cosf(rotateRad); + const f32 s = sinf(rotateRad); + M[0] = (T)c; + M[1] = (T)s; + + M[4] = (T)-s; + M[5] = (T)c; + + M[8] = (T)(0.5f * ( s - c) + 0.5f); + M[9] = (T)(-0.5f * ( s + c) + 0.5f); + +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix = definitelyIdentityMatrix && (rotateRad==0.0f); +#endif + return *this; + } + + + template + inline CMatrix4& CMatrix4::setTextureTranslate ( f32 x, f32 y ) + { + M[8] = (T)x; + M[9] = (T)y; + +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix = definitelyIdentityMatrix && (x==0.0f) && (y==0.0f); +#endif + return *this; + } + + + template + inline CMatrix4& CMatrix4::setTextureTranslateTransposed ( f32 x, f32 y ) + { + M[2] = (T)x; + M[6] = (T)y; + +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix = definitelyIdentityMatrix && (x==0.0f) && (y==0.0f) ; +#endif + return *this; + } + + template + inline CMatrix4& CMatrix4::setTextureScale ( f32 sx, f32 sy ) + { + M[0] = (T)sx; + M[5] = (T)sy; +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix = definitelyIdentityMatrix && (sx==1.0f) && (sy==1.0f); +#endif + return *this; + } + + + template + inline CMatrix4& CMatrix4::setTextureScaleCenter( f32 sx, f32 sy ) + { + M[0] = (T)sx; + M[5] = (T)sy; + M[8] = (T)(0.5f - 0.5f * sx); + M[9] = (T)(0.5f - 0.5f * sy); + +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix = definitelyIdentityMatrix && (sx==1.0f) && (sy==1.0f); +#endif + return *this; + } + + + // sets all matrix data members at once + template + inline CMatrix4& CMatrix4::setM(const T* data) + { + memcpy(M,data, 16*sizeof(T)); + +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix=false; +#endif + return *this; + } + + + // sets if the matrix is definitely identity matrix + template + inline void CMatrix4::setDefinitelyIdentityMatrix( bool isDefinitelyIdentityMatrix) + { +#if defined ( USE_MATRIX_TEST ) + definitelyIdentityMatrix = isDefinitelyIdentityMatrix; +#endif + } + + + // gets if the matrix is definitely identity matrix + template + inline bool CMatrix4::getDefinitelyIdentityMatrix() const + { +#if defined ( USE_MATRIX_TEST ) + return definitelyIdentityMatrix; +#else + return false; +#endif + } + + + //! Compare two matrices using the equal method + template + inline bool CMatrix4::equals(const core::CMatrix4& other, const T tolerance) const + { +#if defined ( USE_MATRIX_TEST ) + if (definitelyIdentityMatrix && other.definitelyIdentityMatrix) + return true; +#endif + for (s32 i = 0; i < 16; ++i) + if (!core::equals(M[i],other.M[i], tolerance)) + return false; + + return true; + } + + + // Multiply by scalar. + template + inline CMatrix4 operator*(const T scalar, const CMatrix4& mat) + { + return mat*scalar; + } + + + //! Typedef for f32 matrix + typedef CMatrix4 matrix4; + + //! global const identity matrix + IRRLICHT_API extern const matrix4 IdentityMatrix; + +} // end namespace core +} // end namespace irr + +#endif + diff --git a/inc/path.h b/inc/path.h new file mode 100644 index 0000000..ed7661c --- /dev/null +++ b/inc/path.h @@ -0,0 +1,88 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine" and the "irrXML" project. +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __IRR_PATH_H_INCLUDED__ +#define __IRR_PATH_H_INCLUDED__ + +#include "irrString.h" + +namespace irr +{ +namespace io +{ + +//! Type used for all file system related strings. +/** This type will transparently handle different file system encodings. */ +typedef core::string path; + +//! Used in places where we identify objects by a filename, but don't actually work with the real filename +/** Irrlicht is internally not case-sensitive when it comes to names. + Also this class is a first step towards support for correctly serializing renamed objects. +*/ +struct SNamedPath +{ + //! Constructor + SNamedPath() {} + + //! Constructor + SNamedPath(const path& p) : Path(p), InternalName( PathToName(p) ) + { + } + + //! Is smaller comparator + bool operator <(const SNamedPath& other) const + { + return InternalName < other.InternalName; + } + + //! Set the path. + void setPath(const path& p) + { + Path = p; + InternalName = PathToName(p); + } + + //! Get the path. + const path& getPath() const + { + return Path; + }; + + //! Get the name which is used to identify the file. + //! This string is similar to the names and filenames used before Irrlicht 1.7 + const path& getInternalName() const + { + return InternalName; + } + + //! Implicit cast to io::path + operator core::stringc() const + { + return core::stringc(getPath()); + } + //! Implicit cast to io::path + operator core::stringw() const + { + return core::stringw(getPath()); + } + +protected: + // convert the given path string to a name string. + path PathToName(const path& p) const + { + path name(p); + name.replace( '\\', '/' ); + name.make_lower(); + return name; + } + +private: + path Path; + path InternalName; +}; + +} // io +} // irr + +#endif // __IRR_PATH_H_INCLUDED__ diff --git a/inc/plane3d.h b/inc/plane3d.h new file mode 100644 index 0000000..02c6bf9 --- /dev/null +++ b/inc/plane3d.h @@ -0,0 +1,245 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __IRR_PLANE_3D_H_INCLUDED__ +#define __IRR_PLANE_3D_H_INCLUDED__ + +#include "irrMath.h" +#include "vector3d.h" + +namespace irr +{ +namespace core +{ + +//! Enumeration for intersection relations of 3d objects +enum EIntersectionRelation3D +{ + ISREL3D_FRONT = 0, + ISREL3D_BACK, + ISREL3D_PLANAR, + ISREL3D_SPANNING, + ISREL3D_CLIPPED +}; + +//! Template plane class with some intersection testing methods. +/** It has to be ensured, that the normal is always normalized. The constructors + and setters of this class will not ensure this automatically. So any normal + passed in has to be normalized in advance. No change to the normal will be + made by any of the class methods. +*/ +template +class plane3d +{ + public: + + // Constructors + + plane3d(): Normal(0,1,0) { recalculateD(vector3d(0,0,0)); } + + plane3d(const vector3d& MPoint, const vector3d& Normal) : Normal(Normal) { recalculateD(MPoint); } + + plane3d(T px, T py, T pz, T nx, T ny, T nz) : Normal(nx, ny, nz) { recalculateD(vector3d(px, py, pz)); } + + plane3d(const vector3d& point1, const vector3d& point2, const vector3d& point3) + { setPlane(point1, point2, point3); } + + plane3d(const vector3d & normal, const T d) : Normal(normal), D(d) { } + + // operators + + inline bool operator==(const plane3d& other) const { return (equals(D, other.D) && Normal==other.Normal);} + + inline bool operator!=(const plane3d& other) const { return !(*this == other);} + + // functions + + void setPlane(const vector3d& point, const vector3d& nvector) + { + Normal = nvector; + recalculateD(point); + } + + void setPlane(const vector3d& nvect, T d) + { + Normal = nvect; + D = d; + } + + void setPlane(const vector3d& point1, const vector3d& point2, const vector3d& point3) + { + // creates the plane from 3 memberpoints + Normal = (point2 - point1).crossProduct(point3 - point1); + Normal.normalize(); + + recalculateD(point1); + } + + + //! Get an intersection with a 3d line. + /** \param lineVect Vector of the line to intersect with. + \param linePoint Point of the line to intersect with. + \param outIntersection Place to store the intersection point, if there is one. + \return True if there was an intersection, false if there was not. + */ + bool getIntersectionWithLine(const vector3d& linePoint, + const vector3d& lineVect, + vector3d& outIntersection) const + { + T t2 = Normal.dotProduct(lineVect); + + if (t2 == 0) + return false; + + T t =- (Normal.dotProduct(linePoint) + D) / t2; + outIntersection = linePoint + (lineVect * t); + return true; + } + + //! Get percentage of line between two points where an intersection with this plane happens. + /** Only useful if known that there is an intersection. + \param linePoint1 Point1 of the line to intersect with. + \param linePoint2 Point2 of the line to intersect with. + \return Where on a line between two points an intersection with this plane happened. + For example, 0.5 is returned if the intersection happened exactly in the middle of the two points. + */ + f32 getKnownIntersectionWithLine(const vector3d& linePoint1, + const vector3d& linePoint2) const + { + vector3d vect = linePoint2 - linePoint1; + T t2 = (f32)Normal.dotProduct(vect); + return (f32)-((Normal.dotProduct(linePoint1) + D) / t2); + } + + //! Get an intersection with a 3d line, limited between two 3d points. + /** \param linePoint1 Point 1 of the line. + \param linePoint2 Point 2 of the line. + \param outIntersection Place to store the intersection point, if there is one. + \return True if there was an intersection, false if there was not. + */ + bool getIntersectionWithLimitedLine( + const vector3d& linePoint1, + const vector3d& linePoint2, + vector3d& outIntersection) const + { + return (getIntersectionWithLine(linePoint1, linePoint2 - linePoint1, outIntersection) && + outIntersection.isBetweenPoints(linePoint1, linePoint2)); + } + + //! Classifies the relation of a point to this plane. + /** \param point Point to classify its relation. + \return ISREL3D_FRONT if the point is in front of the plane, + ISREL3D_BACK if the point is behind of the plane, and + ISREL3D_PLANAR if the point is within the plane. */ + EIntersectionRelation3D classifyPointRelation(const vector3d& point) const + { + const T d = Normal.dotProduct(point) + D; + + if (d < -ROUNDING_ERROR_f32) + return ISREL3D_BACK; + + if (d > ROUNDING_ERROR_f32) + return ISREL3D_FRONT; + + return ISREL3D_PLANAR; + } + + //! Recalculates the distance from origin by applying a new member point to the plane. + void recalculateD(const vector3d& MPoint) + { + D = - MPoint.dotProduct(Normal); + } + + //! Gets a member point of the plane. + vector3d getMemberPoint() const + { + return Normal * -D; + } + + //! Tests if there is an intersection with the other plane + /** \return True if there is a intersection. */ + bool existsIntersection(const plane3d& other) const + { + vector3d cross = other.Normal.crossProduct(Normal); + return cross.getLength() > core::ROUNDING_ERROR_f32; + } + + //! Intersects this plane with another. + /** \param other Other plane to intersect with. + \param outLinePoint Base point of intersection line. + \param outLineVect Vector of intersection. + \return True if there is a intersection, false if not. */ + bool getIntersectionWithPlane(const plane3d& other, + vector3d& outLinePoint, + vector3d& outLineVect) const + { + const T fn00 = Normal.getLength(); + const T fn01 = Normal.dotProduct(other.Normal); + const T fn11 = other.Normal.getLength(); + const f64 det = fn00*fn11 - fn01*fn01; + + if (fabs(det) < ROUNDING_ERROR_f64 ) + return false; + + const f64 invdet = 1.0 / det; + const f64 fc0 = (fn11*-D + fn01*other.D) * invdet; + const f64 fc1 = (fn00*-other.D + fn01*D) * invdet; + + outLineVect = Normal.crossProduct(other.Normal); + outLinePoint = Normal*(T)fc0 + other.Normal*(T)fc1; + return true; + } + + //! Get the intersection point with two other planes if there is one. + bool getIntersectionWithPlanes(const plane3d& o1, + const plane3d& o2, vector3d& outPoint) const + { + vector3d linePoint, lineVect; + if (getIntersectionWithPlane(o1, linePoint, lineVect)) + return o2.getIntersectionWithLine(linePoint, lineVect, outPoint); + + return false; + } + + //! Test if the triangle would be front or backfacing from any point. + /** Thus, this method assumes a camera position from + which the triangle is definitely visible when looking into + the given direction. + Note that this only works if the normal is Normalized. + Do not use this method with points as it will give wrong results! + \param lookDirection: Look direction. + \return True if the plane is front facing and + false if it is backfacing. */ + bool isFrontFacing(const vector3d& lookDirection) const + { + const f32 d = Normal.dotProduct(lookDirection); + return F32_LOWER_EQUAL_0 ( d ); + } + + //! Get the distance to a point. + /** Note that this only works if the normal is normalized. */ + T getDistanceTo(const vector3d& point) const + { + return point.dotProduct(Normal) + D; + } + + //! Normal vector of the plane. + vector3d Normal; + + //! Distance from origin. + T D; +}; + + +//! Typedef for a f32 3d plane. +typedef plane3d plane3df; + +//! Typedef for an integer 3d plane. +typedef plane3d plane3di; + +} // end namespace core +} // end namespace irr + +#endif + diff --git a/inc/position2d.h b/inc/position2d.h new file mode 100644 index 0000000..05a27c6 --- /dev/null +++ b/inc/position2d.h @@ -0,0 +1,32 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +//! As of Irrlicht 1.6, position2d is a synonym for vector2d. +/** You should consider position2d to be deprecated, and use vector2d by preference. */ + +#ifndef __IRR_POSITION_H_INCLUDED__ +#define __IRR_POSITION_H_INCLUDED__ + +#include "vector2d.h" + +namespace irr +{ +namespace core +{ + +// Use typedefs where possible as they are more explicit... + +//! \deprecated position2d is now a synonym for vector2d, but vector2d should be used directly. +typedef vector2d position2df; + +//! \deprecated position2d is now a synonym for vector2d, but vector2d should be used directly. +typedef vector2d position2di; +} // namespace core +} // namespace irr + +// ...and use a #define to catch the rest, for (e.g.) position2d +#define position2d vector2d + +#endif // __IRR_POSITION_H_INCLUDED__ + diff --git a/inc/quaternion.h b/inc/quaternion.h new file mode 100644 index 0000000..130ba8c --- /dev/null +++ b/inc/quaternion.h @@ -0,0 +1,696 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __IRR_QUATERNION_H_INCLUDED__ +#define __IRR_QUATERNION_H_INCLUDED__ + +#include "irrTypes.h" +#include "irrMath.h" +#include "matrix4.h" +#include "vector3d.h" + +// Between Irrlicht 1.7 and Irrlicht 1.8 the quaternion-matrix conversions got fixed. +// This define disables all involved functions completely to allow finding all places +// where the wrong conversions had been in use. +#define IRR_TEST_BROKEN_QUATERNION_USE 0 + +namespace irr +{ +namespace core +{ + +//! Quaternion class for representing rotations. +/** It provides cheap combinations and avoids gimbal locks. +Also useful for interpolations. */ +class quaternion +{ + public: + + //! Default Constructor + quaternion() : X(0.0f), Y(0.0f), Z(0.0f), W(1.0f) {} + + //! Constructor + quaternion(f32 x, f32 y, f32 z, f32 w) : X(x), Y(y), Z(z), W(w) { } + + //! Constructor which converts euler angles (radians) to a quaternion + quaternion(f32 x, f32 y, f32 z); + + //! Constructor which converts euler angles (radians) to a quaternion + quaternion(const vector3df& vec); + +#if !IRR_TEST_BROKEN_QUATERNION_USE + //! Constructor which converts a matrix to a quaternion + quaternion(const matrix4& mat); +#endif + + //! Equalilty operator + bool operator==(const quaternion& other) const; + + //! inequality operator + bool operator!=(const quaternion& other) const; + + //! Assignment operator + inline quaternion& operator=(const quaternion& other); + +#if !IRR_TEST_BROKEN_QUATERNION_USE + //! Matrix assignment operator + inline quaternion& operator=(const matrix4& other); +#endif + + //! Add operator + quaternion operator+(const quaternion& other) const; + + //! Multiplication operator + quaternion operator*(const quaternion& other) const; + + //! Multiplication operator with scalar + quaternion operator*(f32 s) const; + + //! Multiplication operator with scalar + quaternion& operator*=(f32 s); + + //! Multiplication operator + vector3df operator*(const vector3df& v) const; + + //! Multiplication operator + quaternion& operator*=(const quaternion& other); + + //! Calculates the dot product + inline f32 dotProduct(const quaternion& other) const; + + //! Sets new quaternion + inline quaternion& set(f32 x, f32 y, f32 z, f32 w); + + //! Sets new quaternion based on euler angles (radians) + inline quaternion& set(f32 x, f32 y, f32 z); + + //! Sets new quaternion based on euler angles (radians) + inline quaternion& set(const core::vector3df& vec); + + //! Sets new quaternion from other quaternion + inline quaternion& set(const core::quaternion& quat); + + //! returns if this quaternion equals the other one, taking floating point rounding errors into account + inline bool equals(const quaternion& other, + const f32 tolerance = ROUNDING_ERROR_f32 ) const; + + //! Normalizes the quaternion + inline quaternion& normalize(); + +#if !IRR_TEST_BROKEN_QUATERNION_USE + //! Creates a matrix from this quaternion + matrix4 getMatrix() const; +#endif + + //! Creates a matrix from this quaternion + void getMatrix( matrix4 &dest, const core::vector3df &translation=core::vector3df() ) const; + + /*! + Creates a matrix from this quaternion + Rotate about a center point + shortcut for + core::quaternion q; + q.rotationFromTo ( vin[i].Normal, forward ); + q.getMatrixCenter ( lookat, center, newPos ); + + core::matrix4 m2; + m2.setInverseTranslation ( center ); + lookat *= m2; + + core::matrix4 m3; + m2.setTranslation ( newPos ); + lookat *= m3; + + */ + void getMatrixCenter( matrix4 &dest, const core::vector3df ¢er, const core::vector3df &translation ) const; + + //! Creates a matrix from this quaternion + inline void getMatrix_transposed( matrix4 &dest ) const; + + //! Inverts this quaternion + quaternion& makeInverse(); + + //! Set this quaternion to the linear interpolation between two quaternions + /** \param q1 First quaternion to be interpolated. + \param q2 Second quaternion to be interpolated. + \param time Progress of interpolation. For time=0 the result is + q1, for time=1 the result is q2. Otherwise interpolation + between q1 and q2. + */ + quaternion& lerp(quaternion q1, quaternion q2, f32 time); + + //! Set this quaternion to the result of the spherical interpolation between two quaternions + /** \param q1 First quaternion to be interpolated. + \param q2 Second quaternion to be interpolated. + \param time Progress of interpolation. For time=0 the result is + q1, for time=1 the result is q2. Otherwise interpolation + between q1 and q2. + \param threshold To avoid inaccuracies at the end (time=1) the + interpolation switches to linear interpolation at some point. + This value defines how much of the remaining interpolation will + be calculated with lerp. Everything from 1-threshold up will be + linear interpolation. + */ + quaternion& slerp(quaternion q1, quaternion q2, + f32 time, f32 threshold=.05f); + + //! Create quaternion from rotation angle and rotation axis. + /** Axis must be unit length. + The quaternion representing the rotation is + q = cos(A/2)+sin(A/2)*(x*i+y*j+z*k). + \param angle Rotation Angle in radians. + \param axis Rotation axis. */ + quaternion& fromAngleAxis (f32 angle, const vector3df& axis); + + //! Fills an angle (radians) around an axis (unit vector) + void toAngleAxis (f32 &angle, core::vector3df& axis) const; + + //! Output this quaternion to an euler angle (radians) + void toEuler(vector3df& euler) const; + + //! Set quaternion to identity + quaternion& makeIdentity(); + + //! Set quaternion to represent a rotation from one vector to another. + quaternion& rotationFromTo(const vector3df& from, const vector3df& to); + + //! Quaternion elements. + f32 X; // vectorial (imaginary) part + f32 Y; + f32 Z; + f32 W; // real part +}; + + +// Constructor which converts euler angles to a quaternion +inline quaternion::quaternion(f32 x, f32 y, f32 z) +{ + set(x,y,z); +} + + +// Constructor which converts euler angles to a quaternion +inline quaternion::quaternion(const vector3df& vec) +{ + set(vec.X,vec.Y,vec.Z); +} + +#if !IRR_TEST_BROKEN_QUATERNION_USE +// Constructor which converts a matrix to a quaternion +inline quaternion::quaternion(const matrix4& mat) +{ + (*this) = mat; +} +#endif + +// equal operator +inline bool quaternion::operator==(const quaternion& other) const +{ + return ((X == other.X) && + (Y == other.Y) && + (Z == other.Z) && + (W == other.W)); +} + +// inequality operator +inline bool quaternion::operator!=(const quaternion& other) const +{ + return !(*this == other); +} + +// assignment operator +inline quaternion& quaternion::operator=(const quaternion& other) +{ + X = other.X; + Y = other.Y; + Z = other.Z; + W = other.W; + return *this; +} + +#if !IRR_TEST_BROKEN_QUATERNION_USE +// matrix assignment operator +inline quaternion& quaternion::operator=(const matrix4& m) +{ + const f32 diag = m[0] + m[5] + m[10] + 1; + + if( diag > 0.0f ) + { + const f32 scale = sqrtf(diag) * 2.0f; // get scale from diagonal + + // TODO: speed this up + X = (m[6] - m[9]) / scale; + Y = (m[8] - m[2]) / scale; + Z = (m[1] - m[4]) / scale; + W = 0.25f * scale; + } + else + { + if (m[0]>m[5] && m[0]>m[10]) + { + // 1st element of diag is greatest value + // find scale according to 1st element, and double it + const f32 scale = sqrtf(1.0f + m[0] - m[5] - m[10]) * 2.0f; + + // TODO: speed this up + X = 0.25f * scale; + Y = (m[4] + m[1]) / scale; + Z = (m[2] + m[8]) / scale; + W = (m[6] - m[9]) / scale; + } + else if (m[5]>m[10]) + { + // 2nd element of diag is greatest value + // find scale according to 2nd element, and double it + const f32 scale = sqrtf(1.0f + m[5] - m[0] - m[10]) * 2.0f; + + // TODO: speed this up + X = (m[4] + m[1]) / scale; + Y = 0.25f * scale; + Z = (m[9] + m[6]) / scale; + W = (m[8] - m[2]) / scale; + } + else + { + // 3rd element of diag is greatest value + // find scale according to 3rd element, and double it + const f32 scale = sqrtf(1.0f + m[10] - m[0] - m[5]) * 2.0f; + + // TODO: speed this up + X = (m[8] + m[2]) / scale; + Y = (m[9] + m[6]) / scale; + Z = 0.25f * scale; + W = (m[1] - m[4]) / scale; + } + } + + return normalize(); +} +#endif + + +// multiplication operator +inline quaternion quaternion::operator*(const quaternion& other) const +{ + quaternion tmp; + + tmp.W = (other.W * W) - (other.X * X) - (other.Y * Y) - (other.Z * Z); + tmp.X = (other.W * X) + (other.X * W) + (other.Y * Z) - (other.Z * Y); + tmp.Y = (other.W * Y) + (other.Y * W) + (other.Z * X) - (other.X * Z); + tmp.Z = (other.W * Z) + (other.Z * W) + (other.X * Y) - (other.Y * X); + + return tmp; +} + + +// multiplication operator +inline quaternion quaternion::operator*(f32 s) const +{ + return quaternion(s*X, s*Y, s*Z, s*W); +} + + +// multiplication operator +inline quaternion& quaternion::operator*=(f32 s) +{ + X*=s; + Y*=s; + Z*=s; + W*=s; + return *this; +} + +// multiplication operator +inline quaternion& quaternion::operator*=(const quaternion& other) +{ + return (*this = other * (*this)); +} + +// add operator +inline quaternion quaternion::operator+(const quaternion& b) const +{ + return quaternion(X+b.X, Y+b.Y, Z+b.Z, W+b.W); +} + +#if !IRR_TEST_BROKEN_QUATERNION_USE +// Creates a matrix from this quaternion +inline matrix4 quaternion::getMatrix() const +{ + core::matrix4 m; + getMatrix(m); + return m; +} +#endif + +/*! + Creates a matrix from this quaternion +*/ +inline void quaternion::getMatrix(matrix4 &dest, + const core::vector3df ¢er) const +{ + dest[0] = 1.0f - 2.0f*Y*Y - 2.0f*Z*Z; + dest[1] = 2.0f*X*Y + 2.0f*Z*W; + dest[2] = 2.0f*X*Z - 2.0f*Y*W; + dest[3] = 0.0f; + + dest[4] = 2.0f*X*Y - 2.0f*Z*W; + dest[5] = 1.0f - 2.0f*X*X - 2.0f*Z*Z; + dest[6] = 2.0f*Z*Y + 2.0f*X*W; + dest[7] = 0.0f; + + dest[8] = 2.0f*X*Z + 2.0f*Y*W; + dest[9] = 2.0f*Z*Y - 2.0f*X*W; + dest[10] = 1.0f - 2.0f*X*X - 2.0f*Y*Y; + dest[11] = 0.0f; + + dest[12] = center.X; + dest[13] = center.Y; + dest[14] = center.Z; + dest[15] = 1.f; + + dest.setDefinitelyIdentityMatrix ( false ); +} + + +/*! + Creates a matrix from this quaternion + Rotate about a center point + shortcut for + core::quaternion q; + q.rotationFromTo(vin[i].Normal, forward); + q.getMatrix(lookat, center); + + core::matrix4 m2; + m2.setInverseTranslation(center); + lookat *= m2; +*/ +inline void quaternion::getMatrixCenter(matrix4 &dest, + const core::vector3df ¢er, + const core::vector3df &translation) const +{ + dest[0] = 1.0f - 2.0f*Y*Y - 2.0f*Z*Z; + dest[1] = 2.0f*X*Y + 2.0f*Z*W; + dest[2] = 2.0f*X*Z - 2.0f*Y*W; + dest[3] = 0.0f; + + dest[4] = 2.0f*X*Y - 2.0f*Z*W; + dest[5] = 1.0f - 2.0f*X*X - 2.0f*Z*Z; + dest[6] = 2.0f*Z*Y + 2.0f*X*W; + dest[7] = 0.0f; + + dest[8] = 2.0f*X*Z + 2.0f*Y*W; + dest[9] = 2.0f*Z*Y - 2.0f*X*W; + dest[10] = 1.0f - 2.0f*X*X - 2.0f*Y*Y; + dest[11] = 0.0f; + + dest.setRotationCenter ( center, translation ); +} + +// Creates a matrix from this quaternion +inline void quaternion::getMatrix_transposed(matrix4 &dest) const +{ + dest[0] = 1.0f - 2.0f*Y*Y - 2.0f*Z*Z; + dest[4] = 2.0f*X*Y + 2.0f*Z*W; + dest[8] = 2.0f*X*Z - 2.0f*Y*W; + dest[12] = 0.0f; + + dest[1] = 2.0f*X*Y - 2.0f*Z*W; + dest[5] = 1.0f - 2.0f*X*X - 2.0f*Z*Z; + dest[9] = 2.0f*Z*Y + 2.0f*X*W; + dest[13] = 0.0f; + + dest[2] = 2.0f*X*Z + 2.0f*Y*W; + dest[6] = 2.0f*Z*Y - 2.0f*X*W; + dest[10] = 1.0f - 2.0f*X*X - 2.0f*Y*Y; + dest[14] = 0.0f; + + dest[3] = 0.f; + dest[7] = 0.f; + dest[11] = 0.f; + dest[15] = 1.f; + + dest.setDefinitelyIdentityMatrix(false); +} + + +// Inverts this quaternion +inline quaternion& quaternion::makeInverse() +{ + X = -X; Y = -Y; Z = -Z; + return *this; +} + + +// sets new quaternion +inline quaternion& quaternion::set(f32 x, f32 y, f32 z, f32 w) +{ + X = x; + Y = y; + Z = z; + W = w; + return *this; +} + + +// sets new quaternion based on euler angles +inline quaternion& quaternion::set(f32 x, f32 y, f32 z) +{ + f64 angle; + + angle = x * 0.5; + const f64 sr = sin(angle); + const f64 cr = cos(angle); + + angle = y * 0.5; + const f64 sp = sin(angle); + const f64 cp = cos(angle); + + angle = z * 0.5; + const f64 sy = sin(angle); + const f64 cy = cos(angle); + + const f64 cpcy = cp * cy; + const f64 spcy = sp * cy; + const f64 cpsy = cp * sy; + const f64 spsy = sp * sy; + + X = (f32)(sr * cpcy - cr * spsy); + Y = (f32)(cr * spcy + sr * cpsy); + Z = (f32)(cr * cpsy - sr * spcy); + W = (f32)(cr * cpcy + sr * spsy); + + return normalize(); +} + +// sets new quaternion based on euler angles +inline quaternion& quaternion::set(const core::vector3df& vec) +{ + return set(vec.X, vec.Y, vec.Z); +} + +// sets new quaternion based on other quaternion +inline quaternion& quaternion::set(const core::quaternion& quat) +{ + return (*this=quat); +} + + +//! returns if this quaternion equals the other one, taking floating point rounding errors into account +inline bool quaternion::equals(const quaternion& other, const f32 tolerance) const +{ + return core::equals(X, other.X, tolerance) && + core::equals(Y, other.Y, tolerance) && + core::equals(Z, other.Z, tolerance) && + core::equals(W, other.W, tolerance); +} + + +// normalizes the quaternion +inline quaternion& quaternion::normalize() +{ + const f32 n = X*X + Y*Y + Z*Z + W*W; + + if (n == 1) + return *this; + + //n = 1.0f / sqrtf(n); + return (*this *= reciprocal_squareroot ( n )); +} + + +// set this quaternion to the result of the linear interpolation between two quaternions +inline quaternion& quaternion::lerp(quaternion q1, quaternion q2, f32 time) +{ + const f32 scale = 1.0f - time; + return (*this = (q1*scale) + (q2*time)); +} + + +// set this quaternion to the result of the interpolation between two quaternions +inline quaternion& quaternion::slerp(quaternion q1, quaternion q2, f32 time, f32 threshold) +{ + f32 angle = q1.dotProduct(q2); + + // make sure we use the short rotation + if (angle < 0.0f) + { + q1 *= -1.0f; + angle *= -1.0f; + } + + if (angle <= (1-threshold)) // spherical interpolation + { + const f32 theta = acosf(angle); + const f32 invsintheta = reciprocal(sinf(theta)); + const f32 scale = sinf(theta * (1.0f-time)) * invsintheta; + const f32 invscale = sinf(theta * time) * invsintheta; + return (*this = (q1*scale) + (q2*invscale)); + } + else // linear interploation + return lerp(q1,q2,time); +} + + +// calculates the dot product +inline f32 quaternion::dotProduct(const quaternion& q2) const +{ + return (X * q2.X) + (Y * q2.Y) + (Z * q2.Z) + (W * q2.W); +} + + +//! axis must be unit length, angle in radians +inline quaternion& quaternion::fromAngleAxis(f32 angle, const vector3df& axis) +{ + const f32 fHalfAngle = 0.5f*angle; + const f32 fSin = sinf(fHalfAngle); + W = cosf(fHalfAngle); + X = fSin*axis.X; + Y = fSin*axis.Y; + Z = fSin*axis.Z; + return *this; +} + + +inline void quaternion::toAngleAxis(f32 &angle, core::vector3df &axis) const +{ + const f32 scale = sqrtf(X*X + Y*Y + Z*Z); + + if (core::iszero(scale) || W > 1.0f || W < -1.0f) + { + angle = 0.0f; + axis.X = 0.0f; + axis.Y = 1.0f; + axis.Z = 0.0f; + } + else + { + const f32 invscale = reciprocal(scale); + angle = 2.0f * acosf(W); + axis.X = X * invscale; + axis.Y = Y * invscale; + axis.Z = Z * invscale; + } +} + +inline void quaternion::toEuler(vector3df& euler) const +{ + const f64 sqw = W*W; + const f64 sqx = X*X; + const f64 sqy = Y*Y; + const f64 sqz = Z*Z; + const f64 test = 2.0 * (Y*W - X*Z); + + if (core::equals(test, 1.0, 0.000001)) + { + // heading = rotation about z-axis + euler.Z = (f32) (-2.0*atan2(X, W)); + // bank = rotation about x-axis + euler.X = 0; + // attitude = rotation about y-axis + euler.Y = (f32) (core::PI64/2.0); + } + else if (core::equals(test, -1.0, 0.000001)) + { + // heading = rotation about z-axis + euler.Z = (f32) (2.0*atan2(X, W)); + // bank = rotation about x-axis + euler.X = 0; + // attitude = rotation about y-axis + euler.Y = (f32) (core::PI64/-2.0); + } + else + { + // heading = rotation about z-axis + euler.Z = (f32) atan2(2.0 * (X*Y +Z*W),(sqx - sqy - sqz + sqw)); + // bank = rotation about x-axis + euler.X = (f32) atan2(2.0 * (Y*Z +X*W),(-sqx - sqy + sqz + sqw)); + // attitude = rotation about y-axis + euler.Y = (f32) asin( clamp(test, -1.0, 1.0) ); + } +} + + +inline vector3df quaternion::operator* (const vector3df& v) const +{ + // nVidia SDK implementation + + vector3df uv, uuv; + vector3df qvec(X, Y, Z); + uv = qvec.crossProduct(v); + uuv = qvec.crossProduct(uv); + uv *= (2.0f * W); + uuv *= 2.0f; + + return v + uv + uuv; +} + +// set quaternion to identity +inline core::quaternion& quaternion::makeIdentity() +{ + W = 1.f; + X = 0.f; + Y = 0.f; + Z = 0.f; + return *this; +} + +inline core::quaternion& quaternion::rotationFromTo(const vector3df& from, const vector3df& to) +{ + // Based on Stan Melax's article in Game Programming Gems + // Copy, since cannot modify local + vector3df v0 = from; + vector3df v1 = to; + v0.normalize(); + v1.normalize(); + + const f32 d = v0.dotProduct(v1); + if (d >= 1.0f) // If dot == 1, vectors are the same + { + return makeIdentity(); + } + else if (d <= -1.0f) // exactly opposite + { + core::vector3df axis(1.0f, 0.f, 0.f); + axis = axis.crossProduct(v0); + if (axis.getLength()==0) + { + axis.set(0.f,1.f,0.f); + axis = axis.crossProduct(v0); + } + // same as fromAngleAxis(core::PI, axis).normalize(); + return set(axis.X, axis.Y, axis.Z, 0).normalize(); + } + + const f32 s = sqrtf( (1+d)*2 ); // optimize inv_sqrt + const f32 invs = 1.f / s; + const vector3df c = v0.crossProduct(v1)*invs; + return set(c.X, c.Y, c.Z, s * 0.5f).normalize(); +} + + +} // end namespace core +} // end namespace irr + +#endif + diff --git a/inc/rect.h b/inc/rect.h new file mode 100644 index 0000000..1e2572c --- /dev/null +++ b/inc/rect.h @@ -0,0 +1,279 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __IRR_RECT_H_INCLUDED__ +#define __IRR_RECT_H_INCLUDED__ + +#include "irrTypes.h" +#include "dimension2d.h" +#include "position2d.h" + +namespace irr +{ +namespace core +{ + + //! Rectangle template. + /** Mostly used by 2D GUI elements and for 2D drawing methods. + It has 2 positions instead of position and dimension and a fast + method for collision detection with other rectangles and points. + + Coordinates are (0,0) for top-left corner, and increasing to the right + and to the bottom. + */ + template + class rect + { + public: + + //! Default constructor creating empty rectangle at (0,0) + rect() : UpperLeftCorner(0,0), LowerRightCorner(0,0) {} + + //! Constructor with two corners + rect(T x, T y, T x2, T y2) + : UpperLeftCorner(x,y), LowerRightCorner(x2,y2) {} + + //! Constructor with two corners + rect(const position2d& upperLeft, const position2d& lowerRight) + : UpperLeftCorner(upperLeft), LowerRightCorner(lowerRight) {} + + //! Constructor with upper left corner and dimension + template + rect(const position2d& pos, const dimension2d& size) + : UpperLeftCorner(pos), LowerRightCorner(pos.X + size.Width, pos.Y + size.Height) {} + + //! move right by given numbers + rect operator+(const position2d& pos) const + { + rect ret(*this); + return ret+=pos; + } + + //! move right by given numbers + rect& operator+=(const position2d& pos) + { + UpperLeftCorner += pos; + LowerRightCorner += pos; + return *this; + } + + //! move left by given numbers + rect operator-(const position2d& pos) const + { + rect ret(*this); + return ret-=pos; + } + + //! move left by given numbers + rect& operator-=(const position2d& pos) + { + UpperLeftCorner -= pos; + LowerRightCorner -= pos; + return *this; + } + + //! equality operator + bool operator==(const rect& other) const + { + return (UpperLeftCorner == other.UpperLeftCorner && + LowerRightCorner == other.LowerRightCorner); + } + + //! inequality operator + bool operator!=(const rect& other) const + { + return (UpperLeftCorner != other.UpperLeftCorner || + LowerRightCorner != other.LowerRightCorner); + } + + //! compares size of rectangles + bool operator<(const rect& other) const + { + return getArea() < other.getArea(); + } + + //! Returns size of rectangle + T getArea() const + { + return getWidth() * getHeight(); + } + + //! Returns if a 2d point is within this rectangle. + /** \param pos Position to test if it lies within this rectangle. + \return True if the position is within the rectangle, false if not. */ + bool isPointInside(const position2d& pos) const + { + return (UpperLeftCorner.X <= pos.X && + UpperLeftCorner.Y <= pos.Y && + LowerRightCorner.X >= pos.X && + LowerRightCorner.Y >= pos.Y); + } + + //! Check if the rectangle collides with another rectangle. + /** \param other Rectangle to test collision with + \return True if the rectangles collide. */ + bool isRectCollided(const rect& other) const + { + return (LowerRightCorner.Y > other.UpperLeftCorner.Y && + UpperLeftCorner.Y < other.LowerRightCorner.Y && + LowerRightCorner.X > other.UpperLeftCorner.X && + UpperLeftCorner.X < other.LowerRightCorner.X); + } + + //! Clips this rectangle with another one. + /** \param other Rectangle to clip with */ + void clipAgainst(const rect& other) + { + if (other.LowerRightCorner.X < LowerRightCorner.X) + LowerRightCorner.X = other.LowerRightCorner.X; + if (other.LowerRightCorner.Y < LowerRightCorner.Y) + LowerRightCorner.Y = other.LowerRightCorner.Y; + + if (other.UpperLeftCorner.X > UpperLeftCorner.X) + UpperLeftCorner.X = other.UpperLeftCorner.X; + if (other.UpperLeftCorner.Y > UpperLeftCorner.Y) + UpperLeftCorner.Y = other.UpperLeftCorner.Y; + + // correct possible invalid rect resulting from clipping + if (UpperLeftCorner.Y > LowerRightCorner.Y) + UpperLeftCorner.Y = LowerRightCorner.Y; + if (UpperLeftCorner.X > LowerRightCorner.X) + UpperLeftCorner.X = LowerRightCorner.X; + } + + //! Moves this rectangle to fit inside another one. + /** \return True on success, false if not possible */ + bool constrainTo(const rect& other) + { + if (other.getWidth() < getWidth() || other.getHeight() < getHeight()) + return false; + + T diff = other.LowerRightCorner.X - LowerRightCorner.X; + if (diff < 0) + { + LowerRightCorner.X += diff; + UpperLeftCorner.X += diff; + } + + diff = other.LowerRightCorner.Y - LowerRightCorner.Y; + if (diff < 0) + { + LowerRightCorner.Y += diff; + UpperLeftCorner.Y += diff; + } + + diff = UpperLeftCorner.X - other.UpperLeftCorner.X; + if (diff < 0) + { + UpperLeftCorner.X -= diff; + LowerRightCorner.X -= diff; + } + + diff = UpperLeftCorner.Y - other.UpperLeftCorner.Y; + if (diff < 0) + { + UpperLeftCorner.Y -= diff; + LowerRightCorner.Y -= diff; + } + + return true; + } + + //! Get width of rectangle. + T getWidth() const + { + return LowerRightCorner.X - UpperLeftCorner.X; + } + + //! Get height of rectangle. + T getHeight() const + { + return LowerRightCorner.Y - UpperLeftCorner.Y; + } + + //! If the lower right corner of the rect is smaller then the upper left, the points are swapped. + void repair() + { + if (LowerRightCorner.X < UpperLeftCorner.X) + { + T t = LowerRightCorner.X; + LowerRightCorner.X = UpperLeftCorner.X; + UpperLeftCorner.X = t; + } + + if (LowerRightCorner.Y < UpperLeftCorner.Y) + { + T t = LowerRightCorner.Y; + LowerRightCorner.Y = UpperLeftCorner.Y; + UpperLeftCorner.Y = t; + } + } + + //! Returns if the rect is valid to draw. + /** It would be invalid if the UpperLeftCorner is lower or more + right than the LowerRightCorner. */ + bool isValid() const + { + return ((LowerRightCorner.X >= UpperLeftCorner.X) && + (LowerRightCorner.Y >= UpperLeftCorner.Y)); + } + + //! Get the center of the rectangle + position2d getCenter() const + { + return position2d( + (UpperLeftCorner.X + LowerRightCorner.X) / 2, + (UpperLeftCorner.Y + LowerRightCorner.Y) / 2); + } + + //! Get the dimensions of the rectangle + dimension2d getSize() const + { + return dimension2d(getWidth(), getHeight()); + } + + + //! Adds a point to the rectangle + /** Causes the rectangle to grow bigger if point is outside of + the box + \param p Point to add to the box. */ + void addInternalPoint(const position2d& p) + { + addInternalPoint(p.X, p.Y); + } + + //! Adds a point to the bounding rectangle + /** Causes the rectangle to grow bigger if point is outside of + the box + \param x X-Coordinate of the point to add to this box. + \param y Y-Coordinate of the point to add to this box. */ + void addInternalPoint(T x, T y) + { + if (x>LowerRightCorner.X) + LowerRightCorner.X = x; + if (y>LowerRightCorner.Y) + LowerRightCorner.Y = y; + + if (x UpperLeftCorner; + //! Lower right corner + position2d LowerRightCorner; + }; + + //! Rectangle with float values + typedef rect rectf; + //! Rectangle with int values + typedef rect recti; + +} // end namespace core +} // end namespace irr + +#endif + diff --git a/inc/triangle3d.h b/inc/triangle3d.h new file mode 100644 index 0000000..dbf8a8b --- /dev/null +++ b/inc/triangle3d.h @@ -0,0 +1,279 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __IRR_TRIANGLE_3D_H_INCLUDED__ +#define __IRR_TRIANGLE_3D_H_INCLUDED__ + +#include "vector3d.h" +#include "line3d.h" +#include "plane3d.h" +#include "aabbox3d.h" + +namespace irr +{ +namespace core +{ + + //! 3d triangle template class for doing collision detection and other things. + template + class triangle3d + { + public: + + //! Constructor for an all 0 triangle + triangle3d() {} + //! Constructor for triangle with given three vertices + triangle3d(vector3d v1, vector3d v2, vector3d v3) : pointA(v1), pointB(v2), pointC(v3) {} + + //! Equality operator + bool operator==(const triangle3d& other) const + { + return other.pointA==pointA && other.pointB==pointB && other.pointC==pointC; + } + + //! Inequality operator + bool operator!=(const triangle3d& other) const + { + return !(*this==other); + } + + //! Determines if the triangle is totally inside a bounding box. + /** \param box Box to check. + \return True if triangle is within the box, otherwise false. */ + bool isTotalInsideBox(const aabbox3d& box) const + { + return (box.isPointInside(pointA) && + box.isPointInside(pointB) && + box.isPointInside(pointC)); + } + + //! Determines if the triangle is totally outside a bounding box. + /** \param box Box to check. + \return True if triangle is outside the box, otherwise false. */ + bool isTotalOutsideBox(const aabbox3d& box) const + { + return ((pointA.X > box.MaxEdge.X && pointB.X > box.MaxEdge.X && pointC.X > box.MaxEdge.X) || + + (pointA.Y > box.MaxEdge.Y && pointB.Y > box.MaxEdge.Y && pointC.Y > box.MaxEdge.Y) || + (pointA.Z > box.MaxEdge.Z && pointB.Z > box.MaxEdge.Z && pointC.Z > box.MaxEdge.Z) || + (pointA.X < box.MinEdge.X && pointB.X < box.MinEdge.X && pointC.X < box.MinEdge.X) || + (pointA.Y < box.MinEdge.Y && pointB.Y < box.MinEdge.Y && pointC.Y < box.MinEdge.Y) || + (pointA.Z < box.MinEdge.Z && pointB.Z < box.MinEdge.Z && pointC.Z < box.MinEdge.Z)); + } + + //! Get the closest point on a triangle to a point on the same plane. + /** \param p Point which must be on the same plane as the triangle. + \return The closest point of the triangle */ + core::vector3d closestPointOnTriangle(const core::vector3d& p) const + { + const core::vector3d rab = line3d(pointA, pointB).getClosestPoint(p); + const core::vector3d rbc = line3d(pointB, pointC).getClosestPoint(p); + const core::vector3d rca = line3d(pointC, pointA).getClosestPoint(p); + + const T d1 = rab.getDistanceFrom(p); + const T d2 = rbc.getDistanceFrom(p); + const T d3 = rca.getDistanceFrom(p); + + if (d1 < d2) + return d1 < d3 ? rab : rca; + + return d2 < d3 ? rbc : rca; + } + + //! Check if a point is inside the triangle (border-points count also as inside) + /* + \param p Point to test. Assumes that this point is already + on the plane of the triangle. + \return True if the point is inside the triangle, otherwise false. */ + bool isPointInside(const vector3d& p) const + { + vector3d af64((f64)pointA.X, (f64)pointA.Y, (f64)pointA.Z); + vector3d bf64((f64)pointB.X, (f64)pointB.Y, (f64)pointB.Z); + vector3d cf64((f64)pointC.X, (f64)pointC.Y, (f64)pointC.Z); + vector3d pf64((f64)p.X, (f64)p.Y, (f64)p.Z); + return (isOnSameSide(pf64, af64, bf64, cf64) && + isOnSameSide(pf64, bf64, af64, cf64) && + isOnSameSide(pf64, cf64, af64, bf64)); + } + + //! Check if a point is inside the triangle (border-points count also as inside) + /** This method uses a barycentric coordinate system. + It is faster than isPointInside but is more susceptible to floating point rounding + errors. This will especially be noticable when the FPU is in single precision mode + (which is for example set on default by Direct3D). + \param p Point to test. Assumes that this point is already + on the plane of the triangle. + \return True if point is inside the triangle, otherwise false. */ + bool isPointInsideFast(const vector3d& p) const + { + const vector3d a = pointC - pointA; + const vector3d b = pointB - pointA; + const vector3d c = p - pointA; + + const f64 dotAA = a.dotProduct( a); + const f64 dotAB = a.dotProduct( b); + const f64 dotAC = a.dotProduct( c); + const f64 dotBB = b.dotProduct( b); + const f64 dotBC = b.dotProduct( c); + + // get coordinates in barycentric coordinate system + const f64 invDenom = 1/(dotAA * dotBB - dotAB * dotAB); + const f64 u = (dotBB * dotAC - dotAB * dotBC) * invDenom; + const f64 v = (dotAA * dotBC - dotAB * dotAC ) * invDenom; + + // We count border-points as inside to keep downward compatibility. + // Rounding-error also needed for some test-cases. + return (u > -ROUNDING_ERROR_f32) && (v >= 0) && (u + v < 1+ROUNDING_ERROR_f32); + + } + + + //! Get an intersection with a 3d line. + /** \param line Line to intersect with. + \param outIntersection Place to store the intersection point, if there is one. + \return True if there was an intersection, false if not. */ + bool getIntersectionWithLimitedLine(const line3d& line, + vector3d& outIntersection) const + { + return getIntersectionWithLine(line.start, + line.getVector(), outIntersection) && + outIntersection.isBetweenPoints(line.start, line.end); + } + + + //! Get an intersection with a 3d line. + /** Please note that also points are returned as intersection which + are on the line, but not between the start and end point of the line. + If you want the returned point be between start and end + use getIntersectionWithLimitedLine(). + \param linePoint Point of the line to intersect with. + \param lineVect Vector of the line to intersect with. + \param outIntersection Place to store the intersection point, if there is one. + \return True if there was an intersection, false if there was not. */ + bool getIntersectionWithLine(const vector3d& linePoint, + const vector3d& lineVect, vector3d& outIntersection) const + { + if (getIntersectionOfPlaneWithLine(linePoint, lineVect, outIntersection)) + return isPointInside(outIntersection); + + return false; + } + + + //! Calculates the intersection between a 3d line and the plane the triangle is on. + /** \param lineVect Vector of the line to intersect with. + \param linePoint Point of the line to intersect with. + \param outIntersection Place to store the intersection point, if there is one. + \return True if there was an intersection, else false. */ + bool getIntersectionOfPlaneWithLine(const vector3d& linePoint, + const vector3d& lineVect, vector3d& outIntersection) const + { + // Work with f64 to get more precise results (makes enough difference to be worth the casts). + const vector3d linePointf64(linePoint.X, linePoint.Y, linePoint.Z); + const vector3d lineVectf64(lineVect.X, lineVect.Y, lineVect.Z); + vector3d outIntersectionf64; + + core::triangle3d trianglef64(vector3d((f64)pointA.X, (f64)pointA.Y, (f64)pointA.Z) + ,vector3d((f64)pointB.X, (f64)pointB.Y, (f64)pointB.Z) + , vector3d((f64)pointC.X, (f64)pointC.Y, (f64)pointC.Z)); + const vector3d normalf64 = trianglef64.getNormal().normalize(); + f64 t2; + + if ( core::iszero ( t2 = normalf64.dotProduct(lineVectf64) ) ) + return false; + + f64 d = trianglef64.pointA.dotProduct(normalf64); + f64 t = -(normalf64.dotProduct(linePointf64) - d) / t2; + outIntersectionf64 = linePointf64 + (lineVectf64 * t); + + outIntersection.X = (T)outIntersectionf64.X; + outIntersection.Y = (T)outIntersectionf64.Y; + outIntersection.Z = (T)outIntersectionf64.Z; + return true; + } + + + //! Get the normal of the triangle. + /** Please note: The normal is not always normalized. */ + vector3d getNormal() const + { + return (pointB - pointA).crossProduct(pointC - pointA); + } + + //! Test if the triangle would be front or backfacing from any point. + /** Thus, this method assumes a camera position from which the + triangle is definitely visible when looking at the given direction. + Do not use this method with points as it will give wrong results! + \param lookDirection Look direction. + \return True if the plane is front facing and false if it is backfacing. */ + bool isFrontFacing(const vector3d& lookDirection) const + { + const vector3d n = getNormal().normalize(); + const f32 d = (f32)n.dotProduct(lookDirection); + return F32_LOWER_EQUAL_0(d); + } + + //! Get the plane of this triangle. + plane3d getPlane() const + { + return plane3d(pointA, pointB, pointC); + } + + //! Get the area of the triangle + T getArea() const + { + return (pointB - pointA).crossProduct(pointC - pointA).getLength() * 0.5f; + + } + + //! sets the triangle's points + void set(const core::vector3d& a, const core::vector3d& b, const core::vector3d& c) + { + pointA = a; + pointB = b; + pointC = c; + } + + //! the three points of the triangle + vector3d pointA; + vector3d pointB; + vector3d pointC; + + private: + // Using f64 instead of to avoid integer overflows when T=int (maybe also less floating point troubles). + bool isOnSameSide(const vector3d& p1, const vector3d& p2, + const vector3d& a, const vector3d& b) const + { + vector3d bminusa = b - a; + vector3d cp1 = bminusa.crossProduct(p1 - a); + vector3d cp2 = bminusa.crossProduct(p2 - a); + f64 res = cp1.dotProduct(cp2); + if ( res < 0 ) + { + // This catches some floating point troubles. + // Unfortunately slightly expensive and we don't really know the best epsilon for iszero. + vector3d cp1 = bminusa.normalize().crossProduct((p1 - a).normalize()); + if ( core::iszero(cp1.X, (f64)ROUNDING_ERROR_f32) + && core::iszero(cp1.Y, (f64)ROUNDING_ERROR_f32) + && core::iszero(cp1.Z, (f64)ROUNDING_ERROR_f32) ) + { + res = 0.f; + } + } + return (res >= 0.0f); + } + }; + + + //! Typedef for a f32 3d triangle. + typedef triangle3d triangle3df; + + //! Typedef for an integer 3d triangle. + typedef triangle3d triangle3di; + +} // end namespace core +} // end namespace irr + +#endif + diff --git a/inc/vector2d.h b/inc/vector2d.h new file mode 100644 index 0000000..0927dfc --- /dev/null +++ b/inc/vector2d.h @@ -0,0 +1,342 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __IRR_POINT_2D_H_INCLUDED__ +#define __IRR_POINT_2D_H_INCLUDED__ + +#include "irrMath.h" +#include "dimension2d.h" + +namespace irr +{ +namespace core +{ + + +//! 2d vector template class with lots of operators and methods. +/** As of Irrlicht 1.6, this class supercedes position2d, which should + be considered deprecated. */ +template +class vector2d +{ +public: + //! Default constructor (null vector) + vector2d() : X(0), Y(0) {} + //! Constructor with two different values + vector2d(T nx, T ny) : X(nx), Y(ny) {} + //! Constructor with the same value for both members + explicit vector2d(T n) : X(n), Y(n) {} + //! Copy constructor + vector2d(const vector2d& other) : X(other.X), Y(other.Y) {} + + vector2d(const dimension2d& other) : X(other.Width), Y(other.Height) {} + + // operators + + vector2d operator-() const { return vector2d(-X, -Y); } + + vector2d& operator=(const vector2d& other) { X = other.X; Y = other.Y; return *this; } + + vector2d& operator=(const dimension2d& other) { X = other.Width; Y = other.Height; return *this; } + + vector2d operator+(const vector2d& other) const { return vector2d(X + other.X, Y + other.Y); } + vector2d operator+(const dimension2d& other) const { return vector2d(X + other.Width, Y + other.Height); } + vector2d& operator+=(const vector2d& other) { X+=other.X; Y+=other.Y; return *this; } + vector2d operator+(const T v) const { return vector2d(X + v, Y + v); } + vector2d& operator+=(const T v) { X+=v; Y+=v; return *this; } + vector2d& operator+=(const dimension2d& other) { X += other.Width; Y += other.Height; return *this; } + + vector2d operator-(const vector2d& other) const { return vector2d(X - other.X, Y - other.Y); } + vector2d operator-(const dimension2d& other) const { return vector2d(X - other.Width, Y - other.Height); } + vector2d& operator-=(const vector2d& other) { X-=other.X; Y-=other.Y; return *this; } + vector2d operator-(const T v) const { return vector2d(X - v, Y - v); } + vector2d& operator-=(const T v) { X-=v; Y-=v; return *this; } + vector2d& operator-=(const dimension2d& other) { X -= other.Width; Y -= other.Height; return *this; } + + vector2d operator*(const vector2d& other) const { return vector2d(X * other.X, Y * other.Y); } + vector2d& operator*=(const vector2d& other) { X*=other.X; Y*=other.Y; return *this; } + vector2d operator*(const T v) const { return vector2d(X * v, Y * v); } + vector2d& operator*=(const T v) { X*=v; Y*=v; return *this; } + + vector2d operator/(const vector2d& other) const { return vector2d(X / other.X, Y / other.Y); } + vector2d& operator/=(const vector2d& other) { X/=other.X; Y/=other.Y; return *this; } + vector2d operator/(const T v) const { return vector2d(X / v, Y / v); } + vector2d& operator/=(const T v) { X/=v; Y/=v; return *this; } + + //! sort in order X, Y. Equality with rounding tolerance. + bool operator<=(const vector2d&other) const + { + return (X=(const vector2d&other) const + { + return (X>other.X || core::equals(X, other.X)) || + (core::equals(X, other.X) && (Y>other.Y || core::equals(Y, other.Y))); + } + + //! sort in order X, Y. Difference must be above rounding tolerance. + bool operator<(const vector2d&other) const + { + return (X(const vector2d&other) const + { + return (X>other.X && !core::equals(X, other.X)) || + (core::equals(X, other.X) && Y>other.Y && !core::equals(Y, other.Y)); + } + + bool operator==(const vector2d& other) const { return equals(other); } + bool operator!=(const vector2d& other) const { return !equals(other); } + + // functions + + //! Checks if this vector equals the other one. + /** Takes floating point rounding errors into account. + \param other Vector to compare with. + \return True if the two vector are (almost) equal, else false. */ + bool equals(const vector2d& other) const + { + return core::equals(X, other.X) && core::equals(Y, other.Y); + } + + vector2d& set(T nx, T ny) {X=nx; Y=ny; return *this; } + vector2d& set(const vector2d& p) { X=p.X; Y=p.Y; return *this; } + + //! Gets the length of the vector. + /** \return The length of the vector. */ + T getLength() const { return core::squareroot( X*X + Y*Y ); } + + //! Get the squared length of this vector + /** This is useful because it is much faster than getLength(). + \return The squared length of the vector. */ + T getLengthSQ() const { return X*X + Y*Y; } + + //! Get the dot product of this vector with another. + /** \param other Other vector to take dot product with. + \return The dot product of the two vectors. */ + T dotProduct(const vector2d& other) const + { + return X*other.X + Y*other.Y; + } + + //! Gets distance from another point. + /** Here, the vector is interpreted as a point in 2-dimensional space. + \param other Other vector to measure from. + \return Distance from other point. */ + T getDistanceFrom(const vector2d& other) const + { + return vector2d(X - other.X, Y - other.Y).getLength(); + } + + //! Returns squared distance from another point. + /** Here, the vector is interpreted as a point in 2-dimensional space. + \param other Other vector to measure from. + \return Squared distance from other point. */ + T getDistanceFromSQ(const vector2d& other) const + { + return vector2d(X - other.X, Y - other.Y).getLengthSQ(); + } + + //! rotates the point anticlockwise around a center by an amount of degrees. + /** \param degrees Amount of degrees to rotate by, anticlockwise. + \param center Rotation center. + \return This vector after transformation. */ + vector2d& rotateBy(f64 degrees, const vector2d& center=vector2d()) + { + degrees *= DEGTORAD64; + const f64 cs = cos(degrees); + const f64 sn = sin(degrees); + + X -= center.X; + Y -= center.Y; + + set((T)(X*cs - Y*sn), (T)(X*sn + Y*cs)); + + X += center.X; + Y += center.Y; + return *this; + } + + //! Normalize the vector. + /** The null vector is left untouched. + \return Reference to this vector, after normalization. */ + vector2d& normalize() + { + f32 length = (f32)(X*X + Y*Y); + if ( length == 0 ) + return *this; + length = core::reciprocal_squareroot ( length ); + X = (T)(X * length); + Y = (T)(Y * length); + return *this; + } + + //! Calculates the angle of this vector in degrees in the trigonometric sense. + /** 0 is to the right (3 o'clock), values increase counter-clockwise. + This method has been suggested by Pr3t3nd3r. + \return Returns a value between 0 and 360. */ + f64 getAngleTrig() const + { + if (Y == 0) + return X < 0 ? 180 : 0; + else + if (X == 0) + return Y < 0 ? 270 : 90; + + if ( Y > 0) + if (X > 0) + return atan((irr::f64)Y/(irr::f64)X) * RADTODEG64; + else + return 180.0-atan((irr::f64)Y/-(irr::f64)X) * RADTODEG64; + else + if (X > 0) + return 360.0-atan(-(irr::f64)Y/(irr::f64)X) * RADTODEG64; + else + return 180.0+atan(-(irr::f64)Y/-(irr::f64)X) * RADTODEG64; + } + + //! Calculates the angle of this vector in degrees in the counter trigonometric sense. + /** 0 is to the right (3 o'clock), values increase clockwise. + \return Returns a value between 0 and 360. */ + inline f64 getAngle() const + { + if (Y == 0) // corrected thanks to a suggestion by Jox + return X < 0 ? 180 : 0; + else if (X == 0) + return Y < 0 ? 90 : 270; + + // don't use getLength here to avoid precision loss with s32 vectors + // avoid floating-point trouble as sqrt(y*y) is occasionally larger than y, so clamp + const f64 tmp = core::clamp(Y / sqrt((f64)(X*X + Y*Y)), -1.0, 1.0); + const f64 angle = atan( core::squareroot(1 - tmp*tmp) / tmp) * RADTODEG64; + + if (X>0 && Y>0) + return angle + 270; + else + if (X>0 && Y<0) + return angle + 90; + else + if (X<0 && Y<0) + return 90 - angle; + else + if (X<0 && Y>0) + return 270 - angle; + + return angle; + } + + //! Calculates the angle between this vector and another one in degree. + /** \param b Other vector to test with. + \return Returns a value between 0 and 90. */ + inline f64 getAngleWith(const vector2d& b) const + { + f64 tmp = (f64)(X*b.X + Y*b.Y); + + if (tmp == 0.0) + return 90.0; + + tmp = tmp / core::squareroot((f64)((X*X + Y*Y) * (b.X*b.X + b.Y*b.Y))); + if (tmp < 0.0) + tmp = -tmp; + if ( tmp > 1.0 ) // avoid floating-point trouble + tmp = 1.0; + + return atan(sqrt(1 - tmp*tmp) / tmp) * RADTODEG64; + } + + //! Returns if this vector interpreted as a point is on a line between two other points. + /** It is assumed that the point is on the line. + \param begin Beginning vector to compare between. + \param end Ending vector to compare between. + \return True if this vector is between begin and end, false if not. */ + bool isBetweenPoints(const vector2d& begin, const vector2d& end) const + { + if (begin.X != end.X) + { + return ((begin.X <= X && X <= end.X) || + (begin.X >= X && X >= end.X)); + } + else + { + return ((begin.Y <= Y && Y <= end.Y) || + (begin.Y >= Y && Y >= end.Y)); + } + } + + //! Creates an interpolated vector between this vector and another vector. + /** \param other The other vector to interpolate with. + \param d Interpolation value between 0.0f (all the other vector) and 1.0f (all this vector). + Note that this is the opposite direction of interpolation to getInterpolated_quadratic() + \return An interpolated vector. This vector is not modified. */ + vector2d getInterpolated(const vector2d& other, f64 d) const + { + f64 inv = 1.0f - d; + return vector2d((T)(other.X*inv + X*d), (T)(other.Y*inv + Y*d)); + } + + //! Creates a quadratically interpolated vector between this and two other vectors. + /** \param v2 Second vector to interpolate with. + \param v3 Third vector to interpolate with (maximum at 1.0f) + \param d Interpolation value between 0.0f (all this vector) and 1.0f (all the 3rd vector). + Note that this is the opposite direction of interpolation to getInterpolated() and interpolate() + \return An interpolated vector. This vector is not modified. */ + vector2d getInterpolated_quadratic(const vector2d& v2, const vector2d& v3, f64 d) const + { + // this*(1-d)*(1-d) + 2 * v2 * (1-d) + v3 * d * d; + const f64 inv = 1.0f - d; + const f64 mul0 = inv * inv; + const f64 mul1 = 2.0f * d * inv; + const f64 mul2 = d * d; + + return vector2d ( (T)(X * mul0 + v2.X * mul1 + v3.X * mul2), + (T)(Y * mul0 + v2.Y * mul1 + v3.Y * mul2)); + } + + //! Sets this vector to the linearly interpolated vector between a and b. + /** \param a first vector to interpolate with, maximum at 1.0f + \param b second vector to interpolate with, maximum at 0.0f + \param d Interpolation value between 0.0f (all vector b) and 1.0f (all vector a) + Note that this is the opposite direction of interpolation to getInterpolated_quadratic() + */ + vector2d& interpolate(const vector2d& a, const vector2d& b, f64 d) + { + X = (T)((f64)b.X + ( ( a.X - b.X ) * d )); + Y = (T)((f64)b.Y + ( ( a.Y - b.Y ) * d )); + return *this; + } + + //! X coordinate of vector. + T X; + + //! Y coordinate of vector. + T Y; +}; + + //! Typedef for f32 2d vector. + typedef vector2d vector2df; + + //! Typedef for integer 2d vector. + typedef vector2d vector2di; + + template + vector2d operator*(const S scalar, const vector2d& vector) { return vector*scalar; } + + // These methods are declared in dimension2d, but need definitions of vector2d + template + dimension2d::dimension2d(const vector2d& other) : Width(other.X), Height(other.Y) { } + + template + bool dimension2d::operator==(const vector2d& other) const { return Width == other.X && Height == other.Y; } + +} // end namespace core +} // end namespace irr + +#endif + diff --git a/inc/vector3d.h b/inc/vector3d.h new file mode 100644 index 0000000..d582978 --- /dev/null +++ b/inc/vector3d.h @@ -0,0 +1,458 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __IRR_POINT_3D_H_INCLUDED__ +#define __IRR_POINT_3D_H_INCLUDED__ + +#include "irrMath.h" + +namespace irr +{ +namespace core +{ + + //! 3d vector template class with lots of operators and methods. + /** The vector3d class is used in Irrlicht for three main purposes: + 1) As a direction vector (most of the methods assume this). + 2) As a position in 3d space (which is synonymous with a direction vector from the origin to this position). + 3) To hold three Euler rotations, where X is pitch, Y is yaw and Z is roll. + */ + template + class vector3d + { + public: + //! Default constructor (null vector). + vector3d() : X(0), Y(0), Z(0) {} + //! Constructor with three different values + vector3d(T nx, T ny, T nz) : X(nx), Y(ny), Z(nz) {} + //! Constructor with the same value for all elements + explicit vector3d(T n) : X(n), Y(n), Z(n) {} + //! Copy constructor + vector3d(const vector3d& other) : X(other.X), Y(other.Y), Z(other.Z) {} + + // operators + + vector3d operator-() const { return vector3d(-X, -Y, -Z); } + + vector3d& operator=(const vector3d& other) { X = other.X; Y = other.Y; Z = other.Z; return *this; } + + vector3d operator+(const vector3d& other) const { return vector3d(X + other.X, Y + other.Y, Z + other.Z); } + vector3d& operator+=(const vector3d& other) { X+=other.X; Y+=other.Y; Z+=other.Z; return *this; } + vector3d operator+(const T val) const { return vector3d(X + val, Y + val, Z + val); } + vector3d& operator+=(const T val) { X+=val; Y+=val; Z+=val; return *this; } + + vector3d operator-(const vector3d& other) const { return vector3d(X - other.X, Y - other.Y, Z - other.Z); } + vector3d& operator-=(const vector3d& other) { X-=other.X; Y-=other.Y; Z-=other.Z; return *this; } + vector3d operator-(const T val) const { return vector3d(X - val, Y - val, Z - val); } + vector3d& operator-=(const T val) { X-=val; Y-=val; Z-=val; return *this; } + + vector3d operator*(const vector3d& other) const { return vector3d(X * other.X, Y * other.Y, Z * other.Z); } + vector3d& operator*=(const vector3d& other) { X*=other.X; Y*=other.Y; Z*=other.Z; return *this; } + vector3d operator*(const T v) const { return vector3d(X * v, Y * v, Z * v); } + vector3d& operator*=(const T v) { X*=v; Y*=v; Z*=v; return *this; } + + vector3d operator/(const vector3d& other) const { return vector3d(X / other.X, Y / other.Y, Z / other.Z); } + vector3d& operator/=(const vector3d& other) { X/=other.X; Y/=other.Y; Z/=other.Z; return *this; } + vector3d operator/(const T v) const { T i=(T)1.0/v; return vector3d(X * i, Y * i, Z * i); } + vector3d& operator/=(const T v) { T i=(T)1.0/v; X*=i; Y*=i; Z*=i; return *this; } + + //! sort in order X, Y, Z. Equality with rounding tolerance. + bool operator<=(const vector3d&other) const + { + return (X=(const vector3d&other) const + { + return (X>other.X || core::equals(X, other.X)) || + (core::equals(X, other.X) && (Y>other.Y || core::equals(Y, other.Y))) || + (core::equals(X, other.X) && core::equals(Y, other.Y) && (Z>other.Z || core::equals(Z, other.Z))); + } + + //! sort in order X, Y, Z. Difference must be above rounding tolerance. + bool operator<(const vector3d&other) const + { + return (X(const vector3d&other) const + { + return (X>other.X && !core::equals(X, other.X)) || + (core::equals(X, other.X) && Y>other.Y && !core::equals(Y, other.Y)) || + (core::equals(X, other.X) && core::equals(Y, other.Y) && Z>other.Z && !core::equals(Z, other.Z)); + } + + //! use weak float compare + bool operator==(const vector3d& other) const + { + return this->equals(other); + } + + bool operator!=(const vector3d& other) const + { + return !this->equals(other); + } + + // functions + + //! returns if this vector equals the other one, taking floating point rounding errors into account + bool equals(const vector3d& other, const T tolerance = (T)ROUNDING_ERROR_f32 ) const + { + return core::equals(X, other.X, tolerance) && + core::equals(Y, other.Y, tolerance) && + core::equals(Z, other.Z, tolerance); + } + + vector3d& set(const T nx, const T ny, const T nz) {X=nx; Y=ny; Z=nz; return *this;} + vector3d& set(const vector3d& p) {X=p.X; Y=p.Y; Z=p.Z;return *this;} + + //! Get length of the vector. + T getLength() const { return core::squareroot( X*X + Y*Y + Z*Z ); } + + //! Get squared length of the vector. + /** This is useful because it is much faster than getLength(). + \return Squared length of the vector. */ + T getLengthSQ() const { return X*X + Y*Y + Z*Z; } + + //! Get the dot product with another vector. + T dotProduct(const vector3d& other) const + { + return X*other.X + Y*other.Y + Z*other.Z; + } + + //! Get distance from another point. + /** Here, the vector is interpreted as point in 3 dimensional space. */ + T getDistanceFrom(const vector3d& other) const + { + return vector3d(X - other.X, Y - other.Y, Z - other.Z).getLength(); + } + + //! Returns squared distance from another point. + /** Here, the vector is interpreted as point in 3 dimensional space. */ + T getDistanceFromSQ(const vector3d& other) const + { + return vector3d(X - other.X, Y - other.Y, Z - other.Z).getLengthSQ(); + } + + //! Calculates the cross product with another vector. + /** \param p Vector to multiply with. + \return Crossproduct of this vector with p. */ + vector3d crossProduct(const vector3d& p) const + { + return vector3d(Y * p.Z - Z * p.Y, Z * p.X - X * p.Z, X * p.Y - Y * p.X); + } + + //! Returns if this vector interpreted as a point is on a line between two other points. + /** It is assumed that the point is on the line. + \param begin Beginning vector to compare between. + \param end Ending vector to compare between. + \return True if this vector is between begin and end, false if not. */ + bool isBetweenPoints(const vector3d& begin, const vector3d& end) const + { + const T f = (end - begin).getLengthSQ(); + return getDistanceFromSQ(begin) <= f && + getDistanceFromSQ(end) <= f; + } + + //! Normalizes the vector. + /** In case of the 0 vector the result is still 0, otherwise + the length of the vector will be 1. + \return Reference to this vector after normalization. */ + vector3d& normalize() + { + f64 length = X*X + Y*Y + Z*Z; + if (length == 0 ) // this check isn't an optimization but prevents getting NAN in the sqrt. + return *this; + length = core::reciprocal_squareroot(length); + + X = (T)(X * length); + Y = (T)(Y * length); + Z = (T)(Z * length); + return *this; + } + + //! Sets the length of the vector to a new value + vector3d& setLength(T newlength) + { + normalize(); + return (*this *= newlength); + } + + //! Inverts the vector. + vector3d& invert() + { + X *= -1; + Y *= -1; + Z *= -1; + return *this; + } + + //! Rotates the vector by a specified number of degrees around the Y axis and the specified center. + /** \param degrees Number of degrees to rotate around the Y axis. + \param center The center of the rotation. */ + void rotateXZBy(f64 degrees, const vector3d& center=vector3d()) + { + degrees *= DEGTORAD64; + f64 cs = cos(degrees); + f64 sn = sin(degrees); + X -= center.X; + Z -= center.Z; + set((T)(X*cs - Z*sn), Y, (T)(X*sn + Z*cs)); + X += center.X; + Z += center.Z; + } + + //! Rotates the vector by a specified number of degrees around the Z axis and the specified center. + /** \param degrees: Number of degrees to rotate around the Z axis. + \param center: The center of the rotation. */ + void rotateXYBy(f64 degrees, const vector3d& center=vector3d()) + { + degrees *= DEGTORAD64; + f64 cs = cos(degrees); + f64 sn = sin(degrees); + X -= center.X; + Y -= center.Y; + set((T)(X*cs - Y*sn), (T)(X*sn + Y*cs), Z); + X += center.X; + Y += center.Y; + } + + //! Rotates the vector by a specified number of degrees around the X axis and the specified center. + /** \param degrees: Number of degrees to rotate around the X axis. + \param center: The center of the rotation. */ + void rotateYZBy(f64 degrees, const vector3d& center=vector3d()) + { + degrees *= DEGTORAD64; + f64 cs = cos(degrees); + f64 sn = sin(degrees); + Z -= center.Z; + Y -= center.Y; + set(X, (T)(Y*cs - Z*sn), (T)(Y*sn + Z*cs)); + Z += center.Z; + Y += center.Y; + } + + //! Creates an interpolated vector between this vector and another vector. + /** \param other The other vector to interpolate with. + \param d Interpolation value between 0.0f (all the other vector) and 1.0f (all this vector). + Note that this is the opposite direction of interpolation to getInterpolated_quadratic() + \return An interpolated vector. This vector is not modified. */ + vector3d getInterpolated(const vector3d& other, f64 d) const + { + const f64 inv = 1.0 - d; + return vector3d((T)(other.X*inv + X*d), (T)(other.Y*inv + Y*d), (T)(other.Z*inv + Z*d)); + } + + //! Creates a quadratically interpolated vector between this and two other vectors. + /** \param v2 Second vector to interpolate with. + \param v3 Third vector to interpolate with (maximum at 1.0f) + \param d Interpolation value between 0.0f (all this vector) and 1.0f (all the 3rd vector). + Note that this is the opposite direction of interpolation to getInterpolated() and interpolate() + \return An interpolated vector. This vector is not modified. */ + vector3d getInterpolated_quadratic(const vector3d& v2, const vector3d& v3, f64 d) const + { + // this*(1-d)*(1-d) + 2 * v2 * (1-d) + v3 * d * d; + const f64 inv = (T) 1.0 - d; + const f64 mul0 = inv * inv; + const f64 mul1 = (T) 2.0 * d * inv; + const f64 mul2 = d * d; + + return vector3d ((T)(X * mul0 + v2.X * mul1 + v3.X * mul2), + (T)(Y * mul0 + v2.Y * mul1 + v3.Y * mul2), + (T)(Z * mul0 + v2.Z * mul1 + v3.Z * mul2)); + } + + //! Sets this vector to the linearly interpolated vector between a and b. + /** \param a first vector to interpolate with, maximum at 1.0f + \param b second vector to interpolate with, maximum at 0.0f + \param d Interpolation value between 0.0f (all vector b) and 1.0f (all vector a) + Note that this is the opposite direction of interpolation to getInterpolated_quadratic() + */ + vector3d& interpolate(const vector3d& a, const vector3d& b, f64 d) + { + X = (T)((f64)b.X + ( ( a.X - b.X ) * d )); + Y = (T)((f64)b.Y + ( ( a.Y - b.Y ) * d )); + Z = (T)((f64)b.Z + ( ( a.Z - b.Z ) * d )); + return *this; + } + + + //! Get the rotations that would make a (0,0,1) direction vector point in the same direction as this direction vector. + /** Thanks to Arras on the Irrlicht forums for this method. This utility method is very useful for + orienting scene nodes towards specific targets. For example, if this vector represents the difference + between two scene nodes, then applying the result of getHorizontalAngle() to one scene node will point + it at the other one. + Example code: + // Where target and seeker are of type ISceneNode* + const vector3df toTarget(target->getAbsolutePosition() - seeker->getAbsolutePosition()); + const vector3df requiredRotation = toTarget.getHorizontalAngle(); + seeker->setRotation(requiredRotation); + + \return A rotation vector containing the X (pitch) and Y (raw) rotations (in degrees) that when applied to a + +Z (e.g. 0, 0, 1) direction vector would make it point in the same direction as this vector. The Z (roll) rotation + is always 0, since two Euler rotations are sufficient to point in any given direction. */ + vector3d getHorizontalAngle() const + { + vector3d angle; + + const f64 tmp = (atan2((f64)X, (f64)Z) * RADTODEG64); + angle.Y = (T)tmp; + + if (angle.Y < 0) + angle.Y += 360; + if (angle.Y >= 360) + angle.Y -= 360; + + const f64 z1 = core::squareroot(X*X + Z*Z); + + angle.X = (T)(atan2((f64)z1, (f64)Y) * RADTODEG64 - 90.0); + + if (angle.X < 0) + angle.X += 360; + if (angle.X >= 360) + angle.X -= 360; + + return angle; + } + + //! Get the spherical coordinate angles + /** This returns Euler degrees for the point represented by + this vector. The calculation assumes the pole at (0,1,0) and + returns the angles in X and Y. + */ + vector3d getSphericalCoordinateAngles() const + { + vector3d angle; + const f64 length = X*X + Y*Y + Z*Z; + + if (length) + { + if (X!=0) + { + angle.Y = (T)(atan2((f64)Z,(f64)X) * RADTODEG64); + } + else if (Z<0) + angle.Y=180; + + angle.X = (T)(acos(Y * core::reciprocal_squareroot(length)) * RADTODEG64); + } + return angle; + } + + //! Builds a direction vector from (this) rotation vector. + /** This vector is assumed to be a rotation vector composed of 3 Euler angle rotations, in degrees. + The implementation performs the same calculations as using a matrix to do the rotation. + + \param[in] forwards The direction representing "forwards" which will be rotated by this vector. + If you do not provide a direction, then the +Z axis (0, 0, 1) will be assumed to be forwards. + \return A direction vector calculated by rotating the forwards direction by the 3 Euler angles + (in degrees) represented by this vector. */ + vector3d rotationToDirection(const vector3d & forwards = vector3d(0, 0, 1)) const + { + const f64 cr = cos( core::DEGTORAD64 * X ); + const f64 sr = sin( core::DEGTORAD64 * X ); + const f64 cp = cos( core::DEGTORAD64 * Y ); + const f64 sp = sin( core::DEGTORAD64 * Y ); + const f64 cy = cos( core::DEGTORAD64 * Z ); + const f64 sy = sin( core::DEGTORAD64 * Z ); + + const f64 srsp = sr*sp; + const f64 crsp = cr*sp; + + const f64 pseudoMatrix[] = { + ( cp*cy ), ( cp*sy ), ( -sp ), + ( srsp*cy-cr*sy ), ( srsp*sy+cr*cy ), ( sr*cp ), + ( crsp*cy+sr*sy ), ( crsp*sy-sr*cy ), ( cr*cp )}; + + return vector3d( + (T)(forwards.X * pseudoMatrix[0] + + forwards.Y * pseudoMatrix[3] + + forwards.Z * pseudoMatrix[6]), + (T)(forwards.X * pseudoMatrix[1] + + forwards.Y * pseudoMatrix[4] + + forwards.Z * pseudoMatrix[7]), + (T)(forwards.X * pseudoMatrix[2] + + forwards.Y * pseudoMatrix[5] + + forwards.Z * pseudoMatrix[8])); + } + + //! Fills an array of 4 values with the vector data (usually floats). + /** Useful for setting in shader constants for example. The fourth value + will always be 0. */ + void getAs4Values(T* array) const + { + array[0] = X; + array[1] = Y; + array[2] = Z; + array[3] = 0; + } + + //! Fills an array of 3 values with the vector data (usually floats). + /** Useful for setting in shader constants for example.*/ + void getAs3Values(T* array) const + { + array[0] = X; + array[1] = Y; + array[2] = Z; + } + + + //! X coordinate of the vector + T X; + + //! Y coordinate of the vector + T Y; + + //! Z coordinate of the vector + T Z; + }; + + //! partial specialization for integer vectors + // Implementor note: inline keyword needed due to template specialization for s32. Otherwise put specialization into a .cpp + template <> + inline vector3d vector3d::operator /(s32 val) const {return core::vector3d(X/val,Y/val,Z/val);} + template <> + inline vector3d& vector3d::operator /=(s32 val) {X/=val;Y/=val;Z/=val; return *this;} + + template <> + inline vector3d vector3d::getSphericalCoordinateAngles() const + { + vector3d angle; + const f64 length = X*X + Y*Y + Z*Z; + + if (length) + { + if (X!=0) + { + angle.Y = round32((f32)(atan2((f64)Z,(f64)X) * RADTODEG64)); + } + else if (Z<0) + angle.Y=180; + + angle.X = round32((f32)(acos(Y * core::reciprocal_squareroot(length)) * RADTODEG64)); + } + return angle; + } + + //! Typedef for a f32 3d vector. + typedef vector3d vector3df; + + //! Typedef for an integer 3d vector. + typedef vector3d vector3di; + + //! Function multiplying a scalar and a vector component-wise. + template + vector3d operator*(const S scalar, const vector3d& vector) { return vector*scalar; } + +} // end namespace core +} // end namespace irr + +#endif + diff --git a/lib/Irrlicht.lib b/lib/Irrlicht.lib new file mode 100644 index 0000000000000000000000000000000000000000..ef3cf6a78220c027951f2123a4048609775f53c0 GIT binary patch literal 62134 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

-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/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

?D)*Y= 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%0DIEFZ2>m5{Dj{11{?MB09u@7*otu zr)`JV`U8u=cW9yZTA?V&i`p@XiK+e(kCo`$EwOni#V>(@%IRn1o471XC%!ZMYtOv%*L zTIwws|8FzRxq%i>XgFN?#%+(ucnGM*&^I~pYP2OAt>@{ai|5J%oKfO;bBY8f);9?&o5tKzPGNn;_ux;K*Ejl}X*^mQ9zlv8 zea+9!NYXX^DL>Yo=-H3ed_$rupGQYB)?NMM-89H+`wloz{o~mPr(WCF3Cp2?Lk#~A z^KN}H*7khU5^TMgJ+Kvhf%5#brQeU#Jc7A=gRFtcFL!vech)cIY};|=$H2b=ImjI9 z-BHlagpO_C9RIqSJ*!_NU(|2tAPVDELsztBXT+PmJ9+k2wAt8F{Duwa@?-wiI{$YR zxi#&dsKxJV8|pb~e^IOr>#d9#k;H5HO$#E43|G#-!+Wfa?IAiQCZ3u z(=T{;L`JpGem|Z%V-~^u_Ssv!JNUbmmjd=2&uX82Z(Smt-~4#rm6Xx+ZR`*mR7O0p z`6$X+H;{jt%m1+De_fu?}d10Hr8^t%1SNi^n^r+V+B+gMpjaiizHNAK2c zmLM{7UX?c+0)6$mtd`;L+ofe-AIiQ7d96=1e~gbe2Olpbs>Q+;p!WM9MzGH&y%vRJkgKnYSGQ(rKvnNvN5d>sy2ThHPWuV*n>D0i^NrV@-rhBN|lU@X#A z8!Z}lH@WVsJzM4+ripDi%1*qBiw8|S(`cWElq!X`W*zGV6E3r`*3B;*1u|za1>Ich z&zw<3R}KeHn#P>c(R&n=<1WqNzR`Cft1=a)or1@zCT*&D8g+hBT3Zd>A#wkjoS}Ox z9Jt}NJ~r;lF&OQp;+=i~C*O1%r_Heb+>!WhSzc33Hc_`_o}|pv@|vd(iVrhSN_TN) zlGfs8+?0m;+SNLS2ZVaJ-YB`(3SUFb;QY?aI;{kh20X1yyV=Y!&kMQYGBTib5W5! zpz`=}wdWz3b?Z&hXp@hA;4Ab|qDe|R`fVTS5K0;b*feYKJdD2$xZVf8gk!I#oF%^{ z$ds59c;Y)1G#*4?O&!1lW+o?KK^@58w+n}WM!9A#QOxhh?s zZ0xB|F56>p6fhe6rA4sv$&04c`S;cNh2<>Gb^fGs-fV5I6%V{BGV`LNn?BOu=B`dg z!OQ2I3L|}yOn1HCM}o4Zqh;O?`$>Xn;S2*Z+*4DiLhJmK*{u}RU<-a2h9JcoTq3`F z!!LjFi(kC`d;iJZeb7X1qp4R3kAiL0QNIKC!>U7o3Kn|+TtV?=nIFXIeJ-VIiATtcuRSUJuko!0Kd0vTL%a>`I%}%zXfz6v2~H8EaQiUoM!?v@a`ro zU9g+5v=J`>~sP(I!Zv9&fky5?IZD7qcK-k zOS)iU(}Js4xiDIKz-C%{(JD~guqxch6(G6MH%;r3fXLZaEoWv&@w=q9Fp`OuO!4bn zXC|vN|F8N`J6s>s`>Shn`p|Mv9}LhJ*(CXZ?r6Sxt>UnxGlwWOl}`yehO%0dh0K!w zrau+un0AJW?oCkl7%4h;ZnkqXN{|k0fbN3KW@xqZq%fuH1H+BZN=C3c-uc{UzrLV^ z;*MweSs3(VoWFbHq@+fp?=Y=OLG-9hw`9sd+HA4j&8tqVE`OT-Q#6O>9sbygyvH2?z)ojTWewuE0t4c=4v6hTt~hs%`O$o9TgYT|fq}w%bIK3qt{%0{m0pVz)=YO1LW93I zf-AVrM0&ymjVffMnEXdSP5=+}^xRYOISk5cJ%V>llobvBeH<%yBO?=)*Qjm&tXQKWb|5f zQYD$awjN?qr`K#egtV&l48cDTIUSVyQ?u`vs`d@&|eAj&k{zlN>EoWP_w>`xZ&Xw^QHq6G9++t@Ttq2+*Ca znp6QC>qttg$~VG0xFRTeCT(vnjHc>7mMJZwj^PJvb8b2LlyguSO@~r+Rqs~76ESm9 zuU4l`0_{)`9U68q7epuGH%I&+5cTXm7(|mYrC%lbAP|wij{F89RT_c_&;COPy5+T= zK&wUu(ch3Xx9G@;8d`O&ytkK9BO8Syz0arug@$(R6JgVGyLMcr^uLH7)V0yWbPepe zwr6ntHu~iMI?1hTsx<7{vzgLQ(B*K%&WI=OT81_%uPGiz4W4y_kYSd94T=uxEsi}7 z8IH=7zDHAVT@qm^i=n_k*TS404~7M$>z;rXsuRz)s_Cl4pGGyGFnq;>uxBb=={v0L zmFBV8_I`Z$Y=heSGR+x2S)dGb#N=K9&=HeO3OcfJtAdW0{Dh!WzbCfV;)*Fp%&ag7 zy$$%KLA=H6)X{Bp6w10EA2Qqc=)W}c;-YVkHG6P+Pe*?yd2z8+KG%{g@oIik9cPDm zZR{n=o8Hm(l-K%eLb%;dS;yKOAJvemo#l5YItt?jN3@Ss)V=MeqVT;VzP0_-QF?A~ zKeeD{%gWt-S1NzgD&=+i4}$#D2Iqe?$p1)?|M4*Y=PiHrLHWxE=l@-h|LGwAvqAnp z%YY2#FKZ+Ip1LLb%~bvljQ@&ye<$3=c#&HO?P$oM2yFq+#QS5tYkscTm?|AJbAQHP z`>R{n1cwPMvsW&9RU~Mh)N;>17Xmt5W4@@xzVuVi${VEQx@8d2c;xZ~XYsSdVPu$CPtmO@)2J(*%7it&=B+wf)$z?UPAb`t(#zfA|u8u%nlL z{LBQYMW#O_pQh8F#&`oX+Wv{22ALct1)aW)1eO;=jAg%=>>8Pc;`$fCGt^$Z1($du z%6(_plDHWulvG&Sj; zdFGj)Vc(dI@MwAd!qc)sEN>=bHizG-{LbQc5x-^pR`P4%cP&4q3t5^E z#m}5a%Z#5noq+h6%OTt1XCl1+kMT2WCVn`6ruRKvw3?8?L^mDnN^d9yD2X^InCL&E zc^1Q)&`BF0n7hl^cgKx)_HtRZ=XdT-m*+$4lwU4}UAUrmwCv6I?%3UTWTJn3#Jiz0 z{H#xje$TrBHT|yi`V+In*4(p3V4%Li*aS3hDM2w%6O4fx7tp+g#QraGO*@_lxh7e0 z#BP1VIHtY4iRIFgiepm19>K;ib5c*b1@aTd3^~3?9M~09o_!8h+77^GT2+q!y}P`}-tZFrb}>goL}so+$b6lveJ+u!Y}t=UVC%o?dh5F>Yaf4@0>$={H&)lzac zDqCtgd#A{%U)0&F1I{`!rAIvmXjtP|RgZWag*lS@ois$3$!;Jvye(cf02>wd#%}b#ZmsYNM%Ps7gp_S|BiyV3xe&~K6l7-Y0$i)RN*JN;Nr^h z5iW^*Kxvkeh7X02nlyRuRo-sYOV=(4^4=Ta;(&r~k`$*3PYm*QS3asVk^|cgeA_Fq zl8)vrTKNDV!u+G*qpp}=Fu1z6iEn#_ELMQTiD>1c(_e{kP3%F%%McSu6&|W_pw_lA3j5a9vI}uRHiX#GQMKf2Zq3{>a@lTl986p1OKI0=;^4 z0=q!C9+kqltK|S0I^b+b2`;?)uo#yIdFezBb1C1mOENR~;ATo6;5#2NjVi%1m*8za zQ4q;8rT;mQU`wWS9tpB#|2>~{rhPwMs!MDws!MDusbj;5*R~Hk2WRRFJ-iA-l?p?f z3Q$P5lC_XSw~`6LgmCNa>CiE}r}8S8kviSKhdADtlx)1};N_wV zjnB9FejL+C`gV>eV5Z;5S5vV2FEPK-yzi|~uIP#RV9WbpBy&Ov`G~)`xIVdxJAuCq z!aVD({gpm28N10IseB)8eMzM9*@%zDV#Sn*zoJm~=CAk@YF@hH2>;&7%?15Tv1^x; zOZVyeFX`r%(?QCUYc^k5?7v(2Cw*?v=hF*oUMJ5s^6Wu)xVGBm*#^boVwlrG#_5*l z$;xN+`A9w+URep_c#BrPHT{)9YwyTQs`zBTq-N(pMbC%$YehU}`1?M}!8o`$y{40d zPq@cQc@JH?0|SR$l-K**Xgs%9imIBH}NLxNq` zaZy)D2*K#j7yJoYxY#at>gN4eZujUect*IoN0`kIKaIujD$$ervpan|qApfkT^@H| z`fp&rL?1Q9pdNcPBmsTwA$&Z)%;)sSHvf==mdob}LRs^%Y?cuS<^Jw0p?r0B&OG_z zLpG!APNRE=&ZwKn=Ms9v^wYaCHNb1DeYeVnmoiwdR^m5aWtwp5}*4DINB_$+?RJ(!1u0n_q#cWzAO2 z2W?R_vDoIzZ@?+$i>86lTnH|e=?d?J6=`fH-U+KPo$LgrwKy@o!!wT41YfX8KB+ZP z^3P<$4k*xPgdyJ7uPQX;i25a1SXd)9*7J(=_cSCi47G36c_(g`1XpJIc>)y*0BBwP z5+aWl3oTDbYH=^djY^AksdG1A24{3L%#ILmb_#Dg)8B;+$Fie!^?~%O$T$9&0rXh; zNtT10*W*|=a$XN-CCGU#oc>VXs9(8d_%;De#@Ywcy&n~{oHveqCgyX$_#D={dS;TY z1fRn?S4()~1h6(!`Xxp)E=wk6OmPBHe||BScNh8NqLrQg!otcki=&nE3(;edFj%mc zKB%$3_S;r}B5n1u2Ic+TaUWq5)4wtt+$Xl#xvw5!#@{Up7Lh_C# zFCKsY5ahKMPsq)hZSk2T$&{AzO|Tpn0PUZxK#;$-K7~yXr>BxS|1u1r-z*dI+mvXu z$$-J~xg49A;q#}U|E5=m`Wy22@1j#TeB|IqwCd@zL5zBTyW_sP;F3gLUT1Vbw>-u! zq%Pvb1~5Xrl2-qK2kSXHn|=h+@(=fkssFXDjScu{oF4HHiOie}vgop;h(DLh3g?0@ zD|icfKAn+*b)*W1E-`-rmv_%)eLBqHOQiCg;#lPZ5M~cRa*hD;g6HArDHe9x;gj>GzoJ!lAL+%(M*UB43z$gj08dNO0ftsDJ&~DzTkKuU zPGS~}N#(LwD98Up-rImjRb7kUlP?$`a0VnA6>GFulmt-;XcfQFTAdiJfC|B?^ZwS_ zXC?`v_Wp1G&-=d5nUbgIj&K;oxI(f`Ikn7Ao;B}TA$Q?iKz<9Bs_q?6;qAjMO zWlA`LP*NhvrI1F`7-q_bglXhOmav1em_2gj?EcWBsi4fwmrGFVhJp0bPx#JwaOtHI z6JQ{{bZdVAGCNLlc4zl*@QHiWfCPidN2t4Zd^Sse!Y%{1w?BtqYO2rZ9Pj7%bEqdm z(8B!E+WnN2=?k(#2n{3sFEzZrMj0dz?aV74mNDXTO4Iz&{1}R!T=Cn2NxQ2ZbSU@9 z&^ZAH6Q^%MdT9U1V5Maf4PP*^<9I%w?0hHNS>kn;=Sr?;*`+8uu|oWm-j<7ppVBYb z*7Psfr8i{b-jH4Pjy3(AvX^f2IxqERm%Y2Jvh1T}w&e0D1M9r)+9og4E>H7_Mar%8 z1W1Y0bXGwK;b{3~PiSrti*#?gem<2i4#e0Hy0xrv&PC+Lxgy(H=yk4R19*4gIuOH* z5sNSZF_;gEmGXYhB`bSX@jp5mN3)-@@|%H4O&+8z5P^2ZTBfkgVPVK<*l4kdLTL zVp_h--Am>bfC4wGPeJ3sPDSIpGU9~RX8^UQ3Hw$)y2bjG=zliRKOR8$G@3|K%1?=O zyNUGv09t6ei6piClt|TtNEfVtmt@|nT`qm3D?+glNwhVKg*5n5n5H#I1sy5Qo#Ou^ zFQM%(WKOZ|&{IBe#uy2avhHPPEkDDCWZ^D%Hg+JF6)Z;tC_{8t)Fzu-XjZphi2z>o z;bKIOXkj@)P09iifMe@C(ceVqN&f2pWXzfdUo{=s6{;Wq8fRR^boR1#S1SIltJktn4EFBzYZP9Ss0ADsJ zVluCjSnLlK*CJVEhEKYh!sG29KLcemGOC>Yw$rC}Xw0%zRA0G zKu4W2*1~TUMtME8hJd(8sGcF##!I1kE`sX0m{K{>R+hhS2)Vrl3SVUhc3 z26WvGC|^n*#@e_-ZhSL!snAzhw-wE!C@6?oG%`2``JXi%b!;?xGf@Frw$p0-5+5TE zjV6jm6l|>O7fN>w3rb>M7>Z}V6m+&$In5GTxOvPL{gOjfu@(dWe5nEAHk{P@3aOw+ zgxaOV0sEzWTuHy00u99>d-z-Ei6^L(q%7n#zNC2}=h11r6rH&qu~@lmnG)|f$_1O0 z=CUm}aF_o5Yx?yD_UE0<`z5$X@FLN0$%jd&+b!ri1=0Xg+9Sl02A>xdxcFD(`~RF# z*1hN?77004dm?c$3!Sy`PH7+iseLM(@>gwFzqJtsiAN;t9xxoG|IrV`=y&TnDz4<+ zn~8IKMzOx3v5g&4$_7(cqWc%=p*ujk1mo9DJJo-Vl(!LSLAv&e4q@>po_FJlqw8WH&|7NH`p@z$(3k@K&Yg5&=lO=d3| zPTP$yzz|_?mY_uCqrL{mBp5C8G_bm23obsbugyh9Z<0?r}j-_5MlN5~{YoOp}Nc^&_kPwtlh%WLd3ic>s>}IxFBJWIq&lI51`$_dt zHM_ue?^&x+mMK?x@SzTNETZr=nfDgneg(q^xA4JSA{nt&xXMwv`@t2Ez0loq4p*G0 zIO|<_nF#lvN&xpJ%F9F}P#s~DdBcIbH>x9>-q#U{hHJS8zb_)+uOM(_liaxWG@KZW ze@|M1$f{uW*aiDl!d6xkC+cB%mFam-xS%ZhFtA1NO5x|X;1yvVtaOUB4tHdH=G?~( zbuJT;BRNn3NtZ}&K1arltBzk0$fUoGwv%I00o?-qa^C)=sf>HFqU6OW7?Mr^`{*P;2#mLWSZZe|Vzk3A}qn?cYXus!EoZHOK3Tn)7?IXL<=~hwR%LsjKioXKw>06T~0Jf74Lmnp%FZAfOQW6=_YpU4GZshZk8J)!UKCj_w`G8nh%B zTx&aP8YjOe9qh5>E3KE&N0WK4KZx+hgf?_hczRE0LxF^+_n0;hWKVBy8%i&@z|fW{ zM38iN_z;9XxJvSSsVFMx=MZl%HP-v(86 zs3q3a*4HyjF+E!w^|i2mNl$!8D0ILX(u*4hAoszB=5kjb)FDrS6O5&{xmeMwB zV+ThnP+D>&>kZj9a}N>&?^<>OJRyPjR^2NB-bn>;p_T6@^Y%X=?d%p|f^Yq1Er5(2 zQvj)nqRK4*o%&x}fck+2m{P3SivWwsUNEO^<7OZKS7*N;%^uQ}r8JgI#HFj`x8dJ7 z!SJoVTXH*dl{h!&AFToZCIO0aUKoO0MFxF_j`{-$t@xKFfnKEl0MdG0QGn#bV*pg8x7{HCBI7_VFoF66MO-8zc_F}m`bgh!y}f-Tlr9+9%)b#!l*RrE|-217@y z_-m@jyv$#~dAF+L^_(_Okvr|#2LoRjmL>8J_KJ4Tmu2|>jLIKe^-J4;r=<*2QI5$zvaX`{-8L3>8c~i(FvU!3c z;2iF|46n+1I&yBt;$y6hC@-5ns)Q<)?;_<)5nPgBZ6DK#+^PEGR_Q9ped;6}mWf(8 z^2KOinKTv+ys#quvhl2uett3~{_g#xU~T+?aXKb$S)ak3xknFnWQL3Ba{^w^rLMM& z6Dj{FZd)JP9ep)(#iJhH-9B+4C6?r58eT0CCYos3;V&FiUv_K8NsObMRu2yPgIbOr z-Wxu}g!i`AFgb_4$-HN%j_86s-;KgGuvPbwgI%&(9INs7@@rs9PyAFqGS7$7^ZboE z&wu=9i|E+iAH9Z}8d^yAN(D2-l?Ba7$s`l)8qY+Bm((%D17dIoXtF z_`xmyaDHnx{$$>_Nx3zkxLJs|cZB=$myM=zxa2*sF>g90@{r^oX{{s9LYiiZ#G+~L zb0dtQWHL1DiL1q-)6kmY%V_g7NQ)({>6`Rpj0%E|yLSe%AxFC#@D|y=66C zLrWY~pryNl2JU3P{9kmB3$%&mlB|i-v3FcY-?(V|$J(=o@zu}}3sQY6viU92^fZi^ z7hN7$YTYh9gA#3kE>t4lEx`Vq;ZU-p1iu z|Hi0@&q*?_vYj2hBi3iOel;TBD^YDx@F$s8B;L^Q*W4N6r~wcCQ7H*Ct2dCyCO456 zM0xVJ?w4ewK>g)m(aib7;XF?vr+V#j4Og=f=;nXqc_6M2?P2-tg6u?}2JxkG`ARUY zBOM4PafHwjIxe#Lp`kdz_|yrc;0?xqB41&$1>=_$hreu{B`Vs6%UW%nHOv)-g`Z}V zE=ykt@h0~cep;v#O{gM5iJAhh2`9dmtcYFKV+x!_;@K~`(2Rp!DH6DKQtR_l*7&hf;FY!*!c z^ielAWe5~zwN73ssZOOmn0ig{D@cp^Ps>EJiyL_*yD2j%-x}rF$@2=&yF58>kMbPH zb2?8M&x!Ah@?6973!XQ4#_t>Dxt8Z%o;^IWCvM!`FuZexa2VvTXXMw8&`=}$%S%-U zOTCB(u!H30>{8SwzsV*Np2>bkBLnY~Yu_Uyt)jYw=D&@0;--GXmz@tFJSsc%yXI&X^`aKc^6Ns#y67k56 ztqbUET3%(vXNrgM^{hyd7pTn1)g7cdvb--3;`{0+p>yHjuNqDi3`Fq`hha25;rDvUqlBam{oX3yN8?B}!HN%oP4Qp~Z8e&*PD`av@Y zmqdOga)pQ7eEKut(1_IM%Q~(3h%c4Tdox58`2%{~B*G5O6t(iyLk%a%b-(-+|L=c+ z4(U7a|M2z}y72Fiy9=L-x8FSb4?s<2BaBBQ>}56PlBJ6XIYOyxxT2qUXD6Zi1i|Nk zjf4xG1C*vaXX?Q`)MXaY<%*tmsrG%pCC{R#2QpM%1VmE^CkOSPo!7&Njja-nq2YoX z@r;^cw`ou}V>QbBFO?nRFZtbrv`@o{cqZoHQER6=XmPa(*Hc1Im#+DE3gVg@zsHm? z@5cg9+j&dot#C`eLf~TQO-kQs{ii$#ZHtr`KplfhXP@T&eif&{_rkMdG+`y%Ar%wre05)xkwS+^ND2`NgAvVN|a9|enMc& zH?7#In9EN48Ow)tfNAqZ9Z;;Y3}X%F^U*)CtFy8KsxQf=`x$8SZIx3qEMJ9hB9~vj zD}@O-b}n&_YtryF!VKX%Dx|7Uqv@vAFx60Dsfyu~vP}#@R#j}TJ zFV8+Ena;`&WxDOGOc>`Wvx7@vojXBLEHdVV^Jnmy*?QZW<4aqoau8#1=db#E%y`xdQU-w zdBM}vnbOaHME|!g+XBieHwduSeYu~P>9eiN9__4rfY?MBUER|2pXwtjcpx}&+R&XX zsZFmH9l4{c?`N`;bY{y}xT~Y9F&y>GdL2|#gZ(afD|!^g$Q3G6dG`D z&Nc!B1a@k(Rf~*BO_ml}p&~4e1+37!TzNcL>AY?Q_i-00U* z%JFZYJnXh|=S7ikzU^H1{9HvZMQxa~6>-!W?ig^#=VW?A?9WoOKy0(rC-!@(Mj-ZQ zDZUWxwL-7gh@e4GFzfGEG2}{?xbuDLKB-KauD#JntEj_=eRi12vGGiZ$`?66eV4T5 zE~(s&a1T}+&Tv-9eKVIzKKav5C*AYVR`0d4rX}u!%o5%n{3r3&srMV=6+T-s?}vDW z@6}1;`VV$`!#-s^x{StG3^cdlL?b<9ZYzEfXlt{kv|ha7h@|v3-fCympljj7xX%nY zx;=@U03JKql|)OEVa)>*0{bJI<`711 zfKFc}IZcvG4JWM#uTV7=E|bkGnY4I_$elrMc_i~L0wVh3x5Y0+9y0NBq6%*=nfD^u zo1o4!gzWvA3x5Q7o20;%XY?uMjU1G~uO$J)(ECv;AezY};A_11=X4tZk1Y6`5?S{D z@V~@s5I2^1$ZPOxMkYPU6QGKGr@c1fcg6=6bQ!A}J|U%|(=Ua=DJ#Tl~Q%8FkMkE)u_lK$~DZ0j7Ijb1f~ z>}s9MYp<6!YyF0P*v^O6narNb3=(B^IchHfeDTE0Dgo>Ou_8eT{lazLjs(<>3lF5=PFEThOu<^`QJge5Wcef=NsN1|6hv=v^jkPk zfp$oaMMVf-SI`Av6Acz+*A-aTm$axN;rqCAk(l=aW1Z!LK2ZjyK0{D;>`%0-&wzmP zO%pM~tYlsnQSekz5D8T*iH+lO#U7E5P7O%6irHRD^ltaDfh%Zvm_qc)IVLTIs>9!8e^#lzegmWlsK?k zUR5iWR@K~TCO9qfQVC6A54B5SD^i6mV6dQ(1 z-jH&aaYTOb8J}zOQ5a}bnuaYrmTqW*kaMhvpE*ykGWFT<8Xrv~H&a5+kTxVRDB%;L z1y!!fJi%-027VGdHw&Jg5V|)c7NZdD>`H7z%0-Py5p=0wLx_B1O$x2giOV>oa#im= zKska=LT(}IDIW@Lk%a6@+)eMG82ixmG$M%2C*(!XW)FwHUbo$GvmQPDa$f`6iVRd( z_>P!y27ZE{r^LLqvRA7COIgG%jeg2W$)3Le4WN8AJ_9xVtGtvYQ09XZnu`zdfUR1( zfa7s8N;46nK<#kA8HQ4=vL_c0&B9pMqYDo^W6HW0d*?N0wU=#K_(7m-*Ft;A`Rvik zmXtbM1F$#p&Hd=C=k2mR3lEp=33H`+PdIZ|Z=kGe@rhaOc3H>5!?4i97QXQCT?yn7 zoIRNTVhqfb)vJbSNmRqZNAk|5rjOG%`$on&cj~8;2-Ide1NX&)W+5dOLNM= zs8bu{3kv5mFi=q6FDKu^AXuL6J!yVcYJa0W2y$`1Y-mKPmkn_t6RfB{%P`xB6iI`A z<>q1#D9iXUC?>(++W8kVf!r}kCXn81#Ed6!j318dtO35zz^B5c69csDqL(80(l8^k z+0UzoT|kzS_RsxL7rZ)hql0V%1qFU<<6mMwm2${n>RFdktLk?*ZqUk7&ug}}W{^bh zCej{<0ni4-bWGark^aw>`0u?JBht$_LHw>5?21=>P}Xs)H||L8y%9G?YbI|Zf`P-i z6GejlX}lKXQMJbO>?!))jFoh@-Jq;T&PmKZP!`q+u3Fcc0+H+fLP{dL*ajVQCc5)% ziDd)SO6^uudpx5J0rg z)#@fIO`K!}nz+R@iwS-vQ@m<|uZ!NC%dNhRhe;1&=2Zr2!^uu1TSml_HJ{|a z%itv0I{Ft{vaZ^SWH800_n6Zjt5HN1gYkQ$ZMag+)SkF4PX=Z~n3PC-XUI8DhTx># zk|INo^+FOwmzby^WWwK(c#9Z}=;OghC4^C~UG_+olMDOjr-H12Rh~dAd`aXcI_5Wm z&M?}tp*nssO5{iWyqZyP)mbtMdbSRclKgZ)N!}Z)Q^eg;5-y%G$+;83(=r9T{v(+J zdhU{F(lPRb4vXMbXh0NMtw{$fMd#oBR4?G%I%U#9xk?{dHiRc|G)~SlB zL@@!-S=o(GY%J^%mlFgjG&+m1r(4~f`1Y&=$w|)#V&8s2n4f`@8OuK*O!9i0qJw6!C@#UR|ZLUWOJ>Q zhGXx|%T2L%&}Ncor6@PCon0NTdOJQCmypqJcf7*IZ#1B)z8UpExTmX@k%ynMms)^9_9|fv9iR^=|F66 zb$-5uc=pcZD{ek2DO%trGrVnhgcE-W?&e}Oiuyk)ns0(wjUUmxCfGapj-JX0Nu^sq zD>AIcPF@D4@@Gj!gNfkP(Nh^JsfbdSbXis$k;;vdiUw1`SA*~)YUGtv0s~ViJ0g|w zl8Od9NrTOlW(!|%^g^jX)%yfU7wRou23G9_-rF?T6Xr{ci``t61xt4Kv>Et@6iWYt z_tdwa;E!xJMJP!X0g-{#sWuwgCem5G4XJKW-=BAQuK9L3pj4*ARCo*>#q2OvyE%rZ zq=1uBIk2Rsa%jj)B`qD?ZTIl7wjmLg_Z_B>RmIWHgD~z8?-Z1}tfb6b)JIwJuwdDD zWq}LNOI$kcLsqLF3e5oHOvdB*`1gdiNKGwDC>W}NQHL>(Zteo{J(fG9_hxcVQ5YwF zYBUi88yG8KJ=ERd!7p>cW%FapWSxU6j40aVri=+lVh9J6aZX$Lctb7Yfos{-6ZS57X z+#S-j$l5r|FY6JrX^hz?am5d0Et365jYt5oDw_3m;L^>VdE2DA*9FvY8`qVLX)XIg?IEAOxm4z=KIi0=5WW4G|wyo)!1=A zri&AL`{g%SGe|a|RIYDGc!cWFud%OE(=nH`u0Y7#S4e-r6>|&1CXs^#0IjvFg`g=~ z1GDa<;SHnMZs;zfkB{st*|5MmT2{C;`q40JwVbb@3-TYY?@I>fJmRdmef^14Rn$Rl zo)=}B};`SeVHD z5z5_E`}5i?3V=z!cS7n@I?42>(dxrMj+A=SD-oGMh9Kr6O{W{%WOF;yE{3SF0)n+z znc~AiQJd1mH8Rl1``k7;m9U*hWU)Lsn#kgWk*(q|JN|v`)46TBu|eLRU~*h>jst1x z=mu6uR?Q4)AK~87AVsuH0q5)la?eF_Bz(z3(%j)O9O9UUoqh+BBFjNdkZf;GQONbq zLqZBCcLwL|v3}nNl^4wVDDlPng%7YdP^upn2i*OKD%t;w=J5(nhaK(A43uda3%OwXSmIB=muU1k(F6tZz#ctH_OSIr?O%{8l{az9 zU&SU=Lk@*)IIC)azW1uEPw0D})Gh;3&RMk(7t(|QRH!jyQ^-ekZ+F0@A5UuJMix8kuhBi;kNVqV;JPig!z_tZ@HR-g{c{b zNtL+!bdd++rpXg*rb5o+!lx@%j?Rum(=wU%S4zUc_}wlmEH1?q7FZMcCjRUD5*=Q+ zq~;fk=fyH%#x;(qQWE`d*;I*or;P0Aq-o|!!H%P8I$J~W+($^11Ig@RRW8@8JQ>IY z4T>BHqm15-X2uLTqLsplNk))Xp=#$YDcH2Kv0E5E$@T!qIk1($ znHC>=Z_tUYBgt6yU7}PV7Pt$|c787|^r1hOr2-buT~NSJRymnfV&o;5<&lfv%3>vb zjCzIQ*%7f+A|<=SQ!IF%i3X)|%av?WaC^EJRf&K@ky{#?;$DOkF#OhV3j4#0SVxe! zqJYV~>sBKXn45ZgY^9tmtd<&JtLt8WQ@Dv4PA~Bfy66qRp8R5&v2xD-w`_eZ`oZue z)5VltJg;N#KC}qmz6L{|x@=5p-`WDEJX>3sKKW%%;+GkWUp9XH%B;S%1)_vs=r4Xn z%kb6~a`0@O*F24sF5;QVa|KTw&pe(+o&`J$d6x3r#*2o7em`vU`a#C3p_-e8@8dn2+ZK z9wb;jXY!QrSR3yuh3gRcz!x4D`5-?$I`Tn5%dc0kll>E|qA0%G=jZDUvhJ(6cqurH=UnkrcM(v)&tKSi;Mu@YD#Uy3T<9^cM zsW6yl%M_4SD`C8{G6-DxbSZ2L|4e3Ay4$nP2c;K#t;XNc%pu2SvpjaQtY@TjItDC! zI#*&9+a z;#dusZvu`>2MlICBLNE}V4(&q(ts08z+wp)?Wn23P#^dIsG8!px@`Zg7gcp`=>sq= zp1mS{POB^l7KKj< zG+kI!*%YJ?OLZ>xZNpHz@!P&0QH&yGxH?!`?rmV@+Y)px@dlmYl!C%-4`)*(q7jvs zF9u698ioa9ql2*veXwx=`GTdk7iIe~>LNg@c5Da_XcD}Lop*!)BmsRrq6{*Us)W|O z5WDOqzYzJcs%m~`hsckUQq3V|VcS*Jg%6S7P&hLYDDS4Al)<9);fU2AoS6Y+C}Q7w3w7K*pC> z^c}{=6;^_`Z-(G?I>)>8H~lHAogF+xQ#LbfMpdb&fy<2y>k_}W;R1Za@C|F2;#7H^ zj!LL0ds4@5=<}Y2)140E-{)yK$)2?RPzNmolT3sUcQ5>vlz&{IW-i5ay)wRysWlE! znYDvuk6MjCCZbcGKgp(GqoaGRv+)SYISI>IyTjuS+T+->2W3)cB4_T1OdCh9EekSz zL&kFmk;7Xr`gpp{{F1>upKX+)I2Ys+I)mv4WkKU6P8%0_C9`#2@lLPO_|V z4!AOTTcO+DY=_|6Y_r4o;r4yxqH!xP7kOUIN9~~gB z+P~f={dTDwzsbpkUyiVhRELupa56-x))~vkJLRa@vQ@>_$;(f|7!_|``8ImF<&@`w zO>}YPEYI4Iv2|j*OQX8>vg0`w=Z$5Ipu9Wd;FgT=@HV0K603eD0|%uYVkBFMh;;Zr z9WDH&pB_HzXyL#7iSQxkg{s(bYYydYE}D6@Ps3yZAL zXIrCh@*%)x7l;^Jm1tNPeeq=Zy}U$zzdl8NzvY+T8w1qAMz9_+t^&MONay=Pg@y9% zrl5S2`vVMG`6k%7cy{FL^FQ``Z=5e5>tf%U8;ISwAkcJEea{LuC1uZ8tFFUkf(TvT z5e{CzI~>Z&3T7RXI6U0co_bOtYt?5c? zJLLg!15SBRTnxj7#0@#+HR9Gdd>6F)sTkDk17I(H&UMFsyQ$APRxzckgCI<57 z7iLrx<2dCD1kN>$^7@LVKz_X_qN3>OVh8fqq|5!Ibh&@)miqy>-0g0;A9l;#<(B&~ zx7^)sxu0^&y~i#03vRjhy5)Y&EqB5#_gkRwBg$?^J3f?h?n{;bJyZVo-17IO%Kzb! z4kFpfL$C{eao%UjVIj4ZEeeE`}F00^HQKM5A)*K#pSWa z6P{AJ{u{u2-*M zC-b-J73^egP_JMo^M3UTb~0PkE7-|=K)r&N%y#t(S~4G2ub?HfA1#^vXvyqHOJ+Y> zG6$d~GmRGY8MI{XC0+0)XvusHzhGnaVOoaeCo?tqjz)%@`G<)QO&3f*cnWMff6PX^ zX8GipjRL3gl9*kBGbLtE!STmzsHpNl%nsl{)dz7PwL>^HF}nt5W(^hveF?+7AR1F^V2dtuSl2#nnRW!Ga%6K5F%eUwv8sL0CUIQ_{BeC=EjKLYXveeX*GwM_-uhZ(8WRKARjRL8H}VAJ-p5;FQ|e(^B? z=>Xzm4AKR}H=995Cy*7rj@Tc|sz?H<$c%0`G6UR=%oukg2m2$3i2RY1fb}<(04Rt_ z9!2RyCZrQ#E^!l?+@DB^Z1A%0D31kB80!S?$QDmN9q#}Z$vBi;^e~AlNrqiS5GD|CN9}w z)$8_3HBaeH5TlifUnUneKki)+*#OD@HDy8Buuw5JC_8O-vuy9qmL0cDl)^qO8O$|> zU&_YvH284==b3)~7ibdx=dOg!G*lJsz!u`084Yj14g4e{@M+yU>Qw<()u?a-2MYM> zKoRXTEF0WK#5khQ&oWXj%Ls~0N0%4Ce=Lrb)Aatyv2vCXe@U#IWyC)vR!&Fr`(x$w zGJhaeP8ahBW92L(e)vu-BmSCLIUU(QGgeM7_SeSB>B9cmv2vCXe_gD+4rgu*@(--(gq_q(d*{Y1> zBQV$Bja{ExcD;9Tp723p*R%7^;0QTux8a3wNPBv~c|?YH`u@AM(F(>F)4Lg=%i$t~ zhJ0KVP0(JlH!lvAO$u{rZ}_%V&Vc4}x$!QS-n3XS+T-gPaal4c{c1(e1`Y*!KD-o$ z)`}icV9~P=Kj$MN{^QADUC-y45@@n%jum?W;v|f-&p09{0MNrsh$GiLaeT(fH%@_Z z4VopIJ1XM=HCjMHwMF5`3?XOD6A8Yf|#ea7iCjtCt{{fr~G zUU?JQ=}tR4BO}8zuhaH=GCJ+tBzJd$owko=mmqS|7mV9B-XgqEF>v%(6r1=Z#_<~` zXq+13h@2TA=NqTqI7^KaF;0_lnvJv8IO~kF-Z&eK(_)-<<8&FP+c01ee?K!I;JiT0&rH_QX^-=W1_!&q zIEBV3GR_3!z_XShlZ{g%&cHcS^asr_GRd_l4r0Q57NxX_*36RyZS{K*w|Z5~ZgCH> zi>rq%$-FneDJR8fTAr1kICH{#Nr>Zye6CI=_P@mnQPlUYHTw{^?9Tbs??q=%?Ku;F zC)Yo>C3f@qU28%oPq+2wuIoGI&dcha7n?CSgO30t($(ghK-y_L5_ zAEIEbSrmwS)MP%1NlavMMDXVLV033PnCuLcOetwVgU5aLb z@w<@cO15*b^)@W=F?O<}D!RpMuQ>dFF<2IE=Q7B)!0|Rh0T_};5+O1r%hPbMD!Db3 zwI?WI#qVS^tWK$wszL&K8466ef88Xdi;o;dHJd6j0EnzqQ$=Q=>5Is138v#Ccg=#6 z8bhz9AYiP4Y8AG2P`Gx5H4X|_ zr?C1#;kpzydr-Lf3JVSj7g5+`19S0Gudsqa;hGedJ1AVU!usYa4&3^#Q`l<;=Hg|o z!nzI2t#7x&9x$+T3=Z}vZ2h2cdlh!~pl}I=MGS1TiMvl>3kHSjQ&_Em4Kv|9EKbS1 zz@Ttmg%uA<&!@0)2IkfyUt!)s=@lsKy*Y{l7k@Jx%HT@Fu#Gh<*QfN1Os#1W2wUO z4a~(~L}A$mR%zlL=nz)m-? z4GLRhVAmR0i^7%~*x3fwuCTcV_H6^}Qdo_F*#_3Fuqg)CU|@R`R%BpR2DVpWV-0Mj zfh82?F|dmbY@fp3`nuvEZeV>1+hbr~H!u(M0rQ`Mec!;m3fo{{-!d?t!hU36zcjFX zg*6%2jRsbru&{wWXkbMOt23~effXw(WMGdQSc$?)4D22Q^DC^-!2V)jL52AY>^BBh zqp%O_w7!2cuv&#B46N0_<}2)}LE-8Z)^1=OCfrhm{dQ2eh{DzmO0P*_jf289E3AG{ zxU~wKZD4PkJk}{JXkc!>>lHTHz}`3EHYluMP`DO_$%OMMtk}TzoAmM(HqOAlWWp6F%xhqWO}HY3y?3?Zz)i1MVS5eC4OgPD z#|$jbq~}*yi-EcM1{HSSpl~$`Yc{YRlW(oUmKm5^zB+}?AC%sFh0QduGfckq3iBIS zhJh_r*aQPR$G{>A%QvuL2G*poYy&&bz?v1d?<&Q?XaifTuon!h+Q8N+tjoYoF|hRt zyC0Y<&Md<8s$D1+-N3hb(Oag>>#Qt*K=WWgW0R0>qT4+_tDyDOMrmI!aZwUi&{UDN zSy=q@N^hC6h>)Ec5>2hM3f%au)s94XX0}9_k>yktoZF2m3pAZK&43X=if1E;nata$ z0VKto$fiPwxKxHo&G3im&qJhi*9zZ(xIGbxdov$NSOmWWI7t({)&Sek1OpMjBUa%{ zoWRxBNlw%x$M7n(R*)xG$XE1Le0XIF z7v9J%H+ULA!wyA*L6}G#Q~z|JVWdB<^#)D96)3NTt>4zy|1hr;T2JLvIhl8_d7a!k zMqk(P8rk$CNxET(AbjCX$-HX-wyseWPm$oy@(cVEDnHPUZimbE!u*4e^nl7&b3-q> zNr-h+$)Zs(OXe`oxwLmjQ$==fp6+(GRb&XYKLV;EG2~#DCvr=6=AuELRKG*-`+V9I zBfckm26umDNXkw~G{P0M%>}QmWBHowj^0|}v3}a#R3R+A+AFWx8rk$sErDq%37O2B zbp=;Ljtsc1!tZh8Am4kcwOR~yBT$QG&KK|BCzfj>jUl4&!?t*bTYYX}HOZd&YVz;4Xt3fV1?R@0cX(C56ueo@d<&kHS>x#dG z=Te?4cvkQ%rvbi$E06f)Nx>zIz*FxMe=W~CoGU`$Xh#P7u`&Ija;B7%i#&T>Z?3Ikl;9Dz_NpSA-%_AyJ^RnV@Tm?#=_4|72l4;O=G$5^|fRJ@^7Dv zV>rl;%dR~_c-rOvdqsr00Qvp+P0fk%Qo?x7dxr&qQ|k|I%?OWdW2{QC6BnR}P&Gp! zduZ6wgWIP-F5}wG#Gi{Q2TrJ}VuY6_8_PRqxCt2GYlCxY1ljx1>VW*(@U`&x5?uJJh%)2(apk+5XI<1+`QVA0200N)bf4QsF31bYRW?kg4dYFvWZbm=ta^?}mgd8& zDliHh;_LeuLI`*X{{wE-9%0R&zO)OmWzmz>!cR~%X4S0ar?!cobs}+ryI!O;a5so# z2X2cvu&+eP z0atb8%%`j?e7fZ;wtP#GZ{pyDpJ1^XrR=vo>L+isSoa>Q=R`GnX5^Q(1Z`r7Hj=EU zATw#sM1jQVsBZ{4?UF#f=0g0+2tU=$iN8E?fZ`2t%P(qSO2jZqfe07Y$uX454;F|D zZB2u3e#yOFzST%Nn#`Rfqf%6Ujfj`82;lqh&E=e2n+ZQh6&#`l3K6YBPgtfz8C9 zuic-N=ol*>V^wrV~erfDVX@#IPV>ON7^J^o~6272cVCw`X z9ij3*eDkG^zr7w`y|iG%Z}Bay!FTHh2`8PT@_u|l=>XL&0@LPwKw#3a)$MXbSoyHE zv1&dh*9w8Oy`i|WtVs>Y430^oI2(4&9u@)!9a=9mJ7%ZNt<1AByLC+zOMxKAq-WQYN> z+E)nuxchaFektPZ5kxU-|H@~?Pm3PI?KVM1U%OtuJO^YKSzPs7c@y8P4cbxZzcUN# zO{vh4Nx=XoJMHMUOgsAVXzTV~B-llaMy5ezXbMDw9m;c2(>3RRDo-Q2z6Y;2%=)sp z{66!j^uV4o7#xNk_|m(dMh}b_K@T(Zz}gFsqz4u&#Lxp<)GzcvA{8!85B%MP`|r~O zEZy|)&!Gp3#(V}nFupWJ4`hrt^uV{+1O3bCf!FpQjUM<)_@AW*8mk7=1NZTM1U>K@ z1^pkO2Z|7&O|9bEe^g7ANU_(kI?J?Kfc~4rE_#9!U8^m^O|#h41rPv(t-sR$Qu;H^ z`acT+wAA|FW!8TmQ)rWC5{QWrdMC>){+DBDW!C!iTF;W)&hsiu^6R+Ie{$Ui%A$O< zwVy8>aewB@Z`IC)$UExNZ`IB&gz8DH{Z{SFLLq(r*~S0wEdHoYh<&?TX4N{mbf%g% zAyB#Dh=0EPEaff2)6BCLT~2J3hICf4$5gU4?7DU0rgl8+8WI^-(qAp#wcWDm!87YA zgD|{Tk%ZWr3Mh52L_0W!y0!o=E1b)(UN_1DGuU#tT&SrJc@9w3KHN7o?tFX?13AoF zbrUZHtKFxcp!M|At#<=TCGW+ts^Y-m#@x3lT z2MPa(cwXeEwo4N;BwVFc`?A2gxr{PoRq#ux#nl|;X}$DhPHa_X}L4T^(Ht8u^a1vT-PI% zhh2-F*iL)C@NfWLn~irBO)LM5=bWmL0AC>h z=#NwL#Z!-`fbg&7NdA{`+igivD7K`Shn?3{fApKd{n6>cjL7s*7QvUsrq)E4mt-#* zX~!>xnK8XMvDaM`21Zke%kn<~ z3^_2kQU>aGCcdk?A-x^X1$$M5u|O0GyZS3_t|q4G8^h08pBN9us8?Y^>9<5k zhIu-|7{C!nfKGbgJ6riuK7_ z<7fxmK^R+~RA~^srJE+0(anL5Q_&J~A_d$;gE`iai@(VD!(QF!*~#un$o@mE!Ku;Jkg4tB*4CmS2 z)6esG`=MT-#{oU&ybOWT$t7$qSBfh^>;<1zu;J(+%w|cIqKTW#`+z)y&PB{T+eI5M zQy!Kb(Do^Mf)NsCT`sUiq0~i8L)%3~FwE?~BzmwBHF3JfxLwmEdp)T^F%jJ(Z z)4*J%?JVHy!dHpNUDJ(E1Xpx;nFFgu1qf=HNo2Mt>{%dtEsPw>mP+r&pk>^f=Fdt) zGSI}vBIv{p#Q9Rz3T@UAZu$R1VbiqyU_te`Ur8!l3QynWmHk_JQ1lhLDka+Q;V*h4u)_ zYf!FKmk6sRo_GJbsce2ls;yyd#@??9YTT%IN^YzX1*-EiG5xtLzEMy~iRH&!&eoAY z?GyukcB^7|><@6NWvk2ebdgRUNuU)E3jkfhs%J`WnZapIitJ*G`cLY9U-0liVLPv) z^Q~Fk-xg9X*w1f6_9c0Sh6oY?ghEv-vFv3I?BcUB`0xhF9qO!nN0#u;O0jYyK@KJJ zBARaH8)(i8#?O1RbgU=PROHTo$&NtDgwh7CJkJ^ta;izIJXzMYq`cC3&URi5jDI%# z)j{&?=s>eKd@-Jze?dw1u!dX|I3aCWf=Z%>UZ+cv3J*_iwacDg_;hqfGWw6Co`l*D zNMUT}{eV@ux7zt=<-vw;24b_`4V2A#XYrY6@k6q+`VdReb<(?Br68iuMdk(8cJfD!%uN#e0O}QvAt9*Ci-+B&_X@CQ&_$(AB z)Ag#8i3hKe2JOSV`WwNr&hTt!dTy-x-LmR;7XMplKr!Iv9<3ZswH6`dSd@Z6eA2w; z&&Z!5okpgoQLp19y={ndGNWdL$)>0cWJ#h z>||H`!taXe$#`DtS2+QH3RRDEnsLc(RakJa%ideW@?yGR&x`DG{*=*sewA}+F)Yyd zxRo>{gfkV%dh+v@cd0@kHX&=`^G7x)?}$0%Tz5d&c(a&Asx3OyA!%zdh#4UdYa<7F zKT>NeAuJcjz!SB1G7#mczg=B-y!H?06z@yi^igVoUQJ04{(eG8Ry$cWnM5ux3ZlwW zT86QA)RsXj$CD|-MOGuUAAQb3iGAU7O@o-#E8QR`S0TIHj4F!q$dsW7FNd6++B~`> zn3l1=Ld%?sGD>KNN{JrK@v+uOmQcniiYnjuMPo?1Y@HAs9uy%DpehXcB2)%*Uw`!n zB1`ZEy@A%YN~c?8RuT(d*4&HGZs21;%?h>n@Co~pz8^0`fztJ!=Akr(? z{#2Ck_z4z_&Z*fSomP_(nKmTaB&OKs``nG1J3wXrWWQD*`?ZszHx(n86}@S) zCp?vSwtqY9?%#6QzlASys_5Eb6uJq2r@0xF z^^S3-7XxFDqp+oJ56l#W)6-e%woAi}4#ubY#MZXVKxS{G+oI`=^&_@L@4MTgA?~(l zdOq8td%tbAMcY!_qUrgcwk@jB&TYE+5!<3P7L5FgAWrs2i1>((tmahFS(=l(qql%h zzUV|C6?MresTLANl={=ROR`_mAfL8hO3BYiw$HZ8iZQRWNwh34{BqD~YSP?5b8=U# zVzO>DP^>hmeZUK$>IR0A)t05#gi61p>#O_q5V#k66?C3rsqv(P7!4%<(i8MjB*8H{=j9@WZu`9Z)aDIkpt^~y?ilg078CK(1%EKIn9m!<3P!h7;r8Pxg zZ^{zG%V$8h{P8i_oTXAw7MjzvPg7wEo=Yk^?YA|iat+R56EY6(ASC$d2&wrzgw%ctLi#k~_Hg+T2q^_$BK?`F4HQ_d!3Qf4=Bqyg z7f((A7r)wZ6kNz<9>MPUVBdK>QKGp$ zo@kmi$|V8QE%caw)(o|aBFeecGD z+t{uCfssy3=j3l&Z6Z09e(5IMr1d1*gLArKmHx#2wcv@>lzWPaCeFW|S*(UEuDK)d zA1b{yXx%CJ4#mIp!QaMs`qytGu@$>@58IDKXQj#$cUHbe(ro#!O(gT4BsklWJ(IAF z@r1vrBs7QIj2wUtzKEh^clgWful(#|_fbPt*@-wZI$;^v(3q7qI=wO?xl~S0dlEBu z?qfSy5nvxl))aIr1!dEikaDmc60Rghgc^d@n#-AB$ve?HW0X;YTrUhIu~CDNacamt z^>1{u^S5VtdVWkbQ_wR7dOFa7=!F6s&?ba7ZBnBnk%kP;snlUOlTXqGFTYH>;0%W0 zzSynZLFe{;rUzP$Cz;4S!!%@bz1wLF$t78)`i(oTtj1flH934aqTgH#d|(-+-?-z$ zYW!+C(%^n`@)41w-=rh`73lUVpgi`#s*$`N_ryk%Waa=6N&e0 zbV`aoJg^U^7ehR(&t8|M3en{T~xmBw6UI^>7+W~n|NhC&6k}=S~X>Xb0Y)t z`AX+-wMdn+{-LSzc}UuMvh@iDoo^Klknh7DHrh{eWH~LXcCyjBvcoR%hEJ(-w(5Ol zE+>!mHSP}k%3%yOS6{-uR~5_%_C_EG~%Nqh2StW4)b zWU7}re-tZ7zV?Ln@Cm(^?C9OMTxU8mWV=~h1ENoJYLS0q2K&Q~S8|*{M*ewMFa=tx z#a4^e_$D3mj3HyiD?IlzE?mMLgtd+Szsw z6^y=`m9?d#FH_icyL#lvQA(MPRgj8x5noy^oi%F~@$5tI5YySxkvKU^qp2d?fzk3) z(T*FG+4wEH`benG|GVZ;ERSTe$1|HNbupXrtt^mogkCcQn}VAG5Ho4*&6WdlO_-B8oDzYy@JLF*Pe&mfhRoiycq&pDZ}n)IJFx8B#p`#6};-` z92CqQd{*Nc4fag$ZG%3i8t_K90pCeA;AQ8{BH!?Y^x(!S+kl2ojp?cK|v+QTTAtSkX(!tUja~D?# z0|sUzV&T{?BfJE=!{WnFckZ0*`nNqFNl_T#<|!f zaa9$etcwuR6^m6@v|;~pd@X!9xm%V}|I7UlJ+g*Q-tRo81_UfR2AfWfIAuMAP?ed8 zqScAqc5%o#MQj%qh2r1xNy)0P_Eh7wORwgZ<9WY-Zj8r{UG254@~d+(8^|g4oZgks z-*&m$90y(Br$yxTjYiB6N+8$OW2#SXE8ND z#_l27SrClAozbvMwdPmHZvYkN*(4?_YK>jGICt>`bKYU_b)geD)puch9A`Mwd>1-n zPgQ)OFWYCAEzVuY(HZRy!s>LMwaYHZU4;6$3s8Dk$vMVTS}C7cqbgDxlOU|bzFJQZ zU4B43Ct3iHO=Kem>R0}9Pza%c`jw6TW0c2V@2iR}V$x2@%ffN3boOFL8%7ZPiT$ec z(DquZrhtEu{)wMa_v{!?ReV}Yb!?G5?bWgCyAtCc0xK8g+h7K@!l)8v^(u*C)GNoi zG`IK5RO~!egE*S?Z4q``Y46?<&PBPsL-^_F$s|7lKTRs^Kut|K};HHmxiAvUHS^r++n(OC^o*zc_G;GSJM7M_+&|x zqvV2t$xe`Dsj>8mPn`7jY^S!BWe;1ciF|)6%I^ea6njg5VnQGZpb$U>ORGU^ zJu$wZsJtlL=lk3H+?N1qJJaX?&*zhS&e>=0efC~!?X}lld#$x?BktU08le_g*lutm zR3qF{M`IoF>?S}PHh7L^m)WBC1(2hO7%uxV?FJBcY(~%Sw`|-o#UOjj-Y4bXJPl;_ zv=ACJkV~LJ8>PJj1#ugUN}=duvN`)R3Hw)b)D=U07RD>#SW`2Qtaf@Lv0n(L2+JK! z+OdF0v)tF_5DYz@TcV*58xR0j;1Z$7Zp!owSF$lQlNDF&nkxRo9TO$1@#4biJSv%! zU$2?nF|j_616MjGF4);qen*CY2K^kdxN}t=ycozoCVj+!I;;1}h#{ ziyOWkaVF0A5=$h3LrAVN9)^cnw;4$=a7E@`S_;3$UQ7OqD`iygYF7%hoZhNEpnHTs zyA8BN=`^fyyttGRSIRXPWbPsaWivMsp_MPeKO*s!hbpEW^{MmJ}0 zkoM8df7Qp?5+r;booD81^fs!lwXGV|h??Dvo|A=jjc6!Qw0D?d3{2eqS8b~}6Q9Do z@hQ;0L{n<~to2*9pr5bQM}PtUmo%Hn*7lX>Oq)8>UTaV1?0ZI(&r0%AB8t_Yqn}&_ zuf2vv?sTh2(7u8Qo2_@)6fKR1VqIc__iy`7k2gBeP+k zBU__5(2HC_5?6i4@Sx}kJ7=1i!;|1b|8`{Sk=j?RSIoOqow8uBY`!G7kfLuqnI z*J+0<^+QcFqo{fZ*z|7Y_tN!+9=VBo^*pU}50QfiWjUxWy22cY=%2Vg5F2E^(6h#7 z)p3X`Prb`jttB%}&Z5aZ|7Kt7n8KB(9sXK_+3V!We_&+Mu#D2Z*YVEO{Evqf?Y)3^ zrrPqu-<^@HbLio99-CC&jVwk*bHji8I99UJcCm5AH;FNsRexgBK0%Mj3gZx(g}%$% zn)V4mE2>EF2RjK=Zc-P281rWh`k_DTB>vCg|7!jh^8ZWzpW}ZA|9kjP3bkSd);xKv31q#&y~iQomI$jll?|`h!mz`*m{8?(Ng1obX6?*wiR%X4Wf^(jwPwUhN6ZDa=PbY6>JGL&XAv`%s+R8_Xk8;E_9FTvT<`<)3v zo`>jpN9Fc8`w^DzsB*3hN+PFoH2GXf8x`~~%n2e1XuV4k)CojCmmFDT#!YMj>Ee}u z8e2_(^w6=KQmsLsk>2xvew(o>;C#g7LcTVn!^B(+w)Vr%I5b74w*O#OZw|jR*mK3u zB0l)n)Y$W2KY%+KwOaLpwL`J{~KRcXwfJBMS}n&C9R@8Sh2i` ze)$*vO1~#MP?L|?PJ9}3LyA|`4|qD8o$B5a!;wHgdAyfT z_u~a9;;2q;R{n^OB#Q1oj+so%>sYe3-?NZkBLf&@4uARqGOgS>n9*o>R-)({^0!-| zp?8?Q$kOp+)C4z36dg}Z_WtRtWS&IP0Mj1L z`3b0gBl}Unr9Oh#Y~0V`+@x*iKH$`_(tSDT|-q#PX*|vlh z{#lk+%__>4@!-f%kJ8=sPodhyoHQ8$KFLY!wQ8y%c?ewDDgy6O(;ozEV`m^` zeX!!U%n8uywrpmj1O5C9H*#ahVUrN(5{SaTaGz>Mgq^kW+D4)N>7mGvQ)hc%d7i2n zf-H^3PY+f+We$QpDt>XccM@!f%s7=Wkq9$5=4(oGUiJz<%v+71Z<)`gD)2A-5#LOm zCYw#J9vzfMXU93?!ywX`6hYxNuis{u6&{zK#OlhI8{UCht}@~(yP?y~U=C6|VDz3VX^etx?+`Xe5qV9(cM_Es~)DYwNjpq6d5)>S|KDrANTVjfJA6U~dx z7v0*SQtXXj%}CfU>Ac@DTbO&8E|`mweJ;mpg~`Z(r)Z;JBTD-as2Vbthe>;}q&^`f zyYTgDr-g}NRIjvhe;D&_jT+O13?g*_%l*6>Ozq=?|M@pm9b3A@B;Ie{Ih#7}d4gw1 zC(FI{16m%>4Hnu(W_-CQB15b2OTSrb;=UGJD#GG`HpdsnL(N`fQK=Hqy@MK#_0GOt zyqB6Kux)a0{7}&u=HG_FKr^d{T^W;TUKu} z1=dzwm))GR4orF4L~D_`?aOIX;7#t);>4&UyhZ2SqXbga4o(O7X@Ew8UQ^T3N22II z$n|u;vXnG(8VyJkJ*-sUp{Y%z1{9Pgh>pXcF)d_>h9?>tb|zXXHX=cP(};=FDKQ&E zp>ETSE%nDe-OVz=o4Amp;^)u6G(qB7V+FlaoTj0NXGs`{-U@6*DsbiwtDQ>ftCBK6 zidIF}DS9>jc`N1o?^Xa_P~P;EDB~WHgwK zvQ4TN`yd@k<7oq~A1u0AILIV9lZjrvrGE60m@?B@(l-pgy$goi;=a6){lZ)K(#olO zjTc%AM9`T*1SK93q`cTrn^H8{;GWR?Mmr~6-8*HD(J1kKc3%PzL}N=vO~t92sxV5F z`;u_OIK-Ozu?RVmm8 zENmmRhOrRjSaHTqmHXZzG~&4I-IZl)Y+y&=uIXOw16Hb(suo%;wO43iR|R&GO0+aR z8hunZ zBI@0h0hh1`7Z#XaX6VkD_z~>uBfwf%IdNA?dG^dedJ(@clelNS;}N$vz6(9WMV7Iz zFwFc5_Zlqs(=oy@+^R(FjK*gS*-D!BFT97>9ygMuqa)hD;6mJWvG|XSFN&Tn0r*B4 zu|i9|`1yG2$#xO^VYry8KzWaQI_r?URbppTGOC+!fTigBR+?>;5G&AOk_yvq?yQTK}fo32ly0n^YDyLZ@`vG2J?x?wm#Ce*s=Fh>8 z=fA$Ui&N|t_WSH#{8^j}{~{N22)p@4nbZ@T&|USO$IY*Fb0#;Z((K+*+`On1w$BFN zs+6yAbG~j+fDT@#8^-wHC%7@I3-{%J^?7=Z_~7-Vx@$?G=Ws3JDbD1}xAFfl|M&5~ zi2u3#U&sId;eQGLPxGIZ-EW{TC%6BAf&V}K;gHFGC?_yDe~37n%_3o?&?Oo+lMzB< ziGLYNp(@twQ`!nBA7>3wRD{!(}FWuz?kzFH2$~tR3nCv4Zh85443jW1VvisyU^0 zBQ_8N>U|_oVM7k*R!xfdUJgflvl|{3H-e(X-O);Elh<@2#2hW3&k_VP(=qy^!*nJ7 zV9|iV0>Y@Z^u+^38=#L7ymES#fFZjc@6pY6TnAi>FW&C z+HQMXuTnr`WApNe@1=0`J;e5FjktbpsYG@*ed&n62xlj%o>A@zLV4oxf@k!d;v{Xz z;55zOfF;>A8wi%&21YC${L2ud7w+f-%AqMx{>}qsnLx>&iLn5<3iv&1;m3yqs{}v` zO2LK?j@BMuT`<3; zF1m9#SKj2WshbeXIlns5T2r~}3Wv9GUS@#1UK!mC!0d!@vcWMAy_? z?FSTRNO-Kb(}PDopOf$n_e7pcN3IRz&N$&6YG}BU;Z+m#A)SmwP{)_ApGs}vW zM5SfbtDgLK`xkI}RL&P3r2|IpxPeKEZQl0qp4XANaOhrNy}5_}c>A?LroK!-!3iN4 z_(ILh4;`05v{>#nXUPlZMl>tXKn+ng88#{ZBU+8TR+Uo|ugZ3Y-XE*|%(UF? zJx_%|-d2uRF@?-}KZ{P1H3uJ>_>}CXby;+&b!T3Fr}+uQ!nXJ;5#OJxeXrW_a&x-d zrj1FKW9%agzme(BR0#n@X>dL{Z~y~5Y$H-+&yEDQmRn%YPBy>&9H8OiK_xgv{rN) z7LFvSm3_ywGl?M6UYWd1y_og_AKI%u4!dn3eAHT+)xJATny#-OiDsXndq&BD4(YK{ zbyke9y!!V^x;1!A^=fv+m!M0Fz0SObKD9n9dY)|Qc`fv8I=CUc`R&N4ws2x~a(oB# z`WfmB=4C^lAUr3pIna+Y(0t~kqCfSrLS?apnr(yoC-i0>WL~TG?J$Yga`VQpOmBLkl$^yV;pCa1d3!RKAV=XbskpBS9b>@$sK&4WV*Qcp@Z{ck{O z#96m!%N^gUhWzoFk^lE{)YDbIy4JS`;D_F?@%6pUwFgP9K3In}OykbI&EW&Uu=-%j zPG7Ugox|VOrx{whJ`QI8y!t-vTi<8t`VJhqz8?ggE#7?SUygq~18}oi*YtYUZ73pI zPZpzZechMe#eLRn-S^Wy)17aNNo+J3OybE|P#b;Ov)#9)b?@-#&H*QbuS9-V{^o!g z{~TZSNU}#YPG>yl=&-XnGP4E0vz}+qKB~`(G9-1vdg%W?#rclzFZAE_pWG02AUv}x z9M74I=u#W0Y?(hWQu&HMDg`#@Xr7Gl)_D7XL}#>fSE8lPf79_FRTuGMGq^K6)cL>PZP-<17z_q1vWD!dPfU0ouq3g$i>| zqIrt$&-35)6>d_PdjQN$ju1P-Voqo4DunTDNwFhgv&3A)--_QzsUjh>rNr+Qr6v3_ z_47Nr^kl?X56ycGn$J6ag3#Pm7xdpWcxOm>*6s20K>3RPv`bH?=J5pPcddYCmGb?T z6@}hi*9zPgOj@@c51{!(=phe`-XZE)Qy1`WY5CAUyM@@Tvpct&B>$H7I{)mR?Isyo zAbc6GcKh$xM)E6Oo*jQs9gs?Iuj*K>pFd|-WODBK14(Nr(%b9RPqGTWM7^d4T48E< zc_eN7ZjuDQuw80W`b+;0+Ldh5wRs#c$~MUs|GjPO;t;ZWbSXauUu6b&Wd@IB2B&4< zSMjU~Kn>nQm0kXLBhZ(sUaRrYsMXTIE9n`r6a<&&#Et^bh#Pt1#~C6%C3nPlbq?}n zf0^I<5HX3jk1URGsf5D15p4+VM%Em$jmzq~P%L1F*YBke*GHrX*LMlLA`-S^1}bLA za4tju{=LPHH+`|C2ao=$946OR4V9Lje*R^fHR$RBt=;|g1#;*N^z7;Bv83_D$1!;f&_m>^Al+UT=A`wi9RIRfjay&q>v{S5?g4Ytw4R11ESE(- z+|s7{siM|aVcQR%NVebCxQ_9Z>;lZgRArj|gH?LIwZKWXFVAb9*ix!_pB<@r zTdBp)XJ;`#!qRF+buv{&va?}k+!Sz?bR5Y}G-Jcd^-}W`W{#kSFVUz6(DOd@g2z5mF%wUdj z_?}^o3JjNGj+)jUNHa$Xgkp~DQ5)tcCKxnKu;6eec>IDY%LHL{$8&3WU~a$h@IV-_ z;emtKj59p2+wwp$LzFk-iiBUhV+a;3b^h;m1v!w>f75#YSHnU!@Xvhs;q&~%*m^rn zt`9fD$aavgcRe?~>ooNZq>jm~P+OTszx#z%P}LF2S2K0CYU=dgs}nllAO&J0^f-N# z3hd(ci(nCO1k+0-P%)dRx=R$!4F^u5F!sgB%7?g35IE)sZ(PH zc7UwKY`Y41Gn_`5*4Jqn1Lk97WJhSvLIppLU0x3Bp@GXNI z|4nCY14~JHWc%mJBa%gsLvCUM*er=7C6566mj(7dGKnX(WahNF(sIc!{bgsCN;VmX zY!a|MwvU7&e$!Vz+59%k_RU5<$={kGqijzuyFrH*D=shqn*N14yoH<&eCWtNmrjH+fabrDW0}KFYbt}2-f9&)dEN=+q~7T{rSC6K1PYwhqXKzY z^k;W_8LKjsoH;Hqn@3tY{km$b;(4YtD8BjHNVT3w;zjjr6~y-7rQktHh!o~g6!GnTI8lR$kBZRF?XKXiaz)k z5ezTyz3blJdU{|Zgte_Grt@tpO3ZJS`EArMh6C4=Q~y8Uf4+CG>+RmNu2KF4hvc7u zM_P?xEMIj*tn&w_N4unhvB<+1PZo5$2wAX4-UIBM`dF+gZ7;icuk6G;cV>HJ=BAYr z7%N}EUN4*z-Iu7(sod01;MC?t_b2MhIR|`nbl<^-+?vYPdU6zpqb<0sH*5kFc8BH$ zDXXMwGTSp@r>d~`O|N~}H)}Ot?8Pp>p>#8X^b)=nc5a6lcd>#d-YTtjM;UF0v6NZ( zJJ=Dv*z@tpUTQJO&a~x$Q5!~0TZ-+$GXdY$;Hc1VTlWnQ`Pzf5Rz_?H?Aa0=G3~iv{${79Eih^$ zq1ZO@KIp6qjMy01vpG1TrY)Gi&Z+5eT7$8gt)uWb96qAc*|q285g+D%;M8nzT4N2{ z0;5`Nde@#Uff1|*W7Bp7D_{1<-=&|y%Ju&EpScN)`Y9jYTn&bRSYhDZcy4ZdQ$7=Sli{K#~^Nr8|Q`!;$HLCMcQ77bB~q}Wnr~0h?xYcS=a;TZ#|$ryg)g(Pw!GZ*XoLnKow*`Dkh2K zvAz$t^Ag_&6OgL<1KrcXR1~V4Qg7wzG>I56WEfu@n_AXBess25VaP1gizqp|GWd;+ zZ`dtPQC5ZO%$=E)0@YSrn|w4NNH{Ta7?BO2k-ii zeD|BC-E5QH3W+2)&)WndcLc8pkieGtHb`LnFt*+b-Ge8qe{C6gQ}`pUi<{7dGpU#b zihpTmIC^U#!MaLflS&(g_?J!^W?+5qvDCmZeBu#O3<8p$nq~*OKqne$Tg4aTN6FE)LgE*{FwV^U#Yd=L7TRqqhU+)kc&@g7 zlfO`f@-;p8r!iRxO$jTsFwD$v;T>|e8?ArkjE{fpiqDdb;zS!uk$C^#a%S89Bh6*giUMm(Q@GbG^TySHsT!1@Z!rqC0>Zy|j@ zg@Tu}ObMXPU%C}vf@T=VLJBU+r+RyVh9 z#OjQVk=}Cy4w-?t$qXd5jgrjVpUf=POhKQPysbTjdNzQm8_^kXrj+vBT8(d8yx^-| z%Q!JU$7@LjtaWR~W6+t*rjqsuLY1ri(Xj@A)d27`0Z>7B{R@`~fFR^1{gjJJ3Io=y zQ#(NnmOOp~grHrzIppga=M*d^JrHAV)hi`Sk3BvbFPz`^L0Z$23NgY~xWwkkhKH&$= zdXSx0rxQar;%v0Qy-Ldz6t^UfKjW(ix)4m?^+*^a?Q&HXAzK+mBe(+0Hf4-};y#g4 zO6yIz3d{~Vg=1QRvdj)3u4EQn;QtAqHDAneZ^$TX=s~!?g0_d9HNjX_@l-7AJkccN z>@qPcWiahucq)0!zELSRG9~M#h3t}sW3zB3T+r$E`$Q&Y&z5Rw;JB^t`a)Pv`h(5^ zXyITGMUP&{Jo6E*$#Ay8vE$1cZVir|TinnP96M=P!%e};TT2@diKoJmH&JvG5gy&U zOODFwaUjmHGZ!QG4#@nyQN(>^pf`wkosZe23p(9(i}9W|TM^j*Ql>gy@XZ=$4F+&I zryi9BH)ppd?Av90dtd4~N7O#P7-2UO`*mqE&B7?u=qCM_uqb5(UK^4m96@|`#t#dU zsgq2*tNo|6^BNr&uh;1{!?2Yz0j^96&MjkF^w?=yXhTG-6AH``aI^iFe1d~R{mtQ- zontp2^Hp#xOB;wn|oKjNl+ZgsSFfBiPLvgN8ibAKs9Rt9>hAXi@Nm$GqGnsdBR1Zd8(?A4+wV!g*!qFv&7+XW z&U)=smE#zSnJ&iNI85Vm?8keuV*c3y=YnAY=aQVt&2vtfUnb#-30(teI;c+CTuQU2 zjiz$O6VB7P!x&ct@w-}y-ZQG5ZzAzq4+l(Bj}AE(=HP1+lGSRLXN-ypGhu9XQ+^EE zqMD&GUfZYg6ju$>jN+-@u|z4Eo<4CHk(p#HZwJCL&p)iRZt!_ylDx>d)%o2s19MR$~`L;Qz77L29)|d?z>fY<6LD-ih zNE9tlXGBAK3-=n3uDL$z4NPl2>>v5N(niw9d;+zyX1axAPTa&SJ`nVe-kXkJ1yucI z?e3er@pyuK8mfRwdC1vBl0I1NJWoP0fT?Pb?Qe;@i2)d48=)D34mxXv%#DdlsuJyn zkSljL{6bAln6uONRl4>(SAUspndnSNmwHz$MSjcbi6sarl4cv)ongqeHbsu+lnezj zS2%PtAF?!KPuVOTVc#}Rui*1zYEvwb+4?EOF~YwnM=awXdY1A=R9NnLQEqaBe~|$w zhJrZ1l#NNK_;xa(pA43s5%e$Dppt%9VcVIV3;aP2rRo>$@Zk>DEBeY@Iy!@hiPqZM zn}@K_^oB&Tlg$L!QqZ|%SYkcv!9Zd?IzmRVuXWV=0Mm59w?Ru+--Zyf(Vni*h}EI| z&I$3H6M`dJ_iP@q-gw*~FKOXcTM>jCE=W)v_QXz}z*p>Z1F@r!c>yqzZcX$zg#yr0)?5F?b0=vPBU|Xq z_!M{N+Vzr=rVWi4`Zz>igTS^c9RI-zXMZ?;0psA}GWlx6Pwje0p3mQ}AhiUC&Jx}b z`kYs>@0YM{YQ0OV#tGr7PdapF?hGI+-=3q*H?^3PC?ItVMh6vYxQ$)#&a7}8=2KnS zQvY>M?ZE=9FkGm^9ZR^YD$$XpO#&JxhUs$uCZ0!{Dxx>x#qHJm%Z$@ z7XjJmKkm-sP6GMeg$6oz7u!pTy_DHYxxE+_N$hTEUMQddp&fTe_+@|kTOD`nt-UKv z-KkQgxr5%u!DH18Jcc{&p3Oz!QozX*y2MsB+sk5md4!8w(WFx^?wf_69a}Yn-@4eU ztGHA(ud3tX7TfnFEEU}X?pN0GC0=ePfy?Vk@60|5Pd^3AJHLLQ+Ps9CgYj{kAyia$ zw}vXqio8H#GBVVCdPn-~2amz|6guQB9#*{hnRz4mq|!ZUhav#Bkgu71(sx~wQT8fR zmU>cUlePZ)=e~Jr5#J*See!F`5>I?i`VytDNPk0zZ`Gbyl=U=x4YhUQ;Oj@Q`C>Bg zbbN>>7(zR~DOvoKlZ6q@F=7nq68FK=kxiePDIgzQ+dW`_k&1e;CAS-B(LlaN2* zDgt^|!7v%H#0lN_)~IO`YBh*>r?A z5xu#FfqYmC&d{4by>Wy$#d@=Q)t z0D@%!p#RXziXR^NCH!eIaV)A??3X(VR|{S z>Buh=Z|;)kZ2Tb&ea5um9hOn>WLe1FVjA<()_bBF3mp+o8MXHx0zqJ_ICIdMi%s& zK|w(LjIcpTwYQo7t*9+aP4`@bk=&1O(O|hpGosZfmvASIa`3=lu9z35w6iHu^N8|9 zD$zb>m8 zuzyw74eod#h!c6hIfypos(GBU)5wSD`}pbF-Wb~XB`wo2WLM4UGUb0OI-kdpK2<8e zK;;V#JBW+|&nVxVKf=r1HJ9pJ8{A*R7FPj#hRHKH)@M2IMdIgm+^^tpjii!iVt1GT zTi}L3G{6(<+(US%&q!l{F$}^W#la*Z?VaHrt-d{ya>WnAq(Z$c=F^vOd z5{xpldzp>`DoP(6My<$>h0Lp&aiXo$BOFE;NCXR!EiWo%6%{COXYOS1NBbVW!U$FQ zlTzgqOo!1{z?v*|>Y=47Cto!eJ#JvS0_Em(X%C>!fUkT&G;6XfI8v6w))!6hbW{}I1Cl_-t8G`FeEO+<5bWE1} z;Pu3U*M?l!>S3MXY_WU8?!k0h>KOsv>NQOg{zaQj>$8n|Em7FBn#VCaL8Wp%QwO3=agHPJ38MDh>kA%y?2pRZ(;ZU}f5>Sn%i5{3q)L_xfn#_Td%+$#|TH#Ud zrNyw}L+8=)1@2cnK7t<%>(@}|Of3*U$P2SA9hxh4FpL2vvd@@iRU7`#P46^y=%}1s zgFf|&Ni3iqyAVDU-C99Zan?|RfWdvQrc+pPJ( zIoE7#PFLfmi@d_3Em2$*4SDe{(FVJjdR?U^O}9hkQBT?5fkMBL)@O_rkw}%b0K26i zyGB#|zWU2*AcSd<2;7kf;DT3q66<1y^`k6Pa;G3|!FoL+=IRkKNAcNl9S{p-TPd{? zVJQZ8?%M!wye8f1Ol$D)HS`Ie{vZ(D=bKlYjN1Io&2Y+rbw2b^J@P^iL>Clf*MGP& z%)OhtYcKyJWT5R-6LMm$#W`BYg?$Nueq1tO>`aBNWaqo~Ety_^e+r7`5>8kDR?d;B5Dg zTmZfAXYa3S1^DM0ej+(Lgq~!@*LVFBiOqh8|Bv|pjDLVrRaz|{vA>|wIzNY>DS7<# zd$sh`(a_$hyKE%j-!gWUfC7!U&i~65B-;}=O6nP zo=NMh^Ix`CiAumOwQyoVBwlk3Hy0M7cX?QCf5ya?(7T~#8c|vskGanbmRakNn&*Oe zQ>aLB5V4@5E*82To-dOM`3EUGtt^}fh=$a>rhIHv;qa;*D+Y+(zd=8T)clg$+aK3$ z=t+|xklnt)By3XQw@fNtJVS1O-=yx2#2S7Z`}Wq3&<>dOw>WAy+!6Xzw;iEtL}ZD@ zVW?6vqUZxLzYO`1y@s;6yZE`aJLE4L-^I_Q7MTiO`5jpbn(=10(sW*u<@4g}@z4{R z$JPft!~Wq~7eVu}@ZOlHrod3mF5tEVzdQGLr|1M^A19;ynp0$v0j6o$pIEG+Xw%nt z>AyZC{Ua}Z%^~T3^wK{%Bz=XKzT}W}*Gp#<^!YC5jF|Sghomp@(qVOd@+Z>|ZD;bk zhqg2M-9y`%{B9;39;_}YtMTL*e1kP07K4*j+9|V9veSw?EC`%-Lg30^ziD~Tu(5Y(a_hX(TqIn?3l)474J#S!^)dfRq8}L$e=W!CyvaMXbsqYX_6YJgRly?EBseOe0zi&f_j*!_5`c^#J*vIc3!hQVP|$k|U%&y*{=Sv!JDL&Bn17Lfu4vZp zV(}w10+R7;=RXXNFtx$cs+}Yu zr;Hi$viGN*x&ZAbkt28I)}oXq=rT)l<)zFIa_#_bjWg(@A1MLy%t1 z9O!w2ABrISZEim%txxJ`(sEUQR%A=-OPX3WHjS=v;#4piRmMbTrZ7f*l@BO+?osU6 zU*B>=*k=w8$j~AheU)TAgJm#HATInkXl`33#}uMbfV`z`y91YG*#d8NWeAKnIV)7mfmb`5Wi=e#IlT341y`|NruyC~j!7i47+vd%8qDz5Y`5RBIkj z08e!{QG0~;UsQUo`hdw$(@w}P%fA$VvHFpz_Bg(im0a1{kWX_IizU=*nv!FDKD(2k z5nQx?4fq-VeLrt0&7(I_R*k_Y3t=h7;QS~#jH09jtXk_r5Zj}(Ig+?7O@7DVHWl*x zU>iNYc{-XaGwu!kMJOItX^zm!$rH8N4YQIOvHDrb%F3NdIh$Q@;mh|gFSq~*fC`y% zWmsvozTq>5T5t3-7Rb8y?T}HkthY#P1l#%B39mrv&H?$a^q!OaPQx)t#0*$NGq-ST zWiM>O(x^TS(9O4|dE;h8ve8EaTQb=Kun$!e zxUwgoZrB3y3okL4{B>!bx&E#cshKZ7Te?>ti9KcnXBq2CJsBaro2yI}#oYZPpY<5j z$c2Vu(Y$+0m+*!gtB>I3Dwze2yurjDU?+ro0Ok#Se6tl;|Vj_~Ol>5@y?E8mk(9gBhb($XXgfNhY0y#7T$0;}K=uFXKV z&RzGBl!R0{JXYuMggaWnTf%XT6-Mj3{hUAfm%bX_^G4WTg~?i{Tl43^SaIb13!S2A zEa}mqbi3E=9*pkC%&H|!S_?mAsbglQUu9tsu_{64q(0qwjc8H#=@{H#e0sJfvR!o{ z|M%O1@mUGYVZnF}#*0L;kVG*$=&wdhZjl^Prfk@9UoIp7bGe-GDp7Qzx>bs8cdmA(A4;5JZBJ{ zdPJF*2N(8(%e6leTC_vK9H@mF+Nk03PpCxMcc*ING$C6H6@(v27Y@efWoHcmHiY8Y??74QQ7{qflmz<&}##}j#Tjxs~@3=8;DOhC@`@)qp6p_3t?RP zrfTS2)Z$fuU-b7`IbN}cRopgzO$TqU=%O}~D6x)8A(GYMM^x$s^1SLV`%HOWwG9Pk zSL}pIKf((74OPE}@3w#oy;!3{EO4)Ikr8yy0{qh5{J+Hi0n$I@Ukh?0TeSGgXvn1- zzi2srfxF}uyBx1b42246SgBZy1`%!%CBVBD>Hf<$F%+~M=d+jLFMioR|79C_Uad4h zV$wcPoA#;IMkAod>3W>5$LZ$ne!X3-d>|%w_ zh(vZONf?`B=;z+Oc>VTlI&?%fq-KHg=U}gMr!Wg_{K7HHAj;bO?x92U-@DBa#g{NS zJUh{gaT4vbX4nLs_ccVBW9$(19T=Kr2jxhTLh(?x2HMB^X$i$|_Xg#(1OqALd@O;b zEab0#$#{AwlQQW4u(3GWj76L<;-Q2${yOM==JIe-dq4P`=ldl2$Q z^!4Fb3(HBSYlWgq`8GQn2o|*Gb!y)HHr^o&Oz7kLA5#70pE%o&Fg!Q)9iCrYyQzEg z+t}q+5*6k9`x(9K*qMg#wFuULk=o?H{c_HAY<#V_=?kp$GiXguQRq) z^bJFxVhSXp2|Ij9hmvEOPiR!Dlo`_u!PKBG2vW2MdF|~%#865?PxyGl*9Aa*n{~gI zej0f0d7Tk*#TwI+)f)HIsUhF3A#ZhW8u2gk{~5`D^N2ss{ZF&jC@h-rDI;E5^}k_& zb3kTk*$M?}Go$=zO~q>AKK*=<8tQsvyeEgc);pJe$Rs&>6C&&0y8O;M>>Bjk4y)5L zx`H%ZX-2p3qMsetqZQf(I^zwTI_UejE>0qrr|F%N z9MzSLYH6{IKr6S;J3WXT!oJ7&E)!S__mb$UmQzR)ZCo_OI*Fav(Ajt&WXvyH|Jt ziw)Oqo^b1J`<#@q?W6r%F?+Tp9$l$zjjitQB6a~t)oZ1_GIDg);ayOBQ;QLTp_=oI zjEbS*&j1IbsU&s(dN8Ohjdo2RYuueTkuv%Q*nSxZr!32UTkRc z!aV;n{HFWvJZEm&`IlKLvwi?HFcVDzd`bF%!sIF4uZK{XE!GU;A z(?XE~c&+jf7Ur-LA*^=6_{HoLFF@!AU)$k2VF!E_+YQFV#eybcL1+Pmko<0mzB?-Q-EuoR>?h0kB&al-o2uBp?0I)p+O^%QKgp`(9WuCv zDoyqD(j~q_Ry5(8m-^t+|K@{FlbR$%qnt4xR6EPv-)zwi<*|12lmlcWqHTycEp7wf z<@`k{)56l!I2%<3C(`oloyh2swns~*W?Gnnf9iZ}yhYT~U(y!SQgrlc>j0^8ZcQyUb$OVt?fPiLrX9hWU0Fe#O z*)WBqFR}CjQV~iopgj#nwp0g8>}@UcfY$j$ZDD)aPV|)(VgL9}!&gSyz8GtR%5pE+ zIh|A-B)uwBoX9ZM@rzMbwd9N)q#pRktqwXB)WPRW1`a1as@gxUJ>njKD-Ez*Ax3XiMD@XIElMiG`lC*T2+4Au)x`#-(fH1p~sq9u@}m%r8l+9H?Fh zG5Fwwcs^C)bcNV_ab9rqmgy5dUMFhHwdlg<*rgzcH90MuN5g@;*$vB*HRUCMq4R*M&_j8QNCgk* zn?~c_40iame_2f5Zq7?p>^0fw#}t@bZjKluOoyFEoVW4+WoJT_FmrvS#>pvV5?x#@%H6GY4^d1~H zF(q8X{*}{d7ZW?l;e5FHJ`A?MR z=XnR?c-U-LGX+)2J`M^olTmVS%h;@`-Cmb0WITSz{H_hp675?e&MQWiK21hf7~($tEKQ>1!_K#xq^OZXsX| z7s}mv*An>ZvW;ZiVpmLQn+5-69~@?~kotJ-?4Wb6*@4kWEdjRr#%=@yT|ebp zUR9oi%D0RZjikxEm7Kl9i6tvMlHW-_x}AK(22937dbDf4VbGAX$$S&L20nXBAOC^c zlEk>;rdx_jF2JV&9%cB@V)-V7ooKS96Sb3qeK3t|?LCV|r=Pyg6GG}b{H4ZbvvU@` zIWMc>DDsik@CMY2Ee{6grdJQx$BYIFKDDNek+|2!KU6!^x22xLZ?Uy<#sQzs`lAJ( zqXnNS)U>7HEiE`Z-Sf^;Gkw;$2>w}k=m%u8>pWn)v8DbWf%mxL2(GC^4y~_EpQPEW zdEo4cB?16L&cZLcvKy4~rB~{K<%1TM%&x#{N(noHad=|DqqO9F1M5lb9d$+uG7Kll)^ncM#T7^$ z1bGdQ9adOBka4(g&U+@j+~M}WNCVbRFi{vyB4`1J=BV|F+f6ae!g1Q-+?2IS`ow=SYF|IO zpMeiL!XE28)^#1B0@lRaYcH)ZebG{duAqVpcz9dLKP8V4mIWk zEXjisMO)7ros^_zmxctLH>z9zoEwPUkTXoD?Jl}qt&@UD@^m*3?h`?CuutiW<_%^B zjgOVKbHA%}Pib#e^RG+S^3c4{zBjPp#HBut6p{F;(M#n>0WuEtr-{g)M*b5r&FQ8l zWj#{`Z?zAXpHX=^=!wXp33Olhj!@7BS%fNX&Ck`z2L@yGDI zQ=&0^Sr)-^^6=jC#%3|e4_Yjt8`_jun<%Vw=loWBJ@FZtKGD?0VccPZfylq+@tIrND`rfhxVk`MGK|R;B`^oAQ$l)N?(DI zJw*XlIyH`KLJ%O%yS1&-yT2%%(dID&=|Qwnnc{<^_tC$2QQmd3>t{gjjW`hfkEFwk zIDX!I?=k7N&1uRELB@lyY+o(6ubQbT{YnC8yy#y0O2+dVxP~~{SxcY7;$ zaT?X0h_lei=&I~ zwbm2y5E-WJ!F4F{pb(jUQPTmt<()tAV3&$IAwW|DW1P0fkXYz(nlpyxkfM(~PUV~^ zS4hTfJfc&ZrWQUk5yZKj+Ltnz;-q&gXituc=NC*rYuX$hT=JWI>p8HQ;Exe)0A+KS> zc^pngKN&$<&lm&L+#AUZs3=!-&V}ad>Z%O4B`{{Wr=F97?FoYIYteR&6c%W6&(L=~ z=(15x!yo6^-@r;g<#zk;487Jcs6F&9Y+~BGy_JgoG8!+K6)!Nb0(-iNChuRix~02c zyr8h(y5K3TfyS2d3C+R5uVLZH@?jI^4wN)OY{8=YZ)3$2a#zttO9RuE@hC#fC&+2G<2{`rNbtXG< z5n>kuxbOZ#TO#BlT;H;Lensxkl8r}e+G6+h@z9PMTtBztDwVUO18<|slJ-+#q8$zX)R?R?{P=%2Fgx4=SgQFZW5|q2 zSOZ))7W%pSLAe=^9ZGN?yX-@hH_KQxNOBFG)UL5+sfS)t7%r-mzFd^Ph>IrL!qN7U zno)o8FB--gPf!9W1AmV9zH|GXLd+ZwF(^v=;N$f#$4BXx;Gf`R*(=wp{ zwM#$5MrN6)U&Ice1AT|z7hs^lVgTwZvFFi!C5?jb{|jTrkfe}sBk|ibJo=(w|CgiS z#A<@CYD}=sOpXVFHrVmt!GC`y{4IBGxG54p`N?YdcC?+?e6Q9x2MqmR{r@HXkFoTB z^%3a*)C>$fc8QsfK!63nuhyK45{x$L2O7p~gEE|Fcm4uIGWADu`V?hNe7Ia?S;{PrGx%c$X0iW8;B;O7o#xEH={mibL@6Kj%k>;^Q!W z1T!*I!Kpu;@CE$n#{b9s=rhZ94&g^PKJLD8N(MF_y2$b)u#w+nCtz_V*b+1OUxAGq z(>$qq)F=K$$EL9{=BKbEGe2r{++tbM=i=k9U{0k;=G17%mp5M@ijO1kr*9)2o|PXG ze`?G3;s<5S4^)u1VmWlglLq#FC0B!993i)Lsum0MR&ZCy95k;G+eNRqKLwZ_)^x;V_%eV-tb z8S887wSb2oAyR{}e-{!^(kOyqd>X5w+~t=YjbmvUvUb2(zJ|9U=TE3_XX4T}pvHO5 zsu3EFVfHIA@Wi&-c>yQBT%7<~a-lPHY_+p?oPXKS!i8Jv3&&Lq&1yI{(dx8Ls2H8y z@Ycl2`mqHVZ6Vza3dkVy)j7ZK9T1HD+_nRM(%gUlF|uKN+BHVG)U7ppJh%T(Y?_l7 zyI*|SsFi$)#op^}UJ<>vi+ZW>Q?I)-UfYFz`Za>;fALx+7iUzQ#dp~_yT>f)<3+zw z4cMw7vV-q#VoYswqhB*GBm{N1XV;3J zA!GnIts}9x9C_I+#jEkJ&se1!8clP3RYa0Roq+R6z%2B>YFG=0;T7HNg?(Jy46qv? z*FujY>WZe2T#DqrA8&yLQi0M zCRtD3J!b8v;3DPhuYOH!ix)l0Yl&1(XO%{F%l8Qbq4tX%zojuU3PQ^r7 zUcCMQ;ssM#1H+GffuumuZWo;UV-3$#He@b1Uyd~_&scDNQhzcG4$X{RpJ4EMRLv0< zoNq-c_t#@RlU#6G37d768ASj%@O!O1LEtxRl40={d)EvE;qwPJUNiDw;H0&U*Hjz_AqWZuN;#%r!Um^bm-o_Ij9wsR{9$?4SJa=EH~GE52?*NNSC2*Q;n<{|V(Nr6O%bVW6z-t;fB3np|$2BGIoUMz&}ub)fs3oO|@ zgff?cQKA~X9t5R9;gpbV799cSWfC*6s^b%mAA_4xJNWe1#P7^hAk>Un+kpPy^-OeX z!K%-v&<=z&Ht=}rxl%iPhG&K+-y8v**zl*& z`FECY9(M0N`E&94gOUtQAhYZ;9pd1ri3Iu&${+LJ3!|O zo&SUJX%=AZ9{i3lK0SPX@$dwn-#iqbq!qPK9F%CEcnbgL^M75U#}E2QhyE8j{D5$hYrIhoFs)$ruM(DKIvii*%6(ZC7%bF%N$MYETct1@UcT+HKtFAJo}QynS!X<$Ad4nM{prr~mF7HZGx* z4L2s>-|yS$V-GwrMW287_0;?BuoDFjzInL5CwrLSQMBrZlKoM6eixQwvI=xkiKeHT zm%nO2he(I88Ve;sm-xZo3_4ok%|Lv+Myk>G)i~JwmqO<6CY8VM_J`G`x~iR-bXR-- z!9eA)n1M=%JE_`(iU7zqnRekkg>j3?I!#b{*qs|pLZxT6feMP66hZmP@;H5cSOS_T zN*xySCViWT&w~L;nP9OKvti`2+4V14#V$@Lev{F=BWmqwwj5xd#{q(AecE3yZhh^` z#=lYU8+j{3!EcZl?Z~GUubjy!$BDR6{DYOYrR)YMdo7yXM4z?QyMJGO!TavHmdS#{ z1`ja}R-ZiLD=CtF*nN3i2KPmc?{Qz1c)VFFEDs+U!1ojeYY85M!r&c%FMCe1K1ZSF zz?oGTaGGVj<~SY)(AVb-Rv)!KWk*&ZgyT)kFvrx6z1gof_7c*>?Hl{kH2`s5bxJ>q zb*EGUY_7JxF2l5b#n|7~5C0OQG_0_Ug~6N_&oUuxRMGQKmt?wZSi6F`*l9MI?`$!L z$>=*a2#3?82Bn%yybe9jMe^>GKc}A;vqSL{t<6Pz@Dk1~aCaPw(+74MQ5$O5vrkC+ z6Ul6=#B=AdX2)Z8;L{^tF&)Jr!|V^7-Oi`=U&q~OJ71RRDl z+RUL`-q}Mkxs$F4UqFZT1?R-Q$*FWQL&UuUysg(Lo4K7~aAJHs{&Ah|TmLGbm7~~_ zu_j|UXyCFEY%U!oi!cK+Y>z_8^IyHvXN4;dHu$kv!A!}7F2S8AFFuJH*SSA2HF6rB zt#K1k8>n$Y^SL8rTP8FKWLH=xj0jEuqB-ClnYoL0og1!v71QR**Hpb+X;l3NRZnyR z)8eyC{rOU<%E%3$COnIVjBn5RCLOW0K{&Pgj`I?jt>Uf*ZvvUAi%cUP`qM-f7QGlE zdjV(~BCAkw9zD(;ZgqNV~}d1R2uFRG#pswa;=j9*wYk?53I9+RCzDdqaqLTWv05S!H zQB3Y&g&YkGjqEjLFEsS9$dt_wq8Rq@rLyDNbH0&9NP`76&ht2X;Rpo=$}l7&Z8oGXk0|%E#;=s+!oO zv4}Hl^3(d$j=&_pnr4#Q8wKAX2EIKVpfP#}OcKLqk4e7lF-gPh&aq4qo4CQXO_ZBU zIY9_x^22SZA%X1pC2&|ceeZ0{+<*u!lgHY~VL)UnX|pZ=6JIKqJ-0FZJUj^T-^!OX zgp3WK+&%@?Bq)vLF!Pkge~RlE`}-qL-Ebz;INPSirB(HC%Bo>&r&=bkr4Wv?Ns_Dz_e z-C5i*Q7nPpBNTZ7XXCju&M<%)3zlU_oiy6>-kXrxhXtffwAG9~_tl0*8>!pDepU@6 zc3>?~!8Mn|$P6nul)j+U>;VYA)+(NV@vG=A!}r^xcj_S!0SD zY0Q_qrw&Exvq9EM0xJipD}o_W)|POuV8t0IG9H|g!%f8WHdBN35fLddT_%G6P;7|{ zOj<+q*aNcxP>P(0ht~8&W&+Q%Ae2;w<_ET8tDAa!UdPU6)2P)Q?MKMp{`vXeI8yx&eSZGlBjvCA{QNtP zl>h9{&z~>uBgT{2-~NZ?Pp=QWBQapXw~Hkqk8<(=tQf?AF(VMaB?kQ+xRtJWRdH-N zZ%2m57B}F}hyw%3IJEaIjBkf6+zX%E{&YFC~>sgePc+9c^*lJt;nlIp3}0U}PKhz<2p8%b4Np=jmC%EA^`}N~ zB0Gx43KD0Cs(VK(y(ls^kk{a+CIdmXba``hn9z3Q<0E1Vs@K4y8YX=Gj|XQZCgl;P zBTbA9SrhNogl#RX=46)4(=)3=PB*^g#weV)ub2l_2J-xOSHUjOq{FP2oP0DV9#2|P z6Pv657R7jVuOGB4;apH$?My6g-8rmv-!O5v3JyfC&vh;?==~b5BjNAo>O>! zeAqc0JyUqTTw`=H(Dn4Xe_|68QR|!V2e&#tY=DU7gh*@*f+*+CKnWX^&utqhP8$Mn zyuk=|%%&6X^> z03xeO*&d{4k0iax_<&WCNGaeSId^-+*+QIM*a=U!c82^T$FJaL(i8kleI!0Eo9pGx z{QPnOIt;E)D#U2O*$Zvv@%USv9?kU``J@qg(tr1_s2SJS!f_FP&fxzR+@1=@mEZ+i zc)omL3#Xi^-^(iW`@M7ZdtH@&=LGe8OPJC_#^;$jYR!F#xxdK2%pO1OR2QRb9ycrC zTz6H~8R$T9pDiiPHkqbZouSZtLELK9hAS8d=24MZ3&+i1P?*QjjEaWinHZb)nh`PB z42EE3tAAW;uaD@8zOMhv-TS~tRa_1KNp=Gf0yja>R8gbE$7oa{pav6VZ?YRUu!|@} zL4wkPlvY%VS=0&|Opt6ZtF*P%w!W38kFEC4^Fp6mz(3X91V{iO0aWl`0kwKV{DWE{ zpt8U3nYp{!1hDpb?elwoKR#sd+?lyEXU?3NIp@roGcpb~+n4r{vl-*Fy`^mnii0<8 zo7-&VKoCBIWk62X z8Hx(-hCCUa3iO7&8WjY|4S6$E5Ii^J%~C;7-H;~(TQ#F0Z>|c0@P@p3DhSRS@@iEO zv^V6*WT2YVkhf3;74qwxRy8=SYIIt)EYYgv8u?6>Cqh8}n_3wjn~a?Fa=#tKeh_=BVHl2@Y1l8VTm9;0y_hVRkU`i;1fESrQ{E9AmXPr+h@iDK8Q( zNG~teA#dqcW9gfpb6Qu%(cejPCJayzjCdZ@Ge|cknEJdqa|I15w2%;S%)u(0Xp5eU-&hF92}$YXLC zRWO4qY);`(6E=XO=X4tWn|96(avtB6Yk%68eY=@MzYqna ztcvjp+|5rb#1X_%cQxQ+VbUt)Xn~)Z%lWyfj-Nlt7~%Phj4QdmP2Yei{I@>3$?9qy z9(`3-?HvJ&dnxtV&5KZ$<_H`jbeG_#BWv_s+2OmgjPkp(VJ4Tv?>>h^lwN!+ChmI> zig905<-%JuFjv*b=2q43!*UN+zO*9yHdnZUbsWYWwhTp*uuMv1;-^^H15YoG+cW7J z<;TPm!0Qj5q!bsximzDBY=q6AbrbyZ+yWL_xuOn5p6CsVgVs#=y;_`8TDJ`q{a$|1 zDka+t@iTHq5akTgo|f>D_C~Yo@V>=@H{Txd=eBoB`|8(z~+dw!r?Ji?+`gDdMUNhSa%b5ubX43q|M* z`f;ofM%QN|v~v6u2~>4Td5&e~h0F6Sb7;6cA+#b|a7G)T(`CiUazxpb*sA&u@^QMB zUwY*BI=HVHUa)iXss{@JSAn`DnrY z$>~~xjJI-5uvAFj^7!)39iG@7Q(fL03DgoqrJ$Q{4+R~)b7)PB{uN@oQe;Vi2$G?- zN<3BIcr-Ykp#b_%kXtH0FY}Asd?2@0v(xd(=&9MEZ0B5avB?}H6O9_T`F;yp2x=Ea@wAZlX+@(p_fA7qrF~>XOb6Sl0?v$0=kJebHTrHFlIay21hM1TPmO+;1>7 zOM{b5l@U?+7211Ove+K&4c#2HD)>H6wih|h<4sEw%jzsFt51^Vr5VpPfvxg*v(;Q) zlI;rZwXOuH@fs+(S&;!L`e*4P(U3@ofxQl~{*Y(6es(@6DBYs+slMg2Wd2lY6aO&E z-AakE~XluT}-@swQ(=wXV?<1^Ge9b@8k$g<2{N+$Q*q=2hlGd zGX$%}@b&b1`Ssb@2!#9iXLc@m?e1x6!bd_roeY@lRPq1dZqR;d0m#Pf55Ow!~8wE{84gc*5nd zB_40M9Ja*6_=YX<1i}cumSZ;c{V1 zJaa~r3tLh?M}SKCm&!jJa(Z+>;3j%hE$f<#p!XCPAxy*#+2I>tB5r_*=o^^1gFd^x zs-=0q(0`;dCs6d)1V1r8;zro(TRQ=r*M3xGJh}q-Rzgcwr5?fC6A7L4PX|WmZ%R!j#>)0+V>X0I&(#C_WVwkthAlp(CBb9m32DQcU5}Fs|*06F!SEu3hF-;ybZ+dL&o!?~GHGEdAljp6N1UOruL0-sbri=(h6BBw`<;mr$F9r%gg zMa<3XjNw~UOmLl1C>O;oT4fABtYWHH8HIAKTlSbiwVs2b(4BxB2T5A-_ zJ#!2WRjo9D_AJO$)f&S$t5A@7*Q=0^`VQ+<>iI~gQvM#Dy4Kk&ZHW&m?K1BD4fLRV zoJ|z>$uq=p^E{DwBh{xEFwkon%o{J3=(ztik`{H&;HTbH%#j+2&0CZ)6C$(h;-UG@x$#nsQ9omDgc zifP^57nqT|*(1sRtJ=oxqc@nsoR6B&s`urZ0e#)oITojQ^N* zdb-9{5Xzj4zhLv)hN2-qXfL247-Eu1ha{V-Z_S z&Ej>etfgvZQ5qU1Gv zJ19=d9okYA8AaI}q>3Ox#VfF&vkXr=s{9`OK`>eN?v$mxc1Q)S^oOsg3ZL$?#C!a* z3z(4vJ#?*{ivmZi?`*`0?ozFU-*r~Nn2h!Mj+~C)-=j9L{EIuX+_*1!M87({EqUH6 zd@7ID*{c`I-cKvcYheenLYmIPp5>ui*g0u2vxo!1bZD%_6pID5m!{}Nw4+?USO4BT z*-DIDeCa?e)VO6Vw4ZI?i~+K{JADs!TYGrg_MwBUYmp)QvQ<1HMzEFmcCzoX-_U6b zq{{I0Riv%rxt6r39V5-Ul6BTsSRXqQo?aLZ7DMbfBduz(xG~2Fv@Y3r$G64mWM-_c zEaSr3e(Z$8q|(?=#YrPJGBpG&4qTC6H!94re)DA{5MO&q&E+0-ig1dO7HKC}EqWwW8xoR37+C|h7 zY|gX?LOgbZ>3NRSo9qteXO6l}a@<17I=i+!sNCm_yM&k7>`iz^A}%w0Td_od$Sc{y z#=FjhLXxS0HOT6NDa6&X3Crt5H~X7cQ|L9~qUXBwv^)^IuwZs1+au3g$Q|43;^L(G zn5%y8=f+C8OzT^&K*2bk<*E?bp*asU)((}Qf&7HdVY~akP?L3jgTQE%WSuz#+NTrX z%-zL(uR+%%#@}p4EncU%h3jvCe_*bc?FWy!RvN=3g#km?B_Ui}_n{{7OIs(cfb$TO z2&3Usl}pn6_}W^L*|)vg%S>Rb?1;y_k%B6-{_W4JW^&Sevwg+g zVuHe`S1XHcpZ;@fWEK`&gK_5_H(9&!_WFi-@C{u(&hJ_6kOI3hLT8Ip|EoD+636#$ zF;w%C_}~>UM)_2pW?wUjmiEK!;Oc<2-i%|&u}obOrX0d*+c&dx-NG!>^#)bl`AhK< z`|~?xe6dBd6<1s0%d1t|frG9nPcfsD_QgItgUOniL!+Vx_7su$t*Z+Ck@8}HOLerA7yv{_M`c13?7GpmwIThH9a90^_F&wG(*rI-zy~-+>s!Z&lwB(T++c z6URRrw>1@0flLIEWd$>sOZ?nwNNfqQ_T=Z>X-Q*>eEZ^%7_?wniFt*sw6P5ZWdfc= zFz6?nXC<|9UkqdIlgY>WMi1wf(lbMtG(t zufLv1q#V^>_mlFk?JrM~SMw-KMsYW4H2jJYhWKYR{7goiOo?qW5zl}l!qQ__!94R> z;gVS1MEP-ts56Q;_zL@pX*g40HCpX;yl3)VYLvI}M&{`rQRK=>MEN4#0(=&}PXTWe z$DNBezpXx32~Mm;2nWDCnv6EqP)6U`@r|>?LHY97d2svMGt*jeL8uDh*6X)*`LgsK zqfP~j8L25axtINnZtvU9eJAp5RnhAq7LWuQyp1;>qs_33sZi1Y0o`nPp_XREbTg!c z)Pj3d1wc3IrmoGGJ|e3$A_0eP#@Z>e${aIEHRzdB>BOGr^LtdHfOOg;IOjMnX!mlR zfpOmr;7+MaXy6{xdV|Ma<*!s{{8VKuH12zqDth>*?gKzJ_WH{9nrIvtpdIVT@m?0Iz23a+MUEQQ?TMOoUD41GK&;yoZLHoS+*Jf#+UYUE zdlkb4W}&n_lyaWsvtxEnqi=7g$1Ht4l%-0|>U^U9vy9La-phP;=vPOYD5~>JN$#(* zXGwOh4-W1n7ckj|x3w|2SCbtF&ZK3f#q8k2PsE$+KXV!P_94Uvd(6vTxV@h=qaa$Q zAr%1YHb#M~5pm}jkS2<4QN`YYWx(%YS=6SJsP>9cZmkog8=}0}rNAG}fO+wVpa3`R zgt{l$Zu#xNE#33$20B6KaqRc7R9OqzKpX>p{!OflKYcqR4W^JjMG~vKPrlr2rw!}F zvsKCI_Dw`mMDk*vdOquTj?cR5mQXK#lS@vJN6--1pS+#P21kn+j>;vBS(tD8XSVxG zcZ$308rg+OS|$R*5K4#O?9)!|)3XBP&-8Eov+Ki}cy71+dG8U9ho#D&cXp`t;k!D% z=lU>Rr(O09wWjo3&rQ<4#`WP>8OK{68WSl;tq-@5@~>SVRDY`TAxAk~Nl5swswG2i zJ5ftU9Rd9G?BJ-}$nBi(`~d;T>=!pcX7|tP3+{ak1ZCrnLt!RDxf2D30ksj*;DA!e zci)>CX`P%mZ?oTfJyX6AZZ%Yq%$_9PMdapNyP6M>>QE`zhrio5jgf&|EdmrHWM0yc zi!qZV@?X>ok+<2W<|`uiTQA!4@^f(4ZY;@_sm;3C5AYWNe839rsj^;zb!98rzH1sy zuog|^TP7kcAB>O-k1vp^lL0Pj%ac{=E{-vbJb?De!(R!1#c=9{suMXF^OZ7-;>9a> zs0cp}uBvU3IkSkh&l)X&Buhb$QIZ5G`|d%At#?lbu25EGr0g$z(4Cp`kaXMZ;#)yM z*oU0MX@F?xeCKuz-5tJ2rF6%8)9H?bdopAhu{(aj)HF6yc2DP@oSL1say%z~wGt>S zDiXE8_40F3eHZ8UewkW#DsDKh!GRSk$5=VZZT|^_o6ZF(4eG|BHOZ~B8Y^?`*T$1? z!avS8DM-G5`^WkES3;hu!w|z0fgDh@R?__7MxKvQ}6!-!=wJLNh{#` zM6ETY^W5{{Cs;iqL*A(y;7rr@%+r!|yY@7pTW%boi&SL?zb&K@+;3k(Z3MdP3#8h2 zV8M+4+6vp_KXkS6#j4_n*C``F|bX zbADf>(>6?_%A@#y(!R#|z3KChj-y|EB9U^`{C+s+6ICu0Vet+tTY4wNPs_j*VcfC5< zoQh{6poey@%p#}qp9HMV0~d?@rYc-_Cj z_W}cQUwHbK+2QHi8mI4IW>qSSJ_!1_{uf<_u}0Jr5`iv$>jvK|9AK1n_Y&cw3gzb{ zenO>n!B?`_QCTu39^c^GmEUb#dQ~x5)O(pwLb&lFHV~TH{z$+GkIQQ*&j-H*(YBFCZYhdn-l!72x$@0u6;4gPJ(+4XIlDeGKPZLWri7$E zxu7JT^OWow&K@05Hwq^w699GO^|{VnQ?dt`@CU&?W2hYF;9<;fonpE=a4Il!zp;`- z?EaZZ^=o*>W$N1pHO?o zJw8k~oAsNI;L6loE7j2lQ&8x1+dmqsPeMc0YBlY!@sDiQ+wMF29cj{;8&5K=O;5}H z4%^?{zUQo_1KZ8Ba{D!z_50jrWBQ#Z=oVDPV{#!>=+C|-uNn70PHvN}ch~-oM+gEs zD!2(Qt7)5!Zzqvkw|XOke?n54d2qXnTjc|;R*?nW8P;b&S^usP>vXfp@AX=*u!ZH7x;7cBcbIDhN^|=jAKGv4&h2lSXSJIL+I?rG zoBi4~ytygxRtdbg*jVQ;+E7)xei2?e=#Y*&q+{{G5S=FU;w_jXL^CfCE=dweswZ1L zOL%1Mh|DecBddqd0ArVJM`uGEkF~O4mZSFkXOH&v4V_%S=X&#Ebly|{4jTuM*wvU68!buQP6eeAV9 zE7~9XAR}^@8{Z|PtgUG6juM0ae!WoUKySqTXUYZab}37F(V&>o)6Wg%>TN`Ef>NDZ z)D-qnTOXuIY0<VNBb|Rrlv%wl#IY_U{kI)=Ms!JU>Qq)R;ze zO)Hs=3tPXRQJWEuo=x**UTCdv{X8Bm>RSA+6VX=R_IbR8_S=&+e4Fq9LaD=gn>EP=Ort>8B#Bhz1@l1)Y-v~~_XUh0O!BEW}k1$4?JSJ-!( zv~7WvwTvf z90fKS)=B{u%9YmmAV9S8}#*hx-dnp@_C@LohBjlkNwzNEd~7+gVtonv)rt=HXAihKkhCK z&EA(ocKZmaSu0C0`)sqHqcl-pua;6_7V1>(eK_PoF*+{K-F;e)MrW&rF$7lzdP~nf8He1O_e7EjXCi zh}HbaU&r_2M}GZck{`(kdw;E=Rk9M?SQ8RVBsk4Q!ukhAR7Y8M1!nPsX9&6R%Vx6(MZ$=4MxANX3hc? zF4=x}KR+gX=W;7-Z;uX%{SGAMSCneDzcxEu923ObKS7(PCt~MU@k4U9SC}z5Xn}na zu59w;-m24XeHYOvG9*jY&WKUg3d*ujJ}b6|Z&Q*|-ZpJiRU+vnlJ1doziqrA=`dvK zLp%DZcsCKBKjee25Kc|B#~4p&WjIya(>9|;BvY|uDo(mKfs(|f5R@Z;cDn#bv{#h! z-G~2KRhW4N5=z)SGESf*axE89(^D?$0;d9%%n(#na(QJ{<+$3umyhEa%6y&*#AK9i zk?-l26emIoUnyrKg!8FJrNpv^qnyYe3Or1tpfd{hfIBI*Rq%V&+Yk<(r1F{5P?-L$ zEicX9zX|ln8u313M>dwV5203jDMQ_F;jffgoMjD+#jgcV>?AQQM&r1Ei{!w-*v2m~ zq6zy}P@r4vemDmohI1Zpj(Q@n}T(pZ+-kyD_LyY z0nCfIwb!&>P}>0Ks>!O$(Q_-cH{Ncl4!-L*JTYbvJ4-U~)kGM5xd#1A6ITS5wvV+o zaR4*R?`kt$FX8~AOR;kMtRVL8Z;TF>+;)1=W~mJ7xBSnW|zRq zx<|uwY;+h86KlTu^)6vgjO(!pS6s=)^2Y3(NF^J-?h@f&)JJ5IZ}2h^R}4!s_qOuJ z!Q?(7xnW>?f6z1Y#tMq|m40B{I}6z(xunR{c+*t_xU5$#Uefj%Tt&`He!Ad*LxT$o zX4z42pc*fPTuOcp)rfhwj6KY|i}3~L!55rA;R_CKG}Y8w&4AtO$LfhvfL=c~9O}7# z{LvCM1>Zs z16t+b!HvjFRrQB*7H;eKlR&Y^W}EFl2_+%Gf5}jR#o8aA#Ql9yf|2EE%s=r-Sx==g zW7s1B;Hfm=fnw}`<0WWi7qC03W;c#H`2<7k)50*zUQuLHhLV>!gbv}4!>{?(uGrqJ z{s_|LU#P%h(TB&&!`Vv_&8xWG6pSovXHBtJO%TUx?gHSj(A=O-&l2o1GyR^KX{D%s z{#ew??|)*jTNDikmtsqS2f-*&9q5sa)tf|(Z&SWVD|>i)!@he+Vg8E#tp3fuuBKR* zi|H8eu=aIK86t>SN4S$g8FTxr54@v858Zti_9@azVfam9v4QFZ+6OSVa=W0|Y}EE! zmEKr=d!z4G@h0LfsC#ovVWDBWc0kS&No(aGf@H@anTgNiU5uR<J2h`-Vv7-WhJ-2)*lRjhD$(NczOIAq!FC9>Zqd%H%%X0j(F z3g(Ssc9mI7l{g`08L%h$!nj8MO+;8R(_}mF0XnMVr+nxe!G$J90|G}p;=ZE3MNrMO zHd^`z!|~EX3kTx~()x^DL#`Aue7iWoli~VEa9|#ZdM}F__2OqhaMt;p=C`K=l2DJ_ z-VO3;DIkkSL^yAe7jqII181Rd3;+kzKrH-6zTJn*u9DWJ9d8Me>JGU>H|rj1<6YPK z=J;dQ`uL^Yi24CI=p6^dWzST2olE2gUk$2nk42%6U_BuerpI5VaHM6HOIyr{}-C6eD zKMPQ`XD7ch6DC$m`G_LymHNBW_znx1KfdZ%$jl)?(RY?n^b6QvxAKF5Du5LD9SQKGE3%wN(X=o`AP%6Mg*B`;iMQT`ePakH&x9X2%Ez0BFJhq3B3G8%CyZrc3%(05eZAI=osnz52nV@# z>c;+^XX;7Fu1sVwB!gZlf(BVmq?_$uiv}Z%^K(shBlP|XN15}XTZis`dpUIX-m|F` z^ufi7f&wyAx5PkpoXb7b*i8{1Hp;|;!+p`ffw8JyWh*nIAyW489%cWCvN_F~6}biv zuxy5CKbPvD3PdZKY{!I#{VBwfw`Ci&GzYslT?1&VMXN?sZ?$#5P~1tANXWcOb0!XEA}x^OhuMfBqTv2g<~yP$(WdF z(O5>w?%~n|HP#+0R>2SL|41$BL~M>yEBxgs$)%WfnWMe})1Ktlu?s8alQjE?S72=y zalbqt`SRn@!e*;or{|lJT>8+Sse&C9;Nya!QF^6GMZH)!u^9=U-Hoc{}IBRrfnfH~tfbtTR^@Akq*WF=GPwqSyI&u`&(a=k@x351 z%tY;`_(~q~TUC%R%A^@(jq)~@*dJhT$wh#eYahgxwYC!33+8uYS@FVB$6lyx^gYG+ z@Gv9S95y3^e;OG)(JX!WHZBL<8aMxlQ>N9Pbi^ND!$#Bap||+Bta#B2P6hUIr*y8j z_l6f0OATgs4VNhSit^8+e2UklQ+S`F%BE;l^7e43*g8Vv)*>_ORXf8sy#;ndv!!d5`iR zfk;|SlFQn~t8t%bWY`-jYUW_1vFudJK_6xRFD9>`6~tI<9dj6cwU*3Cs7Psg9n1G9 zJ$*j+TjeWVeOO$pw%TtO2@9|76q;yyLe`-a&cQYOT4AFi!^{0ytPWsNyDP*D>=N}osdX4)zodUm`X}aV*q+iqjVC6E z?$n+IS9BL#BAEDZ6+S6FQTksLyO#vp*IoK$dVlr5SANEZ3QiHSb?;~0HkRy!!R)}o zTM<+@F%h!F#=5APyE%;pu`|ZnU|Aa(u}R!*Pb^oO08K?uq6my|qnL~6ZhP_aV|Uxb z=XTT50t!>ond&x0OH+x$3dPw!MqdN@q<51~+##R1Lq19)x~pRtUq!OV2;p2vP(yI_ zaUeJ;1p;xc*$sgroSj5D^HHKBMp5S1N0h^myN)`le$g{peuI z?c~0X+)N2-qf|bzZ>+%(+S)CnXd&6zi$#m}F8ZAWJ_`6!W^&}LZ{lO!v~gx1K9^xB5!TvhV;W&$Q6VmGZ{!^$UKQhuZcc#&+O$q2h>&_yRb#*L5}-%ztFnQT#xY_-c$2y zv+AP<@uGTr>H(5esFsBgMLI9U6?43)^qQ;%Aakqz$5%dz#RcDHZgv5Q(X>r1|t_IVTSyH>Yv!If5Jc05{InYCa5ZJ`nI zCVL+|;D4hT%fuI!Y^oCHDd`3kbJTvu zvGiR`sG7-E`mT{tHaITJIEI4DQ$0zu*Nk+!>Q!y8i27=m9&2lYuiGWR&tTgx_%@35 zD2GB{x6dKM3ce!;MC~FK-WT@0W9RF9AB27TY_|^YH`cV1?F0Mozsq1>VOI$+`;8@W zX4ASwuap~0K2@PtVbMEP=(S145;4=8jaE9nmb00T>ItROnHO?GaE+v)7dDpsFBM|v zWXX>SDO#vT0DwK=MK+#;h4%f_%8fmAsMQ|!6%sF(_B2EZ@IlBBeMDq{eE|i_QsjKi zd1L+gm0#)eiv+GSj`4ZUSNgn3YTpCYiA|pBeCD_{!F)UV+l(~ul}~#!=J!CwK&euB zk*(h6C`yc#)$i!WvjWWUAAB>h+xqj-1Hjm#d|ArqR8D8Lveg~xYyXfs(PF&{!qJUwHwAn-X4o!os z88a9zb1(-^?Yloi*N*lOz2!j=ql7ofmRveiz?nbhiqRu0nRA!~(^34L4Xnb`h_TW? zNcj^xY)4C2#Yeu4?+Ksv_u1aknb}7DyVCtEKOTpl5pA9k5y!Y*t74!ZvCLRmK>=-5 z9JW&q#l%}FK3w25U$*aN*nsVL?JdUh`^{%WCXrLhFPb~v@{XQ4Xu-AC_<^Ri4u;z6 zl#fMK)L1!wkm=gwpScY)gGjbACiGeE(dNN+U;k$L4ZBCp+k!htp-aI>evTGj&R^mQwW#z!qUGx8f27Trhd-o;6a1V5Dc%lk8 z5jK)UdV}u9!QR=AjSvKEwjbdM!aDo&V?Ur?w%AKmqPExWM&zOMG$OzEgq(!v2tof< za%-Y5_bC|lexk4%k@d%Cz2O^u%RuA46|@3=5L;4E^pXHNsLIs>)m?bo?J4{U zWRyFbeno<6*nUSrT~m7P)$BLU_PVwyd7ShUNNddU$D?(a8-Lh2vhHx*-4|;9#(Q2< z?NB99Cj9eBewEp*!(9I(K9$m`_N4i^spck?4H>@D>jxV5&V+2(SjDd9C0p#H6&ZiW zc)m+hF~{TI*zp!k8MFZ3hm`|;)=Tt*XE{dFl&6|wVhcR8H4t$}_&lw`8k~P{d;c8= zw^xJ*q~888Mf7k&bZwb!kj0a z6ff4Dbdaa?&xbsPU~Awn6SV4>vKr5A;_Uuqh{(0W<>wsvF~pqPji=4#wW45bCZv3d zu}IvJjR}M|CbtzTJ#n+r$9GRE-Rt!w3J7Pt?nogtqLMuT{}R=TrPV=CcS6hCrB zK`(wJ^FNdP$hSy4E;1D`W(5oDs(As%*NQGf2Z`RKi6>>W691<=nT@%u}{-!_v7?QDm`$Bq;l`zsaPW57Wbf&~?F$En~+DO|;+HU(komRh3ZtDuIA#DxM=Sgd^zf0Oz087b1 zGnHRCqv6aHcswKG&x`?o2b%M1Pr@r)3#DT^SG}hGt=(cYMjZ#5b5zo9l6I5SR?ksW zm9+anb5<>EH#>QeAiHDL@9Ox2NPnET3>rkmwfN^dhj+N->XRvw?G6zMePf6lL)>uU z&QWm@eGZ;^2JOeRd~AS9#Qx{{8>Tn2ch~qFgFkX7V|z2|5s)9ZPiazm=>gB6(o6HK zN$(g5sp`a&W#&E{>y>_DG93!pY`?0~jfPp2oGjx*UZlF+y{cPd|6XMeou_MPlM)`* zQ77xDcO`0xQ|O~os9;wB`#CS%|1*gl-91Ecp)iI~`RZP0jMZiv_oz4QvhKlhQoVXu zlkmr1v8O6rVcUD)J(abkv3i%?|9qMA0tJP3x)Un44;JaT68n885FmjM*@F7&v z^8PrQEu^cVA-Qh6?WK5X%igv7S7X^ijnsNOGmg?C^S(J8#B99P{`nB$l(p4N4Mk~9 zvax3RW@F8wjd4!J2QT%CJfdy!AyTEovFE!{Ql7;JS{ZbEuUcrP)S9SeR7x!eNJ2FP zuavAM$Ek(eF~wxJS5@z3P?azZ%7DwBa{&^AaqEzr;9%IV{ph;*!kI54rkEVcK?)Q) zSLe?*=0(%kN#(hbZ;mwaw~71D%lGgzZvWy#%4%zqZo-p=JrFf=dkXxu-0GpRREwXE zW5O;rJ4`I?f*!P8Ey~NVJ?)6P0#9@qBCYFA7c70UmWVlTEaY&{_$cSD&J(lozB!|Xv!(~QSH!of{zUMphc?9mlvTE~#& zLX!3~+TI7=*^fTwFzlko>u=dW8Tc4p*-C**cty(ah5aRd!-LIHtNqvW6c5A|5z)|~ z1lmwHIT{&je2Er$4~lG}zW9UwqFA^lM1{WWhCiJqQ-}ytS;&ATgw#g=q(U>cCqs^~ zq{J2LIHLG|1Ru+mKd$%7t?Ufj^Ye_f@~|5<$)sWxG2DqjVeeMEIvl>GW8uTPVN7C9 z2ONC#JRf-tT&g%`@{a)zf|_z}%2r*m##8A$1xs?1@n+@$VWq7;VwUbf`ov*R0PO9$M04;+M$fT!2VPR0m#35Zm3-2Ts3qB}09<@`IL3EA0snp>e`cc6K;J<(j`o z&jCntj2lt&qF?YUneF;!Y5x$@_2PQV8e3=$UM>nYNzrwuBo=!u_i`NK07^jJ zt*qo>z`bFN$yRfyKLg+trRDED0f|$;Y^OtU0FtDm9TIJf{|C#^b5p-TY*v0!fJ{E6y?anf;KoN9= z22w@_hktdogQ&KjJ&syto8h!X{c`A6eIDA_F@f(Dut2!FAG_F{7+0_9S5@DXp}@?t zvlWc3i3<9ejag2cC^O3`GYT-F*E{6?Dv$M~X^-asOCw-idXJwoty}}Qw^TLVyrSqA1??C=_RV(+_n zd{H&C&A#ny?Cr$7mlGMr{oA27Ayq%>7ukRDX#E6Bu!l;w(uc6f{~g?@w`Q+0ZKf6&!h<$6tBb?~BD z8aI}ef@C3LPARZJC>0qST?w^A_dzE;J-^_QZ3|iH0#Dvi)b!Y%Q zh|QdKO4Z39)-EhzB~ar0jiV)l1Y^Nn-0xyg5z1|2^){&k{>QO=@s`~9ir&D6#d;&T zMrxBfmdcncu8W6>U{SprGY82P+s7gIP4-O^%d0S27+ljy+}&W9cwnGk`Hl3iSq zvYguU%JOQ5l;wvm!jHlmL9wvdY%fbkd&yjxj3|`|BPC+rVPV)d+xt$J>Vv2NP#M$3 zWf==9>JIe_<-$kP)}8i6*n6Uh?7UGe*FAKhtMjyk@V_4vhZrx|zoaaT_zp4$0{h!y z3@>*6Yl83aNZP{tXHxEFJA9UC6){^xL(Qy(ai1JYkZ-L*Gz^tzo<8GVmM?NcUxoH=)#4QnTqglnM>LER*S<=_zqU7>F*#VyzPm8km)(_vRqObALN0DhyN9c!7HmetgtB6%5m%5 zu@Mk;onw2|Nx6cXM4j%GI%OwC>Qq+xWIDP|WiOwu>vXC|N}+D4__qhBcw(~RtwVb> zR&n`>TJPs_zeG#V`Ny>$r=^XbQsHjeQ@7|{Lu^b#s;CSFCN8+7x?9Nk<-^AbdO*FCA|J5rIWNMjamPV==K_^cj2$r9rP9gO_ z@f36X6*Ph=EkIC6RkrPCr0mMiF-4)uCJgp>PZg3OY0r6~Dxlk*^Q;`klD6mk@ZqFZ zFd(sCX3u%5`b=vEzdb~XfGe-Yn`l2!tRN7 zo|TD7&YsM4BD|z5qD-0$44E|bRP%bCkYoUBNjXR;e8-IBvG+&NVyL-{sW(TQ4+Nz0 zHo5D%~elD_9k?3dAZsrpRQ_rXEE>H8%W^Hu44>2Fi$`|2lp(RbC46@6c(<9pKg1v>2# zRb4Oo&L!<@v>%@ThvU)rltju=^nC>>|0DFBU}_Wm>^xHx-IA2V_%LlOw{M{cwxX5(V0c38klE3Yd{zpFMY9xL56 z|C7#Ku8$e;ya>_ehWp}J*QP=3lZ};-JPgaOZ>Vih8q1M>Mh$umPBUI5perWkB@MS8 zj8_g}1E2Hefk=b8n<>0ZJ*=HXPUc0t;0X8Uf-i%&tN$>g_T2h-dT4yY!c~UoWWTs7 zR5xp}{w-u|7QD~O$L;{%Dz_g!^N4B=u1PX>cFG`jC1#&3b_M{6KJM^f(W9vg(eV@} zI|nz(31YQ-fFjLdfRDL8jQvf@_!;!;UgPJ4=C+ z$C~Gs9^}|u{TxCq;&51|$~61=JH8s?yF~>Qwc}9XW!y7GVq=T{?ZPv>uas+Pe6?mRW|+ zc=6LPc;sMgI&cPc{SP0c5;NA(&$^}r@wOkA^cjWhT})jZC4p!7S)Nvv2ggxe{JnyC zvfa-+tkvAH*Bf~>4Jgc5XTQbo#+kQ$!**dKWNnIdWLeEIJ8M{LY+shebx}W-d{zBp zxU4XV3ifaI4%@!?E&0Z8UE{a1bF3IQ3UJa})CdyhEW3mYP^j=2jDZH92m9~nnRQf3 z)_k&>B$GY0wBnR3xTuS%%^mV&o0fYJPq!5-YA%8mtDL1AErJ$f6J-TERe~#H^(zT<`K+=* z=F?JK632xOR`&D3M!}lAqYPVZI|-chZz@_(L=52Z87LKci?%r^dJ`?k9%JPe9vA_w z{tyh9vG@96MT3@A<}NoV;Hof~;5<6KA9+9&me3sB4-YO7a~o6=E*mQ{V`a0;w)84( z;07@}_I`$|l?cJGMC7QqC!Dvz_@xsP6b=3IsaS;yT&+|? z&99I?z!#~P;>=jr8D{Lm9G|foj|DU}PeH&5TVo}L+9GC*B7RoE`TVkV10*kbUEGJY z-Ro){_L88?=X!xY!2cekZ}#6Vm1e~bXDxp7b8ycP&2Y82HkhsrFYeN{gGN4l+C(!d*PqiD0gK0 zt-3C-hYt+qC4Y)%e`ljz)(_vv*8-8S>>K;S-|*pnCj2u|1qH0_vzKG0>b{LZ8uiP? z+oOl()N)LAu_U8L7taczHxAtUBsIACP$?xa$mLK28u_Sw4_n$0$PXm_KnxW)ioAo{ z>)*_%--NQIiJa<8sC_N@K(8w2X)&WP>-XfF^{qLKO1C{aHC3)nAl5~Wbo&fR;UeT~ zQSlGISLVB?2THo}D9V-QIb1hdc_-2b=lc-l=ok`xuD_ zcKJ?)b)ftV`+4U}iLXD@_x2mbcE$r&wd@CzqbwCJT+^u|+MESD)Hx;*{Je8iBKTS7 zxryMB&eIdYc;|_U;1``)I;hZL2dOcM35Y}5%4G%{rMYxqVaNGo*!z4=+I##RbeZ@$zq|rCO*NH0peR~IlaeP!Oikk2Z;0V+%LYStV3KkI}z6#=dQSe zoIIbH!*f9&_GviQ@CjEGSF#^4+{{|gCun^TR4a~(!QlP`wRd~~8RQeLi@o64^H_(B zYu}cSZsw!Hze)5pSw`V{iMl?E-|hfvVjo+`wbA0Lb5`(t^SB1iZm_@EaIh%Wv)Ag+308EvbPZ ztVd=11NoBIYNrD#VEQB3FF~ygiS3s6qQRe(8##e<)noFxd13EM%ZZiegTPcHFwwa+ z0WumjlP}7nR`53URjKo(Rs7bx^rW}6IrJaoW;+4wy-@uRterty;OX62!_FLMX_IT)ZunhJ<>%$IuA5rK9Bs#N3awO0TL#WUjcxf$_ z)x7kqLNAowWN(^k2$i3|M_OE&Wj`(Ng7@N)c=0;FoiLo+Y}2^q?f52RnvCe0Hz|%j zm_o563c`6~FhEXxI4YUqPo@w@3WLS@CXh@ajug61QYgc#I_)oXnivXWxKX%H)*hqq z1*7mqqww{(kc!t0fldv$Yx$k*hD@i{xEE4{*FBL!_~k2J1MbOErh779^E%l*g;#zl ziPsu;4X^xCs+5^Yr%VlGHb|M7jZ$XjGF9dbRVKd_I7=1CFQv^z7l2$UYK&kZ`mchV>7pq&?!KQIQlJ`V)9r zDh;=PdX0<`1cOJjWQ`ztxkTTiqoeWG@X~A&ikibqb9fq!BVf_})|L5;xGxgf8Jwy# zzm?9)))k)!L%CFXQ!HUTdjT;g1Z?E04IBkeW8zhvU4!%+`PlH(w8kWGW>( z{q~UX%9PyhQ=ams?qq1|Y9JM12t@`om1DjstzaylsM=97^wW*uu?6Q@4+y~VrIHnr zjPAwcyqyt~`+%-AS5*qsc?#xv-Ob3;&B(!=ZjGvZ8eZiF=jk?K zo#da%YA5ha+3ycOAdD(!U6VA{4;WX^q$gyI-j+l<0C9>{}#}d){=q3t zt&Ur0c7rNRubPiI1y5P#R5cYT`(;Xe(1D6FH4IZ49Dw9C_QI=xR(OKk z2c0jbq8P|+P?>eRbQlU)<`gxh!6_j(5kr0{Qx6Vf$$a4q6uFO9Bx5{qIj}nPVyYbT5{DkaIqa#{u?HpuM>Xo}ne+LBJ{v1;9sn*o)6_ird`r5sSN#6$9QEMo99+qn4mprnbvU*B2tf8Ai{~1@4u6OkFjbO&O ze-meCI$f-yr_&Vdh&!l6S9cO2m7R*J>>@4+t ziPTwuhHk0uFExn>g;%=y5y?XLphyy8D>WPc`h~CiV|!tEUbL7?UhoU^ur4m%RBN*5 z@jE%Ymft}39sGK;1^YD{3izG8p^)FehV%LLZYZYYn(T@EPR^bzjm@4Sb!FF>rR|}g z1CPe*i&ANM3Oz`b0>e5MV^wKj%POg8%af|`!K&~)DR9ejDR9e!QedkzeF8dwbrSHo ztu?y2HB8xxEG0Qdg}qW*0YK95GL@Tn$(M``h~ruDYCwPY=GRS_?|&o^&5%qY5zUf- zh(vQFATklug-mq5!?VN5>e7@{#GB^(zeFxN7T@mW?u#Xpg;rDKqB)84nZ5aUn2uw} zM-NN1aPrV40ulf=!;UEliAQe{X)VZec=$&Jg9{L=H`wVDG$XGBbzheKQ82;C%M1dC z-=!&1SowF%c$@I@M$J1QejT0KsuIie8(mh+`~NX3FCE#`YrYZE`u`3;&($nTL~SB7 z(EkWOzeZ*uU+F>Pfpg&Jmw(Otd%aSFz(M@q#=qA;FY^&fg%|!O`1hB`9g}~5UPm8; ze?QBe5J#(`*h6rRK@R^%GT*paEFR24f^(J4@+nm@Ft7)j+oPPih6zdZXah5z17?6!vxLx?+f z*+o)UBy+L?WNe`}f$&Hqih5oHh}JNZn`Pcp!D10xBBZV zNxmgzL^A)R5-Ql}s^C@}by?sP2kb7@x7tEPys~g)&Xi-(0jny9ozIw!wt;b*<;6TL z3vsDHF7G-7Nvvfem4AKx!&+s(2C)r??oFTk9@QKhcNy&3^{wrX2*V|LeDTTe<#aW~rG($@I{Z_lyl5*xQ|RGp zDI=13lgi(N9@gr--{?&bbiA1lAqYJ{3{b$ZFQb5w(Vhg*PZ7W&iI)CPnj)zVN%n`n z=Hh$rNdvp*o69lc)E(#i_R4Se%6}SKqaOK1JmmWNrx{SfYm9RTEOvEdvv0~cH)LJq zmK+|G6*cAjOl4ngiUe{^*`dvum`%df{7l_Jf&_A}%2s8H&_0eIT@-=bD#pz>xE~PP ziNR+5TZYjfqD*1|ps+x+fR6%A{Hm`cWTGC3X@NdkNUFDqUj>DPNcG0lj@;zv`J_&6 z;#YwpAyOyD)J9z(invP2{5mDe7A++go28o#y+L5CnVKQc0a@*Y9_tfXfep%f*Lsoq!~<%gbO$9^gn2^9PtF@T9Tu^sABr8bU|Qh&g&E|rkL z6;>K|Jm^ZPKj2rFN=Ql#%OhuUBf@yigk?V1iif+555`qq2OuLT1#-#Ppm|dyotMR2JvsTQ)gI@m|>DUEAX)&iAU3Ti?dO ze%0y_2fYLIjp$s)YwhpMuyC;dT5W%3BjzNDlT~smCJKR>8v--i)Un#qEuph4zq|fW zyw+XX7Rt6JX4M~#*A|z)Tzh`~p(CNpAXfY2$n)1n^Eg-7rVaRu<*-|cKD5cwELQxU zoX)=qKJXc${4-*%TP+@1V%R*ap#7|U%))?bU!vwBeIjXrTBq=$5(z%94-CukDA{Bn z{|4XiH2aC2pT{|COa{(UHFFWbLqzzw*y#kX9J9K?-N_wX8+}aP!8WV9#Vp!bRQ){n z4{kPH+q^}-X3TYbu4a6D4cmBd=deX>{SR5e9cIzy@S@!$dGSv<4CnjXy~C<^c>8a| z|2c+r;p(@FxTNKbVXa(vY94&qJM3d`|BtNTYmydv*DQ*vM63Pac5_&J|83#wPP6og z5fP`Z-qP&`rckI&i?(}<4w^-W_~c~QqUU`@JG`!HFts^ceJZy%u%mP-HGRTG2xbJE zIp1fN?;hpV9-r;`#!89nF;p9*kE4R!dNK>~wX9g6`OA>eC&%!M7ilP#nvw!lSLd>!n10 zuAo1$i?=rrWBHya@~sH_c3HkZ6!{**51{44cWM-0P+4YCAMprb`PLTsRwb^k!q=o( zROx1)jkI>l_iT~xNjCCYd6P>xjcMDN6oY>!svVU<=I{D)gVu$u#8r2Fe*m^n7q)-D zk3d%I<~LpF3C|FH8Ker=dkFAKKZH5Br^DO~ifvx?lUC3+Rt8u3K{0OG!a=-2CWe^w z+ODvVul10l*WOO)wf9nb4QW2O!m55xdhIcaU6Jgyc6v?7o72n!jvQ7=?L+CeI^A#d z*=_XMUB$veAH!XQoae>H1ylZQ9M;EZkll=!TryIK(OMd3ZIseFEQso#17kW&6fym|kX67gd0+9g|-yMYB1pls876bp40GE#V z!&lN6Or7v;^n5!OB@Em^c+DC4eqady+{IY` z&Y-lGrCnKRY562RRYw3I_wcZ%*sKZRrTYm#Rmb5B!nRH>IRX3Ur4#wh6Qm5+8U4H` zGI|J8&J>k#ULs>3opFvNMjo(Lo~1L?Tjn?bp_zB^#-mQBHS(x`d^x`#)juGQ^tuNg zg*X5ib)~{>j^{S%8YgAsFwj{o7 zm)BvJCSF_R)jckexlUd~oblB~HOlL6u1&lym)CP{OuRlUuXFw@@w!4@@BDt^)t1-a zJ&<_aFR$V$Mwi?rub*>)oPJFc3Kf@1PE)Ub!oe8O#4y84I498S34 zzuu5srHS4 zSD6|wHHdY>O<-tLEV)^Uf~GWH|R=<4)>81fB0@HRX5E3VXvxmM3()( zcW1NM?uU7zp0la4N>@3bDhcLQwN&NuRhaPV?Cf?*U4`-=Ub5`|uEA8=i zL65gHdc5WKcysADb;_>I{`Az;8s1I3soG!Z@wU0g+h2OTtxUYB7X5pVw;$^_r@keL zG*!dxi8uA#cM@+ZZCa1FV2`&kyeVoE?5g{NHrIbACq0BtB3)T(i%x-VPbP2eoh<#6 zNUm}nmF%}3%3>5rAM9YJlg?@jFKu9=XUIIvBfNBl`hA;U8|P$XRcCck0nL@8f!y6G z%9^Addvmw^BO=cso5fHDTIMvN@1?TBYmJhvR(Rx}H~xYAa}4>0@?Lrs@>Y@+FD3FK z4m6d1Op*V^yA}EOgAjkHT8Oywz9so(_CMfB!hh%~KN~Ke#^v+iRBw#HqCaXw%XH;2SXzP$fm8-RP zGoK?LUGnH1(gTqTUb{87r~mtkJuE=^iZ7j%rMx#5sV4sI!2iSExxhzN-g!SH0aGrX ziDH|!ShGv)#zKWIvx{5Th<2k-L-Av1j6(%23IO}%PM`> z*V?XI?58e5p_<{Ah@v1`vDyl1+lf)Y8#mFs-{1c^XL11)ckN|&D(KLZ z{AZug5@=1hs0lpspK?*cfI_5bltnSl;-U2=H9LRzt2aU}OF#M~DbF-q6>*b7`umfa(1Ssl?`x|(m2P_@ec%+YMG`iya9H4B7J5_6 zU(~eYMW8O49J|&CgX_GBpZ1nUHLR%U)6?hgYj|Jig&~TI?7`7}zy9D8>Gh{{T@i!^ zcg2aM|F7qx4*Br>g0Tch_i ze2JCdtz4>6M)t~#Dj}I|IY1$njMk^t3Om3R$u4!X!15WJer@{l&)+EGPUA0p_6}!A=U(>4wPnv}Su}h&eQ5Yqe?|;Q=Uv10a35%M@!Xdp zMgF2|=kPG|lRF2j|I4=ZmoA=7#KrvCzX3%9djIQf5F&dYSb)ikA5JvoW-}A8rcuWj zl)$ghq>hF^hw)V8mE$Ncl8A_Qf9 z?DNyZFJIrQp8SqcFLuX{%xR;Sy?$rVRKA%1F*&i;QC*$ao*q=%hr!lEzls{J#5Bj8 z<7s_e4I6QKv&=H#tc zk9zuJOgDpk7+Yaiq`n-I;0Y-3VRL7o>+7)?Yp8JEGqS_}>hmWR<-dHkxhemF=D@$< zcn_dNW{u0*-GJ)@N0N8PCn7@eEnbJjY)JYp7%Df|0AcF=MVsd}f(%6sf5q_4J0aTq zLc>S92I|3mA-;{3fQH7FD+zpqB8=%w4W1E`8jmB-gpf&bl<|ma5X5uHSY>#S2Qxsj z23C-~7{`i79+~4_NMwF$nKS=7LGulqhWF-Bt8Ns25 ziBn1~t~92?ynWLu!KeHA={^j~x?)rWvHu}=;&#jw zU{uz9hVe_~6+Z)?dezd=oWf|QIu)IMeSo)MA8QF7LRst{QLdDoc~i}(7cu;MIM9D& z5cNn7Hk|Ogkb>AEF+?5y8#Xo29^O%B+E23^hJ~tF5BbC(8 zR#o*#y!fR;erHlq-C_P@x~REJ?N`9rC6FP7W&Nz(UiGi?KYmv1$*#uk_McVqwM6#p zYm%eZ_q8`EEkkmitv#Gx*F6spm)l+buFGlUqgSYDp9j#WZ5WTc_I<7_Xj;mw1rxm* zi2RL~kQ;NipnWI;r`}Mj4(NyIS$ov9lM79=>13{Jv!7G%KgGoxn!;%)iAwXoIGlV< z0eAC#ia18dCYh@9M@;mjE#9>sN3MwSGk`_R`^EI#tA-Xce<$)7EEjFg-3ba6Q!zfN zJ{zs&YpP~CzVJl_uN47&grBcv3)>h0{=mOFy8@QMI+zwX9>jUB{~|QX0=df+ob z%{^tm<5E9B>T_XgPuZ(T)gcfSK`M-JY)}8v&sShiEpMF7duTWl@XoLsO+s`0ni z=AIrD+h2MTJi;Px{?ExY)h}gMe&hWt57;a{>E)?N|B54eB#YUjQvGfcWZ;=GP~pwO z0x#9!ZF*L553mr*lP8h$0p6}Rs6yFzG3&mr$)JswLa+M~UNtOt6`!k%7f;sXyyEeCB#V(uO7VdvV8&kN4bS0UlhWg3nfOU2jlATfNG!dcD>@$c z=Kq<5YUvFX;ZbN<0+U>k1XAyhMqPi+`T}H-mvAPOu<*I_yPUPX!nRwtDwBnxMOUEfw@ObqU|Di>e28GbM_xOB}VQ(S}$idJXC2 zv*nsgJp=x7qf~az_mMz#Xko%g)%l*edS@d0$xnO_(Pn1$4y*@~nXB87okG}fWlj|B zfoc9Vt(Y3GID`x46JiLhN>&$*JX{IIK8P`$V-GxBh$N+`(y-01Pf;0kH&L1$n{04oL zq?mwVkgF=p6{%Bu>%OQ1Uac9j7t}d7Bxi#AWp7Zs z^OIp9xyVSvWqf~4Q0-6E9+`|WsA-jSW>TAgmNXevTt2F{>-1QczhaKZQB;kl#jFle zIX{5k0CG~xttOtXW^Bl)Yy3|4w~~@8E%?{U06LVZMcw_HFJqk?i(&qz^n5c z?aARzWV%@|oboTRs$}n;+N&Q6y{NXlrk|IY{BQgXKl3i@ypeHNwN{&|wfd=cPVZ{3 zew)>HO~JG4WifxFIru zwX_kRYPN6puK%M))c@V1)!$4cb@z1BRov4}wAzENzezXgC4Hcm)_&LYE=-9Ybi?F^ zuBX+#$4ebe?i7uW4pKV3s4L<*s=IYCm~d#F1+TRlHmSHaKX6-Wmo~GIDEl*0EyigQL6t zrvjlIZ?<-W*(2YoByxwBICCqBr0Nxr{iY2$^>Lz^?#k0wIqsUO78)Bu$2GEHNN>3VOwJrNETbq#i57JpIt z&|t4ccYY?IB(tZa_wB|{)3ud@@tP?=O;lXn-PU!no+WMVEmc%yReV7)>9*pogaYwQ zt5Vptnbrz@4a3Z;>YnV`(i$sudQUXGnxeopL)VEt(P~qsMRg>a+J)kqw)pBwqC-Vs z>|6J~r@SZ={9VuUUxL3oc&_8`asHI9d?Ki#=N2@cnx2=dhBzQ(HqWI0bj*JgpG-BN zQU2rklk;zIeT~<=R?-YGvM70``wx#H50ccIJ&RkV;Q~eVjr5wRM#5|UOWsruUsG8=rQ&>s z`duZDLD>riW-h5p)XaauYwl*0M8}9kOlEzJmUqV5s=d_5Ev5Wpv3_#kP9tTSt9B9% zBH0Ea>Fy9?D@KNWhGguke62A*=igAtbJRM?9MV$pjQeTLMQl=sm%fzuar-hi*mBGo zmtuV|F&Hy@>2L7?79}`pQTmO@*S{9?Gh2z$RgG2p8J0d+Ja3e5<-10@PuBWP+A#j` zg;em$|gVHob2;5DZYM6P(T z%ge+MpV!{JUX?QnMcwU_-k7&}+zZrluD%nWSpWQa^CodWscS%bLJ<|TtEK7g$Q66L zD*f}GpQ)SX00MjVGBwSwsV+B7nQNXuk4rLl&s!DDV%*KcxbE~C?dE}8Z2?bR^WfFI z78`kpK6uS7G{geGqCvP`^A9n;4WArGABrYUXc&P$wHvEM`e5Xm7sl<2`}}{Svy`2f zd-{aL#V;jFekzhV>EnOwjn3yaz1#+OTAaJvCUEms-}2lW*ENiC$%_vqOV+5IzebB? z+{5GUqkY}&M=i52DDzU%eXCCy?%oNeMZVwno1NqKbzVSh(oYL4>PsA&vq=A&w6$kDVo=XCv9ap23P2?hT~zmXXhK8FhqjK>0s zuv5onA#CBDi^6$gcyd#$G z{8smc@S|%u7q;Mk$ZFU#9EQG1oi)?D@Cm<+CW+CoO+R3M^^fuQ6!poUUwM4bd9IMk zQiAyPER zB8vyJjxsC8^iPh$h#_%J$iMJQJ;(2lm295}-+E0UgBJ?Wfy1;v%e60+@H|&JGO22#2aSPl!lME{ShW^W|QQ04a!VLI+>nL211i8=e#G` z)QSnPF#iU%F#q*D=E)q6*G^?CkVBE#(HxUofb58lqWOZqW+t=*gWoPbJ%z`)DnhW_{6yGW9%Dle45pBegh}o z@DbBQ;+uzast`zSu8@KTjf+RzrePawW*gKc?OilSa&v0Z>+{z4-vw|Hd+mZv0Svmn znO&eEoxg%zkluJ`+`eAlcMCY^H+)Eh70GO?AQY9MUDL*J$@5qVNcM$M#LwK&J?Yge z+k*q&;Q_Jk4Gy`R^c(NmzeR}}^2VWR1RMepzV4g~%|=XDuxRTWLM%)8JG<1M zdI$91f zTQ}7#AHW@03&jKnRsQB#=s$S#m-9y6Q@kf69ga+8G9zc#LxQR7D(^xVn31U|_ddN% zk!y(=IOkDiFR$6q^}n3Tl$OWYNo7v(b4nseU!@q9N_maSPFLBpXT#EJuVK@|z&Eme zmbmOSw=3&dh3-^n0-^Ko(Cb}j+g;5lV)`hWZ+ZUZ5e%}aYW6b!h;(;g{DJXK!Dt85 zt#7`6()G<0{YE*2*kxO}4yDOzT3A}V{(*6AnInf-Xz+3zp%Ur(ghR~Wv>74hlr(yybjTEZ2X zNw21jJ1VjlVhqC-6=Q|SuCIhKaK&T(b(ce@hzkzwaOrl(SeKvjqp{EzED!REz23t` zUvO)$Xg93o3vPFD{&jN+6nOMU;ma?$qgUx(mEPGaI;`}ru+oONs&qrI(!DC}=oKAS z`aoEzR5RbSrK@_C?p3L1%YJf%1#QGJq}N^J(y(~?`{IUyKW7UU`3p47`+t>t{j_oU z^lwVX*g z7v~tjvh^>~cobG_)j|^CmoT33s;l`;R?S_A3pgb;l0;a07X}5t$i%U19I?w_+OQ>C z5vE?)CTIPDw1|)`Z`=LlEw}RJaPG{de~-YZ<@R1_x|$nNH{iqsM=f{sN(zLB%ucVql}5sA*y|fa=F-=f5YuYk(EnzeSXh{TpEck%eYXQ@9$mMw#5IgKF*XdYpcLjL)L6l2uGt-X2x5ADu*c3ZmCl*z;xxf-*ozbmZO;aL}d0~eJZu2CciG2KKTEolpdGveZ-|WYBIk}^h?nkQSa@l1lH0neoQ{#RD@kd6(o&q{m63niYxyY!k%`$@ z*PT0=OjF16b2bN13OCTmxlFZ1qtn@9WD_0LZx1Bd4N~O z>OTHNUDVyDpLM)#S3q{uu&hxI7{lGUEvHd)eiKfgNXM(ttQ}MV@xjk_Vk9@JdxBP3 zkBC4!*!7YySl7||wT4mK*CN0rQ4>7sx>Ig^P%E$Q3)1ANha-%8H#Idi)gS*?u)!WD780XmkMoKAubOZ#PpF~#;lKdc7#ut5bHEmg@7OCli0 zR5r}{zokMda!dO`y3N*QvDp}S5!RG_iE)-w0uzz9x@A;%Z?KGB)L2m=U_r~|Zd*%4 z(MCM^O+c)->#8qFu3%!mq-~rw+C%&6rbhWWJ5CLC!jMdrEp?w7zLlY%QKT>;ReI2_ zuFAeGQ?p63Ci756$cbQQMBL8k-W0=E+x-8BMi7ZWB8JB8Im2|d3&l&F`T)cgaX9z1Um zwxCG#^y*gV?56LJ&>jbmgmDXWDF>=!4u0w7b%U0Ss45%yxy@R)sqGrBP6|8l#<bfsL2 zT4v~YAXMu{DHgPq2ESOVtFI6BZ}1%-rNMvmAsYO5)=mi_XbazJ_zMu&hLe2ANSclz zcxpARF6ugimvK)JNlf9w(T}L0JKD7Qfnu1;ahi#(k z`}PK`DbVnCWK%)I+qBd{M^GltNR2wlSS9kG_$M47q;>5jyz0ogLRZk_n~uintQh_q zViP}GR^vxvUQ*8#TBp&WH4|e)$y{CIC1bqcUUAY@5kD>W-IH=x4DuHI zoI&@~+Nh(_2W+BEMsiJ6bke$cBmH!#rAT{Wl9ih0LF4$!&jnIez+dAO(D`P<5A?dz z1`#l_KP}W=cLsM4^*5h#w$F99VN?kc>h9Ln^qlnUBsYll!sw z#5xp&lXYbi>xS|e8fPAv!uZ5m_V_vcOuC=v{WvK3=80%JcD<)&(l5P5Uk2rlp&_{F zO9cED8%nd%@t4}*E!E&{JAgwaT z?Z7B5@4K8mP4*O*NXIiPBsmInku!JC;RU~mb9uD4T+J`I3)|j|+jW`WOz(^a`Av>| z{L+mlbN9`hp|SR8MCiCMQjVs`CtoGOtA5I>{+-YRYeu$ouygs4$J3K;EE$y}ek-`N z_k|Zs4ZN-k`1uGxvV2ade&Iv9OOHZaoMb5~l}DwrRY)rkpM_*8ZWWSEqf2CDAz3E+CVgS6^TbQw~92^7?*rxbF2I1II_8;T@DSfD(Tx?VaI$x&Aq*uu(f+30Szh- z4JnUcNY%L`+ITDJu8l7F$Tr?i4tnU4t$`>LKha@?UEk*1;p$RbmAjCr(>AKMHQq^% z+H~9HyhNhQW4^B3i6m}C{_kD5G3HHuP?`WGu^}4UNc1LqOW%jWz{Vh0W(muJH}nO< zgi53>nZ%Ox&QG(09+9l&hcv;f#=-vYgxvnD6Q$bl;i<C-ulLp*meY?iCf$D&p-FsVQGb!w^V9uD1M%U*$&#fKIjY#>osBS}Vv3m3bv>{m--_OZE<&FvOVm^nv%J|!gjjQQ z@H4)_;hElW^%r~2dr+wgJLGk|SAqrM3`e#Wfp)nQQSil53_sK}6ImqvwnWo9t?>LP zVv$`u7Kojy-j={gCw5R}zW6~67AjeCgi55Lrr7|cy1Z&E!Y7^k6F`v~*@MQ~W7h?u zsa|ra?@|#82$GOqNBtbr!*2VztiL4hXO|~p*_lYeoZ#w0+&5Ol5GzZN5yC|g!tud& z_>w)~iv>rkOS6;L(s~~ZF3lagVpjDjGB!SGEsFL z1sKD=ZdGF7n^u#8Oo2dWsYC4$o2aSUlyoRNz1h3|)?1d5h z3n>k0qZ$4;x0#mHmZiae~Y%k-lrsAKa zA@C;aeK;33j%Oc{~F^E^Auj;9B52G64 zKNK{G@3^lO+VK80$83Z9sQXmd9``|O!;v2j<^t#`i|g5fqne9oEHvOUQpijyqlxrt znZh#j2fgN$0WD|2OFw3c+)s%>fiRX4Zmr*{nSj_WysNP9k}-kWIsXZ#lWRb3+&)b& zu9=wLxc_nwe>SKmksTp*9L647U&~M&ya=tu(mhMjy1ie@VrvLqw8F5Ypvi?(%f?=#JQwzThp#0^yr(vu!&OWdhm-FADS5S) zBg>or3Bnp%R*i5bfi^m(0kID0&|+ZBmRMuiYXW4M4p>_kZi^$}5qy*#tMe>am?`-w zOSN0?H;{v{yCeUrpA>i-1rX5(9t8Y=?7;OvRpSW^kZ0z>b_r+x6V%riYU=xrt)uf3 zw_;eU9q>Pk3FqU8M$58O2E-<{c?%}mqOKm`*D}U`mlDodncFo2K4c8+gDsIeXfNO& z@v5kzK|hdXC|t3KiOoa`(p=TZq@@oIn0G3^M4Jx0Le*a%wpuGO&NW<9a$P03 z7B1O}!UrmNcd*yu{@Fw0lODQq&h*Q+A#FW*2EH8SnI##^)^;Z@%hhvd7Z9Nw1SlC% z0IVw#k5m!@=OS*b;>IeDrh&yFr9rnqwtfjNmyD#qmQ%6r`)bqA)$^UJmL)EGs6J6L z#A_bT*Tp7QElwiF3;hA*A_80rgo_w3sapCQQ^l@(^fNXy^LMGvhw0a($GinH5J>vv z$;;N&PcK>5@VV?~tmWJz>6)$!C4;sT3>$B;uJslhG~c3w_M^Y+IuQ5I9UAN29M{*r z!B*8Z$nD&2>s>n!z5s98t4fl{M(p@5oZm^mBxY^dR?qVdyjprIi>EFutw7;mY9?MG zQ+GXO>#pZee@aBph(Bexp2Phq6?&3?gq|b(DV2Iw`cta(tYS!}RKGNpHBeFQPZ_JY zv5Fh-;>P<^CM#~T;-W4t>Q6~1F5yo}>Y4PX%+zzHKjl0<&-16G^i0wC1WO`pbiCr$ zpw+hrt-d2@^_@Yh?+RMIDroiEpw(?bt2YF#?&#I(2ZB~V(yP@wf>!VB)#_)1RzDxK zdN1SoIxUZ-*Bw@CUkO@&AZY#Jeywk=&^;{Hf#!;&1sVC~ikTK<@S7{_5+03zb4AKx znS$nudJ8fO%@uZ|lqRCN;u4ExE}AQJ$*py)x#Dtyg}yac%(WCIrMcqjAjRgTx#Aj2 zv8ie9)yaiHCl?2uToO#pO+n|D1)W>YHf6~rF6&?;ZT40Un6j|>1J6T&`mxd}ndT4d zwP2ZouUK%Xf(I-ZQSh(@hbxFq7{w|SEVbYW1~VJMQ9wF!1j&qi-$m-ZW*cyYZAOuTqDKzB+eUVI69 zDSFQFV~j_<_;NqSV8n~(+DOEU8~hl<5HG&kk1+=E;%oev2B5f+uk{Q-aWk(7>6Id0 zm{QyT6fd?E^}M)m&x?C{Ufk33;+~!t_w>BDr{~44=Z|?U?`3E~fCdCmbRhQo zW7=3*CdTz)Fv??GVjqj(V~oe}OpFV-V-=YgXG?5ECN_dcWhPe1qbd`tvXi4)5Ve|^ zvAFQJnDL4kPt4>@Y_i2f6%!>Uk%=XE;O#%jV`e5clgD|P*m+%_4jR?)NlvB#s5tNt z{VYd7)uNvHDlq_a^c>vT#e(4Is@2g|t9nwISgP^j5wDwXfbOZdT?oDVJ_C}a^Ryx) zMg2nv3cTi@Fx1?jV8<-T!pFe=BZTGJ-_># z7op`TNR5=Iwxq2gP7_LLRT0nRSQ>0xiuhPsY;20;SQ3p-5g*I>#1Us1)o6GXesXLo zlSo0E)z_xcs{fHcwQSPVpXLnPUA$ zpib)s5a%qM6J;>45IthSa4&HGGpPKszVrC z{&^+FOjXw9s}A!;J}VYoU4)#4Pe^S1IX)Vx8(R2=%)sPNgKvxu%Z66esXAn=<)0tQ zJf%A$owwX+-sBTaopPktxtP~|P12?uV7I{A7HQHiqP5&iP&>%4o}sXi-!FZ3S>Fst zq(}OuCs>~$E~u0+e>~@+!}sv}v*-3L?^}D*I|l@nxOXm)52D=rwtSew@IBp_egQ;4 z)AM5bKwW=zF}^n;x7eQe=E)AcZE&OrS;Z<+&G8A^Y|9yjS|l%-9|{u0{Kqpt(dLJ& zM4pnL|1$(;*?~W9m773hbOD*09XOPlkxNa4=KdP;3k_z*F1>7T5!hkaN&Xt-#@AB( z&E^m3;MeBzcXcAOqS2C9EaZXrG_QFt4GR6av0|z8oOr;#qzbFC@QU(pgBNB__*>?; z%`3(}$S#sKO)LM`GV8~O3iZGiSCM6;P~(O z{8cF{cEx9}I>(8-zU&Vb0ZCh7GIW0~;>5c`^xN_uxk_4sXU$Azk$h0WbRWN0Ta}d= zQADi!dJSXeI(};LV4WS<`WG-q5L_|_AfqDP2tj@1zxvy~-F!Nk9r!?2GpsD+n+xF> zm9Xe%MQUh$)dV0B*9TTrtNEb2`QLo{MVJ+?0an5h#+kF?`G3N!%=O~dZ%b(BG6g;8 z$X|A)Yd*yCbpO5PuT+hP%dngeO8h%p70ymzfHV_`!?n8FStu_`SkM;ooCd!3BU5NP zE1K|^*c~^J(D^fIuG9=9IY_{VY1*I#EJlOww$aWoddlE045aL8Aw>BJ`Y?8dCz#Jn zHN*MLTxAV7w|YBnztVf7+gLX~qp%bh5I3dOp&O!YZ; zv8OQHiA?ig#lJ1zmwU|j<+Pg;*%>z_{0kOpgtDI;^g(gIzNy$o{ABTWqfj>+zItGF z=9@$ba`$Wf0}sfWPI6C%IO#u^^mld7oFKEge_{HiUZqW_wK7+IoO2HXOkUv})M7RU z{cntfr%afr4AI4Jt21)sS<8&aabvmt=et?fPMGKCQ3VlhaVhnk0{{_+VcQGacH5R- zWHM4ew=HibprbnM5`lyJx1k~#A9;XPDG(hWaEW0Uq=G3ly_ zu}S-`7=P7YVrfcNL0pZUJzTw3<} z$|tXyq_2G9s`0KXk1iM*HXTKH*Fd$urff)~-CcWev&}&Iz|gNBJ7A=6suoZ`JN>_QEHV2F4}MlbjA>1m(uVZvZ?=|@?bP(GrW%W)lKr*0-xf=(F{2_`vNz$EgTVMV2RXT)L!}cX zPhngq!+yc3MbqidR>uz*iFqd(3aWwi8quX)^%bIo_=0wvlonAy}NJp*{>ygpxkOiGCtFj>- zP51HX?pS8%dwu&}rkI6eW0=W=*XmODNr_erWOR_X-@?3 z>~;~ws0FfE_+=^a%R-aLeYX53Xh9Ms~_oX3(mTvtl-s{ol-DR4#vo+c2atm8BR(qs|DXQ1i;=0qhyk$AD{#MM2?9||4ix9qTTDCBtMOP_RMeYbU|h09x> z<>^nW%9vkje_C~>Wv#`G&a|{yU~Hyk0|7qv18oHF%)@^_2vfh(a47UeZb1Oo3fnA{ z!@49kjEz^{KHX*M^hsP8rPBd^=>flVK_jew*-zijX;9R+@|IUrHt1vCg{_azTe!S+ zFHh@NhXv@@0~VlPTP;Ap9w9)#rj_OAJS>1bdWU_xEMKQrUB?X&d7i{$7!SiX;}``wP+$W?n-iXv}zp49ZYSi)rNyonrdfn zU{S#rgNbZ?GAOmmo^?xiy5}v=+Oyo|(MqRU*Se_SnOfTB-h*fAmJRMbc-FOO9Qj(% zFE^5POEr@8;0JERQ!N@$&47ERS~affnR}*|YIu1Mo~a+WQ7*S<<`x0j*rcbt)}b75 zMxS~sZHxFeTAAinoioH~yZ9{{uAaDs7I(Xg6O=3D)7X(Oh;#WgLWz?5GR+U^K=Ey1 z^CIx;x3pP-hXj*-Ti~P!<`rsG_j;FB_X?%eM_ycMbucI`q~P#=Q#7|FqUqHlV3pZA z>AyIL4^~FF4BQG){$P3ZSr!^+byelu0!X#&uy;4{DiaTlCtfk{B9jYT3-qBYnar2J-b`94&oE< z)x*2)V1P)byfg1zLb4#tYo(-|dGF%j)kaaULLht=JCR$XW#JL*M9fC&TJN+kqy${U zy~hEYngRGJZ`G;^jY2FRh9d6SveP|-EtHx8C{0~Z#m_Y0X=)a*s5~6arEb*2(JK%3 zPUHt_HlqV{$I!nAyx&SR*OLL?wUU)VN^QLW{9P_X2n~-0;gw(dp#t>$8k{sx|Ms9E z%>c}676}FLkWc^+355_*@V6{~{+0kF(&n=KS?+Cb01&(7E$Ur>s2P1H0OF)yd#ywM zyTZfgU;5L8hi$eYQ!P8~8Sdyv00&b694s%u!+en6!NK1LJe+v91BZtIhXs|S*}||Z zO&iJi_Ak)Kt3`(9cg+(GDs3*Y&ba@2Z@>Fx3;CgoQ{U)EPk-xW?@j6Hul?H5({>$J zA9~tijzv$u75&>G*wT;wwYUQPJH=?BKMDHxlD_os>FMtn{R>+6KZyR#j<_jt@vlVx zra7{iypJYtJh^E4C|sLHPTxW>(Y@a3I}s63pkwe|@*8%|RKN5?(3#-pv$!i2^^A_( zuEG9Rbehn3!qN7QSku!YdHF@PDfcvFZO*GkpjNj)n41w>1u{CI`0H*C$Y^S?@PQ2$MmOxt_h!1=L{)3l6WQh4^EWN0A*$_0uIBQ(B$Ol+bdzA)~kTHI2xPb z4@izbzOFa!dB5J?rN%Y4zc*_9M8iHCSq7qj7iu~DccI5G59o2DAVJrc(>Zp@G3jyJ z*yMB6WDh;=wni$T%N?6Wl;MAr9&fXD96$c)@Xpj9iyq(ImmXj0M)9IQWpX@(?gEIS zm2s&;tNogg8V{knfT2q_I9L-B7Aiwk&^-d+kMtd-ebOUB=`)M~4p*B>Zm%0{=E3!T;1i;LZR9w%PL! zM}j}%z8kP6d$S~uj|2}@YwTH|uN^)9*-QJ<s70u@83xv_2^$k@s^OvtSV*Ktv7@e0eI%RRA_l|m1#v%)S z_5@(=?m!qluxSDG9`dfaQm?t%B+e#TZV4sMEsi)d`uOfZI(@f^btMg^0JaFAbdlCO zL`))zZViN^5*cqL{XFx)6ImLHq?d{}PsX|q`Jk74nT(Iajohd!-@IzX%JnU-d2#|N z@pGy*kRzj=DX)>`!Fy_{Yg~EoOx@zXT^>ABKd^6k<@Q9oryxr<_KYG-kbLn*lN}Fm zvSes1s5>zj=TpyU5it@u<==P~>=mGfZ>GhxGSZ?JLJ`xz^+p#56!5OW z(8kcgbaZrw=wp$|jz(4~*FJo+A~@E&+V2S8b&l{I-F9@MSDDrMQ5qs#E*Sxg?71HS zEW(#nAbQ#8;J2WGZ?5eYo83C2Lsp%lgAm}U)?ldZNgRH=Qr2AMbHko$4TjsE$w^Om z*ZtCwx2zF}T=e{;(tEWSVscBv$`DnHa$!9>UjAiBm%lFQa%dig{#<|g^6!_PZAky8 z=-HiRwpK#%a({aEx`ppBJquw9CUJzYmFPb>y?UGR_>PNS{UZ~kiMx6eq<^iqcak9O zEfx;sdAKgKLn;*TrUH3i-CGHIjnCFs)@uUYqlY=q&E#HIjm9GCTi_3imhweX`LyEUc*Hmie63NYNA&Y!kXx{ zrOnEehoaX|6x&zyD(a{d5cVdt-Z3EGACQ(CfW1A3cBp3Z(h7Thr)atVu24kM(SJ7} z(#T49`^4EF34Szl|BfMCwtU};@6-c7b_Ds=Y@tc+`S$fX-YNL8HE7S?pgr#W&Gb4# zBIO1H>aO&$r=4L^P>Lr)0q}? zRQgHxIVZ}_y}-QYMzs*nn0q@;1G%~RCMI~bDJ)gD=SSYbb_NdhQR_WXksg%P%SK7% z-ovDl$MkstSNrwi^mhr|_$;*(Q-9-*AYdxJ%JbuV5cA_F6~Nc{;j4ui&f28QfW{Ih z_qP=;Q$Z&e%A)>7$SLR09Y2wQQgBV66b!URZMQB@mf)TqvN-);o7bu(B;9-$0g`U5S{{_Ttu08pZIuF|<@95oU3Wqw z{F2nS%gZO(MQGmMh`q|57T4Gl# z@exx?4%PcexT9*W@-pZfg?hHm z8Ja0BlcI|@LhWT(hLmvvO=530LWr0!kXoR@Q=Tx8y3WSTixfJ7=#y&HR()Qnd_>wg zsRbG^Qmif4X^5;Q#gc^!4BY1}#jBRLvD5+^Fg4IEvY_c<>~%YWN?fu&sF>PedrX-MYIr_dC?Bl`mOxz^PmFQt4Mff(B~Wp}uu?C~{`jbh0WXN}7A}wAfF7 z>MAK)%gy#Oo2djhCS~p@xK^&_t7bVSq1PN;Z(2!AAdhDEm>kv{Gr+s{C!jAizOI*h zB<9bE)^L}pulwm{ZH?tR2SfP|hDw!AG$xpCunD-~_eLY>9KFNeNT&G6j@b5H@$5er zQC}?AHMnNvj@b5Rf`T^m{$~7gIKSQ1n@4t7g|<+$H>ePfr4S_No+}fn|6JMhA?xEK zAFlN;NC;Z^LnEQLcZ}K2Q&?V(2v5ejI}eP5*HM1@5D>1>2m5B9*(>{avd2iKh`y7T z3p>I%T6Z-zJ<|;lM$BkeZu1#ZQCs|N-irIZ69?wqmbjeN%*Y&u zm4URu8`+`Z8Tqh$a9uE$?$QNsMHfSb0fhEz*l+H|*%|ccfcnvFm!-KO%Dpg{QGzE> zWw~Si=#v-*O6;`~x>AR~P7P8pKs&;OHtW`?O{BB(MsLFv3(dX9y7^Mvf7n~G#F`QJ zf97LLE3-0dYD3<+8b1B;5^ z=q|y6sM+p}LvaCC&IxSRM%#RFeB3A6v<#U|mhU=m#d>*y@wZdaGS_u)#Uqp}iKTZo z!V-Ecs2x@LyR2Hi^r{x5ZTR4mCEH?IUtiB1;(PWT%OX%fm!jUvjoyl8>u~N+N&4x= zSjoDkbwzIsC@R?$FIiWDk((>GBFC5cFz#rw3yVq*cbidLF1CN`NYp2gE_;BvPX|a)Q*y7(0gUeg-P|RP?9xb-TyEUfepryOw zF-9^{LIh)hOYD-ZJ|n_rDcPEPPC6W%gV^*1#(FaYKk&|$*LrrwxYdW zi5prr4zXBzGKN-Z!dp>abspXARLyYGsJZh*7g}d_9271ZvQ3Sq#kuE(#!Bu(d!*$4 zpoGh9ZiG=SaY`jaw#oN#s%bN4TX$x7SuC*dz~_^kvpC%nL1<|>V||ZDpZoxWk_Pse zsH2@qg3wDS0KAu%_25KO-kV&kz+7Pap}ZP#^6GM@l(PU)UX2m4I;>LH1t(H!!75^j zDYqDsb%2yxEHCmHn!3&oAXOC}J{Ci=+>n=BY;Yi67alPSY?Z58i{bVkJF%@gJCjtf zkjIwh{0|-ymFhsgJbBw;!21MR2*c1J3U_Yj#;p^x(;v4X@4w`AJu&UmTsL_Xg$d1k@Gcc0XEU$OY| zTkWi&RcQIJ8CINk~~i4hAhiNpKWa#1jsm~d$-r@!S4*1MVuGk6K_g&B<7SD3-1`wH3t z%l|oGFq!JWKkDtBH)XV%(x}^ zmg9F6?3r$HeADvaS=Zt~L7jmDiMIp^#J4p-z}nS&V9uo|tF^Aht-Ly0c`Buar&4a+ zmD_tzN>M>62QKOiT&R?wh4zP@8~tkXqL|+j7;lxJ6y}11)CN zmT=D&t!LhU;FfcF5MLg|ms@-<12SVoBUf;WYJpTCuoZKLW5mgdtPpp*hTo}n1h!(n z*&z1hTSOCl`zHMk6#{~!Z?Nf+`#z>Li=_X_`ot|jEm zC~d`wvNFb7A#BW`Rk<{8{c>pvl}q+;YoC8Re9%Z}4ta$B-CZ4zG+MwK% zu3R8Kh_vi<@hxrkd~4;Cjv&9zAniH#9trIp11J;PK_1&4&cTmVALSFB>kf{D@FUU( zeyHCg7*lOktp?@SLLfeXB#}OlL;0(M{H6Acv{VQAwLT~xLWux|qym`YpoZ!XKt%u| zA_2&7@Im#D59-&_QT~}h{o47e-vJ4SXej@AL4Fq>F>FNb*NW13x@V+S%Srj`gZ%D2 z(lXn{wjHc1)T}Cs3)d|- zL(~B3w^7W&(py$p4dqMSO0H{hE1|A6STWPUYf>{nbIJ|*49dG>$67Ml`c>B&tbl2i z$`3+QZb)X3U(3QB79qF~!T%3ZRz4*(Gc^qqCUxm#Z#e25<(D|jGDIf>ToO#RAc_kO zBYUBbZ&Ur!t4H=PvK)Cm`=Byr}k>|_5Tf~R~A(K7zxE&YZku@P6S3#hE6&wkgI&OUOm7xAd9F}1I6@=&X#U~vdD!j~L4+Z+PfKR$pETlvo1*-g2?(`4w z%i!4`pL8^+@;huJ72=n{GZNsDsQ|AG@yJMkM}{P+BSqEzzW8K_M@9myBm^Cf=v4jy zOF06cbO&E5z$?pxXNXTmS{>e)>W5dR0=%-^(j7h->NWflbW(Z^v(3?&Si)nmy^hL- zBmCcf`V6rNef1eW`P7@}GekexPoLqbe>Z&w=WtB^&gAK=JsshfX(`H!YD5oW>*W6W z3_rG*qv|uDxLxM_`({@cp`y{_@9gisZ?%2dKH8#BIe%vrgha}%{wwvRU42)N?fMh^ z&_1vGi$||Z9~v-k3^(q*hX!3miLRksCNu9;-p-(@iA-q~F8z=#mf;Av3O7p&6`S5r zVO}qLR6L>=P-8Ta{y%a*_@dXWk2AkbOX#pUS(4KE9CHzszw_HdQX==g0&|Fzdo>@C*MfMYF> zVEx42YW>9Cf%OCF$`X7>)=!W8uHe0~w+IgxbQ1j3a8o~z zlv%JIX6@!$ZaEgz)#u+`#%|~N!{zRoxs|7v{uPKU^-K>u)loe|Uoee7eQGKc<+6Qh$lv)zIuDHd1%L1~>M^nzv(22?-NXkzlH;{=Vas>*QS_`XC}o@A1dm^? z?dI~}rFW9zi@v`-$TBOUEEnmQd%DSTOPgiE!ct5PZ^2Fj&5>`i@$0{V8@aVrR@AF| zo$lQ$aA)-y&kuVcjPa=tdrj)wsQQd!;>%*wF-Icvw3zZYHEUm^XsaR4e_L;ogJf|X4U1KEeu7-$YieM{WHNm;SqN^}~SGn8JtFxmMsqYitW~HbjMdI;|+B9HB2Wvzkg=Y_7kZ$MVtvyh`$w zC~0?Bbaiwu)j`Whg#8LQt9?C;b+>3}=va`e$G=#cl@2@H<1fq&c%j3_S4DGN)p*yv z51=pMxtq<%QY}y|rnq^C+FO>p)ZCSSMKfox;_Ig~jq>2p+C~!3&`X+x zl3^25(>Zab!*3dnd-vYkuQf}?ObVVr~cYt?KsBA zboaWq&)UKNl~*4wokHv0eD#pcI`eiGkjPWv_y1GY&&0dk@~L3?2(O+kFT%?i09FiO zN*5>!#t0t(_*Tm=aMOlHVglS-NI(z%EzB{W8{HTG&Z3rGz!m!B2T^VNSU>#xi$8jE z{QI2m7{=T|xxW5}_gRd?zuVJ?*%bU2y4&}%KN^s^Ua37uuy9F(lr)8{`i?=-qoK8a6e zYTEl{>C~NLc>Xs`{VQ=W^Fz=E$`$qJME&B!`1_Z~_jGru zVh7C|O6+pfp*ufM?8HyL|H%qbGPC~rs7;<%Hu2P#pQtEmn3~8A`_b5wihkBeOA~(S z*}$`iQ_13dbdH}LxpIJ%z~XkMGF`V;Wyxe(-gfRs6@Oz}5N}G|h6#*S{LK#p z@i&X}Lrm!2na~bYxq#?rT*3v2a5X^vmWK^6J=+dHY>W)>Xnuq?Q`fUoWU`q#? zr_uSi|5Rgf0jS~FDC6|>FUP(4GOGy zkV5owcO;hE!{74}GLuZCzuxX&WQ4fI5ol?(bQRMxcEd_juvPPECpS5cd@Q#A;n23n(p-@%>H+HYrcvNJZ< z_#079W@oIAZQsc{*S4sYo9t0W$DkMB84l=9ygh?5xFwHLoA0ibr|A4mwW_)v%W+=C(0(=M>S`?FC z?LX?RSZiU!=qm!hO1mL4Hi6b-=ecKa)LXeFx2w$XB}fI#>12*7szL;W!tEsojHFoR zYVuZYAU*d&S<`QX`IiXc-)Kb?f;mos9X`lfF4qMi@^~(PVy^2%viWUbRgNIpK+|1y zijpPh;clZl_L!ZMIwu7l(^F557NmxRo34T<3|ur3Xs0sm@ajSBw~&O@n7V1;8*CQJ(aYb%dF z_*eAY^JC}1j8ZKj^2IHP1!mM8mw|l2tL6$OCQVWgNkDE?EL%3XPV5$;Us$(ui=Z-* zeNmNYJ1QLb(+NVs0%k@*0^?Ay<$P2q*iH6ycVW4YEvK|3NRBB*g=?#fEyYLH+O?qp zV+ziDvt7d~Zvb2XXdg96dLPyl*%no;RU+9IRf#wZm{X*<>ob+Iq)KFBz@8#yS(Wjp zNLg0()(k2N+*-9Y_{gnQ9fbO@sA&7GHb8H}qymsO+t3-ki*@57>#Z@WNONzbnc01z zzj~vbdQX};0a#+449f*?)Q3@`T1fsvDAnvbXJ1pRU2WE3`=;V_VV`sfx@SgWEV{*o zsEc27_nsw6_9yJ#GnbQ#&zM*(x6mR#S>;Ufmsw$_mJl$pYJds-xmbPyW!o2^Y`Y!G zcIwBpqTpgB92aY+z5y3&2hU3vYx%elbPTM2FobQM4k^dK+CCj)-~`!bEpY=)$FNJU zubLbqp@)$b%I%tMBFSI3C|m=h^E$Hn(BnOPEuCHNe1bBs#Yi90-JMiF6ICx-Jv^(% zAB}2Xqg=4GM*Yg~@L#s`>M72uDgNm2j2dAy``#M=QQ#%U#p^jw20QdaGg76dxYF*-1u5+EQk!}w5 z;R>w22h$47*;lSthiI6Lr#Wdjwhjy~>EM{vA-Rq-%oty=@L*}}b}wS%iN#jZp|4{@ z9adAYqvq&|58)EZMO9iwVP&u-hPpFL)wz)B(y3!(RnkU<>u6Y;Fa#|;T2m^Ub3FLh z4C#ouyY%82Ou`*AjJ@SnWg=jQ6?O+WjlNB{dv?AVLkG*vN`|}A#RVqLZe{iZ6t-c- z+a}(uvI8Jt)dv8=?6Msc)MpDJniv8H7xL!+8;4QnJhq}3WnbY5NI&(?@yFbNz4xCn z$ikfmf9&0z_wLSncjxIyH|F$P?7W|bXyBXi;1&ZpgaaA^1rE5Jcj11w+tVRkh6DEI z!QDw>tUh4E_2R$nBtAp|?J`-%+sps(OGonGzGHC(1n^VG;J>XrQ^?<11Cipt33{Ss zWb#PIle^3CRq@|exz7jk$N(8Ux=6CQs!^Gbg9T@Nx}&h*j5T)@7M!u>j*kTw1;YN% zW5G4R1$g`Xx2rfg9RF>7fXuB4khx2=LPC*b68sAZ``BLg5-iBx^2ioL=bD7h1^hQ$ z6wNXxS8@CeINk$NNjZDDV1lF}`~^x_fj|5>|Pgp~0G&L@PSp}aD0 z4sWfg&k#D))0x~0_|MrKD|s+h@&GkZELMVF9q`W5z;#Zil!B|9 zwg7ODrLs81U6>HdoEf5aN60y~MbPrVQtpo^;oKm^?E*$Zh}#UFLfrO$QGMon;QeELrlq+T63ay;O9vWM>af7WW|-RsFUMbniEWrg`V@_%t79_ ze`g5TE`Fs4#t|W8>*vCVoFW+5*w%tFnDNm1qg_&!=R}5ohGJHz&(eo~W-2X5hbcaB>oZGCxUqd_&8R(+`fLoeUtpuv_zy8U-P8OLj+-{c zG+^TX5|c^zoh0J05roIMYPlCGB+CKG*ki{X!WT7J?6r7inMoi5%&8NUa zbON4@0_C8T685x}$&d1B^tjrSBK$3s!IqKf~x>Y+zRTo7dRr;9o#x6?QtwScyKEoQ!U%Ifn$%(d`Yp|x_7Scz`W zL&%o6B(tL?d#yx5h1MvK`WZ-JiSH2%scaQx_ylc&3s{0i*=W?>w&#BHK54#fj}6%_ zys-$6lA-RKSbWlITh~XM%~+T?YCKY#&16RiiiT_*^61pe@bSLWNXuYy!@@r*f+xR- zwkiIIxZRh9+sz4ZyV(x6JLQ9ard|6=xNH0CFHA*W?Ze)+-zjX|%|~wBj>5*3aYP?2 zPHk8za31KhQTuG+|FXNb((T%+WA557u)bsdh^k<#hWnH)dmLN!$PL-E?Fu_VThI1o z&-ODPu3OlZ$FUnrucfA77uGnDDVq^C|90X921Y){{$$T+!wuPPdy9REU($@u}i9}w@#(Xq}R;X?5?Xm2)165HuR2`CIliKETJ9NlaiD%aZ;@RH2 zE|wWyb@a`)A#g(a$KGsfLToQ;*q(5{-=jDd|DMUvK42#k$Kl&sA8t8O`S;H_66YIe zaRq){-7#>!4}b7oew@xp=~VvruoC!>@#C5~G#o$f*8xB77Xd%+kq;b&MR06>+!8|v zujBXV{J6D-86Gb`ZU@H<{J8u3^5edzI(~orxPv|Xxberqj{~sg1DM{A6SviQ@Q#mq zI_{$&^8gU?H)18>r#$4GJuhh{8Wigc=EaO72OLGE2zjbw#le7!kJ<_fE0&*FkS4cv z<^z&}f>mucMi^lnTf3TT3?8@RGaHZI-b!?Llr821o_B+nt&r@UFF5ub1s@}>tv`EC z5>;V!j$J4e7}gxe#IH=S>G*TfFuJurf3BwF=@6T>7Vu(dX^FY@&h12938PjVS-)^% z({GGBcL+=t^Iut9INqk6Lht~KVkPV2Lr^w?f0-XzQ=&oKLRs!vH%TzQ;t!S@N6tjS z@{|EfuEy#7ObBjHugSo>`cvj0+${v|k^q6LcL?06pMT#`cHZJ1>dVBbS?#o=a_7RG zcAVTf+iD_m3fwuj&3=#Expy~Ozz2VKqy3@meC`R6H=%96Z&qD@`_5zGZ*}n_@wXa_ zE8uVMI|lxCY5BYO+kYASE%4HVV;-~eL~aT@ZcnWo_5^IZd@^(Se@LGCzY6%o9#7Z8bKa!tPz;LpH1eFp_WZHB;)N6N5<|62?e%RT@ zz(iEL;g2pleO%aCJiyK-2iV!#VMp0l-f1Gx1O0?Cc$~WSvbWkv$BCY~t@M`CQ!^|; zEy2X6?{1`bH`1TfM%wuY$G&tw&Rg=&9{=kj@vn^*SHQn6ItKpr+Y{c!zy8bMU&rNT z<3GkfTTsBio(}M@UpoBjlqFgr$FI+Jqv2nR!&5{4HISg1Zw=FD3#s~k`fSIP&+Ij0 zdohllE35Gz?9E84$=)0?(%j8>rr$Q|w*?h9wAc*WdZ-|19f|Ptd06-Uucf-?b0MI- z2>h^_>DVJAODGIxZ;+m32@x&pf9a0jKxZV(ByXQ`7#Y}a`NvOXdu<*CDpcb^bDSf zgObL}nR-P2gG;T;wbx#I?X}ikm+$ZHG1?4=(Z-G&U19Bo0L`nn z*;4Ziw8~3uAVM3~TC0fw!0;Mf^6|w0(w_fBuQ# zxATU?ZgoRO_rU)U8Wv!d(B1Y48$xm9^l_yu}Si${ZHQI{K76;$F+Ak-+!#NY>4R5pYA<)oKRl3 zd>YS;ootacEQB=LUAf-aq=!qK%X`Q2c!!8WNXKt*Z*|e*ZsyH_JbK@#Ca7GTTJ*== z&)a?PT3+`L9Y2}^Gm=!GKkqPl+|=PkAhyP<9mT+L7FD`Dlyn`(83Sr@b1am!u|gC| z`WU+tzqN~w#XkG?KO7Znx$8(9?}pJ9bRj1P|1UPRUzMCgAMmG}Xfv1jk=t|pLPuj{ zw>O7l;CA{E1&YQDecMc!Ne|Du3dC#_^TAlt0Z7;>`sPJ2mu8>fjQeyNPuN zT>4eL+8F{SZXHdt0}YXEX95Lje#{aR+uQmqF}c0%X%f6(O_%#^INrpXxv9k28xW`Y z5vpD_*^SYfQ>|(u>0PTaX}|5j3Thq?VHg55vsN*dAL$BT3L{|u^yKF*;g z6dmc*m|;QUJ>Qo{7ZFwu=oZ!2sJ2jMg%2`EceO%FUfB40B6)0_iBV9OR7om8S zG=FJv6BKUwd=5(}ja_VMUz-NG3lx3mheDq`gX~NI7%G+tK(dSXS z^>y^w^y}ZH??hIoe*L@pT-GZ0n_c5RT*Ci0`>3J=BN9i^pTfw*s?|;BFa~k+4f>dB zh`uGiH@Ht328K%5wez}faTM+nkSC79dx@Xm0w?$=3dC8E3#2Gw?`pd0BKFFZC}`8j z6XfhhyU>_(AsddM?E!ajvt8Kuxws6aPiqXLr~68u)(~>XJ*~wa#e&$i*=p24QJ}{z zG&)g(eF2S>FYx|Ef6zRzU6m*ix6wR(mc0EI<34P3`F`G)&vRC-pS#&M&2-i0=5joY zzFjtvRo>10Y@46W{x|O9;%0puvqTinOyjI}9q{$L>o87k)+TK@c~yU(FYmV{e;vlj zEyiQ>TTvJX*U#v~$1|JEM<`C;aN1UmXXc`7MA0$6fGfYIfL%NG**n(KOzrI7g}mjm z%U^EemtH6^Oj#`2o5^n%^7TnvdVAUfPlE z4=x>GFVdponWeBXH-)8iXzAo~_cxPWjPVj4>@F6pPOKbf7r8pJavWYHb!O#sdcE_5 zOOatUwStE5;A#jDu7;9>E9#Ixxf+URd=wmZ@X@8KQ(fG+06gQonLM{EXQE%z`wBb%bi=`z-ubj$XQOzW?s{N6&f&&)597LrFf2UB%HzAc^DB(b^ZOiMJ|v&Wx;n^Fi-egW z8ed5u9@DlR6p!a~TgFsng8MT;55;RQ+Vi#5hls~>SH6<)T~3dfK9 zb7dFrrgj%%Nl#tBQBCI7_3M>LSBmzs z)_f)-rWdw=9Qhw%FU0%LPspsVdg&-l}eM*GHStGd{<~n`y)`02;^m>$DUq z$ib9`*t**n@R(^L_cwMwizc$}HdP-8y>u$h3|#K(eK8+8wBwl7nOVe)X-Z}lIdqxh z6P$R%(}YHva4>^s{v8%r{nh>P; zZGt{e!S03Wn?hJ39|A?TZ|I0K9HeG9NVZJm$*_5)eP|Lk0Ot1CDZsFNBv~nl6>PG3 z%w6#B6sf_K+q!ryN~9`{r4o25c)gSloKBt^DZHeU@JGApYQ_mtLOtY2SU=;;)d zt_#Hx%S1&chDDrYg}YN+ozqjn=;KgSp2^^uA`AmH+cUH$;N%kLQ~^O}%o|n6+;%Q` zoX7#?pXX|D2{nGVRF>D>g=j^lXidqw0A=K!kWt=#9+HUQf|(|B@u79BSduR?Ck5vm z=T|$-`IRJ7t}9J$c<@HW2%(uXCoJ6% zoFKIzNtXOD>?6G=QVEhg$=^6&W5CzAZ^9O`pYq0b!F{Hqj)bOn!gEs6QA^T+Twv`p zCl2_$cFkirj^=+X>r@2u=&&?a&l+RJc=f%=*%(C(qH~O( z+yiiTGM7lLlsr{d(au=|URPN{-A7g(@pgZ8Z}pCjg=QN~{GFg@f3KN8r^jzkk72TF zMpkNyq+e1oDs9RXYXdd!;;pD1rIV)@Ute#pmnSaXj{K_9%k$~+(xaM}Y}!xfbIG)8 z${3t5Y{2Q&Qa>6CXb?v5OH z2ltNe*?%9(Ss4C}VGy??nS1Ief)U}Rq5I&cCiF5CSpUh5`GHV-2@~=O+tU;B&IOmm zW^-hNNDZkm3QjZz2jFZ)PFJb@cpkPbrG1o&0vWbC52;zp%`EEnrsOuUPN{%d|yU92^g6?=!=yR-?rsLv|f<#Nr1s|ygKJ=$;Z3CrOjoz4l% z<>GFup@#>RaDEq5mCy09kQR5pF1p_BrcF2z8pi{QSy;z!I#%b7MiTA_B@qQTbf+^p z?gS^{j(oW)>SI%uJMkK;ZDX?5)y8QmmqfxRxFniPW@^R^;5rx$Nu$W5+gjy^$c+=Fu-`(i4iyrXS~9{9kEGogJS=4sZJO|6)tzb z?JM|=E!q)RZhQza!inuqIWYnUtdk@d?*Pt+n9xNz!V>EGO!tzucGWF9dNghQkU3?@G?HiYm|pm3l!hWC@YZw!SJQG#(C_`?f~&7ePJYzA@uT+Nu?<#VVjcsE*dx+N56n>zqijoc5*VaWB0KQ(@ zpz$|`VYbcYeJtDQzC^;V9lmb6*}9#uTaIUVc&SLKG{j32nmre`c~zfP*zDy5p_IgN zjUAIR6qwkry)(Ni@0wx1Ub5jx`#Ug6muKiP*DgG(9P8JPX}^TPV2Rp=gMhAb25+>6b++P@6zEMwB_xA zT{@Ek+uz^-b#W2Z*fZd1EmF$3r?pVIa8GNo7N2(S*5@Hl$9Q0S9v8QjR<9Kr70}oh z3%D9|zLK|@pTK0VT=Z}eHBd`4Dxl@*3uJ;_g$*zD_p?=mYs?lQ*M6;KJGBgT2)H#k zFc!C4cq*^`P_sVc&g}O0HRO8kG5d|AkbZH++xlF7Ti$*X{6uYN8d%OW1p|zT@NkAajPm^O>Pyb{eG2&tIPk!!}a6WRVZYRhwCfig6V@&kC)zL z?ab2n>7%NC9cCKWW9&B+M#kIR{yUKSHIx)b%Lplseqzg{;T}qHR?vM(ao*%OM2fTA zU+%Y286?H&yqSEznRQtbEaRm(njmh2bW$8m0KX&mk<`xgwEddErg@E<2-&GZA*=i> zkV->VkR{=TL^wiB*qU=&&l)#tT#$P0R_?1bxB0Jd4rg6cwrLOR$-9A(q3#jq>BsNK!4HNj8r!T^J>~VzK zlgjrff2Qe+`7_N;%n?LTYai_+i3lW}lA<*y+!8+A2p|X%gBuNPXVH1DgX5h5f^R?j z%LND=5Gblexa+uA=lI~nV(%0XxaAZA>-QfJ2;^~~d0-HV!wv-qzHqC<0~^2t8F-H~ zO&DeZGAA1=7mL+@IkV`6+D!1s4{8t$7k=wM%H?5iJ$(py*y{frAP>9aw+}53TX&qv z!=~IkP#*T{mNT?G%zRq+u_|L#2lhgyHU6g`5qJ)6W7p=b+N4kEV1p)b(S0=m z6e73O-Ve?`Cw&S`>J(dt-0GZKBu|PCXCka|nd(iMS$B(hTdQ~mpXXHJ^PTwHeD0ugd|M4nY*JP1>Qh-Fv=~fbUT>5ytLqB32NtRf zpSZ5C&A#u>CvG7Wr64Q`4GzjhOGCTqKzd>ZKjZHk!rx7cv3Wxoh?Aor{*W&d`r(3z;H_`n-OesY(L^@DhCdok zzPY-&mwTbBn|k7&hPKfd44AK2S=iv}2Kfm7{&02ETk6|JG&fS6yz@HP8+ePH2QZ}x zgM!HD{8}F?#DcI@*)z??Yd5P-rtnHlWeU3JA-r*06!wkkOC8wUTiQlO9|txB{Xm4_ zUDwo>xUMll0~R?um{a}f_T!N-FtNOZfi<8hlUbBEvmBeAHu1EY2Cu$IYHVf$ZsnE8 z7FbDcEJ`E`pzXNPZcc+Ff@=T z;7!KjTTAH@zXL=8-#ny6!HHkrUbHBf&ZK&ff5Q|47;V|bONS5w*nLsvWkP@w&cD%~ z{0XT}NKcX?wg(syI5OOb-OfHLq>Yc!Q%|@jjAkFE1fb1E$fLd52W_FwH9*Oo&65dz*m@<5KI##c1-WAx$ph3Qv6#9P0VDZbegwp|*@Iyg3mrlw1%Xnh$+SaXaI!`|SqoOQ=L`k%vGXVgN@`VIP& zY_TC{@CNrGLqZ^7*X?VBXpG_g?;wZ~`qrj9_32?`K4>h`I&$4{2}<6@#_chGhaH+_?cA( zQ>5RoGh^E#apL*Es_^7n;FpdgZ~NDQ{LGb>Q<T9CLIvkHSq9%ZotF z>yrzts`xF+=ed`qx(D$a|Dld!GJd#`-`GX>u>l|8@)}ofGn%?5qW~?2=VGzkNaPmh zU7|TJZAsIN%XUi{({$Jpi`5j*lI&2eUc#<3!8EVHZYe3SPlms9%MzX| zXCY2Qfjwj)UgvI4Lnl{H57J++lm7Z~j(<4zSw^I3!pq_xYCKJU{idYVAU$l)KfEeA z|I$lK;%QkgOnrS8du=*sKz)5jFiqO)!TD2C=CUzVUuTR#1oB+ck$3%F?E39|{)C$8 z#yNC)>E)b5u@;?wU+>t_-1>NyA!_8A;QS0cMCVnmsDQ1=!_M^^3e@c_#u9bB!?O6p zQM?oQs>T?Eu~*3_qqZ{7INVp_lTn21z3}N2f4E`7k5j>;IJM&wJING9&Owj` zsN?Y+-OnB6-7h*_V>w||^b@={-otB`I`&t`@e7^DMs*1_=`_5*;C{R*5>jr={pcYR zXATCX_o5gm+{tWnlZ{WgoyNjMx!R2*5V+`fKBzE;a52T!{Op4FUEbi(KNSndkv`krRa`H4Cgvu=)H8E=--Dx*&BS zCQbzkuysf)_@KEHX$)AI&&kio$(P?2J9++%>>Bl}`IA|~pXKw}G5K9R$NjSXb9Gg+ zUJgiphK~~Jnkv5}shTT~Y6{+N3?#N`sEJLQT65*cGXZnr#Z0hI5d5r~)DN|ZbN@21 z>uz?ci)*;}^zYtmJiRU2sH8{=PcL_Vjjm>lrgv}Z;jfIAS<-H0PK%TIf>P%n&sNn# z6<-_2BlnOsVefi!j3I!PU~thQ`%Ie|0AhK4&=)N75ku%2N@~ z3-aPG>?+=5RjzPtW#{N)T5}BjD0b10QvGnQ_+0I4G#_oiV$H;RY?e>5Y@SM6tY^AH zNtUYWtPqzvmF`kLUb*Vz-F}lUp0YwvZK@@EfGcb@!kc?kVqfaC$6}pZcpaP36KoQ% zvBjr(c{-M8F~w+(=vSsPxVPGQNA^-jgps%QRy$M4Tk)jZ&J!D-%&Y0#ylKB>ky^iB zd4-b?FuB{TXS`UN|5+*XxsRo`;Ql1;zadxF=NyAYdNv*9XKr$$evoFRzi@*piY+_O z7R&}W8=gO|SYJt1apssNW-QJW(<<-Nqn~|2#QtZP7pd51_x{5X^HLP}Iw1_?ehnjJkW5pR)8$RM@+-Z+P zo$&=U;rRDjh55#e8Z_U?8+yKR)6X|je!l(SwF>i%k9DmZ6jDp0)ij#{CL>yvOts0% zz`@)X*14JXCpObK0H!x}T$?Od2kQQ=z;gSlc8oK7_;dDc{Q2^Y{JDs|y^bv|6S$3% zE8EmLTk0EwpQJ8H%}8B*$&8DIb@g8n-wPHO{-(Vg-~SGrL|4%Njmm@53(E)K``E`0 zt*_AkG6!47k##&*Zohk!OnaScx1bZ5(7>8cYU+c}YL0dw-_; z8E;&g0h_l+Zq`#y$j|c?5c(Dg_eX;!8RfBG{11i(SBV@@nus2pFHjP6i(}3vA#`wz zM&CL>h}+M_uD+0+&DoR!?IN4ffqJgwp&ye6oF#aYr%HuB+n9$<)#rMq*3p ztRXS16aqD?$aK+fr!&J0Z6q_!M$$RKOiy?XobLQ!{=6KhJLv6zx&Uwp)J?{Z>7kWw z2qFjSEfzLD#Or-vcIQL=K?MQaAj?vI!Wf0S9bT7j%LCX*S`eG(@S+ZE;y4GNdxZ%$ zr00UklD<2EF<+CI)!wtF5^}6rT|jicwY%@=d*AZ0tsMv#yzZgpIMYmbFlKM|^Z0`R z`=al3-9}U|Q0^UV3V~B>bGrIIc{eARtU@~D?_3ZxZ^g|nkQX~^H3!P+2;yW65Vsoi zzxQB6^~3mdcP`yi_r9L4ekg-?%{siMFD!MK4)k_0YMr0-G7ss3u6gSS}}&iHMKnwpKR-+bS;I;XMhEu%6V!1AC|)L1$0{nwI;m5alvry1@hcp z8IGq0;PLjk$#DSk3t&kIja9VIdmrWT53H3up7@W>!yhN}BSm>UVrj|a-{9c>7soY7 z43NiP<_x@sFwOh)i)@cnZ65xnbDByX4?Y-?Jx3DIA(SE{s^VUeJzp0JKQnN5q zd-(8O_TIxW{M7_g_~8d=FCtJK%J0lVNUXq>`z!OLHL4nnwSF+P1uz%f zbVbmp`5TTt`G>XdDd*`PUf?LUDDNL2cno>FhZH#e^V^QiP%3czDo1;0zjDO9Kc~eI z;&_OxF!fx|%B)tHIoYDsiYA}yPV=f#VITx9t3qFc-&Hn?w4${NwG`v4jC6AnxP+<5)uSae2TIX)38z^h3v>rnl%L6dgseCbS6^Nv;wn{x3OZL`JNSvJ%(jIGXt&*OU$~FtwuM!I zbmbN1K5b9^^y+~m*(S?zB-yq_FN75=!mCqAJF4BTy)449Z(j$!5P&}JEZq92t+6~v zwcQ@gM32=w*-9_(W*|#-&vkScet3_bEGOpv-SQ%0?!h5+&v*Q*NV$y$ge6vSJD5Z) z80dYP0_r90(!m5I|oe2X%4A?4kd@L1&TZG zOBDakZ45s<)K6j;JDx!ZVgb5lB*vIKN)ScVYq3^k6#JLR55!(@m-S`_jRajor`JG>w0>G1$~NCO;K2 zG411xraL-CxH_p&BUEbB_#KUs9Ocglj*oXN)=esMMD6%Z2wrqvs?NPZk40B#9J6V{ zhv#tiZoMIdUnCgJvEFaY@GG z5&}WzZIRpunGj9X$|vBdLNqYoo0LS%CAU)$gS$nT)}~LpUQ0gKx=`bAMl8YL)on@z zN2P;a4UaUXgI?&|ybJpUHT>fvpvcMT!Jm(s=Osif);H?D+inxKwfl{l6gvatDUra; zFHO37yZPI>%fxN&iYH)7Pt4nuYcq9-sn6@X)C1JTV;kJN)IW<*KVe5T{IGR**+un^ zz>O?|E`_Vde+}J*Dz5HE z8g(#E|MhAGqa}J+HSLl5e6f1kdi`qJYVW{hP>&6+Rlg(E{o|wbid6ScK52gatNKxV zU-VQSk3QyjM{jEwb5}$AC!l*xi0ky-8$|+_@{A(;k`G72y>Zb?qhgEy&FrJyViU=n z=aa*1%q8pjd!FgIH<^w*8>&>>7jR#GZnPDP!=UY1)O8QP#1ihPaOmmH!oyvR%MkRm-PfRw=(qom(r*v8czVWo3t!XKh<XaxqTe35gIS_I$`}Oinq712E0x(bo=7iKjD?zb*X$YrNwHsc+i&O;e`poL zK3_iX%e&wA&mD_kmD;1@QOAM%9no)ROk|A|x=R_+Z@203i_>r4f4e`E9FMKwE=Tm+ zMN$4TA4wzn?cR-=DCp?)5;KqsaSS9&_>B?$_Oiq2Rd;Cpa_G1J&86l1*6W@-9KZD^ ze^ttFJ@)Ct@LS)!$M~&x+f$`3?7wR{!{E1??+$D{KRxj;`P{?f zpPFtD{L|6!Pj86$r}vlgPvM>RiiaABu>S}1Pb1dpm6{I0QBFE&98;L5j%kX*3tUhb zqKW^sT+>xIW}%6SUT~G8bxtvepO>sJG_5s;>8(qQ zgqm1@YfzYCdHC~q%|d_HqpgRI&aEw0ByNFHsOQM$zY)U}kI-mlVi+S$(|O4`+_|;X zXb`z%{0_4jjOFeqH5rWMR=FCz#bB*eKHKto2`Zm$x4A?`i$O%ck&zSD396N&T>AO$ zF)Tb>9wKY*WrB0PCy#Vs-mH~@`rPEqtS#obV^pJA3zBY{^@JRBOmR%Yu~YvRCSk|f zqZ&@RFSF?2=-ARL;r}&uTr?`v{rnM)9aq*gbsT>krzOg%C$;FeDmb^^bl+##Fa>9w zo(|5Pg07>qAe|$Qu(@Fm<$89j)2qy9g0nK{R>Jq$j>228J;PItJJf&l!QFGib8>LSS(IP)L!ub-8 zjGHT^AMO1gB>eMkjlY{_Wfnb;uHg;X=uJEA{#a+%2Ry^hY(HjYW4|q=3bX8x1E}^b zn~ANq>;@+{VFEeF+{L5Yh(4{0piJg`x$>w-AAY*I8!C(Er>)|HwijGG_k*+-yqztP zt#ZU(@V(g!-g;drPwL-wHDWKw(g*kI$i!ypy+<>X#(gBhmzkOu;YXDpO2+@45qm*r z;bt1iVk6wl2(rP;&d>RkHL=&PfW6=ZT$Y1JcAH&tP2mK0Ibtuk`lGZSe|^MW(Af+A z=b7d7S4U-gK}Ubpojrj5I=B1K^w%H31;?nci|5MeuX`+~GW`|#Q|z-XBBa0YsIorU zMOI<^N+ZF_9Jt(Kd6CY_`XO{y9-8HJR-~Xi5^sj15%rTi+pwvqur13d#M0!WqVkbZ zR}rOLS1IUBxyMNJNAnG@u=3x0>qh5~M%qu_A5D*vCH`n!*o`uOk&*ri&S~aDzbeEG z5oerl8tnh%nnnsNBCt5soW90@NHdW>!a*Ui_Y!div$q;N(cq+}B;w5NvIs1Cr8(f8 zJ?63WlUpXd%FxAH=a`1bGu|VOxsNp6k!~}#D^Ly!FwRqw2&)pgqRCrrB%X?GaPDZz zV$Mu>Ik-0+yp1W^Yw!dPn1`Ad@lexi9%{(GI~~N$btaUo~+cuPl%LPMFnhULz5 zbs^Zw6~Sh_#~MpuXLyu_y2mmPzm#tsZMl&P$uL|EmU9h}_nHUfszzRB!iX}M*(ubF zd85&o&{p$9!=QvdD5WSOw=?+CA(qTi3#ne>f=1dT)jO*1NmcJcsf0pzVui>f)jb^x z-hbDlo9=uUuhBGwh{Y2?Uy6=eIxoQ5OE*9 z_%)wwE8~gPxXTg!6c+7>eIEq*uk_*cnGyTGvcu_@NCpVqlU5mjw2$Y?`J=a6P9^?mQ}Ecd_OolJwVyezvHi>O#`d#o%zNy@7p5E0gg}^} z3qF*?fu`W)hSgh~yppl9YBNL6mf;N1L05?tWY8DuC z0!Pp-Nol$?1_w>n9Gi4j&6Sk7GZQ?V!41`XD|SG|^n_K^;9S^;VPOA{`H=r~?wnAL z{HHZ?U;~5kG5!%SM2yB6ge#a~-e(DsAf3t~+|N$=l)dDOqot-|uNxh!yO;Vd7#+Lt z)0claq^7S;X4Eo#d)4zRpI=j~dCd>X-`8Z9-YidVb)>~vHntg_-o%wr`v}V5Tt$&s zn(X6kBwWA~64xg4F2{Kwg2Iab-WSh34tDCK2VoV)R(7YBER)jrXGpY4_{h+hPs=k9 zc;TE@e!08I4$c^zYHyWnLZNI2E%Jp9JbsU_=+{PA`WszIZo zI+snfs!pJS8cWrZI>z0MuUt;;>DXtVllR=y$5xc*eDL*3Lo2+mM9k5_H6_}`+2w6$>l*CVQ$s0C-at9;GTAOSDkCzjbzXmpe#_OZ(AW2;eiSHe;~tI@G%Z34*G zyN!~bRgQZ$VVVAsR(*VX)=!75O#)T2%;tce)wBqoRc83CAKm6<8eMy@EeAd8$2MWZ z&8>vxgpIdVaz`b)L9ENh`UvNh_;)@m%t);N}yUg}C~oJ&jl zY>iw=>3i0@(i%kSyhqy-uhOWMJRFwN7?zaM_>|VQ**&a*QK=qxsjipS)#iL+9;MwxiapYV#QDE#eu3x>r?ZSzh&U+lx46>{ssX%gNRJXWGAkBV5#$6!Ye7w!-GTO5d+itve~jt%sD; zs-|IPWi2RA52YQm+fARyJv)(Ym?)vwcITtr z%IZt_*{KTEfUGq@iIw&`RjDSayyX;wBs2uKFW`=45XdaHZi+=P>u>CS)<;Qbsy^W4 zQI!HD6rE6JX5Axc)8$f<{5CS1rU?f!{oOiv7BFQL6QML5LRIW)c@5ZG7$*+}w~PBuBQ6D_@y z$3w9bG9^Sx6g{t`XeN|A5w%U(zR2{FBFLY*f1sxD=&7k-^l|*wI**o{ChTHFW(W5o zbn@T0)lbsqm739V#P}RCx`{t)C*}-8Hj{B+tS1I0$&trP1Xgco5PdWVcR$Gp&ym1Q z%clFKqls2gmk#i_SUQUTszx!2W#fl-i-u!nSZ*I>UCfB$Smpd!9f$%(Y#_?h#Gce0YTv@A^u5v(4%#3! z1Pbxi7h9*uYH!Cjpxqo>ha?KGmRsl>0yqYzUUA*%w48oc@58BQGPaJPx8y`6r&w~b zlBbirQ)0a8eTdjhf=3vJT3v0HLrZ>Xsl0pc4z}>l9HA>T16N9JX0AJVAH%A66Wh5@ zfT-@h@pSbgsqWWLq9$VD={0s|y8Mk2yh<4vm$o)EDUG@JHhx_rhz>_eG3d6CQs?wc zeM8403vq$GE{%kcs^lY-JLffw-yK_bUNV>358gvOIJ05QZW6PTv*lour6|XfmouT< zbN1RSX^TR4-}r|bs&^4)F17!@)R_BSKaAsU8pj;asK;Q*O#*gMLQjOq$O z3k`H-9D32?;jMUxTOzpPP>MYsBAE!lgo$`-t=ssrAuNdx0xH=M%s9lN3R~;Kr)pdx zzD$R%+G7xfMAne6a>85j5U9kLd03K-U`d$BE<4rNV`WnPtvW?gU$7svebEAx3sYrE z0=&e29Tn9O`|S5uFgn80d%@DW7L3*PziHHB@k>NF{Rwc?d=6{d@8X6au6BMK^;j0{ z9ex$(S>%ff(v?`|;No2>YV?5;tv0Z+>>q=+vu7wOSYo9BjuMVwP{n?*ny;UzzQwX% z1WjlEq*jHN`SD9!Z{z1l9B2Rrd8K;8$y-7PoK->x7_B2>z!%WW2+k^@11y|}hyfSf zL&U(4bii2=9dMRtozZHjzO!qB5j~E~xlrVfD1j1MXR<4uux}Tf6%hev)fS0>uNV<9 z{cj^8fJgvmxT`WE;M5T!z!5GsSG3{y8Ilc`(Fa5XjNtzkrZL+*`2VjR{x8#yyGEHs z{6ER#|7Anny+fyf@fCU$B1@aBMK_zud>uppjuPG|>OAQMMxb zCsuKY{)I+`Tn`8Tm8xr>5zrLhMt_1wgG4SsgjDzt%0|VMGr2;fQjH;sqG*DavZK?I;%b2mi86o(ncXq0MJ*lnkN6{f=mIQRNssg3pEFp0Cjm4+!@xngICk z9QT(K0T2cbArB@38iJBQ&lx`~m1uw_f6vnZAnn7`0C>O`{!oxMbx`Vhv2|}5_9p;z zY{QF25bO~pz^F|}L(c(ynrT2^ntGds@e8=MUt%=?1-bGB!)!}JU!;>WRaRZ*gGdXq51>mHGFd?5T%-;`~HIZl=Yf#&_t1i)s!$HROG1mZxWM^{^h_8q~HBTp)S z5T;6@3<%0sDtx)-TG;h+xLtDw%=gCNVpiPL0PG|5ZsS+xtW}O&R}S zNEkTm4;=vfhZKOY@KNuocR^I7#^lr0_jo-(5dt0UrZ{-;qyUNlvS28pV15}C{3Gfh zyUbGuiSSlDqy@4eb?}iU3eJWofGHMA6zW15LtQ9!sB>}%#YCvma;tN~3dKgK<62R{ z1z{CaVTvXP*Y)=6gdo)IgcKy!S`-BmHzm8k+XM)oPRZ1aOJ+nNdIrQ3`lnwjmwz4m z(~ABroqfRc69&q^{>kKDYPPe_7Im?0Q4QDpUsX8iDsFTfIfduSM+Qb5bHd!7e52%F{N7wAIoKx} zg9B895bS5v1bGofE=RzHZT8aSK5KU&(@snhk}jC}SuU8l1Z4^YTd*>3tBfnYkBZKz ziCw6W(Z6%)DUy0A1aoFFhxSH_+O1yX!DzSyQEt;+Am+#eu)InZ|V;Im~3kS z2_CtU@aZSFBxmXhfz?^MT$<~RPheP4y6*iBQeW9W(<_hFp>x5_I zT{6ybe1UE8^F_yrw#?m2nY9*ior<2&vwtppN!;zau&4QQkbYlu^9-mgL zC;3D8=_#sTZ#;`XjNVLDLkxPwo~F1W#wV__7|MzDNhfhivUuvR>B(Gj4oyFxi@)jQbX8zuCQvI`CwH5>dG|D$Fov8CA+=!?HgPOVM=34$~e?z2y5(>rG+G@dluM}E)P zYir$|?7hf)mN1j82F5qrW5dU7)eJra9FKhW^4lPuGqTK-@SHg-luN5$MPt*_MR|r?be;TOWwwd^9L16j+NN3J=Sn6qt@=%qNw9x~43AUxD!EepJA@Q`@!m_*vCCd+h+VYz zl>W@DpEIlviFo_IYn{>S>_7}Fk9{mQsrzs1E-lK_`kA@e9T}o!o%VLD^D<92j=qC( zfAU!J`_oFZXP!g6dp zfAdH_=!9L39i#8aOxUlvdovYg`nPKO>Ny=TxA7bCH+ZY#YsDr(FMh$(i%gfXJ3h<7 zz+5rL+hHX}c`BuJ^D-N6rX(}*Ly;KG^)!np!TBN@TaucH73s#7j>8KIy-b*kwWKN>@u0qDsVxLP_^OY|t5pcOnCHEW=Tek<< z5RyRmY;`ZM6-l|?9%88fsH$I?5+rR^!d};+ho1{yOKqx?SZm)>^kpB&jA5azX2hm`!j^h4 zRjr6`sp{@j^x6to3Ft2OrxC17FHJxo2#+ekdA#4Zxg za_~1>Hhm&93$o`g5*z-4)cJdEoWB5N&IXNm_L6ao;5RhV(?I-E_mBcwoY>5C=t}$h zbsg(Dj_CN6rtEhaQX4@`kT4%1-e9+-(&6&-1sf=m10qLfas=e1jut{_UX*Zjl^!`k zkMKv>*;*omY;qk*bK-WZ#Rk{#0>wbZpy%2AU220|SeA{@GohUq*cCHKt#s<$h@> zygXTOu!Nrbdw?OFR#)-4Zpt71n)gI=ybbD}v4%`Yei)aW@cL2t|j*{qP7&UtCie zOKa6i)2bX#uOEn~4P)ytQn?QdPj9=R5}y7~F7V;w z>B;X0o(?zUxb3>k*asspo!6IOZQ90+mKJkDNctY_rw{TcLeGf*UD0^B2}e72F5Izm zZlf+%k+8BMOHmtqs7UB58wQMa>`33vB8*19Y4d+Qq>O4d! zXlA8VY4?i;SUswS0V6aFnk3|~hqd~;23)Zja9$Afc2IBki*WfZbi90PzMTjZWWLLKB!bi~kccQp!+ArjVBP=PVk?1!Pet>}Z4b6N zXk}DH#I~pSjf9f#84-K@n;is=hepJIC`4?i5&#g74*&2R_oq7pdX=DCh=f5CAYt$U zxOTQj!X>~Ln4{9T8Pt!5zE=UXx$+1&=istHV=TMTut+H)*0QIx!zB?W83-?8%kFTp z4#yw{jyi5K3CC(C;rP)c9G_aU3vsU{><~{|!j3Ncbv*A(;CSFX;MmLhy_^DM++;Q# zB)qGQg_|WHkg((8NZPS;XHnh}=WgL!uOAHzxIYv0WEO3%y=c#g&mKbFF|&GryyK7N zA6niqX%sIL6YO~p@{Xp!jDFswyyME>aPkfg*{PyJ z-o3!%^4Ow_oxtOpC)v3izwDzU@t}Jb#D%Zf28JQ>&}dYUd5~?kJVOXQY9;h&7$>2J zTXDuT2XQ#Lhn}v5B8dbadJEK1DEXMnf*exvp{)$uW0H?=mq|Y8ka+#vlAL9WlBmN9 zH=5)_GLAXikVu6yiA`v#QFkUIf%qg-+(($UoS}MVm3mwA|z$=V`ck7TVA#wkAnNnm4sy=NK4}wcI!IjXNUQdIykf zeLBEky%qRft`FF zCjELDrIrqU=*Y8al_ejsxOJxC6l5FmYjl1OE%@LS-*b(tAo!@gba|>D0;wqQ_-Yw} z#y3v5;ff{fJ!&;nBhs0`K98yYmV)2e1l9#4pmpx(hSuD5Mjcu+YuQC-x z9lRxaJh51hQ_W%#TB>fh{pJ?C!OwNLv6r-j3FU+wRNzV{ZgHiXtv%ef#?VvWhOD)L z?%B1~knmZ}{)Nrgxhk^$h1u);=l9nMyEb~PVUSoOPg^}brdmXg*=Q_Rhcp3AobiXzQ&li+&Oieg zmh;b~GImvRz8S%c@2O0eF^r}WSAi~DtD3!19JI{<%b12BS(IUPg+&oHz%(tljVY5F zm6^w=`_4WFVrOT{QECknUN^liNVJ!rH42`2E`mhEN0w+ctY+3HHP#~7=9?e`0xhJ|FucQ|*^NEUvGxMe1W^Z=Wsr$ua$?>K(+^{BSZpyTVJIFPh7)7*OQ*tH*95NXr z6Cn(ZdfQ@x56Ls=I3_vIA6ud-7s@Oo)VY>w)75u{ueYTtYOPE8v2{0@Y(@%65@jIf z!NN!OH`b)p_N?6MZPuX8q*F&!-^rIqRc{;rkSH>35UFZ3EODME8oI|>*)UVl#|s_p zNyqNfGS%VvW5+PLhf=cBwo__(;{-^No}Km~HOVMHwngefCZBWNi5Nr=3FMow1Dbw#a*&zK+MKk1 zLODq5A9*0H`f3Vau}dbCrdLHl$lP}>2#JvKa0DU1We1c?VKlRp{zm}X3qo$Q`DeMz zKCt>gK?uDq6@<|3=DR}lEUY~&Imp#DY(6DAMSZ+gpxV|d^S+3w*AK+h+}-$rg6f_> zs06D2OSwf*J$fLhe)Q;H4584VHZ^j# z5f74fuyN}|VG;O^JKT7~jXCEx;GEx>y{Lre^wA~e;8E@2W|%%)ByCUS?Zpw2z9!u9 z-3gGrCfxb`$za!pr2lXbl2#u)lGaYFb4j&_{tuY@c0L)N{y(5M8qL4>*zfZBOYt;} zdxxh5_=NW8pzoOK8wjZ1Z^_1BIK7m&mLT5M>XgB0;ld%{^z!m&ghxU+?FfEV=n=I} z?UMStTv=yg?!>EJ%8?xmr;Ab!52`h243PnA4IY>67%`iWqXcCqBb1#3GYccr5sCw_ zJ-9C7Xvsz}#1~6H*kRWALkc%Mhz5B&TXRtN#Bv$Og0Qn3sE5JQEn(5hSb9nE_PfB+ z>10j_)*bC3ke&xO2NXSVC=_k@@J8M%AYE@jI;mPT5h?>|08WIWbIIIb2;HUHWQRVn z0))mMToBq`t0^=PLfgwVA1g!X`ga4NH5&z?HM|Z&+v_!525P^L+Csu-aiPf{iYm3_mDFz2(5zQR>h9=AwlSu1ffk_0!$c&xC9geZU%E8 z_n66FENdKYF2ZC4Z$ik@Nh$*6tDNRhWnsx}>N+63&wh&t!m!IBge5CKdcqRia1W4| z{LNG4@{-4&IfT4q@^kU3Q?|2D)@Rz!tU(YGyX4UFlKw`9uH(oXd9GYu@{r|Jl9w#{ z`|J_1Wk(%XRka7QqH1TR++GAzk@HgLV=OX-yUYn0iySm#k!eApDfn?l#v+&Bh5+S8 zOcri7hiRXf7WBzbq$zmL3`M}q4WYZV#$byqMI>^=C?ACsnKgk7RSs$sA`&3|V@&q!SM;xuzZ%7$2hfPTHgWS#`RBy(>^Kou9 zzeVrWN%&V98j~`llhR?6?FEB<58235c)lqK+0?unQ^vDWhe*%UR^I5Ax} z>$#mG%4ku}_6TU>ETR)9Fgcyn>w3WH#NDZ4QfcHzQdlPnkk~*)taqx_b95zRiBF?V zbU&>Z-K~uC)qY7`$cPFm2ii~%3xA?eCT9Hd&pE134xw5s%~w60{-8I&UlSL{XB!cC zmHO$G;F6`Z-+awR3eVF(iJEe%aC{W63Rg#GylqImmEiJG6?6KC*b5cy4cd)?4cYB zWu~Mje+R!*V=QM^D2wXMBnZK z%Ok+eON;i7iYeoYi5w8d3q$XwNBC*T%$1eK0j72a|LtQkM^Oh_-xMYQun2MAUcW=cy&!AnJmCiuq z#|*Qx55d?%07^~v@)ENS(Y2G8WU66MnBS~8{V_WXO_u>PG;h>ydqo7n}hI(d!aW5;SqNonu0KLHAhH?ZQHbtQ!xd3sfoj+e~ad$ z|4i&RN5!tbm|dEjW1rx2Gt7yj_~16c!8!H#2ula&l*dkOwHCtm&bwHu)>6?c>GAnY zFg4?XgZ8+arrsB9XCzJI&&N`w&Y8qhRXkQX#|loU3Z~Ac2A286e6gy_E5sR11*gN< zWBzS;5?(v%@Tjw+bhT;WvzG3wNp=4OErE5gxh*71_w%~y#q|2dk3dHYTHU#~++dH=cnuUE39emDP|!h1$5d-0gJjqU5U;nIE0?OzU_I=)w^(=$C% zZby@f9%yf7gXPqUYab{14CKvxC0^2>Cd?H1ndel%b(V5?PKe~ywvSMdBXz89_o zIt21;;#~V-`uZ%xAe1zry~0&2%8l=gAc{ z+Wx)o> zgU|Cf~Qm5v^e1Z3ZE8QPj*N^HP#g7+ZAUl2dBpZYwg2T zh5&ON1USs$Pai44#NzO$(kWb;5os?8XK`wi)ak)z!omX}K)vOgw!CqFZFbt>e-*HS z%JcLrY%3k0qp*H8_ei8AA*lca+!)v~#<}iG`;ieM_Sguq1z2O1d5;*5KI%F_> zJP?_W?*47V1Gg9Pz_!9>%d3P3-lprnxA)Z$5A1(G@IZg;qW%yMhyw9YMR)+5{-NOk zz1og2x@Z=fL*fBxxeE_KL4|mLhu&_B*k#be@t3w=Fb&wV^Z9@mIs&Q0mJ@$T>IL0Rs+y zV_HS$zS+q|=e}9IK>=$&o$a8*Tn8H*7_e7IyX?RnGeiaVg9=RRwhIVEBJwqISkER> z?iKq%vfw&?#qAW2Ldw13Sx}i{4oHOoOPHfRGghH z^e1*rC6^(2D&v+Z&i0fk<)RlsCv_$XvkZ0qO*SC3$onsxDW>Sxn_0N{REN~pSG)QaqTI=v| zv}Wmn1AK>&_lKOJ2=BomaIg?!g`v?NS8n}CL+J`-%Cu%3xYUr+a?_eMeOda$5DOoc zdktZTJ>y4T07u1wd9T%IUKG8C^wCpE_zUVW){8B_Xs;npoyd2C#`wO+eFf&tmcm`i zm6-oE^BQt0q)?fa<15cOa_XHY2C5TR>}V14z=MvF{@6{ z%va}#a`ni#KdR0cI;zUfT@nKrKpzp$AdFNFBBW`;woJ$IZJ7x@inVg1KAC*S7aiR6 zkfmWVHbrdG5wWWmjJ5$D`$J{{Q~e0;77ZGuIR~StvJ3gVtE=3e@q>3EKS+&s0qv07 zKb^dM2%*0iv5_Djb<3i}U*EYz;;(g6Qc&JTLUF(NE?$B5W|EP_e~@2!6=VTeIv z$)u^!dZ&`?t}mF3AKh4UB8ip+&NmPMVqfYsiDl%cK`<@aLWzq>Da4wKNe!HY|N0Q- z<^xgcZ9Y%m+cZj1GGM+)>@Ve3dW~mzScw?1IL{xd#03BNwUid>ZaDrs%@R^>KU7`! z-eXKT)^uM(50%{0?1;qv-rUl8n4Dj1yVPf$vq?E0@j4F+c+yNDX^50)OL>@NX%LYA zw@^y*{^k6V>nt4=!+Hf7IE1HXOU=2B^GbPBQr{LW+3^pWpUmoA46^wku~FQAUt}9; z9_bsZ@Aita(yrZBy|o&B7-{t~QqrPzJ}Qk%N}%fQJ;%Hg{aI~Dk?=ng^h!CjY)8s0 zx>KS&7x~6HvG>~;$E+`T2rJ6Sorq_zs-`^eq)N|V)t0U~pqDsOid$hKvSjyMRz0Oj z6kEJK)U1^hE!3<9QovvYPB;(&?x_cz~G*-6MwFn3b{9-KE z3a&+Fio$9#S0JHbrFSjT$7{-TYsK73%oU^1VI07yhc2;Ymkd+4R&>+>kx9^3UA%y0 zF?$%^MdpOMwazD5$`i`*_FoLb+vV>1*#9DbPLcZ%LH}H9o);)#BCb+p+E`Wr zCw>(?hXAuPhl1G!hCmddj;ct%whV61_Hg?gK0WKD9BxZc>EX82MI|fsI=0}+);yIm zj^%j!{noM_7_g}&xq#P3nAkbE5ZZPydx9%zuVt&bUQ$*lrUZ6( zaXCoKHp1LREn5wc&T5UD2Fcv33#a0<4t0vxoFg6;I8g6(Q*8IFSOc|zKJ zbBDCeMok}@1{_ks)?TaG)BU2rcF{&HsrDGKt!Se*eK-oXrSMudYMO}h7IKx-uC;e- zBGX806!|+hIWGdsk!hN>WPyqm^=hX}X`pDDhCVI!XtGKh3KnJY#gvWA)bHT42e@tjJINyLjqPr)P<9ym+RL8br|KLZ?-s0)>KZE02nX9hba zY5mCP+78gKO>8LFul?QwhtRKG^1}i8wd+nX{aO(L&i}eT%eF;Ts2Y)|Dy;cUZlGU# z$3XqsR?DfRU#oBfHD5ko{?;X<;TtbhXR>~j}d_Tsr>Xu4O zta&HXesL5SB9`sYNRhvpd`r_n%4EY~vho@-^2J8KM#JLE`*ij?jR(*B-|S)=1nO4T z^gdnlyxf6U9%-}&^-i@XyIB3?x5N5Hd3T+#>!L>mOA&lCn9OE<%L1M;{l)!_-Omt% zQ+J!H_qiCHT-2JSm@k#7eiF_$ywla0S-4WhU!(%@{1;e{Nps@29!$Vm{h9pc*Q(b3 zymYh2DcKHj)YLvNIY$vXYsgv712%rfU0nv;lP?13!(duHa0Pb+Oiyu6JiOasW@62L zD4PAyOoSerNMI6Eyc-yeQyy_)3c3evEE-&N9);ut;*SU1pmBLXr z*UEEfqj6H@h9KQ>eHFtsVUzmDP&IU{(sdYn)D4)iV<+qqQ#81jZY!Xt#qM-C&&BJM zNt7(6&~^4xYBjrEdfSUk^K}gjmF<6bEzm4r<@dQOlGO2*!$hS zX9d?EAf$Ov#;mHg=oZf04=@a95%Nm8Zrji;e{hV0#Vyqk<^8<_uA(Lzjnsr~`Z)JG z&jWntqT_*v;87+we$AZk0p7{onlV}7T8xpBZ1dBEznK_$Q>Mbwe?ecP7(L7c+1g3GjJ=a1I&v$a?{kgzhZ0<_l9fHt7^O0w^}` zbS`ylhwXEl&P29qF)F>k0`xgqWO9H2Yfea$X}5_INDcX$Q}CW`u?+<1abu--;rn(S zwmEX+e1EF?A?pQM*sSB}Kee*reO5dl@JCvn3bX;wbeh!=z^z82)zatZ{3885!tk{iWs#8fVWxsOo&hdOHizsv_ zuaA%+Lz7OuVgVF0O! z^ifs_KTa)jyIkjL<9L-KiJ%I4Ba_LTaq&fwN4QM;+~hb5D6{B=dN%(vYKq>~3JMhy z9MlOtId(FO^~$3%!E=oP*dnqBI;tsnjrcR3V7Y6L%!Z_Gvqh9+vodXj>RwbqfF)gD_{gx zakyWwM>P`?>k2My!@bYaiCbUg*M_^t5)AiFOEBEMmSDIaAfe$_$M`Mx6Mnp!%pVQ3 zMk%o-=|*UkR<{jyl_ePL(QbsoiW+RJ-6)%a^MIk&+Es<8+Vc#xR=N%K@vfpPS!G)b z|MKQB6q|^K39Gaa=t@}0L+DgLI63!>L(n$MLBvk6x>MsHs}r1dvp$yXbYCK2*Z!HC zt=kE^WoWv&Q(s0;*;?Q!_kj|2ZBHdE%av~P(>$E|tNQHe<~5q?szo!Me%i0wcRMxb z$+BOE;8*2cmi=1$vuoTsNZ7CSqq)t0<4*tGSM9T>n%C$%>s|WHdY69vyY#{JF8%s< z^}4K8?l-%}&47geZEkbxsku|@NwsP@@!RQEQ^KzOI4H}HgC+!%q|;51Y@6nVo^sP7 zVb}gCW%;Mvf@|*7g44US-t?4PZV9{gPr0n-HaBsaZ_vciBbqn--r%N9!e1xsx_!+8 z?xs$AGS+!ERwS_vwowK)0oq$STewM{HqF46X)$k!<=x0%@|KpC({w22xpMl*ndNGVgXl!2A#ak`~i4UsZJ)2-UB^3L_2u=cRNno@ z{i+IAlUqfq->^Yp4iOw6XD13+J&OWQHxy^sS zb2ucM*SN`$oyzIhyy`J4k)6SznH6YBbmqyimnLl8xs7Cvn@NdP8(oc^e!pw;UqZ3V zvnF5eJWzaI3ro##!`ys>A6A8f%U)WmmuVI8dxP7j;x}kugf$F`HPAid+qA7EJ7@@D zf$r1OoWOy*zuxYLxPbeHzd#3qEkXv<41du}Jxj-P4f=C2y*60LU?o<$Noy5$x(O=2 zQljlu>qTNs!CnFm>#;-#3>rdU&=3Lxy`rZzo;20)nR zYtT@{1?~yeCo3q2z|Lp%a^CpK*W-5ggiXVsA%q1DATT!}<5w6gxcXHO3p5Bdg}-x` zA!n^$h)k%!pE6z6?Pk9hRmKB!!h?X#^vSj-KVS7lIFmh=(3Iqxm+e#jgwj^!-{>Z0 z^9U-iMe&hD1*bg`>pUM&P!cb11RofR=XCb~VhJ-kFc20U|JvUC@jonlummUUIxknd zb@P$O2M!lxJx)kO_&{4G>%I(Q>wFywAGmEd>v2ND|Gt0tz-_o8&VK*#frr%|CkzK4 zeBo9H4>kY~G6B4b3^v2CYs7G=gW-Zx{`#_T#U=h|WI$hd>YL^Avd5o3guE>Cl>zdy zZ;Uf}nc#<$mud2DTcml%l&vcKHESJtS9FWB%=wr&SB##})9$oGko?tlTsB&{XA6tKpqj|x9Y1qoB>eWddF9rb z3|u+pmX*T!h^5);L8 zYB;5!SEoy@F9iuzAtjf&V?S^1fe;lP$eLpNk zW9xQhW*y8_9}uf~f%1Y(tuun~g;K#o;w~pCtnevyXLg+MdHI{z8oMapH0#04tnHcV zo@uil=U#2P;}|M%K6mME28oo5t;mH&Id`ulL(5~6KK{2K0~mZf-TtvgoNrX$m8yO@ zb=uFr{)xs}+h|MUtj*Lp0VZE|$D-#(U9pP~J|%TYYKAjrE8$Fw@A*%-AzLLRo#*U+X0cZ_T$@c)=r?b|SXW#Z*nxtoqU9e}(+U_H+$C zrBc&R*`B(Mt-$LOX4=WDuWN)We#I-9_Or*az%uP$jc+@1GE6q^QZv`qJqB^bwT(7{&XS7hHk53I!OovQ=7auh!qe!bDo4)t$(6bZYV2A}@S> zCEf05Q^t_b)30@1zP}4y$<%_(tm*1-t8TQXk6yquU!GaKecnkLjm)BMnofc09gF@V zKI)32ncV-ajZ5OvFR#ulzE9=OpiBla0c9(e>l#+MMVor=&?skuUmIrmy3C@NG{1)$ zFWayVW`Zw`D^}R?Mf=2!)jfkc)P4!&ex&b(D=|9MpZ*lztL$57B1P+kO%ulxZYRdg z^d8vu7PbEL1x>+u2d7Wd;50Hgjl6THL2RG*#`KIfog1v@gg6OM!+-rG8)P}D9?u?; z8J+4l<6wXKb2O*vjp@jX(m}p`?i<ysRK-_XRp_^O6|*ZH1qGs9xkWRAC}g~ z5B&U29Z_}G@w*B?{AaD(O{%RZJJEPI1>HRP%&eI6^fs=syEntAWYnJm z6?~Ek=uaQXH+hn7^@aV>?d5SD_oH0Trud%ySrh)O`n#EU-iH3 zm|^|>mX74QOb0^PZ5$4K0Blc@!rF(eX~|!4tN;b*<)S@1(8;xw)$8ZyykuNc6OraY zH!;(vHO8-+bxJ_qFO8#R~nOe~JABceuLv znO#(;19o_t#rylG(;hX7`=rPO4`_Z&*VM?WQKe8rpVO@$-?RfP80&UJrFQ*p)UI)R zUZxqteDi>pW`fO`_AHC_a$Bp@%LXL2G|*RSpHq|R$n-U}UmibYZ&Szb-S)pUB6E~M z@S-_|!m5HA@Q{wlT0ekulXX(;m|Xa(-J@~4nskiovoI1<`lr`b8XGhwQ~?W=GFAaY z*2HMd(UO{}!Mj|8H=n_quE87pJxyrHxbZ#DE*&?HMtw$o(*3^`e$vOE^+Ol74o~=e zw~B46_}wz?Un*G*CH@+D&HR6jSMljIG3!|t4C0X;$7%_r)QE3#x2Zifd0T3VmX#f{ zlyS@Qd)%b8pVBiaOIL>*FF9+9ch8P<{oC}XseKf+0aa4*!u}(fsFik$lKBO;-$fw~ z&24DpEI9p$sw?*Ey#4!Aw)c;1oqKE*>A%vBKc|0e8<(+@7SPJ71y`LmirN2-QCGZ{ z>9}yz52|W8?#7-o=h!O6@Cpv}kNth6Cv5WNV;jaSIR@3Bi$=9e z)a(ASr%`wR*c16%;WVMWi(aTxi(dUpwdjhE@kJMHuG^%~KG|x>NNc2j>2sviYh9>1fp{`K{^X=i*%c9#^9- zCGmx-D)LTa-#@dLx%Q(^{QvB|dwf*Y)i*wqnIr=VoKb>CjS?lc!J!%r)uaPDCv%3J zArlA!LMsS9u_;tkOlG*0iwP&e95)AP#a3I}$39P=*4Dl)wmw|FWD;dUQh|`FptTKN z+8IU#ZEFHb&hNYSIde$}*4}=f_m7v)hs-(q?919~uf6tKYp=aFmXnD02#p?nUSP4} zOB8|~l!hX|R`mp4w+lNAA8B8!cbBiVYEP?FR7z=2pcI~QEwgcDHu82x9Y{n!SJQwb z`&Y=UrNGE3kYT1WkR8h3O$LtWip{iKKtAq_TJOrl;}Mpv3}gjIqnDv8DC51mmr};c zR7Qt~XC&&L4?f9fIE0zD(Dd?3dr&l!wi0aSGq`jWrs8a@koYylww!<|-if*sRKeGI zg|tPQYNDnN)-09)C=CZZ3?27S%vSkshN&F7g(BK4_=1a))ZU_x{iaC)y#Kx zUtozoPGUUx^sOC{%tJ_^e^Hi9MD51>R;K+geGRUp!7nR)z5LQ&;hj(H;COxf4^bn= zTbpCm$G?0#Js%-pO7!vf;EOV?nF_Ok;Q9Lal}1*mQ~LOy@vNw@1>M7x4_+uQqg9;R ze^lb{37o#l6Q~PB$=6Y%$Vg{rLt3+B=kE|~#A$%C$FBs`N7hD3! z%Eo-O%P0>zvceZHKvf(@6~&lu^!=6L-!l^5cfB;~8?*YqaOLacE#cE+DR}t=+o5Hd z=i&V?Kd@Mqb!F@NeXg*YX+z4IoJ@LEGe3H5yu~0B;+N5#&~vce-Uc-q_JGXhpTf(R zdJ6b=WubtPmC*kib(4@!4A9*R*{R(tiq|csa_|m$je*~CWBI}B4739vx)-xP@sIH z&>}qC)(VaAtVN6WrxFvoxhju5+nQ!7-^j@Qsz{WgpW{qti1=SoWqYUaVBL}ELq4;F<1Y#9} z@hw0uVLp7x&ikSj-9;4Mm7^n>A08P`ql4`XKz$to-lj~#>yIn?rQ;98G;A0p2S$)2bRd}k| zH%k2M>u|c9QLNgFm{rW8PM`( zewI!&T!an`fxJ#sNBeAT@rxwa{^^?CN4R%|$%8ku&eemj=Zj4PWPYvR79(39%PlHB z9B`k)1P7y@y->&bFyux*gpGzV2h>EGL$R;b zeuH0+NRU8iNJJe1y73tM8lAv)?f0?YreUN)&07qj**2d{<(~=OFPw$*3U#wlTzMgP z_Z>iB}ml{KmsxE;;s+QLl zaDNO6fw3G|m0i6F#QJTo3OjPI+cS#r-I`12Cko%4gLk4Cb}aTT`p7W>`XFE>SGaDv zYQPvfL*-bf#AlzYJ@JwEgb&U3Pe)90PB&aJ;?PiW%t?Ff0W>sZJkYak^XW5hrt`Bl z0~6G+Sx1Pc;%LSZzidbwB6~@Ka_iu2@jP>j?BHw;mRE!yyP8{+#Fjxf;01)V-Ah5Q zm__9Q&0hYQDANVFB(2~Lbkm@YYVFnxSJy19V1dEcF#jE;ugA!$KLkdkBl7&tnvBoX z3{8Mx&3tbos!X;dve&>wQK_5}FG54r+9P&M1y^{l6WKtqdx+U2SrVFk4)4%GK?Vl^ zM_yI6X0Q58u#Ch29X{JfCIg%jqKZ=!kUHvfe^~z=5m(9E{tU$D3L78ANfuEVwC^P* zC$ZOkLdEZ~pk(=*I!xM_yEtQ}R`8kDm4-`!9m8Zkl%t7iRYrWgiFS!~B)dN+1H^Ck zI`1Fv_1|FoUZB-GOUv{A!)X0~4W!Et|IpH_w6%%KfL+-5ET)5x;r7TwVozLD`mCbf zEh?QE%IUF!@4a{Xo97}n1&F65uZxF9ar zUXNb_veXJF9Qx3?a=w%k!4j{;t)YiW%QBYOn2wA{wBvr?b4pr0v4r>`V)}vUPv}1? z*}~$){rE!_z98)U&U9KU!+rL1SCbOh8i?zPdw__cvRa+`AXUTrKoebJz2?+Xjrx^N ztH`F% zQG4I|%>BD~g#JB1r8(;y!ZM9Yl}-nUR~MQk^cr%bs4cKUEVlF24MMpciyxg~a;ODG zE&D?gB?KHL5zOcAsGrE?UZ^edkj+>L(#JcAd|<}oc4Nu2>>*Q?u?EI-5?>*s$jsP$ z7L|P&e)qxPldzNc*eiY)WX}V#yN5v}ufXv%2q>`0L8uJ~741ITYXMhSQVm$DZ4n$2 z^SM5((sDCoch{<`{aW4))viducDUO1@m3r}%5}Dmmi2bO`*7%k_%&SGtxL`~`d-3i z98I>O5r{gdB_Q}f)9rewFCj7o+|TfR@`lgJZsUHIhJpaJ1oDLdd_^(upRq&VwC{XA zlV14CIVqC*Y!(8djZUcIWM(gt)n$c}>W5l%@4|q(rbJS|>``aepmv8U21?u1*>fdz z*#b$uU5+WxEV;tznIo~;3t<<=rkXy@iPnYt?*~lSu`0oB#R2x^e7_5ZbZnrodjq7S zVcTs@8IaMCB|*}6bt-ElOUTJ)=dyN}=n>uFRW^0DBw76)pQ}ewXD{@@urdkT1w8%? z4MRI*#)#}{_uJZ_OW5R2%~X|0F0V&+h5hcfm3EA-gKxlhN6-5}*I^W#hK%K2PrXg` zO5D=e9sLuqBbTo&X%OV{hQfwXO=}m@xYYlb`LHrO;^ip`vmn4N11*zn5ZWnrSFkaH zLr(L^ZA4=J;u%^&Mu08D&c;!;MmB^Sw#>u&nK;?U2B8-Ra4~Q1pKw?r{71Vq@r($K z5`GNA&bgr^b1De9d+T8kk3CP~iLhgIQjzuR*m2z-Q18HgW>TB2=ad9=RBO+YK8x8M zvbVe!tnjlrB{1KF?06{iv#NYUZ{=#ZcvTLZG@!DItjbO*dXC;T@#S>gwOX4xOVP6% zmLuPDB()h6B7uL_VJjfjIn26 zKNs1YKsEE0fOZGwOrDo1XY671P;5++$w%2i_Fg}L!`o!ue!Ant@0~3unaUi}Gy>DJm znj`YK!l0+2t(<{GIYKL?I@)>GQ2V(CM(Z++?InD1y8}E}Vtd88Ne`ax$U zLmPN(y?F~a2*;ciLhH(hRTyxHL4Lrhs19PU$oG=O76J!QY{m;at==&;~A<-9dFUh^r6TgU>c4!?8F-x~8bz<*VbEUKP6Onb7qUgOX&_YdNp zmFXUpSivXxO5dwiCsmVc23#PpX?!&LRRoM_TEo{^@&;J#Q?C}9e~S90@;jFVXUbT| zuH@s-yvvn=%m&C0*|3!E$d>g;t8~!{-MgHw`w8_aYnNvV8~;cp%kEquYjaizE&m5^ z*c6Oz#WF9ccP@w9Bi8wn`eNo?2!UWU+L$af-^E+I1MacS3LasYYgtA~+7c@=+!1t8 z70;4|zF~RGN1?CD%9*_SvA&kKL!$zk@7;hc690UF;TSwNFT0~}qeEodqpc0(364?* zGK7|Vyah-|A@>m4!G=%8+QR6CM&=efK0|;hlwEM^T3Z++xzES`sto2eK=wUAtN|;e z?0&IfJmjb{eIIol*FhtUG4j;Er8X?5Us$Z)4qhoCC%R9-%r}AgJ=K>4hWma%T3is& zyp$~fm%ZrbkGPPu9#FWt30bZK99kv3RkR(DZKwQJL3YJV!ANLX2!!wvV^xzO^Jj~Z zEOY{s@?osMKn8cJ;GP}i;{lN=DgI+m6;Zq*c9m~=tE~T6&vDIu*wwk~CBP!8ql6t@{l_RmtUBAF*}vuL#B5Xjc5@~f@bdY@ zMPKZd@8y$rhTS&0_pPQ5ny0dIpVJb|bT3{Syq;X0FGXMBYpRWz@;rKEJFJg)(Sus) zR2MI$EpaFJ<)m>jU7-^qEqYDbE(qQrp zhx?p4?HycH*D93nF3^_c_I!whnBVY{wp=u+au|?)v3V@4ij!@57#g1Z!yTWMQIj5sb>6#T2SX@9!acy;A(B-4>hxS~(x?tEGpauNon2+ACP@ z{iU6v(xHc57nP3-g^iQI@QG<)>-Tjz9M2R>M`I45m=UUnKR9?WoiNw}k9mYo`BG`~ zgS25QmD=w|J7K)vZ-ENnE3JS~OMzj`3XG?}uLj3IT|@3aU4!$Vt|4y-5>QIY(oaU%L4_G@zxqG@fmxoB43ce6mKt zhH1%if@JLVxA<5$uFuRc^nudR=*}kys)bhU39?CR#H`(HYs5zUO3WJC;e#99MgIFPp`BHIf2l)#wFRBUP zPa)1u6w2jQB_S*|nYYx^B&hPh)20N8WuY7-&gO~UGUc@XEG>An`E+H#A>99CgRwb;77A3LRSv*;PPl(7o|QABVD!U- z1l43U*9Y%kjaP`Cu;&fzqHSDSDHn*l3UTQXDW%eY4kHpaBS@wtp8`Ny%nnNGYS^<5 zh`q;rxXw<^7q#l_fV#RwT`fzhEcvv`3{ewxb>?bydH}LnZ=Vv*P^Sm=PIdaaT~Ge( zXFnsMNd0yrS`^81s>*|Q*e$%ItWK{ z{qc4@?VCOo-W&D`S=}^%8t^y+$BSfjOO)Oq577yAE+CVd2jFOU@rN9A5~D7&%({Ew z7R<)rRDD&%k3zl(g71YbK0*`5TYEu)?ABD zDR8N#q}DuoO_PvmLYbl_*@roz*asvEUvUd6zo*!JcfL@0cRm!z8)P;g8D=6oq+f}> z$li!*A-J1bZ*$7l#f8?p3nty2Kj|K{gzq6o0(&&5P~a11w9*=<^^fL1wJh;iR(!;Q zU}G}-GDhrmq4{fgQBG$H_uodT${HtzPUes0me6QrjRWzz%J7b3H`9nXLf~hEcA=$+ z%B{(_K=x*tSKq_k$_sZvWF-f(LP(ys!uE_)DDc>a09+%nwcs9ZNp0{b16K(x&!H-1 z?PTbj7vYJIFNX8R0SsqlfK{Q7Ugti$b%O3KPQ9@qZw|Z#V1$*Bp_uo{X&LLY*~?Ip*Jth_P0IwTH7~6tz?*}1BVGrQZR~YS zJ)CqYk^8ZY>X~}+;l?+e{YQ{ec=7(mV;LDe_<%Pjy*c|EEEF+Q1^4z?5wwW`npEajGOFxHJlbfm=n;XS)`BG=F z7|`Vtlwzx$#%E}Wi;NOHHy|osIyETZq?(h>3Pin7>@oD}on^qEkMQ?Bj%GQ0EEngV zR%1lWaVTOB@c}xWvF;+}bk_Q8Lme0JjG%=Nw<&EI@eKAN4xi?P&9Pve%KpOgCn>&$ zAa(9)!THJlW3H~Am<@hsc0GJ&&jezY6Tt6`T*32&o%3f#$07j_foLWk5=6TDLk_93 z7WWXh>_?S+WYBw|na6$D>4CL;PI0-ntl{3Rpc8jheyE)CP=7BK-CZm5MOPR1Mw^3$ zF-*Pp{gu~Ae4&ffzACVk9uy2-Lj^(MWynZ)m01lOVRqQhGZCzNG4;JA!cI9K>vH|p zL_3!el6~&>mE%#p&(&@=7yaE|%!WV^yhv!YfpR}Of-d=qNy|dZ|EBs?C^SEgH*^X9 zFI27M_U4Dct&ARBB%zf&v?96M$-{1rGrB6#$ie6*;M7zGiVGDBPC{3xq>O1G?3m)v zM61fX0QtJp(>jHw6RcN{#51|aO`;LnK0~|hE6+C?;>|dXW{}vXiZWUU7odUl^ zXeKi(2jBDA;NOY8PtYQb#?*7eU-HkwUt=@___2TI_?iLy*NBtLq1zHYpNWoxqJg`W z;P?llPoCoBp^22V>IPv4*d+-jw4-d!YhnvD(JQNwPw$M~o z6)eS`y?3d;zfPSjgAjv2FT$61R@>U5KmW#Pi`j?sRnB14Cz}Da`eZIdKf>^7h$z6Y z(EMG9QG^=Azr+)_N8UF|)TW<_sd$HIBeXm~y~aGlpwbW~$CJi#c*4x#3A2VLV@N{RyJqxe9R9GOmhf<44ud#M>|Il)5rhXzy+;6~j~(*4Us!)FVFKNesXH7EaD2c{s63IDoF$U5vtYL5{=>>q z%0A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