Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 04/12/2021 in all areas

  1. I wonder if number of lines of code implementing About box finally will not be much bigger than whole main project (without About box) ...
    6 points
  2. Last but not least here the version with chip sound: ;Coded by UEZ build 2021-04-14 ;Thanks to wakillon for the SID Dll, Soren Lund (Jeff) for the SID tune and Ward for the MemoryDllCall functions #AutoIt3Wrapper_Run_Au3Stripper=y #Au3Stripper_Parameters=/so /pe ;/rm #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_stripped.au3" #AutoIt3Wrapper_Res_HiDpi=y #include <GDIPlus.au3> #include <GuiConstantsEx.au3> #include <Memory.au3> #include <WindowsConstants.au3> #Region TichySID Global Const $tagIMAGE_DOS_HEADER = 'WORD e_magic;WORD e_cblp;WORD e_cp;WORD e_crlc;WORD e_cparhdr;WORD e_minalloc;WORD e_maxalloc;WORD e_ss;WORD e_sp;WORD e_csum;WORD e_ip;WORD e_cs;WORD e_lfarlc;WORD e_ovno;WORD e_res[4];WORD e_oemid;WORD e_oeminfo;WORD e_res2[10];LONG e_lfanew;' Global Const $tagIMAGE_FILE_HEADER = 'WORD Machine;WORD NumberOfSections;DWORD TimeDateStamp;DWORD PointerToSymbolTable;DWORD NumberOfSymbols;WORD SizeOfOptionalHeader;WORD Characteristics;' Global $tagIMAGE_OPTIONAL_HEADER = 'WORD Magic;BYTE MajorLinkerVersion;BYTE MinorLinkerVersion;DWORD SizeOfCode;DWORD SizeOfInitializedData;DWORD SizeOfUninitializedData;DWORD AddressOfEntryPoint;DWORD BaseOfCode;DWORD BaseOfData;PTR ImageBase;DWORD SectionAlignment;DWORD FileAlignment;WORD MajorOperatingSystemVersion;WORD MinorOperatingSystemVersion;WORD MajorImageVersion;WORD MinorImageVersion;WORD MajorSubsystemVersion;WORD MinorSubsystemVersion;DWORD Win32VersionValue;DWORD SizeOfImage;DWORD SizeOfHeaders;DWORD CheckSum;WORD Subsystem;WORD DllCharacteristics;PTR SizeOfStackReserve;PTR SizeOfStackCommit;PTR SizeOfHeapReserve;PTR SizeOfHeapCommit;DWORD LoaderFlags;DWORD NumberOfRvaAndSizes;' If @AutoItX64 Then $tagIMAGE_OPTIONAL_HEADER = 'WORD Magic;BYTE MajorLinkerVersion;BYTE MinorLinkerVersion;DWORD SizeOfCode;DWORD SizeOfInitializedData;DWORD SizeOfUninitializedData;DWORD AddressOfEntryPoint;DWORD BaseOfCode;PTR ImageBase;DWORD SectionAlignment;DWORD FileAlignment;WORD MajorOperatingSystemVersion;WORD MinorOperatingSystemVersion;WORD MajorImageVersion;WORD MinorImageVersion;WORD MajorSubsystemVersion;WORD MinorSubsystemVersion;DWORD Win32VersionValue;DWORD SizeOfImage;DWORD SizeOfHeaders;DWORD CheckSum;WORD Subsystem;WORD DllCharacteristics;PTR SizeOfStackReserve;PTR SizeOfStackCommit;PTR SizeOfHeapReserve;PTR SizeOfHeapCommit;DWORD LoaderFlags;DWORD NumberOfRvaAndSizes;' Global Const $tagIMAGE_NT_HEADER = 'DWORD Signature;' & $tagIMAGE_FILE_HEADER & $tagIMAGE_OPTIONAL_HEADER Global Const $tagIMAGE_SECTION_HEADER = 'CHAR Name[8];DWORD VirtualSize;DWORD VirtualAddress;DWORD SizeOfRawData;DWORD PointerToRawData;DWORD PointerToRelocations;DWORD PointerToLinenumbers;WORD NumberOfRelocations;WORD NumberOfLinenumbers;DWORD Characteristics;' Global Const $tagIMAGE_DATA_DIRECTORY = 'DWORD VirtualAddress;DWORD Size;' Global Const $tagIMAGE_BASE_RELOCATION = 'DWORD VirtualAddress;DWORD SizeOfBlock;' Global Const $tagIMAGE_IMPORT_DESCRIPTOR = 'DWORD OriginalFirstThunk;DWORD TimeDateStamp;DWORD ForwarderChain;DWORD Name;DWORD FirstThunk;' Global Const $tagIMAGE_IMPORT_BY_NAME = 'WORD Hint;char Name[1];' Global Const $tagIMAGE_EXPORT_DIRECTORY = 'DWORD Characteristics;DWORD TimeDateStamp;WORD MajorVersion;WORD MinorVersion;DWORD Name;DWORD Base;DWORD NumberOfFunctions;DWORD NumberOfNames;DWORD AddressOfFunctions;DWORD AddressOfNames;DWORD AddressOfNameOrdinals;' Global $_KERNEL32DLL = DllOpen('kernel32.dll') Global $_MFHookPtr, $_MFHookBak, $_MFHookApi = 'LocalCompact' Global Const $tagModule = 'PTR ExportList;PTR CodeBase;PTR ImportList;PTR DllEntry;DWORD Initialized;' Global Const $SID_MEMORY = 1 Global Const $SID_NON_DEFAULT = 2 Global $hTitchysidDll, $iSubsongCount = 0 #EndRegion _GDIPlus_Startup() Global $aDPI = _GDIPlus_GraphicsGetDPIRatio() Global $hGUI, $iFPS = 0, $iShowFPS = 0, $bExit AutoItSetOption("GUIOnEventMode", 1) Global $sText = _ "This is an About Window ²" & _ ;² is the marker for the column width which all lines below must follow "coded with Autoit using " & _ "GDI+ library to produce " & _ "this flying chars effect. " & _ "------------------------ " & _ "Greetings fly out to: " & _ "All Autoit users around " & _ "the world! " & _ " " & _ " " & _ "Coded by UEZ 2021 ;-) " & _ " " & _ " " & _ " " & _ "Press ESC to exit. " Global Const $binSIDSound = _Chip_Sound() _SIDStartup() _SIDOpen($binSIDSound) GDIPlus_About($sText, 16 * $aDPI[0]) _SIDStop() _SIDClose() _SIDShutdown() AutoItSetOption("GUIOnEventMode", 0) _GDIPlus_Shutdown() Func GDIPlus_About($sText, $iFontsize = 16, $dx = 30, $dy = 150, $iSpeed = 33, $sFont = "Courier New") Local Const $iW = 540, $iH = 500, $iWh = $iW / 2, $iHh = $iH / 2, $sTitle = "GDI+ About Window" Local Const $fPi = ACos(-1), $fRad = $fPi / 180, $fDeg = 180 / $fPi $bExit = False $hGUI = GUICreate($sTitle, $iW, $iH) GUISetState(@SW_SHOW, $hGUI) ;create canvas elements Local Const $hDC = _WinAPI_GetDC($hGUI) Local Const $hHBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iW, $iH) Local Const $hDC_backbuffer = _WinAPI_CreateCompatibleDC($hDC) Local Const $DC_obj = _WinAPI_SelectObject($hDC_backbuffer, $hHBitmap) Local Const $hCanvas = _GDIPlus_GraphicsCreateFromHDC($hDC_backbuffer) _GDIPlus_GraphicsSetSmoothingMode($hCanvas, $GDIP_SMOOTHINGMODE_HIGHQUALITY) _GDIPlus_GraphicsSetPixelOffsetMode($hCanvas, $GDIP_PIXELOFFSETMODE_HIGHQUALITY) Local Const $hBrush_Clr = _GDIPlus_HatchBrushCreate(18, 0xF0B0B0E0, 0xF0F0F0FF), _ $hBrush_FPS = _GDIPlus_BrushCreateSolid(0xF0808080), _ $hFormat_FPS = _GDIPlus_StringFormatCreate(), _ $hFamily_FPS = _GDIPlus_FontFamilyCreate("Arial"), _ $hFont_FPS = _GDIPlus_FontCreate($hFamily_FPS, 8), _ $tLayout_FPS = _GDIPlus_RectFCreate(0, 0, 100, 24) $iFPS = 0 GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit_About") Local $iLen = StringLen($sText), $iColums = StringInStr($sText, "²"), $i, $u, $s, $r, $iChar_Space, $x, $y, $t = 0,$f, $b = 0, $a = 384, $iCharCol = 0x101030 $sText = StringReplace($sText, "²", " ") Local $aChars = StringSplit($sText, "", 2) Local $hFormat_char = _GDIPlus_StringFormatCreate(), $hFamily_char = _GDIPlus_FontFamilyCreate($sFont), $hFont_char = _GDIPlus_FontCreate($hFamily_char, $iFontsize, 1), _ $tLayout_char = _GDIPlus_RectFCreate(), $hBrush_char = _GDIPlus_BrushCreateSolid(0xFF000000 + $iCharCol), _ $hImage_logo = _GDIPlus_BitmapCreateFromMemory(_Logo()) Local Const $hDll_k32 = DllOpen("ntdll.dll"), $iMilliSeconds = 5 AdlibRegister("CalcFPS", 1000) Do DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush_Clr, "float", 0, "float", 112, "float", $iW, "float", $iH - 112) ;erase canvas background _GDIPlus_GraphicsDrawImageRect($hCanvas, $hImage_logo, 0, 0, 540, 112) $rr = 0 For $i = 0 To UBound($aChars) - 1 If $aChars[$i] <> " " Then $f = $t - $i / $iSpeed $s = $f > 2 ? 2 : $f $s = $s > 0 ? $s : 0 $r = (2 - $s) * $iColums * $iColums $iChar_Space = $s / 3 * $iColums $rr +=$r $tLayout_char.x = $dx + $r / 2 * Sin($t + $i) + Mod($i, $iColums) * $iChar_Space $tLayout_char.y = $dy + $r / 3 * Cos($t + $i) + Int($i / $iColums) * $iChar_Space ;* 1.2 _GDIPlus_GraphicsDrawStringEx($hCanvas, $aChars[$i], $hFont_char, $tLayout_char, $hFormat_char, $hBrush_char) EndIf Next $t += 0.025 _GDIPlus_GraphicsDrawStringEx($hCanvas, "FPS: " & $iShowFPS, $hFont_FPS, $tLayout_FPS, $hFormat_FPS, $hBrush_FPS) ;draw background message text _WinAPI_BitBlt($hDC, 0, 0, $iW, $iH, $hDC_backbuffer, 0, 0, $SRCCOPY) ;blit drawn bitmap to GUI $iFPS += 1 If $bExit Then ExitLoop If $r = 0 Then $b = 1 If $b Then $a -= 5 If $a < 256 Then _GDIPlus_BrushSetSolidColor($hBrush_char, BitShift($a, -24) + $iCharCol) If $a <= 0 Then $b = 0 $a = 384 _GDIPlus_BrushSetSolidColor($hBrush_char, 0xFF000000 + $iCharCol) $t = 0 EndIf EndIf DllCall($hDll_k32, "dword", "SleepEx", "dword", $iMilliSeconds, "bool", True) Until False AdlibUnRegister("CalcFPS") ;release resources DllClose($hDll_k32) _GDIPlus_FontDispose($hFont_char) _GDIPlus_FontFamilyDispose($hFamily_char) _GDIPlus_StringFormatDispose($hFormat_char) _GDIPlus_BrushDispose($hBrush_char) _GDIPlus_ImageDispose($hImage_logo) _GDIPlus_FontDispose($hFont_FPS) _GDIPlus_FontFamilyDispose($hFamily_FPS) _GDIPlus_StringFormatDispose($hFormat_FPS) _GDIPlus_BrushDispose($hBrush_Clr) _GDIPlus_BrushDispose($hBrush_FPS) _GDIPlus_GraphicsDispose($hCanvas) _WinAPI_SelectObject($hDC_backbuffer, $DC_obj) _WinAPI_DeleteDC($hDC_backbuffer) _WinAPI_DeleteObject($hHBitmap) _WinAPI_ReleaseDC($hGUI, $hDC) GUIDelete($hGUI) EndFunc ;==>GDIPlus_About Func _Exit_About() $bExit = True EndFunc ;==>_Exit_About Func CalcFPS() ;display FPS $iShowFPS = $iFPS $iFPS = 0 EndFunc ;==>CalcFPS Func _GDIPlus_GraphicsGetDPIRatio($iDPIDef = 96) Local $hGfx = _GDIPlus_GraphicsCreateFromHWND(0) If @error Then Return SetError(1, @extended, 0) Local $aResult = DllCall($__g_hGDIPDll, "int", "GdipGetDpiX", "handle", $hGfx, "float*", 0) If @error Then Return SetError(2, @extended, 0) Local $iDPI = $aResult[2] _GDIPlus_GraphicsDispose($hGfx) Local $aResults[2] = [$iDPIDef / $iDPI, $iDPI / $iDPIDef] Return $aResults EndFunc ;==>_GDIPlus_GraphicsGetDPIRatio ;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2020-06-05 Func _Logo($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Logo $Logo &= 'iVBORw0KGgoAAAANSUhEUgAAAhwAAABwCAIAAADaNT4jAACVR0lEQVR4XuzVPwqCcBjH4Y7aFDRFW+BQU3ODQ0SrkycQIxAPUeIh/Dcq/uoM0hI8z/x93/WzCj8CAH8TFQBEBQBRAQBRAUBUABAVABAVAEQFAFEBQFQAQFQAEBUARAUARAUAUQFAVAAQFQAQFQBEBQBRAQBRgXkMYVpwB4gKzH3XVO9XlhfxLd1H8Xp72uzOh+Plek8ez7Kuq6Fvv7MFr4EP+2b2W0eW1/Gz1XrXxfa1b2zHSxzbSZylt4H00CiA2KZpGiSEQEItgQQSmn+Al3nmBcQD4hWEYCTEMmLUTT/RTZOehsl0nMWO7Xi53nKv1+TuS92qcw6/qkpfNUmmY9PpRD2cj6/tU6eqzr0PdfS53/qdYugnG4VC8kqlXCzu5jfuLa8VVjb2t/eaD2rIERFJbEINTHJIIrHhiut7BG2ZpJGJoZNDfWMnohNjudGRwdxAfzKZQJihp6FQKLCfVn6iUCiJuA9KJbDI6vr2Sr64tnV/e7deqiOHW4hGqGYzTSOEYAyHSvjtzgWEwxmBuBDcc7nbRLxpkFYqIgezkbHhzMTYwKmxoRO5gXQ6RaiOniNHnKcYY/RlUCiUVBQKt9O+f//+veL+6trGSn4nf69U3G+Wm6QjbMzAIhZjoUUChRz9gsc4cAwWgWM8tyW9ho5byag80WuOB44ZG8kNDeYymQzTzK9OJBjj45541NMUCiUVhaLZqO3t729tF1fz91Y39jcKpf2SV+9YLmeY2WARShklBB3NIsdyDLyEEJ7ncbcNjmGoGbNEf1obGUycHh2YODV8cniwpydjGNb/WSRAaATgs07UarcbjUa73W614NWCDxAeTAhhjJmmaVlWJGJblm2aOv7fo8E43TG7lkIKhZKKQpHPr/35X/zV8rZTaUc6KBrczrIo0yllBCPUvaP1PMChZoSQnHue6wivRWTbJM2UVTs7nvj2' $Logo &= 'H//h0NDQsXTS9QQ0hJSNev3g8GB///7h4f1SqQRCcRyH+wiMUVcVlFJoM8YMw7BtO56IQnLq68v29vREbDv0hxDi+UhFoWDo64NCMTQ0/M7v/e6nN5duLxXW7jVKzTb3CCEM0cAo6LkZBZAICN9VCiQ5w+2U3R4fSp6fOjNzZjSVSh03oASVHlyv17cK9/L5fHGn2Gq2PJdLIRljsEvXdWiEVoCDu/kjbDgB9x8crK+vE0qikehAth/ElsvlYrFYqJYn6kShUElFoRCHBwfLK+uzt5dvLWyvFZrVtiVojOkRvw7/lUWWMKAIgSCbeE4N81rSdk8NRS+cGb40Mz4xPtzT24cQOV5Awf4PNA4OD5cWF0Enh+USbFJKDd2AXVgiQin0YJ/utIVNEmxDGwOccwJQBIgA7nrQBr0NDw+Pjo7192c/ryL0OAqFkopCIYW3u7e7dDc/e3vl1mJxc7dd70QQizPdYozhLy2YUCQwhgcmcRrYq8ZMZ2TAPD+Zfen8xMy56Q8++PepqemZ8xePW4GHfyTIGVAimpu7s7m5CYWTIJFoYWoRQoahhHOOAeKf2C2o4AC/LXAoE9gKjwnPokSDtuu6cLplWaCWycnJbLaX+COLUDA/1i4KhZKKQiG8TqFYuLO4Nre0NXd3d3PHqXtRRG1NtyhlGMtQMMcRCfc6TQkiMToj/drMZHZmeuTs9EQuN9BdVfzOH3z7N9765bd//c1jSSX0Qalcnr8zDzesatWGpmmMMc551xndg4UI6yiIUPLI7S8JCNxtYyLxZ1DyUE7BCNJ1O5qmj4+PnT0zlUwmu/fc0BejUCipKBTf//678bgdj0V39so372zcvru7ve+2RYxoMU03P3tORTxRJJxzt+MvII6ZfDDDIZFcPDcyPNjHudB16/Tk1COOeOeP/uTNX/qZ3/rNbx2rfAKBY2VtdW5+rlwqg04IZtAPnbDrkdI69Oi6Dv0SccCXSADsogGM6tAIB/d4BwYJ' $Logo &= 'D0OShPohwX/GGOyC4BKL2tNTU5NTU9DzPMKKQhXqhRDoOUIIaXecWqMWtaOM0nKt8njDMkxo+x/s/yWKY32hFtz9+3+5uryjj56InB2LvTxz8q1ffEUIvra5Nzu3Mb+yuVfRHG4QPcqYjoORBecQSYRbtzRnKMVnTvddmjk/MjwgubuxvXftxtrf/NO11c3SG5fif/an33n0s2Hc6XTQ0QiNAgFl9vr17cI92LRtGzoF9xMG2AUBXVswBvGiXm/s7BRhDVi58gDK+K1WC8QQSoUFmIadSCTi8Xg2m01nkvEYiFPvAI4HIACTcMGYYRggMOi8cfPm/sHBxYsXoeLy4r2iUKu/MCYISbhm7y4vLt1dhM1YLCaECDN7iODc9dxuivcA7iEUxHYhYFY8jN4SurDreW3HYZRRSjquqzFNStFqNSGtu51OpVoaGxn95uWf7e0b0HX9i9WiUBDK+vt712rJnQbbut5677/mY8aNkQH28rncr1y58Pu/01Nvdu4srd9a2Frf3q82BUIymaSnTvZcOndm8tSwxtDmtq+f7/7rp9t7nYZrET2u6TnPTCVTT5oNwcMrR3yMkRBSKBZnb8yWy2XTNKEnTB6MYc6FFJgxTdcIl2L/8CC/vl7c3Do8PHQcx/eBGQcDpdIpTWOEMUKJ53qwq9VswrOf9ZVVIbilaz2Z9NjoyMSpsXRvFhPadFyYUyBaLlyEKZxF4B0Mvbi7U/249tLFS7BC7IVX7xVKKkhKxD13fX31o6sfSikz6QwXnATr68N19AJ2ex4cRqhvjmarBRJilD6UjZACXuGSzGA02IRkLgSnlEp/EC4Fh9EqlUq1Un7t1ddGR8dTmV4d6egpKBQ4EdWl16Z6lJoWsmxPoqV9b+798t+++2FPjJ8ZS3zj0vg7v/3zPekEIZQGhYpCYffTWyt/+dfv391sVFoGYnHNyFGbRR5WYpCLZTSWQo9DMIxwxGXIyyvLt2/fFkJEo1EZAO2wFK9r' $Logo &= 'umHYIInV1aX5uTuFnV2OcLJ3cPLi5RODJyCFxJM9lmWFKgJgOC4497jjdOqNWq1e3dvd2dte3ykWPv7v65/88PrJoYHz52fGx8fjVqTZbkN0CeWHAyKRCPRcu3at0WicPn36RS4MUyipdPOKbUcy6R6QRBjhCfYzhxNcu4wxzfCPAhCAqa4Zhq5B/qAuzB6Tc5CIG+4N10V2ALcDw4Y9AAiIu2AgZFoRQghGR0KhyKQTUpaDpq8EjJDGiKYlEEpVhfjPpfZ/3F4x6a2+hBzo0XWNFA/a2wfCkSCSFNOyVqK7ZozDHx+MJXdty0SPQSkzrejTJguGrL6wuLC8skIp1TSNc46D2on0Qb5jBFpYWLh+fXbvYD+eyFx45Q1YU9Z3YjiVTsPxhBKEP/fIvQRg0z/dipJEpk8Ib3xi2nVa5dKDw73d1dXl1aU7//y99070937z9Z86NTUNFqlWq11zCCEg/XDXm5+fB5OdO3cu/D734tWiUA8/UkoNTUOCNxATCMeR20JGi5oESdwo41YdMWYh19V1z4hiZjMpCWOoekhaFcI0jFBoFkFwh5kESwwdhEjodQkcCS9d1w3dCKqRLx4p5VM+iUR+DHtxKNIJG/G9h5m6i9/mBCPTMJFpwdauIwqbrpSSMY1Gw1AiEBJIPnFVi2dQFz2GYactK/LFRuGcz83N5dfzoIfwlhclVAaDQo9hGMVC4erVH+TzG9n+3JVffXticqYvO2yZMYodKXyxCZcH84F8Vh9BhMLZRIBMOApyv29BYUSTvWYykx0em7z46uX88uL8jR/94/feGx25eeXKlcGhoUaz6XY6cL4f0AhmhiGlhOVn8PfMmTMw0Z55iUWhpNItJ9Kn5WAZ/EpGKdONtkANLSmZqYsWJ5pLfKkQ+wFuVAQiRHKPWk0WlVQjGDkwvpGSdqmNqZQIY3+oNtI8pHEkuPD7CEJmrWjWqw4EHE0TQkA9H+TyTBZBht/yjlVcfWSmOU7bT1au' $Logo &= 'C/vDRMaoRhk1DNOfrpgcfeGDlIhS363PwncA+voQGpr40fSZ0pNJIOmiH0M3vjCCmK6hgDCUfAEEyd6+PvQYTrtVr5WeWEfptpeWlra3t0Fm4fVACfEEF5jatoWE98NPfvDxJ7OYmZd/7tfOXngp2dsPR2K/bFllgUUokYQiii1oE+KPHJrFfxchDCqFpFwyKiTyXCQJF4gwM53Jxl9JDY9PLy0sLP7ow+/+3T9cfv2nX3/9MrKsRqPujyM5JhRgjBUKBWiAV76S51cUSirdJ3XRESBSdCSqIL1t9nh2b4s70CnD9BEZkJ7HHZd33A6XLsHdQWm6p53gNdfjQhKMP//GDY9zj1tCppsVzDtIyo7r1puNaqMWjcYIDPAMkMepIeFHplmzWd/a2iiVSrVqRUgviGtaxI7Ztt2T7YPaT8SwukI6Yo3qy81iCT+hn75mYHyEC00e1zqnJ0Zt9pGQmKBngxDYotVz0yOP9K+srNxZfWCay2+/+QuabjxyzYSN1dVViAKQSLqyCZ9qTFl6pVZ/99/eX1nLD0+99tKr38gNjZh2FCHudhxKsaFpQWkfhy8WLg2mMhAKCUcT0CeEJyTnEhOs6/4pnAiMPddDRMhEInXh0sv9udz87LUPPrpa2N741ltvJ1PpWq3M/VjGw9QCHw+evoS/U1NTz/6LiUJJ5X/Yew8oOa7zTLQrV+fpnpwwGAwGg5gDCWaCYI4mKZESJVHJsq20Ppbzyu+tfdZrH0u29lmWbAX7SAySGMUgJokBIAiQABFzDoPJsXOu7n7f/9+aOs0ZABwAFA/fPl0Mm9XVFW7duvcP35/Y63H81KnjkGgm8kDA5kEcIFTbNLtjTsBtu8ZjelsWCexF1QCqVVL0sjCjlMBDihaZ20E1VIj6JSwlF9FOESMAp5ukS7EU/OQSp+QsC6vE1FRyAsAakcsWDPfZdD5HypDbMHGJeCp3/MTR44f35XNZL5s6He6ALU7aqolU5eiZSh4y' $Logo &= 'JMWZpokcrhAP/T5/wB/E/samVtzS0SSmo6CMDA8cPHwQbqAwbMbjsTRnjYX3gdB4sOg1TddUzXCb4HzIFzujpXVe19zW1nZHtXKiECqbIBDdo7Hd3cPpbN6SJM3QxJALblPCIFo0iE46QMi44NQgTF6PEfSZ0CiDbr0+4Knyuv0ew7kyjvjoS5t4KX2jsfX7u4czOYyfT1ezkEBKRCotWEXSWWBRV3Q2r5s/47wu29HReefa9kdeGfBVNcJr5CIj6sEC0vGBf/mL29ra2if99svnX88orW/vjx05enzBgvlTxRFoAMePH3dQLycBl8/rHR3oe/yXvxqO55ZdecvsBSvC4WpZ1yBQaYqLsSm+AjcZTZGw3rBTMBhxEVZUaBBdRWKg+MCyI1VDxhWY+WBnGdpYuap+5pJLPdW1tXu3v/3ww4/ee+89rTNaEokYxsaZ6kDhwFewWGbOnOn6wNvv2u9sKuPjY5vfeWtosN/FOVAx59LpVL5QbO+YHwwE/a0tmLVM+DgiC+SSuENJKhakQhZ8A6QQJntEYhGWJdsJJRSgwqCQhDxIGdj3iyWVfwLdR7AWeFMZfSqrsEioQEXKZBqFn76Vp1mvoilqNpPe+u6WF59/Mh6P1Nc3gLC+hwcoMsg6uoPTCNzQNHQSC80N8c/nVRUJHAVuoQCOOzvntrd3Yo03NDSB05wRORJcM18sxaIoQLvvyJED+w/u6+3vTyaSWPkAKHA7NFuIxrX4X4HwB5wrNzY2Hpm/YEbrrLld85qbm/2+gIiXngQsSHz68aHoL945GM/kC5JkmAYXmyIWi6EvYdCzuSIbmSb8F8A28VH2ufWglxCVoNtoDvnqgt6ZdVXNVd56vwfbTJbAnD+iaQQde8eunpEfbNh7PJoERwmoSrJYhqqKd58pFEeiKTDqv7vr0vNlKmh//OVPqepjj/36dFGrA7m8oGQtEv6y2bTbNfw3X1p17VWrz4izlYp99YFSQ30lMmaHxEOX' $Logo &= 'PXz4sCyYAK2UstgPszx0l6ee+GXJCFy67sbq5naP10dyQ8nirP2q3VE+S+KG3QphVcRR+FMWGg8akDQFs6KMGSEOdjETok6QrKMb2A+UregN1rXNXeoJHd32+kMPPXTffR+fPbsDuZAFn3MmPFgguldTU/OhgWD/f0HbfsdUQP6QJDWZSgNxNUxCcgsWEU4rG7cycRFRZVMFiZpYgySJ5Ymgc2kj9hlWJMtOc0RHIHl3ulCU+VRV7KL1UM4WrBLPLdrAEgKCLdQaaqQkZaETQFgDS8qlYc7IZgv4xCmTIJKsK+eADLm87V2WSqZRx8l+Zmj6qrx9x/bqmjq/33f9DTdfuvKySryisoElDo1FXnn5+U0bXimxuhYKhmqqa9GviVSAaJKDp2Ef80hiqflc7t1t2za/805X55ybb7x5yeIVUF/ONtp46niuYGFACLYokBEqk4FqI3k8FL+Ai6maBSbGT8nOTApulLCs6FgsX8IAuvS+UdMgitQWDqyb2/J7y2Z73YYgix9V3EsSHrUD8UwCcjYeDnMjm8srWgECN1K9Zy2wdJ9Hq/FcCIiFaVQbMr/1p1c+/My7O47kJb1aN0wRSD/NrJG5bEotRa5e7FvW1bZsybwzEr55XTOLmV3LVjZU19RMopJQZAGOYR0J6zc2ePoZXp9x6uSpJx9/tuhrXLT6Sk8g7NY0FSo+gGQXBDWFJpaAuLAhtBNXWcGrV8uKqpCgxDAYfoUUI7zIJFtjxziW7U+JroVJSxdQdLVUcJvudMZrems7V91ycO+rv3j85w/e/7mZXTOhdmONCealc9QkklrCVQzuy1PJ/aRsx7QxtQzMeTbnXGfopqaQmVQYZurpk7qK7bPda/rHOLj3pB5OvZdz1tkuPp0Dph5c2YGpZ03dWbl/GmMy3fGZ+tIvkKkIGRoyjmInp5OFMz5t0KYsskWAAmK52IRLTHWChEmQxjQnhxV0iM6SIEdlLCtr4QecSpZGhQ300Fey' $Logo &= 'FnEUPlciPqGocj7jSo65sglJVmXS4Olm1BvIZQWQ65zE2jooD64luRy/ZDpAVjVF1SfmmhMKIGmqTgX8wIsKUiaXH49G8UB9fT2nT5288fqbg8EwHpNFv5Lj3LV//563try9ceMbieh4oCrk9XjBYvEn5EC0M9NKjs7Br4V0GvjYnj07rQKqE46svfZG4SYk9JWKSVOKpNPjuaKuSioGio5gfiwr2MAYlVRNwhVZbJXtMxmWYTamyUSNABVG07lkzhocT3b3DJ/sG71+2ezVsxrxqnC7j6yLKN4jJIZkPCVh2E0tbYFlsm+6rGQKOcxln9sM+f0XcOX1b7z+la9+pbml/S//9Mt339j08vp9Ow71Jwo+RferqiEI83t0lzLNPZ7SmWI+FnZn166oufOmdb09Pd/4s7/euuXMqb0KBQv0G9N3Kvk7ffo0IhxBpitFFrdHHRwZ+PnTv1QD4QXL1+jugKySZ+OEw7xUnlxiixkI/ckqHwQ1BbKDxmoyVNZCHhZNvGJMWhXhjY5wY09Oh+zQqi17fP5YKu1SPfMWXHN071sPP/Xw5x78XHNTUzIeB7MSN8WySiQSwMEQvHJGyuhQOvG1Eiu+MLWD113pjAS98r6VOTSnQ1gvskizw9imXhxfp/IYQYHOeHGn5+dbGdqhYZUjP7WHH2xRamfwJzGSSfzmQpgKVp1hmGiAg92mCVKKeyAGxTA8kPWhN2BS23YCx/YAFB/wFnQUbDDqJTgKlgK+QkFJWxYBXAI0g9KDTrPuUoABpQJxKGB3LqMnh2UrDUirYOWFEiPcrGRFVcnuUsZyxZqqfHIx9hBINciGJYY72LLpshOJ6xaH0Qi3GUB2WJG7d+0cHBgYHxu78457Gxub8ByOJWLHjq1PPf340WNHEDjW2NRiGgbwtBKvV5iR8H96am5l595ouDHje6bpxgBWBYMjI8P79+8/3XMaj3zHbfcIj2QnDA10ARVxsdTBLA3FwDjb+h8QG4kG' $Logo &= 'Dp+qrtOc5VlRrITpZM3UNYl9gbAfRilTLyZT2b29o4f7Ro8NR7PXLr1mfhtJAHzuR6yxaS0PzpsFY/Ebqs9jFmQZ40fdNUD3c5Ip14YC4WDw/Mt5nfiDP/iDeHQsHh3/3Oe/5PP7b7h+7V998dOJjGv73m4kahmNWdmCUnLZCRoUWpo5j1GuDWlz26tXLVkyt3PG6Hj0u//x8ycee3jN6iWQ3M98o1N9shE+1h1LJWMeb8BZb9CMh4aGQKDxleFhS2RkgSnu8aefz8jeRYsvd+lBKFBu1ZAlFQvEpsk018XbkiolVjTs9piGpkpluiL0OJHZBTixhlli5QrvQXHLvC12sBSHpaQZmJXeZKZYkgMz56/Zv/f1J5584guf+7zf5wMsIepIiuwv6Hx1NUwwtZOYxNnUEbEWLh7+wnXOTWQ/tLL8lZpTJVE+21fBaM5xKbRznD61nbte59k1p3Lla7qYx5/63i8W/qqYjyWxQbYKDmxERGIinfSYpphJjnBFoE8xD/s8tis5Cv6lLAscRZYcuEgCI8lZFDQgTPdQbnA/8XvOysNS7yFpTC0VwcnI4k96jCLRMaxDQUeJJxJEESpZt/2ZK+F8bjK5tRgAoS1uE+uNGpgl1pIvEIjHE08981QwWP2J+x8Q05qfNPvOlk27du+ora2vrWuAQA0FCQyAPXwk9KfE2zjYcRSwmYQFK3rB4e1ouAI42anuk+9u3Tp/7sLm5tZKHKyMZymqhVxRyWclA29Ewz7nBTgb4uoCJwQjlc9An+k0TZaqfGbAXTs6Ejt4evjXu080Vwc660NUseMjGTozGE0hUwqGF9JCqUzKaN4qU0YREkzAfaFfsvp7Pm1gYODWW2+FCy9/IzAyHos8+eTTz//qpSVLlt579+2rbpmDZFmqpmdzlsIGCtPQfV63z2viZu9s3f7a+s3f+tdHDxzYGx0+WixkYLiGdHXGVbJz/2nDXTUYSZw6dXr+goUT7uY5qCkit0pR' $Logo &= 'GFLYKIiu/PrXbwyPpueuWlc2aouyrqlAlsFRhNov44PXAK0ZZ/1NzC1AnnI+l4mMxbOwbuazkN0gXWEuaWaViA62ZS9bia7UVMqs59Mn5C3dY6RL6WLJM3vBNcfeff5Xv/rVJz5+H3ajw2Jd4FKwSp46dQr5xAwOZKmksAcPHgTLBL/BMWTh4f3YgNCGnGYoNzlv3jznlPPy2oedaXBwEOYczqXm0GgaOiQ9w0iuXr16UmcAMKZSaV3XnLGqZE5ix3Soa6UeIMJC4Y+D/txyyy3YFlkPxAEYpSxXdxZ52JzimxN3tOUBu+sTTcSDQ6rwcsNoY5zf16SE/bjR9u3bMSZC+nESHwjej6m+YsUKZMmqvFQiEYfDIdBLC2TTFlBsMiuGVBjqzphYj5Ea+z96JPYMdB4N9HL37t0o+7Z48eIPIvhxgkTa+SHAOXRR3aFYxrLL5rJFo6wXJdWV48MIlcYNGPUCR8ngMKEA2TI1UUaC13CxIns3sXwG1Ae6DEMguI4rlc2hKHeJr8ZYsY0GMJJs0Qrkjk3yEy7iyhZ9IapE+kRBLhUZAFCJeJUdmEECSMcgnCuTTr348nNVoaprrr4Oahk83zZt3rhtx3YC7lQaVTymDYvnc0KeZBTLQvRyPB7FpaCUBIJBvz+AdY4Fj7tNyvik68beA3vf2PD6x+79BAgBBbJIorflSDqXyuahvDgonoRmn0vwYJ4z3wgGBi7qiERlx4eYPyUxbxh/193GWK745DuHuhpCYCrOpPqoRbIMx1Ij8TQ28IScU9EeAPxBBPCqasg0Srnc9C8IenfbbbchLmQq3chl01u3vP3uu1uE/UBRQQeN2Z1zV116eaCqMRpPnOzu379n22g/DCEFfslFMbIgAWdc9mOjw4dOxnS9PpPz7j1wbMHCRWJsh4eHAXxhzWOK0pwhA7pimMaOd9/eefhA69yrFHcdwFFgASoQYrxel46pzZ4pAHOJsQj9G1xWKKvkpqG6UnEQ' $Logo &= 'bfyNw4kGGjeOQcc4laTH9Ic8VY2ASUvZrCBh6H6R/ghJxQYkPhftIwVeI6W9BKS0KPnq5l6xd++m2VveueyyywVTQYcFoQEIhgdxiiKLy2IxnO7pQe6yxobGdDpDUDA3RSXvAzw1KA6YygVY17ABjrJp8zt1dXXpdLpc0fCYmXQSpBNMRfTEYULbtu/EwaDy+DoVnxEfmiY6qfAndjjhyXwpBh9EigGbxGGINO2FF1644YYbiKNMZJWOxKJoSByFF4B8a5AUcV8SVVmydXo7Yd4l9yOx9vGpcgS3AH7wysLhcBU3r9tT2fOpdiPwrbc2bwILpxuhVXh0GjoplEiFIFIvStywsX3Hrt7eXrw+UQqhAgi1kRWhkgpuoXATQ8Gzlau7FSw0nIuDoNxiEHAMco8i48PmzZv/8X/9w8VE1E9Ve11846LoHafahlRZoIyoJXSjVMAqYQKhgAgyxUxbxVRhAvVimzzwLvzhCZjIsX8SjuML4lwcKhOzUeOSz5WTXLCaOPgWTYVigW0qBJKA1ucLgoFV9jhbEHW8aS2rWLh5BTspLN+gqk2OFxD4DLgC22bMGa0zDh7c94vHH8XGgvmLsFo2vvVm30B/fV09Dsd75UfHqXR73I5Gni1JkHC9dfXYgKEGh8G32qCar6RtOFISguNwfFNDw7ETx97atHHl8tXLlq1Alj8cA6KGw8YT6Wi2UNI0sjCweifgQ8Ek4EAHjMgiYxJFTiu8QgTxVcgpiMdwwqmamDS/Fb/PrWjWviM9mw/13H/FQk0hnK1MA6JOgUfxd057vlh359+4l9K5rzaSzo2lc4x5lrMUEOgq2RVCimDaXt3TEvAqIIjTaxAev/CFL+zYseMcIimmBIQ4JCxhCSG3c8e7u3btBFFkEdUCKjrVSWzVqlVnvNax492RFOi6oujB/Uf6hciFaQA3YsdIYANfbnNoaOT1t3YEa+d4g415S3ZrOo85WCme3QISJ/E8ByfBn8IjB4XU' $Logo &= 'oolQdJv6+HB/cnQ4mUyAqeAFagqLuiyWwlLpK0qJlBWqbZBlTSR/4eR5LtrAN/blxwanxccmKfAgcrlU2udrrm7uem3j5tb2prralkwaPIlGWyC0oE0gf5CsK60CWHfsrM9uzhMNB+PaQqK/YPhLhGE6YrXDP2g/t0q1BpR9z569FBOdy00N2ORj7CZsUnZTJgyZZcnurUIHOxAFNgI+/yuvvALvzU9/+tMig/UIwMzhIZTmhDsfeFiRmyA3kA6nmlhYVSnLvAIcQzfyH+JcbCNDKBRZsBboH7XVNZTVLRCwT5zqMcS5qx1kEhCQuBXplLo6VdxB4gaIAuB2QpWh+eSMTNkeJbbQCYZCl3VgfPw68RIVNMBOOFmAt5AYMOC//vWvv/zlL6Pa24UxFZ7vAsh39vB3kPSClWPzPf0mcRPvLk8md7KOkEM96wKEehWKDuqFf9BRQCVtN+KiJcYHnwWiiHyMiMSQNEsOlhS3KtFKJwrO0V9FYigZSo3H+r3FOcAnQZaYZCDxuCmO0TA0uoZtDB6Wk6FroMICapawsHTDXiea7nb7IP2dPHEUTEUUAydQjpuhU8NZdCg/LG6BPkCFnTtv/pyOTlyuu+f0nn37oI1Cw21qbMRZDiDGoZxFwAKmbgJSP3rkUFNLM4QWvKpalWCfTN5Kllx5VTM5EL9IACApYoIoC00uB/YcTyMKVPUChNeFG5ipSIbynuLsjtIN04QhlxuC3pFE9vUD3fMbAzVeDfGnqCCgqdp7mMr7eohJwrno/Jt05p2V1wIKkymVhV6ZJ0QUwBdPDMsCUwE8FPIaHve0sohiPP/2b//22WefPfdh3/zmN1999dWNGzdWcDnO4Hv2tmzZsjPu7+ntB4n3lHQIMemsTXlHRkbAsQSdLXKTVLwu650t70ZyxqyO+XlJk1W5LKlF9s7CtITvvUrL2IW9+CuBubKzZEmiLJZujx4fHx0d6oWffToZh1Mfi5g6oy4khmPxY1Vq' $Logo &= 'ZXm492R1U6dlEerMsJuQoCSsLNwFw5vF2gXb5vtg9stqAVwk2NBxOjr01qYtv3dHM7pc5iaeBVI5tIdZs2ZVWmsElceKsAo2KCSYoUOeLswPUGwL6okVJy7laCoSKxMOtwDR3LVrF+dKz3vcbsezpjL4zJlqLJLbTdXksxnPsY2rgdbv2LYdYj7mEqg5uAhEBKi/2MhkMyWGB9EfR7PhqeswlcqgN3ZUmmhi0MRZ4hhMEkBbsUgUDYoIog5w5SkGEjuaAnzdLhctqU7/TUOLjI87z4vD4A4O7U2gGiJjKYsqdmMhw+YxGjccRp/cnKFg+YBLQRSy+B+6DZoGZeWxxx67+eabb7rhRsGML8iluFQi2g2Tnkb3K7A6UgnQ2jGRFTidIPQYuQyoA04EC8H5hMZIAvXC1ywbSAi0heRMeAcdD3UD3EioHPxkxCkISgPcjEvlSBnjicvCOA+MhX2cP1+qEGewBYaCrjqKAm6fL4DcsKJadNXWwPoYLhRozPAOcEXhpivxqCZTyQOHDqxefSlruVHcARybB7dAj8b9I0JRIA44Z87cK9Zc2TmnS5aIHa5YsWb5stW7dm17++3NCE0wTaBouizAK6hTLEQDhUWfd+za1tnVtWjJslgijtCfaNrqG49HUuAjpRx0EeaFRRGMwk5rCIgExemq9TfObKClo6mxbGEwlkpkC0PxFKxPQY/p0xVMGZb3iSfhxiyZutyaMjge33qkt9ZoqXdXwVMoUU7Ch83Q3kOmAUCNJtJiJNN5C5CUW1ebQn5ICUBWZlT7SRqbRioY7BcShjPRTwyNI/hmLJXVVaW5CmYLrbHKX5kadCSRGUjnMkBRVJpAedanJBHUVyx5da0lDKVLn460+6Mf/ejb3/72uQ/7y7/8yz//8z9/8cUXXefTAMiccf+ll6z6mz/MEsqqKldfeZlwI+7v7xezsciNDF2G3tfTfeDgkXDj4qLqwbPpMvRdjVg/6+6Yj/iDROGYDBXM' $Logo &= 'MwwkrT4yJ0QGev0eLZ1MBQN+zD+aurKOZhNK1YPZAoNQIpke6O+vqW3EiJLIRY2C7cklhQNmyfWS618KdUXVtJySzJXUcEPn0WOHAMTPnj0btytxw5UFj2xoaHCUFUE9OZrYi7UrjhEElJLzQ0e/uIaHwpXBVPD0E1SbmAq6XFm4DBwFFBnDi6BmXpci6YAyyUWqzI16aSM9JOtiS8CDDqTvKNDAoyAXbtu27a//+q/x1LAq4aswn+AwdExA0A5zdTL+lCtaJVNxDmOnbfrnjKHw4Ehn0hhhSMrgMZ2dndCh0bepKhcALpBfAlSLzi8kIjuOc/gJnO/I4cN4CxAdhOqD6ziVQFlepYMnhhGnaCo3jIvDUXgY8BNzE5XIPn6Ftvr8889jFfz+F39fQIUXbKgng7MwHlisAUF3Zmck/lcU7rusQ7hKrMXbloocFD2E6zFEhj+VY1LYjlIEvcfqsb3VylK+THQEJ+ELq/kT1gLaT6fxqa6CHUBpR0YLtQg3BoEW4hgnR5JzjLzDXLF06TwkzsM7cABOULTI2NjJ7u7RcVQ6Sug64Qa4LDor3jJOx9DiMQF5HT9xDBwL5B7PjLuIKuK4mtBSgPMl4tGWluZLVq2+4fqbsXM8EYUJJxyqQrg1qlNAw33m+Wc5YpQev0DAlajjlIOEA4ByaGQIs1SVFF3RpFIhl7d6xhKj8ZRMgT1gQYTx0RRgwxHOHkvlZ9QEb1s86+o5TYlsDkMxmsj0RmAlzB0ZiR8Zjg9GwZ1yflPHCxH4oUK8t4zhLSpqLG+NxDOQSEzDHc8m4YAA+d+S1dFkdiyVScG1OpE5MjAOLkXMQHIls/n+8YTH0GfWBjHCNV6zoz5U43eHELdg6GGf2+9mjZvfqTQ5gxlxPcgAI7HUUCx5dChyaDAaz+ZhjYeG2Fod8ChSR13V7Kbq9toqXAp3HBmN9o/GwILBU4i4Yo4JsxkjreB+M8BUdO19OcpPfvITKObnPuwzn/nM' $Logo &= '//gf/wPIA9nwp91ASs6WPxTT4NOfun+SRQfSPfojKsPbIIxV2rbrYFat8oSb0gjFBdMv4YlIJ6FwWUnBf1hfDPxLRWY1iNRhtLeoWMb4wMkaP47JA9xmS56uUCMAijYEseRA17racPL08Hjcrej+UiFjEZJVwieuJjDnEoHNFqkqNE+YeckGcFvTVz2q+nbu3t46c6asGGXkVAJBVGltgNhBSMcgOMRakWRNUd2GCTovgvtF0XtyjOZ0DxcTBQkoAaIHAC1HTRGmo6JlCuwI+4HsA4oB9SS0QFMlbg6A5iA8gkg69m2hAwkXBowdjSQj2I6a6zYMLPxfPff8Pffcs3LlSvgjwGKBY0BYQOsrNSGHlONXgROIEahgKwINsTmuw6SdntgcVLW5Ah4NR+7cuXPRokXgH5NUATHaEAQr/arFsIjnFaYXMFqghBBrPG6j0meMZ28lxE1jwjMTh+OP5hLGaWLA6ZOz+oICKWW5VFNdA9VtoK//n771LRwrdJcLZCqOhVkMq3hpeQ7k5k2h01GcisycocBzCUBuOk8ossaD4mgxuSJxFDvdCDUwTdLvC6xui8OcAAwR+OVgM071COJkE7Z5MeikwzBIohoGCq8AKG5sbr5u7Q2XX34lEoVRiDGxo3J9bX10fGzru28/+fSTBw8fbmxo0NiIytb3Ei9LdmNhABGvB5/i6QoUdKhLrAM5PQSC4A+gvl4A2KU/GIQGhwWIkkpuj9sfCC1evGzfwX2UVtIR4uyXKWWyWUxruJzhZiKaB0K4r6wnC0WQciFOSezrTK+UCWvaKiVyBbemLmqr62gM9w0MgUvXBbSuBh+8qqPZ0qYTQz9fv+fQWMqoN4QMJaOHYGM8SlmAHFSDQPP5fS7dXZYS5AlXlvpjqTcO9716sHsskSrAYEOgiIRD0QOBwsNG1JtIYZEZ5dKmA8RuQwHfovbmy+e0rO5o5KcRAsHk7GNofZHU45v3bj/aMwY5QtOIWxeItx4a' $Logo &= 'jiGDG3hlU0P4c1ctunfVXIK/4EcIxcg0chbZqySsUpWImfBE0VU54NH194PpgYC/L0e55pprvvOd74ASQTAEqO2adrv00kshwE7nSEwbqClY1cJEj4cW4m1f/+CRU4O+6vYizXme78RPyOBBf1gzcplAsAnNm3OskCylmfroUHfIDTprxJNFXbczMrDUbZueFW5OYeC2GY37jvaG6mYWyHuOVgCYG2n6AAisEqu/aBL2409gwFjW2YLLF64/2X8MPmxtrS2YEzLeQ1EVBmpI6xDbxS0csqBxc9BvoWRgj3xxPr7CoE1drCDTuHA2a0vTeHfCHQAIFeRxGpApLcvNoe5oTr4A6FhgfpI8JQ6D23/9138B6nzggQegtMGehNkCaiBkecdLSoyJqPGMA7DhsC58imtWRqE5D5Jnw75wdqjkoyJbLn4C6wJjgDcX4KZJ7tpCmahEAgQqKO4uctAJvAvnStyccwVfcSib4Fj4dMQRPJ/XG0A3HC7OSgSWI+nEUNeAFf/VX/2VQPXF3S/YpmJXbHSV7XwnDv9lGzEJlNTRXBa2eQ+DwArjGhZrUCpv58lJq8zWZhgjWUchBcWF6S0YBF3NxtEEtyeDLWXGK+SVVDKfTgJ15gp3+WwuTZYvVcGpmVQ2ncnm2abEpYqASpPDAnEvRkVRNKwqHCKmweiboWh+L/75Dh1Bwtb9GfbZECoIxlVgccJfC3ruwGA/RECMvUpSAJV9AciNn3gcyAiPzLKnTp7c8OZ6qBOXX36N2yBshAP8c4S/L11VFQrhClO9u/FCWYNRGuuboFNjmVNWJinXHU0NJLNhr5G3hIOOTaPBhmNpzMJiyOeuD/pwLQ8Efp1IieoiE31zgx+A8qbDvbtGYrFMXlWwU7gzQAgSyQcVrK0EPR5xmdpQ1VA0/astR9883Hcinu5NZqAdYVkYisAOLIl1Qzw43iDGN1sG+YG1zkLHBlLjkWTm6OmBE4PtqzpbZ1QHNMWW13Aw' $Logo &= 'pjzOAsL44r5T7xzp3XqkJwUsj9YT/hVl9sYQ0Bb62X96OP3SuzAcLWxvGMFDyjLJ1CWaNzK/0Ak7QMmtyS1Bw6efax6j5tVnP/tZrMlzpgLr+OlPfwotHts4kvTOaTfQL9CO6Zia8U4hQTs15MUKxAQ6euxkqqQHPWF4bGkmdBHm+hDOoA7IJcgzlOaOZj+VkMTME4vCNNRoJKYV4w01ddl0Wjfc4LqiZJH83iZxU9hvPhDwtzdWHT59ItDQgUWRt0hgAOTMnjHCkUO2WJyiP1rKWFQanDcVb3V0bOD4iVOtjTWUJMciGVxwRzwU9BWMXiWZc2ATpwMYJex0XVxzis04QJawG2tMgvDuHn30USiazht0aFwlpgR5Hx5owpkNBzixBOgh9FT4cQhWVGn/wPWhl4Ai//Ef/zGYFpgKOBaogQHkTRAKboJz4DAwJ6ik0JlgccGGECAqzTPi01F2IZe0tbXB+C9cOSYFoxDRZ4YvkL3LLrtsUlQ8BlYgUZVGGodN4pRHHnkE3RPS/9R0UzgXHVizZg0eCtvCnFGpvb3++ut4EGw73FGwHwwLNDasL6huYtAurp4KDws4FrgLcBtHO7F/YmyrXGI1HwI9pF2plMOWTJKyHV1YJog8T1dwYY4yryCOkhHYLqss4hVMAJAlNieS7qDBLpKO5TNJmEQgSmMy5fI5ShmpUPBwFiazTNYi3ZN7QYQPH7hmAWmDoa3jstF4FJcjCqUgCIZSdYWramACqaoKpJIpdD/g99oCkQD3CoSkAT0dj4yTEZJmLQl0lpVzpovOYoXP40aUNQK24YiMfiGNGKWG5Y6lovHm5haQoXOPO949gDhZlYVBdSSaAKLlBX5lFcRkFMGMYDtR2m9Uew0wb2B7mLkcGkrGVqAYjZ5gY3WgKhwoaSqIuFuXwUtYunMpjFOWi+QyBu87DJjLVTUYt1490Pcfr+080Dvqq/LVVQcAX5uaCi3adsUWirxAgdEfxjO9HPcO' $Logo &= 'v97xROJg/+jh4VjPePLjl3S11dlUxgnYfH7n8f/chNyQ47hmbXUVtFVyisNI4oEA/OPIgNdfsCLx1Kaj/YlU7rIFbUciKdPn5sw0DDuzzZPM1YqGrvhNrQl5DLSzqtuQW++//36Qg3NzBbiHOi4rUCbOF+WfpkcTNFeQIc7wZjdsI6iwp3dAcVdlSzrlRiAezE5ZIAqY8XK5yLYDixNBEshVxEqSi4qUBtyeiC+fXW3lUyx4qQyQT9irK5rDwHC7bCreUhsYiWX7Rod9/mCBoQW+PqGr+OTvriJzcVaVaLQLJYWIjDuMribjUcnjR6iYLT6yORDjDKYyySPG9pzlwxwN5qKzbTsb9jNWejPTOs3nQf6c6JmpPAlQEmg9+IrFCfIc4l5kvAgSPU4HlcelKtUU5seBr3/96/jptddewzJnSIrXApNvB3oCPAWu89xzzyF8BL3CWQ5AOjVsXpwFVU8EtcArd926dQjyKLDTbqW1H5QNLxwCMVg4uCY8uR1FqlwReFQJDDhIEo5Mcptk6he8ULAfTHukSIBHAAZQ8GwnfAoSA5A3HCn6U5kZAZTq9ttvBx5YaVG7yCJdFXkRpniHCnYgGCPmblYqJnMFfApXV0hDIiMLttmZAPCuDFksz2OgMH5lgSexk7etFXEdbSZSKheRUDk1ci6dyuECkP1JxuNFxdKRk6SPZr+i6/lcXig9+K0ydzFPNRrZTCELnMDj8cViQ0L1IyMQJ7ogUAv/K6sM3dFZFr6T9mMr4HaIM+WpJEgNaADY6Nbt2+Em39Y2Y07XnMWLlra1zoTZ0L4tcjBnkhanahZ1+AV7I684i3L/AZIq4SceKxW+BDmSJiv97oRchEhAb0nSJRcmnKvo5gRZjG1hbPLUUYxxhtS0ktfNuolw5GXKJfKPYdLQYYgjymU2H+19fstBmEw6ZtSqusaJCVzwVy5rAJpIz0A3TVXFBi7hBqcUD84oLMbL8PtDpjuSzuw4evrqzhow' $Logo &= 'lcr4XShML+46Fkukav1eADXgJRlJov4x5mmxhiqzdolHrqsLDeWsF3Ydy5QlN76TH6DKj86vRNFgDYK25TE0t+kD53WdqUFCvPHGGyFJndvGDrN8V1eXs+c3v/mN63wanXv25hi0STgYG83RZCqzPpTGp+YyBodH4figBpszOZdslIyigmfFFKCH1rAEJMwHYUe1JEtxqXKZ2ExBNWJjPUtnBzFRYUlnDxHyQCkV6Z9DwVld4FZSMNnIMalcSmULne3NYzv2JhNq2dDgqCjnZYt4Cs4lvkKLDhObTfdArbMYX7CzPN5E9fj4yNDgaFObF0+B2YNPEQgJGWhWsehEobKDEHMo3mZXSZnhB3bguYgm4EAAG7wkC2J4lbIqssQC4fmTP/kTbFcWP67cQE9AlJ/+5S8hhAnvWKfhVzhtYuXC6byVba5T6aPI/w8PGsj1iVgcC6QSgIKCCY6C6D/4QWFeQX4HVgaRRSBOU53ZHOOHsMPDNWv9+vVPPPEEFAuQaVwQmqRYYXhqcXwc70zXDh89gh5WwKpWrsCEUyk7qqGrQiFevnz5v/7rv2L/1KQDjvUFEBa0NMJByc+IiAM6gKFWaUfhzjvvRJcwJpOgOaGtfmAR9WIoxcvDfQVGzIoLq8yMXgn6TjOeMCiaqELUtUTgN+dFwj78R0qMMLaXS7aTEnukQHtxXHUZ/yAPL6gkGGMP18WjqU/HlQRAZtMdRxmyaLEA5WGCTxCCaRiYGbjQJE+2Kr9PIyqqDwwO4R1DtwApJkmNC1LoKog060DpJEclhXFHeJUjiT3egsygNXGaYtEZaPQWjucJaEbxSP9A755du6uqQphz7e2zGhqb8MLngBp1zrftt9FIvpAr5ylBk8OqFVWBUal3PDGWhv29KF5ZkXQ1GkldA5mQgBoGTR2JhzWZ7FeqROxEWP6rfBTbPxRNnuwby8RS1T6TfB+KE1PBlm9KsP97JbmjofrEcOwHr2w7NBTB07oNlYP/' $Logo &= '6Y0puBF5oeSGklkE2oA3QVn0aCrgOIwlRlMRPWOfCyCvw9n8iUjypX09teFwe11YSKsnhqMv7D7+9vF+rxsdl8mjKVcgls8BE3hvFvbwi8YeMBhF1eL5TCqZNUzDLYMwod+qU1gG7BZzjVKfqQqogxePrU221UOQxDI4Z0gK1ej9wQ9+sGTJEvH1wjQVuFGe41cnQgL9GRsdE8Qrl2MxiPNBDA+PQkfRZRXL2HC5aUDYdxKfhAzjT8InCL1LLATKluD2xsf72kJatVsdj8aEa7CgqmXewCcNm6RkMzlyMtVs1kICFvhLMWsq2tzZMzbtPuUON0DexSJhHwggkNhAgzDHGyzMU5fKtB5VRc6W5N7BsQaIyewHD7ou4BE4IMB5EenJnUKWwh1U9MeOI8mpNtB0EQ1XIFgilxN8y/HEFQzGoe/nACHpVzZgOEylyA2/ChBJ13TBP86YLgyUFweDB9CAcWIOB2P0ebzAWp988kkYXT7+8Y9DQZk+oIepCPZz5ZVX3nvvvd/61rcefvhhXARDbLFRWUwbgV9B9cFow5Mb/M/hCrYxhuMcHLLsYOzO45xN7nFMQbi+mEWQQ0lu54ad+PVsF6kE9C6WqYhAGI4iZNQPRCGfFzCUHUzFNJ8SorCuIPxELdaos5gZkH/BSCCpM6mA/wn7cNEXi1Nx5DmAUGBl4n7SRLicxXzICcwTmO2kEAfaw3fnKEj6VdUUjee2bgDOoWBpEFRe9yBJpUwWefsVaBY9Pb11tbWcoiNf4oYVKSxX4IPJUqG+rgGIVl193YmTx8EySPrjxMMuQgwgrFh09zwhkiEy3oQxSulUurdnD5QJTVUDiGmqrUVUysrlKwdW9IM/+auCbq87gAVZLONIjloglqhq8kg8dbB/bDwH+IGtCQwYZgsYK45SY9rjNbWw1w1mWXKpJKWqkkL3L8YLhePdJ36zt+fgQISUwAmzhO3DrlPIPi7V6PV0VAcMw72t+/QbB05V1QSb' $Logo &= 'Q4Cg6PUK9laSyR0APqwdNcE6v0cH8iSVR5LZ4WQumcVSdnl11dFIwFcA0+Xz8pvHRuY0D7fXVWNn91j8mZ3Htp4cwFXhIoZ+5zIEtUjES1wsZ8tQp1JZDtgm8EeCKmOCFEqmPemZ19olMEEWkfUelVSw+k0NhnwNwLbmfm8ax8Jf/MVfAKZwnb3hxf3P//k/77rrLmxPOtd1Ps1/znSWDtqApEEgu8Iey2g+i0fZwsjoeEHyQeLHW9UspSDDvEUiP2WlEYpZ2VmylHlONpREPBJQ4q219aNDkZxkJw5x/GVE9pf9xw5CNV+wYAH2y2pOqCxk4tZNVXPFY+OhQHBOS3DfqUGjqiVbpFiggtBUGGor8AaWJ1xv8FlkgYlcz3Rv/3gc4DJWDhPiktD+Aa3AMF7FTMUJMBCEXmD96JIgWK6La4Lwgc4IW7EwJwjEeFKqq7MxFdElXGEqUxHKgRNLX3mi+FUkp4HxFeYx3m9n7RBm+cF4AhFOf/KNb9xy882OcR5tmsmJRfdg7Pm3f/s3uCzDuwRQGIYaP4vuCfomonCEJzddkJc2wddYHBapF04ED4gkTjzHsFTuwZHkKcANFwStE2OLZYKndrScqaeLe31Aqe85fST+dLJOkxFe8DdYufPFAseeyBhXYJwlSkNk0VQjZ2JLY72aOEpZLJMSATuMcRWInZCOLAafgXwLBAXfaIOIC4RTqnePi0yJmCu7GP6q3Fs5KQzKeilj0sgqXdjn9jJHFM115Mj+19e/9uqrrwCCA/BjGDquB6bEFkk8l0LWe9g1NbAbd319Y0tLq6xsjURjdbU1OL2Qy1WOtcapZ0E8ZCqlrLu93ka3m2Q+ss1Y4+PRyNh4b0/vCy++hBG48orLP3H/J5pqydCSSCUVKFToIKXxl6LpAnK0cJisjHjyAouNaFCaONUzo+8iul7Wi4qRcVmw7kKNiBdL2/tij2zYu/lQb1bT/DVAz8ns6sxivAs8KSqcVbd62+pD' $Logo &= 'hwfG9vaNGB48ukx2GQmXAapGTtvxbAHRLh3V/ruWz75zWSc4ii4VXtx/+sldvadHY4lMDtIRI4I23olO4hjIgRRVw60/ln7r+GA0kwu6dTrKIs2ShImyhHctvCkiySySVmFW0bvW1GAIvEmh2reCo6gabaNnkCI5/SVnOtCqPLpCX6VJktf3v/99rEzXOdvXuWFjkpoCgPu8Euie26DiLFqk8BB+X/YKLOFcFRJYNBaX1CbKwy0peKEUemKBj3NUil2djgQySaiVsgaZQsmMzl1YFY8BTPNJco6JJI2ixeAF9BJYOF544UVcGWWCkGMY8SsiXBdUGC4VeMe6KsdiozObgr3DmcFoVPGA4lsFFlQskuc4mSrNN5EAVqRyIXYrK2Y0FYfW5fZ6SiXbSC4kaICNLc0t4mltTSVHvheO4VewhItMMUr8gJuDfeFeAkEC+Tu3yFz5kzBaiHOdDVxNYB5nOxGME+wEBIQfRBJJ/ETiQQwvDA/XX389OIrw/nKU1Gmm1hdfcS7gsj/90z/9u7/7u4HBQWgwoLIOQOfwqp7eHpiF+IJ0CmJUiWByY6ZiO+TgJ+fi75vI0tFUSEAp5DmBDbEV4TM9netcNPwlFG30nHOxEDokeH6JoVTKXY/VTnZ0cEBQ5JSUsXSYJgn3cDGAkyfVHpsgQERZhOJv8bBRpJ7gJSVS2MGOibjIMm1QnK4CcW5qPVkH/sKJRRwGWJDrPNJrKOTdJhlUE/HEk08+sWPHzlw643BaTIujRw/v3b9nbGy8vrEBukfJYmsJgbPsN4lyxfEEHi4UroJnGYJdPvbxT+7as+eZXz6LcWikU4A94hQ79ltIFiX+dDwxwGAsfCWGSkMVicUgu+LwyNhob3dPV9fce+/7RMfMjkQqgTJfFHSpSwjS7RtPJDMFdCdHmjCQbAtsmMQTScWF3VXesUz+Fxv3b9h5wgMjZIHmEJ4TmSK6U7ldPUPZRMoTDpqGWSxwficXTT2BwxaB' $Logo &= 'hSVzs2r9i1uDL+zr/uGb+9MD0XQig9z4OMANu6yqgqdGBvoWz5/1iUtWr53b1BzycNSReteStrqg7ydvHth4rB9wFhuDGPfEKS4ZwgEcnVMTYum+k4P7jvYphlob8rF8WcqCWpVoTPByUJKnfyTu93luXj67qcoXSWX3940dHYnGSsVav+FS2aWAk7O5xAYJzGxg97ub/R5sTEoS8/TTT8NFx3XOBg/jf/qnf5q6GCCHIuT4vPyJYVydjqYC9xDoJTAQCdQEnAK/pVBgIQ/rvAy9jQsLERopW/SswiqoyDSHLIlcsBjeNHKZ4Utn6vlUPp3GmCS5HJsYVDCAvIpxzcsvvvib9sWXw539uVfeuP+O6zXDyOcsLmKXM/S8ZRrgPABXc8XE0lnB9du7I6UWFlTymD5WXmPJx/YwBhRJs6YogbcXC+gPQucsiM8wPZZYSyEsQKIA3sh4zA5PptwZVoYETouRmbwwq2DmAT/F58WY6WE7SCaAK9t6BgFWctHSiKlgezp1UIQQAMycH7IoGvMYepJKKjy1NgleYh4thwHKozMOoaefCjHMZ4GFytym9mQ6e5j3Wy0tLVddeeWx48fndM3DtMF+R6nCCODioyOjzukgdelUxnHWckAqqXwe5WGYkktc8I+GQkCXlobFTUxFQHnTT0t84fVUeOCIczKhy0/wZ3YYZ97ATlPE/iirDby6fBaYCqL5BCvKMyJJMe1krmZ3fO6mMP9iFHltcR+wLVMNVZaE7eyPU/sjCneJZqda4WgO7ktZZ8+HTCr1q+efRUA8FpXjrABvMdwerKK5tRlsA511QvQ5EpfC0eH3hYU0b+4809Bxk67Zc++88244IGOC9/T2ATHDBW1HdYDXHBeqMGiGFYj9ItJSodKT1NAvw+0BNIaV3tfT/9gTT2DhDgwP/sk3/tzjhaXGjynv9ejRXOzYcCyeLrD5v0hx8AJwoCplxHcCbiOWyr2+56QrngEDxw3s4YI2hprF' $Logo &= 'YV9dXbBMVDwnYckVmTSrbC8hsDKHt9cQ8s5trHrzxHBHfXVb0GfolPsPN/IrCoASPMewx7p7efu9y9tNuRSPj5cpXkXxmXp70PQbcs5CT4sGiB5HGMkyYcDgGRlIfDw9jg9Fth3rA4WBNQXMgKZsmYKWhHAYSwIUzNUE3PesmnPf6rldTaGhWPp1qEFbj2w7OQgxGauErgJvbJ1zYWEDCIbNVLxNAWIqxYqVg8hewNmuc7aPfexj//t//+8zahhYS+cF0cBhBrLk+2ozuCY8gmgesvUbTeaCdZwNDs4qLGZIJYZY7bShklMyQUzUcrpshJGfdF5T2e81EUsDQMli86zDVEq4rK5v3rIjYWm3Xnu7x9SOHdy3Yf2GtUBRyEyoK5YC0YfLgkGXNnO5YnXYNbezbsPOIdVXj7MLBeyjRJIFoakQ5Ubf2AeJzaKstVuQA6pCdgULYRnGBswMGD2sDgGMW0W7CduvcHXDARdvU8HVHCTNsalM31pT4o6DiYihED1lnlIQ/mPnyA0MTYXuy+9RXMpRHaDBwCiCZCoXX6dSzMyuuXOPHjtW4FdcJkySwTrQSQVfAYdLDhojFDWBVlVaOEAfzme0y9Z7m5CMxYrAxodR+VHwQiaeZQBLJPmCEDv1TVUZVvtcNkevC86+UBpkktEzeeqrMJwAHclbpEeI69lFt2muMMoh8C5No42yvUF6DX5SVNqeCn9ZImafthWVEuOjUr2d/kzThHUHlJjzdZuVdQs0lTBfGafAoJpMYp+iYVsmh1srT/C7boDtIX/J8qUr2mfMwgSCoHn9desSkciP/vOHu3YeQGRMfWO9h3JClAxNo5gyCsHVafoWsWHYG4qB54W1xvFOwcyua6iDV9jo8OiTjz+OWfPlr/63uR1zSya6qiQL5e5oEiCCYIEwW2HG2VgQPEPAvTjyK9gQKtdV0QjYQ2EPKIaUfctKlbkhBTaftco5yMuGSmtd837xisW3Leooi8BVgd87' $Logo &= '+SjJqoQIb4h2Rb/bA2aIXwfGYz/bcnz/QFSUGWSxmj17ijRmImsNI2nlg71jxyNJxecG+Ulm8llORy3KqGO+jozFAel8/aYVX1m7GDCp6rLaQsadi1vdupot4twRRSr6TKVoG22EJGz7bsCYBN4m3qCTLA9R8edeAJdccsn3vvc9SHNni08831i86USoCLTaUVwogxY73WQQCVwAnghzlwW4k0O4VXBcCSCYzLndZJwuPB61dCJa70l2NdWPjZNTu+P36ZrQjyHVnDzVs+vQqZs/9vmyZEAWWXvzvU8/9H0My/wFC9ABnMVkoiBRK+DrWGS8qb5pXnNq24k+01cFECFPoqAMdm4bV2gJKAyxkqEUXcP+ZDqL7wRUM1Nh0ZjMKrkcMZVJ3k1MqdGKF1/dBFcV0rqDVl2cZ7JTvKMsNt/37QvzvrDiOo/jOP6CsHCezQ+mPjfcgSCv4EGdwGGxYXHTC9o5Srk47PO8mEGJm7isw33L3D4cpsKu9OAonIcb7FRmYSFDBjSOCMV74kwpIKAEWMESKxmZEnnGEnpMp7MNEKcz/YIqYEMc/F4F0IErTN4QaWBKxpkrxkzKrcsZt8FqhNJEX1UNnSKTpcetKISMifBGlekvDiBxjNYnVxJjJUyUcYR0FE/EkHvniiuunjVr9sjYCI6sqam74/furm1oeOaZX27d+nZvX08ykYKeGA6HwCRwIhs9SKuyija+R769rKUBEnTc/HXD9Af8OOzg/v0v/uqFltYZtZ//UnUVmbgRYDgWp4r3inDwZ8cVHih85ZBrhWAURRZuxBrDg+SbTYpdoSAyulSuIplL2QNZjw9GYDu6/eold6/oBOShqwrCFV1nab2RxK6ewQyonazi9aWSmQ1H+rb2jqURM+Ux0LEMextrFBMqWXnIw0VFVf1EX+Td/eMHhmOQminugUekyFoX2lgkpav6JZ0t1y9sbaoOJqOwvJUNTZkR8n3yko7eSOxw33A6mdYkj0qS' $Logo &= 'hDwxNyiGAzwfaV2Qdozrudl50e+++24oBK5zNkQPAFs4x7pynU9DiDXKuU/aCb8d7J9EjGCHqJTcbQWMtHZZWGIVgn9pYDhPOq0njJ6w1GMjltE95d6V82pyFETFKvtEI7ZDUhRlf3zzrXeWrLqmtqUjm4ghtMcTbl5y9Z071v8CHqjwEKHDFLsmqUiNJKvuRCS6bG742Eh8NJ6wFA+bVSyRbSzPzIBQV6Y12FYlbBNbYj/y8gQZYpc2bjBWordO2mDHaAzmVFmI0Aasp9ccCFGggopKF8cXcRcR8m0ptGeaegCfqDjvmpZ+kc5VuZ0j3kIE8zshgZVB7BrbHyadeJE6GSwZ6KcIQxSVDkTVPqlIgzLpoUSblFxcnDj9wFKBnjkuGPYIM/7x4TCVouDbXNODAtzALrh0QYZs2+xMgakHYFVlC0o6l0sbAGzZ+E3Bwky+8cxCkHZidxS+KVfcxZdJGyKim6NbZCaX4v3TmiS5yRbEKyJXSTOXBUkXbAMbDC6rVOCLJzrbXWxzIrYJvOLlItmLQwOnHB8dmzmz7aabbgJHEU4KIOrj45Fwdc3H7r5v4aKFDz/0k5MnT508cTKTSpckOHGlyEmDxGGZn9LOIF0Q8hqHozkZ6yDEqrpeFQp0dM4GDX3kkYdmtMy4/+NUEAzoSBJ+D1xMgzP1Q2EgJu3STZyLDb4Y5ElsTJQ8E28Ex2NDlokWy/TniFT5bD4RS+GFXbGw7U+vX3ZZR+Pg4JCsyTqhduVowRqD8T1nabo8nMyfHIFbb2EgmkLOR5gCEbOCuPme/lE4pAXCgbDHdKsK+iciVwyVZjH6i3VQ43EHDBWx6f2R+Fgi7TUC1EGWqkG2sgx4ZpO5VXOa/+i6RTNDZjYVAWdC/1l0R2bP2jWdDT/d5M4MxgDE+wJuXFok4BM10BSrBEdq8BULbiAuirFFeAHinKezVl0fXMN4Tg2/h8Q6CXd2MnDY9uESGx1L5GyR51xEJCyxb69U' $Logo &= 'IqASinlewu+AldktAXvTA1evrKs2tdF0UjVYdSBuwgHwfBNTlda/+o4U6pi59GqEUHBy1RLKq8zsWtB3bOmbmzbdfedN2YKOi3EePvwpNJ9klSVr+bpVzY/86lTB1FBFz+LUyOipqGIBiQx95Hh7qDFF1UV6DDMS+p2JnUyVJnOYHVmRCh46LqZTySDKK9Mk1aUcacyGqYmXKKwv00eKcKTQIw1Tp5Wk0NImMk6WV+AaKtjZ9BsjRbSi5CKtjAK7sMB+yIxJOgf8BU8/vD5Nx+1VoeJgSjOkaQmrA0IIUDPpIpUV8bAUrm+aeDQyRIPiCXiUUl5q49m0aZrOLdBtvEixoaDxp6NGT1/JENdRyUaKpSqrZUEyKfPhh8RUmDoQkoOH00yNIUqLfPIAOWVStJDKchaUk1UoAGFSKWKZ9RZEYgnqt5wtk6TheGiR7WTaCUypoB3FdBjMb4iVAGIFISzLE+UUXfYGm+uLrLFojFjn+VYaaQ+Aj9jUWOIgQWHkonnCmCmOUSnnM6lf8NQ6fWrgc5974MFPfYZTUidkif7hsEwyXTAKAX/VA594EMJlf2/35k0b9x3YjyJF8WgcVdwsTrHk93sDQZ9pmLiFcNHhV4jrE8JG3czn0B+k0MA8OHn8FKwsLm4ZUPkcCeIA74iFqJqdL02AHpViiaYLRxCJs7/hYDHF6HBNowPYHTebKSCbl2soumDVnK/esBw5TtKxGEYDK7Uq6EEv3j48/MT24z0jEasE+wfE4kwyYzHoyAFJXHTWCHhaSBnCnmIqX3JkTqC/2JVm3LLFoDOS6STKREBJEXITJUTgGAiu76PhCu213itm14VMLZ0jS7WryM+l0iQ2DS+ChwYjGUwhYqWSIegQjTyEmXTOkGSPYcC/tawQvvTOO++4PhoNYclTYJMp3rQ8ZBaaQHfZ3iJx4SCi06y+SOViFnGnmpaJjFw7272koz4y1u+mmsRFAvWF7mu53PmMz+1BRM6x/tja' $Logo &= 'e+6m0MVcQQbR5AZ9Y9GVN7z8xA+37dh/7RVrElmIOrqT7B0jahh6OlOYWRO+annsuY0RORCCT1rRYtuPEH6IqdAdiY8oAiQhhIIxKJu10FPkbW9s4X9BLvsixQg3keEDRBnQcaWMf150NpVOwzNKqAXOZUUCGORlmn4NfILsdI28XciZp0gbnPBb4zIw53DNQoETYRxyQtPLTOuF0y0G6sSJkwh7uhiwyEndj/wL9ShHls2YblOgUsJuhLtDKRdzzLEqQacRMYxOXmE6ks3b55kCB40qxzpZXjBQlkWQ5ofBVETlxBIrxTkR5QRqSZY6Ax60sCkbhopFMzw07HHrNcWsO92rK+GYVmfJhlTIepB82/Gn5pfm6MTn2MA/Tm4vmYkh3/BBIzuaVc1cPsmWT1nUn3ebImEqn8RgAkuUdm1HLAGh0GFDwgYzEvZ4lqEucCEhXEoBp0JcAVzFBgf6EFbyex//2Gc//4dtbR3j0XGkEBYgknADhydIqCrc3NDMKaRmwXl8+YrVa6+7cWRkaGiw//ix4wMDg8gkgNS3hZwFI3x9Qy3AMXBeFjZdNirOupHH7wP9TiaycEECc5NkKvUPxQI0BJOFeIJTcMtJWYAhJF7KegpjwxZYJp6xCL2ChE3y6iTKUiJOlsnhTqH68PLFs75y3eJr5jTASGNoKhxP+2LJV94++ubB3n2D8e2nhlPJNOVtVPGc5OBtaorpUunmYFm6bBqaqbArJ7gYHoIBBOEMQ1orB9Qgb3GN14AFFEB7inJMkVIKCTfHyd5LIkdlIe83tZagG8+RyluyYy9hWIJSRWnQSPlVygqb1ki2LiqaC6hZuRT2qQYEtBI/OWegcn00GuKop4QC2Ll6K3OxKkSbVC5DZ2GYOQoUGh+eFI9kYTYTxKlIVmKsxZ9ft3pRPhPB7C67TBjsygIq4xLDAY8fBaJeemNH56W36Z4wQp0UiGgMUKGB4mke35Irbt/8+lOL5nXOmDUrk8mZ' $Logo &= 'piFIs/0pKYlY+pplbcdOxDefHjY9AXBtijsmEKBA3YOmYhUm4C7Ct3WuGoLlwiSMVHqH7oDAYRufZc77UGEML+Cd4hM+VMjpgutMHywSRn44y4CsC+9h7BFAlijuCywBn9Ok2jgLkr6g0Y6FBl91TY+MR7DzbDVdglS81Q8dAggqUBkmW3a+SHKR8viQ4gUpvGAOuTBzvXPW/v37RVwRxtDJQiY6iZ6D5eAulY8jVCjxQoXEgP0aV6WdPofDAIps02JIhYUJe0DoPjSmIlFj51QAAFgf2AblwpQFrXF7AAcqTXXVM9vb4fg/NjgAZuN3HUsiakXVPVbam0/ZbsGSJFgFW2HfZ8OuEa269WS/d3S/BV9lq4wV0oXW2aXLeiEvjMQuOz2eQpKVsMGBC7uIFBJGx8lfLfKfYg1RGIfYmM8JIl0EwhCCLCuz2metu+nmz33xK/PndI2NjwG2MNzQwDUSqwWYjABnrk+OGhUgwAsWLlu8cDmL7fnDh/YfOLjvdE8vYhSOHDoKcIYK7yTTosaqi8tEOqAzOBx7Glt+vzsaGd2zd8fCrq5sngzyOB7/QFjL7/W9I4JRKBJ5pj4XeH6pJamASSHnLDwDBgOQkqYqXl2l6lvhQENt8OqFMz596bwFjcHYWJRiTmW1L5p9YfvJf3zundMnBlymLrl1Q9fcXqoTio6aOvWVg+sFkQJeR6ZejYiJHZ9E4SV2uicJtNGQJERQ1gS8CO1J4DdgRGxLES6cJEQXLIpeJE9ZBfZk08R9SE3h2m52ZGs0hapjGQBEqqmTsoVn5HLkiATFI1VVmX4f3l2B8UVyy8EpH0GmUlkqomLl8PzkeCYe0yIj2BZ2smEPz08+9DkL2/mANfLx21aZHi2eMgxIRQXJEsnbMJLstqIW80/96g13y7LG2csSmZSMV2BHHuOa9L9sMlbf0lnfseS536z/yu+3+3yU1M6hy6zHKwXZQNLTu2/oPPjQztFUXpZxeXrlQkdh' $Logo &= 'yJl8PoQZUtSUrDRnOpH8QpwXMdgiuKE00UTtCdBl1BNCrcyz+ThM1WPEBtLtmFhotlYhV1JPEF8QesqXM73mMFQnMZrQA4Skj+0z4pyCfOMuW7e9C/MqjudVbGdN1TRyxcYjI7EYYk7xmNPnIpV+DSKjMB4Hl0I2MDwyv8uSMLxBUQNLxn2RAtW5CHg6SFCBGbzMoL1MobMljenM+WsqmnhSwVR03vMhwV9iBMBQymT/1pWJ9Mune3vg73jJShrTGbPab7/ttocfenjfwWMLFy/Q00PBsV6Izm4NbEElQVekAYZqzFIDnukcG2Wm+DS4oCpSSTW9A2NxhFxV1wRWrVw1s202vNcHh04nUlF2Z2Q7ikqnk2yl0XCLMN+x0QhSRgqvJfvV8j+RVhlsCccDrWhra166fPFdd92z5vKrZ7XOxGHIbdw/0F9VHaSiQFOax3BXfo2MRsJVtSuWX7pipeQzvdlM+u13Nr2x4bWXXnolEom2zZwBkk3exqpGdJpDaiRmb1ybMouK6HAkzhZVUlPcso5JUsgL+Mt2b9O1PIhpPFOKp9mCbYfbutwZnAICwWUcyi7wBp+nq6F6ZWvt9z57fWUPQTOA2fbHky/v7nno5e2nuwd9zSG8C4mHRgfPYKdWOOmBO6GrlFuFEoBiiEDozeqgz2+SLpG3aD+fwmUKLQrXD/sMVdGGYpkCsQrinJbQCC2L0AZmiorfG/R7yF4mMu+qxFeoTBI2XKXhaAovFC8bi0roKCKo3kqlUdLACHns2srscPvy8y+7PjKNaN97m51HXVYnJDEIBGrelVM0t1zmvNvguQUKWbeDHFXQb4y/OxId+9j1MxbMqBmOp926h37UyTmD9BSZhPSg3/3Yk8+cGE1fdsuVyJFKC4SpDE8H8a+sFqSxZLq565LNLxz65TPPfvrTnxIE0S75KzNOr0vJgqs+XPPg1c3/+PgJKRhWSphIEtvgLU55UZSsvCLR+tNUW/+wM4iUFOE+' $Logo &= 'IqKVUP4W6gjkJ5Gd0MX9ZBsQ+yNwtu8jR47A+9bgdkagydkpYiYgmEJuwMACPTN1w6nrLqwXuCboAAnv024iR7dAvWSuqYtPt2GCiJ07cBLsEEVzUZARyhaIvjCFC3fuAswz3JDFC/mGwVfQ4enExvInnYsLAvWCswkeDbIvF8Dn+c/BPZaL6vy/9ebGrk5yZMdg2jCXogBsZOdzW0pgRiVPP9UpmhhGiMsFhdiqwnkd+OKqYDAfiqGea6XAiZCZgpbh6oe6YRw/fuLFF1+oq6ldsmT5skUrgAtFIrGHHn4I9Zs9hhxSXcixEBmMDacYA5VoAUgEwrLZXlErN9i24exRwRIgXcFRyu/zyroJvCRXyK1ateK+++6/9ZY7OVVD5uWXX37l5V/rulJtVovyXjbwJSsiAyTGDkqN3+fPcTJORxYSy6MqUNVQ32iYRri6ekbbjIamhpWrLgn7w85TNzU2HT5yeP+BPbgYSC+4qWVx94ghQYzG6Fvjkejy5auQhSWVzQQBark9IocjMt53zpsbrq7d8MZ6RM6TvuzzsAiLJ+VPWcNKpzFhj6aRVH4McYjJnBL0KpoCokOEFVdi6SaRzpmStLAxfOkVCzsawsRCOZhU59xfoOwMv8omx53UeY1PrFk86Q1WEyybe+3Q0X95aduxnjGXF7ClWeaRx8PwPC7jBQ8lcjDCugwFZvkFDTUzq/0dNZ5kobSzN3ZqODpeKATgLkwSMRk882A8VGJSrQ96ESeTyEVTMKxRThZqXLVJIc4nhF6J8GzbB9p2LKcvODqVQc7jTDKVxzs0dBn7iaixgoa4GMiHuCmYGgi4q5SGAYIiFj8aDTJspWRnRwxwE6WmsfRBh7GpKjKy9Shy2aIJALoGs7zFHFj49ymjieQVs923r5mPoVAJpHL4E7HwPKZrVfDA7u0vrN8558p7YlZphjcbqg3QxZlnOx4rklzIwntcDjTddVtyaB8MPIZhir45Ir+on4iA8ZXL' $Logo &= 'F647MfbslgFfoF4uREgbp+5xDj1OMoFuIFIVvRRKpVOTii0cmuCpSPl86NAhUHkQShbhLdFnXE04wgk3a1BGpzylkzAfn04eM7EBsR2niNQvldVt8SmALIj2oL+46XQs5HwAh2bL9viI/peYS537LPQHLBP5GZEBCM7rokCGwAzApcV1wBhEETZAUqLObmUt3qk6k3hMwTvBiUEWBFooTsSGOAy/AlVDcC4MKl/72tcq+Zzw6mYGabfK1PfTb87plQqoeCMfElPBOLLnIamFsBDQFufAh2izceP6bDb5h1/66upVa+pqGz71qU+hgvYzTz+fBRbf0lgsa0bQUHwlQk64vb8thTcYlSYA3dI80ENi0UhDfc09997z2Qe/hJ8PH0a508NPPP7k9u27lyxbiAhCyhJhFZzBTaXI5IuCwbfeevOKlatGR8cszq9gqyoceQ+OMnvWbHCtcLjubA9+8NC+7/w/34b1Hmi/PxhANB+xVVnGEBiaCokeNSf+6Ctf65o/FyYNONqMplK0yjnH38qlq0NVVTjxmaefi8RjwVAQXkEC9MC0ElH36IyJCaUbw/HUWCxJIJuskFmbPTs5mTFZGhD6Dh5w2Zzmb961pjkcOKeODcec7Nm8l7afGDp2tN/VVFNT5YFLOKEcHNBToixS5APkU6SmtvqO5nCd11zeWrdiZt0lnc17uvv+/PG3sdhjOQs8WGLqAjpQIGUStmMNxhKvqXp1qcjRrWR6YVwRMIEtJ2oqEENEPHD9M9uUAnER2CIMwygKubdvFDqQbmqGrpB3FPuGgeRimpm6goqTYUq6RRXg0KgExUejLVy4cCq4L0qJgOvzigXxLSv80MGAT4NMStlolDIGSbY42odMU3AgrPeUPnfrSiuTsjBqlRIllzXzeLxAQn7ws2cDHZcZwcaQMvapaxZjBnJ6C7qMU/WIw4sV6BO6uiptLYHxaaL2hk07KuXlRDz+wM3LD514+chYNKBLZQvMy8Ks' $Logo &= 'AFZLXneS5VGkqmCAE5NATLbxCQc8oeXKFc/+/u//HjAgHOFAJfkY8YpLAl8SBdjRf2EvEUBWZQbfSVm5BPo0NdevCHvcunUrErAL2jd9dzI0xyVyOtEYTv0rJCrdvHnzG2+8sXbtWmhIYhzx7I6/coEZoChz4LgaT2UqDuEW4JvDR53RcB5ZeJdhJJ955hnE9oKxTWKfTsJjZwDLFW36royC/TtRdE5auQ8L/iK4SBa3RwyjXeqRS6iimsimTW+vve4mMBVAPbNnzb1szZXPP/si4uoxjZB5bsmSpYsXLypi5KHr5AvvPw/YFSYcCg0ODmzfvgP2OtgSYtH4patXLli4IJqMVfmCIyPDTzz9+KEjB+vqKB0kQ2V5iVewounYgLMvJi900o7OuUuXro6MjpcEeCLqgHO8zOz22e87KOBVmF0cC50nCIIL6YuMyYCJMmmwLmn/vr2bN725ctklwVBobHxUKokQRFroAX8Qkbe6sIOVBQDInuCcVwZ9FvOBfB/SOQtzy2cS55MmYh4lCRv0SbEosqFpCWT3K6iy5jn7qzINr3lmBtkXPR3JuNyA80rgIYSwMXkgJ02pNBZPq5K8dsHML61btnRGbZ4Kw+XDQVxK6o1kd57qz1r5gNegNGITjhu5TA7ImxRwazIpcCGPrIsRdnwxeAER5uLzgqloZcvn0aiYLfAgTcVsqEMNSr97+8H+jUf7SKPXDfIdz+fJ11xTMYQ40lC0oK4ZvPCEzxjEN9dHo8GEO1XgFfK1NZGSXRayLYRZX8jnMccj/FoJBeXweoZhkU7u89cv8ZuFgbjsc9PhFdVeRcCH6+FHHh0sVc2fc2kpOXjPutpULtM/mpaFtsf0yOYaRU2CFQtXJ3bOiR64QSstc6usZQvKBdTms3dc8n//12/SVlgjs0yRQ4NKIjsF4HsUJwWC73A4wSfwSXWDWJyfNWsWOAry5SD9Ow4TfMXGALk5sfEiA6boj0MfXRUxZ5VszyGa' $Logo &= 'gviKCEFULgDPvvbaa7Fz+mhPZWy/4x8Nm985CK6jrEAF+epXv/rNb34TShLy9ICvOKYRggRZZqKsOTlqTq/o7U3Jm2K/oopAejEOlYkgHY7yox/9aP78+UiBOtULQKh0AkASVT8uwMWOWCGR5IJQuZy7CxHEYXK/RaZCuWapDzmhQ7N6S21kaASJaJDvROPK4aFQ1eHDB7ZsedvtNcd6xmB96pwz5+7fu+faa9YmUnHy2s9b7+nohJIv8teLDRZdYOLzR2ORyy87+J//+Z+bNm9pbKw/evT425u3tDS3g6mgkuPqVat379x94MBBxKgrXje7eNnOjxIFYTARlyWQ9Sp/lWl6TFg5z7/BObiuprr7+GnEcWIdWaUcR3DahFM33eBqu3fs/I9///f774vcccfv1VXXOZxxaLjvN79++c2NbyHRfTAYEJISrzX2aeMoGehPcDEJ19QdiFvD0DAMTWKKQ392njjGwbIFRSu0VwdR2Z04ygW1rSdGDvRFXJqi2/OaeBtF80hyPJnx6dqK9sZPXdp5z/I2l6y7LLOQy5TZ53LX6bHhkYSC8BNdhT+0cF8mSUekSSiXgX1RKUlI4rIMLE/kqLaft0jxp5JGkMueU6Mv7O69aWF7Y30gn47poTA6sbN7+InNB7tPj/jDfhUovsgpaWfuIdXEZ8BnzCdRism8iwzTEhCJ2bNnX1y0dhlhjIAXpn8K8lEi8dfUiP2pCw9UzyRTapoXJ5MMVcN09LrNOr+GKFI8YKGYI/psWVnDnYkP3H/l/AVzGnoHh023l5Bau7yVbeH3eX2v/+bV9XsG2q9+MBfvvXU51LbgaDRJUVa2jiKLOk0skBGKSCoj+2rmmSk51VYcudipNNU/NtpW57v7ijk/feVw0BfkQBpkB7VgSdGsXLXXZwa8udGo0D80jQq6Q0U13YhaMhyNB+jQN77xDRQcRJE0UCW4xgpPLZETT3gbT5Kp7XPLZyoyK1wbBJXk41SFCm/D' $Logo &= 'vIHqI8gVj2eZfow9hWnnsjbhrmQbOflsfMW5stCHUEcL+eX+4R/+ASrXVVddJdA5l2xXlnRC2QmSZp3RUQbBmiuuiT125nWHadEDWrbmJwrQiKpfGElYoXBTB7JzRgwHwU0U1BjbMH4J/ItrRVOb/vzPU6x6Dm/K4eL8VmzlSdzrtx38WBJJvHVNZ3WbeAzGE76zCxYu/OIXv7B61SWkTScTP/7PHz70yE9bWmZg/s1sm/nAJz914w23NDU2J7NpiQX4sgN0CcGTaw6fcaOjU1+94tLDB4/u3rM3EPRv27Ebg1ZXU3fDzbcsnL9o/rx5I8OjsJIhBAncmjx3s1mC7jlRC/4EToJ0jRjxC+Mo8XRi9pw58As4euTE6Pg4bmFpqvPmQBPoRqHAyePd27a+C+oBrrls8coMgpU8ntHx4YP7dz/++GP79h+srq4OcT1jgZGX7Xmn0HiUS/W1tXVNrb/uP9kbidvvskiolEs3MO60UVJgrJa9pdaQp9Z/gRzl+ED/yfFYXzSpyHawsojYpw0aKKsx7F8yq/7SjgbE6Y1ERpSSZOgqkt7v2jfw6p4TZAdkNYIyDkpgQ7w6GKFiYqWJWBONsCCiZbwomTsyh1HyOdXUd/dFv/PK7pKsr+tq7B1JNtRqW06N/mTDnm1H+qCXGKYGzoHhsbU0y+IMPSWvoTdUebCAsshAXqKbojST6+IadGhU65v+8eATuOl0jMOcx8gEaYgnKFvwROUPSpeHYUJl7x3HxxSVlpOimgATs9Howtbqu9YugbchsjFy6lwNn052cLfhOXFgzyNPvVS1+M6crFzSoC1vD/eORCU06JqVblmCJLPF1QGRBNUTkqnDVCrwfaounOw5ve6SeUeP9m46HoddAJFBSjGvGoqVTTc2tmHJ47ITYe2qiBkU9gNc2amT+Dd/8zd/9md/hnTRqBECmQ+0AhSjMhdOZX74qfUQJxF0pxQj7ot74SJPPfUUXG+RzRfyxPQ5irhp' $Logo &= 'gdsUfzNG+M55upPrDNgXPsFXIIjceuuteLOg7KKTovPOgFdaZSqZCqaA2O8c7FzfqZ0FRo0aLc8++yzq9UI3ghUK+6eqKU6hgcqqjpZmnVcYJoDrHLdJBhtcHD35MOAvbiLnIjWQkWQiD5wUIDgcJNatvam+vuFU98nNWzbu2r2raJHYZHq0+QvmXr/2RlSpQlkqQoOYDAlqQ1+LlUyFLv/eDRBcRJfKy1YsW7lqxbEjx4N+byaXfuhnD3XMnlNXXQ8VfcHihfjp8MEjmO1QBaB8kkAm2B6HmNG1cIsLZbkY8Rkt7YsWLvcHXurp64F7EklqzGIVVcMtgIABWm5obgDadmD/oZ5T30GhFGJsVAOngPFJJuPgKEgZCVIOsEs4I8icRwDwCAJH8YyG24AEOBRPRRJpuSLGl/5YZICwRN63gK3UIs5zXVDmV8y4aC6fKFg04oJvWQWufKXyq5Hi2dxIJhcIBsAdgu4cV2BR9wwlHt10aP3B7iAMJppckgkrY4oPbsSlvzRVM/R0Lm2bEEl6lXKpnE6x0FKZozLLnN7W76OchrtODv7Li+/s7Z5R4zEHd55cf7Dn4OlR6L/BKg8sOgAHyeG8gLNkkUQA/dRVxW8CQWQYEF2VL1qA4qT3qNI6/eNByMAnpn88cNeenj4nPTuWv9DDwZbkt/YgMEUpg3mgjmkxJGc/f+eNhXSEcRV4S1s4S6gFQnBJZGM//PlzmfC8cFVznTJ63bJ5Q0MDhbIJpjCJhDmfDoETlgoR18gOJjZbEcu4xEylQLbIlOkefuC2NQf+/blYOmuosgofMDJB5ttnNuA49q+xi0uqmgKBHVwEO0QqEeEvBMv5P//zP8O4gvSday6/DNokYBwnKMSxZDj9nMRgpiJFwmyDc5Fr58033wz6A9BRgLPZovS0G5VO5ubw2kpmI02POeGmqHeCuLR//Md//Jd/+Rfgb4DiMSlBgsV1nAesRPMw5BWgfqky/YczFMKzGZ8o' $Logo &= 'mrJp41snTpwAV/6DP/gDETsyKfOK0I2gKon7Vg6aqLw2faaCdzcpfSQ2hCCOF/fh2FTsNNcCHQacCqUEgX633n7bF37/D+rqqIDMyRPHfvyjHx05fAQDcbq75847bv/DL32lqakVjw5jilJWBAvhsXVGQmxJZ9woZ7D4lNvvuAvP+a1//icEFWI039r41i+feQrqEVbcXXfcg9ja7373X6GvuN1QDwCCUdQ65+2xHfPLNlp1IZRIB4NS9Tlz5sIneP+BvdHxaF1DvaIpsM9LnDGMlXSXCcZO4XixE6dOFixSS9llC32Rq2uqkYUJGyLWhBYxJgpVMTJHhkfAimZ3zlq0YD5klO5IciyatIsAq0yvKUhThUiWASymKtW1geoqP72mC2puw43athkwFX4JNsLGChzYnc9UcgVr+7GBH725b21XUyKVzlrFw4Oxt48OvrjjWDmT02sDUFMEcucSig6hICVgIDPCAZ1ZLazN8xpDv2kMZ+Hsh0EhawFjdwwN6IYOMjUeT63fewp5JxuD3v5IYjiShAkiAFuD6sqnMyCirN/AndoQCwirGSQ2CKaiyJyWymapF6+poKDeeXl5TYepOOZT+NcKgisEfHLiUBTErjc3N1VXBcbiWVXW8yDneeuzD66b1eTt7knohhvzKpvlMpETQYawjj/3zC8PjKutV1zjK8YeWNNsZRMRy+1WOITWEZeEsDYh9E0gYYwqUyYEAmbYsbgElEV4FouuFi3KJQkYdzSRaW9r/MO7L/+Xn75QKldBM4HeXR10z2ithxUa3eF3LgwqRRGeUvngAuyChek73/nOY2hPPL5p06aOWbPmzOmqb6gHkQJ7cPgc2hk9oxzUSHhVgciiMgESwuMrlIMHP/0ZYbLGkecXsi6Rmu0obQ7Tnb5c73BB+GV897vfBTb1zLPPbHjzTfAVBLLAGYdMuQy5i4hRh21U1pyV5Ape4nIUFMr3DBdqxOWc7j49d+5cME5gqqKHZwxm' $Logo &= 'xH6hBVaqF7bGc14uxdw4sbskZBDHcfzDCn7kJoAvTDJR7XxWe/s9d9/X1dEFD5N0OrFp01sH9x9CEF51dVhTtLvvum/RomVYukVywqcIDMFR7OQcsvClFVMSO5nyq5UbJMuDGIWCVWvXXr//0P7XXnt1sH8QOVBe+fXLKMV42813zp0774brb+nt6/3Zo48ODgzNaG/jWGxLVOfVDE04xlwoT3EhhJDNKoFrrrkWzPLE8ZM+vw+syzZtsVQCJpHlOIAGJIBtaXIEkDKtWJaDJBl2CIkohEYPx6nHsmXQtSim4x233XbtVdfErdLIKPyJs1q131ancaJVZBFXpqQmulpf7Q/4/BdMUwMe34xQoNZrDI2zbCKcfTE60DnIE1pD1f4TfWPffn7ziztqYD8fyuR2dw9lxhK4dbAuBE7CnJ5RKU1nhIoko+aq4BL4kqEafxF0IHXDnIYD3c3Pbj8GNzlT1W2EzUW3gwHG0DQ95E8nM0PjiaFIiiJ4/R7EXeIhs+SmwAejYYNbiavseAy12uc2FAoXra2rdX0QjWr5nU8DEAGyOP0Y6eqaGlVTMbiargFIBGRkWfiz6urMrln1G7cc1DzuSGx87bLOxe0Nhw8cyFKVErAUBBMTAGgoHNWmGaiR/uudpxtW3imlRi7rUAqJ8YPDoxBrMUl4JuC1lLkKgSpuLbgImycxd0hfdxQF4boqArYYirEb+YRoJD0djI/Pbmm4clH7+u0nXUGfKxObPaMjFKwdGurnjN6SCE4rWcS1aqtrKnUjB0+DfP3ggw/ecMMNKGUIj6lXXn4Zt8bohdGgsnu9sLM6qlil0Vig6wluKDsGvQ0XBBe58/Y7br7l5jmdcwQzwM7zdZzFBaGZioi0Iv+zDV2yhIh6dOIcRump+h/savDxRSUVuGZt2LABuDdCv+vr6sFloZ5CdwF7OWPGUqeYIzvQ5jAD8YyIUwHxBC0FO/nMf//v8KMDA66sBDOpkiMaUr2hjIXw' $Logo &= 'enB6LkDX6QcFo2PDg0PoCnLhuITShknCns24COSnD8NQ7/hlyPyJgnkzWmfcdOONHW0zhVfGLx575GeP/Qxkr6+vv66j895775kzt1PgAAg+R+OYI+bhRYFgAOWwab29IZ1hAwejgqwv4P/Cg1+KReJPnHwsHKpGFcW3N7+9dNGSWR3tcPO9795P9nT3/PwXj8LfjEAi0yQzFATvAgsmDKRMtd1xcm87F+m5JZRQKHznXfdufvvtbVt3y8oAhM1gOGjh8vkcR+br7EpicSH1guBfdv48oQ1MlDrmPKCq7tFRI2B8dHxwYHjmzBk33HCrXtVoRZLp4QjSFLt9JoDecjZLZ5FvsQrWwhH4ilvXLuYNg4PPrg60Bn0DownqJKNexCE4RR/EP8MEwgF3cWt/9+hxLQqBGSvPF3KrBpG4MudRmBhJ5hOMLIS9ZldDyK9pebgS6MoVXQ2v7u9+Zn3GQrEmt65AQiQ/b9a9IARhE2gZ8D+vTvnFFFmXSU9KxLPQUVBn2cXkDwdT4lFZKZqaS0+GPFpdFYiR5kf92g+ooWzf+Xp5ndfxNdBQA36BJAiEAWRUWH2XL134zrYDVtkyVNfBfVu+8uZziOXAuwZxL3Gor53JW1ZKZaqlHVxyixmsTvYdfvbpzQ9FBiRyaCffMVmkwsPhrJmUK8rpcTpO0tGhGjvQUllmKY3nJ9QVESqJJmJcWPqyVFPRgzMl2aORKaywfMlC4S4hsxwsUonE0lEE3ADUPbPQyQ3BgPAEg9EeYY8HufWgnT4NSgrOcUZlBRcXiUNATJYuXYrSNYhUh4KIr1Pr406/4YKg2o8//rgJNIm1HOdSgD2QuQvRCKLn09dXcDrgUJRrBPvcvXs30Lmj3PC6xdOdW+ZAE/m7wJ/AS6D9wIKACwp1SkSqnq26F86Kx+JvrH8DLGQSYIi7X3bZZbA/va/cI4YFHBGvA/xMuDDwfrt6MUZeHPnbTigJsZtECQ1ikqLgPS1buvym' $Logo &= 'G29ubmkVXQHNPbjv2MKlXRDN6uprr77mKkyIkiDfgC24h0EPDFFepyLK2ZE21MjKFF0slZTAHvLhUBgeXLM7OyHNeH3uY4cTB/YdGB0ZGhwemNHc3t4+a9HiJQ//7Kfon0bznsOIGEklGEqRLqAwhtOg0kKMqwvXfuWPvpqKxze99dZhxHm1t3vgyiMiNkgAkWUR0WmrtHbaYzt+nkP9cYBYw9FIDMDXQN/I6kuX/+VffPOSleTgMBBJAG5yGZpuUOJYkAL2Klb5suTDG3QbDT63qamuC21uTf295bM3HT69deeRpFQ2dU3G1STmD7IiSuDIbqOkIGuklYDFGHeX4DScL8VzkteoDbg5WFoS2JfQmml2mnoD7C0aBe6AQYDFXrug9fVlszfvOj5+ajjQWqOTCYmMMexZYrksqkOoe8jmj1CN8UgCaUqrwwGvx4xm84pEYjMIsOwiZlpgxlYdcHc2AGJzfYANhOC8jr/88svPK5kxoCtI2SCp+MSihWwuKAWWcVdHW1tL/dG+iGkoPeNSTmlW/IbOuYop+ami2jRcUTHgAX+gqrq2mEmagZp041Jf22qN1p/CqgUJ+7bdXbJXFLtagTMJS4mF/zvJuPBNYnyGUBrO7IXDOG9JHoY9kUtSQehSQqmrDSFj9oyG6nlzZqWS45JKua/ViZSOkG1ntrWBAk5FoiZJ1iB8i7kJ82SSGwRhkL9JVbYwPiCXoHSQkd3cnCs7PODCkmvhyqj7edttt4maNE6wiAgwBPMDFT4vduWY7kUu0XXcQIjj3PB02K48eCpTESltgtzwvPjqTBun9NbZHge9/drXv3b3PXcLOFHcwtH24DCGMT/H4ziqHtjGt7/9bXRVfHUu5VTO/zC8v7j+PCRs5AqhHNQYC4zg9u07ddMb8JMosXTJUkRBQseEq2E6m9741lv1dc2trTMxzBDXFS5Lls6XE8UcVAiSlSbiEKk5wcPslufV1SpE0Qt3Q/uo8tDoUPfp' $Logo &= 'U2Bp2UyuKuybM6czFKqG1pLOZ2OxyJGjh1WFkt5JhNDkFbbVE11mqn/uWhrvk1lBtgd65fLV3/zv/9cPf/wfL730EooNYzC8fpB5E2tXwAdWOcdeZ6qVJ59O3lbIfoSFzAZmcMc0zA7JtNt0z5nX/uUvf/WO2+7MpBJDo2P7+8fzGCJdRVwp+zOwT20Bse7ktlvOFQAThU1dQp8vtHFJDwmJ53++5eDweBo57WEbtwsxgKCAwGO4NM0wFTA2qgwNNlAo+lXVpytFWUrmKV27HVWAY8miRKE4g+OJ3T3DnQ2+No9vLJZBUs7OhtB/u2mZkS+8seNYKpEp+kyDLyWLFJnQ5xSVtC+rANEB3g61deHlXc3RRGbzvm6oY16fWspTaEshncunsq5UVte1kNck5O2Da0Aezut4hGKcV651YYbZt3efSMIoXGM5H2sBosFVl19y9OfPgpBWB2ssPSSpXgP2J+LqquArzO8VgrlkBem11XJRMz31XSsM8B0FqiOlaDKxRZNeVTUymzgpuawS6Xu5LFlhs5Yrz8iSRfkPGAcT4evFLKGzwsKXz2Ab37DEVexwJRUpI+WSV152MzBHlEVGR8DfnFhrQHTvOxpOdJ5DyAxu0G+mz5grgTXXRbQ2blP3T7WZn1ciyEp3L5NbXV3dBXTPYXXvO6NEa+f2vhE2aOdQJcHV4EnxviVtfvsJJUl+shEweEEcP3EC7oP19U0d7bMjiSjiTlH99Ec//jEMf0je+fBDj3bO6gJTKXNdDF0mO/3m4/3P7e0dTGTcmlTj1TkbGD8DV7KG71bKKgFjXDen+Wu3XgYRWCBUXKJ55Ic/+N62d7eAHEfGoi2tTWsuv7S5pc3nCYyMjvz4R//+yssvqoqOCsFUf3BiKoMT8jDTl6kImBA33ndaV865jtldX/v6nzS2tPzskUdOnexOn+itb4Afv0cA6BDDbVdmhdJqC91FFg4H6Uw0GkdYPnIS19QHb7jphnXrblx7' $Logo &= '9XVk8JfKA8nMzpPw6Im4RuMRHeykovgbzi8UsT/npmqSSbIEVLkuqIlZcuWc1r+8bc3fPb05crgvUqoBnfCCi+CmmipRjhx0NYc/wp0Taa2x5oZls+9b1blp1/F/e3Kjy9QRm8lMmjuGY6Kp4/HUY4Z84+KZsu4ryxmkNQhq6tLWqruvnHcslurpHkqlsjk/vRfTCwRCAyCfz+Qh7ZKDdSQ+f1nHF69eAlvqExv2WqMxy9ByWQ9dGSyWOEqOij8Xi/YdP6AGeYiiu6fbJmOk01z8LU3NkL0gf0BZAVmXVYkCzSQlGk+uWbnw9Q3rTw4BATeL6ahLh2neJIVAsaQSc19wGFWDAiETE9EIypKLhRxyo8kuQ1XxM0JvKTYR2qQKXi+YvdA+qOIAl6YAMyG+AVtCngqRAs+k2hAFfFBmUTB1PrqAecVfs5jA6ULeo+Gk9IzG0KUrF8cTSWCjpmQnDQMng7UD9AgS8XSoMM46owPx2YhdpQHjIhlJZffK3M5hLDkvNWXq9tSnq7z11Md0th3cz9lTufG+FH/Sxac5bpWq5NRncUCwDyf3V5mUadalcwWoI55s/8DJEycefuQn7bPaZ8xsD/mrbrrllvUb18MRq79vEHP6pw//V31T/dKlKzHpo9ExxVA7G0O5HSefXb8T4pO3NpjnVLiSLUcrGVCQaLK2JXzP8tnYX/lsL7/ywi9+/vPRsRGvzx+JDD9w/QO///t/BMqNn1577ZWfP/royVPds2d3qnaZZvowTF1wQCgKZzPUT3/4hKaPAsMoVg+XNqQ4O3r4yP79+/oH+5OpBMBiuGPItquPTHmTFHJ0K1CJdRIKIPtXh4Pz586tqa4FhHrlNVevvmSNJqnDQ0Nen16iCA+tc2Z9X9BbG/ah844Cx5VgrBGve2lH49ymsFouXWRx1qDH/NK1Sz2q9JM39x4fTg7HUrF4kuwtBLbI4iDD7+moCzcHPVfMbbp8fst1XTN9ZdfPN+6Hvac6' $Logo &= '5GMPBdto5Gq0hhJJfBlPM1ivSIBSAM63hDyfuGoBjArPvXv48EDkQN9IJpLMoFaYgO/yFjKPzW2rnb2q4/NXzLu8sxWFCHcdqx1JZMFdfEDG2G8Y+opUKEYsqw22/VTaUMuKQad/IP7EMIBP/3h4+BCyfz5NGFHmdnUhpwhSKijcGNAnmALm6ltvXPfdHz+qezyUoa5scRpHieOjebXjn50n2iYAFXkKZDu7BQkwHCnF34TnmYvYTlkulrlcA3F+0Z+Ky/Cl2Lzpoj/aJHyAE7rpistQMPKFG9ddi9fX358ANxWYjNA24HcDMwCk8um7Tk2PYvL+3067MOgM7eKfDl8/8MesTLTzgY+Js/NDYyqcG4AtCEBlockixvU3r7/S2Nz4V3/+N3pVVXVd3Sc++clf/OwX+/bubZs1Y8PGDQ0NjW0zZtXV1luUlrXU2Vj3tXXL9p8eePdwfypN2LrkshPhQZxy4U/V/vCaZV+8fqVUwYNfe+OVp375RCYLq7gER4slyxbfcvPt1aFa0PGXXvnVY0/8AjlUmltaQtWhbDrFudZVgdKyowtzLekDmDQOb0fp389+5guIRd29d9eGjeu7u0/v3b0XJS6wuO0VK4rcMU/QDb2mNlxTHYJv5YoVqxYuWNTaMhMIIITlYoFBHqtU7davmttcFfImM7lqXWUjuGNdlxBiOhzPzKoLrmirDZoX5U4rGIHHUL+0bsWlHfU/2nh4Z//YicGIapVEnB2lzfcbXa21a2Y1r5vbuqjBh1wA+Kmuxv+FW1f4TB3lhCHXVrJk6CFgpG5VGo7G8PwY8nTegvmoJhT4zOXzL+toeP3A6Se3HeoZjacyBcrCiSMMbU5r3bVdTR9bNmN2fTAylqwy1euWz+qYWae7yj4VJNHpMBVlWVgfSKaSBUMJGh+M+zzIIrxuXL/9BuQaTAUGSJhkCQdTFIvTPYyPDF9xycq3t2zfuv+kx/Sm8hl6MQzWkh8yrzHOOVmSFKqh' $Logo &= 'whRfGLdlVuyFYUux/8m2P25JYE0i55iEJnjJRKhdkasX8ydporgatqkqJTCxAj7x59bLhUx0SVf7VZevHB2hIRK8UESoINIb5pBFixZVUKXftd+1i0p9L8PdHpTE5PILGuG5vt6evp07dq7f+Oolqy+fO3seDNqHDhzctXu7QtEVeeRQWb/h1SuuutbvC2YIuinNa6r+23uu+uYv3tyx56R3Vr0i0aXApSLjCa/PXL2k/crFszT5PaQTgSlvbtgIb/fu7t7W1hlf+sKXVq9axUHO+oF9Bzes39Dc1OjxecnDSDdgUJE4QoQiRTl6XVLZ++uDbgATAP3dccvdWHSWRZVcx0aH4/GYSF4N3qabBhLEVIdr/FBGdC5aoKrwVYODCNgJiARncaCS+qYidVV7WsMmFrtaYlRUoUcoc7UcXA5GV1NRAqbaWH9hDrWVUF5JcLvOpro/vtGXyhdhYMde/k2UlNQg3qouK2xKiI8hCdYVb/Krn1w5S9EUst0Xy3YKNR5bHCBZsB/qIElCwxAxRlCwVE1vrfZf01W3sDlgGl7hw8/e3rhMSZOsgKGkk1ncIeTVLmsLLW8I4M0rCg0Lg2yS8DV3qzLuSFVg/7/ThEUB+g20HJjrgbZjStBenpMFYFLZ5AMfv/vgP/1btlDUFRhOYDoxCCkGD6HkzDwEONp2meRPbpUypfjn4i2xy9lm1y4heDL0j8Y2ML4O60FFscfmORh0Dfy+mPG71Qfuv8fKpigSgptTxQRxeSjsAd9Z8R4vCnb/XfsdUxFRF5xxwYIlAF9JQlJUeKAjd8L3v/89UzMbb7oNNPQzn3oQZRA3btyMOXfy1Knvfe974XDNurU3pmGhTmfhvXDzko5t3SM7uocL8YzkNQyPSeUOk9n2hW1/cc8Va+c1w5ibyuaRmh0uws89//TLr7wUiyXh+dfQUL127bV33XE3XAMw4199/TdPPf0k5NzWVnKDgQkcn+glF1UtgSCC7ZH31zQw' $Logo &= '3/NFNlioJ93MXW+CYTg/ISkM1q+oV0qR5u+tuZJMpwB0c14EEQDFWXeLhItX+/RmTRGlnQyqSF+m3D7sey1xZUrZ7b+YyuqVXwVVcRtGR71xljOsfAbVTQpUNEzGwKb9utbUEqa4x8qgH3Z9lUmGRpQqIHsQRN6Lxsn8VTyLps1prptjl4iobEVQ1WQWUyCPedSIoIf/45oguKtXr4bXKVAj0GI42+iaRnZySRuLxtpmzPjsPTf9+389ZXrCMHmQUqbIGGSJFyJFk0qiQC+5RZBRsuTi2CL8YzmJNygiVegk9J/4k/AnEuKz1iyLAEhiJ0V8UmFHDnC3YJeRStikkyDDADBGMvD7Pn13R1tjb/dpx2NNqCl4BKjXeJzfqSm/ax8Q/FUsIeKGJRQKcnNMOlXh4PDg8Nub3nl79eZLLrnUssqrVq35xH2f2rvnANDaXC67fduOt958c8XyFVT9RbNvcf2yji1H+t5451C8YHnBD2Jprdp307L2tV3NMIv0IbxLVcBUtr679bvf/153T/fMma3wzr7p5hvv/+QnvT5K/L7xrQ1//7/+btfuHa1tjbkcGSZt0inyWlEBdUvXVBLDivTxwSkrDJdjmRkm5HGkvIQQDSaDRUwZetnNS5TizWUKk5iKz+NFkDBRC5nz0MiIIKt1fsVP6KhOxmwTXw3V/Vukd5x90CpZ4HPZfFYiJsAjpBC8T05zCtgdayRkuVJg/RrL5ESyA9pZuVFi+icUFIm/8nUc0RpDBWKaSIwjvK++pt4B9jQzGDJd/wc3oayAl8CnFmEx119/vaDRTqZFmHauu27Nse7+53+zxR+oSeXypJtSXXilxO8DG9BdFHyFwkIxjQQM0jY+KU+2UDN4g14AIWR8WLlksxaZ/jibuKi6IvzsixZWM4UWk7mRDSqaVPRprmR08Nar19x8w9qBvlPoJi7hRHWAwezbtw/mQPjgCgXl/2XvWqCbKvP8Te5NbpImafqkpZTWAgXK' $Logo &= 'UwqCQqkgQ2GWijCWx05FLNTHiKCz7OB4juPuzDg+OLM4Hkb2eHY4ux4FV0flNaAMVFcRKSCgSKEtfUgLSdO0Tdo8mvf+vu9jY5YcmZYpFOr3O+Fye7n39tLTL7/8X7+f8HeCg5MKFCagNn/xYrMM42xq+OwlrSxExrELhtfO4JZ/3xyfYHx49eM4GWJfBTOnf/zxJ+ZLFpQ69ny4Jysn56EVq6jiZKdBb5yWmbJw8vBDNU1uh6sLk9Vd7tIFk56aPQYyLN4wJt5kSVbV1J/b/9e9LWYLlgj9DQ9MmTIV8vLE0vns6df/tOXL41/C0tdrcHd22aO6L0jNH5mxFkuHKAk6g9bj8+A5ry1fdPUBIlkjY0W6vG78NIg0EtX5YcXPZFOSEAPW2I7t9/0TvPxMhmud7+t9QCaJEv128de7gKmhEH6owJg0VAIxAIj2fwzcSZLExA3R64uJpbKVJW3t9mNf1mDqz+0DBPRzCZjsoX0PiDiw0IjssyQFqUNfCK+wkvQN4y8SboTBG6KgwJk4QComVDsI7BLENkzC3QBetIMYeVra84VXkA3ck3hHGdSrFf7O1jsnjHiotMRqacZnQVHU4J9wniAQ7Uhk8PDM+I8IfQUOTioZGUOWLPvpzBYLJEtRfA4QEMkHGfv+IDJbVqsFWSn0R+HknGHD1zy+rrPTuaP5A4wtnjr59fZtb40eOWr02LEhmgXCZ/aSqaMuOj3/9t7nXRds2WOzfjp15ODE5FabFW2QRoMeWYLdu3a+te1NZNPRiZuSPPInZRjSXypQYMJo+LDc8vJHIDwF9WLMsSIuIdE+tXjBU+FytPBi9WYOycgdPtLV7Y7T6K6ZSK4yRoQmZiznoCTjSx9KJX7iTDXINEi4JsCJUhgo4EAswoIVzPTNmzdv27ZtbNSOjUzT31ilsxOCpB1PPrHyxZdeO17TGGccFERqmcwMERE4nEMdy0XsQdEghLQqvqYm8xIljOiIRGDe5pRaCJfQ' $Logo &= 'MryXKNHi5cMr7KOZLpwQJCfR4IXplKo8nZZxw4asfWRlt8vR7e5CZhvnUcE64kaFgc3Tp08vWrQIw3q9EnPk4JCuUlBBw+6TT66nZoyKSFqdVf0UFOh/J87JFMjq4LWg+N66hvPwh4fgDzo4N2/5A/qAp08vbGuzoSRo0mo3zM0//XXjZ4HQunn5Q5NM7k6kkpTGeB3ildras0c+/6Lpghl6i1hCELpf+8R6mPuyPpbxYyeOHTNBDXFfBWMCJsROUi6XS5R0I1PfEGTtkFMSrgMYCUEkgEmHQk4G6SAirHTDEZlt5rjZaioM0NZFZQUGgkVFRUy1CdSAMUTQQ4etIzlZ/OX6Rzf+ceuJry4Y9KkevxskAstUpA5JPEniDvAELFgkWKVACsgTUsoBRZxalHzwVVWIgDLA5HjBR/6QCK0dZF99XmqijUvwDRFTM8uVoKAKoQmNmE5qVKSH2GOzTRyT9fM1/4hf4dZ2u5quYkXUADYeG/V5+FP1XcspByeVcJi1xcesm6gj6isvL16wEJJcmzb9nghB+L2HPj28qPgnErGLJklhAGJWP8ofkZeTtjB/RKqByB5jLaUkJINU3njrjZq6msQkk81qGzUq9545hVA0iIhr/j99G/GK57kSPWeUSAZZ6C1omw1hFw35HCrcWIDZhZsVHJEuqcWLF7/88svHjh3DuzOTswQXMAtFTBRCg/WZteVbtr770aHTKmOSFFB6ibAw9UBFJgyMoGCjx7SyEgxRZTtBCQ9JL/JhNK657AUbwuqieS7sMul1QmAhBa2PEcVexCnkEjgMiZimtdtmzRixauUSv6fLYbPjYZg4bkQU5MSJE0jZ4eFjp7WvHRycVK6tym2IM8yf/+MjRw6dPHUSZXaky9CslZE5JG/seNRlMPIrSarFd+WBs1INugB0z0V1QrwBi+X9ne/t2LGzvd1mijd53C6sxtLSlbJad6PeAkK9GmyJTKYhMRhRFbthYDNsPHy5+Sv2' $Logo &= 'MCCBPSK8RtBnDPVAdLuw46iigF2s1lZ/XNfjDy9LH5L+7s4KhP1GrckDboAmMIlUJDpHoiJUpCTD9sTOR6kmvkZqFRiC9kdgC7YIYvSedeCFGP/QvmwFrguL1PsWNpQhrTIUcLWJAUfpfbPvKy5obzM7Oro0KgO1ArpcMgSjwJAKvZ3Qzoq0EfcdqXDwlmKK3nbijh83oWzVQ6/9sfvQ54eHZGbsP/CRrNNt2PDLoVnZyEqhvyvVoGU3d7p9GjWgeve9t//zv/5EHCB8REZ7wsSxc+4puiGMwqo1ToOBDo33HtG2232e3fq+qvtVGCVG36xHZaTrwUMcTBMIyrvLly+HjTHaFlBfQbyiBESRRQAYD3X6zy+eN31MdvZ/vLOr9ttLGsNgQaXtpnlmNqII0aawIOKFkgeZ3lGyrmEmZEo6ENmET1iJfTb7SAdKSLkRVKQGNUmYYvb4fI6LwzISHipZPC43s77R7A+4QFOwAoKSGFOjwhNCbAna9UuWLMG0Y+815xk4OKlcB8AUsqLik48//QRCkM5O99kzZ/Z9uOcfFiy8bWiOy9Glj9NJVFVJVEnI89rt7UePVJ75pgquqxgShKbWipWrMVYp3CiAURhrRtcq2E60/Mb3OdZdp7V3lXtGHg+g+9HH6VxJFHngYE8kNZk9eL8k0Knv1Hf6BXiwAcYrBQUFGObfvXs3SvfQBHN5iI89sSAgShAi5oKqz9cPycr49YbyPfs/3/vJSbvLozIm0+b4kDJMGvtDfkEUqTpxEH/Q+S1SMfzLTQFgGKrUgnBDEkAyAqzmJcgf08q9J4jJoPbmRFmYU3RH0dy7g6HuqroaUBT1siMS+CAupi5stbX+df/+OffMQSf0NfcQc3CQlXw9PsyeOHX8xZd+V3GgAqlkqOKbEhKe3vD08qUPQDgr3oiGMV2YhO3K89/WffDnd/57+/YzVVXwYjIY41aVlT++5ilZUgscfyuIjGY7ZxfmfwLxCQkYOIll' $Logo &= 'PsYiN7LyzxHRGWQ7sA48ePAgnKwGpaexeIWZEuI0ZvmuN5jS04dYWzsOHvzs6DeNDtjNGNIkfaKaCEiqw5Ia7jchmdg8CNinFteR4Xk/HWYR/AGi8uKTYJ4m+NF1bw13mA2yf3Le0KJZd6QkpmA8wOly4GoqlSRENOExzow5R0hxFxbMLCsriwm++xscPFLBTN+kiZPLyx6rra61tFzCurnQeKHy8OFpU6fpDDBKI4TBOqa+/vqrN958o8ViThuc7na6l9xfsnzJsp4wCmtG+8EiNtOtNxivOKG3qcs+ZBTe8BYb85WWlmKLeKVw1t2QMQevKCiY9wkSYp0Ou9PRkZKUUFoyZ+5sd+Wps0fPNFo66t1SnFqfoFInCqIiTqGRFHIYeyEVk6sk2S7krsIAJhs9AUgiuM3dnVbRZx9qkvMnjM6/fXRygqaj3XL2nBl5NyTFAmQG5jLhReooyHohQFlR+sDfaf/HwaHs+XrulQ8rtrm5wxctXpiUlNze1h6fEP/Rwf17/vKXQUmpyOR6Az5QQnVt1Yd7d9vb7NAqxtJKSIqfcPuk9MFZPSyVo7wvcFyVJAZSvQSMcitGKpE8ErbglZKSErjvQToP6SbGKEwPmLi9BbwgiGar9ZvzdaGws2j27f/82KJ1D8y6d0p6bnyn1lUdbv3K1XrO2XrO017rtZ/32eu7O+o8bbVuW63PfMrddNRrPqbsPDNUZy26PXXt0tm/WHHvnIJxIZ+z+lxdi9UN5R+aciMF/MiKxmNUVVVVVFQU31v84IoH8SR9GKNw8PRX36PFevHZXz27bdtbMGOoOddQUHjnr//1t5On3KHTxQV8/o0bf/fq5j/A+a2hril31LBV5WW/+PkzQg9AfREFJZPSG9DgiC0F3erZMLyDb926FUV71FpUshp6NiGKYIBaONIKfJD6NsKaxWQiuWLE+ohsOuwOc5fH4XS5PUSkyBtkls2SrFab1EqjXpeYCAUlo1FLvEfd1A7d' $Logo &= '091Ny1QiiVxD5M5MwBh/y7KM2x6trLRYLGhRQ14Ox/uBUTg4qfQ8jmHrf/s7b77yyu9bzDDWsmVkDh47fsyax9bdOXX68S8rN23atPfDvbflZDfU1c//cfH7f97Rq293q6R0ODipXGGOhODg9ddfx6jKtDunDc3KIi6NxAZbyUosQQqcFtEhAnMgSRUHyIIoSUS+FC8qSgwIZHCFuMP5vB6X04lGANwQR1WSJIrSd9PKgsgeA3eDlw+45NChQ+gbfri8fNz48TdXyouD11RiHRUjXLWg+L7z9XWvbd6skAQM+1YervzR7HMmk3HHzvcumpu0Wo35oiU/f9KyJff3kE4UN18thYMnvnpovce2eXl5zz333Pbt2ys+rhiSmQmTV/AFzA6AaMfZSOgAkkBAQ+RHcR8qBSai+0vwM1ohpSayRdMXHV8RpctWKwQ+dhM20oKDskaDIKbyyFeXLjXPmjV72bJlMEli/c03XcmKg6e/YnmFJKlEEcItmzZtrKg42NLSKsuamTNnYFT+iy++6OzswimSKK5fv/6xR9f29lsM4GCFw93tUZDP2io2gj4wQk8WDUQ6DrA9crTy7bffbmpqgu7kyNzRhFoocCY7jdEM+5KEJwLNkMHGi8qvhCMtKxhJwR7GGHFcDLPzo6lCBUgymAkmrbW1telpqUuXLr3rrruYfHKE8zip9Cc4qfR8sA4WKdXVVS+88MK+j/bljcnz+uDW6JIkFZwTEX0XFBb87NE1E8dP6vn9BzyvcLS0WZHgMUBxWtbEzIEOqIZjVD4OHDiwd99eh92Rk5MzYsQI1FFQXkF0QoIVIESI4f945Tt3H7rLNgAoKkjpgUQpjL1wOTVAEyVJguzKtw2NDQ0NaKKZP38+KigwprwFBoM4OKlEeCV2Uu+ljc+/+uorer0RcbhGo8bA2zenq++Ylv+b3z4/d1ZRr+48YHiFgw8bKShQ4cAUC/p622HtlZKSnXNb6qBUnVaHE5AWYwgz' $Logo &= 'RWJ6IYNASitXjiWxdjJswS6ebjcqN4iEMIaSlJBYWFiIvmH0CLD0GsuSCf0LDj78GMsZV788MqBX11j74ovP7961RxQVKSnJbW12gyFu1eryRx5do9fE/TBJhYPzSnTeCW/9lZWVqJ+fr6uDaBFClsGDM0zxCUiLofc3whwhigiFRI8xAqj5wycCJvktLS2Ozg7cGQHQjBkzpuRPBp3EakT2D69wcFKJRc8FpiK/97v27Xr+N//S1NwkKSW3y7NyxYM/W/OEzqBPS07rIaMMVFLh4BYskYFWVD7gyX3i5Ak0iTU2NMKjCJEHeAWZK2xlWQbBoETCrmYqxciVQa0S1r9Ic2EHh3B2VlbWmDGjJ0ycMHzYcI0sR8dGAkU/eM5zcFLpK15hp10yX/zgg3e3bNlyrrpmypRJT637p/tLllF9PIGTCgfHFZMioAqz2dzc3FxfX3/hwgVEHghBcNDrJSbfEUpgdXhwjdFoSE1NzczMzM7OxhZxCegn5s43PTg4qTDC6GFxxensfOaZp4+fPLZq9ep77p6bnXVbzxmlz0nF0mJJG5Qm3Ezg4IiujkQvAcw/IgpBLOJ0OhmvAGT4UZa1Wi2LYzDOAo6JXTi3joI9ByeV3vPK+zvesdqsxcWL4vUmrIO/qfHFvB37nFScXRgTcylVIizChOuDVrsNz89IEd2xifEJkRM4WttaBeKGTirGcRQu0hXoEonRekin0+q1epaf+WFGnGGKa6CEWMeKfpDz4uCkciNh77CZ8D7e3/B53U6XU0FdKcFdwUDQoDeoI7b24aDT7YQBjFIgRkdIaKtVWhz2eF1IQagUdPgM1wXC1FtPCHoD8YZ4SSM7uux+r1elVAkSLZwGw1TcPQRBDqOek4rgaLeRH7iogJ4ufi7YQUVar9PLmjjSau52iqIEiUWtRqfR6YUo8KglUhGJTmfFRjb9XIHn4Pjf9uqgCAAABgHQ+pd2JTxfUIKUAMBlBgCpAIBUAJAKAFIB' $Logo &= 'gAcIIS5QiH1PVwAAAABJRU5ErkJggg==' Local $bString = _WinAPI_Base64Decode($Logo) If @error Then Return SetError(1, 0, 0) $bString = Binary($bString) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\pspad4autoit.png", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_Logo Func _Chip_Sound($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Chip_Sound $Chip_Sound &= 'UFNJRAACAHwAABAAEAMAAQABAAAAAENvbW1vZG9yZSA2NAAAAAAAAAAAAAAAAAAAAAAAAAAAU/hyZW4gTHVuZCAoSmVmZikAAAAAAAAAAAAAAAAAAAAyMDA0IFZpcnV6L0NhbWVsb3QAAAAAAAAAAAAAAAAAAAAUAAAAAAAQTH0RTOoRTA0SrZaJkpWarS0oAykgCgUGBi8WCRIVGi0BAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFic4S19ziqG61PAOLU5xlr3nE0J0qeAbWpviLHvOJ4XoUcE3tDfEV/WcTgnQo4JuaG6Ir+s5nBOhRgTc0NwQXtZyOCZCjAi4oLggvKzkcEyEGBBwQHBAeFjI4JgIMCAuAQEBAQEBAQEBAQECAgICAgICAwMDAwMEBAQEBQUFBgYGBwcICAkJCgoLDA0NDg8QERITFBUXGBobHR8gIiQnKSsuMTQ3Oj5BRUlOUldcYmhudXyDi5Ocpa+5xNDd6vj9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzRkAAAAAACAaAAAAAABlGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqKkPjfMRuSUQCqq9BheNexG9BxeNfBG5KRCNIxCtJBCNMhaNZxK5LRCNTxG5MRCNVhG5NRCNXRGiACDBEaIHIMERog6pAZ0+EZ05EZ1lEakCnQ8RqQSdEhGpAJ04EZ0TEZ1NEZ08ESAtEkxcFKX7SKX8SKkACQCNGNSiDiCpE6IHIKkTogAgqRNohfxohftgpftIpfxIog4gJRKiByAlEqIAICUSTAYSvTsR8OJMyhSp/506EZ0lEbwTEbmWGJ1jEbm2GJ0QEakAnSMRnRQRnTsRnSgRnSkRuTYZnScRuVYZnSYRqQOdEhHgANAZuRYZjRfU' $Chip_Sound &= 'ufYYKfCN8RG51hiNaBGpAI1vEb04EcnA8CO5dhidBtSdPxC5VhidBdSdPhCpCZ0E1L1NEZ1OEakAnTgRYLxiEbmwGZ0G1J0/ELmTGUyWEqn/nToRTEMTKR+dDhH+PBHITC4T8OrJ/fAhsGipA50SEamAnSURjHoRvBMRuTYZnScRuVYZnSYRrHoR/jwRyEwuEyl/nRMR/jwRyEwuE71mEZ0PEb0+EdAJIMoUvU0RnU4RvTkQhfu9OhCF/Lw8EbH7yfuwn8mwsE/JgLDFyWCwh50kEf48Eb0OEZ05Ecix+8n/0Aj+TxGpAJ08Eb0+EdAQvTgRyRDwJ8kg8C/JUPBKYEwtEr0PEfCVyQLwCJADTMoUTJYUTCEU/jwRyEwuE71iEZ0lEakAnTgRYLxiEbmTGZ1jEakAnTgRYN4PEb05EfDCvQ8R8BhMyhS8YhG5sBmdPxC5kxmdPhCpAJ04EWC9ZRFJAZ1lEai5exGdDxHeORFMyhTwEsn+8AmpAJ0+EchMOxSp/p06EakAnT4RTEUUyMmwkDeMehE46bCdYhGouXYZnTgRMAWpAJ0+Eax6EUw7FLw8EfA2qf+dOhGdPhG9ORCF+706EIX8vDwRsfvJ+7CiyWCwur0+EfAPqf6dOhGpAJ0/EKn/nT4QTMoUvVARhfu9URGF/LxPEbH7MBmoua0anTkQuccanToQTCYUsfudTxGoTGkUyMn/8PIpf51NEf5PEUxpFL1lEUkBnWURqLl7EZ1mESDKFL04EclA0BSpAJ0SEZ0oEZ0pEZ04Eb1iEZ09EWDeFBFMCBWpAZ07Eb0UEdDwvBMRufYYKQ+dFBG8YxG5DhfJ/vAfkAyYOPl2F51jEahM4hSdZxEp9509ELl2F51kEf5jEbwlETATvSYRGHmwGZ0mEb0nEXmTGZ0nEb1nESkI0Dq9JBEYfU4RfWQRhfuouU4QGH0mEY14EbmuEH0nEY15Eb0SEfAryQLwJJBirXgRnQDUrXkRnQHU' $Chip_Sound &= 'TDEWvSYRnQDUvWQRGH0nEZ0B1EwxFkz0FaT7uU8QOPlOEIX7ua8Q+a4Qhfy8PRG5kxlKaQCdIxG5sBnwCaiIRvxm+4gQ+f4SEaX7nVIRpfydUxFMMRa9KBEYfVIRnSgRvSkRfVMRnSkRrXgRGH0oEZ0A1K15EX0pEZ0B1L0jEd4jEdBPvD0RuZMZGGkBnSMR/hIRTDEWvSgROP1SEZ0oEb0pEf1TEZ0pEa14ERh9KBGdANSteRF9KRGdAdS9IxHeIxHQD7w9EbmTGRhpAZ0jEd4SEeAA0FisaBHwU7kOGNAbuSAYjXYRjRbUuUQY8ECNaBGouQ4YjXcRTI0WrGgR8C65IBgYbW8RjW8RuTIYbXYRjXYRjRbUuQ4YzXcRzncR0A25RBiNaBGouQ4YjXcRvBAR8F653hfQI7nqF508EJ0D1CnwnTsQnQLUuQIY8EOdEBGoud4XnRERTPAWvBAR8DG56hcYfTsQnTsQnQLUufYXfTwQnTwQnQPUud4X3RER3hER0A25AhidEBGoud4XnRERvT8QnQbUvT4QnQXUvT0QPToRnQTUYAQE////////Cf5B/okZGRkYGP6JSYiIiP+JGfn4/kFBQUERERER/0FBQUERERER/0FBQUERERER/0FBQUERERER/0FBQUERERER/4n+Ef4RQf4T/hkZGRkZGRn+if4T/hP+iRkZGBgYGBgY/xH+Ff4AAAAAzwkHBgQDAM8NVFBUApgeHh4AAAAAAAAAAAAIAAMHDAADBwwIAAUIDAAFCAwIAAUJDAAFCQwIAAUKDAAFCgwIzwAAAAAAABgAEAcGBQQEAwDPAAwADAAyDQkHBgUEBAQIAAAAAAAAEBAAADAwABAgIAAEQMAIBiDgBhAQ8AAAAP8AAAD/AAAA/wACAwIABgcGCQoLCgAABwAAAAcAMACAgACAgIAAAACwANzAqAAQgFCgYIjAgIB4aAAA6AAAAOwABAAA/wD//wAAAAACAAICBgAI' $Chip_Sound &= 'AAoLCg0ODw4KCgAHBwcNBgkAAQcBAQEBtwECxwYHAcYGDQDhwQSnBgMFd4eHh/W3tSMldzs7OztzRTZze41FfWv1JUVDaXWZNVUAAgICBAsFERYCHygxOkMWC0VHRxZKR0wWFlRWWFpkZgABAQEABAAABAQFBQUFAAQEAAgIBAQIAAQEBAAAAAAAAAEDBAAAAAAJBQAAAAAHCQAHEQwRDBAAERERAAAAAAAQEBAQAAAAADAQAgICAhAwABAwMDAwMAAwMDAAAAAAAPHx8fEAAAAA8/EAAAAA8fMA8fPz8/PzAPPz8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAMDAwEDAQBBAQFAQEFBQEBAQEBAQEBAQwBAQEBAQzNzsBQAIAAgI1P8A5AEA/5AwqKCQgPuw+gD++hzKysoCXwUIAwRN+BBLRTD4AAAAAACAABiAgCAAAAkNBAQEBAQEBAQEBAQEBAQEBgYGDwYGBg8GBgYPBgYGDwEBBwgBAQcIAQEHCAEBBwgGBgYPBgYGDwYGBg8GBgYPBgYGDwYGBg8QExUTEBMVE/8BCowDBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBIAFBQUFGBmMAwQEBAQEBAQEBAQEBAQEBIARFBYUERQWFP8BCwIMAgwCDAIMAgwCDAIMAgwCDAIMAgwCDAIMAgwCDAIMAgwCDIwXFxcXEgQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBP8B4eQBGz1fkK3K5+vy+RQ2WHWeyuz8Ez1qi74aGhsbGxsbGxsbGxsbHBwcHBwcHBwdHR0dHW/+/4JgD7Ni+4FgG7Ni+7BgD7P7iWEbsWAPs/u0G/v/hGEA/gD+hQD+hwD+AIYAhAD+hQD+hwCGAP+IYCf8LPwi/Cf8Lvwi/Cn8Lvwl/Cn8Kvwl/Cf8Kvws' $Chip_Sound &= '/Cf//GAn/Cz8Ivwn/C78Ivwp/C78Jfwp/Cr8Jfwn/Cr8LPwn/4pgM7X7Y/5gM7X7Y/6LYDW1Yvtv/oxgMbX7Y/5gMbX7Y/6NYDW1+2P+i2A1tftr/v+CYA2zYvuBYA+zYvuwYA+z+4lhG7FgD7P7tBv7/4JgErNi+4FgHrNi+7BgErP7iWEesWASs/u0Hvv/gmAWs2L7gWAis2L7sGAWs/uJYSKxYBaz+7Qi+/+OZwD/kWAMtmb7/2H+hgD+AP+EYQD+AP6FAP6HAP4AhgCEAP6FAIYAhwCGAP+PYCf8LPwi/Cf8Lvwi/Cn8Lvwl/Cn8Kvwl/Cf8Kvws/Cf/iGAn/Cz8Ivwn/C78Ivwp/C78Jfwp/Cr8Jfwn/Cr8LPwn/4JgErNi+4FgFLNi+7BgFLP7iWEgsWAUs/u0IPv/kmAnt2L7Y/5gI7di+2P+YCK3Yvtj/mAet2L7Y/6TYBu3avty/rlg/v+bYDG+YvuSYCe3Yvtj/mAjt2L7Y/5gIrdi+2P+YB63Yvtj/pNgG7dy+2f+/5lgJ/ws/CL8J/wu/CL8Kfwu/CX8Kfwq/CX8J/wq/Cy9J//8YA+4aPt1/mv7vGP7b/7/l2MAZ/6VYAq6bvtr/rtn/rxj/pprAP+SYCe3Yvtj/mAjt2L7Y/6WYC63Yvtj/mAqt2L7Y/6TYCe3avty/rlg/v+bYCe+YvuSYCe3Yvtj/mAjt2L7Y/6WYC63Yvtj/mAqt2L7Y/6TYCe3cvtn/v+XYQCYYCL8J/wu/CL8KfwulwD8+5gq/CX8J/wq/Cz8J/+eYBjAYvvBY/vC+8Nn+8Rj+8X7xvtgSshi+8dgSsj+Sshi+8dgSsj+nxvJavvKYD9m+/+eYBjAYvvBY/vC+8Nn+8Rj+8X7y2H7zPtgSshi+8dgSsj+Sshi+8dgSsj+nz/KYvuXYwCHYQCQYwAAhWEA/w==' Local $bString = _WinAPI_Base64Decode($Chip_Sound) If @error Then Return SetError(1, 0, 0) $bString = Binary($bString) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\Commodore_64.sid", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_Chip_Sound Func _WinAPI_Base64Decode($sB64String) Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "") Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]") $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "") Return DllStructGetData($bBuffer, 1) EndFunc ;==>_WinAPI_Base64Decode #Region TichySID Func _SIDClose() Local $aRet = MemoryDllCall($hTitchysidDll, 'int', 'SIDClose') If @error Then Return SetError(@error, 0, 0) Return $aRet[0] EndFunc ;==>_SIDClose Func _SIDOpen($Sid, $iSubsong = 1) If Not IsBinary($Sid) Then If Not FileExists($Sid) Then Return SetError(2, 0, 0) Local $hFileOpen = FileOpen($Sid, 0) If $hFileOpen = -1 Then Return SetError(-1, 0, 0) Local $bSid = FileRead($hFileOpen) FileClose($hFileOpen) Else $bSid = $Sid EndIf Local $tSid = DllStructCreate('byte[' & BinaryLen($bSid) & ']') DllStructSetData($tSid, 1, $bSid) Local $sType = BinaryToString(BinaryMid($bSid, 1, 4), 1) ConsoleWrite('-->-- Sid File Type : ' & $sType & @CRLF) Local $iVersion = Execute(BinaryMid($bSid, 5, 2)) ConsoleWrite('-->-- Sid File Version : ' & $iVersion & @CRLF) $iSubsongCount = Int(StringTrimLeft(BinaryMid($bSid, 15, 2), 2)) ConsoleWrite('-->-- SubsongCount : ' & $iSubsongCount & @CRLF) $iSubsong = $iSubsong - 1 If $iSubsong < 0 Then $iSubsong = 0 If $iSubsong > $iSubsongCount Then $iSubsong = 0 ConsoleWrite('-->-- Subsong : ' & $iSubsong & @CRLF) Local $aRet = MemoryDllCall($hTitchysidDll, 'int', 'SIDOpen', 'ptr', DllStructGetPtr($tSid), 'int', DllStructGetSize($tSid), 'int', $SID_MEMORY, 'int', $SID_NON_DEFAULT, 'int', $iSubsong) If @error Then Return SetError(@error, 0, 0) $tSid = 0 $bSid = 0 Return $aRet[0] EndFunc ;==>_SIDOpen Func _SIDShutdown() MemoryDllClose($hTitchysidDll) $hTitchysidDll = 0 EndFunc ;==>_SIDShutdown Func _SIDStartup() $hTitchysidDll = MemoryDllOpen(TitchySIDdll()) If $hTitchysidDll = -1 Then Return SetError(1, 0, 0) Return SetError(0, 0, $hTitchysidDll) EndFunc ;==>_SIDStartup Func _SIDStop() Local $aRet = MemoryDllCall($hTitchysidDll, 'int', 'SIDStop') If @error Then Return SetError(@error, 0, 0) Return $aRet[0] EndFunc ;==>_SIDStop Func TitchySIDdll() Local $sFileBin = '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' $sFileBin &= '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' $sFileBin = Binary(_WinAPI_Base64Decode($sFileBin)) $sFileBin = Binary(_LzntDecompress($sFileBin)) Return SetError(0, 0, $sFileBin) EndFunc ;==>TitchySIDdll Func _LzntDecompress($bBinary) $bBinary = Binary($bBinary) Local $tInput = DllStructCreate('byte[' & BinaryLen($bBinary) & ']') DllStructSetData($tInput, 1, $bBinary) Local $tBuffer = DllStructCreate('byte[' & 16 * DllStructGetSize($tInput) & ']') Local $a_Call = DllCall('ntdll.dll', 'int', 'RtlDecompressBuffer', 'ushort', 2, 'ptr', DllStructGetPtr($tBuffer), 'dword', DllStructGetSize($tBuffer), 'ptr', DllStructGetPtr($tInput), 'dword', DllStructGetSize($tInput), 'dword*', 0) If @error Or $a_Call[0] Then Return SetError(1, 0, '') Local $tOutput = DllStructCreate('byte[' & $a_Call[6] & ']', DllStructGetPtr($tBuffer)) Return SetError(0, 0, DllStructGetData($tOutput, 1)) EndFunc ;==>_LzntDecompress Func API_FreeLibrary($Module) Local $Ret = DllCall($_KERNEL32DLL, 'bool', 'FreeLibrary', 'handle', $Module) If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_FreeLibrary Func API_GetProcAddress($Module, $Procname) If IsNumber($Procname) Then Local $Ret = DllCall($_KERNEL32DLL, 'ptr', 'GetProcAddress', 'handle', $Module, 'int', $Procname) Else Local $Ret = DllCall($_KERNEL32DLL, 'ptr', 'GetProcAddress', 'handle', $Module, 'str', $Procname) EndIf If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_GetProcAddress Func API_IsBadReadPtr($Ptr, $Len) Local $Ret = DllCall($_KERNEL32DLL, 'int', 'IsBadReadPtr', 'ptr', $Ptr, 'UINT_PTR', $Len) If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_IsBadReadPtr Func API_LoadLibrary($Filename) Local $Ret = DllCall($_KERNEL32DLL, 'handle', 'LoadLibraryW', 'wstr', $Filename) If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_LoadLibrary Func API_lstrlenA($Address) Local $Ret = DllCall($_KERNEL32DLL, 'int', 'lstrlenA', 'ptr', $Address) If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_lstrlenA Func API_lstrlenW($Address) Local $Ret = DllCall($_KERNEL32DLL, 'int', 'lstrlenW', 'ptr', $Address) If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_lstrlenW Func API_VirtualProtect($Address, $Size, $Protection) Local $Ret = DllCall($_KERNEL32DLL, 'bool', 'VirtualProtect', 'ptr', $Address, 'dword_ptr', $Size, 'dword', $Protection, 'dword*', 0) If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_VirtualProtect Func API_ZeroMemory($Address, $Size) Local $Ret = DllCall($_KERNEL32DLL, 'none', 'RtlZeroMemory', 'ptr', $Address, 'dword_ptr', $Size) If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_ZeroMemory Func MemLib_BuildImportTable($CodeBase, $PEHeader) Local Const $IMAGE_DIRECTORY_ENTRY_IMPORT = 1 Local Const $SizeOfPtr = DllStructGetSize(DllStructCreate('ptr', 1)) Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader) Local $SizeOfDataDirectory = DllStructGetSize(DllStructCreate($tagIMAGE_DATA_DIRECTORY)) Local $ImportDirectoryPtr = $PEHeader + DllStructGetSize($IMAGE_NT_HEADER) + $IMAGE_DIRECTORY_ENTRY_IMPORT * $SizeOfDataDirectory Local $ImportDirectory = DllStructCreate($tagIMAGE_DATA_DIRECTORY, $ImportDirectoryPtr) Local $ImportSize = DllStructGetData($ImportDirectory, 'Size') Local $ImportVirtualAddress = DllStructGetData($ImportDirectory, 'VirtualAddress') Local $SizeOfImportDir = DllStructGetSize(DllStructCreate($tagIMAGE_IMPORT_DESCRIPTOR)) Local $ImportList = '' If $ImportSize > 0 Then Local $ImportDescPtr = $CodeBase + $ImportVirtualAddress While 1 If API_IsBadReadPtr($ImportDescPtr, $SizeOfImportDir) Then ExitLoop Local $ImportDesc = DllStructCreate($tagIMAGE_IMPORT_DESCRIPTOR, $ImportDescPtr) Local $NameOffset = DllStructGetData($ImportDesc, 'Name') If $NameOffset = 0 Then ExitLoop Local $Name = Peek('str', $CodeBase + $NameOffset) Local $OriginalFirstThunk = DllStructGetData($ImportDesc, 'OriginalFirstThunk') Local $FirstThunk = DllStructGetData($ImportDesc, 'FirstThunk') Local $Handle = API_LoadLibrary($Name) If $Handle Then $ImportList &= $Handle & ',' Local $FuncRef = $CodeBase + $FirstThunk Local $ThunkRef = $CodeBase + $OriginalFirstThunk If $OriginalFirstThunk = 0 Then $ThunkRef = $FuncRef While 1 Local $Ref = Peek('ptr', $ThunkRef) If $Ref = 0 Then ExitLoop If BitAND(Peek('byte', $ThunkRef + $SizeOfPtr - 1), 0x80) Then Local $Ptr = API_GetProcAddress($Handle, BitAND($Ref, 0xffff)) Else Local $IMAGE_IMPORT_BY_NAME = DllStructCreate($tagIMAGE_IMPORT_BY_NAME, $CodeBase + $Ref) Local $NamePtr = DllStructGetPtr($IMAGE_IMPORT_BY_NAME, 2) Local $FuncName = Peek('str', $NamePtr) Local $Ptr = API_GetProcAddress($Handle, $FuncName) EndIf If $Ptr = 0 Then Return SetError(1, 0, False) Poke('ptr', $FuncRef, $Ptr) $ThunkRef += $SizeOfPtr $FuncRef += $SizeOfPtr WEnd Else Return SetError(1, 0, False) EndIf $ImportDescPtr += $SizeOfImportDir WEnd EndIf Return $ImportList EndFunc ;==>MemLib_BuildImportTable Func MemLib_CopySections($CodeBase, $PEHeader, $DllDataPtr) Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader) Local $SizeOfFileHeader = DllStructGetPtr($IMAGE_NT_HEADER, 'Magic') - $PEHeader Local $SizeOfOptionalHeader = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfOptionalHeader') Local $NumberOfSections = DllStructGetData($IMAGE_NT_HEADER, 'NumberOfSections') Local $SectionAlignment = DllStructGetData($IMAGE_NT_HEADER, 'SectionAlignment') Local $SectionPtr = $PEHeader + $SizeOfFileHeader + $SizeOfOptionalHeader For $i = 1 To $NumberOfSections Local $Section = DllStructCreate($tagIMAGE_SECTION_HEADER, $SectionPtr) Local $VirtualAddress = DllStructGetData($Section, 'VirtualAddress') Local $SizeOfRawData = DllStructGetData($Section, 'SizeOfRawData') Local $PointerToRawData = DllStructGetData($Section, 'PointerToRawData') If $SizeOfRawData = 0 Then Local $Dest = _MemVirtualAlloc($CodeBase + $VirtualAddress, $SectionAlignment, $MEM_COMMIT, $PAGE_READWRITE) API_ZeroMemory($Dest, $SectionAlignment) Else Local $Dest = _MemVirtualAlloc($CodeBase + $VirtualAddress, $SizeOfRawData, $MEM_COMMIT, $PAGE_READWRITE) _MemMoveMemory($DllDataPtr + $PointerToRawData, $Dest, $SizeOfRawData) EndIf DllStructSetData($Section, 'VirtualSize', $Dest - $CodeBase) $SectionPtr += DllStructGetSize($Section) Next EndFunc ;==>MemLib_CopySections Func MemLib_FinalizeSections($CodeBase, $PEHeader) Local Const $IMAGE_SCN_MEM_EXECUTE = 0x20000000 Local Const $IMAGE_SCN_MEM_READ = 0x40000000 Local Const $IMAGE_SCN_MEM_WRITE = 0x80000000 Local Const $IMAGE_SCN_MEM_NOT_CACHED = 0x4000000 Local Const $IMAGE_SCN_CNT_INITIALIZED_DATA = 64 Local Const $IMAGE_SCN_CNT_UNINITIALIZED_DATA = 128 Local Const $PAGE_WRITECOPY = 0x0008 Local Const $PAGE_EXECUTE_WRITECOPY = 0x0080 Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader) Local $SizeOfFileHeader = DllStructGetPtr($IMAGE_NT_HEADER, 'Magic') - $PEHeader Local $SizeOfOptionalHeader = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfOptionalHeader') Local $NumberOfSections = DllStructGetData($IMAGE_NT_HEADER, 'NumberOfSections') Local $SectionAlignment = DllStructGetData($IMAGE_NT_HEADER, 'SectionAlignment') Local $SectionPtr = $PEHeader + $SizeOfFileHeader + $SizeOfOptionalHeader For $i = 1 To $NumberOfSections Local $Section = DllStructCreate($tagIMAGE_SECTION_HEADER, $SectionPtr) Local $Characteristics = DllStructGetData($Section, 'Characteristics') Local $SizeOfRawData = DllStructGetData($Section, 'SizeOfRawData') Local $Executable = (BitAND($Characteristics, $IMAGE_SCN_MEM_EXECUTE) <> 0) Local $Readable = (BitAND($Characteristics, $IMAGE_SCN_MEM_READ) <> 0) Local $Writeable = (BitAND($Characteristics, $IMAGE_SCN_MEM_WRITE) <> 0) Local $ProtectList[8] = [$PAGE_NOACCESS, $PAGE_EXECUTE, $PAGE_READONLY, $PAGE_EXECUTE_READ, $PAGE_WRITECOPY, $PAGE_EXECUTE_WRITECOPY, $PAGE_READWRITE, $PAGE_EXECUTE_READWRITE] Local $Protect = $ProtectList[$Executable + $Readable * 2 + $Writeable * 4] If BitAND($Characteristics, $IMAGE_SCN_MEM_NOT_CACHED) Then $Protect = BitOR($Protect, $PAGE_NOCACHE) Local $Size = $SizeOfRawData If $Size = 0 Then If BitAND($Characteristics, $IMAGE_SCN_CNT_INITIALIZED_DATA) Then $Size = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfInitializedData') ElseIf BitAND($Characteristics, $IMAGE_SCN_CNT_UNINITIALIZED_DATA) Then $Size = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfUninitializedData') EndIf EndIf If $Size > 0 Then Local $PhysicalAddress = $CodeBase + DllStructGetData($Section, 'VirtualSize') API_VirtualProtect($PhysicalAddress, $Size, $Protect) EndIf $SectionPtr += DllStructGetSize($Section) Next EndFunc ;==>MemLib_FinalizeSections Func MemLib_FreeLibrary($ModulePtr) If Not MemLib_Vaild($ModulePtr) Then Return 0 Local $Module = DllStructCreate($tagModule, $ModulePtr) Local $CodeBase = DllStructGetData($Module, 'CodeBase') Local $DllEntry = DllStructGetData($Module, 'DllEntry') Local $Initialized = DllStructGetData($Module, 'Initialized') Local $ImportListPtr = DllStructGetData($Module, 'ImportList') Local $ExportListPtr = DllStructGetData($Module, 'ExportList') If $Initialized And $DllEntry Then Local $Success = MemoryFuncCall('bool', $DllEntry, 'ptr', $CodeBase, 'dword', 0, 'ptr', 0) DllStructSetData($Module, 'Initialized', 0) EndIf If $ExportListPtr Then _MemGlobalFree($ExportListPtr) If $ImportListPtr Then Local $ImportList = StringSplit(Peek('str', $ImportListPtr), ',') For $i = 1 To $ImportList[0] If $ImportList[$i] Then API_FreeLibrary($ImportList[$i]) Next _MemGlobalFree($ImportListPtr) EndIf If $CodeBase Then _MemVirtualFree($CodeBase, 0, $MEM_RELEASE) DllStructSetData($Module, 'CodeBase', 0) DllStructSetData($Module, 'ExportList', 0) _MemGlobalFree($ModulePtr) Return 1 EndFunc ;==>MemLib_FreeLibrary Func MemLib_GetExportList($CodeBase, $PEHeader) Local Const $IMAGE_DIRECTORY_ENTRY_EXPORT = 0 Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader) Local $SizeOfDataDirectory = DllStructGetSize(DllStructCreate($tagIMAGE_DATA_DIRECTORY)) Local $ExportDirectoryPtr = $PEHeader + DllStructGetSize($IMAGE_NT_HEADER) + $IMAGE_DIRECTORY_ENTRY_EXPORT * $SizeOfDataDirectory Local $ExportDirectory = DllStructCreate($tagIMAGE_DATA_DIRECTORY, $ExportDirectoryPtr) Local $ExportSize = DllStructGetData($ExportDirectory, 'Size') Local $ExportVirtualAddress = DllStructGetData($ExportDirectory, 'VirtualAddress') Local $ExportList = '' If $ExportSize > 0 Then Local $IMAGE_EXPORT_DIRECTORY = DllStructCreate($tagIMAGE_EXPORT_DIRECTORY, $CodeBase + $ExportVirtualAddress) Local $NumberOfNames = DllStructGetData($IMAGE_EXPORT_DIRECTORY, 'NumberOfNames') Local $NumberOfFunctions = DllStructGetData($IMAGE_EXPORT_DIRECTORY, 'NumberOfFunctions') Local $AddressOfFunctions = DllStructGetData($IMAGE_EXPORT_DIRECTORY, 'AddressOfFunctions') If $NumberOfNames = 0 Or $NumberOfFunctions = 0 Then Return '' Local $NameRef = $CodeBase + DllStructGetData($IMAGE_EXPORT_DIRECTORY, 'AddressOfNames') Local $Ordinal = $CodeBase + DllStructGetData($IMAGE_EXPORT_DIRECTORY, 'AddressOfNameOrdinals') For $i = 1 To $NumberOfNames Local $Ref = Peek('dword', $NameRef) Local $Idx = Peek('word', $Ordinal) Local $FuncName = Peek('str', $CodeBase + $Ref) If $Idx <= $NumberOfFunctions Then Local $Addr = $CodeBase + Peek('dword', $CodeBase + $AddressOfFunctions + $Idx * 4) $ExportList &= $FuncName & Chr(1) & $Addr & Chr(1) EndIf $NameRef += 4 $Ordinal += 2 Next EndIf Return $ExportList EndFunc ;==>MemLib_GetExportList Func MemLib_GetProcAddress($ModulePtr, $FuncName) Local $ExportPtr = Peek('ptr', $ModulePtr) If Not $ExportPtr Then Return 0 Local $ExportList = Peek('str', $ExportPtr) Local $Match = StringRegExp($ExportList, '(?i)' & $FuncName & '\001([^\001]*)\001', 3) If Not @error Then Return Ptr($Match[0]) Return 0 EndFunc ;==>MemLib_GetProcAddress Func MemLib_LoadLibrary($DllBinary) $DllBinary = Binary($DllBinary) Local $DllData = DllStructCreate('byte[' & BinaryLen($DllBinary) & ']') Local $DllDataPtr = DllStructGetPtr($DllData) DllStructSetData($DllData, 1, $DllBinary) Local $IMAGE_DOS_HEADER = DllStructCreate($tagIMAGE_DOS_HEADER, $DllDataPtr) If DllStructGetData($IMAGE_DOS_HEADER, 'e_magic') <> 0x5A4D Then Return SetError(1, 0, 0) EndIf Local $PEHeader = $DllDataPtr + DllStructGetData($IMAGE_DOS_HEADER, 'e_lfanew') Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader) If DllStructGetData($IMAGE_NT_HEADER, 'Signature') <> 0x4550 Then Return SetError(1, 0, 0) EndIf Switch DllStructGetData($IMAGE_NT_HEADER, 'Magic') Case 0x10B If @AutoItX64 Then Return SetError(2, 0, 0) Case 0x20B If Not @AutoItX64 Then Return SetError(2, 0, 0) EndSwitch Local $ImageBase = DllStructGetData($IMAGE_NT_HEADER, 'ImageBase') Local $SizeOfImage = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfImage') Local $SizeOfHeaders = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfHeaders') Local $AddressOfEntryPoint = DllStructGetData($IMAGE_NT_HEADER, 'AddressOfEntryPoint') Local $ModulePtr = _MemGlobalAlloc(DllStructGetSize(DllStructCreate($tagModule)), $GPTR) If $ModulePtr = 0 Then Return SetError(3, 0, 0) Local $Module = DllStructCreate($tagModule, $ModulePtr) Local $CodeBase = _MemVirtualAlloc($ImageBase, $SizeOfImage, $MEM_RESERVE, $PAGE_READWRITE) If $CodeBase = 0 Then $CodeBase = _MemVirtualAlloc(0, $SizeOfImage, $MEM_RESERVE, $PAGE_READWRITE) If $CodeBase = 0 Then Return SetError(3, 0, 0) DllStructSetData($Module, 'CodeBase', $CodeBase) _MemVirtualAlloc($CodeBase, $SizeOfImage, $MEM_COMMIT, $PAGE_READWRITE) Local $Base = _MemVirtualAlloc($CodeBase, $SizeOfHeaders, $MEM_COMMIT, $PAGE_READWRITE) _MemMoveMemory($DllDataPtr, $Base, $SizeOfHeaders) MemLib_CopySections($CodeBase, $PEHeader, $DllDataPtr) Local $LocationDelta = $CodeBase - $ImageBase If $LocationDelta <> 0 Then MemLib_PerformBaseRelocation($CodeBase, $PEHeader, $LocationDelta) Local $ImportList = MemLib_BuildImportTable($CodeBase, $PEHeader) If @error Then MemLib_FreeLibrary($ModulePtr) Return SetError(2, 0, 0) EndIf Local $ExportList = MemLib_GetExportList($CodeBase, $PEHeader) Local $ImportListPtr = _MemGlobalAlloc(StringLen($ImportList) + 2, $GPTR) Local $ExportListPtr = _MemGlobalAlloc(StringLen($ExportList) + 2, $GPTR) DllStructSetData($Module, 'ImportList', $ImportListPtr) DllStructSetData($Module, 'ExportList', $ExportListPtr) If $ImportListPtr = 0 Or $ExportListPtr = 0 Then MemLib_FreeLibrary($ModulePtr) Return SetError(3, 0, 0) EndIf Poke('str', $ImportListPtr, $ImportList) Poke('str', $ExportListPtr, $ExportList) MemLib_FinalizeSections($CodeBase, $PEHeader) Local $DllEntry = $CodeBase + $AddressOfEntryPoint DllStructSetData($Module, 'DllEntry', $DllEntry) DllStructSetData($Module, 'Initialized', 0) If $AddressOfEntryPoint Then Local $Success = MemoryFuncCall('bool', $DllEntry, 'ptr', $CodeBase, 'dword', 1, 'ptr', 0) If Not $Success[0] Then MemLib_FreeLibrary($ModulePtr) Return SetError(4, 0, 0) EndIf DllStructSetData($Module, 'Initialized', 1) EndIf Return $ModulePtr EndFunc ;==>MemLib_LoadLibrary Func MemLib_PerformBaseRelocation($CodeBase, $PEHeader, $LocationDelta) Local Const $IMAGE_DIRECTORY_ENTRY_BASERELOC = 5 Local Const $IMAGE_REL_BASED_HIGHLOW = 3 Local Const $IMAGE_REL_BASED_DIR64 = 10 Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader) Local $SizeOfDataDirectory = DllStructGetSize(DllStructCreate($tagIMAGE_DATA_DIRECTORY)) Local $RelocDirectoryPtr = $PEHeader + DllStructGetSize($IMAGE_NT_HEADER) + $IMAGE_DIRECTORY_ENTRY_BASERELOC * $SizeOfDataDirectory Local $RelocDirectory = DllStructCreate($tagIMAGE_DATA_DIRECTORY, $RelocDirectoryPtr) Local $RelocSize = DllStructGetData($RelocDirectory, 'Size') Local $RelocVirtualAddress = DllStructGetData($RelocDirectory, 'VirtualAddress') If $RelocSize > 0 Then Local $Relocation = $CodeBase + $RelocVirtualAddress While 1 Local $IMAGE_BASE_RELOCATION = DllStructCreate($tagIMAGE_BASE_RELOCATION, $Relocation) Local $VirtualAddress = DllStructGetData($IMAGE_BASE_RELOCATION, 'VirtualAddress') Local $SizeOfBlock = DllStructGetData($IMAGE_BASE_RELOCATION, 'SizeOfBlock') If $VirtualAddress = 0 Then ExitLoop Local $Dest = $CodeBase + $VirtualAddress Local $Entries = ($SizeOfBlock - 8) / 2 Local $RelInfo = DllStructCreate('word[' & $Entries & ']', $Relocation + 8) For $i = 1 To $Entries Local $Info = DllStructGetData($RelInfo, 1, $i) Local $Type = BitShift($Info, 12) If $Type = $IMAGE_REL_BASED_HIGHLOW Or $Type = $IMAGE_REL_BASED_DIR64 Then Local $Addr = DllStructCreate('ptr', $Dest + BitAND($Info, 0xFFF)) DllStructSetData($Addr, 1, DllStructGetData($Addr, 1) + $LocationDelta) EndIf Next $Relocation += $SizeOfBlock WEnd EndIf EndFunc ;==>MemLib_PerformBaseRelocation Func MemLib_Vaild($ModulePtr) Local $ModuleSize = DllStructGetSize(DllStructCreate($tagModule)) If API_IsBadReadPtr($ModulePtr, $ModuleSize) Then Return False Local $Module = DllStructCreate($tagModule, $ModulePtr) Local $CodeBase = DllStructGetData($Module, 'CodeBase') If Not $CodeBase Then Return False Return True EndFunc ;==>MemLib_Vaild Func MemoryDllCall($Module, $RetType, $FuncName, $Type1 = '', $Param1 = 0, $Type2 = '', $Param2 = 0, $Type3 = '', $Param3 = 0, $Type4 = '', $Param4 = 0, $Type5 = '', $Param5 = 0, $Type6 = '', $Param6 = 0, $Type7 = '', $Param7 = 0, $Type8 = '', $Param8 = 0, $Type9 = '', $Param9 = 0, $Type10 = '', $Param10 = 0, $Type11 = '', $Param11 = 0, $Type12 = '', $Param12 = 0, $Type13 = '', $Param13 = 0, $Type14 = '', $Param14 = 0, $Type15 = '', $Param15 = 0, $Type16 = '', $Param16 = 0, $Type17 = '', $Param17 = 0, $Type18 = '', $Param18 = 0, $Type19 = '', $Param19 = 0, $Type20 = '', $Param20 = 0) Local $Ret, $OpenFlag = False Local Const $MaxParams = 20 If (@NumParams < 3) Or (@NumParams > $MaxParams * 2 + 3) Or (Mod(@NumParams, 2) = 0) Then Return SetError(4, 0, 0) If Not IsPtr($Module) Then $OpenFlag = True $Module = MemoryDllOpen($Module) If @error Then Return SetError(1, 0, 0) EndIf Local $Addr = MemLib_GetProcAddress($Module, $FuncName) If Not $Addr Then Return SetError(3, 0, 0) Poke('ptr', $_MFHookPtr + 1 + @AutoItX64, $Addr) Switch @NumParams Case 3 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi) Case 5 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1) Case 7 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2) Case 9 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3) Case 11 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3, $Type4, $Param4) Case 13 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3, $Type4, $Param4, $Type5, $Param5) Case Else Local $DllCallStr = 'DllCall ( $_KERNEL32DLL, $RetType, $_MFHookApi', $n = 1 For $i = 5 To @NumParams Step 2 $DllCallStr &= ', $Type' & $n & ', $Param' & $n $n += 1 Next $DllCallStr &= ' )' $Ret = Execute($DllCallStr) EndSwitch Local $Err = @error If $OpenFlag Then MemoryDllClose($Module) Return SetError($Err, 0, $Ret) EndFunc ;==>MemoryDllCall Func MemoryDllClose($Module) MemLib_FreeLibrary($Module) EndFunc ;==>MemoryDllClose Func MemoryDllOpen($DllBinary) If Not IsDllStruct($_MFHookBak) Then MemoryFuncInit() Local $Module = MemLib_LoadLibrary($DllBinary) If @error Then Return SetError(@error, 0, -1) Return $Module EndFunc ;==>MemoryDllOpen Func MemoryFuncCall($RetType, $Address, $Type1 = '', $Param1 = 0, $Type2 = '', $Param2 = 0, $Type3 = '', $Param3 = 0, $Type4 = '', $Param4 = 0, $Type5 = '', $Param5 = 0, $Type6 = '', $Param6 = 0, $Type7 = '', $Param7 = 0, $Type8 = '', $Param8 = 0, $Type9 = '', $Param9 = 0, $Type10 = '', $Param10 = 0, $Type11 = '', $Param11 = 0, $Type12 = '', $Param12 = 0, $Type13 = '', $Param13 = 0, $Type14 = '', $Param14 = 0, $Type15 = '', $Param15 = 0, $Type16 = '', $Param16 = 0, $Type17 = '', $Param17 = 0, $Type18 = '', $Param18 = 0, $Type19 = '', $Param19 = 0, $Type20 = '', $Param20 = 0) If Not IsDllStruct($_MFHookBak) Then MemoryFuncInit() Poke('ptr', $_MFHookPtr + 1 + @AutoItX64, $Address) Local $Ret Switch @NumParams Case 2 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi) Case 4 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1) Case 6 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2) Case 8 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3) Case 10 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3, $Type4, $Param4) Case 12 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3, $Type4, $Param4, $Type5, $Param5) Case Else Local $DllCallStr = 'DllCall($_KERNEL32DLL, $RetType, $_MFHookApi', $n = 1 For $i = 4 To @NumParams Step 2 $DllCallStr &= ', $Type' & $n & ', $Param' & $n $n += 1 Next $DllCallStr &= ')' $Ret = Execute($DllCallStr) EndSwitch Return SetError(@error, 0, $Ret) EndFunc ;==>MemoryFuncCall Func MemoryFuncInit() Local $KernelHandle = API_LoadLibrary('kernel32.dll') API_FreeLibrary($KernelHandle) Local $HookPtr = API_GetProcAddress($KernelHandle, $_MFHookApi) Local $HookSize = 7 + @AutoItX64 * 5 $_MFHookPtr = $HookPtr $_MFHookBak = DllStructCreate('byte[' & $HookSize & ']') If Not API_VirtualProtect($_MFHookPtr, $HookSize, $PAGE_EXECUTE_READWRITE) Then Return False DllStructSetData($_MFHookBak, 1, Peek('byte[' & $HookSize & ']', $_MFHookPtr)) If @AutoItX64 Then Poke('word', $_MFHookPtr, 0xB848) Poke('word', $_MFHookPtr + 10, 0xE0FF) Else Poke('byte', $_MFHookPtr, 0xB8) Poke('word', $_MFHookPtr + 5, 0xE0FF) EndIf Return True EndFunc ;==>MemoryFuncInit Func Peek($Type, $Ptr) If $Type = 'str' Then $Type = 'char[' & API_lstrlenA($Ptr) & ']' ElseIf $Type = 'wstr' Then $Type = 'wchar[' & API_lstrlenW($Ptr) & ']' EndIf Return DllStructGetData(DllStructCreate($Type, $Ptr), 1) EndFunc ;==>Peek Func Poke($Type, $Ptr, $Value) If $Type = 'str' Then $Type = 'char[' & (StringLen($Value) + 1) & ']' ElseIf $Type = 'wstr' Then $Type = 'wchar[' & (StringLen($Value) + 1) & ']' EndIf DllStructSetData(DllStructCreate($Type, $Ptr), 1, $Value) EndFunc ;==>Poke #EndRegion
    4 points
  3. Here a fast hack: ;Coded by UEZ build 2021-04-11 #include <GDIPlus.au3> #include <GuiConstantsEx.au3> #include <WindowsConstants.au3> _GDIPlus_Startup() Global $hGUI, $iFPS = 0, $iShowFPS = 0, $bExit AutoItSetOption("GUIOnEventMode", 1) Global $sText = _ "This is an About Window ²" & _ ;² is the marker for the column width which all lines below must follow "coded with Autoit using " & _ "GDI+ library to produce " & _ "this flying chars effect. " & _ "------------------------ " & _ "Greetings fly out to: " & _ "All Autoit users around " & _ "the world! " & _ " " & _ " " & _ "Coded by UEZ 2021 ;-) " & _ " " & _ " " & _ " " & _ "Press ESC to exit. " GDIPlus_About($sText) AutoItSetOption("GUIOnEventMode", 0) _GDIPlus_Shutdown() Func GDIPlus_About($sText, $iFontsize = 16, $dx = 35, $dy = 150, $iSpeed = 33, $sFont = "Courier New") Local Const $iW = 540, $iH = 500, $iWh = $iW / 2, $iHh = $iH / 2, $sTitle = "GDI+ About Window" Local Const $fPi = ACos(-1), $fRad = $fPi / 180, $fDeg = 180 / $fPi $bExit = False $hGUI = GUICreate($sTitle, $iW, $iH) ;, 0, 0, $WS_POPUP) GUISetState(@SW_SHOW, $hGUI) ;~ GUISetCursor(16, 1) ;create canvas elements Local Const $hDC = _WinAPI_GetDC($hGUI) Local Const $hHBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iW, $iH) Local Const $hDC_backbuffer = _WinAPI_CreateCompatibleDC($hDC) Local Const $DC_obj = _WinAPI_SelectObject($hDC_backbuffer, $hHBitmap) Local Const $hCanvas = _GDIPlus_GraphicsCreateFromHDC($hDC_backbuffer) _GDIPlus_GraphicsSetSmoothingMode($hCanvas, $GDIP_SMOOTHINGMODE_HIGHQUALITY) _GDIPlus_GraphicsSetPixelOffsetMode($hCanvas, $GDIP_PIXELOFFSETMODE_HIGHQUALITY) Local Const $hBrush_Clr = _GDIPlus_HatchBrushCreate(18, 0xF0B0B0E0, 0xF0F0F0FF), _ $hBrush_FPS = _GDIPlus_BrushCreateSolid(0xF0808080), _ $hFormat_FPS = _GDIPlus_StringFormatCreate(), _ $hFamily_FPS = _GDIPlus_FontFamilyCreate("Arial"), _ $hFont_FPS = _GDIPlus_FontCreate($hFamily_FPS, 8), _ $tLayout_FPS = _GDIPlus_RectFCreate(0, 0, 60, 16) $iFPS = 0 GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit_About") Local $iLen = StringLen($sText), $iColums = StringInStr($sText, "²"), $i, $u, $s, $r, $iChar_Space, $x, $y, $t = 0,$f, $b = 0, $a = 255, $iCharCol = 0x101030 $sText = StringReplace($sText, "²", " ") Local $aChars = StringSplit($sText, "", 2) Local $hFormat_char = _GDIPlus_StringFormatCreate(), $hFamily_char = _GDIPlus_FontFamilyCreate($sFont), $hFont_char = _GDIPlus_FontCreate($hFamily_char, $iFontsize, 1), _ $tLayout_char = _GDIPlus_RectFCreate(), $hBrush_char = _GDIPlus_BrushCreateSolid(0xFF000000 + $iCharCol), _ $hImage_logo = _GDIPlus_BitmapCreateFromMemory(_Logo()) AdlibRegister("CalcFPS", 1000) Do DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush_Clr, "float", 0, "float", 112, "float", $iW, "float", $iH - 112) ;erase canvas background _GDIPlus_GraphicsDrawImageRect($hCanvas, $hImage_logo, 0, 0, 540, 112) $rr = 0 For $i = 0 To UBound($aChars) - 1 If $aChars[$i] <> " " Then $f = $t - $i / $iSpeed $s = $f > 2 ? 2 : $f $s = $s > 0 ? $s : 0 $r = (2 - $s) * $iColums * $iColums $iChar_Space = $s / 3 * $iColums $rr +=$r $tLayout_char.x = $dx + $r / 2 * Sin($t + $i) + Mod($i, $iColums) * $iChar_Space $tLayout_char.y = $dy + $r / 3 * Cos($t + $i) + Int($i / $iColums) * $iChar_Space ;* 1.2 _GDIPlus_GraphicsDrawStringEx($hCanvas, $aChars[$i], $hFont_char, $tLayout_char, $hFormat_char, $hBrush_char) EndIf Next $t += 0.04 _GDIPlus_GraphicsDrawStringEx($hCanvas, "FPS: " & $iShowFPS, $hFont_FPS, $tLayout_FPS, $hFormat_FPS, $hBrush_FPS) ;draw background message text _WinAPI_BitBlt($hDC, 0, 0, $iW, $iH, $hDC_backbuffer, 0, 0, $SRCCOPY) ;blit drawn bitmap to GUI $iFPS += 1 If $bExit Then ExitLoop If $r = 0 Then $b = 1 If $b Then $a -= 2 _GDIPlus_BrushSetSolidColor($hBrush_char, BitShift($a, -24) + $iCharCol) If $a <= 0 Then $b = 0 $a = 255 _GDIPlus_BrushSetSolidColor($hBrush_char, BitShift($a, -24) + $iCharCol) $t = 0 EndIf EndIf Until Not Sleep(10) AdlibUnRegister("CalcFPS") ;release resources _GDIPlus_FontDispose($hFont_char) _GDIPlus_FontFamilyDispose($hFamily_char) _GDIPlus_StringFormatDispose($hFormat_char) _GDIPlus_BrushDispose($hBrush_char) _GDIPlus_ImageDispose($hImage_logo) _GDIPlus_FontDispose($hFont_FPS) _GDIPlus_FontFamilyDispose($hFamily_FPS) _GDIPlus_StringFormatDispose($hFormat_FPS) _GDIPlus_BrushDispose($hBrush_Clr) _GDIPlus_BrushDispose($hBrush_FPS) _GDIPlus_GraphicsDispose($hCanvas) _WinAPI_SelectObject($hDC_backbuffer, $DC_obj) _WinAPI_DeleteDC($hDC_backbuffer) _WinAPI_DeleteObject($hHBitmap) _WinAPI_ReleaseDC($hGUI, $hDC) GUIDelete($hGUI) EndFunc ;==>GDIPlus_About Func _Exit_About() $bExit = True EndFunc ;==>_Exit_About Func CalcFPS() ;display FPS $iShowFPS = $iFPS $iFPS = 0 EndFunc ;==>CalcFPS ;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2020-06-05 Func _Logo($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Logo $Logo &= 'iVBORw0KGgoAAAANSUhEUgAAAhwAAABwCAIAAADaNT4jAACVR0lEQVR4XuzVPwqCcBjH4Y7aFDRFW+BQU3ODQ0SrkycQIxAPUeIh/Dcq/uoM0hI8z/x93/WzCj8CAH8TFQBEBQBRAQBRAUBUABAVABAVAEQFAFEBQFQAQFQAEBUARAUARAUAUQFAVAAQFQAQFQBEBQBRAQBRgXkMYVpwB4gKzH3XVO9XlhfxLd1H8Xp72uzOh+Plek8ez7Kuq6Fvv7MFr4EP+2b2W0eW1/Gz1XrXxfa1b2zHSxzbSZylt4H00CiA2KZpGiSEQEItgQQSmn+Al3nmBcQD4hWEYCTEMmLUTT/RTZOehsl0nMWO7Xi53nKv1+TuS92qcw6/qkpfNUmmY9PpRD2cj6/tU6eqzr0PdfS53/qdYugnG4VC8kqlXCzu5jfuLa8VVjb2t/eaD2rIERFJbEINTHJIIrHhiut7BG2ZpJGJoZNDfWMnohNjudGRwdxAfzKZQJihp6FQKLCfVn6iUCiJuA9KJbDI6vr2Sr64tnV/e7deqiOHW4hGqGYzTSOEYAyHSvjtzgWEwxmBuBDcc7nbRLxpkFYqIgezkbHhzMTYwKmxoRO5gXQ6RaiOniNHnKcYY/RlUCiUVBQKt9O+f//+veL+6trGSn4nf69U3G+Wm6QjbMzAIhZjoUUChRz9gsc4cAwWgWM8tyW9ho5byag80WuOB44ZG8kNDeYymQzTzK9OJBjj45541NMUCiUVhaLZqO3t729tF1fz91Y39jcKpf2SV+9YLmeY2WARShklBB3NIsdyDLyEEJ7ncbcNjmGoGbNEf1obGUycHh2YODV8cniwpydjGNb/WSRAaATgs07UarcbjUa73W614NWCDxAeTAhhjJmmaVlWJGJblm2aOv7fo8E43TG7lkIKhZKKQpHPr/35X/zV8rZTaUc6KBrczrIo0yllBCPUvaP1PMChZoSQnHue6wivRWTbJM2UVTs7nvj2' $Logo &= 'H//h0NDQsXTS9QQ0hJSNev3g8GB///7h4f1SqQRCcRyH+wiMUVcVlFJoM8YMw7BtO56IQnLq68v29vREbDv0hxDi+UhFoWDo64NCMTQ0/M7v/e6nN5duLxXW7jVKzTb3CCEM0cAo6LkZBZAICN9VCiQ5w+2U3R4fSp6fOjNzZjSVSh03oASVHlyv17cK9/L5fHGn2Gq2PJdLIRljsEvXdWiEVoCDu/kjbDgB9x8crK+vE0qikehAth/ElsvlYrFYqJYn6kShUElFoRCHBwfLK+uzt5dvLWyvFZrVtiVojOkRvw7/lUWWMKAIgSCbeE4N81rSdk8NRS+cGb40Mz4xPtzT24cQOV5Awf4PNA4OD5cWF0Enh+USbFJKDd2AXVgiQin0YJ/utIVNEmxDGwOccwJQBIgA7nrQBr0NDw+Pjo7192c/ryL0OAqFkopCIYW3u7e7dDc/e3vl1mJxc7dd70QQizPdYozhLy2YUCQwhgcmcRrYq8ZMZ2TAPD+Zfen8xMy56Q8++PepqemZ8xePW4GHfyTIGVAimpu7s7m5CYWTIJFoYWoRQoahhHOOAeKf2C2o4AC/LXAoE9gKjwnPokSDtuu6cLplWaCWycnJbLaX+COLUDA/1i4KhZKKQiG8TqFYuLO4Nre0NXd3d3PHqXtRRG1NtyhlGMtQMMcRCfc6TQkiMToj/drMZHZmeuTs9EQuN9BdVfzOH3z7N9765bd//c1jSSX0Qalcnr8zDzesatWGpmmMMc551xndg4UI6yiIUPLI7S8JCNxtYyLxZ1DyUE7BCNJ1O5qmj4+PnT0zlUwmu/fc0BejUCipKBTf//678bgdj0V39so372zcvru7ve+2RYxoMU03P3tORTxRJJxzt+MvII6ZfDDDIZFcPDcyPNjHudB16/Tk1COOeOeP/uTNX/qZ3/rNbx2rfAKBY2VtdW5+rlwqg04IZtAPnbDrkdI69Oi6Dv0SccCXSADsogGM6tAIB/d4BwYJ' $Logo &= 'D0OShPohwX/GGOyC4BKL2tNTU5NTU9DzPMKKQhXqhRDoOUIIaXecWqMWtaOM0nKt8njDMkxo+x/s/yWKY32hFtz9+3+5uryjj56InB2LvTxz8q1ffEUIvra5Nzu3Mb+yuVfRHG4QPcqYjoORBecQSYRbtzRnKMVnTvddmjk/MjwgubuxvXftxtrf/NO11c3SG5fif/an33n0s2Hc6XTQ0QiNAgFl9vr17cI92LRtGzoF9xMG2AUBXVswBvGiXm/s7BRhDVi58gDK+K1WC8QQSoUFmIadSCTi8Xg2m01nkvEYiFPvAI4HIACTcMGYYRggMOi8cfPm/sHBxYsXoeLy4r2iUKu/MCYISbhm7y4vLt1dhM1YLCaECDN7iODc9dxuivcA7iEUxHYhYFY8jN4SurDreW3HYZRRSjquqzFNStFqNSGtu51OpVoaGxn95uWf7e0b0HX9i9WiUBDK+vt712rJnQbbut5677/mY8aNkQH28rncr1y58Pu/01Nvdu4srd9a2Frf3q82BUIymaSnTvZcOndm8tSwxtDmtq+f7/7rp9t7nYZrET2u6TnPTCVTT5oNwcMrR3yMkRBSKBZnb8yWy2XTNKEnTB6MYc6FFJgxTdcIl2L/8CC/vl7c3Do8PHQcx/eBGQcDpdIpTWOEMUKJ53qwq9VswrOf9ZVVIbilaz2Z9NjoyMSpsXRvFhPadFyYUyBaLlyEKZxF4B0Mvbi7U/249tLFS7BC7IVX7xVKKkhKxD13fX31o6sfSikz6QwXnATr68N19AJ2ex4cRqhvjmarBRJilD6UjZACXuGSzGA02IRkLgSnlEp/EC4Fh9EqlUq1Un7t1ddGR8dTmV4d6egpKBQ4EdWl16Z6lJoWsmxPoqV9b+798t+++2FPjJ8ZS3zj0vg7v/3zPekEIZQGhYpCYffTWyt/+dfv391sVFoGYnHNyFGbRR5WYpCLZTSWQo9DMIxwxGXIyyvLt2/fFkJEo1EZAO2wFK9r' $Logo &= 'umHYIInV1aX5uTuFnV2OcLJ3cPLi5RODJyCFxJM9lmWFKgJgOC4497jjdOqNWq1e3dvd2dte3ykWPv7v65/88PrJoYHz52fGx8fjVqTZbkN0CeWHAyKRCPRcu3at0WicPn36RS4MUyipdPOKbUcy6R6QRBjhCfYzhxNcu4wxzfCPAhCAqa4Zhq5B/qAuzB6Tc5CIG+4N10V2ALcDw4Y9AAiIu2AgZFoRQghGR0KhyKQTUpaDpq8EjJDGiKYlEEpVhfjPpfZ/3F4x6a2+hBzo0XWNFA/a2wfCkSCSFNOyVqK7ZozDHx+MJXdty0SPQSkzrejTJguGrL6wuLC8skIp1TSNc46D2on0Qb5jBFpYWLh+fXbvYD+eyFx45Q1YU9Z3YjiVTsPxhBKEP/fIvQRg0z/dipJEpk8Ib3xi2nVa5dKDw73d1dXl1aU7//y99070937z9Z86NTUNFqlWq11zCCEg/XDXm5+fB5OdO3cu/D734tWiUA8/UkoNTUOCNxATCMeR20JGi5oESdwo41YdMWYh19V1z4hiZjMpCWOoekhaFcI0jFBoFkFwh5kESwwdhEjodQkcCS9d1w3dCKqRLx4p5VM+iUR+DHtxKNIJG/G9h5m6i9/mBCPTMJFpwdauIwqbrpSSMY1Gw1AiEBJIPnFVi2dQFz2GYactK/LFRuGcz83N5dfzoIfwlhclVAaDQo9hGMVC4erVH+TzG9n+3JVffXticqYvO2yZMYodKXyxCZcH84F8Vh9BhMLZRIBMOApyv29BYUSTvWYykx0em7z46uX88uL8jR/94/feGx25eeXKlcGhoUaz6XY6cL4f0AhmhiGlhOVn8PfMmTMw0Z55iUWhpNItJ9Kn5WAZ/EpGKdONtkANLSmZqYsWJ5pLfKkQ+wFuVAQiRHKPWk0WlVQjGDkwvpGSdqmNqZQIY3+oNtI8pHEkuPD7CEJmrWjWqw4EHE0TQkA9H+TyTBZBht/yjlVcfWSmOU7bT1au' $Logo &= 'C/vDRMaoRhk1DNOfrpgcfeGDlIhS363PwncA+voQGpr40fSZ0pNJIOmiH0M3vjCCmK6hgDCUfAEEyd6+PvQYTrtVr5WeWEfptpeWlra3t0Fm4fVACfEEF5jatoWE98NPfvDxJ7OYmZd/7tfOXngp2dsPR2K/bFllgUUokYQiii1oE+KPHJrFfxchDCqFpFwyKiTyXCQJF4gwM53Jxl9JDY9PLy0sLP7ow+/+3T9cfv2nX3/9MrKsRqPujyM5JhRgjBUKBWiAV76S51cUSirdJ3XRESBSdCSqIL1t9nh2b4s70CnD9BEZkJ7HHZd33A6XLsHdQWm6p53gNdfjQhKMP//GDY9zj1tCppsVzDtIyo7r1puNaqMWjcYIDPAMkMepIeFHplmzWd/a2iiVSrVqRUgviGtaxI7Ztt2T7YPaT8SwukI6Yo3qy81iCT+hn75mYHyEC00e1zqnJ0Zt9pGQmKBngxDYotVz0yOP9K+srNxZfWCay2+/+QuabjxyzYSN1dVViAKQSLqyCZ9qTFl6pVZ/99/eX1nLD0+99tKr38gNjZh2FCHudhxKsaFpQWkfhy8WLg2mMhAKCUcT0CeEJyTnEhOs6/4pnAiMPddDRMhEInXh0sv9udz87LUPPrpa2N741ltvJ1PpWq3M/VjGw9QCHw+evoS/U1NTz/6LiUJJ5X/Yew8oOa7zTLQrV+fpnpwwGAwGg5gDCWaCYI4mKZESJVHJsq20Ppbzyu+tfdZrH0u29lmWbAX7SAySGMUgJokBIAiQABFzDoPJsXOu7n7f/9+aOs0ZABwAFA/fPl0Mm9XVFW7duvcP35/Y63H81KnjkGgm8kDA5kEcIFTbNLtjTsBtu8ZjelsWCexF1QCqVVL0sjCjlMBDihaZ20E1VIj6JSwlF9FOESMAp5ukS7EU/OQSp+QsC6vE1FRyAsAakcsWDPfZdD5HypDbMHGJeCp3/MTR44f35XNZL5s6He6ALU7aqolU5eiZSh4y' $Logo &= 'JMWZpokcrhAP/T5/wB/E/samVtzS0SSmo6CMDA8cPHwQbqAwbMbjsTRnjYX3gdB4sOg1TddUzXCb4HzIFzujpXVe19zW1nZHtXKiECqbIBDdo7Hd3cPpbN6SJM3QxJALblPCIFo0iE46QMi44NQgTF6PEfSZ0CiDbr0+4Knyuv0ew7kyjvjoS5t4KX2jsfX7u4czOYyfT1ezkEBKRCotWEXSWWBRV3Q2r5s/47wu29HReefa9kdeGfBVNcJr5CIj6sEC0vGBf/mL29ra2if99svnX88orW/vjx05enzBgvlTxRFoAMePH3dQLycBl8/rHR3oe/yXvxqO55ZdecvsBSvC4WpZ1yBQaYqLsSm+AjcZTZGw3rBTMBhxEVZUaBBdRWKg+MCyI1VDxhWY+WBnGdpYuap+5pJLPdW1tXu3v/3ww4/ee+89rTNaEokYxsaZ6kDhwFewWGbOnOn6wNvv2u9sKuPjY5vfeWtosN/FOVAx59LpVL5QbO+YHwwE/a0tmLVM+DgiC+SSuENJKhakQhZ8A6QQJntEYhGWJdsJJRSgwqCQhDxIGdj3iyWVfwLdR7AWeFMZfSqrsEioQEXKZBqFn76Vp1mvoilqNpPe+u6WF59/Mh6P1Nc3gLC+hwcoMsg6uoPTCNzQNHQSC80N8c/nVRUJHAVuoQCOOzvntrd3Yo03NDSB05wRORJcM18sxaIoQLvvyJED+w/u6+3vTyaSWPkAKHA7NFuIxrX4X4HwB5wrNzY2Hpm/YEbrrLld85qbm/2+gIiXngQsSHz68aHoL945GM/kC5JkmAYXmyIWi6EvYdCzuSIbmSb8F8A28VH2ufWglxCVoNtoDvnqgt6ZdVXNVd56vwfbTJbAnD+iaQQde8eunpEfbNh7PJoERwmoSrJYhqqKd58pFEeiKTDqv7vr0vNlKmh//OVPqepjj/36dFGrA7m8oGQtEv6y2bTbNfw3X1p17VWrz4izlYp99YFSQ30lMmaHxEOX' $Logo &= 'PXz4sCyYAK2UstgPszx0l6ee+GXJCFy67sbq5naP10dyQ8nirP2q3VE+S+KG3QphVcRR+FMWGg8akDQFs6KMGSEOdjETok6QrKMb2A+UregN1rXNXeoJHd32+kMPPXTffR+fPbsDuZAFn3MmPFgguldTU/OhgWD/f0HbfsdUQP6QJDWZSgNxNUxCcgsWEU4rG7cycRFRZVMFiZpYgySJ5Ymgc2kj9hlWJMtOc0RHIHl3ulCU+VRV7KL1UM4WrBLPLdrAEgKCLdQaaqQkZaETQFgDS8qlYc7IZgv4xCmTIJKsK+eADLm87V2WSqZRx8l+Zmj6qrx9x/bqmjq/33f9DTdfuvKySryisoElDo1FXnn5+U0bXimxuhYKhmqqa9GviVSAaJKDp2Ef80hiqflc7t1t2za/805X55ybb7x5yeIVUF/ONtp46niuYGFACLYokBEqk4FqI3k8FL+Ai6maBSbGT8nOTApulLCs6FgsX8IAuvS+UdMgitQWDqyb2/J7y2Z73YYgix9V3EsSHrUD8UwCcjYeDnMjm8srWgECN1K9Zy2wdJ9Hq/FcCIiFaVQbMr/1p1c+/My7O47kJb1aN0wRSD/NrJG5bEotRa5e7FvW1bZsybwzEr55XTOLmV3LVjZU19RMopJQZAGOYR0J6zc2ePoZXp9x6uSpJx9/tuhrXLT6Sk8g7NY0FSo+gGQXBDWFJpaAuLAhtBNXWcGrV8uKqpCgxDAYfoUUI7zIJFtjxziW7U+JroVJSxdQdLVUcJvudMZrems7V91ycO+rv3j85w/e/7mZXTOhdmONCealc9QkklrCVQzuy1PJ/aRsx7QxtQzMeTbnXGfopqaQmVQYZurpk7qK7bPda/rHOLj3pB5OvZdz1tkuPp0Dph5c2YGpZ03dWbl/GmMy3fGZ+tIvkKkIGRoyjmInp5OFMz5t0KYsskWAAmK52IRLTHWChEmQxjQnhxV0iM6SIEdlLCtr4QecSpZGhQ300Fey' $Logo &= 'FnEUPlciPqGocj7jSo65sglJVmXS4Olm1BvIZQWQ65zE2jooD64luRy/ZDpAVjVF1SfmmhMKIGmqTgX8wIsKUiaXH49G8UB9fT2nT5288fqbg8EwHpNFv5Lj3LV//563try9ceMbieh4oCrk9XjBYvEn5EC0M9NKjs7Br4V0GvjYnj07rQKqE46svfZG4SYk9JWKSVOKpNPjuaKuSioGio5gfiwr2MAYlVRNwhVZbJXtMxmWYTamyUSNABVG07lkzhocT3b3DJ/sG71+2ezVsxrxqnC7j6yLKN4jJIZkPCVh2E0tbYFlsm+6rGQKOcxln9sM+f0XcOX1b7z+la9+pbml/S//9Mt339j08vp9Ow71Jwo+RferqiEI83t0lzLNPZ7SmWI+FnZn166oufOmdb09Pd/4s7/euuXMqb0KBQv0G9N3Kvk7ffo0IhxBpitFFrdHHRwZ+PnTv1QD4QXL1+jugKySZ+OEw7xUnlxiixkI/ckqHwQ1BbKDxmoyVNZCHhZNvGJMWhXhjY5wY09Oh+zQqi17fP5YKu1SPfMWXHN071sPP/Xw5x78XHNTUzIeB7MSN8WySiQSwMEQvHJGyuhQOvG1Eiu+MLWD113pjAS98r6VOTSnQ1gvskizw9imXhxfp/IYQYHOeHGn5+dbGdqhYZUjP7WHH2xRamfwJzGSSfzmQpgKVp1hmGiAg92mCVKKeyAGxTA8kPWhN2BS23YCx/YAFB/wFnQUbDDqJTgKlgK+QkFJWxYBXAI0g9KDTrPuUoABpQJxKGB3LqMnh2UrDUirYOWFEiPcrGRFVcnuUsZyxZqqfHIx9hBINciGJYY72LLpshOJ6xaH0Qi3GUB2WJG7d+0cHBgYHxu78457Gxub8ByOJWLHjq1PPf340WNHEDjW2NRiGgbwtBKvV5iR8H96am5l595ouDHje6bpxgBWBYMjI8P79+8/3XMaj3zHbfcIj2QnDA10ARVxsdTBLA3FwDjb+h8QG4kG' $Logo &= 'Dp+qrtOc5VlRrITpZM3UNYl9gbAfRilTLyZT2b29o4f7Ro8NR7PXLr1mfhtJAHzuR6yxaS0PzpsFY/Ebqs9jFmQZ40fdNUD3c5Ip14YC4WDw/Mt5nfiDP/iDeHQsHh3/3Oe/5PP7b7h+7V998dOJjGv73m4kahmNWdmCUnLZCRoUWpo5j1GuDWlz26tXLVkyt3PG6Hj0u//x8ycee3jN6iWQ3M98o1N9shE+1h1LJWMeb8BZb9CMh4aGQKDxleFhS2RkgSnu8aefz8jeRYsvd+lBKFBu1ZAlFQvEpsk018XbkiolVjTs9piGpkpluiL0OJHZBTixhlli5QrvQXHLvC12sBSHpaQZmJXeZKZYkgMz56/Zv/f1J5584guf+7zf5wMsIepIiuwv6Hx1NUwwtZOYxNnUEbEWLh7+wnXOTWQ/tLL8lZpTJVE+21fBaM5xKbRznD61nbte59k1p3Lla7qYx5/63i8W/qqYjyWxQbYKDmxERGIinfSYpphJjnBFoE8xD/s8tis5Cv6lLAscRZYcuEgCI8lZFDQgTPdQbnA/8XvOysNS7yFpTC0VwcnI4k96jCLRMaxDQUeJJxJEESpZt/2ZK+F8bjK5tRgAoS1uE+uNGpgl1pIvEIjHE08981QwWP2J+x8Q05qfNPvOlk27du+ora2vrWuAQA0FCQyAPXwk9KfE2zjYcRSwmYQFK3rB4e1ouAI42anuk+9u3Tp/7sLm5tZKHKyMZymqhVxRyWclA29Ewz7nBTgb4uoCJwQjlc9An+k0TZaqfGbAXTs6Ejt4evjXu080Vwc660NUseMjGTozGE0hUwqGF9JCqUzKaN4qU0YREkzAfaFfsvp7Pm1gYODWW2+FCy9/IzAyHos8+eTTz//qpSVLlt579+2rbpmDZFmqpmdzlsIGCtPQfV63z2viZu9s3f7a+s3f+tdHDxzYGx0+WixkYLiGdHXGVbJz/2nDXTUYSZw6dXr+goUT7uY5qCkit0pR' $Logo &= 'GFLYKIiu/PrXbwyPpueuWlc2aouyrqlAlsFRhNov44PXAK0ZZ/1NzC1AnnI+l4mMxbOwbuazkN0gXWEuaWaViA62ZS9bia7UVMqs59Mn5C3dY6RL6WLJM3vBNcfeff5Xv/rVJz5+H3ajw2Jd4FKwSp46dQr5xAwOZKmksAcPHgTLBL/BMWTh4f3YgNCGnGYoNzlv3jznlPPy2oedaXBwEOYczqXm0GgaOiQ9w0iuXr16UmcAMKZSaV3XnLGqZE5ix3Soa6UeIMJC4Y+D/txyyy3YFlkPxAEYpSxXdxZ52JzimxN3tOUBu+sTTcSDQ6rwcsNoY5zf16SE/bjR9u3bMSZC+nESHwjej6m+YsUKZMmqvFQiEYfDIdBLC2TTFlBsMiuGVBjqzphYj5Ea+z96JPYMdB4N9HL37t0o+7Z48eIPIvhxgkTa+SHAOXRR3aFYxrLL5rJFo6wXJdWV48MIlcYNGPUCR8ngMKEA2TI1UUaC13CxIns3sXwG1Ae6DEMguI4rlc2hKHeJr8ZYsY0GMJJs0Qrkjk3yEy7iyhZ9IapE+kRBLhUZAFCJeJUdmEECSMcgnCuTTr348nNVoaprrr4Oahk83zZt3rhtx3YC7lQaVTymDYvnc0KeZBTLQvRyPB7FpaCUBIJBvz+AdY4Fj7tNyvik68beA3vf2PD6x+79BAgBBbJIorflSDqXyuahvDgonoRmn0vwYJ4z3wgGBi7qiERlx4eYPyUxbxh/193GWK745DuHuhpCYCrOpPqoRbIMx1Ij8TQ28IScU9EeAPxBBPCqasg0Srnc9C8IenfbbbchLmQq3chl01u3vP3uu1uE/UBRQQeN2Z1zV116eaCqMRpPnOzu379n22g/DCEFfslFMbIgAWdc9mOjw4dOxnS9PpPz7j1wbMHCRWJsh4eHAXxhzWOK0pwhA7pimMaOd9/eefhA69yrFHcdwFFgASoQYrxel46pzZ4pAHOJsQj9G1xWKKvkpqG6UnEQ' $Logo &= 'bfyNw4kGGjeOQcc4laTH9Ic8VY2ASUvZrCBh6H6R/ghJxQYkPhftIwVeI6W9BKS0KPnq5l6xd++m2VveueyyywVTQYcFoQEIhgdxiiKLy2IxnO7pQe6yxobGdDpDUDA3RSXvAzw1KA6YygVY17ABjrJp8zt1dXXpdLpc0fCYmXQSpBNMRfTEYULbtu/EwaDy+DoVnxEfmiY6qfAndjjhyXwpBh9EigGbxGGINO2FF1644YYbiKNMZJWOxKJoSByFF4B8a5AUcV8SVVmydXo7Yd4l9yOx9vGpcgS3AH7wysLhcBU3r9tT2fOpdiPwrbc2bwILpxuhVXh0GjoplEiFIFIvStywsX3Hrt7eXrw+UQqhAgi1kRWhkgpuoXATQ8Gzlau7FSw0nIuDoNxiEHAMco8i48PmzZv/8X/9w8VE1E9Ve11846LoHafahlRZoIyoJXSjVMAqYQKhgAgyxUxbxVRhAvVimzzwLvzhCZjIsX8SjuML4lwcKhOzUeOSz5WTXLCaOPgWTYVigW0qBJKA1ucLgoFV9jhbEHW8aS2rWLh5BTspLN+gqk2OFxD4DLgC22bMGa0zDh7c94vHH8XGgvmLsFo2vvVm30B/fV09Dsd75UfHqXR73I5Gni1JkHC9dfXYgKEGh8G32qCar6RtOFISguNwfFNDw7ETx97atHHl8tXLlq1Alj8cA6KGw8YT6Wi2UNI0sjCweifgQ8Ek4EAHjMgiYxJFTiu8QgTxVcgpiMdwwqmamDS/Fb/PrWjWviM9mw/13H/FQk0hnK1MA6JOgUfxd057vlh359+4l9K5rzaSzo2lc4x5lrMUEOgq2RVCimDaXt3TEvAqIIjTaxAev/CFL+zYseMcIimmBIQ4JCxhCSG3c8e7u3btBFFkEdUCKjrVSWzVqlVnvNax492RFOi6oujB/Uf6hciFaQA3YsdIYANfbnNoaOT1t3YEa+d4g415S3ZrOo85WCme3QISJ/E8ByfBn8IjB4XU' $Logo &= 'oolQdJv6+HB/cnQ4mUyAqeAFagqLuiyWwlLpK0qJlBWqbZBlTSR/4eR5LtrAN/blxwanxccmKfAgcrlU2udrrm7uem3j5tb2prralkwaPIlGWyC0oE0gf5CsK60CWHfsrM9uzhMNB+PaQqK/YPhLhGE6YrXDP2g/t0q1BpR9z569FBOdy00N2ORj7CZsUnZTJgyZZcnurUIHOxAFNgI+/yuvvALvzU9/+tMig/UIwMzhIZTmhDsfeFiRmyA3kA6nmlhYVSnLvAIcQzfyH+JcbCNDKBRZsBboH7XVNZTVLRCwT5zqMcS5qx1kEhCQuBXplLo6VdxB4gaIAuB2QpWh+eSMTNkeJbbQCYZCl3VgfPw68RIVNMBOOFmAt5AYMOC//vWvv/zlL6Pa24UxFZ7vAsh39vB3kPSClWPzPf0mcRPvLk8md7KOkEM96wKEehWKDuqFf9BRQCVtN+KiJcYHnwWiiHyMiMSQNEsOlhS3KtFKJwrO0V9FYigZSo3H+r3FOcAnQZaYZCDxuCmO0TA0uoZtDB6Wk6FroMICapawsHTDXiea7nb7IP2dPHEUTEUUAydQjpuhU8NZdCg/LG6BPkCFnTtv/pyOTlyuu+f0nn37oI1Cw21qbMRZDiDGoZxFwAKmbgJSP3rkUFNLM4QWvKpalWCfTN5Kllx5VTM5EL9IACApYoIoC00uB/YcTyMKVPUChNeFG5ipSIbynuLsjtIN04QhlxuC3pFE9vUD3fMbAzVeDfGnqCCgqdp7mMr7eohJwrno/Jt05p2V1wIKkymVhV6ZJ0QUwBdPDMsCUwE8FPIaHve0sohiPP/2b//22WefPfdh3/zmN1999dWNGzdWcDnO4Hv2tmzZsjPu7+ntB4n3lHQIMemsTXlHRkbAsQSdLXKTVLwu650t70ZyxqyO+XlJk1W5LKlF9s7CtITvvUrL2IW9+CuBubKzZEmiLJZujx4fHx0d6oWffToZh1Mfi5g6oy4khmPxY1Vq' $Logo &= 'ZXm492R1U6dlEerMsJuQoCSsLNwFw5vF2gXb5vtg9stqAVwk2NBxOjr01qYtv3dHM7pc5iaeBVI5tIdZs2ZVWmsElceKsAo2KCSYoUOeLswPUGwL6okVJy7laCoSKxMOtwDR3LVrF+dKz3vcbsezpjL4zJlqLJLbTdXksxnPsY2rgdbv2LYdYj7mEqg5uAhEBKi/2MhkMyWGB9EfR7PhqeswlcqgN3ZUmmhi0MRZ4hhMEkBbsUgUDYoIog5w5SkGEjuaAnzdLhctqU7/TUOLjI87z4vD4A4O7U2gGiJjKYsqdmMhw+YxGjccRp/cnKFg+YBLQRSy+B+6DZoGZeWxxx67+eabb7rhRsGML8iluFQi2g2Tnkb3K7A6UgnQ2jGRFTidIPQYuQyoA04EC8H5hMZIAvXC1ywbSAi0heRMeAcdD3UD3EioHPxkxCkISgPcjEvlSBnjicvCOA+MhX2cP1+qEGewBYaCrjqKAm6fL4DcsKJadNXWwPoYLhRozPAOcEXhpivxqCZTyQOHDqxefSlruVHcARybB7dAj8b9I0JRIA44Z87cK9Zc2TmnS5aIHa5YsWb5stW7dm17++3NCE0wTaBouizAK6hTLEQDhUWfd+za1tnVtWjJslgijtCfaNrqG49HUuAjpRx0EeaFRRGMwk5rCIgExemq9TfObKClo6mxbGEwlkpkC0PxFKxPQY/p0xVMGZb3iSfhxiyZutyaMjge33qkt9ZoqXdXwVMoUU7Ch83Q3kOmAUCNJtJiJNN5C5CUW1ebQn5ICUBWZlT7SRqbRioY7BcShjPRTwyNI/hmLJXVVaW5CmYLrbHKX5kadCSRGUjnMkBRVJpAedanJBHUVyx5da0lDKVLn460+6Mf/ejb3/72uQ/7y7/8yz//8z9/8cUXXefTAMiccf+ll6z6mz/MEsqqKldfeZlwI+7v7xezsciNDF2G3tfTfeDgkXDj4qLqwbPpMvRdjVg/6+6Yj/iDROGYDBXM' $Logo &= 'MwwkrT4yJ0QGev0eLZ1MBQN+zD+aurKOZhNK1YPZAoNQIpke6O+vqW3EiJLIRY2C7cklhQNmyfWS618KdUXVtJySzJXUcEPn0WOHAMTPnj0btytxw5UFj2xoaHCUFUE9OZrYi7UrjhEElJLzQ0e/uIaHwpXBVPD0E1SbmAq6XFm4DBwFFBnDi6BmXpci6YAyyUWqzI16aSM9JOtiS8CDDqTvKNDAoyAXbtu27a//+q/x1LAq4aswn+AwdExA0A5zdTL+lCtaJVNxDmOnbfrnjKHw4Ehn0hhhSMrgMZ2dndCh0bepKhcALpBfAlSLzi8kIjuOc/gJnO/I4cN4CxAdhOqD6ziVQFlepYMnhhGnaCo3jIvDUXgY8BNzE5XIPn6Ftvr8889jFfz+F39fQIUXbKgng7MwHlisAUF3Zmck/lcU7rusQ7hKrMXbloocFD2E6zFEhj+VY1LYjlIEvcfqsb3VylK+THQEJ+ELq/kT1gLaT6fxqa6CHUBpR0YLtQg3BoEW4hgnR5JzjLzDXLF06TwkzsM7cABOULTI2NjJ7u7RcVQ6Sug64Qa4LDor3jJOx9DiMQF5HT9xDBwL5B7PjLuIKuK4mtBSgPMl4tGWluZLVq2+4fqbsXM8EYUJJxyqQrg1qlNAw33m+Wc5YpQev0DAlajjlIOEA4ByaGQIs1SVFF3RpFIhl7d6xhKj8ZRMgT1gQYTx0RRgwxHOHkvlZ9QEb1s86+o5TYlsDkMxmsj0RmAlzB0ZiR8Zjg9GwZ1yflPHCxH4oUK8t4zhLSpqLG+NxDOQSEzDHc8m4YAA+d+S1dFkdiyVScG1OpE5MjAOLkXMQHIls/n+8YTH0GfWBjHCNV6zoz5U43eHELdg6GGf2+9mjZvfqTQ5gxlxPcgAI7HUUCx5dChyaDAaz+ZhjYeG2Fod8ChSR13V7Kbq9toqXAp3HBmN9o/GwILBU4i4Yo4JsxkjreB+M8BUdO19OcpPfvITKObnPuwzn/nM' $Logo &= '//gf/wPIA9nwp91ASs6WPxTT4NOfun+SRQfSPfojKsPbIIxV2rbrYFat8oSb0gjFBdMv4YlIJ6FwWUnBf1hfDPxLRWY1iNRhtLeoWMb4wMkaP47JA9xmS56uUCMAijYEseRA17racPL08Hjcrej+UiFjEZJVwieuJjDnEoHNFqkqNE+YeckGcFvTVz2q+nbu3t46c6asGGXkVAJBVGltgNhBSMcgOMRakWRNUd2GCTovgvtF0XtyjOZ0DxcTBQkoAaIHAC1HTRGmo6JlCuwI+4HsA4oB9SS0QFMlbg6A5iA8gkg69m2hAwkXBowdjSQj2I6a6zYMLPxfPff8Pffcs3LlSvgjwGKBY0BYQOsrNSGHlONXgROIEahgKwINsTmuw6SdntgcVLW5Ah4NR+7cuXPRokXgH5NUATHaEAQr/arFsIjnFaYXMFqghBBrPG6j0meMZ28lxE1jwjMTh+OP5hLGaWLA6ZOz+oICKWW5VFNdA9VtoK//n771LRwrdJcLZCqOhVkMq3hpeQ7k5k2h01GcisycocBzCUBuOk8ossaD4mgxuSJxFDvdCDUwTdLvC6xui8OcAAwR+OVgM071COJkE7Z5MeikwzBIohoGCq8AKG5sbr5u7Q2XX34lEoVRiDGxo3J9bX10fGzru28/+fSTBw8fbmxo0NiIytb3Ei9LdmNhABGvB5/i6QoUdKhLrAM5PQSC4A+gvl4A2KU/GIQGhwWIkkpuj9sfCC1evGzfwX2UVtIR4uyXKWWyWUxruJzhZiKaB0K4r6wnC0WQciFOSezrTK+UCWvaKiVyBbemLmqr62gM9w0MgUvXBbSuBh+8qqPZ0qYTQz9fv+fQWMqoN4QMJaOHYGM8SlmAHFSDQPP5fS7dXZYS5AlXlvpjqTcO9716sHsskSrAYEOgiIRD0QOBwsNG1JtIYZEZ5dKmA8RuQwHfovbmy+e0rO5o5KcRAsHk7GNofZHU45v3bj/aMwY5QtOIWxeItx4a' $Logo &= 'jiGDG3hlU0P4c1ctunfVXIK/4EcIxcg0chbZqySsUpWImfBE0VU54NH194PpgYC/L0e55pprvvOd74ASQTAEqO2adrv00kshwE7nSEwbqClY1cJEj4cW4m1f/+CRU4O+6vYizXme78RPyOBBf1gzcplAsAnNm3OskCylmfroUHfIDTprxJNFXbczMrDUbZueFW5OYeC2GY37jvaG6mYWyHuOVgCYG2n6AAisEqu/aBL2409gwFjW2YLLF64/2X8MPmxtrS2YEzLeQ1EVBmpI6xDbxS0csqBxc9BvoWRgj3xxPr7CoE1drCDTuHA2a0vTeHfCHQAIFeRxGpApLcvNoe5oTr4A6FhgfpI8JQ6D23/9138B6nzggQegtMGehNkCaiBkecdLSoyJqPGMA7DhsC58imtWRqE5D5Jnw75wdqjkoyJbLn4C6wJjgDcX4KZJ7tpCmahEAgQqKO4uctAJvAvnStyccwVfcSib4Fj4dMQRPJ/XG0A3HC7OSgSWI+nEUNeAFf/VX/2VQPXF3S/YpmJXbHSV7XwnDv9lGzEJlNTRXBa2eQ+DwArjGhZrUCpv58lJq8zWZhgjWUchBcWF6S0YBF3NxtEEtyeDLWXGK+SVVDKfTgJ15gp3+WwuTZYvVcGpmVQ2ncnm2abEpYqASpPDAnEvRkVRNKwqHCKmweiboWh+L/75Dh1Bwtb9GfbZECoIxlVgccJfC3ruwGA/RECMvUpSAJV9AciNn3gcyAiPzLKnTp7c8OZ6qBOXX36N2yBshAP8c4S/L11VFQrhClO9u/FCWYNRGuuboFNjmVNWJinXHU0NJLNhr5G3hIOOTaPBhmNpzMJiyOeuD/pwLQ8Efp1IieoiE31zgx+A8qbDvbtGYrFMXlWwU7gzQAgSyQcVrK0EPR5xmdpQ1VA0/astR9883Hcinu5NZqAdYVkYisAOLIl1Qzw43iDGN1sG+YG1zkLHBlLjkWTm6OmBE4PtqzpbZ1QHNMWW13Aw' $Logo &= 'pjzOAsL44r5T7xzp3XqkJwUsj9YT/hVl9sYQ0Bb62X96OP3SuzAcLWxvGMFDyjLJ1CWaNzK/0Ak7QMmtyS1Bw6efax6j5tVnP/tZrMlzpgLr+OlPfwotHts4kvTOaTfQL9CO6Zia8U4hQTs15MUKxAQ6euxkqqQHPWF4bGkmdBHm+hDOoA7IJcgzlOaOZj+VkMTME4vCNNRoJKYV4w01ddl0Wjfc4LqiZJH83iZxU9hvPhDwtzdWHT59ItDQgUWRt0hgAOTMnjHCkUO2WJyiP1rKWFQanDcVb3V0bOD4iVOtjTWUJMciGVxwRzwU9BWMXiWZc2ATpwMYJex0XVxzis04QJawG2tMgvDuHn30USiazht0aFwlpgR5Hx5owpkNBzixBOgh9FT4cQhWVGn/wPWhl4Ai//Ef/zGYFpgKOBaogQHkTRAKboJz4DAwJ6ik0JlgccGGECAqzTPi01F2IZe0tbXB+C9cOSYFoxDRZ4YvkL3LLrtsUlQ8BlYgUZVGGodN4pRHHnkE3RPS/9R0UzgXHVizZg0eCtvCnFGpvb3++ut4EGw73FGwHwwLNDasL6huYtAurp4KDws4FrgLcBtHO7F/YmyrXGI1HwI9pF2plMOWTJKyHV1YJog8T1dwYY4yryCOkhHYLqss4hVMAJAlNieS7qDBLpKO5TNJmEQgSmMy5fI5ShmpUPBwFiazTNYi3ZN7QYQPH7hmAWmDoa3jstF4FJcjCqUgCIZSdYWramACqaoKpJIpdD/g99oCkQD3CoSkAT0dj4yTEZJmLQl0lpVzpovOYoXP40aUNQK24YiMfiGNGKWG5Y6lovHm5haQoXOPO949gDhZlYVBdSSaAKLlBX5lFcRkFMGMYDtR2m9Uew0wb2B7mLkcGkrGVqAYjZ5gY3WgKhwoaSqIuFuXwUtYunMpjFOWi+QyBu87DJjLVTUYt1490Pcfr+080Dvqq/LVVQcAX5uaCi3adsUWirxAgdEfxjO9HPcO' $Logo &= 'v97xROJg/+jh4VjPePLjl3S11dlUxgnYfH7n8f/chNyQ47hmbXUVtFVyisNI4oEA/OPIgNdfsCLx1Kaj/YlU7rIFbUciKdPn5sw0DDuzzZPM1YqGrvhNrQl5DLSzqtuQW++//36Qg3NzBbiHOi4rUCbOF+WfpkcTNFeQIc7wZjdsI6iwp3dAcVdlSzrlRiAezE5ZIAqY8XK5yLYDixNBEshVxEqSi4qUBtyeiC+fXW3lUyx4qQyQT9irK5rDwHC7bCreUhsYiWX7Rod9/mCBoQW+PqGr+OTvriJzcVaVaLQLJYWIjDuMribjUcnjR6iYLT6yORDjDKYyySPG9pzlwxwN5qKzbTsb9jNWejPTOs3nQf6c6JmpPAlQEmg9+IrFCfIc4l5kvAgSPU4HlcelKtUU5seBr3/96/jptddewzJnSIrXApNvB3oCPAWu89xzzyF8BL3CWQ5AOjVsXpwFVU8EtcArd926dQjyKLDTbqW1H5QNLxwCMVg4uCY8uR1FqlwReFQJDDhIEo5Mcptk6he8ULAfTHukSIBHAAZQ8GwnfAoSA5A3HCn6U5kZAZTq9ttvBx5YaVG7yCJdFXkRpniHCnYgGCPmblYqJnMFfApXV0hDIiMLttmZAPCuDFksz2OgMH5lgSexk7etFXEdbSZSKheRUDk1ci6dyuECkP1JxuNFxdKRk6SPZr+i6/lcXig9+K0ydzFPNRrZTCELnMDj8cViQ0L1IyMQJ7ogUAv/K6sM3dFZFr6T9mMr4HaIM+WpJEgNaADY6Nbt2+Em39Y2Y07XnMWLlra1zoTZ0L4tcjBnkhanahZ1+AV7I684i3L/AZIq4SceKxW+BDmSJiv97oRchEhAb0nSJRcmnKvo5gRZjG1hbPLUUYxxhtS0ktfNuolw5GXKJfKPYdLQYYgjymU2H+19fstBmEw6ZtSqusaJCVzwVy5rAJpIz0A3TVXFBi7hBqcUD84oLMbL8PtDpjuSzuw4evrqzhow' $Logo &= 'lcr4XShML+46Fkukav1eADXgJRlJov4x5mmxhiqzdolHrqsLDeWsF3Ydy5QlN76TH6DKj86vRNFgDYK25TE0t+kD53WdqUFCvPHGGyFJndvGDrN8V1eXs+c3v/mN63wanXv25hi0STgYG83RZCqzPpTGp+YyBodH4figBpszOZdslIyigmfFFKCH1rAEJMwHYUe1JEtxqXKZ2ExBNWJjPUtnBzFRYUlnDxHyQCkV6Z9DwVld4FZSMNnIMalcSmULne3NYzv2JhNq2dDgqCjnZYt4Cs4lvkKLDhObTfdArbMYX7CzPN5E9fj4yNDgaFObF0+B2YNPEQgJGWhWsehEobKDEHMo3mZXSZnhB3bguYgm4EAAG7wkC2J4lbIqssQC4fmTP/kTbFcWP67cQE9AlJ/+5S8hhAnvWKfhVzhtYuXC6byVba5T6aPI/w8PGsj1iVgcC6QSgIKCCY6C6D/4QWFeQX4HVgaRRSBOU53ZHOOHsMPDNWv9+vVPPPEEFAuQaVwQmqRYYXhqcXwc70zXDh89gh5WwKpWrsCEUyk7qqGrQiFevnz5v/7rv2L/1KQDjvUFEBa0NMJByc+IiAM6gKFWaUfhzjvvRJcwJpOgOaGtfmAR9WIoxcvDfQVGzIoLq8yMXgn6TjOeMCiaqELUtUTgN+dFwj78R0qMMLaXS7aTEnukQHtxXHUZ/yAPL6gkGGMP18WjqU/HlQRAZtMdRxmyaLEA5WGCTxCCaRiYGbjQJE+2Kr9PIyqqDwwO4R1DtwApJkmNC1LoKog060DpJEclhXFHeJUjiT3egsygNXGaYtEZaPQWjucJaEbxSP9A755du6uqQphz7e2zGhqb8MLngBp1zrftt9FIvpAr5ylBk8OqFVWBUal3PDGWhv29KF5ZkXQ1GkldA5mQgBoGTR2JhzWZ7FeqROxEWP6rfBTbPxRNnuwby8RS1T6TfB+KE1PBlm9KsP97JbmjofrEcOwHr2w7NBTB07oNlYP/' $Logo &= '6Y0puBF5oeSGklkE2oA3QVn0aCrgOIwlRlMRPWOfCyCvw9n8iUjypX09teFwe11YSKsnhqMv7D7+9vF+rxsdl8mjKVcgls8BE3hvFvbwi8YeMBhF1eL5TCqZNUzDLYMwod+qU1gG7BZzjVKfqQqogxePrU221UOQxDI4Z0gK1ej9wQ9+sGTJEvH1wjQVuFGe41cnQgL9GRsdE8Qrl2MxiPNBDA+PQkfRZRXL2HC5aUDYdxKfhAzjT8InCL1LLATKluD2xsf72kJatVsdj8aEa7CgqmXewCcNm6RkMzlyMtVs1kICFvhLMWsq2tzZMzbtPuUON0DexSJhHwggkNhAgzDHGyzMU5fKtB5VRc6W5N7BsQaIyewHD7ou4BE4IMB5EenJnUKWwh1U9MeOI8mpNtB0EQ1XIFgilxN8y/HEFQzGoe/nACHpVzZgOEylyA2/ChBJ13TBP86YLgyUFweDB9CAcWIOB2P0ebzAWp988kkYXT7+8Y9DQZk+oIepCPZz5ZVX3nvvvd/61rcefvhhXARDbLFRWUwbgV9B9cFow5Mb/M/hCrYxhuMcHLLsYOzO45xN7nFMQbi+mEWQQ0lu54ad+PVsF6kE9C6WqYhAGI4iZNQPRCGfFzCUHUzFNJ8SorCuIPxELdaos5gZkH/BSCCpM6mA/wn7cNEXi1Nx5DmAUGBl4n7SRLicxXzICcwTmO2kEAfaw3fnKEj6VdUUjee2bgDOoWBpEFRe9yBJpUwWefsVaBY9Pb11tbWcoiNf4oYVKSxX4IPJUqG+rgGIVl193YmTx8EySPrjxMMuQgwgrFh09zwhkiEy3oQxSulUurdnD5QJTVUDiGmqrUVUysrlKwdW9IM/+auCbq87gAVZLONIjloglqhq8kg8dbB/bDwH+IGtCQwYZgsYK45SY9rjNbWw1w1mWXKpJKWqkkL3L8YLhePdJ36zt+fgQISUwAmzhO3DrlPIPi7V6PV0VAcMw72t+/QbB05V1QSb' $Logo &= 'Q4Cg6PUK9laSyR0APqwdNcE6v0cH8iSVR5LZ4WQumcVSdnl11dFIwFcA0+Xz8pvHRuY0D7fXVWNn91j8mZ3Htp4cwFXhIoZ+5zIEtUjES1wsZ8tQp1JZDtgm8EeCKmOCFEqmPemZ19olMEEWkfUelVSw+k0NhnwNwLbmfm8ax8Jf/MVfAKZwnb3hxf3P//k/77rrLmxPOtd1Ps1/znSWDtqApEEgu8Iey2g+i0fZwsjoeEHyQeLHW9UspSDDvEUiP2WlEYpZ2VmylHlONpREPBJQ4q219aNDkZxkJw5x/GVE9pf9xw5CNV+wYAH2y2pOqCxk4tZNVXPFY+OhQHBOS3DfqUGjqiVbpFiggtBUGGor8AaWJ1xv8FlkgYlcz3Rv/3gc4DJWDhPiktD+Aa3AMF7FTMUJMBCEXmD96JIgWK6La4Lwgc4IW7EwJwjEeFKqq7MxFdElXGEqUxHKgRNLX3mi+FUkp4HxFeYx3m9n7RBm+cF4AhFOf/KNb9xy882OcR5tmsmJRfdg7Pm3f/s3uCzDuwRQGIYaP4vuCfomonCEJzddkJc2wddYHBapF04ED4gkTjzHsFTuwZHkKcANFwStE2OLZYKndrScqaeLe31Aqe85fST+dLJOkxFe8DdYufPFAseeyBhXYJwlSkNk0VQjZ2JLY72aOEpZLJMSATuMcRWInZCOLAafgXwLBAXfaIOIC4RTqnePi0yJmCu7GP6q3Fs5KQzKeilj0sgqXdjn9jJHFM115Mj+19e/9uqrrwCCA/BjGDquB6bEFkk8l0LWe9g1NbAbd319Y0tLq6xsjURjdbU1OL2Qy1WOtcapZ0E8ZCqlrLu93ka3m2Q+ss1Y4+PRyNh4b0/vCy++hBG48orLP3H/J5pqydCSSCUVKFToIKXxl6LpAnK0cJisjHjyAouNaFCaONUzo+8iul7Wi4qRcVmw7kKNiBdL2/tij2zYu/lQb1bT/DVAz8ns6sxivAs8KSqcVbd62+pD' $Logo &= 'hwfG9vaNGB48ukx2GQmXAapGTtvxbAHRLh3V/ruWz75zWSc4ii4VXtx/+sldvadHY4lMDtIRI4I23olO4hjIgRRVw60/ln7r+GA0kwu6dTrKIs2ShImyhHctvCkiySySVmFW0bvW1GAIvEmh2reCo6gabaNnkCI5/SVnOtCqPLpCX6VJktf3v/99rEzXOdvXuWFjkpoCgPu8Euie26DiLFqk8BB+X/YKLOFcFRJYNBaX1CbKwy0peKEUemKBj3NUil2djgQySaiVsgaZQsmMzl1YFY8BTPNJco6JJI2ixeAF9BJYOF544UVcGWWCkGMY8SsiXBdUGC4VeMe6KsdiozObgr3DmcFoVPGA4lsFFlQskuc4mSrNN5EAVqRyIXYrK2Y0FYfW5fZ6SiXbSC4kaICNLc0t4mltTSVHvheO4VewhItMMUr8gJuDfeFeAkEC+Tu3yFz5kzBaiHOdDVxNYB5nOxGME+wEBIQfRBJJ/ETiQQwvDA/XX389OIrw/nKU1Gmm1hdfcS7gsj/90z/9u7/7u4HBQWgwoLIOQOfwqp7eHpiF+IJ0CmJUiWByY6ZiO+TgJ+fi75vI0tFUSEAp5DmBDbEV4TM9netcNPwlFG30nHOxEDokeH6JoVTKXY/VTnZ0cEBQ5JSUsXSYJgn3cDGAkyfVHpsgQERZhOJv8bBRpJ7gJSVS2MGOibjIMm1QnK4CcW5qPVkH/sKJRRwGWJDrPNJrKOTdJhlUE/HEk08+sWPHzlw643BaTIujRw/v3b9nbGy8vrEBukfJYmsJgbPsN4lyxfEEHi4UroJnGYJdPvbxT+7as+eZXz6LcWikU4A94hQ79ltIFiX+dDwxwGAsfCWGSkMVicUgu+LwyNhob3dPV9fce+/7RMfMjkQqgTJfFHSpSwjS7RtPJDMFdCdHmjCQbAtsmMQTScWF3VXesUz+Fxv3b9h5wgMjZIHmEJ4TmSK6U7ldPUPZRMoTDpqGWSxwficXTT2BwxaB' $Logo &= 'hSVzs2r9i1uDL+zr/uGb+9MD0XQig9z4OMANu6yqgqdGBvoWz5/1iUtWr53b1BzycNSReteStrqg7ydvHth4rB9wFhuDGPfEKS4ZwgEcnVMTYum+k4P7jvYphlob8rF8WcqCWpVoTPByUJKnfyTu93luXj67qcoXSWX3940dHYnGSsVav+FS2aWAk7O5xAYJzGxg97ub/R5sTEoS8/TTT8NFx3XOBg/jf/qnf5q6GCCHIuT4vPyJYVydjqYC9xDoJTAQCdQEnAK/pVBgIQ/rvAy9jQsLERopW/SswiqoyDSHLIlcsBjeNHKZ4Utn6vlUPp3GmCS5HJsYVDCAvIpxzcsvvvib9sWXw539uVfeuP+O6zXDyOcsLmKXM/S8ZRrgPABXc8XE0lnB9du7I6UWFlTymD5WXmPJx/YwBhRJs6YogbcXC+gPQucsiM8wPZZYSyEsQKIA3sh4zA5PptwZVoYETouRmbwwq2DmAT/F58WY6WE7SCaAK9t6BgFWctHSiKlgezp1UIQQAMycH7IoGvMYepJKKjy1NgleYh4thwHKozMOoaefCjHMZ4GFytym9mQ6e5j3Wy0tLVddeeWx48fndM3DtMF+R6nCCODioyOjzukgdelUxnHWckAqqXwe5WGYkktc8I+GQkCXlobFTUxFQHnTT0t84fVUeOCIczKhy0/wZ3YYZ97ATlPE/iirDby6fBaYCqL5BCvKMyJJMe1krmZ3fO6mMP9iFHltcR+wLVMNVZaE7eyPU/sjCneJZqda4WgO7ktZZ8+HTCr1q+efRUA8FpXjrABvMdwerKK5tRlsA511QvQ5EpfC0eH3hYU0b+4809Bxk67Zc++88244IGOC9/T2ATHDBW1HdYDXHBeqMGiGFYj9ItJSodKT1NAvw+0BNIaV3tfT/9gTT2DhDgwP/sk3/tzjhaXGjynv9ejRXOzYcCyeLrD5v0hx8AJwoCplxHcCbiOWyr2+56QrngEDxw3s4YI2hprF' $Logo &= 'YV9dXbBMVDwnYckVmTSrbC8hsDKHt9cQ8s5trHrzxHBHfXVb0GfolPsPN/IrCoASPMewx7p7efu9y9tNuRSPj5cpXkXxmXp70PQbcs5CT4sGiB5HGMkyYcDgGRlIfDw9jg9Fth3rA4WBNQXMgKZsmYKWhHAYSwIUzNUE3PesmnPf6rldTaGhWPp1qEFbj2w7OQgxGauErgJvbJ1zYWEDCIbNVLxNAWIqxYqVg8hewNmuc7aPfexj//t//+8zahhYS+cF0cBhBrLk+2ozuCY8gmgesvUbTeaCdZwNDs4qLGZIJYZY7bShklMyQUzUcrpshJGfdF5T2e81EUsDQMli86zDVEq4rK5v3rIjYWm3Xnu7x9SOHdy3Yf2GtUBRyEyoK5YC0YfLgkGXNnO5YnXYNbezbsPOIdVXj7MLBeyjRJIFoakQ5Ubf2AeJzaKstVuQA6pCdgULYRnGBswMGD2sDgGMW0W7CduvcHXDARdvU8HVHCTNsalM31pT4o6DiYihED1lnlIQ/mPnyA0MTYXuy+9RXMpRHaDBwCiCZCoXX6dSzMyuuXOPHjtW4FdcJkySwTrQSQVfAYdLDhojFDWBVlVaOEAfzme0y9Z7m5CMxYrAxodR+VHwQiaeZQBLJPmCEDv1TVUZVvtcNkevC86+UBpkktEzeeqrMJwAHclbpEeI69lFt2muMMoh8C5No42yvUF6DX5SVNqeCn9ZImafthWVEuOjUr2d/kzThHUHlJjzdZuVdQs0lTBfGafAoJpMYp+iYVsmh1srT/C7boDtIX/J8qUr2mfMwgSCoHn9desSkciP/vOHu3YeQGRMfWO9h3JClAxNo5gyCsHVafoWsWHYG4qB54W1xvFOwcyua6iDV9jo8OiTjz+OWfPlr/63uR1zSya6qiQL5e5oEiCCYIEwW2HG2VgQPEPAvTjyK9gQKtdV0QjYQ2EPKIaUfctKlbkhBTaftco5yMuGSmtd837xisW3Leooi8BVgd87' $Logo &= '+SjJqoQIb4h2Rb/bA2aIXwfGYz/bcnz/QFSUGWSxmj17ijRmImsNI2nlg71jxyNJxecG+Ulm8llORy3KqGO+jozFAel8/aYVX1m7GDCp6rLaQsadi1vdupot4twRRSr6TKVoG22EJGz7bsCYBN4m3qCTLA9R8edeAJdccsn3vvc9SHNni08831i86USoCLTaUVwogxY73WQQCVwAnghzlwW4k0O4VXBcCSCYzLndZJwuPB61dCJa70l2NdWPjZNTu+P36ZrQjyHVnDzVs+vQqZs/9vmyZEAWWXvzvU8/9H0My/wFC9ABnMVkoiBRK+DrWGS8qb5pXnNq24k+01cFECFPoqAMdm4bV2gJKAyxkqEUXcP+ZDqL7wRUM1Nh0ZjMKrkcMZVJ3k1MqdGKF1/dBFcV0rqDVl2cZ7JTvKMsNt/37QvzvrDiOo/jOP6CsHCezQ+mPjfcgSCv4EGdwGGxYXHTC9o5Srk47PO8mEGJm7isw33L3D4cpsKu9OAonIcb7FRmYSFDBjSOCMV74kwpIKAEWMESKxmZEnnGEnpMp7MNEKcz/YIqYEMc/F4F0IErTN4QaWBKxpkrxkzKrcsZt8FqhNJEX1UNnSKTpcetKISMifBGlekvDiBxjNYnVxJjJUyUcYR0FE/EkHvniiuunjVr9sjYCI6sqam74/furm1oeOaZX27d+nZvX08ykYKeGA6HwCRwIhs9SKuyija+R769rKUBEnTc/HXD9Af8OOzg/v0v/uqFltYZtZ//UnUVmbgRYDgWp4r3inDwZ8cVHih85ZBrhWAURRZuxBrDg+SbTYpdoSAyulSuIplL2QNZjw9GYDu6/eold6/oBOShqwrCFV1nab2RxK6ewQyonazi9aWSmQ1H+rb2jqURM+Ux0LEMextrFBMqWXnIw0VFVf1EX+Td/eMHhmOQminugUekyFoX2lgkpav6JZ0t1y9sbaoOJqOwvJUNTZkR8n3yko7eSOxw33A6mdYkj0qS' $Logo &= 'hDwxNyiGAzwfaV2Qdozrudl50e+++24oBK5zNkQPAFs4x7pynU9DiDXKuU/aCb8d7J9EjGCHqJTcbQWMtHZZWGIVgn9pYDhPOq0njJ6w1GMjltE95d6V82pyFETFKvtEI7ZDUhRlf3zzrXeWrLqmtqUjm4ghtMcTbl5y9Z071v8CHqjwEKHDFLsmqUiNJKvuRCS6bG742Eh8NJ6wFA+bVSyRbSzPzIBQV6Y12FYlbBNbYj/y8gQZYpc2bjBWordO2mDHaAzmVFmI0Aasp9ccCFGggopKF8cXcRcR8m0ptGeaegCfqDjvmpZ+kc5VuZ0j3kIE8zshgZVB7BrbHyadeJE6GSwZ6KcIQxSVDkTVPqlIgzLpoUSblFxcnDj9wFKBnjkuGPYIM/7x4TCVouDbXNODAtzALrh0QYZs2+xMgakHYFVlC0o6l0sbAGzZ+E3Bwky+8cxCkHZidxS+KVfcxZdJGyKim6NbZCaX4v3TmiS5yRbEKyJXSTOXBUkXbAMbDC6rVOCLJzrbXWxzIrYJvOLlItmLQwOnHB8dmzmz7aabbgJHEU4KIOrj45Fwdc3H7r5v4aKFDz/0k5MnT508cTKTSpckOHGlyEmDxGGZn9LOIF0Q8hqHozkZ6yDEqrpeFQp0dM4GDX3kkYdmtMy4/+NUEAzoSBJ+D1xMgzP1Q2EgJu3STZyLDb4Y5ElsTJQ8E28Ex2NDlokWy/TniFT5bD4RS+GFXbGw7U+vX3ZZR+Pg4JCsyTqhduVowRqD8T1nabo8nMyfHIFbb2EgmkLOR5gCEbOCuPme/lE4pAXCgbDHdKsK+iciVwyVZjH6i3VQ43EHDBWx6f2R+Fgi7TUC1EGWqkG2sgx4ZpO5VXOa/+i6RTNDZjYVAWdC/1l0R2bP2jWdDT/d5M4MxgDE+wJuXFok4BM10BSrBEdq8BULbiAuirFFeAHinKezVl0fXMN4Tg2/h8Q6CXd2MnDY9uESGx1L5GyR51xEJCyxb69U' $Logo &= 'IqASinlewu+AldktAXvTA1evrKs2tdF0UjVYdSBuwgHwfBNTlda/+o4U6pi59GqEUHBy1RLKq8zsWtB3bOmbmzbdfedN2YKOi3EePvwpNJ9klSVr+bpVzY/86lTB1FBFz+LUyOipqGIBiQx95Hh7qDFF1UV6DDMS+p2JnUyVJnOYHVmRCh46LqZTySDKK9Mk1aUcacyGqYmXKKwv00eKcKTQIw1Tp5Wk0NImMk6WV+AaKtjZ9BsjRbSi5CKtjAK7sMB+yIxJOgf8BU8/vD5Nx+1VoeJgSjOkaQmrA0IIUDPpIpUV8bAUrm+aeDQyRIPiCXiUUl5q49m0aZrOLdBtvEixoaDxp6NGT1/JENdRyUaKpSqrZUEyKfPhh8RUmDoQkoOH00yNIUqLfPIAOWVStJDKchaUk1UoAGFSKWKZ9RZEYgnqt5wtk6TheGiR7WTaCUypoB3FdBjMb4iVAGIFISzLE+UUXfYGm+uLrLFojFjn+VYaaQ+Aj9jUWOIgQWHkonnCmCmOUSnnM6lf8NQ6fWrgc5974MFPfYZTUidkif7hsEwyXTAKAX/VA594EMJlf2/35k0b9x3YjyJF8WgcVdwsTrHk93sDQZ9pmLiFcNHhV4jrE8JG3czn0B+k0MA8OHn8FKwsLm4ZUPkcCeIA74iFqJqdL02AHpViiaYLRxCJs7/hYDHF6HBNowPYHTebKSCbl2soumDVnK/esBw5TtKxGEYDK7Uq6EEv3j48/MT24z0jEasE+wfE4kwyYzHoyAFJXHTWCHhaSBnCnmIqX3JkTqC/2JVm3LLFoDOS6STKREBJEXITJUTgGAiu76PhCu213itm14VMLZ0jS7WryM+l0iQ2DS+ChwYjGUwhYqWSIegQjTyEmXTOkGSPYcC/tawQvvTOO++4PhoNYclTYJMp3rQ8ZBaaQHfZ3iJx4SCi06y+SOViFnGnmpaJjFw7272koz4y1u+mmsRFAvWF7mu53PmMz+1BRM6x/tja' $Logo &= 'e+6m0MVcQQbR5AZ9Y9GVN7z8xA+37dh/7RVrElmIOrqT7B0jahh6OlOYWRO+annsuY0RORCCT1rRYtuPEH6IqdAdiY8oAiQhhIIxKJu10FPkbW9s4X9BLvsixQg3keEDRBnQcaWMf150NpVOwzNKqAXOZUUCGORlmn4NfILsdI28XciZp0gbnPBb4zIw53DNQoETYRxyQtPLTOuF0y0G6sSJkwh7uhiwyEndj/wL9ShHls2YblOgUsJuhLtDKRdzzLEqQacRMYxOXmE6ks3b55kCB40qxzpZXjBQlkWQ5ofBVETlxBIrxTkR5QRqSZY6Ax60sCkbhopFMzw07HHrNcWsO92rK+GYVmfJhlTIepB82/Gn5pfm6MTn2MA/Tm4vmYkh3/BBIzuaVc1cPsmWT1nUn3ebImEqn8RgAkuUdm1HLAGh0GFDwgYzEvZ4lqEucCEhXEoBp0JcAVzFBgf6EFbyex//2Gc//4dtbR3j0XGkEBYgknADhydIqCrc3NDMKaRmwXl8+YrVa6+7cWRkaGiw//ix4wMDg8gkgNS3hZwFI3x9Qy3AMXBeFjZdNirOupHH7wP9TiaycEECc5NkKvUPxQI0BJOFeIJTcMtJWYAhJF7KegpjwxZYJp6xCL2ChE3y6iTKUiJOlsnhTqH68PLFs75y3eJr5jTASGNoKhxP+2LJV94++ubB3n2D8e2nhlPJNOVtVPGc5OBtaorpUunmYFm6bBqaqbArJ7gYHoIBBOEMQ1orB9Qgb3GN14AFFEB7inJMkVIKCTfHyd5LIkdlIe83tZagG8+RyluyYy9hWIJSRWnQSPlVygqb1ki2LiqaC6hZuRT2qQYEtBI/OWegcn00GuKop4QC2Ll6K3OxKkSbVC5DZ2GYOQoUGh+eFI9kYTYTxKlIVmKsxZ9ft3pRPhPB7C67TBjsygIq4xLDAY8fBaJeemNH56W36Z4wQp0UiGgMUKGB4mke35Irbt/8+lOL5nXOmDUrk8mZ' $Logo &= 'piFIs/0pKYlY+pplbcdOxDefHjY9AXBtijsmEKBA3YOmYhUm4C7Ct3WuGoLlwiSMVHqH7oDAYRufZc77UGEML+Cd4hM+VMjpgutMHywSRn44y4CsC+9h7BFAlijuCywBn9Ok2jgLkr6g0Y6FBl91TY+MR7DzbDVdglS81Q8dAggqUBkmW3a+SHKR8viQ4gUpvGAOuTBzvXPW/v37RVwRxtDJQiY6iZ6D5eAulY8jVCjxQoXEgP0aV6WdPofDAIps02JIhYUJe0DoPjSmIlFj51QAAFgf2AblwpQFrXF7AAcqTXXVM9vb4fg/NjgAZuN3HUsiakXVPVbam0/ZbsGSJFgFW2HfZ8OuEa269WS/d3S/BV9lq4wV0oXW2aXLeiEvjMQuOz2eQpKVsMGBC7uIFBJGx8lfLfKfYg1RGIfYmM8JIl0EwhCCLCuz2metu+nmz33xK/PndI2NjwG2MNzQwDUSqwWYjABnrk+OGhUgwAsWLlu8cDmL7fnDh/YfOLjvdE8vYhSOHDoKcIYK7yTTosaqi8tEOqAzOBx7Glt+vzsaGd2zd8fCrq5sngzyOB7/QFjL7/W9I4JRKBJ5pj4XeH6pJamASSHnLDwDBgOQkqYqXl2l6lvhQENt8OqFMz596bwFjcHYWJRiTmW1L5p9YfvJf3zundMnBlymLrl1Q9fcXqoTio6aOvWVg+sFkQJeR6ZejYiJHZ9E4SV2uicJtNGQJERQ1gS8CO1J4DdgRGxLES6cJEQXLIpeJE9ZBfZk08R9SE3h2m52ZGs0hapjGQBEqqmTsoVn5HLkiATFI1VVmX4f3l2B8UVyy8EpH0GmUlkqomLl8PzkeCYe0yIj2BZ2smEPz08+9DkL2/mANfLx21aZHi2eMgxIRQXJEsnbMJLstqIW80/96g13y7LG2csSmZSMV2BHHuOa9L9sMlbf0lnfseS536z/yu+3+3yU1M6hy6zHKwXZQNLTu2/oPPjQztFUXpZxeXrlQkdh' $Logo &= 'yJl8PoQZUtSUrDRnOpH8QpwXMdgiuKE00UTtCdBl1BNCrcyz+ThM1WPEBtLtmFhotlYhV1JPEF8QesqXM73mMFQnMZrQA4Skj+0z4pyCfOMuW7e9C/MqjudVbGdN1TRyxcYjI7EYYk7xmNPnIpV+DSKjMB4Hl0I2MDwyv8uSMLxBUQNLxn2RAtW5CHg6SFCBGbzMoL1MobMljenM+WsqmnhSwVR03vMhwV9iBMBQymT/1pWJ9Mune3vg73jJShrTGbPab7/ttocfenjfwWMLFy/Q00PBsV6Izm4NbEElQVekAYZqzFIDnukcG2Wm+DS4oCpSSTW9A2NxhFxV1wRWrVw1s202vNcHh04nUlF2Z2Q7ikqnk2yl0XCLMN+x0QhSRgqvJfvV8j+RVhlsCccDrWhra166fPFdd92z5vKrZ7XOxGHIbdw/0F9VHaSiQFOax3BXfo2MRsJVtSuWX7pipeQzvdlM+u13Nr2x4bWXXnolEom2zZwBkk3exqpGdJpDaiRmb1ybMouK6HAkzhZVUlPcso5JUsgL+Mt2b9O1PIhpPFOKp9mCbYfbutwZnAICwWUcyi7wBp+nq6F6ZWvt9z57fWUPQTOA2fbHky/v7nno5e2nuwd9zSG8C4mHRgfPYKdWOOmBO6GrlFuFEoBiiEDozeqgz2+SLpG3aD+fwmUKLQrXD/sMVdGGYpkCsQrinJbQCC2L0AZmiorfG/R7yF4mMu+qxFeoTBI2XKXhaAovFC8bi0roKCKo3kqlUdLACHns2srscPvy8y+7PjKNaN97m51HXVYnJDEIBGrelVM0t1zmvNvguQUKWbeDHFXQb4y/OxId+9j1MxbMqBmOp926h37UyTmD9BSZhPSg3/3Yk8+cGE1fdsuVyJFKC4SpDE8H8a+sFqSxZLq565LNLxz65TPPfvrTnxIE0S75KzNOr0vJgqs+XPPg1c3/+PgJKRhWSphIEtvgLU55UZSsvCLR+tNUW/+wM4iUFOE+' $Logo &= 'IqKVUP4W6gjkJ5Gd0MX9ZBsQ+yNwtu8jR47A+9bgdkagydkpYiYgmEJuwMACPTN1w6nrLqwXuCboAAnv024iR7dAvWSuqYtPt2GCiJ07cBLsEEVzUZARyhaIvjCFC3fuAswz3JDFC/mGwVfQ4enExvInnYsLAvWCswkeDbIvF8Dn+c/BPZaL6vy/9ebGrk5yZMdg2jCXogBsZOdzW0pgRiVPP9UpmhhGiMsFhdiqwnkd+OKqYDAfiqGea6XAiZCZgpbh6oe6YRw/fuLFF1+oq6ldsmT5skUrgAtFIrGHHn4I9Zs9hhxSXcixEBmMDacYA5VoAUgEwrLZXlErN9i24exRwRIgXcFRyu/zyroJvCRXyK1ateK+++6/9ZY7OVVD5uWXX37l5V/rulJtVovyXjbwJSsiAyTGDkqN3+fPcTJORxYSy6MqUNVQ32iYRri6ekbbjIamhpWrLgn7w85TNzU2HT5yeP+BPbgYSC+4qWVx94ghQYzG6Fvjkejy5auQhSWVzQQBark9IocjMt53zpsbrq7d8MZ6RM6TvuzzsAiLJ+VPWcNKpzFhj6aRVH4McYjJnBL0KpoCokOEFVdi6SaRzpmStLAxfOkVCzsawsRCOZhU59xfoOwMv8omx53UeY1PrFk86Q1WEyybe+3Q0X95aduxnjGXF7ClWeaRx8PwPC7jBQ8lcjDCugwFZvkFDTUzq/0dNZ5kobSzN3ZqODpeKATgLkwSMRk882A8VGJSrQ96ESeTyEVTMKxRThZqXLVJIc4nhF6J8GzbB9p2LKcvODqVQc7jTDKVxzs0dBn7iaixgoa4GMiHuCmYGgi4q5SGAYIiFj8aDTJspWRnRwxwE6WmsfRBh7GpKjKy9Shy2aIJALoGs7zFHFj49ymjieQVs923r5mPoVAJpHL4E7HwPKZrVfDA7u0vrN8558p7YlZphjcbqg3QxZlnOx4rklzIwntcDjTddVtyaB8MPIZhir45Ir+on4iA8ZXL' $Logo &= 'F647MfbslgFfoF4uREgbp+5xDj1OMoFuIFIVvRRKpVOTii0cmuCpSPl86NAhUHkQShbhLdFnXE04wgk3a1BGpzylkzAfn04eM7EBsR2niNQvldVt8SmALIj2oL+46XQs5HwAh2bL9viI/peYS537LPQHLBP5GZEBCM7rokCGwAzApcV1wBhEETZAUqLObmUt3qk6k3hMwTvBiUEWBFooTsSGOAy/AlVDcC4MKl/72tcq+Zzw6mYGabfK1PfTb87plQqoeCMfElPBOLLnIamFsBDQFufAh2izceP6bDb5h1/66upVa+pqGz71qU+hgvYzTz+fBRbf0lgsa0bQUHwlQk64vb8thTcYlSYA3dI80ENi0UhDfc09997z2Qe/hJ8PH0a508NPPP7k9u27lyxbiAhCyhJhFZzBTaXI5IuCwbfeevOKlatGR8cszq9gqyoceQ+OMnvWbHCtcLjubA9+8NC+7/w/34b1Hmi/PxhANB+xVVnGEBiaCokeNSf+6Ctf65o/FyYNONqMplK0yjnH38qlq0NVVTjxmaefi8RjwVAQXkEC9MC0ElH36IyJCaUbw/HUWCxJIJuskFmbPTs5mTFZGhD6Dh5w2Zzmb961pjkcOKeODcec7Nm8l7afGDp2tN/VVFNT5YFLOKEcHNBToixS5APkU6SmtvqO5nCd11zeWrdiZt0lnc17uvv+/PG3sdhjOQs8WGLqAjpQIGUStmMNxhKvqXp1qcjRrWR6YVwRMIEtJ2oqEENEPHD9M9uUAnER2CIMwygKubdvFDqQbmqGrpB3FPuGgeRimpm6goqTYUq6RRXg0KgExUejLVy4cCq4L0qJgOvzigXxLSv80MGAT4NMStlolDIGSbY42odMU3AgrPeUPnfrSiuTsjBqlRIllzXzeLxAQn7ws2cDHZcZwcaQMvapaxZjBnJ6C7qMU/WIw4sV6BO6uiptLYHxaaL2hk07KuXlRDz+wM3LD514+chYNKBLZQvMy8Ks' $Logo &= 'AFZLXneS5VGkqmCAE5NATLbxCQc8oeXKFc/+/u//HjAgHOFAJfkY8YpLAl8SBdjRf2EvEUBWZQbfSVm5BPo0NdevCHvcunUrErAL2jd9dzI0xyVyOtEYTv0rJCrdvHnzG2+8sXbtWmhIYhzx7I6/coEZoChz4LgaT2UqDuEW4JvDR53RcB5ZeJdhJJ955hnE9oKxTWKfTsJjZwDLFW36royC/TtRdE5auQ8L/iK4SBa3RwyjXeqRS6iimsimTW+vve4mMBVAPbNnzb1szZXPP/si4uoxjZB5bsmSpYsXLypi5KHr5AvvPw/YFSYcCg0ODmzfvgP2OtgSYtH4patXLli4IJqMVfmCIyPDTzz9+KEjB+vqKB0kQ2V5iVewounYgLMvJi900o7OuUuXro6MjpcEeCLqgHO8zOz22e87KOBVmF0cC50nCIIL6YuMyYCJMmmwLmn/vr2bN725ctklwVBobHxUKokQRFroAX8Qkbe6sIOVBQDInuCcVwZ9FvOBfB/SOQtzy2cS55MmYh4lCRv0SbEosqFpCWT3K6iy5jn7qzINr3lmBtkXPR3JuNyA80rgIYSwMXkgJ02pNBZPq5K8dsHML61btnRGbZ4Kw+XDQVxK6o1kd57qz1r5gNegNGITjhu5TA7ImxRwazIpcCGPrIsRdnwxeAER5uLzgqloZcvn0aiYLfAgTcVsqEMNSr97+8H+jUf7SKPXDfIdz+fJ11xTMYQ40lC0oK4ZvPCEzxjEN9dHo8GEO1XgFfK1NZGSXRayLYRZX8jnMccj/FoJBeXweoZhkU7u89cv8ZuFgbjsc9PhFdVeRcCH6+FHHh0sVc2fc2kpOXjPutpULtM/mpaFtsf0yOYaRU2CFQtXJ3bOiR64QSstc6usZQvKBdTms3dc8n//12/SVlgjs0yRQ4NKIjsF4HsUJwWC73A4wSfwSXWDWJyfNWsWOAry5SD9Ow4TfMXGALk5sfEiA6boj0MfXRUxZ5VszyGa' $Logo &= 'gviKCEFULgDPvvbaa7Fz+mhPZWy/4x8Nm985CK6jrEAF+epXv/rNb34TShLy9ICvOKYRggRZZqKsOTlqTq/o7U3Jm2K/oopAejEOlYkgHY7yox/9aP78+UiBOtULQKh0AkASVT8uwMWOWCGR5IJQuZy7CxHEYXK/RaZCuWapDzmhQ7N6S21kaASJaJDvROPK4aFQ1eHDB7ZsedvtNcd6xmB96pwz5+7fu+faa9YmUnHy2s9b7+nohJIv8teLDRZdYOLzR2ORyy87+J//+Z+bNm9pbKw/evT425u3tDS3g6mgkuPqVat379x94MBBxKgrXje7eNnOjxIFYTARlyWQ9Sp/lWl6TFg5z7/BObiuprr7+GnEcWIdWaUcR3DahFM33eBqu3fs/I9///f774vcccfv1VXXOZxxaLjvN79++c2NbyHRfTAYEJISrzX2aeMoGehPcDEJ19QdiFvD0DAMTWKKQ392njjGwbIFRSu0VwdR2Z04ygW1rSdGDvRFXJqi2/OaeBtF80hyPJnx6dqK9sZPXdp5z/I2l6y7LLOQy5TZ53LX6bHhkYSC8BNdhT+0cF8mSUekSSiXgX1RKUlI4rIMLE/kqLaft0jxp5JGkMueU6Mv7O69aWF7Y30gn47poTA6sbN7+InNB7tPj/jDfhUovsgpaWfuIdXEZ8BnzCdRism8iwzTEhCJ2bNnX1y0dhlhjIAXpn8K8lEi8dfUiP2pCw9UzyRTapoXJ5MMVcN09LrNOr+GKFI8YKGYI/psWVnDnYkP3H/l/AVzGnoHh023l5Bau7yVbeH3eX2v/+bV9XsG2q9+MBfvvXU51LbgaDRJUVa2jiKLOk0skBGKSCoj+2rmmSk51VYcudipNNU/NtpW57v7ijk/feVw0BfkQBpkB7VgSdGsXLXXZwa8udGo0D80jQq6Q0U13YhaMhyNB+jQN77xDRQcRJE0UCW4xgpPLZETT3gbT5Kp7XPLZyoyK1wbBJXk41SFCm/D' $Logo &= 'vIHqI8gVj2eZfow9hWnnsjbhrmQbOflsfMW5stCHUEcL+eX+4R/+ASrXVVddJdA5l2xXlnRC2QmSZp3RUQbBmiuuiT125nWHadEDWrbmJwrQiKpfGElYoXBTB7JzRgwHwU0U1BjbMH4J/ItrRVOb/vzPU6x6Dm/K4eL8VmzlSdzrtx38WBJJvHVNZ3WbeAzGE76zCxYu/OIXv7B61SWkTScTP/7PHz70yE9bWmZg/s1sm/nAJz914w23NDU2J7NpiQX4sgN0CcGTaw6fcaOjU1+94tLDB4/u3rM3EPRv27Ebg1ZXU3fDzbcsnL9o/rx5I8OjsJIhBAncmjx3s1mC7jlRC/4EToJ0jRjxC+Mo8XRi9pw58As4euTE6Pg4bmFpqvPmQBPoRqHAyePd27a+C+oBrrls8coMgpU8ntHx4YP7dz/++GP79h+srq4OcT1jgZGX7Xmn0HiUS/W1tXVNrb/uP9kbidvvskiolEs3MO60UVJgrJa9pdaQp9Z/gRzl+ED/yfFYXzSpyHawsojYpw0aKKsx7F8yq/7SjgbE6Y1ERpSSZOgqkt7v2jfw6p4TZAdkNYIyDkpgQ7w6GKFiYqWJWBONsCCiZbwomTsyh1HyOdXUd/dFv/PK7pKsr+tq7B1JNtRqW06N/mTDnm1H+qCXGKYGzoHhsbU0y+IMPSWvoTdUebCAsshAXqKbojST6+IadGhU65v+8eATuOl0jMOcx8gEaYgnKFvwROUPSpeHYUJl7x3HxxSVlpOimgATs9Howtbqu9YugbchsjFy6lwNn052cLfhOXFgzyNPvVS1+M6crFzSoC1vD/eORCU06JqVblmCJLPF1QGRBNUTkqnDVCrwfaounOw5ve6SeUeP9m46HoddAJFBSjGvGoqVTTc2tmHJ47ITYe2qiBkU9gNc2amT+Dd/8zd/9md/hnTRqBECmQ+0AhSjMhdOZX74qfUQJxF0pxQj7ot74SJPPfUUXG+RzRfyxPQ5irhp' $Logo &= 'gdsUfzNG+M55upPrDNgXPsFXIIjceuuteLOg7KKTovPOgFdaZSqZCqaA2O8c7FzfqZ0FRo0aLc8++yzq9UI3ghUK+6eqKU6hgcqqjpZmnVcYJoDrHLdJBhtcHD35MOAvbiLnIjWQkWQiD5wUIDgcJNatvam+vuFU98nNWzbu2r2raJHYZHq0+QvmXr/2RlSpQlkqQoOYDAlqQ1+LlUyFLv/eDRBcRJfKy1YsW7lqxbEjx4N+byaXfuhnD3XMnlNXXQ8VfcHihfjp8MEjmO1QBaB8kkAm2B6HmNG1cIsLZbkY8Rkt7YsWLvcHXurp64F7EklqzGIVVcMtgIABWm5obgDadmD/oZ5T30GhFGJsVAOngPFJJuPgKEgZCVIOsEs4I8icRwDwCAJH8YyG24AEOBRPRRJpuSLGl/5YZICwRN63gK3UIs5zXVDmV8y4aC6fKFg04oJvWQWufKXyq5Hi2dxIJhcIBsAdgu4cV2BR9wwlHt10aP3B7iAMJppckgkrY4oPbsSlvzRVM/R0Lm2bEEl6lXKpnE6x0FKZozLLnN7W76OchrtODv7Li+/s7Z5R4zEHd55cf7Dn4OlR6L/BKg8sOgAHyeG8gLNkkUQA/dRVxW8CQWQYEF2VL1qA4qT3qNI6/eNByMAnpn88cNeenj4nPTuWv9DDwZbkt/YgMEUpg3mgjmkxJGc/f+eNhXSEcRV4S1s4S6gFQnBJZGM//PlzmfC8cFVznTJ63bJ5Q0MDhbIJpjCJhDmfDoETlgoR18gOJjZbEcu4xEylQLbIlOkefuC2NQf+/blYOmuosgofMDJB5ttnNuA49q+xi0uqmgKBHVwEO0QqEeEvBMv5P//zP8O4gvSday6/DNokYBwnKMSxZDj9nMRgpiJFwmyDc5Fr58033wz6A9BRgLPZovS0G5VO5ubw2kpmI02POeGmqHeCuLR//Md//Jd/+Rfgb4DiMSlBgsV1nAesRPMw5BWgfqky/YczFMKzGZ8o' $Logo &= 'mrJp41snTpwAV/6DP/gDETsyKfOK0I2gKon7Vg6aqLw2faaCdzcpfSQ2hCCOF/fh2FTsNNcCHQacCqUEgX633n7bF37/D+rqqIDMyRPHfvyjHx05fAQDcbq75847bv/DL32lqakVjw5jilJWBAvhsXVGQmxJZ9woZ7D4lNvvuAvP+a1//icEFWI039r41i+feQrqEVbcXXfcg9ja7373X6GvuN1QDwCCUdQ65+2xHfPLNlp1IZRIB4NS9Tlz5sIneP+BvdHxaF1DvaIpsM9LnDGMlXSXCcZO4XixE6dOFixSS9llC32Rq2uqkYUJGyLWhBYxJgpVMTJHhkfAimZ3zlq0YD5klO5IciyatIsAq0yvKUhThUiWASymKtW1geoqP72mC2puw43athkwFX4JNsLGChzYnc9UcgVr+7GBH725b21XUyKVzlrFw4Oxt48OvrjjWDmT02sDUFMEcucSig6hICVgIDPCAZ1ZLazN8xpDv2kMZ+Hsh0EhawFjdwwN6IYOMjUeT63fewp5JxuD3v5IYjiShAkiAFuD6sqnMyCirN/AndoQCwirGSQ2CKaiyJyWymapF6+poKDeeXl5TYepOOZT+NcKgisEfHLiUBTErjc3N1VXBcbiWVXW8yDneeuzD66b1eTt7knohhvzKpvlMpETQYawjj/3zC8PjKutV1zjK8YeWNNsZRMRy+1WOITWEZeEsDYh9E0gYYwqUyYEAmbYsbgElEV4FouuFi3KJQkYdzSRaW9r/MO7L/+Xn75QKldBM4HeXR10z2ithxUa3eF3LgwqRRGeUvngAuyChek73/nOY2hPPL5p06aOWbPmzOmqb6gHkQJ7cPgc2hk9oxzUSHhVgciiMgESwuMrlIMHP/0ZYbLGkecXsi6Rmu0obQ7Tnb5c73BB+GV897vfBTb1zLPPbHjzTfAVBLLAGYdMuQy5i4hRh21U1pyV5Ape4nIUFMr3DBdqxOWc7j49d+5cME5gqqKHZwxm' $Logo &= 'xH6hBVaqF7bGc14uxdw4sbskZBDHcfzDCn7kJoAvTDJR7XxWe/s9d9/X1dEFD5N0OrFp01sH9x9CEF51dVhTtLvvum/RomVYukVywqcIDMFR7OQcsvClFVMSO5nyq5UbJMuDGIWCVWvXXr//0P7XXnt1sH8QOVBe+fXLKMV42813zp0774brb+nt6/3Zo48ODgzNaG/jWGxLVOfVDE04xlwoT3EhhJDNKoFrrrkWzPLE8ZM+vw+syzZtsVQCJpHlOIAGJIBtaXIEkDKtWJaDJBl2CIkohEYPx6nHsmXQtSim4x233XbtVdfErdLIKPyJs1q131ancaJVZBFXpqQmulpf7Q/4/BdMUwMe34xQoNZrDI2zbCKcfTE60DnIE1pD1f4TfWPffn7ziztqYD8fyuR2dw9lxhK4dbAuBE7CnJ5RKU1nhIoko+aq4BL4kqEafxF0IHXDnIYD3c3Pbj8GNzlT1W2EzUW3gwHG0DQ95E8nM0PjiaFIiiJ4/R7EXeIhs+SmwAejYYNbiavseAy12uc2FAoXra2rdX0QjWr5nU8DEAGyOP0Y6eqaGlVTMbiargFIBGRkWfiz6urMrln1G7cc1DzuSGx87bLOxe0Nhw8cyFKVErAUBBMTAGgoHNWmGaiR/uudpxtW3imlRi7rUAqJ8YPDoxBrMUl4JuC1lLkKgSpuLbgImycxd0hfdxQF4boqArYYirEb+YRoJD0djI/Pbmm4clH7+u0nXUGfKxObPaMjFKwdGurnjN6SCE4rWcS1aqtrKnUjB0+DfP3ggw/ecMMNKGUIj6lXXn4Zt8bohdGgsnu9sLM6qlil0Vig6wluKDsGvQ0XBBe58/Y7br7l5jmdcwQzwM7zdZzFBaGZioi0Iv+zDV2yhIh6dOIcRump+h/savDxRSUVuGZt2LABuDdCv+vr6sFloZ5CdwF7OWPGUqeYIzvQ5jAD8YyIUwHxBC0FO/nMf//v8KMDA66sBDOpkiMaUr2hjIXw' $Logo &= 'enB6LkDX6QcFo2PDg0PoCnLhuITShknCns24COSnD8NQ7/hlyPyJgnkzWmfcdOONHW0zhVfGLx575GeP/Qxkr6+vv66j895775kzt1PgAAg+R+OYI+bhRYFgAOWwab29IZ1hAwejgqwv4P/Cg1+KReJPnHwsHKpGFcW3N7+9dNGSWR3tcPO9795P9nT3/PwXj8LfjEAi0yQzFATvAgsmDKRMtd1xcm87F+m5JZRQKHznXfdufvvtbVt3y8oAhM1gOGjh8vkcR+br7EpicSH1guBfdv48oQ1MlDrmPKCq7tFRI2B8dHxwYHjmzBk33HCrXtVoRZLp4QjSFLt9JoDecjZLZ5FvsQrWwhH4ilvXLuYNg4PPrg60Bn0DownqJKNexCE4RR/EP8MEwgF3cWt/9+hxLQqBGSvPF3KrBpG4MudRmBhJ5hOMLIS9ZldDyK9pebgS6MoVXQ2v7u9+Zn3GQrEmt65AQiQ/b9a9IARhE2gZ8D+vTvnFFFmXSU9KxLPQUVBn2cXkDwdT4lFZKZqaS0+GPFpdFYiR5kf92g+ooWzf+Xp5ndfxNdBQA36BJAiEAWRUWH2XL134zrYDVtkyVNfBfVu+8uZziOXAuwZxL3Gor53JW1ZKZaqlHVxyixmsTvYdfvbpzQ9FBiRyaCffMVmkwsPhrJmUK8rpcTpO0tGhGjvQUllmKY3nJ9QVESqJJmJcWPqyVFPRgzMl2aORKaywfMlC4S4hsxwsUonE0lEE3ADUPbPQyQ3BgPAEg9EeYY8HufWgnT4NSgrOcUZlBRcXiUNATJYuXYrSNYhUh4KIr1Pr406/4YKg2o8//rgJNIm1HOdSgD2QuQvRCKLn09dXcDrgUJRrBPvcvXs30Lmj3PC6xdOdW+ZAE/m7wJ/AS6D9wIKACwp1SkSqnq26F86Kx+JvrH8DLGQSYIi7X3bZZbA/va/cI4YFHBGvA/xMuDDwfrt6MUZeHPnbTigJsZtECQ1ikqLgPS1buvym' $Logo &= 'G29ubmkVXQHNPbjv2MKlXRDN6uprr77mKkyIkiDfgC24h0EPDFFepyLK2ZE21MjKFF0slZTAHvLhUBgeXLM7OyHNeH3uY4cTB/YdGB0ZGhwemNHc3t4+a9HiJQ//7Kfon0bznsOIGEklGEqRLqAwhtOg0kKMqwvXfuWPvpqKxze99dZhxHm1t3vgyiMiNkgAkWUR0WmrtHbaYzt+nkP9cYBYw9FIDMDXQN/I6kuX/+VffPOSleTgMBBJAG5yGZpuUOJYkAL2Klb5suTDG3QbDT63qamuC21uTf295bM3HT69deeRpFQ2dU3G1STmD7IiSuDIbqOkIGuklYDFGHeX4DScL8VzkteoDbg5WFoS2JfQmml2mnoD7C0aBe6AQYDFXrug9fVlszfvOj5+ajjQWqOTCYmMMexZYrksqkOoe8jmj1CN8UgCaUqrwwGvx4xm84pEYjMIsOwiZlpgxlYdcHc2AGJzfYANhOC8jr/88svPK5kxoCtI2SCp+MSihWwuKAWWcVdHW1tL/dG+iGkoPeNSTmlW/IbOuYop+ami2jRcUTHgAX+gqrq2mEmagZp041Jf22qN1p/CqgUJ+7bdXbJXFLtagTMJS4mF/zvJuPBNYnyGUBrO7IXDOG9JHoY9kUtSQehSQqmrDSFj9oyG6nlzZqWS45JKua/ViZSOkG1ntrWBAk5FoiZJ1iB8i7kJ82SSGwRhkL9JVbYwPiCXoHSQkd3cnCs7PODCkmvhyqj7edttt4maNE6wiAgwBPMDFT4vduWY7kUu0XXcQIjj3PB02K48eCpTESltgtzwvPjqTBun9NbZHge9/drXv3b3PXcLOFHcwtH24DCGMT/H4ziqHtjGt7/9bXRVfHUu5VTO/zC8v7j+PCRs5AqhHNQYC4zg9u07ddMb8JMosXTJUkRBQseEq2E6m9741lv1dc2trTMxzBDXFS5Lls6XE8UcVAiSlSbiEKk5wcPslufV1SpE0Qt3Q/uo8tDoUPfp' $Logo &= 'U2Bp2UyuKuybM6czFKqG1pLOZ2OxyJGjh1WFkt5JhNDkFbbVE11mqn/uWhrvk1lBtgd65fLV3/zv/9cPf/wfL730EooNYzC8fpB5E2tXwAdWOcdeZ6qVJ59O3lbIfoSFzAZmcMc0zA7JtNt0z5nX/uUvf/WO2+7MpBJDo2P7+8fzGCJdRVwp+zOwT20Bse7ktlvOFQAThU1dQp8vtHFJDwmJ53++5eDweBo57WEbtwsxgKCAwGO4NM0wFTA2qgwNNlAo+lXVpytFWUrmKV27HVWAY8miRKE4g+OJ3T3DnQ2+No9vLJZBUs7OhtB/u2mZkS+8seNYKpEp+kyDLyWLFJnQ5xSVtC+rANEB3g61deHlXc3RRGbzvm6oY16fWspTaEshncunsq5UVte1kNck5O2Da0Aezut4hGKcV651YYbZt3efSMIoXGM5H2sBosFVl19y9OfPgpBWB2ssPSSpXgP2J+LqquArzO8VgrlkBem11XJRMz31XSsM8B0FqiOlaDKxRZNeVTUymzgpuawS6Xu5LFlhs5Yrz8iSRfkPGAcT4evFLKGzwsKXz2Ab37DEVexwJRUpI+WSV152MzBHlEVGR8DfnFhrQHTvOxpOdJ5DyAxu0G+mz5grgTXXRbQ2blP3T7WZn1ciyEp3L5NbXV3dBXTPYXXvO6NEa+f2vhE2aOdQJcHV4EnxviVtfvsJJUl+shEweEEcP3EC7oP19U0d7bMjiSjiTlH99Ec//jEMf0je+fBDj3bO6gJTKXNdDF0mO/3m4/3P7e0dTGTcmlTj1TkbGD8DV7KG71bKKgFjXDen+Wu3XgYRWCBUXKJ55Ic/+N62d7eAHEfGoi2tTWsuv7S5pc3nCYyMjvz4R//+yssvqoqOCsFUf3BiKoMT8jDTl6kImBA33ndaV865jtldX/v6nzS2tPzskUdOnexOn+itb4Afv0cA6BDDbVdmhdJqC91FFg4H6Uw0GkdYPnIS19QHb7jphnXrblx7' $Logo &= '9XVk8JfKA8nMzpPw6Im4RuMRHeykovgbzi8UsT/npmqSSbIEVLkuqIlZcuWc1r+8bc3fPb05crgvUqoBnfCCi+CmmipRjhx0NYc/wp0Taa2x5oZls+9b1blp1/F/e3Kjy9QRm8lMmjuGY6Kp4/HUY4Z84+KZsu4ryxmkNQhq6tLWqruvnHcslurpHkqlsjk/vRfTCwRCAyCfz+Qh7ZKDdSQ+f1nHF69eAlvqExv2WqMxy9ByWQ9dGSyWOEqOij8Xi/YdP6AGeYiiu6fbJmOk01z8LU3NkL0gf0BZAVmXVYkCzSQlGk+uWbnw9Q3rTw4BATeL6ahLh2neJIVAsaQSc19wGFWDAiETE9EIypKLhRxyo8kuQ1XxM0JvKTYR2qQKXi+YvdA+qOIAl6YAMyG+AVtCngqRAs+k2hAFfFBmUTB1PrqAecVfs5jA6ULeo+Gk9IzG0KUrF8cTSWCjpmQnDQMng7UD9AgS8XSoMM46owPx2YhdpQHjIhlJZffK3M5hLDkvNWXq9tSnq7z11Md0th3cz9lTufG+FH/Sxac5bpWq5NRncUCwDyf3V5mUadalcwWoI55s/8DJEycefuQn7bPaZ8xsD/mrbrrllvUb18MRq79vEHP6pw//V31T/dKlKzHpo9ExxVA7G0O5HSefXb8T4pO3NpjnVLiSLUcrGVCQaLK2JXzP8tnYX/lsL7/ywi9+/vPRsRGvzx+JDD9w/QO///t/BMqNn1577ZWfP/royVPds2d3qnaZZvowTF1wQCgKZzPUT3/4hKaPAsMoVg+XNqQ4O3r4yP79+/oH+5OpBMBiuGPItquPTHmTFHJ0K1CJdRIKIPtXh4Pz586tqa4FhHrlNVevvmSNJqnDQ0Nen16iCA+tc2Z9X9BbG/ah844Cx5VgrBGve2lH49ymsFouXWRx1qDH/NK1Sz2q9JM39x4fTg7HUrF4kuwtBLbI4iDD7+moCzcHPVfMbbp8fst1XTN9ZdfPN+6Hvac6' $Logo &= '5GMPBdto5Gq0hhJJfBlPM1ivSIBSAM63hDyfuGoBjArPvXv48EDkQN9IJpLMoFaYgO/yFjKPzW2rnb2q4/NXzLu8sxWFCHcdqx1JZMFdfEDG2G8Y+opUKEYsqw22/VTaUMuKQad/IP7EMIBP/3h4+BCyfz5NGFHmdnUhpwhSKijcGNAnmALm6ltvXPfdHz+qezyUoa5scRpHieOjebXjn50n2iYAFXkKZDu7BQkwHCnF34TnmYvYTlkulrlcA3F+0Z+Ky/Cl2Lzpoj/aJHyAE7rpistQMPKFG9ddi9fX358ANxWYjNA24HcDMwCk8um7Tk2PYvL+3067MOgM7eKfDl8/8MesTLTzgY+Js/NDYyqcG4AtCEBlockixvU3r7/S2Nz4V3/+N3pVVXVd3Sc++clf/OwX+/bubZs1Y8PGDQ0NjW0zZtXV1luUlrXU2Vj3tXXL9p8eePdwfypN2LrkshPhQZxy4U/V/vCaZV+8fqVUwYNfe+OVp375RCYLq7gER4slyxbfcvPt1aFa0PGXXvnVY0/8AjlUmltaQtWhbDrFudZVgdKyowtzLekDmDQOb0fp389+5guIRd29d9eGjeu7u0/v3b0XJS6wuO0VK4rcMU/QDb2mNlxTHYJv5YoVqxYuWNTaMhMIIITlYoFBHqtU7davmttcFfImM7lqXWUjuGNdlxBiOhzPzKoLrmirDZoX5U4rGIHHUL+0bsWlHfU/2nh4Z//YicGIapVEnB2lzfcbXa21a2Y1r5vbuqjBh1wA+Kmuxv+FW1f4TB3lhCHXVrJk6CFgpG5VGo7G8PwY8nTegvmoJhT4zOXzL+toeP3A6Se3HeoZjacyBcrCiSMMbU5r3bVdTR9bNmN2fTAylqwy1euWz+qYWae7yj4VJNHpMBVlWVgfSKaSBUMJGh+M+zzIIrxuXL/9BuQaTAUGSJhkCQdTFIvTPYyPDF9xycq3t2zfuv+kx/Sm8hl6MQzWkh8yrzHOOVmSFKqh' $Logo &= 'whRfGLdlVuyFYUux/8m2P25JYE0i55iEJnjJRKhdkasX8ydporgatqkqJTCxAj7x59bLhUx0SVf7VZevHB2hIRK8UESoINIb5pBFixZVUKXftd+1i0p9L8PdHpTE5PILGuG5vt6evp07dq7f+Oolqy+fO3seDNqHDhzctXu7QtEVeeRQWb/h1SuuutbvC2YIuinNa6r+23uu+uYv3tyx56R3Vr0i0aXApSLjCa/PXL2k/crFszT5PaQTgSlvbtgIb/fu7t7W1hlf+sKXVq9axUHO+oF9Bzes39Dc1OjxecnDSDdgUJE4QoQiRTl6XVLZ++uDbgATAP3dccvdWHSWRZVcx0aH4/GYSF4N3qabBhLEVIdr/FBGdC5aoKrwVYODCNgJiARncaCS+qYidVV7WsMmFrtaYlRUoUcoc7UcXA5GV1NRAqbaWH9hDrWVUF5JcLvOpro/vtGXyhdhYMde/k2UlNQg3qouK2xKiI8hCdYVb/Krn1w5S9EUst0Xy3YKNR5bHCBZsB/qIElCwxAxRlCwVE1vrfZf01W3sDlgGl7hw8/e3rhMSZOsgKGkk1ncIeTVLmsLLW8I4M0rCg0Lg2yS8DV3qzLuSFVg/7/ThEUB+g20HJjrgbZjStBenpMFYFLZ5AMfv/vgP/1btlDUFRhOYDoxCCkGD6HkzDwEONp2meRPbpUypfjn4i2xy9lm1y4heDL0j8Y2ML4O60FFscfmORh0Dfy+mPG71Qfuv8fKpigSgptTxQRxeSjsAd9Z8R4vCnb/XfsdUxFRF5xxwYIlAF9JQlJUeKAjd8L3v/89UzMbb7oNNPQzn3oQZRA3btyMOXfy1Knvfe974XDNurU3pmGhTmfhvXDzko5t3SM7uocL8YzkNQyPSeUOk9n2hW1/cc8Va+c1w5ibyuaRmh0uws89//TLr7wUiyXh+dfQUL127bV33XE3XAMw4199/TdPPf0k5NzWVnKDgQkcn+glF1UtgSCC7ZH31zQw' $Logo &= '3/NFNlioJ93MXW+CYTg/ISkM1q+oV0qR5u+tuZJMpwB0c14EEQDFWXeLhItX+/RmTRGlnQyqSF+m3D7sey1xZUrZ7b+YyuqVXwVVcRtGR71xljOsfAbVTQpUNEzGwKb9utbUEqa4x8qgH3Z9lUmGRpQqIHsQRN6Lxsn8VTyLps1prptjl4iobEVQ1WQWUyCPedSIoIf/45oguKtXr4bXKVAj0GI42+iaRnZySRuLxtpmzPjsPTf9+389ZXrCMHmQUqbIGGSJFyJFk0qiQC+5RZBRsuTi2CL8YzmJNygiVegk9J/4k/AnEuKz1iyLAEhiJ0V8UmFHDnC3YJeRStikkyDDADBGMvD7Pn13R1tjb/dpx2NNqCl4BKjXeJzfqSm/ax8Q/FUsIeKGJRQKcnNMOlXh4PDg8Nub3nl79eZLLrnUssqrVq35xH2f2rvnANDaXC67fduOt958c8XyFVT9RbNvcf2yji1H+t5451C8YHnBD2Jprdp307L2tV3NMIv0IbxLVcBUtr679bvf/153T/fMma3wzr7p5hvv/+QnvT5K/L7xrQ1//7/+btfuHa1tjbkcGSZt0inyWlEBdUvXVBLDivTxwSkrDJdjmRkm5HGkvIQQDSaDRUwZetnNS5TizWUKk5iKz+NFkDBRC5nz0MiIIKt1fsVP6KhOxmwTXw3V/Vukd5x90CpZ4HPZfFYiJsAjpBC8T05zCtgdayRkuVJg/RrL5ESyA9pZuVFi+icUFIm/8nUc0RpDBWKaSIwjvK++pt4B9jQzGDJd/wc3oayAl8CnFmEx119/vaDRTqZFmHauu27Nse7+53+zxR+oSeXypJtSXXilxO8DG9BdFHyFwkIxjQQM0jY+KU+2UDN4g14AIWR8WLlksxaZ/jibuKi6IvzsixZWM4UWk7mRDSqaVPRprmR08Nar19x8w9qBvlPoJi7hRHWAwezbtw/mQPjgCgXl/2XvWqCbKvP8Te5NbpImafqkpZTWAgXK' $Logo &= 'UwqCQqkgQ2GWijCWx05FLNTHiKCz7OB4juPuzDg+OLM4Hkb2eHY4ux4FV0flNaAMVFcRKSCgSKEtfUgLSdO0Tdo8mvf+vu9jY5YcmZYpFOr3O+Fye7n39tLTL7/8X7+f8HeCg5MKFCagNn/xYrMM42xq+OwlrSxExrELhtfO4JZ/3xyfYHx49eM4GWJfBTOnf/zxJ+ZLFpQ69ny4Jysn56EVq6jiZKdBb5yWmbJw8vBDNU1uh6sLk9Vd7tIFk56aPQYyLN4wJt5kSVbV1J/b/9e9LWYLlgj9DQ9MmTIV8vLE0vns6df/tOXL41/C0tdrcHd22aO6L0jNH5mxFkuHKAk6g9bj8+A5ry1fdPUBIlkjY0W6vG78NIg0EtX5YcXPZFOSEAPW2I7t9/0TvPxMhmud7+t9QCaJEv128de7gKmhEH6owJg0VAIxAIj2fwzcSZLExA3R64uJpbKVJW3t9mNf1mDqz+0DBPRzCZjsoX0PiDiw0IjssyQFqUNfCK+wkvQN4y8SboTBG6KgwJk4QComVDsI7BLENkzC3QBetIMYeVra84VXkA3ck3hHGdSrFf7O1jsnjHiotMRqacZnQVHU4J9wniAQ7Uhk8PDM+I8IfQUOTioZGUOWLPvpzBYLJEtRfA4QEMkHGfv+IDJbVqsFWSn0R+HknGHD1zy+rrPTuaP5A4wtnjr59fZtb40eOWr02LEhmgXCZ/aSqaMuOj3/9t7nXRds2WOzfjp15ODE5FabFW2QRoMeWYLdu3a+te1NZNPRiZuSPPInZRjSXypQYMJo+LDc8vJHIDwF9WLMsSIuIdE+tXjBU+FytPBi9WYOycgdPtLV7Y7T6K6ZSK4yRoQmZiznoCTjSx9KJX7iTDXINEi4JsCJUhgo4EAswoIVzPTNmzdv27ZtbNSOjUzT31ilsxOCpB1PPrHyxZdeO17TGGccFERqmcwMERE4nEMdy0XsQdEghLQqvqYm8xIljOiIRGDe5pRaCJfQ' $Logo &= 'MryXKNHi5cMr7KOZLpwQJCfR4IXplKo8nZZxw4asfWRlt8vR7e5CZhvnUcE64kaFgc3Tp08vWrQIw3q9EnPk4JCuUlBBw+6TT66nZoyKSFqdVf0UFOh/J87JFMjq4LWg+N66hvPwh4fgDzo4N2/5A/qAp08vbGuzoSRo0mo3zM0//XXjZ4HQunn5Q5NM7k6kkpTGeB3ildras0c+/6Lpghl6i1hCELpf+8R6mPuyPpbxYyeOHTNBDXFfBWMCJsROUi6XS5R0I1PfEGTtkFMSrgMYCUEkgEmHQk4G6SAirHTDEZlt5rjZaioM0NZFZQUGgkVFRUy1CdSAMUTQQ4etIzlZ/OX6Rzf+ceuJry4Y9KkevxskAstUpA5JPEniDvAELFgkWKVACsgTUsoBRZxalHzwVVWIgDLA5HjBR/6QCK0dZF99XmqijUvwDRFTM8uVoKAKoQmNmE5qVKSH2GOzTRyT9fM1/4hf4dZ2u5quYkXUADYeG/V5+FP1XcspByeVcJi1xcesm6gj6isvL16wEJJcmzb9nghB+L2HPj28qPgnErGLJklhAGJWP8ofkZeTtjB/RKqByB5jLaUkJINU3njrjZq6msQkk81qGzUq9545hVA0iIhr/j99G/GK57kSPWeUSAZZ6C1omw1hFw35HCrcWIDZhZsVHJEuqcWLF7/88svHjh3DuzOTswQXMAtFTBRCg/WZteVbtr770aHTKmOSFFB6ibAw9UBFJgyMoGCjx7SyEgxRZTtBCQ9JL/JhNK657AUbwuqieS7sMul1QmAhBa2PEcVexCnkEjgMiZimtdtmzRixauUSv6fLYbPjYZg4bkQU5MSJE0jZ4eFjp7WvHRycVK6tym2IM8yf/+MjRw6dPHUSZXaky9CslZE5JG/seNRlMPIrSarFd+WBs1INugB0z0V1QrwBi+X9ne/t2LGzvd1mijd53C6sxtLSlbJad6PeAkK9GmyJTKYhMRhRFbthYDNsPHy5+Sv2' $Logo &= 'MCCBPSK8RtBnDPVAdLuw46iigF2s1lZ/XNfjDy9LH5L+7s4KhP1GrckDboAmMIlUJDpHoiJUpCTD9sTOR6kmvkZqFRiC9kdgC7YIYvSedeCFGP/QvmwFrguL1PsWNpQhrTIUcLWJAUfpfbPvKy5obzM7Oro0KgO1ArpcMgSjwJAKvZ3Qzoq0EfcdqXDwlmKK3nbijh83oWzVQ6/9sfvQ54eHZGbsP/CRrNNt2PDLoVnZyEqhvyvVoGU3d7p9GjWgeve9t//zv/5EHCB8REZ7wsSxc+4puiGMwqo1ToOBDo33HtG2232e3fq+qvtVGCVG36xHZaTrwUMcTBMIyrvLly+HjTHaFlBfQbyiBESRRQAYD3X6zy+eN31MdvZ/vLOr9ttLGsNgQaXtpnlmNqII0aawIOKFkgeZ3lGyrmEmZEo6ENmET1iJfTb7SAdKSLkRVKQGNUmYYvb4fI6LwzISHipZPC43s77R7A+4QFOwAoKSGFOjwhNCbAna9UuWLMG0Y+815xk4OKlcB8AUsqLik48//QRCkM5O99kzZ/Z9uOcfFiy8bWiOy9Glj9NJVFVJVEnI89rt7UePVJ75pgquqxgShKbWipWrMVYp3CiAURhrRtcq2E60/Mb3OdZdp7V3lXtGHg+g+9HH6VxJFHngYE8kNZk9eL8k0Knv1Hf6BXiwAcYrBQUFGObfvXs3SvfQBHN5iI89sSAgShAi5oKqz9cPycr49YbyPfs/3/vJSbvLozIm0+b4kDJMGvtDfkEUqTpxEH/Q+S1SMfzLTQFgGKrUgnBDEkAyAqzmJcgf08q9J4jJoPbmRFmYU3RH0dy7g6HuqroaUBT1siMS+CAupi5stbX+df/+OffMQSf0NfcQc3CQlXw9PsyeOHX8xZd+V3GgAqlkqOKbEhKe3vD08qUPQDgr3oiGMV2YhO3K89/WffDnd/57+/YzVVXwYjIY41aVlT++5ilZUgscfyuIjGY7ZxfmfwLxCQkYOIll' $Logo &= 'PsYiN7LyzxHRGWQ7sA48ePAgnKwGpaexeIWZEuI0ZvmuN5jS04dYWzsOHvzs6DeNDtjNGNIkfaKaCEiqw5Ia7jchmdg8CNinFteR4Xk/HWYR/AGi8uKTYJ4m+NF1bw13mA2yf3Le0KJZd6QkpmA8wOly4GoqlSRENOExzow5R0hxFxbMLCsriwm++xscPFLBTN+kiZPLyx6rra61tFzCurnQeKHy8OFpU6fpDDBKI4TBOqa+/vqrN958o8ViThuc7na6l9xfsnzJsp4wCmtG+8EiNtOtNxivOKG3qcs+ZBTe8BYb85WWlmKLeKVw1t2QMQevKCiY9wkSYp0Ou9PRkZKUUFoyZ+5sd+Wps0fPNFo66t1SnFqfoFInCqIiTqGRFHIYeyEVk6sk2S7krsIAJhs9AUgiuM3dnVbRZx9qkvMnjM6/fXRygqaj3XL2nBl5NyTFAmQG5jLhReooyHohQFlR+sDfaf/HwaHs+XrulQ8rtrm5wxctXpiUlNze1h6fEP/Rwf17/vKXQUmpyOR6Az5QQnVt1Yd7d9vb7NAqxtJKSIqfcPuk9MFZPSyVo7wvcFyVJAZSvQSMcitGKpE8ErbglZKSErjvQToP6SbGKEwPmLi9BbwgiGar9ZvzdaGws2j27f/82KJ1D8y6d0p6bnyn1lUdbv3K1XrO2XrO017rtZ/32eu7O+o8bbVuW63PfMrddNRrPqbsPDNUZy26PXXt0tm/WHHvnIJxIZ+z+lxdi9UN5R+aciMF/MiKxmNUVVVVVFQU31v84IoH8SR9GKNw8PRX36PFevHZXz27bdtbMGOoOddQUHjnr//1t5On3KHTxQV8/o0bf/fq5j/A+a2hril31LBV5WW/+PkzQg9AfREFJZPSG9DgiC0F3erZMLyDb926FUV71FpUshp6NiGKYIBaONIKfJD6NsKaxWQiuWLE+ohsOuwOc5fH4XS5PUSkyBtkls2SrFab1EqjXpeYCAUlo1FLvEfd1A7d' $Logo &= '091Ny1QiiVxD5M5MwBh/y7KM2x6trLRYLGhRQ14Ox/uBUTg4qfQ8jmHrf/s7b77yyu9bzDDWsmVkDh47fsyax9bdOXX68S8rN23atPfDvbflZDfU1c//cfH7f97Rq293q6R0ODipXGGOhODg9ddfx6jKtDunDc3KIi6NxAZbyUosQQqcFtEhAnMgSRUHyIIoSUS+FC8qSgwIZHCFuMP5vB6X04lGANwQR1WSJIrSd9PKgsgeA3eDlw+45NChQ+gbfri8fNz48TdXyouD11RiHRUjXLWg+L7z9XWvbd6skAQM+1YervzR7HMmk3HHzvcumpu0Wo35oiU/f9KyJff3kE4UN18thYMnvnpovce2eXl5zz333Pbt2ys+rhiSmQmTV/AFzA6AaMfZSOgAkkBAQ+RHcR8qBSai+0vwM1ohpSayRdMXHV8RpctWKwQ+dhM20oKDskaDIKbyyFeXLjXPmjV72bJlMEli/c03XcmKg6e/YnmFJKlEEcItmzZtrKg42NLSKsuamTNnYFT+iy++6OzswimSKK5fv/6xR9f29lsM4GCFw93tUZDP2io2gj4wQk8WDUQ6DrA9crTy7bffbmpqgu7kyNzRhFoocCY7jdEM+5KEJwLNkMHGi8qvhCMtKxhJwR7GGHFcDLPzo6lCBUgymAkmrbW1telpqUuXLr3rrruYfHKE8zip9Cc4qfR8sA4WKdXVVS+88MK+j/bljcnz+uDW6JIkFZwTEX0XFBb87NE1E8dP6vn9BzyvcLS0WZHgMUBxWtbEzIEOqIZjVD4OHDiwd99eh92Rk5MzYsQI1FFQXkF0QoIVIESI4f945Tt3H7rLNgAoKkjpgUQpjL1wOTVAEyVJguzKtw2NDQ0NaKKZP38+KigwprwFBoM4OKlEeCV2Uu+ljc+/+uorer0RcbhGo8bA2zenq++Ylv+b3z4/d1ZRr+48YHiFgw8bKShQ4cAUC/p622HtlZKSnXNb6qBUnVaHE5AWYwgz' $Logo &= 'RWJ6IYNASitXjiWxdjJswS6ebjcqN4iEMIaSlJBYWFiIvmH0CLD0GsuSCf0LDj78GMsZV788MqBX11j74ovP7961RxQVKSnJbW12gyFu1eryRx5do9fE/TBJhYPzSnTeCW/9lZWVqJ+fr6uDaBFClsGDM0zxCUiLofc3whwhigiFRI8xAqj5wycCJvktLS2Ozg7cGQHQjBkzpuRPBp3EakT2D69wcFKJRc8FpiK/97v27Xr+N//S1NwkKSW3y7NyxYM/W/OEzqBPS07rIaMMVFLh4BYskYFWVD7gyX3i5Ak0iTU2NMKjCJEHeAWZK2xlWQbBoETCrmYqxciVQa0S1r9Ic2EHh3B2VlbWmDGjJ0ycMHzYcI0sR8dGAkU/eM5zcFLpK15hp10yX/zgg3e3bNlyrrpmypRJT637p/tLllF9PIGTCgfHFZMioAqz2dzc3FxfX3/hwgVEHghBcNDrJSbfEUpgdXhwjdFoSE1NzczMzM7OxhZxCegn5s43PTg4qTDC6GFxxensfOaZp4+fPLZq9ep77p6bnXVbzxmlz0nF0mJJG5Qm3Ezg4IiujkQvAcw/IgpBLOJ0OhmvAGT4UZa1Wi2LYzDOAo6JXTi3joI9ByeV3vPK+zvesdqsxcWL4vUmrIO/qfHFvB37nFScXRgTcylVIizChOuDVrsNz89IEd2xifEJkRM4WttaBeKGTirGcRQu0hXoEonRekin0+q1epaf+WFGnGGKa6CEWMeKfpDz4uCkciNh77CZ8D7e3/B53U6XU0FdKcFdwUDQoDeoI7b24aDT7YQBjFIgRkdIaKtVWhz2eF1IQagUdPgM1wXC1FtPCHoD8YZ4SSM7uux+r1elVAkSLZwGw1TcPQRBDqOek4rgaLeRH7iogJ4ufi7YQUVar9PLmjjSau52iqIEiUWtRqfR6YUo8KglUhGJTmfFRjb9XIHn4Pjf9uqgCAAABgHQ+pd2JTxfUIKUAMBlBgCpAIBUAJAKAFIB' $Logo &= 'gAcIIS5QiH1PVwAAAABJRU5ErkJggg==' Local $bString = _WinAPI_Base64Decode($Logo) If @error Then Return SetError(1, 0, 0) $bString = Binary($bString) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\pspad4autoit.png", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_Logo Func _WinAPI_Base64Decode($sB64String) Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "") Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]") $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "") Return DllStructGetData($bBuffer, 1) EndFunc ;==>_WinAPI_Base64Decode
    2 points
  4. Version 0.2024.9.16

    5,384 downloads

    This is @Yashied's most excellent control viewer, modified by me, based on the code @boomingranny posted. There are 2 forum entries, one shows active and the other depreciated, and not seen @Yashied since March 2016, so I feel is OK to post this, tho, i'd take it down upon request. PS: Do run as Admin if available, as it may not do what you need without the rights.
    1 point
  5. An about dialog is a nice little thing, often hardly bigger than a message box and usually just a minor thing. But almost every program has an about dialog, if only to put its "stamp" on it, insert a contact address or a copyright. Then there are the thank you notes, which in the 00's liked to be spiced up with some great effects, like vertical ticker, like in the credits of a movie. But who likes to watch the credits of a movie? I think it's nicer if you can scroll the credits yourself, as fast and as slow as you want. So that's what it should be: An about dialog, where you can nicely display the name of the program with your own name, maybe show a version number, and with buttons and link labels you can click on, which will then open the web or email address. Oh yeah, and an area where you can express your thanks to everyone involved. So I searched the DE forum here and the EN forum for example codes for an about dialog with credits area. You would think that there should be a lot of them, because about dialogs already existed in the computer stone age. But far from it: I found only 2 code examples. Both dialogs lacked a credits area, but - yay! - there were LinkLabels. So I was one step further. Here in the forum I created a thread asking if someone could provide me with a nice About dialog. Even the first reply was promising and suggested using a RichEdit and loading an RTF file into it. Nice stuff. Unfortunately I had probably put my request too vague, because instead of the code for the about dialog I was only provided with a picture of the dialog. Based on the tips and suggestions I developed my own code and provide it here. The About dialog is relatively large and consists of a RichEdit that takes up the left and middle areas of the dialog. In the right area there are labels and buttons. In the RichEdit you can show an about text as well as the credits, which you can scroll through manually. Preview Settings I tried to keep the configuration simple. Probably it would have become rather complex to gather all configuration options in one place. Now it became 3 different places, which I marked with double lines well visibly and the code remained clear. To set your own settings, it is sufficient to make changes in these areas. So settings for the title bar and the right area with the labels and buttons can be made. Settings for the text in RichEdit are made in the RTF file, also links for web and e-mail addresses are set up in the RTF file. The finished file is then simply loaded into RichEdit. The path to the RTF file can be customized in the code in the first settings area. Relative paths are possible, e.g. "..\..\About.rtf". I have added an example RTF file: "About.rtf". My example RTF file was created with "LibreOffice Writer". Probably you can open it with any higher office program and design it according to your own ideas. Unfortunately, I don't have MS Office available at the moment to check this. Important: With MS WordPad you cannot edit the existing example RTF file! (The data will be unreadable). But you can create your own RTF file with MS WordPad and use it in the about dialog. The same applies to MS Office: If the existing RTF file cannot be edited, simply create a new one and design it according to your own wishes. Feedback is welcome. Version 0.0.12.2 First published Version. Version 0.0.12.5 Added: Ability to display the RichEdit with or without borders. Bugfix: When you scrolled the RichEdit with the scrollbar, the text and the scrollbar flickered. - Thanks to UEZ for finding this issue. 👍 Version 0.0.12.6 Added: Hide caret when the RichEdit is scrolled with the scrollbar. Nevertheless, the caret sometimes flashes a little when scrolling. Bugfix: Converted the background color value for the RichEdit from RGB to BGR. About Dialog 0.0.12.6 (Professor Bernd).zip
    1 point
  6. Nine

    Help with DllCall

    If you want (may be not) my appreciation of the situation. You are forcing the usage of a DLL while there is multiple UDF (in AutoIt) that can address your users requirements. I would strongly suggest to take a step back to understand the true needs and then decide of the appropriate solution.
    1 point
  7. LarsJ

    Help with DllCall

    I'm pretty sure your dll file is a .NET assembly dll file implemented in managed code e.g. C#, It's indicated simply by the name. It cannot be used immediately in AutoIt. Your best chance of using a .NET assembly dll file in AutoIt is through the code in this thread.
    1 point
  8. LarsJ

    Help with DllCall

    And you're sure that your dll file is a standard Windows dll file implemented in unmanaged code e.g. C or C++ which can be used in AutoIt?
    1 point
  9. Nine

    Help with DllCall

    From help file. It is quite obvious. Either there is an error in spelling the function name or the function is not exported correctly. Not an AutoIt issue anymore...
    1 point
  10. What's New in Version v1.8.0 v1.8.0 (2021-04-12) Added asymmetric (public/private key) RSA encryption/decryption functions _CryptoNG_RSA_EncryptData _CryptoNG_RSA_DecryptData Modified _CryptoNG_CreateRSAKeyPair to be able to select the export format (CryptoAPI-Compatible/LEGACY or RSA) Added create_legacy_rsa_key_pair_example to the CryptoNG_Examples.au3 file Added rsa_public_private_key_encrypt_decrypt_data_example to the example file Updated the help file to reflect the modifications above (including new constants). Thanks @IanN1990 for asking the question that lead to me to adding the asymmetric encryption/decryption functions.
    1 point
  11. Nine

    Help with DllCall

    You are using @error wrongly, it should immediately follow the dllcall as it is erased with dllclose. Please modify script and report on @error as I am pretty sure, it will be non-zero.
    1 point
  12. Well, thanks for that. That seems to work just fine. Here is what I wound up with: ; Trigger Print ControlFocus($hWnd, "", "[CLASS:BCGPToolBar:400000:8:10003:10; INSTANCE:2]") Sleep(1000) ControlSend($hWnd, "", "[CLASS:BCGPToolBar:400000:8:10003:10; INSTANCE:2]", "{!}") Sleep(1000) ControlSend($hWnd, "", "[CLASS:BCGPToolBar:400000:8:10003:10; INSTANCE:2]", "{a}") Sleep(1000) ControlSend($hWnd, "", "[CLASS:BCGPToolBar:400000:8:10003:10; INSTANCE:2]", "{p}") Sleep(1000)
    1 point
  13. Nine

    Help with DllCall

    You should test @error first. I don't think you need "Master.Test.Decryption" prefix. and passing "Master.Test.Decryption.Encrypt.HIDDEN_Key" will not be converted in the dll as it is expecting the true key (I believe). You may need to use 'cdecl' method. Have you look at the dll with dllexp ? It may give you more information about the function visibility.
    1 point
  14. I seem @Melba23 used this to force determine the User directory: If EnvGet("SCITE_USERHOME") <> "" And FileExists(EnvGet("SCITE_USERHOME")) Then $SciTEUserDir = EnvGet("SCITE_USERHOME") ElseIf EnvGet("SCITE_HOME") <> "" And FileExists(EnvGet("SCITE_HOME")) Then $SciTEUserDir = EnvGet("SCITE_HOME") Else $SciTEUserDir = @UserProfileDir ; original sciTE default location EndIf ... which in my mind needs to change and use the logic of the other utilities by using the SciTE program dir when SCITE_USERHOME & SCITE_HOME are not defined, like the core SciTE does. Jos
    1 point
  15. What's New in Version 0.2021.02.28 fixed: GUI styles constants by @pixelsearch. compiled script on 3.3.15.3-beta Files download are in the files section.
    1 point
  16. By replacing this line                 ;_GDIPlus_ImageSaveToFile($hClone, $newImg) With this     $iJPGQual = 99     $sCLSID = _GDIPlus_EncodersGetCLSID("JPG")     $tParams = _GDIPlus_ParamInit(1)     $tData = DllStructCreate("int Quality")     DllStructSetData($tData, "Quality", $iJPGQual)     $pData = DllStructGetPtr($tData)     _GDIPlus_ParamAdd($tParams, $GDIP_EPGQUALITY, 1, $GDIP_EPTLONG, $pData)     $pParams = DllStructGetPtr($tParams)     _GDIPlus_ImageSaveToFileEx($hClone, $newImg, $sCLSID, $pParams) The JPG quality can be changed, also the generated PDF-s are smaller than expected, I think because its built with 72 dpi, the paper size have to be increased accordingly for print jobs
    1 point
×
×
  • Create New...