. . .. . 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 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 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 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(¶ms); // 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;I10) { 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 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 * \author Abramo Bagnara * \author Takashi Iwai * \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 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 === 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