I think the jumping hand glitch is gone. Had to add a small _DELAY after choosing a new color for some reason. And I removed my horrible Color Picker and used QB64's beautiful _COLORCHOOSERDIALOG instead (forgot it was there!).
After removing my colorpicker function the source is cut in half, so here it is. This seems to replay drawings better now.
- Dav
After removing my colorpicker function the source is cut in half, so here it is. This seems to replay drawings better now.
- Dav
Code: (Select All)
'==========
'DOODLE.BAS v1.2
'==========
'Little screen drawing/recording program.
'Draw something on the screen using the mouse,
'Your drawing will be recorded and played back.
'A Hand will draw it back on the screen.
'Coded by Dav, AUGUST/2023
'==========
'HOW TO USE:
'==========
'Left Click to draw using the mouse
'Right click mouse to clear the screen.
'D = DRAW mode (default - drawing on screen)
'F = FILL mode (like paint - fills area with color)
'C = Change color (selects a new one)
'+/- to Change brush size.
'SPACE erases recording and starts over.
'Pressing ESC will stop the recording and start playback.
'Pressing ESC during playback will stop the playback.
'==========================================================
'=== Setup nice screen size based on users desktop size
Screen _NewImage(Int(_DesktopWidth * .75), Int(_DesktopHeight * .75), 32)
_Delay .25
hand& = BASIMAGE1&
'========
StartOver:
'========
'=== settings
BrushSize% = 3 'size of brush
BrushColor& = _RGB(0, 0, 0) 'color of brush
CanvasColor& = _RGB(255, 255, 255)
DoodleLimit = 500000 'how large doodle string can be (this is about 3 minutes)
Doodle$ = ""
Mode = 0 '0=draw with color, 1=fill with color (paint)
Hand = 1 'Flag for showing hand image or not, default is on
'=== main drawing loop begins
Cls , CanvasColor&
Do
While _MouseInput: Wend
mx = _MouseX: my = _MouseY
If mx > 0 And mx < _Width And my > 0 And my < _Height Then
If _MouseButton(1) Then
If Mode = 0 Then
If stilldown = 1 Then
stepx = lastmx - mx
stepy = lastmy - my
length = Int((stepx ^ 2 + stepy ^ 2) ^ .5)
dx = stepx / length
dy = stepy / length
For i = 0 To length
For j = 1 To BrushSize%
Circle (mx + dx * i, my + dy * i), j, BrushColor&
Next
Next
Else
For j = 1 To BrushSize% Step .36
Circle (mx, my), j, BrushColor&
Next
End If
Else
SPAINT mx, my, BrushColor&
End If
lastmx = mx: lastmy = my
stilldown = 1
Btn$ = "D" 'button pressed down marker
Else
stilldown = 0
Btn$ = "U" 'button up marker, not pressed
End If
'make x position data
x$ = _Trim$(Str$(mx)) 'x position
If Len(x$) = 3 Then x$ = "0" + x$
If Len(x$) = 2 Then x$ = "00" + x$
If Len(x$) = 1 Then x$ = "000" + x$
'make y position data
y$ = _Trim$(Str$(my)) 'y position
If Len(y$) = 3 Then y$ = "0" + y$
If Len(y$) = 2 Then y$ = "00" + y$
If Len(y$) = 1 Then y$ = "000" + y$
'build onto string data only if StartedDrawing flag on
DoodleTemp$ = DoodleTemp$ + (Btn$ + x$ + y$)
End If
'if right button clicked
If _MouseButton(2) Then
Cls , CanvasColor&
DoodleTemp$ = DoodleTemp$ + "C00000000" 'clear screen if right click
End If
'add to image data only if changed from previous x/y data
If DoodleTemp$ <> OldDoodleTemp$ Then
Doodle$ = Doodle$ + DoodleTemp$
End If
'save old data
OldDoodleTemp$ = DoodleTemp$
'reset info
DoodleTemp$ = ""
'=====================================================
'Handle keyboard input
keys$ = UCase$(InKey$)
If keys$ = Chr$(27) Then Exit Do
If keys$ = "C" Then
_MouseMove mx, my
pick& = _ColorChooserDialog("Select a color", _RGB32(0, 255, 255))
_MouseMove mx, my
_Delay .5
'This makes no sense, but it fixed the glitch in windows.
$If WIN Then
Do Until _MouseX = mx And _MouseY = my
mi = _MouseInput
_MouseMove mx, my
Loop
$End If
If pick& <> 0 Then
BrushColor& = pick&
Doodle$ = Doodle$ + "K" + MKL$(BrushColor&) + "0000"
End If
End If
If keys$ = "F" Then
Mode = 1: Doodle$ = Doodle$ + "M10000000"
End If
If keys$ = "D" Then
Mode = 0: Doodle$ = Doodle$ + "M00000000"
End If
If keys$ = "+" Then
If BrushSize% < 100 Then
BrushSize% = BrushSize% + 1
Doodle$ = Doodle$ + "B" + MKL$(BrushSize%) + "0000"
End If
End If
If keys$ = "-" Then
If BrushSize% > 1 Then
BrushSize% = BrushSize% - 1
Doodle$ = Doodle$ + "B" + MKL$(BrushSize%) + "0000"
End If
End If
If keys$ = " " Then GoTo StartOver
_KeyClear
'==========================================================
_Limit 30
'==== below is info only....you can comment out if want
Color _RGB(255, 255, 255), _RGB(196, 0, 0)
Locate 1, 1: Print "ESC STOPS RECORDING ";
Color _RGB(255, 255, 255), _RGB(0, 0, 0)
Print " (C)olor, (+/-) BrushSize:"; RTrim$(Str$(BrushSize%)); ", ";
If Mode = 0 Then
Color _RGB(255, 255, 0), _RGB(0, 0, 0): Print "(D)raw ";
Color _RGB(255, 255, 255), _RGB(0, 0, 0): Print "(F)ill ";
Else
Color _RGB(255, 255, 255), _RGB(0, 0, 0): Print "(D)raw ";
Color _RGB(255, 255, 0), _RGB(0, 0, 0): Print "(F)ill ";
End If
'======================================================
'See if set limit is reached. If so, stop recording
If Len(Doodle$) > DoodleLimit Then Exit Do
Loop
'=== Make simple 24-byte doodle Header with drawing size info
Head$ = "DDV1" 'Dav's Doodle v1 marker
Head$ = Head$ + MKL$(_Width)
Head$ = Head$ + MKL$(_Height)
Head$ = Head$ + Space$(12) 'extra space for future info.
'Add it to beginning of Doodle$ string
Doodle$ = Head$ + Doodle$
'==================================================
'============ Playback what we recorded...
'==================================================
'Load Doodle info from header
If Mid$(Doodle$, 1, 4) <> "DDV1" Then Cls: Print "Invalid Header.": End
sw = CVL(Mid$(Doodle$, 1 + 4, 4))
sh = CVL(Mid$(Doodle$, 1 + 8, 4))
'Open screen size
Screen _NewImage(sw, sh, 32)
'=== set to defaults
Mode = 0
stilldown = 0
CanvasColor& = _RGB(255, 255, 255)
BrushColor& = _RGB(0, 0, 0)
BrushSize% = 3
Cls , CanvasColor&
_Display
_Delay 1
'Play data...
'Skip over header, play data
For d = 25 To Len(Doodle$) Step 9
Btn$ = Mid$(Doodle$, d, 1) 'get marker (B,U or C)
mx = Val(Mid$(Doodle$, d + 1, 4)) 'get x info
my = Val(Mid$(Doodle$, d + 5, 4)) 'get y info
If Btn$ = "D" Then
If Mode = 0 Then
If stilldown = 1 Then
stepx = lastmx - mx
stepy = lastmy - my
length = Int((stepx ^ 2 + stepy ^ 2) ^ .5)
dx = stepx / length
dy = stepy / length
For i = 0 To length
For j = 1 To BrushSize%
Circle (mx + dx * i, my + dy * i), j, BrushColor&
Next
Next
Else
For j = 1 To BrushSize% Step .36
Circle (mx, my), j, BrushColor&
Next
End If
Else
SPAINT mx, my, BrushColor&
End If
lastmx = mx: lastmy = my
stilldown = 1
handx = mx: handy = my
End If
If Btn$ = "U" Then
stilldown = 0
handx = mx: handy = my
End If
If Btn$ = "C" Then
Cls , CanvasColor&: stilldown = 0
'_Display
End If
If Btn$ = "K" Then
BrushColor& = CVL(Mid$(Doodle$, d + 1, 4)): stilldown = 0
End If
If Btn$ = "M" Then
If Mid$(Doodle$, d + 1, 1) = "1" Then Mode = 1
If Mid$(Doodle$, d + 1, 1) = "0" Then Mode = 0
End If
If Btn$ = "B" Then
BrushSize% = CVL(Mid$(Doodle$, d + 1, 4))
End If
If Hand = 1 Then
'save current screen
page& = _CopyImage(_Display)
'shaw drawing hand over it
_PutImage (handx - 44, handy - 24), hand&
_Display
_PutImage (0, 0), page&
_FreeImage page&
Else
_Display
End If
If InKey$ = Chr$(27) Then Exit For
_Limit 45 'play a little faster than recorded, we usually draw slow.
Next
If Hand = 1 Then
_Delay .5
'done....move hand off screen here...
For xx = handx To _Width Step 5
handy = handy + 5
'save current screen
page& = _CopyImage(_Display)
'shaw drawing hand over it
_PutImage (xx - 44, handy - 24), hand&
_Display
_PutImage (0, 0), page&
_FreeImage page&
_Limit 100
Next
End If
_FreeImage hand& 'release me...
Sleep
'just for info
Locate 1, 1
Print "Length of recording ->:"; Len(Doodle$)
Print "Compressed size is -->:"; Len(_Deflate$(Doodle$))
Print "File saving not added yet."
End
Sub SPAINT (x As Integer, y As Integer, clr~&) 'Color everything in the X, Y position regardless of the border color.
'SUB by Petr
Dim m As _MEM, m2 As _MEM
m = _MemImage(_Dest)
W = _Width(_Dest)
H = _Height(_Dest)
P = _PixelSize(_Dest)
Select Case P
Case 4 ' image is 32 bit image
Virtual = _NewImage(W, H, 32)
m2 = _MemImage(Virtual)
Back~& = Point(x, y)
Back2~& = _RGB32(1, 1, 1)
Empty~& = _RGBA32(0, 0, 0, 0)
Do Until a& = m.SIZE - 4
a& = a& + 4
If _MemGet(m, m.OFFSET + a&, _Unsigned Long) = Back~& Then _MemPut m2, m2.OFFSET + a&, Back~& Else _MemPut m2, m2.OFFSET + a&, Back2~&
Loop
d = _Dest
_Dest Virtual
Paint (x, y), clr~&, Back2~&
_Dest d
a& = 0
Do Until a& = m.SIZE - 4
a& = a& + 4
If _MemGet(m2, m2.OFFSET + a&, _Unsigned Long) <> clr~& Then _MemPut m2, m2.OFFSET + a&, Empty~&
Loop
_ClearColor Back2~&, Virtual
_PutImage (0, 0), Virtual
_MemFree m
_MemFree m2
_FreeImage Virtual
Case 1 ' image is 8 bit image (256 colors)
Virtual = _NewImage(W, H, 32)
m2 = _MemImage(Virtual)
Back~& = Point(x, y)
Back2~& = _RGB(1, 1, 1)
Empty~& = _RGBA(0, 0, 0, 0)
Do Until a& = m.SIZE - 1
a& = a& + 1
If _MemGet(m, m.OFFSET + a&, _Unsigned _Byte) = Back~& Then _MemPut m2, m2.OFFSET + a&, Back~& Else _MemPut m2, m2.OFFSET + a&, Back2~&
Loop
d = _Dest
_Dest Virtual
Paint (x, y), clr~&, Back2~&
_Dest d
a& = 0
Do Until a& = m.SIZE - 1
a& = a& + 1
If _MemGet(m2, m2.OFFSET + a&, _Unsigned _Byte) <> clr~& Then _MemPut m2, m2.OFFSET + a&, Empty~&
Loop
_ClearColor Back2~&, Virtual
_PutImage (0, 0), Virtual
_MemFree m
_MemFree m2
_FreeImage Virtual
End Select
End Sub
Function BASIMAGE1&
v& = _NewImage(357, 600, 32)
Dim m As _MEM: m = _MemImage(v&)
A$ = ""
A$ = A$ + "haIkM7STLSLV66N?2j2X8FGM0TQLE4[W\6G5CXEfdLLD4DVdL_1j<\6[QdAH"
A$ = A$ + "^FLWD<b1X11Z2X:0lU9`SaC`VLj^IgEWo_Cb\#EeGnjGn?n2000000000000"
A$ = A$ + "00000000000000000000000000004bOncoS_n7n[om_n3oh?m_EnmYoJ2PkX"
A$ = A$ + "BomgnkoKO7]I0>OUfkdNLI?cSY=3`iHJC^dPoSo`ok_N>6egn?mGnGJcGLOj"
A$ = A$ + "[o\On2Q=n\;Zk;^fS7[dV;dVkOOjcolGWZlcdb_FoiLi]Coe9L7EV5;=gYk?"
A$ = A$ + "^^ghRbOnoioeoggM67JcmQY]gJgM=ZOLYoN0^CZGg5CgSL]7GncWkn1\XlO?"
A$ = A$ + "mGo<_a]hJOM;mhY]idOo0g9UnkdNLY5?gnSWZlnJV]M<^3_Wl_;2>?eo=]Sg"
A$ = A$ + "OlJjaSg_\^LFCgGlSfc[m;3]_jNU[cOCk^U6mSjdf_L67enReUQ\6Oom=GkM"
A$ = A$ + "LCNYf\IfScd[ERcZ1[;3iDVeVknd[fS7gRWk?CGNooia[dO?SV]O637_bLfB"
A$ = A$ + "W=ah6lSjcEVIOmO6L4=ejmCP^<dGFZ;?GgMlII<f_igm?=c^aKc?bcTh8jaE"
A$ = A$ + "Y_]3^jZG_bKY;oXFmM_;?gSK^Gma`A;j^ocGh<\dcGLjbO_g]W]gma4kEn:o"
A$ = A$ + "cGX5Dgof[fT;WMaEjlUC_GdFGYgoU?oU^mW_#?Xn_]nMg[ld^L[dVOefCjnG"
A$ = A$ + ";[EnI;LEEVa:MXm\;WHfmMfoghW;VdTeUQhnUo=Y;eUgBKNliILFkGnE^F6d"
A$ = A$ + "PO?okca8mJFhRkCobDfF_6iNVbefaAfUgB?N^g_YkAVecNUQcaNM>6e?^SHo"
A$ = A$ + "b_ceikLmG=iG[9[;3WSBSJjSWjGM_b5kecMA]`c34<`[9=`iI?>OiakI^^gZ"
A$ = A$ + "Gi[UFiiU7V_;Kob`ihAGWL_bS]TO];oi_\hSk]UT^m`bL>6`iiM_nUWnl9gJ"
A$ = A$ + "W_eRk;N<U0WWBKLJOmEJcYk6LlMIkG6>7em\n>WaLjV1jb`EbNllFDjV1WCG"
A$ = A$ + ">mJEh^HY7;fja<^9[;3WW]nJEbMX;knSLnfLjeZ`MaS>7SUJcYK4G5md]U>K"
A$ = A$ + "Ihll\kg_YmidmQdFc]1cMKedo\NkfBMIhllXW[?Wnh;9MKX5lXcdiAoI;mO_"
A$ = A$ + "GX;3WWe\OiN[Q\W=hYonbcGNceFW[E?mm]GogMh\UQcEY;_d[kZkeSGTN[3]"
A$ = A$ + "f^kB?6KVka2I?ON#f[<L^NdnUGkIY^DGKYOoIfGWkgoX_V7_GgijYegNlNQW"
A$ = A$ + "KOaGUVLQW7iPcccJb[]Q<gmWec>ceef;GCWmIoo8Vk[SU>_QWMoO^dc[CGik"
A$ = A$ + "gDkG6>NeNl[Nn5[mOCoF]V?oCo_?ng?m][onYMdUJ\;mkg3YK[jb#kYl_5]n"
A$ = A$ + "jdaJfKgLMhjn:W[M=^a?M?T7E7OjNFGcI9Lfjem8?^9[;3k[b<e?lSodo^Kn"
A$ = A$ + "Xm7o\^lN]GbmZ1W^gN7JbojNUmlk9\K6oh9NlNMOeVlNeZNDO>M;ECNVm;oE"
A$ = A$ + "kG6f3CKb[mnfJjidNTM[d]C=iE^Oi6Hm<dkVnl^ch^lJk:Gi^YV\^<LFZ?VZ"
A$ = A$ + "7gR[mheNnbja_O?n:eVeUQGgBkANZdm[[Xa]h[FCFG6N=S_NTO4k5No]gMhF"
A$ = A$ + "jinIMIheDOn]hIMI=im_7_dSeU[bIJX;3KgJfWLjneEdSN<:V^UZ;3i<maBm"
A$ = A$ + "dW7MdT?^Vlhfldm:W^Un8Km[?MIHmVKOb>WRc[;o8YK_f_<Tad[5>=iSehKS"
A$ = A$ + "W^oh[H?NJK>mjMXe]VW;hHol:??NT^U^7:oon;dUQ7[n_[L_J>CW5Cg0KE[i"
A$ = A$ + "i_^[DCfnUQeK]_fEoXfkShl#V_7G_]YNKok^OiFjJDnIlJE2lH?keR_Y]hGI"
A$ = A$ + "n_naW^9f2^[WQadoO8fc<<_bceR?k<<f[mSU^7f:ZGcQSOkY_FnMEkajb`:l"
A$ = A$ + "i_\HcL_W5MN6coj_bMJObCKcaGo3=X?m;C6UcjK^NlALNUYkRYKbSoo==nJT"
A$ = A$ + "[nogj^dUM=I0?F];?M_<?jg_G]kd]b4MiaFjl;^;MI]IHNSK[WmmYOjFiIeS"
A$ = A$ + "7ohJOj[c\gUFlDjb`2nlGRNmEU^INV]iYMhUjbgUf\cb0nNem[TLf<M_l<=^"
A$ = A$ + "7GomceVCg;?b>LmajOU^<<X5JbgeflBkC>m?7>cnLmGeUQ_YUJbSMG^>j^cW"
A$ = A$ + "Madn\cHVk^F\7GjDCkbCogkO5<ml;^K]hjIH<fhfLjI38QF[7?^;_dn8CgB?"
A$ = A$ + "Zm9?mJS;m?3>kfLm]eUi^JYm8g2MjWm_[oZdV[MhbgcCoekZYMI]I^;Jac]H"
A$ = A$ + "9Ge^lhVlLmi[^YGo5cmW[;cMA;_?i]dUke6mL?fANUKGNf?_FZke3dViF9lS"
A$ = A$ + "E4=i_oe\fYOo^Gm\Nfhcb`iI`EE?M^5KY=W^cnZ]ia?V[gS6lEY7[;cEGM]l"
A$ = A$ + "BWIA?dY_BkE^ZNMGDonKlgW_BCnZJje>Wf<mVa=hWeKGkkG;HJgZgKcCKbgU"
A$ = A$ + "kS_g]9Goo3Y;C[kEj[m#;N^flEZ;?mJE>m]_]XijbOHOcOEOVfAI=Iii4i]f"
A$ = A$ + "GkaNlE];GoeYO?VnfiF`SjaSkbUkojdcRLO]7Wi#mS]7KcG][7SYOmZ7_]V\"
A$ = A$ + "cIVTZ_VWFL7^?N^;Mie\7jkli>[=C;CCnndU[=IW]ajkbN^cPcVNlfJcYKZ7"
A$ = A$ + "ASn>MO2^UF\m;C2mhI0W\9O5kbefLjKkeTi^[G^NReU?fFlMl\UOefLjIF^f"
A$ = A$ + "dSkg^LmikRg]1OgJaSmbkIfe`<74WUlSejMiJKnAOMDon8m]U]TY?gNHobd:"
A$ = A$ + "\?iW[UkbSOn7JYWOhHNCg;bFkbU7KEYWOiji8JbG]mM_VVLb^lLW7\^l[_fe"
A$ = A$ + "nU9YefTWnh<XHYfkE[9?nfPF\;_W?g3]d7oM]aoXNLmo^^<k]iJXceP[k9[N"
A$ = A$ + "6Ug]VldK?JQ^ldOflZWOadON_dOfM`hN[[C>BXL^HceMND;8mLcA[LkbSjG]"
A$ = A$ + "JKNZ7mmhdnKedGo[_CmhYL66TBIMedic7e0^bk5Nj]=?ZWeJMiJ?M=_N#=G?"
A$ = A$ + "nEJkGI[Y7GNo\GIfKUm:?MnnAcoGi[GSi^miEkbWICNjII<gG[COkUnn8m?3"
A$ = A$ + "f;kajdi>3iYoIeo^B?7ceBY;_V>Bji\c`Lgn<gkG[^OIkgmHY9cIYNM^Z;O="
A$ = A$ + "f_ldc8>m]YGE>GI>:Um:G_fZ^cmhRU^=J^ggF^;?n]COKjEWV<7Qj[oCJb;O"
A$ = A$ + "KdL_o]hiH<GS>m][GIJbLTZGSLJbcK^K;JiVld_NWkni;m]im>=I>JU^lLkI"
A$ = A$ + ">mJocbc^mI^?VF_;?N?ccM]a=nkQdgngSdUi<DKcYG_OfFc]=cma]fcaXEJd"
A$ = A$ + "?ZG?m]CocTFWV<W][leVlD[mfTinHkeVlJfC=;CCV4^;Mi]LKbLOlmLGfe#g"
A$ = A$ + "[ACV4^;=iR]LkbLOlmfiH\dI<o<SOL^=gOnMQV<9LWJb5KifVinhKm^lALM<"
A$ = A$ + "OgJaEJbTbMZ;_eKKVkcA;gUGK7N^OV?mi1Rdo\:==IBi>eT;fj]?cmiX5jbS"
A$ = A$ + "gClhNlFgO\nkgcc?LTDMmGjiPcb[LKdLONJ]^\k3_mSN<YMg^VUOUKSVkccF"
A$ = A$ + "kb7AKN=?7;cfX9CJgYm9GlZg>=gW[FX;?N?ce_VBOKL_biF#;h^eT;NeK[Vn"
A$ = A$ + "iYEJb?ZE[A_NUoM7YW7QRdc2W]mlfZF_;?^??m[kiNkk\bihUNF4:^KkEnM_"
A$ = A$ + "mZN>1S]gMienJC`kLO3>ModS=nk[dolZGFG0k5=i]kMKb?[=?ne:e4kYn>eR"
A$ = A$ + "eTYeLgJb7EGnEKc[i<7>kcoh^eTM^5dJ^KMimhf\cX9?NO[eccHJWfnTKSe3"
A$ = A$ + "`Nj^eTka^LmeIaWmgGim_lWKObJbdgB?Gd[cQ;mio8Jce^lLgOL?bdkg^Ymk"
A$ = A$ + "[RGikWdcM`B:kEn>mLP`NMkfBOngkkg_WM6cY_m\5X9cERc_helX?o7AGNJC"
A$ = A$ + ">m]Q]4=I^JB?CMf>SK_Ne^lSJcceSeWc\60>BYW?jYIb]ngcNgUmjjd[k7na"
A$ = A$ + "Oj]oi?L6^b??amXneF_MjEnkmMf_lL]ijO^fl[;ml6l<gacDnEV=OeoN>Z^l"
A$ = A$ + "h?oY_]\WTNN3NVkJCN;cW_kO?kmi;_7Gk5geFNji=H=dUGfNmgcAeUgjG3Y_"
A$ = A$ + "mn\=nLTGc?_QF`M^9?gLjAmgcNO>6KI?cSOO6oaWnfncBY=WN>3fRkNGn\LT"
A$ = A$ + "Mielgkdgn^#CVNSVlihMKb?Z;_e_>BOKaI`e07m:=iU]WoKlW^Gem\;OW>;R"
A$ = A$ + "GAjI<H[^:MiFnkSbc_8eGK>?Z^lMI?`KAjI;hEdb]\]ZUoNAGnLi\TYGebM\"
A$ = A$ + "[TjI<DO>ikX>SiJKn^OV6JbdcdU?GeW_D?ZVlMOOcUNLiaRNji:hEY9O^:mh"
A$ = A$ + "mJobjbcc[mNdcndG_G??gWfhK[?bc`h>gUC?C1_]?oUhcAgAkaIH\f^lMh<V"
A$ = A$ + "[GKbaWWPM#jiYkXjeSAi]?SfLj_O?3YWSPmBjIYkXYWIdAgUComkI8mL4\G^"
A$ = A$ + "b?Ggg;fSkk_eN>6U[=QjcEnSoHkmcO>mL4\WB??MWE_N<fS7G9?[=?moNigG"
A$ = A$ + "kccmJJBmcIjKSNVdc?`NcNUcYfS?S7G9SEK`SOkY=hNX7GTNn1fK^FUcJli;"
A$ = A$ + "GgglAgTODk]gjbYWOPSP^LKXnlSAi]?Rm;Go_EfKldko_YmgNin7<m\3LDB?"
A$ = A$ + "Ka7ON;jXf_lLWCaHfW<d6B?KaPchiC^NXgn<YWIPSTk[_faNN]H<GOFC6j3Y"
A$ = A$ + "WahSVN>2kEGFC6j3f[LkIle;gNgTki^\W_Ti>#C^m\Wg_OC=gSETNAjI5h\T"
A$ = A$ + "NFSi]Gg_O;9mgOKEji4h\hJENKMbcn_cJolM?3SaoZV<d^Ln5]]mheNeYWY\"
A$ = A$ + "V<dfB?_ab6gTg[[QiN[=WNn0>Kf[LkkX>OidOO]6YW?P4B?gac=ni7SRkBK>"
A$ = A$ + "m\1TPk[_n`Nnj_jdcaXL]bUnk_YB?G0YX9gWfcm:_d[SD9O>S;mL1TddGkhX"
A$ = A$ + "]Md?g5Enk8m[cOYW9PT\GinbAnl_Lj_g:B??0Yij_X_DOM:Ynkg[^Lj__ZB?"
A$ = A$ + "?0]PdcQljn=o^oiUZ;WNF0J1f[LoJ_N]G]5JbYW3PFQcD^?EO>T[nkkmm;WN"
A$ = A$ + ">0J5SO]^Wggh>IZonka^Lji0XUX9OMd[kG>m<0dBLVbG;;eKOdo]dWaLjI0X"
A$ = A$ + "UX9OmlXNkcn_Of=id[oQFSVleckN66WiiHTNm?dRLmGLMebG[LYGg3]:kEnJ"
A$ = A$ + "J==g]ln]gB_^7JIYk7LLfScbh8jbYGc3]<WOaedNeSgkcb8mjMXeY9O?d:kI"
A$ = A$ + ">mjMX7X;Om]WkInMnj8mJMX7X9O?DOnb8IG>mJMX7X9O?\g_^Ho:O=TN]>d;"
A$ = A$ + "dU_n:kCnI_VUDOO?R^Ljeh#?ACnni\g_Ljeh#?ACnNI=WSAmmM_jbYGS3m6M"
A$ = A$ + "ikSeNfbegomH?cYGO3m6?F[_?VnlWmJJ\_KG>mjKX7U^E`ikIkI^nnDneefU"
A$ = A$ + "Wnhn;mjJXGI_bg?e[7SUjbUgWaW[e[\Oid[[QNUVlmDY;oXGC\Wnn_e^Ljee"
A$ = A$ + "#?;MOPlfkcG>mJJXWie?EZfSm<GNOB_V6jIJbD]DSM;kI^nnTNM=dcBg2X]\"
A$ = A$ + "7WSaOh_ngeUQGDj60]QeLMbEOo:ojcJbUgWd[]QNDjF0]QJC^lfkAGfi;3_^"
A$ = A$ + "dm0bKlm]`SJ^SOOLma17Sdm0J7SOLUDnmf_<LnBg1X]DOLU\V77f[Y;GolVN"
A$ = A$ + "M>d;lHjSYFcc;n5[];Kob`fT^1#KI^[MmgMobjb`jI_b\6_knUMMb1[GjiMj"
A$ = A$ + "7f_<L>B?[CK[llUlc^F<NfSoTjWSbkOjek#[cIH`SDjY;eUW^OieN=<WN=?d"
A$ = A$ + "jB?gCkCG6>?YWgY]E_V<Z_^?m\kg?MIhmhl;H;Nf[K9jb`k;mL>mQJ_]dUGc"
A$ = A$ + "IIX;3_6kEVeXN]_E^^SOD[eiH0__dckd7ZWMAiGo=o^oiZjbUgo7eU;O^B_n"
A$ = A$ + "7J=f[<[eJg3lFf_LAjI0XUX9cJEO^T[Nm;_f7K9jb`fX;cSDGWl3oh?mQNlc"
A$ = A$ + "N\UhlUQGWGO[I9SGW\UVld[7SbKKob`jH_b\TY[EV[;_fm;GnlY;3[CjIOJC"
A$ = A$ + "c]FiXjbe?7YW5PFPm:cLFJmbkdUMon1[S^<Sm\e;;eUGZ=kL<P];M7PfaJF_"
A$ = A$ + "\U^Lmc[^<\Nf[<5KI=cFg_Lic_^<\N^fhH[[I>bkg_Rdc4#Bf[<_bjVShlU7"
A$ = A$ + "oi8mL1TDjV0mGC^hAMiiJcSkb;M=IDohdUi^;MGPn[9Gl\^ldnLi__edU]OI"
A$ = A$ + "#Gn^jMGg\UVlJjbCoHC?G09U^?#oeT;fJGNlIIDnJH^F\V<l=YK4dO=iReN>"
A$ = A$ + "6EU[iWYggOJb`g;MSPn\9G\UVlLGobJb`lBg9X?Kb5UG?ofjNVGZ7[93OCj>"
A$ = A$ + "1mI?^J[=ImHhiBg;XOKb5ja`nbSa_[_SN=TN<\_dU_f>Se#KmlUC_V7JMYk6"
A$ = A$ + "dg=iRefUC_F7j5YK7dg=iRWeUC_67j=Yk7dg=iRUjbYGK3mZd=4jkV<`n;M7"
A$ = A$ + "1=IP?:M;1=IP?:M?1=IP1o`_<AW^YPV<`POjoFG^WUNm3`n;MG1=IP?:MK1="
A$ = A$ + "IP_Gj63Jb0ODj>3Jb03BgI#G6hSBgI#C6hSBgJ#C6H#jF3Jb0ODjN3Jb03Bg"
A$ = A$ + "K#C6hSBgL#C6hSBgM#C6H#j^3Jb03BgMBYlJ=Gj_6dT1VCjf3Jb0ODjn3Jb0"
A$ = A$ + "3BgO#C6H#jn3Jb0ODj64Jb03lJhGK9mj1P\nSOmo9N72=IP1Yk#X93<8M72="
A$ = A$ + "IP1Yk#X93lAYKAX93<8M;2=IP1YKAX93lAYkAX93<8M?2MIP1ce7jQWcQ_JB"
A$ = A$ + "_>0X=T^5QV<`7U^7QV<`P]d>L^6Jb07;??aUGje00]3??aUGje00]Ud=YgeE"
A$ = A$ + "h<EB_60XMd[WOaEX5[93<EjN4Jb03BgS#G6H#jF4Jb03BgR#G6H`Oj_l_RgR"
A$ = A$ + "#C6hKnQOlWRgR#G6hK\?ifCje40iX9gNB_V08WolWo7aK#X93<8M32=IP1YK"
A$ = A$ + "#X93<8M32MIP1^OnJ?YGC0TCjn3jb03\?ifDje50IlY?ocak?X93l=_ceXlE"
A$ = A$ + "jiFnFCje50iT^oPV<`Pdm7dT16T^oP^<`0Gk5]Yd[;0b`c5A]Yd[;0b8Mk1="
A$ = A$ + "IP1YK?X93lAYk?X93<8Mo1=IP1Yk?X93<8Mo1=IP1Yk?X93<8Mo1MIP1YK?X"
A$ = A$ + "93<`S_jfDje50Il3oh?5_oPV<`gX9gVB_^083WMAK:mj2P<BgN#C6H#jf3Jb"
A$ = A$ + "03Lf5]Yd[;0bhCOnWSgO#C6hKdTKCYGG0TQGoWJGYGK04`WobZK4>kI=IPSe"
A$ = A$ + "WnjjKbX93LlBgN#C6H#jf3Jb03BgN#C6H#jf3Jb03BgN#C6H`Jj3^>hdT1>7"
A$ = A$ + "YK?X93<8Mk1=IP1YK?X93<8Mk1MIP1Yk>X93<8Mg1=IP1Yk>X93<8Mg1=IP1"
A$ = A$ + "NN]_MUN]1`iCC^MUN]1`iCC^MUN]1`iCC^MUN]1`i;Mg1=IP1Yk>X93<`IGd"
A$ = A$ + "^B_f0hlY9gfB_n0hTmi_4_kPV<`glY_Z9gjB_61hLU^iPV<`Pd=7dT16T^iP"
A$ = A$ + "V<`ghj^XmUN=2`iAC^mUN=2`9be2Gc;nJ4PCSm9gnB_61hlX9oNn]onoVV<`"
A$ = A$ + "^:MG[WY93\gBge#G6H#jN3Jb03BgK#C6H#jN3Jb03BgK#C6H#jN3jb03nCoU"
A$ = A$ + "oElN3Jb0OSVLO8mj4PcAjF3Jb03lh[^?TNM2`i#CneM6?fZeTQK6?OMf5R_>"
A$ = A$ + "1hDHObmQd[C0>7OjcoLlN3Jb0OSVLo8mJ5PSW[?inAje:07_dM6dU16T^aPV"
A$ = A$ + "<`Pd=6dT1nV?mEGKbk9_nl1l^Bga#C6H#j63jb03BgGjIWicg5Jb`m#j^6Jb"
A$ = A$ + "03BgGjM9f[Lje<073?6njgfLje>0k?=inEje>0k?=inEje>0k??g9ggB_n1H"
A$ = A$ + "OY9ggB_n1HOii>inFje?0k;kC^_UNm3`>c[?ZM_h[Q0f=fWle#jeA0k3WWlk"
A$ = A$ + "9ecg5Jb`eTm9[93d>dT_6B_>2HoT^WP^<`Pd]4dT16T^UPV<`Pd]4dT1n6g7"
A$ = A$ + "OG7YG;1lndT_>B_F2hmU^SPV<`PdM4dU16T^QPV<`Pd=4dT16T^QPV<`Pd=4"
A$ = A$ + "dT16T^QP^<`Pdm3dT16T^OP^<`Pd]3dT16T^MPV<`Pd]3dT16T^MPV<`Pd]3"
A$ = A$ + "dT16T^MP^<`PdM3dT16T^KPV<`PdM3dT16T^KPV<`PdMSNg_mgogRoePV<LM"
A$ = A$ + "T^KL5dZMid[]0fVF_YP^<LWT^GPV<`7U^IP^<`Pdm2dT16T^GPV<`Pdm2dT1"
A$ = A$ + "6T^GP^<`Pd]2dT16T^EPV<`Pd]2dU16T^CP^<`gT^?PV<`Pdm1dT16T^?PV<"
A$ = A$ + "`Pdm1dT16T^?P^<`Pd]1dT16T^=PV<`PiVGmJ>beGjeM0c;MK0MIP1c=[FfW"
A$ = A$ + "\m:OmUN]7`gKYiE=i[_d[m0nNceN[kCFGnJ;mJ?P?JYIea=IMi[[d[o0nX7="
A$ = A$ + "_Z7O?TN=8`Po`Om_odV\^leFjeP03Z]g7=cZ9OmUNM8`gDK^j^TN]8`jJbje"
A$ = A$ + "g3YG;2gMoYobojGK^j^TNm8LgEKb5jbTNm8Lg=NNDCVd[7Qk^olWo7ojlXN<"
A$ = A$ + "5YGC2gIYWoYmTN=9LWUNnWfCjeT`MFjiOJ?YGC2gES?;IX:mjBh^ZLM`ineS"
A$ = A$ + "YB_^4^[B?kCK:mjBh^:m\?]Yd[;QkZdcndVB_^4^[FclYcKnN:mJCh>jIcUj"
A$ = A$ + "agKYGO2g=YWiY]UNm9LgTNVWfFjeW`MCI^ciC`STN=:LWTNNWfGjeX`MbhW?"
A$ = A$ + "kQiTN=:LGhij2F[d[EQk0kAVe:mJEh>#CV]8mjEhZ;m<>mUd[GQ[^dchdGB_"
A$ = A$ + "N5^jB?SCo9mJFh:K;cRU7G9N\U#je\`EFjiKj?YGc2GIYW_Y?UNM;LEUNfVn"
A$ = A$ + "Dje]`EEjIKjGYGk2GAYW[YOUN];L5UN^VnEje^`EDjiJjGYGk2GAYW[YOUN]"
A$ = A$ + ";L5UN^VnEje^`ESWChhMTNm;LeX9ck8mjGhZa[a8l>B_n5^JB?CCo;mJHh:9"
A$ = A$ + "ml<m_d[QQ[TdccdoB_66^BB??Co;mJHh:9ml<m_d[QQ[TdccdoB_66^BB??c"
A$ = A$ + "e#jea`EAjII^6B_>6^2lh5QmDjec#_;m<<G;YG?3m^dc`L]TNm<dkB?3ceCj"
A$ = A$ + "ed#?;ml;G?YGC3m\dc_L=UNM=d[6?7mKomo]hcbL=TNM=d[V>;Y;cN8mjJXG"
A$ = A$ + "UNfU[Yd[[QNEjIG^^B_f6jAYWKij:mJKX7UN^U[[d[]QNdSVYLomak:mjKXg"
A$ = A$ + "lXi9=INGYGO3mVdc\LmUN=>dCFkLUm<c[:mJLXW\fi:=INEYGS3mTdc[LmUN"
A$ = A$ + "=>dCNdnO]gHf;YGW3mRij^Ja\gB_>7j5UiUY=hj_GKVmBjei#_HYI8MIfCYG"
A$ = A$ + "W3mRj<Sf;7]d[eQN#Y5k<Ui<TN]>d3Zc;J`LdB_F7j1eiUU^OnPmBjej#?X<"
A$ = A$ + "[\diG0k]d[gQFGI>ACVcBjek#[[>[X9cI8mjMXeUN6UkUd[gQFGjID^OB_V7"
A$ = A$ + "JI[M>bIK`N9mJNXUYebI;mJNXEUNfTkYd[kQFEjIC^_B_f7JAYW;in:mJOX5"
A$ = A$ + "]dlRcHVSFjen#;Z<KXoB:YGo3]VbLacNLE[IcA9mjOXelXi5]H>JYGo3]VbL"
A$ = A$ + "Qf;9UN60J9YW7Qdc0#;Y<ChiYCB:m<0d:n3oeonoNV`[?eTDji0XEDW9ljS:"
A$ = A$ + "9UN>0J5eI2WM19UN>0J5[MVA_VSDji0XETNF4:B?70]RYc6f?<YTNF0J1UIQ"
A$ = A$ + "jI9[7CJYW7PdZc2jbd2B??0YEW56gSeU9Udc3#JUi0k?VFBjI28Yb<Pc]PFB"
A$ = A$ + "jI28Yb<`hV\^<YUNV0BZ<3X9C[9mL1TBImodV\^<YUN^0BA?VFDji28UUJbJ"
A$ = A$ + "cTFjI38QiJbjad2B?K09X7C[:m\1TPm9C[:m\1TPF<]Zdc6#2?jnhCSVTB?K"
A$ = A$ + "09hL;XEUNf0B`i9C[:m\1T`JjaJdTBji3h\mXV\F<YUNn0>K;Mf5>33J1YW?"
A$ = A$ + "PcVV<]\dc7`ICCVFGjI4h<Y9C[;m<2LVNFCFKVdB?S0WYefTeU9Ydc9`IA?V"
A$ = A$ + "N#ji4h\l^mHmJ>3YWCPcbFfWldOMjK37Udc9`IiEKaeO_V<WUdc:`IhE>g2W"
A$ = A$ + "e<9TNF1>3KIObSY9cI;m\2L6dTYWTNN1>J_jm_WV<9TNN1>J_ce2WV<W]dc;"
A$ = A$ + "`AjEOlRhnhSDB?c07Ygia`WV<YTN^1>:[]9_deU\V<9TN^1>:_BCN;Wg<LDB"
A$ = A$ + "?k07Q]dTOdNUC?ObmDji7H_]eVlF_^<PSDji7H_Y9C_;m<4\WdTYgUN6J>oo"
A$ = A$ + "R3cl%%%0"
btemp$ = ""
For i& = 1 To Len(A$) Step 4: B$ = Mid$(A$, i&, 4)
If InStr(1, B$, "%") Then
For C% = 1 To Len(B$): F$ = Mid$(B$, C%, 1)
If F$ <> "%" Then C$ = C$ + F$
Next: B$ = C$: End If: For j = 1 To Len(B$)
If Mid$(B$, j, 1) = "#" Then
Mid$(B$, j) = "@": End If: Next
For t% = Len(B$) To 1 Step -1
B& = B& * 64 + Asc(Mid$(B$, t%)) - 48
Next: X$ = "": For t% = 1 To Len(B$) - 1
X$ = X$ + Chr$(B& And 255): B& = B& \ 256
Next: btemp$ = btemp$ + X$: Next
btemp$ = _Inflate$(btemp$, m.SIZE)
_MemPut m, m.OFFSET, btemp$: _MemFree m
BASIMAGE1& = _CopyImage(v&): _FreeImage v&
End Function