Jump to content

Sunken Edge Repainting Issue


NiVZ
 Share

Recommended Posts

Hello,

I'm re-visiting an old program of mine and trying to add a useful Cropping function.

Here's my best effort at explaining what happens:

1. Run code and see GUI - thumbnail picture preview is blank but has sunken edge

2. Click the "Change Thumbnail" and choose a picture

3. If the picture is square it gets used as is, if it is landscape or portrait it pops up a child window with a preview of how you want it cropped (top, middle, bottom for portrairt - or - left, middle, right for landscape).  The 3 preview images all have sunken edge that work ok and you click on the preview of the one you want to pick

The issue is when the image is set on the thumbnail on the main GUI, it loses the sunken edge.  Can anyone see where I've gone wrong?

#include <GUIConstantsEx.au3>

#include <WindowsConstants.au3>

#include <StaticConstants.au3>

#include <GuiListView.au3>

#include <WinApi.au3>

#include <SQLite.au3>

#include <GDIPlus.au3>

#include <GUITab.au3>

#include <Date.au3>

#include <String.au3>



; Hide system tray icon

#NoTrayIcon



; Use Event mode

Opt("GUIOnEventMode", 1)



Const $ProgramName                     = "CropTest"

Const $Version                        = "v0.1"

Const $WindowTitle                    = $ProgramName & " " & $Version & " by NiVZ"



_GDIPlus_Startup()



#Region ### START Koda GUI section ### Form=

$Form         = GUICreate($WindowTitle, 520, 520)



$TabHost     = GUICtrlCreateTab(10, 10, 504, 500)

$TabVideo     = GUICtrlCreateTabItem("Videos")



   ; Video Tab



;   $grpVideo         = GUICtrlCreateGroup("Video List", 20, 40, 300, 460)

;   $lvVideos         = GUICtrlCreateListView("Video Title", 30, 60, 280, 390, BitOR($LVS_SHOWSELALWAYS, $LVS_SINGLESEL, $LVS_REPORT, $LVS_NOCOLUMNHEADER))

;   GUICtrlSetBKColor(-1, $GUI_BKCOLOR_LV_ALTERNATE)

;   _GUICtrlListView_SetColumnWidth(-1, 0, 259)

;   $btnAddVideo        = GUICtrlCreateButton("Add Video(s)", 30, 460, 90, 30)

;   $btnDeleteVideo    = GUICtrlCreateButton("Delete Video", 220, 460, 90, 30)

;   GUICtrlSetState(-1, $GUI_DISABLE)



;   GUICtrlCreateGroup("", -99, -99, 1, 1)



   Global $grpThumb        = GUICtrlCreateGroup("Thumbnail", 330, 40, 170, 160)

   Global $imgVIcon     = GUICtrlCreatePic("", 370, 60, 88, 88, -1, $WS_EX_CLIENTEDGE)

   Global $butChange    = GUICtrlCreateButton("Change Thumbnail", 360, 158, 108, 30)

   GUICtrlCreateGroup("", -99, -99, 1, 1) ;close group



#EndRegion ### END Koda GUI section ###



; GUI Events

GUISetOnEvent($GUI_EVENT_CLOSE,         "SpecialEvents")

GUISetOnEvent($GUI_EVENT_MINIMIZE,         "SpecialEvents")

GUISetOnEvent($GUI_EVENT_RESTORE,         "SpecialEvents")

GUIRegisterMsg($WM_NOTIFY,                 "WM_NOTIFY")



GUICtrlSetOnEvent($TabHost,                "TabChange")



GUICtrlSetOnEvent($butChange,              "ChangeVideoThumbnail")









GUISetState(@SW_SHOW)







; ## Main Program Loop ###

While 1

   ; Wait for events

WEnd







Func ChangeVideoThumbnail()



; Display a dialog to get an image filename

      Local $sFilename = FileOpenDialog("Choose Image...", @DesktopDir, "Images(*.jpg;*.png;*.bmp)", 3, "", $Form)

      If @Error Then

         ; Do nothing, dialog was cancelled

      Else



         CreateThumbnail($sFilename)



      EndIf



EndFunc





Func CreateThumbnail($inFilename)



   ; Set to middle by default

   Local $crop = 1



;   Local $hLblDC     = _WinAPI_GetDC(GUICtrlGetHandle($imgVIcon))

;   Local $hBitmap     = _WinAPI_CreateCompatibleBitmap($hLblDC, 88, 88)

;   Local $hDC         = _WinAPI_CreateCompatibleDC($hLblDC)

;   _WinAPI_SelectObject($hDC, $hBitmap)



   Local $hImg         = _GDIPlus_ImageLoadFromFile($inFilename)

;   Local $hGraph     = _GDIPlus_GraphicsCreateFromHDC($hDC)



   Local $width, $height, $newwidth, $newheight, $x, $y

   $width             = _GDIPlus_ImageGetWidth($hImg)

   $height             = _GDIPlus_ImageGetHeight($hImg)



   If $width > $height Then



      $Crop = CropLand($inFilename, $width, $height)



      ; Landscape

      If $Crop = 0 Then

         $x=0                            ; Left

      ElseIf $Crop = 1 Then

         $x = ($width - $height) /2        ; Middle

      ElseIf $Crop = 2 Then

         $x = $width-$height            ; Right

      EndIf



      $y = 0



      $newwidth = $height

      $newheight = $height



   ElseIf $height > $width Then



      $Crop = CropPort($inFilename, $width, $height)



      ; Portrait

      $x = 0



      If $Crop = 0 Then

         $y = 0                        ; Top

      ElseIf $Crop = 1 Then

         $y = ($height-$width) /2        ; Middle

      ElseIf $Crop = 2 Then

         $y = $height-$width            ; Bottom

      EndIf



      $newwidth = $width

      $newheight = $width



   Else

      ; Square

      $x = 0

      $y = 0

      $newwidth = $width

      $newheight = $width

   EndIf



   _GUICtrlStatic_SetImage($imgVicon, GenerateThumbnail($hImg, $imgVIcon, $x, $y, $newwidth, $newheight))



   ;ConsoleWrite($inFilename & " X:" & $x & " Y:" & $y & " W:" & $newwidth & " H:" & $newheight & @CRLF)



EndFunc





Func CropLand($inFilename, $inWidth, $inHeight)



   Local $himgL =  _GDIPlus_ImageLoadFromFile($inFilename)

   Local $himgM =  _GDIPlus_ImageLoadFromFile($inFilename)

   Local $himgR =  _GDIPlus_ImageLoadFromFile($inFilename)



   Local $CropForm = GUICreate("Crop Landscape", 310, 200, -1, -1, -1, -1, $Form)



   Local $imgLeft     = GUICtrlCreatePic("", 10, 10, 88, 88, -1, $WS_EX_CLIENTEDGE)

   Local $imgMiddle    = GUICtrlCreatePic("", 110, 10, 88, 88, -1, $WS_EX_CLIENTEDGE)

   Local $imgRight     = GUICtrlCreatePic("", 210, 10, 88, 88, -1, $WS_EX_CLIENTEDGE)



   _GUICtrlStatic_SetImage($imgLeft, GenerateThumbnail($hImgL, $imgLeft, 0, 0, $inheight, $inheight))

   _GUICtrlStatic_SetImage($imgMiddle, GenerateThumbnail($hImgM, $imgMiddle, ($inwidth-$inheight)/2, 0, $inheight, $inheight))

   _GUICtrlStatic_SetImage($imgRight, GenerateThumbnail($hImgR, $imgRight, $inwidth-$inheight, 0, $inheight, $inheight))



   GUISetState(@SW_SHOW)



   Opt("GUIOnEventMode", 0)



   Local $nMsg = 0

   Local $retVal = 0



   While 1

      $nMsg = GUIGetMsg()

      Select

         Case $nMsg = $imgLeft

            $retval = 0

            ExitLoop

         Case $nMsg = $imgMiddle

            $retval = 1

            ExitLoop

         Case $nMsg = $imgRight

            $retval = 2

            ExitLoop

      EndSelect

   Wend



   GUIDelete($CropForm)



   Opt("GUIOnEventMode", 1)



   Return $retval



EndFunc







Func CropPort($inFilename, $inWidth, $inHeight)



   Local $himgT =  _GDIPlus_ImageLoadFromFile($inFilename)

   Local $himgM =  _GDIPlus_ImageLoadFromFile($inFilename)

   Local $himgB =  _GDIPlus_ImageLoadFromFile($inFilename)



   Local $CropForm = GUICreate("Crop Portrait", 310, 200, -1, -1, -1, -1, $Form)



   Local $imgTop     = GUICtrlCreatePic("", 10, 10, 88, 88, -1, $WS_EX_CLIENTEDGE)

   Local $imgMiddle    = GUICtrlCreatePic("", 110, 10, 88, 88, -1, $WS_EX_CLIENTEDGE)

   Local $imgBottom     = GUICtrlCreatePic("", 210, 10, 88, 88, -1, $WS_EX_CLIENTEDGE)



   _GUICtrlStatic_SetImage($imgTop, GenerateThumbnail($hImgT, $imgTop, 0, 0, $inwidth, $inwidth))

   _GUICtrlStatic_SetImage($imgMiddle, GenerateThumbnail($hImgM, $imgMiddle, 0, ($inheight-$inwidth)/2, $inwidth, $inwidth))

   _GUICtrlStatic_SetImage($imgBottom, GenerateThumbnail($hImgB, $imgBottom, 0, $inheight-$inwidth, $inwidth, $inwidth))



   GUISetState(@SW_SHOW)



   Opt("GUIOnEventMode", 0)



   Local $nMsg = 0

   Local $retVal = 0



   While 1

      $nMsg = GUIGetMsg()

      Select

         Case $nMsg = $imgTop

            $retval = 0

            ExitLoop

         Case $nMsg = $imgMiddle

            $retval = 1

            ExitLoop

         Case $nMsg = $imgBottom

            $retval = 2

            ExitLoop

      EndSelect

   Wend



   GUIDelete($CropForm)



   Opt("GUIOnEventMode", 1)



   Return $retval



EndFunc



Func GenerateThumbnail(ByRef $inHimg, ByRef $inIcon, $inX, $inY, $inWidth, $inHeight)



   ;Local $hLblDC     = _WinAPI_GetDC(GUICtrlGetHandle($imgVIcon))

   Local $hLblDC     = _WinAPI_GetDC(GUICtrlGetHandle($inIcon))

   Local $hBitmap     = _WinAPI_CreateCompatibleBitmap($hLblDC, 88, 88)

   Local $hDC         = _WinAPI_CreateCompatibleDC($hLblDC)

   _WinAPI_SelectObject($hDC, $hBitmap)



   Local $hGraph     = _GDIPlus_GraphicsCreateFromHDC($hDC)



   ;_GDIPlus_GraphicsDrawImageRect($hGraph, $hImg, 0, 0, 88, 88)

   _GDIPlus_GraphicsDrawImageRectRect($hGraph, $inHimg, $inX, $inY, $inWidth, $inHeight, 0, 0, 88, 88)



   _GDIPlus_GraphicsDispose($hGraph)

   _GDIPlus_ImageDispose($inHimg)



   Local $tData = DllStructCreate("byte[15488]")



   Local $tBITMAPINFOHEADER  = DllStructCreate("DWORD biSize;LONG  biWidth;LONG  biHeight;WORD  biPlanes;WORD  biBitCount;DWORD biCompression;DWORD biSizeImage;LONG  biXPelsPerMeter;LONG  biYPelsPerMeter;DWORD biClrUsed;DWORD biClrImportant; DWORD colormap[3]")

   DllStructSetData($tBITMAPINFOHEADER, 1, DllStructGetSize($tBITMAPINFOHEADER))

   DllStructSetData($tBITMAPINFOHEADER, 2, 88)

   DllStructSetData($tBITMAPINFOHEADER, 3, -88)

   DllStructSetData($tBITMAPINFOHEADER, 4, 1)

   DllStructSetData($tBITMAPINFOHEADER, 5, 16)



   ; use default GDI32 16 bit format: 5-5-5

   DllStructSetData($tBITMAPINFOHEADER,  6, 0)



   ; Choose Colormask manually, example for 5-5-5

   ;~ DllStructSetData($tBITMAPINFOHEADER,  6, 3) ;BI_BITFIELDS

   ;~ DllStructSetData($tBITMAPINFOHEADER, "colormap", 0x7C00, 1) ;- Red mask

   ;~ DllStructSetData($tBITMAPINFOHEADER, "colormap", 0x03E0, 2) ;- Green mask

   ;~ DllStructSetData($tBITMAPINFOHEADER, "colormap", 0x001F, 3) ;- Blue mask



   _WinAPI_GetDIBits($hLblDC, $hBitmap, 0, 88, DllStructGetPtr($tData), DllStructGetPtr($tBITMAPINFOHEADER), 1)



   _WinAPI_ReleaseDC(GUICtrlGetHandle($inIcon), $hLblDC)

   _WinAPI_DeleteDC($hDC)



   ;_SQLite_Exec($VideoDB, "Update VideosInfo set thumbnail=x'" & Hex(DllStructGetData($tData, 1)) & "' where pkey='" & $inPkey & "';")

   ;ConsoleWrite("Update VideosInfo set thumbnail=x'" & Hex(DllStructGetData($tData, 1)) & "' where pkey='" & $inPkey & "';" & @CRLF)



   ;Return Hex(DllStructGetData($tData, 1))



   Return($hBitmap)



   ;_GUICtrlStatic_SetImage($imgVIcon, $hBitmap)



EndFunc













Func _GUICtrlStatic_SetImage($iCtrlId, $hBitmap)



   ; Function written by Prog@ndy - many thanks



   Local Const $STM_SETIMAGE = 0x0172

   Local Const $IMAGE_BITMAP = 0

   Local Const $SS_BITMAP = 0xE

   Local Const $GWL_STYLE = -16



   If IsHWnd($iCtrlId) Then

      If WinGetProcess($iCtrlId) <> @AutoItPID Then Return SetError(1,0,0)

   Else

      $iCtrlId = GUICtrlGetHandle($iCtrlId)

      If Not $iCtrlId Then Return SetError(2,0,0)

   EndIf

   ; set SS_BITMAP style to control

   Local $oldStyle = DllCall("user32.dll", "long", "GetWindowLong", "hwnd", $iCtrlId, "int", $GWL_STYLE)

   If @error Then Return SetError(3, 0, 0)

   DllCall("user32.dll", "long", "SetWindowLong", "hwnd", $iCtrlId, "int", $GWL_STYLE, "long", BitOR($oldStyle[0], $SS_BITMAP))

   If @error Then Return SetError(4, 0, 0)

   Local $oldBmp = DllCall("user32.dll", "handle", "SendMessageW", "hwnd", $iCtrlId, "int", $STM_SETIMAGE, "wparam", $IMAGE_BITMAP, "handle", $hBitmap)

   If @error Then Return SetError(5, 0, 0)

   If $oldBmp[0] Then _WinAPI_DeleteObject($oldBmp[0])

   Return 1

EndFunc





Func SpecialEvents()



    Select

        Case @GUI_CtrlId = $GUI_EVENT_CLOSE

            _GDIPlus_Shutdown()

            Exit



        ;Case @GUI_CtrlId = $GUI_EVENT_MINIMIZE

            ;MsgBox(0, "Window Minimized", "ID=" & @GUI_CtrlId & " WinHandle=" & @GUI_WinHandle)



        ;Case @GUI_CtrlId = $GUI_EVENT_RESTORE

            ;MsgBox(0, "Window Restored", "ID=" & @GUI_CtrlId & " WinHandle=" & @GUI_WinHandle)



    EndSelect



EndFunc   ;==>SpecialEvents

Thanks,

NiVZ

Link to comment
Share on other sites

Try this:

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <GuiListView.au3>
#include <WinApi.au3>
#include <SQLite.au3>
#include <GDIPlus.au3>
#include <GUITab.au3>
#include <Date.au3>
#include <String.au3>
; Hide system tray icon
#NoTrayIcon
; Use Event mode
Opt("GUIOnEventMode", 1)
Const $ProgramName                     = "CropTest"
Const $Version                        = "v0.1"
Const $WindowTitle                    = $ProgramName & " " & $Version & " by NiVZ"
_GDIPlus_Startup()
#Region ### START Koda GUI section ### Form=
$Form         = GUICreate($WindowTitle, 520, 520)
$TabHost     = GUICtrlCreateTab(10, 10, 504, 500)
$TabVideo     = GUICtrlCreateTabItem("Videos")
   ; Video Tab
;   $grpVideo         = GUICtrlCreateGroup("Video List", 20, 40, 300, 460)
;   $lvVideos         = GUICtrlCreateListView("Video Title", 30, 60, 280, 390, BitOR($LVS_SHOWSELALWAYS, $LVS_SINGLESEL, $LVS_REPORT, $LVS_NOCOLUMNHEADER))
;   GUICtrlSetBKColor(-1, $GUI_BKCOLOR_LV_ALTERNATE)
;   _GUICtrlListView_SetColumnWidth(-1, 0, 259)
;   $btnAddVideo        = GUICtrlCreateButton("Add Video(s)", 30, 460, 90, 30)
;   $btnDeleteVideo    = GUICtrlCreateButton("Delete Video", 220, 460, 90, 30)
;   GUICtrlSetState(-1, $GUI_DISABLE)
;   GUICtrlCreateGroup("", -99, -99, 1, 1)
   Global $grpThumb        = GUICtrlCreateGroup("Thumbnail", 330, 40, 170, 160)
   Global $imgVIcon     = GUICtrlCreatePic("", 370, 60, 88, 88, -1, $WS_EX_CLIENTEDGE)
   Global $butChange    = GUICtrlCreateButton("Change Thumbnail", 360, 158, 108, 30)
   GUICtrlCreateGroup("", -99, -99, 1, 1) ;close group
#EndRegion ### END Koda GUI section ###
; GUI Events
GUISetOnEvent($GUI_EVENT_CLOSE,         "SpecialEvents")
GUISetOnEvent($GUI_EVENT_MINIMIZE,         "SpecialEvents")
GUISetOnEvent($GUI_EVENT_RESTORE,         "SpecialEvents")
GUIRegisterMsg($WM_NOTIFY,                 "WM_NOTIFY")
GUICtrlSetOnEvent($TabHost,                "TabChange")
GUICtrlSetOnEvent($butChange,              "ChangeVideoThumbnail")
GUISetState(@SW_SHOW)
; ## Main Program Loop ###
While 1
   ; Wait for events
WEnd
Func ChangeVideoThumbnail()
; Display a dialog to get an image filename
      Local $sFilename = FileOpenDialog("Choose Image...", @DesktopDir, "Images(*.jpg;*.png;*.bmp)", 3, "", $Form)
      If @Error Then
         ; Do nothing, dialog was cancelled
      Else
         CreateThumbnail($sFilename)
      EndIf
EndFunc
Func CreateThumbnail($inFilename)

   ; Set to middle by default
   Local $crop = 1
;   Local $hLblDC     = _WinAPI_GetDC(GUICtrlGetHandle($imgVIcon))
;   Local $hBitmap     = _WinAPI_CreateCompatibleBitmap($hLblDC, 88, 88)
;   Local $hDC         = _WinAPI_CreateCompatibleDC($hLblDC)
;   _WinAPI_SelectObject($hDC, $hBitmap)
   Local $hImg         = _GDIPlus_ImageLoadFromFile($inFilename)
;   Local $hGraph     = _GDIPlus_GraphicsCreateFromHDC($hDC)
   Local $width, $height, $newwidth, $newheight, $x, $y
   $width             = _GDIPlus_ImageGetWidth($hImg)
   $height             = _GDIPlus_ImageGetHeight($hImg)
   If $width > $height Then
      $Crop = CropLand($inFilename, $width, $height)
      ; Landscape
      If $Crop = 0 Then
         $x=0                            ; Left
      ElseIf $Crop = 1 Then
         $x = ($width - $height) /2        ; Middle
      ElseIf $Crop = 2 Then
         $x = $width-$height            ; Right
      EndIf
      $y = 0
      $newwidth = $height
      $newheight = $height
   ElseIf $height > $width Then
      $Crop = CropPort($inFilename, $width, $height)
      ; Portrait
      $x = 0
      If $Crop = 0 Then
         $y = 0                        ; Top
      ElseIf $Crop = 1 Then
         $y = ($height-$width) /2        ; Middle
      ElseIf $Crop = 2 Then
         $y = $height-$width            ; Bottom
      EndIf
      $newwidth = $width
      $newheight = $width
   Else
      ; Square
      $x = 0
      $y = 0
      $newwidth = $width
      $newheight = $width
   EndIf
   _GUICtrlStatic_SetImage($imgVicon, GenerateThumbnail($hImg, $imgVIcon, $x, $y, $newwidth, $newheight))
   ;ConsoleWrite($inFilename & " X:" & $x & " Y:" & $y & " W:" & $newwidth & " H:" & $newheight & @CRLF)
   GUICtrlSetStyle($imgVIcon, $WS_EX_CLIENTEDGE)
EndFunc
Func CropLand($inFilename, $inWidth, $inHeight)
   Local $himgL =  _GDIPlus_ImageLoadFromFile($inFilename)
   Local $himgM =  _GDIPlus_ImageLoadFromFile($inFilename)
   Local $himgR =  _GDIPlus_ImageLoadFromFile($inFilename)
   Local $CropForm = GUICreate("Crop Landscape", 310, 200, -1, -1, -1, -1, $Form)
   Local $imgLeft     = GUICtrlCreatePic("", 10, 10, 88, 88, -1, $WS_EX_CLIENTEDGE)
   Local $imgMiddle    = GUICtrlCreatePic("", 110, 10, 88, 88, -1, $WS_EX_CLIENTEDGE)
   Local $imgRight     = GUICtrlCreatePic("", 210, 10, 88, 88, -1, $WS_EX_CLIENTEDGE)
   _GUICtrlStatic_SetImage($imgLeft, GenerateThumbnail($hImgL, $imgLeft, 0, 0, $inheight, $inheight))
   _GUICtrlStatic_SetImage($imgMiddle, GenerateThumbnail($hImgM, $imgMiddle, ($inwidth-$inheight)/2, 0, $inheight, $inheight))
   _GUICtrlStatic_SetImage($imgRight, GenerateThumbnail($hImgR, $imgRight, $inwidth-$inheight, 0, $inheight, $inheight))
   GUISetState(@SW_SHOW)
   Opt("GUIOnEventMode", 0)
   Local $nMsg = 0
   Local $retVal = 0
   While 1
      $nMsg = GUIGetMsg()
      Select
         Case $nMsg = $imgLeft
            $retval = 0
            ExitLoop
         Case $nMsg = $imgMiddle
            $retval = 1
            ExitLoop
         Case $nMsg = $imgRight
            $retval = 2
            ExitLoop
      EndSelect
   Wend
   GUIDelete($CropForm)
   Opt("GUIOnEventMode", 1)
   Return $retval
EndFunc
Func CropPort($inFilename, $inWidth, $inHeight)
   Local $himgT =  _GDIPlus_ImageLoadFromFile($inFilename)
   Local $himgM =  _GDIPlus_ImageLoadFromFile($inFilename)
   Local $himgB =  _GDIPlus_ImageLoadFromFile($inFilename)
   Local $CropForm = GUICreate("Crop Portrait", 310, 200, -1, -1, -1, -1, $Form)
   Local $imgTop     = GUICtrlCreatePic("", 10, 10, 88, 88, -1, $WS_EX_CLIENTEDGE)
   Local $imgMiddle    = GUICtrlCreatePic("", 110, 10, 88, 88, -1, $WS_EX_CLIENTEDGE)
   Local $imgBottom     = GUICtrlCreatePic("", 210, 10, 88, 88, -1, $WS_EX_CLIENTEDGE)
   _GUICtrlStatic_SetImage($imgTop, GenerateThumbnail($hImgT, $imgTop, 0, 0, $inwidth, $inwidth))
   _GUICtrlStatic_SetImage($imgMiddle, GenerateThumbnail($hImgM, $imgMiddle, 0, ($inheight-$inwidth)/2, $inwidth, $inwidth))
   _GUICtrlStatic_SetImage($imgBottom, GenerateThumbnail($hImgB, $imgBottom, 0, $inheight-$inwidth, $inwidth, $inwidth))
   GUISetState(@SW_SHOW)
   Opt("GUIOnEventMode", 0)
   Local $nMsg = 0
   Local $retVal = 0
   While 1
      $nMsg = GUIGetMsg()
      Select
         Case $nMsg = $imgTop
            $retval = 0
            ExitLoop
         Case $nMsg = $imgMiddle
            $retval = 1
            ExitLoop
         Case $nMsg = $imgBottom
            $retval = 2
            ExitLoop
      EndSelect
   Wend
   GUIDelete($CropForm)
   Opt("GUIOnEventMode", 1)
   Return $retval
EndFunc
Func GenerateThumbnail(ByRef $inHimg, ByRef $inIcon, $inX, $inY, $inWidth, $inHeight)
   ;Local $hLblDC     = _WinAPI_GetDC(GUICtrlGetHandle($imgVIcon))
   Local $hLblDC     = _WinAPI_GetDC(GUICtrlGetHandle($inIcon))
   Local $hBitmap     = _WinAPI_CreateCompatibleBitmap($hLblDC, 88, 88)
   Local $hDC         = _WinAPI_CreateCompatibleDC($hLblDC)
   _WinAPI_SelectObject($hDC, $hBitmap)
   Local $hGraph     = _GDIPlus_GraphicsCreateFromHDC($hDC)
   ;_GDIPlus_GraphicsDrawImageRect($hGraph, $hImg, 0, 0, 88, 88)
   _GDIPlus_GraphicsDrawImageRectRect($hGraph, $inHimg, $inX, $inY, $inWidth, $inHeight, 0, 0, 88, 88)
   _GDIPlus_GraphicsDispose($hGraph)
   _GDIPlus_ImageDispose($inHimg)
   Local $tData = DllStructCreate("byte[15488]")
   Local $tBITMAPINFOHEADER  = DllStructCreate("DWORD biSize;LONG  biWidth;LONG  biHeight;WORD  biPlanes;WORD  biBitCount;DWORD biCompression;DWORD biSizeImage;LONG  biXPelsPerMeter;LONG  biYPelsPerMeter;DWORD biClrUsed;DWORD biClrImportant; DWORD colormap[3]")
   DllStructSetData($tBITMAPINFOHEADER, 1, DllStructGetSize($tBITMAPINFOHEADER))
   DllStructSetData($tBITMAPINFOHEADER, 2, 88)
   DllStructSetData($tBITMAPINFOHEADER, 3, -88)
   DllStructSetData($tBITMAPINFOHEADER, 4, 1)
   DllStructSetData($tBITMAPINFOHEADER, 5, 16)
   ; use default GDI32 16 bit format: 5-5-5
   DllStructSetData($tBITMAPINFOHEADER,  6, 0)
   ; Choose Colormask manually, example for 5-5-5
   ;~ DllStructSetData($tBITMAPINFOHEADER,  6, 3) ;BI_BITFIELDS
   ;~ DllStructSetData($tBITMAPINFOHEADER, "colormap", 0x7C00, 1) ;- Red mask
   ;~ DllStructSetData($tBITMAPINFOHEADER, "colormap", 0x03E0, 2) ;- Green mask
   ;~ DllStructSetData($tBITMAPINFOHEADER, "colormap", 0x001F, 3) ;- Blue mask
   _WinAPI_GetDIBits($hLblDC, $hBitmap, 0, 88, DllStructGetPtr($tData), DllStructGetPtr($tBITMAPINFOHEADER), 1)
   _WinAPI_ReleaseDC(GUICtrlGetHandle($inIcon), $hLblDC)
   _WinAPI_DeleteDC($hDC)
   ;_SQLite_Exec($VideoDB, "Update VideosInfo set thumbnail=x'" & Hex(DllStructGetData($tData, 1)) & "' where pkey='" & $inPkey & "';")
   ;ConsoleWrite("Update VideosInfo set thumbnail=x'" & Hex(DllStructGetData($tData, 1)) & "' where pkey='" & $inPkey & "';" & @CRLF)
   ;Return Hex(DllStructGetData($tData, 1))
   Return($hBitmap)
   ;_GUICtrlStatic_SetImage($imgVIcon, $hBitmap)
EndFunc
Func _GUICtrlStatic_SetImage($iCtrlId, $hBitmap)
   ; Function written by Prog@ndy - many thanks
   Local Const $STM_SETIMAGE = 0x0172
   Local Const $IMAGE_BITMAP = 0
   Local Const $SS_BITMAP = 0xE
   Local Const $GWL_STYLE = -16
   If IsHWnd($iCtrlId) Then
      If WinGetProcess($iCtrlId) <> @AutoItPID Then Return SetError(1,0,0)
   Else
      $iCtrlId = GUICtrlGetHandle($iCtrlId)
      If Not $iCtrlId Then Return SetError(2,0,0)
   EndIf
   ; set SS_BITMAP style to control
   Local $oldStyle = DllCall("user32.dll", "long", "GetWindowLong", "hwnd", $iCtrlId, "int", $GWL_STYLE)
   If @error Then Return SetError(3, 0, 0)
   DllCall("user32.dll", "long", "SetWindowLong", "hwnd", $iCtrlId, "int", $GWL_STYLE, "long", BitOR($oldStyle[0], $SS_BITMAP))
   If @error Then Return SetError(4, 0, 0)
   Local $oldBmp = DllCall("user32.dll", "handle", "SendMessageW", "hwnd", $iCtrlId, "int", $STM_SETIMAGE, "wparam", $IMAGE_BITMAP, "handle", $hBitmap)
   If @error Then Return SetError(5, 0, 0)
   If $oldBmp[0] Then _WinAPI_DeleteObject($oldBmp[0])
   Return 1
EndFunc
Func SpecialEvents()
    Select
        Case @GUI_CtrlId = $GUI_EVENT_CLOSE
            _GDIPlus_Shutdown()
            Exit
        ;Case @GUI_CtrlId = $GUI_EVENT_MINIMIZE
            ;MsgBox(0, "Window Minimized", "ID=" & @GUI_CtrlId & " WinHandle=" & @GUI_WinHandle)
        ;Case @GUI_CtrlId = $GUI_EVENT_RESTORE
            ;MsgBox(0, "Window Restored", "ID=" & @GUI_CtrlId & " WinHandle=" & @GUI_WinHandle)
    EndSelect
EndFunc   ;==>SpecialEvents

I added 

GUICtrlSetStyle($imgVIcon, $WS_EX_CLIENTEDGE)

C0d3 is P0etry( ͡° ͜ʖ ͡°)

Link to comment
Share on other sites

Hi Kovacic,

That's great as a workaround, thank you.

I'd still be interested to know why it's not working as it did previously.  I'll go back to my original code and have another look to see if I can see any differences.

Thanks again,

NiVZ

Link to comment
Share on other sites

The problem is that you have sunken edges which will be overwritten by the image.

Try this function:

Func GenerateThumbnail(ByRef $inHimg, ByRef $inIcon, $inX, $inY, $inWidth, $inHeight)

    Local $iW = 84, $iH = 84

   ;Local $hLblDC     = _WinAPI_GetDC(GUICtrlGetHandle($imgVIcon))

   Local $hLblDC     = _WinAPI_GetDC(GUICtrlGetHandle($inIcon))

   Local $hBitmap     = _WinAPI_CreateCompatibleBitmap($hLblDC, $iW, $iH)

   Local $hDC         = _WinAPI_CreateCompatibleDC($hLblDC)

   _WinAPI_SelectObject($hDC, $hBitmap)



   Local $hGraph     = _GDIPlus_GraphicsCreateFromHDC($hDC)



   ;_GDIPlus_GraphicsDrawImageRect($hGraph, $hImg, 0, 0, 88, 88)

   _GDIPlus_GraphicsDrawImageRectRect($hGraph, $inHimg, $inX, $inY, $inWidth, $inHeight, 0, 0, $iW, $iH)



   _GDIPlus_GraphicsDispose($hGraph)

   _GDIPlus_ImageDispose($inHimg)



   Local $tData = DllStructCreate("byte[15488]")



   Local $tBITMAPINFOHEADER  = DllStructCreate("DWORD biSize;LONG  biWidth;LONG  biHeight;WORD  biPlanes;WORD  biBitCount;DWORD biCompression;DWORD biSizeImage;LONG  biXPelsPerMeter;LONG  biYPelsPerMeter;DWORD biClrUsed;DWORD biClrImportant; DWORD colormap[3]")

   DllStructSetData($tBITMAPINFOHEADER, 1, DllStructGetSize($tBITMAPINFOHEADER))

   DllStructSetData($tBITMAPINFOHEADER, 2, $iW)

   DllStructSetData($tBITMAPINFOHEADER, 3, -$iH)

   DllStructSetData($tBITMAPINFOHEADER, 4, 1)

   DllStructSetData($tBITMAPINFOHEADER, 5, 16)



   ; use default GDI32 16 bit format: 5-5-5

   DllStructSetData($tBITMAPINFOHEADER,  6, 0)



   ; Choose Colormask manually, example for 5-5-5

   ;~ DllStructSetData($tBITMAPINFOHEADER,  6, 3) ;BI_BITFIELDS

   ;~ DllStructSetData($tBITMAPINFOHEADER, "colormap", 0x7C00, 1) ;- Red mask

   ;~ DllStructSetData($tBITMAPINFOHEADER, "colormap", 0x03E0, 2) ;- Green mask

   ;~ DllStructSetData($tBITMAPINFOHEADER, "colormap", 0x001F, 3) ;- Blue mask



   _WinAPI_GetDIBits($hLblDC, $hBitmap, 0, $iH, DllStructGetPtr($tData), DllStructGetPtr($tBITMAPINFOHEADER), 1)



   _WinAPI_ReleaseDC(GUICtrlGetHandle($inIcon), $hLblDC)

   _WinAPI_DeleteDC($hDC)



   ;_SQLite_Exec($VideoDB, "Update VideosInfo set thumbnail=x'" & Hex(DllStructGetData($tData, 1)) & "' where pkey='" & $inPkey & "';")

   ;ConsoleWrite("Update VideosInfo set thumbnail=x'" & Hex(DllStructGetData($tData, 1)) & "' where pkey='" & $inPkey & "';" & @CRLF)



   ;Return Hex(DllStructGetData($tData, 1))



   Return($hBitmap)



   ;_GUICtrlStatic_SetImage($imgVIcon, $hBitmap)



EndFunc

This should fit the image appropriately.

Br,

UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites

  • 2 weeks later...

Sorry for the delay in replying.

Thanks for your suggestion UEZ, but the image has to be 88x88 so I can get the DIB bits to write into a SQLite database (it's expecting a BLOB of specific length for 88x88) data.

For now, I've improved the GUI, by adding the 88x88 image onto each row in the listview :)  Had to learn a lot about images, and imagelist but I'm much happier with it.  It looks much better and also avoids the sunken edge issue.  I'm still convinced the original program didn't have this problem.  I'll try and re-visit it one day, but I'm much happier with the image list and list view solution so will keep the project moving forward with that :)

P.S UEZ - are you aware people are getting your avatar shaved into their hairstyles?  '>

Thanks,

NiVZ

Link to comment
Share on other sites

Hello,

Here is the code I'm now currently using (I think it's a nicer interface).  Commented as much as possible.  Please feel free to point out any mistakes or improvements.

Right click on a row to change the image now, and can change multiple rows at once.

Thanks,

NiVZ

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <GuiListView.au3>
#include <GDIPlus.au3>
#include <GuiImageList.au3>

; Start GDIPlus
_GDIPlus_StartUp()

; Array to hold thumbnails
Dim $t[4]

; Some Dummy Thumbnail Image Data
$t[1] = "" & _
"58045804580458045804580458045804580458045804580458045800580458045904580458045804580458045804580458045804580458045804580458045804580459045804580458045804580458045804D90C9808780879087804580458045804580459045804580458045904580458045904580458045804580458045804590458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045904580458045904580458045804590458045804580458045804580458045804580459045804590459045904590458045804580458005804580458045904B90C1D4BDA6B2C6F4F6B5A57CD21F529D90C5804590458045804580459045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580459045804580458045904580458045804580458045804580458045904580458045904580479047904790819151A4FB867946F2D6FC9496C5AC9666A521657194FDC42191598087804580458045804590458045804580458045904580058045904580458045804580459045804580459045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045904590458045804580459045804580458045804580458045904580458045904580479043B2AB73A533E345F706B2D730A6F8A66295A0B3931284E246A414A5EAA6AEA6A0A6B0D63345FBB633D4B5800580458045800580458045804590458045804580458045804580458045804590459045904580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458047904D70C563ADE5BDD5F976F52778B62AA45CB306E2C30283128353017341630153032302E246B2C0C3DCB4DAB66CA6A33633B4BD910580458045804580058045804590458045804580458045804580459045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045800580458045804580458045804580458045904580459045804790479047908790478081A15B942953AB542543EFC67506F8A620C39512C54305534393C17345530F8449840352C37343838163036303838342C4D248C45CB6E306BFC5F1C2E59045804580459045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045800580458045904590459047804BA083D22DE361F435F4BBE5BDF63FF6BFF6BFF6B7C5F5B57BC6B506F4A5A6E2CB73C19415634794D3A3C38387838993C3845994DF9443B5A1841383C3938383836343634CE38CE6E936BDE5F3D4B1A157808580458045804580059047804790478045804580458045904580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045904580459045804580459045B0D7E22BE2EFE425E4F9E579D67B86F94739273717372737473B86FDC7393738A624F3037349A4DB849994DDA515849594D7A51B93C1C5A5845BA55DA4D9949F7401949594DF840F9483634EF343073D96BDD63DA6BB66B936F726F727373633657194BBE5B7E437D26BA0C5804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580458043B0DBF2EFF3E7E53BD5F776F5073EB6E6A5EEA51A94DAA4DE951495AA96A0A6F0B73CC3837341730794D7A5A353DBB5EBB621B569849F8401A5AF53CB7493A567C565B5A7B5E7B5E3A4E3A5A5834132CD04D0C6F2D73AB66295AC94DA949CA4D0956885EEB66ED66135B5A4F1E3B7D26D9085804590458045804590458045804580458045804580458045804580458045804580458045804580458045804580458045804580458045804580479047C153D3F7F4F9E5F76730D6F29560B354E28322C1128332C3630142811285028CD302C3D522C7834773496343941BA4DD534B634D738F8407838D949B94D3939B83CB838B63097301739F951B63479385734702C6D418C2C2E24322C342C132C132C343030286D284A416B5ECB62F2521D431E33D908580458045804580458045804590458045804580458045804580458045804580458045804580458045804580458045804580458045804BA043E267F4B7E579B6B4F6F2A56AD301128142C3634163017301630373416341630363816301530973C9838B838D840BA409738FA40D93CD838F940D94058385734F9401B499838D840DA40F83C3945193DD83C9738B73C373415301630173416341630163417341630152C35302F280B398B62EE5E184F7D2E580458045804590458045804580458045804580458045804580458045804580458045804580458045804580458045804580459045804BC19DD363E4F79670D6F6A414F243738163016303838173415301734383816301630583C183416345" & _
"9383838373458385A40563474307940393859387A3C3A3C3938583C7A40393858347B40593838345A3C393C38345734583C18381630593C17341630383838381630173438381630142C70302D560C6759531B2259045804580458045904580458045804580458045804580458045804580458045804580458045804580458045804590459045C117D26DE3E375F0C6B0B3D132835301940173416303A3C1838163039383A3C173438385A4038405738B9443A443A3C5A447851D366314D7B483C483B447D4C5D483B407C485D4C3B449A44D65973343A3C7C485C44383C58513149363438385A40183C173459383938173437383A3C173416303938312CEC512E6F7B5B1C265804580458045804590458045804580458045804580458045804580458045804580458045804580458045804580479043D229F3639530D6B2B41353418385938383C38383838393C393C38385A3C3A403A3C5B445B445A44F85D724D5D4C7B44FB50F36E4A4999487E4C7E509C4C7E507E4C7D489E507E505D4CBB4C6A62CB5179447D505E505B445451C86ACE3C7B443C483B405A405A403B403738593C393C37383938393C3838322C3056516F5D53D90C58045804580458045904580458045804580458045804580458045804580458045804580458045804580458049C157D2ADC462F67EA51322C3938373818383A38393817343A3C3A4038383B403B445B443B405E4C7D5957774F497D4C5D4C3766686293445E509E549E545D4C7E549F547E507E509E549E505E50CF65097793447E547E507D4C994CAA6E2B5E58405D485D483940394D565559383838393C393817341A3C39383730512CD066F75A9A1D5804580458045804580458045804580458045804580458045804580458045804580458045804580458047904DD1D9E2EF656CA626D2C1734383816301734383C3838173439383A40393C3A3C5D483C443C447C507C553277304D9E547B4CF372AA517A4C5E509E549E545F4C7E549F585E505E509F587E505E4C5461097331497E509E545D4C5C4C2D6AEA72763C7D4CDB481B5ED166EA3C373417383A3C173416303738383816341530123D326F3B3AFA14580458045904580458045804580458045804580458045804580458045804580458045804580458041C0DFD219D36CF62C945122C173038381630163038341734173438383A403A3C3B407D4C3D443D487E505B59EA7231519E503C59CB6E2D497E505E547E547E545F547E549F585F505E509F585E505F50385DE87250515D509E545F545D50F0610A7396445D4C766E1273283952343A3C183C393C17341730183417341730153032288F62D8569C25FA0C78045804580458045804580458045804580458045804580458045804580458045804580459045C11FE25B93ECB6A8B2C163016303734163016303838173438343A3C3B403B405B447D503E505F4C9E501662287371557E50DA61876AD4445E545F50BF547E507E509E549E545F545E509E585E545E501A5DAA6E30519E547F545F545E54D461CA6E94489E50524DA73052347B443B44183C5A4018341634363817301830353035306C45316BDB313B19DA0C5804580458045804580458045804580458045804580458045804580458045804580479047D111F2AB54A8B662E2816303734373416301630593C183438345B443B443D447D4C9E543F505E4C3B59AC590973CE599D5436666866B8485E547E54DE5C7E505E50BE589E545E549E54BF587E507E503A5DAD6EF148BE589E545E509E54D7658A6A7744BD585C505B489E505E4C3C443A405B44193818343A3C18341630373417388D2C2D6F173A1B19D80C7A085804590458045804580458045804580458045804590458045804580458045804FC087D151D2A924E2B5E342C152C5838393C173438383A40383C393C7C4C5E4C3D48BE509E545F54DC50B459CF40CA720D5EBD54736AEA59DB507E54BE54FD54BB6195597455DC547D50DF58DD549E54BD545B5D6D6AB344FE58BE549D50DE54F765E955B948FD58BD61FA54DD54FB65F45D7B445C48383C7634B83C373816305938193C5028AC6635463B1DD90C9B0879045804580458045804580458045804580458045804580458045800580458041D097D153D2A9056EB51363437383A3C3A3C3838393C3A403A405C447D4C7D509D509E549F58BD501862CC38DB546B6E4C6AFB50716EAC51DC54BF587C59776208398F34B4405651DB54FE581B62F3596F4DB659EB5DD8483C553A66D255504934666A49DD541B66CB6A2F499C5D0E73E9557B4CDC505762F1723077AE593638383C3A3C322C6B5E534A3A1DD90C9A089A047904580458045804580458045804580458045804580458045804580458041D097D153D2AB056EC51363417343834393838343734393C5A3C1A3C5D4C7D505E507F54BD50FB654D5E7655FC54EE59CC72F74C716E8D55DD543D59B56AE734D7449E547C61AF51B948796A68416F347844F7618A45FA50956AE73071389844726AEF409D50B56E4862933C366A08730B4139513056C63049410A772B77703419383A3C31304A5A53463A1DDA0C990C9A089A0879045804590458045804580458045804580458045804580458045804FC087D151E2AB1562D5A342C16301730393C173417343938383839383B485D4C3D4CBD50786AEB51275AAC6AB06EAB59EB72145131668F55DD54996AA74D9340BE547C54946A0E41FA61E95191349D547E547566ED3C786E6841B6447E50DD5470667440DD54EE7248457948B36E6966" & _
"0B3D8F454D28563034308C66C86A6E2C1734383831286A5E34463A1DDA0C99089908990879045804580458045804580458045804580458045804580458045804FC085C11FD29D64EAD663128163016303734353016303838173439383A405B445B447959493D50345640D244CC59295EE9725159D2618E519C5D0D6BEB409D50BC501A66AB66F144D3722941BB507E545B5DAE6A3249CE6ACD40BD547E50F9652A5A7A449A6189628E389C4C0F73465E29394F243A4438345738D06E86493228163036344D28CB66F7391A1DBA0CB9089908790879045904580458045804580458045804580458045804580458045804DB083B11DD21B9462E738F2C162C3630554DEE38F140553C173417343940594099592A3D71303D4C3E509E545C4C74406D510E6273596E51586629772E517C5914622956EA723351ED6E2E4DBD541B592F5A8B66B355E972D3489D547A5D4C5E0B5E7A4C186A684157403C59AB6A2639313039385A3C1738B751C94D4A24353017343630EA34CB66D9311A19BA0C99047A0C7904780459045804580459045804580458045804580458045804580458049A04FB0C9C1D5C36326BAF4934283734105E6E2C7130923817301634D8443562A9410A393349334DF654BD543E503E50D8502E6AF24C6F553166497BEB724C5A892C8E550A775055E9724C66376AAD49EC38AC6E8E510A77105E37664B3D4C494B669948105A6E345C48F75D073551301A3C39385A401545CD494B241530163037343430E951905A9A251A15DA0C990879047904590459045900590459045804580458045804580458045804580458047904DA085B151D26F956F06A512858380F4D2D625649D7441849D451CE4DA82C2C247338564055383149F54C7D4C5C4CBD5074591045314D72556966443D6B2C7A48D55069622B41ED61A84DC72C5134D84C4C6A4C496B66A749A82C5334F7506B66F144CC389A445B4C0F4151345B443834593C16490D394D2857383838162C383CAE30EA6A36427C211B15DA0C9A08790479045804580459045904590459045804580458045804580458045800580479049908FA0C9A217C3A536FCF4D363438382F490A56CC5129396924302C573C593C5A405C445A447B4858405D487C4C7E4C9A4CB54078489C50754077409C509D549D50754079449B4C76409A489D509E549748733C774056407A487E4C9C50743C563C7B445C485C48773C5B443B40593C77406E3053303838193C393C383852302B5EAF5EFB317B1D1B11DA0CB908790479045904580058005804590458045904580458045804580458045804580458047904D9083C19DC25DA4E2E6FEE38373436343228322C353016303A383A38363039383B44393C393C5B445B443A405D487C48593C5C485D4C7C485C445D507D4C3D447D4C7E505C485D487D505D4C3C487E4C7D4C3B445D4C7C4C5C443B445C4C5B44393C5B445B401838393C3A4038343834193839381734393C3938122C6D45EB6A3742BD295C1D1B11DA0CB9089908790479045800590058045804580458045804580458045804580458045804580479049904DA0C7B191C2EF75ECD6AAE34142C16303938173415301734383817301734393837341834393C3A3C37343A3C5B403A3C3A3C5B443A403A3C5C445C443A403C445D443B401B405C483A403A405B443B443A3C3B405B443A383A3C5B40383819383A3C383817341838393816341634383816301630383434300D3D0D67944E1D2E9C215B191B15FB0CDA0C9A08790879045904590458045904580458045804580458045804580458045804580458047804B908FB0C9B1D3A32135FCA66CC34312836341630173017303734163016343738163416343738183417341838383817341738393C38381938393C39381938393C3A3C393819383A403A3819383A3C3A3838343938393C183818383838173416343734373416301630383416301530373416301530322C8E41ED6AB2525D3ADC299D1D5C193C151B11DA0CBA089908990879087904790479045804580458045804580458045804580458045804590459047804B9081B119C1D1B32B556EC6668414F28142C352C373437341630173038341730163057381730153034301530173437305838173417345938183418343938383817343738393C17343834593C17341734383438381430332C3738163016303738163417301734173415301630383413288E284F56ED6AB4567C467D3EFD2DDD257C153C111B11FB0CDA0CBA08BA08BA089A089908790479045804580458045804580459045804580459045804580078047808B908FA0C9B191B36D552EE666B62493D6C2C33301530152C363437341630342C3530322CD2340F56CD2C331C2C14091434281634393C1738163458381838163438383A3C17341734593C173416303638522CCF4DCA51CC382E28122858341730152C37343730132C302CD0340E4EEE6ECF62B94E9D42FF521F5B3D3A7D255C193C111B11FA0CFB0CDB0CDA08DA0CDA08BA089A08990479045804580458045804580458045804580458045804580458047904DA103B191D361C323A3E734ECD5ECB66285AAA454B3D2C412D414D41AE4DF255F73CB23046104804290423000200280C2E18532C3530342C593C1A3C163058383734332C332C333031288E2C7049AF66ED66EF6AEB668A62EA516B492C412B3D4F458E450D52AD62ED6AEF66F75EFC4E9D42BE42DD52192157045804BB0C1D15FC10FB10FA0CFA0CFB0CDB0CDB0CDA0CDA08BA049904580458045804590458045804590" & _
"4580458045804590459047908D910BB295B21BC25BA257B21B929173A734EAF5ECC62CC62CC66CC62AF5ED43C2D1C22000200260426086910030423040304092D0A5A8A4D8D343334342C303DEE514C626B628D66CE6A0D6BED66F2621A633D633B67156B126B0F6F0C6BEB6AEC6A0C6B1067F55EF95ADC52BE467B3A1D323D32F9185A2D9C31BB1459047B087B049C089C089A087A089B08DB0CFB0CDB0CDA0CBA08580458045804580458045804580458045804580459045804FA141A199C299808D910B70CDA0C1B157C1DDC293D325C3A7D365D367C363D36D430030401046510C928D15166186F45E8206A0C3546F35EF066EC6AA9496E5E0C6F0F67126713671367166739675B6B5D6B5F6B7D6B7D6FBE6FBD6FBD73DE77DD73BD739E6F7E631E57FE52BE4A3E361E36DD2D3C1DBA14DD5A3E67FE3DBC105B043B083804370878109814780C7804FB0CFB0CFB0CDA0C580458045804580458045804580458045804580458049808FA18DB2DF8147904790479049A08FB0C3B19571D12155315181EB9211E261E228A14210002046F418B456C491262F059EB283A3ABC46FE4E3C5B386B2F730C6B5B6B7E6B9E6F9E6F9E6B9D6BBE6FBE6FBE73BE73DE73BE77BF77BF7BBF7BDE77DE77DF73BF6F5E633825FA1CD918B7109810700850085008720CB510DA181C193C1D1C19DB149D2DDF561E675E4E9910BB08FA0CFA0CFB0C58045804590458045804580458045804580458005804DA103A1DBB29B80C580459047804BA08F60C4A0446008D1D732E93321222D515DA21460422006A18F2596D418D5174728D4DC91C1B329E42DF4E1F5B7E5F786B796FBE73DE73BE77BE77BE7BDE77BE77DF77DE77DE77DE77DF7BDE7BFD77DF77DF77BF77DE73BE739E6BFC563621540C5008530C2D08C91C06080A040A002D002E0430045208930C1621BB529E737E529A109B08FB0CFB0CFB0C5804580459045804580458045904580458045904580079047925FA147908780478049904DA0C6D042100F01D2E266408440844088504680428044A048924326A756E116A7476536AEA2CB9219E36DD421F4F5F5F7D679F6FDD77DF77DE77DE7BDE77DF7BDE7BDE77DE77DF7BDF7BDE77DF7BDE7BDE77DE77BE77DE77DD739E73BF733C46970C780C570C76101521260409000A042B042C042C002B002B002A042C04F618FC185D087B04DC10FB10FA0C5804580458045904580458045904580458047A08570478085A215804580458047A04B908F80C2504C70CD1152304230069148F45A824450802044908EA3CCE65767A527274767472D43D3C2A5F32BF3EFE4A1E575E639F6BBF73DE77DE77DE77DE77DE7BDE7BDE77DE77DE7BDE77DE77DE7BDE7BDE77DE77DE77DF77BE77BE733C46981498107B0C9A107818DA20F91832042E002A000A0428002500250C470C0800090430003A043B04BB08FB0CFB105804580458045904580458045804590459047908F918D914990C5804590479047804BA08D70C26048904460026046814F255B77AF059A61C0200290C4D4D6C5D5272536E756A74723B3E1E265E2E7E36BE42FE4E3E5B7F679F6FBE73DE77DE7BDE7BDF77DE77DF7BDE77DE77DE7BDE77DE77DF77DE77DE7BDE77DD77DF773E671B219910DD1C7B107A109B18DA2CBC287A0C380436045400B408B10CD31C520C3404320451003000300436007804B908580458045804580458045900570059047804D8149F67BB3179085804590478049904B90C8E042600020065102D356C49EF61B67A6C49431424044804661C8E5D11764C518D59575EFC251F1E3E2A7E329E3ADE4A1E575E5F9E6BBE73DE77DE77DE7BDE77DF77DF77DE77DE77DE77DE77DE77DE77DE77DE7BDE77DE775E671B25B914750CB818DA1CFC20DB1C9B1CFB30BC2C7B105B045B089C0C9B1079147814580C36043700330431045A045B043400580458045804590458045804580478085B25990C7A25B910780459005804790498084E042200000423040B3DF05D325A4A457472736A29292804240045106E55CF693272336A3B3AFD1DFE1D1F265E2A7E36BF42FE4E3F5B7E679E6FBE73DE77DE7B9C7B9C7BDE77DE77DE77DE77DF7BDE77DE77DE77DF77DF779E7319219910750C750C9C14BD1CFD20FE20DD1C9B18FB30DC2CBD249C20591459107A147C147C107B105B0833002F0058045E0439085904590458045804580058045804191DBA2D5A04580478049908580458047A047308240001040404C7242E6A336E546A767274727576526AAC14440CEA3074728E59F1613852DC1DFE19FF1D1E223E2A5E2E9E3ADF4A1F535E5F7F6BBF73DF77BD7B326A946ADD7BDE77DE7BDE77DE77DE77DE7BDE7BDF7BDE7B7C4A9B319D31D81C520C9A149B14BC18BC1CBB18BE14DC245A4DBC285A0C5A0859085A0C590C590C3704370431042D04340038043A045804580458045904590058005808DB39F81C780859045808DB105904580499046E080200210045104B5EEF76516E7676977A747273720C66B6493349546EF77A7676F4617B49BD39DD21FD19FE211E265F2A7D36BF42FF4A3F5B7F679E6BBE737C7752665B77DD77DE7BDE7BDE77DE77DE77DE77DF7BDE7B3D671952545D3251D2286B0894141C291C25FC28FB2CDD20DA2819357B107C0C7D109D149D14BD24DC349C287E1033040D0455043B043C0458045700580455045604590478089A25FA14780479089B29FA1858049908DA108D08010421048518C669655D0C66757675765572135EEA349130B5449776B576B576967AB6651B517B491946FC" & _
"211F1E1E265D329E3ADE461E535F5F7E679F73BE7BB7525B7B1A73DE7BDF77DF77DF7BBF7FDF7BDC77B8567245F0640F69B14DAC184C0C8F10F628382D1829D620931893189820B9249B185B10790C9C0C9D149C145B105A082B00080032043C085D0458045904330033042F0056049908D61CB51858081B3A3C3E980C9908FA10DB0C1215220002040204A31CC5246A4DAC65316E3366A91C4B142E185734D865B776D676D67697761855FC5478727A4AFD1D1E263F2A7E32BF3EFE4A1F5B7E639E6BBE73B956113D7055BD7BDE77DE77DE7BDE77BE7734467145D148D12C334EAF398B108D104D35F34D1556384AD749EE340E35B2209220B724F92CB9245A105908590437040E0407002C0032043804590457045804330057044F04700474149420B12493209B46B8107508920CD410F7109825660421002104210421100F66CE69ED69694D6C45AF498C2076341A557776B57AB67AB67616665B55566ED966FC211E1E1E265E2E7E3ADE461E535F5B7E67BE6FB9662A102D4D9C7BBF73DE7BDE7BDE77F862EB382E4D5239114EB056F43D90108C106B45645DC7656655CD65E850A748A640CF30D124951CF62CFA34B52031140B0429000A04300437043A0458005904580456045804300449048E10530CF224B414DB2D740425002400260449048D082D1563082104C828EE5D2D6E2E724D72737674769572D24DD130BD5D3A66D87AD77AF776B776B85DF6651973FC25FE1D1E223E267E329E3EDF4A1F575E639D6F525123148C4897620E21BE77DF779C775162F0598B1C4C086835106BB1314B10AE18F349496A8B76E765EC61E854C858C958EA54AB3899143404921889284B1808002B042C0431005A043E045C0459045900580C15354F042304480446046A0C8F0CF5104E0001040104000401042504A808121ECD4D9376B47AD17AF076D376B77AB77A9476545A333D3C663A62D976F8761877187B3766D661B672DB5AFC21FE1D1F265E2E9E36BE421F4F3E5F3C6B693446244C484818742DDE77BD7B74621062F15D64182104042D91622E2591103329EF554A6A2C66ED65295DA860A55C8550E9601245560C16356728E93C0C0C2D002F042B044F0437043C043C047A049A0031316C59700C010401002100210005044908E90C0204210020002200020444002A2573729476B77AB576F772B576526EB66ED556B74AF7453D6A5B62DA72B772F972F9763566B95D7776F676994EFE1D1E223E2A5E329E3ADE4A3E5F35562628493C2A342704942D5A6BD56653661166A944251422040E4E34461525F620F4490E6A0C6248490759266D4571446DC560454C4C516E55A644A33CB02C2F042E0433002F042E043204370438009B009910D234D161B40C030021002204210023048A08AE150104010022000204210005008D417362F65AD55AF55A5A4BF636933271267216D5225A46BD5DDC61586A576EB9723562B4597855566EB57AF87A3A36FE1D1E263E2A7F36DF423E5F6F49272C4B4828242400490CD2514C45EA59CB5D6938364E584E584AD7359735B641F061EF61AC5D4669A675A471E371E475656D045DE575C575456D29514F1030002D04330057082E002E0433045904BC00F5184F512F41D41C8818020021000200220024046E11090D290408000D045200F619F82E38379B47172B372FF5263012713A7056D456D8367B419A55D761B9725C777C7BDC727751534D0F66316E9576F966FC251E1E1F265E2EBE3E3E5FAA344B404B4447200104240C4B3CCB55507B2A554A3C775E9B52F224533930492D41AB4DED65CA69C575C471047A2576467A2365E579A371C471E5750F45300833042D0432045B087708300430005704BD00BA080B49723DD038572D510007002200010028003200D20CFB357C1D1C0D7A11753E325EB54E1627B416921671120F164F5A0C6A6D6E905ED555726E306AB872BD779E77FC72F66112662C6A0D6E526ED6763A3EFE1D1E223E2A7F3A1D5B8A38ED4CD96EF86222040108651C306FCF6669484B3C871C6B084C204B384A3CA92C6F662C6AE771C371257A447AC67AE4710365467A657EE47107729324300034042E04300459049D087D085B043704DC00D51CE85410392E497A211C117929740831045108B710BC1DDD199D157E159A15125E5372774ADA26B41E2E125016512252667276F259AE55AC72CF7214773B7BFB72BB6E9972B972B455706AB47697769572985AFD191E1E3E227E32FE4E92453C73DE779E7709210100A414CC3D22144B44261806084F184C3C2B448A3CA7384E724B72C47104766576077B697B0877A97A2476247A457AE96955182F04330430042E0437047C047D085B043604FD04F230E464C3600755791DBC21FD5A1A32FC2DFE291E22FE29DE25BD159C1D375A3272B66EFA2DFD1997224F1EEF29304A3372D7761135542C94516E6EAF76316AD3611666566E956E736A94723372F0698E651352DC1DFD211E223E2ABF423E5F9E6FDE73BD77D2392304410422002204241826046B1449304A3C4A40A8340841AF760872E475457A267B887B8C778D7BAC77297B0476457AAC5D58142E04320434042C04310438043C08370435043D0D1815C748E558A35C33353D36F95E4949B14D3C2EBD469E3EFD21BC1D1752326E9676393EFD1D1D1EF929525E546E32725276F7767151D4447B443655AB5951729676546A336E316EF065CF61AF61B155D445D92DFD1DFE1DFE213E269E3A1E579E67BE6F9D77EF2C26202514000401044410483044406548473C6C4865308B5DB076E671E471E769466E6" & _
"A77AE77B07BAE7B8B7B6676657AAF5558102F04300457042E042E0430043404330035045E117D115829333D6B48D050B0512655A35C2859BC4E1E5BFD1DDD19F935316A96763942DD1DFD19F93D365E327232765272316AB055F161526ED565B261537274767476F26D8E5D724555355631D739DB525D63DE739E6F9D36FD213E269E36FE527F67BE73D9566B3429444934231865304548665C8B708B7847386A3CA730AC619072276EE65D6330833885594D7BAE7B8E7B8C7BC77A677A9055770C2F042F04390456083000330057045B0836049D159E153C21BC44CF4C085D466967656865D34D3E5F3E32DD1D1B32335E30725466F741D8351556326E526E516A8D61CE5995667D779D777B739566D1658E616D5D4B55E950304136253B3E3D639C6B5A635B6BFF7BDF7FDE777D363E269E3A1E537E679D6BEF246A484A4047302534654C8A748C788C7C8D7888348A3C4B59ED40B045EC76ED6663288528A33C655D2766A76164554555865D7159781030082E0034045604350038043A0059043304BE15BE197B1D9444C65868652F62ED658D555B3EDD52FC25BA1D1652735EB452F752D752955652563042CF25302EEF559762BE77FE77DF7BBE773A67755AC834442844340A4D5C6FBD737B6739637C6BBF77DF7BDE7FFE7BFF777E635D32BE423F579E6B374248286744020C2314443466588C7C8D7C8C7C8D7C8A309059CB68AA582D398A6A8F66862843204424A628632C642C6428862CC7387055791451082F04330433003504390832040B000A00BD15BC193245A650E55CED6DD566D762F739173E335614561356D44E5933592F592F5833582F582B1627501E1322D53DDC5ABB529B4E9B52BB52BA52BA4E974E344E5352D65AB84E954E5B67DF7BDE7BDE7BDE7BDF7FBE733A67BD6F9D42DE4A5E631B5F6C0C6950683C01040100221867588C7C8C7C8C7C8D7C6930CF61AA6C876CA8542741AC6DA84843144414322565186320C9518424A6306F519918730C2E043404570830002C000A00090008009C1D7825265D27518A65695DED61564A792AB43AD532712A512A592F5927582FF52A92222E22EC296C21D210B9089B089804B9047A0078049904BA04B8047B19FB215D36DD4E1C5F9752BE77DF7BFF7FFF7FDE7BDF7B3A63F85ABE73DD4A3E577D6B312546248B746734010421002208674C8C788C7C8D7C8C7C47388C49CB5C896C6560CA61AA6DA658643CAB38A92021100735CF24EA348424514D9C1897102C042C042E040A0028000800080008001146313503692B55D06129551356DA327A379A3757332E16931EB51E521EAF193019AE20B244EF482D596D59AE491521990459047A04DC08DB04BB08DB085E0D7E0DBE0DBE0DBC11F92DF8393456F96EDF7FDF7BBD73F8565B677E67FD527D67173E270868548C7C462821042100020046388B748C7C8C7C8D7C69506E451652EE388868EA74C974886C8874A870A9646434503975083031841C5249B91CB6142C042C042B00090008000700080009002966B0456C51275DFA66E554AC5118279937382F2F1A6A19CD198D29524114459240512C7548924C7250934CF1544E6EB13DFA04F90C94311811FD00FD041D053B0DB7257A199E0D933952417821733DF962DF7B5A63F8567D6FFE4E5D5F1C5F8B0C26308A708D78441C220020002204452069688C7C8D7C8D7CAC6CC9242F52AE498964AB78A874AA74AB74AB6CC960CA58B4289810F12C862C5741BB1896104C042C042B04290008000700070008002A66163A3C2E8F55955AAE59CB4D7216701ACD1948218741C959E765E769077228722B72CC6D0D59D054774C383CB3488D72742D732D88766B6E5721FB081A15562D3039333D74312F3D8568B531BD15FA297E63F85A3A5FFB561F5B7E6B932D240C695C8B78AD742414010021002100250C67548C7C8D7C8D7CED7887306318AB59A9608A78CB748B4CAC486F2CD144343971109814AE243045FB28BA10B6104C082C042C0409000800070008000800CA51D92D1E269C46F0515946B73AEE196A25E934CC44AA388B284D142D084D106B1CE638A66167762872B44C5530342C1351AC760C56E6652D5EF810DD083135EE480955F234ED44113DED4C5139BB21DB21BC19F831D9521D5B5D67DB5A48084638696C8B7CAD6C030C0100210001000304673C8B788C7C8D7C0D758A682218440CCD1C4B610C61D04450144F0C5310730C4E08730CB620DB20DB18B91894104B084B04290408000800080008000800B539AE45373EB94A325A69558E490839CA34EF40F038B51879087508D618770852046F08B239CF4D47726976AE38343054300E6ECD45ED4D2D56B23DD335A95D45650461A3588560A658A75CCB54314151459C15190978251D5B7D6B732D251448586A748D7C8C600104200001000104220049248A688C7C8C78ED748C786854220C64108945515A96453729720C520C510C520C710C730CB810B814DA186E0C4A084A08290429040800080008000800BC1DD6318941E944CA44AC404A558959E65D0C31B51CD328AE30EC38AE1CF01C373EBC421E5BFC29F35168762C727440553C5151CC7A8C722E6AEE61D161EE6D4D726C76AB7A2976A569E46464648464A9587235581D3C099C19DC526A08473847688C788C7C6A54000421002100010022004A1068548C7C8C7C8C7C8C7C69746744021002048A0C18461A4EB21471087108720C730C9510B914BA18B5144B084B084B084A042A040900080008000800BE19FE1D3B3294568F4DF044AB34EB400A49A9308730A7280D25D441" & _
"393A1C321D327D3A1D2ABD1DBC1DEB59E976AE6191443155D14836405738312857347744B54C944CF354F554705D0F6A2B728771E464C758133978295D0D3B114B10675868688D788D7C68382204010001002100020427086B348A748D7C8C7C8D7C8B7C68684744210403008E103B5677359210730C96109810BA18DC1CB4186B084B0C6C0C4B084B082A042904080008000800BE15FE1D3E261E4B7D67BD77FC52964EB2517366F266F566FB25BD1DDA291352BA21BD19BD19DD19BE19D43DA87A0B6AAD5CCE50D34855403430543034383944B450D35497505B445838563876407261EE6D29764769E9541A113D09391132497361316DAD7849202300010021040100030024006E1C69648C7C8D7C8D7C8D7C6A7447604630010407081A569B565A29BC18DC18DB18DA1892104B086A0C6B0C6C0C6B0C4B084A082A04080008000800BE19DD1D1D22DE465E639E6B1E4BDD4A366F566B9A363A637A42BD159339A561F639BD19DD21DE21DD21F735876E4A72C75C0D55AD5DCD612E6A4B6E6C6E4D6E4B6E0C6AEE6D5161F55075407C4CDB5C37615559B3610B727239FC081D095A1537297A3159564C0C2500010021002200250425006B088A44AC74CD74CD74EE74CD706864675824186610D94558469631D614B410B4108E0C6A086A0C6C0C6B0C6C0C6C0C4B084B082A04290009000800BD19BF193E2A9E36FD4A5E63DD3EFE465A67776FDD4ADC4A3B5FDC21CE4D42652F5EFB219E527F461E261A3A686E48724A6EA876E87A0A7B2C772D7730772F7730772F7730772D772D77CE764F720F6AB2659561FC5CF950B055F3491719B3310E52D51C97314E08260021000100220026002B08AB1434561356723D7035933DF84D185A705D8940440CAD18752D3942F71CB71890104B0C4A086B0C6C086C0C6C0C6C086C0C4C082B082A0409000800BE15BE19FD259E3ABD421F5FDE3EDF42FE4A996FDE777E67F662F441D0492161A76D35423D3A5D3A3A36344EA872E77AE97A2E77346FF85EFA5A1D571D5B3D5B3D5F3D5F3D635B675967776F557350770F77AE76F2691345B334375131660B5669620F56F420710827000200020401042700700C2F1D935A123EAE188C108B0C8D10EF20B5353752871804041419B8565429AB14881089108A108A0C6B086C0C6C0C6C0C6B0C4A084A08290429000900BE15BE19DD1D3D267E3A5D5BDE3EBE3ABF3A7E67DD779F6FD1668461AA5D83650261C765335255466B66A876C97A0D7737677B6B1D5B7D369D3A7D3A9E42DE4ADD4AFD4EFE4EFE521E571E5B3D5F3D5FFB5AF65A1267F172106A575D965D3166AD726A62343D7008050027040304220027009008322111469452EE1C6C0C6C0C6C086B088B0C4F316B2D2300F118F166CD62CB62EF62AC5E6C5A2A52EA494935EB20AA188B104B084B082B04290009009E15BE19BE19DE1D1E26FD4AFE4A7F36BE36DE465F5B1F4F36672361025D21610261026182654776C67AA7726972B75E7C623E6B9D3AFE291E261E263E36DE4A5E323D325E367F367E3A9E3A9F3E7E365E321E2AFD291A2EB54ECF724D6ED265D5614D5E10664C1826004E040700240028006F0454254B5EB15AB1318D106C0C6B0CCA188C4DEB59AB490304122190626C624D6A4C622B5EEA59A85588512749264548410839E830871C481027040800BD15BE15BE15BE19FF211D2AFE4EFD4E9E329F3ABE42DD3A7767CC55225D01610261025D0161225DE371CA7A7156FB257E425D565D3AFD1DDE1D1D2E7D3E3D32DE1DDE1DFE21FD21FD21FD21FD25FE21DD1DDE1DDE15BE19BD19D9259556AE76D26113452E6AD13C2C10940C2A0426042C0448108E41C46529569356EF208910AA28EC590A620A62CB592404732D4D624A66CA61685147512751064D0545E43CC43CA434A530A6288424421C22102308BE15BE15BE15BD19FC213D2E1E221E53DD467E2E7F32BD365967734AA4654261035D015DE264015D21616B6ABA25DD1D1E2A3E327E425E36FE1DDE52BD46DE1DDD19DE19DD19DE1DDE19DE19DD19DE19DE19DE19DD15BE15BE19DD1DDB25974EAF6AAE5DD34C165DF5409414290005004E08C528A665C5694966B352CF45E83C284D474D68550A5E6955480C7039A95D875968558955CA55AB55484DC44083388434832C842843204218221022082208BE159E15BE15BE15BE15DE1DDD151D2E1E573D2A3E2A5D2E1B57BA4655422D5EC961A55D67596659025DA565F245FA295F421D2ADE1DDE195D323E5B1D2ADE1DDE19DE19DE19DE19DE19DD19DE19DE19DE19DE19DE19BE19FD29F9395B421842AF18CB412C6A4B61EA5C8F38280802048718465183696A720F46CF396A4564346434E53C484D685149456C1C6A45A959CA5D264D074DE648C540A338A43CA43863306324631C421422102208220822089D15BE15BE15BD15BD15BE19BD15BD21BD467D2E5D323E265E2EFA4A9C467C325B3ABB4AFC21BA25EF4D84616361E95D3A363D2A1D261D26FE465E361B26FE21DE15DD15DD19DD19BE19BF19BE19BE19DD19DD15BD19DD1DD5410E5DB269AD644B3C2210A51CEA51E8696761E840644D6461626567762E2D571D912D6955A5448430422422204424872CEA3CC644E73C0839083D0741E640E63CC63C8434622C4324421C2210220C22082208220422047D159E159E15BE159D15BE15BD15BF1D1D2EBD427D3A7E3EFD1DFE213D2E7C3A7C3A1C26BE19BE19DB21F835334AF73D3D3ADD1DDE215E36FD25FE25DC421D2EFD21BE15BF15BD15BD15BE19BE15BE19BE19BF19BE15BC193052C55" & _
"4C968E65469514745493DE62CA8186D356749266A83698269676A4608B40CF13DA85DE450A43C6434222423104320642C6428652045142310211422184218631C6318431C421422102108220822042104220422045D117D117D119D159E159D15BF19BE19DD1D5D3EBD4E5D36FE1DFE25DC1DBD19BE19BD19DE19DE1D1E2ABE15DE191D223E329F425C2E1D2ABE15FD29DC523D2E5C2EFD21BE19BE15BD15BE15BE15BE15BC15BA21B625D03D09564549874D0545053DE63467450445A6388928451C632824458559C465683D6A10EB4D0349E44C05496438432C411442202310020C230C24082408220C220C2208220822082208210821082208220422042204220422043D095D0D5D117E117D159D159E15BD15BD19FE291E269D46DE4A5C361E2AFE251E2ADD1DFE251D2E3D365D369E3EDE4ABD465C327E363D2EDD1D7E3E5C46FC21FD4E3D2EBD15BE159E15BE159D19B431AB4168492545444545454645254166454641C5386330A3348434842C431C2410683DA53C2445C528E9286651C344C444E548E544843463282218220C220C220822082208220C43082208220821082208220422042104220422042104210421045C0D7D117D117D119E159E159E159D15BD19DE199E15BD193D2EFD4EDD5A5C463D3EFD2DFE291D2E7E3A7D3A7D421D2ABD1D9D427B6FDD4E3D2EBC4A5E363C2A1D53DD19BD15BD15BD15B921AF314641E340C238A334C434C430E538C434C42CA42C63284224632463202218240CC72CC434421C2318250C0629A74D0445623C6234633063284224421C221442102308230422082208220C2208220822042204220422042104210421042104210421047D119E159E159D159E159E159D159E159E15BE159F159E15BD1DFF251D2E7E42DE5ADC62FD5E3E5F3D571D4B9D3E1E2EFD21DE46DF6FDD46FE4E9D3EFC219C3E1C26BE159E159E15B921AA3D6545E63CC438C4386428421CC4306220622063208328832C832C632842246324852CA22C631C410C240C260806314549C34083342220221823142310230C23042208220822042208220822082204220822082204210422042204210421042104210421049E159E15BE159E159E15BD15BE15BE15BE159D159D159E15BE19FD215E36DC1DFD259E42DD521E5B1E53DD4EDD4A1E537F675E671C571C4F9C42FE253E2ADE21BD199E19BE119A198C31043D0439E338622422186220A430622442182108210C62186320632084286324622084244220221822102210282DA4288328632C63306328221C4318431022082204220422042204210422082204220422042204220422042204220421042104210421042104BE15BE15BE15BE159E15BD15BD15BE15BE15BE15BD15BD199E15BE15DD19BE15BE19DE1DDD1D1D2A5D369D3E9D3E7E3E3D367E367E3A3D2A3E26DE19DE1D9D159E119E159D157129C438A32C62286328832842244224631C4214220C42104314421421142210210C420C220C210822104310210C4318E528A4306224211C22182210230C2208220422042204220422042204210422042204220422042104220422042104210421042104210421042104BE159E159E15BE15BE159D15BE159E15BE159E199E15BE15BE15BE15BE159E159D159D19BE199E15BE19BE19BE15BE19BE15BE19DE1DBE15BE159E199E159E199D159D159A1D0A29822C6324431C42184218631842142210210C42144210220C2208220822042208210422042104210421042104A420C528A42C421C21182218421822142208210822082104210422042104210422042204220422042104210421042104210421042104210421042104BE15BE159E15BE15BE15BE15BE15BE159E15BE15BE159E15BE15BE159E15BE159E15BE159E159E159E159E15BE15BE15BE15BE15BE15BE159D159F159D15BE19BC15781D0B29832C6228621C2110220C21082108220821042208220822082208220821082204220422042204210421042204220C841C83204218221C4218210C210821042208220822082104220422042204210421042104210421042204210421042104210421042104210421042104"

$t[2] = "" & _
"FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FF" & _
"F7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FBD77FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDE7B3967E71CEF3DDE7BFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F5A6B8C31292521042925DE7BFF7FFF7FFF7FFF7FFF7FFF7F1767ED49BD77FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F7B6FFF7FFF7F3146C618841021042104524AFF7FDE7BFF7FFF7FFF7FFF7FB45A25358939DD7BFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F314639677B6F641042082104210421042925BD77CE39FF7FFF7FFF7FFF7F17630431042D0E4EFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FBD77A5141042A514210421042104210421046B2D31468410DE7BFF7FFF7FFF7F396B0431253504351767FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FBE777B6FFF7FFF7F5A6B292521042104210420042104210421042104282141048410BD77FF7FFF7FFF7FF75E253505312535883DFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F9C734A295A6B314608214208210421042104210421042104210421042104210421040821FF7FFF7FFF7FFF7FED4524352535243504351763FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F29254A29C61821042104210421042104210C211442142114210C2104210421042104D65AFF7FFF7FFF7FFF7F945A0431253925312535CC45FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F5A6B22082104200421002104421864348450A458A558A55CA558A454" & _
"844C63344218534AFF7FFF7FFF7FFF7FFF7FFE7F68390531243125392535BD77FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FD65A21042104210842208448A558A55CA558A458A55CA558A558A558A558A558A458F86AFF7FFF7FFF7FFF7FFF7FFF7FD55E04310531253504313867FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F1863210421108340A458A458A558A558A55CA558A558A558A55CA558A558A558A4588B55FF7FFF7FFF7FFF7FFF7FFF7FDE7B2635042D2535E42C925AFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDE7B08358454844CA558A558A454A558A458A558A558A4588458A558A558A558A558C650DE7BFF7FFF7FFF7FFF7FFF7FFF7FED45E42C25390431CC49FF7FDC7BB97BDD7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDE7BFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F105E84488450844C844C8450C5504751A855EA590A5E2B5E0A5AA9554755E54CA54C7B73FF7FFF7FFF7FFF7FFE7FFF7F9256E42C25352535673D336F74779777947BDA7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFE7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDE7BF75E396739675A6B3967D65AEF3D514AFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFE7FFF7FFF7FFF7FFF7FFE7FFE7FFE7FFE7FFE7F725E8448A450A44C27518845C42026316C668D6A8D6E8D6A8D6A8D6A8D6A8D6A2B5EEE6E4F774F77FE7FB77B4F772E77AC6204310431253545398A627277977B7377737BFE7FFF7FFF7FFF7FFF7FFF7FFF7F977B967B937BDD7BFF7FFF7FFF7FFF7FFF7FFF7FFF7FFE7FFC7FFD7FFD7F18679452C61800004204630C21040100010021044A29AD31B15AB77BFD7FFF7FB97FB57B957B957B957B9577957BB77BFF7FFF7FB77F957BB57B957B957B947BD066844C432CA4182B5E0529A845883D883D8D6E8D6A8D6A4B5E683DEA518D6A4B660E734F774E77BA7F4E772E772E77CC66042D2535043145398A5E3073967B747B727BFC7FFF7FFF7FFF7FFF7FFF7FB97F967B7477727B556F74777177957BDC7FDC7F957B737B72775177717771772635620C071D49254925EE39E71CC5148A2D8B2DE618E51C52777377957BFD7F937B947B947B947B9477947B957B947BD97BFD7F947BB57BB57B957B957B116F6D6243182104C41C8D6A4B5EA9450A568D6A8D6E8D6A4B62A41C263167390A524B624F734F774F7750772E732E732E73EC6A0431043104314539AB620F6F9777747B727BDD7FFF7FFF7FFF7FFF7FFF7F947B967B947B717BCD662F735077507770777077507B717771777177717771776C56C42042080E3A28212F427146ED35AC310E3A6208E520CF5E9377947BB77B947794779477957B947B947795779577B77BB77BB57BB67B957B957B32732A622A5EA945210468356B663046935294526C668D6A8D6A6C66EB45524E10466C668C664F732F734F774F772E734E772E73EC6A0431043105314539AB66EE6A9777947B727BFD7FFF7FFF7FFF7FFF7FFF7F937B967B747B5073EE664F737077707751777077717B717771777177717772770F6B453584108B2D2825830C220400000100A41001006835516F74779477947B947B957B9477947B9477957B9577B57BB57B957B95779577957BB67BF06A6C668D6AE859A5180B522B569352C939D4564D5A8D6E6C6A6C663046CA35F65E4D5AED6E50774F734F730E6FEE6A0E6F4F77CC66043104312535863DEC6ACC66967B947B727BFE7FFF7FFF7FFF7FFF7FFF7F947B96779477306FEE66507770777077717B71777177727B717772777277727771776639A414010083108835EA3DA9398831C93988354C4E5373947B947B7477947794779577957B957BB57BB57BB57BB57B957B95779577967BB67B53736C668D6A4B66A9414C626C6A9252714EB45A6C668D6A4B628C6A0E46AA3517630B5A2F7350774F770F6F0E6F0D6F0D6B2E73AC62042D04312535C849EC6AAC629677947B727BFE7FFF7FFF7FFF7FFF7FFF7F957B9577757B0F6BEF6A507771777177717B7177727B72777277727B7277927B72776739A41C2C4E727793779377937B937B937B9377947B947B9477947794779477747794779477957B957BB67BB67BB67BB67B957B95779677B67BB67BF06E4B660A622B624C666C6E4C664C5A6C668C6A6C66095E2A624C5E6F5A4C5E6C6ACE6A507350772F6F0D6B0E73EE6A2E6F6A5A0431043125354A560D6FAB629577747B727BFE7FFF7FFF7FFF7FFF7FFF7FB77B967B957BEF6A0F6" & _
"F717771775077673D673D673D873D88418741A84188416D5AA83D2B529377737B7377937753737377537394777373326B74772C52E530E52CC42CA3280B4EB57B95775373D1622D52883DE52CCA45B77BB77B5473AB59A450A558E95D4C6E2B724B6E6C6E2A5E8D6A4B666C666C662A626C6E4B6E6C6E8C665077507350770F6BEE6A0E6F4F770A520435042D2435CC660D6FAB62757B957B727BFF7FFF7FFF7FFF7FFF7FFF7FB87B757B757B0F6B2F6F717751770F6BC4284A6DC86CC768C868E764E860E6480A4E8D5A4C56937B937B937753737377537373735373326FD06211672839E750A764C650A324A94168390631E530063D08490855E64CA941B77BD266C550A558A558844C26556C6A4B6E6C6E8C6E4C664C668D6E8D6A6C6A8C6A4B6E2B724C6EAD6651735077507750732F734F774F77C8452535253166392E730D6FCC66967B757B737BFF7FFF7FFF7FFF7FFF7FFF7FB97B757B957B0F6B306F71775073CE62C42CE75C8568657065706670656C8550A8410A4A873D8D5E8D5A8D5A6D5A6D5A326F0531E52CE5302531883D49516568656C83246839E6340861E86CA770866C6568666C855CA93DD266A554A558A558844C8450844C47514B668D6E8D6A8D6E4B662B624B624B668D6A8C6E6C6E2B66517351775177507750730F6F094A4B56663D0431E32829522E770D6FCD66767B9577737BFF7FFF7FFF7FFF7FFF7FFF7FB97B957B957BEF6A306F71775073AE62C52CE76C6670657066706570A440A328C42C084907490749074907490745A328AF5E2735A660A658A3242841A664667083402731B05EC428A76C6570667066746570656C84502735C654A558A558844C84508454844C844C27518C664B628D6A8D6A8D6E8D6A8D6A8C6A4B668C66517351775173517750730F6B8745453D453D042D042DE42CED6A4E770D6FED669577757B737BFF7FFF7FFF7FFF7FFF7FFF7FB87F7577957BEF6A306F71775173AE5EC42CC548A444C54886706670A4402B4E2739856065646560655465686470A32C2C4E283986686458A424096565706560A424D162F262E528E96C65648334832CA328C424262DC438A55CA454844CA4588450844C8450A554E565057B285E2B622A622B6229626866CE6A7373727772775277727751775173AD62042D2535453DE428E32825394539094EED6AED6A757B9577737BFF7FFF7FFF7FFF7FFF7FFF7FB97B747B967BEF6A307371775173CE62C945C945A8410631A77065708444C94528516570656083414331A3496560A338A9414739A67084582949667465708330EB4575731367262D29656568A424CA4168392631905EA554A458A558A45428510649A558A44C656EA666482549318D6A8D6E4B660819074A06772B77517772775173306F106B3173EE662A520431042D24352535463D453904318B5ECE66947B967B737BFF7FFF7FFF7FFF7FFF7FFF7FB97F9477967BEF6A306F71775177306F106BEF6A4C560635A774657084482631E640C764655463394331A345644C844447354839A770A664E87065708558A320AA45B05ED15EA93D074D6670E63807410855C430C548A558A55449559162556FC550A454256AE572E914C90CE8186D628D668C6A0821C90C281D665E277BEE6AF066106F306F717751734B622B5E463D042DE42C04310535C845ED6AEE66957B9677727BFF7FFF7FFF7FFF7FFF7FFF7FBA7F747B967B0F6B306F71777177EF6A0B4E8D5E2C52273D8670657084506739473908456430643C6434643C6424844CE52C6839C7706670657066746670C764C64CE638C428A324E73C6674867065706568A4388A49B2625673B87BD87B2E5EA558A558485908772652C90CC90C165B155F8D66303EC90CC9086829067B5273517351735173727751774B66A749874DC8510431243545358B5AED6AEE66747B9677727BFF7FFF7FFF7FFF7FFF7FFF7FDA7F747B967B0F6B0F6F2F6FA84506352951E534EA4927418670667084500B4EA9410861645064246428642C6558645CA3244735C86C6570667484488450656866706570855C831CE630867065706670656C84444E52D97FD97BB97B9877E750A558284D5767986F287BE645C80C934A58636E5E375F0A15C90C8662306F13677277527372775173AD6A0A560435095E4B66A84D653D8645AC62EE6ACD66947B967B727BFE7FFF7FFF7FFF7FFF7FFF7FDB7F747B96770F6BCD622635494DC87065708558E42CE63C6570667084540B4E883DE86C643865506564644C642C6564A324052DE86C6570656883248939E52CC76C65708554A324C52CA7706570656CA3246839B15E566F6F56556F9162E750CC515867375F996F986F0777A735103A2F4206256A2D103AA7392877996F996B136772777377CE6AA8492535E8552A622A5E0952653D8641CD62EE6ECD62947B9677727BFE7FFF7FFF7FFF7FFF7FFF7FDC7F747B967BEF664B56E530C770856085588558A32CE63C667065708454EA49683DC770656C657065646570656C656CA330A424E8686670656083284F526939C86C66708450C424C424C86866706570A32CEC4927350635C430F3629773F26A8F5ED15E155FBA6F7867776FC66E0D425763365F165FEE39E5726E4E796BB25AB15ECE6A116F4B66663D0431E855C85986452535663DCD62CD660E6FCD62747B9677727BFE7FFF7FFF7FFF7FFF7FFF7FDD7F737B9777CE628C5AC42CE8648560A434E42C463907456670656C8554C945473DA770A44CA440A440C75C65706570843C8220E8606570655CA32C4E522735C768656C64508220E6" & _
"34E86C66706570C640284D0965A7708440B25EF26A6C668D6A8D6AD25A5763365FBA6F0C42E96EBA6FBA6F786B081D6662281D375F905E8C6A4C664B628D6E2635E428453545392531873DAD625073CE660E6FCD62947B9677727BDD7FFF7FFF7FFF7FFF7FFF7FFE7F737B977BEF668C5E4639E74C65708668C540E42C284D66706568A448884147418670A430883DA941285165706570844C822008556570645883302D4E2735A5646568844CA320C5308560656C667066746570656884588434EB4D6C668D6A6C6AAF66B87BF45AE9142B1D4A21E872B96FBA6F0F3E08255073E7416B298E668C6A8C6A8D6A6C6AEA496735AE5EEF66307330730F6BCE66EE662F6FCD627377977B727BDC7BFF7FFF7FFF7FFF7FFF7FFE7F737B977BEF6AAD5E2A52C430A76065686570A660085D6574A44CE5304C5628456570A4380A4A6D56084D6570667084588220C538843C83348328EB45073D8560656884482631C42CA670656C65646458844C84408334A42CC9518D6E6C664C5E5673B87B5146C90CC90C27528566155F9252C61C924E756FE6762821D15A8E668C6A6C6A4C62F06ACF66317372777177517751773073EF662F6FCD627377977B727BDC7FFF7FFF7FFF7FFF7FFF7FFE7F737B977B106BCD66AD622635C42CC32CA438A4488558844CE5308D5A8D5A073D8450A334C9458E5A074D6670656C8560A3208939EB450C4E0C4ECB41A42C8458655C8334AA3DE528A32CC42CE428623902310D46B15AF3666D624B668D6A8D6A6C6A6D66AA41C80CC90CE620633D834182458A35996BB96FC66EE8102A1D94778D62A449225A02564C5651735173527372777177306F0F6FCE66CD625377977B727BBB7BDF7FFF7FFF7FFF7FFF7FFF7F747B977B306FCD66ED66CD628C5E6B5A094E883D05312631AE62106B8D56683DA841EA498E5E8E5A284D656865708554A3286E56336F536FE949425EC1760256A9396F561367893D893D2D4EE845A172C3511467566F776F15677773F2662C5A0A5A2B5E8D6AA945C90C0625025AA2724266CC3DEA45EA45A449853DE618E44D0B4E425EE27E6445EA498E5EAE62306F306F106FEF6651770F6B8D5E72739777727BDB7BFF7FFF7FFF7FFF7FFF7FFF7F947B977B316FED6A2F732F732F6FEE660E6BCD66CD622F6F306FEF660F6B106B106B316F316FAE5EE534A434C42C052D88418E5ED062D0620A4EA272C27A47354E561367346BA441A172C54DE64DC17A433DE44DE251E25163450C4E02524162816A225AC9512B6207214631025AA2762262A520415EE17A027FE2516439E27AC351225EE27E2539E251215E0256A645106B317371775177306F8D5E5273977B737BDA7BFF7FFF7FFF7FFF7FFF7FFF7F957B977B3173ED662F734F7750774F732F735077507751777177306F5173517351735277316FCF5EC8452A52CF62326B52732D526262025A663DC272C27AA945C249225AE251A345C24DA34DC34DC37AE330C172626A626A83492C4EC276E451C34DE27E85492A5A456205560256C27A025EA420025A82722262035EC44DC2768372826AC37A04312162E27EE27E025AAE5E317350735173306FAD5E3173967B737BB97BDF7FFF7FFF7FFF7FFF7FFF7F967B977B5177ED662E734F772F734F77EE6AEE6A5077717771777177717751777177527752730B6B056FC366086B947774774D56826A83768345A272A276884162624266626A025E63410362E359636E4735816A263547396F566E56C172C949C549E27AC351E955AF62AE62E255C37AE359CB41225AA44DC945225EA645C37A8376A37A837288410256035AC351A2720B52306F51735173306FCD62316F9777737BB87BFF7FFF7FFF7FFF7FFF7FFF7F967B97775173CD662E732F77CD664F7750772F73EE6650775177517751775177517771770C6F2352044EC445C54188776F736D56A272A47A636EA37684728841426245394739CB45C845636E2462E4610C4A4262A272C255D25EB05A826A035A626263728549C95113671267E351A37AC3550C4E63662366235E4366654184766445246E246AA945235E0A52084EC27AC749106F52735277306FAE5E316F977B737BB87BFF7FFF7FFF7FFF7FFF7FFF7F977B977B7277CC662E730E730E6F4F772E732F73EE6AEE6A0F6F30735173517751775277076F2456034E2452244E45738D776D5A646E456E04624572246A673D6266C37AE355B05E2C4E446A056E85516F56035E256A4541B15E905A2262446E046223668745D162136B126BC44D8476A551CA49035E26350362056A433D056E66456745845588410362A845C44D6476A749106F52777277306FAE5E116F9777737B977BFF7FFF7FFF7FFF7FFF7FFF7FB77B977B7377CC662E73ED6A2E732E6FED6A4F770F6F4F772F6FEF6A2F6F306F517351770773C36AC4456456054AA55E2A738E5A2466E56925358551C5610535636A04626641F1668F5EC459A6654545EA49035EC561A545A44DE3304366E4614735446EA64DF166336B346FA4492572854D88416449883DC45DA661433D655D46458E5A2539663DE561E561056A85556D5A106F51777177306FAD62106B9677737BB67BFF7FFF7FFF7FFF7FFF7FFF7FB77B967B7377CC660E732E732E73CD664F770E6B0E6F7077707750775073EE6AEE660F6B0B6F2477044EE449054AC65E2F738F5EC4596661A8450B5204414339056AA455A6498541AF5E4341E548473D0C4E85592659455905492539C55D864DA941C45985598F5A336B2D52C34DC6694545A94166394635234505412539263D4741AE5E8E5E6" & _
"53D25510549254D8845EF6A3173517771770F6BCE66106B9677737B967BFF7FFF7FFF7FFF7FFF7FFF7FB87B9677737BCD66CC6A0E6F0E6FED6ACD660E6F2F732F7350775077507750775073106F306F717703730273C4662D737277AE62243D06416841106B6D5A2339255125512555053DD0626E56B05EF266F1622C52EB49CB45EC49905A1367346B336BA9454555CA49126BEB49845D4661655984596455CA45AF5EAF5A8E5A0C4EF066116B106BAE626D5A8D5A8D5A6C56106F51735177717730730F6BEF6A9777747B957BDE7BFF7FFF7FFF7FFF7FFF7FB87B967B747BED66AC622E734E774E774E774F7B2E6F0E6F4F73707750775077507751775177517750734F73EF6A527772777277516F116B116B326F5373F0666D56CA4567394739EB498E5AB05E336B75778541225E41622162A745546F2C522C522C52883DAF5ED1620B4E253D263D273D273926394D526D5AA64502528166A549CF625373316F316F106B306F0F67517351777177306FEF6A0F6BEF6A977B7477957BDF7FFF7FFF7FFF7FFF7FFF7FB77B9677747BED6AAB5E2D732E774E774F774F770E6FEE6A2F73507770777077507750775177517351775177306F106B52777277527752735273537373777377C849225A425E415E826AC945633DC34D8541E54D626AA54D626A035E6F560256C176C276A349A445C449C449E54DA545EA490A4EE94DA745653DE176A34DA34542666D5A326F72777277306FF066EF66306F51775177EF6A306F0F6BEF6A967B747B947BFF7FFF7FFF7FFF7FFF7FFF7FB87F967B747B0E6BCC66ED6A0D732E734E774E772F730E6F2F734F734F73507770775077EE726D6AEB6930772C6AEF6651737273727772777377737773779377E94D6266E451C845E17AA549E34DC276C451E64D42662D564266626A6839225AC27A626AE255225E4266E27EE27EE3556262C176C176225E653DE27AA34D0535663D8E5E316F72777277316F51775173306F7177306FEE6650770F6BEF66967B747B937BFF7FFF7FFF7FFF7FFF7FFF7FB97B967774770E6FEC6A2D730D73CC662D6F4E772E732E732E732E732F6F5073CA69C660A65CA65C075DEF72A65C8D6AEF6A7277727772777277737773777377316FE44DC54DEB49A272E351A349C27AC54DE64D826EA345E2764266EB490356C451C94502562D52C649027F226263456266A449C54D6541EA49C44D4366436A8545AD5EAE5E5173106B727771775173306F306F3073507350770F6B0F6B967B947B727BFF7FFF7FFF7FFF7FFF7FFF7FDA7B967B957B2F6FCC6A2D732E732D73CC66CD6A2E730E732E734F774F774F7750778969A660A66089658965A55C69655277EF6A106B5273727773777377737B9377E64D826E6266826AC3518345A37AA549C649A3764366636E463D8F5A425E235EE351235E6E56E54DC27AA7456D56025AC34D84458D5A0A4EC44D0339446AA4558E5E0F6B306B306F717771775177EF6AEF66507751775073EE6A106F9677757B727BDE7FFF7FFF7FFF7FFF7FFF7FDB7F957B757B3073CB660D732D772E772E732D730E6FCC6ACD66CD66EE6A2F6F2E6F2F73AA69A5608969A660A660A660EF7272773173F06AF06A52737277937B9377084EC37E63728741AF62E64D6576243DE35183760431636AA64D4E56235E453D236204664D56C44983768641AF5E035AA47AE35DEB49A349C55D4441246A654DAE5E31735173EF665173306FEE66CE625073507750775073EE665073957B957B727BFD7FFF7FFF7FFF7FFF7FFF7FDC7B957B957B5073CB660D6F2D732D732E732E732E732E732E732E732F732E730E6BEE66ED668965E764C764E764E7640B6A71777277727751775173116B9377737B0B5283726472C949326FE74D056E04398349A451E430636E8649EA49A351A941E359A5610B4EA2494472A745CA45E355056A4639EA4964414555A355255525416C5A106F72775173307351735073EE665077707750772F73CD667177957B957B727BDC7FFF7FFF7FFF7FFF7FFF7FDC7F757B757B7177AB660C732D772D772D732D732D732D732E732E732E73CD720A72886DE76C076989692F7350775177517751777177717772777277F066927772774C562466256E8649116BC749254D6741D062D062C84904662441A35145392D524349E544A941A34DE56566458441C561A565A351C359673DC949C945C9452B56CF66CE625173717771775173306F50775077507750772F73EE6651735473957B717BDC7FFF7FFF7FFF7FFF7FFF7FDA7F757B957B717BAB660C732D772D732E772D732E772E732E732E732E73AC728570856CC66CCD7285680B7250735077507751777177717771777277106B72779277AE5EC455A5614549F066AF5EAF5EF066326F53732B522551845585614745D0628E5AD0628E5A834D46594745A7450549E644054505414C563173106F106F0F6B306F51777177EF6AEF66CE662F6F50775077507750770E6FEE6A6C5AE949CE665177DC7BFF7FFF7FFF7FFF7FFF7FB87F957B967B727BCB66EC6E2D772D732D772D732D732D732D732E732F772E73887185708C72EE72856CA66C8D72507770777177717751777177727751733173727B106B634D0655E544AE5E52735273537373777477747389454741A9416D56326F73737373D066A84568458845116B326F316F316F72777277727752737277517751777177727771775073717751777077507750774F772F730E6F2A522A52AC622F73DD7FFF7FFF7FFF7FFF7FFF7FB87F957B767B727BCC6AEB6E2D772D772D772D772D77" & _
"2E732E772E732E732E73ED762B764F77EE768570856C076D4F777077707771777177717771777277517351735277EA4D2B528D5E3273737773779377947B9477336F536F126B336F537373739577947B9477947B9377316B316B537351737277737B737B727B72777277717771777177717771779477717B70775077507750774F774F772F736B5ECC66ED6A2E73FD7FFF7FFF7FFF7FFF7FFF7FB77B0E6FAD6271770E6FEB6A0D772C772D772D772D772D772E732E772E732E774E774E774F77EE76CA75CD764F77507770777077717771777177717771777577EF6A316F5273727772779377937B937B9477326B126B5373957795779477967B9577B77B947B93779377937B937B52735273937B9377727B937B7277727B7277977BDC7FDA7BD97FB87BDD7FDB7FB67B737B507750777177947BB87B997751775077747BFF7FFF7FFF7FFF7FFF7FFF7F957BCA6A495A2952ED6ACB6A0C732D772C772D772D772D772D772D772E774E772E774F7772774E774F774F774F775077707750777077717771777177727BFE7F727B306F106B7277106B1067106B106B73777373947B957BB57B957B957BDB7F947BDB7F957BB57BDC7FB97BB87BDB7FD97BB87BB77B967B9477737B7277947BFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FDB7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F7477EB6E695E295AAB62EB6E0C73727750772C772E77727772774F772E772E772E77737B977B717B4F774F774F775077507770777077507770777177B97BFF7FBA7FB97BDB7FFE7FFD7FDC7FDC7FDC7FDC7FDB7FDB7FDC7FDC7FDC7FDB7FFF7FFD7FFF7FFD7FFE7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFE7FDA7FFC7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FB97B0C73CB6A8A66EB6E2E770C77737BDD7FB97FFE7FFF7FFF7FFE7FDA7FDB7FDC7FFE7FFE7FFE7FFD7FFD7FFD7FFD7FFE7FFD7FFD7FDB7F967BB97FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F967B0C775177DB7FFF7FDC7FFD7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7" & _
"FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F"

$t[3] = "" & _
"BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DD3EDC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DC42DC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DC42DC42DC3EDC3EBC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DC42BC42BC46BC46BC4A7C529C4EBC46BC42BD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DC42DC42B" & _
"C42BC46BC42BC42BC42BD42BB4A785E586E586E9A52DC3EBE42DC42DC42BC42BC42BD46BD46BD42BC46BC46BC46BC42DC42DC3EBC46BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BD42BC42DC42DE3EBC42BC429A4E596AB976997679669A4EBC42DC42DC42BB42BB46BB46BB4A9A527A567A569B4EBC42BC42BC42DD3EBC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DC42BC46BD42BC429A52795A9A52BC4ABC4A595EBA76B976796E795A9B4E785A795E5862586A58725976366E997A7976586E586ABC4ABC42BD46BC46DC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DD3EBC42BC42BC467962786E79665A5ADC427A567876B9765872586659629A7299729976BA7699767872997699769976BA7A79769A4EBC42BC46BC46BD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BD42BC46BC429B4E3776BA76997657729A4ADA42376A576E377279769A767766B96E786A99729A7A7976797299767872366E166E58629B52DC3EBC42BD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BD42BB42BC42BB46586E9A76B97699765862785A576A79769A769A769976D86A2A295D7F576EBA769976576E366AD46578725772596E7A56BC46BC46BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC427956796E99769876376E78729A76576AD86A76669976976A6D3DDA76776E99769A7A366A9A7ABA7A99729A7A59727A5ADC42BC46BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DC42BC42BD429B4A595E5876366A9976BA7A9A76DA7695563B777872776A7666566E99769976997A7976376EBA76BA769A7A58669A52BC42BC46BD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC46DC42BC42BA46376A99729A769976997ABA7686147D77366AB976BA76BA7699769976997699767876376A376E376A9A4EDC42BC46BC42BD46BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DC42BC42BC46DC42BC467956997699769976B9769976576AB96A76629A76997299729972B9769976B976997699769A7A5872575EBB46DC3EBC42DC3EBC46BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC46BC42BD46795A576ABA769A769A769A76B976997699769976997699769976997699769976BA76B9769976386E595EBC46BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC46BC42BC42785E9972BA769A769A769A76997699769976997699769976997699769976997699767872376E795E9A4EBC46BC42BC42BC42BC42BC42BC42BC42BC42" & _
"BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC46BC42DC429C46586ABA7A5976387238725876997A997699769976997699769976997699769976786E58669952BC42BD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BD42BC42BC4A576E9A7A38761776187638765772997A9976B976997699769976997699769976BA76596A7A56BD42BD42DC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BD42BC42BC4A566E9A7A38761776187A38763772797A9976B97699769976997699769976786E99727A72595EDC42DC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC46BB4A776E9A7638723876187618763776997ABA769972BA7A99769976997299769365797A99763866BC42BD42BC46BC42BC42BC42BC42BC42BC3EDC42BC3EBC3EBC3EDD42DD42DD42BD42DD42BC42DD42BD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC46BC46576E9A76797637721876387657729A7A9972997699769A7A9976B972997A7159BA7A99763866DC42BC42BC42BC42BC42BC42BC42BC42DC42BC3EDC429B3A382EF729F729F7295932BC3EDD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC46DC42BC46DC42376A99769A76997679767976BA7A9976377272615876997A9A7A5876B361587699769A7A3866DC3EDC42BC42BC42BC42BC42BC42BC42BC3E7A36172AF625F625F625F625F625F625F625382EBC3EDD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DD429B3A3832172A162AF625172A382E9B3ABC42BC42BC42DD42BC3EDC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC46BC42DC465932175E787299769972B976997699769976997A1672715D925D715DB3655776BA7699765872595EDC3EBC42BC42BC42BC42BC3EBC425932172AF525F625F625F625F625F625F625F625F625F625F6257A3ABC42BD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DC42BC3E5932F625F625F625F625F625F625F625F625F625D525172A7A36DC42BC3EBC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DC46BB423626F625F535586A997699769976B97699769976B976997699769976BA769976997699769A7E795E7946BC3EBC3EBD3E9B3A5932172AF625F625F625F625F625F625F625F625F625F625F625F625F625F525F6255932BC42DD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DC427A3AF625D625D625D625F625F621F621F621F621F621F525F525F525D525F6255932BC42BC42BC42BC42BC42BC42BC42BC42BC42BC429A3EF5291522D725D42D155A796E9A76997A9976997A997A9976997699769A7AB972BA769972BA76576EF549F425F625F521F721F625F625F625F625D625F621F625F625F625F625F625F625F625F625F625D521172AF625D5253832DD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BB3E382EF725F621F621F521F525F625F529F625F521F621F625F625F625F625F625F625F625F6253932DD42BC3EDD42BD46DC42DC3EDC3E382EF521D625F625F621D729F525166A78729A76BA769A769A7699769A769A76997699769A7699763676D369D429F725F525F621D729F621F625F625F625F625F625F625F625F621F521F72DF629F529F625F521F625F625F621F625D521162ABC3EDC42BC3EBC42DC42BC42BC42DD42DC42BC42DC42DC42F625F625F625F521D535F64D196E39723872386E1962D64DD52DF621F621F625F625F621F621F625F625F625F625F625172A162AF525F625F625F625F6251626F525F521B32D0961AF71156E577299769976997699769976797658723572D16D6B6D4A6D4C51D229F621F621F525D625F625F525F525F621F625F625F621D435F651386E3876187A3876176EF651D541F625F625F625F625F625382E9B3ABC3EBC3EBC3E9B3A59323832172E59327A36F625F621F521F52D39661972187" & _
"63876187A187A18763976385AF6291626D625F625F621F625F625F625F625F625F625F521F625D625D625F621F621D525F625F525F62D9145296D4B6D6F65B169156E156E3672366E156EF46DD2698E656C696B6D6A6D0B61B145F629F625F625D625F621F521F625F625F625F621F62D3962397218761876387618761876386E596E394AD529F621F725F625F625F625F625F625F625F625F625F625F625F625F625F625F621B539186E1876387638721876387238721876187238763A66B439F625D625F621F625F625F625F625F625F625F625F621F629F52DD331D62DD325F53D99629876AF6D4A696B6D6C6D6B694B696B696C6D6B6D6B696B696B6D6B6D6B6D6C6D6C6D4A6D2B69DB6E9A661542F425F421D42DD425F725F725D42D3962187A187217763872386E387218763876187A18761862D529F61DF625F625F625F625F625F625F625F625F625F625F625F625F621F521195638721776387A386E186E396E3972187A1876187619763856D521D629F621F621F625F625F625F625F625F625F621D429DC56DC6A9A56BB6E9A72564A2F5129696C714C6D6C6D6B694B6D4C6D4C6D4C6D4C6D6C714C716C6D6B6D6B6D6B6D6B69EA68B239374EDA6EBA56BA56DC6A3842D525F725B43D3972387238763866B341D439B4491866F879387617723976F6391622F625F625F625F625F625F625F625F625F625F625F625F625F725F6253872187638761976D62DF625F529D525163E5966187638763876F529F621F625F625F625F625F625F625F625F625F625F525F431BB72BB763636D425F52509614B696C6D4B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D4C6D29659041F525D42D795ABA76785AD42DF621F629F5553876387238761736F625F729F625F51DF6511972187638725956D529F625F625F625F625F625F625F625F625F625F625F625F625F625F629387618763876186AD525F621F525F621F5251642197A18763976F62DF621F621F625F625F625F625F625F625F621F625D529FD5636567A62F521F621F42508696B6D4B6D6C6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6C694B6D4E51D429F525D435FC6ABB62383EF721F625175E177638763876D62DF625D625F625F621B4353A72187638765A62F629F625F625F625F625F625F625F625F625F625F625F625F625F6251732187618723876F759F625D6291622F621F625F52D187638761876F62DF621F621F625F625F625F625F625F625F521F621F625F625F525F525F521F621B13949656B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D4C694B6DE960B139F721F525F625F625F621F529F621186A177639763876F629F625F625F625F625D429396E187638765962D625F625F625F625F625F625F625F625F625F625F625F625F625F625F731187639761876F759F621F625F521F621F61D153218761876397AF529F621F621F625F625F625F625F625F625F621F621D725D725F62515265842F52D8F414A696B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D4B6D4C6D09656F45F721F625F625F621F621F525F621186A177638763876D62DF625D621F625F621F53D396E187637725956F625F625F625F625F625F625F625F625F625F625F625F625F625F625F631387638761876F865D629F6251626D625D5353966387638761872F525F621F625F625F625F625F625F625F625F725F625F625F521F525DA569866BA660D5D6D6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6D6D29692D59D625F625F621F625F625F521F629386A177638721876185AF529F525D529F6413872397617763872F635F621F625F625F625F625F625F625F625F625F625F625F625F625F625F63138761876187638765856153617321846396E397218761A7AF64DF521F625F621F621F625F625F625F625F625F625D629F629573A785ABA5A9962B862095D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6C6D6B694A6D095DF621F625F625F625F625F625F621196A18763876187A38723866385E3866387218723876177A1766D525F725F625F625F625F625F625F625D629F625F621F525F625F625F6251636387618763876187A18761876187A18761876F8753972394AD429F621F625F621F625F625F625F625F625F625F625F625F625D529BC5AFC66DC62DB6209694C6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D4B6D6B6D4A6D0961F521F625F625F625F625F625F621186A38761876187A1876187A387A1876187A187A3976594ED529F621F621F621F621F621F625F625F625F621F621F621F625F625F625F62517361876187217761772397618761876187639723966F635F621F621F625F625F621F625F625F625F625F625F625F621F625F625F621F621F625F621D429E9606B694B6D4B6D4B6D6C6D6C6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B6D6B714C714B6DE964D525F625F625F625F625F625F625186A3876187619765962396E39725A6E59661842D52DF625F625F621F621F725F621F625D629D529D529D52DF5211522F625F625F625F625173A1876187637761766D649F759F75DD755D53DD42DF625F625F625F625F625F621F625F625F625F625F625F625F625F625F625F625D625D629F621D42D09696B6D6C6D6C6D6C6D6B6D6B" & _
"6D6B6D6B6D6B6D4B6D4B6D4B6D4B6D4B6D4B6D4B6D4B6D6B6D4C6D6C6D0965D525F625F625F625F625F625F625186E387618761976D425B431B435D431D425F621F621F625F625F621F621F625D529173A3A5A3A627962595E3742D52DD625F625F625F629173A187638761876F759F721F725F625F625F525F525F725D629F529F521F521F625F625F625F625F625F625F625F625F625F525F525F621D729F521D52D0C652A612A652A652A652A652A652A652A652A652A692A692A692A692A692A692A692A6949612B652B690A61D52DF625F625F625F625F625F625186E387618763976F529F621F621D62DD635F749D749F625F621D629F621D531196E1976377257723976387218763972F549F625F625F625173E18761876187AF655F625F625F625F625F521162E594E395E5A62595A163EF525D625F625F625F625F625F625F625F625F625F625F625F721F625D529B331B335D431933992399776D24D9139913D90419041914172417241913D77721456B33D913D913DB239B335F525F625F625F625F625F625F6253972187618761876F525F621F621D439396E187A3876374AF521F725D5251762387638723876387A1876197A38761876396EF43DF725F625173E187618761876D651F625F621F625D531176617723776177A3876187A18761856F52DF625F625F625F625F625F625F625F625F625F625F625F625F625F621F621F621F625F525DC72D531F625F625F625F625F625F625F625F625BC567A4ED621F625F625F621F625F521F625F625F625F625F625F6253972187618761876F525F625F625F75519765872187A5A66D52DF521F735187618763A76384AF535F529173E396A187A187A1972D525F625173E187618761872D651F625F621D4295A6238763772187A386A187218723976396EF541F625F625F625F625F625F625F625F625F625F625F621F625F625D725D7291522F621F42DBA66B329F625F625F525F525F521F625D625F6259A529A56D521F525F521F625F625F625F625F625F625F625F625F6253972187618763876F525F621F621D64939723876387A595AF529F529395218763972D651D525F521161EF525D549396E3876F879373AF6211742187A38761972B64DD625F625F761386E18763976D53DF521F5251862187A1876F665F625F625F625F625F625F625F625F625F625F625F625F625F625F521F521D725F721594AB95AD425F425F425F625F625F625D625F621F621373EDA6290250A1965086608D125F621F625F625F625F625F625F6253972187A18763976F525F625D629D425173A3852374EF52DF621D42D5A6A1876396EB335F621F725F625D625D431396A19763976385AF6211742187A38761972D649F621F52518761876397A3972395A174A1642176618761876F769F625F625F625F625F625F625F625F625F625F625F625F625F625F525F525F521F425250044046500660088045015F525F721D629F621F5216F19230C430042004308A910D329F825F625F625F625F625F625F6251972187A38763976F521F625F625F621F525F525F425F625F721D429596A1876396AB439F625F621F625F625D435396E386E39765962F621173A3872197A3976D541F625F62D37723876187619763876197A3976387618765A6ED441D625F621B42DB441D549D449B43DD529F525F51DD525D521F6251622B441386A18721876F5690D45262425148904F529F621F521F629B4391866176E3872187638723A7AB555D629F725F621F625F625F525F525196E177E3876386EF625F525D7291622D431D655D441F725F625F5295A563876187AF769F529F521D529F52D396A3976187618763A6EF621173A18763976187AD545F625F62D187A187A186AF759186A186E386E1972F761D535F525F621F5293A66396E396E3972396E7A62F749F721F625F625D621F52139621876197A197A387617761672576E374ED429F621F525F5253966397218761876187A187A38763972384AF621F621F625F625F525F6211866187639763972D629F521F625F6315A62196E3866F629F625F525173E3876177638763A66195A3956595E19763876187A18763A6A16221632187A177A3976D645F621F52D38763876385AF529F625D629F625F625F51DF625D521D529185217723876187A1876187A38761876176ED63DF521F621D529397637721876396E396E3872387A1772187AF869F529F625173A1876387659661642F635394E197238761972D529F621F621F625F5251622175E177619761966D725F621F621D655187217761776F6251622F725F625195E187A3776177637761776387639761872387218765A6A1626F525595A5A66374AD425F621D52518721876396EB441F625F625F525D539F74DF741F525D5295A6A1876197E38523852595A3972187238761872D531F625B52D377218763956F525D525F62916423A6E387218761746D529395E177A18761526F621D625F621F74939721776F531F621F621F625F625F625F5291746173AF529F625F625F621186E187A18761876D629F621F621F625F525174E5962596E396E5A6A3956152EF53D197618765A66F625F625D42DB431D529F625F621F621F65919761876396E3746173E5952397218767A62F429D5295A6A38761872D429D625D529B445386A177638763746F625D53117761876184EF525F625F621F525184E387617763A5ED5293A66187A1976F51DF625D629F625D435396E187A163AF621F621F625F625F625F621D525F621F521F625D629F621186E187A1" & _
"876187AD629F625F625F625F621D529B42DD535B435D42DD525D525384E3876187A385EF625F625F625F625F625F625F625F625D429584E3876187618761972397617761876594ED425D531596E1876386EF621F621F725F521373EF779387A5B5AF629D5311876187A3742F51DF625F621F725173E187E387A395AF525395E187E1876F519D729F725F725D42D5966387A3852F525F621F621D625F625F625F625F625F625F625D629F62518721776177A3876F529F625F621F625F621F625F625F61D172AF625D625B3293966177A17721746F625F625F625F625F625F625F625F625D521D529F655386E187A1876187638721762D62DF625B53139723876386EF621F721D725F5211642387637765A5ED629B5311876187A1746F525F6211622F5253956177637763956F529385617763976F631161EF725F721B42D5A66387A595ED52DF625F625F725F625F625F625F625F625F625F625F625186E177217763876F529F621F621F62516261736173EF52DF625F625F621F645396E38763976F531F625F625F625F625F625F625F625F625F629F625D625D529163A1742F63DD531D529F625F625B53139723876386EF425F521F529D541196A17721776384AF521B4311876187A175AB441B541F64D176A18763876197A1636F521152A1976187A396EF54DD431B431F75939723876F879196ED5351526F621F625F625F625F625F625D629F621F625196E18761876197AF629F621F525F625D5251A7618765972D555D531D53D38723876F879396EF525F625F625F625F625F625F625F625F625F525F525F721F721F625F525F625F621F621F525F525D535387238761872374A374A3852396E397A3872187AF531F521D431197A38763976397239723872177238723976F865F525F625F525F861197A17763876396E396E1876387A187A177618765A5EF52DF621F625F625F625F625F625F625F621F625F86518761876197AD629F721F521F625F5253972377238761876385E596E177237723976D74DF621F625F625F625F625F625F625F625F625F625F625F625F625F525F621F625F625F621F621F725B535386E3872187E187639763876177618763976F74DF621F621D4313876187A18763876387618763976396E3A56D52DF625F625F621F629594A3976197218761976187618763966197218765A66B431F51DF625F625F625F625F625F621F621F625F549396E3976396AF625F725F521F625F521F74D3972187A387638763876187A1876196AD541B42DF625F625F625F625F625F625F625F625F521F521F525F525F625F721F721F625F625F625F625B535387238721876376E187A1776187A1876164ED52DF621F725D4313876387638723872186E386E1862B445D525F621F525D429F625F625F425B4491966186E196E1866D555F429D659186E384ED529F725F625F625F625F625F625F621F621F725B3355966386ED551F621F725151EF625F625D42D175618761876397A1872197A176EF76138725A6AF625F625F625F625F625F625F625D625F625F625D521F625D621F625F625F625F625F625F625B43538721876176E384E384A1846F739D52DF621F625F521F621B439387658721636F525D525F521F625F625F625F625F625F625F625F625F625F625F625F525F5251626F525F521D625D625F625F625F625F625F625F625F625F625F625F621F621D625D625D625D525F625F625F625F621F625F621F525F531394A595238521632D525D64D39721762F625F625F625F625382E5A369B3ABC3EBC3EBD3EBC3E382EF625F625F625F625F625F625F625B435387618761766F525F521F625F621F625F725F625F521F621B439387618761636F621F625F621F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625D625F621F625F621F621F621F625F625F625F625F625D629F625F621F625F625F621F625F625F625F625F625F625F625F621F521F525D525F629F51DF51D196AD659B445BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC3E382EF625F621F625F625F625F625D53938721876F769F625F625F625F525F525F525F625F521F621B53D387638761636F625F625F621F625F625F625F625F625F625F625F625F625F625F625F621F621F621F621F621F625F625F625F625F625F625F625F625F625F625F625F625F621F621F625F621F621F621F621F621F621F625F621F621F621F621F621F725F625D525F76119723872BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DD42DC42172AF625F625F625F625F625D53D37761872176AF621F621F625F625F625F625F625F521F621D53D38761776373EF525F625F621F625F625F625F625F625F625F625F625F625F625F625F621F621F621F625F625F621F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625F621F621F625F625D529B431D42DF521D529D625F721F52116321636BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC3EBC427A36F625F625F625F625F625D54117761772186AD729F525F525F521F521F521F625F521F621B53D3876F7793842F629F625F621F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625F621F621F625F625F625F625F625F625F625F625172A172A172AF625F625F625F625F625F625F625F625F621D529D531384EF539163A594AF529F621F625F725D621BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42" & _
"172AF625F625F625F621D5393A72387A186EF629F625F625F625F625F625F621F625F621D52D5A723A76173ED521F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625F621F621F625D621F625F6255832BB3EDC42DC42BC42BC42BC42BC42BC42BB3E5932F629F525F525F625D625F621D5215A421736384E3852D529F521F621F621F625BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC429B3AF525F625F625F625D52D3862387A175EF725F625F625F625F625F625F521D629F625F529F649F755D529F621F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625F621F621F625F6255A36BC42BC42BC3EDC42DC42BC42BC42BC42BC42BC42DC42DC42DC429B3A382EF525F625F621F625D62DF62DD52DD531F525F621F621F625F621BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BD42DD427A36F625F625D521F621D529D52DD529F621F625F625F625F625F625F621F629F625F621F625F625F621F621F625F625F621F621F621F625F625F625F625F625F625F625F625F625F625F625F625F625F625F625172ABC3EBC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC423932F621F621D625F621F621F621F625F625F621F625382EBC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BD42BC425932D525D521F625F621F621F621F625F625F625F625F625F625F621F625F729F625F62539369A36BB3A9B3A5936172AF625F621F625F625F625F625F625F625F625F625F625F625F625F625F625F525382EBC42DC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BB3E382E172AF621F625F625D625172A5932BC3EDC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DD427A36F625F525F521F521F521F625F625F625F625F625F625F729F625172A7A3ADD42BC3EBC42BC42BC42BC42BC3EDD425932172AF621F625F625F625F625F625F625F625F625F625F625F6257A36DC42DD42BC42DC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC46BC42BC42BC42BC46DC46BC42BC42BC46DC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC429B3E382ED521F625F525D521F521F525F625F625162A5936BC42DD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC425932F625F625D625F625F625F625F525F525F625D5217A36BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC3E59363832172E372E59329B3ABC3EBC42DC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DD42BC42BC3E5932172AF625F625D625F525162A7936BC3EBC3EBC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DD42BC42BC42BC42DD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42DD42BC42BC42DD42BC42BC42DC42BC42DC42BC42DD42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC4" & _
"2BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42BC42"

; Main GUI
$form         = GUICreate("ImageList", 400, 500)
;$listview    = GUICtrlCreateListView("", 30, 50, 342, 384, BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT))
$listview    = GUICtrlCreateListView("", 30, 50, 342, 384, BitOR(0, $LVS_REPORT))
; Set ex-style to use full row select, show gridlines and use double buffering
_GUICtrlListView_SetExtendedListViewStyle($listview, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $LVS_EX_DOUBLEBUFFER))
; Add a thumbnail colun for the 88x88 thumbnail previews
_GUICtrlListView_AddColumn($listview, "Thumbnail", 88)
; Add a title column to show the video title
_GUICtrlListView_AddColumn($listview, "Title", 232)
; Use alternate backgrounds on each row
GUICtrlSetBKColor($listview, $GUI_BKCOLOR_LV_ALTERNATE)
; Create a context menu for the listview
$ctxListView = GUICtrlCreateContextMenu($listview)
; Add the Change thumbnail option to the vide listview context menu
$ctxChangeThumbnail = GUICtrlCreateMenuItem("Change Thumbnail", $ctxListView)


; Create an imagelist
Global $hImageList = _GUIImageList_Create(88, 88)
; Attach image list to the listview
_GUICtrlListView_SetImageList($listview, $hImageList, 1)


; Create 10 rows of example data
For $i = 1 To 10

      ; Create a new listview row
      GUICtrlCreateListViewItem("" & $i, $listview)

      ; Set the background colour
      GUICtrlSetBKColor(-1, 0xAADDFF)

      ; Choose one of the 3 images at random
      $rnd = Random(1,3,1)

      ; Add the random image to the image list
      _GUIImageList_Add($hImageList, _GenBitmap($t[$rnd]))

      ; Add this image to the listview row
      _GUICtrlListView_SetItem($listview, "", $i-1, 0, $i-1)

      ; Add the title to the listview
      _GUICtrlListView_SetItem($listview, "Test Icon " & $i, $i-1, 1, $i-1)

Next

; Show the GUI
GUISetState(@SW_SHOW)


; Main Program Loop
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
         Case $ctxChangeThumbnail
            ; Chose Change Thumbnail from context menu
            ChangeThumbnail()
    EndSwitch
WEnd


Func ChangeThumbnail()

   Local $SelectedCount = _GUICtrlListView_GetSelectedCount($listview)

   ; Check at least one video is selected
   If $SelectedCount = 0 Then
      MsgBox(48, $WindowTitle, "Please select at least one video from the list." & @CRLF & "NOTE: You can hold down CTRL when clicking to select multiple videos.")
      Return
   EndIf

  ; Display a dialog to get an image filename
  Local $sFilename = FileOpenDialog("Choose Image...", @DesktopDir, "Images(*.jpg;*.png;*.bmp)", 3, "", $Form)

   ; If they cancel then do nothing
   If @Error Then Return

   ; Create a 88x88 thumbnail for the chosen image
   $Thumbnail = _CreateThumbnail($sFilename)

   ; Get an array of the selected row numbers
   $arrSelected = _GUICtrlListView_GetSelectedIndices($listview, True)

   ; Lock the GUI for updating
   GUISetState(@SW_LOCK)

   ; Loop through and change all selected rows
   For $i = 1 To UBound($arrSelected)-1

         ; Add the new thumbnail to the end of the image list
         $new = _GUIImageList_Add($hImageList, $Thumbnail[0])

         ; Swap the new image with the selected image
         _GUIImageList_Swap($hImageList, $arrSelected[$i], $new)

         ; Delete the now unrequired image
         _GUIImageList_Remove($hImageList, $new)
   Next

   ; Unlock the GUI (forces refresh of image list)
   GUISetState(@SW_UNLOCK)

EndFunc


Func _CreateThumbnail($inFilename)

   ; Load the image from the selected file
   Local $hImg = _GDIPlus_ImageLoadFromFile($inFilename)

   ; Variables to hold info
   Local $width, $height, $newwidth, $newheight, $x, $y
   Local $CropForm, $img1, $img2, $img3, $lbl1, $lbl2, $lbl3, $t, $t1, $t2, $t3

   ; Get the image width & height
   $width             = _GDIPlus_ImageGetWidth($hImg)
   $height             = _GDIPlus_ImageGetHeight($hImg)

   ; Check if image needs to be cropped
   If $Width = $Height Then
      ; No cropping - go ahead and generate thumbnail
      ;ConsoleWrite("No Cropping required" & @CRLF)
      $t = _CreateBitmapAndDIBFromFile($himg, $listview, 0, 0, $width, $height)
   Else
      ; Image needs to be cropped
      Local $h1 =  _GDIPlus_ImageLoadFromFile($inFilename)
      Local $h2 =  _GDIPlus_ImageLoadFromFile($inFilename)
      Local $h3 =  _GDIPlus_ImageLoadFromFile($inFilename)

      If $width > $height Then
         ; Landscape Crop GUI
         $CropForm  = GUICreate("Crop Landscape", 310, 140, -1, -1, -1, -1, $Form)
         $img1         = GUICtrlCreatePic("", 10, 10, 88, 88, -1, $WS_EX_CLIENTEDGE)
         $img2        = GUICtrlCreatePic("", 110, 10, 88, 88, -1, $WS_EX_CLIENTEDGE)
         $img3         = GUICtrlCreatePic("", 210, 10, 88, 88, -1, $WS_EX_CLIENTEDGE)
         $lbl1        = GUICtrlCreateLabel("Left", 30, 110, 50, 20, $SS_CENTER)
         $lbl2        = GUICtrlCreateLabel("Middle", 130, 110, 50, 20, $SS_CENTER)
         $lbl3        = GUICtrlCreateLabel("Right", 230, 110, 50, 20, $SS_CENTER)
         $t1        = _CreateBitmapAndDIBFromFile($h1, $img1, 0, 0, $height, $height)
         $t2        = _CreateBitmapAndDIBFromFile($h2, $img2, ($width-$height)/2, 0, $height, $height)
         $t3        = _CreateBitmapAndDIBFromFile($h3, $img3, $width-$height, 0, $height, $height)
      Else
         ; Portrait Crop GUI
         $CropForm  = GUICreate("Crop Portrait", 200, 310, -1, -1, -1, -1, $Form)
         $img1         = GUICtrlCreatePic("", 10, 10, 88, 88, -1, $WS_EX_CLIENTEDGE)
         $img2        = GUICtrlCreatePic("", 10, 110, 88, 88, -1, $WS_EX_CLIENTEDGE)
         $img3         = GUICtrlCreatePic("", 10, 210, 88, 88, -1, $WS_EX_CLIENTEDGE)
         $lbl1        = GUICtrlCreateLabel("Top", 100, 50, 50, 20, $SS_CENTER)
         $lbl2        = GUICtrlCreateLabel("Middle", 100, 150, 50, 20, $SS_CENTER)
         $lbl3        = GUICtrlCreateLabel("Bottom", 100, 250, 50, 20, $SS_CENTER)
         $t1        = _CreateBitmapAndDIBFromFile($h1, $img1, 0, 0, $width, $width)
         $t2        = _CreateBitmapAndDIBFromFile($h2, $img2, 0, ($height-$width)/2, $width, $width)
         $t3        = _CreateBitmapAndDIBFromFile($h3, $img3, 0, $height-$width, $width, $width)
      EndIf

      ; Show the preview for the 3 crop options
      _GUICtrlStatic_SetImage($img1, $t1[0])
      _GUICtrlStatic_SetImage($img2, $t2[0])
      _GUICtrlStatic_SetImage($img3, $t3[0])

      ; Show the Crop GUI
      GUISetState(@SW_SHOW, $CropForm)

      ; Wait for user to click on one of the cropped images
      Local $cMsg
      While 1
         $cMsg = GUIGetMsg()

         Switch $cMsg
            Case $img1
               $t = $t1
               ExitLoop
            Case $img2
               $t = $t2
               ExitLoop
            Case $img3
               $t = $t3
               ExitLoop
         EndSwitch
      WEnd

      ; Remove the crop GUI
      GUIDelete($CropForm)

   EndIf

   ; Return the thumbnail
   Return $t

EndFunc


Func _CreateBitmapAndDIBFromFile(ByRef $inHimg, ByRef $inDC, $inX, $inY, $inWidth, $inHeight)

   Local $ret[2]

   ; Get a device context
   Local $hLblDC     = _WinAPI_GetDC(GUICtrlGetHandle($inDC))
   ; Get a handle to a bitmap compatible with the specified device context
   Local $hBitmap     = _WinAPI_CreateCompatibleBitmap($hLblDC, 88, 88)
   ; Get a handle to a memory device context compatible with the specified device
   Local $hDC         = _WinAPI_CreateCompatibleDC($hLblDC)

   _WinAPI_SelectObject($hDC, $hBitmap)

   Local $hGraph     = _GDIPlus_GraphicsCreateFromHDC($hDC)

   _GDIPlus_GraphicsDrawImageRectRect($hGraph, $inHimg, $inX, $inY, $inWidth, $inHeight, 0, 0, 88, 88)

   _GDIPlus_GraphicsDispose($hGraph)
   _GDIPlus_ImageDispose($inHimg)

   Local $tData = DllStructCreate("byte[15488]")

   Local $tBITMAPINFOHEADER  = DllStructCreate("DWORD biSize;LONG  biWidth;LONG  biHeight;WORD  biPlanes;WORD  biBitCount;DWORD biCompression;DWORD biSizeImage;LONG  biXPelsPerMeter;LONG  biYPelsPerMeter;DWORD biClrUsed;DWORD biClrImportant; DWORD colormap[3]")
   DllStructSetData($tBITMAPINFOHEADER, 1, DllStructGetSize($tBITMAPINFOHEADER))
   DllStructSetData($tBITMAPINFOHEADER, 2, 88)
   DllStructSetData($tBITMAPINFOHEADER, 3, -88)
   DllStructSetData($tBITMAPINFOHEADER, 4, 1)
   DllStructSetData($tBITMAPINFOHEADER, 5, 16)

   ; use default GDI32 16 bit format: 5-5-5
   DllStructSetData($tBITMAPINFOHEADER,  6, 0)

   _WinAPI_GetDIBits($hLblDC, $hBitmap, 0, 88, DllStructGetPtr($tData), DllStructGetPtr($tBITMAPINFOHEADER), 1)

   _WinAPI_ReleaseDC(GUICtrlGetHandle($inDC), $hLblDC)
   _WinAPI_DeleteDC($hDC)

   $ret[0] = $hBitmap
   $ret[1] = Hex(DllStructGetData($tData, 1))

   Return $ret

EndFunc


Func _GenBitmap($inDIB)

   ; This Function only used for the Dummy thumbnail data

   ; Modified from code provided by Prog@ndy

   ; Get a Device Context
   $hLblDC     = _WinAPI_GetDC(GUICtrlGetHandle($listview))
   ; Get a handle to a bitmap compatible with the specified device context
   $hBitmap     = _WinAPI_CreateCompatibleBitmap($hLblDC, 88, 88)
   ; Get a handle to a memory device context compatible with the specified device
   $hDC         = _WinAPI_CreateCompatibleDC($hLblDC)
   ; Selects the object into the specified device context
   _WinAPI_SelectObject($hDC, $hBitmap)

   ; Create a structure to hold the DIB bits for the 88x88 image
   $tData         = DllStructCreate("byte[15488]")

   ; Add the data to the structure
   DllStructSetData($tData, 1, "0x" & $inDIB)

   ; Setup the Bitmap information
   $tBITMAPINFOHEADER  = DllStructCreate("DWORD biSize;LONG  biWidth;LONG  biHeight;WORD  biPlanes;WORD  biBitCount;DWORD biCompression;DWORD biSizeImage;LONG  biXPelsPerMeter;LONG  biYPelsPerMeter;DWORD biClrUsed;DWORD biClrImportant; DWORD colormap[3]")
   DllStructSetData($tBITMAPINFOHEADER, 1, DllStructGetSize($tBITMAPINFOHEADER))
   DllStructSetData($tBITMAPINFOHEADER, 2, 88)
   DllStructSetData($tBITMAPINFOHEADER, 3, -88)
   DllStructSetData($tBITMAPINFOHEADER, 4, 1)
   DllStructSetData($tBITMAPINFOHEADER, 5, 16)

   ; use default GDI32 16 bit format: 5-5-5
   DllStructSetData($tBITMAPINFOHEADER,  6, 0)

   ; Set the DIB bits from the structure
   _WinAPI_SetDIBits($hLblDC, $hBitmap, 0, 88, DllStructGetPtr($tData), DllStructGetPtr($tBITMAPINFOHEADER), 1)

   ; Do some memory cleanup
   _WinAPI_ReleaseDC(GUICtrlGetHandle($listview), $hLblDC)
   _WinAPI_DeleteDC($hDC)

   ; Return the handle to the bitmap
   Return $hBitmap

EndFunc


Func _GUICtrlStatic_SetImage($iCtrlId, $hBitmap)

   ; Function written by Prog@ndy - many thanks

   Local Const $STM_SETIMAGE = 0x0172
   Local Const $IMAGE_BITMAP = 0
   Local Const $SS_BITMAP = 0xE
   Local Const $GWL_STYLE = -16

   If IsHWnd($iCtrlId) Then
      If WinGetProcess($iCtrlId) <> @AutoItPID Then Return SetError(1,0,0)
   Else
      $iCtrlId = GUICtrlGetHandle($iCtrlId)
      If Not $iCtrlId Then Return SetError(2,0,0)
   EndIf
   ; set SS_BITMAP style to control
   Local $oldStyle = DllCall("user32.dll", "long", "GetWindowLong", "hwnd", $iCtrlId, "int", $GWL_STYLE)
   If @error Then Return SetError(3, 0, 0)
   DllCall("user32.dll", "long", "SetWindowLong", "hwnd", $iCtrlId, "int", $GWL_STYLE, "long", BitOR($oldStyle[0], $SS_BITMAP))
   If @error Then Return SetError(4, 0, 0)
   Local $oldBmp = DllCall("user32.dll", "handle", "SendMessageW", "hwnd", $iCtrlId, "int", $STM_SETIMAGE, "wparam", $IMAGE_BITMAP, "handle", $hBitmap)
   If @error Then Return SetError(5, 0, 0)
   If $oldBmp[0] Then _WinAPI_DeleteObject($oldBmp[0])
   Return 1

EndFunc
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...