anchor.diff:  end;
   
   
  +// Check game execution dir generic permissions
  +function TKMMain.DoHaveGenericPermission: Boolean;
  +const
  +  GRANTED: array[Boolean] of string = ('blocked', 'granted');
  +var
  +  readAcc, writeAcc, execAcc: Boolean;
  +begin
  +  readAcc   := (CheckFileAccess(ExeDir, FILE_GENERIC_READ) = FILE_GENERIC_READ);
  +  writeAcc  := (CheckFileAccess(ExeDir, FILE_GENERIC_WRITE) = FILE_GENERIC_WRITE);
  +  execAcc   := (CheckFileAccess(ExeDir, FILE_GENERIC_EXECUTE) = FILE_GENERIC_EXECUTE);
  +  gLog.AddTime(Format('Check game folder ''%s'' generic permissions: READ: %s; WRITE: %s; EXECUTE: %s',
  +                      [ExeDir, GRANTED[readAcc], GRANTED[writeAcc], GRANTED[execAcc]]));
  +  Result := readAcc and writeAcc and execAcc;
  +end;
  +
  +
   function TKMMain.ReinitRender(aReturnToOptions: Boolean): Boolean;
   begin
     Result := True;
  
positive.code:   // TODO refactor. Separate folder permissions check and render initialization
    // Locale and texts could be loaded separetely to show proper translated error message
    if (gLog = nil)
      or (not aReturnToOptions and (CheckFileAccess(ExeDir, FILE_ALL_ACCESS) <> FILE_ALL_ACCESS)) then
      Exit(False);
  
    gGameApp.OnGameSpeedActualChange := GameSpeedChange;
  
negative.code:     procedure MapCacheUpdate;
  
      procedure GameSpeedChange(aSpeed: Single);
      function DoHaveGenericPermission: Boolean;
    public
      constructor Create;
      destructor Destroy; override;
  