anchor.diff:  end;
   
   
  +//Lines are timestamped, each line invokes file open/close for writing,
  +//meaning that no lines will be lost if Remake crashes
   procedure TKMLog.AddLineTime(const aText: UnicodeString; aLogType: TKMLogMessageType);
   begin
     if not (aLogType in MessageTypes) then // write into log only for allowed types
  
positive.code: end;
  
  
  //Lines are timestamped, each line invokes file open/close for writing,
  //meaning that no lines will be lost if Remake crashes
  procedure TKMLog.AddLineTime(const aText: UnicodeString);
  begin
    AddLineTime(aText, lmt_Default);
  end;
  
  
  {Same line but without timestamp}
  procedure TKMLog.AddLineNoTime(const aText: UnicodeString);
  begin
    if not FileExists(fLogPath) then
  
negative.code: 
  type
  
    // Log message type
    TKMLogMessageType = (
      lmt_Default,            //default type
      lmt_Delivery,           //delivery messages
      lmt_NetConnection,      //messages about net connection/disconnection/reconnection
      lmt_NetPacketOther,     //log messages about net packets (all packets, except GIP commands/ping/fps)
      lmt_NetPacketCommand,   //log messages about GIP commands net packets
      lmt_NetPacketPingFps);  //log messages about ping/fps net packets
  
    TKMLogMessageTypeSet = set of TKMLogMessageType;
    TNotifyEventLog = procedure(aLogMessage: UnicodeString) of object;
  
  