create program to create bitmap

Game development specific discussions.
MrSwiss
Posts: 2874
Joined: Jun 02, 2013 9:27
Location: Switzerland

Re: create program to create bitmap

Postby MrSwiss » Jun 11, 2017 16:13

leopardpm wrote:hashcode... the standard way... a stupid, simple way would be to add ...
If you are going to code that "simple" stuff ... have fun.
What I mean to say is: I am, most certainly, NOT going to do it!
BasicCoder2 wrote:Well the program that encodes the binary file as a text file perhaps could have a header in the text file between two characters not used to represent data stating that this is the type of text file that can be decoded by the program and what type to decode it to (.bmp .png whatever) and maybe have its own extension code instead of .txt?
Done ...
    Version: 0.3 Beta
  • output files are now "automatically" named - ATTENTION: this might overwrite your "original" !!! (from Forum)
  • new extension created: .B128 (you'll have to associate it, to Notepad (or Editor), on WIN)
  • encoded file contains: "original" filename.ext (at the start, in "clear text")
  • Chr(34) is used as delimiter char (doesn't occur in shifted by 35)
"auto" works as follows: to Forum - .B128 extension added (input is: full filename incl. extension).
from Forum - the "original" filename used (input is: filename only, no extension - .B128 is assumed)

same bmp example as last time, but new format header:

Code: Select all

test_1.bmp"epYc#######Y####K###c####c###$##C#######c##5.###5.##############¢¢##¢¢#V#¢¢##¢¢‰##¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢™#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢#¢#N¢#¢#¢#¢x#¢#¢#¢#M¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢I#¢¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢##4#¢###¢#E##¢###¢g###¢¢¢¢›¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢#¢#R¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢###¢¢#T#¢¢##¢¢‰##¢¢##¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢¢¢X#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢###¢#E##¢###¢g###¢###+¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢##8#¢¢##¢¢‰##¢¢##¢o¢##¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢#¢z#¢#¢#¢#M¢#¢#¢#¢x#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢¢#¢¢#E##¢###¢g###¢###+¢###¢¢¢”¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢#¢‚#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢###¢¢…##¢¢##¢o¢##¢¢##<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢¢¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢#¢,¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢###¢g###¢###+¢###¢##4#¢¢¢¢¢¢¡¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢#¢#¢#N¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M##¢¢##¢o¢##¢¢##<¢¢##¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢|¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢#Q¢#¢#¢#¢x#¢#¢#¢#M¢#¢¢¢#¢p¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢¢#¢¢g###¢###+¢###¢##4#¢###¢¢…¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢#b¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢###¢h¢##¢¢##<¢¢##¢¢#V#¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#6¢¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢###+¢###¢##4#¢###¢#E##¢¢¢¢¢Ÿ¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢#¢#¢z#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x###¢¢##;¢¢##¢¢#V#¢¢##¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€#¢#¢#¢#M¢#¢#¢#¢x#¢#¢¢¢#=¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢¢#¢+¢###¢##4#¢###¢#E##¢###¢g¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢###-¢¢##¢¢#V#¢¢##¢¢‰##¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢™#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢#¢#N¢#¢#¢#¢x#¢#¢#¢#M¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢I#¢¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢##4#¢###¢#E##¢###¢g###¢¢¢¢›¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢#¢#R¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢###¢¢#T#¢¢##¢¢‰##¢¢##¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢¢¢X#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢###¢#E##¢###¢g###¢###+¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢##8#¢¢##¢¢‰##¢¢##¢o¢##¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢#¢z#¢#¢#¢#M¢#¢#¢#¢x#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢¢#¢¢#E##¢###¢g###¢###+¢###¢¢¢”¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢#¢‚#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢###¢¢…##¢¢##¢o¢##¢¢##<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢¢¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢#¢,¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢###¢g###¢###+¢###¢##4#¢¢¢¢¢¢¡¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢#¢#¢#N¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M##¢¢##¢o¢##¢¢##<¢¢##¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢|¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢#Q¢#¢#¢#¢x#¢#¢#¢#M¢#¢¢¢#¢p¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢¢#¢¢g###¢###+¢###¢##4#¢###¢¢…¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢#b¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢###¢h¢##¢¢##<¢¢##¢¢#V#¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#6¢¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢###+¢###¢##4#¢###¢#E##¢¢¢¢¢Ÿ¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢#¢#¢z#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x###¢¢##;¢¢##¢¢#V#¢¢##¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€#¢#¢#¢#M¢#¢#¢#¢x#¢#¢¢¢#=¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢¢#¢+¢###¢##4#¢###¢#E##¢###¢g¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢###-¢¢##¢¢#V#¢¢##¢¢‰##¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢™#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢#¢#N¢#¢#¢#¢x#¢#¢#¢#M¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢I#¢¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢##4#¢###¢#E##¢###¢g###¢¢¢¢›¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢#¢#R¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢###¢¢#T#¢¢##¢¢‰##¢¢##¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢¢¢X#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢###¢#E##¢###¢g###¢###+¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢##8#¢¢##¢¢‰##¢¢##¢o¢##¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢#¢z#¢#¢#¢#M¢#¢#¢#¢x#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢¢#¢¢#E##¢###¢g###¢###+¢###¢¢¢”¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢#¢‚#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢###¢¢…##¢¢##¢o¢##¢¢##<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢¢¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢#¢,¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢###¢g###¢###+¢###¢##4#¢¢¢¢¢¢¡¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢#¢#¢#N¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M##¢¢##¢o¢##¢¢##<¢¢##¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢|¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢#Q¢#¢#¢#¢x#¢#¢#¢#M¢#¢¢¢#¢p¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢¢#¢¢g###¢###+¢###¢##4#¢###¢¢…¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢#b¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢###¢h¢##¢¢##<¢¢##¢¢#V#¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#6¢¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢###+¢###¢##4#¢###¢#E##¢¢¢¢¢Ÿ¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€#¢#¢#¢#M¢#¢#¢#¢x#¢#¢¢¢#=¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢¢#¢+¢###¢##4#¢###¢#E##¢###¢g¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢##B¢¢##¢¢#V#¢¢##¢¢‰##¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢™#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢#¢#N¢#¢#¢#¢x#¢#¢#¢#M¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢I#¢¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢##4#¢###¢#E##¢###¢g###¢¢¢¢›¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢¢¢X#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢###¢#E##¢###¢g###¢###+¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢#b#¢¢##¢¢‰##¢¢##¢o¢##¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢#¢z#¢#¢#¢#M¢#¢#¢#¢x#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢¢#¢¢#E##¢###¢g###¢###+¢###¢¢¢”¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢##¢¢Š##¢¢##¢o¢##¢¢##<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢¢¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢#¢,¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢###¢g###¢###+¢###¢##4#¢###¢#E##¢###¢g###¢###+¢###¢##4#¢###¢#E##¢###¢g###¢###+¢###¢##4#¢###¢#E##¢###¢g###¢###+¢###¢##4#¢###¢#E##¢###¢g##¢¢##¢o¢##¢¢##<¢¢##¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢|¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢#Q¢#¢#¢#¢x#¢#¢#¢#M¢#¢¢¢#¢p¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢¢#¢¢g###¢###+¢###¢##4#¢###¢#E##¢###¢g###¢###+¢###¢##4#¢###¢#E##¢###¢g###¢###+¢###¢##4#¢###¢#E##¢###¢g###¢###+¢###¢##4#¢###¢#E##¢###¢g###¢##¢k¢##¢¢##<¢¢##¢¢#V#¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#6¢¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢###+¢###¢##4#¢###¢#E##¢###¢g###¢###+¢###¢##4#¢###¢#E##¢###¢g###¢###+¢###¢##4#¢###¢#E##¢###¢g###¢###+¢###¢##4#¢###¢#E##¢###¢g###¢###+¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€#¢#¢#¢#M¢#¢#¢#¢x#¢#¢¢¢#=¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢¢#¢+¢###¢##4#¢###¢#E##¢###¢g###¢###+¢###¢##4#¢###¢#E##¢###¢g###¢###+¢###¢##4#¢###¢#E##¢###¢g###¢###+¢###¢##4#¢###¢#E##¢###¢g###¢###+¢###¢##4¢¢##¢¢#V#¢¢##¢¢‰##¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢™#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢#¢#N¢#¢#¢#¢x#¢#¢#¢#M¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢I#¢¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢##4#¢###¢#E##¢###¢g###¢###+¢###¢##4#¢###¢#E##¢###¢g###¢###+¢###¢##4#¢###¢#E##¢###¢g###¢###+¢###¢##4#¢###¢#E##¢###¢g###¢###+¢###¢##4#¢##¢¢#U#¢¢##¢¢‰##¢¢##¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢¢¢X#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢¢#¢¢#E#¢¢##¢¢‰##¢¢##¢o¢##¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢#¢z#¢#¢#¢#M¢#¢#¢#¢x#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢##¢¢‡##¢¢##¢o¢##¢¢##<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢¢¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢#¢,¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢¢#¢¢g##¢¢##¢o¢##¢¢##<¢¢##¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢|¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢#Q¢#¢#¢#¢x#¢#¢#¢#M¢#¢¢¢#¢p¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢##¢k¢##¢¢##<¢¢##¢¢#V#¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#6¢¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢¢#¢+¢¢#¢¢¢#4¢¢¢#¢¢¢E#¢¢¢#¢¢g¢#¢¢¢#¢+¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€#¢#¢#¢#M¢#¢#¢#¢x#¢#¢¢¢#=¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢##6¢¢##¢¢#V#¢¢##¢¢‰##¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢™#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢#¢#N¢#¢#¢#¢x#¢#¢#¢#M¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢##¢¢#U#¢¢##¢¢‰##¢¢##¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢¢¢X#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢#I#¢¢##¢¢‰##¢¢##¢o¢##¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢#¢z#¢#¢#¢#M¢#¢#¢#¢x#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢##¢¢‡##¢¢##¢o¢##¢¢##<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢¢¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o##¢¢##¢o¢##¢¢##<¢¢##¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢|¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢#Q¢#¢#¢#¢x#¢#¢#¢#M¢#¢¢¢#¢p¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢##¢l¢##¢¢##<¢¢##¢¢#V#¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€#¢#¢#¢#M¢#¢#¢#¢x#¢#¢¢¢#=¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢##6¢¢##¢¢#V#¢¢##¢¢‰##¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢™#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢#¢#N¢#¢#¢#¢x#¢#¢#¢#M¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢##¢¢#U#¢¢##¢¢‰##¢¢##¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢¢¢X#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢¢‰¢#¢¢¢#¢o¢¢#¢¢¢#<¢¢¢#¢¢¢V#¢¢¢#¢#I#¢¢##¢¢‰##¢¢##¢o¢##¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢#¢z#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢##¢¢ˆ##¢¢##¢o¢##¢¢##<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x##¢¢##¢o¢##¢¢##<¢¢##¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢|¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢#Q¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢##¢m¢##¢¢##<¢¢##¢¢#V#¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢#¢x#¢#¢#¢#M¢#¢#¢##8¢¢##¢¢#V#¢¢##¢¢‰##¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢™#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^#¢¢##¢¢‰##¢¢##¢o¢##¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢##¢¢Š##¢¢##¢o¢##¢¢##<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š##¢¢##¢o¢##¢¢##<¢¢##¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢|¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢#¢¢‘¢#¢¢¢#¢€¢¢#¢¢¢#^¢¢¢#¢¢¢š#¢¢¢##¢q¢##¢¢##<¢¢##¢¢#V#¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢#¢¢¢‰#¢¢¢#¢¢o¢#¢¢¢#¢<¢¢#¢¢¢#V¢¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢##¢¢#V#¢¢##¢¢‰##¢¢##¢o¢##¢¢##<¢¢&
And the ver. 0.3 Beta code:

Code: Select all

' ForumBlobPost_V03.bas -- 2017-06-11, by MrSwiss (ver. 0.3 Beta)

#Include "file.bi"

Const As String toForum = ".B128"

Function loadfile( _
    ByVal filen As String _
    ) As String

    Dim As String text = ""

    If FileExists(filen) Then       ' crash, if not existing!
        Var f = FreeFile
        If Open (filen For Binary Access Read As #f)=0 Then
            If Lof(f) > 0 Then
                text = String(Lof(f), 0)
                Get #f,, text
            End If
            Close(f)
        Else
            Print "Unable to load: " + filen
        End If
    Else
        Print "File not existing: " + filen
    End If

    Return text
End Function

Sub savefile( _
    ByVal filen As String, _
    ByRef p     As String _         ' string might be too large for ByVal
    )

    var f = FreeFile

    If Open (filen For Binary Access Write As #f)=0 Then
        If Len(p) > 0 Then Put #f,, p
        Close(f)
    Else
        Print "Unable to load: " + filen
    End If
End Sub

Function EncBase128( _              ' direction --> to forum
    ByRef iStr As Const String, _   ' source string-part ASCII
    ByVal n_sLen As UByte = 7 _     ' length of string-part (default = 7)
    ) As String                     ' base128 string-part

    Dim As UByte    rmdr = 0, cry = 0, s_chr = 0
    Dim As String   s_stmp = iStr, t_sret = String(n_sLen, 0)

    For i As UInteger = 0 To n_sLen - 1
        s_chr = s_stmp[i]           ' get a byte, then check value
        If s_chr > 127 Then         ' if leading bit is set, then
            rmdr = BitSet(rmdr, i)  ' remember in "flags" byte
            s_chr -= 128            ' clear leading bit (MSbit)
        EndIf
        t_sret[i] = s_chr           ' assign to return string
    Next
    t_sret += Chr(rmdr)             ' add "flags" to string

    Return t_sret
End Function

Function DecBase128( _              ' direction <-- from forum
    ByRef iStr As Const String, _   ' as EncBase128
    ByVal n_sLen As UByte = 8 _     ' string length with "flags" (+1)
    ) As String

    Dim As UByte    rmdr = 0, cry = 0, s_chr = 0
    Dim As String   s_stmp = iStr, t_sret = String(n_sLen - 1, 0)

    rmdr = iStr[n_sLen - 1]         ' save decoder byte "flags"
    For i As UInteger = 0 To n_sLen - 2 ' without decoder byte
        s_chr = s_stmp[i]           ' get a byte
        If Bit(rmdr, i) Then s_chr += 128   ' check "flags" and set leading bit
        t_sret[i] = s_chr           ' assign to return string
    Next

    Return t_sret
End Function

Function ShiftB128( _
    ByRef iStr As Const String _    ' source = ASCII string
    ) As String

    Dim As ULong    n_run = Len(iStr) \ 7, n_rem = Len(iStr) Mod 7
    Dim As UByte    s_tchr = 0
    Dim As String   s_ret = "", s_tstr = "", s_estr = ""

    ' get encoded string (8 byte, from 7 byte "original")
    For i As UInteger = 0 To n_run - 1
        Var sPos = i * 7 + 1
        s_tstr = Mid(iStr, sPos, 7)
        s_ret += EncBase128(s_tstr) ' encode to 8 byte string
    Next
    ' string-end processing
    If n_rem > 0 Then
        Var sPos = n_run * 7 + 1
        s_estr = Mid(iStr, sPos, n_rem)  ' string remainder
        s_ret += EncBase128(s_estr, n_rem)  ' encode rem.
    EndIf
    ' shift every byte to "printable", add 35
    For j As UInteger = 0 To Len(s_ret) - 1
        s_tchr = s_ret[j] + 35       ' apply shift
        s_ret[j] = s_tchr            ' write back to string
    Next

    Return s_ret
End Function

Function ShiftASCII( _
    ByRef iStr As Const String _    ' source = B128 string
    ) As String

    Dim As ULong    n_run = Len(iStr) \ 8, n_rem = Len(iStr) Mod 8
    Dim As UByte    s_tchr = 0
    Dim As String   s_ret = "", s_tstr = "", s_estr = "", s_tmp = iStr

    ' reverse shift to "B128 encoded"
    For j As UInteger = 0 To Len(s_tmp) - 1
        s_tchr = s_tmp[j] - 35      ' get shifted byte & un-shift
        s_tmp[j] = s_tchr           ' write un-shifted back
    Next
    ' get decoded string (8 byte chunks)
    For i As UInteger = 0 To n_run - 1
        Var sPos = i * 8 + 1
        s_tstr = Mid(s_tmp, sPos, 8)
        s_ret += DecBase128(s_tstr) ' decode string
    Next
    ' string-end processing (shorter than 8)
    If n_rem > 0 Then
        Var sPos = n_run * 8 + 1
        s_estr = Mid(s_tmp, sPos, n_rem) ' string end
        s_ret += DecBase128(s_estr, n_rem)  ' decode string end
    EndIf

    Return s_ret
End Function

' ---
Sub GetUserInput( _
    ByRef sFle As String, _                ' file name (with or without ext)
    ByVal mode As UByte=0 _                ' 0 = default +ext, 1 = no ext               
    )

    Dim As String q = "Please, enter INPUT file name: ", a  ' question/answer strings (local)

again:
    Line Input q, a                         ' ask for filename
    If a = "" Then GoTo again               ' file name is mandatory!
    If mode = 1 AndAlso InStr(a, ".") Then  ' ext check in mode = 1 only
        Color 12
        Print "File contains extension, enter filename without it! ";
        Sleep 1500, 1 : Color 7 : GoTo again
    EndIf
    If mode = 1 Then a += toForum           ' add extension ".B128"
    sFle = a
End Sub

' ===== MAIN =====
Width 120, 25   ' we might want a larger console window

Dim As String   sFile, sMeth, sQuest, sAns, c, d, sDir = CurDir
Dim As String   sTitle = "ForumBlobPost - Utility, version 0.3 Beta", _
                uline = String(Len(sTitle), "-")

start:
Cls : Print sTitle : Print uline : Print
sQuest = "enter the direction: to/from Forum [t|f] 'q = quit' : "
Line Input sQuest, sAns ' line input accepts a string-var (input doesn't)
' evaluate user input
Select Case As Const Asc(LCase(sAns), 1)    ' check of first char only
    Case 102
        Color 10 : Print "Enter filename *without* extension, please!" : Color 7
        GetUserInput(sFile, 1)              ' f/F entered, extension ".B128" assumed
        c = loadfile(sFile)
        Var npos = InStr(c, Chr(34))        ' extract "original" filename, shorten
        d = Left(c, npos - 1) : c = Right(c, Len(c) - npos) ' source string
        Var r = ShiftASCII(c)               ' decode
        savefile(d, r)                      ' ATTENTION: overwrites source file!!!
    Case 113
        Print "quiting ..." : Sleep 750, 1 : End ' q/Q entered
    Case 116
        Color 10 : Print "Enter filename *with* extension, please!" : Color 7
        GetUserInput(sFile)                 ' t/T entered, get source file
        Var dot = InStr(sFile, ".")         ' extract filename only
        d = Left(sFile, dot - 1) + toForum  ' add extension ".B128"
        c = loadfile(sFile)
        Var r = ShiftB128(c) : r = sFile + Chr(34) + r  ' encode
        savefile(d, r)
    Case Else
        sAns = "" : Color 12 : Print "unrecognized command" ' in red
        Color 7 : Sleep 1500, 1 : GoTo start' all else (ask again)
End Select

Print : Print "Done ..."
If CurDir <> sdir Then ChDir(sDir)  ' restore path
Sleep : End 0
' ===== END-MAIN =====  ' ----- EOF -----
leopardpm
Posts: 1696
Joined: Feb 28, 2009 20:58

Re: create program to create bitmap

Postby leopardpm » Jun 11, 2017 17:12

MrSwiss wrote:
leopardpm wrote:hashcode... the standard way... a stupid, simple way would be to add ...
If you are going to code that "simple" stuff ... have fun.
What I mean to say is: I am, most certainly, NOT going to do it!
LOL! well, I don't think it is necessary because it only makes sure that the data copied from the forum is not corrupted when decoded... not needed. But seriously, it is like 2 lines of simple code in both the encoding and decoding sections...

BasicCoder2 wrote:Well the program that encodes the binary file as a text file perhaps could have a header in the text file between two characters not used to represent data stating that this is the type of text file that can be decoded by the program and what type to decode it to (.bmp .png whatever) and maybe have its own extension code instead of .txt?
Done ...
oh sure.. when I ask about doing this you say it is stupid, but when BasicCoder asks then you just immediately do it! (Just kidding you!)

    Version: 0.3 Beta
  • output files are now "automatically" named - ATTENTION: this might overwrite your "original" !!! (from Forum)
  • new extension created: .B128 (you'll have to associate it, to Notepad (or Editor), on WIN)
  • encoded file contains: "original" filename.ext (at the start, in "clear text")
  • Chr(34) is used as delimiter char (doesn't occur in shifted by 35)
"auto" works as follows: to Forum - .B128 extension added (input is: full filename incl. extension).
from Forum - the "original" filename used (input is: filename only, no extension - .B128 is assumed)
Nice job, Mr. Swiss!!! It looks great and I will use it in my next major upcoming post that Boromir got me started on (but he doesn't know it yet...)
MrSwiss
Posts: 2874
Joined: Jun 02, 2013 9:27
Location: Switzerland

Re: create program to create bitmap

Postby MrSwiss » Jun 11, 2017 20:57

... it is like 2 lines of simple code in both the encoding and decoding sections.
Nope, it would have to be at the end of encoding and shifting, as well as including file-
name. Also at the very beginning, before processing in any way. (reverse processing)
If the idea is: prevent tampering with it, in the Forum. (highly unlikely, I'd assume)

Any other use, means simply: slow down the "encoder"/"decoder" with added "ballast".
That's what I meant with, I won't do it ... (coding for speed, then artificially, slow it
down again).
BasicCoder2
Posts: 3323
Joined: Jan 01, 2009 7:03

Re: create program to create bitmap

Postby BasicCoder2 » Jun 11, 2017 23:37

With an uncompressed bitmap image and few colors as in your example my old palette method is more compact.

Code: Select all

screenres 640,480,32
dim as string datum
dim as integer n
dim as any ptr image
image = imagecreate( 64, 64)
dim as ulong colors( 10)
colors( 0)=RGB(255,0,0)
colors( 1)=RGB(255,127,0)
colors( 2)=RGB(255,255,0)
colors( 3)=RGB(0,255,0)
colors( 4)=RGB(0,127,255)
colors( 5)=RGB(0,0,255)
colors( 6)=RGB(127,0,127)
colors( 7)=RGB(0,0,0)
colors( 8)=RGB(255,255,255)
colors( 9)=RGB(255,0,255)

for j as integer = 0 to  63
    read datum
    for i as integer = 0 to  63
        n = val(mid(datum,i+1,1))
        pset image,(i,j),colors(n)
    next i
next j
bsave "test_BB.bmp",image

DATA "0000000000000000000000000000000000000000000000000000000000000000"
DATA "0000000000000000000000000000000000000000000000000000000000000000"
DATA "0000000000000000000000000000000000000000000000000000000000000000"
DATA "0000000000000000000000000000000000000000000000000000000000000000"
DATA "0000000000000000000000000000000000000000000000000000000000000000"
DATA "0000011111111111111111111111111111111111111111111111111111111111"
DATA "0000011111111111111111111111111111111111111111111111111111111111"
DATA "0000011111111111111111111111111111111111111111111111111111111111"
DATA "0000011111111111111111111111111111111111111111111111111111111111"
DATA "0000011111111111111111111111111111111111111111111111111111111111"
DATA "0000011111222222222222222222222222222222222222222222222222222222"
DATA "0000011111222222222222222222222222222222222222222222222222222222"
DATA "0000011111222222222222222222222222222222222222222222222222222222"
DATA "0000011111222222222222222222222222222222222222222222222222222222"
DATA "0000011111222222222222222222222222222222222222222222222222222222"
DATA "0000011111222223333333333333333333333333333333333333333333333333"
DATA "0000011111222223333333333333333333333333333333333333333333333333"
DATA "0000011111222223333333333333333333333333333333333333333333333333"
DATA "0000011111222223333333333333333333333333333333333333333333333333"
DATA "0000011111222223333333333333333333333333333333333333333333333333"
DATA "0000011111222223333344444444444444444444444444444444444444444444"
DATA "0000011111222223333344444444444444444444444444444444444444444444"
DATA "0000011111222223333344444444444444444444444444444444444444444444"
DATA "0000011111222223333344444444444444444444444444444444444444444444"
DATA "0000011111222223333344444444444444444444444444444444444444444444"
DATA "0000011111222223333344444555555555555555555555555555555555555555"
DATA "0000011111222223333344444555555555555555555555555555555555555555"
DATA "0000011111222223333344444555555555555555555555555555555555555555"
DATA "0000011111222223333344444555555555555555555555555555555555555555"
DATA "0000011111222223333344444555555555555555555555555555555555555555"
DATA "0000011111222223333344444555556666666666666666666666666666666666"
DATA "0000011111222223333344444555556666666666666666666666666666666666"
DATA "0000011111222223333344444555556666666666666666666666666666666666"
DATA "0000011111222223333344444555556666666666666666666666666666666666"
DATA "0000011111222223333344444555556666666666666666666666666666666666"
DATA "0000011111222223333344444555556666677777777777777777777777777777"
DATA "0000011111222223333344444555556666677777777777777777777777777777"
DATA "0000011111222223333344444555556666677777777777777777777777777777"
DATA "0000011111222223333344444555556666677777777777777777777777777777"
DATA "0000011111222223333344444555556666677777777777777777777777777777"
DATA "0000011111222223333344444555556666677777888888888888888888888888"
DATA "0000011111222223333344444555556666677777888888888888888888888888"
DATA "0000011111222223333344444555556666677777888888888888888888888888"
DATA "0000011111222223333344444555556666677777888888888888888888888888"
DATA "0000011111222223333344444555556666677777888888888888888888888888"
DATA "0000011111222223333344444555556666677777888889999999999999999999"
DATA "0000011111222223333344444555556666677777888889999999999999999999"
DATA "0000011111222223333344444555556666677777888889999999999999999999"
DATA "0000011111222223333344444555556666677777888889999999999999999999"
DATA "0000011111222223333344444555556666677777888889999999999999999999"
DATA "0000011111222223333344444555556666677777888889999999999999999999"
DATA "0000011111222223333344444555556666677777888889999999999999999999"
DATA "0000011111222223333344444555556666677777888889999999999999999999"
DATA "0000011111222223333344444555556666677777888889999999999999999999"
DATA "0000011111222223333344444555556666677777888889999999999999999999"
DATA "0000011111222223333344444555556666677777888889999999999999999999"
DATA "0000011111222223333344444555556666677777888889999999999999999999"
DATA "0000011111222223333344444555556666677777888889999999999999999999"
DATA "0000011111222223333344444555556666677777888889999999999999999999"
DATA "0000011111222223333344444555556666677777888889999999999999999999"
DATA "0000011111222223333344444555556666677777888889999999999999999999"
DATA "0000011111222223333344444555556666677777888889999999999999999999"
DATA "0000011111222223333344444555556666677777888889999999999999999999"
DATA "0000011111222223333344444555556666677777888889999999999999999999"


However with a compressed png image your method is much better,

Code: Select all

pngImage.png",sqj0-=$-###0lk#gu###c####c+)####MŒ”##5#$–uje##Qq?Œ###.'Šdpd###T2.Ÿ„(#.##,“k|–###.4##.#4$¢‡‚4#C#

$Ulgdw#›3d‘'oc/'œ\rJ+Xz™By,.e+7yDW‘4ƒpjY@’i/$“pKC@Ia,Qƒ¢2-&s#%›scs-%WA,%7Cl#a73ŸKƒcDhrKCsc)$‹•3…Š7@3ŸhcqŠbMD#(“V-+,7sC=wf;+‚9M#

%ZtG9%‹KC:C¡~Œ(%;™=š#0Ž™[6ElP(stEccŸ1‹.€;0>zIg6o}-C–n$>/0n„€Y>3bpL#1%%;…–'%)˜dh’f^ZD=iw]|cZBX\HZD=wuT#@('gŠ+S(/7c†F$3Ž›Gy7$Ž%-œ–

€Hc#]-++r4S-;K#)%%{O†6{v›2*-K‡p˜X{8%‹KCCa(jKƒC#=-++V1r…p1„@KC3Zz|xy-CF##œ›?”*$j”„&Ÿiw/>„-š4####l&hqgQeƒ%k


I always imagined if a tutorial with simple pictures were to be posted you would use a program to display vector graphics.

For such a simple image you would probably just generate it from a program.

Code: Select all

screenres 640,480,32
dim as ulong colors(0 to 9)
colors(0) = rgb(255,0,0)     'red
colors(1) = rgb(255,127,0)   'orange
colors(2) = rgb(255,255,0)   'yellow
colors(3) = rgb(0,255,0)     'green
colors(4) = rgb(0,127,255)   'light blue
colors(5) = rgb(0,0,255)     'blue
colors(6) = rgb(127,0,127)   'purple
colors(7) = rgb(0,0,0)       'black
colors(8) = rgb(255,255,255) 'white
colors(9) = rgb(255,0,255)   'magenta

for i as integer = 0 to 9
    line (i*5,i*5)-(63,63),colors(i),bf
    sleep
next i

sleep



Anyway well done MrSwiss.

I think it is useful enough to be given its own post, perhaps in the tips and tricks section.

.
BasicCoder2
Posts: 3323
Joined: Jan 01, 2009 7:03

Re: create program to create bitmap

Postby BasicCoder2 » Jun 11, 2017 23:46

Test

Code: Select all

animBlock.png",sqj0-=$-###0lk#gu###„#C#$‹+)####Dž?##=#$–uje##Qq?Œ###.'Šdpd###T2.Ÿ„(#.##,“k|–###.4##.#4$¢‡‚4#C#glgdw#›@T5IOl8?š5ž#2mnœ83‹Sw97›)+[&$/y%7Xmy[3oC–M_we“_{“• •:”EU•’ˆM—&FVF.–RE¡oov5&„¢v’2}A`L}+O¢ŒB¡Œ&rbŽzƒ@2`|%$€p\^B€(Š:t,;%b ž™d€]sjb%†z{w&˜ZŠz|*K—(t}h(Cir‰g[42K€`2^–DzbSC^\bmaYCN/Œ-‰#2›i¡(iR†S*‘1Š(/RS2‹'†:]%'ocJY,•x<šŠfRvƒcš–‘qJ“d\d;Q#34‹)<ŒzTƒ@2`%$Y€p\^B(:Š'†[N#Z4f^3<Wz 0%DœlšVq.‡v=Nal#W~ -F<›6žsš€žš#z;ˆO=¢l˜b –2s¢ ž¢¡š^N @•FJ<‹dAW‘*”q&3Vd#’ƒ‹q€žc’€b,qTm|HW5Ed[J\_YN—lcB@•‚dƒIVqHˆv=NšJ<@3‰Ž L1‰P LŸ+<ozyž6?™A–€n-WNG•F:‡…‚Rc[VB…¢mIR•UC^\šŠfIb.fa‘’¢avO“k(ug=xTš($Rt+`šT{b5„bN‰b-$B€‰‹YˆNšT‡<8Ša]<b^`u?x‰”m'‹e]ez¢B¢Fr^Vwm“=<sa–(t4Žjai•qM™Ib%‹$‚ˆSJU–x^•/šL XC‚VwN/[L&)_cŸ,NP3:t$LsJwB+„s;Bw,X]*‰”G@•„<s–Šr\LWR|<^5•o‡N?¢pŠ6`B8‰xTˆCq¢’rjsJœG[-…Q \_S•(”-TB|7Ž‰ak;š`cLPR<˜F„¡q‰–E; JbŸ¡œpŸ)NŸ›>xvim*\UbEwzb^Ÿ8=t|*p]<šs–@-w7?X4oF>iŽVbF; NFTq<rœu‘y1'œ@Ÿay˜']bJ=h\8†xoŽ‰“fNe }.Vtƒ^;o$X‚|0œ<svœpšNT{8LK?8'QC“HoiD>iV<8*i™a[Lx™•tx>lŽiœv^ŠgDi<=pm4žu¡$X*8D¡šR.€DY…‹ˆi<sVp˜\MV&xBKKH#‡—{S)us}zlŽ{.J,)}ž{>7;bLv@MŒqKB–‘qaHk LBy]8Ÿ_8žj|‘Q{]b^R;˜Nž‹sa<&q?<F.`LB FV|z˜$ke-‡ynmXOˆr|w›bjmLQˆ]^œ•3y™•`> NVD)q\—‘Ya(}¡ZL-B™ia]ˆwv;‚„‹‚/’$^* 8y–wŒŠ[†€6I=zd6C7zT9q|‘M‚\˜(tl*;J¡XLr`xYk. —m)\b|=2D1Bƒ€ˆBD–j/[”'ƒ4MA7ržB2žMŒ O~5?_NŠ@4t6‘7Oi0fN5M]1&i€*8dT)˜?Ux<ˆf=yLq<woU˜x;z2†i{QpJ]?€Ÿ+‚/ta?1.|\‘7r†anŠ”}qa`†_†F…e¢/](gv;R#7z‹Z@Q“mI|&=J/-rŒ —Lm)\R|LB>e{€Šg„1n/ˆG;–€™Ÿ8]?6œ—“…s;‚„„/¡M†g„AyŒdLzP }rP`F…%>$¢Œjb_œ'‡n(CSI|}Wf/]…s8.8š@iK‚V`HBeVVqA6I(\ˆ[R‰Nœ{>/€ŸbBR„pz†Qkne?‰–/qRœSŠ^?yuˆ]9UxKt)–4T„*H•*9oœ-c„1/|{3‰GVzŽ›S<‚’¡j/mA`}.QAXBQyJ‰œŸK~H`ŸA|Tƒ‘¡5Vi%ž|lj€œZd@9iv’0\„œ'*†,$†žpRac{<)qœjgg]Ol<@E#-|=˜r„aˆ]|Z]mtN“?Ux€Ž&–[I’O‡pQ•N˜@[z•D4&–/^œHva=’˜@9i˜ s;„\ˆv;*Š`?/H)‘XŠ5‰-–$Kpa‚‹mF#(T—Vs3iƒ7P‰_@2GˆTI0{JoX™ul]@*Žmmiˆ?M˜[B\Bt]pd?a.}A.ž7Rip/’(T—a˜•Œ’4J€L#(qTXnŠ5&‰m_2g2ˆGtGQœ@qQA0}|\H˜<*^œs/4Uzb•L<*qOmF*=†L~0‘]<.†ŸB—$AšLV<X8EF@$@s+NSE<6–ŸkN]B-WmHšTUŠ<Q„˜x?]/‰’Ÿ9VKH`6yxž–JsRœlqž}t*&NN…ˆ„oPe–m˜OFQ…7^gDnA—-ITRa‹Er=\NyJ‘˜v;ŠA^Rb;–xL>™]‡Qi<wpXKm’X‚¡ˆœp[z–_;\ŽiMwJXv›‡eNžsp[IW•™{}>•–ŒP&xfM-iœs—({ tU=HIB8yšN\*{<VZ`xŸ¢œœ%Fžœs=‚lI¢sŽQ•xNANZ cA.š=Ž-\“X¡‰e^uŸ‰?\\ZV2:–p584[f*A$_Ÿjq‡C‘‚F’+`@š—yJRR'‚ƒvŠ‡œ›]QOœ“-¢.1‰•\“1zbfQ‰ONWByŸU—r¡-7fJ‚aZT)‡w?(‚RmVWvbc( 3Rk|^œP‹–z†^OZŒ}“”s=Nœ–Zu~@SkwDWr ‚¡n ¢¡^Q‹Pa_“Ÿ2bNrtxov/k\ovr™0l‹“ƒK ™T'{t8i¢&'?˜E=vH/b’PžY_S7‰‘•a‰/Go†&G}^Okœh8˜y`PhXm€v”€Ÿg;Šˆ2ŠXg€dcQMmy2’'b*•yL-ŽOx1Bz—yR7ROaW3Š–¡Ar€\Šy.†œ +zag1E.†]2‰J}—<Wnp_›mLa'ar‘¡(†kgFB•%k@5ŠVBaL6Š@oj9A¡y81‚)R/PŽƒŠœHcZ]$f(œ >Z›¡—wˆ„5Ÿ-*…1A0XrjVš•DrzjVa&FoDZ00a[{„J9‡\JV6‘}ž*'O`ŸN?•ZA(:™*z’ˆc;vše‚01{NQ'\^Šk|W‰M–TZM—›\–@;LOk.g‘{%@s€\8‘[:G3šV`ae+o˜j€ga/Jš…hKqŠ‚HiR,D9ˆo•@”H5‚¢Š‘yO•ˆ(””8r‹1Œo4cs`€Hb€6`M8/o€œ’y4Ÿ(Zpe[žh<‰TSIž{|nP5Vl`<’‘˜fH=˜„al[B‚$0G\JUj8r\$^O—›nvL@”‰˜S‰r;`^m?-(T‚€jQi6/€žO28‹™N“ˆ_.>l–rˆ$y]Ž2lz|%KrRr5V‰To7`mbEx^9ix^e’hq?tj†‘F5|dNSG˜N>{x@žKl—8(}(•AHy+Z5 xAR‡\ck™\€Dšˆ6}8,™j)Q‰L1w”‘s,` DY–…I9œ28SJœŸafPR‡`u{f]8š›ˆ¢Pm'S^+x‰x˜mo¡8nšhE-sr:y‚>G/^Vf†X‚J™MlQ(S2`’`šfx`YM<OaM^UŠ8n$\^_@/8}¡jzGŠPt™–Ž`—6˜”Ÿ'2A ‡P9 'ŒRb“LY€<pH)Ÿu&LBaL72B{wm*rMˆf‰J8•„6mœ“j8C“~Z’B_%>Œl‘Ÿ‹„—˜SX]m‹PE%šszZ–ša—dS; @ƒEoN3U&dzCY—-Ÿ*tv¡f‹Ž7†]%Š1+X^h¡mf‹Œ„—˜-zT€d/gœ<W‹Gz‡b/AAi‚J;v8KwC(¡–•;wN•„*T:@–Aio\m—‹P#$1$#qA$i]^B.; `/aqS;}Nƒ[&]CŒ<‘q*Ai‚22FRN/y-a7…C1„¢ƒ=ŸhRo*Bi?Pp*BiPpi*š;nB„(,\U<^–D*¢t6‰fšSCr‚$Dœ“QF˜4U+y;1Œ’mVƒvœ3œ‰c2Fn‚?&]ˆfz‡|Jyš$Œ1Ÿ=TD]N8ižR'•+…zPy”@aTf–\‰–^9•oaŽ[’RŒkVwJ<AJŠ†?‚8‰/Ÿ_=$T}j™ˆv\‘N/r<œ9i;QC&†pr1‰|W<^?(™HZ>†O/¡\Œ^=wˆvjQ{BUxšV{VF†qa„ozS'%”‘qB–pœŠxPU{&bJŸ{¢3¢@\Tz–6†zx*aoŸ6bh…yƒ/†zšd_YpJl\”yF*i,Vm/a–*Qf;Qc&„2(dzZF.švrz23‘-QXqt?ˆsNŠ•oŠK†zohˆI>–z;oesoš, ›|[‚”ym#zTH|loz)?pWH–F›#—uFƒ`%™G|QWaJ0“¢„ .ž1{z”7rDXN}\J›$jŸœ`‚Blƒ{4‘$œ=r’`„c‡[@“&ž€ŒQo FG)`E&vWYVMš™m‰(#‘E$v›j$@€+o2S˜žDU’i„€xmYh1†X/>u2STk|Šl)—FoœŠf8)wˆ„<CZn{œ`]B|m;”I‡)6c1&8WFqXY‰†mp—2B2XSU5*r‡k€ „{.rx;N|7]R)“qYg2_ˆ|V~šTN•5/f\z;‹US™¡2wžY–k<P/XŽm‰.†/;e^•ŸPŽYŠVjj€ie@–x;š;)ŸˆF?”;wb5p4$2[N^|3bc—••¡8)w 'eJ<*QV)7`E7Ž|m;bŒm‰%Šc<GKumI–ˆF(FH)\qsRs+`VqqYhl›g|pŠjŸt œš˜-)4ŒMB/›x-AžHbhŠs,(?diM•6uš(zS‹g‰]•&vJ@š$B›`wm#™˜ˆ}8bcgŠs”›z=4•”R¡AAnA~2‰r;v8‹:3ew¢ †BZQ^eB’g6–Œ€Ÿ+œqysŸv/[(FI&4‰d‡G9_F7v”?™H<“82’u-`_’M¢m’‘\AAŒA]%'/Y&\ŒN>trxBz…3–MB…%…[Ž:F\V<q,)–ƒg}”8Uiœ“QsœnŸ7PŸ@TBjV<nGrŒ-;/N%,<xœ@TFˆ]fRS{R?vœ€s…Knœ^?Cp‹S™[qCŠ<ŽO@Himjp*74U˜b‘j‹–7p_2W€$*ys|<K5_:<m€ˆ‹y*V†N4j|[‚„XŒ)‰Hyl)5O@Ÿ+Ž–z72’+`xž]˜‘jo#`T^ŽGŒ-u=‹%qcl‹tIz>DTaMrw=”™•L4Š{7nVWn|—uMM)POˆcŒ€TaˆfŒR5^uimˆ›1›WbˆMŠ/Œ-3CdŸyK/`Ew–’j” ’>\˜F‡’jk– z–DŒ7(B‡Œb>ˆœSAŒMi/B{\S¢¡@Œ/b?U ƒxaTr–R‰e‹‚vt’/2w’}$&5š¢“/ˆbb–F€hpwu‰“o8BRmV;jž^Š’-`Q¡.a‡3XM‰›QQP|m…{zA=\U‰fNu˜Oš€\‘||W‹/uhv?NB$wj¢>y–x˜S¢lyTfVI ?–^•‡N?r…)–;‡€`šˆ`z›žNœMr]=˜Ž|WŠITG˜9`(UwjNC+nV;†|}BfT8x\O–†^eR¡LP}=Pœ_N|ba’ŒxTJ|iŠ7&RkV;žJšW1Kˆ‚“¡Xzž|rLž[bJXŒAVks˜j}’.Dv\q^RNwxB„o¡ )lzVL™6fy=}ZzL>œ…abfL•„oœŸ1&mO@.†YQ—Q{RŸ|‘Qsn?pz†?]M–XŒ’NDFDjb1}GN_ˆK.]„5pH)\zVdNpU”R49ž_b…››-—M1r2aHpo—‰-.˜]iE™^[ŠqXsN.a=},˜¡†eymo1r<L,V>PM[A‚^6@w|VQ’Œ8,}–vI1yQmž R*¡9zh1‰qu™Y5Šx ;Hz`4zLX-Z%Œ|‹H—‹…I‰E._|2{‰N`r–X¢*x‹Dlt’‰‘]WR}RA Hr—ox’HPf’‡v*–R.]ŠX—zObE8jœ‰8$”T Pu’HP‚g„[JzG<Q=V5Ž{^Žt„€U™Tj`NpsA x=e(JB8r]‚UXzuo~Œ$Ž_*\N`}zFp^jœ3–uN‚•-s’\o™™„oba]uCŽH+;$Š•{/‰oUy|,‘fVZxo•^=•^UvQzŠ\`*\LqŽZ€L2q`x`yy1UŒ7p0~v?iiœQn|a‰”<‰p=HyM;GsxVœ)[c0Y=‹wŽ†]šAh8’-]Žh{oM_JRvn…@šVf8o{’…›k8¢SŠ?Uu[_=m–4B•ƒrp•}4NX-8žc4sz\5‰z7p¡K*…@€=e`ŠxzJl'_šX>XflM_^†8V„Eg†]MRKR˜vQ/0yEžP…H“W5U>aer\ožšO<L’IX-maH-$‚€0¢Hg_&Vv‹’S‘bX]¡qƒ€]. j=‘Œow‚Tq^Mma5Œ=‚„Gjˆ_^[\Fxžy–€PcxP'D‡2n_F—H KzPV’mGr‡\’WBafoa\y™4k^6T6‚QD•~€~bšZ7%‚pŒ-2‘xH/š1u1Ÿ8—8zŸ¡JA6›—‹‘JŽœ+B`il¢'¡¢m<?¡bJ‘q*–Ai‚2FRN“/yXeb žt™dNSmšŠrf2FR*tzŸ,iWU%szaZ—ša—Ss; @…oNk‰C›m)‘qŸ*Ai‚2FR„v/Œ(e‰SeN>\^B;) `/aqTIo8+„b54CWS:VF^–DŸ*tzf‹Ž7b†]%8s/9yW5bNri{¢ˆ_/aa6&p¢-xHL )+e[x‹<ˆ–ŽBŠZF1f>`F— 9i–Hy`iNN<_FhŠ;dQd‘)aFB…9)?;€Œi…(‹aƒ@T:¡8;†T:ATkg|4Vƒ4&rlU&<Iaƒ]4+\=nT˜6œ3–iœ“8T6|v?7pwV¢'f–L‹WaN‰Œ98j?VN‰T*zy)Ššh_pwŠ;2JXkxZCj—Ÿj=L…a82ŒQ@•…Œ@ŒI‰@‡Œ›b€ˆfNm; S‘D”yˆj SV?VMp~xž‡qRm–^6&XWŽmˆ-K*x3xœylk^œs/dœ`œ*OmV9wq$˜22ŒrMˆ\|&‚h‰#8dž84d’rŠ?RNž™#WBš8šq‚-S[Z…/%Lx“U„NM„;ŒŸJBM;C‘w€œT]I-†(vlz=ŠA—[8& ŒŸ;8$HO‡y4Ve#y[]2Š8p;?JFmRL‹KCŒ?m˜N•1bNšNwˆHF™˜j‹;PZ06tˆSBy?px†91/x1‰‹VŽ>–z<‘W2sŠ8)W…sO„|lJi?@FJFmRLAKyŽ\R|4\[U=r,TF‰UR&r,$TxBbfV;6•\*@i:f‰uLI>‰rMj@•HxK|„S–– |pa1&mRœ8†JBM•ƒ5lK•nM=2‹€‡%cO€[4‰NNq1[˜Q˜m)\bEOpHvY0œ€vŠo}b]>˜$le[Š{f˜T[ˆvOBT[KPŠa?Ux•Z6Ž<RA\ˆ†}8‰y™2)L?d6Z/rž[)mm'/4ŠjqKU”„x˜fNœSŠyšW=2Ž20‘6S1btožb|O`o“Z@šA2GXOš‡™p•šLx1‰^|7\ž]?|¡\^i&=d5y;^1}lbž S‰yz[NœS<—/5izbeyxEA,–a2{<Oys@Dq\YL>lyP“M‰œˆO:Z%I=d5]/@b‹H¢*tpJ›z<€Ÿ/–1wšŸcMT1\šm#va}b…n<{V…[|&6š(}Ukl|u—mY(V†87V‹%{.>Rgsž¡œŒN=ˆv;^~VBi:d}Yp‰¡U¢/œT=†@2s–Š//{–„x2t<Œ?ƒqv€YD9/•ua_f=P•]/•J9pV3Ž›f–OMTƒˆ‹2DbM‰œa=œ˜^/‰‹aQ@“‰€*$œ \o ]mO@¡,˜‡KNˆu„> 'O†`ž‰rO?QsŽ‚ž; A—Ms˜†?{<@`/8Œ‹—s}'¡”SNerhƒQuM&šL:il,ŸQ¢š?ŽS‚ ']4›Š/88v„STB`l;z Ic@Ÿy z>K˜ /oiMŽ{‚J`z=(u8…>uc*(‡…1‰64U Œ8)‡/ta<‰]œ}*NŠ˜NNqozž˜7x\fsDa–i—JBXŸc+z¢&(–[—e@T9/6ž`”P•S‚”)e—@sjKnb4ol)X52\œ|a‰NXr•ŸŒ<FuJ>HˆCAqœ‘‘Iauœ€dt™‚„(vˆK?š(VGR%M]+.˜x.Ÿ-|$œY?UxV‹ŸozŽ*T9u•xViuJz% J&˜NœOƒzJ‡wqg™o¢@]?1f=ˆO•M`rP=u8yd‹oez3GyšYEm‘U‘o‚p) ^œl€Ÿ;Ž~8ži<—8Wx/‡<.–¡‰B-Nœ“/„EŠw’bGF‰l@%„qRkY–xLBy=<•sVžf—•DQw\vA=˜^>‡v^/+ŽRwA1dzH|‘Fš›;z‚]›>pš;7Žš$ac[…/Œ‹Ou0Iƒ;–8(C5‰NF|ŽF‰uApƒ`Ÿ=…2M7lVžo-fž6&ae—Cs’ŠhB3’‰H`s@A.—`“o_ž;Š=–VDi‚L^˜m)`QLG‘FdD^#mK€Ša}–_Qn™d@ŽX&†8“š(tœOQ¡b5‰y4ŠV“`Jy•Aˆ1W9z—‘ZuŒQFwŒ|XGŠmV–NŠB{_%“¡)l(•¡M†:&]Vy)‰œ–Q˜s~ ›m[d€\Fv¢“q¡|$AJ<Q7rU‚€.Pœ‘@M9šy<LqŽVwˆ/)wD¡‘_E’RU]˜PFx<JUL‰sœIaŽp1s•šj*e|j]›8Feq@/yM:†a*ŠxY˜U_IM&)ŸNc6@%˜1+z8ŒR‰Iœ,€KYL…p~˜xœaƒN“…’˜$‡MsR/-–%hR€<BUT‰†’^Oq)zw˜=sŽ(xC¢K#GRvŠ‰”Oqh=Ššˆ Žp\]bM7˜*T}‚‘@Œ49?{zˆ/›u‘q€œAn]¢8WJˆ#›pS™ž˜MA2gV‚Mq.•H˜[šŠ<sbFŸQDF’xa7ŽXNM{J[•b)^•H1UqŽW.`nSAfL8Š’U~Bz'š9HoLN…Xz]ƒ$›™:G>RzrLQ$Hz]FPr*dm”@:‰\..ša’€1W…*@7•[‰NO^p$`¢7uY~2˜G`¡>1€'œUMžZh#f”€|/#‡`N`3‹Œxay:*”ž;`]Q8‰[Y.šoy)yO™+`^gŸ‚BžxTz M>$MUjB(. VlV¡or›~@•D/ˆ–š4TsŽ™ebuJ`L2†šO~lzT&œHoƒ›UŽ™‡f\zU‰].(˜?^š4U„z`¡'zžJ‹E™[bš˜MšEw*\˜*zP–>LmcxŠ_¡‰xL–ZŽIczS‘mš‰AR‡J/]ˆSJ‚ž…šŽL~t;^N€y=}6?TC‰p5{N¡ ADX}JXJ€ŒbJŽIgzT?–MB\)Œ2Nœo”O_r”œXzef~xO)€LPA”vb2PQ _H‚Xm%SqARg&šUN0`-x”‘n–8—uQŠK† šŽ7D€iS^W]LM}Rbš/•„4&BM[@@0›P“l‰N{Rˆn€|Q8`p@z$)7—Je5¢ˆ@J6“SA•„MjHœN`^m_^’;šV;’/6 œš‡1g o {8‹C J€`)72R‹’¢1l^>™ˆœJ;L:¡*8iozP…t Fjtrj›‹ŒtryžFwbŒ?y¢|`M*”tzf‹ŽVVb}8+Ÿ~‚¡™~Z’‚¡žzž‚¢¡™h–’-‹I*tzfŸ‹ŽNSIx+6eKp+ …V#2FR*tzza„oN7%#`c%<Œ„—˜SYM/Œ(e.W FL>e¡;¢sf‹ŽŸNSI8+LcH?^M*tzf¢‹ŽNSI8+:„b•d;’ŒˆNeif‹,<@2FJ‡Ÿ(i%|DD#sŒ<‰B(y4™dœAŒr—-W2b™o¢™šH`DAŒr—m|dB}Ž<¡o¢Y2)™dAŒr‘¢1_jV <Z4™dAŒr—bH[&)?Q2({fu`Ž|2)27]/šNG`N/yfVXŒB‰xšB4•4¡FT[a06™S50šU\dM^'¢„¢–ze?`fŽƒ`,–}*›ž7pžšB&\6„ L>r™}*”¡Ÿw‚QOB,–W‰™G}Ž|2&N`T#™+~qH+1M–{4O„RQ€)‘lb.f`mc¡{€ž›; )q†ze8)?™‰”†,6]|6i`fx† ŒQP„€8i5my_%$ž’‚Rˆclš=D…X‚(tlŽqWVW‰W†j6™9Tsfi‰Peš^u0?U€vO@ˆf}–%h$^W‰M& ‘Qw&JoZŽ,`‚8ƒ7Œš‰Pš^u0?qUxOv¡aJ1H]7Ž‰P™’IŒpŒi2JWPu+`-*Xƒ: QRv¡›>($ŠGwJR„S‚ˆ˜}2Qb/¢kŽWB]¡/_JH]D˜8i2Jw+@¢ŒR¢¡VBfxaŠ Qw&@’S›OuœP€$š;o“H=L›VVƒM=*–b^f8ƒ@O)B€}–=”…†q.{k31˜vbmŠ|6U‘MRU“Ÿx;=Sˆ–Ol|8q<Œ<w=&vVyˆ™›18‰‡ƒ7xœ72œv_ŽuyˆBp“›”:-¡Ž¢ Ÿ’’%Ÿ|j‚j3Kp¢y)k‰ƒH–J;NoDu?_f“Zv[bh“?M=pdz;ŸI—F‘-fVwšV(¡HEv3K1p¢y)‰“<œu\v/p\pv#˜bP&’ƒb‹1H†z<AofH\›8„<UM^<b‘u46=X;rŒ'0$“OXŸQ•Šu;™z/B‚Š„G?MpdxU=†2‰”œ‹G&bQQNBW„mn†’|‚e<-šJ;L+*•œazœŒ&OˆKu_O<VŽbV¡H‡E7yœ'$“„O‰2:UMF‚¡i›ZZlC•6jj\*JO‡m’œ‚z‰aœ&T–4™Ÿ9Š8;7‘X¢Q‹‚f (4•D\qv~H_ZBŽ<¢„2‚R‰T+qD‘yLBOe–^B“iCys^/\žT™€[šŽXsLvp}U=—oi2U‹pšŠ¡€FqI<‘yI sOpD’`TZZ<SAZ-r,‘”zb¡„-^2U|ŠbL˜~†10Oi˜86%b~O‹f(0“/y„œ†'& ’Ua.XSQˆ'†RŸC&qœsX4¢…Bw*”’›XB4„y„\’…svž_¡9n=rw2^/?MK([vŸ^Ÿh-Ÿ1q<Vnœg+–›z’šz7D™œ€Bb€VabeC—`f`=š”m\F/t_‰saBib’\mC¡ ¡xŠ8•DUBFX†‰&†xbAS„C7Wy<`=D•\]]ˆx‰r…gc\ŸŽšŽmM‘O 8Š'&‘ŒS‹7x|–5‰;Œ?7x\ˆ2KaoAxm˜’dJOml`œ3rtLNU’ŠK¡_œt1EgVaB•M4V‚VwajJe_‡$6Šf[¡˜žXˆ0‘ˆfašY¢užbuqˆr—FTz\LN<˜…:ia†šWH_‡™s=Hž•\[ˆHVŒVa2J_‡SyzœbA_+Xq$8j38ViŒ7H™›grl–[™•x8IfŠM^rX†Q/\†—j+=T~|LN•:sDœ?vJ=vXA„…@@U‰–*&‰ &8¢‘l.„7R‰P€x8’Œœ]AFMyiUiB ?œ=xŽ˜Q†01ŒŒqXZ<W2`SŠŒV=–=@Œ™ˆ72†;QFp…–]N0X‰Ž›jšŠX]8PŽŒ+R˜@)]…ŸC/Fc*‘mWVW.zQ=.Cš=Qu9jNŠ\<{nMjBŽ‹Qu’ˆ—Š^—H˜[a`m|4?„š†[b5‚@*RQqyRkž|~2Ž…“XG|;&w]ZNM.†lNe2A– `=n’KmdX…RMmšex`N—y/:@^>D†NeaBiCz8U‰†lf•M‡5jb6$„¡—w*[™H\[ŠK1Q8žxxyeŒ)>†‚04‘U“˜’-`8LF0z=qA%•/—V<3‘B†2“Be’]2fRkk|[I™v1i/WŒ[(ž-UuN;‘;-šJ¡7M*5z6žk|J<JR{jh“’-N`Œ`[I™1i/@>T)V‹@+1’‹x/ƒj–NM•F“`\2p^.—”- w/WavF—I˜a%$a„AAŒ{td*M”@Dz–7Ž„8N&z–Ÿ@‚86&#zvŠ(DBI”qUWBA0’‹Kmd ]f@JDZ@lN;Np=™Dw`=‚kt8(Žlf]a8xL…ƒaXP‡A›<ie'‰}‚l@‡CyZ@lN;N=I™x.Qiš—{V<J(oˆ3‹”M™,:„G€z†7&`Œ‰_“R?v/NOŠauh% N”@ oiŒNDzpT^|kŸ_”U/—M ]?…CZ]2_0vzG/NŠaPe‹]7Ÿ4jFOvzW=…PzS4œY…ˆ;Œxž[LhcR1Dšpg\2^3=1NH=‚tlOm`Rƒwx¡qT_/F`BJl;=˜j}DvMŽ@™x3v“4‹‡yH‡MŠd1iHz’zW†ƒ¡-†‡y9Hˆ3VF„z?(\(*q‰0k'8h¡lsŽŒD6qaMQ–8Š•08TeK%+XLišG|z•.aN—¢štE–Œ^g`Tž*v•V\†pz_.N/Œ:d11Kiš—UŽiV‘ Dz‚1[›b]—oŒ^—E¢zŸŽ{B`eaegj2¡UaxjMK¢Œb:›œm2FR*t:_¢&˜zmNS313šZb ¢Z’‚a ™žšb¢ -Š¢6?*tzf‹¢ŽMFx˜šiH3&o=/'NŠ„—˜S]Pd;y_FknJBij`/aˆa-†}”M0”Ÿ~b ~‡ƒ2Ÿ„Ÿf2FRˆRe;y_•F:¢¡’¢¡9nb†œ„_zf‹žŽNSI8RŽ+O/1`/¢M‹„—˜x;vp-^Z%=œLl}ZMp|xWyPmžvY*P˜Nu7p`Ž€MWZˆvq}ZMp|WyPmžvYPf˜Nu7pŽA€H•i>v[5P˜Ne b¡”J¢¡^b%|†y\yšH`N2†Oœ;–+ŒyQ‹PN‡7Šs“Ši{7ržA=–b/v$z;“kIxrŠ†/w˜uc2F. =pŒ_Xq0•b/Ud:I$q|œ on`‘tŸHR>ˆol‰N”A¢ŒK†Yb5y0“Ui–FŒ@'ˆw–J,z/…_<N–8ˆ_‘7T=BL˜`• _>„:v‘.X•&Gbio†’HRjn|8|.Ž@Ÿ/˜Ho@{j›k;zJOmKz˜x…™8 V—™E˜LNU‰Qiƒ0<H‘˜‘'(0zZem‚$oDQ'\N/^¢šTn*W‘:€T†S>q|8mt‚ˆ‹€mM…ˆcO`l›Lš‡(LO•+ZEM;8rŽ{v2ŽHyU{|*z…€8)ž+Nœ€mužpkOB…€8i/‹&\yb’xˆvˆSižœ]R™=1&…*8~œg›š‡Œ(=C$ŒžPNœ@‰pŸm_)QšV{~ŒuM& šUWZ‰5‰{žJfŽeuyˆQ&…PgUMAzw/šOrK$V2COMRcƒ¢@/ZP—NT“`r>d]7xœ8r$Žli^JR>o„8j3xf‡›`†g\hK‹•D*T‰_žJ].E;’<HFq€/w6U‘MŽ¢mJ_Q[ˆx¡O/P\Gp›š‡(LO€•+E;’<HFqx)š^—]¡:TmJ_Q]ˆx¡O/P\Gp›š‡(LO€•+Ee?]ˆ@x™G/–@9R{jQf€,*–z™„ lOFvyˆwV>4Qg]€ S:’ l;zJOm”>'”€&?jUMžb€6\f|;eMŽB04ŽvA>X”bike[Z6NŽl<‘yMŽ6[Q¢N+[@ˆ]X¡Iw‰\28yIoZ€y†?;4GXž—m—Vy¢r}G/Ž^$JoQZŽŠepq’Sdžbj6J?Qa{VBg(n=b¡”2b2j|Ov&Qg¡AWfŽW:M‘Sƒ<{j‚pdCu’:TV^/]5‰Q‹S]…2]ˆ^k|~+˜6“iq„ŒioHŒ<Dyœ‘Y‰rXyV;N™œœ<* O$`f}@‰Šep8 Vc€0UwŒ8rD,X^žs˜4WyVaRbEpƒ šžCxbA[lpŒeasš=z¡–<_†‰‘Qgl}x)¢g1Š4:tl)sJŽ’l|lv:&GTaˆx„Cˆ)žl|8z;43Žvyˆ‘Y38;?vž_¡”9M2—M‡‰.Ž8V5p^P‡fvz€jŸP~p‚ œ-tVe#— ‘2‰H=8q8TJ•maXeƒ=œygAxqžFI']#P„r-Ži?qŒp1WW‚–5š7•M:6bE‚VBŠF8—PF’s•i/pwTx[Œ1]…dN•™_7||xu|ŽƒC‡M_F—z”b@wŸr0<q$VF7Ž†bSšUF7J‰aY0T8œAOiŠfž@~4‰•š`M—‹\—=_F—œ<[\`1XOmVwm¢‡˜G„O)–€ƒw]bN—•Nta›B~x/–$ž;ž}xhtƒ?žj‹n/vWYN^<‹vQŽA‰–zx)=~xLi“Oy&”’‘ei;u?p–”^;@ŒzxA2bS/‚¢šk†F00ŠN(z†^G=T^e’hok†^; `%/š=qA%/žW…[š(-—4iš—SN;’X?`(<-Œgsbœ™QIi=‚tN;‘?1¢Xim2”m;qA%/W`…_B„žDZK@lŒ)>†J^<LŽz…‹‡/T?@du›ˆ1i/—e‹`gk†^eR>ˆ†J<ŒoqV,7–:f–‘‰D‹9Q‘€Dš'†[~(x†s^e’}+Gœ‹]aM—I)‰Mv^e’Na3nzS?¢x;7Œ/š'`|m<T)V=G~„x›1s~A‡7M)QJšv4U“p@Dv:?–Ÿ7Fxul)€?b4pkb*j—Ÿ8j‡[\zˆ/7ŠXkfM”@[DšwdzeIr>†Jš4U“^˜’Mm””@^H‡A@—[@—‹Ÿj‹P†¡2WaFt9=‘\b†/ŠN$kXaF—]rW.<x}r”8iD?ŸGh~“‚tm•T1{’+`ŒoM”@pU“o2WQ?PCx›1q^‰xu)‘’…SKLb•¢‚0@„8vJX>86†)xfQ-•-1)@oM—-iH2SJ(o^š¢šM)ž-q‰@HD–g</^MkL[—UNeuN;bvbm„<Ev <(˜ŸŒœQš{hƒb›Ÿj=g–XN5zn¢w• €Tj‡Aaš]&”u>Jy^M#x~›MWŠgFŽž—ŸqšŒ\Ylj2¡UA2˜“tFBOyjb›-¢v‡z„:cš–‘qJ[d\>”ša—*8TPiƒZ’X‚a›8WuR„e#‘‰ŸMž‚#‘‰Ÿ8`/6NN# …Vbc-&]>–NŸ&]>”-`cAFq:TO=W'a]<‚($Qp[;beœO`ž#R•‘‰Ÿ:H`/N‰3od‚`4Re#‘¢‰@r`%–ZZ†‘Ÿ‹7†9{T%3s$/——NSC^\š>ŠvRƒp[ ^B]h;y3+Ezm^e’R’c#s‚„-b`š‰vk[>˜&¡1&4v]œ“1sz„boWOc#*–˜BH†8‰BcXVF— -/+0`@1_F—€Œ<rDbf\E`—‚œ>CJ>¢¢Z&AŒm‰#+eŒ@f˜g“nn_<&4Š‰x/-W–<g|8‰€4rZŒ‰€?pN;UzPp=ˆb%$ŽHD|fnMšCVPS™3[n|WŽ™-•L8q1‘qžJdŒU™‚pPxŸBl;5‚XC%‹0_ME™dšU]žC†š‡<š“s–EšaC—™\^lU™¡š’`D@2œ¢8il,™#0@œhd<TSb~kH4pcXV2@œBiŒ1žX2„QŠj€|.K4Ž4`nŠŒ_?¡;ŽGyyfJ;4M$->•–_V[j_u/<fŠz[6xioN…‚-Q*ž{4y•e„@D’(VMX™p;?‚œZfWZ>2RU_:‚VwaTE)8$VŽ›š6$3žu‰UŽ„…8f%vA=˜Z¢nB‚QNažC;tˆ^rJU‹q–B“M‡{Zm*d{ˆ Caˆ^<€ `Z{BU5|2@‚dƒP]…Ÿ>;„f-yV‘CŠˆˆ’mo†6“MJˆL<.TŽnXU2-\PVŸv/ŠL&*xZ‚\J¡#šZŽy;lGœ‘y¡:d‡]9’/gœ_šg‰[-y^.'z<Wb…[A’MJU–š•hLp–ž¡Q&5…‰˜‰q#zSgAm=R?6¢b^8D˜@>ža0ŠG™œOˆ‰š;’A‡W;„0y†&Q%[{no4˜N1QFTBŽW…2Š\XŠiCy\OjXnœ#{B?;“-sRžC`~Pm˜VDIˆvLWBi?™xu]QyI_šn•v]yIoX‰)/šrzc}b$5V]œ—:†Œ/yJo˜Z‚)ˆO<*–Q–s~ˆƒ1¢Y€zAb†c;‡JŠ}l*XR …ƒ–^|“P–xœ“mwLžB™v’+JYcl…?Vu=‰U™y/k<IOr<W‰`’Xg#MA7rV‚ŠjU…S¢6(4•Š/˜oJK|lJX2``QPt}7J‰ax‰f@]i^=:šc'h[6SQœ€)>o’p}„SX‚`5‰š\š, '=¢˜Fo9œ—MŠXBI&fe;‰’‡’V*y”V„†7Œ‰ymC–tu„-ITRtA C;zŸ1V&IfžƒGP|v7nV2ajŽh…aˆs6KŽSq‰f,š$–A?<.–/AB•Œ‰vFV)iW>œ“m})\’q/_Jh[ˆvOl<;oœ>žžš’˜•e)/#¢ p†BofM1P-e[‰64•¡x‡Tf@'”TŠcL>‰_ou¡|Co\J6ˆf;&”y[r™•xK>T“\FwœaOm/-VžySŠŠN&’9‘lkY?_ŽY‰fx[ao„a…ƒam)jœS(žŽg›Z>/]/h*s\@7‘6„SQœ‡ca4Y€/–L2{X;n/mA2„œ˜b›A|rc-Aˆ^sZ†+œ¡-sbnzIŽ<Œ›HoœJaQX|šv ~A›™iC‡“rŸŠƒ–U„‚B>–7‘o6†€‘S‹>‰D‹‰w5e“Kzm’;œ7‘ FM/H1R‹|\›ATC%/R•ƒyt@VD‘(xpHu`¡mxRS™•mŒ•“Ÿ‰[›*v9}–{jPvŸyš$q<o‘|q~›~b ¢:)R?7€+Œa(ž‚+Œ*†œ“+da„‘-NN^\]BTBI*z-ˆl\˜muFiLH`M_–€ƒvž#Jo˜m%ˆ;j\š8;_jsVL†ZB#š“˜$ƒŠ0Boex€,–1NOtHQ†F(Xe|pI^š/€Ÿ[fcp~qju4‰š•p\2^—1–BWMST•sA[(va|‡tœQ/4”(v8™•]Ox1˜ˆ(s9œ—z;Kˆ‘šB“1D&z‘a„Cuib77h–00@HMB–“9zBMX'qC#=–]S1W>Aq\WyPmžA„7’„c‹‚> 7‘x1k H#rBxb” ž:Zb€ZY(}¡#n}<^ž8DqœSpzdVDirK^ˆv€-˜€YR‹fX%‰>&t;Ž]…r/$R‡]7f)AQlJ›Sœ=jNœ—zKˆaV—bŒPšž‹*[4eoC‰  a*]NwyvaŸ9\”[2py–ƒ@ˆxœbU8`ŒE{P„[r*€W.p`=ŽaœE—Nj\?–5’kžjœŸDx‘>u¡rqR?x:zh/7šŽˆCy–˜’`…^C|Nœ~KŽj˜¢V%'žt PKQyŽSd‘ns;nu‚l˜Œ,mz\€\†fJ‘‰.hDA¢VU‘ˆ¡6{Jœ]*Bž›QySCpŠI9=XŒŸx‹fN™TF—Ž*Z›f/8=}=$Ÿœz‹HXU–QG<Fi|QŠ7joZŽŸ(:™ˆ2K™\y-2˜]*‚t6˜($x?8‡/QW¢7&<.Rœ+D'w„ul^e‚‹Vz,•„¢N+‰‚7„S2œFOZŸT0:9œ|^’Q.ePBnT}:Vy\3f`BaLˆ›aEQ+Ž` FG~?c(O_?8};˜•Fg2QˆpzK|o‚ˆAGŸtq~›iž.~”i]e%“v|›i~VT^_‰Iw^n‚l$vm?6eA<P?xyWu$^'Q_?VD¢Š‘23i?žj>‹–mmE^Z…P•]O¢cE]e@Bžx^nsx_R™4\M?Xe>yH‚0cNRjjof˜y1Ÿ o‰‰¢}uJ•lka•‘M–8ˆ‘•‹H’‘.ŸY'3VŒ^(ŸP‚zjvM€#Œ^ž•—ˆœzV•sŽŽv2„š2‘œ‡[?.ŠxQžwlF;šyjK>“&e?žxJU*]e™Š‚JG„ž•Ix+Mq¡CB–œx0{Nm|%Q•aKl@˜džP7{;>T[Fb~*(\r‚Mx-’M7˜J@*}„pNWW:(†|`N—]QŽ—Aacz0G-ŽG6S¡==~Œ8(”`<F`NG7‚xy•‰¢-Wl%7zˆpNrŸ6N„NmO{N_—u¡Oa ~ƒ›n^–%_šWme›š‘zV65’H¢IhR‡dqf–•/Z€0fW;d„J8[—@_zz.ŠLR‘€Mž}ˆ„Qž‘t=Nœ€DY”zyUy—yMKR`5zG}Šg€_BD‘”8ž|„Dir•^f›824B•A<š+\m‡†–@•9U6v9yd“˜€m8O›t`}\Ž1P™[q‡Or‹x?k|F‰d Nœ—‹ts\rj›‹try€—Fo¢l(rDNTƒ6mœ“lHŸ›Gua=ŸuLBaL7ƒ2Bwm*rŽ}-†{lS’‚{a “-‡IzH“Ai‚2FRƒ6/„x8qBekmJr“A0i‚2FR6/{U…91F‰”idœ; `'/a]/<m-bQS(vO\E›z“Ai‚2FcRQ†IU%#œ4'–z—-qyf‹Ž„—xˆZowyC|¢|LR'…›8D¢‘1Bir‹c ;`DZf;›LOC#™+BnR8?*tzžf‹Ž7FO“Z#&]„@`%Ž–S; @h…7xŸB‡]Mk$“x`%–—S; ˜;%@8x#?%/•wˆc^hRa6&xŠ}{j8 Hi|d$#O„]1‚8i‰0[@pwu}?4†-WŠ8P/[…_Š˜X…;ˆRhR;DA_z–ŸM;X\V\^u)–we]ZNr”@}~xmnahcˆ`}jQKˆLR‘$•OXinQ‘hV_vŠr“bu\ŽdlsO\E1*aeŠSQ‡fVŸP›'Ff$š\@‹žv‚¡?V:ŒQ†zr|u—Š‰S’9rLr;ˆO=”†H/ƒ?^Eg„ x\“1s*)@\=/€4d‘?-$ŽQkƒby…“/z@4uT]N›ZBE#&z-d\@Tšgƒ[_E™y“r“?@6_>†7V'G0“™<†^u/•7lxœx>ˆš[1ŽG—™;^kŠ(D†i#R”( kŠi•l@ŠhV„VjyH ŒO7f¡Žz=FB„hosqkˆ-?c-K’œ_&GDi2¢2{‰4†•_ˆuNua7— X‚(Š‹+Q`–7l…“`SBš^?^UWr–4 H?B™`‹aBzE<=$Žh“Š™1sj¢…( `SUƒ-Vuuj‹I‹x‹Œ…¡'q~4•]9|NœMQ†Q’2“7*/NnŸ€23œš jAoq’8‘RSsfp*l—;”iMŠ8c$C*vNu{@ZeAU7\E_w–sW^ˆ†ŠH}pz˜<^hB*G/•?$‡TN?UuY‰„†]M——¡2.1d€Dyb5~4f\VD)\“_•?/|i@MŠ8ƒdN#{<7v„P+Ž¢vimi{‘.Ÿhp;“82&]USZnDF|mj[`M—GŽ2“gŒ-|Œ F?”]…Iy…†aT›ˆ`™”G8V-ss˜9*S6Vu‰53’x@Ÿyc^—u)Š6”šjQK/r›4er@f\N…2%pi/VNgka?<†[nk8$_.’+\S’OKTšGœ_š›z=$zœkJaepš)_lNU;–:&A' q—QWf@r{^•8tIqE”R¢Ÿf’^“{&ŒNu|?Z‘'o@D}rš…\?‚8¢‰fAR8‰a/•„@H?4ZŠj`ž€e_R;‰]Šz#qƒAo)\F$8V-K%\š>ho‰AU@*M’kV<†|? ~8–vYOŸ„€˜•RSW*o\q]l;”™><3–;Š?€]imJf\@i%\n+*[ŠoR+œo†‰…rd^=ˆžQ”s^mamk|€L¢:dO‰MO._N/k–‰*O€)G?ˆ@Œ…GŸ‰\ŠimKŠ,tc0y+‹8D‚–56xX“1;r/ry\@x\S’–.tmz˜}1&Ž–qh]…es/4Ž*dJŒq…€ˆSb“f<ˆ:VqBD1`Er†‰8…‘UWbˆQpq\=P/[€NyvŒ€l;™‚x…/{^/Or;T™;w+ˆ˜%†<=H?Y˜HD@pAM}c›-Moˆq1;l^R–x& /ƒ_rJ^…P¢`–R=|l;‚8A5Nˆf^/[* Ÿ¡z2LN i“1s—jŸŠKœI_PzG[$Ÿq.aE—r•€N …‚Œ SR–YiQsnˆ9‹`}‚'xDzj|=NlJ ;Ž?@vTN^uOˆ”<†^<…1B.–<‰rl”WXNŠDD@Œ1Uu;Œ1†¡hLv’fz–K7Ž|]arTQu¡‰*Pžx‹t<œš(•5nj…RkV<Nr?^~8–kC`z;B\‰-—q0„]aNrorxW1–QN7NžšN|M7††\_zT8ŒQŠŠœV=–Nu16V˜¡aHœJFŸ›—J~™\7• /r“-žWfV—A™=_zly32Me‡ywˆMj˜€+ŒAP\“QWW6r=pž@~r8Š„\T‹@J9‰Tb…‡’v‹xJ¢†MI„xT> =–FrmŒ-XŒR€-XŒ10t<…cNm<oxQŽ”(z13/`,fB5‰X…0qGšj‹i†b‰“˜U@Tjž”B•‰rKm‰*Daˆqy@[€iqO~(”ˆœ€'.;#F‹zL*Zmg[_{:7ž8F|NœQl=l‚~QYŽwn”N?wŽ}x›y`3––xL:|9{ŒpV˜y_n“Œ‡N?FX €4-N-;Ÿ||+iNp—>(AX‰T6‘pmVƒMrrpIŠ]™\Fn’„‚O:r¡~Yœp1;n_=ŽCz(A€R-<M_ŽAŒ<[2–=bN*7™H˜@4}(2kVj>d;T<w^5|‘f7.27o ƒXBgA’{>˜‹P™w >x2`›‰’GGaMpuY`nNpsv[z •MXqh?yt’FŒ2V9™{7(-œ[MLZaNvPXVx;|^œFa}žqNg;ˆJJ8‰vbjxLuq˜3–‰˜)NhI‰I\\i™q …qT’ŒJN“<œ‰œaRi-[¢9x0zE¢-‡:jŠ?wfw]Rp…€zET‘‡:i‰\t^•^UXZ)”‹<u’HRjxV’ŒJN“um‹DXNmv™š-ub]V™96mOg†]œ€D™i{8˜ŠBk ˜I‘i€VTqV`zhhA‡myI†8[NmsR‡‘@ux ˜X~j¢l‰h\eƒœr‰2Uš•lC^V`2p”H)€FS_%JBˆdzZVFH‚z€ŽK™2•”6o4Šzx*I`V*q‰M‘‘k'‘mHm¢‘<;$F™T‰BHzO$|z¡™š”;Pa›E—Ž} 2NqœxAV‡u0‹>œMm''`–b}vzab+‚^`F7†_xm“¢y`‚%uFjb|rjF›‹tryžFJŸx‚‚dœM; `/a™<;PM' ž™˜&^3QdœR; `/aQS[I8x[ F$Rƒ_/aAi>‚z<f||[;Ÿ-pcz\2.FR*tz,i‚“™)cŸxp[cRƒ_/aAYi‚J;ˆO>svS/\‘bj?XuN[2FR…*tzLi?ˆJ›,ck‹hB˜u—J* —mc*Bi¢zRe #a5FqU?va%;,`Ÿ+T’…3T{rZSw‚<”-‚f 8<JN™[Ž#*“/m8ž’‡C2œ¡šUƒ*T:ž/’‡c=d‚dŒ[X2{$i*9K\¡hA:{Tz\osŽaŠg”€8‰pƒayh#šˆ\,yd’- FŸ1‚4‰HyLi58r\^-xF=7C]YFpuu_pxž›x0xYP–_‚8?ž;†yœx2‚„cNm nJ–D’R™C†^uOp–17`N™r•„< …()/C?~-8Ÿ2Šs17P–[Q+˜‡P›Q'fžXI>i[yO+`¢VVuVQN‰~N&q|WŽ]kePVuAq„•]M—3d/ˆ€[š;sOz`,†g|W@'GUDŠqf…aUR‰„C9/‰{B‰KF}*Ž>Ÿ?–VTbT5M˜*$x/l<^œ7\€ija8•N‰/4ŠtW-<$K‚œtš–}8TmJ^?7 R<F9ŠŠe40<,F‰IbOr'=8)NšŠep+4i[_lJkL•5¢z•xx9Uœ•_u?˜CXŠoup-sžŠ„QT¢gk†€i7JBi?q–<Ÿ FTQfD<Ÿrr'=8)‰QV:z<{^…0SVp˜hqmg„aq”œj=qPœ‡vVV-€Vq3;d1S~8ž_ž‰Q‡s~ C8Ž™'ƒ7Žjœ‰sž‚k}~„SUB [U*šQXy™<“<lTž‰/o^zg{A70ŽQ`F†M~rišL7q“„,%Jsd+Uu-*rN‡?™GŸ]”])…‚OBˆ‹M`‘l„xp”a’d‚SA pJ†/Ž2Š]XA`@˜<^œ„M4†gawlˆ‘S…/=ƒ'H$@g@P•PyhXHŸ:qf]ˆvO|T„SJ•…ƒMŠœ“ŠFwžQh>XNžs˜;+z•L4†ga97U„xŸ[.‚I[$ƒ'<$‹MP•™W…cez[KHvYpo=ˆcVDib7Eš/t„„q1–Xn–Œ/6ŒdŸ8x\—x–Ÿ+`8Šga3—MbqE,‘›eƒ@P•™W-…cz[oIvUaoœ8)Ÿi&wbB`UUU]_o4D¢)?ž+fp*^Z…]J{–^“\M—“ š‰xŽ‰‘¡?H#5z0BdƒxTsR@9Š?VM[‰smsyQ*z\F:y/1vJ„_+6TORžC*AL6–rVy<]q4•kƒišƒ€€-sByNa5 2D*œa™pJ†G[N#)weŒ3]3m‹zF*O¢yi1E*<R_^Bb™NfšCi?œ’Š™•U1š L:i_’&`¡@p•xme ¡jk/}‚‡8p8V˜`„6œLššž+•V8'†—-G<,\,fB…G˜˜…—|OˆG1ŠNTR/ax[@::=ˆfšq{tJ‚0DU—¡G-d¡]=žs “‘I(yH1/\7‚œxK>™ŸUM,q?€(w„FKp;“r…O• ]/{\[‚œs#D81`E‘Ua_=p˜;Kit‚„˜_Sb>…›¡OrXmx)v¡‹4a˜&|8UMA–G™{xY>˜qk†{o€)ooF˜zOr\‘8—M>p‚hcY0¡1ŸPya.e7Nqœ€pz•T’|~B„p-K(rWnJ‹8Vf•‹•r“`œFvVOŸ<sRQ;“M’i<l^/Kn‰c@¢™@‰J1¢Z>]@‚u3|7#SŠŒxV0U€K‘k‚h}7~<`N:B„:Tn+—_Š{QW’A‰€1z;Ux|Ovš']7Šœi@‚J‘’0?D)q\SyKž6mE>5#ilme€oJ6Z&™]›ŠcuUY?‰<.Ž-ajV;Jrk?–‹€‚ehO’W*=X^Ox*6&p*Mœ1f_RR‰ŸyOz/Zy’SQLGC’H)>=$i…b(<88„r@T2‰}6\J R@T™‰6eA=rer‡MrVP5R+ Œ`Ž‘Œ’SFppQyayšG =™dœŸxj8w…'mA$iu¡GˆK_IM>lAV{Nq–^u‰_š8z…ƒIwB/,x/n^UxJaeŠ(‹V1Vannb|QRLC5 =c¡O†8Cp5Šx<Zm†$u)P†]Z|N7œEzX…&_…F_5.a^}V@d’k–—WV0RK>TŸeMzc3Œl7mRMm–œ?€,9A /†Œz8•rˆfFeŸ¢›QU6n1\^œjx@[^=ˆœ-]Š7Žm?U™™ž˜&{'–s’W7d^MUuYAyyXVŒ)&–—|jRMˆ=†/aM|a 1xk;”™'aI +Œg}tm‚u_B‚„G˜MB†OŠ`Ž@b_b ž3-/›{ŒF‡c1‡_Ž9*\š-s’O ‰{,UH9OR€Q_W>œš‹W.`nSbv?^d”Ž?7Znm|@’w‹¡ œP™‰‚&W;0bN.KW=8y eš']ˆt€G¡-uY-W^Š1XN7”8‚fXž’k@…H4FœAh\P~kŽzy+]X€Z=<ˆ5ZJN?8VW’9GoŽ}w@˜Y[2 6MU„Ne)’žg^‘H‰NšgO€^zr„¡—^(ApQ•S>‰’dj}rš&gaZ™:l€oSjX‡x=gh2'œ€.Iy.Di¢‡xˆ¡Qu™LŸ^^z]l•OX>–”H˜Ÿhgx7f”PŽ’kž™M¡U\l>v–Qu9B•}˜MRg–ŸN<Fœ™L„MˆB‰sJ/|A8U`‰*yxpk˜m}vZM–Œ‚x~EID{„—M’_nœnIgzp‡\=˜e:A¢M:mŽbŒ&&@‡Œ9‘hx7y›€z=jTx]‡wj¡_Pl˜lOxE^}^gVQy:@%j}pe;V`NŠl•œ4™Œi8rb…LR—1.`—ue+|„x LšZi}ŒlX^8J/9UU;M^*aXLGŠA‡€`J|¡NQš•5hxo1HRH`bxr’[FiKRN™_%R'.‚€ghL?@H™,Hv'_‚<Ji˜m9ˆo•]Lo’xz =‚UxKsvˆšvŠJ3Kx“,/xLv e&šˆM‘qz`5(\’8<”„6]V¢¡6Z¡—‹tcb ‘™¢#3e7ŽAwP###(#lhqgQeCƒ%%
leopardpm
Posts: 1696
Joined: Feb 28, 2009 20:58

Re: create program to create bitmap

Postby leopardpm » Jun 12, 2017 0:01

Mr. Swiss, I have an issue working with pointers - just started another thread at http://www.freebasic.net/forum/viewtopic.php?f=3&t=25741

if you could be so kind to take a look and give your input...
MrSwiss
Posts: 2874
Joined: Jun 02, 2013 9:27
Location: Switzerland

Re: create program to create bitmap

Postby MrSwiss » Jun 13, 2017 10:56

@leopardpm & @BasicCoder2 & @dodicat,

thank you all for testing, feedback, discussions, code, ideas etc. etc.
After going over the code again, as well as further testing and including the CodePage
switching Code of mine, because it is, as suspected by me, depending on CP 437 to work
correctly (under different "original" settings). I'm going to post it in Tips & Tricks section,
as suggested, by BasicCoder2 (the new version is now: V0.4).

I'll add the link here, after posting: ForumBlobPost - Utility ;-)
leopardpm
Posts: 1696
Joined: Feb 28, 2009 20:58

Re: create program to create bitmap

Postby leopardpm » Jun 13, 2017 15:02

MrSwiss wrote:... including the CodePage switching Code of mine, because it is, as suspected by me, depending on CP 437 to work
correctly (under different "original" settings).
I wasn't able to follow this whole CodePage stuff - is this a setting in notepad for how it encodes or interprets ASCII characters? Or does it have to do with the FB editor used, or the forum itself?

I'm going to post it in Tips & Tricks section, as suggested, by BasicCoder2 (the new version is now: V0.4).

I'll add the link here, after posting: ForumBlobPost - Utility ;-)
nicely done, Mr. Swiss! I will watch that thread and begin using the code and latest version! I think that I will add the ability (WIN users only) to skip notepad and read/write to the clipboard directly to save a step and extra hassle. Too bad the option is available for linux users though...
MrSwiss
Posts: 2874
Joined: Jun 02, 2013 9:27
Location: Switzerland

Re: create program to create bitmap

Postby MrSwiss » Jun 13, 2017 15:18

leopardpm wrote:I wasn't able to follow this whole CodePage stuff
It is the Console (language) setting (check: properties).
You'll probably have CP 437, as standard setting ... (US-EN).
In Europe it's most likely to be CP 850/860 (german/french ....)

It's actually a "stone-age" thing (still the same, as in DOS).
Enter: chcp in Cons. and hit [Enter], see what "pop's up".
leopardpm
Posts: 1696
Joined: Feb 28, 2009 20:58

Re: create program to create bitmap

Postby leopardpm » Jun 13, 2017 16:09

ok, did a 'chcp' in the console window and 437 popped up

but how is that affecting our encoding routine, etc? Sorry if this appears to be an obvious question, I just am not grasping the correlation...
MrSwiss
Posts: 2874
Joined: Jun 02, 2013 9:27
Location: Switzerland

Re: create program to create bitmap

Postby MrSwiss » Jun 13, 2017 16:22

leopardpm wrote:but how is that affecting our encoding routine, etc?
Basically: the lower 128 (aka: IBM CP1) char's are always the same.
The upper 128 (128 to 255, aka: IBM CP2) are different, depending on the CP used.
(e.g. accented chars, instead of graphics chars)

This is exactly what I've mentioned to you earlier by: comparing char (faces) instead of ASC(), numbers.
The encoded (un-shifted, would fit the bill) but, not possible, because of "printable" only possible.
Meaning: we are using the lower part, of the upper half, too. (and this is then different)
leopardpm
Posts: 1696
Joined: Feb 28, 2009 20:58

Re: create program to create bitmap

Postby leopardpm » Jun 13, 2017 16:37

let me get this straight: if I open up a file for binary access in FB, and put random bytes (0-255) into it, then open up the file in Notepad (which will try to display those bytes as some sort of ascii char) to copy and paste over to the forum... the byte values might be changed depending upon the CP setting in the console? This doesn't make sense to me... though I 'might' understand if notepad altered the byte values (but it really shouldn't, right? only if notepad SAVES the file with a different character encoding...)
MrSwiss
Posts: 2874
Joined: Jun 02, 2013 9:27
Location: Switzerland

Re: create program to create bitmap

Postby MrSwiss » Jun 13, 2017 16:44

SAVES the file with a different character encoding...)
Yes, but not only Editor may change things, Forum might do that too.
In short: you can always, en-/decode (on your system, without any other influences), independent of the setting.
As long as you don't change it, in between ...
But you can't: encode - spanish/decode - english (or any other language setting), you'll have "unrecognisable char's".
They might be different in different languages.

In order to get "around" this issue: define a "Standard", and stick with it (independent of current setting).
This is exactly what my CP code does: switch to US-ASCII then, before prog. end, but processing finished,
switch back to "original" ... (CP 437, yours -- CP 850, mine). Actually: I don't switch, if "original" is 437.
MrSwiss
Posts: 2874
Joined: Jun 02, 2013 9:27
Location: Switzerland

Re: create program to create bitmap

Postby MrSwiss » Jun 14, 2017 10:51

Maybe a better to understand explanation:

Another encoding scheme, like UTF-8 (forum), might convert some UByte char to a UShort char,
the root of the problem ...
leopardpm
Posts: 1696
Joined: Feb 28, 2009 20:58

Re: create program to create bitmap

Postby leopardpm » Jun 14, 2017 13:26

MrSwiss wrote:Maybe a better to understand explanation:

Another encoding scheme, like UTF-8 (forum), might convert some UByte char to a UShort char,
the root of the problem ...
so it is 'notepad' that introduces this issue - if we could just use the clipboard like WIN users could then this would be a non-issue, and it would also have the benefit of reducing the number of steps/keystrokes to transfer to/from the forum... is there only 2 operating systems to consider (win & linux)? or are there others as well? how hard is it to figure out reading/writing the clipboard from these other OSes? I would probably be absolutely no help in this regard...

Return to “Game Dev”

Who is online

Users browsing this forum: No registered users and 1 guest