
                                                        .        .      ..    .


 i                  @                         n
 i                  @                         nn
 L             L    i                         dn
               L    i              n         n@d
 D             H    L              n         ni@                 n
 D             D    H              d          ii                 n
 W             D    D              @         @Li                 d      n
 &             W    D              i         iHL             n   @      n
 3             &    W              i         iDH             n   i      dn
 N             3    &              L         LDD       n     d   i      @n
 m             N    3              H          WD     n n     @   L      id
 S             m    N          n             D&W     n d     i   H      i@
n#             S    m          n   D         D3&     d @     i   D      Li
nM    3        #    S   n      d   W         WN3     @ i     L   D      Hi
dH    3        M    #   n      @   &         &mN     i i     H   W      DL
@f    n        H    M   d      i   3         3Sm     i L     D   &      DH
iY    n    n   f    H   @      i   N         N#      L H     D   3      W
ik    d    n   Y    f   i      L   m         mM#     H D     W   N      &D
LK    @    d   k    Y   i      H   S         SHM     D D     &   m     n3W
PAN iBfX   @   K    k   L      D   #         #fH     D W   n 3   S     nN&
AAA vC/I   i   n    K   H    PANkiBM         MYf     W &   n N   #     dm3
AAj c2TbP NkiBfX    n   D  AAAAAXvC         nHkY     & 3   d PANPAN   fXSN
Q5As7rioA AXvPANki fXPANkiBfXAAjPc2TbPA    NkiBfX    3PAN PANAAAAAAX  NkiBfX
vC/IIBQjA jPcAAAX  /IAAAXvC/IQ5As7rioAAA   AXPANkiBfX AAA AAAAAjAAj   AXvC/I
c2TbqJADQ As7AAjPc TbAAjPc2TbvC/IIBQjAAj   jPAAAXvC/IIAAj AAjQ5AQ5A  AjPc2Tb
7rioR7wAv /IIQ5As7 ioQ5As7rioc2TbqJADQ5A   AAAAjPc2TbHQ5A  5AvC/vC/  5As7rio
LcAAAjPcc TbqvC/II QjvC/IIBQj7rioR7wAvC/   /AQ5As7rio0vC/I C/c2Tc2T  C/IIBQj
ANEQ5As77r oRc2Tbq  Dc2TbqJADBwAF5As7c2T   TQvC/IIBQj/c2Tb 2T7ri7ri  2TbqJAD
AAXvC/IIBQ 487rioR7 A7rioR7wAvgHPj7+B7PA   BfX2TbqJADE7rio rioR7wAQ 7rioR7wA
AjPc2TbqJA  CBb+7yL 0zjt2SQO8uQyjPv+BzAA   C/IrioR7wAEfFtb7rioR7wAA u8c4SLcC
5As7rioR7wAF6irKLfX /gsR0BwAFuoJ/X1/h8AAjP 2TbioR7wAkzt9QAO97rioR7w  kC5xzye
HPj7+BntA H41i34AAD+AuEiC+8I3D7eFv TMwQ5As rioIIBgRGRAHGhoX9/QHBxLt  Lu+Qz5A
yjPv+BzIJ/gFBfX+CAsC+OEfFtb7Ig7e+wUIDuvC/ IBQjxCQz76ff2AO7sDPbdwiIO5/gc3CTkA
J/X1/h8A5yTt5yfn6jPqykzt9QAO9R/IKgDZCxc2TbqJADW9f4cC+HvEd4w3i3+3A4ZzQgRDt4fA
AOLc0W+PUk5+0t6gIF7xYA+/UT7wjtDLc0W+PU7rioR7wAF7xYA+/UT7wjtDgD1CwjtBQLyFiLcr
CAANkiBfX4Ag4O7wAiyCfTIvICBRHvAANkiBfX4Ag4O7wAiyCfTIvICBRHvAPsf3hH76iLeGRy0g
AAAAXvC/IIBQj48iTe7Rz4HOcAHPj76AAXvC/IIBQj48iTe7Rz4HOcAHP 76vgk+B/FAj7QAPgzA
AAAjPc2TbqJADKCBb+7yL70zjt2SQO8AjPc2TbqJADK Bb+7yL70zjt2SQO8uQw3ir40yfQExMAD
EQ5As7rioR7wAF6irKLfX1/gsR0BwAF5As7rioR7wAF6irKLfX1/gsR0BwAFuoZzSfqERPk7TDCt
EEQLeLe3tC/If 8gTJOr+5As7rioR7wAF6irKLfX1/gsR0BwAFuoZzSfqERPk7TDCQd4O5wIk7+3
MMAveAu8c9fITAgjWM+f4HPj7+BntABH41i34AAD+AuEiC+8I3D7eFvXTMwgA5wUZyD7WLdkZH7E
AAAsAAAjZNuQLBdYIDgIfyjPv+BzIJ/gFBfX+CAsC+OEfFtb7Ig7e+wUIDu8c4SLc7xkW5AX+HNM
33O0cCNwWEeQZ4QX+AhzKJ/X1/h8A5yTt5yfn6jPqykzt9QAO9R/IKgDZCxkC5xzy9RPq9RkAAOo
MDB6AAAAAAAAAAAAMDAAAAAAAABoujh+d/uLM3P3x1eTz8PPR9AkA++Ds8xEU9uUOGxoWO7wAiy/
AAAAADBGMDAwegAAdgAAAAAAAAAAAAAAADBAICBsVGQAPIxYIIBgRGRAM"""""`'"""`Y48iTe7z
AAB            AAAA            AA++n45PXz6A8M7eTxCQz76ffM  mm.  mm.  KCBb+7T
AAA  NNNNNNNN  AAAA  NNNNNNNN  AA3h/ZJ/Ic3BEL8vIW9f4cC+HM  6A8  6A8  F6irKL4
AAA  N:::::::N  RgA  N::::::N  GMLc0W+PUk5+0t6gIF7xYA+/UM  3BE  3BE  41i34AL
MDB  N::::::::N  Ri  N::::::N  +dANkiBfX4Ag4O7wAiyCfTIvIM  5+0  5+0  FBfX+Cy
AAA  N:::::::::N  V  N::::::N  AAAAXvC/IIBQj48iTe7Rz4HOcM  Ag4  Ag4  t5yfn6g
AAB  N::::::::::N    N::::::N  AAAjPc2TbqJADKCBb+7yL70zjM4fX4A4cC+HvEdARjBGM
AAA  N:::::::::::N   N::::::N  6A5As7rioR7wAF6irKLfX1/gsRMdP"""""""MMBoujh+D
AAA  N:::::::N::::N  N::::::N  AAHPj7+BntABH41i34AAD+AuEiM' .mmmm  MMAAAAAAU
MEY  N::::::N N::::N N::::::N  ouyjPv+BzIJ/gFBfX+CAsC+OEfM         `MPR9AkAL
OH5  N::::::N  N::::N:::::::N  AAJ/X1/h8A5yTt5yfn6jPqykztM  6A6A8  MfYIIBgRz
AAA  N::::::N   N:::::::::::N  /uAuEi3x1eTz8PPR9AkA++Ds8xM  3B3BE  MgTxCQz7A
AAA  N::::::N    N::::::::::N  DB+OEfsVGQAPIxYIIBgRGRAHGhM  5+5+0  MMIW9f4cw
MTA  N::::::N  A  N:::::::::N  ++ykztXz6A8M7eTxCQz76ff2AOdasdgAg4dMffIF7xYAA
AAB  N::::::N  Aa  N::::::::N  3hIvICIc3BEL8vIW9f4cC+HvEdMM'"""""`MM4AiyCfTA
AGi  N::::::N  AAA  N:::::::N  LcHOcAUk5+0t6gIF7xYA+/UT7wM' .mmm. `MKTe7Rz4A
AAA  N::::::N  MAAA  N::::::N  AN0zjtX4Ag4O7wAiyCfTIvICBRM  4fX4A4cC+HvEdL7A
AAA  NNNNNNNN  dMAAA  NNNNNNN  AA/gsRIIBQj48iTe7Rz4HOcAHPM  MMM   `M4rKLfX1w
RjA            AdMDA           AjAuEibqJADKCBb+7yL70zjt2SM. `MMM' .MF34AAD+4
fnYAAABGMEYwMDEAAdgAAAAAAAAAAAA5A+OEfoR7wAF6irKLfX1/gsR0BMM.     .MMtX+CAsCA
AAA            A            AAAHPykztntABH41i34AAD+AuEiC+4fX4A4cC+HvEd++Ds8A
AAA  UUUUUUUU  Y  UUUUUUUU  RjAyjykztzIJ/gFBfX+CAsC+OEfFtMMP"""""""MBRGRAHGx
MTc  U::::::U  A  U::::::U  fnYJ/C+Hv8A5yTt5yfn6jPqykzt9QM' .mmmm  MA76ff2AA
AEY  U::::::U  A  U::::::U  AAAAA+/UTH52AAAARjBGMDAxMUEAAM         `PcC+HvEA
aLo  UU:::::U  E  U:::::UU  AAAAAIvICAAAAABoujh+dgAAAEYwRM  6A6A8  MYA+/UT7A
AAAA  U:::::U  Y  U:::::U  xMUQAAHOcAAAAAAAAAAAAAAAAaLo4fM  3B3BE  MTeTz8PPA
AAAA  U:::::D  o  D:::::U  A/uLM30zjteTz8PPR9AkA++Ds8xEU9M  5+5+0  MIQAPIxYG
MDAx  U:::::D  A  D:::::U  ADBAIC/gsRQAPIxYIIBgRGRAHGhoX9MMBAgAg4MMMIA8M7eT+
dgAA  U:::::D  A  D:::::U  A++n45AuEiA8M7eTxCQz76ff2AO7sDM""""""""`MABEL8vIA
AAAA  U:::::D  A  D:::::U  A3h/ZJ+OEfBEL8vIW9f4cC+HvEd4w3Mmmmmm   .MT+0t6gIA
AAAA  U:::::D     D:::::U  GLc0W+ykzt+0t6gIF7xYA+/UT7wjtDMMfMP  .MddfffL7Eye
NwAA  U:::::D     D:::::U  +ANkiBYA+/g4O7wAiyCfTIvICBRHvAMsP  .MMdasdKLfX1AA
RjBG  U::::::U   U::::::U  AAAXvCfTIvQj48iTe7Rz4HOcAHPj76M' .MMaadada4AAD+Bo
ujh+  U:::::::UUU:::::::U  AAjPc2z4HOADKCBb+7yL70zjt2SQO8M         MX+CAsCAA
AAAA   UU:::::::::::::UU   y5As7rL70zwAF6irKLfX1/gsR0BwAF4fX4A4cC+HvEd+Ds8AA
AAAAds   UU:::::::::UU    LAHPj7+X1/gBH41i34AAD+AuEiC+8I3D7eF ""MwUARGRAHGyw
MDEzasd    UUUUUUUUU    dasdyjPv+cAHP/gFBfX+CAsC+OEfFtb7Ig7e+   MSLc76ff2A72
AAAARjBGMA            A/uLM3P3x1eTz8PPR9AkA++Ds8xEU9uUOGxoW8v   MxzCcC+HvE7A
A0NABoujh+dgAAAEYwRjAwMDBAICBsVGQAPIxYIIBgRGRAHGhoX9/QHBxLt+y   MAAAA+/UT7LA
TARAA             VAAAA++n45PXz6A8M7eTxCQz76ff2AO7sDPbdwiIO5/   MjAweTz8PPA3
AouA  LLLLLLLLLLL  wMTN3h/ZJ/Ic3BEL8vIW9f4cC+HvEd4w3i3+3A4ZzQ   MnY4QAPIxYCG
GAAE  L:::::::::L  AAABLc0W+PUk5+0t6gIF7xYA+/UT7wjtDgD1Cw4fX4A4cC+HvEdM7eT66
AAAH  L:::::::::L  AAGiANkiBfX4Ag/uLM3P3x1eTz8PPR9AkA++Ds8M"""""""`YBEL8vIG/
AwMA  LL:::::::LL  AAAAAAXvC/IIBQDBAICBsVGQAPIxYIIBgRGRAHGM  mmmm.  +0t6gI+z
j2AAA   L:::::L    AAAAAjPc2TbqJA++n45PXz6A8M7eTxCQz76ff2AM  8M7eTx MAAAAAAT
nAATQ   L:::::L   WAhcC5As7rioR7w3h/ZJ/Ic3BEL8vIW9f4cC+HvEM  EL8vIW MPR9AkA4
AAAAB   L:::::L   CMwI0HPj7+BntABLc0W+PUk5+0t6gIF7xYA+/UT7M  0t6gIF MYIIBgRL
A1AGi   L:::::L   PAlACyjPv+BzIJ/ANkiBfX4Ag4O7wAiyCfTIvICBM  4O7wAi MTxCQz7y
zGMAA   L:::::L   CbAJtJ/X1/h8A5yAAXvC/IIBQj48iTe7Rz4HOcA4fX4j48iTevEdW9f4cg
E6OAA   L:::::L   aAAAAAAAAAAAAAAAjPc2TbqJADKCBb+7yL70zjtMM""""""""`MIF7xYAM
LAAjA   L:::::L   adas         Vi5As7rioR7wAF6irKLfX1/gsRMM  mommomoMAiyCfTD
AAAnY   L:::::L         LLLLLL  AHPj7+BntABH41i34AAD+AuEiM`      MMBMTe7Rz4U
AwMA  LL:::::::LLLLLLLLL:::::L  AyjPv+BzIJ/gFBfX+CAsC+OEfMM  4fX4A4cC+HvEd7L
DAAA  L::::::::::::::::::::::L  ADgD1CwjtBQLyFiLcAjPqDgD1MM  4fX4A4cC+HvEd1A
gAAT  L::::::::::::::::::::::L  YkA++Ds8xEU9uUOGxoAAAkA++MM        .M34AAD+o
AAAE  LLLLLLLLLLLLLLLLLLLLLLLL  AgRGRAHGhoX9/QHBxLAxNgRGR4fX4A4cC+HvEd+CAsCL
AAAL                           AAz76ff2AO7sDPbdwiIAAAz76ffMMP"""""YMMA++Ds8I
QwRABoujh+dgAAAEYwRjAwMTM0AAAAAA/4cC+HvEd4w3i3+3A4kA+4cC+HM' .mmm. `MRGRAHG4
ATIAA             VADgD1CwjtBQLyFiLcAUT7wDgD1CwjtBQLyFiLcAM  MM  M  M76ff2Aj
MABA  LLLLLLLLLLL  wkA++Ds8xEU9uUOGxoICBRkA++Ds8xEU9uUOGxoM  M  MM  McC+HvEH
dGiE  L:::::::::L  AgRGRAHGhoX9/QHBxLcAHPgRGRAHGhoX9/QHBxLM. `MMM' .MAGhoX7/
AAAH  L:::::::::L  Az76ff2AO7sDPbdwiIjt2Sz76ff2AO6A8PbdwiIMMb     dMMeAO7sPr
AAAA  LL:::::::LL  A4cC+HvEd4w3i3+3A4fX4A4cC+HvEd3BEi3+3A4fX4A4cC+HvEdEd4wY0
MjAAA   L:::::L    AYA+/UT7wjtDgD1Cwj/IIBYA+/UT7w5+0gD1CwjMBP"""""YMM87wjtTz
RnYTQ   L:::::L   WAfTIvICBRHvAPsf3hHTbqJfTIvICBRAg4Psf3hHM' .mmm. `MEBRHvIA
uAAAB   L:::::L   CMz4HOcAHPj76vgk+B/ioR7z4HOcAHPj76vgk+B/M  MM  M  M0HPj7IC
AAAGi   L:::::L   PAL70zjt2SQO8uQw3irBntAL70zjt2SQO8uQw3irM  M  MM  Mg2SQOUZ
AzUAA   L:::::L   CbAJtAm4CbwAAAyjPv+BzIJ/gFBfX+CAsC+OEfFtM. `MMM' .M8+CAsLc
MEYAA   L:::::L   aAAAAAAAAAAAAA/uLM3P3x1eTz8PPR9AkA++Ds8xMMb     dMBY/QHBx+
ALojA   L:::::L   adas         VDBAICBs4fX4A4cC+HvEdGRAHG4fX4A4cC+HvEdQ/QHBx
AAAnY   L:::::L         LLLLLL  ++n45PXz6A8M7eTxCQz76ffAOM#"""""""'MPbPbdwig
AAAA  LL:::::::LLLLLLLLL:::::L  3h/ZJ/Ic3BEL8vIW9f4cC+HEd##  mmmm. `i3i3+3rA
ADAA  L::::::::::::::::::::::L  Lc0W+PUk5+0t6gIF7xYA+/U7w#M        .1C1Cwjwt
MgAT  L::::::::::::::::::::::L  ANkiBfX4Ag4O7wAiyCfTIvIBRM#  MMMb.'Y+D+Ds8x2
OAAE  LLLLLLLLLLLLLLLLLLLLLLLL  AAXvC/IIBQj48iTe7Rz4HOcHPM#  MMMM'  RARAHGrh
AAAL                           AAjPc2TbqJADKCBb+7yL70zj2SM#       .;ffff2AO4
/uLM3P3x1eTz8PPR9AkA++Ds8xEU9uUOGxoW8vYUCA/+6irKLfX1/gsR0B4fX4A4cC+HvEd+HvEd
DBAICBsVGQAPIxYIIBgRGRAHGhoX9/QHBxLt+yLu+Qz51i34AAH76iLeGRy0xYIIBgRGR/U/UT7w
++n45PXz6A8M7eTxCQz76ff2AO7sDPbdwiIO5/gc3CTk/+X+CA/FAj7QAPgzeTxCQz76fvIvICBR
3h/ZJ/Ic3BEL8vIW9f4cC+HvEd4w3i3+3A4ZzQgRDt4fz5fn6jPqykzt9QAO9R/IKgDZCOcOcAHP
Lc0W+PUk5+0t6gIF7xYA+/UT7wjtDgD1CwjtBQLyFiLcPPR9H76iLeGRy0xYIIBgRGRAHzjzjt2S
ANkiBfX4Ag4O7wAiyCfTIvICBRHvAPsf3hH76iLeGRy0xYII/FAj7QAPgzeTxCQz76ff2BfBfX+C
AAXvC/IIBQj48iTe7Rz4HOcAHPj76vgk+B/FAj7QAPgzeTxCQz76ff2AO7sDPbdwiIO5/8P8PPR9
AjPc2TbqJADKCBb+7yL70zjt2SQO8uQ/uLM3P3x1eTz8PPR9AkA++Ds8xEU9uUOGxoW8vIxIxYII
5As7rioR7wAF6irKLfX1/gsR0BwAFuoDBAICBsVGQAPIxYIIBgRGRAHGhoX9/QHBxLt+yLu+Qz5W
3h/ZJ/Ic3BEL8vIW9f4cC+HvEd4w3i3AAXvC/IIBQj48iTe7Rz4HOcAHPj76vgk+B/FAj7QAPgzA
Lc0W+PUk5+0t6gIF7xYA+/UT7wjtDgDAjPc2TbqJADKCBb+7yL70zjt2SQO8uQw3ir40yfQExMAA
ANkiBfX4Ag4O7wAiyCfTIvICBRHvAPs5As7rioR7wAF6irKLfX1/gsR0BwAFuoZzSfqERPk7TDCC
AAAAXvC/IIBQj48iTe7Rz4HOcAHPj76AAXvC/IIBQj48iTe7Rz4HOcAHP 76vgk+B/FAj7QAPgzA
CAANkiBfX4Ag4O7wAiyCfTIvICBRHvAANkiBfX4Ag4O7wAiyCfTIvICBRHvAPsf3hH76iLeGRy0g
AOLc0W+PUk5+0t6gIF7xYA+/UT7wjtDLc0W+PU7rioR7wAF7xYA+/UT7wjtDgD1CwjtBQLyFiLcr
J/X1/h8A5yTt5yfn6jPqykzt9QAO9R/IKgDZCxc2TbqJADW9f4cC+HvEd4w3i3+3A4ZzQgRDt4fA
yjPv+BzIJ/gFBfX+CAsC+OEfFtb7Ig7e+wUIDuvC/ IBQjxCQz76ff2AO7sDPbdwiIO5/gc3CTkA
HPj7+BntA H41i34AAD+AuEiC+8I3D7eFv TMwQ5As rioIIBgRGRAHGhoX9/QHBxLt  Lu+Qz5A
5As7rioR7wAF6irKLfX /gsR0BwAFuoJ/X1/h8AAjP 2TbioR7wAkzt9QAO97rioR7w  kC5xzye
AjPc2TbqJA  CBb+7yL 0zjt2SQO8uQyjPv+BzAA   C/IrioR7wAEfFtb7rioR7wAA u8c4SLcC
AAXvC/IIBQ 487rioR7 A7rioR7wAvgHPj7+B7PA   BfX2TbqJADE7rio rioR7wAQ 7rioR7wA
ANEQ5As77r oRc2Tbq  Dc2TbqJADBwAF5As7c2T   TQvC/IIBQj/c2Tb 2T7ri7ri  2TbqJAD
LcAAAjPcc TbqvC/II QjvC/IIBQj7rioR7wAvC/   /AQ5As7rio0vC/I C/c2Tc2T  C/IIBQj
7rioR7wAv /IIQ5As7 ioQ5As7rioc2TbqJADQ5A   AAAAjPc2TbHQ5A  5AvC/vC/  5As7rio
c2TbqJADQ As7AAjPc TbAAjPc2TbvC/IIBQjAAj   jPAAAXvC/IIAAj AAjQ5AQ5A  AjPc2Tb
vC/IIBQjA jPcAAAX  /IAAAXvC/IQ5As7rioAAA   AXPANkiBfX AAA AAAAAjAAj   AXvC/I
Q5As7rioA AXvPANki fXPANkiBfXAAjPc2TbPA    NkiBfX    3PAN PANAAAAAAX  NkiBfX
AAj c2TbP NkiBfX    n   D  AAAAAXvC         nHkY     & 3   d PANPAN   fXSN
AAA vC/I   i   n    K   H    PANkiBM         MYf     W &   n N   #     dm3
PAN iBfX   @   K    k   L      D   #         #fH     D W   n 3   S     nN&
LK    @    d   k    Y   i      H   S         SHM     D D     &   m     n3W
ik    d    n   Y    f   i      L   m         mM#     H D     W   N      &D
iY    n    n   f    H   @      i   N         N#      L H     D   3      W
@f    n        H    M   d      i   3         3Sm     i L     D   &      DH
dH    3        M    #   n      @   &         &mN     i i     H   W      DL
nM    3        #    S   n   s  d   W         WN3     @ i     L   D      Hi
n#             S    m          n   D         D3&     d @     i   D      Li
 S             m    N          n             D&W     n d     i   H      i@
 m             N    3   j          H          WD     n n     @   L      id
 N   n         3    &              L         LDD  r    n     d   i      @n
 3       t     &    W              i         iDH          o  n   i      dn
 &             W    D     u    r   i         iHL             n   @      n
 W     o       D    D              @         @Li    a   d        d      n
 D             D    H              d          ii             m   n
 D             H    L              n         ni@                 n    h   t
               L    i              n         n@d      n     
 L             L    i                         dn                   s    i
 i                  @                         nn
 i                  @                         n



                                                          NULL mag. issue x00B
                 Ŀ Ŀ Ŀ  Ŀ Ŀ Ŀ
                 ͸  ;ͳ  ͸ͳ  ͸ͳ  ͸ͳ  ͳ
                              ۳      Ը  վ
                      ۰           Ŀ  ͸
                                      
  xindex           Ŀͳ  ͳͳ     ͳ  ;ͳ  ͳ
 ߲        ; ; ; ;  ; ; ;       
                                                                       
     [] EdITORIAL                                                      xedit  
     [] NeWS                                                           xnews 
     [] LiNKS                                                         xlinks 
     [] Muzic! yes, muzic!                                            xmusic 
                                                                             
     [] ArTICLES                                                             
         //  the new that is old                                        xa01 
         //  bbs evolution                                              xa02
          //  box86                                                      xa03
          //  melody maker                                               xa04
         //  new coding groups                                          xa05
         //  the lightgun phenomenon                                    xa06
         //  online track music                                         xa07
         //  door front ends                                            xa08
         //  8it typography                                             xa09 
         //  windows xp - source code leak                              xa10 
         //  pre-matrix era?                                            xa11 
          //  from the past - failed retro computers                     xa12 
          //  dos warez?                                                 xa13 
          //  linux cli media players                                    xa14 
          //  bassoon tracker                                            xa15 
          //  ctf contest - bottomless abyss bbs // stack fault          xa16 
                                                                              
      [] TuTORS                                                               
          //  home micro cls                                             xt01 
          //  ansi 2 html                                                xt02 
          //  install caprice32 - amstrad emulator                       xt03 
          //  strip ansi // python3                                      xt04 
          //  strip mci // python3                                       xt05 
         //  wrap line // python3                                       xt06 
         //  find base id // python3                                    xt07 
         //  convert ansi file to mci codes // python2.7                xt08 
         //  get yes/no/cancel // python3                               xt09 
         //  get files via http - synchronet - bash // by deepthaw      xt10 
         //  darkness 2 - modding                                       xt11 
         //  second reality demo - full code                            xt12 
          //  ansi in bash                                               xt13
          //  ansi transparency                                          xt14
          //  spinners // mpy                                            xt15
          //  progress bar while scanning - mystic // mpy                xt16
          //  lets beep - c/pascal source code                           xt17
          //  get a full bbs on your smartphone // meatlotion            xt18
                                                                             
     [] AbOUT                                                         xabout 
     [] CrEDITS                                                     xcredits 
     [] TrACK DaTA                                                    xtrack 
                                                                             
                                                                             
 ߲                                                                  ߲
                                                               



            A FEW WORDS FROM THE
            Ŀ Ŀ  Ŀ Ŀ Ŀ Ŀ
              ͸ͳ  ͸͸  ;͸ ;ͳ  ͸ͳ  ͸
               ٰ   ۳           ۳     
               Ŀ       ۰          ͸
                                  
  xedit       ;ͳ       Ŀͳ ͳ     ͳ  ͳ
 ߲   ; ;  ;   ;   ; ; ;  
                                                                       
    it's december 2020 and if you are still reading this, yes... we are      
    alive! what a year, what a decade, what a century... things seem to      
    spiraling down... but... who cares! even if the whole world burns, we    
    will still BBSing!!!                                                     
                                                                             
    so here we are again in another issue of NULL mag. again in another  
     format, different style. the theme this time, is just plain text-zine.  
     very oldskool style, like some old mags, like PHRACK! so, no ansi this  
     time, but still i hope the result is rewarding.  
       
     it was a slow process to complete this issue and at first, it seemed  
     that it would take much longer to finish it. i don't know how, but the  
     last weeks, things changed and speed up. almost 50% of the mag, was  
     added in the last few weeks before the release. the happy thing is 
     that, other people also contributed to this issue and it seems, that 
     more and more wanna help.
     
     as you will see, this time, i proffered to add more articles/tutors and
     keep it simple, than writing less and larger documents. i don't know if
     this is ok with you. drop a netmail and tell me your opinion.
     
     for this issue, we have a variety of subjects. retro stuff, bbsing, dos
     stuff, linux, ansi, nostalgic things and more. also the code area has a 
     lot of stuff! i am sure you will find plenty of code to use in your 
     projects and help you start your own mods.
     
     as always, there is also some music to hear ;) you have to use your 
     fingers, to finally listen the music, but as a reward, i made a small
     competition about it. read more below. and as we speak for competitions,
     read about the new ctf, stack fault is preparing for this december.

     the whole purpose of this issue, was to catch the vibe of old text-zines,
     from the past and remember things. you don't have to know coding or
     making ansi graphics. a simple text editor and a lot of willing to do 
     something, are enough!
     
     so... enjoy reading... have some good times and enjoy the holidays!                                                                                  
                                                                             
                                                                             
                                                                             
                                                                             
 ߲                                                                  ߲
                                                               
  
  
  
                     Ŀ Ŀ Ŀ  Ŀ Ŀ
                       ͸ͳ  ͸ͳ ͳͳ;
                             ٰ  ۳  Ŀ
                            Ŀ  ո ͸  
                                   
  xnews                ͳͳ  ;ͳ     ͳ     
 ߲     ; ; ; ; ;        
                                                                       
    apam released MagiTerm 1.0.91, this is a test build, so no linux        
     rpms/debs. It has improved colour support for 256/24bit colour.         
     (Previously only one colour change per escape sequence was supported,   
     now it's multiple so you can change the background & foreground in the  
     same escape sequence).                                                  
 
     g00r00 made available version A47 of Mystic BBS, which contains some big
      changes, like the removal of the FIDOPOLL utility and that now MPY can
      use both Python 2.7 and Python3+!!!
 
    i have the filling that less ansi packs, are gonna published this year
     and almost every one, is being delayed, mostly because of this covid
     fuck up. that's the nice thing on not applying any dead-lines :) that's
     why NULL will stay always on whenever-this-issue-is-ready schedule :)   
     hahaha                                                                  
                                                                             
    Meatlotion, managed to install a full BBS system on a smartphone        
      (OnePlus 6T). you can connect at this address to test it:               
                                pimpbbs.erb.pw:18023                          
      the full tutorial on how you can do the same thing, is below in the     
      tutor section. no need to buy a raspberry ;)                            

     someone offers a way, for BBSes to have a dialup connection! more info
      on these links: (taken from fsxnet)
      The hardware he's using can be found here - https://bit.ly/3kInvel
      The thread explaining how it's set up is here - https://bit.ly/32Qn2Av
      And the thread asking for BBS to submit interest to join up can be found
      at https://bit.ly/3nyOg6J
      
     DOSBOX developer, promised a new version called PURE, which will have,
      many new stuff. the thing is, that a lot of people/users, complained
      for a long time now, for new features, that's also a reason for the
      many forks, DOSBOX has. better late than sorry...
  
     jp (jack phlash) the programmer behind the DOOR game, Darkness, left
      a comment, implying that a new version 2.1 is on the way... 

    if you are interested in restoring commodore home computers, then make
     sure to pay a visit at https://retrorewind.ca/. you will find parts and 
     software to restore your old C64/128 computer. even the site it self,   
     has an amiga-ish (commodore) style, with a clean retro look in greyish  
     colors. oh... i almost forgot... this is a business endeavor of a well  
     known member of the bbs scene, Netsurge. i only hope that he will also  
     accept orders from a bbs :) hahahaha                                    
                                                                             
     apam began writing a new bbs software. you can find more info on the    
      facebook page [https://www.facebook.com/groups/talismanbbs/  ] and also
      visit a bbs at telnet://talismanbbs.com:11892/

    i released VOTELINER mod. another oneliners mod, with some twist ;) as  
     always, you can find it at fsx, sci, dore and Another Droid BBS.        
     also i made available an idea of using a sprite engine, for displaying  
     graphics and also in a relative to the screen dimensions way. check     
     for the xq-sprteng.zip file in the usual places                         
 ߲                                                                  ߲
                                                               



                Ŀ     Ŀ Ŀ Ŀ Ŀ Ŀ
                  ͸  ;ͳ  ͸ͳ  ͳͳ;
                   ۲             ٲ Ŀ
                   Ŀ   ۰       ͸͸  
                                  
  xlinks               Ŀͳ  ͳͳ  ͳͳ     
 ߲   ; ; ; ; ; ; ;    
                                                                        
    retro gaming, assembly and cheat codes!!!! oh yeah!!!                   
     https://www.youtube.com/watch?v=8LnwsYL7Apk                             
                                                                             
     virus hoaxes of the early internet - nostalgia nerd                     
     https://www.youtube.com/watch?v=B_Fi6g0p_Eo                             
 
     this is the video to a very much disputed video of the "8bit guy"
      https://www.youtube.com/watch?v=Wh2OCBZpzZ8
      ...and this is his, unlisted, response video, to all "accusations".
      https://youtu.be/SYopBjwhF1M
   
     root42 channel - dos programming with turbo c
      a very interesting channel, specially on old-skool dos demo
     programming
     https://www.youtube.com/channel/UCPjFa_UZBUDzdJTIEdyGjIQ                
                                                                             
    Paul Witte and Herb Flower, creators of Thieves Guild                   
     https://breakintochat.com/blog/2020/09/15/paul-witte-and-herb-flower-   
     creators-of-thieves-guild/                                              
                                                                             
    8bitboyz! a very good retro-computing site... must see.                 
      https://8bitboyz.com/                                                   
                                                                              
     MDK: The Complete History                                               
      https://www.youtube.com/watch?v=7BwOaddPOQY                             
                                                                              
     it's 2020 and the fight still goes on... SNES vs MEGADRIVE!
     https://youtu.be/0sBQXhF2mEI
 
    the story behind Sunset riders... if you haven't played it, make sure
     to play it
     https://youtu.be/xpAWSNXtyHM
                                                                             
    making a concert with five very old computers... this is madness!!!     
     https://www.newscientist.com/video/2245700-how-an-artist-made-a-concert-
     from-five-40-year-old-commodore-computers/                              
                                                                             
    Vespertino!!! amstrad in all its glory! holy fucks...                   
     https://www.youtube.com/watch?v=_syHewDu5lc                             
     https://www.youtube.com/watch?v=YAcd47eUZF4                             
                                                                             
    Star Wars, The Mandalorian, in 8Bits!!! i need more of this!!!!!!!!     
     https://www.youtube.com/watch?v=eoUsbydHJKA                             
                                                                             
    a very good video on how to setup a Wimodem                             
     https://youtu.be/-6QoKVTSWaw                                            
                                                                             
    Using a 1930 Teletype as a Linux Terminal                               
     https://www.youtube.com/watch?v=2XLZ4Z8LpEE                             

     Dune - The Grandfather of Real-Time Strategy... and more...
      https://www.youtube.com/watch?v=HOemQuy2JUc

     NEOGEO flash card? 600$?
     https://www.youtube.com/watch?v=pY-jEQb_1Q0                             
                                                                             
    Five new games for AMSTRAD                                              
     https://www.youtube.com/watch?v=VqwYYWBYL2Q                             
                                                                             
 ߲                                                                  ߲
                                                               



                Ŀ Ŀ Ŀ Ŀ Ŀ Ŀ
                 ոոͳ  ͳͳ;͸  ;ͳ  ͸
                  Ծ    ۳  Ŀ        
                       ͸     ۰   Ŀ
                                 
  xmusic         ͳͳ     ͳ       Ŀͳ  ;
 ߲    ;  ; ; ; ; ;    
                                                                        
                                                                             
   so, because it's a text ezine this time, you thought that there was no    
   muzic? ha! :p                                                             
                                                                             
   at the end of the file there is a track, encoded in BASE64. decode it,    
   listen to it and if you email me, the filename written in the data/info   
   inside the track it self, you gain a copy of my new announcement board
    script. you can have a look at Another Droid BBS to see it.

         each and everyone, that answers correct, will earn the script!      
                                                                             
   last time only one guy, decoded the included file! which is unacceptable! 
   so this time, i hope i'll force you, to get your butts off the chair and  
   learn   something, even if it's just a simple base64 decode thing! :p~~~  
                                                                             
 ߲                                                                  ߲
                                                               



Ŀ Ŀ Ŀ Ŀ Ŀ Ŀ     Ŀ Ŀ
  ͸ͳ  ͸͸ ;͸  ;ͳ  ͸ͳ  ͳ  ͸ͳ;
        ٰ           ٰ   ۲    ٲ Ŀ
   ͸    ͸      ۰   Ŀ   Ŀ   Ŀ͸  
                             
  ͳͳ  ͳͳ   Ŀͳ  ;ͳ     ͳ  ;ͳ     
; ; ; ;   ;   ; ; ; ; ;


  xa01
 
                                                                         
                                           
                                                
                                          
                                                                              
                                                                              
  by coincidence, i was searching info about raspberry 4. i wanted one to
  have it as a dedicated pc, to replace my old pc. after all, i don't need
  too much processor power. the thing is, that in almost all reviews, i read
  that the rpi4 is not a 100% replacement of a standard pc and each article
  had different excuses. for others, it was the sdcard, for others that it
  doesn't has a shutdown button, not much processor power etc.

  and suddenly the raspberry 400 appears, out of nowhere! a keyboard that is
  a pc... what it reminds you? perhaps an amiga? an amstrad? an atari? and
  suddenly the rpi4 that couldn't replace a standard pc, now became a
  complete pc system !!! wtf?! because it's built in a keyboard, now
  everything is all right? how could it be?

  it's not that i don't like the idea, the opposite, i love it, cause i grew
  up with an amstrad and i love this form factor. i also, built a similar
  system, with a rpi 0w and i really like it. it's just weird, that in just a
  day, the whole scene changed their opinion about the rpi4 and now became a
  "pc replacement". miracles, marketing does... :)

  about the rpi400... it's awesome, not because it's something new, but
  exactly because it's something old! something that i had in my youth and i
  have nostalgia for it. the small form factor and the "all in one" idea of
  the system, is very neat. you can have a very "clean" desk/office, with
  just your rpi400 and your monitor (lamers use mouse :p ), which is
  something apple users had for a long time ago... but it seems that either
  we run out of new ideas, or old stuff become "modern" again. that's how
  fashion worked and it seems that technology becomes a bit like that.

  i guess that in the next years to come, more "retro" ideas, will become new
  products, which is not bad. for me it's more of a proof, that for a long
  time, we lost too many good things of the old times, that now are coming
  back. time will tell...


  xa02
 
                                                                         
                                                    
                                                      
                            again?            
                                                                             
                                                                              
                                                                              
  the new a47 version of mystic bbs, brings some major changes, which have to
  do with the resolutions supported by it. in the what's new text file,
  reports resolutions up to 160x60 chars. also as i am reading in echonets a
  whole new discussion opened, about new features for mystic bbs, that have
  to do with screen/resolution stuff (more colors, more fonts, more codepages
  etc.)

  i really like that new features are added into mystic and the development
  is still going, but my question is "is that what's missing from it?". let
  me explain my self.

  first of all the new resolutions are not something entirely new... older
  bbs software supported it, as long with other formats. but as the bbs scene
  diminished, so are they. and after a long time, we have the bbs scene as it
  is now, which uses entirely the 80x25 res. with only a few exceptions, for
  systems like C64 or other 8bit computers of the past, but those use 
  resolutions that are less than 80x25.

  and the thing is, that even if we only use this one resolution, mystic or
  other bbs software, doesn't get the support of the ansi-art scene. where
  are the themes? the logos? the flyers? etc. and now, suddenly, because
  mystic supports 160x60, this will change? i don't think so. for sure it
  will get some new stuff into the scene, for a small period of time, because
  of all the hype and exciteness but then it will probably blow off.

  it's not the resolution that keeps back the bbs scene. it's the "appetite"
  of users/modders to write new stuff and help the scene in general. if a bbs
  software has 100 features and brings a thousand more, nothing will change,
  if the rest of the scene don't use them and support the scene in general.
  
  you can see many new bbses using the default theme, that comes with the 
  software installed and nothing more. if sysops don't customize even the 
  default theme, how will they customize the theme for other resolutions?

  so... am i against the new stuff mystic a47 brings? for sure not! but i am
  very skeptical, on how many will use it and if, in the end, will be "just
  another feature". it's not that i am against g00r00 or other bbs developers,
  it's that i am filling sorry, because of their hard efforts, that in the
  end, remain unused, by the scene.


  xa03
 
                                                                         
                                                                  
                                                               
                 -  emulate a x86 system to arm systems        
                                                                             
                                                                              
                                                                              
  box86 [https://github.com/ptitSeb/box86] is something like an emulator that
  give us the ability to run x86 applications, into arm systems like RPis.
  the great thing about, is that it's doing so, without "kneeling" the
  system down. box86, uses the all ready installed (arm) libraries and
  "translates" them into the x86 architecture. this way, it uses less
  resources of the system. you can watch a video from NovaSpirit Tech, who
  installed and used the Zoom software under a RPi.

  so, what's x86 has to do with us (the bbs community). well i think that it
  expands the library of software we can use on our rpis, specifically for
  bbs, retro stuff. programs that could run under a x86 linux machine and
  didn't have a version for an rpi, now can easily run. perhaps if someone
  can manage to compile x86 under termux (android), we could also use android
  smartphones, for bbsing and more ;) the possibilities are endless. let me
  know if you think something useful of this.


  xa04
 
                                                                         
                                                    
                                                  
                                                 
                                                                             
                                                                              
                                                                              
  in my search for making some ansi music, for testing the ansi music function
  in blocker v2.0, i bumped into this cool dos program, called Melody Maker.

  you can find it at:
    http://www.johndaileysoftware.com/products/productivity/melodymaker/

  ..along with other cool utilities and programs. the thing with Melody Maker
  (MM), is that it has a very nice UI, with very cool ansi images and also it
  is very simple in use. almost straight forward you can write some tunes.
  don't expect to be a musician though :) if you are into this retro stuff,
  give it a try.
  

  xa05
 
                                                                         
                                        
                                            
                                    
                                                                             
                                                                              
                                                                              
  lately i am seing some coding groups, being created and publishing mods,
  mainly for Mystic BBS. for sure this is a good thing, as the scene is in
  lack of coders, in generally. Mystic is drawing all the attention and
  unfortunately, other bbs software is being neglected. hope this will change
  in the future.

  the other thing, is that those "groups", it doesn't seem to be a group of
  people, but instead some individual programmer/coder, who decided to
  publish mods, by his own. don't misunderstand me, i am not saying this as a
  bad thing. i am only mentioning it, as a fact, cause now days, coding
  groups are extinct. even one or two, that seem to be "alive", they don't
  publish mods and if they do so, it's more of a one mans job, than a group
  thing.

  well.. we have to, some how, organize things :) with this rate, in the near
  future, there will be no coders, nor new mods/scripts :(

  a big shoutout to dpr, rcs, opicron for their efforts!!! keep it up!


  xa06
 
                                                
                                                         
                                                     
                                                     
                                                      
                                                       
                                                                              
  well... the name of this phenomenon is mine... so all rights reserved :p
  what is the light-gun phenomenon (LGP for short)? if you are following the
  retro gaming scene, at youtube, you should probably have seen videos
  popping up, about a new light-gun (Sinden), that can be used in flat/lcd
  screens. the project started as a crowdfunding project, went very well and
  now new-tech light guns are produced.

  but what about LGP? have you ever played a light-gun game, specially in the
  arcades? when you were young? for some of us, was the first experience,
  grabbing a gun and shooting stuff! oh yeah! we are not all from the USA you
  know :p~ so, light-gun games are something else, very fun to play,
  specially with friends in co-op mode (point blank ;). but after the arcade
  market crashed and the old crt monitors, vanished... you couldn't be able
  to play these games any more.

  so, a jump in technology happened. crt monitors have been replaced from
  other type of technology, but the light-gun technology didn't catch up,
  until now!!! in 2020! one or two generations of kids, didn't have the
  ability to play such fun games and never knew the filling of that
  experience. even if the technology of games, did evolve... something left
  back, have been forgotten and almost lost. if it wasn't the efforts of one
  man, who made the Sinden LG, perhaps light-guns would be just be a note,
  in some type of retro-books about the arcade machines era... who knows.

  the LGP is a true/real example of technology (fun technology) being lost,
  because of the rapid development of technology in other areas or for other
  economical reasons. it's a petty, that today's 10-13 old year kids, can't
  have the fun, we did when we were in that age. and for sure, if you give a
  kid a light-gun and let it play Terminator, Point Blank, Time Crisis and
  more. a technology so fun, that would be a great loss for the whole gaming
  scene.
  
  
  xa07
 
                                                                         
                                          
                                               
                                         
                                                                             
                                                                              
                                                                              
  I know there are some web radios offering mod/track music online, but there
  is another option, with a very large selection of tracks. MODArchive has a
  function to play a random track file:
  https://modarchive.org/index.php?request=view_player&query=random

  In this webpage, has a checkbox that says "Automatically play random tune
  when finished". If you check that, it will always play tracks endlessly. The
  weird thing of this, is that you never know, what it will play... from the
  shitiest track to the most awesome!

  Visit the page and let it play... you will definitely find some nice tracks
  and get addicted!


  xa08
 
                                                                         
                                               
                                                  
                                              
                                                                             
                                                                              
                                                                              
  i bumped to this blog post, about DOOR front-ends. it's something i have
  never experienced, as my local bbses i used, didn't support the games or
  perhaps i didn't had the interest to do so.

  never the less, it's a very nice idea and for sure, upgrades the level of
  game experience. if you also don't know about the subject do read the blog
  post below.

  https://breakintochat.com/blog/2020/09/09/a-different-way-to-play-front-ends/

  also make sure to follow the links in the blog post, as they have useful,
  information on how to setup some of these front ends.


  xa09
 
                                                                         
                                             
                                           
                                                
                                                                             
                                                                              
                                                                              
  OK... this is really awesome! finding articles about the typography used in
  old retro-computers, is something that leaves you, with your mouth open! :O

  https://damieng.com/blog/2011/02/20/typography-in-8-bits-system-fonts

  you should definitely visit the page and read it carefully. if you never
  learned anything about typography, after reading this article, you will learn
  a lot. you will notice details, in the fonts, that perhaps you never noticed
  or you thought, it's just the way it is... which system had the best font and
  which, the worst etc. it is also a nice way to download some truetype fonts
  ;)  my favorite, is of course the AMSTRAD CPC line, font. what's yours?


  xa10
 
                                                      
                                                        
                                                    
                                            
                                                 
                                       
                                                                              
  if you haven't heard the news, the complete source code of windows xp has
  been leaked into the internet. actually some guy managed to compile it, only
  to prove that is the actual code.

  so the code, for one of the "best" OSes out there, with very big significance
  for the bbs scene, i could say, is out there. could someone use it, for the
  benefit of the scene? windows xp, i believe is a link to two eras, that can
  combine the old with the new, so it would be a big achievement to use it,
  for retro-systems in general.

  perhaps the code, could give some light, to other areas or windows OSes, like
  7,8 or 10, on how to use it, to run our retro-software. or just use it as a
  standalone os for retro use only. for example, it would be great, if we could
  strip down all none necessary code/software inside xp and make a very light
  version of it, that would have 100% compatibility with old DOS programs,
  newer DOS (32bit) programs, windows 95, windows 98 programs etc.

  i am not sure, if this is possible or someone has the "appetite" to do so,
  but never the less, having the source code, in our hands is something that
  we should make value from it.


  xa11
 
                                                                         
                                                 
                                            
                                                      
                                                                             
                                                                              
                                                                              
  i guess you all have seen the Matrix movies. one thing that is obvious in
  these movies, is that even that the humans are hunted down, by the machines,
  they still use them... they didn't tell "oh the machines are bad, let's use
  rocks".

  i think this is a very good vision of the future, on not to go beyond a point
  in technological evolution. some red lines, are never to be crossed! and i
  fear that we are closing in one of these red lines.

  it's obvious that this covid-shit-storm is bringing vast changes in our
  lives. the biggest, is that we are going into a full-digital era, where
  almost every aspect of our lives, is being done, through digital means.
  school, work, amusement, love, shopping... everything digital!

  we are also hearing about the 4th industrial revolution and the changes it
  brings, with people loosing their jobs, only to be replaced from a digital
  employ, an AI, a machine. everybody is talking about the revolution, AIs will
  bring to our lives, but no one seems to talk about the dangers of it. and i
  mean the real dangers, not just hacked accounts or loosing jobs. right now,
  the term AI is being used in a wrong way, cause in practice, it "translates"
  into using software to do difficult stuff, by using sensors. it's more a
  fuzzy-logic thing, than a real intelligence, that thinks for it self.

  but we are not very far, from making a real intelligence, it may seem so,
  but break-throughs in technology, come suddenly or just by accident. so we
  can't exclude the possibility, that someday, suddenly (or not) the first real
  AI may appear. from there, the possibilities are endless, but for sure, we
  will be in a totally new era.

  i don't want to be the weird guy, with tin foil in his head. i as you, have
  grown in the dawn of computer technology and we have seen how things went.
  otherwise, you wouldn't be back to bbses :p  people ignore the signs of a
  big-brother in their pockets, have no interest on learning about real
  internet security or how to properly use a computer. so they are open to
  hacks, account stealing, loosing money from their ebank accounts and more.

  humanity in its whole, is not ready for this 4th industrial revolution and
  perhaps we will never be. after so many years, we haven't solved even basic
  problems of ours and we are still at war between us. going full digital,
  relying on an AI, is like giving a monkey, a gun. so, i guess, boundaries,
  must be set, but i believe no one will do so.

  we are in a technological vortex, that everything new is accepted without
  second thoughts and this will probably will be out biggest mistake. only time
  will tell.
  
  
  xa12
 
                                                                         
                                                
                                                    
                                                     
                                                                             
    Computers that Failed                                                     
    found on the "hell bound hackers" newsletter                              
    http://web.textfiles.com/ezines/HBH/hbh05.txt
    
  a review on old, failed, home computers, from an old text-zine... 
                                                              ...fu youtube!
    
  ==============================================================
  ============Computers that Failed by fuser====================
  ==============================================================

  So right now you're sitting in front of your personal computer, and I 
  believe that you love every single bit of it, right? Well, all computers 
  will break down someday in the future, it might even be happening now as 
  we speak.

  The beauty with modern-day computers is that almost all problems can be 
  identified, fixed and prevented in the future. We're much luckier than
  those that began to use computers around 25-30 years back. While easier
  to learn and use compared to mainframes, personal computers back then are 
  pretty daunting to the newcomer as they are confronted with a blinking 
  cursor and no one knows what will happen if they keyed in the wrong 
  command.

  Despite that, many people persevered and have fond memories about the old 
  days. Notice that the computers they usually mention are the Apple II, 
  Commodore 64, ZX Spectrum, BBC Micro, TRS-80, Amstrad CPC for the 8-bits, 
  followed by Commodore Amiga, Atari ST, Macintosh, IBM PC (for those that 
  actually used it back then) for the 16-bits.

  Why are these computers so famous? The main reasons include the large 
  commercial software library available, the ease of learning, as well as 
  the availability of books, magazines, documentation and user groups to 
  help assist the newcomer, and fierce competition also means that users can
  get the best computer at a low price.

  The most important reason, however, is that it simply worked out of the 
  box. No funny wiring or configuration needed, just set it up, turn it on 
  and you can play Castle Wolfenstein (it originally came out on II before 
  id decided to make a sequel).

  This article is about computers that failed to even work properly, while 
  some worked to an extent, before going up in flames like a Ford Pinto, 
  while others worked magnificently, only to be hampered by bad management, 
  terrible marketing or just plain bad luck.

  Let's begin, shall we?

  ----Apple III----

  Like any good movie, there is bound to be a sequel so bad that almost all 
  fans refuse to even acknowledge it's existence, like Godfather 2 or the 
  next two Matrix movies. Apple III is Apple's sequel to the best-selling, 
  much-loved Apple II. 

  The Apple III was basically an enhanced version and designated successor 
  for the Apple II, since they really didn't believe Apple II's popularity 
  would last long. It was designed for business use, being fully compatible
  with already available Apple II software, which means that people can 
  simply load up AppleWriter and VisiCalc and work.

  The computer was released to so much fanfare, that Apple even rented 
  Disneyland for a day and bands were commissioned to play in the Apple 
  III's honor, that I think it makes all computer releases till this day 
  look modest in comparison.

  But like all spoiled kids who we regularly see on My Super Sweet 16, it 
  doesn't take long before people realise that it is problematic to the 
  core. Firstly is the fact that after two months of its release, there were
  only three programs available for it, one is a mail management program 
  written by Apple employee Mark Markkula, with no new programs expected for
  the next six months, it did, however, include a new BASIC interpreter 
  called Apple III Business Basic (which I think absolutely no-one used).

  Another issue is that the system software and hardware were very buggy, 
  the most notable being that the machine will crash if you use the Save 
  command. Try to imagine that for a second. Sounds very counter-productive 
  to me, a computer that crashes if you try to save your work.

  And about the hardware? Apple III can lay claim to having a unique 
  problem, which in turn merits its own, even more unique solution. You see,
  firstly, Steve Jobs had decreed that the computer shall not have fans nor 
  air vents, since they were "noisy and inelegant" (You have to admit he has
  a point). So, in order to get rid of heat, the base of Apple III was made
  out of cast iron with the power supply was stored in a different 
  compartment separate from the logic board.

  Yet, people have alleged that the motherboard got so hot that it warped, 
  causing chips to pop out of their sockets causing problems, where the 
  screen would display garbled data, or that floppy disks would come out 
  "melted". Dan Kotke, one of Apple's first employees disovered how to 
  temporarily fix the problem, although even he discovered it by accident, 
  as he lifted the machine up a few inches and then slammed it down on his 
  desk in frustration, and lo and behold, it worked.

  So, Apple's official solution was to lift it up around 3 inches and then 
  drop it to a desk to reset the chips. As if that wasn't enough, the 
  built-in real-time clock stopped working after several hours of use, and 
  the Apple II Plus emulation didn't always work properly.And to make the 
  deal even worse, the computer was priced at $4,340 to $7,800 US, which 
  costs more than other business-oriented computers.

  In the end, Apple had to replace the first 14,000 Apple III machines, free
  of charge. The customers who had bought them were given brand new 
  machines, with new circuit boards. These did not constitute a new model 
  and it was deemed warranty service. However for new customers in late 
  1981, Apple "reintroduced" a newly revised system, with twice as much 
  memory (256K RAM),which sold for a much lower introductory price of 
  $3,495. The public responded with a resounding "meh", and around the same 
  time, IBM introduced it's own IBM PC, which sold pretty well, but the III 
  went around for a while until April 1984, three months after the release 
  of the Macintosh.

  ----Apple Lisa----

  The Lisa is the first personal computer available for the public, and like
  the III, it is also business oriented, but unlike the III, it's here not 
  because it was a technical failure but rather, a commercial one.

  Lisa has a spot in computing history as the first computer with a GUI sold
  to the public. Although Xerox Star was the first computer that uses a GUI,
  Xerox management for some reason decided not to pursue computers and 
  concentrate on business appliances, which is quite a shame since the 
  modern personal computer is derived from the Star.

  Another misconception is that the Macintosh is a direct descendent of 
  Lisa, and this misconception may arise due to the fact that the GUI looks 
  almost the same and the short period between the release of both Lisa and 
  Macintosh. Lisa was actually pretty powerful for its time, with advanced 
  features such as protected memory, virtual memory, multitasking, a 
  sophisticated hard-disk based OS, a built-in screensaver (they're a luxury
  back then) and advanced calculator with a paper tape, Reverse Polish 
  Notation (I have no idea why this is included), support up to 2MB of RAM, 
  expansion slots, numeric keypad,  data correction protection schemes such 
  as block sparing, non-physical file names (with the ability to have 
  multiple documents with the same name), and a larger higher resolution 
  display. Paired with an Apple Dot-Matrix printer, the documents produced 
  are much more superior compared to those produced by other systems at that
  time.

  These features werw pretty powerful for a personal computer at the time, 
  and since the OS organizes files in hierarchical directories, it justified
  the need to buy a hard disk for the computer. The Lisa also has two main 
  user modes, the first being the Lisa Office System and the Workshop. The 
  Office System is the GUI environment for end users with seven supplied 
  applications: LisaWrite, LisaCalc, LisaDraw, LisaGraph, LisaProject, 
  LisaList and LisaTerminal. The Workshop, on the other hand is a program 
  development environment which is almost text-based even though it uses a 
  GUI text editor.

  So, the computer is basically the computer to own if you are looking for a
  robust, easy-to-use computer for business purposes. So why was it a 
  failure? Firstly, Apple didn't put much effort into marketing it since 
  they believed that the reputation will spread amongst businesses who will 
  then purchase it, and it also didn't help that the computer's 
  introductionary price was $9995, which is a huge sum of money.

  And since IBM, which already has a good background in selling computers 
  for business began manufacturing the IBM PC, it didn't take long for 
  managers to order IBM PCs which help introduce most people to computers - 
  albeit in an ugly and inelegant way. That doesn't mean Lisa was completely
  forgotten, and one of its biggest users was NASA, which uses LisaProject 
  for project management, and it is estimated that more people actually use 
  a Lisa than the number of Lisas sold, which means that some companies 
  might buy one or two Lisas for any given purpose.

  How big of a failure was it? Well, it's like making the third installment 
  of a famous film, (like matrix revolutions) where it's so bad that it 
  makes the prequel look good in contrast. So Lisa is officially Apple's 
  biggest commercial failure since the Apple III fiasco of 1980, and it's a 
  good thing they learnt from these mistakes and launched the Macintosh in 
  1984.

  ----Coleco Adam----

  Do you know what Coleco used to work on before getting into the videogame 
  and computer manufacturing business?

  It originally manufactured shoe leather, and then moved to making plastic 
  products, and later they sold off it's leather division before CEO Arnold 
  Greenberg decided to enter the video game business in 1976, making it the
  oddest company trying to cash in on the video game boom, and suprisingly 
  enough they were quite successful in this area  before moving on handheld 
  electronic games, and in 1982, they released their famous ColecoVision, 
  which also proved to be quite popular, but at the same time introduced a 
  line of cartridges for the Atari 2600 and ColecoVision before going down 
  due to the Video Game crash of 1983.

  It became clear around this time that people have decided that video game 
  consoles were being supplanted by home computers, and this is where our 
  story begins.

  Adam seems to have a bright future ahead, since it was derived and 
  compatible with the software and accessories made for the ColecoVision, so
  that means from the very beginning, it already has a large software and 
  hardware base to be used for the system. And to sweeten the deal, the 
  robust CP/M Operating System was available as an option, this is at a 
  time when you're usually pretty much stuck with the OS that came with your
  computer, that makes it one hell of a deal.

  For $725 (1983 value), the system consists of a computer with 64KB RAM, 
  Tape Drive, Letter-Quality Printer, and Buck Rogers: Planet Of Zoom game 
  bundled into it. In comparison, a C64 which is around $200 comes to around
  the same price after the purchase of a printer, disk drive, and software. 
  For those that think $725 is too expensive and already own a ColecoVision,
  there's a cheaper version of Adam which is plugged into the ColecoVision, 
  fulfilling Coleco's commitment that ColecoVision owners would one day be 
  able to upgrade their console into a complete computer system.

  The Adam received many good reviews, and some of the key points include 
  the quality of the keyboard and printer, and that it also offered 
  competitive sound and graphics. It also possesses a good BASIC 
  interpreter, called SmartBASIC, which is largely compatible with Applesoft
  BASIC (a BASIC interpreter made by Microsoft for the Apple II), and since 
  many computer books and magazines at that time provide type-in programs 
  for Apple II, that makes it easy for the user to simply type it in without
  having to modify the code.

  Sounds like a pretty sweet deal, right?

  Unfortunately for the early Adam adopter, it also has a large number of 
  frustrating technical issues, ranging from retarded to fucked up.

  For starters, the Adam generates a surge of electromagnetic energy on 
  startup, which can erase the contents of both tapes in and near the tape
  drive. And according to the instruction manual, you have to put the tape 
  in the drive BEFORE you turn the computer on, so it didn't take long for 
  people to have stacks of blank tapes which they could do nothing about it.
  (It is said that the manual was printed before the problem was known)

  Speaking of tapes, there were reports that initial shipments to customers 
  included a high rate of defective tapes, some said up to 50%, and if you 
  ever try to eject it while it was still moving, you end up destroying the 
  drive as there was no eject lock-out mechanism, as the tape moved at an 
  extremely high speed.

  And they also decided to use the printer to to supply power to the entire 
  Adam system, and if your printer is either failed or went missing, that
  computer will end up as a paperweight instead. Another equally dumb 
  decision they made was not to store the BASIC permanently in ROM, and 
  instead the ROM features a built-in electronic writer and word processor, 
  SmartWriter (seriously, isn't one of them more than enough?) as well as 
  the Elementary Operating System (EOS) OS kernel and the 8K OS-7 
  ColecoVision OS. The BASIC interpreter was instead stored on tape, and 
  since using tapes on the computer is a bit like Russian Roulette with a 
  fully loaded gun, you can see why this is a bad decision.

  Due to these problems, people decided not to spend their money on buying 
  an Adam, and it proved to be costly for Coleco themselves. They lost $35 
  million in the fourth quarter of 1984, and they decided to blame the 
  manuals since "it did not offer the first-time user adequate assistance"
  (which is a lame argument since they were the ones who wrote it in the 
  first place). And just like the Apple III, Adam was reintroduced with a 
  new instruction manual, sold at a lower price, along with a $500 college 
  scholarship per unit for use by a young child, paid when the child gets to
  college, and despite these incentives, people just decided that they'd 
  rather get an home computer that didn't screw up too much, and it only 
  sold around 100,000 units before being discontinued in 1985. To make 
  matters even worse, the Adam weakened Coleco as much of the money it had 
  made from Cabbage Patch Kids was devoted to the Adam, and the company soon
  filed for bankruptcy in 1988.

  ----Oric-1----

  The home computer boom in the UK also sees another batch of contenders, 
  all wanting to be the dominant computer in the UK, and hopefully, Europe.
  The best-selling computer in the UK is its own Sinclair ZX Spectrum, 
  although it faces competition by Commodore 64, Amstrad CPC and BBC Micro. 
  The reason why the Spectrum was so popular is that the computer was sold 
  at an amazingly low price, and has color and sound, and it proved to be so
  popular that there were eight different models made, each more powerful 
  than the last, and the introduction of the Spectrum led to a boom of
  software and hardware manufacturing in the UK, and it even earned Clive
  Sinclair a knighthood for "services to British industry".

  The Oric-1 was one computer designed to beat the Spectrum in its own game,
  and it had the potential to do so, since the company that manufactured it,
  Tangerine Computer Systems (later renamed Oric Products International) are
  not newcomers, in fact, they had some sucess with the Microtan 65, a kit 
  computer based on the 6502 processor, complete with a 3U form factor, 
  small amounts of RAM, a video character generator and UHF modulator for it
  to be used with a TV, and a simple latch for entering hex data from a 
  keypad.

  With the success of the ZX Spectrum, they decided to venture into the home
  computer market and this is where they changed the company name, and 
  created a computer called the Oric-1.

  The computer was designed to use the 6502 processor, which means that 
  software written for the Microtan can be ported over. For the system's 
  specs, they decided to look at the Spectrum and identify its weaknesses. 
  Firstly, instead of using a rubber chiclet keyboard like the Spectrum, it 
  featured 57 plastic keys that moved individually, and although it isn't 
  classified as a "proper" keyboard (ie the desktop keyboard we use 
  nowadays) it was durable and friendly on the fingers.

  For BASIC, they decided to use Microsoft BASIC, although it was extended 
  in-house with Oric's own commands (mainly for games), increasing its size
  from 8 to 10K. As for output, the Oric featured the industry-standard 
  Centronics printer interface, which means that a user can simply plug in 
  any printer, a luxury unavailable for Spectrum users. It also includes a 
  RGB socket along with a RF modulator, allowing the user to connect it to 
  either a television or a monitor.

  As for sound and graphics, it proved to be much better than the Spectrum, 
  and in the sound stakes it was much more superior as it used the AY-3-9810
  sound chip, which is much more robust compared to the Spectrum's barely 
  audible sound chip, and there is a number of sound commands resident in 
  Oric's BASIC which gives the user a fairly good grip over the sound chip, 
  with custom sounds such as Zap, Shoot, Explode, etc; it makes the perfect
  accompanient to those wanting to make their own arcade-style games.

  And just like the Spectrum, the Oric features two screen modes, a standard
  text mode and a high-res graphics mode, with eight basic colors available
  in both modes, with a screen resolution around 240x224 pixels, which in 
  text mode equated to 40x28 character grid. Unfortunately, the pixels 
  couldn't be colored individually, color clash issues like the Spectrum, 
  although it is less noticable. The Oric has a unique feature in graphics, 
  where it uses serial attributes, so only one memory area was needed for 
  screen graphics, unlike the Spectrum which requires two.

  This feature proved to be extremely useful as it reduced memory usage and 
  at the same time increases the speed of graphics could be displayed on 
  screen, making it perfect for arcade-style games.

  It even adopted the same marketing strategy as the Spectrum, with both 16 
  and 48K versions available, and seeking to topple the competition, they 
  priced the 16K version around 99.95 pounds, 25 pounds cheaper than the 
  Spectrum equivalent, with the 48K version retailing around 169.95 pounds, 
  5 pounds cheaper than the 48K Spectrum, along with the promises of a disk 
  drive, a four-color printer, and a Oric modem whic allow users to access 
  Prestel content.

  So with the potential, why wasn't the Oric-1 successful the way it should 
  be?

  The reason was  that the Oric-1 was plagued with problems since day one, 
  initially, there was a strong interest in the product, with over 30,000 
  pre-orders received prior to the official launch in January 1983, but 
  Oric failed to supply them on time due to manufacturing problems, 
  particularly the delayed delivery of ROM and RAM chips. 

  And when the machines were available around March, Oric's mail order 
  department struggled to work through the backlog, and to make matters 
  even worse, the 16K version was delayed even further when a last minute 
  revision of the circuit board pushed it to May, and it was priced at 
  129.95 pounds, 30 pounds higher than the original price.

  When the machines were readily available, another issue arose: The lack 
  of commercial software, even though after software publishers such as 
  Ocean, IJK and Durell pledged their support for the machine, along with 
  the company's own software arm, Tansoft. The software was there, however, 
  retailers were sending thousands of them back, reporting that the tapes 
  were faulty. Oric blamed Cosma Sales, their chosen tape duplicator 
  company, and Cosma pointed back at Oric, alleging that the Oric-1's tape 
  loading system was faulty, and it was mentioned in several magazines that 
  had trouble loading games. Not to mention the fact that the ROM chip 
  itself is faulty, and that Oric BASIC is also plagued with bugs.

  Sinclair then cut the prices of the 16 and 48K version of the Spectrum 
  down to 99.95 and 129.95 pounds respectively, forcing Oric to drop its 
  own prices to compete with their closest competitor, and things were 
  starting to improve as the color printer was revealed, at around 169.95 
  pounds, and that Christmas was approaching, however, what can only be 
  described as an act of God happened: In October, a fire destroyed the 
  factory where the Oric-1 was built, and so they had lost on the Christmas 
  period, even after manufacturing continued in another factory.

  All is not lost, however, as compared to the computers I mentioned 
  earlier, it sold quite well, with 160,000 units sold in the UK and 50,000
  units sold in France, where it was the top-selling machine of the year. 
  Still, I couldn't shake off the feeling that god is a Spectrum fanboy, 
  especially the fire incident.

  ----Jupiter Ace----

  Jupiter Ace was another home computer that sought a place in the UK 
  computer market, the Jupiter Ace wins (for me at least) for having the 
  most childlish name for a computer anyone can think of. The two men 
  responsible for the computer, interestingly enough, had been on the design
  team for the ZX Spectrum, where one of them, Richard Altwasser, did some 
  development work for the ZX 81 (the predecessor to the Spectrum) and 
  Spectrum's hardware design, while the second one, Steven Vickers, adapted 
  and expanded the 4K ZX 80 (the predecessor to the ZX 81) ROM to the 8K ZX 
  81 ROM, and wrote most of the ROM for the Spectrum, so these two men know
  a lot about home computers.

  Due to the similarities in size, cost and form factor, it is often 
  compared to the ZX 81, although it was designed internally. It uses the 
  Z80 processor, and unlike the ZX 81 which uses 75% of it just to render 
  graphics, the Ace uses it fully for running programs, and has a dedicated 
  video memory of 2KB, leaving 1K of memory free for user programming.

  It also uses rubber keys like the Spectrum (and its predecessors), and as 
  for audio, it was CPU controlled with programmable frequency and duration,
  and audio output was done through a small built-in speaker, and it 
  requires a television for display, which was in black and white only. 
  Let's just say that this computer isn't really appealing to begin with, 
  especially with only 4KB of memory, when other computers came with 16KB as
  minimum, and that you also need to buy an additional 16KB RAM-extension 
  which doubled its price. Predictably enough, most people were turned off 
  by the b/w display since almost all home computers marketed at the time 
  had color graphics, and it also didn't help with the fact that the case 
  was fragile.

  But the biggest disadvantage is that they decided to abandon BASIC as 
  default programming language for the computer. There are several good 
  reasons for this, firstly, while BASIC is good for beginners, it uses 
  unstructured programming which means that the user doesn't learn much, 
  secondly, while good for simple games and applications, it was difficult 
  to write good and large programs in that language, and thirdly, it varies 
  from platform to platform, where a game written in Applesoft BASIC will 
  not run on a Commodore 64, for example.

  However, instead of using something more educational, such as Pascal, 
  which was small, efficient and encourages good programming habits using 
  structured programming and data structuring, they decided to use another 
  language, FORTH. FORTH has many advantages, namely it can be adapted to 
  home computers with small memory and low-speed processors, allowed control
  structures to be nested to any level, limited only by available memory. 

  The disadvantage of FORTH? I'm not going to tell you, but rather, let's 
  take a look at these code samples that will print "Hello World!" when run.

  BASIC:

  10 PRINT "HELLO WORLD!"
  20 END

  Pascal:

  Program HelloWorld(output);
  begin
    writeln('Hello World!')
  end.

  FORTH:

  : HELLO  ( -- )  CR ." Hello world!" ; HELLO <cr>
  HELLO

  or 

  CR .( Hello world!)

  Now do you see why this is a bad idea? One thing you have to keep in mind 
  is that home computers were marketed for kids to teenagers, and, frankly, 
  FORTH is the best language to teach kids programming - before they run off
  to Montana to become the Unabomber's apprentice. The computer was a 
  failure from start to finish, and very few working models are available 
  today.

  So, be thankful for the fact that you weren't around when these computers 
  were released (with the exception of the Lisa), or those that were around
  during this time period, that you didn't actually stumble upon them.
  
  
  xa13
 
                                                                         
                                                        
                                                        
                                                    
                         total dos collection!                               
                                                                              
                                                                              
  ok, the title is deceiving, but on purpose. for those you don't know, there
  is a big project called "total dos collection", you can find some... info
  on this website: http://www.totaldoscollection.org/nugnugnug/
  
  the project is all about collecting and preserving all... and i mean ALL, 
  DOS software! everything... from games to applications, but from what i 
  have seen, it only collects licensed software, of some type. for example, 
  you wont find DOS utilities from public domain.
  
  so does this mean, that you can get free DOS games? warez? nope! the 
  project just collects the software and it makes it available, only to those
  who have, perhaps, an academic reason to get the collection, for example,
  universities. so you and i, can't get a copy... or can we?
  
  but of course we can! right now, TDC is on version 18. up to version 17, 
  can be found, on torrents or even at the archive.org website:
  
  https://archive.org/details/totaldoscollectionrelease1719811995_201910
  
  so... vouala! warez, that was not intended to be warez, but made warez
  after all... oh i love internet!!!
  
  
  xa14
 
                                                                         
                                             
                                              
                                          
                                                                             
              4 of the most common and best cli players for linux             
                                                                                
  *tui | text user interface
                                                                              
  as i grew up with a dos machine, i was really enjoying hearing music from 
  the terminal, watching the awesome visualization bars of programs like 
  mpxplay. so even i got older, the habit didn't get lost and i still hear
  music from my linux terminal, which i think is the most convenient way to
  organize playlists, specially if you have organized your media library by
  directories. lets see some of the most well known, linux cli media players. 
  
  /// sox\play ///  
  
  the play program from the sox package, is a simple cli mplayer. no tui, 
  you just use the command line. give |play *.mp3| in a directory to play 
  any file in that dir. so simple. make sure you have installed the 
  |libsox-fmt-all| package also, for mp3 support and other formats.

  play is not a simple program. because it's part of the sox package, it was
  designed to do very advanced stuff. you may think that is a simple player,
  but it's much more. but for simple use to hear some music is adequate 
  enough.
  
  /// mpg123\ogg123 ///  http://mpg123.org/
  
  similar to play, are these two players. also no tui, just command line. both
  programs are similar and have the same command line arguments. they also 
  accept some key commands, like play/pause/next etc.
  
                        sudo apt-get install mpg123
  
                      ...now, the real stuff comes!!!
                      
  /// cmus ///   https://cmus.github.io/
  
  cmus is something like vim, for music :) it's a very powerful application
  and has all sorts of bells and whistles. it uses ncurses for a tui and has
  7 views, like browser, playlist, filters, settings etc.
  
                          sudo apt-get install cmus
  
  you can organize your music in playlists or by folders, use the tui to add 
  or remove tracks, or you can use its command line mode. manpages are, again
  your savior on how to use it.
  

 Artist / Album             Track                                       Library
                          
                          
                          
                          
                          
                          
                          
                          
                          
                          
                          
                          
                          
                          
                          
                          
                          
                          
                          
                          
                          

 . 00:00 - 00:00                                        all from library | C RS
  
  
  /// moc ///   http://moc.daper.net/
  
  ...but my favorite player is moc! with a simpler interface and simple key
  bindings, moc is an easier player to use, with out loosing any features.
  again you can use moc to listen to all sorts of music, even internet radio
  stations, mod/track files, mp3/ogg etc. like cmus, moc also has powerful
  command line arguments and you can use it to other projects, like bash
  scripts. it can also launch as a daemon and control it via command line
  args.
  
                            sudo apt-get install moc

Ĵ/home/x/MusicĿĴPlaylistĿ
../                                   1 http://stream03.uzic.ch:9[     |NET]
electro-bass/                                                               
mod/                                                                        
                                                                            
                                                                            
                                                                            
                                                                            
                                                                            
                                                                            
                                                                            
                                                                            
                                                                            
                                                                            
                                                                            
                                                                            
                                                                            
                                                                            
                                                                            
                                                                            
                                                                            
ĴFiles: 1                 Ĵ       Master  60%  Ĵ 000:00:00ô
[]                                                                            
00:00       [00:00]     kHz     kbps [STEREO] [NET] [SHUFFLE] [REPEAT] [NEXT] 
                                                                            
 
  for sure, linux cli media players, don't have the magic of the old DOS ones.
  but also, don't the troubles of them... i still remember trying to use DOS
  players to play music in the background, while i was using a shell in the
  foreground... with limited memory, players forcing to run in protected 
  mode and many... many... many... resets :)
  
  
                                                                                
  xa15
 
                                                                         
                                            
                                             
                                           
                                                                             
                                                                              
                                                                              
  you may know protracker, screamtracker, fasttracker, milkytracker, renoise,
  etc. but now there is also another one and is called bassoon tracker! the
  special thing with this player/tracker, is that you can use it online and
  it's written in javascript!
  
                      https://www.stef.be/bassoontracker/
                      
  you can create your own music, in any device connected to the web... even 
  a smartphone! no need to use emulation or old text mode trackers. everything
  is doable via a graphical user interface.
  
  the tracker is open source software (MIT license) and you can download the
  code from https://www.github.com/steffest/bassoontracker
  
  here are some of the features it has:
  @ Protracker and FastTracker compatible: load, edit and save .mod and .xm 
    files
  @ Allows up to 32 channels
  @ Has a built-in sample editor
  @ Imports 8-bit WAV files, 8-Bit Sampled Voice (8SVX) files, and RAW samples 
    (as well as any other format the AudioContext interface can read, such as 
    .mp3 and .ogg)
  @ Exports to .wav and .mp3 formats
  @ Includes the historic ST-01 and ST-02 sample disks, released in 1987 
  @ Uses the modarchive API to give access to several thousands of music files
  @ Uses the modules.pl API to give access to even more music files
  @ Can connect to your Dropbox account to directly read and write files
  @ Includes a lightweight player library which you can use in your projects

  specially the modarchive/modules.pl API is a very cool feature. you can edit
  tracks directly from those websites and store them locally!
  
  personally i am not into music/track editing, but for a beginner is a very
  fine choice to start with. give it a try and play with the sample demos it
  offers.



  xa16
 
                                                                         
                                                 
                                                              
                                                        
                                                                             
                      bottomless abyss bbs // stack fault                     
                                                                              
When Hacking and CTF meets the BBS
==============================================================================

Again this year, The Bottomless Abyss BBS is organizing its contest during
the year-end holidays. The concept is simple, participate in 1 or both of the
2 tracks the contest has to offer and make points. The winners from each track
get some special swag, get their name immortalized on the Hall of Fame and
create some unique memories. It's more for the fun than anything else...


When is the contest?
==============================================================================

The contest starts on December 19th 2020 at 00:00EST and ends on January 19th
2020 at 00:00EST.


Where do I connect to participate in the contest?
==============================================================================

You have to create an account on The Bottomless Abyss BBS using one of the
following:

  telnet://bbs.bottomlessabyss.net:2023
  ssh://bbs.bottomlessabyss.net:2222
  https://bbs.bottomlessabyss.net/connect



Track 1: Full-blown Capture-The-Flag (CTF) Hacking challenges
==============================================================================

What is a CTF?
----------------

In a CTF, participants have to complete challenges to gather flags (proofs of
success) and submit them in a scoreboard. The scoreboard then validates your
flag and if correct, will credit you with the points associated with the
challenge. Challenges does not require any particular hacking skills but the
more knowledge you have, the better your chances. Curiosity and perseverance
are really the winning factors here. Anyone can do it...


How does it work?
-------------------

You connect to the BBS and access the custom developed contest environment,
from there you have access to everything you need to complete your goals.
List of challenges, description, format of the flag to look for, hints, etc.
Everything is centralized in the same location.

The Bottomless Abyss BBS is also the official board of Hackfest, the largest
IT security conference in Canada. Stackfault (+o) have been part of the
Hackfest organization for many years and is also a challenge designer. Teaming
with several other designers, the CTF offers a wide variety of challenges for
the participants to solve.


Where are the challenges?
---------------------------

The challenges can be on the BBS itself, on a website, or within static files
requiring you download and "crack" them locally. It really depends on the
designer but the information is all available when you access the scoreboard.


Who can do this CTF stuff?
----------------------------

There are challenges for all and any skill levels and it's a great opportunity
to learn in a casual environment. Other participants are very happy to share
hints and give nudges in the specially created message bases.

One big particularity of this track is that challenges are released on a
regular basis during the whole contest and points awarded for solving them
decreases over time. The quicker you solve them, the more points you get. It's
more of a marathon than a sprint. It allows casual players to perform well even
if they cannot commit crazy amount of time. It also ensure participants have to
connect regularly to keep up to date with new challenges.


Track 2: Door games triathlon
==============================================================================

You think hacking and CTF is not your cup of tea? Why not try the second trace
and focus on games (who doesn't like games?). These 3 games are made available
just for the contest and based on the nature of the game, they may reset on a
weekly basis or bi-weekly basis. This keeps the games exciting and avoid
having a player who dominates to just stay on top. You have to work regularly
to maintain your standing.


How does the scoring works?
==============================================================================

For both tracks, all scores are kept in a dynamic Hall of Fame and everything
is automatically updated. A special ranking system provides you with better
levels everytime you progress.

For the Door games triathlon, the sum of the points from all 3 games makes
your total score for that track. If the game allows your score to drop, this
also have an effect on the scoreboard, play your moves carefully.


Conclusion
==============================================================================

I hope to see you around since this is a great way to create a synergy between
the BBS scene and the Hacking community. After all, BBSes have always been the
prefered home of hackers, didn't they? The best of all, it's free as in beer!


Cheers, and Hack the Planet! :)


                                                                              


     c0W+PUk5+ t   F7xY +/ T7wjt Lc0W PU rioR wAF xYA+ UT7 jt gD1C jt Q y i c 
  CA NkiBfX Ag O7 AiyCf IvICB HvAAN iBfX4 g4O7w iyCfT vIC RHvA sf3hH 6iLe Ry0g
  AAA Xv /IIBQj48i e7Rz4HOcA Pj76AAXvC IIBQj48 Te7Rz HOcAHP  6vgk+B FAj7Q PgzA
      Pc2TbqJADKCBb+7yL70zjt2SQO8AjPc2TbqJADK Bb+7yL70zjt2SQO8uQw3ir40yfQ     
  E  As7rioR7 AF6irKLf 1/gsR0BwA 5As7rioR7 AF6irK fX1/gsR0 wAFuoZzS qERPk7T Ct
    Q e e3 C I   gTJO +5 s ri  7wAF6ir L X / sR0 w F oZ S q R k7T C d4 5  k + 


  
         Ŀ  Ŀ Ŀ  Ŀ  Ŀ  Ŀ  Ŀ
        ͸ ; ͳ  ͳ ͸ ; ͳ  ͸ ͳ  ͸ ͳ;
               ۳         ۳        Ŀ
                             ͸ ͸  
                                  
        ͳ  ͳ      ͳ  ͳ      ͳ  ͳ ͳ     
           ;    ;    ;    ;  ; ;  ;

  xt01
 
                                                                         
                                                 
                                                     
                                               
             clear your terminal screen, like the 8bit computers did...      
                                                                              
                                                                              
  if you had an old home micro computer, you should remember their "terminal"
  screen. i still remember the one from my Amstrad 6128. so, what about making
  a similar one, for our bash terminal. nothing fancy, nothing great.

  just some simple ansi commands, to clear, colorize the screen and put some
  info on it, to resemble the oldskool style. try the function below. feel
  free to customize it as you like.

  function clear_retro {
  bs=$(bash --version | head -n2)
  fm=$(awk '/MemFree/ { printf "Free Mem. %.1f MBs", $2/1024 }' /proc/meminfo)
  echo -e "\033[44m\033[1;33m\033[2J\033[1;1H$bs\033[4;1H$fm"
  }


  xt02
 
                                                                         
                                                         
                                                           
                                                          
                                                                             
                                               convert ansi files to html     
                                                                              
  i was trying to find a way to convert the end result .ans file of null to
  a pdf. i tried some ways, but the result wasn't what i expected. the thing
  is, that i have promised a pdf version for null00a and i have written about
  it, in the editorial. so some people, asked about it and after telling them
  the problem i had, one of them suggested to convert the ansi to html and
  then to pdf.

  the easiest way i found, for me, was a python utility called ansi2html.
  you can install it with pip, as easy as: pip install ansi2html
  although you can use it as python library, it has an external app,
  allready made called ansi2html. the help page (html2ansi --help) shows many
  useful options. i ended using the following command line:

  cat null00a.ans | ansi2html -s solarized -a --input-encoding=CP437 >null.htm

  ...which will automatically convert the CP437 encoding of the original ansi
  file to UTF, make the URLs provided in the text as click-able links! and
  use a different color pallete, cause the original, has a problem displaying
  dark gray (|08) to a black background.

  the only downside is, that it reveals the "hidden text", which was a task
  for you to do so :) perhaps with some tweaking in the final html code, or
  in the original python code, would solve this matter... but nah... i am
  bored. also it's a way to discover that there is some hidden text, cause
  otherwise, you may didn't find about it. now you know... there are hidden
  scriptures inside null... :p~~~

  i still tried to convert it to a pdf, but again i didn't like the result
  and it was too much trouble. but the HTML format, i think, perhaps, it's
  better. anyone has a browser in their system and the links are working with
  a click ;) so why bother convert it to a pdf?


  xt03
 
                                                                         
                                         
                                             
                                         
                                                                             
                         amstrad emulator for linux...                        
                                                                              
  clone the github page with:

  git clone https://github.com/ColinPitrat/caprice32

  then type:

  cd caprice32
  make APP_PATH="$PWD"
  ./cap32

  now download this awesome demo, from here:
https://files.scene.org/view/parties/2011/forever11/cpc/demo/batman_forever.zip


  xt04
 
                                                                         
                                              
                                                   
                                                  
                                                                             
                     Strip ANSI code from String [Python3]                    
                                                                              
  below is a simple function to strip ansi codes from a string, written in
  python3. the function will strip almost any ansi code and also it will
  interpret the CSInC code into empty characters. some ansi files use the
  CSInC code to emulate empty spaces, so if you have such a code inside your
  string and only remove the codes, you will get a string with different size
  than it would have been, if you had displayed the ansi codes, normally.

  by using the same functions and getting the stripped string, you can easily
  find the length, of a stripped ansi string ;)

  def stripansi(s):
  if len(s)==0:
    return ''
  i = 0
  res = ''
  esc = False
  opt = ''
  while i<= len(s)-1:
    if esc:
      if s[i] in ['A','B','D','E','F','G','H','J','K','S','T','f','m','u']:
        esc = False
        opt = ''
      elif s[i]=='C':
        res += ' '*int(opt)
        opt = ''
        esc = False
      elif s[i] in ['1','2','3','4','5','6','7','8','9','0']:
        opt += s[i]
    else:
      if s[i] == chr(27):
        esc = True
        i+=1
      else:
        res += s[i]
    i+=1
  return res


  xt05
 
                                                                         
                                               
                                                      
                                                    
                                                                             
                     Strip MCI codes from string [Python3]                    
                                                                              
  another snippet of code, for removing all those pipe codes, mystic uses.
  it's useful when writing scripts/mods and want to manipulate the "real"
  text of a string and not the pipe codes.

  def stripmci(s):
  i = 0
  val = ''
  while i < len(s):
    if s[i] != '|':
      val += s[i]
      i += 1
    else:
      i += 3
  return val


  xt06
 
                                                                         
                                                  
                                                   
                                               
                                                                             
                             Wrap line [Python3]                              
                                                                              
  and to make the above snippet of code, more useful, here is another very
  useful piece of code, which will wrap a line, even if that string includes
  pipe codes in it.

  def wrapline(s,width=78):
  wrapchars = [' ','/','.',',']
  if len(s) < width:
    return s
  res=[]
  i=len(s)-1
  while i>0:
    if s[i] in wrapchars:
      if len(stripmci(s[:i])) < width:
        res.append(s[:i])
        s=s[i+1:]
        i=len(s)-1
    i-=1
  return res

  also this is another implementation of a wrapline function. the logic
  differs, to show that there are different ways you can use to implement
  things and that there is no right or wrong way.

  def wraplinenl(text, width=80):
    lines = []
    for paragraph in text.split('\n'):
      line = []
      len_line = 0
      for word in paragraph.split(' '):
        len_word = len(word)
        if len_line + len_word <= width:
          line.append(word)
          len_line += len_word + 1
        else:
          lines.append(' '.join(line))
          line = [word]
          len_line = len_word + 1
      lines.append(' '.join(line))
    return '\n'.join(lines)


  xt07
 
                                                                         
                                             
                                                 
                                            
           Find message base id, by echo-tag [Python3]                       
                                                                              
                                                                              
  for some scripts/mods, i need to pass a variable of a specific message
  base. usually the *-dat echoarea of an echonet. but because all bbses don't
  assign the same id to that specific echoarea, up to now, i was leaving to
  the sysop of the bbs to fill that id number, in a variable inside the
  script... but no more.

  because a specific echo-area, has the same echo-tag, in all bbses, instead
  of searching the message base by its id, we can search it by its echo-tag
  string. and that's what the following MPY function does. it finds the id
  number of a message base, with a specific echo-tag. so for example, if we
  want to find the id of the fsxnet, dat area, we can search for the fsx_dat
  echo-tag and get it! now you don't have to customize mods, for entering the
  base id, at least not for fsx :)

  def findbase(s):
    s = s.upper()
    res = []
    i = 0
    mb = getmbase(i)
    while mb and not shutdown():
      if mb['echotag'].upper() == s:
        return mb['id']
      i +=1
      mb = getmbase(i)
    return -1

  the function will return the base id, in integer if it finds it, or else
  it will return -1. now you can use the getbaseid() MPY function to open
  that message base and get the info you want ;) happy modding...

 
  xt08
 
                                                                         
                                                
                                                      
                                                 
                                                                             
                 convert ansi to mci (mystic codes) [python3]                 
                                                                              
  i wanted a way to convert ansi escape codes to mci codes. this way, i could
  display an ansi file, via mystic, with no breaks/wrapping etc. so below is
  my way of doing so.

  it actually renders an ansi file to a virtual 2d array. this way, even if
  in the ansi file are codes that move the cursor (like [A, [B, etc.) it will
  render the ansi file correct.

  at first i was using a 1d list, which you can convert to a 2d-like array,
  with a formula of list[x+y*width], but after exchanging some source code
  with opicron (of bbs.opicron.eu) found out about this type of declaring a
  2d list ( matc = [[32 for x in range(h)] for y in range(w)] ), which is
  more easy to the eye to use.


  def ansi2mci(ansi):
    global x,y
    global h,w
    global bottom
    #ansi is a list
    opt = ''
    esc = False
    w = 80
    h = 1000
    matc = [[32 for x in range(h)] for y in range(w)]
    matfg = [[7 for x in range(h)] for y in range(w)]
    matbg = [[7 for x in range(h)] for y in range(w)]
    oldxy = [0,0]
    mode = 0
    fg = 7
    bg = 16
    ansifg = range(30,38)
    ansibg = range(40,48)
    pipefg = [0,4,2,6,1,5,3,7]
    pipefgh = [8,12,10,14,9,13,11,15]
    pipebg = [16,20,18,22,17,21,19,23]
    fgcol = []
    x=0
    y=0
    bottom = 0

    def checkxy():
      global x,y
      global h,w
      global bottom
      if x < 0: x = 0
      if x>w-1:
        x=0
        y+=1
      if y>h-1: y=h-1
      if bottom < y: bottom = y


    if len(ansi) == 0:
      return ''
    for s in ansi:
      s = s.encode('cp437')
      if chr(1) in s:
        pass
      else:
        i = 0
        y+=1
        x=0
        while i<len(s):
          if not esc:
            if s[i] == chr(27):
              esc = True
              i += 1
            elif s[i] == chr(12):
              pass
              #x=0
              #y=0
            elif s[i]==chr(13):
              x = 0
              y+=1
              checkxy()
            elif s[i]==chr(10):
              x = 0
              y+=1
              checkxy()
            else:
              matc[x][y] = ord(s[i])
              matfg[x][y] = fg
              matbg[x][y] = bg
              x += 1
              checkxy()
          else:
            acodes = ['A','B','C','D','E','F','G','l','N','O','P','m','s','u',
            'J','H','f','h']
            if s[i] in acodes:
              esc = False
              if s[i] == 'C': #forward
                if opt != '': x += int(opt)
                else: x +=1
                checkxy()
              elif s[i] == 'A': #up
                if opt != '': y -= int(opt)
                else: y -= 1
                #print 'A: '+str(y)
                checkxy()
              elif s[i] == 'B': #down
                if opt != '': y += int(opt)
                else: y +=1
                #print 'B: '+str(y)
                checkxy()
              elif s[i] == 'D': #back
                if opt != '': x -= int(opt)
                else: x -=1
                checkxy()
              elif s[i] == 's': #save cursor
                oldxy = [x,y]
              elif s[i] == 'u': #restore cursor
                x,y = oldxy
              elif s[i] == 'J': #clear screen? NOPE
                x = 0
                y = 0
              elif s[i] == 'l': #reset mode? nope
                pass
              elif s[i] == 'K': #clear EOL
                for i in range(x,w):
                  mata[i][y]=' '
                x = 0
                y += 1
                checkxy()
              elif s[i] =='H' or s[i] == 'f': #gotoxy
                if len(opt)==0:
                  x,y = [0,0]
                else:
                  k=opt.split(';')
                  x=int(k[0])-1
                  y=int(k[1])-1
                  checkxy()
              elif s[i]=='m': # set color mode!
                codes=opt.split(';')
                for code in codes:
                  num = int(code)
                  if num == 0:
                    mode = 0
                    fgcol = pipefg
                  elif num == 1:
                    mode = 1
                    fgcol = pipefgh
                  elif num == 5:
                    mode = 5
                  elif num == 7:
                    mode = 7
                    tmp = fg
                    fg = bg
                    bg = tmp
                  elif num == 8:
                    fg = 7
                    bg = 16
                  elif num in ansifg:
                    fg = fgcol[ansifg.index(num)]
                    matfg[x][y] = fg
                  elif num in ansibg:
                    bg = pipebg[ansibg.index(num)]
                    matbg[x][y]=bg
              opt = ''
            else:
              opt += s[i]
          i+=1


    oldfg = 7
    oldbg = 0
    res = []

    for y in range(bottom):
      r = ''
      for x in range(w):

        if oldfg <> matfg[x][y]:
          r += '|'+str(matfg[x][y]).zfill(2)
          oldfg = matfg[x][y]
        if oldbg <> matbg[x][y]:
          r += '|'+str(matbg[x][y]).zfill(2)
          oldbg = matbg[x][y]

        r += chr(matc[x][y])

      res.append(r)

    return res

  to use the above code you can use this piece of code. it will read an ansi
  file, in CP437 format, convert it to mci codes and display it in the
  screen. i hope you find this function very helpful and use it in your
  projects.

  import codecs
  f = codecs.open('/home/x/3.txt','r','cp437')
  lines = f.readlines()
  f.close()

  q=ansi2mci(lines)

  for w in q:
    sys.stdout.write(w)
    sys.stdout.flush()


  xt09
 
                                                                         
                                                  
                                                          
                                                   
               yes/no/cancel input with lighbars [python 2.7]                
                                                                              
                                                                              
  in case the default input function of MPY don't cover you, here is another
  one. it imitates the default yes/no selection, but it can also get a
  "cancel" response, and the text displayed is customizable. so you can use it
  also in other cases, you need a response of the user with three options.

  you can use spacebar, left/right cursor keys to select the value, but it
  also accepts the first letter of the words you entered as options and it's
  case insensitive. below is a full working MPY script, to test it yourself.


  from mystic_bbs import *

  KEY_UP       = chr(72)
  KEY_DOWN     = chr(80)
  KEY_ESCAPE   = chr(27)
  KEY_ENTER    = chr(13)
  KEY_TAB      = chr(9)
  KEY_BACKSPACE= chr(8)
  KEY_LEFT     = chr(75)
  KEY_RIGHT    = chr(77)
  KEY_PGUP    = chr(73)
  KEY_PGDN    = chr(81)
  KEY_END     = chr(79)
  KEY_HOME    = chr(71)
  KEY_SPACE   = chr(32)

  def getync(x,y,trueat,offat,default=2,yes=" Yes ",no=" No ",
      cancel=" Cancel "):
      """
      Function to get a Yes/No/Cancel answer
      trueat  : color in byte value for the No button
      offat   : color in byte value for the Yes button
      default : default value
      """

      def writexy(x,y,a,s):
        gotoxy(x,y)
        textcolor(a)
        write(s)

      global exit_code
      exit_code = ""
      key = ""
      val = {0:yes, 1:no, 2:cancel}
      res = default
      while key != KEY_ENTER:
          writexy(x,y,offat,val[0]+val[1]+val[2])
          if res == 1:
              writexy(x+len(val[0]),y,trueat,val[res])
          elif res == 0:
              writexy(x,y,trueat,val[res])
          elif res == 2:
              writexy(x+len(val[1])+len(val[0]),y,trueat,val[res])
          gotoxy(1,25)
          key, extended = getkey()
          if key == KEY_LEFT:
              res -= 1
              if res < 0:
                  res = 2
          elif key == KEY_RIGHT or key == KEY_SPACE:
              res += 1
              if res > 2:
                  res = 0
          elif key.upper() == yes[1].upper():
              res = 0
              break
          elif key.upper() == no[1].upper():
              res = 1
              break
          elif key.upper() == cancel[1].upper():
              res = 2
              break

      return res


  write('|07|16|CL')
  a = getync(5,5,30,7)
  if a == 0:
    write('YES selected')
  elif a == 1:
    write('NO selected')
  elif a == 2:
    write('CANCEL selected')


  xt10
 
                                                                         
                                         
                                                  
                                SYNCHRONET      
                                                     bash script by DeepThaw 
                                                                              
                                                                              
  this bash script will let your users opt to download files via http
  download rather than relying solely on the likes of zmodem. it was written
  and tested with synchronet, but with minor tweaks should work with any bbs
  running in *nix. you pass the socket descriptor as the first parameter, and
  the file or list of files as the second parameter.

  synch setup:
  Download Command Line: %httpdl.sh% %h %f
  Batch Download Command Line: %httpdl.sh% %h @%f
  Native Executable: yes
  Supports DSZLog: no
  Socket I/O: yes

  you will probably want to disallow executing of php files et. al from the
  directory you choose to use.

  you'll need the uuid-gen and at packages, as well as a web server of some
  sort running on your system.

  #!/bin/bash

  # we generate a uuid to use for storage of the files. we only keep
  # the first 8 characters
  uuid=$(uuidgen)
  dirhash="${uuid:0:8}"

  # the base url from which files will be downloaded
  downloadprefix="http://deepthaw.net/bbs_downloads/"
  mkdir -m715 "/var/www/html/bbs_downloads/$dirhash" # is 715 safe?

  # setup some needed variables
  descriptor="$1" # socket descriptor
  files="$2" # file or list of files if it starts with @

  # if the first character in the name of $files is @, we read every line
  if [ "${files:0:1}" == '@' ]; then
  batch="${files:1}"
  while IFS=$' \t\n\r' read -r line; # i hate bash
  do
  cp -p "$line" "/var/www/html/bbs_downloads/$dirhash"
  done < "$batch"
  else
  cp -p "$files" "/var/www/html/bbs_downloads/$dirhash"
  fi

  # from at package - lets us schedule jobs for later
  echo "rm -rf /var/www/html/bbs_downloads/$dirhash" | at now +60 minutes

  # tell users where to find the files on the website
  >&$descriptor printf 'your file(s) will be available at\r\n%s%s/ for one
  hour.\n' $downloadprefix $dirhash

  # close socket
  exec >&-


  xt11
 
                                                                         
                                        
                                          
                                     
                                                                             
                                                                              
                                                                              
  so lets play with darkness 2 a bit, but not the actual game. most of the
  data files are binary files, which can be hex edited. but i am not in the
  mood for it. so it was nice finding one file that contains all ansi graphics
  of the game (DARKTXT.DAT) cause you can rip them  off! no, no, no, you
  should definitely don't do that! but you can easily alter them a bit to
  match your bbs or whatever. the format of the file is very easy. each ansi
  has a code like @A0,@A1,@A2 etc. after this code, is the ansi escape codes
  for the graphic it self. a nice thing, that i think it should be by default
  is to clear the screen every time you enter an area. so to do that, add the
  ESC[2J seq. after the graphic code like @A2ESC[2J

  i also got into the DRS thing a bit and tried some stuff. i was a bit
  curios about a thing, so i tried to see if it is possible...

  below is a DRS file for Darkness2. It's mostly a proof of concept, rather
  than a good DRS for the game. i am not revealing, what is about. to find out
  you'll have to decode the file, name it as a .DRS file and enable it, in
  the Darkness configuration.

  it's obvious that the DRS engine, can do a lot of remarkable things. it only
  needs imagination :)

Ow0KQFRJVExFOlQxMDENCkBWRVJTSU9OOjEuMDANCkBBVVRIT1I6WFFUUg0KQEFSRUE6NTANCjsN
CkBTRVRDUkVESVRTOjcNCkBSQU5ET01JVEVNDQobWzJKG1swbQ0KG1sxbSAgICAbWzQ3bbAbWzMw
OzQwbbKxsLCwsLCysBtbMG0gG1sxOzQ3bbKxsBtbMG3bG1sxOzMwbbLcsbIbWzBtsbGysg0KG1tB
G1syN0MbWzE7MzBt39/f39/f39/f398bWzBtIBtbMTszMG3cG1swbSAbWzE7MzBt29zcG1swbSAb
WzE7MzBt398NChtbQRtbNDdDG1swbSAbWzE7MzBt3xtbMG3bG1sxOzMwbbKw398bWzBtIBtbMTsz
MG3b398bWzBtG1sxMUMbWzE7MzBt3w0KG1tBG1s3MEMbWzM3OzQ3bbIbWzBtDQogICAgG1sxOzQ3
bbAbWzMwOzQwbbKxsLCwsLCysBtbMzc7NDdtsrEbWzQwbdsbWzBt2xtbMTszMG2ysLLf3xtbMG0b
WzE2Qw0KG1tBG1szOUMbWzE7MzBt37LcG1swbSAbWzE7MzBt39/fG1swbSAgG1sxOzMwbd8bWzBt
ICAgIBtbMTszMG3c2xtbMG0gIA0KG1tBG1s1N0MgIBtbMzVtIBtbMzFtICAgG1szN20gIBtbMzVt
IBtbMzdtICAgIBtbMTs0N22yG1swbQ0KICAgIBtbMTs0N22yG1szMDs0MG2ysbCwsLCxsrAbWzM3
OzQ3bbLfsBtbMG3bG1sxOzMwbbGyG1swbRtbNkMbWzM1bSANChtbQRtbMjdDG1szN20gICAgG1sx
OzMwbSAgICAbWzBtICAbWzM1bSAbWzM3bSAgIBtbMTszMG3fshtbMG0gG1sxOzQ3bbAbWzQwbQ0K
G1tBG1s0NUMbWzBt3BtbMTszMG2xsrCfUiHfG1swbRtbNUMbWzMxbSAg3NzcICAbWzM1bSAbWzM3
bSAgICAbWzE7NDdtshtbNDBtDQobW0EbWzcxQxtbNDdtsBtbMG0NCiAgICAbWzE7NDdtsRtbMG0g
G1sxOzMwbbKxsLCw27AbWzQ3bbIbWzBtIBtbMTszMG3fG1szNzs0N22wG1swbdsNChtbQRtbMThD
G1sxOzMwbbGyG1swbRtbN0MbWzM1bSAgG1sxOzMwbSAgG1swOzMxbdzc3BtbMTszMG0gIBtbMDsz
NW0gG1szN20bWzVDDQobW0EbWzQyQxtbMTszMG3f27GwsBtbMzc7NDdtsBtbMzA7NDBtsdwbWzBt
IBtbMTszMG3cG1swbRtbNUMbWzM1bSANChtbQRtbNThDG1szMW0g2xtbMTszMDs0MW0gICAgG1sw
OzMxbSAbWzM3bRtbNUMbWzE7NDdt37IbWzBtDQogICAgG1sxOzQ3bbAbWzBt2yAbWzE7MzBtsrGw
sLAbWzBt3BtbMTs0N22yG1swbdwgG1sxOzQ3bbCwG1szMDs0MG2wshtbMG0bWzlDDQobW0EbWzI5
QxtbMTszMG0gG1s0MW0gICAgIBtbNDBtIBtbMDszNW0gG1szN20bWzZDG1sxOzMwbbKxsBtbMzc7
NDdtsBtbNDBtDQobW0EbWzQ3QxtbMzBtst+y2xtbMG0bWzhDG1szMW0g39/fIBtbMzVtICAbWzM3
bSAgICCyG1sxOzQ3bbIbWzBtDQogICAgG1sxOzQ3bbIbWzMwbdwbWzBt2xtbMTszMG3csBtbMG0g
ICAbWzE7NDdtsrKwsbKwG1szMDs0MG2wsrEbWzBtG1s1Qw0KG1tBG1syNkMbWzE7MzBt3BtbMG3c
IBtbMzVtIBtbMTszMG0gG1swOzMxbd/f3xtbMTszMG0gG1swOzM1bSAgIBtbMzdtIA0KG1tBG1sz
OUMgICAbWzE7MzBt3LKwsbAbWzM3OzQ3bbAbWzBt3CAbWzE7MzBt37LcG1swbRtbNkMbWzM1bSAb
WzM3bRtbNUMNChtbQRtbNjVDG1szNW0gG1szN20gICAgshtbMTs0N22yshtbMG0NCiAgICAbWzMw
bdwbWzE7Mzc7NDdtsrEbWzMwOzQwbbLcG1swbSAbWzE7MzBt3BtbMzc7NDdtsrKxsrCxshtbMG2y
DQobW0EbWzE5QxtbMTszMG2xshtbMG0bWzVD3xtbMTFDG1sxOzMwbdzcst/c3N/csLAbWzBt3xtb
MTszMG2wG1swbSAgDQobW0EbWzUyQxtbMTszMG2yG1swbSDcIBtbMTszMG3fstzcG1swbRtbNkMb
WzE7MzBt3NzcG1swbSCyG1sxOzQ3bbKxG1swbQ0KICAgIBtbMzBt29sbWzE7Mzc7NDdtsrEbWzMw
OzQwbdyw3xtbMzc7NDdtsrKysrCxsrEbWzMwOzQwbbCxshtbMG0bWzExQw0KG1tBG1szM0MbWzE7
MzBt3Nzcst/fG1swbSAbWzE7MzBt3BtbMG2yG1sxOzQ3bbAbWzBtIBtbMTszMG3cG1szNzs0N22y
G1s0MG0NChtbQRtbNDZDG1szMG2w3LAbWzBtIBtbMTszMG2wG1swbSAbWzE7MzBt3BtbMG0gstwb
WzE7MzBt3NzcG1swbbANChtbQRtbNjBDG1sxOzMwbd/f39+ysrKyshtbMG2wshtbMTs0N22ysRtb
MG0NChtbNUMbWzMwbdvbG1sxOzM3OzQ3bbKxG1szMDs0MG2ysLIbWzM3OzQ3bbKysbKwsbKxG1sz
MDs0MG2wsRtbMG2wDQobW0EbWzIzQxtbMTszMG2xsrLb29vb27Lf37Lc3BtbMG2xshtbMTs0N22w
sLEbWzMwOzQwbd8bWzBtIBtbMTs0N22yG1s0MG0NChtbQRtbNDVDG1swbSAbWzE7MzBtsBtbMG3f
IBtbMTszMG2wsLAbWzBt3xtbMTs0N22yG1swbSCwG1sxOzMwbbKysrKystwNChtbQRtbNjND3Nzc
398bWzBtsLCyG1sxOzQ3bbKyG1swbQ0KG1s3Q9vcG1sxOzMwbbKxsLIbWzM3OzQ3bbKysbGwsbIb
WzBtshtbMTszMG2wshtbMG2xG1sxOzMwbbGysrLf3xtbMG0gDQobW0EbWzMxQxtbMTszMG3c3Btb
MG2xsrIbWzE7NDdtsLCxsrKyG1swbSDb3xtbMTszMG2wsbAbWzBtICAbWzE7MzBtsLCwDQobW0Eb
WzUzQxtbMG3bG1sxOzQ3bbIbWzBtIBtbMTszMG3fG1swbbAbWzE7MzBtsrKysrKysrKystwbWzBt
sLIbWzE7NDdtG1s0MG0NChtbQRtbNzFDG1s0N22wshtbMG0NChtbN0MbWzE7NDdtshtbMG3b3xtb
MTszMG2xsbAbWzM3OzQ3bbIbWzMwOzQwbd8bWzQ3bdwbWzM3bbKwsbGyG1swbbKxsLENChtbQRtb
MjVDG1sxOzMwbdzcG1swbdwbWzE7MzA7NDdt3xtbMG2yshtbMTs0N22wsLCxsbKyshtbNDBtsrIb
WzMwOzQ3bdwbWzQwbQ0KG1tBG1s0MkMbWzBt3BtbMTs0N22yG1szMDs0MG2wsRtbMG0gG1sxOzMw
bbCwG1szNzs0N22wG1swbSAbWzE7MzBtsLCwDQobW0EbWzU0QxtbMG3fIBtbMTszMG3f3LDf3xtb
MG2wG1sxOzMwbbKysrKyshtbMG2wsbIbWzE7NDdtsrAbWzBtDQobWzE7MzBt3Nzc3Nzc3Nzc3Nzc
3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzcDQobW0Eb
WzYzQ9zc3Nzc3Nzc3Nzc3Nzc3NwbWzBtDQp8RFRTZWFyY2hpbmcgYmV0d2VlbiB0aGUgcnVpbnMg
eW91IHNwb3QgYW4gb2xkIGRyb2lkLiBJdCdzIG9idmlvdXMgdGhhdCB0aGlzDQpAVVANCmRyb2lk
IGhhcyBzb21lIHNlcmlvdXMgZGFtYWdlLCBwZXJoYXBzIGZyb20gYmF0dGxlcywgYnV0IG5ldmVy
IHRoZSBsZXNzLCB5b3UgDQpAVVANCmFyZSBjdXJpb3VzIHRvIHNlZSBpZiBpdCdzIHdvcmtpbmcg
YW5kIHBlcmhhcHMgeW91IGNhbiBzYWx2YWdlIGl0Lg0KQERJVklERVINCkBGT1JNQVQ6fERUfDA3
VGhlIHwwNFQxMDEgfDA3YWN0aXZhdGVzIGFuZCBhdCB0aGF0IHRpbWUsIHlvdSByZWFsaXplIHRo
ZSBtaXN0YWtlIHlvdSBtYWRlIQ0KVGhlIGRyb2lkIHRha2VzIGFuIG9mZmVuc2l2ZSBwb3NpdGlv
biwgYnV0IGhhcyBubyB3ZWFwb25zIGF0IGhhbmQuIEl0IGZpbmRzIGEgDQpAVVANCnJlYmFyIGZy
b20gdGhlIHJ1aW5zIGFuZCBncmFicyBpdC4uLg0KDQpAUFJPTVBUOnxEVFdpbGwgeW91IGF0dGFj
az8gfElODQpAWUVTTk86Tk8NCg0KQElGVFJVRTpBVFRBQ0sNCjpOT0FUVEFDSw0KG1syShtbMG0N
ChtbMW0gICAgG1s0N22wG1szMDs0MG2ysbCwsLCwsrAbWzBtIBtbMTs0N22ysbAbWzBt2xtbMTsz
MG2y3LGyG1swbbGxsrINChtbQRtbMjdDG1sxOzMwbd/f39/f39/f39/fG1swbSAbWzE7MzBt3Btb
MG0gG1sxOzMwbdvc3BtbMG0gG1sxOzMwbd/fDQobW0EbWzQ3QxtbMG0gG1sxOzMwbd8bWzBt2xtb
MTszMG2ysN/fG1swbSAbWzE7MzBt29/fG1swbRtbMTFDG1sxOzMwbd8NChtbQRtbNzBDG1szNzs0
N22yG1swbQ0KICAgIBtbMTs0N22wG1szMDs0MG2ysbCwsLCwsrAbWzM3OzQ3bbKxG1s0MG3bG1sw
bdsbWzE7MzBtsrCy398bWzBtG1sxNkMNChtbQRtbMzlDG1sxOzMwbd+y3BtbMG0gG1sxOzMwbd/f
3xtbMG0gIBtbMTszMG3fG1swbSAgICAbWzE7MzBt3NsbWzBtICANChtbQRtbNTdDICAbWzM1bSAb
WzMxbSAgIBtbMzdtICAbWzM1bSAbWzM3bSAgICAbWzE7NDdtshtbMG0NCiAgICAbWzE7NDdtshtb
MzA7NDBtsrGwsLCwsbKwG1szNzs0N22y37AbWzBt2xtbMTszMG2xshtbMG0bWzZDG1szNW0gDQob
W0EbWzI3QxtbMzdtICAgIBtbMTszMG0gICAgG1swbSAgG1szNW0gG1szN20gICAbWzE7MzBt37Ib
WzBtIBtbMTs0N22wG1s0MG0NChtbQRtbNDVDG1swbdwbWzE7MzBtsbKwn1Ih3xtbMG0bWzVDG1sz
MW0gIBtbMTszMG3c3NwbWzA7MzFtICAbWzM1bSANChtbQRtbNjZDG1szN20gICAgG1sxOzQ3bbKw
G1swbQ0KICAgIBtbMTs0N22xG1swbSAbWzE7MzBtsrGwsLDbsBtbNDdtshtbMG0gG1sxOzMwbd8b
WzM3OzQ3bbAbWzBt2w0KG1tBG1sxOEMbWzE7MzBtsbIbWzBtG1s3QxtbMzVtICAbWzE7MzBtICDc
3NwgIBtbMDszNW0gG1szN20bWzVDG1sxOzMwbQ0KG1tBG1s0MkPf27GwsBtbMzc7NDdtsBtbMzA7
NDBtsdwbWzBtIBtbMTszMG3cG1swbRtbNUMbWzM1bSAbWzMxbSANChtbQRtbNTlDG1sxOzMwbdvb
G1s0MW0gG1s0MG3b2xtbMDszMW0gG1szN20bWzVDG1sxOzQ3bd+yG1swbQ0KICAgIBtbMTs0N22w
G1swbdsgG1sxOzMwbbKxsLCwG1swbdwbWzE7NDdtshtbMG3cIBtbMTs0N22wsBtbMzA7NDBtsLIb
WzBtG1s5Qw0KG1tBG1syOUMbWzE7MzBtINvbG1s0MW0gG1s0MG3b2yAbWzA7MzVtIBtbMzdtG1s2
QxtbMTszMG2ysbAbWzM3OzQ3bbAbWzQwbQ0KG1tBG1s0N0MbWzMwbbLfstsbWzBtG1s4QxtbMzFt
IBtbMTszMG3f398bWzA7MzFtIBtbMzVtICAbWzM3bSAgICCyDQobW0EbWzcxQxtbMTs0N22yG1sw
bQ0KICAgIBtbMTs0N22yG1szMG3cG1swbdsbWzE7MzBt3LAbWzBtICAgG1sxOzQ3bbKysLGysBtb
MzA7NDBtsLKxG1swbRtbNUMNChtbQRtbMjZDG1sxOzMwbdwbWzBt3CAbWzM1bSAbWzE7MzBtIN/f
3yAbWzA7MzVtICAgG1szN20gICAgG1sxOzMwbdyysLENChtbQRtbNDZDsBtbMzc7NDdtsBtbMG3c
IBtbMTszMG3fstwbWzBtG1s2QxtbMzVtIBtbMzdtG1s1QxtbMzVtIBtbMzdtICAgDQobW0EbWzY5
QyCyG1sxOzQ3bbKyG1swbQ0KICAgIBtbMzBt3BtbMTszNzs0N22ysRtbMzA7NDBtstwbWzBtIBtb
MTszMG3cG1szNzs0N22ysrGysLGyG1swbbINChtbQRtbMTlDG1sxOzMwbbGyG1swbRtbNUPfG1sx
MUMbWzE7MzBt3Nyy39zc39ywsBtbMG3fG1sxOzMwbbAbWzBtICANChtbQRtbNTJDG1sxOzMwbbIb
WzBtINwgG1sxOzMwbd+y3NwbWzBtG1s2QxtbMTszMG3c3NwbWzBtILIbWzE7NDdtsrEbWzBtDQog
ICAgG1szMG3b2xtbMTszNzs0N22ysRtbMzA7NDBt3LDfG1szNzs0N22ysrKysLGysRtbMzA7NDBt
sLGyG1swbRtbMTFDDQobW0EbWzMzQxtbMTszMG3c3Nyy398bWzBtIBtbMTszMG3cG1swbbIbWzE7
NDdtsBtbMG0gG1sxOzMwbdwbWzM3OzQ3bbIbWzQwbQ0KG1tBG1s0NkMbWzMwbbDcsBtbMG0gG1sx
OzMwbbAbWzBtIBtbMTszMG3cG1swbSCy3BtbMTszMG3c3NwbWzBtsA0KG1tBG1s2MEMbWzE7MzBt
39/f37KysrKyG1swbbCyG1sxOzQ3bbKxG1swbQ0KG1s1QxtbMzBt29sbWzE7Mzc7NDdtsrEbWzMw
OzQwbbKwshtbMzc7NDdtsrKxsrCxsrEbWzMwOzQwbbCxG1swbbANChtbQRtbMjNDG1sxOzMwbbGy
stvb29vbst/fstzcG1swbbGyG1sxOzQ3bbCwsRtbMzA7NDBt3xtbMG0gG1sxOzQ3bbIbWzQwbQ0K
G1tBG1s0NUMbWzBtIBtbMTszMG2wG1swbd8gG1sxOzMwbbCwsBtbMG3fG1sxOzQ3bbIbWzBtILAb
WzE7MzBtsrKysrKy3A0KG1tBG1s2M0Pc3Nzf3xtbMG2wsLIbWzE7NDdtsrIbWzBtDQobWzdD29wb
WzE7MzBtsrGwshtbMzc7NDdtsrKxsbCxshtbMG2yG1sxOzMwbbCyG1swbbEbWzE7MzBtsbKyst/f
G1swbSANChtbQRtbMzFDG1sxOzMwbdzcG1swbbGyshtbMTs0N22wsLGysrIbWzBtINvfG1sxOzMw
bbCxsBtbMG0gIBtbMTszMG2wsLANChtbQRtbNTNDG1swbdsbWzE7NDdtshtbMG0gG1sxOzMwbd8b
WzBtsBtbMTszMG2ysrKysrKysrKy3BtbMG2wshtbMTs0N20bWzQwbQ0KG1tBG1s3MUMbWzQ3bbCy
G1swbQ0KG1s3QxtbMTs0N22yG1swbdvfG1sxOzMwbbGxsBtbMzc7NDdtshtbMzA7NDBt3xtbNDdt
3BtbMzdtsrCxsbIbWzBtsrGwsQ0KG1tBG1syNUMbWzE7MzBt3NwbWzBt3BtbMTszMDs0N23fG1sw
bbKyG1sxOzQ3bbCwsLGxsrKyG1s0MG2yshtbMzA7NDdt3BtbNDBtDQobW0EbWzQyQxtbMG3cG1sx
OzQ3bbIbWzMwOzQwbbCxG1swbSAbWzE7MzBtsLAbWzM3OzQ3bbAbWzBtIBtbMTszMG2wsLANChtb
QRtbNTRDG1swbd8gG1sxOzMwbd/csN/fG1swbbAbWzE7MzBtsrKysrKyG1swbbCxshtbMTs0N22y
sBtbMG0NChtbMTszMG3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc
3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NwNChtbQRtbNjND3Nzc3Nzc3Nzc3Nzc3Nzc3BtbMG0NCkBGT1JN
QVQ6fERUfDA3VGhpcyBUMTAxIGlzIG5vdCBhbiBvcmRpbmFyeSBvbmUuIFJlYmVscyBmcm9tIHRo
ZSBPbGQgV2FycywgaGFkIHJlcHJvZ3JhbW1lZCBpdCwgdG8gc2VydmUgaHVtYW5zLiBBcyB5b3Ug
YXJlIG5vdCB3aWxsaW5nIHRvIGZpZ2h0IGl0IGFuZCBpdCBoYXNuJ3QgYW55IHB1cnBvc2UsIG5v
IG1vcmUsIGl0IGRlY2lkZXMgdG8gZGVhY3RpdmF0ZSBvbmNlIGFnYWluLCBhbW9uZyB0aGUgcnVp
bnMuDQpARk9STUFUOnxEVHwwN0FzIGFuIGFwcHJlY2lhdGlvbiBvZiB5b3VyIGNob2ljZSwgdGhl
IFQxMDEgZ2l2ZXMgeW91IGEgfEgxJFZSQU5ET01JVEVNIHwwN2FuZCBkZWFjdGl2YXRlcy4NCkBH
T1RPOkVYSVQNCg0KOkFUVEFDSw0KG1sySg0KICAgIBtbMTs0N22wG1szMDs0MG2ysbCwsLCwsrAb
WzBtIBtbMTs0N22ysbAbWzBt2xtbMTszMG2y3LGyG1swbbGxsrINChtbQRtbMjdDG1sxOzMwbd/f
39/f39/f39/fG1swbSAbWzE7MzBt3BtbMG0gG1sxOzMwbdvc3BtbMG0gG1sxOzMwbd/fDQobW0Eb
WzQ3QxtbMG0gG1sxOzMwbd8bWzBt2xtbMTszMG2ysN/fG1swbSAbWzE7MzBt29/fG1swbSAgICAg
ICAgICAgDQobW0EbWzY5QxtbMTszMG3fG1szNzs0N22yG1swbQ0KICAgIBtbMTs0N22wG1szMDs0
MG2ysbCwsLCwsrAbWzM3OzQ3bbKxG1s0MG3bG1swbdsbWzE7MzBtsrCy398bWzBtICAgIA0KG1tB
G1syN0MgICAgICAgICAgICAbWzE7MzBt37LcG1swbSAbWzE7MzBt39/fG1swbSAgG1sxOzMwbd8b
WzBtICAgIA0KG1tBG1s1M0MbWzE7MzBt3NsbWzBtICAgIBtbMzFtsNzc3BtbMzdtICAbWzE7MzBt
sBtbMG0gICAgG1sxOzQ3bbIbWzBtDQogICAgG1sxOzQ3bbIbWzMwOzQwbbKxsLCwsLGysBtbMzc7
NDdtst+wG1swbdsbWzE7MzBtsbIbWzBtICAgICAgDQobW0EbWzI2QxtbMTszMG3cG1swbSAgICAb
WzMxbdzc3BtbMzdtICAgG1sxOzMwbbAbWzBtICAgG1sxOzMwbd+yG1swbSANChtbQRtbNDRDG1sx
OzQ3bbAbWzBt3BtbMTszMG2xsrCfUiHfG1swbSAgICAgG1szMW3cG1sxOzQxbdwbWzQwbdvb2w0K
G1tBG1s2M0MbWzQxbdwbWzA7MzFt3LAbWzM3bSAgICAbWzE7NDdtsrAbWzBtDQogICAgG1sxOzQ3
bbEbWzBtIBtbMTszMG2ysbCwsNuwG1s0N22yG1swbSAbWzE7MzBt3xtbMzc7NDdtsBtbMG3bDQob
W0EbWzE4QxtbMTszMG2xshtbMG0gICAgICAgG1szMW3fsNwbWzE7NDFt3BtbNDBt29vbG1s0MW3c
G1swOzMxbdywDQobW0EbWzM3QxtbMzdtICAgICAbWzE7MzBt39uxsLAbWzM3OzQ3bbAbWzMwOzQw
bbHcG1swbSAbWzE7MzBt3BtbMG0gICAgDQobW0EbWzU2QyAbWzMxbbDbG1sxbdvb29vbG1swOzMx
bdsbWzM3bSAgICAgG1sxOzQ3bd+yG1swbQ0KICAgIBtbMTs0N22wG1swbdsgG1sxOzMwbbKxsLCw
G1swbdwbWzE7NDdtshtbMG3cIBtbMTs0N22wsBtbMzA7NDBtsLINChtbQRtbMjBDG1swbSAgICAg
ICAgIBtbMzFtshtbMW3b29vb2xtbMDszMW2yG1sxOzMwbbAbWzBtICAgICAgG1sxOzMwbbINChtb
QRtbNDRDsbAbWzM3OzQ3bbAbWzMwOzQwbbLfstsbWzBtICAgICAgICAbWzMwOzQxbdwbWzE7MzFt
39/fG1swOzMxbd8NChtbQRtbNjRDG1sxOzMwbbAbWzA7MzFtsBtbMzdtICAgILIbWzE7NDdtshtb
MG0NCiAgICAbWzE7NDdtshtbMzBt3BtbMG3bG1sxOzMwbdywG1swbSAgIBtbMTs0N22ysrCxsrAb
WzMwOzQwbbCysRtbMG0gICANChtbQRtbMjRDICAbWzE7MzBt3BtbMG3cIBtbMzFtsBtbMzA7NDFt
3BtbMTszMW3f398bWzA7MzFt3xtbMTszMG2wG1swbSANChtbQRtbMzdDG1sxOzMwbbAbWzBtICAg
IBtbMTszMG3csrCxsBtbMzc7NDdtsBtbMG3cIBtbMTszMG3fstwbWzBtICAgICANChtbQRtbNThD
IBtbMzFtsBtbMzdtICAgICAbWzE7MzBtsBtbMG0gICAgshtbMTs0N22yshtbMG0NCiAgICAbWzMw
bdwbWzE7Mzc7NDdtsrEbWzMwOzQwbbLcG1swbSAbWzE7MzBt3BtbMzc7NDdtsrKxsrCxshtbMG2y
DQobW0EbWzE5QxtbMTszMG2xshtbMG0gICAgIN8gICAgICAgICAgIBtbMTszMG3c3LLf3Nzf3LCw
G1swbd8bWzE7MzBtsA0KG1tBG1s1MEMbWzBtICAbWzE7MzBtshtbMG0g3CAbWzE7MzBt37Lc3Btb
MG0gICAgICAbWzE7MzBt3NzcG1swbSCyDQobW0EbWzcxQxtbMTs0N22ysRtbMG0NCiAgICAbWzMw
bdvbG1sxOzM3OzQ3bbKxG1szMDs0MG3csN8bWzM3OzQ3bbKysrKwsbKxG1szMDs0MG2wsbIbWzBt
ICAgICANChtbQRtbMjdDICAgICAgG1sxOzMwbdzc3LLf3xtbMG0gG1sxOzMwbdwbWzBtshtbMTs0
N22wG1swbSAbWzE7MzBt3A0KG1tBG1s0NUMbWzM3OzQ3bbIbWzMwOzQwbbDcsBtbMG0gG1sxOzMw
bbAbWzBtIBtbMTszMG3cG1swbSCy3BtbMTszMG3c3A0KG1tBG1s1OEPcG1swbbAbWzE7MzBt39/f
37KysrKyG1swbbCyG1sxOzQ3bbKxG1swbQ0KICAgICAbWzMwbdvbG1sxOzM3OzQ3bbKxG1szMDs0
MG2ysLIbWzM3OzQ3bbKysbKwsbKxG1szMDs0MG2wsRtbMG2wDQobW0EbWzIzQxtbMTszMG2xsrLb
29vb27Lf37Lc3BtbMG2xshtbMTs0N22wsLEbWzMwOzQwbd8bWzBtIBtbMTs0N22yG1s0MG0NChtb
QRtbNDVDG1swbSAbWzE7MzBtsBtbMG3fIBtbMTszMG2wsLAbWzBt3xtbMTs0N22yG1swbSCwG1sx
OzMwbbKysrKystwNChtbQRtbNjND3Nzc398bWzBtsLCyG1sxOzQ3bbKyG1swbQ0KICAgICAgINvc
G1sxOzMwbbKxsLIbWzM3OzQ3bbKysbGwsbIbWzBtshtbMTszMG2wshtbMG2xG1sxOzMwbbGysrLf
3w0KG1tBG1szMEMbWzBtIBtbMTszMG3c3BtbMG2xsrIbWzE7NDdtsLCxsrKyG1swbSDb3xtbMTsz
MG2wsbAbWzBtICANChtbQRtbNTBDG1sxOzMwbbCwsBtbMG3bG1sxOzQ3bbIbWzBtIBtbMTszMG3f
G1swbbAbWzE7MzBtsrKysrKysrKystwNChtbQRtbNjlDG1swbbCyG1sxOzQ3bbCyG1swbQ0KICAg
ICAgIBtbMTs0N22yG1swbdvfG1sxOzMwbbGxsBtbMzc7NDdtshtbMzA7NDBt3xtbNDdt3BtbMzdt
srCxsbIbWzBtsg0KG1tBG1syMkOxsLEbWzE7MzBt3NwbWzBt3BtbMTszMDs0N23fG1swbbKyG1sx
OzQ3bbCwsLGxsrKyG1s0MG2ysg0KG1tBG1s0MUMbWzMwOzQ3bdwbWzBt3BtbMTs0N22yG1szMDs0
MG2wsRtbMG0gG1sxOzMwbbCwG1szNzs0N22wG1swbSANChtbQRtbNTFDG1sxOzMwbbCwsBtbMG3f
IBtbMTszMG3f3LDf3xtbMG2wG1sxOzMwbbKysrKyshtbMG2wsbIbWzE7NDdtsrAbWzBtDQobWzE7
MzBt3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc
3Nzc3Nzc3NzcDQobW0EbWzYzQ9zc3Nzc3Nzc3Nzc3Nzc3NwbWzBtDQpARU5FTVk6MzANCkBJRlJB
TjpXVVNTDQobWzJKG1swbQ0KG1sxbSAgICAbWzQ3bbAbWzMwOzQwbbKxsLCwsLCysBtbMG0gG1sx
OzQ3bbKxsBtbMG3bG1sxOzMwbbLcsbIbWzBtsbGysg0KG1tBG1syN0MbWzE7MzBt39/f39/f39/f
398bWzBtIBtbMTszMG3cG1swbSAbWzE7MzBt29zcG1swbSAbWzE7MzBt398NChtbQRtbNDdDG1sw
bSAbWzE7MzBt3xtbMG3bG1sxOzMwbbKw398bWzBtIBtbMTszMG3b398bWzBtG1sxMUMbWzE7MzBt
3w0KG1tBG1s3MEMbWzM3OzQ3bbIbWzBtDQogICAgG1sxOzQ3bbAbWzMwOzQwbbKxsLCwsLCysBtb
Mzc7NDdtsrEbWzQwbdsbWzBt2xtbMTszMG2ysLLf3xtbMG0bWzE2Qw0KG1tBG1szOUMbWzE7MzBt
37LcG1swbSAbWzE7MzBt39/fG1swbSAgG1sxOzMwbd8bWzBtICAgIBtbMTszMG3c2xtbMG0gIA0K
G1tBG1s1N0MgIBtbMzVtIBtbMzFtICAgG1szN20gIBtbMzVtIBtbMzdtICAgIBtbMTs0N22yG1sw
bQ0KICAgIBtbMTs0N22yG1szMDs0MG2ysbCwsLCxsrAbWzM3OzQ3bbLfsBtbMG3bG1sxOzMwbbGy
G1swbRtbNkMbWzM1bSANChtbQRtbMjdDG1szN20gICAgG1sxOzMwbSAgICAbWzBtICAbWzM1bSAb
WzM3bSAgIBtbMTszMG3fshtbMG0gG1sxOzQ3bbAbWzQwbQ0KG1tBG1s0NUMbWzBt3BtbMTszMG2x
srCfUiHfG1swbRtbNUMbWzMxbSAgG1sxOzMwbdzc3BtbMDszMW0gIBtbMzVtIA0KG1tBG1s2NkMb
WzM3bSAgICAbWzE7NDdtsrAbWzBtDQogICAgG1sxOzQ3bbEbWzBtIBtbMTszMG2ysbCwsNuwG1s0
N22yG1swbSAbWzE7MzBt3xtbMzc7NDdtsBtbMG3bDQobW0EbWzE4QxtbMTszMG2xshtbMG0bWzdD
G1szNW0gIBtbMTszMG0gINzc3CAgG1swOzM1bSAbWzM3bRtbNUMbWzE7MzBtDQobW0EbWzQyQ9/b
sbCwG1szNzs0N22wG1szMDs0MG2x3BtbMG0gG1sxOzMwbdwbWzBtG1s1QxtbMzVtIBtbMzFtIA0K
G1tBG1s1OUMbWzE7MzBt29sbWzQxbSAbWzQwbdvbG1swOzMxbSAbWzM3bRtbNUMbWzE7NDdt37Ib
WzBtDQogICAgG1sxOzQ3bbAbWzBt2yAbWzE7MzBtsrGwsLAbWzBt3BtbMTs0N22yG1swbdwgG1sx
OzQ3bbCwG1szMDs0MG2wshtbMG0bWzlDDQobW0EbWzI5QxtbMTszMG0g29sbWzQxbSAbWzQwbdvb
IBtbMDszNW0gG1szN20bWzZDG1sxOzMwbbKxsBtbMzc7NDdtsBtbNDBtDQobW0EbWzQ3QxtbMzBt
st+y2xtbMG0bWzhDG1szMW0gG1sxOzMwbd/f3xtbMDszMW0gG1szNW0gIBtbMzdtICAgILINChtb
QRtbNzFDG1sxOzQ3bbIbWzBtDQogICAgG1sxOzQ3bbIbWzMwbdwbWzBt2xtbMTszMG3csBtbMG0g
ICAbWzE7NDdtsrKwsbKwG1szMDs0MG2wsrEbWzBtG1s1Qw0KG1tBG1syNkMbWzE7MzBt3BtbMG3c
IBtbMzVtIBtbMTszMG0g39/fIBtbMDszNW0gICAbWzM3bSAgICAbWzE7MzBt3LKwsQ0KG1tBG1s0
NkOwG1szNzs0N22wG1swbdwgG1sxOzMwbd+y3BtbMG0bWzZDG1szNW0gG1szN20bWzVDG1szNW0g
G1szN20gICANChtbQRtbNjlDILIbWzE7NDdtsrIbWzBtDQogICAgG1szMG3cG1sxOzM3OzQ3bbKx
G1szMDs0MG2y3BtbMG0gG1sxOzMwbdwbWzM3OzQ3bbKysbKwsbIbWzBtsg0KG1tBG1sxOUMbWzE7
MzBtsbIbWzBtG1s1Q98bWzExQxtbMTszMG3c3LLf3Nzf3LCwG1swbd8bWzE7MzBtsBtbMG0gIA0K
G1tBG1s1MkMbWzE7MzBtshtbMG0g3CAbWzE7MzBt37Lc3BtbMG0bWzZDG1sxOzMwbdzc3BtbMG0g
shtbMTs0N22ysRtbMG0NCiAgICAbWzMwbdvbG1sxOzM3OzQ3bbKxG1szMDs0MG3csN8bWzM3OzQ3
bbKysrKwsbKxG1szMDs0MG2wsbIbWzBtG1sxMUMNChtbQRtbMzNDG1sxOzMwbdzc3LLf3xtbMG0g
G1sxOzMwbdwbWzBtshtbMTs0N22wG1swbSAbWzE7MzBt3BtbMzc7NDdtshtbNDBtDQobW0EbWzQ2
QxtbMzBtsNywG1swbSAbWzE7MzBtsBtbMG0gG1sxOzMwbdwbWzBtILLcG1sxOzMwbdzc3BtbMG2w
DQobW0EbWzYwQxtbMTszMG3f39/fsrKysrIbWzBtsLIbWzE7NDdtsrEbWzBtDQobWzVDG1szMG3b
2xtbMTszNzs0N22ysRtbMzA7NDBtsrCyG1szNzs0N22ysrGysLGysRtbMzA7NDBtsLEbWzBtsA0K
G1tBG1syM0MbWzE7MzBtsbKy29vb29uy39+y3NwbWzBtsbIbWzE7NDdtsLCxG1szMDs0MG3fG1sw
bSAbWzE7NDdtshtbNDBtDQobW0EbWzQ1QxtbMG0gG1sxOzMwbbAbWzBt3yAbWzE7MzBtsLCwG1sw
bd8bWzE7NDdtshtbMG0gsBtbMTszMG2ysrKysrLcDQobW0EbWzYzQ9zc3N/fG1swbbCwshtbMTs0
N22yshtbMG0NChtbN0Pb3BtbMTszMG2ysbCyG1szNzs0N22ysrGxsLGyG1swbbIbWzE7MzBtsLIb
WzBtsRtbMTszMG2xsrKy398bWzBtIA0KG1tBG1szMUMbWzE7MzBt3NwbWzBtsbKyG1sxOzQ3bbCw
sbKyshtbMG0g298bWzE7MzBtsLGwG1swbSAgG1sxOzMwbbCwsA0KG1tBG1s1M0MbWzBt2xtbMTs0
N22yG1swbSAbWzE7MzBt3xtbMG2wG1sxOzMwbbKysrKysrKysrLcG1swbbCyG1sxOzQ3bRtbNDBt
DQobW0EbWzcxQxtbNDdtsLIbWzBtDQobWzdDG1sxOzQ3bbIbWzBt298bWzE7MzBtsbGwG1szNzs0
N22yG1szMDs0MG3fG1s0N23cG1szN22ysLGxshtbMG2ysbCxDQobW0EbWzI1QxtbMTszMG3c3Btb
MG3cG1sxOzMwOzQ3bd8bWzBtsrIbWzE7NDdtsLCwsbGysrIbWzQwbbKyG1szMDs0N23cG1s0MG0N
ChtbQRtbNDJDG1swbdwbWzE7NDdtshtbMzA7NDBtsLEbWzBtIBtbMTszMG2wsBtbMzc7NDdtsBtb
MG0gG1sxOzMwbbCwsA0KG1tBG1s1NEMbWzBt3yAbWzE7MzBt39yw398bWzBtsBtbMTszMG2ysrKy
srIbWzBtsLGyG1sxOzQ3bbKwG1swbQ0KG1sxOzMwbdzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc
3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3A0KG1tBG1s2M0Pc3Nzc3Nzc3Nzc
3Nzc3NzcG1swbQ0KQEZPUk1BVDp8RFRZb3UgY2FuIHNlZSB0aGUgbGlnaHRzIGZyb20gaXRzIGV5
ZXMgdHVybmluZyBvZmYsIHdoaWxlIHBvd2VyaW5nIGRvd24uLi4geW91IHByb21pc2UgeW91cnNl
bGYsIG5vdCB0byByZWFjdGl2YXRlIGFueSBkcm9pZCBhZ2FpbiEhIQ0KDQpAR09UTzpFWElUDQoN
CjpXVVNTDQpARk9STUFUOnxEVFRoZSB8MDRUMTAxIHwwN2lzIHZlcnkgcGlzc2VkIG9mZiEgWW91
IGFyZSBub3QgZ29pbmcgdG8gZXNjYXBlIGZyb20gaXQuDQpARk9STUFUOnxEVC4uLmFmdGVyIGFs
bCwgaXQgd2FzIG1hZGUgYXMgYSBraWxsaW5nIG1hY2hpbmUhDQpAUEFVU0UNCkBHT1RPOkFUVEFD
Sw0KDQpAR09UTzpFWElUDQoNCjpFWElUDQpATkwNCi4uLiB8MDhYUVRSLy8yMDIwIC0gTlVMTCB4
MDBCIC8vIGFuZHIwMWQuemFwdG8ub3JnOjk5OTkNCg==


  xt12
 
                                                                         
                                                
                                                    
                         DEMO SOURCE CODE    
                                                                             
                                                                              
                                                                              
  perhaps i should include this one, in the links area, but because it is so
  awesome, i had to make a separate article about it. if you follow the link
  below, you will find a wealth of information, on how, one of the greatest
  demos came alive.

          https://fabiensanglard.net/second_reality/index.php

  you will find all the code and detail explanation, on how this demo has been
  built. it's a great resource about brilliant programming! so even if you are
  not into assembly, reading it will open your mind in other areas.

  here you can see the end result.

                          https://youtu.be/KTjnt_WSJu8


  xt13
 
                                                                         
                                                 
                                                  
                                                  
                                                                             
                                                                              
                                                                              
  lets see how we can use bash to display ansi graphics. the biggest problem,
  is that now days, all terminals use utf8 encoding, but almost all ansis come
  in cp437 encoding.

  ][ check extended chars. support ][

  to check if our terminal can display properly utf8 or cp437 ansi extended
  characters lets make some tests. execute the following script:

  for i in {32..255};do ((i%16==0))&&echo;printf "\\$(printf "%o" $i) ";done

  if you can see the extended (block) chars. then you are using a cp437
  compatible font, if you don't use the above commands like this:

  for i in {32..255};do ((i%16==0))&&echo;printf "\\$(printf "%o" $i) ";done |
  iconv -f cp437 -t utf8

  the additional "iconv -f cp437 -t utf8" will display the chars. in utf8.
  do you see the blocks now? if you don't you have to use another font.

  ][ resize terminal ][

  if you want to resize the terminal, you can use this ansi escape code, in
  bash like this:
                      echo -ne "\033[8;50;80t"
  this command will resize the terminal in a 80x50 mode. you can bring it back
  to 80x25 by this:
                      echo -ne "\033[8;25;80t"

  ][ display 16colo.rs ansi images ][

  use CURL to display ansi graphics, from the internet and specially from
  16colo.rs. the command is very straightforward:

 curl -L https://16colo.rs/pack/laz11/raw/US-DIS2.ans | iconv -f cp437 -t utf-8


  ][ ansi in LESS? ][

  you can also use LESS to display ansi graphics and scroll them down, like
  this:

  iconv -f cp437 -t utf8 rad-LOVE.ANS | less -r

  it's not the best way to show ansi graphics, but it works. :)

  ][ ansi-mation ][

  to view full blown ansi animation with bash, use the following script:

  #!/bin/bash
  ANIMATION=https://16colo.rs/pack/acdu1092/raw/BRTRACD2.ANS
  SPEED='.005' # wait this time each line

  # 1. Disable cursor
  printf "\e[?25l"

  # 2. Download, convert, display slow == play animation
  curl --silent $ANIMATION | \
      iconv -f cp437 -t utf-8  | \
      awk "{system(\"sleep $SPEED\");print}"

  # 3. Enable cursor settings
  printf "\e[?12l\e[?25h"


  the above commands are from this webpage. it's a great read, so don't miss
  it.
            http://bruxy.regnet.cz/web/linux/EN/linux-demoscene


  xt14
 
                                                                         
                                        
                                         
                                           
                                                                             
                                                                              
                                                                              
  although actual transparency in ansi graphics is not possible, we can use a
  couple of tricks to imitate that. the concept is this. first of all we use
  the 8 colors that we can use as background colors, we could use the light
  colors, but in this case, you can't use text on them, so choose wisely.

  so, if we have a blue area that has an intersection with a red area and we
  want to add "transparency", in the intersection area we use purple to color
  the area, cause red + blue mixes to purple. if we had a blue/yellow area, we
  should use green and so on.


                                          
                                    
                                          
                    ۲    
                    ۲          
                    ۲
                    ۲
                                  
                                  
                                  



  another way, is to use the dithered block chars  and in the intersection
  area, use the first color as froground and the second one, as background. in
  this case, we don't use the mixed color, but the dither of the characters,
  will create the effect, that those two areas collide and there is some
  transparency. in case you don't use colors then a mix of the  chars will
  give the result as in the pictures above ;)


  xt15
 
                                                                         
                                                          
                                                            
                                                            
                                                                             
                                                                              
                                                                              
  this is a small MPY script, for mystic bbs. it's a small example on how to
  use some character animations or as they called spiners. you may know the
  most used one, which looks like -\|/ and i think that's the one, it got
  its name.

  so below, are some other spinners, that you can use in your script/mods.
  some use simple chars. other use the extended ascii chars. but i think each
  one is unique.

  of course you can get the character sequences and apply them to other,
  scripting languages for other bbs software.


  from mystic_bbs import *
  from time import sleep

  delay = 0.4
  seq = [chr(250)+chr(249)+chr(205)+chr(240)+chr(205)+chr(249)+chr(250),
  '-'+chr(196)+chr(205)+chr(240)+chr(205)+chr(196)+'-',
  chr(197)+chr(206)+chr(197),
  'dbpqq',
  '0123456789876543210',
  chr(221)+chr(219)+chr(222)+chr(219)+chr(221),
  chr(176)+chr(177)+chr(178)+chr(219)+chr(178)+chr(177)+chr(176),
  '-\|/-',
  '.:;|'+chr(179)+';:.',
  chr(250)+chr(249)+chr(254)+chr(219)+chr(254)+chr(249)+chr(250),
  chr(220)+chr(221)+chr(223)+chr(222)+chr(220),
  chr(191)+chr(217)+chr(192)+chr(218)+chr(191),
chr(250)+chr(249)+chr(43)+chr(197)+chr(206)+chr(197)+chr(43)+chr(249)+chr(250),
  chr(45)+chr(61)+chr(240)+chr(61)+chr(45),
  '.oO080Oo.'
  ]

  def anim(x,y,chars):
    i = 0
    d = True
    while not keypressed() and not shutdown():
      gotoxy(x,y)
      write(chars[i])
      gotoxy(1,25)
      sleep(delay)
      i += 1
      if i == len(chars)-1:
        i = 0

  write('|07|16|CL')
  for d in range(len(seq)):
    anim(10,10,seq[d])
    write('|PB')


  xt16
 
                                                                         
                                        
                                         
                                        
                                                                             
                               mystic modding                                 
                                                                              
  lets see how we can show a progress bar, while mystic is scanning, for
  example, new messages. the same technique, can be used also in other areas
  of mystic, but for this example we will use the Msg.Base QuickScan (MQ).

  first edit your prompts.ini (.dat, .txt whatever you have). find prompt 487.
  it should look like: 487 |03Scanning |11|&1 |03[|11|&2 |03of |11|&3|03]|08...
  duplicate the line, to create a backup and add a semicolon [;] in front of
  the one. you should have this:

  ;487 |03Scanning |11|&1 |03[|11|&2 |03of |11|&3|03]|08...
  487 |03Scanning |11|&1 |03[|11|&2 |03of |11|&3|03]|08...

  erase the second line we added and make it look like this:

  487 #qsbar |&1 |&2 |&3

  where qsbar is the name of the script we will create after. make sure you
  have put the #/hash in front of the name. this will tell mystic to execute
  the qsbar.mpy script, that we will create.

  save the prompts file and close it. now create an empty file, name it like,
  qsbar.mpy and copy/paste the following:

  .;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.

  from mystic_bbs import *

  tb = 1
  tc = 1
  ts = ''
  w = 70
  #x position, y position, attr off, attr on, char off, char on
  bx, by, baoff, baon, bcoff, bcon = [5, 10, 8+7*16, 1+7*16,chr(176), chr(178)]

  #x position, y position, attr, show[True/False]
  px, py, pa, showpercent= [39, 11, 11+7*16, True]

  def writexy(x,y,a,s):
    gotoxy(x,y)
    textcolor(a)
    write(s)

  tbs = ''
  tcs = ''

  try:
    ts = mci2str('&1')
    tcs = mci2str('&2')
    tbs = mci2str('&3')
    tc = int(tcs)
    tb = int(tbs)
  except ValueError as ex:
    print '"%s" cannot be converted to an int: %s' % (tcs, ex)
    tb = 1
    tc = 1

  writexy(bx,by,baoff,bcoff*w)
  percentdraw = tc * w / tb
  writexy(bx,by,baon,bcon*percentdraw)
  writexy(bx+(w / 2)-(len(ts) / 2),by-1,baoff,ts)
  if showpercent:
    percent = tc*100 / tb
    writexy(px,py,pa,str(percent))

  .;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.

  let's do some explaining...

  these are default variables for positions and coloring text. ignore tb,tc,ts
  for now.

  tb = 1
  tc = 1
  ts = ''

  #this is the width of the progress bar
  w = 70

  #these are the values for the progress bar, position, color, characters etc.
  #x position, y position, attr off, attr on, char off, char on
  bx, by, baoff, baon, bcoff, bcon = [5, 10, 8+7*16, 1+7*16,chr(176), chr(178)]

  #these are the values for showing a percentage string
  #x position, y position, attr, show[True/False]
  px, py, pa, showpercent= [39, 11, 11+7*16, True]

  because mystics MPY, doesn't have a writexy function, we write our own. it's
  easier to display text with that.

  def writexy(x,y,a,s):
    gotoxy(x,y)
    textcolor(a)
    write(s)


  now, we must get our values. in the Msg.QuickScan, &1 is the base name, that
  mystic is scanning, &2 is the incremental number of that base and &3 is the
  total number of msg.bases.

  so we get these values and convert them to text. i use a try/except block,
  which may be an overkill for this occasion, but it's a good practice when
  converting strings to numbers.

  notice that if &3 (total bases) is 0/zero, we will get a division by zero,
  error, after. i don't imagine, that you don't have any message bases... do
  you?

  try:
    ts = mci2str('&1')
    tcs = mci2str('&2')
    tbs = mci2str('&3')
    tc = int(tcs)
    tb = int(tbs)
  except ValueError as ex:
    print '"%s" cannot be converted to an int: %s' % (tcs, ex)
    tb = 1
    tc = 1


  now we have to draw the progress bar. first we draw the background of the
  progress bar: writexy(bx,by,baoff,bcoff*w)

  to convert the values we got into number of characters we have to draw, we
  use this formula: chars2draw = current_base * width divide by total_bases
  percentdraw = tc * w / tb

  ...and we draw the foreground of the progress bar, with character bcon
  writexy(bx,by,baon,bcon*percentdraw)

  just for effect, we also display the name of the message base being scanned,
  above the progress bar and centered in the screen.
  writexy(bx+(w / 2)-(len(ts) / 2),by-1,baoff,ts)

  to center a string in the screen we use the formula:
  (screen_width / 2) - (length_of_string / 2)

  if we set the showpercent variable to True, we are displaying the percentage.
  the formula is: current_base * 100 divide by total_bases

  if showpercent:
    percent = tc*100 / tb
    writexy(px,py,pa,str(percent))

  but we are not finished yet. if you make a quick scan, right now, you will
  see the progress bar on top, of your current screen and perhaps a footer,
  with the results of the scanning. let's fix that.

  open mystic configuration and edit the message menu. select the quick scan
  menu command and press tab, to go to the Action List area. insert a new
  action before the quick scan and make it look like this:

 Action List  Access  Data   
 (GT) Display line of text               |#X#1#Scanning...#3#7#77#13#        
 (MQ) Message quick scan                 /NOFOOTER /LIST                     

  this way, it will display a window/box, which will clear the area below it
  and the progress bar, will be displayed on top. you could also use other
  commands/mci codes, to display perhaps an ansi file?

  for more intel on how to use the quickscan system, make sure to examine the
  pscanlog menu, which has an extensive use of the quick scan commands. this
  way, you could use an ansi image before the scan and one after the scan,
  depending the result, to have a cool effect!



  xt17
 
                                                                         
                                                        
                                                             
                                                         
                                                                             
                    using ALSA to make a beep sound in linux                  
                                                                              
  one of the most enjoyable commands/function in Turbo Pascal, back in the
  old DOS days, was beep(). even just hearing a simple beep tone from the 
  speaker ofyour pc, was something great back then. but as the years past,
  turbo pascal has almost been forgotten, the pc speaker is not used, almost,
  at all and the magic has gone :( but no more!
  
  below are two snippets of code, in C and Free/Pascal, that will make your
  thing go beep... i mean your soundcard, with ALSA, in Linux, will play a
  small tone.
  
  so, all of you, that make bbs software, now you don't have excuse not to 
  implement a beep sound/command... :p
  
  
  
  === C CODE ================================================================
    /*
    adapted from:
    https://www.linuxjournal.com/article/6735
    see "Listing 3"
     
    This example writes an approximated sine wave of
    440Hz to the default PCM device for approx 200ms.
    */
     
    // Use the newer ALSA API
    #define ALSA_PCM_NEW_HW_PARAMS_API
     
    #include <alsa/asoundlib.h>
     
    int main()
    {
      long loops;
      int rc;
      int size;
      snd_pcm_t *handle;
      snd_pcm_hw_params_t *params;
      unsigned int val;
      int dir;
      snd_pcm_uframes_t frames;
      char *buffer;
     
    // Open PCM device for playback
      rc = snd_pcm_open(&handle, "default", SND_PCM_STREAM_PLAYBACK, 0);
      if (rc < 0)
      {
        fprintf(stderr, "unable to open pcm device: %s\n", snd_strerror(rc));
        exit(1);
      }
     
    // Allocate a hardware parameters object
      snd_pcm_hw_params_alloca(&params);
     
    // Fill it in with default values
      snd_pcm_hw_params_any(handle, params);
     
    // Set the desired hardware parameters
     
    // Interleaved mode
      snd_pcm_hw_params_set_access(handle, params, 
      SND_PCM_ACCESS_RW_INTERLEAVED);
     
    // Signed 16-bit little-endian format
      snd_pcm_hw_params_set_format(handle, params, SND_PCM_FORMAT_S16_LE);
     
    // Two channels (stereo)
      snd_pcm_hw_params_set_channels(handle, params, 2);
     
    // 44100 bits/second sampling rate (CD quality)
      val = 44100;
      snd_pcm_hw_params_set_rate_near(handle, params, &val, &dir);
     
    // Set period size to 256 frames (original 32 frames caused scratches)
      frames = 256;
      snd_pcm_hw_params_set_period_size_near(handle, params, &frames, &dir);
     
    // Write the parameters to the driver
      rc = snd_pcm_hw_params(handle, params);
      if (rc < 0)
      {
        fprintf(stderr, "unable to set hw parameters: %s\n", snd_strerror(rc));
        exit(1);
      }
     
    // Use a buffer large enough to hold one period
      snd_pcm_hw_params_get_period_size(params, &frames, &dir);
     
      size = frames * 4;                                   
      buffer = (char *) malloc(size);
     
    // We want to loop for 200ms seconds
      snd_pcm_hw_params_get_period_time(params, &val, &dir);
     
    // 0.2 seconds in microseconds divided by period time
      loops = 200000 / val;
     
    //printf("loops = %ld\n", loops);
     
      int I, J=0, K=0, level, phase=0;
     
      while (loops > 0)
      {
        loops--;
     
        for(I=0;I<size;)
        {
          switch (phase)
          {
            case 0: level=  0; break;                      
            case 1: level= 30; break;                      
            case 2: level= 60; break;
            case 3: level= 60; break;
            case 4: level= 30; break;
            case 5: level= -0; break;
            case 6: level=-30; break;
            case 7: level=-60; break;
            case 8: level=-60; break;                      
            case 9: level=-30;                             
          }
     
          J++;
          if (J>10) { phase=((phase+1) % 10); J=0; }       
    //    printf("phase is %d\n", phase);
     
          if (K<200) { level=(level*K) / 200; }            
          if (loops>16) K++; else if (K>0) K--;            
     
    //    printf("K= %d\n", K);
     
          buffer[I++]=0;                                   
          buffer[I++]=level;                               
          buffer[I++]=0;                                   
          buffer[I++]=level;                               
        }
     
        rc = snd_pcm_writei(handle, buffer, frames);
        if (rc == -EPIPE)                                  
        {
          fprintf(stderr, "underrun occurred\n");
          snd_pcm_prepare(handle);
        }
        else if (rc < 0)
        {
          fprintf(stderr, "error from writei: %s\n", snd_strerror(rc));
        }  
        else if (rc != (int)frames)
        {
          fprintf(stderr, "short write, write %d frames\n", rc);
        }
      }
     
    //printf("residual K = %d\n", K);
     
      snd_pcm_drain(handle);
      snd_pcm_close(handle);
      free(buffer);
     
      return 0;
    }
    
    
  compile the code with this command:
            
            gcc beep.c -no-pie `pkg-config --cflags --libs alsa`
            
            
    
  === PASCAL CODE ===========================================================
  
  program tone;

  {$M objfpc}

  uses alsa;
   
  function ALSAbeep(frequency, duration:integer):boolean;
  var buffer:array[0..2400-1] of byte;     
  // 1/20th of a second worth of samples @48000 bps
      frames:snd_pcm_sframes_t;
         pcm:PPsnd_pcm_t;
        I,LC:integer;
          SA:array[0..359] of byte;
        SS,R:real;
  const device='default'+#0;
  begin
    result:=false;
    if duration<50 then duration:=50;
    if frequency<20 then frequency:=20;
   
    SS:=(sizeof(SA)/sizeof(buffer))*(frequency/20.0);
    for I:=0 to 359 do SA[I]:=128 + round(sin(pi*I/180.0) * 100.0);    
    // 100 is effectively the volume
    R:=0.0;
   
    if snd_pcm_open(@pcm, @device[1], SND_PCM_STREAM_PLAYBACK, 0)=0 then
    if snd_pcm_set_params(pcm, SND_PCM_FORMAT_U8,
                               SND_PCM_ACCESS_RW_INTERLEAVED,
                               1,
                               48000,            // bitrate (bps)
                               1,
                               20000)=0 then     // latency (us)
    for LC:=1 to duration div 50 do
    begin
      for I:=0 to sizeof(buffer)-1 do
      begin
        buffer[I]:=SA[trunc(R)];
        R:=R+SS;
        if R>=360.0 then R:=R-360.0
      end;
      frames:=snd_pcm_writei(pcm, @buffer, sizeof(buffer));
      if frames<0 then frames:=snd_pcm_recover(pcm, frames, 0);
      if frames<0 then break  // writeln(snd_strerror(frames))
    end;
    snd_pcm_close(pcm);
    result:=true
  end;

  begin
  ALSAbeep(400,40);
  end.
                                            
  you can compile it like:
  
  fpc -Mobjfpc tone.pas
  
  ...but you will also need a modified version of the FreePascal alsa.pas
  unit, which is below. the code is wrapped, but it should compile anyway.
  
  === alsa.pas ==============================================================
  
{  Free Pascal port by Nikolay Nikolov <nickysn@users.sourceforge.net>
   This version of the header has been created by Andreas Stoeckel and has been
   adapted to the needs of the Audorra audio library. For a complete version of 
   the header for pascal have a look for the fpAlsa project on sourceforge.
   http://sourceforge.net/projects/fpalsa/
   This adaption has been done for the following reasons:
     - Easier to update to new versions of ALSA, as not the whole header has to
     be updated
     - Easier to distribute with Audorra (only a short, single file)
}

{**
 * \file include/asoundlib.h
 * \brief Application interface library for the ALSA driver
 * \author Jaroslav Kysela <perex@perex.cz>
 * \author Abramo Bagnara <abramo@alsa-project.org>
 * \author Takashi Iwai <tiwai@suse.de>
 * \date 1998-2001
 *
 * Application interface library for the ALSA driver
 *}
{*
 *   This library is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU Lesser General Public License as
 *   published by the Free Software Foundation; either version 2.1 of
 *   the License, or (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU Lesser General Public License for more details.
 *
 *   You should have received a copy of the GNU Lesser General Public
 *   License along with this library; if not, write to the Free Software
 *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 *
 *}
unit alsa;

{$MODE objfpc}
{$PACKRECORDS c}
{$LINKLIB c}

interface

uses
  ctypes;

const
  libasound = 'asound';

type
  { PCM generic info container }
  PPsnd_pcm_info_t = ^Psnd_pcm_info_t;
  Psnd_pcm_info_t = Pointer;

  { PCM hardware configuration space container }
  PPsnd_pcm_hw_params_t = ^Psnd_pcm_hw_params_t;
  Psnd_pcm_hw_params_t = Pointer;

  { PCM software configuration container }
  PPsnd_pcm_sw_params_t = ^Psnd_pcm_sw_params_t;
  Psnd_pcm_sw_params_t = Pointer;

  { PCM status container }
  PPsnd_pcm_status_t = ^Psnd_pcm_status_t;
  Psnd_pcm_status_t = Pointer;

  { PCM access types mask }
  PPsnd_pcm_access_mask_t = ^Psnd_pcm_access_mask_t;
  Psnd_pcm_access_mask_t = Pointer;

  { PCM formats mask }
  PPsnd_pcm_format_mask_t = ^Psnd_pcm_format_mask_t;
  Psnd_pcm_format_mask_t = Pointer;

  { PCM subformats mask }
  PPsnd_pcm_subformat_mask_t = ^Psnd_pcm_subformat_mask_t;
  Psnd_pcm_subformat_mask_t = Pointer;

  { PCM handle }
  PPsnd_pcm_t = ^Psnd_pcm_t;
  Psnd_pcm_t = Pointer;

  { CTL Handle}
  PPsnd_ctl_t = ^Psnd_ctl_t;
  Psnd_ctl_t = Pointer;

  { CTL type }
  PPsnd_ctl_type_t = ^Psnd_ctl_type_t;
  Psnd_ctl_type_t = ^snd_ctl_type_t;
  snd_ctl_type_t = cint;

  { PCM sample format }
  Psnd_pcm_format_t = ^snd_pcm_format_t;
  snd_pcm_format_t = cint;

  { PCM stream (direction) }
  Psnd_pcm_stream_t = ^snd_pcm_stream_t;
  snd_pcm_stream_t = cint;

  { PCM access type }
  Psnd_pcm_access_t = ^snd_pcm_access_t;
  snd_pcm_access_t = cint;

  { Unsigned frames quantity }
  Psnd_pcm_uframes_t = ^snd_pcm_uframes_t;
  snd_pcm_uframes_t = cuint;

  { Signed frames quantity }
  Psnd_pcm_sframes_t = ^snd_pcm_sframes_t;
  snd_pcm_sframes_t = cint;

const
	{ Unknown }
	SND_PCM_FORMAT_UNKNOWN: snd_pcm_format_t = -1;
	{ Signed 8 bit }
	SND_PCM_FORMAT_S8: snd_pcm_format_t = 0;
	{ Unsigned 8 bit }
	SND_PCM_FORMAT_U8: snd_pcm_format_t = 1;
	{ Signed 16 bit Little Endian }
	SND_PCM_FORMAT_S16_LE: snd_pcm_format_t = 2;
	{ Signed 16 bit Big Endian }
	SND_PCM_FORMAT_S16_BE: snd_pcm_format_t = 3;
	{ Unsigned 16 bit Little Endian }
	SND_PCM_FORMAT_U16_LE: snd_pcm_format_t = 4;
	{ Unsigned 16 bit Big Endian }
	SND_PCM_FORMAT_U16_BE: snd_pcm_format_t = 5;
	{ Signed 24 bit Little Endian using low three bytes in 32-bit word }
	SND_PCM_FORMAT_S24_LE: snd_pcm_format_t = 6;
	{ Signed 24 bit Big Endian using low three bytes in 32-bit word }
	SND_PCM_FORMAT_S24_BE: snd_pcm_format_t = 7;
	{ Unsigned 24 bit Little Endian using low three bytes in 32-bit word }
	SND_PCM_FORMAT_U24_LE: snd_pcm_format_t = 8;
	{ Unsigned 24 bit Big Endian using low three bytes in 32-bit word }
	SND_PCM_FORMAT_U24_BE: snd_pcm_format_t = 9;
	{ Signed 32 bit Little Endian }
	SND_PCM_FORMAT_S32_LE: snd_pcm_format_t = 10;
	{ Signed 32 bit Big Endian }
	SND_PCM_FORMAT_S32_BE: snd_pcm_format_t = 11;
	{ Unsigned 32 bit Little Endian }
	SND_PCM_FORMAT_U32_LE: snd_pcm_format_t = 12;
	{ Unsigned 32 bit Big Endian }
	SND_PCM_FORMAT_U32_BE: snd_pcm_format_t = 13;
	{ Float 32 bit Little Endian, Range -1.0 to 1.0 }
	SND_PCM_FORMAT_FLOAT_LE: snd_pcm_format_t = 14;
	{ Float 32 bit Big Endian, Range -1.0 to 1.0 }
	SND_PCM_FORMAT_FLOAT_BE: snd_pcm_format_t = 15;
	{ Float 64 bit Little Endian, Range -1.0 to 1.0 }
	SND_PCM_FORMAT_FLOAT64_LE: snd_pcm_format_t = 16;
	{ Float 64 bit Big Endian, Range -1.0 to 1.0 }
	SND_PCM_FORMAT_FLOAT64_BE: snd_pcm_format_t = 17;
	{ IEC-958 Little Endian }
	SND_PCM_FORMAT_IEC958_SUBFRAME_LE: snd_pcm_format_t = 18;
	{ IEC-958 Big Endian }
	SND_PCM_FORMAT_IEC958_SUBFRAME_BE: snd_pcm_format_t = 19;
	{ Mu-Law }
	SND_PCM_FORMAT_MU_LAW: snd_pcm_format_t = 20;
	{ A-Law }
	SND_PCM_FORMAT_A_LAW: snd_pcm_format_t = 21;
	{ Ima-ADPCM }
	SND_PCM_FORMAT_IMA_ADPCM: snd_pcm_format_t = 22;
	{ MPEG }
	SND_PCM_FORMAT_MPEG: snd_pcm_format_t = 23;
	{ GSM }
	SND_PCM_FORMAT_GSM: snd_pcm_format_t = 24;
	{ Special }
	SND_PCM_FORMAT_SPECIAL: snd_pcm_format_t = 31;
	{ Signed 24bit Little Endian in 3bytes format }
	SND_PCM_FORMAT_S24_3LE: snd_pcm_format_t = 32;
	{ Signed 24bit Big Endian in 3bytes format }
	SND_PCM_FORMAT_S24_3BE: snd_pcm_format_t = 33;
	{ Unsigned 24bit Little Endian in 3bytes format }
	SND_PCM_FORMAT_U24_3LE: snd_pcm_format_t = 34;
	{ Unsigned 24bit Big Endian in 3bytes format }
	SND_PCM_FORMAT_U24_3BE: snd_pcm_format_t = 35;
	{ Signed 20bit Little Endian in 3bytes format }
	SND_PCM_FORMAT_S20_3LE: snd_pcm_format_t = 36;
	{ Signed 20bit Big Endian in 3bytes format }
	SND_PCM_FORMAT_S20_3BE: snd_pcm_format_t = 37;
	{ Unsigned 20bit Little Endian in 3bytes format }
	SND_PCM_FORMAT_U20_3LE: snd_pcm_format_t = 38;
	{ Unsigned 20bit Big Endian in 3bytes format }
	SND_PCM_FORMAT_U20_3BE: snd_pcm_format_t = 39;
	{ Signed 18bit Little Endian in 3bytes format }
	SND_PCM_FORMAT_S18_3LE: snd_pcm_format_t = 40;
	{ Signed 18bit Big Endian in 3bytes format }
	SND_PCM_FORMAT_S18_3BE: snd_pcm_format_t = 41;
	{ Unsigned 18bit Little Endian in 3bytes format }
	SND_PCM_FORMAT_U18_3LE: snd_pcm_format_t = 42;
	{ Unsigned 18bit Big Endian in 3bytes format }
	SND_PCM_FORMAT_U18_3BE: snd_pcm_format_t = 43;
	SND_PCM_FORMAT_LAST: snd_pcm_format_t = 43;

	{ Playback stream }
	SND_PCM_STREAM_PLAYBACK: snd_pcm_stream_t = 0;
	{ Capture stream }
	SND_PCM_STREAM_CAPTURE: snd_pcm_stream_t = 1;
	SND_PCM_STREAM_LAST: snd_pcm_stream_t = 1;

	{ mmap access with simple interleaved channels }
	SND_PCM_ACCESS_MMAP_INTERLEAVED: snd_pcm_access_t = 0;
	{ mmap access with simple non interleaved channels }
	SND_PCM_ACCESS_MMAP_NONINTERLEAVED: snd_pcm_access_t = 1;
	{ mmap access with complex placement }
	SND_PCM_ACCESS_MMAP_COMPLEX: snd_pcm_access_t = 2;
	{ snd_pcm_readi/snd_pcm_writei access }
	SND_PCM_ACCESS_RW_INTERLEAVED: snd_pcm_access_t = 3;
	{ snd_pcm_readn/snd_pcm_writen access }
	SND_PCM_ACCESS_RW_NONINTERLEAVED: snd_pcm_access_t = 4;
	SND_PCM_ACCESS_LAST: snd_pcm_access_t = 4;

	{ Kernel level CTL }
	SND_CTL_TYPE_HW: snd_ctl_type_t = 0;
	{ Shared memory client CTL }
	SND_CTL_TYPE_SHM: snd_ctl_type_t = 1;
	{ INET client CTL (not yet implemented) }
	SND_CTL_TYPE_INET: snd_ctl_type_t = 2;
	{ external control plugin }
	SND_CTL_TYPE_EXT: snd_ctl_type_t = 3;

  { Lower boundary of sound error codes. }
  SND_ERROR_BEGIN                = 500000;
  { Kernel/library protocols are not compatible. }
  SND_ERROR_INCOMPATIBLE_VERSION = SND_ERROR_BEGIN + 0;
  { Lisp encountered an error during acall. }
  SND_ERROR_ALISP_NIL            = SND_ERROR_BEGIN + 1;

{Functions neccessary to perform audio output}
function snd_pcm_open(pcm: PPsnd_pcm_t; name: PChar;
	stream: snd_pcm_stream_t; mode: cint): cint; cdecl; external libasound;
function snd_pcm_close(pcm: Psnd_pcm_t): cint; cdecl; external libasound;
function snd_pcm_writei(pcm: Psnd_pcm_t; buffer: Pointer;
  size: snd_pcm_uframes_t): snd_pcm_sframes_t; cdecl; external libasound;
function snd_pcm_recover(pcm: Psnd_pcm_t; err, silent: cint): cint; cdecl; 
external libasound;         // added in from fpAlsa
function snd_pcm_prepare(pcm: Psnd_pcm_t): cint; cdecl; external libasound;
function snd_pcm_resume(pcm: Psnd_pcm_t): cint; cdecl; external libasound;
function snd_pcm_start(pcm: Psnd_pcm_t): cint; cdecl; external libasound;
function snd_pcm_pause(pcm: Psnd_pcm_t; enable: cint): cint; cdecl; 
external libasound;
function snd_pcm_drop(pcm: Psnd_pcm_t): cint; cdecl; external libasound;
function snd_pcm_wait(pcm: Psnd_pcm_t; timeout: cint): cint; cdecl; 
external libasound;
function snd_pcm_set_params(pcm: Psnd_pcm_t; format: snd_pcm_format_t;
  access: snd_pcm_access_t; channels, rate: cuint; soft_resample: cint;
  latency: cuint): cint; cdecl; external libasound;
function snd_pcm_avail(pcm: Psnd_pcm_t): snd_pcm_sframes_t; cdecl; 
external libasound;
function snd_pcm_avail_update(pcm: Psnd_pcm_t): snd_pcm_sframes_t; cdecl; 
external libasound;
function snd_pcm_avail_delay(pcm: Psnd_pcm_t; availp: Psnd_pcm_sframes_t;
  delayp: Psnd_pcm_sframes_t): cint; cdecl; external libasound;

{ALSA snd_pcm_info functions}
function snd_pcm_info_malloc(ptr: PPsnd_pcm_info_t): cint; cdecl; 
external libasound;
procedure snd_pcm_info_free(obj: Psnd_pcm_info_t); cdecl; 
external libasound;
procedure snd_pcm_info_copy(dst: Psnd_pcm_info_t; src: Psnd_pcm_info_t); cdecl; 
external libasound;
function snd_pcm_info_get_device(obj: Psnd_pcm_info_t): cuint; cdecl; 
external libasound;
function snd_pcm_info_get_subdevice(obj: Psnd_pcm_info_t): cuint; cdecl; 
external libasound;
function snd_pcm_info_get_stream(obj: Psnd_pcm_info_t): snd_pcm_stream_t; 
cdecl; external libasound;
function snd_pcm_info_get_card(obj: Psnd_pcm_info_t): cint; cdecl; 
external libasound;
function snd_pcm_info_get_id(obj: Psnd_pcm_info_t): PChar; cdecl; 
external libasound;
function snd_pcm_info_get_name(obj: Psnd_pcm_info_t): PChar; cdecl; 
external libasound;
function snd_pcm_info_get_subdevice_name(obj: Psnd_pcm_info_t): PChar; cdecl; 
external libasound;
//function snd_pcm_info_get_class(obj: Psnd_pcm_info_t): snd_pcm_class_t; cdecl; 
external libasound;
//function snd_pcm_info_get_subclass(obj: Psnd_pcm_info_t): snd_pcm_subclass_t; 
cdecl; external libasound;
function snd_pcm_info_get_subdevices_count(obj: Psnd_pcm_info_t): cuint; cdecl; 
external libasound;
function snd_pcm_info_get_subdevices_avail(obj: Psnd_pcm_info_t): cuint; cdecl;
external libasound;
//function snd_pcm_info_get_sync(obj: Psnd_pcm_info_t): snd_pcm_sync_id_t; 
cdecl; external libasound;
procedure snd_pcm_info_set_device(obj: Psnd_pcm_info_t; val: cuint); cdecl; 
external libasound;
procedure snd_pcm_info_set_subdevice(obj: Psnd_pcm_info_t; val: cuint); cdecl; 
external libasound;
procedure snd_pcm_info_set_stream(obj: Psnd_pcm_info_t; val: snd_pcm_stream_t); 
cdecl; external libasound;

{Control functions}
function snd_card_next(card: Pcint): cint; cdecl; external libasound;
function snd_card_get_index(name: PChar): cint; cdecl; external libasound;
function snd_card_get_name(card: cint; name: PPChar): cint; cdecl; 
external libasound;
function snd_card_get_longname(card: cint; name: PPChar): cint; cdecl; 
external libasound;

function snd_ctl_open(ctl: PPsnd_ctl_t; name: PChar; mode: cint): cint; cdecl; 
external libasound;
function snd_ctl_close(ctl: Psnd_ctl_t): cint; cdecl; external libasound;
function snd_ctl_pcm_next_device(ctl: Psnd_ctl_t; device: Pcint): cint; cdecl; 
external libasound;
function snd_ctl_pcm_info(ctl: Psnd_ctl_t; info: Psnd_pcm_info_t): cint; cdecl; 
external libasound;

{Error handling}
function snd_strerror(errnum: cint): PChar; cdecl; external libasound;


implementation

end.

  === end of alsa.pas =======================================================


  xt18
 
                                                                         
                                       
                                      
                                        
                                                                             
      text conversion from https://bit.ly/2UK60jk, provided by MeaTLoTioN     
      tutor version: 2020-11-21                                               
                                                                              

  /// Pre-requisites: ///
  
  On your smartphone, you will need to install a couple of (free) apps from 
  the Google Play Store in order to make this all work. Here are the 
  applications you need and the links to get them:

  Termux 
  https://play.google.com/store/apps/details?id=com.termux
  Andronix
  https://play.google.com/store/apps/details?id=studio.com.techriz.andronix

  Once you have installed both of these we can begin to install the OS we need
  to run the BBS.

  Choosing which OS we want
  First you need to launch Andronix. With this first set of choices we will
  set out the map for our build so it's important to install exactly what you
  want to use going forward, I don't think the decisions will negate the BBS
  working, but it will allow you to choose something you're familiar with.


  This is the first screen that we will interact with. You can see a list of
  Linux distributions we can choose from. These are (From top going right and
  then down):

                                  # Ubuntu
                                  # Kali
                                  # Debian
                                  # Arch
                                  # Manjaro
                                  # Fedora
                                  # Void
                                  # Alpine

  For me, Ubuntu is my preferred distribution, so I choose the top left icon.
  Now we just click Install to proceed.
  We are asked which version of Ubuntu we wish to install. I chose Ubuntu
  20.04.

  It then asks which desktop environment we wish to install, this is important
  as we will need to use the desktop environment to open up other access later.

  It will install a vnc server which will allow us to access the desktop just
  like a normal computer or Raspberry Pi.

  I chose XFCE, just because it was the first on the list, I don't really 
  have a preference at this point, I will only be using the desktop 
  environment initially to set up the rest of the environment, and afterwards
  it will be entirely headless.

  Once you pick your desktop environment, click the link at the bottom to
  "OPEN TERMUX".
  
  
  /// Installing the OS ///

  When you click OPEN TERMUX, it loads and leaves you at a prompt ready for
  input.

  First this you need to do is on any black area hold your finger on the
  screen until a context menu appears

  Then choose "Paste" and a long command string will appear.

  Once you have that, just press return and it will start to install the OS
  you chose in the previous section, in my case Ubuntu 20.04.
  
  
  /// Connecting to your new OS ///

  Now that you have installed your new OS, you need to run the vnc server in
  order for you to access it via your normal PC. At the terminal prompt, just
  type "./start-ubuntu20.sh" and press return. If you didn't choose Ubuntu
  20.04, just type "ls" and look for a .sh file in green and run that in the
  same way instead, "./start-script.sh".

  Once you have run that, you will be in your new OS at the cli. To start
  the vnc server just type "vncserver-start" and once it's running, you will
  be able to access the desktop from your PC just by connecting to the IP
  address of the phone and vnc port 5901.


  /// At the desktop ///

  Now that you're looking at your new desktop environment you can use it just
  like any other normal Linux computer. Go ahead and open the web browser and
  open the url http://www.mysticbbs.com/download/prealpha/

  You will see a list of files in here, right click the file for
  "mys112a47_pi.zip" and click copy link.

  Next you need to open the terminal and type 
  "wget http://www.mysticbbs.com/downloads/prealpha/mys112a47_pi.zip" and
  press return to download the archive to the root user's home folder (/root).

  Once you have got the file you need to install zip and unzip, so type 
  "apt update && apt -y install zip unzip" and press return.

  Now we need to add the 32 bit architecture support for the OS so that we
  can install Mystic BBS for Pi which is only 32 bit currently. To do this
  we run "dpkg --add-architecture armhf && apt update" and press return.

  The next step is optional but I would recommend installing "openssh-server"
  so that you can remotely administer the OS like any other Linux server. To
  do this just type "apt -y install openssh-server", once installed you will
  need to edit the config file "/etc/ssh/sshd_config" and change the
  listening port from 22 to something else above 1000 as although you have
  "root" access on this new system, because the phone itself is not rooted,
  you can't actually bind ports under 1000. Open the configuration file,
  change the port and save it, and then to start the ssh server run
  "/etc/init.d/ssh start"

  From here you can follow the normal instructions on how to install Mystic 
  as per http://wiki.mysticbbs.com/doku.php

  Once you have installed Mystic the rest is up to you. To connect to this 
  installation remotely, you will need to either have a mobile carrier that
  allows your phone to have a public facing internet connection, or if you
  don't like me you will need to be creative and make your own. I have my
  own server in a data center like Linode or Digital Ocean, so I created 3
  reverse SSH tunnels to that server from my BBS on my phone, which allows
  the ports on my server to be forwarded to my BBS on my phone. I will have
  at the bottom of this document a list of all my scripts that I use which
  you can use and modify as needed for your own use.


  /// Extra applications to help ///
  
  I have since found an application called "autossh" which is supposed to
  monitor ssh tunnels and connections and if they drop or get locked up,
  automatically restart them. The last puzzle in this project was keeping
  the ssh tunnels stable, they mostly are but occasionally a weird packet of
  data would cause the remote end (the end you would connect to in order to
  reach the BBS) to somehow hang that ssh session, so I needed to log into
  the remote server and manually kill the process which made the BBS
  automatically recreate the tunnel.

  I wanted to make this fully automated, so after finding this application I
  have installed it and testing it out to see if I can reach the BBS after
  swapping wifi connections on the phone and/or dropping it completely for a
  brief moment. If it all works as hoped I will modify this document to
  reflect my new changes and discoveries. I have noticed that autossh can
  only be run once, however I can create multiple tunnels in that one
  command so I have made it do all three in one command line. So far looks
  good... watch this space =)


  /// Reverse SSH tunnels ///
  
  Scripts I use to make it all work
  
  [] TELNET [] ===============================================================
  
  Filename: start_tunnel_telnet.sh

  #!/bin/bash

  LOG=/var/log/tunnels/telnet

  init_tunnel() {
    screen -X -S ssh_tunnel_telnet quit
    echo "[$(date)] Initialising TELNET tunnel..." >> $LOG
    screen -dm -S ssh_tunnel_telnet /bin/bash -c "while true; 
do ssh -vn -N -R 18023:localhost:2323  root@webserver -i /root/.ssh/id_ed25519; 
done"
    echo "[$(date)] Completed." >> $LOG
  }

  echo "[$(date)] Starting TELNET watchdog" >> $LOG

  init_tunnel

  [] BINKP [] ================================================================
  Filename: start_tunnel_binkp.sh

  #!/bin/bash

  LOG=/var/log/tunnels/binkp

  init_tunnel() {
    screen -X -S ssh_tunnel_binkp quit
    echo "[$(date)] Initialising BINKP tunnel..." >> $LOG
    screen -dm -S ssh_tunnel_binkp  /bin/bash -c "while true; 
do ssh -vn -N -R 18554:localhost:24554 root@webserver -i /root/.ssh/id_ed25519; 
done"
    echo "[$(date)] Completed." >> $LOG
  }

  echo "[$(date)] Starting BINKP watchdog" >> $LOG

  init_tunnel

  []  SSH  [] ================================================================
  
  Filename: start_tunnel_ssh.sh

  #!/bin/bash

  LOG=/var/log/tunnels/ssh

  init_tunnel() {
    screen -X -S ssh_tunnel_shell quit
    echo "[$(date)] Initialising SSH tunnel..." >> $LOG
    screen -dm -S ssh_tunnel_shell /bin/bash -c "while true;
do ssh -vn -N -R 18022:localhost:2022  root@webserver -i /root/.ssh/id_ed25519;
done"
    echo "[$(date)] Completed." >> $LOG
  }

  echo "[$(date)] Starting SSH watchdog" >> $LOG

  init_tunnel


  Run all script
  Filename: start_bbs.sh

  #!/bin/sh

  # start SSHD
  /etc/init.d/ssh start

  # Wipe any old screen sessions
  screen -wipe

  # Remove old mystic semaphores
  rm /mystic/semaphore/*

  cd /root
  ./start_tunnel_ssh.sh    >/dev/null
  ./start_tunnel_binkp.sh  >/dev/null
  ./start_tunnel_telnet.sh >/dev/null

  cd /mystic
  ./mis root /mystic/ daemon


  [] SSH config (~/.ssh/config)  [] ==========================================
  
  Match host webserver user *,!root
    Hostname 51.38.68.114

  Match host user root
    ProxyCommand ssh 51.38.68.114 -W 127.0.0.1:22

  Match host *
    User sshtunneluser
    ForwardAgent yes
    ExitOnForwardFailure yes
    ServerAliveInterval 60
    ServerAliveCountMax 5
    StrictHostKeyChecking no
    HostkeyAlgorithms +ssh-dss
    KexAlgorithms +diffie-hellman-group1-sha1
    Ciphers +aes256-cbc,aes192-cbc,aes128-cbc,3des-cbc



     c0W+PUk5+ t   F7xY +/ T7wjt Lc0W PU rioR wAF xYA+ UT7 jt gD1C jt Q y i c 
  CA NkiBfX Ag O7 AiyCf IvICB HvAAN iBfX4 g4O7w iyCfT vIC RHvA sf3hH 6iLe Ry0g
  AAA Xv /IIBQj48i e7Rz4HOcA Pj76AAXvC IIBQj48 Te7Rz HOcAHP  6vgk+B FAj7Q PgzA
      Pc2TbqJADKCBb+7yL70zjt2SQO8AjPc2TbqJADK Bb+7yL70zjt2SQO8uQw3ir40yfQ     
  E  As7rioR7 AF6irKLf 1/gsR0BwA 5As7rioR7 AF6irK fX1/gsR0 wAFuoZzS qERPk7T Ct
    Q e e3 C I   gTJO +5 s ri  7wAF6ir L X / sR0 w F oZ S q R k7T C d4 5  k + 




xabout         Ŀ Ŀ Ŀ Ŀ Ŀ Ŀ
              ͳ  ͸ͳ  ͸ͳ  ͸ͳ  ͳ͸ ;
                       ٰ   ۳    ۳    
                 ͸    ĿԸ           
                                 
              ͳ  ͳͳ  ;ͳ     ͳ     ͳ 
               ; ; ; ; ;   ;


                           n u l l   m a g a z i n e

                  i s s u e   { x 0 0 B } .  december 2020

::a b o u t::
  null magazine is an e-mag, about the bbs scene, ansi art, programming, retro
  computing/gaming and stuff. as from issue x005 null is written in turbo
  pascal 7 for dos only! oldschool stuff!!! this way anyone can get a copy of
  dosbox in his pc or smartphone and read null! there is also a text only
  version, specially for those who are scared to execute binary files...

::d o w n l o a d::
  null magazine hq is 'another droid bbs'. there you can can download or even
  read online the magazine, from the bbs. just visit:

                 another droid bbs / andr01d.zapto.org:9999

  official distros for null mag:

                         agency bbs  //  agency.bbs.nz
                     distortion bbs  //  d1st.org

  at the distros you can download the mag or read it online, couple of days
  before the mag is released to the web. you can also download it from
  affiliate networks

  and from github at:  https://github.com/xqtr/null

                                


::d i s c l a i m e r::
  any writer who provides articles for null mag. has his own opinion. the mag
  is not responsible in any way about authors opinions. null respects free
  speech and supports the variety of opinions in any social form of a network.

  for used material, like articles, ansi art, music, all credits goes to their
  creators. you are free to use material made by the founder of the mag (xqtr)
  under GPL3 license, no need to ask permissions. for any other material its
  your responsibility to do what you think best.

  the author has taken every precaution to insure that no harm or damage
  will occur on computer systems operating this util.  never the less, the
  author will not be held liable for whatever may happen on your computer
  system or to any computer systems which connects to your own as a result
  of. operating this util.  the user assumes full responsibility for the
  correct operation of this software package, whether harm or damage
  results from software error, hardware malfunction, or operator error.
  no warranties are : offered, expressly stated or implied, including
  without limitation or ; restriction any warranties of operation for a
  particular purpose and/or | merchant ability.  if you do not agree with
  this then do not use this program.

::c o n t a c t::
  if you want to repost bugs, send articles or art, just send an email at:
                                 xqtr@gmx.com


::t e a m::

  def list(authors):
    xqtr // another droid bbs


  def list(contributors):
    smooth // ink2 bbs
      :: ansi screen for issue x003
      :: ansi screen for issue x004

    shinobi //
      :: tutor for issue x005
      :: tutor for issue x009

    eugene // ?
      :: ansi screen for issue x006
      :: ansi screen for issue x007
      :: ansi screen for issue x008
      :: ansi screen for issue x009
      :: ansi screen for issue x00A

    alphaking // blocktronics
      :: flyer/logo for null mag.

    filth // blocktronics
      :: flyer/logo for null mag.

    nodohana
      :: article for issue x008

    deepthaw
      :: article for issue x00B
      
    stack fault
      :: article for issue x00B
      
    meatlotion
      :: tutorial for issue x00B

  def list(distributors):
    avon // agency bbs
    jack phlash // distortion bbs

            ____  _____   _____ _____   _____         _____
               \                      |            |
                 \    : :     :     : :     |       :     |
           :       :                         -----.       -----.
           .     :     . .           . .           : .           :
           |_____|_____| |___________| |___________| |___________|
           :     :     : :           : :           : :           :
           :_____:_____: :___________: :___________: :___________:

        ___________   ___________     _____   ____  _____   ___________
                   |________    \            \                 
       :    ----.--: :  /     _____) :     :       \    : :    ----.--:
            ____|--. :_`          :         :       :          ____|--.
       .           :   .            .     . .     :     . .           :
       |___________|   |\_________/| |_____| |_____|_____| |___________|
       :           :   : :       : : :     : :     :     : :           :
       :___________:    \:_______:/  :_____: :_____:_____: :___________:


                  best viewed with LESS linux txt viewer :p~
                  
                  
     c0W+PUk5+ t   F7xY +/ T7wjt Lc0W PU rioR wAF xYA+ UT7 jt gD1C jt Q y i c 
  CA NkiBfX Ag O7 AiyCf IvICB HvAAN iBfX4 g4O7w iyCfT vIC RHvA sf3hH 6iLe Ry0g
  AAA Xv /IIBQj48i e7Rz4HOcA Pj76AAXvC IIBQj48 Te7Rz HOcAHP  6vgk+B FAj7Q PgzA
      Pc2TbqJADKCBb+7yL70zjt2SQO8AjPc2TbqJADK Bb+7yL70zjt2SQO8uQw3ir40yfQ     
  E  As7rioR7 AF6irKLf 1/gsR0BwA 5As7rioR7 AF6irK fX1/gsR0 wAFuoZzS qERPk7T Ct
    Q e e3 C I   gTJO +5 s ri  7wAF6ir L X / sR0 w F oZ S q R k7T C d4 5  k + 

                  
                  
                  
xcredits 
   Ŀ Ŀ Ŀ Ŀ  Ŀ Ŀ Ŀ        
  ͳ  ͸ͳ  ͸ͳ  ͸ͳ  ͸͸  ;͸ ;ͳ;        
              ٰ   ۳         Ŀ        
     Ŀ   ͸   Ŀ       ۰   ͸          
                                   
  ͳ  ;ͳ  ͳͳ  ;ͳ       Ŀͳ ͳ             
   ; ; ; ; ;  ;   ;   ;        
                                                                                

  and with this weird way, i would like to give credits to the following people
  and groups. all of them in a way, the helped me, as also helped others to
  keep bbsing alive in a level, that i enjoy and value.
  
  i am asking sorry in advance, if i forgot someone, which i am sure i am :)
  
                  scinet         sudden death
                                                                    
 jack phlash                              mistigris 
                                                          
                                  shinobi               
     16colors                                  echicken 
                                                                   
                                    avon                    
                        fsxnet                       nodohana 
       alphaking                                
                            amish     
                                                     burps  
         opicron                                          
                                            blocktronics              
 nuskooler              netsurge                               
                                                                  
        eugene                                          marisa 
                                    stackfault  
                                                          
           the godfather                              
                                                black panther     
                                                                  
           apam     filth                      
                                                 deepthaw      
   dreammaster                      g00r00                      
                    fuel                                  
                                          impure        meatlotion
                                                                  
       xenos              dorenet      freshrich  
                                                      
                   



xtrack
                                    
 da music file! decode it and email me the filename written in the info header
 of the track! you will get a free copy of my new announcement board mod for
 mystic bbs.



SU1QTW1lY2hhbml6ZWQgdGVycm9yAAAAAAAAAAAABBAxAAUABAAPAIgIiAiFEA4AgEYI8IAAAAAA
AAAAAAAAACAAQCAgZBccIwwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBACQlAQA4wEDceQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
QEBAQEBAQEBAQEBAQEBAQEBAQEBAAAABAgMEBAUDBAQFBgYGBgQEBAUGBgYGBAQEBQcHBwcICAgJ
CgoKCwwMDA0ODg4ODnMUAACdFgAAxxgAAPEaAAAbHQAARR8AAJUfAADlHwAANSAAAIUgAADUIAAA
JyEAAD0iAACaIwAA3iQAAPklAAAGKAAArCgAAGQpAAA4KgAANiwAADUuAACFLwAAyDAAAAAARkYA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOWMgbiB2AAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAA5YyBuIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAENjIHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
RjBGMDAwegAAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAAAAMEYwMDB6AAAAAAAAAAAAAAAAAAAAAABo
ujh+dgAAAAAwRjAwMHoAAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAAADBGMDAwegAAAAAAAAAAAAAA
AAAAAAAAaLo4fnYAAAAAMEYwMDB6AAAAAAAAAAAAAAAAAAAAAABoujh+dgAAAAAwRjAwMHoAAAAA
AAAAAAAAAAAAAAAAAGi6OH52AAAAADBGMDAwegAAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAAAAMEYw
MDB6AAAAAAAAAAAAAAAAAAAAAABoujh+dgAAAAAwRjAwMHoAAAAAAAAAAAAAAAAAAAAAAGi6OH52
AAAAADBGMDAwegAAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAAAAMEYwMDB6AAAAAAAAAAAAAAAAAAAA
AABoujh+dgAAAAAwRjAwMHoAAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAAADBGMDAwegAAAAAAAAAA
AAAAAAAAAAAAaLo4fnYAAAAAMEYwMDB6AAAAAAAAAAAAAAAAAAAAAABoujh+dgAAAAAwRjAwMHoA
AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAAADBGMDAwegAAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABG
MEYwMDEwMAAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTAxAAAAAAAAAAAAAAAAAAAAAGi6
OH52AAAARjBGMDAxMDIAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDEwMwAAAAAAAAAAAAAA
AAAAAABoujh+dgAAAEYwRjAwMTA0AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxMDUAAAAA
AAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDEwNgAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAw
MTA3AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxMDgAAAAAAAAAAAAAAAAAAAAAaLo4fnYA
AABGMEYwMDEwOQAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTBBAAAAAAAAAAAAAAAAAAAA
AGi6OH52AAAARjBGMDAxMEIAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDEwQwAAAAAAAAAA
AAAAAAAAAABoujh+dgAAAEYwRjAwMTBEAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxMEUA
AAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDEwRgAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYw
RjAwMTEwAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxMTEAAAAAAAAAAAAAAAAAAAAAaLo4
fnYAAABGMEYwMDExMgAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTEzAAAAAAAAAAAAAAAA
AAAAAGi6OH52AAAARjBGMDAxMTQAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDExNQAAAAAA
AAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTE2AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAx
MTcAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDExOAAAAAAAAAAAAAAAAAAAAABoujh+dgAA
AEYwRjAwMTE5AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxMUEAAAAAAAAAAAAAAAAAAAAA
aLo4fnYAAABGMEYwMDExQgAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTFDAAAAAAAAAAAA
AAAAAAAAAGi6OH52AAAARjBGMDAxMUQAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDExRQAA
AAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTFGAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBG
MDAxMjAAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDEyMQAAAAAAAAAAAAAAAAAAAABoujh+
dgAAAEYwRjAwMTIyAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxMjMAAAAAAAAAAAAAAAAA
AAAAaLo4fnYAAABGMEYwMDEyNAAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTI1AAAAAAAA
AAAAAAAAAAAAAGi6OH52AAAARjBGMDAxMjYAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDEy
NwAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTI4AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAA
RjBGMDAxMjkAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDEyQQAAAAAAAAAAAAAAAAAAAABo
ujh+dgAAAEYwRjAwMTJCAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxMkMAAAAAAAAAAAAA
AAAAAAAAaLo4fnYAAABGMEYwMDEyRAAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTJFAAAA
AAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxMkYAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYw
MDEzMAAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTMxAAAAAAAAAAAAAAAAAAAAAGi6OH52
AAAARjBGMDAxMzIAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDEzMwAAAAAAAAAAAAAAAAAA
AABoujh+dgAAAEYwRjAwMTM0AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxMzUAAAAAAAAA
AAAAAAAAAAAAaLo4fnYAAABGMEYwMDEzNgAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTM3
AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxMzgAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABG
MEYwMDEzOQAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTNBAAAAAAAAAAAAAAAAAAAAAGi6
OH52AAAARjBGMDAxM0IAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDEzQwAAAAAAAAAAAAAA
AAAAAABoujh+dgAAAEYwRjAwMTNEAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxM0UAAAAA
AAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDEzRgAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAw
MTQwAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxNDEAAAAAAAAAAAAAAAAAAAAAaLo4fnYA
AABGMEYwMDE0MgAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTQzAAAAAAAAAAAAAAAAAAAA
AGi6OH52AAAARjBGMDAxNDQAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDE0NQAAAAAAAAAA
AAAAAAAAAABoujh+dgAAAEYwRjAwMTQ2AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxNDcA
AAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDE0OAAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYw
RjAwMTQ5AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxNEEAAAAAAAAAAAAAAAAAAAAAaLo4
fnYAAABGMEYwMDE0QgAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTRDAAAAAAAAAAAAAAAA
AAAAAGi6OH52AAAARjBGMDAxNEQAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDE0RQAAAAAA
AAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTRGAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAx
NTAAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDE1MQAAAAAAAAAAAAAAAAAAAABoujh+dgAA
AEYwRjAwMTUyAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxNTMAAAAAAAAAAAAAAAAAAAAA
aLo4fnYAAABGMEYwMDE1NAAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTU1AAAAAAAAAAAA
AAAAAAAAAGi6OH52AAAARjBGMDAxNTYAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDE1NwAA
AAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTU4AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBG
MDAxNTkAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDE1QQAAAAAAAAAAAAAAAAAAAABoujh+
dgAAAEYwRjAwMTVCAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxNUMAAAAAAAAAAAAAAAAA
AAAAaLo4fnYAAABGMEYwMDE1RAAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTVFAAAAAAAA
AAAAAAAAAAAAAGi6OH52AAAARjBGMDAxNUYAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDE2
MAAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTYxAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAA
RjBGMDAxNjIAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDE2MwAAAAAAAAAAAAAAAAAAAABo
ujh+dgAAAEYwRjAwMTY0AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxNjUAAAAAAAAAAAAA
AAAAAAAAaLo4fnYAAABGMEYwMDE2NgAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTY3AAAA
AAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxNjgAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYw
MDE2OQAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTZBAAAAAAAAAAAAAAAAAAAAAGi6OH52
AAAARjBGMDAxNkIAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDE2QwAAAAAAAAAAAAAAAAAA
AABoujh+dgAAAEYwRjAwMTZEAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxNkUAAAAAAAAA
AAAAAAAAAAAAaLo4fnYAAABGMEYwMDE2RgAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTcw
AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxNzEAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABG
MEYwMDE3MgAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTczAAAAAAAAAAAAAAAAAAAAAGi6
OH52AAAARjBGMDAxNzQAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDE3NQAAAAAAAAAAAAAA
AAAAAABoujh+dgAAAEYwRjAwMTc2AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxNzcAAAAA
AAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDE3OAAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAw
MTc5AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxN0EAAAAAAAAAAAAAAAAAAAAAaLo4fnYA
AABGMEYwMDE3QgAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTdDAAAAAAAAAAAAAAAAAAAA
AGi6OH52AAAARjBGMDAxN0YAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDIwMAAAAAAAAAAA
AAAAAAAAAABoujh+dgAAAEYwRjAwMjEwAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAASU1QSQAAAAAA
AAAAAAAAAAAAAAAIAAA8YKAAACACAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB
AQECAQMBBAEFAQYBBwEIAQkBCgELAQwBDQEOAQ8BEAERARIBEwEUARUBFgEXARgBGQEaARsBHAEd
AR4BHwEgASEBIgEjASQBJQEmAScBKAEpASoBKwEsAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATkB
OgE7ATwBPQE+AT8BQAFBAUIBQwFEAUUBRgFHAUgBSQFKAUsBTAFNAU4BTwFQAVEBUgFTAVQBVQFW
AVcBWAFZAVoBWwFcAV0BXgFfAWABYQFiAWMBZAFlAWYBZwFoAWkBagFrAWwBbQFuAW8BcAFxAXIB
cwF0AXUBdgF3AQEDAAAAAEAAAEAFAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAADgAADgAADgAADgAADg
AADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADg
AAAAAQQAAAAACwAA/wQA5gkA4B0A4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA
4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAAAAAAAABJTVBJAAAAAAAAAAAAAAAAAAAAAAgAADyA
oAAAIAIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4AAAAAAAAIBAgICAwIEAgUCBgIHAggC
CQIKAgsCDAINAg4CDwIQAhECEgITAhQCFQIWAhcCGAIZAhoCGwIcAh0CHgIfAiACIQIiAiMCJAIl
AiYCJwIoAikCKgIrAiwCLQIuAi8CMAIxAjICMwI0AjUCNgI3AjgCOQI6AjsCPAI9Aj4CPwJAAkEC
QgJDAkQCRQJGAkcCSAJJAkoCSwJMAk0CTgJPAlACUQJSAlMCVAJVAlYCVwJYAlkCWgJbAlwCXQJe
Al8CYAJhAmICYwJkAmUCZgJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQCdQJ2AncCAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAA
AOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAAAAAgAAAAAAAADrBgDr
CADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADg
AADgAADgAADgAAAAAAAAAElNUEkAAAAAAAAAAAAAAAAAAQMACAAAPFKgAAAgAgEAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwEDAgMDAwQDBQMGAwcDCAMJAwoDCwMMAw0DDgMPAxAD
EQMSAxMDFAMVAxYDFwMYAxkDGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMt
Ay4DLwMwAzEDMgMzAzQDNQM2AzcDOAM5AzoDOwM8Az0DPgM/A0ADQQNCA0MDRANFA0YDRwNIA0kD
SgNLA0wDTQNOA08DUANRA1IDUwNUA1UDVgNXA1gDWQNaA1sDXANdA14DXwNgA2EDYgNjA2QDZQNm
A2cDaANpA2oDawNsA20DbgNvA3ADcQNyA3MDdAN1A3YDdwMBAgAAAABAAAAADwAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA
4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAAAAAAAAAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAA
AOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAAAAAAAA
SU1QSQAAAAAAAAAAAAAAAAAAAAAIAAA8gKAAACACAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAEAQQCBAMEBAQFBAYEBwQIBAkECgQLBAwEDQQOBA8EEAQRBBIEEwQUBBUEFgQXBBgE
GQQaBBsEHAQdBB4EHwQgBCEEIgQjBCQEJQQmBCcEKAQpBCoEKwQsBC0ELgQvBDAEMQQyBDMENAQ1
BDYENwQ4BDkEOgQ7BDwEPQQ+BD8EQARBBEIEQwREBEUERgRHBEgESQRKBEsETARNBE4ETwRQBFEE
UgRTBFQEVQRWBFcEWARZBFoEWwRcBF0EXgRfBGAEYQRiBGMEZARlBGYEZwRoBGkEagRrBGwEbQRu
BG8EcARxBHIEcwR0BHUEdgR3BAEDAAAAAEAAAAQEAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAADgAADg
AADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADg
AADgAADgAADgAAAAAAAAAAAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA
4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAAAAAAAABJTVBJAAAAAAAAAAAAAAAA
AAEAAAgAADw2oAAAIAIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBBAIEAwQE
BAUEBgQHBAgECQQKBAsEDAQNBA4EDwQQBBEEEgQTBBQEFQQWBBcEGAQZBBoEGwQcBB0EHgQfBCAE
IQQiBCMEJAQlBCYEJwQoBCkEKgQrBCwELQQuBC8EMAQxBDIEMwQ0BDUENgQ3BDgEOQQ6BDsEPAQ9
BD4EPwRABEEEQgRDBEQERQRGBEcESARJBEoESwRMBE0ETgRPBFAEUQRSBFMEVARVBFYEVwRYBFkE
WgRbBFwEXQReBF8EYARhBGIEYwRkBGUEZgRnBGgEaQRqBGsEbARtBG4EbwRwBHEEcgRzBHQEdQR2
BHcEAQMAAAAAQAAABicAAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAA
AOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAAABAwAA
AADzAADrCADoQADg7QDgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADg
AADgAADgAADgAADgAADgAADgAAAAAAAAAElNUFNaSU9OLklUAAAAAAAAQFFAcnNhAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAABACIDAAC0AgAAIAMAACJWAAAAAAAAAAAAAFExAAAAAAAASU1QU2RiYXNz
LndhdgAAAABAEUB4YWltdXMAAAAAAAAAAAAAAAAAAAAAAAAAAAEgChsAAAAAAAAKGwAARKwAAAAA
AAAAAAAAczQAAAAAAABJTVBTWklPTi5JVAAAAAAAAEBRQHJzYQAAAAAAAAAAAAAAAAAAAAAAAAAA
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
9/P18e/e3uvuAxAPDgf89Ozg3dnT07vHt63Ov6+rrMPOxsTEwsPT3vL69/0HCRUZFCArLjg9RUxK
TE9YXF1bWl5jaWxnXllTVWVxYlVOS1laVVNHQ0dKR0VHRkA7MiYgJS4vIxUPEBISDwkC+/f18fDv
6+fk4t7c2tfV09HQz8/Ozs3O0NHS0tLV2+He3uDj5OPm6vH+/vwHCwYHCBAWEBIeJSglHxcXHSct
MTg9OTEvOURMRkI+QEVNUFBQT09SVlhZWFZUVVZUUlBOS0hISEZFQjw2MzIxMCsmIh8dGxYQCgQA
//358+3o4t7b19PQzMjDwL24sqyqqaeloJyYlZWVlpWQi4iHiImJhoGAgoeMjoyIhYmOkZSVmqKm
p6qqq6yxt7u/w8fKzs/R0NPa3uTm6ert8fX4+fsAAwUFCQ0PEBQYHB8fICEkJiktMTQ2NjY2Oj1A
QUNEQ0ZKTlJUVldYV1hZW19hYmJgYGBhY2RlZmRhYF1aWFdXV1RSTkxJRkI/OzczMC0pJSIfGhYQ
CwcB/fn18e3o5N/c2NHOysbCvrm1sK6rpqKgnJmWk5GPjIqHhYSDgYGAgICAgICAgICAgICAgICA
gICAgICAgIGEhYeIiIuOkpWZnqSnqqutsba6v8TK0NTX2+Dm7PH3+/8DCA4TGR8kKS0zNzw/Q0lQ
VVtfYmVnam5ydnp+f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f358enl4
dXJwbmtpZWJiYV9dWVVUUlBNSkZBPDYwLSwqKSUgGhUPCwYD//v18O3p6OXf2dPPy8jEwLy1sa6r
p6SgnZuYlZKPjYqIhoSBgICAgICAgICAgICAgICAgIDV09HQzszJycnT3NrQx761sK+wsrKysLK0
vM7QxsG9uLe1tK+urautra2rra6urq+ur7O0sq2rqqq6vriuqaG8+P/dyLqwrZ+LgICHq+Dg0MPB
wcbIycnJyM7T1tja3N/i5enr7u/+BwMA/v3+/wAAAA0XEgwKCAgICgsLDAwNDxESFBUWGhscHyAh
ISMlKCkqKystLSsrKisrLS4vLi4tLi0wPz85Mi4rKSYmKCYlJCMhIB4cGhcVFEtxVjglGxYVFBER
ERISFBkbGx4fHx4cHBkWFhYXGxwcHBsbHCAgISEgHiAeFhEMCwcGAwIA/v36+Pb29fY9Ti8VBQD/
DBAGAPv6+/4AAAIGCAwPERQVFhscHh8gHyAhIyQlKCgpKikpKisrLS4vMjM1NTU3ODg5Ojo9Pj8/
QUJDREZGRkQ/PDpETEI5MzIyNDQyMC8uLzIyMDAuKykmJCMfHBkWFBIQDwwLCggHBgUGBQIBAAAA
///+/f37+v39+/n18e/s6+rm5OLh39/d3N3c29ra19PR0NXf4trQxr+5ub2+vb/Cw8K/y9fOxr+9
urfkEAPm0cSzlYCAi5alrbO5vsHN3d/WzcfBurKrra2tra+8xMG5t7OvsK+uraupqKampqalpKOh
oaOkpKSkpaSlqKilo6OhoaGhoaCgnL/99NrRzL+4s6qboLC4s7W4ub2/w8bJzdHS09PV19rf4ubp
6uns8fT2+Pn6+/8AAAIFBggKDSlBNCUaFBESEhERERAQERQVFxocICEjJCQlJikqLS4wMzU3ODk6
PDw9P0E+Ojg3NzUzLy4uLjJGS0M9ODM0ODUzLy0rKSYjHx4cGxVEeWFCKh8XFxUUEhESFBYXGx4e
Hx8eHhcVFRYZGx4eHx8eGxseHx4cGxkXFhQQCwcICAMB//v5+Pb08/Hv7u7q7OEQTDAcA//6+vr4
9vX09Pj7/wADFCMgGxYVFhcWFRYXGhweICEkJSYoJigoKSorKy0uLzAwMjM1Nzg5Oj5DRENCQT8/
QUJBPTk3NzUzLy0rKys5SEM8NS8qKisoIx8fHx4cHBkVEhAPDQoIBgUDAgAA//79+/37+vr5+PX0
8/Hw8/j17+rl4eDf39zb2tja2Njm8e7h2tXNx7+6vL2+v8HN1tLNx8PCwcLDw7+9ubi3t7W1tLSz
ucjIv7m1sq+rpZ6kuMjJo5ufoKapqaimpqampqWmqKimpaSkpKOjoaChoaCfoJ+enJyenpuamZeZ
mpual5aUlMz65Mm5sq+ysK6rqamzxMnGxMbHy87Q0dLT09bY3N/h5Obq7/Hz8fP1+Pn7/wACAwYH
CAoNDxASFSQwLSUgHhwfIyEgHik3My0pJSMjJCQjIyEhIyUoKy4wNDk6PD0+P0FDREZHR0RBPTw8
Ojc0MC8wMDIzMjpMRz84NTU1My4pJSMgHBsXFhUNH19rTjIkGhUUEQ8NDA0NDA0QEhQVFhUUERAR
FBcbGxwcHh4eISMgIB4cGhcVERAPDAoDAP/9+vr69vPw7+7u7Orp5eTk4eXfFEkqFQD79vb08O/u
7u/x9Pj7/wEDBwsNEBIUFRccHy04MiokISEjIyAeGx8jJSkrLzIwLy8uLi8wNDU1Nzg3ODk8PT49
OTc1NTQwLisqKSgqLSstKyoqMD5BOS8rJBoPCwwLDAwLCAcHCAwMCAUCAP/9+Pb18/Px9PTx7+zq
6+/u6+fk5PD48Ong29jW0MfExsfV3NfRzs3LycjIx8TDwb6/vr7N19HIwr68ur26tbS1s7Cwr6+v
rauqq6urq6uqqqqrq6qqqaimpaWlpaWlpaWlpaWlpaSjoaSmpKCfnp6cm5qZl5aUm9/54MS4sq+y
r66trq+yt7y/xMfL0NXX5PX17+vp5ebp6erq6+vs7/P7//7/AAAAAQECAwYICwwNEBEVFhwtNS8p
JSQjIyMjJCUmKisqKisrLS4tLTBER0E9Ojk8QUE+PDw+P0FCQ0RHSElLSERCPz09PDg3MzI0NDQ1
NzU3MzlJSEM8NzIvLSgkIBwZFhQREAslZmRHLSEZFxYUEQ8LBgMDBwoLDA8NDQwMDREUFhcaGxsc
GxseHh8cGxcUERANCwcFAgD//fr49PHv7Ovq6evu6+fk4eHi4uHg39vf1/s+KhH+9O/v7+zq6enq
7O/z9vsAAgYHCAcICAoNDxASFRcXGRwhISAhICMjLT09Ny8qJSAXFhscIygqLS8zNTU3ODg3NDAu
LS0tKikmJSQkJCUmJigrKyklIyMjISAbGx4gGhANCwoIBwUBAP/+/fv5+Pb09PPx8e/s+QH++PPv
6eTh3NfY29vX1tXT09LR0tHQzNLi4djTzcnIxsTCv76+vby8urm5uLi4t7W1tLW0tbi3tK+vsLKw
r66tq6urq6moqampqampqKmqqaurqqilpKOko6Ogn5+eo+EB6cy9sq6vraqrqq2vtLq+xMjO09jb
3+Hk5+rr7u/w7/H/BgH++vj6/f7/AAIGBwYHCgsNDw8QEBAREhQVFxocLTo1LisqKy0uLi4uLS0t
LS4vMDI0NDQ0NTc4OTk6PT5CQ0RNYWFYUlFQTk5OUE5JREJBQT89PUE+Ojc1Nzg5ODc1NDIwLzJB
SUI5MCsmJCAeGRQRDwwLBhRaYkMuHxcVFhIQDAUBAQUHCgsMDAsKCAgKCw0PEBESERIQERQVFhUS
ERAPDAoHBQMBAP76+fb18/Dv7Orn6ebl5eTk5OTm5+Xi4d/d29ra2tra/y0cA/Xw7Ozq6evq6enq
6+zu7vH1+Pr9/wEDBQUHCAoLDAsLDAsMDA0QERIUFRUWFxYWFhYZGxweHiAlJiEbISMjIB4bGxkX
FxYVEhIUFRUWFRUWFRQUFBIREhEQEA8NDAsHBgMCAQAAAP/+/fv6Ag8KAv759vTx7+vq6eru7uvp
5/b+9e7n5OHg39zb2tjY2NfW19fX19fX19fX19bV1dPV09XR1s7/Hw/45vbp6+vp6eXl5uzx8/T1
+Pv+AAEGCAcHCAoLDAwNDxARFBUWGx4fICAgICAgISMjJCUmKCkqKy4vMDI0Nzg5PT9BPz9BQUJC
QkJCQ0RESFdgW1ZTUlZXVVJRUVBRUE5OUFBSU1JTUlhnaWJdW1pYWlhXV1dYWFpaXFxcXF1cW1tc
XV9hYmRkZWZlZWZmZ2psbm5vcG9vcH9/e3Vwbmxsa2traWdna2prbGtrbGxnZGBdW1dXZGdiX1hV
Uk5LSEZERENDQ0E+PDo4NDAtKSYkIR8cFxYUERAMCwoHBgIA//36+fj29fTz8e/u7uzr6urp5+nq
6eXk4uDf3dzb2NfW09LR0NHQztDOzc7MycjIx8bExsbEx8TDwsG/vr29v7+8uri3tbSyrq2urrCy
sK6urauqqaipqqqpqKaoqKimpqWko6OjpKSmqKWhn5+enp6cnJycm5qbm5qZmZeVlpaZl5WVlJSU
lJKSkpGQkZGQkJCPj4+NjI2MjY+PjY2MobzCqZCGgYaIioqIh4eHipyjnpaSj5fh8NG5r6upqKWj
o6Olpquvtbq+wsbL0NLT19vd4OTp6+7w8fP2+v4AAQMGCAsMDw8QERIUFBUXGx4fJSUkJSQlJigt
LSsqKiorLS4vLi8yMjM1NTc4OTo8PDw8PT4+P0FBQkJDRkhJS0xNTExMTlBRU1NVVVZXWFpbXFxd
X19hcH99dG5rZmVkYmFgXVxbW1xcZnV0a2VhYGBhYF9dXF1fYGFkZWZmZmdpa2tsbm9wcHFxc3R2
eHl4eHh5enp6enp6e317e3t6eXh4eHh+f39/f3t5eHZ2dXFrZmJgXVpWU1NVVlxnZVxWUlBRUE5L
SERBPzw4MzAuKigqKSQgHBkVEAwKBwYGBQMCAQAA//37+vj29PPx7+7s6+fl5OLi4eDh4eHg3dva
2NjX19XT0tLR0M7Ny8nIx8jHx8bDxMTDw8LBv769vby9v728ube1tLKysLCwr66ura2rq6uqqaim
qKampamrqailpKSjoaCfn5+fnp6cm5ycnJybm5ubm5uZmZeVlZWVlZKgpaGalZmUlJGQkI+NjIuM
jIyMio2659/CrpSAgICAgZmfm5eWmpuen5+enpybmpmZlpvR+OXLvbSysrCvr7Cwr7C3vL/Bw8PO
4eLg3+Hi5enq6+zv8PT2+v3/AAECAwYHCgsMDQ8QFBUWGh8gISAgICEjJCQlJiYoKSkqKisuLzAw
MjI0OT09PDw9Pj4/QUJBQUFBQUFCQkNGR0ZHSEhJTE1QTlBRUVNVVldYWFpbWlpaWltaWFtfXVxh
cXNuZmRiYmVkYmFgX19gYGFhYmJiYmJiZGRlZWZmZ2lrbm9wcXFzc3R1dXV1dXV2dnZ2dnZ2dnZ2
dnh4eHh4dnZ4eXh5eHZ2eHh4enl1c3Fwbm97f3ZvamViYF1cW1pYVVVTUVBLSEZEQ0NBPz05NzMv
LSooJSMfGxcVFBEPDQsIBgIAAAAA/v36+fb19vX08ezr6unm5OLh3dzb2trY19fW1tXV0tLR0M7M
y8zMzMvIx8fGxMPCw8PCwb69vLy6urm5wsbHuq6qqqutra2rq6urq66tq6mopaq8ubKppaOjoaCf
npycm5uampqZl5mZlpeZmZmZl5WVlJWjpqSblpqUlZSRkI+NjZCQj42Nsurmx7erqZ6LgICAgouR
lZmcoKSmqKmpqKmqq6urqqmpqKimqKG39gDp0MO+vr+9vLq5urm6vb/DxsjJzczOyN8DBf329fX4
+Pn5+/3+/wAAAgMGBwgKDQ8QERIZHh8eHh4gISMkJCUmKCgpKSotLi8vMDAyNDU3ODo6PD09Pj9B
QkNERkZHR0hOUVFQTk5OUVBQUFBQUVFSU1JQTkxMSUdEQj8+Vm5iWFVSUlNWWFhWVlhaW11fYGFi
ZGVlZmdpZ2dnampra2trbG5sbGxsbG5ubm5vcG9vb3BxcHFxc3Nzc3FxcXNzc3NzdXZ2dnZ2dnZ2
dnh4eHh4eHh5enl2dHFwb25sa2lnZWRhX19dXVxcW1hXVlNRS0hHRkRCQT48OTcwLSooJCAfGhYV
EhAPDAsIBgMBAAD+/fn49vXz8fDw7+7r6efl5OLh4N/d3dzc2trc29jV0tLQ0M7LycfGx8bGxMPC
wcLN1tDGv7WqpqiqtLm5sq2qqqutrq2tq6qrqqmqqbC+vrrGw7qyrammpKGfnJqXlZSSkZGWmZaV
lZSUlZSUkpKRkZCQkJCQkJGRkZCRi7/44sy5sK2vsKuhlpKaoaatrrCysrCzt7i6vL2+vr6+vr69
vL2+vr69vL29vLy4zgoR89/SycjJyMbExMPExsjM0NLV19ra2tja29vb3w0oGgsFAgYKBwUDAwIC
AwUHCgsMDxARFBYZHB4fICEjJCUmKCkqKy0uMDI0NTU4OTo8PT4/Pj9BQkJCQ0RGRkdISUlLTExO
Tk5OUFBRUVJTU1VWVldWUk5LSUhIREI/PDk3NTUzMjIvLy8uLi0qKDJOdH5mWEQ/Q0E9ODUyMDAz
NTg5Oj0+P0FBQkJERkhISUlLTE5QUlJSU1NVVldYWFpaW1tcXV1fYGFgYWJkZGVmZ2ZmZmZmZ2dn
Z2lnZWRiYWBgXFtYV1ZSUVBQTlBNSUZGREJBPTo4NzUwLy0rKCQgHBsbFhENCgcDAf/9+fb08e/s
6+rn5OLh4N3c2NbV09PS0dDOzMnIxsTEw8PDwsHBv7+9vLq8y9LJwb26t6+po6SjpKWlpKawvbqz
q6WalJWXm6CkoaGhoaChoaW0ubKppaOhoJ+otLCmoZyampmWkpGQj4+NkZualZGRlJaVlJKSkZCP
jZXT9NzEt7CvsrCvsLCzt7m8v8bJztDR0tPW19fY2tvc29zd4eLl5+fp6unn5eTi4eTl5OXi4eDf
2uIXMxsC9ezp6efl4uDf3dzd4eTm6uvq6+rq6e709fT19fb4+ChRQSoeFxYXFhUSEhYXGRcbHB4f
ISMkJigpKy0uLy8wMDI0NDU3OTw+Pj9BQ0RGR0lLTExNUFFSUlNVVlZXV1hYWlpbW1xcXF1dX2Bf
YF1bWFdWVVVTUlBNSUZEQ0NBQ0ZGQj8+Ojg1MzAvLy8uKyomJCEfHBkVEhANDAgUJjgrAhU/OCQX
DwoKCAcGBwgKDA0QFBYaHCAjJSYpKy4wMjQ1Nzk9PkFCQ0NERkdISElMUFBRUlNTVVZaW1dVUk5M
S0tJSEZCQT4+Pz4/Pj09Ojg3NTAuKi0vLSklIRwaFhIPCwoGAgAA/vv59fPx7uvp5eTi4N3b2tfX
1tXT0dDNy8nIx8bDzNvY0MfGxMK/urewrautrauqqamopqWkqbe8tK6ppqSfmZWVl5mcnJyenp+f
n5+muLeuqaWjoaCfnpybmpeWqb+6qZeRkZKUkpCPjYyPm56ZlpKe5PTYwbS1urq3tbS0tbm8wcTH
zNLW2t/i5uru8PP29vX19vn6+/v9/f79+/v9//8AAAD////+/fv49vb19fTz8O/q+zVDIQsA+vr4
9fPw8O7r6+zv8PP09fT09fX09fb4+fn6+/39+/3+ASpxcE4zKCMgIBwWEhAPEBEUFRkcHiAjJSYm
KCgpKSstLjAzNTU3OTo8Pj9BQkNERkdISUxMUFFRUlNVVVZXWFhaW1tcXF1dX19gX1xaV1ZVVVNS
UU1MR0ZEQ0NCQj8+PT06OTc0MDAvLi0rKSYkIR8eGhUSEA0LCAUDAQAA/fr49fPx7uzq6ebi4eDb
Cz0pD//49PX18/Hw7/Dz9fn9/wADCAsQFhsbHB4fICAhIyUmKSsuMDI3ODo6OTc1Nzg3NTU0MC8u
LSsqKy4wLysqKSkmIx4aFxcWFREPCwgHBQEA//36+fj49vPv6+nl4uDf3NrY1+Xr4tzV0tDMycfE
w8G+vLq5uLm4t7SysK6tq6qpqKq6v7myraqoqKWjn5ybm5yenp+enpybnJybo7Ozq6Whn5+enJqh
wdrWr5WDgYKHjZmqraWho6Set/r/5c3J0tDJxMLBv8HBw8bLztLW29/v/f37+/4AAQIDBQYICgsN
EBIVFBISFBUWFRUVFRQUEhEREhQSFBIREA8NDAoHBgYFBQMBAP4DOlo+IxIKBwUCAAD++/j2+Pn7
/v8AAAAAAAAAAAABAwIDBQYHBwYFAwEAAAAFQ2FILh8XGiAgEg8ZHiAoKiUkHyAjIyMjJCMkJCUm
KSsuLzAyNDU3ODk6PT9BQkNGR0hJSUtNUFFSUlNVVldYWFtcXVxcXFpXVlVTUlBOTEtLS0hHRkZG
RENCQT49PDo5NzIwLy0rKSUjIR8cGRURDwsIBgMBAAD//fr49vPv7uzq6ebk4uHf3NvY19bV2NjV
0tDOzMfsJRkA7uXg4eLg393c3eDi5uzw9fn7/wEDBgcLDxASFRUUFRQVFRofHxwaFxYVFhUWGxwa
FxUVFBALBgUGBgMCAAAA/v3++vbz7/QA//Xu6+vl4NvW09HOzcjHxsPCwb+9vby6vL28ubi1tK+v
rq2uvcO9t7Cuq6uppqWko6GhoKChoKCfnp6cnJubm5ypsKmjn5ql1fnqyLSZgYCAgYWKjZCXm70B
Aera2+Tk3NfT0NDR0tbk+Pj08/P2+fv9/f7//wAAAQUHCgwPEhQaKzAuKikqKy0tLi4vLy0qKikp
KikoJiUkJCEjIyQjISEfHhwbFxQSERIREA8MCgUgWl09JhoRDw0LCAYDAP//AAEDBwgICgsKCAoI
CgsNDw0PDQwLCgsKCBQhIR4XEg0KBhlEMxIB//0AAAAAAAECBQYIGSUjHBoXFhYWFhccISQfGyUt
KigmJSUmKCYmKCkpKiorLS4vMDM1Nzg5Ojw8Ojo8PD49PTw6PD09Pj9BQkNCQT8+Pj9BQkNERERD
QkE/Pj08Ojk4NTIwLy4tKykmJiUjIR8eGxsZHB8bFhQRDw0LCAYFAgEA//79+/r49vTz8e/u6+rn
5eTi4d/d3Nvb2tf9Ffvi1dXW2tvb3Nzd3N/k5+nq6efp5+nq6e72+vXw6uTh4uXn6enn6evs7O/7
BQH9+Pb28e/r6efk4uHg4N/d3Nvb2tzh4dzW1dPS0dHQzszLy8nIyMbExNPc1czGxMTEv726uLi3
tbe1tbW1tLS0s7Cwr66vr66rr77B1fPkw6+qpJuLgpGaoaakzeXVvrS3t7q9vL2+v8LGyMnX5+ri
4eDi5enq8QEA/fj19fj5+vn6/fv6+/39/v8AAAIDBgcICwwMGSouKCQjIB8fHx8fHx8fHx8gHx8f
ICEjJCQmJSQkJCUkIyMkIx8eGxcjTVEuFg8MEBISEREPDQ8SFhcaHBscGxsZFxcaGhscHh8gHx4e
HBwbGxkaFxUUERAPDQwLCggGBS9HJgwBAAADBgUFBgcICwwNDw8RERUoLigkISAfHh4eHhweHh8f
ICEjJCUmMkNBOjc1NDQ0MjAvLy8wMjQ1NDU1ODc1Nzg5Ojo8OTo6Ojo5OTo8PT4+Pj4+PT08PDo5
PD06NTAuKyomJSMhIB8cGxsaFxYUEhEQDw0LCgcGBQIBAAAA//37+vn49fPx8O/v7Ovp5+Ti4eHg
39/d29rY19bV19jW09HNy9LmFBDqzb+5vMK+ubOtucLM4ebf19HNzM7OzMvLycvJztLT09LR0NDO
zMzLyMfHyM7W2NHHwb28vL6+wcLBvr29vb3L1s7Gv7y4t7Wyr62qqaipqampqampqauuq6mpqKio
qKimpa/f9N/Eta+vqZyLi5ap0tO+sLCwuLq8vL29vsHCxMjM0NLV19rc4OLl5+8ADAsDAQAAAAUQ
DwcBAAAAAgMFBgcICgwNEBQVFRQWFxobHB4fICMkJSYmKCYyREM+Ojc1MzIwLysqKi0wMDIwLzA0
NDIwLi0qKCUjIB8VN11BKBYUFBkbGRcWFxkcHiAfHx8fHx8eGxoZGxwfHyAhICAhJCQjIBwbFxYV
ERANDQwKBwYGBQMCAAAA/yY/HAP7+/0AAAAAAAACAwUGBwgKCw0PEBESEiAoIBoVFxkbGxweHyAh
JCUoKCkoKCgpKSotLzA0Q0tDPDo5ODk8Ojk5Ojo5OD0+Pjo5ODU1NTc4OTk5OTk6Ojk4NTMwLi0p
KCUkISAgHyAfHhwXFhQSEQ8PDQ0MCwgHBgUDAgAAAP/++/r49vX18/Hv7uzs6ufl5OLl5erv6+Ha
19PRy8THyMjIx9HW0MvLycbEwsG+vbq5uMz26826uK+hjZKmrr3Dwr++v7+/vr28ur/M0cm/ubKp
AAABBw8YGhkWEg0OERgPExr7CCbgyREgH9e2+zzsN/iAKQCAk3+xgKwhlbA2msA8jITVy86AgKNe
f8mAgCkSBfzaxqAE3571DeXT/fj72NfUITDrHsMwf3+l1Ut/f3k7w/9/f38gZ39/f39/f39/f39/
f39/f39/f39/f3t/fmk3Q396UkM+NwvfwubU2cqAqI+AgIGypICAgICAgICAgICAgICAgICAgICA
gICAgICAgICAgICAgICAnrKDgLipw9PMs+cb++b1NkQfRV1DOSt/bTo9VmlBYn1/YTZlf2x/fH9/
f3l/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f396cGZeUlFCLQ4B+cbAqpagubOagICA
gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnIecrKvEzOLN09Xv+vwS
LS8kS39/VzdFf39+f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f398f39falxoeGs3HipH
JRYZHP/rA/HQ7g/ut83SrYCfsoOm15uAgIaAgJGAgICAgICAgICAgICAgICAgICAgICAgICAgJGA
gICJyLmR54CAmtDFwevptND35Oj/IjnyCU5SGkNFUFo0NTMlKDs2XUIPGSIl9RdaSC0MHCM+NCpO
PTpLXw4cO04vWfkcSnRrP01/TXtcaEp/f35/b39iYX9/X3tjZUBMVktQSX8rQWhRLilqXiwbCmNB
Q0gXWW9IFk5RagD7+zH5DwIG48Hx3qgC977D07+61YCa0LeAsKmqmp+UgI2AnoCAgIeAgJrKyomA
pLymjYGpybiTmOHElZm/m6y0xw2ByA4k7uIuNx4H6PNTHhYT4u8LL2ED8WNQSQAuZTgtM0smWE1v
Xm5/e1J/fi1IbGdhblBUaXh/amN/elhhfyNASmxrJElmJCcnS2g9ESAeKmNLFdP6TEM+Ky7rFOT8
7gMA2cia8v7+m93x16eArfWvgLqrqrjTv4C8tICRuoCAjcqAgICAqICAkJmGgICPkoCYgIy02oCi
jc60kbGd4a/cwe2MsQH4ugYHEsgEDxDn2QIsDu4A/xrsIwcTW3UlQRc9Yyw3f1MxYVRYfy49c39K
PHlqWVZqf39zf0l/f391dn9/Z3Rje3RFVF8gImNB5iRtKDFPAAoAGT4+3sgPE/YRx0I+Hd/X/uf8
xenEsLu4spqhz8mtvKevyYCAy6uorZW6yZ/Itq6KvLGAorKAyoOAnM2TnYCl+I/IgICAtcDKrYzT
B6W27uCn8vcP9d/K8Nft6AEDGhc8J/UvVjT3Jylucjz4eH/lTn8YH39/K0x/f3R/f39UZn9/P39v
Yn96f39kf39nWk9WfH9EI0sIMVszEfwFbUTi/u7wLOnV5NXBJvCAoBXb25y3kLLhDsOxtAG0t4np
66/JsqqxnLSbua6Ah/bsgIyQpICTo/GGpMiNq8+1nfIQsI/ev+rpxMDYAPmXyj0Iyd/RCCzqOS8A
/gQxMOXzOkIMRjdEDf9GU1FOBlklYh00RC1uNhZaffY9NB1bUhMwan4xHWNHS3xQHyFrVjRVb0lR
NiJYaDM0QTAFJxUM5/wcShvnxTIaEuILHOHA2RUL5NEZ9tHw27jf2Pii4+KmjPDrx8TU2aGzwKH3
5buj1+mzuubNtsrr7tqzn8DlzaKMuLfbysaotaDgycOwm8vG/c+qrrv+wcrb7qPcA/LZyMPI8P/v
xfz3CuDoERQOFCIUJDEIFWRJNflJaVc7MDVQZSk+fzVLUUU4REM7NVt/VypHYCwpXjlRVD9GXzoi
Pyc6Pn9HBAZaRVkVMEVENBUEMkEN5Rr55AgoAdsA6AINtcAG6dXHv7K7xde8h9HSgKC7rcqZoaSA
l63FkoqSsZDdmKiRnaK+ramYtaKSp5ih4b2u1dnD9ADCtb7E7y3+utX5/RYC/wMoLf36ID4SNw4t
LkAUMGol/VRjIV1/Ny83Xmdjb0x9Q39Udn5/Un91Y21/c3RyVE9Zfz8ubGdIY1c1RSMxDj0RJisU
/zgO9v7D3QL0+v3atd8A8fWbuOy6pOLfsKu3utrezZuv08jZv53G5JKq2vHDp7+ri8fF+PCOgOrn
tZzo3Zaw2+jFoprC+AfNswPqo7328PDkxOACEN/f8ObuFQcB8w4GEAEjEikcFC0rSz8RRERGU1VO
JUFvLUcxMml5KkBQc0tODVBpVU5bEy9eZio3XE0pHCw+IwcgOeclHkQJ+O7hFhYKygffAd4C58ju
8ca45MLl7JfH0uHf38q0n/MT7qyUFPvl6+nVzf8Axdoc1rrm7vzr3sjl/u/v17DZ4OnczegxxdL/
DtPuAOPsBAgEzwMy+uksGvMOKRn01UQ0HwQL7ixBH/IcJRP7EQkNHxXtBhsVEQwQ6BgnEBsFA/8A
GAj/ESMW8f8OAP4HKx0L8CQXCv8nKQQG/ggTCv4ZBRcW+PkG9u4ZGvH5A/EK/QvrzwscAN0B+wQ1
8M4GAPYYBAQeBNcfJRUDAAj96OwC+QEpH/P1CxDsEP37B+3v6Pjw9xzc4PLyudz55uTBxNfq2dbn
BdvSxvHYswDx4vP72PXn4c0L2e4NDr70HfnLAQwXJP7o5wLi/eXnEBoU/AT/9ujzQxfW2x8j+xUI
D/3zLBceBukaKyURGTAH6BQqFBgaKf4tNykhKyIiQyMiLCETCTkWLC5OOPciGQYVEyAX+OoXN/vi
AS0HEOH2Cwz2/BkL7uQB9gn09eL65wD3zAnr7Nv3++4T6MPe6Avb19HmyevU0eTrzsrU+BDHstP4
5yveub306uDM+RTi6MLzFgTF5d4a5+7+6OIEFvnfBxH08SnzB+0gDtAEDgcU9vAc7xAH/BkjGCUT
BDIMHBMh/ywZIRIQMTUYByIrMSkaDTMuCPYUDCMiIRUe/BQfEQAXId3tICAGDe0ZBfn4GAkc/Or5
Ef3//iwU+QIdBukV+w4KFAAb9eEZ9QUKBvgPHBne6t756vEJ9+/2xO4B+M/e4e/k1N0AzuPfBcXn
8ezf4dHx8d3o49rX7QnZ177U6fTv5bbg/d7Z/PzUvwULyt4R+tPeAP0RAxAEARAFIQIdEQgHHSIe
FRIVJj4UFApJPx4lFjY7Py00FSgqPBAnEzY/HxorFwo6OwwFKCoQHAcZKRUR/Q8fHgH99y8d/w4g
EBMOEQMQ//sDD/v8AADu5vsK19nz99rk5QDIxMr95Ly89sDEpMXkxMWwu7TA4bOtv8PM3bW81r7Z
8NLT1dbo+NPZ5CDs9+j67+cjFSIDFRMRAikbGxEdFEYfCBMfHSMoNQ0PFCATGi4hLRYeLhsSHDQY
IREdGBFAHxQRHjMdGzEoDwQzHSsVFi8bLQcsICMTEQweCQgkIwQZHvEWEA0CCRLuAw4JAvkL+fQY
/vDv8frt497m+9a10uDm3bixzezAs9C/q8Pd3cLEtsre18rJ4/PU3eLOzPHp8Pj39Pj6DgwA6/sN
DAMVFPj5OzEY/xYoFg8QFwYNDx4eABkYAwAKBP8RAg7/CREQCh4IBwYFGC4TChnyEg4AFCgRAxcU
JRgZJxv3GyQRHRYdKBkSDx0tGwQAERAMCwkFBBoD/hUaAALx/hL7+fEa8NsE/f74/fnw9vL87uTW
+gjw2v/m4+bk8u3c+ejcy/X31cfX6vr00t745dLW9+3c3PcA3/Lm+/To7ebu+uTn9uLu/vnv7QMH
AOoFAxIDEAAVHBMIHhAUCxwfIxsPIRkPExwsHScbEBojFygYFws6LhAjHB8MAiUtBgAN8h4vDwce
F/gBJw4L/e319hEP9fPxEP0A7fr3FQcCBgPcARDyENP/8Qvk/fwRzugHDeD388/v9wHx6fIG8eT6
3PTz69zm9PXs2MoC9Lrd/uLM3P3x1eTz8PPR9AkA++Ds8xEU9uUOGxoW8vYUCA/+BCAWARwNHCAO
ASYxFQkNARwNCwUdJw39DBAICBsVGQAPIxYIIBgRGRAHGhoX9/QHBxLt+yLu+Qz5AO0R+QMA/gL/
+QkQ6uoY9//67eztD/bt++n45PXz6A8M7eTxCQz76ff2AO7sDPbdwiIO5/gc3CTkJ94I9SQA0zP1
4SfnAAAI4T7FGRm/MAUF3h/ZJ/Ic3BEL8vIW9f4cC+HvEd4w3i3+3A4ZzQgRDt4f+/ILAO0i5/gc
4TbKEyS0Kv74HNkfBfX4Lc0W+PUk5+0t6gIF7xYA+/UT7wjtDgD1CwjtBQLyFiLc7wsZ4eonBRHZ
EeoZ2RwL7QsL6hnv6hMLANkiBfX4Ag4O7wAiyCfTIvICBRHvAPsf3hH76iLeGRy0LRbv8ggW7f7q
MOrZT9MFBfsF5BML7xb1AAXvC/IIBQj48iTe7Rz4HOcAHPj76vgk+B/FAj7QAPgz0Psq8u8R4Qsc
2RPnKuQCAhbt+/gRGe3qAjPc2TbqJADKCBb+7yL70zjt2SQO8uQw3ir40yfQExMA3irv5CreGecC
EQLeLe3tC/IfE8gTJOr+5As7rioR7wAF6irKLfX1/gsR0BwAFuoZzSfqERPk7TDCQd4O5wIk7+3v
MAveAu8c9fITAgjWM+f4HPj7+BntABH41i34AAD+AuEiC+8I3D7eFvXTMwgA5wUZyD7WLdkZH7Ef
AAsAAAjZNuQLBdYIDgIfyjPv+BzIJ/gFBfX+CAsC+OEfFtb7Ig7e+wUIDu8c4SLc7xkW5AX+HNM7
3O0cCNwWEeQZ4QX+AhzKJ/X1/h8A5yTt5yfn6jPqykzt9QAO9R/IKgDZCxkC5xzy9RPq9RkAAOoI
HOrkONP4M/L1AO0n5x/cDg7v7xwR4QUF+w7kAvs23P4T3vgfFsIz3vgTBQvqE/71CwvWJ+r4NspE
qzAI9QXvDtA2/vX+AvUZ3irnAAX1BfsR+/sI7QUZ5Oot7yLc/hneJ9Yi9QL1+Dbc5CrnAgsI00/Z
Dtkn7xzhABH1/vUq0A4FBQvcCBnhCBbkDhHn8gsRAPv+EeET5EG5BT7IGQLvIs0RCwXtDuQn+/IF
ABbeBQv7IuHtFv4R2STt3jMI3hP+/u8OAgX4GdMLAhkC

=== EOF HERE =================================================================
== DO NOT ==================== READ ========================= BELOW ==========
======== THIS ================================ POINT =========================
================= VIRUS ================== INCLUDED ==========================
  
Pj7+BntA H41i34AAPj7+BntA 8gDZCxO9D+AuEiC+8I3D7eFv TMw34AAD+AuEiC+8I3D7eFv TwI 
jPv+BzIJ/gFBfX+CAjPv+BzIJ/gFBfX+CAsC+OEfFtb7Ig7e+wUIDuX+CAsC+OEfFtb7Ig7e+wUIu7 
/X1/h8A5yTt5yfn6j/X1/h8A5yTt5yfn6jPqykzt9QAO9R/IKgDZCxfn6jPqykzt9QAO9R/IKgDZxO 
OLc0W+PUk5+0t6gIFOLc0W+PUk5+0t6gIF7xYA+/UT7wjtDLc0W+PU6gIF7xYA+/UT7wjtDLc0W+PU 
[ recursive NULL linking... you have to follow every link... that will keep ]E 
JdaF[ you busy for the next 10^10 years or at least a server goes down ]aTMwI3 
wITt5yfn6j/X[ https://jackphla.sh/null-interview-part-1 ]Du7Igv TMwI3DwUIDu7Ig 
u7KgDZJ/gFBfX+CAjPvJ/gFBfX+CAjPv+BzxO9R J/gFBfX+CAjPv+BzZCxO9RwUIDu7IggDZCxO9R 
xOc0W+5yTt5yfn6j/X15yTt5yfn6j/X1/h8Uwjt 5yTt5yfn6j/X1/h8+PUwjtgDZCxO9R0W+PUwjt 
8gDZCxO[ the only virus i got... is bbsing... :p  test that! ]0FveTMwI8gDZCxO9 
wIJ/gFBfX+J/X1/h8A5yTt5yfn6jPqykzt9QAO9R/IKgDZCxc2TbqJADW9f4cC+HwUIDu7IgTMwI3D 
u75yTt5yfn6j/X1/KgDZCxO9KgDZCxO9/gFBfX+CAjPv+Bz 5yTt5yfn6j/X1/h8gDZCxO9RIDu7Ig 
xOX1/h8A5yTt5yJ/X1/h8A5yTt5yfn6jPqykzt9QAO9R/IKgDZCxc2TbqJADW9f4cC+HUwjtZCxO9R 
KgDZCxO9xO9[ except blocktronics, i also love darktronics ]gDZCxO9RGFc0W+PUwj+ 
Pj7+BntA H41i34AAD+AuEiC+8I3DPj7+BntA H41i34AAD+AuEiC+8I3Dc0W+PUwjt3D7eFvDTMw+ 
jPv+BzIJ/gFBfX+CAsC+OEfFtb7IgjPvJ/gFBfX+CAjPv+Bz+OEfFtb7Ig7e+wUIDu7Ig7e+wUIDu/ 
/X1/h8A5yTt5yfn6jPqykzt9QAO9R/X15yTt5yfn6j/X1KgDZCxO9QAO9R/IKgDZCxO9R/IKgDZCx0 
Fv TMwI3Dv TMwI3D7xYA+/UT7wjtOLc0W+PUk5+0t6gIF7xYA+/UTFv TMwI3D+PFv TMwI3D+xO9 
+wUIDu7IgwUIDu7I[ www.youtube.com/watch?v=eYZiKheaEJU ]wUIDu78gDZCxO9Du7IgHI3D 
KgDZCxO9RgDZCxO9RAAD+AuEiC+8I3D7eFRTFvhT8gDZCxO9gDZCxO9gDZCxO8gDZCxO9CxO9R#TIg 
c0W+PUwjt0W+PUwjtCAsC+OEfFtb7Ig7e+wU+wUIDu7Igj7+BntA Hc0W+PUwjtAuc0W+PUwjteO9R 
+wUIDu7Ig5yTt5yfn6jPqykzt9QAO9R/IKgDKgDZCxO9RPv+BzIJ/gFBfX+CAsC+OEfFtb7Ig7e+wU 
xO9ZCxO9RUk5+0t6gIF7Fv TMwI3DjtDLc0Wc0W+PUwjtX1/h8A5yTt5yfn6jPqykzt9QAO9R/IKgD 
I3D+PUwj8gDZCxO9ZCxO9wUIDu7I[ fuck covid19 ]OLc0W+PUk5+0t6gIF7xYA+/UT7wjtDLc0W 
7IgBJw4L/e319hEP9fPxKgDZCxO9RQcCBgPcARDyENP/8Qvk/fwRzugHDeD388/v9wHx6fIG8eTxO9 
O9Rz69zm9PXs2MoC9Lrdc0W+PUwjteTz8PPR9AkA++Ds8xEU9uUOGxoW8vYUCA/+BCAWARwNHCAI3D 
J/X1/h8A5yTt5yfn6jPqykztJ/X1/h8A5yTt5yfn6jPqykzt9QAO9R/IKgDZCxc2TbqJADW9f4c7Ig 
M7eTxCQz76ff2AO7sDPbdwiIO5/g[ null008 ]7eTxCQz7M7eTxCQz76ff2AO7sDPbdwiIO5/eO9R 
dPj7+BntA H41i34AAPj7+BntA 8gDZCxO9D+AuEiC+8I3D7eFvrTMw34AAD+AuEiC+8I3D7eFvfTw 


    n u l l   m a g.  x 0 0 B   n o t   j u s t   r a n d o m   s h i t

         


