Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
QuadDraw revisited - drawing program work in progress
#34
(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

Find my programs here in Dav's QB64 Corner
Reply


Messages In This Thread
RE: QuadDraw revisited - drawing program work in progress - by Dav - 10-08-2024, 05:42 PM



Users browsing this thread: 2 Guest(s)