anchor.diff:        begin
          // je loko uz na nejakem nerootovskem (!) ovladaci -> odmitnout
          for i := 0 to HV.state.regulators.Count-1 do
  +        begin
            if (not HV.state.regulators[i].root) then
             begin
              PanelServer.SendLn(Sender, '-;LOK;'+parsed[2]+';AUTH;not;Loko je otevřené v jiném regulátoru');
              Exit();
             end;
  +        end;
   
          if (parsed.Count < 5) then
           begin
  
positive.code:    Exit();
    end;
  
   if (HV.stolen) then
    begin
     PanelServer.SendLn(Sender, '-;LOK;'+parsed[2]+';RESP;err;Loko '+parsed[2]+' ukradeno, nenastavuji');
     Exit();
    end;
  
   // tady mame jisto, ze je loko autorizovano a ze je mone ho ridit
  
   if (parsed[3] = 'SP') then
    begin
     GetMem(LokResponseData, SizeOf(TLokResponseData));
     TLokResponseData(LokResponseData^).addr := HV.addr;
     TLokResponseData(LokResponseData^).conn := Sender;
  
     HV.SetSpeed(StrToInt(parsed[4]),
                 TTrakce.Callback(Self.PanelLOKResponseOK, LokResponseData),
                 TTrakce.Callback(Self.PanelLOKResponseErr, LokResponseData),
                 Sender);
    end
  
   else if (parsed[3] = 'SPD') then
    begin
     GetMem(LokResponseData, SizeOf(TLokResponseData));
     TLokResponseData(LokResponseData^).addr := HV.addr;
     TLokResponseData(LokResponseData^).conn := Sender;
  
     HV.SetSpeedDir(StrToInt(parsed[4]), parsed[5] = '1',
                    TTrakce.Callback(Self.PanelLOKResponseOK, LokResponseData),
                    TTrakce.Callback(Self.PanelLOKResponseErr, LokResponseData),
                    Sender);
    end
  
   else if (parsed[3] = 'SP-S') then
    begin
     GetMem(LokResponseData, SizeOf(TLokResponseData));
     TLokResponseData(LokResponseData^).addr := HV.addr;
     TLokResponseData(LokResponseData^).conn := Sender;
  
     HV.SetSpeedStepDir(StrToInt(parsed[4]), HV.direction,
                        TTrakce.Callback(Self.PanelLOKResponseOK, LokResponseData),
                        TTrakce.Callback(Self.PanelLOKResponseErr, LokResponseData),
                        Sender);
    end
  
   else if (parsed[3] = 'SPD-S') then
    begin
     GetMem(LokResponseData, SizeOf(TLokResponseData));
     TLokResponseData(LokResponseData^).addr := HV.addr;
     TLokResponseData(LokResponseData^).conn := Sender;
  
     HV.SetSpeedStepDir(StrToInt(parsed[4]), parsed[5] = '1',
                        TTrakce.Callback(Self.PanelLOKResponseOK, LokResponseData),
                        TTrakce.Callback(Self.PanelLOKResponseErr, LokResponseData),
                        Sender);
    end
  
   else if (parsed[3] = 'D') then
    begin
     GetMem(LokResponseData, SizeOf(TLokResponseData));
     TLokResponseData(LokResponseData^).addr := HV.addr;
     TLokResponseData(LokResponseData^).conn := Sender;
  
     HV.SetDirection(parsed[4] = '1',
                     TTrakce.Callback(Self.PanelLOKResponseOK, LokResponseData),
                     TTrakce.Callback(Self.PanelLOKResponseErr, LokResponseData),
                     Sender);
    end
  
   else if (parsed[3] = 'F') then
    begin
     data := TStringList.Create();
     try
  
negative.code:    HV.EmergencyStop(TTrakce.Callback(Self.PanelLOKResponseOK, LokResponseData),
                      TTrakce.Callback(Self.PanelLOKResponseErr, LokResponseData),
                      Sender);
     Exit();
    end;
  
   if (parsed[3] = 'TOTAL') then
    begin
     HV.ruc := (parsed[4] = '1');
     Exit();
    end;
  
   // ---- Total control is required for commands below ----
  
   if (not HV.ruc) then
    begin
     PanelServer.SendLn(Sender, '-;LOK;'+parsed[2]+';RESP;err;Loko '+parsed[2]+' není v ručním řízení');
     Exit();
    end;
  
   if (parsed[3] = 'SP') then
    begin
     GetMem(LokResponseData, SizeOf(TLokResponseData));
     TLokResponseData(LokResponseData^).addr := HV.addr;
     TLokResponseData(LokResponseData^).conn := Sender;
  
     HV.SetSpeed(StrToInt(parsed[4]),
                 TTrakce.Callback(Self.PanelLOKResponseOK, LokResponseData),
                 TTrakce.Callback(Self.PanelLOKResponseErr, LokResponseData),
                 Sender);
     Exit();
    end;
  
   if (parsed[3] = 'SPD') then
    begin
     GetMem(LokResponseData, SizeOf(TLokResponseData));
     TLokResponseData(LokResponseData^).addr := HV.addr;
     TLokResponseData(LokResponseData^).conn := Sender;
  
     HV.SetSpeedDir(StrToInt(parsed[4]), parsed[5] = '1',
                    TTrakce.Callback(Self.PanelLOKResponseOK, LokResponseData),
                    TTrakce.Callback(Self.PanelLOKResponseErr, LokResponseData),
                    Sender);
     Exit();
    end;
  
   if (parsed[3] = 'SP-S') then
    begin
     GetMem(LokResponseData, SizeOf(TLokResponseData));
     TLokResponseData(LokResponseData^).addr := HV.addr;
     TLokResponseData(LokResponseData^).conn := Sender;
  
     HV.SetSpeedStepDir(StrToInt(parsed[4]), HV.direction,
                        TTrakce.Callback(Self.PanelLOKResponseOK, LokResponseData),
                        TTrakce.Callback(Self.PanelLOKResponseErr, LokResponseData),
                        Sender);
     Exit();
    end;
  
   if (parsed[3] = 'SPD-S') then
    begin
     GetMem(LokResponseData, SizeOf(TLokResponseData));
     TLokResponseData(LokResponseData^).addr := HV.addr;
     TLokResponseData(LokResponseData^).conn := Sender;
  
     HV.SetSpeedStepDir(StrToInt(parsed[4]), parsed[5] = '1',
                        TTrakce.Callback(Self.PanelLOKResponseOK, LokResponseData),
                        TTrakce.Callback(Self.PanelLOKResponseErr, LokResponseData),
                        Sender);
     Exit();
    end;
  
   if (parsed[3] = 'D') then
    begin
     GetMem(LokResponseData, SizeOf(TLokResponseData));
     TLokResponseData(LokResponseData^).addr := HV.addr;
     TLokResponseData(LokResponseData^).conn := Sender;
  
     HV.SetDirection(parsed[4] = '1',
                     TTrakce.Callback(Self.PanelLOKResponseOK, LokResponseData),
                     TTrakce.Callback(Self.PanelLOKResponseErr, LokResponseData),
                     Sender);
     Exit();
    end;
  end;
  
  ////////////////////////////////////////////////////////////////////////////////
  