home *** CD-ROM | disk | FTP | other *** search
/ ftp.wwiv.com / ftp.wwiv.com.zip / ftp.wwiv.com / pub / MISC / DCTUC001.ZIP / UCHAT.TXT < prev   
Text File  |  1996-12-01  |  22KB  |  546 lines

  1.  
  2.                    DCTUserChat v0.01 Public Gamma Release
  3.                       A multinode user-user chat door.
  4.  
  5.                                    -=-=-
  6.  
  7.                                     For
  8.                          RemoteAccess 2.0x and 2.5x,
  9.                                   RBBS-PC,
  10.                                      &
  11.                           Generic DOOR.SYS systems
  12.  
  13.                                    -=-=-
  14.  
  15.                      Copyright (C) 1996 Dan Traczynski.
  16.                             All Rights Reserved.
  17.  
  18.                                    -=-=-
  19.  
  20.             The latest version of this and other DCT Productions
  21.                   may be downloaded from the Internet at:
  22.  
  23.                   http://www.worldnet.net/island/dct.htm
  24.  
  25.  
  26. ░▒▒▓▌Table of Contents▐▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░
  27.  
  28.  
  29.         Introduction ................................... 1
  30.          └> Preamble and stuff
  31.         Installation ................................... 2
  32.          └> RemoteAccess
  33.          └> RBBS-PC
  34.         Parameters ..................................... 3
  35.          └> UserChat's command-line parameters
  36.         GENUTIL.EXE .................................... 4
  37.          └> Configuration
  38.          └> Language Editor
  39.          └> Limits Editor
  40.          └> User Editor
  41.          └> Local Test Mode
  42.          └> Exit to DOS
  43.          └> GenUtil's Command-Line Parameters
  44.         The Program .................................... 5
  45.          └> A general description of UChat's interface
  46.              └> Chat Menu
  47.              └> Menu Bar
  48.              └> SysOp Menu
  49.         Credits ........................................ 6
  50.          └> Thanks for your help!
  51.         Disclaimer ..................................... 7
  52.          └> It has to go somewhere
  53.         Author's Notes ................................. 8
  54.          └> Blah blah blah yak yak yak
  55.         Enhancement List ............................... 9
  56.          └> Upcoming features
  57.         Release History ............................... 10
  58.          └> Notes from the past
  59.  
  60.  
  61. ░▒▒▓▌(1)  Introduction▐▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░
  62.  
  63.  
  64. DCTUserChat (hereby referred to simply as UserChat) is a multinode chatting
  65. door which offers users a friendly and easy-to-use interface.  The current
  66. version supports up to 20 nodes, but realistically, this limit will probably
  67. never be reached.  Users are given a choice of what chat mode they would like
  68. to use; either conference or 2-way.  Conference mode is semi-split screen,
  69. allowing users to chat simultaneously and be able to see the conversation at
  70. a glance.  2-Way chat is a real-time split-screen chat between two nodes.
  71. UserChat also allows users to transfer time across nodes, but keeps track of
  72. upcoming events and will deny transfers that would violate these events.
  73.  
  74.  
  75. ░▒▒▓▌(2)  Installation▐▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░
  76.  
  77.  
  78. To install UserChat, you must first create a directory for it to reside in.
  79. I would also recommend setting some RAMDrive space aside for the nodes to
  80. communicate with each other, however a hard drive with disk caching might
  81. suffice for two node systems.  The amount of RAMDrive space required is
  82. determined based on how many nodes your system has.  The general formula is:
  83.  
  84.                      (# Nodes  +  2)  *  1024 bytes
  85.  
  86. Once completed, run GENUTIL.EXE and it will guide you through the installation
  87. process.
  88.  
  89.  
  90. REMOTEACCESS INSTALLATION:
  91. """"""""""""""""""""""""""
  92.  
  93. To run UserChat, you must execute it with a command-line similar to:
  94.  
  95.   C:\RA\DOORS\UC\UCHAT.EXE /PC:\RA\NODE*N /N*N *M *UUser_Chat
  96.  
  97. Of course, the directories may vary.  If any errors are encountered while
  98. UserChat is executed, they will be logged in the file UCHAT.LOG, which is
  99. stored in the UserChat system directory.  UserChat looks for EXITINFO.BBS and
  100. DORINFO1.DEF upon startup, which are specified with the "/P" parameter.
  101.  
  102.  
  103. RBBS INSTALLATION:
  104. """"""""""""""""""
  105.  
  106. UserChat will automatically install itself into your copy of RBBS upon the
  107. execution of GenUtil, so simply run GenUtil.Exe and select your BBS type as
  108. RBBS-PC.  GenUtil will create a batch file to run UserChat as well as add an
  109. entry to your DOORS.DEF file.
  110.  
  111.  
  112. ░▒▒▓▌(3)  Parameters▐▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░
  113.  
  114.  
  115. The following command-line parameters may be used when executing UserChat.
  116.  
  117.  /Bxxx    ·∙· Specify locked baud rate (i.e. /B38400).
  118.  /FORCEx  ·∙· Forces the user into chat room x.
  119.  /L       ·∙· Local mode (logs in with the SysOp's name).
  120.  /Nx      ·∙· Specify node number (if this is not specified, UserChat will
  121.               always try to load up as node 1).
  122.  /NOMAIN  ·∙· Using this option will have UserChat return to the BBS after
  123.               the user finishes chatting rather than return to the chat room
  124.               selection menu.
  125.  /Pxxx    ·∙· Specify path to drop file(s) (i.e. /PC:\BBS).
  126.  /Sxxx    ·∙· Specify user's security level.  This parameter is only valid if
  127.               used in conjunction with the /L parm.  If this parameter is not
  128.               specified and /L is, you will be given the access defined in
  129.               GenUtil as SysOp security.
  130.  /W       ·∙· A DOS only network is present.
  131.  
  132.  
  133. ░▒▒▓▌(4)  GENUTIL.EXE▐▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░
  134.  
  135.  
  136.    GENUTIL.EXE contains all of the utilities you will require to operate the
  137. chat door.  It offers a menu-driven interface for easy configuration, as well
  138. as command-line parameters for use in nightly maintenance batch files.  If
  139. GenUtil detects that a mouse is present, it will allow the mouse to be used
  140. for data entry in addition to the keyboard.  Simply position the mouse cursor
  141. on the item you wish to edit and click on the left button.  If you wish to
  142. exit the current menu of options, pressing the right mouse button will
  143. achieve the same result as pressing [ESC].  The following is a summary of
  144. GenUtil's menued interface.
  145.  
  146.  
  147.  The Configuration Menu
  148. ══════════════════════════════════════════════════════════════════════════════
  149.  
  150.    The configuration menu allows you to set UserChat up to your system.  It
  151. will most likely only need to be used once during the installation.
  152.  
  153. BBS Type
  154. ────────
  155.  
  156.    UserChat has been written to operate on as many BBS platforms as possible.
  157. Extra support exists for RemoteAccess and RBBS, but UserChat will also
  158. function under boards that are capable of writing a DORINFOx.DEF or DOOR.SYS
  159. drop file.  This option will allow you to select your BBS type.
  160.  
  161. SysOp Name
  162. ──────────
  163.  
  164.    The SysOp name will be displayed to users within the door.  If GenUtil
  165. detects a RemoteAccess BBS during the installation, this field will be
  166. automatically configured for you.
  167.  
  168. BBS Name
  169. ────────
  170.  
  171.    BBS name used by UserChat.  If GenUtil detects a RemoteAccess BBS during
  172. the installation, this field will be automatically configured for you.
  173.  
  174. System Operator Security
  175. ────────────────────────
  176.  
  177.    There are a few SysOp-only features within the door which are best left
  178. restricted to only the SysOp's use.  This field will allow you to configure
  179. the SysOp security.
  180.  
  181. No Chat
  182. ───────
  183.  
  184.    If you operate a particularily busy BBS and would like to restrict users
  185. from chatting during its peak hours, you can configure the no-chat start and
  186. end times here.
  187.  
  188. Chat Buffer
  189. ───────────
  190.  
  191.    The chat buffer applies only in the split-screen chat mode.  To reduce disk
  192. access, UserChat buffers the keystrokes into "packets" and sends them in these
  193. packets.  You can configure the size of the buffer through this option.  If
  194. you use a RAMDrive, I would suggest setting the buffer low (ie. 2), but if you
  195. do not use a RAMDrive, try setting it higher or your disk will be continuously
  196. accessed during the chat sessions.  Note that a large buffer will cause the
  197. type to seem choppy.
  198.  
  199. Time Out
  200. ────────
  201.  
  202.    Consider the following: A user enters UserChat with 2 hours of time left
  203. and then shells to DOS, forgetting he is online (it happens!).  Without a time
  204. out, UserChat would just sit there for 2 hours until the user's time runs out
  205. or he suddenly remembers and exits the program in some way.  The time out will
  206. automatically cause UserChat to terminate after the number of seconds defined
  207. in this field.
  208.  
  209. Semaphore Directory
  210. ───────────────────
  211.  
  212.    This field pertains only to RemoteAccess systems.  On multinode RA systems,
  213. RA creates and uses shared files in a semaphore directory.  By setting this
  214. field correctly, UserChat will be able to take advantage of this and
  215. send/receive messages across nodes as well as force users into chat, providing
  216. that the Text Shells option is enabled in RAConfig.
  217.  
  218. Temporary Directory
  219. ───────────────────
  220.  
  221.    This is UserChat's semaphore drive/directory, and need not be the same as
  222. RA's Semaphore Directory.  I highly recommend setting this to a RAMDrive as
  223. RAMDrives are are a great deal faster than hard drives.
  224.  
  225. Locked Baud
  226. ───────────
  227.  
  228.    This will tell UserChat what to lock the baud rate at when running
  229. remotely, thus eliminating the need to specify it on the command-line.  The
  230. locked baud may still be overridden by the /Bxxx parameter.
  231.  
  232. Language
  233. ────────
  234.  
  235.    One of UserChat's features is language support.  UserChat will allow each
  236. user to select his or her own language, but the language specified here will
  237. be the one used in the log file and will also be the default language for
  238. users new to the door.
  239.  
  240. Chat Rooms
  241. ──────────
  242.  
  243.    By default, UserChat will start in the main menu and ask the user which
  244. chat room he would like to enter.  You can specify a few default rooms to be
  245. presented in the main menu through this option.  Users can still create their
  246. own chat rooms if they wish, but most people would prefer not to go through
  247. the process of creating a new chat room.  Chat rooms created here are
  248. permanent and will not be removed when there are no users in the room, as
  249. opposed to rooms created by users in the door which will be deleted once the
  250. last user exits the room.  Do not edit the chat rooms when UserChat is in use
  251. by a user.
  252.  
  253.  
  254.  Language Editor
  255. ══════════════════════════════════════════════════════════════════════════════
  256.  
  257.    The language editor will allow you to customise almost all of the strings
  258. displayed by UserChat.  Colour codes may be used in most of the strings, as
  259. well as imbedded codes.  The following imbedded codes may be used in the
  260. language prompts.
  261.  
  262.      %U  User's name.
  263.      %S  Board name.
  264.      %1  A temporary string that varies with each language prompt.
  265.      %2  A temporary string that varies with each language prompt.
  266.      %3  A temporary string that varies with each language prompt.
  267.  
  268.   The following colour codes may be used:
  269.  
  270.      `1  Blue     `5  Violet    `9  Light Blue     `D  Pink
  271.      `2  Green    `6  Brown     `A  Light Green    `E  Yellow
  272.      `3  Cyan     `7  White     `B  Light Cyan     `F  Bright White
  273.      `4  Red      `8  Grey      `C  Light Red
  274.  
  275.    In addition, you may use @-codes to change the colour to one that has been
  276. chosen by the user:
  277.  
  278.      @1  Uppercase letters
  279.      @2  Lowercase letters
  280.      @3  Numbers
  281.      @4  Punctuation
  282.      @5  High-ASCII
  283.      @6  Border Lines
  284.  
  285.    One thing to note is that the sum of the lengths of language prompts 47-52
  286. cannot exceed 47 characters.  If they do, GenUtil will trim off the excess
  287. characters.
  288.  
  289.  
  290.  Limits Editor
  291. ══════════════════════════════════════════════════════════════════════════════
  292.  
  293.    The limits editor allows you to define restrictions on users.  Simply
  294. create an entry for the access level you would like to control, and define a
  295. maximum time limit and maximum time transfer allowed per day.  If a user
  296. enters the door and a security level has not been defined for him, the next
  297. lowest level will be used (ie. if levels 10, 20, and 30 have been defined, and
  298. the user has 25, he will be given the limits for security level 20).  If the
  299. user's security is lower than the lowest level defined, he will be given the
  300. restrictions defined in the default field (ie. if the user had a security of 5
  301. in the previous example).  The maximum time transfer field only applies if
  302. UserChat is running on a RemoteAccess 2.xx board.
  303.  
  304.  
  305.  User Editor
  306. ══════════════════════════════════════════════════════════════════════════════
  307.  
  308.    The user editor allows you to maintain UserChat's userbase.  A list of
  309. users in UserChat's userbase will be displayed to you, and you will have the
  310. option of editing/deleting these user accounts.  To locate a user when in the
  311. selection menu, simply press [Alt-F] and then enter a partial or full name of
  312. the user you wish to locate.  If a match is found, the lightbar will be moved
  313. to that record.  To edit a user's account, simply press [Enter] on the entry
  314. you wish to edit, and a new window will appear with the user's stats.  The
  315. following attributes of each user account may be changed.
  316.  
  317. User's Name
  318. ───────────
  319.  
  320.    This is one of the most important fields in the user's record, and is the
  321. username that UserChat reads from the drop file.
  322.  
  323. User's Alias
  324. ────────────
  325.  
  326.    If the user wishes to, he may specify an alias to use while in the door.
  327. This way, people will not see his real name during conference chat.  Although
  328. the field allows a maximum of 30 characters, the name itself must be no more
  329. than 10 characters in length.  The rest of the alotted space is reserved for
  330. optional colour codes.  (If the name is too long, UserChat will just truncate
  331. it the next time the user enters the door.)
  332.  
  333. Time Transferred
  334. ────────────────
  335.  
  336.    This field specifies how many minutes the user transferred across nodes the
  337. last day he entered the door.
  338.  
  339. Time In Chat
  340. ────────────
  341.  
  342.    This field specifies how many minutes the user was online the last day he
  343. entered the door.
  344.    
  345. Selected Language
  346. ─────────────────
  347.  
  348.    When the user selects a language, the file name of his selected language is
  349. saved in this field.  If the language file specified here does not exist,
  350. UserChat will simply load up the default language file defined in the
  351. configuration menu.
  352.  
  353. Last On
  354. ───────
  355.  
  356.    The last on field is a record of the last day the user entered the door.
  357.  
  358. Next On
  359. ───────
  360.  
  361.    This field is not yet supported by UserChat.
  362.  
  363. User's Macros
  364. ─────────────
  365.  
  366.    In UserChat, the user may define up to five personal macros for himself.
  367. They can be viewed and changed from this sub-menu.
  368.  
  369. User's Colour Configuration
  370. ───────────────────────────
  371.  
  372.    Allows you to view and/or modify the user's currently selected colour
  373. scheme.
  374.  
  375.  
  376.  Local Test Mode
  377. ══════════════════════════════════════════════════════════════════════════════
  378.  
  379.    Once you have configured UserChat, you may use this option to see what the
  380. door looks like without having to log onto the BBS.
  381.  
  382.  
  383.  Exit to DOS
  384. ══════════════════════════════════════════════════════════════════════════════
  385.  
  386.    Ends GenUtil's execution and returns to DOS.  Pressing [ESC] will achieve
  387. the same result from the main menu, as well as pressing the right mouse button
  388. if a mouse has been detected.
  389.  
  390.  
  391.  GenUtil's Command-Line Parameters
  392. ══════════════════════════════════════════════════════════════════════════════
  393.  
  394.  GENUTIL [?] [PURGE <Days>] [RESET] [LIST] [REMOVE <Node>]
  395.  
  396.   ?       Display help screen.
  397.   PURGE   Purge users who have not entered in <Days> days.
  398.   RESET   Clean up the data files in the unlikely event that UserChat crashes.
  399.           Do not use when users are in the door.
  400.   LIST    List users currently in UserChat.
  401.   REMOVE  Remove user on node <Node> from UserChat.
  402.  
  403. Commands may be stacked, ie. running GENUTIL RESET PURGE 40 would restore the
  404. data files in the event of a crash and then remove all users from the userbase
  405. who have not entered within 40 days.
  406.  
  407.  
  408. ░▒▒▓▌(5)  The Program▐▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░
  409.  
  410.  
  411.  The Chat Window
  412. ══════════════════════════════════════════════════════════════════════════════
  413.  
  414. The main chat window is where the user types in his text to be sent across
  415. nodes to the other users in chat.  The following commands may be typed from
  416. this window to activate certain options when in conference mode.
  417.  
  418.  CLS    - Typing this will clear the chat window.
  419.  
  420.  CLR    - Clears both the miscellaneous and chat windows.
  421.  
  422.  <Home> - Clears the current line.
  423.  
  424.  <ESC>  - Pressing <ESC> or Ctrl-K will bring up the menu bar.
  425.  
  426.  \      - If the backslash is pressed at the beginning of a line and the
  427.           user has SysOp access, he will enter the SysOp menu.
  428.  
  429.  
  430.  The Menu Bar
  431. ══════════════════════════════════════════════════════════════════════════════
  432.  
  433.  Who's Online  - This will allow the user to view a list of all the users
  434.                  currently online.  UserChat honours the hidden attribute
  435.                  and will not list hidden users.  [RA Only]
  436.  
  437.  Page User     - This option allows the user to send an online message to
  438.                  another user on another line.  [RA Only]
  439.  
  440.  Transfer Time - While in chat, one user may run out of time.  Using this
  441.                  feature, another user could transfer some of his own time
  442.                  across the nodes.  Transfers that would violate an upcoming
  443.                  event on the receiver's node are denied.  [RA Only]
  444.  
  445.  Setup         - Allows the user to configure his preferences, such as
  446.                  his alias, colours, and macros.
  447.  
  448.  Help          - Displays a short help screen which lists the available
  449.                  commands.
  450.  
  451.  Quit          - Quits the current chat room.
  452.  
  453.  
  454.  The SysOp Menu
  455. ══════════════════════════════════════════════════════════════════════════════
  456.  
  457.  Kick User Out     - Should you wish to force a user on another node to
  458.                      exit UserChat, you can select this option to do so.
  459.  
  460.  Edit User in Chat - This feature will allow you to edit the stats of
  461.                      another user online.  To protect the security of the
  462.                      system, you may not edit users who have a security
  463.                      level higher than your own, you may not set a user's
  464.                      security level higher than your own, and you may not
  465.                      edit yourself.  Also, please note that this editor does
  466.                      not allow all of the user's stats to be edited.  Only
  467.                      the more important fields may be modified and others
  468.                      would need to be changed by a different method (RAMGR).
  469.  
  470.  Forced Chat       - This will force a user on another node into chat mode
  471.                      with you.  RACONFIG.Options.System.Text Shells must
  472.                      be enabled for this function to work.  [RA Only]
  473.  
  474.  
  475. ░▒▒▓▌(6)  Credits▐▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░
  476.  
  477.  
  478. «∞» John Kuhns for inspiring me to write this program in the first place. =)
  479.  
  480. «∞» Francois Massonneau for the RBBS support and maintaining the DCT web page.
  481.  
  482. «∞» My gratitude goes out to Terry Mah for spending countless hours with me
  483.     testing this on his BBS.  I couldn't have completed many of the features
  484.     without his assistance.
  485.  
  486.  
  487. ░▒▒▓▌(7)  Disclaimer▐▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░
  488.  
  489.  
  490.    DCTUserChat is copyright (C) 1996 by Dan Traczynski.  All Rights Reserved.
  491. I encourage you to distribute it, but DO NOT by any means alter any of the
  492. files within the original archive.  The archive should be named DCTUC001.ZIP,
  493. preferably kept in its ZIP format.  No guarantee is offered that future
  494. versions of UserChat will be freeware.
  495.  
  496.    The author, Daniel Traczynski, will take no responsibility to anything
  497. that this program may or may not do to your system.  Although the program has
  498. been tested thoroughly by the support team, no guarantee can be given that it
  499. will do what it was made to do.  Nevertheless, if anything should happen, the
  500. user is totally responsible and the author will be under no obligations what-
  501. soever.  By using this program you agree to this disclaimer.
  502.  
  503.  
  504. ░▒▒▓▌(8)  Author's Notes▐▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░
  505.  
  506.  
  507.    This version of UserChat is a public gamma release, so there is a good
  508. chance that a bug or two will be encountered.  If you come across such a
  509. glitch, please send me e-mail at dan.traczynski@als.dudd.uniserve.com or
  510. netmail at 1:153/757.  I will fix this as soon as possible.
  511.  
  512. The latest version of UserChat can be found on the Internet at:
  513.                                        http://www.worldnet.net/island/dct.htm
  514.  
  515. Many thanks go to Francois Massonneau for putting this on his web page.
  516.  
  517.  
  518. ░▒▒▓▌(9)  Enhancement List▐▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░
  519.  
  520.  
  521. The following is a list of enhancements planned for future versions.
  522.  
  523.  - Bad user lock-out.
  524.  - User censor.
  525.  - Optional chat logging.
  526.  - New user help tutorial (kind of like a CBV tutorial where it would
  527.    demonstrate all of the features to the user).
  528.  - Actions.
  529.  - More configuration.
  530.  
  531.  
  532. ░▒▒▓▌(10)  Release History▐▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░
  533.  
  534.  
  535.   + Added a new feature/Something was improved.
  536.   - Removed something.
  537.   * General comment.
  538.   > Bug fix.
  539.  
  540.  
  541.  Version 0.01Γ -=- December 1, 1996.
  542.    * First public release.
  543.  
  544.  
  545. ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░
  546.