QB64 Phoenix Edition
QuadDraw revisited - drawing program work in progress - Printable Version

+- QB64 Phoenix Edition (https://qb64phoenix.com/forum)
+-- Forum: QB64 Rising (https://qb64phoenix.com/forum/forumdisplay.php?fid=1)
+--- Forum: Code and Stuff (https://qb64phoenix.com/forum/forumdisplay.php?fid=3)
+---- Forum: Works in Progress (https://qb64phoenix.com/forum/forumdisplay.php?fid=9)
+---- Thread: QuadDraw revisited - drawing program work in progress (/showthread.php?tid=164)

Pages: 1 2 3 4


RE: QuadDraw revisited - drawing program work in progress - JRace - 10-08-2024

Aha, excellent!

Man, I stared right at that line of code and didn't catch that.  My brain fritzes out sometimes when going over someone else's code.


RE: QuadDraw revisited - drawing program work in progress - Dav - 10-08-2024

(10-08-2024, 12:00 PM)JRace Wrote: Aha, excellent!

Man, I stared right at that line of code and didn't catch that.  My brain fritzes out sometimes when going over someone else's code.

Lol, yeah happens to me also.

I changed a couple more things that was bugging me.  Made the brushsize scale up too, so it gets bigger as before.  Also made the IBOX function used for the Load/Save image input box autoscale up too, the default text box was too small on my new laptop.  Now that Function uses the text SUB bplus made.  The font size will scale up with the program.  Nice, small, handy dandy text SUB, @bplus!

- Dav

Code: (Select All)
'============
'QuadDraw.bas v1.9
'============
'An odd little drawing program.
'Draws/paints in several points on the screen at same time.
'Coded by Dav for QB64-PE OCT/2024

'NEW FOR v1.9:
'              - Increased brushsize (it just autoscales too now)
'              - IBOX$ now uses bplus text SUB to display all text.
'                Now text autoscales with the reset of the program.


'CREDITS: SPAINT SUB was made by Petr.  Thanks Petr!
'        text SUB was made by bplus.  thanks bplus!
'        (bplus helped me out how to draw lines without gaps too)
'        Thanks to James Jarvis for draw color and eraser idea/code!
'        And to PhilOfPerth and euklides for code suggestions.

'----------
'HOW TO USE:
'----------

'Left click on mouse and hold to draw on the screen.

'Press Up/Down arrows to set how many draw points to use, default is 4.

'Use the +/- keys to change brush size (1 to 50 allowed)

'Right click to fill/paint the areas with color.
'Default fill color is picked randomly, but you can select one.

'Press D to select a new draw color for brush.

'Press F to select a fill color (doing so turns random fill color off)

'Press P to toggle use Plasma colors On/Off.

'Press R to toggle random fill color on/off (default is a random color)

'Press E to toggle Erase on/off.  Hold it while drawing for dotted lines.

'Press A to smooth the screen (blur).

'Press S to save current image as QUADDRAW.BMP in current dir.

'Press L to Load a previously saved image on the screen.

'Press U to undo last change made to image.

'Space = clears screen and starts over.

'ESC = Ends program

'===================================================================
'NOTE: This program was originally sized to 1000x600.  This was too
'      small on higher resolution desktops so I added screen scaling
'      factor (ss) and applied that to all the drawing things so it
'      will autoscale to users desktop height.  That is why you see
'      '* ss' all over the place added to numbers.
'===================================================================

Dim Shared quads, brushsize, randfill, eraser, menu&, blk&, fill&, ss


ss = _DesktopHeight / 600 * .85 '<<<<< scale to 85% of users desktop
'                                    change this to suit your needs

If ss > 2.25 Then ss = 2.25 'limit ss factor for performace reasons


Screen _NewImage(1000 * ss, 600 * ss, 32)

menu& = BASIMAGE1&

cx = (_Width - (200 * ss)) / 2
cy = _Height / 2

wht& = _RGB(255, 255, 255) 'used often, so variable it
blk& = _RGB(0, 0, 0)
fill& = _RGB(Rnd * 255, Rnd * 255, Rnd * 255)
brushsize = 3 'size of drawing circle (brush)
quads = 4 'start with 4 drawing sections
randfill = 1 'default is use random fill color turned on
plasma = 0

ReDim Shared pointa(quads), pointx(quads), pointy(quads), lastmx(quads), lastmy(quads)

Cls , wht& 'start with white screen

_Delay .25

undo& = _CopyImage(_Display)

'====
main:
'====

_Title "QuadDraw - Points:" + Str$(quads) + "  BrushSize:" + Str$(brushsize)

DrawMenu

Do

    t = Timer 'for plasma colors

    While _MouseInput: Wend

    mx = _MouseX: my = _MouseY

    If mx <= (_Width - (200 * ss) - brushsize / 2) Then

        If _MouseButton(1) Then

            If stilldown = 0 Then
                _FreeImage undo&
                undo& = _CopyImage(_Display)
            End If

            If stilldown = 1 Then
                dx = mx - cx: dy = my - cy
                a = _Atan2(dy, dx)
                dis = Sqr(dx * dx + dy * dy)
                For i = 1 To quads
                    pointa(i) = (360 / quads) * i * (3.14159 / 180)
                    pointx(i) = cx + dis * Cos(pointa(i) + a)
                    pointy(i) = cy + dis * Sin(pointa(i) + a)
                    stepx = lastmx(i) - pointx(i)
                    stepy = lastmy(i) - pointy(i)
                    length = Int((stepx ^ 2 + stepy ^ 2) ^ .5)
                    dx2 = stepx / length
                    dy2 = stepy / length
                    For i2 = 1 To length
                        newx = pointx(i) + dx2 * i2
                        newy = pointy(i) + dy2 * i2
                        If plasma = 1 Then
                            r = Int(128 + 127 * Sin(pointx(i) / 25 + t) + 127 * Cos(pointy(i) / 25 + t))
                            g = Int(128 + 127 * Sin(pointx(i) / 25 + t * 1.5) + 127 * Cos(pointy(i) / 25 + t * 1.5))
                            b = Int(128 + 127 * Sin(pointx(i) / 25 + t * 2) + 127 * Cos(pointy(i) / 25 + t * 2))
                            fc newx, newy, brushsize * ss, _RGB(r, g, b), 0
                        Else
                            fc newx, newy, brushsize * ss, blk&, 0
                        End If
                    Next
                    lastmx(i) = pointx(i)
                    lastmy(i) = pointy(i)
                Next

            Else
                dx = mx - cx
                dy = my - cy
                a = _Atan2(dy, dx)
                dis = Sqr(dx * dx + dy * dy)
                For i = 1 To quads
                    pointa(i) = (360 / quads) * i * (3.14159 / 180)
                    pointx(i) = cx + dis * Cos(pointa(i) + a)
                    pointy(i) = cy + dis * Sin(pointa(i) + a)
                    lastmx(i) = pointx(i)
                    lastmy(i) = pointy(i)
                    If plasma = 1 Then
                        r = Int(128 + 127 * Sin(pointx(i) / 25 + t) + 127 * Cos(pointy(i) / 25 + t))
                        g = Int(128 + 127 * Sin(pointx(i) / 25 + t * 1.5) + 127 * Cos(pointy(i) / 25 + t * 1.5))
                        b = Int(128 + 127 * Sin(pointx(i) / 25 + t * 2) + 127 * Cos(pointy(i) / 25 + t * 2))
                        fc pointx(i), pointy(i), brushsize * ss, _RGB(r, g, b), 0
                    Else
                        fc pointx(i), pointy(i), brushsize * ss, blk&, 0
                    End If
                Next
                stilldown = 1
            End If
            stilldown = 1
            DrawMenu
            _Display
        Else
            stilldown = 0
        End If

        'if right click, fill sections with random color
        If _MouseButton(2) Then

            _FreeImage undo&
            undo& = _CopyImage(_Display)

            _Display

            dx = mx - cx
            dy = my - cy
            a = _Atan2(dy, dx)
            dis = Sqr(dx * dx + dy * dy)
            For i = 1 To quads
                pointa(i) = (360 / quads) * i * (3.14159 / 180)
                pointx(i) = cx + dis * Cos(pointa(i) + a)
                pointy(i) = cy + dis * Sin(pointa(i) + a)
                lastmx(i) = pointx(i)
                lastmy(i) = pointy(i)
                SPAINT pointx(i), pointy(i), fill&
            Next

            'Get next random fill color
            If randfill = 1 Then
                r = Rnd * 255: g = Rnd * 255: b = Rnd * 255
                fill& = _RGB(r, g, b)
            End If

            DrawMenu

            _AutoDisplay

            While _MouseButton(2) <> 0: n = _MouseInput: Wend
        End If

    End If

    'get keyboard input
    key$ = UCase$(InKey$)
    If key$ <> "" Then
        Select Case key$
            Case Chr$(32): Cls , wht&: DrawMenu 'scpace clears screen again
            Case Chr$(0) + Chr$(72)
                If quads < 16 Then
                    quads = quads + 1
                    ReDim Shared pointa(quads), pointx(quads), pointy(quads), lastmx(quads), lastmy(quads)
                End If
            Case Chr$(0) + Chr$(80)
                If quads > 1 Then
                    quads = quads - 1
                    ReDim Shared pointa(quads), pointx(quads), pointy(quads), lastmx(quads), lastmy(quads)
                End If
            Case "+"
                brushsize = brushsize + 1: If brushsize > 50 Then brushsize = 50
            Case "-"
                brushsize = brushsize - 1: If brushsize < 1 Then brushsize = 1
            Case "U": _PutImage (0, 0), undo&
            Case "A": Smooth
            Case "P": If plasma = 1 Then plasma = 0 Else plasma = 1
            Case "S"
                saveimg$ = IBOX$("NAME OF BMP TO SAVE-> ", 40, _RGB(255, 255, 255), _RGB(96, 96, 96), 0)
                If saveimg$ <> "" Then
                    If LCase$(Right$(saveimg$, 4)) <> ".bmp" Then saveimg$ = saveimg$ + ".bmp"
                    SaveAsBMP saveimg$
                    a$ = IBOX$(UCase$(saveimg$) + " SAVED!", 0, _RGB(255, 255, 255), _RGB(96, 96, 96), 2)
                End If
            Case "F"
                new& = ColorPicker&(200 * ss, 150 * ss)
                If new& <> 0 Then
                    randfill = 0
                    fill& = new&
                End If
            Case "D"
                new& = ColorPicker&(200 * ss, 150 * ss)
                If new& <> 0 Then
                    blk& = new&
                Else
                    blk& = _RGB(0, 0, 0)
                End If
            Case "E"
                Select Case eraser
                    Case Is = 1: eraser = 0
                    Case Is = 0: eraser = 1
                End Select
                If blk& = _RGB(0, 0, 0) Then
                    blk& = wht&
                Else
                    blk& = _RGB(0, 0, 0)
                End If
            Case "R"
                Do Until InKey$ = "": Loop
                Select Case randfill
                    Case Is = 1: randfill = 0
                    Case Is = 0: randfill = 1
                End Select
            Case "L"
                openimg$ = IBOX$("IMAGE TO LOAD-> ", 40, _RGB(255, 255, 255), _RGB(96, 96, 96), 0)
                'if filename given
                If openimg$ <> "" Then
                    'if file exists..
                    If _FileExists(openimg$) Then
                        'test loading image
                        o& = _LoadImage(openimg$)
                        If o& = -1 Then
                            a$ = IBOX$(UCase$(openimg$) + " NOT VALID!", 0, _RGB(255, 255, 255), _RGB(96, 96, 96), 2)
                        Else
                            _PutImage (0, 0)-(_Width - (200 * ss), _Height), o&
                            _FreeImage o&
                        End If
                    Else
                        a$ = IBOX$(UCase$(openimg$) + " NOT FOUND!", 0, _RGB(255, 255, 255), _RGB(96, 96, 96), 2)
                    End If
                End If
            Case Chr$(27): End
        End Select
        Do Until InKey$ = "": Loop
        _Display
        GoTo main
    End If

    _AutoDisplay

Loop

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


Sub Text (x, y, textHeight, K As _Unsigned Long, txt$)
    'Text SUB by bplus.
    Dim fg As _Unsigned Long, cur&, I&, multi, xlen
    fg = _DefaultColor
    cur& = _Dest
    I& = _NewImage(8 * Len(txt$), 16, 32)
    _Dest I&
    Color K, _RGBA32(0, 0, 0, 0)
    _PrintString (0, 0), txt$
    multi = textHeight / 16
    xlen = Len(txt$) * 8 * multi
    _PutImage (x, y)-Step(xlen, textHeight), I&, cur&
    Color fg
    _FreeImage I&
End Sub

Function ColorPicker& (xpos, ypos)
    'ColorPicker& Function by Dav, SEP/2020. FREE TO USE FOR ALL
    'Function Returns color picked by user if one selected.
    'If no color selected before Closing, function returns 0
    'Click CLOSE to close the ColorPicker image.
    'ESC key cancels selection and closes picker too.
    'The xpos/ypos is x/y point on the screen to place colorpicker

    '=== Save users display status
    DisplayStatus% = _AutoDisplay

    '=== copy background screen using _mem (thanks Steve!)
    '=== Used this method because_COPYIMAGE(_DISPLAY) didnt always work
    Dim scr1 As _MEM, scr2 As _MEM
    scr1 = _MemImage(0): scr2 = _MemNew(scr1.SIZE)
    _MemCopy scr1, scr1.OFFSET, scr1.SIZE To scr2, scr2.OFFSET

    'Create Colorpicker image
    v& = _NewImage(463, 239, 32)
    Dim m As _MEM: m = _MemImage(v&)
    A$ = "" '...COLORPICKER.PNG encoded by BASIMAGE...
    A$ = A$ + "haIkMo7KDGOh77_oaBfFFfOhBL9c5gGWaX9BRK62K46AkHnS9I=`09EP<4V="
    A$ = A$ + "e25F]0eB;]jK;#YFXUEJQJGM573`644fjGM:62H66L42I^89^HF<co`T]oHo"
    A$ = A$ + "anW]TUUk;O2BnLONnmjek3L7m>li;cS4;]LohSGjC_[gM=C6WciL>WciL>Wc"
    A$ = A$ + "iL>WciL>WciL>WciLOFMgBE9=CX6XN80S0C0W7n48C2O2LNH2H480e3e0c4^"
    A$ = A$ + "5XZHUa7hn4hl`4`8#0Z7Z1V9L;#boQOFngVWjlLWGjhUNN]SGkiAW:SK^U[]"
    A$ = A$ + "lUDW:cUmbnoNZbCf>]MJkdfYVnIk\bR]CKWf>o\CkdEn=KWEVBc:SC0I:[oV"
    A$ = A$ + "IUa7h\MJkd=m>KWEVBc:SC0I:[oVIUa7h\MJkd=m>KWEVBc:SC0I:[oVIUa7"
    A$ = A$ + "h\MJkd=m>KWEVBc:SC0I:[oVIUa7h\MJkd=m>KWEVBc^e?go9QI1;0NB80_0"
    A$ = A$ + "LLhL`73oW4nHhL`aQG02`C2;0V5L[`W;f]2c2F0lT#0N1hh`iP?6n?anHhL`"
    A$ = A$ + "aQG02`C2;0V5L[`W;QK5V5\0h9Q0l2`aQc1O<lORma`iPS3_04PW4F0<;hFQ"
    A$ = A$ + "?G\2mk?k:?V]c:CYIf>]MJkdfY[h>KWEVBc\MJkdfY]CGaMf>[<UVIkdfY]C"
    A$ = A$ + "KW^Rk\MFI:=cfY]CKWf>M5gIk\bDJV]CKWf>]Mj:^cfIUYd<KWf>]MJkdELW"
    A$ = A$ + "]c:CYIf>]MJkdfY[h>KWEVBc^]_ho:QI3;4J02```aPc2O4l_BhSPc273662"
    A$ = A$ + "#3`2QI3g6l5SMK`\Q52=01HHhH`IQ?2nGan8h\`aPQQ0d0\#Hf`]1Oa4^=Hf"
    A$ = A$ + "`2Q6P0<<L<h\`71o[HO4LFhH``#0J0F8<KhfP_H\2mk?k:?V]c:CYIf>]MJk"
    A$ = A$ + "dfY[h>KWEVBc\MJkdfY]CGaM5[fiMOgIbl\?KV<o_o_IbLZC5[gNcTiaOl<I"
    A$ = A$ + "^iK>oom_okObmoloDhG>R>OR>oR>O_J^LT[C[X[GIOJ59j?Knc?oWNAG^cge"
    A$ = A$ + "[LY#_lUVIkdfY]CKW^Rk^FKWcJFIbl7n35fie#3=i]Ql]X>EQdifgn:\;7AO"
    A$ = A$ + "Mi[A5miR>?oKo]Ynd:j[Ib>mR>=BkRjWf>]MJkdfId\MFn^[UfiBFBj?onX?"
    A$ = A$ + "jbg7eRIk<jngmn_Oj^L4meW[NGdOFJ?]V\[Gf>]MJkdfY]cK<gEKk<ja[lZM"
    A$ = A$ + "AM6f]bgVZfiEC[;JAomhYEQNOGceR^ogf>]MJkdfY]cKlgEKk<ZoM]<f3CcG"
    A$ = A$ + "KfRniAN]\XonIOO>_FGfo\I]MJkdfY]CKWgH^[VfiDMO>GcJ^L38jiDcT=NO"
    A$ = A$ + "nbgbGk<OgWcX?GdUSXWoB5bUSX_f9KAoL=Sj\AGgcgoO3AOnb]fiMlUoW9<7"
    A$ = A$ + "HA#3#066>:l>`72oc4n#hMPS2331X1HA`LPk0nba^3H>`RP6P0<<LDhMP?4n"
    A$ = A$ + "Wan#hMPS2331X1HA`LPk0nb9L7`LP51=01HHhX`k0O8l?SmQ`k075662#3`R"
    A$ = A$ + "Pi0g1lUSU[Ik\lMG=]cle4Rj:5JS]Hd>cg^B7[#_L\a=>iO=A??M;T[oIOIM"
    A$ = A$ + "ZJWAONZ#O>5WVIkdfY]CKW^Rk^JJWikna5MO=;Tk7Gdb^CT_=I]cYjaHm:g7"
    A$ = A$ + "^2mbAaX9VVfIQd8]MJkdfY]CGig^JJWikaR==]c\Ol9cgV\fIQNjGXOMi[e5"
    A$ = A$ + "mL8bfY]CKWf>]MjRV]c2[M6][lJ#9j[?G?N[AbnjT]CKWf>]MJkl6cIk<n[["
    A$ = A$ + "#NMg4mlPZ#kKf>]MJkdfY]cK<W]ch_^XO^W5bRNMLV[gO7\MJkdfY]CKWOfH"
    A$ = A$ + "f>CNiX#Oo5<JCem1MZJWlm8g\?fE<KWge=m?BhnP53[62`NQS0_=l1`o8Q?0"
    A$ = A$ + "NKh8`NQ0\JHa`m1g5LCa^;hnP53[62`NQS0_=l1`o8f70_=L4H_#0F=\HhnP"
    A$ = A$ + "k2^Y4^;hnP53[62`NQS0_=l1`o8f70_=L4H_#0F=\HhnPk2^YHiJf>;OGY\M"
    A$ = A$ + "6mlP]#OO??OkjIk<jnNF8_?fNU5eJW\gKL_JNmMJkdfY]CKWGIf>;OGY\MF\"
    A$ = A$ + "N<8_Nf>S4mhaVVniTmNd[]CKWf>]MJkl6cIk<g_GnTfgOiSJ]5Sg;h]MJkdf"
    A$ = A$ + "Y]c[<KWU_cfInOO`;jgKJ5jRjWIohgJkdfY]CKWf>_aLf>Wjg3ISnMDJQnNO"
    A$ = A$ + "OJN_A`W[#f>]MJkdfIUiliIKQmn_NdmWl`7>oW>A;kgKi;GN=ZHkdfY]CKW^"
    A$ = A$ + "Rk\MVlegiTmn5dEnMEFd___WZW7Af>]MJkdfY]cK\W]c2k[;k[GA?6^iKGii"
    A$ = A$ + "<DiBkL6glO?QZQU0[12`NP33W2^8lgChR`YP33k12`JPU0E3c0^iHc0Z6F2\"
    A$ = A$ + "680k1><L:hR`O?f5QC176f34Pe0;1Z6V1Lc9<3XJH9`JP0\7h``YP;2omHG4"
    A$ = A$ + ">5LHH?#0F3\4XJH6`=7;GcfIik\MVnfITlMO?;dgOL]MJkdfY]CKWEVKjlg1"
    A$ = A$ + "IIoJj8O[L\MV_oo7\MJkdfY]CKWgH_Rm_k[CCk\#K1UjOoMF8GN]MJkdfY]C"
    A$ = A$ + "KW^[\[Vfi6ghTOj5mHIVf_^YZ54mj3Q_F>^bmI=Ok:?oNbgUSXE8G>R^<TMc"
    A$ = A$ + ">O?V]5j?_cLmJD9jeCZ]CKWf>]M6=KWU_kZYM6e6bgRN<MSj6i[_4meLef2R"
    A$ = A$ + "fE^_Mika?>je;BJ_LT_G7WGijeDmn=DQLocW\EX_6?Cc\MJkdfY]CGaMG=]c"
    A$ = A$ + "YZaD8;jiZJaXM>E?WGCkUS[VNGf;kF\]CKWf>]MJkl6cMef>_FJFijaU<];k"
    A$ = A$ + "WS^5bkI1iJAombe?3edln0?Gf]HKWf>]MJkdfi=VkZ]M6Y#NO2PKbNNoTfag"
    A$ = A$ + ";PBKo<GMc\O<YCck3lA;jh`lWoenmQ]Dd>_WKiCBHN#]#S#06267>9lN`WT`"
    A$ = A$ + "k1W467622#S#]`lPk1^UHg3<?XFXA8031S3W4N?hCRmN`9QaQQP0d8D;<?hN"
    A$ = A$ + "PK9Qk1V7D;d84PQPaQC2_7l9aN?hT`h`##0J4Z5V7L?`]4;GcfIik^FJWARN"
    A$ = A$ + "_hIOkKZKXAoN^T?nX5cfITXWK#CEc;jcOUW3ACUXWSACeS=MdekNk=go>ldf"
    A$ = A$ + "Y]CKWf>]MNSi^FKWI;ZW5eKbnmb^Xk;fTmk6jBUXNNdi;_L4mWG\>mRj_ijg"
    A$ = A$ + "IWG_TVIkdfY]CKW^Rk:V]CIkdfY]CKWf>o\`\MFI:=cfY]CKWf>M5gIk\bDJ"
    A$ = A$ + "V]CKWf>]Mj:^cfIUYd<KWf>]MJkdELW]c:CYIgkgh_V`32?6\F8032_<L2h2"
    A$ = A$ + "`O=Q;0W0NIH#80[5N<h1Qk5n6a^Gh1Q73F;4P1QG6>1L1h_6k2`9PG6642`J"
    A$ = A$ + "Q73N#hNQ_A2g;lP`S1[52`P`;3W0^0lGSM1h4`;3321H]`S1?8L_`g8FQnmW"
    A$ = A$ + "MU7cfIUYd<KWf>]MJkdELW]c:CYIf>]MJkdfY[h>KWEVBc\MJkdfY]CGaMf>"
    A$ = A$ + "[<UVIkdfY]CKW^Rk\MFI:=cfY]CKWf>M5gIk\bDJV]CKWf>]Mj:^cfIUYd<K"
    A$ = A$ + "Wf>]MJkdELW]c:CYIcjfo;9l``bPe21H#hP`K0W3n;9L>h=P32321H]`bP76"
    A$ = A$ + "V5LkaV5l``bPe21H#hP`K0W3n;a>7l6`1Q1Q0\FHI`33c2^m4V5l``bPe21H"
    A$ = A$ + "#hP`K0W3n;a>7l6`1Q1Q0\FHI`33c2^mH5jgOfEN<KWEVBc\MJkdfY]CGaMf"
    A$ = A$ + ">[<UVIkdfY]CKW^Rk\MFI:=cfY]CKWf>M5gIk\bDJV]CKWf>[\KWZlU]c:;f"
    A$ = A$ + ">]MJkdfYVnIk\bR]CKWf>_a_MjL^Y_IkdfY]CKW>W;MKfgiO>Qi3;7F74PM3"
    A$ = A$ + "70N=h\`O>Qc2_6L0Hg#0F7\LHn`\Qk<f\Qi3;7F74PM370N=h\`O>fIQG3>0"
    A$ = A$ + "\K80[3F><OHf`MV`\Qi3;7F74PM370N=h\`O>fIQG3>0\K80[3F><OHf`M6c"
    A$ = A$ + "iLUGcfY]CKWf>M>GjV]CKWf>]MjL^d=KWf>]MFif>o_ogoKVgomOo9eOj?mW"
    A$ = A$ + "bLQ;LQ<WolWOBm^_kkVigokomCZCNbCVi]N[gJBMRCLR<ofOk_MBmKn=oV<_"
    A$ = A$ + "j[nZI>lQ?L>=nhSWiGo[oeInEoZOeTJ\a6;c_hGl;b<b8S<Y6L`1clcoiolL"
    A$ = A$ + "JGkJGIjYWNb[]^e]ViIOfW=_J_mfcdJ[]VC]dB;IJZYVblcnIo\LJM[KMIFc"
    A$ = A$ + "JFCVj[_n9EMeEGVE^bEViWlCn9idBGjBc\TU\TlJ1;H1InAoXODNm0?`3TCo"
    A$ = A$ + "PO`?8cgokomclmnNO_9eLVcLblMn>OW<cLVcLBm]ofOk<cH6c8cMOggM>MWG"
    A$ = A$ + "jkQNkgn]?YnVOc_IV_nGo[Wi[menJCZ_jGm[Vi[lEn:I^YKjVbY_dGj;Ui;l"
    A$ = A$ + "5n2CZ?oWocWYZZZ:QomonOKkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]"
    A$ = A$ + "MJkdfY]c:`fiLWa5CX6H5#C#060f?<1L6hR9L6H2Ho`0#0J2F1D3<GH6aV;D"
    A$ = A$ + "3\2X98030k7V0>3LaHW1V0f?<04PVPE0e0c5VA2c5Z1F1d44P1Pm3C0W1^H\"
    A$ = A$ + "c0C0k7602#C`:PJPi2c8V]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY"
    A$ = A$ + "]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]M"
    A$ = A$ + "JkdfY]CKWf>]MJkl6[fimo]nS9\0HU`C11HG`nPS3W6nS9LJhh`nPM11hYPE"
    A$ = A$ + "2;0^OhK5knQ50[4N:80k2f7LLhd`O<fYQS3k3f54PW2F9\0hnQ_E2g?\0HU`"
    A$ = A$ + "C11HG`nPS3W6nSa>=LLHO`^P0lD`:Q50g?l]RIkdfY]CKWf>]MJkdfY]CKWf"
    A$ = A$ + ">]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY"
    A$ = A$ + "]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>_aZM>_INn4F4\:XI80m3S175>9Ln"
    A$ = A$ + "4>9LDH<XO80=3[2F4<?HVaV7\8HE#c#0j763>:LBhla>9LDH<XO80=3[2F4<"
    A$ = A$ + "?HV9<?HA`ZPVQ0d?<6LDhT`iSMBhX`H#o#0J6F5\8HN`<SIkdfY]CKWf>]MJ"
    A$ = A$ + "kdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKW"
    A$ = A$ + "f>]MJkdfY]CKWf>]MJkdfY]CKWUk]c7jkn^9lX`C0=31XOh5QG1NChMCh=QG"
    A$ = A$ + "1NAXO80=3?1lX`31OgH?4lX`C0=31XOh5QG1NChMSmV`[0_8d?4PVQW0NDhQ"
    A$ = A$ + "P_K2?4lX`C0=31XOh5QG1NChMSmV`[0_8d?4PVQW0NDhQP_K<KWf>]MJkdfY"
    A$ = A$ + "]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MFng>M>gdc\MJkdfY]CWcU^Ikdf"
    A$ = A$ + "Y]CKW>W;McfY]CKWf>M>GjV]CKWf>[#KWQB\\fY3UF9_NEEYedd1a#VZ:YBN"
    A$ = A$ + "NEJoWYYK6V94:]BcNTiNV4Z5Z3F?4PnPAQaQG7>C2_><><:d74Pe3e1e2?2<"
    A$ = A$ + "gH?2D;D7\N80m1S2S3_>LVH_><><:d74Pe3e1e2?2<g4N4XFX>Hm#0j36567"
    A$ = A$ + "NMh<aNMHLHDX?80[7Z3Z5N4H^abi^>n=]\MN]O#dfY]CKWf>]MJkdfIj>8Jk"
    A$ = A$ + "dfY]CKWf>]MJk<M74]MJkdfY]CKWf>]MV^3Rf>]MJkdfY]CKWf>Cg1AKWf>]"
    A$ = A$ + "MJkdfY]CKWYkPX]CKWf>]MJkdfY]cdM#dfY]CKWf>]MJkdfIj>8Jkl6[fI=E"
    A$ = A$ + "OZ4F:D?\180k461>4<1LZ4V0>4<2\C80K0Z7F:D3DM\JPU2e3K02`>QAP31C"
    A$ = A$ + "0W:f4`QPAPM21H3#m`BQJPZCX6HY#m`6P0\CH4h#`4`YR=1L8H4HW#0f0D?\"
    A$ = A$ + "DX6XjHiLG7oVFf>_f?8JkdfY]CKWf>]MJk<M74]MJkdfY]CKWf>]MV^3Rf>]"
    A$ = A$ + "MJkdfY]CKWf>Cg1AKWf>]MJkdfY]CKWYkPX]CKWf>]MJkdfY]cdM#dfY]CKW"
    A$ = A$ + "f>]MJkdfIj>8Jkl6[fi2OPg:QU3=0K42`>PQQ3073N[4>6L0HHH7#0f8d0\L"
    A$ = A$ + "HQ`34KQ`bQ6P=21H7```1PS1_E\S17066f14P=2=0;7F8l09\#Hi#3`6Q0\3"
    A$ = A$ + "HHh0`aPg:faP3033k02`6Q6PU3;4NPHiLG7oVFf>_f?8JkdfY]CKWf>]MJk<"
    A$ = A$ + "M74]MJkdfY]CKWU1]CWc=]=KWf>]MJkdiLYKf>]MJkdfYciBg\MJkdfI5Jk\"
    A$ = A$ + "ZB\\fY3QBZTWGEEB=MM#\j;maUB9_FEJoY[>=Mc`<EEEYEJV]CKWf>]MJkdf"
    A$ = A$ + "Y]c<YJf>]MJkdfY]CKWf>cTZ]hOh_;Q77F=d24PNQm2_4L4hgU`APG2f;d;4"
    A$ = A$ + "PFPE3?>\Hh76Ka`S3[6J12#_`NQG2>2lkRM4hUPm2m21X5He`S3;6nQ9\Hha"
    A$ = A$ + "QE3]01XGH_`;171nMa>2lB`NQNQ0d2\JhaQ53o`HiLf>]MJkdfY]CKWf>]MV"
    A$ = A$ + "afY]CKWf>]MJkdfY]c;?KWf>]MJkdfY]CKWf>_>Oc#KWf>]MJkdfY]CKWYkV"
    A$ = A$ + "Qf>]MJkdfY]CKWf>Cg=3]MJkdfY]CKWf>]MV^K6JkdfY]CKWf>]MJk<Mg<\\"
    A$ = A$ + "ZMFK=CT`ZP6QFP0d;<4<6<><A2S3S131m21X5XAHE#]#=aZ5F5d8d24PNQQP"
    A$ = A$ + "aPaQ9R=><6<4d;4PFP6QE1e2eT#]`ZP6QFP0d;<4<6<><A\aQaPQPNQ0d2d8"
    A$ = A$ + "\:XFXVHiLf>]MJkdfY]CKWf>]MVafY]CKWf>]MJkdfY]c;?KWf>]MJkdfY]C"
    A$ = A$ + "KWf>_>Oc#KWf>]MJkdfY]CKWYkVQf>]MJkdfY]CKWf>Cg=3]MJkdfY]CKWf>"
    A$ = A$ + "]MV^K6FFe>Gf?nECX>H]`C31hiQ1QAQ32_J2746564NN80?=\FX>HI`?>fbP"
    A$ = A$ + "jPe2?=4PW76465>8lZa>8<:<8ll#0NJH]#M`bPOL2;3Z3F;ld#0NNH#HDhP`"
    A$ = A$ + "[6kP`X`P`c31hYQe2e1;3naaL>Gie\MJkdfY]CWcU^IkdfY]CKW>W;McfY]C"
    A$ = A$ + "KWEV]cXOdMUBI_Z[:DBUl:FXd:kcZZ[ZT:iE[Z:YbNEERoW4gf8DJUhljBo1"
    A$ = A$ + "UBYIf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWLf>]MJkdfY]CKWf>]"
    A$ = A$ + "MnYA6KWf>;kKW[H97>QjQVPFQ0d3<0<2\Oh`9\OH4H0X780]2=1e3[0FB\E0"
    A$ = A$ + "e3=1]21X7H0H4Ho`QS]OH4H0X780]2=1e3[0FB2[0Z7J2J52#?`0`8`nQ37K"
    A$ = A$ + "o`8`0#?#0J5J2Z7F1\THiJf>]MJkdfY]CKWf>]MnYA6KWf>]MJkdfY]CKWf>"
    A$ = A$ + "]MJkdfY]CKWf>]MJklbgf`fY]CKWf>]MJkdfY]c2Hf>]MJkdfY]CKWf>]MJk"
    A$ = A$ + "dfY]CKWf>]MJkdfY]CKWLf>]MJkLj[M^ZUNX4J0J6f44P]3m333S17:QaPQQ"
    A$ = A$ + "nQ]31HC#c#3`ZPU6KE#3#c`VP0\MXOHHH<h#a6366j7f>4P=1=3=0[2FJ2[2"
    A$ = A$ + "J0J6f44P]3m333S17:fH``#o`fQ0\9XIX1HE`BSU[IkdfY]CKWf>]MJkdfiW"
    A$ = A$ + "6I\MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]c;OK3KWf>]MJkdfY]CKWf>;P"
    A$ = A$ + "IkdfY]c:cfYciVnV]CKWf>]MjL^d]jFanCXAHm#K#0j6j36265fO2S231m1M"
    A$ = A$ + "31X=Hm#S#M`:RE7d8\NX=80M3m131S2k?fX`##O#g#0J3F?d8D7\R4Z3J4F?"
    A$ = A$ + "d64P^QnPQPAQm7KDH8X?XK80]1[7J4Z3FA<WcEN=KWf>]MFQf>Sni4F:Ue2G"
    A$ = A$ + "jS;UbN_DEEEBUlHHEUFI]Z3EEBUlV6EEB==Mc`;M8=DBUVIkdfY]CKWf>]MJ"
    A$ = A$ + "kdfY]CKWf>]MJkdfY]CKWf>]MnoKf>]MJkdfY]CKWf>]MVafY]CKWf>]MJkd"
    A$ = A$ + "fY]c;?KWf>]MJkdfY]CKWf>_>Oc`bZfI3odOI2[3f8d64P^QM0k666nU9<<\"
    A$ = A$ + "KH7#g#0J3f8\>X1hW6[1HM`6QfP0d=\3Hg```_<f``^QM0M31X=HS`jP6POJ"
    A$ = A$ + "2=0[3f8d64P^QM0k666nUa66f=\3XK80]1K4F7d0lCSUcIkdfY]CKWf>]MJk"
    A$ = A$ + "dfI6KWf>]MJkdfY]CKWf>_l\MJkdfY]CKWf>]MJkljl=3]MJkdfY]CKWf>]M"
    A$ = A$ + "JkdfY]CKWf>]MJkdfY]CKWf>]MnYcfY]CKW9W]CKWf>]MJkdfY]cde>K\nAB"
    A$ = A$ + "XIX5XM80K3j5j76269QQPnQNQ]11XMX5XIXAXnH=2=3]0]31HK#_#o`#`8a6"
    A$ = A$ + "2j7j5f64PfQFPVQ6QjCXAXIX5XM80K3j5j76269f##o#_`fP0d>d2d<d8DO\"
    A$ = A$ + "L>KWf>]MJkdfY]CKWf>cHkdfY]CKWf>]MJkdfiUW]CKWf>]MJk\<XMjL^Y]I"
    A$ = A$ + "kdfY]CKW>W;McfY]CKWf>M>GjV]CKWf>[<KWQZZ^T:kEmUnhBYTWGEEBUlHH"
    A$ = A$ + "EUD9^NEMEUDI_Z^d7G:Ull:DBUhljBgFYD:=[Ye\W4f0d:\I80K5j1f9<0\W"
    A$ = A$ + "460f9d3\E80K6J5f0d4\VH=1K0J5f<4P]2m0k460fC\1PM2m0K52`VQFQ=0="
    A$ = A$ + "1[9QVP=0]2K62`FQNPM230k9f0`>QNP]21Hc#[`6PVPe4;GcfY]CKWf>]MJk"
    A$ = A$ + "dfY]c;ONIkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWGilbfY]CKWf>]MJkd"
    A$ = A$ + "fY]cYNf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWLf>]MJkLj[M^nV6"
    A$ = A$ + "8QFPfP>P0\5XKXGX?HP4j3j5j6f24P>PfPFPe3=5Km#;#K#7#0f2d=d;d7<#"
    A$ = A$ + "\nPNQ^Q]01X3X=X5Hm#C9\NX5X=X380K1j6j5j368FO#_#g`FP0d1d6d2\NX"
    A$ = A$ + "YHiJf>]MJkdfY]CKWf>]MNic;KWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkl"
    A$ = A$ + ":WGf>]MJkdfY]CKWf>]M>ecfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJ"
    A$ = A$ + "kTcfY]CKWCO]cFf`>CHC#k#W#0j2f6\MXGHW9d;\MHK#G#0j4J7f4d2\QH]0"
    A$ = A$ + "K2J7j42#G`fP]3m2k<F_`fQ]1M11XCXMHC#;`6BX5HC#k#W#0j2f6\MXGHWa"
    A$ = A$ + "j5f>\=X;80M2]3K2J1f#\L=KWf>]MJkdfY]CKWY[MjL^Y_IkdfY]CKW>W;Mc"
    A$ = A$ + "fY]CKWf>M>GjV]CKWf>[<KWEEEEUDI_[Wol>?mY?M9Ef;4Z^T:iiEXT:aomj"
    A$ = A$ + "BOLYDRK7NY?^DJjjflCe\MJkdfIUKk\D=KWf>]MVoIkdfY]CKWCeY]]CKWf>"
    A$ = A$ + "C^fJ]W4J7j0j42#G`FP]1M3mT#g`fP]0M11XCX3XMX=XeH]1]3M0M21X;H;`"
    A$ = A$ + "fP^QNRe=\=H;#G#0j4j0J7J3J=QfPfQ>P>Q0d5\5HK#g#?aj6f6\5X;80M2M"
    A$ = A$ + "0]3]1]6;GcfY]CKWf>]MJkdfY]cXIkdfY]CKWf>]MJkdfiU?_\MJkdfY]CKW"
    A$ = A$ + "f>]MJkdfY]CKWf>]M>IWff>]MJk<i\MJkdfY]cYjdffY]CKW9W]cdf>cjOgf"
    A$ = A$ + "Y]CKWf>]MJkdfY]CKWf>caY]]CKWf>C^>flFCXcY`c01hiP^V2K1fJ2K1jJ:"
    A$ = A$ + "lL#0N6XcY#7`Vc\e>nDMVeonEnhliIP0lL#GCQ]0K=fFP^V2?74PW1jL:d1\"
    A$ = A$ + "i4j0jL:l<#0N>X[Y`FP]6K;#GCQW32`c0M>5j0fL\L=KWf>]MJkdfY]CKWf>"
    A$ = A$ + "SV]CKWf>]MJkdfY]CKWGnlbfY]c?3g>_R>f\]CKWf>]MJkdfY]CKWf>]MVcC"
    A$ = A$ + "KKWf>]MVLf>]MJkdfiDMJKkdfY]cTcf9KUiX?>E]c9kcIkdfI9^MNmjkSHkd"
    A$ = A$ + "fY]cTcfY]CKWEV]CWciL>WciL>WciL>WciL>WciL>W;OkoC[%%L2"
    btemp$ = "" 'decode string data to image data
    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


    temp& = _NewImage(_Width(v&) * ss, _Height(v&) * ss)
    _Dest temp&
    _PutImage (0, 0)-(_Width, _Height), v&
    _Display
    _Dest 0
    _FreeImage v&

    'Put colorpicker image on screen at xpos/ypos
    _PutImage (xpos, ypos), temp&: _Display: _FreeImage temp&

    '====================================

    '=== Now get users color selection...

    '=== no selection made yet
    selected = 0

    '=== main loop
    Do
        '=== Get mouse input
        While _MouseInput
            '=== Get mouse x/y
            mx = _MouseX: my = _MouseY
            '=== Only poll this area
            If mx < (xpos + (473 * ss)) And my < (ypos + (243 * ss)) Then
                '=== if click button in area
                If _MouseButton(1) Then
                    '=== if clicked in CLOSE box area
                    If mx > (xpos + (352 * ss)) And mx < (xpos + (457 * ss)) And my > (ypos + (5 * ss)) And my < (ypos + (72 * ss)) Then
                        GoTo donepicking
                    End If
                    '=== made a color selection
                    selected = 1
                    '=== Get color where mouse pointer is
                    clr& = Point(mx, my)
                    '=== Make Red Green Blue color values
                    red = _Red32(clr&): grn = _Green32(clr&): blu = _Blue32(clr&)
                    '=== show color selected in box
                    Line ((xpos + (246 * ss)), (ypos + (7 * ss)))-((xpos + (347 * ss)), (ypos + (70 * ss))), _RGB(red, grn, blu), BF
                    '=== Update gradient strip with color...
                    '=== ...only if mouse not in gradient strip area
                    If mx <= (xpos + (246 * ss)) Or mx >= (xpos + (457 * ss)) Or my <= (ypos + (77 * ss)) Or my >= (ypos + (107 * ss)) Then
                        c = 0
                        For x = (xpos + (453 * ss)) To (xpos + (242 * ss)) Step -(4 * ss)
                            Line (x, (ypos + (77 * ss)))-(x + (4 * ss), (ypos + (107 * ss))), _RGB(red + c, grn + c, blu + c), BF
                            c = c + (4 * ss)
                        Next
                    End If
                End If
                '=== update screen
                _Display
            End If
        Wend

        '=== ESC key cancels picking and closes
        If InKey$ = Chr$(27) Then
            selected = 0: GoTo donepicking
        End If

        '=== don't be a cpu pig
        _Limit 60

    Loop 'UNTIL INKEY$ <> ""

    donepicking:

    '=== wait for mouse button UP to continue
    Do: mi = _MouseInput: Loop Until _MouseButton(1) = 0

    '=== if user selected color, say so
    If selected = 1 Then
        ColorPicker& = clr&
    Else
        ColorPicker& = 0
    End If

    '====================================

    'Restore background as it was
    _MemCopy scr2, scr2.OFFSET, scr2.SIZE To scr1, scr1.OFFSET
    _MemFree scr1: _MemFree scr2

    'Restore display status as it was
    If DisplayStatus% = -1 Then _AutoDisplay

End Function

Function BASIMAGE1& 'quadmenu3.png
    v& = _NewImage(185, 593, 32)
    Dim m As _MEM: m = _MemImage(v&)
    A$ = ""
    A$ = A$ + "haIkm5LddLS[TjX>ZS?G#VQL1MDGWSb0T387J?8gjMA6`\1V8bMQb918HEEg"
    A$ = A$ + "MeMW8R<nooZV598IBFTPTPo[oeojOo_<<<<<<<<<<<<<<<<<NYh?nSohOPg9"
    A$ = A$ + "Mg`#QOogomomOnWoionocokoK;n[oj_n?QmM:_M64U9[`>Q=3doagDii[2Ch"
    A$ = A$ + "f:^nkDNlXHBIa>Q]3if;6G7>2oFEonYR9U1ol?oco7LF>>PkGoj#DFN5mmlK"
    A$ = A$ + "of_mFU_g1C:3nQOh7n?hZhh1nT;COV86_aEDO4mQmYFWlZhhAIj_n[ojKEIe"
    A$ = A$ + "M4GEmADGlCod?mdeoHnJEcUKW_gSiKW1NoG57?b3oh?nSKggA>_\Cn=Gfm\["
    A$ = A$ + "7OTlSEUcAN>h^CZ?RjhP[?IlmPK>9LZjWMnncZjjSb1?:7OJJ6jM4WAoiC:["
    A$ = A$ + "DQQc_k<g;Eifd`?9L[:7^RiO?9o6U_C[kfYnhXLl9];E#I3X[ROSlndbYX?S"
    A$ = A$ + "9mKPh=2kA]k5V;lIb[?:>nZjbk:7OJmA4^9fQ827nn`IiTLkU[J^88__37oA"
    A$ = A$ + "DVZb_XOWcTgRb9<NY9YGDG=9L[Z?AiDXog9>N<na757OR><9o<Y_VMaSTS7h"
    A$ = A$ + "<Ll[8_2K:de_#lKCZ[`H`NGihC[?NULLDVM5a7WgW4fW=7o:nNEDN=ik9Aj5"
    A$ = A$ + "]5VT_V4GX^oKPS_RC6eSC6S;b?CJcPnUV`A^[LlhkZCdW9aeTjQ8mVDf>YLm"
    A$ = A$ + "KSS_Jn9X>HJnIBJShLblL_[Ll9lgM:OGE^5YgTb[Ej5B?d^bLliLlMV762kT"
    A$ = A$ + "lcW>77QKEiFlkCR[EaSihjbT9OGfLLMJ<=?^:nVJ3WEeWPgMfeElCSS?ILPP"
    A$ = A$ + "g^cH#OWhh`Vh`6lCWSb>jbZb\9aeZlcg877jKH_9HK4\O>VXKijP?E>N`_S_"
    A$ = A$ + "UQg1fb=\cATGbUK1feN;CbSGeJ>L5f=lMdfQQ>c]_g]\kCVSSb6`]AO00iWO"
    A$ = A$ + "4^hI6gd^hKVS_JM8<7ooOOgijJdGndbYcZ;W5hkAWMOGn^aa_Rbf?I>NEOOG"
    A$ = A$ + "mn>k\]Ef9]nfhhGAIgg87OJIcDMiAcaaJm7h\W9Q?Yei4jjZ`l=`ainnV`Yf"
    A$ = A$ + "IM^^bf=MUk8]\]3oWYodb__5>ndeLl>aaalS_RcLcgljLJ>no<=NTLlM]A`E"
    A$ = A$ + "IKlYiOcaO<Ll9[9kA:C_SLlM7oNN?5m\hhk\6iVSg7^Mbkihm^aaga6GkJC\"
    A$ = A$ + "[bfhk<OTMV;g>fbMR]BVbaaJl=E?W`aalk_jmFk>hI`aWN^F>:7Ojnd:[??C"
    A$ = A$ + ">n>i3`M>ji[][NKji[NEHfQS7HZ]UO4LlSl]aS`aWFGTihk`IgM?GLEf6OWi"
    A$ = A$ + "M>Y<2jediX?5XNkZF7SMihkF_LUaIDo4ai>WO#VKl8>GfkbagI\IhLYLULl0"
    A$ = A$ + "WI]aSg?_?P>kI0_[Nk:R_<7oEMVUg=_?mKS7enhkV7g=NgY?U[dfhW]olXLT"
    A$ = A$ + "gSKIKmLeko\717oEik9VP#gbmKL6>nEl]jW=7?hFG=7?`>c=0c5=O6PieMMB"
    A$ = A$ + "L\KmfZ`_Z]EVS?Yn?nmWiL>aNP=ggaDkBDaaWdWc^ciL:7?g_lT`OUf6_SWW"
    A$ = A$ + "CSMZODa7:_cnZOH?b0imb_2ZmO6JCYRcEaGnkoIM4]_1hbR9a9Vg0dW9_7W?"
    A$ = A$ + "IPl:RGhcmVFFae]a_UcWhkaC:kH>ndl:jG>2Kl>C:7NTLLDW_cl4b]1Ikm4m"
    A$ = A$ + "]W;OHPbfZOG=oS9aI5WA=^:Dogm>Ml`<#l=9?]BoDf>SkSOEIe^_o4mVSc9_"
    A$ = A$ + "C^lNBnoZ\Kh:\khE[:3#I;gNWg3oM#]ocZRc8\CRC>nRgC5OXlNWhLJnJRNa"
    A$ = A$ + "moLTb:>>>CMaAdYSDfl<hh1VjG2Gaa=<^c0k3\YhM:_IH0P_]I>^QQQQQQQQ"
    A$ = A$ + "QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQan8>WM0ai;mMBgoTc;Ok8"
    A$ = A$ + ">KWM2l3:AM]jmQ?NYjME_G4O:1Q=nGFRg9coZnmM5>N[b;omOogoS`Jli`ac"
    A$ = A$ + "2cGEL]ElXSba3>fSTSGYC\4UG^Om?G>N8`G94mO7l^Y2le?Ml9h?A2>De_3O"
    A$ = A$ + "]6;h\J_[4_gocococF_Cegd<N_hhMl`OiGnUbO_:>amVmIhhAk4hGHIi<Ll0"
    A$ = A$ + ":YBGSW5W9lcN?VIlJih1O9hbELY:N<lmCMaiAih`_`XnMXG`W76oMEj0oZ6l"
    A$ = A$ + "??ElHh3XZb;?;o3UaSSS[ZOkj_L577n4SSbaAHjJk1Ng:m8ko=>:7oAkWo<^"
    A$ = A$ + "_Ll^aCGaYboN777nUb:m2LlZa]WC7<nNUnP_Idaa]oYaLl:^e:^G777nSd:m"
    A$ = A$ + ":?nQE]UR_7dE60OJM4V8\:O`4loN0iiFKH>Ne_gaa39dk:mj8Ll>k62KlGaa"
    A$ = A$ + "ib?K3mg7>NeLf^3Ll>mj8Ll8mFI7d8^Df5W;o#kQWY_LehHLl:1lS:N`cPS["
    A$ = A$ + "Tc`a3d]N]#`M]#GiWB?<NOhhika[^OoMTS3NnZekTiiVSoi`a3NIn^I#9?B>"
    A$ = A$ + "n:^gE`a30oNOW0k_Sf5Hl9ikg2ca_oLllMT5??[XN\Z^oAaa3^DWLELL`c[\"
    A$ = A$ + "Y8THmocSi>nkGam7RaaihEn[LDgZT797_KM;a_OD>>FKd<#OcEaAlKlMaEl<"
    A$ = A$ + "0?Wcg7>N^N;oN:iAca[JKQOo:]M8^kkZb;8m<GnmWSGmN:iAcaSn=[T[VSSm"
    A$ = A$ + "#VJO3TC_ZakHlncaEfCN577c7kXLLeJ^`onEbaaHcjB_8>ljLnIba[fgQ1?^"
    A$ = A$ + "KoOLF>NekNfaSGUGZj77[k9W6NM>oLhhC?3##bgCe7I?I1>LUMm>kjL^[PkD"
    A$ = A$ + "<>=ljLni`akNGFR`QaYDe?O8Chh[6OlA]MhdcjF8ie2SO?_6#OFLlP;^RKPc"
    A$ = A$ + "<Cf^aWQSSk<m^Oo8Ll^`WU#gb[5VihgO`[C7_^?CR3LgFW]_<N>_fAaH=#JR"
    A$ = A$ + "eJ10LWhi`W?`oFloak[Ng<gJEjX\92\U2FGo\]bcLk0AKG_>W_?PGW^Mhh1_"
    A$ = A$ + "]jmcl1N<ZZe#=cmDkWe<gAUV:^eZdIJhid9ON>mjLNo1_>MZemIBL4e]Am=0"
    A$ = A$ + "jGLWd4LWhOiO;g>AmnZij]:MD8n=d_?WOVT6N>W666666666666666666666"
    A$ = A$ + "666666666666666666666666666666666666gEXlS`:o:<2?lQ2Q?91HWk2k"
    A$ = A$ + "8\ig=R;fWnajDnN__B_Zb7:M70g7?lkFY?kXcEj#6MQGMG1=]\WS?X[ZWaU9"
    A$ = A$ + "`7;^RCTmAMLi3:SDiQG1VhKZ#nYk>]?RW^lDlKMYE^<SmS>`_6gMWWeM7VW["
    A$ = A$ + ";b2h7:o_f4M>c_jlG##oId9AiL^Md>UmEjIF#i2GV0Nn4IEnVc3gI>>lY=C^"
    A$ = A$ + "[b>CjTk_QSGUo`2nmW:oiFnMQoPMBl>iNO02hFMQ=[3Cihhm2OFadk9^Zh5i"
    A$ = A$ + "W\PkUDnnd0n8Y9BGiNF_jl97?3P_aXZS`gTP?KRo=eMLBhc#hlTbG\5_;GO4"
    A$ = A$ + "o]RK1o1HUOB[[\>Oo6[jO:d3ni`Wo`];QOlQe1em31:Cag\QOI^SS[RW#oHN"
    A$ = A$ + "hZbNFZ^klDm?0ob>dMeg>clR\Pkh9FRWM7l?<:NBf?=a]]1_CE^agkk:^EGL"
    A$ = A$ + "Zj_]SS[R7^<>ZoEj1lCKLNX:_EYcE];cH57G5oakYhhMUmZW[2_jND?kO5E]"
    A$ = A$ + "i`_[:g[^[EEimk67?d?^_h^bIhcSOFLL^_;EobZn[AHImh8Ll:M6]_P?aj8L"
    A$ = A$ + "lMjOIWW[^7ecLLeMV4nm8OYh4hk>ao7g7=kh70OTXR72M[ZOZZbclH?gUS[:"
    A$ = A$ + "kZ6g\ROa]GQO>\J^DLj]jKk\]IjdIlM2EI^:nOVLl#DSm:kO5k^_#EUWAhAo"
    A$ = A$ + "Klgan6ihPgRnB1GLZ?Z_RScO_6UgEa;WgFaE`lCbeOMjLeLaIAMg<oXihEmK"
    A$ = A$ + "<QS7oNeLQccS3hKTSShN7nRZlVe=F_P^^j^PUc3\`mQSfWah#j^_?[^;8F9#"
    A$ = A$ + "_OTLLFfUSgMWY[^[doFihLkmYfWEM_EY6k>\]bDKREa9D_?\m]b^D\N^JlhL"
    A$ = A$ + "lRkBPk<7OEn9?fU_A>N46N]ajB[Z_[>9\ZkKZ:NiZnaih#e?^b^:[hhX]NnN"
    A$ = A$ + "bXJ\nWUSGUg?:7_K=5ZlodO3LL^oYZn4khhlH_AK5U]]Ef##mMf>^RJM2jhQ"
    A$ = A$ + "k`aEnROemMdEaaEe;WI>W`>=Zj9\N8OkLlEm9F]NTC4ejHQk#UZlPjikbak\"
    A$ = A$ + ";LEjbnEo757GI_hcbaEjkMinemZhhhk\ilSJnH:>>^?2[h;Zb^9[W<2[RS[N"
    A$ = A$ + "O`9HK6\;7?_72fUSW3g^UmEa;77Ze;j<LlZbRkbmfe:>>cCAKFnIhMhj9V_P"
    A$ = A$ + "e98;Ef>\SSG=O<ecELl^e5Da]ZhK[\5dIhhkFfG5_:mNeh]Gmk\X6o7Bok>7"
    A$ = A$ + "GeOBEI9hHMm5a2FS\hMgI\:MfgUSSZed[Z>YRgVK_>US[^?THYRS_KIOe_UU"
    A$ = A$ + "ZeWMG>n:m:OGZn>`aANRcgH^6ii9YB3ek62f;?hmgI]lk6k7;ELlZmT56WAF"
    A$ = A$ + "WSo?\7DFgFaaEUU:m[KL[C;k[Rg\Dmm^SHGUYe[_jaS3X^Ooh`T]U=KW[Ei5"
    A$ = A$ + "l>hmig=n=H?EngalgDg[OEgeOLn1f#D5Fnnb<OW72M>7Vlo7jV:?eEF6Hgb_"
    A$ = A$ + "YUmEoVZ<UeK^?gEgURLm:GFRkBeG5_NG>>bCZlaTfZZkOED^U;7N4LLDG[2;"
    A$ = A$ + "WNil2[c8_RWm\hhkDf_37_Z<I:7_B_#H_3f7o<]9>jm7In>Xl>TGfAW_3m9M"
    A$ = A$ + "G_k>ce[gUn^=<<<<<<<<<<<<<^K8\a?`c:=cb^jJnL=\Cj\KJMg#\^aXNjIh"
    A$ = A$ + "GONfYgTjNEmIUoj9diZe_5W_a:N2_6HkXWEbdg?_nkC>K:7=MFY_khgQHo0F"
    A$ = A$ + "GHEWW^ZcXC^NZJ_3Zb3EnLYlnnGMfgNeW7XMih[l5#MUAZb[c`GbjK7bkoUX"
    A$ = A$ + ">0[5GWMiIYK=LjB?FbLaEkeSLidTc6E>^kl[FQTm]FI9NWZl0d5V3P_Af9Al"
    A$ = A$ + "nZjC_JOZD]?gIAUWajEf9[fK6CigImX2ilBTO1O]K]CDU9CihMlahgAnV;SE"
    A$ = A$ + "nb9\?_EaIeI^I:?<haZj9XO\Pe2EM6_iWYB_GejE]37_J_C[bcZm\JnLKRel"
    A$ = A$ + "MWnBG9EaC^n6eC[>G:ZbTYLL5?U;cDl2\g;EY]J?OEEf7#]ggimOEDg7eCLk"
    A$ = A$ + "Q#7hjj#DW]#4NU^Yf_G_Rm]bSRS[:;DkUS:>nAUEaedmi9;G57?kKjVNf7Zj"
    A$ = A$ + "GMgbnYnh;EH31WQ5UN`2loKIiEMNPfQS[jK6nEc8^hm]3;lIiZJo<LFY:oU?"
    A$ = A$ + "SUk>6YMhhLoRLO``gI]37Ge_jEaaEn2?57GMfQZ>[58\AiaZmdhMRS[b;Q0K"
    A$ = A$ + "0\RS3KgY\1`:>ndn?`cEmY6omTaROeLLVORaZYhhEkMN57_C?IYSSc]1En0B"
    A$ = A$ + "4nZ_UG=?Kl>_CLl^iB^S]3GYG\nDaaiWW;;In6:[IO>jEcaib4VGD=g]\4SW"
    A$ = A$ + "6SG^RS[BWS`aEn^FNlEih9;XOSXo]>oSnMcfQMLl8?Z>;Vilc4>>lcUMj6?f"
    A$ = A$ + "MUN2N77FEO;kd?BGJ];7WWC6dgEf34O__JlhIQ??#\L6>NnoG=6KhgGkh5_:"
    A$ = A$ + "NnAhhak1k0YTX_NEomANLGOIjD>>7F>_U]IHgiZL57G5f^bc>oLTJL9ZakFi"
    A$ = A$ + "[iDSg1fmWU>>^Jl7ioO^lPe3l=9`;P]9Z>kKgMK7RjUlhZEf78:7j>_k<GL:"
    A$ = A$ + "DjIGLTe[liLY;>3Y:]Z2KGiYb7O3K[D=fKFDnIOXCG17?J3a??ooc_GeLLAO"
    A$ = A$ + "h0EgK7_2o]o^LLFRhHGOEFn<9n8ihia7R_i_b?g_[`YOgH\igKJiFeha[hhk"
    A$ = A$ + ">F5N\dlHCbY=WN`F\Ze0BmMnYSEl>aak:kDQE=FQ717?g_GfgSX:O?ZXnNdD"
    A$ = A$ + ">^J]POULlZmX1>_fE2boCF?54nW]OQKjhl`gjE[9VjNQAE>WoFfAf[REU_Z`"
    A$ = A$ + "^kjg_[D=V;UMREn83elI^B>nTkbXh_17_Z]IEKV#bmMXbO:OAiA6SjEP9kc:"
    A$ = A$ + "l=Y9k=8dNXCFISlcba_Re__BjVC1Ko<TfLO9Mnh;Ej];7OBm4F?S>>>Zg[fo"
    A$ = A$ + "RX<HBjUk[iIcaG]7ebcE<koLD2VGa:>N<FdX\MWa]`BEiUJM5W>>`EbZi<GE"
    A$ = A$ + "fY6kmSTS[fcGZ`Qh^:\EmC72h\X_S^d;K7dGY?\5[_56?1f3=8Obc9>7fhoc"
    A$ = A$ + "[c9\13jc:Sll?_J>>fgdHmGc]??Bj`YgZa8Q_AU;o`_1kWRmW6>;1hIIKDT]"
    A$ = A$ + "c:6o82KN_OPeN;WN8_6Si?G?5?Ci[T#HbaOfFDX^4i[LMHNNlH_IT7C:kkFN"
    A$ = A$ + "UgaK<WVAVS4i5UOJ28k_[Z2cSRSWeaLJ]cnMSk?M2oVOOEIWb_8YNV:>#o#Z"
    A$ = A$ + "Wcm_T[[jl[ALknZ`ROWC75W];m^CgEW`gCQjP:mB5FEiF5>R=FVbg2M^jN3l"
    A$ = A$ + "8YcDn]:?Sb?nNQ1k==EI2778?YN>77LmedjDElcn;\9eQLj]khBofaAhLGEj"
    A$ = A$ + "mXC;33333333333333333333333333333333333333333333333333333333"
    A$ = A$ + "333333333333333333333333333333333333333333333333333333333333"
    A$ = A$ + "333333333333333333333333333333333333333333333333333333333333"
    A$ = A$ + "333333333333333333333333333333333333333333333333333333333333"
    A$ = A$ + "333333333333333333333333333333333333333333333333333333333333"
    A$ = A$ + "333333333333333333333333333333333333333333333333333333333333"
    A$ = A$ + "333333333333333333333333333333333333333333333333333333333333"
    A$ = A$ + "33333333333333333333333333333333So9nSoh?ngoeOmGBlWoiONh`6o=o"
    A$ = A$ + "kZg7QogomOoolgomOogoo#lgakdUnac[RcZl:W6AJgYgZd8S^bU>mahiPX>\"
    A$ = A$ + "C2N0h0C2;RgX^=;P_X2O4oao_:>1?[jmIYROgU6X]TB_EYAF2mZ:^[d7Sk37"
    A$ = A$ + "?G??9\inmhWo[oj_nO5_ol?ocSJk4_;7>ln\4?;#>Ofa1QnmKof_9eKEJTU#"
    A$ = A$ + "ghgKUnHljhh:NC`?nYOjWn?me]:\Al5QU[c3N07f8<o`?l3oGQm7oaODn\Xo"
    A$ = A$ + "NekcBl\0il9oNAlYNVB_Q>Raf`BT_Dmo3Xd7SG;7_RgXj7V3;N67_k`a[NFe"
    A$ = A$ + "k[deELl:mVK73>>j7V;32Aef82?d3caOOhhChHMLUYLLl]P8>`gi_B>>hP1#"
    A$ = A$ + "J4YGl>lg:H>^BGEi1XcAl2TeWllN[#Nnf6G;7_R;YN>o\XNYR[D5_:>8\G1h"
    A$ = A$ + "NZd_J\3:>^Jlh`V:inJkhhLkf#0GFaak63n4Q]EUae`aI>DVW]J^GHLkkbaS"
    A$ = A$ + "W[hP`V:ak6PSc:Aaa[\[2\=3BSZaS[6cM8ahDDLL>nIT]MI5`gG2Mh^cSNGi"
    A$ = A$ + "hX>J277fn0l[M6[B4o`nh:YbfQEBehOkhiEf><caig5SCYSS7?7]ODUolHfE"
    A$ = A$ + "`Ll[USG=F5egZEQ=Z?Z\?A77?dU`fMAhDl#U]3Ak:FjVSGT6ZaLPhZSScBNN"
    A$ = A$ + "U\>SnRaHQhaS?ALoh?>>^JNL1_EaaEciDmMmESE9d3\FXZg7S]MEj7RRSSh?"
    A$ = A$ + "#`kDm;GIcCeH_#I2h_LLafEi8LL?NlW;7OGkZL6K7Zh1M__BGk\[B`7SncIM"
    A$ = A$ + "De>:KOl\T7WRZm2KG5NnWXON<>65#K8g?nmTS_cL>EmM^ck[deELLehBRhW7"
    A$ = A$ + "k3hJ\TkW>J_DaaGa?mhaOnLLH;35_I7>>cED[U?\cXZodMn>PBGk\MHloES7"
    A$ = A$ + "2SmMEjbbZm[BgH>P=6kPihG;7G9Mf7_RSGI?`\<eVTQ4mUN6>NUM?P4jZZ]9"
    A$ = A$ + "6g#WL6>^a[WSSnlfUSSeY\Z^?o]n:K?OTd?457OeNK4]g>27_Coa_kaLlj#D"
    A$ = A$ + "gW]e#6ieH4lfLHcm3SmW7NFfNPhk]hknH^Dlh=a_G5FHKW^d?gfAUOca?B3E"
    A$ = A$ + "N<Wn1bQWAlk`6oEo^ih_NTGo65`H5DQ5li:KUU]A03fN3ZmbdABo>kSc]McY"
    A$ = A$ + "1hQ\N`]OZVKHELK>n[7HmGZ`Z`2^GekPOObLY#OoI4?k\Yo>jBGIA5FE6Vc3"
    A$ = A$ + "666666666666666_>L4O=2NFNoic[1GgNfo:eo\N<MM0kd=Pli33n:U:oeB5"
    A$ = A$ + "Zle;WYl_c7\D5VZl]B?jZCIO6CEieM3kj[AjF[iLiFUDMNF>:bjcdbiEk=P#"
    A$ = A$ + "#mkAGKmEnQU:O=cZboZeC>G^bQAUGj2OElf]6\gimI`>nJTE[5M8`f]E2RON"
    A$ = A$ + "=K>2bkY#\>jC>;0ChhCFkm^f[[B3dO`^njUE[e_JOXQh<[ChICZC[>KCI9_f"
    A$ = A$ + "bg1Nm:>NeNgP;?DkCJD>cbZccB6C7GCFgaN?Lbj0R_9ceIic5Yb?`DUOoUOi"
    A$ = A$ + "Gn7a_j<PXl3;HmniWg]gIbj\j\IXRC\?ab_Kenj<dO^n3?KEieMM=H?;7Gm\"
    A$ = A$ + "^j8eJdGe7hZaeT;cimgb4D]g\DlYZl;fO1ieNlZme<ib?^_HFoDkaHlK:>n>"
    A$ = A$ + "k_NenDnMHO6Lfj3\7RhmnTjm17DMNFDLlES[9gFXJO[dQ:n5fKDCihLjNeWG"
    A$ = A$ + "TLiGVSGaiDWcD<WB>M^2>>:_^[WIdMZ?Rl0;h\Xckc8F0GMbl2cLlZnVceSi"
    A$ = A$ + "c;f>UaEiMTNZcTcSVS[6352;77AJcciFaKEaK777kY<NOIbQ5ekgANmAihLo"
    A$ = A$ + "8lkUgg#ERJ<fCm54ii^W[_Ra3SnC^RlnSRS[fk^Zi^X4EO<li\[J<f#haide"
    A$ = A$ + "?n4>NF^CLjcbaIn5o^8N[TLKQc`aceGHlAH<W<Z\[ecVS[fk^k`ai`bSa^j<"
    A$ = A$ + "8YT>>>;EWKEnm^[mWO4>N0fFD#ZhhP_Uko2Q=_V5i_oRbFPlI48Gn_R_DIOV"
    A$ = A$ + "GEoh1_2cQQiH8?cBeLnidBMFnZlOMWUSW][2c?NGihAiGfoR4iKnmaHdD_?g"
    A$ = A$ + "o5[;P_PbBf>70id<\W1NNloE26O0g?c[NlhkFncmMPig`?S;oEc1m8ci\b7>"
    A$ = A$ + "Vak>7W[OQoTOjk_b^:XlUihX_9P<gS]I8JoY>SHLJnZihZnak:oj6[#F7ESY"
    A$ = A$ + "QU[TSW][bW677O_Mjk?]Mn:kZ<aVQZno_KLLeh[>;7GaAE[OcEba_Re\nA2n"
    A$ = A$ + "kHhl[c?CEO4ia`V6I1fa[CVZKZee9cOj\IHei4K7>>c;DS=C=oR0[:CcSAGm"
    A$ = A$ + "LFZn>`4O7YZ]9B7EmGegFj\[BeLN^;HeN[8o=YEQ5eiMbIhhIN7B[M]IhD>^"
    A$ = A$ + "JL\IYkk8C;WVbaEnH[ZgGaakJS=I_el^caklI8in:aL>[2Kf?cg9WIn9Ef<l"
    A$ = A$ + "A`aAHZl3cic>?_WEj:CccEK:7_JNlEkO;n_S`Z\?NUo[9Gf<QSo^<^5l==0f"
    A$ = A$ + "o70m?_>1lJhWi_lLob[maAih`FEifC<oJWff:olRJ^CLn=WGkn>2GVZl9<[l"
    A$ = A$ + "e<Xl5fA9G>RnMbnT54Fl<TV8?GUGSbaLn3f6Pe94V9c[o^Q>O62[kAia4OMR"
    A$ = A$ + "jg?3778[WWeG<`f0Caa[b_IOYbI:C[d1nMZ\GGenSRok8\ila:oGC^m<2;g6"
    A$ = A$ + "_SWLG1g>][><Zkk2KeLo>kJRUCccVO[lc:Z`UCgMnnaZbdYnjUZ`YN>o<dG#"
    A$ = A$ + "GN=W7AnKU>MUe[6666666666666666666666666666666666666666666666"
    A$ = A$ + "66666OGXk^CjAMg^\cMVd^g_B[2k^?WCo^bThgike:LOoLT`bjDGmgWhMDeE"
    A$ = A$ + "bgj4hGa_bdLUONJjm[4l72ih^cgIXR_Zkd:4_:o:5WOjl_4Lig>QUUMZk>CI"
    A$ = A$ + "hg67oAD6<aGVEaaDB^o_:1n_157GioLZNNfOK\CKFL>Qg9\\T?KfM]EPPbUM"
    A$ = A$ + ";3odihAi1kG`2IU_Eh<LlX_;UNX^WBDQ5l>Uo=62l1BEgc7\PkR1>mEn?4V["
    A$ = A$ + "5QQO?LoQ\CHI9kS9hg9NVb?eZJGgE6NGhU?J>^Z>_bOSL5Ll>o7IEM1o\8\:"
    A$ = A$ + "On77OCmmXhi<WTmA91DUELN4nGWYQEMOddaak:3W4FD6n9jc8>Z_e7Ucii=Y"
    A$ = A$ + "PJL>kDo<aOZFaail6joUC75gCE>Tm[Q7QSGE^^CH?27W;Gj:3o4k;o<LlES7"
    A$ = A$ + "4agEbaEOW5L2EOnI1n7k\XlU\hiZkBCEi0;g=>n>UQVS[k7_b^D1PoB<GfMV"
    A$ = A$ + "j7F#o`EL5EmXbOR39oKlkSadcne#F`hjHoDhMQScB^<dLL]_9\b?nEiok^Zj"
    A$ = A$ + "7d7<B3NlgEO?^SSWSSZgWWGBGI5GfX2k[TScUQVS_oHERbg[\OLegIamc1on"
    A$ = A$ + "lcRdFaYboMNl=<oM7>>j7?dGL?KDI[Tk`HE#IhIm;ZOSLlWaL>ShTi?ZkL[:"
    A$ = A$ + "KeDegM5gSk[S55_5[edT`nXihEUQ7egFo9caaH^cmCa#a;N4fEA=_AFPMADg"
    A$ = A$ + ";<Zl^b^e7US[^cTZ2k[PSKK7NO6?nIhh8OD5f:KRcU1<?#5^k\MEnf]MHDoZ"
    A$ = A$ + "FOo>>>OG2X#gJOS_7LVj7eJkXFGAX?:9d=5WS;3H>^:=ZFkX9Q]b6<il6G7Q"
    A$ = A$ + "ke1EnaLlIkGU>>n^XR3Y:cWFoXFWSMjS<oKZbT^bPEi7\_0ZRkZ`F9H>>[V?"
    A$ = A$ + "4J[H>njmMHN\8?3>NfN]C[ODOkFaaacEbAihMiYLNYJL6EQ]BbSM^jNh:K?`"
    A$ = A$ + "Mf?4ORLLnnN:3NLfGenE1f^2UeI`g3=aLmcQ=nM\o`bgUCHO<U37h1ZeR9\A"
    A$ = A$ + "6OGLU7;2[Ohmj:3`M55#eM5F0N^iZ`Z^[Xcj2R?<F#>_3PjhEUQOZLlLINgL"
    A$ = A$ + "6_bmM8#VGY#fN]LHAm:o\:NEecEY;bW:mKEklZlTbfcC3KEi3b3QnFM?LU]7"
    A$ = A$ + "hdb`7=GkE1eMUD6?Rd\;mhdDmk[diLl\kckd_9i[ZiKOT`>]<R_gahfDC;3O"
    A$ = A$ + "4ee66666666666666666_WXc?2YfK\75Mnb6\N7lcRgS3Kf7TXdmEjA\^7h<"
    A$ = A$ + "<eM^CW6fYj0bOihQmM=MU?O3nkW75Vj;J>;jF3oZmUElN:OOBU^_BO3NBW?l"
    A$ = A$ + "9kWAV6f9j#gN;9WOF]7DNDn^\_I>>>cHGajOeaaAohlcDk;?\^9H=ggAOGaQ"
    A$ = A$ + "bm1?U_]B7V\WPVVVa_keYilLlli#>j[jZf[:<7?W>PcVUEkM`:>NUnZlo:Zc"
    A$ = A$ + "NOl^lN1C5F\OeFY3:m?N>o\HM:I>Nl<eIehCm<kl\hhimHgE^O\Zf3Pim9Rj"
    A$ = A$ + "g_:>n>W74enAOg`2M#]WaEieX=dT`Rm#eMPkl^caaniCMVS_:O7D>MDkSfG5"
    A$ = A$ + "7_j<e\CHgUSGUGELllN7chHLL<NBeLi_ZcZ<>GaH?N>M?Po=aaESE9__Q_cl"
    A$ = A$ + "Zk<7W[_DLe[`g1U5HG]9ekG=77kEkln8o^`aI1c?bLl[USG]W;?kIEV[kNEL"
    A$ = A$ + "L4FF_EQUUW977c7fLlccaIkM`Le[bg1UC7Uo8nIg?NXc`7AX\[bMH\:`?<n9"
    A$ = A$ + "OF6N6LLUMEfUS_cL>cm;=YNoA?NlM2k[H>Wh<eMgiE_3Ll>kZ0KWGMnDDmoo"
    A$ = A$ + "^HGUkDohMf>lCd_]m\ih[\9nEhkPbQafEaf>l^aaic;^2ijQ[RS3YbO71A]g"
    A$ = A$ + ">hg_ROZFCcZ`b?We1EnZboOK>nmRS_;^3LlEcU8OfeGI7_:k<bj0_72DiSZd"
    A$ = A$ + "dLl_K>>\kCUXh2Mg7Jii0Si7D5f\MZWX3EkQAf7=I>nS1\O42UiG=7WmM#\O"
    A$ = A$ + "[Yjgagfia15j7\SVb78e]NPPk0`nWTll8F5FXOCdQLLUoV16O4:3b_O0<onE"
    A$ = A$ + "i;SN`fbkZihI>C5OZkg[VS;\]NelNELQ`V4Ea7[?C3k4M8\kGUon9[WLjYJC"
    A$ = A$ + "H>nnhIi?IDfJLb_GIWb0MnCX>K\1^SJ>bk6fYj#locaSJOb>9oIK7JHHHHHH"
    A$ = A$ + "HHHHHHHHHHl8AWo3jAi;?jB?eI[[:lEQ1a1kCR>JnmXnAXLHDoV:_bj<[O?;"
    A$ = A$ + "o\dW4fagOLEH7oTCgmPMfOoT5D7b[;ndl;c?>RO4ReAELXJCe]7I0oTOV:n?"
    A$ = A$ + "SOFjKSSGEGl8ihIoTCWnQeTQihH?2>I_OXTLoL7e?2ajHg_e]g<idjIhWUnd"
    A$ = A$ + "ihZmiD4V[LMmEkWJ^^5W;3EO#ijaH=]SekSUhmimkGeNmFa1Qo;Q3KUO4ZJ_"
    A$ = A$ + "56jHlk:A]gZhbQW]OFjKQScW5PlnTnAaa[>[;Z_=ce_ZnVAJUU:>>WO?BH[n"
    A$ = A$ + "n#X3EmS?QSck16caO\LL^<IUO4R7Kk^LL^^3mYajUR3QakTU797W3;bSak0m"
    A$ = A$ + "#U_WbaOFW7`_5>>GOQknG^<IR<iL:X6[2fKNi`2k801W]PZn9W>FU7177iWl"
    A$ = A$ + "ihXS7FaaO6nIYLIlSbFJg9>>;im`OEohEfj2]G`NO]RScBnl7`LLEOcESgEM"
    A$ = A$ + "Weo\hhifGPoM4>NFNDnIY_I>>nNOenZ6XJ?CG]GWkhhAiON_CceW<77WCR9b"
    A$ = A$ + "cTS[6O>oMUMih?SnaEjdW67G=F5LfGhlm4IBohlHEPObA=oZZa]WUZf#?C>^"
    A$ = A$ + "JlCEjnDkZlXlcBicNdWhI<JjL>EmQ?AV>NLEm_ZO?Ek?FO[\Sg[VS[2cMb^:"
    A$ = A$ + "OZnI^cHk#doBgicAe_`D>^b^g\Pi3cekZ_io\ihilYbgELg\[bWjI<j<f>4h"
    A$ = A$ + "\S7_RS?iK5:m5Y5;?K>>KWcc`aAiaSHlhOjh:hhlIAGQS`aEfAC=G>57G=FQ"
    A$ = A$ + ":kH[Vg=jkT3K5_GaOc]c#i47V757OEn3BlKOKfEi8LlMaD>NeJV`2c5ESA?4"
    A$ = A$ + "5GD98ofaMHMBaOci9Ek>ca=7WU:>Nel#ijm9LLfWnLDo84?oHelUO6LLeHTH"
    A$ = A$ + "M8o^ORf>\bo15oOH?Y[fW2=e?i4oKf_lPi_2M>oLH7VLhbi1Dg5oFUonQmY9"
    A$ = A$ + "il;J7bcU>caca;WW`OSe[\b>M7e?;aieLNJUOF2cUmCefQ0\=ZDg]2GmLDVj"
    A$ = A$ + "WLZVoZji<_CU>Zl;3Nm0>ZO4RcCX]R:oT1G>`fdZjg?SOFjCo>ZXbo1YNfEf"
    A$ = A$ + "^R]GedW=mm[b3MnkW^l9h\ZiB[Rgh_c?SokLnY[\QCWZO_;?]b77]BW<<<<<"
    A$ = A$ + "<<<<<<<<<<<<nn`cb?2=9Mjnm\oDIElaY=NNn\;ai]Zh2aGW^Y>gZ6g7\j^4"
    A$ = A$ + "oIV>M2O6X[R?f7i\jL7Q`eU^[RW#n4g[7O:HeNfA]F7?ZdIU4LB\n4MkG:\6"
    A$ = A$ + "=[^Ce21aGGJZf7T\TmmA6gK>>kgJD[UlS:MDLEn\6PeIW?OLI1g?dZmE=cWE"
    A$ = A$ + "kG:`]3PmN57GlMI?BGeMORamRSWgKYEkGR7Ej`RRKQmO1OVmIN[jM[fSSEYM"
    A$ = A$ + "6CS;hS]<^oLL\WdPOI3Q??g]:X67oTdAacDLlhMhmmLFZfcYh\oZ^;0[hhMO"
    A$ = A$ + "CXZmR7cbmWSS_Ocfb0LlERbgX>9MHA=F5EOn1W:7>L>?Ea9Vk:_gmDY=6CO4"
    A$ = A$ + "?lhQDSEAeNi^Goo=bacBUo3NU_32n1dLooCBW>1We<dgJFhaWW?3JEf3Q?_e"
    A$ = A$ + "E2nVd>nnX\l^`3nFihhKjZmJ9g?HenFNWdYB`If:OV0b2KgS\OR3];Eb4K7R"
    A$ = A$ + "f27eg7Uggj6g3>>kgJhaG>I\:hMkj7GU>\`m37Q5WU7>Llc`hlc]9Eld:>>K"
    A$ = A$ + "cWEfE1fl1j2\7Zihg?>^bN7kbaW>NlSHG5U]ZEf27We;`g`I4Se3<fLEJ_[M"
    A$ = A$ + "E2NO^\:on_3LQ_=>NfN7ij=hK91WAQlhVg9MDl<UMEVd>Ca13MPm=A#?DYmA"
    A$ = A$ + "\[BTODWEYg5n`g47Oeigl\S7GU>:NfAihZiBZ6go:>>d]MlKjVCO_ihIA=V3"
    A$ = A$ + "0n\=FQMB75?CaaI9d5N\:H\dLhRaCTU#_DaIFfUSc_[ak97oAT>\Xhh:Oa\b"
    A$ = A$ + "F;HnY[\iGejLV5caoLihC7gbEU>\D=G?EhZNNd_m4o0DWLVm5PWci[7\O4Bi"
    A$ = A$ + "GM^2>nTdQm5>8]klI#8L:o34NO<^ZlLRIo04J7Z6_EUNXlmAAHcni8ca_?0k"
    A$ = A$ + "aSEcMlIT>lcSWYli#Z`EmlXoLVG3TWg#gLX[d3NngH>WlkJlJaAm[>?RdIbc"
    A$ = A$ + "ZlI#E?78hjMn1XMe]YniXWMmYQQQQQQQQQQQQQQQQQQQQA?faOCM50k=GeiS"
    A$ = A$ + "[:<hiLh[R[EQ;WFE_GfO5emKZb_Mb[1`m4>O^_WT>C;[De1EYeW6Vj_Y^:<i"
    A$ = A$ + "LWaQAMVVAmg:A5^LJE]GFbl2><LkaZb]9ie^kE;L6ojBWYUE[b_LnjC2Ml4N"
    A$ = A$ + "oaN5Xk<4SeMDE_aki:dol:A5^\ooZkm#HHM>_oGjlg079_b2loFEY3olZb:E"
    A$ = A$ + "HEYe[R7n\hhEnKZ757GiG9DWU=eNl6l\ZnccW7CV;Smd2c5HOf22CeM5J5g3"
    A$ = A$ + "kmV9iE>^SmDSJo4cgSh8MhWGEFE]g9Sj4nIGMoJ_J<aOCMUY7G?U5`=DLfZk"
    A$ = A$ + "JFDW`2_7YD_[j<1UooWUSG5gil:7g:^HenSGaa3YZ\Jbn3>nKnN]kCRSGi_Y"
    A$ = A$ + "hl;?oXYn:;n\jX>OmZna`_Yd]ELLhG\D_[Z?#>>Dl`9LLeh5DiEeHmSdTgk`"
    A$ = A$ + "k`a[:[VbaimRik>hlWbOCaLlEW]6D7`YUZNVoKEM1dU^j2FbkYE>n`kZJCW5"
    A$ = A$ + "LNZ_2>n>iEHWSlnhM7>NEIURSG]7hoDhhZbRZ_G[j7_cVMALYlERLIlTjR#D"
    A$ = A$ + "ckk\LlEj3hQ7QScjDENE=WFTOcnnPYS77_kdlKP?I>^ZOEN>XMigZkegZcOP"
    A$ = A$ + "JLVI1cGJRmB^J>>VOZ:L7QScL_Zl:hHEfGYbfQMLLFZhh:k:QnWnD6?^ZMm:"
    A$ = A$ + "o=EP9SE9:kinaEc_RWc[RS[B_[PSWU8<ll4SgmXLLEkIEN5j?>[5EieYLl^b"
    A$ = A$ + ":ca[mgD\?enXS7W[SEf9<Z;HM#MO#LF>>Kk1UobZR_^;7_;_RnE`m:T:LZlH"
    A$ = A$ + "57_[\jKL>WChZXn<kG?aH^ahhD8K?0lNC4dNReQZj]SbaEa9;H\J7QS?ADf#"
    A$ = A$ + "BEFYdg:>NGIUihJYbnQ1fIlhC6gHEi^bWZl<hh8NfUS[dGUXjcF=obMhhMUE"
    A$ = A$ + "OSLLEIQbOCEUWIOdP2X]QJ<fZeb6O78;ESUl<LLejoX6?\R7Vc3E[andlZJ\"
    A$ = A$ + "Q:KJ>USgEFYRgEU[OJLLTgDUUW=?cUU8NI^F4F57OEo=ZlB77O7K8OF>NGNM"
    A$ = A$ + "bgCP?UA5W:>ndeeE9OSLLllc^_EZhh\NPnCEYOGMQBWkhhC]I^:\IMEamDOS"
    A$ = A$ + "X:_ZjO5Bn^cH7>NGIU:]b?kCSSWm5lX\\cOCMVd:jg4fj=RCfgHQ_77?7kGR"
    A$ = A$ + "lLG1GXJ]:Di5`[#JWOGho\Da7k?\`n1P776dEHSKnICb[hihI:M2e;An8W>Z"
    A$ = A$ + "hLBIEfW`TSW?ae02PWWHl<dNVOnIA^N8gfAmLnI:mR[;jdI>nbL5>nD?_J>f"
    A$ = A$ + "Xmb:m_;_ZNNVO3mBU>ZgMEIU:]b?kCSScfm;Nf:o=eEUF8N[\1Y:mkd[Mn]^"
    A$ = A$ + "dIJH1Fio_F5g#7ShQoNAf^]Ee;EagZb3ff0GMm]QQQQQQQQQQQQQQQQQQQaM"
    A$ = A$ + "5HObV?[a\_TYjl\Yl]BEQ]:]ici<l1>[R_Zhl::?fEWboFW_k2UGCl=IMQAi"
    A$ = A$ + "[OVh[]jZokZKkn]>o4fM0Mk]f\^f9Io>CgnW=cCFiKXbUQCBg[0WAWH>CUDM"
    A$ = A$ + "^eDiYMlg?CmeFk`1^2o4f[6Zc;2;HmeF9Xn_[N1[Yf:N0:WFUfHo#ME[ilId"
    A$ = A$ + "Y\Nd5?X<X;<8^Vj3`VZkE[KIGLSeolXn9\G=7G]7Bil<dEFhWQlLgi`4kMRP"
    A$ = A$ + "W<ag#Qm02;icPdE\GaZj[J7MZK?>VmO1Ho^T3CU_9CaMDgAd:OSAU_f:NoLN"
    A$ = A$ + "^k\PRcD]jn=MeI4i:[G^J>>GoQl2;lcZfGZio6QYRSXdWZkDIeNBj\h:d9Ei"
    A$ = A$ + "ZJ_]=agT=i<dQWaaAechb:EJ`aMX?O:LLd?SbGK`b4>>joBEVYR_ZjJEHAI8"
    A$ = A$ + "O^oSa<]boME=Na[#WjhhH?jbmkFiKbZ>?FZWaY9jO_J_6Ga1^Bo4fMPS[6?>"
    A$ = A$ + "VK5__;II277co?7gG177eI:k5<I<\Ql<ihXl<?Nh\`Sg5nV<U?3R7[22[BoQ"
    A$ = A$ + "m?hm3L77Wo6kIlCHg1>NP>O7LN?FZnM^\Am=HnMANW5lLn\9XhCihGe^=Kg\"
    A$ = A$ + ":Xl7_WAWjhhIAegBD6YnNWZL?;AN<On6Vh[]hiMZh^lOce[iWo>`akZCbLXE"
    A$ = A$ + "2:[cRZm1>S<\Ti8Lo>EB^M8WWDS1FQELlYjdD>NXG:O51?6_ELLHWTliIHR_"
    A$ = A$ + "fZ[?>H?4FOo4hh1Zj7H577U;ZaPXhhMO[7mIRccEgg#hd5jidaZ\Koh[dYYf"
    A$ = A$ + "EAaMEfSZj<:cSE9R[\ODNU_fR[giho:mCHgUaSSc09nN6[_:O7E8Zn4i`5e7"
    A$ = A$ + "ZjT:>^Jn?Mm_VCgMihZbS[#WDLLnK:lkSiF`?CaaEci4_O^^DI3nhIIK7Zl_"
    A$ = A$ + "FEYIelBNg\[BX[Ao0:mU5VWY\W[B`LTDa7[?XOcZd^b^:X?c^cKfdaZ\[>ea"
    A$ = A$ + "aalgj6;3TMhh:mDUWbf^MJo1Wa?QM7ihZj_ELl^hC9MagA\QA5^ZaSOUf>4]"
    A$ = A$ + "5WjKb>37G=^OF?Vn=_?9>NX_ZeAK:?S[kRnDgImNDndFEJWU>>>O^OEXCo?R"
    A$ = A$ + ">Q_Qdmk\4jZbFhk`aEnHk:k^G]W3`gn>[O2;;MkCVW1PMfjTMj;]JN9\XlIW"
    A$ = A$ + "\PadLD>nEdVo8jdAhhPgaQK7>>ggTBHoVBegKDmol^ba34j#5?7k7TYLLFjF"
    A$ = A$ + "37EI9ThiIOWCW<IL;G1?OZ>EIgULlXb3CfC#MLl^aiWmeFMSIZRScf_WCOU^"
    A$ = A$ + "Wc3ii0lZ#N?Ta[QOV3]JMQIoD5RSX]RjialKSnObc5DigNhh=S[VS7h<jDTg"
    A$ = A$ + "HOlE6H>biO3c7Um=I:o_E>mc?3SmMBM9hK:O7FN<fImH7o46GNL7hhXNU;;h"
    A$ = A$ + "fm1jVcFEH#n[jiI^J6AiGfgiX2cSPSO5j4g6D5?ZlPJ^blc0OFm\>MG]_33l"
    A$ = A$ + "XlCHZjjk0RbPLk#FgHK`YR3><PCDmlLo?EY[jmGY7W5WEWf5AlYl1FkjG\#l"
    A$ = A$ + "TemXN=GN_:?LTlFWO2[:]=<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
    A$ = A$ + "<<<<<<<<<<<<<0PoBXk>_jETNEnLfZO?O_Q`?Obm#eddW3?l=G[^W\Z`>g]E"
    A$ = A$ + "EQ]CWQn^KnoC1C_c[NfYgTk>;U?`AU6[li9ClY[EQ_c7e`gCFEHbMK5bcEQ5"
    A$ = A$ + "o^BGZlASLJlXhH_B\cMNec>mVLgIYhh:Om1lU2[R?nLoF9Mg5DZ`^Z<LR?I3"
    A$ = A$ + "]O[2;b3knKIiC\oLUo#R[KEn<]WAj=i^cJbM9B8`OW`a7jO7nCQ<7ObM1Ub7"
    A$ = A$ + "o`nFMl\>O7#emR6WnQNFe?1l3<:YcG>aaaEEGOWih<G0U?GAoikTNZnXce5`"
    A$ = A$ + "OT`QAEG2n;GOfi3#Dl>>Mfa?FeaMVLgFEU?P4aCEOeMnc_\PbT7U_lh>`aAO"
    A$ = A$ + "JZklZLnVWOU2Zab_CjU3;R?V3DeG7W6MLllm#5W7cBeM15;hk#`GNcnaZcba"
    A$ = A$ + "EiIl>8?>e_CFaaoTj;OWklZ^jOUXV3c>Y7O7NDMgI]jn\YRS[^7ZjJ?b_OeM"
    A$ = A$ + "15Bc\_Rl8LlZlQjiX<1aSjkUO[Ll0C_c[bSE1mSGI;:`9IoOo>Ygdk>[ELl8"
    A$ = A$ + "=ES[Q3cZb5>N1_Yb^:X=NUO\ZSScaCn^ISeSLo6PK?US[J7o9ba1WE9[\MHW"
    A$ = A$ + "ol[[o[9Y7GfcLLh;9GeO;Zgj\5YR3>m^P:ng>NnEIk`:>^JliZkM557WULJL"
    A$ = A$ + "WhWG5DOg?TMJCT5<FkZb[^dCiKh?bLCcQS[gikQ:dG_Z=6b;\NV73GlM^ZaR"
    A$ = A$ + "]J>LC7[26W?WoHYZ\ZB#Lcndc?1X^WTZ^c[fUSG=Nl9YWZ>ZZODUm3Ee_EgY"
    A$ = A$ + "2I0mLWk2ZPKSl3l=aLKGNn\ChhEf0M27_JLE\l>hSI?;Df>Xj>_:ccajRcg]"
    A$ = A$ + "YIPbelHEVVNEf7;;h>MP3;W6XN[J\WIkZDaiD2Vg;o<`ic2\GdIihZaZ`]YP"
    A$ = A$ + "odW3c4>NggMoDhhMgiEZln^S7OJj5QMUDIWQZjaMVOe>g5DI1S;YjK9Em?NF"
    A$ = A$ + ">>KGeMihgEniSPS[FcG\VNZi>R`_2kVNLhj^k\Z6G?Z_[hhLhj:G`gFFMWHQ"
    A$ = A$ + "n#igWG7EVCZFCGEk\:>N^?1dg37V_E>n>giEGam#gddKWk>[:KD72JONF>>j"
    A$ = A$ + "cGeoLWmJ21SYI7>NU>Faac]oEmKl=ca3<m>_jZ^[5WTN\d]O;jh_PK^jNOU7"
    A$ = A$ + "gb>g5D:kG29Kc_:>nTm;En>[BaOc?C=ol_M>NPln^SGCm7QmTFUN8]#meZk>"
    A$ = A$ + ";nil_SmbDnnMB5>T^Eg5D`>#Zg;WObci68?WcLlW_S\Z^CYhigT]Q3NO<g6E"
    A$ = A$ + "lEE>m=aa1OJbMNec<mZ\YEec[V3LFokVW<W?gi^P:\WBem1Een><[;X=BU^Q"
    A$ = A$ + "h1j07F^MU:nZ:oN6l[k6G?S7]]BkB?fNT[^k\Z\SIGLF5^Z`fmLlKC;oDiSY"
    A$ = A$ + "j67fh_c?Sok^bY7Im[QQQQQQQQQQQQQaW>Dn\S7Aj<9=HOE2F7#>LEn;ULH?"
    A$ = A$ + "R?EYCOEj]:>idMBLgi3DZRG>o^CN5aE^LV3GElmXh7?BXf_4?RdQUEjAW>E]"
    A$ = A$ + "fRibo^efLEnLRoMQcC8]idE5olJYfi3Dbn6Y^lk4o1CGhh`f5^71ohIbaaNG"
    A$ = A$ + "kZGk7FbYA`KF]GFbL[^mQ5\;m:>>2oTbT\0KPciYZmTUZ\D]O1ZFCO\fTEn7"
    A$ = A$ + "8N?[d5V9]kkl7AMiYg=>nE^7EZhhieICeg7GWW?_6lnm;ooajlYfoRZlZ:O>"
    A$ = A$ + "ao^`kmm#`J]GU?[hhEkYT#`N;CaibkeV:m5_o_l;oR\m7Gg4?;2KUo6;_O>O"
    A$ = A$ + "FLd?A>^ZO=XGC>G4ZmQEGLbm9a_;_?ZDjA8ZljIihAJcnVXEjBFOciAEjb_;"
    A$ = A$ + "fg;Ejhkhn0H7>>fO\[`STS[fciLMAeiI^:>ilJnMaLbFY78\<WiXLlLH#JE]"
    A$ = A$ + "W8ii?Di?HVbaS`[jc7a3OfYnThhC?S<?C>NlMEEMaIhhCm_;:Q?cU7USWeO4"
    A$ = A$ + "WELLeiE=;EkeNdO`:ohD8AilkdH`_Rnak\]TZM>;7USca57^ZnQ>37GegLUo"
    A$ = A$ + "5TiA7US?agYdeW[:nEYKP9LlLnk>cW?;77Hen0EE_bbAihlgUI^1VSUZ_]YL"
    A$ = A$ + "LnmH>>l_;CTSbaESgWo6QRS3K;Y2Wjk0\PfdClgCgE>mIhhC7[bS\OLeL<in"
    A$ = A$ + "M?37O7okBFZh4WQS_RC2^;WWZl7<WQSS_ASc[U7?noMj`bE`aAOF:N_Z?_S`"
    A$ = A$ + "aSaQbSiGa]ZlKbWQS_J<8`68\N<]oQS<WCP?E>NNMokf?o?baZ<A`I;KJLfi"
    A$ = A$ + "S<D2l_;Ll[Ngc`aif=<O^K]Sb2VWlE`aagXodG3XGehaW>6hZj^[RS[J_QaW"
    A$ = A$ + "bbIhhZij^:?E9G57oMl\3e=nSZk:7n<MEQ>>>4ffL8Mibn8>D[WWZoC5o0Oo"
    A$ = A$ + "QO6caInGWoMQCC5Ok<LlLlEe^BU?ESW6f?QOoYfZ9;ElR?9>nA#UPm<bZm[2"
    A$ = A$ + ">c^lkRnFb2J7^B#mI77_J=8ESK#5^7=7OR]F#JDI_c9_OFnThhGigWFEVFI_"
    A$ = A$ + "Z\o5AeW5h?lcGaaaHOH>NEIPjiZlQJn_7USWK75_gTi0d]n0ZiR7BV3<QSo^"
    A$ = A$ + "=^5hg=Dng3eMUbIJ;ei7D`HK`H4ieT80lM[8LIOVMfWX0kGWS7EJ2T7G5[WM"
    A$ = A$ + "ng5T^i`5fPIUO<1k?\^d8Gf7?GiWG`jGZ:_RoFU6QnU?cnib`^goAa;NVXKN"
    A$ = A$ + "TGINY:=0?3mOaoNl\Xn1lKUM\D?WO6S8<Zkd[Zb0ecEi3fO[X:;h`XBS8n2m"
    A$ = A$ + "SSO><kh?HRW7UUZjPE_oSRGl<#Womh:_W>k\iH>LHoA0TeQZg];^WTVMjIWo"
    A$ = A$ + "MIR^LVdPOfdlJGI5n=DnNTdi:i5666666666666666666666666666666666"
    A$ = A$ + "6666666666666Ilo5D1C%%h1"
    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

    temp& = _NewImage(_Width(v&) * ss, _Height(v&) * ss)
    _Dest temp&
    _PutImage (0, 0)-(_Width, _Height), v&
    _Display
    _Dest 0
    BASIMAGE1& = _CopyImage(temp&): _FreeImage v&
    _FreeImage temp&

End Function

Sub SaveAsBMP (filename As String)

    'This SUB adapted from SAVEIMAGE SUB from the QB64 wiki

    image& = _NewImage(_Width - (200 * ss), _Height, 32)
    _PutImage (0, 0), _Display, image&

    bytesperpixel& = _PixelSize(image&)
    'IF bytesperpixel& = 0 THEN PRINT "Text modes unsupported!": END
    If bytesperpixel& = 1 Then bpp& = 8 Else bpp& = 24
    x& = _Width(image&)
    y& = _Height(image&)
    b$ = "BM????QB64????" + MKL$(40) + MKL$(x&) + MKL$(y&) + MKI$(1) + MKI$(bpp&) + MKL$(0) + "????" + String$(16, 0) 'partial BMP header info(???? to be filled later)
    If bytesperpixel& = 1 Then
        For c& = 0 To 255 ' read BGR color settings from JPG image + 1 byte spacer(CHR$(0))
            cv& = _PaletteColor(c&, image&) ' color attribute to read.
            b$ = b$ + Chr$(_Blue32(cv&)) + Chr$(_Green32(cv&)) + Chr$(_Red32(cv&)) + Chr$(0) 'spacer byte
        Next
    End If
    Mid$(b$, 11, 4) = MKL$(Len(b$)) ' image pixel data offset(BMP header)
    lastsource& = _Source
    _Source image&
    If ((x& * 3) Mod 4) Then padder$ = String$(4 - ((x& * 3) Mod 4), 0)
    For py& = y& - 1 To 0 Step -1 ' read JPG image pixel color data
        r$ = ""
        For px& = 0 To x& - 1
            c& = Point(px&, py&) 'POINT 32 bit values are large LONG values
            If bytesperpixel& = 1 Then r$ = r$ + Chr$(c&) Else r$ = r$ + Left$(MKL$(c&), 3)
        Next px&
        d$ = d$ + r$ + padder$
    Next py&
    _Source lastsource&
    Mid$(b$, 35, 4) = MKL$(Len(d$)) ' image size(BMP header)
    b$ = b$ + d$ ' total file data bytes to create file
    Mid$(b$, 3, 4) = MKL$(Len(b$)) ' size of data file(BMP header)
    If LCase$(Right$(filename$, 4)) <> ".bmp" Then ext$ = ".bmp"
    f& = FreeFile
    Open filename$ + ext$ For Output As #f&: Close #f& ' erases an existing file
    Open filename$ + ext$ For Binary As #f&
    Put #f&, , b$
    Close #f&

    _FreeImage image&

End Sub

Sub Smooth
    _Title "Antialiasing..."
    _Display
    Line (_Width - (200 * ss), 0)-(_Width - (200 * ss), _Height), _RGB(255, 255, 255), B
    For x = 0 To _Width - (201 * ss)
        For y = 0 To _Height - 1
            p1~& = Point(x, y)
            p2~& = Point(x + 1, y)
            p3~& = Point(x, y + 1)
            p4~& = Point(x + 1, y + 1)
            p5~& = Point(x - 1, y)
            p6~& = Point(x, y - 1)
            p7~& = Point(x - 1, y - 1)
            p8~& = Point(x - 1, y + 1)
            p9~& = Point(x + 1, y - 1)
            r = _Red32(p1~&) + _Red32(p2~&) + _Red32(p3~&) + _Red32(p4~&) + _Red32(p5~&) + _Red32(p6~&) + _Red32(p7~&) + _Red32(p8~&) + _Red32(p9~&)
            g = _Green32(p1~&) + _Green32(p2~&) + _Green32(p3~&) + _Green32(p4~&) + _Green32(p5~&) + _Green32(p6~&) + _Green32(p7~&) + _Green32(p8~&) + _Green32(p9~&)
            b = _Blue32(p1~&) + _Blue32(p2~&) + _Blue32(p3~&) + _Blue32(p4~&) + _Blue32(p5~&) + _Blue32(p6~&) + _Blue32(p7~&) + _Blue32(p8~&) + _Blue32(p9~&)
            PSet (x, y), _RGB(r / 9, g / 9, b / 9)
        Next
    Next
End Sub

Sub DrawMenu
    Line (_Width - (200 * ss), 0)-(_Width, _Height), _RGB(96, 96, 96), BF
    Line (_Width - (200 * ss), 0)-(_Width - (195 * ss), _Height), _RGB(164, 164, 164), BF
    _PutImage (_Width - (190 * ss), (10 * ss)), menu&

    Text _Width - (64 * ss), (69 * ss), (28 * ss), _RGB(0, 0, 0), Str$(quads)
    Text _Width - (66 * ss), (71 * ss), (28 * ss), _RGB(255, 255, 0), Str$(quads)

    Text _Width - (55 * ss), (319 * ss), (22 * ss), _RGB(0, 0, 0), Str$(brushsize)
    Text _Width - (57 * ss), (317 * ss), (22 * ss), _RGB(255, 255, 0), Str$(brushsize)

    Line (_Width - (160 * ss), (180 * ss))-(_Width - (40 * ss), (300 * ss)), _RGB(164, 164, 164), BF
    Line (_Width - (160 * ss), (180 * ss))-(_Width - (40 * ss), (300 * ss)), _RGB(255, 255, 255), B
    Circle (_Width - (100 * ss), (240 * ss)), brushsize * ss, _RGB(0, 0, 0)
    If brushsize > 1 Then Paint (_Width - (100 * ss), (240 * ss)), _RGB(0, 0, 0)

    Line (_Width - (35 * ss), (380 * ss))-(_Width - (10 * ss), (397 * ss)), blk&, BF
    Line (_Width - (35 * ss), (405 * ss))-(_Width - (10 * ss), (421 * ss)), fill&, BF

    If randfill = 1 Then ran$ = "ON" Else ran$ = "OFF"
    Text _Width - (36 * ss), (431 * ss), (22 * ss), _RGB(0, 0, 0), ran$
    Text _Width - (38 * ss), (429 * ss), (22 * ss), _RGB(255, 255, 0), ran$

    If eraser = 1 Then er$ = "ON" Else er$ = "OFF"
    Text _Width - (76 * ss), (456 * ss), (22 * ss), _RGB(0, 0, 0), er$
    Text _Width - (78 * ss), (454 * ss), (22 * ss), _RGB(255, 255, 0), er$

End Sub


Function IBOX$ (txt$, limitnum, fg&, bg&, delay)

    'NOW USES text SUB to display text

    'This function either gets user input or shows info.

    'If limitnum is 0, it just shows info (message box)

    'text$: Your text to show
    'limitnum: how many letters of input to get
    'fg&: The Text color
    'bg&: Background color of box
    'delay: optional delay period for message box only
    '      (and If set at -1 then wait for a keypress)

    '=== Save whole screen
    Dim scr1 As _MEM, scr2 As _MEM
    scr1 = _MemImage(0): scr2 = _MemNew(scr1.SIZE)
    _MemCopy scr1, scr1.OFFSET, scr1.SIZE To scr2, scr2.OFFSET

    '=== find center x/y of screen
    y = Int(_Height / (16 * ss) / 2)
    x = Int((_Width - (200 * ss)) / (8 * ss) / 2)

    tl = Len(txt$) + limitnum 'total length of letter spacing used
    x = x - Int(tl / 2) 'recompute x based on text length

    x1 = x * 8 - 24: y1 = y * 16 - 32
    x2 = (x * 8) + (tl * (8 * ss)) + 8: y2 = y * 16 + (16 * ss)

    Line (x1, y1)-(x2, y2), bg&, BF
    Line (x1, y1)-(x2, y2), fg&, B

    Text x1 + (16 / 2 * ss), y1 + (16 / 2 * ss), 16 * ss, fg&, txt$

    If limitnum = 0 Then
        If delay = -1 Then
            a$ = Input$(1)
        Else
            _Delay delay
        End If
        IBOX$ = ""
    Else

        entry$ = ""

        Do
            a$ = Input$(1)

            '=== Return exits with data
            If a$ = Chr$(13) Then IBOX$ = entry$: Exit Do
            '=== Handle the backspace
            If a$ = Chr$(27) Then IBOX$ = "": Exit Do
            '=== ESC cancels
            If a$ = Chr$(8) Then 'Backspace goes back a space
                If Len(entry$) > 0 Then
                    entry$ = Mid$(entry$, 1, Len(entry$) - 1)
                End If
            Else
                'add letter entered, if not over limitnum
                If Len(entry$) < limitnum Then
                    entry$ = entry$ + a$
                End If
            End If

            Line (x1, y1)-(x2, y2), bg&, BF
            Line (x1, y1)-(x2, y2), fg&, B

            Text x1 + (16 / 2 * ss), y1 + (16 / 2 * ss), 16 * ss, fg&, txt$ + Space$(limitnum)
            Text x1 + (16 / 2 * ss), y1 + (16 / 2 * ss), 16 * ss, fg&, txt$ + entry$
            _Display
            _Limit 30

        Loop

    End If

    '=== Restore the whole screen
    _MemCopy scr2, scr2.OFFSET, scr2.SIZE To scr1, scr1.OFFSET
    _MemFree scr1: _MemFree scr2

End Function


Sub fc (cx As Integer, cy As Integer, radius As Integer, clr~&, grad)
    If radius < 1 Then Exit Sub ' safety bail
    If grad = 1 Then
        red = _Red32(clr~&)
        grn = _Green32(clr~&)
        blu = _Blue32(clr~&)
        alpha = _Alpha32(clr~&)
    End If
    r2 = radius * radius
    For y = -radius To radius
        x = Abs(Sqr(r2 - y * y))
        ' If doing gradient
        If grad = 1 Then
            For i = -x To x
                dis = Sqr(i * i + y * y) / radius
                red2 = red * (1 - dis) + (red / 2) * dis
                grn2 = grn * (1 - dis) + (grn / 2) * dis
                blu2 = blu * (1 - dis) + (blu / 2) * dis
                clr2~& = _RGBA(red2, grn2, blu2, alpha)
                Line (cx + i, cy + y)-(cx + i, cy + y), clr2~&, BF
            Next
        Else
            Line (cx - x, cy + y)-(cx + x, cy + y), clr~&, BF
        End If
    Next
End Sub

   


RE: QuadDraw revisited - drawing program work in progress - Petr - 10-08-2024

Nice code, nice idea and program, Dav! Lock points number changing when draw, othervise it do bug - draw to 0,0.


RE: QuadDraw revisited - drawing program work in progress - Dav - 10-08-2024

(10-08-2024, 05:26 PM)Petr Wrote: Nice code, nice idea and program, Dav! Lock points number changing when draw, othervise it do bug - draw to 0,0.

Thanks, @Petr!  This program would not work without your great SPAINT sub!  I don't fully understand the bug you mentioned.  Are you getting a unintended draw at pixel 0,0?  I will check that out.

I fixed the IBOX$ text sizing.  Works correctly now.

- Dav

Code: (Select All)
'============
'QuadDraw.bas v1.9b
'============
'An odd little drawing program.
'Draws/paints in several points on the screen at same time.
'Coded by Dav for QB64-PE OCT/2024

'NEW FOR v1.9b:
'              - Fixed autosize logic in IBOX$ Function.
'                Also increased font size to 22pt


'CREDITS: SPAINT SUB was made by Petr.  Thanks Petr!
'        text SUB was made by bplus.  thanks bplus!
'        (bplus helped me out how to draw lines without gaps too)
'        Thanks to James Jarvis for draw color and eraser idea/code!
'        And to PhilOfPerth and euklides for code suggestions.

'----------
'HOW TO USE:
'----------

'Left click on mouse and hold to draw on the screen.

'Press Up/Down arrows to set how many draw points to use, default is 4.

'Use the +/- keys to change brush size (1 to 50 allowed)

'Right click to fill/paint the areas with color.
'Default fill color is picked randomly, but you can select one.

'Press D to select a new draw color for brush.

'Press F to select a fill color (doing so turns random fill color off)

'Press P to toggle use Plasma colors On/Off.

'Press R to toggle random fill color on/off (default is a random color)

'Press E to toggle Erase on/off.  Hold it while drawing for dotted lines.

'Press A to smooth the screen (blur).

'Press S to save current image as QUADDRAW.BMP in current dir.

'Press L to Load a previously saved image on the screen.

'Press U to undo last change made to image.

'Space = clears screen and starts over.

'ESC = Ends program

'===================================================================
'NOTE: This program was originally sized to 1000x600.  This was too
'      small on higher resolution desktops so I added screen scaling
'      factor (ss) and applied that to all the drawing things so it
'      will autoscale to users desktop height.  That is why you see
'      '* ss' all over the place added to numbers.
'===================================================================

Dim Shared quads, brushsize, randfill, eraser, menu&, blk&, fill&, ss


ss = _DesktopHeight / 600 * .85 '<<<<< scale to 85% of users desktop
'                                    change this to suit your needs

If ss > 2.25 Then ss = 2.25 'limit ss factor for performace reasons


Screen _NewImage(1000 * ss, 600 * ss, 32)

menu& = BASIMAGE1&

cx = (_Width - (200 * ss)) / 2
cy = _Height / 2

wht& = _RGB(255, 255, 255) 'used often, so variable it
blk& = _RGB(0, 0, 0)
fill& = _RGB(Rnd * 255, Rnd * 255, Rnd * 255)
brushsize = 3 'size of drawing circle (brush)
quads = 4 'start with 4 drawing sections
randfill = 1 'default is use random fill color turned on
plasma = 0

ReDim Shared pointa(quads), pointx(quads), pointy(quads), lastmx(quads), lastmy(quads)

Cls , wht& 'start with white screen

_Delay .25

undo& = _CopyImage(_Display)

'====
main:
'====

_Title "QuadDraw - Points:" + Str$(quads) + "  BrushSize:" + Str$(brushsize)

DrawMenu

Do

    t = Timer 'for plasma colors

    While _MouseInput: Wend

    mx = _MouseX: my = _MouseY

    If mx <= (_Width - (200 * ss) - brushsize / 2) Then

        If _MouseButton(1) Then

            If stilldown = 0 Then
                _FreeImage undo&
                undo& = _CopyImage(_Display)
            End If

            If stilldown = 1 Then
                dx = mx - cx: dy = my - cy
                a = _Atan2(dy, dx)
                dis = Sqr(dx * dx + dy * dy)
                For i = 1 To quads
                    pointa(i) = (360 / quads) * i * (3.14159 / 180)
                    pointx(i) = cx + dis * Cos(pointa(i) + a)
                    pointy(i) = cy + dis * Sin(pointa(i) + a)
                    stepx = lastmx(i) - pointx(i)
                    stepy = lastmy(i) - pointy(i)
                    length = Int((stepx ^ 2 + stepy ^ 2) ^ .5)
                    dx2 = stepx / length
                    dy2 = stepy / length
                    For i2 = 1 To length
                        newx = pointx(i) + dx2 * i2
                        newy = pointy(i) + dy2 * i2
                        If plasma = 1 Then
                            r = Int(128 + 127 * Sin(pointx(i) / 25 + t) + 127 * Cos(pointy(i) / 25 + t))
                            g = Int(128 + 127 * Sin(pointx(i) / 25 + t * 1.5) + 127 * Cos(pointy(i) / 25 + t * 1.5))
                            b = Int(128 + 127 * Sin(pointx(i) / 25 + t * 2) + 127 * Cos(pointy(i) / 25 + t * 2))
                            fc newx, newy, brushsize * ss, _RGB(r, g, b), 0
                        Else
                            fc newx, newy, brushsize * ss, blk&, 0
                        End If
                    Next
                    lastmx(i) = pointx(i)
                    lastmy(i) = pointy(i)
                Next

            Else
                dx = mx - cx
                dy = my - cy
                a = _Atan2(dy, dx)
                dis = Sqr(dx * dx + dy * dy)
                For i = 1 To quads
                    pointa(i) = (360 / quads) * i * (3.14159 / 180)
                    pointx(i) = cx + dis * Cos(pointa(i) + a)
                    pointy(i) = cy + dis * Sin(pointa(i) + a)
                    lastmx(i) = pointx(i)
                    lastmy(i) = pointy(i)
                    If plasma = 1 Then
                        r = Int(128 + 127 * Sin(pointx(i) / 25 + t) + 127 * Cos(pointy(i) / 25 + t))
                        g = Int(128 + 127 * Sin(pointx(i) / 25 + t * 1.5) + 127 * Cos(pointy(i) / 25 + t * 1.5))
                        b = Int(128 + 127 * Sin(pointx(i) / 25 + t * 2) + 127 * Cos(pointy(i) / 25 + t * 2))
                        fc pointx(i), pointy(i), brushsize * ss, _RGB(r, g, b), 0
                    Else
                        fc pointx(i), pointy(i), brushsize * ss, blk&, 0
                    End If
                Next
                stilldown = 1
            End If
            stilldown = 1
            DrawMenu
            _Display
        Else
            stilldown = 0
        End If

        'if right click, fill sections with random color
        If _MouseButton(2) Then

            _FreeImage undo&
            undo& = _CopyImage(_Display)

            _Display

            dx = mx - cx
            dy = my - cy
            a = _Atan2(dy, dx)
            dis = Sqr(dx * dx + dy * dy)
            For i = 1 To quads
                pointa(i) = (360 / quads) * i * (3.14159 / 180)
                pointx(i) = cx + dis * Cos(pointa(i) + a)
                pointy(i) = cy + dis * Sin(pointa(i) + a)
                lastmx(i) = pointx(i)
                lastmy(i) = pointy(i)
                SPAINT pointx(i), pointy(i), fill&
            Next

            'Get next random fill color
            If randfill = 1 Then
                r = Rnd * 255: g = Rnd * 255: b = Rnd * 255
                fill& = _RGB(r, g, b)
            End If

            DrawMenu

            _AutoDisplay

            While _MouseButton(2) <> 0: n = _MouseInput: Wend
        End If

    End If

    'get keyboard input
    key$ = UCase$(InKey$)
    If key$ <> "" Then
        Select Case key$
            Case Chr$(32): Cls , wht&: DrawMenu 'scpace clears screen again
            Case Chr$(0) + Chr$(72)
                If quads < 16 Then
                    quads = quads + 1
                    ReDim Shared pointa(quads), pointx(quads), pointy(quads), lastmx(quads), lastmy(quads)
                End If
            Case Chr$(0) + Chr$(80)
                If quads > 1 Then
                    quads = quads - 1
                    ReDim Shared pointa(quads), pointx(quads), pointy(quads), lastmx(quads), lastmy(quads)
                End If
            Case "+"
                brushsize = brushsize + 1: If brushsize > 50 Then brushsize = 50
            Case "-"
                brushsize = brushsize - 1: If brushsize < 1 Then brushsize = 1
            Case "U": _PutImage (0, 0), undo&
            Case "A": Smooth
            Case "P": If plasma = 1 Then plasma = 0 Else plasma = 1
            Case "S"
                saveimg$ = IBOX$("NAME OF BMP TO SAVE-> ", 40, _RGB(255, 255, 255), _RGB(96, 96, 96), 0)
                If saveimg$ <> "" Then
                    If LCase$(Right$(saveimg$, 4)) <> ".bmp" Then saveimg$ = saveimg$ + ".bmp"
                    SaveAsBMP saveimg$
                    a$ = IBOX$(UCase$(saveimg$) + " SAVED!", 0, _RGB(255, 255, 255), _RGB(96, 96, 96), 2)
                End If
            Case "F"
                new& = ColorPicker&(200 * ss, 150 * ss)
                If new& <> 0 Then
                    randfill = 0
                    fill& = new&
                End If
            Case "D"
                new& = ColorPicker&(200 * ss, 150 * ss)
                If new& <> 0 Then
                    blk& = new&
                Else
                    blk& = _RGB(0, 0, 0)
                End If
            Case "E"
                Select Case eraser
                    Case Is = 1: eraser = 0
                    Case Is = 0: eraser = 1
                End Select
                If blk& = _RGB(0, 0, 0) Then
                    blk& = wht&
                Else
                    blk& = _RGB(0, 0, 0)
                End If
            Case "R"
                Do Until InKey$ = "": Loop
                Select Case randfill
                    Case Is = 1: randfill = 0
                    Case Is = 0: randfill = 1
                End Select
            Case "L"
                openimg$ = IBOX$("IMAGE TO LOAD-> ", 40, _RGB(255, 255, 255), _RGB(96, 96, 96), 0)
                'if filename given
                If openimg$ <> "" Then
                    'if file exists..
                    If _FileExists(openimg$) Then
                        'test loading image
                        o& = _LoadImage(openimg$)
                        If o& = -1 Then
                            a$ = IBOX$(UCase$(openimg$) + " NOT VALID!", 0, _RGB(255, 255, 255), _RGB(96, 96, 96), 2)
                        Else
                            _PutImage (0, 0)-(_Width - (200 * ss), _Height), o&
                            _FreeImage o&
                        End If
                    Else
                        a$ = IBOX$(UCase$(openimg$) + " NOT FOUND!", 0, _RGB(255, 255, 255), _RGB(96, 96, 96), 2)
                    End If
                End If
            Case Chr$(27): End
        End Select
        Do Until InKey$ = "": Loop
        _Display
        GoTo main
    End If

    _AutoDisplay

Loop

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


Sub Text (x, y, textHeight, K As _Unsigned Long, txt$)
    'Text SUB by bplus.
    Dim fg As _Unsigned Long, cur&, I&, multi, xlen
    fg = _DefaultColor
    cur& = _Dest
    I& = _NewImage(8 * Len(txt$), 16, 32)
    _Dest I&
    Color K, _RGBA32(0, 0, 0, 0)
    _PrintString (0, 0), txt$
    multi = textHeight / 16
    xlen = Len(txt$) * 8 * multi
    _PutImage (x, y)-Step(xlen, textHeight), I&, cur&
    Color fg
    _FreeImage I&
End Sub

Function ColorPicker& (xpos, ypos)
    'ColorPicker& Function by Dav, SEP/2020. FREE TO USE FOR ALL
    'Function Returns color picked by user if one selected.
    'If no color selected before Closing, function returns 0
    'Click CLOSE to close the ColorPicker image.
    'ESC key cancels selection and closes picker too.
    'The xpos/ypos is x/y point on the screen to place colorpicker

    '=== Save users display status
    DisplayStatus% = _AutoDisplay

    '=== copy background screen using _mem (thanks Steve!)
    '=== Used this method because_COPYIMAGE(_DISPLAY) didnt always work
    Dim scr1 As _MEM, scr2 As _MEM
    scr1 = _MemImage(0): scr2 = _MemNew(scr1.SIZE)
    _MemCopy scr1, scr1.OFFSET, scr1.SIZE To scr2, scr2.OFFSET

    'Create Colorpicker image
    v& = _NewImage(463, 239, 32)
    Dim m As _MEM: m = _MemImage(v&)
    A$ = "" '...COLORPICKER.PNG encoded by BASIMAGE...
    A$ = A$ + "haIkMo7KDGOh77_oaBfFFfOhBL9c5gGWaX9BRK62K46AkHnS9I=`09EP<4V="
    A$ = A$ + "e25F]0eB;]jK;#YFXUEJQJGM573`644fjGM:62H66L42I^89^HF<co`T]oHo"
    A$ = A$ + "anW]TUUk;O2BnLONnmjek3L7m>li;cS4;]LohSGjC_[gM=C6WciL>WciL>Wc"
    A$ = A$ + "iL>WciL>WciL>WciLOFMgBE9=CX6XN80S0C0W7n48C2O2LNH2H480e3e0c4^"
    A$ = A$ + "5XZHUa7hn4hl`4`8#0Z7Z1V9L;#boQOFngVWjlLWGjhUNN]SGkiAW:SK^U[]"
    A$ = A$ + "lUDW:cUmbnoNZbCf>]MJkdfYVnIk\bR]CKWf>o\CkdEn=KWEVBc:SC0I:[oV"
    A$ = A$ + "IUa7h\MJkd=m>KWEVBc:SC0I:[oVIUa7h\MJkd=m>KWEVBc:SC0I:[oVIUa7"
    A$ = A$ + "h\MJkd=m>KWEVBc:SC0I:[oVIUa7h\MJkd=m>KWEVBc^e?go9QI1;0NB80_0"
    A$ = A$ + "LLhL`73oW4nHhL`aQG02`C2;0V5L[`W;f]2c2F0lT#0N1hh`iP?6n?anHhL`"
    A$ = A$ + "aQG02`C2;0V5L[`W;QK5V5\0h9Q0l2`aQc1O<lORma`iPS3_04PW4F0<;hFQ"
    A$ = A$ + "?G\2mk?k:?V]c:CYIf>]MJkdfY[h>KWEVBc\MJkdfY]CGaMf>[<UVIkdfY]C"
    A$ = A$ + "KW^Rk\MFI:=cfY]CKWf>M5gIk\bDJV]CKWf>]Mj:^cfIUYd<KWf>]MJkdELW"
    A$ = A$ + "]c:CYIf>]MJkdfY[h>KWEVBc^]_ho:QI3;4J02```aPc2O4l_BhSPc273662"
    A$ = A$ + "#3`2QI3g6l5SMK`\Q52=01HHhH`IQ?2nGan8h\`aPQQ0d0\#Hf`]1Oa4^=Hf"
    A$ = A$ + "`2Q6P0<<L<h\`71o[HO4LFhH``#0J0F8<KhfP_H\2mk?k:?V]c:CYIf>]MJk"
    A$ = A$ + "dfY[h>KWEVBc\MJkdfY]CGaM5[fiMOgIbl\?KV<o_o_IbLZC5[gNcTiaOl<I"
    A$ = A$ + "^iK>oom_okObmoloDhG>R>OR>oR>O_J^LT[C[X[GIOJ59j?Knc?oWNAG^cge"
    A$ = A$ + "[LY#_lUVIkdfY]CKW^Rk^FKWcJFIbl7n35fie#3=i]Ql]X>EQdifgn:\;7AO"
    A$ = A$ + "Mi[A5miR>?oKo]Ynd:j[Ib>mR>=BkRjWf>]MJkdfId\MFn^[UfiBFBj?onX?"
    A$ = A$ + "jbg7eRIk<jngmn_Oj^L4meW[NGdOFJ?]V\[Gf>]MJkdfY]cK<gEKk<ja[lZM"
    A$ = A$ + "AM6f]bgVZfiEC[;JAomhYEQNOGceR^ogf>]MJkdfY]cKlgEKk<ZoM]<f3CcG"
    A$ = A$ + "KfRniAN]\XonIOO>_FGfo\I]MJkdfY]CKWgH^[VfiDMO>GcJ^L38jiDcT=NO"
    A$ = A$ + "nbgbGk<OgWcX?GdUSXWoB5bUSX_f9KAoL=Sj\AGgcgoO3AOnb]fiMlUoW9<7"
    A$ = A$ + "HA#3#066>:l>`72oc4n#hMPS2331X1HA`LPk0nba^3H>`RP6P0<<LDhMP?4n"
    A$ = A$ + "Wan#hMPS2331X1HA`LPk0nb9L7`LP51=01HHhX`k0O8l?SmQ`k075662#3`R"
    A$ = A$ + "Pi0g1lUSU[Ik\lMG=]cle4Rj:5JS]Hd>cg^B7[#_L\a=>iO=A??M;T[oIOIM"
    A$ = A$ + "ZJWAONZ#O>5WVIkdfY]CKW^Rk^JJWikna5MO=;Tk7Gdb^CT_=I]cYjaHm:g7"
    A$ = A$ + "^2mbAaX9VVfIQd8]MJkdfY]CGig^JJWikaR==]c\Ol9cgV\fIQNjGXOMi[e5"
    A$ = A$ + "mL8bfY]CKWf>]MjRV]c2[M6][lJ#9j[?G?N[AbnjT]CKWf>]MJkl6cIk<n[["
    A$ = A$ + "#NMg4mlPZ#kKf>]MJkdfY]cK<W]ch_^XO^W5bRNMLV[gO7\MJkdfY]CKWOfH"
    A$ = A$ + "f>CNiX#Oo5<JCem1MZJWlm8g\?fE<KWge=m?BhnP53[62`NQS0_=l1`o8Q?0"
    A$ = A$ + "NKh8`NQ0\JHa`m1g5LCa^;hnP53[62`NQS0_=l1`o8f70_=L4H_#0F=\HhnP"
    A$ = A$ + "k2^Y4^;hnP53[62`NQS0_=l1`o8f70_=L4H_#0F=\HhnPk2^YHiJf>;OGY\M"
    A$ = A$ + "6mlP]#OO??OkjIk<jnNF8_?fNU5eJW\gKL_JNmMJkdfY]CKWGIf>;OGY\MF\"
    A$ = A$ + "N<8_Nf>S4mhaVVniTmNd[]CKWf>]MJkl6cIk<g_GnTfgOiSJ]5Sg;h]MJkdf"
    A$ = A$ + "Y]c[<KWU_cfInOO`;jgKJ5jRjWIohgJkdfY]CKWf>_aLf>Wjg3ISnMDJQnNO"
    A$ = A$ + "OJN_A`W[#f>]MJkdfIUiliIKQmn_NdmWl`7>oW>A;kgKi;GN=ZHkdfY]CKW^"
    A$ = A$ + "Rk\MVlegiTmn5dEnMEFd___WZW7Af>]MJkdfY]cK\W]c2k[;k[GA?6^iKGii"
    A$ = A$ + "<DiBkL6glO?QZQU0[12`NP33W2^8lgChR`YP33k12`JPU0E3c0^iHc0Z6F2\"
    A$ = A$ + "680k1><L:hR`O?f5QC176f34Pe0;1Z6V1Lc9<3XJH9`JP0\7h``YP;2omHG4"
    A$ = A$ + ">5LHH?#0F3\4XJH6`=7;GcfIik\MVnfITlMO?;dgOL]MJkdfY]CKWEVKjlg1"
    A$ = A$ + "IIoJj8O[L\MV_oo7\MJkdfY]CKWgH_Rm_k[CCk\#K1UjOoMF8GN]MJkdfY]C"
    A$ = A$ + "KW^[\[Vfi6ghTOj5mHIVf_^YZ54mj3Q_F>^bmI=Ok:?oNbgUSXE8G>R^<TMc"
    A$ = A$ + ">O?V]5j?_cLmJD9jeCZ]CKWf>]M6=KWU_kZYM6e6bgRN<MSj6i[_4meLef2R"
    A$ = A$ + "fE^_Mika?>je;BJ_LT_G7WGijeDmn=DQLocW\EX_6?Cc\MJkdfY]CGaMG=]c"
    A$ = A$ + "YZaD8;jiZJaXM>E?WGCkUS[VNGf;kF\]CKWf>]MJkl6cMef>_FJFijaU<];k"
    A$ = A$ + "WS^5bkI1iJAombe?3edln0?Gf]HKWf>]MJkdfi=VkZ]M6Y#NO2PKbNNoTfag"
    A$ = A$ + ";PBKo<GMc\O<YCck3lA;jh`lWoenmQ]Dd>_WKiCBHN#]#S#06267>9lN`WT`"
    A$ = A$ + "k1W467622#S#]`lPk1^UHg3<?XFXA8031S3W4N?hCRmN`9QaQQP0d8D;<?hN"
    A$ = A$ + "PK9Qk1V7D;d84PQPaQC2_7l9aN?hT`h`##0J4Z5V7L?`]4;GcfIik^FJWARN"
    A$ = A$ + "_hIOkKZKXAoN^T?nX5cfITXWK#CEc;jcOUW3ACUXWSACeS=MdekNk=go>ldf"
    A$ = A$ + "Y]CKWf>]MNSi^FKWI;ZW5eKbnmb^Xk;fTmk6jBUXNNdi;_L4mWG\>mRj_ijg"
    A$ = A$ + "IWG_TVIkdfY]CKW^Rk:V]CIkdfY]CKWf>o\`\MFI:=cfY]CKWf>M5gIk\bDJ"
    A$ = A$ + "V]CKWf>]Mj:^cfIUYd<KWf>]MJkdELW]c:CYIgkgh_V`32?6\F8032_<L2h2"
    A$ = A$ + "`O=Q;0W0NIH#80[5N<h1Qk5n6a^Gh1Q73F;4P1QG6>1L1h_6k2`9PG6642`J"
    A$ = A$ + "Q73N#hNQ_A2g;lP`S1[52`P`;3W0^0lGSM1h4`;3321H]`S1?8L_`g8FQnmW"
    A$ = A$ + "MU7cfIUYd<KWf>]MJkdELW]c:CYIf>]MJkdfY[h>KWEVBc\MJkdfY]CGaMf>"
    A$ = A$ + "[<UVIkdfY]CKW^Rk\MFI:=cfY]CKWf>M5gIk\bDJV]CKWf>]Mj:^cfIUYd<K"
    A$ = A$ + "Wf>]MJkdELW]c:CYIcjfo;9l``bPe21H#hP`K0W3n;9L>h=P32321H]`bP76"
    A$ = A$ + "V5LkaV5l``bPe21H#hP`K0W3n;a>7l6`1Q1Q0\FHI`33c2^m4V5l``bPe21H"
    A$ = A$ + "#hP`K0W3n;a>7l6`1Q1Q0\FHI`33c2^mH5jgOfEN<KWEVBc\MJkdfY]CGaMf"
    A$ = A$ + ">[<UVIkdfY]CKW^Rk\MFI:=cfY]CKWf>M5gIk\bDJV]CKWf>[\KWZlU]c:;f"
    A$ = A$ + ">]MJkdfYVnIk\bR]CKWf>_a_MjL^Y_IkdfY]CKW>W;MKfgiO>Qi3;7F74PM3"
    A$ = A$ + "70N=h\`O>Qc2_6L0Hg#0F7\LHn`\Qk<f\Qi3;7F74PM370N=h\`O>fIQG3>0"
    A$ = A$ + "\K80[3F><OHf`MV`\Qi3;7F74PM370N=h\`O>fIQG3>0\K80[3F><OHf`M6c"
    A$ = A$ + "iLUGcfY]CKWf>M>GjV]CKWf>]MjL^d=KWf>]MFif>o_ogoKVgomOo9eOj?mW"
    A$ = A$ + "bLQ;LQ<WolWOBm^_kkVigokomCZCNbCVi]N[gJBMRCLR<ofOk_MBmKn=oV<_"
    A$ = A$ + "j[nZI>lQ?L>=nhSWiGo[oeInEoZOeTJ\a6;c_hGl;b<b8S<Y6L`1clcoiolL"
    A$ = A$ + "JGkJGIjYWNb[]^e]ViIOfW=_J_mfcdJ[]VC]dB;IJZYVblcnIo\LJM[KMIFc"
    A$ = A$ + "JFCVj[_n9EMeEGVE^bEViWlCn9idBGjBc\TU\TlJ1;H1InAoXODNm0?`3TCo"
    A$ = A$ + "PO`?8cgokomclmnNO_9eLVcLblMn>OW<cLVcLBm]ofOk<cH6c8cMOggM>MWG"
    A$ = A$ + "jkQNkgn]?YnVOc_IV_nGo[Wi[menJCZ_jGm[Vi[lEn:I^YKjVbY_dGj;Ui;l"
    A$ = A$ + "5n2CZ?oWocWYZZZ:QomonOKkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]"
    A$ = A$ + "MJkdfY]c:`fiLWa5CX6H5#C#060f?<1L6hR9L6H2Ho`0#0J2F1D3<GH6aV;D"
    A$ = A$ + "3\2X98030k7V0>3LaHW1V0f?<04PVPE0e0c5VA2c5Z1F1d44P1Pm3C0W1^H\"
    A$ = A$ + "c0C0k7602#C`:PJPi2c8V]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY"
    A$ = A$ + "]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]M"
    A$ = A$ + "JkdfY]CKWf>]MJkl6[fimo]nS9\0HU`C11HG`nPS3W6nS9LJhh`nPM11hYPE"
    A$ = A$ + "2;0^OhK5knQ50[4N:80k2f7LLhd`O<fYQS3k3f54PW2F9\0hnQ_E2g?\0HU`"
    A$ = A$ + "C11HG`nPS3W6nSa>=LLHO`^P0lD`:Q50g?l]RIkdfY]CKWf>]MJkdfY]CKWf"
    A$ = A$ + ">]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY"
    A$ = A$ + "]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>_aZM>_INn4F4\:XI80m3S175>9Ln"
    A$ = A$ + "4>9LDH<XO80=3[2F4<?HVaV7\8HE#c#0j763>:LBhla>9LDH<XO80=3[2F4<"
    A$ = A$ + "?HV9<?HA`ZPVQ0d?<6LDhT`iSMBhX`H#o#0J6F5\8HN`<SIkdfY]CKWf>]MJ"
    A$ = A$ + "kdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKW"
    A$ = A$ + "f>]MJkdfY]CKWf>]MJkdfY]CKWUk]c7jkn^9lX`C0=31XOh5QG1NChMCh=QG"
    A$ = A$ + "1NAXO80=3?1lX`31OgH?4lX`C0=31XOh5QG1NChMSmV`[0_8d?4PVQW0NDhQ"
    A$ = A$ + "P_K2?4lX`C0=31XOh5QG1NChMSmV`[0_8d?4PVQW0NDhQP_K<KWf>]MJkdfY"
    A$ = A$ + "]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MFng>M>gdc\MJkdfY]CWcU^Ikdf"
    A$ = A$ + "Y]CKW>W;McfY]CKWf>M>GjV]CKWf>[#KWQB\\fY3UF9_NEEYedd1a#VZ:YBN"
    A$ = A$ + "NEJoWYYK6V94:]BcNTiNV4Z5Z3F?4PnPAQaQG7>C2_><><:d74Pe3e1e2?2<"
    A$ = A$ + "gH?2D;D7\N80m1S2S3_>LVH_><><:d74Pe3e1e2?2<g4N4XFX>Hm#0j36567"
    A$ = A$ + "NMh<aNMHLHDX?80[7Z3Z5N4H^abi^>n=]\MN]O#dfY]CKWf>]MJkdfIj>8Jk"
    A$ = A$ + "dfY]CKWf>]MJk<M74]MJkdfY]CKWf>]MV^3Rf>]MJkdfY]CKWf>Cg1AKWf>]"
    A$ = A$ + "MJkdfY]CKWYkPX]CKWf>]MJkdfY]cdM#dfY]CKWf>]MJkdfIj>8Jkl6[fI=E"
    A$ = A$ + "OZ4F:D?\180k461>4<1LZ4V0>4<2\C80K0Z7F:D3DM\JPU2e3K02`>QAP31C"
    A$ = A$ + "0W:f4`QPAPM21H3#m`BQJPZCX6HY#m`6P0\CH4h#`4`YR=1L8H4HW#0f0D?\"
    A$ = A$ + "DX6XjHiLG7oVFf>_f?8JkdfY]CKWf>]MJk<M74]MJkdfY]CKWf>]MV^3Rf>]"
    A$ = A$ + "MJkdfY]CKWf>Cg1AKWf>]MJkdfY]CKWYkPX]CKWf>]MJkdfY]cdM#dfY]CKW"
    A$ = A$ + "f>]MJkdfIj>8Jkl6[fi2OPg:QU3=0K42`>PQQ3073N[4>6L0HHH7#0f8d0\L"
    A$ = A$ + "HQ`34KQ`bQ6P=21H7```1PS1_E\S17066f14P=2=0;7F8l09\#Hi#3`6Q0\3"
    A$ = A$ + "HHh0`aPg:faP3033k02`6Q6PU3;4NPHiLG7oVFf>_f?8JkdfY]CKWf>]MJk<"
    A$ = A$ + "M74]MJkdfY]CKWU1]CWc=]=KWf>]MJkdiLYKf>]MJkdfYciBg\MJkdfI5Jk\"
    A$ = A$ + "ZB\\fY3QBZTWGEEB=MM#\j;maUB9_FEJoY[>=Mc`<EEEYEJV]CKWf>]MJkdf"
    A$ = A$ + "Y]c<YJf>]MJkdfY]CKWf>cTZ]hOh_;Q77F=d24PNQm2_4L4hgU`APG2f;d;4"
    A$ = A$ + "PFPE3?>\Hh76Ka`S3[6J12#_`NQG2>2lkRM4hUPm2m21X5He`S3;6nQ9\Hha"
    A$ = A$ + "QE3]01XGH_`;171nMa>2lB`NQNQ0d2\JhaQ53o`HiLf>]MJkdfY]CKWf>]MV"
    A$ = A$ + "afY]CKWf>]MJkdfY]c;?KWf>]MJkdfY]CKWf>_>Oc#KWf>]MJkdfY]CKWYkV"
    A$ = A$ + "Qf>]MJkdfY]CKWf>Cg=3]MJkdfY]CKWf>]MV^K6JkdfY]CKWf>]MJk<Mg<\\"
    A$ = A$ + "ZMFK=CT`ZP6QFP0d;<4<6<><A2S3S131m21X5XAHE#]#=aZ5F5d8d24PNQQP"
    A$ = A$ + "aPaQ9R=><6<4d;4PFP6QE1e2eT#]`ZP6QFP0d;<4<6<><A\aQaPQPNQ0d2d8"
    A$ = A$ + "\:XFXVHiLf>]MJkdfY]CKWf>]MVafY]CKWf>]MJkdfY]c;?KWf>]MJkdfY]C"
    A$ = A$ + "KWf>_>Oc#KWf>]MJkdfY]CKWYkVQf>]MJkdfY]CKWf>Cg=3]MJkdfY]CKWf>"
    A$ = A$ + "]MV^K6FFe>Gf?nECX>H]`C31hiQ1QAQ32_J2746564NN80?=\FX>HI`?>fbP"
    A$ = A$ + "jPe2?=4PW76465>8lZa>8<:<8ll#0NJH]#M`bPOL2;3Z3F;ld#0NNH#HDhP`"
    A$ = A$ + "[6kP`X`P`c31hYQe2e1;3naaL>Gie\MJkdfY]CWcU^IkdfY]CKW>W;McfY]C"
    A$ = A$ + "KWEV]cXOdMUBI_Z[:DBUl:FXd:kcZZ[ZT:iE[Z:YbNEERoW4gf8DJUhljBo1"
    A$ = A$ + "UBYIf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWLf>]MJkdfY]CKWf>]"
    A$ = A$ + "MnYA6KWf>;kKW[H97>QjQVPFQ0d3<0<2\Oh`9\OH4H0X780]2=1e3[0FB\E0"
    A$ = A$ + "e3=1]21X7H0H4Ho`QS]OH4H0X780]2=1e3[0FB2[0Z7J2J52#?`0`8`nQ37K"
    A$ = A$ + "o`8`0#?#0J5J2Z7F1\THiJf>]MJkdfY]CKWf>]MnYA6KWf>]MJkdfY]CKWf>"
    A$ = A$ + "]MJkdfY]CKWf>]MJklbgf`fY]CKWf>]MJkdfY]c2Hf>]MJkdfY]CKWf>]MJk"
    A$ = A$ + "dfY]CKWf>]MJkdfY]CKWLf>]MJkLj[M^ZUNX4J0J6f44P]3m333S17:QaPQQ"
    A$ = A$ + "nQ]31HC#c#3`ZPU6KE#3#c`VP0\MXOHHH<h#a6366j7f>4P=1=3=0[2FJ2[2"
    A$ = A$ + "J0J6f44P]3m333S17:fH``#o`fQ0\9XIX1HE`BSU[IkdfY]CKWf>]MJkdfiW"
    A$ = A$ + "6I\MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]c;OK3KWf>]MJkdfY]CKWf>;P"
    A$ = A$ + "IkdfY]c:cfYciVnV]CKWf>]MjL^d]jFanCXAHm#K#0j6j36265fO2S231m1M"
    A$ = A$ + "31X=Hm#S#M`:RE7d8\NX=80M3m131S2k?fX`##O#g#0J3F?d8D7\R4Z3J4F?"
    A$ = A$ + "d64P^QnPQPAQm7KDH8X?XK80]1[7J4Z3FA<WcEN=KWf>]MFQf>Sni4F:Ue2G"
    A$ = A$ + "jS;UbN_DEEEBUlHHEUFI]Z3EEBUlV6EEB==Mc`;M8=DBUVIkdfY]CKWf>]MJ"
    A$ = A$ + "kdfY]CKWf>]MJkdfY]CKWf>]MnoKf>]MJkdfY]CKWf>]MVafY]CKWf>]MJkd"
    A$ = A$ + "fY]c;?KWf>]MJkdfY]CKWf>_>Oc`bZfI3odOI2[3f8d64P^QM0k666nU9<<\"
    A$ = A$ + "KH7#g#0J3f8\>X1hW6[1HM`6QfP0d=\3Hg```_<f``^QM0M31X=HS`jP6POJ"
    A$ = A$ + "2=0[3f8d64P^QM0k666nUa66f=\3XK80]1K4F7d0lCSUcIkdfY]CKWf>]MJk"
    A$ = A$ + "dfI6KWf>]MJkdfY]CKWf>_l\MJkdfY]CKWf>]MJkljl=3]MJkdfY]CKWf>]M"
    A$ = A$ + "JkdfY]CKWf>]MJkdfY]CKWf>]MnYcfY]CKW9W]CKWf>]MJkdfY]cde>K\nAB"
    A$ = A$ + "XIX5XM80K3j5j76269QQPnQNQ]11XMX5XIXAXnH=2=3]0]31HK#_#o`#`8a6"
    A$ = A$ + "2j7j5f64PfQFPVQ6QjCXAXIX5XM80K3j5j76269f##o#_`fP0d>d2d<d8DO\"
    A$ = A$ + "L>KWf>]MJkdfY]CKWf>cHkdfY]CKWf>]MJkdfiUW]CKWf>]MJk\<XMjL^Y]I"
    A$ = A$ + "kdfY]CKW>W;McfY]CKWf>M>GjV]CKWf>[<KWQZZ^T:kEmUnhBYTWGEEBUlHH"
    A$ = A$ + "EUD9^NEMEUDI_Z^d7G:Ull:DBUhljBgFYD:=[Ye\W4f0d:\I80K5j1f9<0\W"
    A$ = A$ + "460f9d3\E80K6J5f0d4\VH=1K0J5f<4P]2m0k460fC\1PM2m0K52`VQFQ=0="
    A$ = A$ + "1[9QVP=0]2K62`FQNPM230k9f0`>QNP]21Hc#[`6PVPe4;GcfY]CKWf>]MJk"
    A$ = A$ + "dfY]c;ONIkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWGilbfY]CKWf>]MJkd"
    A$ = A$ + "fY]cYNf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWLf>]MJkLj[M^nV6"
    A$ = A$ + "8QFPfP>P0\5XKXGX?HP4j3j5j6f24P>PfPFPe3=5Km#;#K#7#0f2d=d;d7<#"
    A$ = A$ + "\nPNQ^Q]01X3X=X5Hm#C9\NX5X=X380K1j6j5j368FO#_#g`FP0d1d6d2\NX"
    A$ = A$ + "YHiJf>]MJkdfY]CKWf>]MNic;KWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkl"
    A$ = A$ + ":WGf>]MJkdfY]CKWf>]M>ecfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJ"
    A$ = A$ + "kTcfY]CKWCO]cFf`>CHC#k#W#0j2f6\MXGHW9d;\MHK#G#0j4J7f4d2\QH]0"
    A$ = A$ + "K2J7j42#G`fP]3m2k<F_`fQ]1M11XCXMHC#;`6BX5HC#k#W#0j2f6\MXGHWa"
    A$ = A$ + "j5f>\=X;80M2]3K2J1f#\L=KWf>]MJkdfY]CKWY[MjL^Y_IkdfY]CKW>W;Mc"
    A$ = A$ + "fY]CKWf>M>GjV]CKWf>[<KWEEEEUDI_[Wol>?mY?M9Ef;4Z^T:iiEXT:aomj"
    A$ = A$ + "BOLYDRK7NY?^DJjjflCe\MJkdfIUKk\D=KWf>]MVoIkdfY]CKWCeY]]CKWf>"
    A$ = A$ + "C^fJ]W4J7j0j42#G`FP]1M3mT#g`fP]0M11XCX3XMX=XeH]1]3M0M21X;H;`"
    A$ = A$ + "fP^QNRe=\=H;#G#0j4j0J7J3J=QfPfQ>P>Q0d5\5HK#g#?aj6f6\5X;80M2M"
    A$ = A$ + "0]3]1]6;GcfY]CKWf>]MJkdfY]cXIkdfY]CKWf>]MJkdfiU?_\MJkdfY]CKW"
    A$ = A$ + "f>]MJkdfY]CKWf>]M>IWff>]MJk<i\MJkdfY]cYjdffY]CKW9W]cdf>cjOgf"
    A$ = A$ + "Y]CKWf>]MJkdfY]CKWf>caY]]CKWf>C^>flFCXcY`c01hiP^V2K1fJ2K1jJ:"
    A$ = A$ + "lL#0N6XcY#7`Vc\e>nDMVeonEnhliIP0lL#GCQ]0K=fFP^V2?74PW1jL:d1\"
    A$ = A$ + "i4j0jL:l<#0N>X[Y`FP]6K;#GCQW32`c0M>5j0fL\L=KWf>]MJkdfY]CKWf>"
    A$ = A$ + "SV]CKWf>]MJkdfY]CKWGnlbfY]c?3g>_R>f\]CKWf>]MJkdfY]CKWf>]MVcC"
    A$ = A$ + "KKWf>]MVLf>]MJkdfiDMJKkdfY]cTcf9KUiX?>E]c9kcIkdfI9^MNmjkSHkd"
    A$ = A$ + "fY]cTcfY]CKWEV]CWciL>WciL>WciL>WciL>WciL>W;OkoC[%%L2"
    btemp$ = "" 'decode string data to image data
    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


    temp& = _NewImage(_Width(v&) * ss, _Height(v&) * ss)
    _Dest temp&
    _PutImage (0, 0)-(_Width, _Height), v&
    _Display
    _Dest 0
    _FreeImage v&

    'Put colorpicker image on screen at xpos/ypos
    _PutImage (xpos, ypos), temp&: _Display: _FreeImage temp&

    '====================================

    '=== Now get users color selection...

    '=== no selection made yet
    selected = 0

    '=== main loop
    Do
        '=== Get mouse input
        While _MouseInput
            '=== Get mouse x/y
            mx = _MouseX: my = _MouseY
            '=== Only poll this area
            If mx < (xpos + (473 * ss)) And my < (ypos + (243 * ss)) Then
                '=== if click button in area
                If _MouseButton(1) Then
                    '=== if clicked in CLOSE box area
                    If mx > (xpos + (352 * ss)) And mx < (xpos + (457 * ss)) And my > (ypos + (5 * ss)) And my < (ypos + (72 * ss)) Then
                        GoTo donepicking
                    End If
                    '=== made a color selection
                    selected = 1
                    '=== Get color where mouse pointer is
                    clr& = Point(mx, my)
                    '=== Make Red Green Blue color values
                    red = _Red32(clr&): grn = _Green32(clr&): blu = _Blue32(clr&)
                    '=== show color selected in box
                    Line ((xpos + (246 * ss)), (ypos + (7 * ss)))-((xpos + (347 * ss)), (ypos + (70 * ss))), _RGB(red, grn, blu), BF
                    '=== Update gradient strip with color...
                    '=== ...only if mouse not in gradient strip area
                    If mx <= (xpos + (246 * ss)) Or mx >= (xpos + (457 * ss)) Or my <= (ypos + (77 * ss)) Or my >= (ypos + (107 * ss)) Then
                        c = 0
                        For x = (xpos + (453 * ss)) To (xpos + (242 * ss)) Step -(4 * ss)
                            Line (x, (ypos + (77 * ss)))-(x + (4 * ss), (ypos + (107 * ss))), _RGB(red + c, grn + c, blu + c), BF
                            c = c + (4 * ss)
                        Next
                    End If
                End If
                '=== update screen
                _Display
            End If
        Wend

        '=== ESC key cancels picking and closes
        If InKey$ = Chr$(27) Then
            selected = 0: GoTo donepicking
        End If

        '=== don't be a cpu pig
        _Limit 60

    Loop 'UNTIL INKEY$ <> ""

    donepicking:

    '=== wait for mouse button UP to continue
    Do: mi = _MouseInput: Loop Until _MouseButton(1) = 0

    '=== if user selected color, say so
    If selected = 1 Then
        ColorPicker& = clr&
    Else
        ColorPicker& = 0
    End If

    '====================================

    'Restore background as it was
    _MemCopy scr2, scr2.OFFSET, scr2.SIZE To scr1, scr1.OFFSET
    _MemFree scr1: _MemFree scr2

    'Restore display status as it was
    If DisplayStatus% = -1 Then _AutoDisplay

End Function

Function BASIMAGE1& 'quadmenu3.png
    v& = _NewImage(185, 593, 32)
    Dim m As _MEM: m = _MemImage(v&)
    A$ = ""
    A$ = A$ + "haIkm5LddLS[TjX>ZS?G#VQL1MDGWSb0T387J?8gjMA6`\1V8bMQb918HEEg"
    A$ = A$ + "MeMW8R<nooZV598IBFTPTPo[oeojOo_<<<<<<<<<<<<<<<<<NYh?nSohOPg9"
    A$ = A$ + "Mg`#QOogomomOnWoionocokoK;n[oj_n?QmM:_M64U9[`>Q=3doagDii[2Ch"
    A$ = A$ + "f:^nkDNlXHBIa>Q]3if;6G7>2oFEonYR9U1ol?oco7LF>>PkGoj#DFN5mmlK"
    A$ = A$ + "of_mFU_g1C:3nQOh7n?hZhh1nT;COV86_aEDO4mQmYFWlZhhAIj_n[ojKEIe"
    A$ = A$ + "M4GEmADGlCod?mdeoHnJEcUKW_gSiKW1NoG57?b3oh?nSKggA>_\Cn=Gfm\["
    A$ = A$ + "7OTlSEUcAN>h^CZ?RjhP[?IlmPK>9LZjWMnncZjjSb1?:7OJJ6jM4WAoiC:["
    A$ = A$ + "DQQc_k<g;Eifd`?9L[:7^RiO?9o6U_C[kfYnhXLl9];E#I3X[ROSlndbYX?S"
    A$ = A$ + "9mKPh=2kA]k5V;lIb[?:>nZjbk:7OJmA4^9fQ827nn`IiTLkU[J^88__37oA"
    A$ = A$ + "DVZb_XOWcTgRb9<NY9YGDG=9L[Z?AiDXog9>N<na757OR><9o<Y_VMaSTS7h"
    A$ = A$ + "<Ll[8_2K:de_#lKCZ[`H`NGihC[?NULLDVM5a7WgW4fW=7o:nNEDN=ik9Aj5"
    A$ = A$ + "]5VT_V4GX^oKPS_RC6eSC6S;b?CJcPnUV`A^[LlhkZCdW9aeTjQ8mVDf>YLm"
    A$ = A$ + "KSS_Jn9X>HJnIBJShLblL_[Ll9lgM:OGE^5YgTb[Ej5B?d^bLliLlMV762kT"
    A$ = A$ + "lcW>77QKEiFlkCR[EaSihjbT9OGfLLMJ<=?^:nVJ3WEeWPgMfeElCSS?ILPP"
    A$ = A$ + "g^cH#OWhh`Vh`6lCWSb>jbZb\9aeZlcg877jKH_9HK4\O>VXKijP?E>N`_S_"
    A$ = A$ + "UQg1fb=\cATGbUK1feN;CbSGeJ>L5f=lMdfQQ>c]_g]\kCVSSb6`]AO00iWO"
    A$ = A$ + "4^hI6gd^hKVS_JM8<7ooOOgijJdGndbYcZ;W5hkAWMOGn^aa_Rbf?I>NEOOG"
    A$ = A$ + "mn>k\]Ef9]nfhhGAIgg87OJIcDMiAcaaJm7h\W9Q?Yei4jjZ`l=`ainnV`Yf"
    A$ = A$ + "IM^^bf=MUk8]\]3oWYodb__5>ndeLl>aaalS_RcLcgljLJ>no<=NTLlM]A`E"
    A$ = A$ + "IKlYiOcaO<Ll9[9kA:C_SLlM7oNN?5m\hhk\6iVSg7^Mbkihm^aaga6GkJC\"
    A$ = A$ + "[bfhk<OTMV;g>fbMR]BVbaaJl=E?W`aalk_jmFk>hI`aWN^F>:7Ojnd:[??C"
    A$ = A$ + ">n>i3`M>ji[][NKji[NEHfQS7HZ]UO4LlSl]aS`aWFGTihk`IgM?GLEf6OWi"
    A$ = A$ + "M>Y<2jediX?5XNkZF7SMihkF_LUaIDo4ai>WO#VKl8>GfkbagI\IhLYLULl0"
    A$ = A$ + "WI]aSg?_?P>kI0_[Nk:R_<7oEMVUg=_?mKS7enhkV7g=NgY?U[dfhW]olXLT"
    A$ = A$ + "gSKIKmLeko\717oEik9VP#gbmKL6>nEl]jW=7?hFG=7?`>c=0c5=O6PieMMB"
    A$ = A$ + "L\KmfZ`_Z]EVS?Yn?nmWiL>aNP=ggaDkBDaaWdWc^ciL:7?g_lT`OUf6_SWW"
    A$ = A$ + "CSMZODa7:_cnZOH?b0imb_2ZmO6JCYRcEaGnkoIM4]_1hbR9a9Vg0dW9_7W?"
    A$ = A$ + "IPl:RGhcmVFFae]a_UcWhkaC:kH>ndl:jG>2Kl>C:7NTLLDW_cl4b]1Ikm4m"
    A$ = A$ + "]W;OHPbfZOG=oS9aI5WA=^:Dogm>Ml`<#l=9?]BoDf>SkSOEIe^_o4mVSc9_"
    A$ = A$ + "C^lNBnoZ\Kh:\khE[:3#I;gNWg3oM#]ocZRc8\CRC>nRgC5OXlNWhLJnJRNa"
    A$ = A$ + "moLTb:>>>CMaAdYSDfl<hh1VjG2Gaa=<^c0k3\YhM:_IH0P_]I>^QQQQQQQQ"
    A$ = A$ + "QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQan8>WM0ai;mMBgoTc;Ok8"
    A$ = A$ + ">KWM2l3:AM]jmQ?NYjME_G4O:1Q=nGFRg9coZnmM5>N[b;omOogoS`Jli`ac"
    A$ = A$ + "2cGEL]ElXSba3>fSTSGYC\4UG^Om?G>N8`G94mO7l^Y2le?Ml9h?A2>De_3O"
    A$ = A$ + "]6;h\J_[4_gocococF_Cegd<N_hhMl`OiGnUbO_:>amVmIhhAk4hGHIi<Ll0"
    A$ = A$ + ":YBGSW5W9lcN?VIlJih1O9hbELY:N<lmCMaiAih`_`XnMXG`W76oMEj0oZ6l"
    A$ = A$ + "??ElHh3XZb;?;o3UaSSS[ZOkj_L577n4SSbaAHjJk1Ng:m8ko=>:7oAkWo<^"
    A$ = A$ + "_Ll^aCGaYboN777nUb:m2LlZa]WC7<nNUnP_Idaa]oYaLl:^e:^G777nSd:m"
    A$ = A$ + ":?nQE]UR_7dE60OJM4V8\:O`4loN0iiFKH>Ne_gaa39dk:mj8Ll>k62KlGaa"
    A$ = A$ + "ib?K3mg7>NeLf^3Ll>mj8Ll8mFI7d8^Df5W;o#kQWY_LehHLl:1lS:N`cPS["
    A$ = A$ + "Tc`a3d]N]#`M]#GiWB?<NOhhika[^OoMTS3NnZekTiiVSoi`a3NIn^I#9?B>"
    A$ = A$ + "n:^gE`a30oNOW0k_Sf5Hl9ikg2ca_oLllMT5??[XN\Z^oAaa3^DWLELL`c[\"
    A$ = A$ + "Y8THmocSi>nkGam7RaaihEn[LDgZT797_KM;a_OD>>FKd<#OcEaAlKlMaEl<"
    A$ = A$ + "0?Wcg7>N^N;oN:iAca[JKQOo:]M8^kkZb;8m<GnmWSGmN:iAcaSn=[T[VSSm"
    A$ = A$ + "#VJO3TC_ZakHlncaEfCN577c7kXLLeJ^`onEbaaHcjB_8>ljLnIba[fgQ1?^"
    A$ = A$ + "KoOLF>NekNfaSGUGZj77[k9W6NM>oLhhC?3##bgCe7I?I1>LUMm>kjL^[PkD"
    A$ = A$ + "<>=ljLni`akNGFR`QaYDe?O8Chh[6OlA]MhdcjF8ie2SO?_6#OFLlP;^RKPc"
    A$ = A$ + "<Cf^aWQSSk<m^Oo8Ll^`WU#gb[5VihgO`[C7_^?CR3LgFW]_<N>_fAaH=#JR"
    A$ = A$ + "eJ10LWhi`W?`oFloak[Ng<gJEjX\92\U2FGo\]bcLk0AKG_>W_?PGW^Mhh1_"
    A$ = A$ + "]jmcl1N<ZZe#=cmDkWe<gAUV:^eZdIJhid9ON>mjLNo1_>MZemIBL4e]Am=0"
    A$ = A$ + "jGLWd4LWhOiO;g>AmnZij]:MD8n=d_?WOVT6N>W666666666666666666666"
    A$ = A$ + "666666666666666666666666666666666666gEXlS`:o:<2?lQ2Q?91HWk2k"
    A$ = A$ + "8\ig=R;fWnajDnN__B_Zb7:M70g7?lkFY?kXcEj#6MQGMG1=]\WS?X[ZWaU9"
    A$ = A$ + "`7;^RCTmAMLi3:SDiQG1VhKZ#nYk>]?RW^lDlKMYE^<SmS>`_6gMWWeM7VW["
    A$ = A$ + ";b2h7:o_f4M>c_jlG##oId9AiL^Md>UmEjIF#i2GV0Nn4IEnVc3gI>>lY=C^"
    A$ = A$ + "[b>CjTk_QSGUo`2nmW:oiFnMQoPMBl>iNO02hFMQ=[3Cihhm2OFadk9^Zh5i"
    A$ = A$ + "W\PkUDnnd0n8Y9BGiNF_jl97?3P_aXZS`gTP?KRo=eMLBhc#hlTbG\5_;GO4"
    A$ = A$ + "o]RK1o1HUOB[[\>Oo6[jO:d3ni`Wo`];QOlQe1em31:Cag\QOI^SS[RW#oHN"
    A$ = A$ + "hZbNFZ^klDm?0ob>dMeg>clR\Pkh9FRWM7l?<:NBf?=a]]1_CE^agkk:^EGL"
    A$ = A$ + "Zj_]SS[R7^<>ZoEj1lCKLNX:_EYcE];cH57G5oakYhhMUmZW[2_jND?kO5E]"
    A$ = A$ + "i`_[:g[^[EEimk67?d?^_h^bIhcSOFLL^_;EobZn[AHImh8Ll:M6]_P?aj8L"
    A$ = A$ + "lMjOIWW[^7ecLLeMV4nm8OYh4hk>ao7g7=kh70OTXR72M[ZOZZbclH?gUS[:"
    A$ = A$ + "kZ6g\ROa]GQO>\J^DLj]jKk\]IjdIlM2EI^:nOVLl#DSm:kO5k^_#EUWAhAo"
    A$ = A$ + "Klgan6ihPgRnB1GLZ?Z_RScO_6UgEa;WgFaE`lCbeOMjLeLaIAMg<oXihEmK"
    A$ = A$ + "<QS7oNeLQccS3hKTSShN7nRZlVe=F_P^^j^PUc3\`mQSfWah#j^_?[^;8F9#"
    A$ = A$ + "_OTLLFfUSgMWY[^[doFihLkmYfWEM_EY6k>\]bDKREa9D_?\m]b^D\N^JlhL"
    A$ = A$ + "lRkBPk<7OEn9?fU_A>N46N]ajB[Z_[>9\ZkKZ:NiZnaih#e?^b^:[hhX]NnN"
    A$ = A$ + "bXJ\nWUSGUg?:7_K=5ZlodO3LL^oYZn4khhlH_AK5U]]Ef##mMf>^RJM2jhQ"
    A$ = A$ + "k`aEnROemMdEaaEe;WI>W`>=Zj9\N8OkLlEm9F]NTC4ejHQk#UZlPjikbak\"
    A$ = A$ + ";LEjbnEo757GI_hcbaEjkMinemZhhhk\ilSJnH:>>^?2[h;Zb^9[W<2[RS[N"
    A$ = A$ + "O`9HK6\;7?_72fUSW3g^UmEa;77Ze;j<LlZbRkbmfe:>>cCAKFnIhMhj9V_P"
    A$ = A$ + "e98;Ef>\SSG=O<ecELl^e5Da]ZhK[\5dIhhkFfG5_:mNeh]Gmk\X6o7Bok>7"
    A$ = A$ + "GeOBEI9hHMm5a2FS\hMgI\:MfgUSSZed[Z>YRgVK_>US[^?THYRS_KIOe_UU"
    A$ = A$ + "ZeWMG>n:m:OGZn>`aANRcgH^6ii9YB3ek62f;?hmgI]lk6k7;ELlZmT56WAF"
    A$ = A$ + "WSo?\7DFgFaaEUU:m[KL[C;k[Rg\Dmm^SHGUYe[_jaS3X^Ooh`T]U=KW[Ei5"
    A$ = A$ + "l>hmig=n=H?EngalgDg[OEgeOLn1f#D5Fnnb<OW72M>7Vlo7jV:?eEF6Hgb_"
    A$ = A$ + "YUmEoVZ<UeK^?gEgURLm:GFRkBeG5_NG>>bCZlaTfZZkOED^U;7N4LLDG[2;"
    A$ = A$ + "WNil2[c8_RWm\hhkDf_37_Z<I:7_B_#H_3f7o<]9>jm7In>Xl>TGfAW_3m9M"
    A$ = A$ + "G_k>ce[gUn^=<<<<<<<<<<<<<^K8\a?`c:=cb^jJnL=\Cj\KJMg#\^aXNjIh"
    A$ = A$ + "GONfYgTjNEmIUoj9diZe_5W_a:N2_6HkXWEbdg?_nkC>K:7=MFY_khgQHo0F"
    A$ = A$ + "GHEWW^ZcXC^NZJ_3Zb3EnLYlnnGMfgNeW7XMih[l5#MUAZb[c`GbjK7bkoUX"
    A$ = A$ + ">0[5GWMiIYK=LjB?FbLaEkeSLidTc6E>^kl[FQTm]FI9NWZl0d5V3P_Af9Al"
    A$ = A$ + "nZjC_JOZD]?gIAUWajEf9[fK6CigImX2ilBTO1O]K]CDU9CihMlahgAnV;SE"
    A$ = A$ + "nb9\?_EaIeI^I:?<haZj9XO\Pe2EM6_iWYB_GejE]37_J_C[bcZm\JnLKRel"
    A$ = A$ + "MWnBG9EaC^n6eC[>G:ZbTYLL5?U;cDl2\g;EY]J?OEEf7#]ggimOEDg7eCLk"
    A$ = A$ + "Q#7hjj#DW]#4NU^Yf_G_Rm]bSRS[:;DkUS:>nAUEaedmi9;G57?kKjVNf7Zj"
    A$ = A$ + "GMgbnYnh;EH31WQ5UN`2loKIiEMNPfQS[jK6nEc8^hm]3;lIiZJo<LFY:oU?"
    A$ = A$ + "SUk>6YMhhLoRLO``gI]37Ge_jEaaEn2?57GMfQZ>[58\AiaZmdhMRS[b;Q0K"
    A$ = A$ + "0\RS3KgY\1`:>ndn?`cEmY6omTaROeLLVORaZYhhEkMN57_C?IYSSc]1En0B"
    A$ = A$ + "4nZ_UG=?Kl>_CLl^iB^S]3GYG\nDaaiWW;;In6:[IO>jEcaib4VGD=g]\4SW"
    A$ = A$ + "6SG^RS[BWS`aEn^FNlEih9;XOSXo]>oSnMcfQMLl8?Z>;Vilc4>>lcUMj6?f"
    A$ = A$ + "MUN2N77FEO;kd?BGJ];7WWC6dgEf34O__JlhIQ??#\L6>NnoG=6KhgGkh5_:"
    A$ = A$ + "NnAhhak1k0YTX_NEomANLGOIjD>>7F>_U]IHgiZL57G5f^bc>oLTJL9ZakFi"
    A$ = A$ + "[iDSg1fmWU>>^Jl7ioO^lPe3l=9`;P]9Z>kKgMK7RjUlhZEf78:7j>_k<GL:"
    A$ = A$ + "DjIGLTe[liLY;>3Y:]Z2KGiYb7O3K[D=fKFDnIOXCG17?J3a??ooc_GeLLAO"
    A$ = A$ + "h0EgK7_2o]o^LLFRhHGOEFn<9n8ihia7R_i_b?g_[`YOgH\igKJiFeha[hhk"
    A$ = A$ + ">F5N\dlHCbY=WN`F\Ze0BmMnYSEl>aak:kDQE=FQ717?g_GfgSX:O?ZXnNdD"
    A$ = A$ + ">^J]POULlZmX1>_fE2boCF?54nW]OQKjhl`gjE[9VjNQAE>WoFfAf[REU_Z`"
    A$ = A$ + "^kjg_[D=V;UMREn83elI^B>nTkbXh_17_Z]IEKV#bmMXbO:OAiA6SjEP9kc:"
    A$ = A$ + "l=Y9k=8dNXCFISlcba_Re__BjVC1Ko<TfLO9Mnh;Ej];7OBm4F?S>>>Zg[fo"
    A$ = A$ + "RX<HBjUk[iIcaG]7ebcE<koLD2VGa:>N<FdX\MWa]`BEiUJM5W>>`EbZi<GE"
    A$ = A$ + "fY6kmSTS[fcGZ`Qh^:\EmC72h\X_S^d;K7dGY?\5[_56?1f3=8Obc9>7fhoc"
    A$ = A$ + "[c9\13jc:Sll?_J>>fgdHmGc]??Bj`YgZa8Q_AU;o`_1kWRmW6>;1hIIKDT]"
    A$ = A$ + "c:6o82KN_OPeN;WN8_6Si?G?5?Ci[T#HbaOfFDX^4i[LMHNNlH_IT7C:kkFN"
    A$ = A$ + "UgaK<WVAVS4i5UOJ28k_[Z2cSRSWeaLJ]cnMSk?M2oVOOEIWb_8YNV:>#o#Z"
    A$ = A$ + "Wcm_T[[jl[ALknZ`ROWC75W];m^CgEW`gCQjP:mB5FEiF5>R=FVbg2M^jN3l"
    A$ = A$ + "8YcDn]:?Sb?nNQ1k==EI2778?YN>77LmedjDElcn;\9eQLj]khBofaAhLGEj"
    A$ = A$ + "mXC;33333333333333333333333333333333333333333333333333333333"
    A$ = A$ + "333333333333333333333333333333333333333333333333333333333333"
    A$ = A$ + "333333333333333333333333333333333333333333333333333333333333"
    A$ = A$ + "333333333333333333333333333333333333333333333333333333333333"
    A$ = A$ + "333333333333333333333333333333333333333333333333333333333333"
    A$ = A$ + "333333333333333333333333333333333333333333333333333333333333"
    A$ = A$ + "333333333333333333333333333333333333333333333333333333333333"
    A$ = A$ + "33333333333333333333333333333333So9nSoh?ngoeOmGBlWoiONh`6o=o"
    A$ = A$ + "kZg7QogomOoolgomOogoo#lgakdUnac[RcZl:W6AJgYgZd8S^bU>mahiPX>\"
    A$ = A$ + "C2N0h0C2;RgX^=;P_X2O4oao_:>1?[jmIYROgU6X]TB_EYAF2mZ:^[d7Sk37"
    A$ = A$ + "?G??9\inmhWo[oj_nO5_ol?ocSJk4_;7>ln\4?;#>Ofa1QnmKof_9eKEJTU#"
    A$ = A$ + "ghgKUnHljhh:NC`?nYOjWn?me]:\Al5QU[c3N07f8<o`?l3oGQm7oaODn\Xo"
    A$ = A$ + "NekcBl\0il9oNAlYNVB_Q>Raf`BT_Dmo3Xd7SG;7_RgXj7V3;N67_k`a[NFe"
    A$ = A$ + "k[deELl:mVK73>>j7V;32Aef82?d3caOOhhChHMLUYLLl]P8>`gi_B>>hP1#"
    A$ = A$ + "J4YGl>lg:H>^BGEi1XcAl2TeWllN[#Nnf6G;7_R;YN>o\XNYR[D5_:>8\G1h"
    A$ = A$ + "NZd_J\3:>^Jlh`V:inJkhhLkf#0GFaak63n4Q]EUae`aI>DVW]J^GHLkkbaS"
    A$ = A$ + "W[hP`V:ak6PSc:Aaa[\[2\=3BSZaS[6cM8ahDDLL>nIT]MI5`gG2Mh^cSNGi"
    A$ = A$ + "hX>J277fn0l[M6[B4o`nh:YbfQEBehOkhiEf><caig5SCYSS7?7]ODUolHfE"
    A$ = A$ + "`Ll[USG=F5egZEQ=Z?Z\?A77?dU`fMAhDl#U]3Ak:FjVSGT6ZaLPhZSScBNN"
    A$ = A$ + "U\>SnRaHQhaS?ALoh?>>^JNL1_EaaEciDmMmESE9d3\FXZg7S]MEj7RRSSh?"
    A$ = A$ + "#`kDm;GIcCeH_#I2h_LLafEi8LL?NlW;7OGkZL6K7Zh1M__BGk\[B`7SncIM"
    A$ = A$ + "De>:KOl\T7WRZm2KG5NnWXON<>65#K8g?nmTS_cL>EmM^ck[deELLehBRhW7"
    A$ = A$ + "k3hJ\TkW>J_DaaGa?mhaOnLLH;35_I7>>cED[U?\cXZodMn>PBGk\MHloES7"
    A$ = A$ + "2SmMEjbbZm[BgH>P=6kPihG;7G9Mf7_RSGI?`\<eVTQ4mUN6>NUM?P4jZZ]9"
    A$ = A$ + "6g#WL6>^a[WSSnlfUSSeY\Z^?o]n:K?OTd?457OeNK4]g>27_Coa_kaLlj#D"
    A$ = A$ + "gW]e#6ieH4lfLHcm3SmW7NFfNPhk]hknH^Dlh=a_G5FHKW^d?gfAUOca?B3E"
    A$ = A$ + "N<Wn1bQWAlk`6oEo^ih_NTGo65`H5DQ5li:KUU]A03fN3ZmbdABo>kSc]McY"
    A$ = A$ + "1hQ\N`]OZVKHELK>n[7HmGZ`Z`2^GekPOObLY#OoI4?k\Yo>jBGIA5FE6Vc3"
    A$ = A$ + "666666666666666_>L4O=2NFNoic[1GgNfo:eo\N<MM0kd=Pli33n:U:oeB5"
    A$ = A$ + "Zle;WYl_c7\D5VZl]B?jZCIO6CEieM3kj[AjF[iLiFUDMNF>:bjcdbiEk=P#"
    A$ = A$ + "#mkAGKmEnQU:O=cZboZeC>G^bQAUGj2OElf]6\gimI`>nJTE[5M8`f]E2RON"
    A$ = A$ + "=K>2bkY#\>jC>;0ChhCFkm^f[[B3dO`^njUE[e_JOXQh<[ChICZC[>KCI9_f"
    A$ = A$ + "bg1Nm:>NeNgP;?DkCJD>cbZccB6C7GCFgaN?Lbj0R_9ceIic5Yb?`DUOoUOi"
    A$ = A$ + "Gn7a_j<PXl3;HmniWg]gIbj\j\IXRC\?ab_Kenj<dO^n3?KEieMM=H?;7Gm\"
    A$ = A$ + "^j8eJdGe7hZaeT;cimgb4D]g\DlYZl;fO1ieNlZme<ib?^_HFoDkaHlK:>n>"
    A$ = A$ + "k_NenDnMHO6Lfj3\7RhmnTjm17DMNFDLlES[9gFXJO[dQ:n5fKDCihLjNeWG"
    A$ = A$ + "TLiGVSGaiDWcD<WB>M^2>>:_^[WIdMZ?Rl0;h\Xckc8F0GMbl2cLlZnVceSi"
    A$ = A$ + "c;f>UaEiMTNZcTcSVS[6352;77AJcciFaKEaK777kY<NOIbQ5ekgANmAihLo"
    A$ = A$ + "8lkUgg#ERJ<fCm54ii^W[_Ra3SnC^RlnSRS[fk^Zi^X4EO<li\[J<f#haide"
    A$ = A$ + "?n4>NF^CLjcbaIn5o^8N[TLKQc`aceGHlAH<W<Z\[ecVS[fk^k`ai`bSa^j<"
    A$ = A$ + "8YT>>>;EWKEnm^[mWO4>N0fFD#ZhhP_Uko2Q=_V5i_oRbFPlI48Gn_R_DIOV"
    A$ = A$ + "GEoh1_2cQQiH8?cBeLnidBMFnZlOMWUSW][2c?NGihAiGfoR4iKnmaHdD_?g"
    A$ = A$ + "o5[;P_PbBf>70id<\W1NNloE26O0g?c[NlhkFncmMPig`?S;oEc1m8ci\b7>"
    A$ = A$ + "Vak>7W[OQoTOjk_b^:XlUihX_9P<gS]I8JoY>SHLJnZihZnak:oj6[#F7ESY"
    A$ = A$ + "QU[TSW][bW677O_Mjk?]Mn:kZ<aVQZno_KLLeh[>;7GaAE[OcEba_Re\nA2n"
    A$ = A$ + "kHhl[c?CEO4ia`V6I1fa[CVZKZee9cOj\IHei4K7>>c;DS=C=oR0[:CcSAGm"
    A$ = A$ + "LFZn>`4O7YZ]9B7EmGegFj\[BeLN^;HeN[8o=YEQ5eiMbIhhIN7B[M]IhD>^"
    A$ = A$ + "JL\IYkk8C;WVbaEnH[ZgGaakJS=I_el^caklI8in:aL>[2Kf?cg9WIn9Ef<l"
    A$ = A$ + "A`aAHZl3cic>?_WEj:CccEK:7_JNlEkO;n_S`Z\?NUo[9Gf<QSo^<^5l==0f"
    A$ = A$ + "o70m?_>1lJhWi_lLob[maAih`FEifC<oJWff:olRJ^CLn=WGkn>2GVZl9<[l"
    A$ = A$ + "e<Xl5fA9G>RnMbnT54Fl<TV8?GUGSbaLn3f6Pe94V9c[o^Q>O62[kAia4OMR"
    A$ = A$ + "jg?3778[WWeG<`f0Caa[b_IOYbI:C[d1nMZ\GGenSRok8\ila:oGC^m<2;g6"
    A$ = A$ + "_SWLG1g>][><Zkk2KeLo>kJRUCccVO[lc:Z`UCgMnnaZbdYnjUZ`YN>o<dG#"
    A$ = A$ + "GN=W7AnKU>MUe[6666666666666666666666666666666666666666666666"
    A$ = A$ + "66666OGXk^CjAMg^\cMVd^g_B[2k^?WCo^bThgike:LOoLT`bjDGmgWhMDeE"
    A$ = A$ + "bgj4hGa_bdLUONJjm[4l72ih^cgIXR_Zkd:4_:o:5WOjl_4Lig>QUUMZk>CI"
    A$ = A$ + "hg67oAD6<aGVEaaDB^o_:1n_157GioLZNNfOK\CKFL>Qg9\\T?KfM]EPPbUM"
    A$ = A$ + ";3odihAi1kG`2IU_Eh<LlX_;UNX^WBDQ5l>Uo=62l1BEgc7\PkR1>mEn?4V["
    A$ = A$ + "5QQO?LoQ\CHI9kS9hg9NVb?eZJGgE6NGhU?J>^Z>_bOSL5Ll>o7IEM1o\8\:"
    A$ = A$ + "On77OCmmXhi<WTmA91DUELN4nGWYQEMOddaak:3W4FD6n9jc8>Z_e7Ucii=Y"
    A$ = A$ + "PJL>kDo<aOZFaail6joUC75gCE>Tm[Q7QSGE^^CH?27W;Gj:3o4k;o<LlES7"
    A$ = A$ + "4agEbaEOW5L2EOnI1n7k\XlU\hiZkBCEi0;g=>n>UQVS[k7_b^D1PoB<GfMV"
    A$ = A$ + "j7F#o`EL5EmXbOR39oKlkSadcne#F`hjHoDhMQScB^<dLL]_9\b?nEiok^Zj"
    A$ = A$ + "7d7<B3NlgEO?^SSWSSZgWWGBGI5GfX2k[TScUQVS_oHERbg[\OLegIamc1on"
    A$ = A$ + "lcRdFaYboMNl=<oM7>>j7?dGL?KDI[Tk`HE#IhIm;ZOSLlWaL>ShTi?ZkL[:"
    A$ = A$ + "KeDegM5gSk[S55_5[edT`nXihEUQ7egFo9caaH^cmCa#a;N4fEA=_AFPMADg"
    A$ = A$ + ";<Zl^b^e7US[^cTZ2k[PSKK7NO6?nIhh8OD5f:KRcU1<?#5^k\MEnf]MHDoZ"
    A$ = A$ + "FOo>>>OG2X#gJOS_7LVj7eJkXFGAX?:9d=5WS;3H>^:=ZFkX9Q]b6<il6G7Q"
    A$ = A$ + "ke1EnaLlIkGU>>n^XR3Y:cWFoXFWSMjS<oKZbT^bPEi7\_0ZRkZ`F9H>>[V?"
    A$ = A$ + "4J[H>njmMHN\8?3>NfN]C[ODOkFaaacEbAihMiYLNYJL6EQ]BbSM^jNh:K?`"
    A$ = A$ + "Mf?4ORLLnnN:3NLfGenE1f^2UeI`g3=aLmcQ=nM\o`bgUCHO<U37h1ZeR9\A"
    A$ = A$ + "6OGLU7;2[Ohmj:3`M55#eM5F0N^iZ`Z^[Xcj2R?<F#>_3PjhEUQOZLlLINgL"
    A$ = A$ + "6_bmM8#VGY#fN]LHAm:o\:NEecEY;bW:mKEklZlTbfcC3KEi3b3QnFM?LU]7"
    A$ = A$ + "hdb`7=GkE1eMUD6?Rd\;mhdDmk[diLl\kckd_9i[ZiKOT`>]<R_gahfDC;3O"
    A$ = A$ + "4ee66666666666666666_WXc?2YfK\75Mnb6\N7lcRgS3Kf7TXdmEjA\^7h<"
    A$ = A$ + "<eM^CW6fYj0bOihQmM=MU?O3nkW75Vj;J>;jF3oZmUElN:OOBU^_BO3NBW?l"
    A$ = A$ + "9kWAV6f9j#gN;9WOF]7DNDn^\_I>>>cHGajOeaaAohlcDk;?\^9H=ggAOGaQ"
    A$ = A$ + "bm1?U_]B7V\WPVVVa_keYilLlli#>j[jZf[:<7?W>PcVUEkM`:>NUnZlo:Zc"
    A$ = A$ + "NOl^lN1C5F\OeFY3:m?N>o\HM:I>Nl<eIehCm<kl\hhimHgE^O\Zf3Pim9Rj"
    A$ = A$ + "g_:>n>W74enAOg`2M#]WaEieX=dT`Rm#eMPkl^caaniCMVS_:O7D>MDkSfG5"
    A$ = A$ + "7_j<e\CHgUSGUGELllN7chHLL<NBeLi_ZcZ<>GaH?N>M?Po=aaESE9__Q_cl"
    A$ = A$ + "Zk<7W[_DLe[`g1U5HG]9ekG=77kEkln8o^`aI1c?bLl[USG]W;?kIEV[kNEL"
    A$ = A$ + "L4FF_EQUUW977c7fLlccaIkM`Le[bg1UC7Uo8nIg?NXc`7AX\[bMH\:`?<n9"
    A$ = A$ + "OF6N6LLUMEfUS_cL>cm;=YNoA?NlM2k[H>Wh<eMgiE_3Ll>kZ0KWGMnDDmoo"
    A$ = A$ + "^HGUkDohMf>lCd_]m\ih[\9nEhkPbQafEaf>l^aaic;^2ijQ[RS3YbO71A]g"
    A$ = A$ + ">hg_ROZFCcZ`b?We1EnZboOK>nmRS_;^3LlEcU8OfeGI7_:k<bj0_72DiSZd"
    A$ = A$ + "dLl_K>>\kCUXh2Mg7Jii0Si7D5f\MZWX3EkQAf7=I>nS1\O42UiG=7WmM#\O"
    A$ = A$ + "[Yjgagfia15j7\SVb78e]NPPk0`nWTll8F5FXOCdQLLUoV16O4:3b_O0<onE"
    A$ = A$ + "i;SN`fbkZihI>C5OZkg[VS;\]NelNELQ`V4Ea7[?C3k4M8\kGUon9[WLjYJC"
    A$ = A$ + "H>nnhIi?IDfJLb_GIWb0MnCX>K\1^SJ>bk6fYj#locaSJOb>9oIK7JHHHHHH"
    A$ = A$ + "HHHHHHHHHHl8AWo3jAi;?jB?eI[[:lEQ1a1kCR>JnmXnAXLHDoV:_bj<[O?;"
    A$ = A$ + "o\dW4fagOLEH7oTCgmPMfOoT5D7b[;ndl;c?>RO4ReAELXJCe]7I0oTOV:n?"
    A$ = A$ + "SOFjKSSGEGl8ihIoTCWnQeTQihH?2>I_OXTLoL7e?2ajHg_e]g<idjIhWUnd"
    A$ = A$ + "ihZmiD4V[LMmEkWJ^^5W;3EO#ijaH=]SekSUhmimkGeNmFa1Qo;Q3KUO4ZJ_"
    A$ = A$ + "56jHlk:A]gZhbQW]OFjKQScW5PlnTnAaa[>[;Z_=ce_ZnVAJUU:>>WO?BH[n"
    A$ = A$ + "n#X3EmS?QSck16caO\LL^<IUO4R7Kk^LL^^3mYajUR3QakTU797W3;bSak0m"
    A$ = A$ + "#U_WbaOFW7`_5>>GOQknG^<IR<iL:X6[2fKNi`2k801W]PZn9W>FU7177iWl"
    A$ = A$ + "ihXS7FaaO6nIYLIlSbFJg9>>;im`OEohEfj2]G`NO]RScBnl7`LLEOcESgEM"
    A$ = A$ + "Weo\hhifGPoM4>NFNDnIY_I>>nNOenZ6XJ?CG]GWkhhAiON_CceW<77WCR9b"
    A$ = A$ + "cTS[6O>oMUMih?SnaEjdW67G=F5LfGhlm4IBohlHEPObA=oZZa]WUZf#?C>^"
    A$ = A$ + "JlCEjnDkZlXlcBicNdWhI<JjL>EmQ?AV>NLEm_ZO?Ek?FO[\Sg[VS[2cMb^:"
    A$ = A$ + "OZnI^cHk#doBgicAe_`D>^b^g\Pi3cekZ_io\ihilYbgELg\[bWjI<j<f>4h"
    A$ = A$ + "\S7_RS?iK5:m5Y5;?K>>KWcc`aAiaSHlhOjh:hhlIAGQS`aEfAC=G>57G=FQ"
    A$ = A$ + ":kH[Vg=jkT3K5_GaOc]c#i47V757OEn3BlKOKfEi8LlMaD>NeJV`2c5ESA?4"
    A$ = A$ + "5GD98ofaMHMBaOci9Ek>ca=7WU:>Nel#ijm9LLfWnLDo84?oHelUO6LLeHTH"
    A$ = A$ + "M8o^ORf>\bo15oOH?Y[fW2=e?i4oKf_lPi_2M>oLH7VLhbi1Dg5oFUonQmY9"
    A$ = A$ + "il;J7bcU>caca;WW`OSe[\b>M7e?;aieLNJUOF2cUmCefQ0\=ZDg]2GmLDVj"
    A$ = A$ + "WLZVoZji<_CU>Zl;3Nm0>ZO4RcCX]R:oT1G>`fdZjg?SOFjCo>ZXbo1YNfEf"
    A$ = A$ + "^R]GedW=mm[b3MnkW^l9h\ZiB[Rgh_c?SokLnY[\QCWZO_;?]b77]BW<<<<<"
    A$ = A$ + "<<<<<<<<<<<<nn`cb?2=9Mjnm\oDIElaY=NNn\;ai]Zh2aGW^Y>gZ6g7\j^4"
    A$ = A$ + "oIV>M2O6X[R?f7i\jL7Q`eU^[RW#n4g[7O:HeNfA]F7?ZdIU4LB\n4MkG:\6"
    A$ = A$ + "=[^Ce21aGGJZf7T\TmmA6gK>>kgJD[UlS:MDLEn\6PeIW?OLI1g?dZmE=cWE"
    A$ = A$ + "kG:`]3PmN57GlMI?BGeMORamRSWgKYEkGR7Ej`RRKQmO1OVmIN[jM[fSSEYM"
    A$ = A$ + "6CS;hS]<^oLL\WdPOI3Q??g]:X67oTdAacDLlhMhmmLFZfcYh\oZ^;0[hhMO"
    A$ = A$ + "CXZmR7cbmWSS_Ocfb0LlERbgX>9MHA=F5EOn1W:7>L>?Ea9Vk:_gmDY=6CO4"
    A$ = A$ + "?lhQDSEAeNi^Goo=bacBUo3NU_32n1dLooCBW>1We<dgJFhaWW?3JEf3Q?_e"
    A$ = A$ + "E2nVd>nnX\l^`3nFihhKjZmJ9g?HenFNWdYB`If:OV0b2KgS\OR3];Eb4K7R"
    A$ = A$ + "f27eg7Uggj6g3>>kgJhaG>I\:hMkj7GU>\`m37Q5WU7>Llc`hlc]9Eld:>>K"
    A$ = A$ + "cWEfE1fl1j2\7Zihg?>^bN7kbaW>NlSHG5U]ZEf27We;`g`I4Se3<fLEJ_[M"
    A$ = A$ + "E2NO^\:on_3LQ_=>NfN7ij=hK91WAQlhVg9MDl<UMEVd>Ca13MPm=A#?DYmA"
    A$ = A$ + "\[BTODWEYg5n`g47Oeigl\S7GU>:NfAihZiBZ6go:>>d]MlKjVCO_ihIA=V3"
    A$ = A$ + "0n\=FQMB75?CaaI9d5N\:H\dLhRaCTU#_DaIFfUSc_[ak97oAT>\Xhh:Oa\b"
    A$ = A$ + "F;HnY[\iGejLV5caoLihC7gbEU>\D=G?EhZNNd_m4o0DWLVm5PWci[7\O4Bi"
    A$ = A$ + "GM^2>nTdQm5>8]klI#8L:o34NO<^ZlLRIo04J7Z6_EUNXlmAAHcni8ca_?0k"
    A$ = A$ + "aSEcMlIT>lcSWYli#Z`EmlXoLVG3TWg#gLX[d3NngH>WlkJlJaAm[>?RdIbc"
    A$ = A$ + "ZlI#E?78hjMn1XMe]YniXWMmYQQQQQQQQQQQQQQQQQQQQA?faOCM50k=GeiS"
    A$ = A$ + "[:<hiLh[R[EQ;WFE_GfO5emKZb_Mb[1`m4>O^_WT>C;[De1EYeW6Vj_Y^:<i"
    A$ = A$ + "LWaQAMVVAmg:A5^LJE]GFbl2><LkaZb]9ie^kE;L6ojBWYUE[b_LnjC2Ml4N"
    A$ = A$ + "oaN5Xk<4SeMDE_aki:dol:A5^\ooZkm#HHM>_oGjlg079_b2loFEY3olZb:E"
    A$ = A$ + "HEYe[R7n\hhEnKZ757GiG9DWU=eNl6l\ZnccW7CV;Smd2c5HOf22CeM5J5g3"
    A$ = A$ + "kmV9iE>^SmDSJo4cgSh8MhWGEFE]g9Sj4nIGMoJ_J<aOCMUY7G?U5`=DLfZk"
    A$ = A$ + "JFDW`2_7YD_[j<1UooWUSG5gil:7g:^HenSGaa3YZ\Jbn3>nKnN]kCRSGi_Y"
    A$ = A$ + "hl;?oXYn:;n\jX>OmZna`_Yd]ELLhG\D_[Z?#>>Dl`9LLeh5DiEeHmSdTgk`"
    A$ = A$ + "k`a[:[VbaimRik>hlWbOCaLlEW]6D7`YUZNVoKEM1dU^j2FbkYE>n`kZJCW5"
    A$ = A$ + "LNZ_2>n>iEHWSlnhM7>NEIURSG]7hoDhhZbRZ_G[j7_cVMALYlERLIlTjR#D"
    A$ = A$ + "ckk\LlEj3hQ7QScjDENE=WFTOcnnPYS77_kdlKP?I>^ZOEN>XMigZkegZcOP"
    A$ = A$ + "JLVI1cGJRmB^J>>VOZ:L7QScL_Zl:hHEfGYbfQMLLFZhh:k:QnWnD6?^ZMm:"
    A$ = A$ + "o=EP9SE9:kinaEc_RWc[RS[B_[PSWU8<ll4SgmXLLEkIEN5j?>[5EieYLl^b"
    A$ = A$ + ":ca[mgD\?enXS7W[SEf9<Z;HM#MO#LF>>Kk1UobZR_^;7_;_RnE`m:T:LZlH"
    A$ = A$ + "57_[\jKL>WChZXn<kG?aH^ahhD8K?0lNC4dNReQZj]SbaEa9;H\J7QS?ADf#"
    A$ = A$ + "BEFYdg:>NGIUihJYbnQ1fIlhC6gHEi^bWZl<hh8NfUS[dGUXjcF=obMhhMUE"
    A$ = A$ + "OSLLEIQbOCEUWIOdP2X]QJ<fZeb6O78;ESUl<LLejoX6?\R7Vc3E[andlZJ\"
    A$ = A$ + "Q:KJ>USgEFYRgEU[OJLLTgDUUW=?cUU8NI^F4F57OEo=ZlB77O7K8OF>NGNM"
    A$ = A$ + "bgCP?UA5W:>ndeeE9OSLLllc^_EZhh\NPnCEYOGMQBWkhhC]I^:\IMEamDOS"
    A$ = A$ + "X:_ZjO5Bn^cH7>NGIU:]b?kCSSWm5lX\\cOCMVd:jg4fj=RCfgHQ_77?7kGR"
    A$ = A$ + "lLG1GXJ]:Di5`[#JWOGho\Da7k?\`n1P776dEHSKnICb[hihI:M2e;An8W>Z"
    A$ = A$ + "hLBIEfW`TSW?ae02PWWHl<dNVOnIA^N8gfAmLnI:mR[;jdI>nbL5>nD?_J>f"
    A$ = A$ + "Xmb:m_;_ZNNVO3mBU>ZgMEIU:]b?kCSScfm;Nf:o=eEUF8N[\1Y:mkd[Mn]^"
    A$ = A$ + "dIJH1Fio_F5g#7ShQoNAf^]Ee;EagZb3ff0GMm]QQQQQQQQQQQQQQQQQQQaM"
    A$ = A$ + "5HObV?[a\_TYjl\Yl]BEQ]:]ici<l1>[R_Zhl::?fEWboFW_k2UGCl=IMQAi"
    A$ = A$ + "[OVh[]jZokZKkn]>o4fM0Mk]f\^f9Io>CgnW=cCFiKXbUQCBg[0WAWH>CUDM"
    A$ = A$ + "^eDiYMlg?CmeFk`1^2o4f[6Zc;2;HmeF9Xn_[N1[Yf:N0:WFUfHo#ME[ilId"
    A$ = A$ + "Y\Nd5?X<X;<8^Vj3`VZkE[KIGLSeolXn9\G=7G]7Bil<dEFhWQlLgi`4kMRP"
    A$ = A$ + "W<ag#Qm02;icPdE\GaZj[J7MZK?>VmO1Ho^T3CU_9CaMDgAd:OSAU_f:NoLN"
    A$ = A$ + "^k\PRcD]jn=MeI4i:[G^J>>GoQl2;lcZfGZio6QYRSXdWZkDIeNBj\h:d9Ei"
    A$ = A$ + "ZJ_]=agT=i<dQWaaAechb:EJ`aMX?O:LLd?SbGK`b4>>joBEVYR_ZjJEHAI8"
    A$ = A$ + "O^oSa<]boME=Na[#WjhhH?jbmkFiKbZ>?FZWaY9jO_J_6Ga1^Bo4fMPS[6?>"
    A$ = A$ + "VK5__;II277co?7gG177eI:k5<I<\Ql<ihXl<?Nh\`Sg5nV<U?3R7[22[BoQ"
    A$ = A$ + "m?hm3L77Wo6kIlCHg1>NP>O7LN?FZnM^\Am=HnMANW5lLn\9XhCihGe^=Kg\"
    A$ = A$ + ":Xl7_WAWjhhIAegBD6YnNWZL?;AN<On6Vh[]hiMZh^lOce[iWo>`akZCbLXE"
    A$ = A$ + "2:[cRZm1>S<\Ti8Lo>EB^M8WWDS1FQELlYjdD>NXG:O51?6_ELLHWTliIHR_"
    A$ = A$ + "fZ[?>H?4FOo4hh1Zj7H577U;ZaPXhhMO[7mIRccEgg#hd5jidaZ\Koh[dYYf"
    A$ = A$ + "EAaMEfSZj<:cSE9R[\ODNU_fR[giho:mCHgUaSSc09nN6[_:O7E8Zn4i`5e7"
    A$ = A$ + "ZjT:>^Jn?Mm_VCgMihZbS[#WDLLnK:lkSiF`?CaaEci4_O^^DI3nhIIK7Zl_"
    A$ = A$ + "FEYIelBNg\[BX[Ao0:mU5VWY\W[B`LTDa7[?XOcZd^b^:X?c^cKfdaZ\[>ea"
    A$ = A$ + "aalgj6;3TMhh:mDUWbf^MJo1Wa?QM7ihZj_ELl^hC9MagA\QA5^ZaSOUf>4]"
    A$ = A$ + "5WjKb>37G=^OF?Vn=_?9>NX_ZeAK:?S[kRnDgImNDndFEJWU>>>O^OEXCo?R"
    A$ = A$ + ">Q_Qdmk\4jZbFhk`aEnHk:k^G]W3`gn>[O2;;MkCVW1PMfjTMj;]JN9\XlIW"
    A$ = A$ + "\PadLD>nEdVo8jdAhhPgaQK7>>ggTBHoVBegKDmol^ba34j#5?7k7TYLLFjF"
    A$ = A$ + "37EI9ThiIOWCW<IL;G1?OZ>EIgULlXb3CfC#MLl^aiWmeFMSIZRScf_WCOU^"
    A$ = A$ + "Wc3ii0lZ#N?Ta[QOV3]JMQIoD5RSX]RjialKSnObc5DigNhh=S[VS7h<jDTg"
    A$ = A$ + "HOlE6H>biO3c7Um=I:o_E>mc?3SmMBM9hK:O7FN<fImH7o46GNL7hhXNU;;h"
    A$ = A$ + "fm1jVcFEH#n[jiI^J6AiGfgiX2cSPSO5j4g6D5?ZlPJ^blc0OFm\>MG]_33l"
    A$ = A$ + "XlCHZjjk0RbPLk#FgHK`YR3><PCDmlLo?EY[jmGY7W5WEWf5AlYl1FkjG\#l"
    A$ = A$ + "TemXN=GN_:?LTlFWO2[:]=<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
    A$ = A$ + "<<<<<<<<<<<<<0PoBXk>_jETNEnLfZO?O_Q`?Obm#eddW3?l=G[^W\Z`>g]E"
    A$ = A$ + "EQ]CWQn^KnoC1C_c[NfYgTk>;U?`AU6[li9ClY[EQ_c7e`gCFEHbMK5bcEQ5"
    A$ = A$ + "o^BGZlASLJlXhH_B\cMNec>mVLgIYhh:Om1lU2[R?nLoF9Mg5DZ`^Z<LR?I3"
    A$ = A$ + "]O[2;b3knKIiC\oLUo#R[KEn<]WAj=i^cJbM9B8`OW`a7jO7nCQ<7ObM1Ub7"
    A$ = A$ + "o`nFMl\>O7#emR6WnQNFe?1l3<:YcG>aaaEEGOWih<G0U?GAoikTNZnXce5`"
    A$ = A$ + "OT`QAEG2n;GOfi3#Dl>>Mfa?FeaMVLgFEU?P4aCEOeMnc_\PbT7U_lh>`aAO"
    A$ = A$ + "JZklZLnVWOU2Zab_CjU3;R?V3DeG7W6MLllm#5W7cBeM15;hk#`GNcnaZcba"
    A$ = A$ + "EiIl>8?>e_CFaaoTj;OWklZ^jOUXV3c>Y7O7NDMgI]jn\YRS[^7ZjJ?b_OeM"
    A$ = A$ + "15Bc\_Rl8LlZlQjiX<1aSjkUO[Ll0C_c[bSE1mSGI;:`9IoOo>Ygdk>[ELl8"
    A$ = A$ + "=ES[Q3cZb5>N1_Yb^:X=NUO\ZSScaCn^ISeSLo6PK?US[J7o9ba1WE9[\MHW"
    A$ = A$ + "ol[[o[9Y7GfcLLh;9GeO;Zgj\5YR3>m^P:ng>NnEIk`:>^JliZkM557WULJL"
    A$ = A$ + "WhWG5DOg?TMJCT5<FkZb[^dCiKh?bLCcQS[gikQ:dG_Z=6b;\NV73GlM^ZaR"
    A$ = A$ + "]J>LC7[26W?WoHYZ\ZB#Lcndc?1X^WTZ^c[fUSG=Nl9YWZ>ZZODUm3Ee_EgY"
    A$ = A$ + "2I0mLWk2ZPKSl3l=aLKGNn\ChhEf0M27_JLE\l>hSI?;Df>Xj>_:ccajRcg]"
    A$ = A$ + "YIPbelHEVVNEf7;;h>MP3;W6XN[J\WIkZDaiD2Vg;o<`ic2\GdIihZaZ`]YP"
    A$ = A$ + "odW3c4>NggMoDhhMgiEZln^S7OJj5QMUDIWQZjaMVOe>g5DI1S;YjK9Em?NF"
    A$ = A$ + ">>KGeMihgEniSPS[FcG\VNZi>R`_2kVNLhj^k\Z6G?Z_[hhLhj:G`gFFMWHQ"
    A$ = A$ + "n#igWG7EVCZFCGEk\:>N^?1dg37V_E>n>giEGam#gddKWk>[:KD72JONF>>j"
    A$ = A$ + "cGeoLWmJ21SYI7>NU>Faac]oEmKl=ca3<m>_jZ^[5WTN\d]O;jh_PK^jNOU7"
    A$ = A$ + "gb>g5D:kG29Kc_:>nTm;En>[BaOc?C=ol_M>NPln^SGCm7QmTFUN8]#meZk>"
    A$ = A$ + ";nil_SmbDnnMB5>T^Eg5D`>#Zg;WObci68?WcLlW_S\Z^CYhigT]Q3NO<g6E"
    A$ = A$ + "lEE>m=aa1OJbMNec<mZ\YEec[V3LFokVW<W?gi^P:\WBem1Een><[;X=BU^Q"
    A$ = A$ + "h1j07F^MU:nZ:oN6l[k6G?S7]]BkB?fNT[^k\Z\SIGLF5^Z`fmLlKC;oDiSY"
    A$ = A$ + "j67fh_c?Sok^bY7Im[QQQQQQQQQQQQQaW>Dn\S7Aj<9=HOE2F7#>LEn;ULH?"
    A$ = A$ + "R?EYCOEj]:>idMBLgi3DZRG>o^CN5aE^LV3GElmXh7?BXf_4?RdQUEjAW>E]"
    A$ = A$ + "fRibo^efLEnLRoMQcC8]idE5olJYfi3Dbn6Y^lk4o1CGhh`f5^71ohIbaaNG"
    A$ = A$ + "kZGk7FbYA`KF]GFbL[^mQ5\;m:>>2oTbT\0KPciYZmTUZ\D]O1ZFCO\fTEn7"
    A$ = A$ + "8N?[d5V9]kkl7AMiYg=>nE^7EZhhieICeg7GWW?_6lnm;ooajlYfoRZlZ:O>"
    A$ = A$ + "ao^`kmm#`J]GU?[hhEkYT#`N;CaibkeV:m5_o_l;oR\m7Gg4?;2KUo6;_O>O"
    A$ = A$ + "FLd?A>^ZO=XGC>G4ZmQEGLbm9a_;_?ZDjA8ZljIihAJcnVXEjBFOciAEjb_;"
    A$ = A$ + "fg;Ejhkhn0H7>>fO\[`STS[fciLMAeiI^:>ilJnMaLbFY78\<WiXLlLH#JE]"
    A$ = A$ + "W8ii?Di?HVbaS`[jc7a3OfYnThhC?S<?C>NlMEEMaIhhCm_;:Q?cU7USWeO4"
    A$ = A$ + "WELLeiE=;EkeNdO`:ohD8AilkdH`_Rnak\]TZM>;7USca57^ZnQ>37GegLUo"
    A$ = A$ + "5TiA7US?agYdeW[:nEYKP9LlLnk>cW?;77Hen0EE_bbAihlgUI^1VSUZ_]YL"
    A$ = A$ + "LnmH>>l_;CTSbaESgWo6QRS3K;Y2Wjk0\PfdClgCgE>mIhhC7[bS\OLeL<in"
    A$ = A$ + "M?37O7okBFZh4WQS_RC2^;WWZl7<WQSS_ASc[U7?noMj`bE`aAOF:N_Z?_S`"
    A$ = A$ + "aSaQbSiGa]ZlKbWQS_J<8`68\N<]oQS<WCP?E>NNMokf?o?baZ<A`I;KJLfi"
    A$ = A$ + "S<D2l_;Ll[Ngc`aif=<O^K]Sb2VWlE`aagXodG3XGehaW>6hZj^[RS[J_QaW"
    A$ = A$ + "bbIhhZij^:?E9G57oMl\3e=nSZk:7n<MEQ>>>4ffL8Mibn8>D[WWZoC5o0Oo"
    A$ = A$ + "QO6caInGWoMQCC5Ok<LlLlEe^BU?ESW6f?QOoYfZ9;ElR?9>nA#UPm<bZm[2"
    A$ = A$ + ">c^lkRnFb2J7^B#mI77_J=8ESK#5^7=7OR]F#JDI_c9_OFnThhGigWFEVFI_"
    A$ = A$ + "Z\o5AeW5h?lcGaaaHOH>NEIPjiZlQJn_7USWK75_gTi0d]n0ZiR7BV3<QSo^"
    A$ = A$ + "=^5hg=Dng3eMUbIJ;ei7D`HK`H4ieT80lM[8LIOVMfWX0kGWS7EJ2T7G5[WM"
    A$ = A$ + "ng5T^i`5fPIUO<1k?\^d8Gf7?GiWG`jGZ:_RoFU6QnU?cnib`^goAa;NVXKN"
    A$ = A$ + "TGINY:=0?3mOaoNl\Xn1lKUM\D?WO6S8<Zkd[Zb0ecEi3fO[X:;h`XBS8n2m"
    A$ = A$ + "SSO><kh?HRW7UUZjPE_oSRGl<#Womh:_W>k\iH>LHoA0TeQZg];^WTVMjIWo"
    A$ = A$ + "MIR^LVdPOfdlJGI5n=DnNTdi:i5666666666666666666666666666666666"
    A$ = A$ + "6666666666666Ilo5D1C%%h1"
    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

    temp& = _NewImage(_Width(v&) * ss, _Height(v&) * ss)
    _Dest temp&
    _PutImage (0, 0)-(_Width, _Height), v&
    _Display
    _Dest 0
    BASIMAGE1& = _CopyImage(temp&): _FreeImage v&
    _FreeImage temp&

End Function

Sub SaveAsBMP (filename As String)

    'This SUB adapted from SAVEIMAGE SUB from the QB64 wiki

    image& = _NewImage(_Width - (200 * ss), _Height, 32)
    _PutImage (0, 0), _Display, image&

    bytesperpixel& = _PixelSize(image&)
    'IF bytesperpixel& = 0 THEN PRINT "Text modes unsupported!": END
    If bytesperpixel& = 1 Then bpp& = 8 Else bpp& = 24
    x& = _Width(image&)
    y& = _Height(image&)
    b$ = "BM????QB64????" + MKL$(40) + MKL$(x&) + MKL$(y&) + MKI$(1) + MKI$(bpp&) + MKL$(0) + "????" + String$(16, 0) 'partial BMP header info(???? to be filled later)
    If bytesperpixel& = 1 Then
        For c& = 0 To 255 ' read BGR color settings from JPG image + 1 byte spacer(CHR$(0))
            cv& = _PaletteColor(c&, image&) ' color attribute to read.
            b$ = b$ + Chr$(_Blue32(cv&)) + Chr$(_Green32(cv&)) + Chr$(_Red32(cv&)) + Chr$(0) 'spacer byte
        Next
    End If
    Mid$(b$, 11, 4) = MKL$(Len(b$)) ' image pixel data offset(BMP header)
    lastsource& = _Source
    _Source image&
    If ((x& * 3) Mod 4) Then padder$ = String$(4 - ((x& * 3) Mod 4), 0)
    For py& = y& - 1 To 0 Step -1 ' read JPG image pixel color data
        r$ = ""
        For px& = 0 To x& - 1
            c& = Point(px&, py&) 'POINT 32 bit values are large LONG values
            If bytesperpixel& = 1 Then r$ = r$ + Chr$(c&) Else r$ = r$ + Left$(MKL$(c&), 3)
        Next px&
        d$ = d$ + r$ + padder$
    Next py&
    _Source lastsource&
    Mid$(b$, 35, 4) = MKL$(Len(d$)) ' image size(BMP header)
    b$ = b$ + d$ ' total file data bytes to create file
    Mid$(b$, 3, 4) = MKL$(Len(b$)) ' size of data file(BMP header)
    If LCase$(Right$(filename$, 4)) <> ".bmp" Then ext$ = ".bmp"
    f& = FreeFile
    Open filename$ + ext$ For Output As #f&: Close #f& ' erases an existing file
    Open filename$ + ext$ For Binary As #f&
    Put #f&, , b$
    Close #f&

    _FreeImage image&

End Sub

Sub Smooth
    _Title "Antialiasing..."
    _Display
    Line (_Width - (200 * ss), 0)-(_Width - (200 * ss), _Height), _RGB(255, 255, 255), B
    For x = 0 To _Width - (201 * ss)
        For y = 0 To _Height - 1
            p1~& = Point(x, y)
            p2~& = Point(x + 1, y)
            p3~& = Point(x, y + 1)
            p4~& = Point(x + 1, y + 1)
            p5~& = Point(x - 1, y)
            p6~& = Point(x, y - 1)
            p7~& = Point(x - 1, y - 1)
            p8~& = Point(x - 1, y + 1)
            p9~& = Point(x + 1, y - 1)
            r = _Red32(p1~&) + _Red32(p2~&) + _Red32(p3~&) + _Red32(p4~&) + _Red32(p5~&) + _Red32(p6~&) + _Red32(p7~&) + _Red32(p8~&) + _Red32(p9~&)
            g = _Green32(p1~&) + _Green32(p2~&) + _Green32(p3~&) + _Green32(p4~&) + _Green32(p5~&) + _Green32(p6~&) + _Green32(p7~&) + _Green32(p8~&) + _Green32(p9~&)
            b = _Blue32(p1~&) + _Blue32(p2~&) + _Blue32(p3~&) + _Blue32(p4~&) + _Blue32(p5~&) + _Blue32(p6~&) + _Blue32(p7~&) + _Blue32(p8~&) + _Blue32(p9~&)
            PSet (x, y), _RGB(r / 9, g / 9, b / 9)
        Next
    Next
End Sub

Sub DrawMenu
    Line (_Width - (200 * ss), 0)-(_Width, _Height), _RGB(96, 96, 96), BF
    Line (_Width - (200 * ss), 0)-(_Width - (195 * ss), _Height), _RGB(164, 164, 164), BF
    _PutImage (_Width - (190 * ss), (10 * ss)), menu&

    Text _Width - (64 * ss), (69 * ss), (28 * ss), _RGB(0, 0, 0), Str$(quads)
    Text _Width - (66 * ss), (71 * ss), (28 * ss), _RGB(255, 255, 0), Str$(quads)

    Text _Width - (55 * ss), (319 * ss), (22 * ss), _RGB(0, 0, 0), Str$(brushsize)
    Text _Width - (57 * ss), (317 * ss), (22 * ss), _RGB(255, 255, 0), Str$(brushsize)

    Line (_Width - (160 * ss), (180 * ss))-(_Width - (40 * ss), (300 * ss)), _RGB(164, 164, 164), BF
    Line (_Width - (160 * ss), (180 * ss))-(_Width - (40 * ss), (300 * ss)), _RGB(255, 255, 255), B
    Circle (_Width - (100 * ss), (240 * ss)), brushsize * ss, _RGB(0, 0, 0)
    If brushsize > 1 Then Paint (_Width - (100 * ss), (240 * ss)), _RGB(0, 0, 0)

    Line (_Width - (35 * ss), (380 * ss))-(_Width - (10 * ss), (397 * ss)), blk&, BF
    Line (_Width - (35 * ss), (405 * ss))-(_Width - (10 * ss), (421 * ss)), fill&, BF

    If randfill = 1 Then ran$ = "ON" Else ran$ = "OFF"
    Text _Width - (36 * ss), (431 * ss), (22 * ss), _RGB(0, 0, 0), ran$
    Text _Width - (38 * ss), (429 * ss), (22 * ss), _RGB(255, 255, 0), ran$

    If eraser = 1 Then er$ = "ON" Else er$ = "OFF"
    Text _Width - (76 * ss), (456 * ss), (22 * ss), _RGB(0, 0, 0), er$
    Text _Width - (78 * ss), (454 * ss), (22 * ss), _RGB(255, 255, 0), er$

End Sub


Function IBOX$ (txt$, limitnum, fg&, bg&, delay)

    'NOW USES text SUB to display text

    'This function either gets user input or shows info.

    'If limitnum is 0, it just shows info (message box)

    'text$: Your text to show
    'limitnum: how many letters of input to get
    'fg&: The Text color
    'bg&: Background color of box
    'delay: optional delay period for message box only
    '      (and If set at -1 then wait for a keypress)


    textsize = 22 * ss

    '=== Save whole screen
    Dim scr1 As _MEM, scr2 As _MEM
    scr1 = _MemImage(0): scr2 = _MemNew(scr1.SIZE)
    _MemCopy scr1, scr1.OFFSET, scr1.SIZE To scr2, scr2.OFFSET

    '=== find center x/y of screen
    y = Int(_Height / 2)
    x = Int((_Width - (200 * ss)) / 2)

    tl = (Len(txt$) + limitnum) 'total length of letter spacing used

    x1 = x - (Int(tl / 2) * (textsize / 2)) - textsize: y1 = y - textsize
    x2 = x + (Int(tl / 2) * (textsize / 2)) + textsize:: y2 = y + textsize

    Line (x1, y1)-(x2, y2), bg&, BF
    Line (x1, y1)-(x2, y2), fg&, B

    Text x1 + textsize, y1 + (textsize / 2), textsize, fg&, txt$
    _Display

    If limitnum = 0 Then
        If delay = -1 Then
            a$ = Input$(1)
        Else
            _Delay delay
        End If
        IBOX$ = ""
    Else

        entry$ = ""

        Do
            a$ = Input$(1)

            '=== Return exits with data
            If a$ = Chr$(13) Then IBOX$ = entry$: Exit Do
            '=== Handle the backspace
            If a$ = Chr$(27) Then IBOX$ = "": Exit Do
            '=== ESC cancels
            If a$ = Chr$(8) Then 'Backspace goes back a space
                If Len(entry$) > 0 Then
                    entry$ = Mid$(entry$, 1, Len(entry$) - 1)
                End If
            Else
                'add letter entered, if not over limitnum
                If Len(entry$) < limitnum Then
                    entry$ = entry$ + a$
                End If
            End If

            Line (x1, y1)-(x2, y2), bg&, BF
            Line (x1, y1)-(x2, y2), fg&, B

            'Text x1 + textsize, y1 + (textsize / 2), textsize, fg&, txt$ + Space$(limitnum)
            Text x1 + textsize, y1 + (textsize / 2), textsize, fg&, txt$ + entry$
            _Display
            _Limit 30

        Loop

    End If

    '=== Restore the whole screen
    _MemCopy scr2, scr2.OFFSET, scr2.SIZE To scr1, scr1.OFFSET
    _MemFree scr1: _MemFree scr2

End Function


Sub fc (cx As Integer, cy As Integer, radius As Integer, clr~&, grad)
    If radius < 1 Then Exit Sub ' safety bail
    If grad = 1 Then
        red = _Red32(clr~&)
        grn = _Green32(clr~&)
        blu = _Blue32(clr~&)
        alpha = _Alpha32(clr~&)
    End If
    r2 = radius * radius
    For y = -radius To radius
        x = Abs(Sqr(r2 - y * y))
        ' If doing gradient
        If grad = 1 Then
            For i = -x To x
                dis = Sqr(i * i + y * y) / radius
                red2 = red * (1 - dis) + (red / 2) * dis
                grn2 = grn * (1 - dis) + (grn / 2) * dis
                blu2 = blu * (1 - dis) + (blu / 2) * dis
                clr2~& = _RGBA(red2, grn2, blu2, alpha)
                Line (cx + i, cy + y)-(cx + i, cy + y), clr2~&, BF
            Next
        Else
            Line (cx - x, cy + y)-(cx + x, cy + y), clr~&, BF
        End If
    Next
End Sub



RE: QuadDraw revisited - drawing program work in progress - Dav - 10-09-2024

Latest version adds 12 image filters to tweak your drawings.  You can access them using the Function keys, F1 to F12.  Fixed a few things, and tweaked the input boxes again - gave them a blinking cursor.  Made a new input function called NBOX that only allows number entry - this is for some of the filters that need user input for values.

List off the 12 very simple filters added:

F1 = Brighter filter (brightens by 10%)
F2 = Darker filter (darkens by 10%)
F3 = Greyscale filter
F4 = SepiaTone filter
F5 = Negative filter
F6 = Contrast filter (user specified)
F7 = Saturate filter (user specified)
F8 = Pixelate filter (use specified)
F9 = Vintage filter
F10 = Red color tint (user specified)
F11 = Green color tint (user specified)
F12 = Blue color tint (user specified)


Plan to redo the menu next time, maybe add a help/info screen.

- Dav

Code: (Select All)
'============
'QuadDraw.bas v1.9c
'============
'An odd little drawing program.
'Draws/paints in several points on the screen at same time.
'Coded by Dav for QB64-PE OCT/2024

'NEW FOR v1.9c:
'              - Fixed: Update undo screen before loading a BMP.
'              - Fixed: Update undo screen before applying any filter
'              - Fixed: Update undo screen before clearing screen
'              - Added: Shows PL in color box when Plasma colors turned On.
'              - Added: Blinking cursor now shown on Load/Save BMP boxes.
'              - Added: Total of 12 image filters, using F1 to F12 keys.
'                      (list of filter keys are below in how to use)

'CREDITS: SPAINT SUB was made by Petr.  Thanks Petr!
'        text SUB was made by bplus.  thanks bplus!
'        (bplus helped me out how to draw lines without gaps too)
'        Thanks to James Jarvis for draw color and eraser idea/code!
'        And to PhilOfPerth and euklides for code suggestions.

'----------
'HOW TO USE:
'----------

'Left click on mouse and hold to draw on the screen.

'Press Up/Down arrows to set how many draw points to use, default is 4.

'Use the +/- keys to change brush size (1 to 50 allowed)

'Right click to fill/paint the areas with color.
'Default fill color is picked randomly, but you can select one.

'Press D to select a new draw color for brush.

'Press F to select a fill color (doing so turns random fill color off)

'Press P to toggle use Plasma colors On/Off.

'Press R to toggle random fill color on/off (default is a random color)

'Press E to toggle Erase on/off.  Hold it while drawing for dotted lines.

'Press A to smooth the screen (blur).

'Press S to save current image as QUADDRAW.BMP in current dir.

'Press L to Load a previously saved image on the screen.

'Press U to undo last change made to image.

'Space = clears screen and starts over.

'ESC = Ends program

'-------- LIST OF FILTERS -----

'F1 = Brighter filter (brightens by 10%)
'F2 = Darker filter (darkens by 10%)
'F3 = Greyscale filter
'F4 = SepiaTone filter
'F5 = Negative filter
'F6 = Contrast filter
'F7 = Saturate filter
'F8 = Pixelate filter
'F9 = Vintage filter
'F10 = Red color tint
'F11 = Green color tint
'F12 = Blue color tint

'(NOTE: The smooth filter is still the A key as before)

'===================================================================
'NOTE: This program was originally sized to 1000x600.  This was too
'      small on higher resolution desktops so I added screen scaling
'      factor (ss) and applied that to all the drawing things so it
'      will autoscale to users desktop height.  That is why you see
'      '* ss' all over the place added to numbers.
'===================================================================

Dim Shared quads, brushsize, randfill, eraser, menu&, blk&, fill&, ss, plasma


ss = _DesktopHeight / 600 * .85 '<<<<< scale to 85% of users desktop
'                                    change this to suit your needs

If ss > 2.25 Then ss = 2.25 'limit ss factor for performace reasons


Screen _NewImage(1000 * ss, 600 * ss, 32)

menu& = BASIMAGE1&

cx = (_Width - (200 * ss)) / 2
cy = _Height / 2

wht& = _RGB(255, 255, 255) 'used often, so variable it
blk& = _RGB(0, 0, 0)
fill& = _RGB(Rnd * 255, Rnd * 255, Rnd * 255)
brushsize = 3 'size of drawing circle (brush)
quads = 4 'start with 4 drawing sections
randfill = 1 'default is use random fill color turned on
plasma = 0

ReDim Shared pointa(quads), pointx(quads), pointy(quads), lastmx(quads), lastmy(quads)

Cls , wht& 'start with white screen

_Delay .25

undo& = _CopyImage(_Display)

'====
main:
'====

_Title "QuadDraw - Points:" + Str$(quads) + "  BrushSize:" + Str$(brushsize)

DrawMenu

Do

    t = Timer 'for plasma colors

    While _MouseInput: Wend

    mx = _MouseX: my = _MouseY

    If mx <= (_Width - (200 * ss) - brushsize / 2) Then

        If _MouseButton(1) Then

            If stilldown = 0 Then
                _FreeImage undo&
                undo& = _CopyImage(_Display)
            End If

            If stilldown = 1 Then
                dx = mx - cx: dy = my - cy
                a = _Atan2(dy, dx)
                dis = Sqr(dx * dx + dy * dy)
                For i = 1 To quads
                    pointa(i) = (360 / quads) * i * (3.14159 / 180)
                    pointx(i) = cx + dis * Cos(pointa(i) + a)
                    pointy(i) = cy + dis * Sin(pointa(i) + a)
                    stepx = lastmx(i) - pointx(i)
                    stepy = lastmy(i) - pointy(i)
                    length = Int((stepx ^ 2 + stepy ^ 2) ^ .5)
                    dx2 = stepx / length
                    dy2 = stepy / length
                    For i2 = 1 To length
                        newx = pointx(i) + dx2 * i2
                        newy = pointy(i) + dy2 * i2
                        If plasma = 1 Then
                            r = Int(128 + 127 * Sin(pointx(i) / 25 + t) + 127 * Cos(pointy(i) / 25 + t))
                            g = Int(128 + 127 * Sin(pointx(i) / 25 + t * 1.5) + 127 * Cos(pointy(i) / 25 + t * 1.5))
                            b = Int(128 + 127 * Sin(pointx(i) / 25 + t * 2) + 127 * Cos(pointy(i) / 25 + t * 2))
                            fc newx, newy, brushsize * ss, _RGB(r, g, b), 0
                        Else
                            fc newx, newy, brushsize * ss, blk&, 0
                        End If
                    Next
                    lastmx(i) = pointx(i)
                    lastmy(i) = pointy(i)
                Next

            Else
                dx = mx - cx
                dy = my - cy
                a = _Atan2(dy, dx)
                dis = Sqr(dx * dx + dy * dy)
                For i = 1 To quads
                    pointa(i) = (360 / quads) * i * (3.14159 / 180)
                    pointx(i) = cx + dis * Cos(pointa(i) + a)
                    pointy(i) = cy + dis * Sin(pointa(i) + a)
                    lastmx(i) = pointx(i)
                    lastmy(i) = pointy(i)
                    If plasma = 1 Then
                        r = Int(128 + 127 * Sin(pointx(i) / 25 + t) + 127 * Cos(pointy(i) / 25 + t))
                        g = Int(128 + 127 * Sin(pointx(i) / 25 + t * 1.5) + 127 * Cos(pointy(i) / 25 + t * 1.5))
                        b = Int(128 + 127 * Sin(pointx(i) / 25 + t * 2) + 127 * Cos(pointy(i) / 25 + t * 2))
                        fc pointx(i), pointy(i), brushsize * ss, _RGB(r, g, b), 0
                    Else
                        fc pointx(i), pointy(i), brushsize * ss, blk&, 0
                    End If
                Next
                stilldown = 1
            End If
            stilldown = 1
            DrawMenu
            _Display
        Else
            stilldown = 0
        End If

        'if right click, fill sections with random color
        If _MouseButton(2) Then

            _FreeImage undo&
            undo& = _CopyImage(_Display)

            _Display

            dx = mx - cx
            dy = my - cy
            a = _Atan2(dy, dx)
            dis = Sqr(dx * dx + dy * dy)
            For i = 1 To quads
                pointa(i) = (360 / quads) * i * (3.14159 / 180)
                pointx(i) = cx + dis * Cos(pointa(i) + a)
                pointy(i) = cy + dis * Sin(pointa(i) + a)
                lastmx(i) = pointx(i)
                lastmy(i) = pointy(i)
                SPAINT pointx(i), pointy(i), fill&
            Next

            'Get next random fill color
            If randfill = 1 Then
                r = Rnd * 255: g = Rnd * 255: b = Rnd * 255
                fill& = _RGB(r, g, b)
            End If

            DrawMenu

            _AutoDisplay

            While _MouseButton(2) <> 0: n = _MouseInput: Wend
        End If

    End If

    'get keyboard input
    key$ = UCase$(InKey$)
    If key$ <> "" Then
        Select Case key$
            Case Chr$(32) 'SPACE clears screen again
                _FreeImage undo&: undo& = _CopyImage(_Display)
                Cls , wht&: DrawMenu
            Case Chr$(0) + Chr$(59) 'F1
                _FreeImage undo&: undo& = _CopyImage(_Display): Brighter
            Case Chr$(0) + Chr$(60): 'F2
                _FreeImage undo&: undo& = _CopyImage(_Display): Darker
            Case Chr$(0) + Chr$(61): 'F3
                _FreeImage undo&: undo& = _CopyImage(_Display): Greyscale
            Case Chr$(0) + Chr$(62): 'F4
                _FreeImage undo&: undo& = _CopyImage(_Display): SepiaTone
            Case Chr$(0) + Chr$(63): 'F5
                _FreeImage undo&: undo& = _CopyImage(_Display): Negative
            Case Chr$(0) + Chr$(64): 'F6
                p$ = NBOX$("    -= Contrast =-", "Percentage (0 to 300): ", 3, _RGB(255, 255, 255), _RGB(96, 96, 96))
                If p$ <> "" Then percent = Val(p$) Else percent = -1
                If percent >= 0 And percent <= 300 Then
                    _FreeImage undo&: undo& = _CopyImage(_Display): Contrast percent
                End If
            Case Chr$(0) + Chr$(65): 'F7
                p$ = NBOX$("    -= Saturation =-", "Percentage (0 to 300): ", 3, _RGB(255, 255, 255), _RGB(96, 96, 96))
                If p$ <> "" Then percent = Val(p$) Else percent = -1
                If percent >= 0 And percent <= 300 Then
                    _FreeImage undo&: undo& = _CopyImage(_Display): Saturate percent
                End If
            Case Chr$(0) + Chr$(66): 'F8
                p$ = NBOX$("    -= Pixelate =-", "BlockSize (2 to 50): ", 2, _RGB(255, 255, 255), _RGB(96, 96, 96))
                If p$ <> "" Then blocksize = Val(p$) Else blocksize = -1
                If blocksize >= 2 And blocksize <= 50 Then
                    _FreeImage undo&: undo& = _CopyImage(_Display): Pixelate blocksize
                End If
            Case Chr$(0) + Chr$(67): 'F9
                _FreeImage undo&: undo& = _CopyImage(_Display): Vintage
            Case Chr$(0) + Chr$(68): 'F10 (add red tint)
                p$ = NBOX$("    -= Add Red Tint =-", "Percentage (1 to 100): ", 3, _RGB(255, 255, 255), _RGB(96, 96, 96))
                If p$ <> "" Then percent = Val(p$) Else percent = -1
                If percent >= 1 And percent <= 100 Then
                    _FreeImage undo&: undo& = _CopyImage(_Display): ColorTint percent, 0, 0
                End If
            Case Chr$(0) + Chr$(133): 'F11 (add green tint)
                p$ = NBOX$("    -= Add Green Tint =-", "Percentage (1 to 100): ", 3, _RGB(255, 255, 255), _RGB(96, 96, 96))
                If p$ <> "" Then percent = Val(p$) Else percent = -1
                If percent >= 1 And percent <= 100 Then
                    _FreeImage undo&: undo& = _CopyImage(_Display): ColorTint 0, percent, 0
                End If
            Case Chr$(0) + Chr$(134): 'F12 (add blue tint)
                p$ = NBOX$("    -= Add Blue Tint =-", "Percentage (1 to 100): ", 3, _RGB(255, 255, 255), _RGB(96, 96, 96))
                If p$ <> "" Then percent = Val(p$) Else percent = -1
                If percent >= 1 And percent <= 100 Then
                    _FreeImage undo&: undo& = _CopyImage(_Display): ColorTint 0, 0, percent
                End If

            Case Chr$(0) + Chr$(72)
                If quads < 16 Then
                    quads = quads + 1
                    ReDim Shared pointa(quads), pointx(quads), pointy(quads), lastmx(quads), lastmy(quads)
                End If
            Case Chr$(0) + Chr$(80)
                If quads > 1 Then
                    quads = quads - 1
                    ReDim Shared pointa(quads), pointx(quads), pointy(quads), lastmx(quads), lastmy(quads)
                End If
            Case "+"
                brushsize = brushsize + 1: If brushsize > 50 Then brushsize = 50
            Case "-"
                brushsize = brushsize - 1: If brushsize < 1 Then brushsize = 1
            Case "U": _PutImage (0, 0), undo&
            Case "A": Smooth
            Case "P": If plasma = 1 Then plasma = 0 Else plasma = 1
            Case "S"
                saveimg$ = IBOX$("NAME OF BMP TO SAVE-> ", 40, _RGB(255, 255, 255), _RGB(96, 96, 96), 0)
                If saveimg$ <> "" Then
                    If LCase$(Right$(saveimg$, 4)) <> ".bmp" Then saveimg$ = saveimg$ + ".bmp"
                    SaveAsBMP saveimg$
                    a$ = IBOX$(UCase$(saveimg$) + " SAVED!", 0, _RGB(255, 255, 255), _RGB(96, 96, 96), 2)
                End If
            Case "F"
                new& = ColorPicker&(200 * ss, 150 * ss)
                If new& <> 0 Then
                    randfill = 0
                    fill& = new&
                End If
            Case "D"
                new& = ColorPicker&(200 * ss, 150 * ss)
                If new& <> 0 Then
                    blk& = new&
                Else
                    blk& = _RGB(0, 0, 0)
                End If
            Case "E"
                Select Case eraser
                    Case Is = 1: eraser = 0
                    Case Is = 0: eraser = 1
                End Select
                If blk& = _RGB(0, 0, 0) Then
                    blk& = wht&
                Else
                    blk& = _RGB(0, 0, 0)
                End If
            Case "R"
                Do Until InKey$ = "": Loop
                Select Case randfill
                    Case Is = 1: randfill = 0
                    Case Is = 0: randfill = 1
                End Select
            Case "L"
                openimg$ = IBOX$("IMAGE TO LOAD-> ", 40, _RGB(255, 255, 255), _RGB(96, 96, 96), 0)
                'if filename given
                If openimg$ <> "" Then
                    'if file exists..
                    If _FileExists(openimg$) Then
                        'test loading image
                        o& = _LoadImage(openimg$)
                        If o& = -1 Then
                            a$ = IBOX$(UCase$(openimg$) + " NOT VALID!", 0, _RGB(255, 255, 255), _RGB(96, 96, 96), 2)
                        Else
                            _FreeImage undo&
                            undo& = _CopyImage(_Display)
                            _PutImage (0, 0)-(_Width - (200 * ss), _Height), o&
                            _FreeImage o&
                        End If
                    Else
                        a$ = IBOX$(UCase$(openimg$) + " NOT FOUND!", 0, _RGB(255, 255, 255), _RGB(96, 96, 96), 2)
                    End If
                End If
            Case Chr$(27): End
        End Select
        Do Until InKey$ = "": Loop
        _Display
        GoTo main
    End If

    _AutoDisplay

Loop

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


Sub Text (x, y, textHeight, K As _Unsigned Long, txt$)
    'Text SUB by bplus.
    Dim fg As _Unsigned Long, cur&, I&, multi, xlen
    fg = _DefaultColor
    cur& = _Dest
    I& = _NewImage(8 * Len(txt$), 16, 32)
    _Dest I&
    Color K, _RGBA32(0, 0, 0, 0)
    _PrintString (0, 0), txt$
    multi = textHeight / 16
    xlen = Len(txt$) * 8 * multi
    _PutImage (x, y)-Step(xlen, textHeight), I&, cur&
    Color fg
    _FreeImage I&
End Sub

Function ColorPicker& (xpos, ypos)
    'ColorPicker& Function by Dav, SEP/2020. FREE TO USE FOR ALL
    'Function Returns color picked by user if one selected.
    'If no color selected before Closing, function returns 0
    'Click CLOSE to close the ColorPicker image.
    'ESC key cancels selection and closes picker too.
    'The xpos/ypos is x/y point on the screen to place colorpicker

    '=== Save users display status
    DisplayStatus% = _AutoDisplay

    '=== copy background screen using _mem (thanks Steve!)
    '=== Used this method because_COPYIMAGE(_DISPLAY) didnt always work
    Dim scr1 As _MEM, scr2 As _MEM
    scr1 = _MemImage(0): scr2 = _MemNew(scr1.SIZE)
    _MemCopy scr1, scr1.OFFSET, scr1.SIZE To scr2, scr2.OFFSET

    'Create Colorpicker image
    v& = _NewImage(463, 239, 32)
    Dim m As _MEM: m = _MemImage(v&)
    A$ = "" '...COLORPICKER.PNG encoded by BASIMAGE...
    A$ = A$ + "haIkMo7KDGOh77_oaBfFFfOhBL9c5gGWaX9BRK62K46AkHnS9I=`09EP<4V="
    A$ = A$ + "e25F]0eB;]jK;#YFXUEJQJGM573`644fjGM:62H66L42I^89^HF<co`T]oHo"
    A$ = A$ + "anW]TUUk;O2BnLONnmjek3L7m>li;cS4;]LohSGjC_[gM=C6WciL>WciL>Wc"
    A$ = A$ + "iL>WciL>WciL>WciLOFMgBE9=CX6XN80S0C0W7n48C2O2LNH2H480e3e0c4^"
    A$ = A$ + "5XZHUa7hn4hl`4`8#0Z7Z1V9L;#boQOFngVWjlLWGjhUNN]SGkiAW:SK^U[]"
    A$ = A$ + "lUDW:cUmbnoNZbCf>]MJkdfYVnIk\bR]CKWf>o\CkdEn=KWEVBc:SC0I:[oV"
    A$ = A$ + "IUa7h\MJkd=m>KWEVBc:SC0I:[oVIUa7h\MJkd=m>KWEVBc:SC0I:[oVIUa7"
    A$ = A$ + "h\MJkd=m>KWEVBc:SC0I:[oVIUa7h\MJkd=m>KWEVBc^e?go9QI1;0NB80_0"
    A$ = A$ + "LLhL`73oW4nHhL`aQG02`C2;0V5L[`W;f]2c2F0lT#0N1hh`iP?6n?anHhL`"
    A$ = A$ + "aQG02`C2;0V5L[`W;QK5V5\0h9Q0l2`aQc1O<lORma`iPS3_04PW4F0<;hFQ"
    A$ = A$ + "?G\2mk?k:?V]c:CYIf>]MJkdfY[h>KWEVBc\MJkdfY]CGaMf>[<UVIkdfY]C"
    A$ = A$ + "KW^Rk\MFI:=cfY]CKWf>M5gIk\bDJV]CKWf>]Mj:^cfIUYd<KWf>]MJkdELW"
    A$ = A$ + "]c:CYIf>]MJkdfY[h>KWEVBc^]_ho:QI3;4J02```aPc2O4l_BhSPc273662"
    A$ = A$ + "#3`2QI3g6l5SMK`\Q52=01HHhH`IQ?2nGan8h\`aPQQ0d0\#Hf`]1Oa4^=Hf"
    A$ = A$ + "`2Q6P0<<L<h\`71o[HO4LFhH``#0J0F8<KhfP_H\2mk?k:?V]c:CYIf>]MJk"
    A$ = A$ + "dfY[h>KWEVBc\MJkdfY]CGaM5[fiMOgIbl\?KV<o_o_IbLZC5[gNcTiaOl<I"
    A$ = A$ + "^iK>oom_okObmoloDhG>R>OR>oR>O_J^LT[C[X[GIOJ59j?Knc?oWNAG^cge"
    A$ = A$ + "[LY#_lUVIkdfY]CKW^Rk^FKWcJFIbl7n35fie#3=i]Ql]X>EQdifgn:\;7AO"
    A$ = A$ + "Mi[A5miR>?oKo]Ynd:j[Ib>mR>=BkRjWf>]MJkdfId\MFn^[UfiBFBj?onX?"
    A$ = A$ + "jbg7eRIk<jngmn_Oj^L4meW[NGdOFJ?]V\[Gf>]MJkdfY]cK<gEKk<ja[lZM"
    A$ = A$ + "AM6f]bgVZfiEC[;JAomhYEQNOGceR^ogf>]MJkdfY]cKlgEKk<ZoM]<f3CcG"
    A$ = A$ + "KfRniAN]\XonIOO>_FGfo\I]MJkdfY]CKWgH^[VfiDMO>GcJ^L38jiDcT=NO"
    A$ = A$ + "nbgbGk<OgWcX?GdUSXWoB5bUSX_f9KAoL=Sj\AGgcgoO3AOnb]fiMlUoW9<7"
    A$ = A$ + "HA#3#066>:l>`72oc4n#hMPS2331X1HA`LPk0nba^3H>`RP6P0<<LDhMP?4n"
    A$ = A$ + "Wan#hMPS2331X1HA`LPk0nb9L7`LP51=01HHhX`k0O8l?SmQ`k075662#3`R"
    A$ = A$ + "Pi0g1lUSU[Ik\lMG=]cle4Rj:5JS]Hd>cg^B7[#_L\a=>iO=A??M;T[oIOIM"
    A$ = A$ + "ZJWAONZ#O>5WVIkdfY]CKW^Rk^JJWikna5MO=;Tk7Gdb^CT_=I]cYjaHm:g7"
    A$ = A$ + "^2mbAaX9VVfIQd8]MJkdfY]CGig^JJWikaR==]c\Ol9cgV\fIQNjGXOMi[e5"
    A$ = A$ + "mL8bfY]CKWf>]MjRV]c2[M6][lJ#9j[?G?N[AbnjT]CKWf>]MJkl6cIk<n[["
    A$ = A$ + "#NMg4mlPZ#kKf>]MJkdfY]cK<W]ch_^XO^W5bRNMLV[gO7\MJkdfY]CKWOfH"
    A$ = A$ + "f>CNiX#Oo5<JCem1MZJWlm8g\?fE<KWge=m?BhnP53[62`NQS0_=l1`o8Q?0"
    A$ = A$ + "NKh8`NQ0\JHa`m1g5LCa^;hnP53[62`NQS0_=l1`o8f70_=L4H_#0F=\HhnP"
    A$ = A$ + "k2^Y4^;hnP53[62`NQS0_=l1`o8f70_=L4H_#0F=\HhnPk2^YHiJf>;OGY\M"
    A$ = A$ + "6mlP]#OO??OkjIk<jnNF8_?fNU5eJW\gKL_JNmMJkdfY]CKWGIf>;OGY\MF\"
    A$ = A$ + "N<8_Nf>S4mhaVVniTmNd[]CKWf>]MJkl6cIk<g_GnTfgOiSJ]5Sg;h]MJkdf"
    A$ = A$ + "Y]c[<KWU_cfInOO`;jgKJ5jRjWIohgJkdfY]CKWf>_aLf>Wjg3ISnMDJQnNO"
    A$ = A$ + "OJN_A`W[#f>]MJkdfIUiliIKQmn_NdmWl`7>oW>A;kgKi;GN=ZHkdfY]CKW^"
    A$ = A$ + "Rk\MVlegiTmn5dEnMEFd___WZW7Af>]MJkdfY]cK\W]c2k[;k[GA?6^iKGii"
    A$ = A$ + "<DiBkL6glO?QZQU0[12`NP33W2^8lgChR`YP33k12`JPU0E3c0^iHc0Z6F2\"
    A$ = A$ + "680k1><L:hR`O?f5QC176f34Pe0;1Z6V1Lc9<3XJH9`JP0\7h``YP;2omHG4"
    A$ = A$ + ">5LHH?#0F3\4XJH6`=7;GcfIik\MVnfITlMO?;dgOL]MJkdfY]CKWEVKjlg1"
    A$ = A$ + "IIoJj8O[L\MV_oo7\MJkdfY]CKWgH_Rm_k[CCk\#K1UjOoMF8GN]MJkdfY]C"
    A$ = A$ + "KW^[\[Vfi6ghTOj5mHIVf_^YZ54mj3Q_F>^bmI=Ok:?oNbgUSXE8G>R^<TMc"
    A$ = A$ + ">O?V]5j?_cLmJD9jeCZ]CKWf>]M6=KWU_kZYM6e6bgRN<MSj6i[_4meLef2R"
    A$ = A$ + "fE^_Mika?>je;BJ_LT_G7WGijeDmn=DQLocW\EX_6?Cc\MJkdfY]CGaMG=]c"
    A$ = A$ + "YZaD8;jiZJaXM>E?WGCkUS[VNGf;kF\]CKWf>]MJkl6cMef>_FJFijaU<];k"
    A$ = A$ + "WS^5bkI1iJAombe?3edln0?Gf]HKWf>]MJkdfi=VkZ]M6Y#NO2PKbNNoTfag"
    A$ = A$ + ";PBKo<GMc\O<YCck3lA;jh`lWoenmQ]Dd>_WKiCBHN#]#S#06267>9lN`WT`"
    A$ = A$ + "k1W467622#S#]`lPk1^UHg3<?XFXA8031S3W4N?hCRmN`9QaQQP0d8D;<?hN"
    A$ = A$ + "PK9Qk1V7D;d84PQPaQC2_7l9aN?hT`h`##0J4Z5V7L?`]4;GcfIik^FJWARN"
    A$ = A$ + "_hIOkKZKXAoN^T?nX5cfITXWK#CEc;jcOUW3ACUXWSACeS=MdekNk=go>ldf"
    A$ = A$ + "Y]CKWf>]MNSi^FKWI;ZW5eKbnmb^Xk;fTmk6jBUXNNdi;_L4mWG\>mRj_ijg"
    A$ = A$ + "IWG_TVIkdfY]CKW^Rk:V]CIkdfY]CKWf>o\`\MFI:=cfY]CKWf>M5gIk\bDJ"
    A$ = A$ + "V]CKWf>]Mj:^cfIUYd<KWf>]MJkdELW]c:CYIgkgh_V`32?6\F8032_<L2h2"
    A$ = A$ + "`O=Q;0W0NIH#80[5N<h1Qk5n6a^Gh1Q73F;4P1QG6>1L1h_6k2`9PG6642`J"
    A$ = A$ + "Q73N#hNQ_A2g;lP`S1[52`P`;3W0^0lGSM1h4`;3321H]`S1?8L_`g8FQnmW"
    A$ = A$ + "MU7cfIUYd<KWf>]MJkdELW]c:CYIf>]MJkdfY[h>KWEVBc\MJkdfY]CGaMf>"
    A$ = A$ + "[<UVIkdfY]CKW^Rk\MFI:=cfY]CKWf>M5gIk\bDJV]CKWf>]Mj:^cfIUYd<K"
    A$ = A$ + "Wf>]MJkdELW]c:CYIcjfo;9l``bPe21H#hP`K0W3n;9L>h=P32321H]`bP76"
    A$ = A$ + "V5LkaV5l``bPe21H#hP`K0W3n;a>7l6`1Q1Q0\FHI`33c2^m4V5l``bPe21H"
    A$ = A$ + "#hP`K0W3n;a>7l6`1Q1Q0\FHI`33c2^mH5jgOfEN<KWEVBc\MJkdfY]CGaMf"
    A$ = A$ + ">[<UVIkdfY]CKW^Rk\MFI:=cfY]CKWf>M5gIk\bDJV]CKWf>[\KWZlU]c:;f"
    A$ = A$ + ">]MJkdfYVnIk\bR]CKWf>_a_MjL^Y_IkdfY]CKW>W;MKfgiO>Qi3;7F74PM3"
    A$ = A$ + "70N=h\`O>Qc2_6L0Hg#0F7\LHn`\Qk<f\Qi3;7F74PM370N=h\`O>fIQG3>0"
    A$ = A$ + "\K80[3F><OHf`MV`\Qi3;7F74PM370N=h\`O>fIQG3>0\K80[3F><OHf`M6c"
    A$ = A$ + "iLUGcfY]CKWf>M>GjV]CKWf>]MjL^d=KWf>]MFif>o_ogoKVgomOo9eOj?mW"
    A$ = A$ + "bLQ;LQ<WolWOBm^_kkVigokomCZCNbCVi]N[gJBMRCLR<ofOk_MBmKn=oV<_"
    A$ = A$ + "j[nZI>lQ?L>=nhSWiGo[oeInEoZOeTJ\a6;c_hGl;b<b8S<Y6L`1clcoiolL"
    A$ = A$ + "JGkJGIjYWNb[]^e]ViIOfW=_J_mfcdJ[]VC]dB;IJZYVblcnIo\LJM[KMIFc"
    A$ = A$ + "JFCVj[_n9EMeEGVE^bEViWlCn9idBGjBc\TU\TlJ1;H1InAoXODNm0?`3TCo"
    A$ = A$ + "PO`?8cgokomclmnNO_9eLVcLblMn>OW<cLVcLBm]ofOk<cH6c8cMOggM>MWG"
    A$ = A$ + "jkQNkgn]?YnVOc_IV_nGo[Wi[menJCZ_jGm[Vi[lEn:I^YKjVbY_dGj;Ui;l"
    A$ = A$ + "5n2CZ?oWocWYZZZ:QomonOKkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]"
    A$ = A$ + "MJkdfY]c:`fiLWa5CX6H5#C#060f?<1L6hR9L6H2Ho`0#0J2F1D3<GH6aV;D"
    A$ = A$ + "3\2X98030k7V0>3LaHW1V0f?<04PVPE0e0c5VA2c5Z1F1d44P1Pm3C0W1^H\"
    A$ = A$ + "c0C0k7602#C`:PJPi2c8V]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY"
    A$ = A$ + "]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]M"
    A$ = A$ + "JkdfY]CKWf>]MJkl6[fimo]nS9\0HU`C11HG`nPS3W6nS9LJhh`nPM11hYPE"
    A$ = A$ + "2;0^OhK5knQ50[4N:80k2f7LLhd`O<fYQS3k3f54PW2F9\0hnQ_E2g?\0HU`"
    A$ = A$ + "C11HG`nPS3W6nSa>=LLHO`^P0lD`:Q50g?l]RIkdfY]CKWf>]MJkdfY]CKWf"
    A$ = A$ + ">]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY"
    A$ = A$ + "]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>_aZM>_INn4F4\:XI80m3S175>9Ln"
    A$ = A$ + "4>9LDH<XO80=3[2F4<?HVaV7\8HE#c#0j763>:LBhla>9LDH<XO80=3[2F4<"
    A$ = A$ + "?HV9<?HA`ZPVQ0d?<6LDhT`iSMBhX`H#o#0J6F5\8HN`<SIkdfY]CKWf>]MJ"
    A$ = A$ + "kdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKW"
    A$ = A$ + "f>]MJkdfY]CKWf>]MJkdfY]CKWUk]c7jkn^9lX`C0=31XOh5QG1NChMCh=QG"
    A$ = A$ + "1NAXO80=3?1lX`31OgH?4lX`C0=31XOh5QG1NChMSmV`[0_8d?4PVQW0NDhQ"
    A$ = A$ + "P_K2?4lX`C0=31XOh5QG1NChMSmV`[0_8d?4PVQW0NDhQP_K<KWf>]MJkdfY"
    A$ = A$ + "]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MFng>M>gdc\MJkdfY]CWcU^Ikdf"
    A$ = A$ + "Y]CKW>W;McfY]CKWf>M>GjV]CKWf>[#KWQB\\fY3UF9_NEEYedd1a#VZ:YBN"
    A$ = A$ + "NEJoWYYK6V94:]BcNTiNV4Z5Z3F?4PnPAQaQG7>C2_><><:d74Pe3e1e2?2<"
    A$ = A$ + "gH?2D;D7\N80m1S2S3_>LVH_><><:d74Pe3e1e2?2<g4N4XFX>Hm#0j36567"
    A$ = A$ + "NMh<aNMHLHDX?80[7Z3Z5N4H^abi^>n=]\MN]O#dfY]CKWf>]MJkdfIj>8Jk"
    A$ = A$ + "dfY]CKWf>]MJk<M74]MJkdfY]CKWf>]MV^3Rf>]MJkdfY]CKWf>Cg1AKWf>]"
    A$ = A$ + "MJkdfY]CKWYkPX]CKWf>]MJkdfY]cdM#dfY]CKWf>]MJkdfIj>8Jkl6[fI=E"
    A$ = A$ + "OZ4F:D?\180k461>4<1LZ4V0>4<2\C80K0Z7F:D3DM\JPU2e3K02`>QAP31C"
    A$ = A$ + "0W:f4`QPAPM21H3#m`BQJPZCX6HY#m`6P0\CH4h#`4`YR=1L8H4HW#0f0D?\"
    A$ = A$ + "DX6XjHiLG7oVFf>_f?8JkdfY]CKWf>]MJk<M74]MJkdfY]CKWf>]MV^3Rf>]"
    A$ = A$ + "MJkdfY]CKWf>Cg1AKWf>]MJkdfY]CKWYkPX]CKWf>]MJkdfY]cdM#dfY]CKW"
    A$ = A$ + "f>]MJkdfIj>8Jkl6[fi2OPg:QU3=0K42`>PQQ3073N[4>6L0HHH7#0f8d0\L"
    A$ = A$ + "HQ`34KQ`bQ6P=21H7```1PS1_E\S17066f14P=2=0;7F8l09\#Hi#3`6Q0\3"
    A$ = A$ + "HHh0`aPg:faP3033k02`6Q6PU3;4NPHiLG7oVFf>_f?8JkdfY]CKWf>]MJk<"
    A$ = A$ + "M74]MJkdfY]CKWU1]CWc=]=KWf>]MJkdiLYKf>]MJkdfYciBg\MJkdfI5Jk\"
    A$ = A$ + "ZB\\fY3QBZTWGEEB=MM#\j;maUB9_FEJoY[>=Mc`<EEEYEJV]CKWf>]MJkdf"
    A$ = A$ + "Y]c<YJf>]MJkdfY]CKWf>cTZ]hOh_;Q77F=d24PNQm2_4L4hgU`APG2f;d;4"
    A$ = A$ + "PFPE3?>\Hh76Ka`S3[6J12#_`NQG2>2lkRM4hUPm2m21X5He`S3;6nQ9\Hha"
    A$ = A$ + "QE3]01XGH_`;171nMa>2lB`NQNQ0d2\JhaQ53o`HiLf>]MJkdfY]CKWf>]MV"
    A$ = A$ + "afY]CKWf>]MJkdfY]c;?KWf>]MJkdfY]CKWf>_>Oc#KWf>]MJkdfY]CKWYkV"
    A$ = A$ + "Qf>]MJkdfY]CKWf>Cg=3]MJkdfY]CKWf>]MV^K6JkdfY]CKWf>]MJk<Mg<\\"
    A$ = A$ + "ZMFK=CT`ZP6QFP0d;<4<6<><A2S3S131m21X5XAHE#]#=aZ5F5d8d24PNQQP"
    A$ = A$ + "aPaQ9R=><6<4d;4PFP6QE1e2eT#]`ZP6QFP0d;<4<6<><A\aQaPQPNQ0d2d8"
    A$ = A$ + "\:XFXVHiLf>]MJkdfY]CKWf>]MVafY]CKWf>]MJkdfY]c;?KWf>]MJkdfY]C"
    A$ = A$ + "KWf>_>Oc#KWf>]MJkdfY]CKWYkVQf>]MJkdfY]CKWf>Cg=3]MJkdfY]CKWf>"
    A$ = A$ + "]MV^K6FFe>Gf?nECX>H]`C31hiQ1QAQ32_J2746564NN80?=\FX>HI`?>fbP"
    A$ = A$ + "jPe2?=4PW76465>8lZa>8<:<8ll#0NJH]#M`bPOL2;3Z3F;ld#0NNH#HDhP`"
    A$ = A$ + "[6kP`X`P`c31hYQe2e1;3naaL>Gie\MJkdfY]CWcU^IkdfY]CKW>W;McfY]C"
    A$ = A$ + "KWEV]cXOdMUBI_Z[:DBUl:FXd:kcZZ[ZT:iE[Z:YbNEERoW4gf8DJUhljBo1"
    A$ = A$ + "UBYIf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWLf>]MJkdfY]CKWf>]"
    A$ = A$ + "MnYA6KWf>;kKW[H97>QjQVPFQ0d3<0<2\Oh`9\OH4H0X780]2=1e3[0FB\E0"
    A$ = A$ + "e3=1]21X7H0H4Ho`QS]OH4H0X780]2=1e3[0FB2[0Z7J2J52#?`0`8`nQ37K"
    A$ = A$ + "o`8`0#?#0J5J2Z7F1\THiJf>]MJkdfY]CKWf>]MnYA6KWf>]MJkdfY]CKWf>"
    A$ = A$ + "]MJkdfY]CKWf>]MJklbgf`fY]CKWf>]MJkdfY]c2Hf>]MJkdfY]CKWf>]MJk"
    A$ = A$ + "dfY]CKWf>]MJkdfY]CKWLf>]MJkLj[M^ZUNX4J0J6f44P]3m333S17:QaPQQ"
    A$ = A$ + "nQ]31HC#c#3`ZPU6KE#3#c`VP0\MXOHHH<h#a6366j7f>4P=1=3=0[2FJ2[2"
    A$ = A$ + "J0J6f44P]3m333S17:fH``#o`fQ0\9XIX1HE`BSU[IkdfY]CKWf>]MJkdfiW"
    A$ = A$ + "6I\MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]c;OK3KWf>]MJkdfY]CKWf>;P"
    A$ = A$ + "IkdfY]c:cfYciVnV]CKWf>]MjL^d]jFanCXAHm#K#0j6j36265fO2S231m1M"
    A$ = A$ + "31X=Hm#S#M`:RE7d8\NX=80M3m131S2k?fX`##O#g#0J3F?d8D7\R4Z3J4F?"
    A$ = A$ + "d64P^QnPQPAQm7KDH8X?XK80]1[7J4Z3FA<WcEN=KWf>]MFQf>Sni4F:Ue2G"
    A$ = A$ + "jS;UbN_DEEEBUlHHEUFI]Z3EEBUlV6EEB==Mc`;M8=DBUVIkdfY]CKWf>]MJ"
    A$ = A$ + "kdfY]CKWf>]MJkdfY]CKWf>]MnoKf>]MJkdfY]CKWf>]MVafY]CKWf>]MJkd"
    A$ = A$ + "fY]c;?KWf>]MJkdfY]CKWf>_>Oc`bZfI3odOI2[3f8d64P^QM0k666nU9<<\"
    A$ = A$ + "KH7#g#0J3f8\>X1hW6[1HM`6QfP0d=\3Hg```_<f``^QM0M31X=HS`jP6POJ"
    A$ = A$ + "2=0[3f8d64P^QM0k666nUa66f=\3XK80]1K4F7d0lCSUcIkdfY]CKWf>]MJk"
    A$ = A$ + "dfI6KWf>]MJkdfY]CKWf>_l\MJkdfY]CKWf>]MJkljl=3]MJkdfY]CKWf>]M"
    A$ = A$ + "JkdfY]CKWf>]MJkdfY]CKWf>]MnYcfY]CKW9W]CKWf>]MJkdfY]cde>K\nAB"
    A$ = A$ + "XIX5XM80K3j5j76269QQPnQNQ]11XMX5XIXAXnH=2=3]0]31HK#_#o`#`8a6"
    A$ = A$ + "2j7j5f64PfQFPVQ6QjCXAXIX5XM80K3j5j76269f##o#_`fP0d>d2d<d8DO\"
    A$ = A$ + "L>KWf>]MJkdfY]CKWf>cHkdfY]CKWf>]MJkdfiUW]CKWf>]MJk\<XMjL^Y]I"
    A$ = A$ + "kdfY]CKW>W;McfY]CKWf>M>GjV]CKWf>[<KWQZZ^T:kEmUnhBYTWGEEBUlHH"
    A$ = A$ + "EUD9^NEMEUDI_Z^d7G:Ull:DBUhljBgFYD:=[Ye\W4f0d:\I80K5j1f9<0\W"
    A$ = A$ + "460f9d3\E80K6J5f0d4\VH=1K0J5f<4P]2m0k460fC\1PM2m0K52`VQFQ=0="
    A$ = A$ + "1[9QVP=0]2K62`FQNPM230k9f0`>QNP]21Hc#[`6PVPe4;GcfY]CKWf>]MJk"
    A$ = A$ + "dfY]c;ONIkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWGilbfY]CKWf>]MJkd"
    A$ = A$ + "fY]cYNf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWLf>]MJkLj[M^nV6"
    A$ = A$ + "8QFPfP>P0\5XKXGX?HP4j3j5j6f24P>PfPFPe3=5Km#;#K#7#0f2d=d;d7<#"
    A$ = A$ + "\nPNQ^Q]01X3X=X5Hm#C9\NX5X=X380K1j6j5j368FO#_#g`FP0d1d6d2\NX"
    A$ = A$ + "YHiJf>]MJkdfY]CKWf>]MNic;KWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJkl"
    A$ = A$ + ":WGf>]MJkdfY]CKWf>]M>ecfY]CKWf>]MJkdfY]CKWf>]MJkdfY]CKWf>]MJ"
    A$ = A$ + "kTcfY]CKWCO]cFf`>CHC#k#W#0j2f6\MXGHW9d;\MHK#G#0j4J7f4d2\QH]0"
    A$ = A$ + "K2J7j42#G`fP]3m2k<F_`fQ]1M11XCXMHC#;`6BX5HC#k#W#0j2f6\MXGHWa"
    A$ = A$ + "j5f>\=X;80M2]3K2J1f#\L=KWf>]MJkdfY]CKWY[MjL^Y_IkdfY]CKW>W;Mc"
    A$ = A$ + "fY]CKWf>M>GjV]CKWf>[<KWEEEEUDI_[Wol>?mY?M9Ef;4Z^T:iiEXT:aomj"
    A$ = A$ + "BOLYDRK7NY?^DJjjflCe\MJkdfIUKk\D=KWf>]MVoIkdfY]CKWCeY]]CKWf>"
    A$ = A$ + "C^fJ]W4J7j0j42#G`FP]1M3mT#g`fP]0M11XCX3XMX=XeH]1]3M0M21X;H;`"
    A$ = A$ + "fP^QNRe=\=H;#G#0j4j0J7J3J=QfPfQ>P>Q0d5\5HK#g#?aj6f6\5X;80M2M"
    A$ = A$ + "0]3]1]6;GcfY]CKWf>]MJkdfY]cXIkdfY]CKWf>]MJkdfiU?_\MJkdfY]CKW"
    A$ = A$ + "f>]MJkdfY]CKWf>]M>IWff>]MJk<i\MJkdfY]cYjdffY]CKW9W]cdf>cjOgf"
    A$ = A$ + "Y]CKWf>]MJkdfY]CKWf>caY]]CKWf>C^>flFCXcY`c01hiP^V2K1fJ2K1jJ:"
    A$ = A$ + "lL#0N6XcY#7`Vc\e>nDMVeonEnhliIP0lL#GCQ]0K=fFP^V2?74PW1jL:d1\"
    A$ = A$ + "i4j0jL:l<#0N>X[Y`FP]6K;#GCQW32`c0M>5j0fL\L=KWf>]MJkdfY]CKWf>"
    A$ = A$ + "SV]CKWf>]MJkdfY]CKWGnlbfY]c?3g>_R>f\]CKWf>]MJkdfY]CKWf>]MVcC"
    A$ = A$ + "KKWf>]MVLf>]MJkdfiDMJKkdfY]cTcf9KUiX?>E]c9kcIkdfI9^MNmjkSHkd"
    A$ = A$ + "fY]cTcfY]CKWEV]CWciL>WciL>WciL>WciL>WciL>W;OkoC[%%L2"
    btemp$ = "" 'decode string data to image data
    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


    temp& = _NewImage(_Width(v&) * ss, _Height(v&) * ss)
    _Dest temp&
    _PutImage (0, 0)-(_Width, _Height), v&
    _Display
    _Dest 0
    _FreeImage v&

    'Put colorpicker image on screen at xpos/ypos
    _PutImage (xpos, ypos), temp&: _Display: _FreeImage temp&

    '====================================

    '=== Now get users color selection...

    '=== no selection made yet
    selected = 0

    '=== main loop
    Do
        '=== Get mouse input
        While _MouseInput
            '=== Get mouse x/y
            mx = _MouseX: my = _MouseY
            '=== Only poll this area
            If mx < (xpos + (473 * ss)) And my < (ypos + (243 * ss)) Then
                '=== if click button in area
                If _MouseButton(1) Then
                    '=== if clicked in CLOSE box area
                    If mx > (xpos + (352 * ss)) And mx < (xpos + (457 * ss)) And my > (ypos + (5 * ss)) And my < (ypos + (72 * ss)) Then
                        GoTo donepicking
                    End If
                    '=== made a color selection
                    selected = 1
                    '=== Get color where mouse pointer is
                    clr& = Point(mx, my)
                    '=== Make Red Green Blue color values
                    red = _Red32(clr&): grn = _Green32(clr&): blu = _Blue32(clr&)
                    '=== show color selected in box
                    Line ((xpos + (246 * ss)), (ypos + (7 * ss)))-((xpos + (347 * ss)), (ypos + (70 * ss))), _RGB(red, grn, blu), BF
                    '=== Update gradient strip with color...
                    '=== ...only if mouse not in gradient strip area
                    If mx <= (xpos + (246 * ss)) Or mx >= (xpos + (457 * ss)) Or my <= (ypos + (77 * ss)) Or my >= (ypos + (107 * ss)) Then
                        c = 0
                        For x = (xpos + (453 * ss)) To (xpos + (242 * ss)) Step -(4 * ss)
                            Line (x, (ypos + (77 * ss)))-(x + (4 * ss), (ypos + (107 * ss))), _RGB(red + c, grn + c, blu + c), BF
                            c = c + (4 * ss)
                        Next
                    End If
                End If
                '=== update screen
                _Display
            End If
        Wend

        '=== ESC key cancels picking and closes
        If InKey$ = Chr$(27) Then
            selected = 0: GoTo donepicking
        End If

        '=== don't be a cpu pig
        _Limit 60

    Loop 'UNTIL INKEY$ <> ""

    donepicking:

    '=== wait for mouse button UP to continue
    Do: mi = _MouseInput: Loop Until _MouseButton(1) = 0

    '=== if user selected color, say so
    If selected = 1 Then
        ColorPicker& = clr&
    Else
        ColorPicker& = 0
    End If

    '====================================

    'Restore background as it was
    _MemCopy scr2, scr2.OFFSET, scr2.SIZE To scr1, scr1.OFFSET
    _MemFree scr1: _MemFree scr2

    'Restore display status as it was
    If DisplayStatus% = -1 Then _AutoDisplay

End Function

Function BASIMAGE1& 'quadmenu3.png
    v& = _NewImage(185, 593, 32)
    Dim m As _MEM: m = _MemImage(v&)
    A$ = ""
    A$ = A$ + "haIkm5LddLS[TjX>ZS?G#VQL1MDGWSb0T387J?8gjMA6`\1V8bMQb918HEEg"
    A$ = A$ + "MeMW8R<nooZV598IBFTPTPo[oeojOo_<<<<<<<<<<<<<<<<<NYh?nSohOPg9"
    A$ = A$ + "Mg`#QOogomomOnWoionocokoK;n[oj_n?QmM:_M64U9[`>Q=3doagDii[2Ch"
    A$ = A$ + "f:^nkDNlXHBIa>Q]3if;6G7>2oFEonYR9U1ol?oco7LF>>PkGoj#DFN5mmlK"
    A$ = A$ + "of_mFU_g1C:3nQOh7n?hZhh1nT;COV86_aEDO4mQmYFWlZhhAIj_n[ojKEIe"
    A$ = A$ + "M4GEmADGlCod?mdeoHnJEcUKW_gSiKW1NoG57?b3oh?nSKggA>_\Cn=Gfm\["
    A$ = A$ + "7OTlSEUcAN>h^CZ?RjhP[?IlmPK>9LZjWMnncZjjSb1?:7OJJ6jM4WAoiC:["
    A$ = A$ + "DQQc_k<g;Eifd`?9L[:7^RiO?9o6U_C[kfYnhXLl9];E#I3X[ROSlndbYX?S"
    A$ = A$ + "9mKPh=2kA]k5V;lIb[?:>nZjbk:7OJmA4^9fQ827nn`IiTLkU[J^88__37oA"
    A$ = A$ + "DVZb_XOWcTgRb9<NY9YGDG=9L[Z?AiDXog9>N<na757OR><9o<Y_VMaSTS7h"
    A$ = A$ + "<Ll[8_2K:de_#lKCZ[`H`NGihC[?NULLDVM5a7WgW4fW=7o:nNEDN=ik9Aj5"
    A$ = A$ + "]5VT_V4GX^oKPS_RC6eSC6S;b?CJcPnUV`A^[LlhkZCdW9aeTjQ8mVDf>YLm"
    A$ = A$ + "KSS_Jn9X>HJnIBJShLblL_[Ll9lgM:OGE^5YgTb[Ej5B?d^bLliLlMV762kT"
    A$ = A$ + "lcW>77QKEiFlkCR[EaSihjbT9OGfLLMJ<=?^:nVJ3WEeWPgMfeElCSS?ILPP"
    A$ = A$ + "g^cH#OWhh`Vh`6lCWSb>jbZb\9aeZlcg877jKH_9HK4\O>VXKijP?E>N`_S_"
    A$ = A$ + "UQg1fb=\cATGbUK1feN;CbSGeJ>L5f=lMdfQQ>c]_g]\kCVSSb6`]AO00iWO"
    A$ = A$ + "4^hI6gd^hKVS_JM8<7ooOOgijJdGndbYcZ;W5hkAWMOGn^aa_Rbf?I>NEOOG"
    A$ = A$ + "mn>k\]Ef9]nfhhGAIgg87OJIcDMiAcaaJm7h\W9Q?Yei4jjZ`l=`ainnV`Yf"
    A$ = A$ + "IM^^bf=MUk8]\]3oWYodb__5>ndeLl>aaalS_RcLcgljLJ>no<=NTLlM]A`E"
    A$ = A$ + "IKlYiOcaO<Ll9[9kA:C_SLlM7oNN?5m\hhk\6iVSg7^Mbkihm^aaga6GkJC\"
    A$ = A$ + "[bfhk<OTMV;g>fbMR]BVbaaJl=E?W`aalk_jmFk>hI`aWN^F>:7Ojnd:[??C"
    A$ = A$ + ">n>i3`M>ji[][NKji[NEHfQS7HZ]UO4LlSl]aS`aWFGTihk`IgM?GLEf6OWi"
    A$ = A$ + "M>Y<2jediX?5XNkZF7SMihkF_LUaIDo4ai>WO#VKl8>GfkbagI\IhLYLULl0"
    A$ = A$ + "WI]aSg?_?P>kI0_[Nk:R_<7oEMVUg=_?mKS7enhkV7g=NgY?U[dfhW]olXLT"
    A$ = A$ + "gSKIKmLeko\717oEik9VP#gbmKL6>nEl]jW=7?hFG=7?`>c=0c5=O6PieMMB"
    A$ = A$ + "L\KmfZ`_Z]EVS?Yn?nmWiL>aNP=ggaDkBDaaWdWc^ciL:7?g_lT`OUf6_SWW"
    A$ = A$ + "CSMZODa7:_cnZOH?b0imb_2ZmO6JCYRcEaGnkoIM4]_1hbR9a9Vg0dW9_7W?"
    A$ = A$ + "IPl:RGhcmVFFae]a_UcWhkaC:kH>ndl:jG>2Kl>C:7NTLLDW_cl4b]1Ikm4m"
    A$ = A$ + "]W;OHPbfZOG=oS9aI5WA=^:Dogm>Ml`<#l=9?]BoDf>SkSOEIe^_o4mVSc9_"
    A$ = A$ + "C^lNBnoZ\Kh:\khE[:3#I;gNWg3oM#]ocZRc8\CRC>nRgC5OXlNWhLJnJRNa"
    A$ = A$ + "moLTb:>>>CMaAdYSDfl<hh1VjG2Gaa=<^c0k3\YhM:_IH0P_]I>^QQQQQQQQ"
    A$ = A$ + "QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQan8>WM0ai;mMBgoTc;Ok8"
    A$ = A$ + ">KWM2l3:AM]jmQ?NYjME_G4O:1Q=nGFRg9coZnmM5>N[b;omOogoS`Jli`ac"
    A$ = A$ + "2cGEL]ElXSba3>fSTSGYC\4UG^Om?G>N8`G94mO7l^Y2le?Ml9h?A2>De_3O"
    A$ = A$ + "]6;h\J_[4_gocococF_Cegd<N_hhMl`OiGnUbO_:>amVmIhhAk4hGHIi<Ll0"
    A$ = A$ + ":YBGSW5W9lcN?VIlJih1O9hbELY:N<lmCMaiAih`_`XnMXG`W76oMEj0oZ6l"
    A$ = A$ + "??ElHh3XZb;?;o3UaSSS[ZOkj_L577n4SSbaAHjJk1Ng:m8ko=>:7oAkWo<^"
    A$ = A$ + "_Ll^aCGaYboN777nUb:m2LlZa]WC7<nNUnP_Idaa]oYaLl:^e:^G777nSd:m"
    A$ = A$ + ":?nQE]UR_7dE60OJM4V8\:O`4loN0iiFKH>Ne_gaa39dk:mj8Ll>k62KlGaa"
    A$ = A$ + "ib?K3mg7>NeLf^3Ll>mj8Ll8mFI7d8^Df5W;o#kQWY_LehHLl:1lS:N`cPS["
    A$ = A$ + "Tc`a3d]N]#`M]#GiWB?<NOhhika[^OoMTS3NnZekTiiVSoi`a3NIn^I#9?B>"
    A$ = A$ + "n:^gE`a30oNOW0k_Sf5Hl9ikg2ca_oLllMT5??[XN\Z^oAaa3^DWLELL`c[\"
    A$ = A$ + "Y8THmocSi>nkGam7RaaihEn[LDgZT797_KM;a_OD>>FKd<#OcEaAlKlMaEl<"
    A$ = A$ + "0?Wcg7>N^N;oN:iAca[JKQOo:]M8^kkZb;8m<GnmWSGmN:iAcaSn=[T[VSSm"
    A$ = A$ + "#VJO3TC_ZakHlncaEfCN577c7kXLLeJ^`onEbaaHcjB_8>ljLnIba[fgQ1?^"
    A$ = A$ + "KoOLF>NekNfaSGUGZj77[k9W6NM>oLhhC?3##bgCe7I?I1>LUMm>kjL^[PkD"
    A$ = A$ + "<>=ljLni`akNGFR`QaYDe?O8Chh[6OlA]MhdcjF8ie2SO?_6#OFLlP;^RKPc"
    A$ = A$ + "<Cf^aWQSSk<m^Oo8Ll^`WU#gb[5VihgO`[C7_^?CR3LgFW]_<N>_fAaH=#JR"
    A$ = A$ + "eJ10LWhi`W?`oFloak[Ng<gJEjX\92\U2FGo\]bcLk0AKG_>W_?PGW^Mhh1_"
    A$ = A$ + "]jmcl1N<ZZe#=cmDkWe<gAUV:^eZdIJhid9ON>mjLNo1_>MZemIBL4e]Am=0"
    A$ = A$ + "jGLWd4LWhOiO;g>AmnZij]:MD8n=d_?WOVT6N>W666666666666666666666"
    A$ = A$ + "666666666666666666666666666666666666gEXlS`:o:<2?lQ2Q?91HWk2k"
    A$ = A$ + "8\ig=R;fWnajDnN__B_Zb7:M70g7?lkFY?kXcEj#6MQGMG1=]\WS?X[ZWaU9"
    A$ = A$ + "`7;^RCTmAMLi3:SDiQG1VhKZ#nYk>]?RW^lDlKMYE^<SmS>`_6gMWWeM7VW["
    A$ = A$ + ";b2h7:o_f4M>c_jlG##oId9AiL^Md>UmEjIF#i2GV0Nn4IEnVc3gI>>lY=C^"
    A$ = A$ + "[b>CjTk_QSGUo`2nmW:oiFnMQoPMBl>iNO02hFMQ=[3Cihhm2OFadk9^Zh5i"
    A$ = A$ + "W\PkUDnnd0n8Y9BGiNF_jl97?3P_aXZS`gTP?KRo=eMLBhc#hlTbG\5_;GO4"
    A$ = A$ + "o]RK1o1HUOB[[\>Oo6[jO:d3ni`Wo`];QOlQe1em31:Cag\QOI^SS[RW#oHN"
    A$ = A$ + "hZbNFZ^klDm?0ob>dMeg>clR\Pkh9FRWM7l?<:NBf?=a]]1_CE^agkk:^EGL"
    A$ = A$ + "Zj_]SS[R7^<>ZoEj1lCKLNX:_EYcE];cH57G5oakYhhMUmZW[2_jND?kO5E]"
    A$ = A$ + "i`_[:g[^[EEimk67?d?^_h^bIhcSOFLL^_;EobZn[AHImh8Ll:M6]_P?aj8L"
    A$ = A$ + "lMjOIWW[^7ecLLeMV4nm8OYh4hk>ao7g7=kh70OTXR72M[ZOZZbclH?gUS[:"
    A$ = A$ + "kZ6g\ROa]GQO>\J^DLj]jKk\]IjdIlM2EI^:nOVLl#DSm:kO5k^_#EUWAhAo"
    A$ = A$ + "Klgan6ihPgRnB1GLZ?Z_RScO_6UgEa;WgFaE`lCbeOMjLeLaIAMg<oXihEmK"
    A$ = A$ + "<QS7oNeLQccS3hKTSShN7nRZlVe=F_P^^j^PUc3\`mQSfWah#j^_?[^;8F9#"
    A$ = A$ + "_OTLLFfUSgMWY[^[doFihLkmYfWEM_EY6k>\]bDKREa9D_?\m]b^D\N^JlhL"
    A$ = A$ + "lRkBPk<7OEn9?fU_A>N46N]ajB[Z_[>9\ZkKZ:NiZnaih#e?^b^:[hhX]NnN"
    A$ = A$ + "bXJ\nWUSGUg?:7_K=5ZlodO3LL^oYZn4khhlH_AK5U]]Ef##mMf>^RJM2jhQ"
    A$ = A$ + "k`aEnROemMdEaaEe;WI>W`>=Zj9\N8OkLlEm9F]NTC4ejHQk#UZlPjikbak\"
    A$ = A$ + ";LEjbnEo757GI_hcbaEjkMinemZhhhk\ilSJnH:>>^?2[h;Zb^9[W<2[RS[N"
    A$ = A$ + "O`9HK6\;7?_72fUSW3g^UmEa;77Ze;j<LlZbRkbmfe:>>cCAKFnIhMhj9V_P"
    A$ = A$ + "e98;Ef>\SSG=O<ecELl^e5Da]ZhK[\5dIhhkFfG5_:mNeh]Gmk\X6o7Bok>7"
    A$ = A$ + "GeOBEI9hHMm5a2FS\hMgI\:MfgUSSZed[Z>YRgVK_>US[^?THYRS_KIOe_UU"
    A$ = A$ + "ZeWMG>n:m:OGZn>`aANRcgH^6ii9YB3ek62f;?hmgI]lk6k7;ELlZmT56WAF"
    A$ = A$ + "WSo?\7DFgFaaEUU:m[KL[C;k[Rg\Dmm^SHGUYe[_jaS3X^Ooh`T]U=KW[Ei5"
    A$ = A$ + "l>hmig=n=H?EngalgDg[OEgeOLn1f#D5Fnnb<OW72M>7Vlo7jV:?eEF6Hgb_"
    A$ = A$ + "YUmEoVZ<UeK^?gEgURLm:GFRkBeG5_NG>>bCZlaTfZZkOED^U;7N4LLDG[2;"
    A$ = A$ + "WNil2[c8_RWm\hhkDf_37_Z<I:7_B_#H_3f7o<]9>jm7In>Xl>TGfAW_3m9M"
    A$ = A$ + "G_k>ce[gUn^=<<<<<<<<<<<<<^K8\a?`c:=cb^jJnL=\Cj\KJMg#\^aXNjIh"
    A$ = A$ + "GONfYgTjNEmIUoj9diZe_5W_a:N2_6HkXWEbdg?_nkC>K:7=MFY_khgQHo0F"
    A$ = A$ + "GHEWW^ZcXC^NZJ_3Zb3EnLYlnnGMfgNeW7XMih[l5#MUAZb[c`GbjK7bkoUX"
    A$ = A$ + ">0[5GWMiIYK=LjB?FbLaEkeSLidTc6E>^kl[FQTm]FI9NWZl0d5V3P_Af9Al"
    A$ = A$ + "nZjC_JOZD]?gIAUWajEf9[fK6CigImX2ilBTO1O]K]CDU9CihMlahgAnV;SE"
    A$ = A$ + "nb9\?_EaIeI^I:?<haZj9XO\Pe2EM6_iWYB_GejE]37_J_C[bcZm\JnLKRel"
    A$ = A$ + "MWnBG9EaC^n6eC[>G:ZbTYLL5?U;cDl2\g;EY]J?OEEf7#]ggimOEDg7eCLk"
    A$ = A$ + "Q#7hjj#DW]#4NU^Yf_G_Rm]bSRS[:;DkUS:>nAUEaedmi9;G57?kKjVNf7Zj"
    A$ = A$ + "GMgbnYnh;EH31WQ5UN`2loKIiEMNPfQS[jK6nEc8^hm]3;lIiZJo<LFY:oU?"
    A$ = A$ + "SUk>6YMhhLoRLO``gI]37Ge_jEaaEn2?57GMfQZ>[58\AiaZmdhMRS[b;Q0K"
    A$ = A$ + "0\RS3KgY\1`:>ndn?`cEmY6omTaROeLLVORaZYhhEkMN57_C?IYSSc]1En0B"
    A$ = A$ + "4nZ_UG=?Kl>_CLl^iB^S]3GYG\nDaaiWW;;In6:[IO>jEcaib4VGD=g]\4SW"
    A$ = A$ + "6SG^RS[BWS`aEn^FNlEih9;XOSXo]>oSnMcfQMLl8?Z>;Vilc4>>lcUMj6?f"
    A$ = A$ + "MUN2N77FEO;kd?BGJ];7WWC6dgEf34O__JlhIQ??#\L6>NnoG=6KhgGkh5_:"
    A$ = A$ + "NnAhhak1k0YTX_NEomANLGOIjD>>7F>_U]IHgiZL57G5f^bc>oLTJL9ZakFi"
    A$ = A$ + "[iDSg1fmWU>>^Jl7ioO^lPe3l=9`;P]9Z>kKgMK7RjUlhZEf78:7j>_k<GL:"
    A$ = A$ + "DjIGLTe[liLY;>3Y:]Z2KGiYb7O3K[D=fKFDnIOXCG17?J3a??ooc_GeLLAO"
    A$ = A$ + "h0EgK7_2o]o^LLFRhHGOEFn<9n8ihia7R_i_b?g_[`YOgH\igKJiFeha[hhk"
    A$ = A$ + ">F5N\dlHCbY=WN`F\Ze0BmMnYSEl>aak:kDQE=FQ717?g_GfgSX:O?ZXnNdD"
    A$ = A$ + ">^J]POULlZmX1>_fE2boCF?54nW]OQKjhl`gjE[9VjNQAE>WoFfAf[REU_Z`"
    A$ = A$ + "^kjg_[D=V;UMREn83elI^B>nTkbXh_17_Z]IEKV#bmMXbO:OAiA6SjEP9kc:"
    A$ = A$ + "l=Y9k=8dNXCFISlcba_Re__BjVC1Ko<TfLO9Mnh;Ej];7OBm4F?S>>>Zg[fo"
    A$ = A$ + "RX<HBjUk[iIcaG]7ebcE<koLD2VGa:>N<FdX\MWa]`BEiUJM5W>>`EbZi<GE"
    A$ = A$ + "fY6kmSTS[fcGZ`Qh^:\EmC72h\X_S^d;K7dGY?\5[_56?1f3=8Obc9>7fhoc"
    A$ = A$ + "[c9\13jc:Sll?_J>>fgdHmGc]??Bj`YgZa8Q_AU;o`_1kWRmW6>;1hIIKDT]"
    A$ = A$ + "c:6o82KN_OPeN;WN8_6Si?G?5?Ci[T#HbaOfFDX^4i[LMHNNlH_IT7C:kkFN"
    A$ = A$ + "UgaK<WVAVS4i5UOJ28k_[Z2cSRSWeaLJ]cnMSk?M2oVOOEIWb_8YNV:>#o#Z"
    A$ = A$ + "Wcm_T[[jl[ALknZ`ROWC75W];m^CgEW`gCQjP:mB5FEiF5>R=FVbg2M^jN3l"
    A$ = A$ + "8YcDn]:?Sb?nNQ1k==EI2778?YN>77LmedjDElcn;\9eQLj]khBofaAhLGEj"
    A$ = A$ + "mXC;33333333333333333333333333333333333333333333333333333333"
    A$ = A$ + "333333333333333333333333333333333333333333333333333333333333"
    A$ = A$ + "333333333333333333333333333333333333333333333333333333333333"
    A$ = A$ + "333333333333333333333333333333333333333333333333333333333333"
    A$ = A$ + "333333333333333333333333333333333333333333333333333333333333"
    A$ = A$ + "333333333333333333333333333333333333333333333333333333333333"
    A$ = A$ + "333333333333333333333333333333333333333333333333333333333333"
    A$ = A$ + "33333333333333333333333333333333So9nSoh?ngoeOmGBlWoiONh`6o=o"
    A$ = A$ + "kZg7QogomOoolgomOogoo#lgakdUnac[RcZl:W6AJgYgZd8S^bU>mahiPX>\"
    A$ = A$ + "C2N0h0C2;RgX^=;P_X2O4oao_:>1?[jmIYROgU6X]TB_EYAF2mZ:^[d7Sk37"
    A$ = A$ + "?G??9\inmhWo[oj_nO5_ol?ocSJk4_;7>ln\4?;#>Ofa1QnmKof_9eKEJTU#"
    A$ = A$ + "ghgKUnHljhh:NC`?nYOjWn?me]:\Al5QU[c3N07f8<o`?l3oGQm7oaODn\Xo"
    A$ = A$ + "NekcBl\0il9oNAlYNVB_Q>Raf`BT_Dmo3Xd7SG;7_RgXj7V3;N67_k`a[NFe"
    A$ = A$ + "k[deELl:mVK73>>j7V;32Aef82?d3caOOhhChHMLUYLLl]P8>`gi_B>>hP1#"
    A$ = A$ + "J4YGl>lg:H>^BGEi1XcAl2TeWllN[#Nnf6G;7_R;YN>o\XNYR[D5_:>8\G1h"
    A$ = A$ + "NZd_J\3:>^Jlh`V:inJkhhLkf#0GFaak63n4Q]EUae`aI>DVW]J^GHLkkbaS"
    A$ = A$ + "W[hP`V:ak6PSc:Aaa[\[2\=3BSZaS[6cM8ahDDLL>nIT]MI5`gG2Mh^cSNGi"
    A$ = A$ + "hX>J277fn0l[M6[B4o`nh:YbfQEBehOkhiEf><caig5SCYSS7?7]ODUolHfE"
    A$ = A$ + "`Ll[USG=F5egZEQ=Z?Z\?A77?dU`fMAhDl#U]3Ak:FjVSGT6ZaLPhZSScBNN"
    A$ = A$ + "U\>SnRaHQhaS?ALoh?>>^JNL1_EaaEciDmMmESE9d3\FXZg7S]MEj7RRSSh?"
    A$ = A$ + "#`kDm;GIcCeH_#I2h_LLafEi8LL?NlW;7OGkZL6K7Zh1M__BGk\[B`7SncIM"
    A$ = A$ + "De>:KOl\T7WRZm2KG5NnWXON<>65#K8g?nmTS_cL>EmM^ck[deELLehBRhW7"
    A$ = A$ + "k3hJ\TkW>J_DaaGa?mhaOnLLH;35_I7>>cED[U?\cXZodMn>PBGk\MHloES7"
    A$ = A$ + "2SmMEjbbZm[BgH>P=6kPihG;7G9Mf7_RSGI?`\<eVTQ4mUN6>NUM?P4jZZ]9"
    A$ = A$ + "6g#WL6>^a[WSSnlfUSSeY\Z^?o]n:K?OTd?457OeNK4]g>27_Coa_kaLlj#D"
    A$ = A$ + "gW]e#6ieH4lfLHcm3SmW7NFfNPhk]hknH^Dlh=a_G5FHKW^d?gfAUOca?B3E"
    A$ = A$ + "N<Wn1bQWAlk`6oEo^ih_NTGo65`H5DQ5li:KUU]A03fN3ZmbdABo>kSc]McY"
    A$ = A$ + "1hQ\N`]OZVKHELK>n[7HmGZ`Z`2^GekPOObLY#OoI4?k\Yo>jBGIA5FE6Vc3"
    A$ = A$ + "666666666666666_>L4O=2NFNoic[1GgNfo:eo\N<MM0kd=Pli33n:U:oeB5"
    A$ = A$ + "Zle;WYl_c7\D5VZl]B?jZCIO6CEieM3kj[AjF[iLiFUDMNF>:bjcdbiEk=P#"
    A$ = A$ + "#mkAGKmEnQU:O=cZboZeC>G^bQAUGj2OElf]6\gimI`>nJTE[5M8`f]E2RON"
    A$ = A$ + "=K>2bkY#\>jC>;0ChhCFkm^f[[B3dO`^njUE[e_JOXQh<[ChICZC[>KCI9_f"
    A$ = A$ + "bg1Nm:>NeNgP;?DkCJD>cbZccB6C7GCFgaN?Lbj0R_9ceIic5Yb?`DUOoUOi"
    A$ = A$ + "Gn7a_j<PXl3;HmniWg]gIbj\j\IXRC\?ab_Kenj<dO^n3?KEieMM=H?;7Gm\"
    A$ = A$ + "^j8eJdGe7hZaeT;cimgb4D]g\DlYZl;fO1ieNlZme<ib?^_HFoDkaHlK:>n>"
    A$ = A$ + "k_NenDnMHO6Lfj3\7RhmnTjm17DMNFDLlES[9gFXJO[dQ:n5fKDCihLjNeWG"
    A$ = A$ + "TLiGVSGaiDWcD<WB>M^2>>:_^[WIdMZ?Rl0;h\Xckc8F0GMbl2cLlZnVceSi"
    A$ = A$ + "c;f>UaEiMTNZcTcSVS[6352;77AJcciFaKEaK777kY<NOIbQ5ekgANmAihLo"
    A$ = A$ + "8lkUgg#ERJ<fCm54ii^W[_Ra3SnC^RlnSRS[fk^Zi^X4EO<li\[J<f#haide"
    A$ = A$ + "?n4>NF^CLjcbaIn5o^8N[TLKQc`aceGHlAH<W<Z\[ecVS[fk^k`ai`bSa^j<"
    A$ = A$ + "8YT>>>;EWKEnm^[mWO4>N0fFD#ZhhP_Uko2Q=_V5i_oRbFPlI48Gn_R_DIOV"
    A$ = A$ + "GEoh1_2cQQiH8?cBeLnidBMFnZlOMWUSW][2c?NGihAiGfoR4iKnmaHdD_?g"
    A$ = A$ + "o5[;P_PbBf>70id<\W1NNloE26O0g?c[NlhkFncmMPig`?S;oEc1m8ci\b7>"
    A$ = A$ + "Vak>7W[OQoTOjk_b^:XlUihX_9P<gS]I8JoY>SHLJnZihZnak:oj6[#F7ESY"
    A$ = A$ + "QU[TSW][bW677O_Mjk?]Mn:kZ<aVQZno_KLLeh[>;7GaAE[OcEba_Re\nA2n"
    A$ = A$ + "kHhl[c?CEO4ia`V6I1fa[CVZKZee9cOj\IHei4K7>>c;DS=C=oR0[:CcSAGm"
    A$ = A$ + "LFZn>`4O7YZ]9B7EmGegFj\[BeLN^;HeN[8o=YEQ5eiMbIhhIN7B[M]IhD>^"
    A$ = A$ + "JL\IYkk8C;WVbaEnH[ZgGaakJS=I_el^caklI8in:aL>[2Kf?cg9WIn9Ef<l"
    A$ = A$ + "A`aAHZl3cic>?_WEj:CccEK:7_JNlEkO;n_S`Z\?NUo[9Gf<QSo^<^5l==0f"
    A$ = A$ + "o70m?_>1lJhWi_lLob[maAih`FEifC<oJWff:olRJ^CLn=WGkn>2GVZl9<[l"
    A$ = A$ + "e<Xl5fA9G>RnMbnT54Fl<TV8?GUGSbaLn3f6Pe94V9c[o^Q>O62[kAia4OMR"
    A$ = A$ + "jg?3778[WWeG<`f0Caa[b_IOYbI:C[d1nMZ\GGenSRok8\ila:oGC^m<2;g6"
    A$ = A$ + "_SWLG1g>][><Zkk2KeLo>kJRUCccVO[lc:Z`UCgMnnaZbdYnjUZ`YN>o<dG#"
    A$ = A$ + "GN=W7AnKU>MUe[6666666666666666666666666666666666666666666666"
    A$ = A$ + "66666OGXk^CjAMg^\cMVd^g_B[2k^?WCo^bThgike:LOoLT`bjDGmgWhMDeE"
    A$ = A$ + "bgj4hGa_bdLUONJjm[4l72ih^cgIXR_Zkd:4_:o:5WOjl_4Lig>QUUMZk>CI"
    A$ = A$ + "hg67oAD6<aGVEaaDB^o_:1n_157GioLZNNfOK\CKFL>Qg9\\T?KfM]EPPbUM"
    A$ = A$ + ";3odihAi1kG`2IU_Eh<LlX_;UNX^WBDQ5l>Uo=62l1BEgc7\PkR1>mEn?4V["
    A$ = A$ + "5QQO?LoQ\CHI9kS9hg9NVb?eZJGgE6NGhU?J>^Z>_bOSL5Ll>o7IEM1o\8\:"
    A$ = A$ + "On77OCmmXhi<WTmA91DUELN4nGWYQEMOddaak:3W4FD6n9jc8>Z_e7Ucii=Y"
    A$ = A$ + "PJL>kDo<aOZFaail6joUC75gCE>Tm[Q7QSGE^^CH?27W;Gj:3o4k;o<LlES7"
    A$ = A$ + "4agEbaEOW5L2EOnI1n7k\XlU\hiZkBCEi0;g=>n>UQVS[k7_b^D1PoB<GfMV"
    A$ = A$ + "j7F#o`EL5EmXbOR39oKlkSadcne#F`hjHoDhMQScB^<dLL]_9\b?nEiok^Zj"
    A$ = A$ + "7d7<B3NlgEO?^SSWSSZgWWGBGI5GfX2k[TScUQVS_oHERbg[\OLegIamc1on"
    A$ = A$ + "lcRdFaYboMNl=<oM7>>j7?dGL?KDI[Tk`HE#IhIm;ZOSLlWaL>ShTi?ZkL[:"
    A$ = A$ + "KeDegM5gSk[S55_5[edT`nXihEUQ7egFo9caaH^cmCa#a;N4fEA=_AFPMADg"
    A$ = A$ + ";<Zl^b^e7US[^cTZ2k[PSKK7NO6?nIhh8OD5f:KRcU1<?#5^k\MEnf]MHDoZ"
    A$ = A$ + "FOo>>>OG2X#gJOS_7LVj7eJkXFGAX?:9d=5WS;3H>^:=ZFkX9Q]b6<il6G7Q"
    A$ = A$ + "ke1EnaLlIkGU>>n^XR3Y:cWFoXFWSMjS<oKZbT^bPEi7\_0ZRkZ`F9H>>[V?"
    A$ = A$ + "4J[H>njmMHN\8?3>NfN]C[ODOkFaaacEbAihMiYLNYJL6EQ]BbSM^jNh:K?`"
    A$ = A$ + "Mf?4ORLLnnN:3NLfGenE1f^2UeI`g3=aLmcQ=nM\o`bgUCHO<U37h1ZeR9\A"
    A$ = A$ + "6OGLU7;2[Ohmj:3`M55#eM5F0N^iZ`Z^[Xcj2R?<F#>_3PjhEUQOZLlLINgL"
    A$ = A$ + "6_bmM8#VGY#fN]LHAm:o\:NEecEY;bW:mKEklZlTbfcC3KEi3b3QnFM?LU]7"
    A$ = A$ + "hdb`7=GkE1eMUD6?Rd\;mhdDmk[diLl\kckd_9i[ZiKOT`>]<R_gahfDC;3O"
    A$ = A$ + "4ee66666666666666666_WXc?2YfK\75Mnb6\N7lcRgS3Kf7TXdmEjA\^7h<"
    A$ = A$ + "<eM^CW6fYj0bOihQmM=MU?O3nkW75Vj;J>;jF3oZmUElN:OOBU^_BO3NBW?l"
    A$ = A$ + "9kWAV6f9j#gN;9WOF]7DNDn^\_I>>>cHGajOeaaAohlcDk;?\^9H=ggAOGaQ"
    A$ = A$ + "bm1?U_]B7V\WPVVVa_keYilLlli#>j[jZf[:<7?W>PcVUEkM`:>NUnZlo:Zc"
    A$ = A$ + "NOl^lN1C5F\OeFY3:m?N>o\HM:I>Nl<eIehCm<kl\hhimHgE^O\Zf3Pim9Rj"
    A$ = A$ + "g_:>n>W74enAOg`2M#]WaEieX=dT`Rm#eMPkl^caaniCMVS_:O7D>MDkSfG5"
    A$ = A$ + "7_j<e\CHgUSGUGELllN7chHLL<NBeLi_ZcZ<>GaH?N>M?Po=aaESE9__Q_cl"
    A$ = A$ + "Zk<7W[_DLe[`g1U5HG]9ekG=77kEkln8o^`aI1c?bLl[USG]W;?kIEV[kNEL"
    A$ = A$ + "L4FF_EQUUW977c7fLlccaIkM`Le[bg1UC7Uo8nIg?NXc`7AX\[bMH\:`?<n9"
    A$ = A$ + "OF6N6LLUMEfUS_cL>cm;=YNoA?NlM2k[H>Wh<eMgiE_3Ll>kZ0KWGMnDDmoo"
    A$ = A$ + "^HGUkDohMf>lCd_]m\ih[\9nEhkPbQafEaf>l^aaic;^2ijQ[RS3YbO71A]g"
    A$ = A$ + ">hg_ROZFCcZ`b?We1EnZboOK>nmRS_;^3LlEcU8OfeGI7_:k<bj0_72DiSZd"
    A$ = A$ + "dLl_K>>\kCUXh2Mg7Jii0Si7D5f\MZWX3EkQAf7=I>nS1\O42UiG=7WmM#\O"
    A$ = A$ + "[Yjgagfia15j7\SVb78e]NPPk0`nWTll8F5FXOCdQLLUoV16O4:3b_O0<onE"
    A$ = A$ + "i;SN`fbkZihI>C5OZkg[VS;\]NelNELQ`V4Ea7[?C3k4M8\kGUon9[WLjYJC"
    A$ = A$ + "H>nnhIi?IDfJLb_GIWb0MnCX>K\1^SJ>bk6fYj#locaSJOb>9oIK7JHHHHHH"
    A$ = A$ + "HHHHHHHHHHl8AWo3jAi;?jB?eI[[:lEQ1a1kCR>JnmXnAXLHDoV:_bj<[O?;"
    A$ = A$ + "o\dW4fagOLEH7oTCgmPMfOoT5D7b[;ndl;c?>RO4ReAELXJCe]7I0oTOV:n?"
    A$ = A$ + "SOFjKSSGEGl8ihIoTCWnQeTQihH?2>I_OXTLoL7e?2ajHg_e]g<idjIhWUnd"
    A$ = A$ + "ihZmiD4V[LMmEkWJ^^5W;3EO#ijaH=]SekSUhmimkGeNmFa1Qo;Q3KUO4ZJ_"
    A$ = A$ + "56jHlk:A]gZhbQW]OFjKQScW5PlnTnAaa[>[;Z_=ce_ZnVAJUU:>>WO?BH[n"
    A$ = A$ + "n#X3EmS?QSck16caO\LL^<IUO4R7Kk^LL^^3mYajUR3QakTU797W3;bSak0m"
    A$ = A$ + "#U_WbaOFW7`_5>>GOQknG^<IR<iL:X6[2fKNi`2k801W]PZn9W>FU7177iWl"
    A$ = A$ + "ihXS7FaaO6nIYLIlSbFJg9>>;im`OEohEfj2]G`NO]RScBnl7`LLEOcESgEM"
    A$ = A$ + "Weo\hhifGPoM4>NFNDnIY_I>>nNOenZ6XJ?CG]GWkhhAiON_CceW<77WCR9b"
    A$ = A$ + "cTS[6O>oMUMih?SnaEjdW67G=F5LfGhlm4IBohlHEPObA=oZZa]WUZf#?C>^"
    A$ = A$ + "JlCEjnDkZlXlcBicNdWhI<JjL>EmQ?AV>NLEm_ZO?Ek?FO[\Sg[VS[2cMb^:"
    A$ = A$ + "OZnI^cHk#doBgicAe_`D>^b^g\Pi3cekZ_io\ihilYbgELg\[bWjI<j<f>4h"
    A$ = A$ + "\S7_RS?iK5:m5Y5;?K>>KWcc`aAiaSHlhOjh:hhlIAGQS`aEfAC=G>57G=FQ"
    A$ = A$ + ":kH[Vg=jkT3K5_GaOc]c#i47V757OEn3BlKOKfEi8LlMaD>NeJV`2c5ESA?4"
    A$ = A$ + "5GD98ofaMHMBaOci9Ek>ca=7WU:>Nel#ijm9LLfWnLDo84?oHelUO6LLeHTH"
    A$ = A$ + "M8o^ORf>\bo15oOH?Y[fW2=e?i4oKf_lPi_2M>oLH7VLhbi1Dg5oFUonQmY9"
    A$ = A$ + "il;J7bcU>caca;WW`OSe[\b>M7e?;aieLNJUOF2cUmCefQ0\=ZDg]2GmLDVj"
    A$ = A$ + "WLZVoZji<_CU>Zl;3Nm0>ZO4RcCX]R:oT1G>`fdZjg?SOFjCo>ZXbo1YNfEf"
    A$ = A$ + "^R]GedW=mm[b3MnkW^l9h\ZiB[Rgh_c?SokLnY[\QCWZO_;?]b77]BW<<<<<"
    A$ = A$ + "<<<<<<<<<<<<nn`cb?2=9Mjnm\oDIElaY=NNn\;ai]Zh2aGW^Y>gZ6g7\j^4"
    A$ = A$ + "oIV>M2O6X[R?f7i\jL7Q`eU^[RW#n4g[7O:HeNfA]F7?ZdIU4LB\n4MkG:\6"
    A$ = A$ + "=[^Ce21aGGJZf7T\TmmA6gK>>kgJD[UlS:MDLEn\6PeIW?OLI1g?dZmE=cWE"
    A$ = A$ + "kG:`]3PmN57GlMI?BGeMORamRSWgKYEkGR7Ej`RRKQmO1OVmIN[jM[fSSEYM"
    A$ = A$ + "6CS;hS]<^oLL\WdPOI3Q??g]:X67oTdAacDLlhMhmmLFZfcYh\oZ^;0[hhMO"
    A$ = A$ + "CXZmR7cbmWSS_Ocfb0LlERbgX>9MHA=F5EOn1W:7>L>?Ea9Vk:_gmDY=6CO4"
    A$ = A$ + "?lhQDSEAeNi^Goo=bacBUo3NU_32n1dLooCBW>1We<dgJFhaWW?3JEf3Q?_e"
    A$ = A$ + "E2nVd>nnX\l^`3nFihhKjZmJ9g?HenFNWdYB`If:OV0b2KgS\OR3];Eb4K7R"
    A$ = A$ + "f27eg7Uggj6g3>>kgJhaG>I\:hMkj7GU>\`m37Q5WU7>Llc`hlc]9Eld:>>K"
    A$ = A$ + "cWEfE1fl1j2\7Zihg?>^bN7kbaW>NlSHG5U]ZEf27We;`g`I4Se3<fLEJ_[M"
    A$ = A$ + "E2NO^\:on_3LQ_=>NfN7ij=hK91WAQlhVg9MDl<UMEVd>Ca13MPm=A#?DYmA"
    A$ = A$ + "\[BTODWEYg5n`g47Oeigl\S7GU>:NfAihZiBZ6go:>>d]MlKjVCO_ihIA=V3"
    A$ = A$ + "0n\=FQMB75?CaaI9d5N\:H\dLhRaCTU#_DaIFfUSc_[ak97oAT>\Xhh:Oa\b"
    A$ = A$ + "F;HnY[\iGejLV5caoLihC7gbEU>\D=G?EhZNNd_m4o0DWLVm5PWci[7\O4Bi"
    A$ = A$ + "GM^2>nTdQm5>8]klI#8L:o34NO<^ZlLRIo04J7Z6_EUNXlmAAHcni8ca_?0k"
    A$ = A$ + "aSEcMlIT>lcSWYli#Z`EmlXoLVG3TWg#gLX[d3NngH>WlkJlJaAm[>?RdIbc"
    A$ = A$ + "ZlI#E?78hjMn1XMe]YniXWMmYQQQQQQQQQQQQQQQQQQQQA?faOCM50k=GeiS"
    A$ = A$ + "[:<hiLh[R[EQ;WFE_GfO5emKZb_Mb[1`m4>O^_WT>C;[De1EYeW6Vj_Y^:<i"
    A$ = A$ + "LWaQAMVVAmg:A5^LJE]GFbl2><LkaZb]9ie^kE;L6ojBWYUE[b_LnjC2Ml4N"
    A$ = A$ + "oaN5Xk<4SeMDE_aki:dol:A5^\ooZkm#HHM>_oGjlg079_b2loFEY3olZb:E"
    A$ = A$ + "HEYe[R7n\hhEnKZ757GiG9DWU=eNl6l\ZnccW7CV;Smd2c5HOf22CeM5J5g3"
    A$ = A$ + "kmV9iE>^SmDSJo4cgSh8MhWGEFE]g9Sj4nIGMoJ_J<aOCMUY7G?U5`=DLfZk"
    A$ = A$ + "JFDW`2_7YD_[j<1UooWUSG5gil:7g:^HenSGaa3YZ\Jbn3>nKnN]kCRSGi_Y"
    A$ = A$ + "hl;?oXYn:;n\jX>OmZna`_Yd]ELLhG\D_[Z?#>>Dl`9LLeh5DiEeHmSdTgk`"
    A$ = A$ + "k`a[:[VbaimRik>hlWbOCaLlEW]6D7`YUZNVoKEM1dU^j2FbkYE>n`kZJCW5"
    A$ = A$ + "LNZ_2>n>iEHWSlnhM7>NEIURSG]7hoDhhZbRZ_G[j7_cVMALYlERLIlTjR#D"
    A$ = A$ + "ckk\LlEj3hQ7QScjDENE=WFTOcnnPYS77_kdlKP?I>^ZOEN>XMigZkegZcOP"
    A$ = A$ + "JLVI1cGJRmB^J>>VOZ:L7QScL_Zl:hHEfGYbfQMLLFZhh:k:QnWnD6?^ZMm:"
    A$ = A$ + "o=EP9SE9:kinaEc_RWc[RS[B_[PSWU8<ll4SgmXLLEkIEN5j?>[5EieYLl^b"
    A$ = A$ + ":ca[mgD\?enXS7W[SEf9<Z;HM#MO#LF>>Kk1UobZR_^;7_;_RnE`m:T:LZlH"
    A$ = A$ + "57_[\jKL>WChZXn<kG?aH^ahhD8K?0lNC4dNReQZj]SbaEa9;H\J7QS?ADf#"
    A$ = A$ + "BEFYdg:>NGIUihJYbnQ1fIlhC6gHEi^bWZl<hh8NfUS[dGUXjcF=obMhhMUE"
    A$ = A$ + "OSLLEIQbOCEUWIOdP2X]QJ<fZeb6O78;ESUl<LLejoX6?\R7Vc3E[andlZJ\"
    A$ = A$ + "Q:KJ>USgEFYRgEU[OJLLTgDUUW=?cUU8NI^F4F57OEo=ZlB77O7K8OF>NGNM"
    A$ = A$ + "bgCP?UA5W:>ndeeE9OSLLllc^_EZhh\NPnCEYOGMQBWkhhC]I^:\IMEamDOS"
    A$ = A$ + "X:_ZjO5Bn^cH7>NGIU:]b?kCSSWm5lX\\cOCMVd:jg4fj=RCfgHQ_77?7kGR"
    A$ = A$ + "lLG1GXJ]:Di5`[#JWOGho\Da7k?\`n1P776dEHSKnICb[hihI:M2e;An8W>Z"
    A$ = A$ + "hLBIEfW`TSW?ae02PWWHl<dNVOnIA^N8gfAmLnI:mR[;jdI>nbL5>nD?_J>f"
    A$ = A$ + "Xmb:m_;_ZNNVO3mBU>ZgMEIU:]b?kCSScfm;Nf:o=eEUF8N[\1Y:mkd[Mn]^"
    A$ = A$ + "dIJH1Fio_F5g#7ShQoNAf^]Ee;EagZb3ff0GMm]QQQQQQQQQQQQQQQQQQQaM"
    A$ = A$ + "5HObV?[a\_TYjl\Yl]BEQ]:]ici<l1>[R_Zhl::?fEWboFW_k2UGCl=IMQAi"
    A$ = A$ + "[OVh[]jZokZKkn]>o4fM0Mk]f\^f9Io>CgnW=cCFiKXbUQCBg[0WAWH>CUDM"
    A$ = A$ + "^eDiYMlg?CmeFk`1^2o4f[6Zc;2;HmeF9Xn_[N1[Yf:N0:WFUfHo#ME[ilId"
    A$ = A$ + "Y\Nd5?X<X;<8^Vj3`VZkE[KIGLSeolXn9\G=7G]7Bil<dEFhWQlLgi`4kMRP"
    A$ = A$ + "W<ag#Qm02;icPdE\GaZj[J7MZK?>VmO1Ho^T3CU_9CaMDgAd:OSAU_f:NoLN"
    A$ = A$ + "^k\PRcD]jn=MeI4i:[G^J>>GoQl2;lcZfGZio6QYRSXdWZkDIeNBj\h:d9Ei"
    A$ = A$ + "ZJ_]=agT=i<dQWaaAechb:EJ`aMX?O:LLd?SbGK`b4>>joBEVYR_ZjJEHAI8"
    A$ = A$ + "O^oSa<]boME=Na[#WjhhH?jbmkFiKbZ>?FZWaY9jO_J_6Ga1^Bo4fMPS[6?>"
    A$ = A$ + "VK5__;II277co?7gG177eI:k5<I<\Ql<ihXl<?Nh\`Sg5nV<U?3R7[22[BoQ"
    A$ = A$ + "m?hm3L77Wo6kIlCHg1>NP>O7LN?FZnM^\Am=HnMANW5lLn\9XhCihGe^=Kg\"
    A$ = A$ + ":Xl7_WAWjhhIAegBD6YnNWZL?;AN<On6Vh[]hiMZh^lOce[iWo>`akZCbLXE"
    A$ = A$ + "2:[cRZm1>S<\Ti8Lo>EB^M8WWDS1FQELlYjdD>NXG:O51?6_ELLHWTliIHR_"
    A$ = A$ + "fZ[?>H?4FOo4hh1Zj7H577U;ZaPXhhMO[7mIRccEgg#hd5jidaZ\Koh[dYYf"
    A$ = A$ + "EAaMEfSZj<:cSE9R[\ODNU_fR[giho:mCHgUaSSc09nN6[_:O7E8Zn4i`5e7"
    A$ = A$ + "ZjT:>^Jn?Mm_VCgMihZbS[#WDLLnK:lkSiF`?CaaEci4_O^^DI3nhIIK7Zl_"
    A$ = A$ + "FEYIelBNg\[BX[Ao0:mU5VWY\W[B`LTDa7[?XOcZd^b^:X?c^cKfdaZ\[>ea"
    A$ = A$ + "aalgj6;3TMhh:mDUWbf^MJo1Wa?QM7ihZj_ELl^hC9MagA\QA5^ZaSOUf>4]"
    A$ = A$ + "5WjKb>37G=^OF?Vn=_?9>NX_ZeAK:?S[kRnDgImNDndFEJWU>>>O^OEXCo?R"
    A$ = A$ + ">Q_Qdmk\4jZbFhk`aEnHk:k^G]W3`gn>[O2;;MkCVW1PMfjTMj;]JN9\XlIW"
    A$ = A$ + "\PadLD>nEdVo8jdAhhPgaQK7>>ggTBHoVBegKDmol^ba34j#5?7k7TYLLFjF"
    A$ = A$ + "37EI9ThiIOWCW<IL;G1?OZ>EIgULlXb3CfC#MLl^aiWmeFMSIZRScf_WCOU^"
    A$ = A$ + "Wc3ii0lZ#N?Ta[QOV3]JMQIoD5RSX]RjialKSnObc5DigNhh=S[VS7h<jDTg"
    A$ = A$ + "HOlE6H>biO3c7Um=I:o_E>mc?3SmMBM9hK:O7FN<fImH7o46GNL7hhXNU;;h"
    A$ = A$ + "fm1jVcFEH#n[jiI^J6AiGfgiX2cSPSO5j4g6D5?ZlPJ^blc0OFm\>MG]_33l"
    A$ = A$ + "XlCHZjjk0RbPLk#FgHK`YR3><PCDmlLo?EY[jmGY7W5WEWf5AlYl1FkjG\#l"
    A$ = A$ + "TemXN=GN_:?LTlFWO2[:]=<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
    A$ = A$ + "<<<<<<<<<<<<<0PoBXk>_jETNEnLfZO?O_Q`?Obm#eddW3?l=G[^W\Z`>g]E"
    A$ = A$ + "EQ]CWQn^KnoC1C_c[NfYgTk>;U?`AU6[li9ClY[EQ_c7e`gCFEHbMK5bcEQ5"
    A$ = A$ + "o^BGZlASLJlXhH_B\cMNec>mVLgIYhh:Om1lU2[R?nLoF9Mg5DZ`^Z<LR?I3"
    A$ = A$ + "]O[2;b3knKIiC\oLUo#R[KEn<]WAj=i^cJbM9B8`OW`a7jO7nCQ<7ObM1Ub7"
    A$ = A$ + "o`nFMl\>O7#emR6WnQNFe?1l3<:YcG>aaaEEGOWih<G0U?GAoikTNZnXce5`"
    A$ = A$ + "OT`QAEG2n;GOfi3#Dl>>Mfa?FeaMVLgFEU?P4aCEOeMnc_\PbT7U_lh>`aAO"
    A$ = A$ + "JZklZLnVWOU2Zab_CjU3;R?V3DeG7W6MLllm#5W7cBeM15;hk#`GNcnaZcba"
    A$ = A$ + "EiIl>8?>e_CFaaoTj;OWklZ^jOUXV3c>Y7O7NDMgI]jn\YRS[^7ZjJ?b_OeM"
    A$ = A$ + "15Bc\_Rl8LlZlQjiX<1aSjkUO[Ll0C_c[bSE1mSGI;:`9IoOo>Ygdk>[ELl8"
    A$ = A$ + "=ES[Q3cZb5>N1_Yb^:X=NUO\ZSScaCn^ISeSLo6PK?US[J7o9ba1WE9[\MHW"
    A$ = A$ + "ol[[o[9Y7GfcLLh;9GeO;Zgj\5YR3>m^P:ng>NnEIk`:>^JliZkM557WULJL"
    A$ = A$ + "WhWG5DOg?TMJCT5<FkZb[^dCiKh?bLCcQS[gikQ:dG_Z=6b;\NV73GlM^ZaR"
    A$ = A$ + "]J>LC7[26W?WoHYZ\ZB#Lcndc?1X^WTZ^c[fUSG=Nl9YWZ>ZZODUm3Ee_EgY"
    A$ = A$ + "2I0mLWk2ZPKSl3l=aLKGNn\ChhEf0M27_JLE\l>hSI?;Df>Xj>_:ccajRcg]"
    A$ = A$ + "YIPbelHEVVNEf7;;h>MP3;W6XN[J\WIkZDaiD2Vg;o<`ic2\GdIihZaZ`]YP"
    A$ = A$ + "odW3c4>NggMoDhhMgiEZln^S7OJj5QMUDIWQZjaMVOe>g5DI1S;YjK9Em?NF"
    A$ = A$ + ">>KGeMihgEniSPS[FcG\VNZi>R`_2kVNLhj^k\Z6G?Z_[hhLhj:G`gFFMWHQ"
    A$ = A$ + "n#igWG7EVCZFCGEk\:>N^?1dg37V_E>n>giEGam#gddKWk>[:KD72JONF>>j"
    A$ = A$ + "cGeoLWmJ21SYI7>NU>Faac]oEmKl=ca3<m>_jZ^[5WTN\d]O;jh_PK^jNOU7"
    A$ = A$ + "gb>g5D:kG29Kc_:>nTm;En>[BaOc?C=ol_M>NPln^SGCm7QmTFUN8]#meZk>"
    A$ = A$ + ";nil_SmbDnnMB5>T^Eg5D`>#Zg;WObci68?WcLlW_S\Z^CYhigT]Q3NO<g6E"
    A$ = A$ + "lEE>m=aa1OJbMNec<mZ\YEec[V3LFokVW<W?gi^P:\WBem1Een><[;X=BU^Q"
    A$ = A$ + "h1j07F^MU:nZ:oN6l[k6G?S7]]BkB?fNT[^k\Z\SIGLF5^Z`fmLlKC;oDiSY"
    A$ = A$ + "j67fh_c?Sok^bY7Im[QQQQQQQQQQQQQaW>Dn\S7Aj<9=HOE2F7#>LEn;ULH?"
    A$ = A$ + "R?EYCOEj]:>idMBLgi3DZRG>o^CN5aE^LV3GElmXh7?BXf_4?RdQUEjAW>E]"
    A$ = A$ + "fRibo^efLEnLRoMQcC8]idE5olJYfi3Dbn6Y^lk4o1CGhh`f5^71ohIbaaNG"
    A$ = A$ + "kZGk7FbYA`KF]GFbL[^mQ5\;m:>>2oTbT\0KPciYZmTUZ\D]O1ZFCO\fTEn7"
    A$ = A$ + "8N?[d5V9]kkl7AMiYg=>nE^7EZhhieICeg7GWW?_6lnm;ooajlYfoRZlZ:O>"
    A$ = A$ + "ao^`kmm#`J]GU?[hhEkYT#`N;CaibkeV:m5_o_l;oR\m7Gg4?;2KUo6;_O>O"
    A$ = A$ + "FLd?A>^ZO=XGC>G4ZmQEGLbm9a_;_?ZDjA8ZljIihAJcnVXEjBFOciAEjb_;"
    A$ = A$ + "fg;Ejhkhn0H7>>fO\[`STS[fciLMAeiI^:>ilJnMaLbFY78\<WiXLlLH#JE]"
    A$ = A$ + "W8ii?Di?HVbaS`[jc7a3OfYnThhC?S<?C>NlMEEMaIhhCm_;:Q?cU7USWeO4"
    A$ = A$ + "WELLeiE=;EkeNdO`:ohD8AilkdH`_Rnak\]TZM>;7USca57^ZnQ>37GegLUo"
    A$ = A$ + "5TiA7US?agYdeW[:nEYKP9LlLnk>cW?;77Hen0EE_bbAihlgUI^1VSUZ_]YL"
    A$ = A$ + "LnmH>>l_;CTSbaESgWo6QRS3K;Y2Wjk0\PfdClgCgE>mIhhC7[bS\OLeL<in"
    A$ = A$ + "M?37O7okBFZh4WQS_RC2^;WWZl7<WQSS_ASc[U7?noMj`bE`aAOF:N_Z?_S`"
    A$ = A$ + "aSaQbSiGa]ZlKbWQS_J<8`68\N<]oQS<WCP?E>NNMokf?o?baZ<A`I;KJLfi"
    A$ = A$ + "S<D2l_;Ll[Ngc`aif=<O^K]Sb2VWlE`aagXodG3XGehaW>6hZj^[RS[J_QaW"
    A$ = A$ + "bbIhhZij^:?E9G57oMl\3e=nSZk:7n<MEQ>>>4ffL8Mibn8>D[WWZoC5o0Oo"
    A$ = A$ + "QO6caInGWoMQCC5Ok<LlLlEe^BU?ESW6f?QOoYfZ9;ElR?9>nA#UPm<bZm[2"
    A$ = A$ + ">c^lkRnFb2J7^B#mI77_J=8ESK#5^7=7OR]F#JDI_c9_OFnThhGigWFEVFI_"
    A$ = A$ + "Z\o5AeW5h?lcGaaaHOH>NEIPjiZlQJn_7USWK75_gTi0d]n0ZiR7BV3<QSo^"
    A$ = A$ + "=^5hg=Dng3eMUbIJ;ei7D`HK`H4ieT80lM[8LIOVMfWX0kGWS7EJ2T7G5[WM"
    A$ = A$ + "ng5T^i`5fPIUO<1k?\^d8Gf7?GiWG`jGZ:_RoFU6QnU?cnib`^goAa;NVXKN"
    A$ = A$ + "TGINY:=0?3mOaoNl\Xn1lKUM\D?WO6S8<Zkd[Zb0ecEi3fO[X:;h`XBS8n2m"
    A$ = A$ + "SSO><kh?HRW7UUZjPE_oSRGl<#Womh:_W>k\iH>LHoA0TeQZg];^WTVMjIWo"
    A$ = A$ + "MIR^LVdPOfdlJGI5n=DnNTdi:i5666666666666666666666666666666666"
    A$ = A$ + "6666666666666Ilo5D1C%%h1"
    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

    temp& = _NewImage(_Width(v&) * ss, _Height(v&) * ss)
    _Dest temp&
    _PutImage (0, 0)-(_Width, _Height), v&
    _Display
    _Dest 0
    BASIMAGE1& = _CopyImage(temp&): _FreeImage v&
    _FreeImage temp&

End Function

Sub SaveAsBMP (filename As String)

    'This SUB adapted from SAVEIMAGE SUB from the QB64 wiki

    image& = _NewImage(_Width - (200 * ss), _Height, 32)
    _PutImage (0, 0), _Display, image&

    bytesperpixel& = _PixelSize(image&)
    'IF bytesperpixel& = 0 THEN PRINT "Text modes unsupported!": END
    If bytesperpixel& = 1 Then bpp& = 8 Else bpp& = 24
    x& = _Width(image&)
    y& = _Height(image&)
    b$ = "BM????QB64????" + MKL$(40) + MKL$(x&) + MKL$(y&) + MKI$(1) + MKI$(bpp&) + MKL$(0) + "????" + String$(16, 0) 'partial BMP header info(???? to be filled later)
    If bytesperpixel& = 1 Then
        For c& = 0 To 255 ' read BGR color settings from JPG image + 1 byte spacer(CHR$(0))
            cv& = _PaletteColor(c&, image&) ' color attribute to read.
            b$ = b$ + Chr$(_Blue32(cv&)) + Chr$(_Green32(cv&)) + Chr$(_Red32(cv&)) + Chr$(0) 'spacer byte
        Next
    End If
    Mid$(b$, 11, 4) = MKL$(Len(b$)) ' image pixel data offset(BMP header)
    lastsource& = _Source
    _Source image&
    If ((x& * 3) Mod 4) Then padder$ = String$(4 - ((x& * 3) Mod 4), 0)
    For py& = y& - 1 To 0 Step -1 ' read JPG image pixel color data
        r$ = ""
        For px& = 0 To x& - 1
            c& = Point(px&, py&) 'POINT 32 bit values are large LONG values
            If bytesperpixel& = 1 Then r$ = r$ + Chr$(c&) Else r$ = r$ + Left$(MKL$(c&), 3)
        Next px&
        d$ = d$ + r$ + padder$
    Next py&
    _Source lastsource&
    Mid$(b$, 35, 4) = MKL$(Len(d$)) ' image size(BMP header)
    b$ = b$ + d$ ' total file data bytes to create file
    Mid$(b$, 3, 4) = MKL$(Len(b$)) ' size of data file(BMP header)
    If LCase$(Right$(filename$, 4)) <> ".bmp" Then ext$ = ".bmp"
    f& = FreeFile
    Open filename$ + ext$ For Output As #f&: Close #f& ' erases an existing file
    Open filename$ + ext$ For Binary As #f&
    Put #f&, , b$
    Close #f&

    _FreeImage image&

End Sub

Sub Smooth
    _Title "Antialiasing..."
    _Display
    Line (_Width - (200 * ss), 0)-(_Width - (200 * ss), _Height), _RGB(255, 255, 255), B
    For x = 0 To _Width - (201 * ss)
        For y = 0 To _Height - 1
            p1~& = Point(x, y)
            p2~& = Point(x + 1, y)
            p3~& = Point(x, y + 1)
            p4~& = Point(x + 1, y + 1)
            p5~& = Point(x - 1, y)
            p6~& = Point(x, y - 1)
            p7~& = Point(x - 1, y - 1)
            p8~& = Point(x - 1, y + 1)
            p9~& = Point(x + 1, y - 1)
            r = _Red32(p1~&) + _Red32(p2~&) + _Red32(p3~&) + _Red32(p4~&) + _Red32(p5~&) + _Red32(p6~&) + _Red32(p7~&) + _Red32(p8~&) + _Red32(p9~&)
            g = _Green32(p1~&) + _Green32(p2~&) + _Green32(p3~&) + _Green32(p4~&) + _Green32(p5~&) + _Green32(p6~&) + _Green32(p7~&) + _Green32(p8~&) + _Green32(p9~&)
            b = _Blue32(p1~&) + _Blue32(p2~&) + _Blue32(p3~&) + _Blue32(p4~&) + _Blue32(p5~&) + _Blue32(p6~&) + _Blue32(p7~&) + _Blue32(p8~&) + _Blue32(p9~&)
            PSet (x, y), _RGB(r / 9, g / 9, b / 9)
        Next
    Next
End Sub

Sub DrawMenu
    Line (_Width - (200 * ss), 0)-(_Width, _Height), _RGB(96, 96, 96), BF
    Line (_Width - (200 * ss), 0)-(_Width - (195 * ss), _Height), _RGB(164, 164, 164), BF
    _PutImage (_Width - (190 * ss), (10 * ss)), menu&

    Text _Width - (64 * ss), (69 * ss), (28 * ss), _RGB(0, 0, 0), Str$(quads)
    Text _Width - (66 * ss), (71 * ss), (28 * ss), _RGB(255, 255, 0), Str$(quads)

    Text _Width - (55 * ss), (319 * ss), (22 * ss), _RGB(0, 0, 0), Str$(brushsize)
    Text _Width - (57 * ss), (317 * ss), (22 * ss), _RGB(255, 255, 0), Str$(brushsize)

    Line (_Width - (160 * ss), (180 * ss))-(_Width - (40 * ss), (300 * ss)), _RGB(164, 164, 164), BF
    Line (_Width - (160 * ss), (180 * ss))-(_Width - (40 * ss), (300 * ss)), _RGB(255, 255, 255), B
    Circle (_Width - (100 * ss), (240 * ss)), brushsize * ss, _RGB(0, 0, 0)
    If brushsize > 1 Then Paint (_Width - (100 * ss), (240 * ss)), _RGB(0, 0, 0)

    If plasma = 1 Then
        Line (_Width - (35 * ss), (380 * ss))-(_Width - (10 * ss), (397 * ss)), _RGB(255, 0, 0), BF
        Text _Width - (33 * ss), 378 * ss, 22 * ss, _RGB(255, 255, 255), "PL"
    Else
        Line (_Width - (35 * ss), (380 * ss))-(_Width - (10 * ss), (397 * ss)), blk&, BF
    End If
    Line (_Width - (35 * ss), (405 * ss))-(_Width - (10 * ss), (421 * ss)), fill&, BF

    If randfill = 1 Then ran$ = "ON" Else ran$ = "OFF"
    Text _Width - (36 * ss), (431 * ss), (22 * ss), _RGB(0, 0, 0), ran$
    Text _Width - (38 * ss), (429 * ss), (22 * ss), _RGB(255, 255, 0), ran$

    If eraser = 1 Then er$ = "ON" Else er$ = "OFF"
    Text _Width - (76 * ss), (456 * ss), (22 * ss), _RGB(0, 0, 0), er$
    Text _Width - (78 * ss), (454 * ss), (22 * ss), _RGB(255, 255, 0), er$

End Sub


Function IBOX$ (txt$, limitnum, fg&, bg&, delay)

    'NOW USES text SUB to display text

    'This function either gets user input or shows info.

    'If limitnum is 0, it just shows info (message box)

    'text$: Your text to show
    'limitnum: how many letters of input to get
    'fg&: The Text color
    'bg&: Background color of box
    'delay: optional delay period for message box only
    '      (and If set at -1 then wait for a keypress)


    textsize = 22 * ss

    '=== Save whole screen
    Dim scr1 As _MEM, scr2 As _MEM
    scr1 = _MemImage(0): scr2 = _MemNew(scr1.SIZE)
    _MemCopy scr1, scr1.OFFSET, scr1.SIZE To scr2, scr2.OFFSET

    '=== find center x/y of screen
    y = Int(_Height / 2)
    x = Int((_Width - (200 * ss)) / 2)

    tl = (Len(txt$) + limitnum) 'total length of letter spacing used

    x1 = x - (Int(tl / 2) * (textsize / 2)) - textsize: y1 = y - textsize
    x2 = x + (Int(tl / 2) * (textsize / 2)) + textsize:: y2 = y + textsize

    Line (x1, y1)-(x2, y2), bg&, BF
    Line (x1, y1)-(x2, y2), fg&, B

    Text x1 + textsize, y1 + (textsize / 2), textsize, fg&, txt$
    _Display

    If limitnum = 0 Then
        If delay = -1 Then
            a$ = Input$(1)
        Else
            _Delay delay
        End If
        IBOX$ = ""
    Else

        entry$ = ""

        Do
            a$ = InKey$

            If a$ <> "" Then
                '=== Return exits with data
                If a$ = Chr$(13) Then IBOX$ = entry$: Exit Do
                '=== ESC cancels
                If a$ = Chr$(27) Then IBOX$ = "": Exit Do
                '=== Handle the backspace
                If a$ = Chr$(8) Then 'Backspace goes back a space
                    If Len(entry$) > 0 Then
                        entry$ = Mid$(entry$, 1, Len(entry$) - 1)
                    End If
                Else
                    'add letter entered, if not over limitnum
                    If Len(entry$) < limitnum Then
                        entry$ = entry$ + a$
                    End If
                End If
            End If

            Line (x1, y1)-(x2, y2), bg&, BF
            Line (x1, y1)-(x2, y2), fg&, B

            'Text x1 + textsize, y1 + (textsize / 2), textsize, fg&, txt$ + Space$(limitnum)
            If Timer * 2 Mod 2 Then
                Text x1 + textsize, y1 + (textsize / 2), textsize, fg&, txt$ + entry$ + Chr$(219)
            Else
                Text x1 + textsize, y1 + (textsize / 2), textsize, fg&, txt$ + entry$
            End If

            _Display
            _Limit 30

        Loop

    End If

    '=== Restore the whole screen
    _MemCopy scr2, scr2.OFFSET, scr2.SIZE To scr1, scr1.OFFSET
    _MemFree scr1: _MemFree scr2

End Function


Function NBOX$ (title$, txt$, limitnum, fg&, bg&)

    'This function gets numeric input only from user.

    'txt$: Your text to show
    'limitnum: how many letters of input to get
    'fg&: The Text color
    'bg&: Background color of box


    textsize = 22 * ss

    '=== Save whole screen
    Dim scr1 As _MEM, scr2 As _MEM
    scr1 = _MemImage(0): scr2 = _MemNew(scr1.SIZE)
    _MemCopy scr1, scr1.OFFSET, scr1.SIZE To scr2, scr2.OFFSET

    '=== find center x/y of screen
    y = Int(_Height / 2)
    x = Int((_Width - (200 * ss)) / 2)

    tl = (Len(txt$) + limitnum) 'total length of letter spacing used

    x1 = x - (Int(tl / 2) * (textsize / 2)) - textsize: y1 = y - textsize
    x2 = x + (Int(tl / 2) * (textsize / 2)) + textsize:: y2 = y + textsize

    If title$ <> "" Then
        Line (x1, y1 - textsize - (textsize / 3))-(x2, y1), fg&, BF
        Line (x1, y1 - textsize - (textsize / 3))-(x2, y1), bg&, B
        Text x1 + textsize, y1 - textsize, textsize, bg&, title$
    End If

    Line (x1, y1)-(x2, y2), bg&, BF
    Line (x1, y1)-(x2, y2), fg&, B

    Text x1 + textsize, y1 + (textsize / 2), textsize, fg&, txt$
    _Display

    entry$ = ""

    Do
        a$ = InKey$

        If a$ <> "" Then
            '=== Return exits with data
            If a$ = Chr$(13) Then NBOX$ = entry$: Exit Do
            '=== ESC cancels
            If a$ = Chr$(27) Then NBOX$ = "": Exit Do
            '=== Handle the backspace
            If a$ = Chr$(8) Then 'Backspace goes back a space
                If Len(entry$) > 0 Then
                    entry$ = Mid$(entry$, 1, Len(entry$) - 1)
                End If
            Else
                'add letter entered, if not over limitnum
                If Len(entry$) < limitnum Then
                    entry$ = entry$ + a$
                End If
            End If
        End If

        Line (x1, y1)-(x2, y2), bg&, BF
        Line (x1, y1)-(x2, y2), fg&, B

        'Text x1 + textsize, y1 + (textsize / 2), textsize, fg&, txt$ + Space$(limitnum)
        If Timer * 2 Mod 2 Then
            Text x1 + textsize, y1 + (textsize / 2), textsize, fg&, txt$ + entry$ + Chr$(219)
        Else
            Text x1 + textsize, y1 + (textsize / 2), textsize, fg&, txt$ + entry$
        End If

        _Display
        _Limit 30

    Loop


    '=== Restore the whole screen
    _MemCopy scr2, scr2.OFFSET, scr2.SIZE To scr1, scr1.OFFSET
    _MemFree scr1: _MemFree scr2

End Function


Sub fc (cx As Integer, cy As Integer, radius As Integer, clr~&, grad)
    If radius < 1 Then Exit Sub ' safety bail
    If grad = 1 Then
        red = _Red32(clr~&)
        grn = _Green32(clr~&)
        blu = _Blue32(clr~&)
        alpha = _Alpha32(clr~&)
    End If
    r2 = radius * radius
    For y = -radius To radius
        x = Abs(Sqr(r2 - y * y))
        ' If doing gradient
        If grad = 1 Then
            For i = -x To x
                dis = Sqr(i * i + y * y) / radius
                red2 = red * (1 - dis) + (red / 2) * dis
                grn2 = grn * (1 - dis) + (grn / 2) * dis
                blu2 = blu * (1 - dis) + (blu / 2) * dis
                clr2~& = _RGBA(red2, grn2, blu2, alpha)
                Line (cx + i, cy + y)-(cx + i, cy + y), clr2~&, BF
            Next
        Else
            Line (cx - x, cy + y)-(cx + x, cy + y), clr~&, BF
        End If
    Next
End Sub


Sub Negative
    _Title "Negative..."
    For x = 0 To _Width - (200 * ss)
        For y = 0 To _Height
            p~& = Point(x, y)
            PSet (x, y), _RGB(255 - _Red32(p~&), 255 - _Green32(p~&), 255 - _Blue32(p~&))
        Next
    Next
End Sub

Sub Darker
    'darkens image 10%
    _Title "Darken..."
    For x = 0 To _Width - (200 * ss)
        For y = 0 To _Height
            p~& = Point(x, y)
            PSet (x, y), _RGB(_Red32(p~&) * .9, _Green32(p~&) * .9, _Blue32(p~&) * .9)
        Next
    Next
End Sub

Sub Brighter
    'brightens image 10% more
    _Title "Brighten..."
    For x = 0 To _Width - (200 * ss)
        For y = 0 To _Height - 1
            p~& = Point(x, y)
            r = _Red32(p~&) * 1.1
            g = _Green32(p~&) * 1.1
            b = _Blue32(p~&) * 1.1
            PSet (x, y), _RGB(r, g, b)
        Next
    Next
End Sub

Sub Greyscale
    _Title "Greyscale..."
    For x = 0 To _Width - (200 * ss)
        For y = 0 To _Height
            p~& = Point(x, y)
            g = (_Red32(p~&) + _Blue32(p~&) + _Green(p~&)) / 3
            PSet (x, y), _RGB(g, g, g)
        Next
    Next
End Sub

Sub SepiaTone
    _Title "Sepia Tone..."
    For x = 0 To _Width - (200 * ss)
        For y = 0 To _Height
            p~& = Point(x, y)
            r = _Red32(p~&)
            g = _Green32(p~&)
            b = _Blue32(p~&)
            r2 = Int((r * .393) + (g * .769) + (b * .189))
            g2 = Int((r * .349) + (g * .686) + (b * .168))
            b2 = Int((r * .272) + (g * .534) + (b * .131))
            PSet (x, y), _RGB(r2, g2, b2)
        Next
    Next
End Sub


Sub Vintage
    _Title "Vintage..."
    For x = 0 To _Width - (200 * ss)
        For y = 0 To _Height
            p~& = Point(x, y)
            r = _Red32(p~&)
            g = _Green32(p~&)
            b = _Blue32(p~&)
            'warm up colors
            r = (r + 40): g = (g + 20): b = (b - 10)
            dis = Sqr((x - (_Width - (200 * ss)) / 2) ^ 2 + (y - _Height / 2) ^ 2)
            v = 255 - (dis / ((_Width - (200 * ss)) / 2) * 255)
            r = r * (v / 255): g = g * (v / 255): b = b * (v / 255)
            PSet (x, y), _RGB(r, g, b)
        Next
    Next
End Sub



Sub Pixelate (blocksize)
    _Title "Pixelate..."
    For x = 0 To _Width - (200 * ss) Step blocksize
        For y = 0 To _Height Step blocksize
            r = 0: g = 0: b = 0
            count = 0
            For bx = 0 To blocksize - 1
                For by = 0 To blocksize - 1
                    If x + bx < _Width And y + by < _Height Then
                        p~& = Point(x + bx, y + by)
                        r = r + _Red32(p~&)
                        g = g + _Green32(p~&)
                        b = b + _Blue32(p~&)
                        count = count + 1
                    End If
                Next
            Next
            If count > 0 Then
                r2 = r / count: g2 = g / count: b2 = b / count
                For bx = 0 To blocksize - 1
                    For by = 0 To blocksize - 1
                        If x + bx < _Width And y + by < _Height Then
                            PSet (x + bx, y + by), _RGB(r2, g2, b2)
                        End If
                    Next
                Next
            End If
        Next
    Next
End Sub

Sub Contrast (percent)
    _Title "Contrast..."
    If percent < 0 Then percent = 0
    If percent < 100 Then percent = percent / 100
    If percent >= 100 Then percent = (percent / 100)
    For x = 0 To _Width - (200 * ss)
        For y = 0 To _Height - 1
            p~& = Point(x, y)
            r = _Red32(p~&)
            g = _Green32(p~&)
            b = _Blue32(p~&)
            r2 = Int((r - 128) * percent + 128)
            g2 = Int((g - 128) * percent + 128)
            b2 = Int((b - 128) * percent + 128)
            PSet (x, y), _RGB(r2, g2, b2)
        Next
    Next
End Sub

Sub Saturate (percent)
    _Title "Saturation..."
    If percent < 0 Then percent = 0
    If percent < 100 Then percent = percent / 100
    If percent >= 100 Then percent = (percent / 100)
    For x = 0 To _Width - (200 * ss)
        For y = 0 To _Height - 1
            p~& = Point(x, y)
            r = _Red32(p~&)
            g = _Green32(p~&)
            b = _Blue32(p~&)
            avg = Int((r + g + b) / 3)
            r = avg + (r - avg) * percent
            g = avg + (g - avg) * percent
            b = avg + (b - avg) * percent
            PSet (x, y), _RGB(r, g, b)
        Next
    Next
End Sub


Sub ColorTint (rt, gt, bt)
    _Title "Color Tint..."
    For x = 0 To _Width - (200 * ss)
        For y = 0 To _Height - 1
            p~& = Point(x, y)
            r = _Red32(p~&) + rt
            g = _Green32(p~&) + gt
            b = _Blue32(p~&) + bt
            PSet (x, y), _RGB(r, g, b)
        Next
    Next
End Sub