docs: function serverResponse(rawData, history, client, debug_mode, chatEvents) {
    /*
      Schema: the `Buffer` given by the `Socket` can carry multiple lines of
              data. The following code is structured into the following manner:
  
                `rawData` is the `String` representation of the `Buffer` data
                recieved from the server. It is split into `Msg` objects and
                stored in `history`
  
                `history` is a limited, growing array of `Msg` objects
  
                `Msg` is excately *one* line recieved from the Twitch server
                and includes parsed details (see msg.js for more information)
  
              The process models the following:
  
                (1) rawData >> Msg : separate the rawData into actual lines
                                     recieved from the server
  
                (2) Msg >> history : store `Msg` objects as an array of
                                          lines recieved from the server
    */
  
    // convert the server response to a `Buffer` object
    rawData = rawData.toString()
  
    // initialize the `RegExp` for the host name anchor
    let twitchExp = new RegExp(/tmi\.twitch\.tv/)
    let jtvExp = new RegExp(/:jtv/)
  
    // Loop: splits 'rawData' into single lines of code and parses them
    while (rawData.search(/\r\n/) !== -1) {
  
      // initialize index to track the current server response in our `history`
      let endIndex = null
      let colonIndex = null
      let channelIndex = null
      let spaceIndex = null
      let hostIndex = null
      let metaIndex = null
  
      // SPLIT //
  
      // Searches for the first instance of the `\r\n` line delimitter and
      // and stores a single line recieved from the server in `Msg.raw`
      endIndex = rawData.search(/\r\n/)
  
      // Keep only 200 server messages
      if (history.length > 200) history.shift()
      history.push(new Msg())
  
      let index = (history.length - 1)
      history[index].raw = rawData.substring(0, endIndex)
  
      // since the first line has been stored, remove that line from the
      // rawData to prepare for evaluating the next line
      rawData = rawData.substring(endIndex + 2)
  
  
      // PARSE //
  
      try {
        // handle `tmi.twich.tv` messages
        if (history[index].raw.search(twitchExp) !== -1) {
  
          // making a copy of `Msg.raw` so we can delete portions as we parse
          let temp = history[index].raw
  
          // initialize parse utility indexes
          hostIndex = temp.search(twitchExp)
          colonIndex = temp.search(/:/)
  
          // check and answer `PING` messages from the server
          if (temp.search(/PING/) !== -1) {
            history[index].host = 'tmi.twitch.tv'
            history[index].tag = 'PING'
            client.write('PONG :tmi.twitch.tv \r\n')
            continue
          } // END "ping" IF
  
          // get `Msg.meta`
          if (colonIndex !== 0) {
            history[index].meta = temp.substring(0, colonIndex)
            temp = temp.substring(colonIndex)
          }
  
          // get `Msg.meta_host`
          if (hostIndex - colonIndex !== 1) {
            history[index].meta_host = temp.substring(colonIndex + 1,
                                                      hostIndex - 1)
  
            // check the formating of `meta_host`
            // sometimes it's `<user>!<user>@<user>`
            if (history[index].meta_host.search(/\!/) !== -1) {
              metaIndex = history[index].meta_host.search(/\!/)
              history[index].meta_host =
                history[index].meta_host.substring(colonIndex, metaIndex)
            }
  
            temp = temp.substring(hostIndex - 1)
            hostIndex = 1
          }
  
          // get `Msg.host`
          history[index].host = temp.match(twitchExp).toString()
          temp = temp.substring(hostIndex + 14)
  
          // get `Msg.message`
          // getting rid of the message will make it easier to evaluate later
          if (temp.search(/:/) !== -1) {
            colonIndex = temp.search(/:/)
            history[index].message = temp.substring(colonIndex + 1)
            temp = temp.substring(0, colonIndex - 1)
          }
  
          // get `Msg.channel`
          if (temp.search(/#/) !== -1) {
            channelIndex = temp.search(/#/)
            history[index].channel = temp.substring(channelIndex + 1)
            temp = temp.substring(0, channelIndex - 1)
          }
  
          // get `Msg.status`
          if (!isNaN(temp.substring(0, 3))) {
            history[index].status = temp.substring(0, 3)
            temp = temp.substring(4)
          }
  
          // get `Msg.user`
          // there will never be an IRC command less than 3 uppercase characters
          if (temp.substring(0, 3) !== temp.substring(0, 3).toUpperCase()) {
            spaceIndex = temp.search(' ')
  
            // a space denotes a command exists
            if (spaceIndex !== -1) {
              history[index].user = temp.substring(0, spaceIndex)
              temp = temp.substring(spaceIndex + 1)
            }
            else {
              history[index].user = temp
              temp = null
            }
          }
  
          // get `Msg.tag`
          // the command is the only thing left at this point
          if (temp !== null) {
            history[index].tag = temp
          }
  
  
        } // END 'tmi.twitch.tv' IF
  
        // handle `jtv` messages
        else if (history[index].raw.search(jtvExp) !== -1) {
          // currently, there is only *one* case that the legacy jtv server is
          // still used --> channel mod/unmod member
  
          let temp = history[index].raw.split(' ')
          history[index].host = temp[0].substring(1)
          history[index].tag = temp[1]
          history[index].channel = temp[2].substring(1)
          history[index].jtv_action = temp[3]
          history[index].user = temp[4]
        }
  
        // currently, no support for other Twitch IRC server hosts
        // ...if they exist
        else {
          throw "ERROR: Cannot identify the host!"
        }
      }
  
      catch(e) {
        history[index].error = e;
        console.log(history[index].error)
        continue
      } // END try/catch
  
  
      // LIVE CONSOLE & CHAT OUTPUT //
  
      /*
        @call: EventEmitter.emit(<event_name>, <arg_1>, ..., <arg_N>)
          @event_name: 'message'
          @<arg_1>: current channel
          @<arg_2>: who the message is from
          @<arg_3>: the message itself
      */
      // if `debug_mode` is TRUE, emit the current `Msg` object
      if (debug_mode) {
        console.log(history[index])
        chatEvents.emit('message', history[index])
      }
  
      // otherwise, only emit the important portions of a PRIVMSG message
      else {
        if (history[index].tag === 'PRIVMSG') {
            console.log('[' + history[index].channel + '] ' +
                        history[index].meta_host + ': ' +
                        history[index].message)
            chatEvents.emit('message',
                            history[index].channel,
                            history[index].meta_host,
                            history[index].message)
        }
      } // END IF
  
    } // END WHILE
  
  }