ROOT logo
// @(#)root/proofx:$Id: TXProofMgr.cxx 29059 2009-06-17 15:43:11Z ganis $
// Author: Gerardo Ganis  12/12/2005

/*************************************************************************
 * Copyright (C) 1995-2005, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TXProofMgr                                                           //
//                                                                      //
// The PROOF manager interacts with the PROOF server coordinator to     //
// create or destroy a PROOF session, attach to or detach from          //
// existing one, and to monitor any client activity on the cluster.     //
// At most one manager instance per server is allowed.                  //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include <errno.h>
#ifdef WIN32
#include <io.h>
#endif

#include "TList.h"
#include "TObjArray.h"
#include "TObjString.h"
#include "TProof.h"
#include "TProofLog.h"
#include "TXProofMgr.h"
#include "TXSocket.h"
#include "TROOT.h"
#include "XProofProtocol.h"

ClassImp(TXProofMgr)

// Autoloading hooks.
// These are needed to avoid using the plugin manager which may create
// problems in multi-threaded environments.
TProofMgr *GetTXProofMgr(const char *url, Int_t l, const char *al)
{ return ((TProofMgr *) new TXProofMgr(url, l, al)); }

class TXProofMgrInit {
public:
   TXProofMgrInit() {
      TProofMgr::SetTXProofMgrHook(&GetTXProofMgr);
}};
static TXProofMgrInit gxproofmgr_init;

//______________________________________________________________________________
TXProofMgr::TXProofMgr(const char *url, Int_t dbg, const char *alias)
          : TProofMgr(url, dbg, alias)
{
   // Create a PROOF manager for the standard (old) environment.

   // Set the correct servert type
   fServType = kXProofd;

   // Initialize
   if (Init(dbg) != 0) {
      // Failure: make sure the socket is deleted so that its lack of
      // validity is correctly transmitted
      SafeDelete(fSocket);
   }
}

//______________________________________________________________________________
Int_t TXProofMgr::Init(Int_t)
{
   // Do real initialization: open the connection and set the relevant
   // variables.
   // Login and authentication are dealt with at this level, if required.
   // Return 0 in case of success, 1 if the remote server is a 'proofd',
   // -1 in case of error.

   // Here we make sure that the port is explicitly specified in the URL,
   // even when it matches the default value
   TString u = fUrl.GetUrl(kTRUE);

   fSocket = 0;
   if (!(fSocket = new TXSocket(u, 'C', kPROOF_Protocol,
                                kXPROOF_Protocol, 0, -1, this)) ||
       !(fSocket->IsValid())) {
      if (!fSocket || !(fSocket->IsServProofd()))
         if (gDebug > 0)
            Error("Init", "while opening the connection to %s - exit (error: %d)",
                          u.Data(), (fSocket ? fSocket->GetOpenError() : -1));
      if (fSocket && fSocket->IsServProofd())
         fServType = TProofMgr::kProofd;
      return -1;
   }

   // Protocol run by remote PROOF server
   fRemoteProtocol = fSocket->GetRemoteProtocol();

   // We add the manager itself for correct destruction
   {  R__LOCKGUARD2(gROOTMutex);
      gROOT->GetListOfSockets()->Remove(fSocket);
   }

   // We are done
   return 0;
}

//______________________________________________________________________________
TXProofMgr::~TXProofMgr()
{
   // Destructor: close the connection

   SetInvalid();
}

//______________________________________________________________________________
void TXProofMgr::SetInvalid()
{
   // Invalidate this manager by closing the connection

   if (fSocket)
      fSocket->Close("P");
   SafeDelete(fSocket);

   // Avoid destroying twice
   {  R__LOCKGUARD2(gROOTMutex);
      gROOT->GetListOfSockets()->Remove(this);
   }
}

//______________________________________________________________________________
TProof *TXProofMgr::AttachSession(TProofDesc *d, Bool_t gui)
{
   // Dummy version provided for completeness. Just returns a pointer to
   // existing session 'id' (as shown by TProof::QuerySessions) or 0 if 'id' is
   // not valid. The boolena 'gui' should be kTRUE when invoked from the GUI.

   if (!IsValid()) {
      Warning("AttachSession","invalid TXProofMgr - do nothing");
      return 0;
   }
   if (!d) {
      Warning("AttachSession","invalid description object - do nothing");
      return 0;
   }

   if (d->GetProof())
      // Nothing to do if already in contact with proofserv
      return d->GetProof();

   // Re-compose url
   TString u(Form("%s/?%d", fUrl.GetUrl(kTRUE), d->GetRemoteId()));

   // We need this to set correctly the kUsingSessionGui bit before the first
   // feedback messages arrive
   if (gui)
      u += "GUI";

   // Attach
   TProof *p = new TProof(u, 0, 0, gDebug, 0, this);
   if (p && p->IsValid()) {

      // Set reference manager
      p->SetManager(this);

      // Save record about this session
      Int_t st = (p->IsIdle()) ? TProofDesc::kIdle
                                 : TProofDesc::kRunning;
      d->SetStatus(st);
      d->SetProof(p);

      // Set session tag
      p->SetName(d->GetName());

   } else {
      // Session creation failed
      Error("AttachSession", "attaching to PROOF session");
   }
   return p;
}

//______________________________________________________________________________
void TXProofMgr::DetachSession(Int_t id, Option_t *opt)
{
   // Detach session with 'id' from its proofserv. The 'id' is the number
   // shown by QuerySessions. The correspondent TProof object is deleted.
   // If id == 0 all the known sessions are detached.
   // Option opt="S" or "s" forces session shutdown.

   if (!IsValid()) {
      Warning("DetachSession","invalid TXProofMgr - do nothing");
      return;
   }

   if (id > 0) {
      // Single session request
      TProofDesc *d = GetProofDesc(id);
      if (d) {
         if (fSocket)
            fSocket->DisconnectSession(d->GetRemoteId(), opt);
         TProof *p = d->GetProof();
         fSessions->Remove(d);
         SafeDelete(p);
         delete d;
      }
   } else if (id == 0) {

      // Requesto to destroy all sessions
      if (fSocket) {
         TString o = Form("%sA",opt);
         fSocket->DisconnectSession(-1, o);
      }
      if (fSessions) {
         // Delete PROOF sessions
         TIter nxd(fSessions);
         TProofDesc *d = 0;
         while ((d = (TProofDesc *)nxd())) {
            TProof *p = d->GetProof();
            SafeDelete(p);
         }
         fSessions->Delete();
      }
   }

   return;
}

//______________________________________________________________________________
void TXProofMgr::DetachSession(TProof *p, Option_t *opt)
{
   // Detach session 'p' from its proofserv. The instance 'p' is invalidated
   // and should be deleted by the caller

   if (!IsValid()) {
      Warning("DetachSession","invalid TXProofMgr - do nothing");
      return;
   }

   if (p) {
      // Single session request
      TProofDesc *d = GetProofDesc(p);
      if (d) {
         if (fSocket)
            fSocket->DisconnectSession(d->GetRemoteId(), opt);
         fSessions->Remove(d);
         p->Close(opt);
         delete d;
      }
   }

   return;
}

//______________________________________________________________________________
Bool_t TXProofMgr::MatchUrl(const char *url)
{
   // Checks if 'url' refers to the same 'user@host:port' entity as the URL
   // in memory. TProofMgr::MatchUrl cannot be used here because of the
   // 'double' default port, implying an additional check on the port effectively
   // open.

   if (!IsValid()) {
      Warning("MatchUrl","invalid TXProofMgr - do nothing");
      return 0;
   }

   TUrl u(url);

   // Correct URL protocol
   if (!strcmp(u.GetProtocol(), TUrl("a").GetProtocol()))
      u.SetProtocol("proof");

   if (u.GetPort() == TUrl("a").GetPort()) {
      // Set default port
      Int_t port = gSystem->GetServiceByName("proofd");
      if (port < 0)
         port = 1093;
      u.SetPort(port);
   }

   // Now we can check
   if (!strcmp(u.GetHostFQDN(), fUrl.GetHost()))
      if (u.GetPort() == fUrl.GetPort() ||
          u.GetPort() == fSocket->GetPort())
         if (strlen(u.GetUser()) <= 0 || !strcmp(u.GetUser(),fUrl.GetUser()))
            return kTRUE;

   // Match failed
   return kFALSE;
}

//______________________________________________________________________________
void TXProofMgr::ShowWorkers()
{
   // Show available workers

   if (!IsValid()) {
      Warning("ShowWorkers","invalid TXProofMgr - do nothing");
      return;
   }

   // Send the request
   TObjString *os = fSocket->SendCoordinator(kQueryWorkers);
   if (os) {
      TObjArray *oa = TString(os->GetName()).Tokenize(TString("&"));
      if (oa) {
         TIter nxos(oa);
         TObjString *to = 0;
         while ((to = (TObjString *) nxos()))
            // Now parse them ...
            Printf("+  %s", to->GetName());
      }
   }
}

//______________________________________________________________________________
TList *TXProofMgr::QuerySessions(Option_t *opt)
{
   // Get list of sessions accessible to this manager

   if (opt && !strncasecmp(opt,"L",1))
      // Just return the existing list
      return fSessions;

   // Nothing to do if not in contact with proofserv
   if (!IsValid()) {
      Warning("QuerySessions","invalid TXProofMgr - do nothing");
      return 0;
   }

   // Create list if not existing
   if (!fSessions) {
      fSessions = new TList();
      fSessions->SetOwner();
   }

   // Send the request
   TList *ocl = new TList;
   TObjString *os = fSocket->SendCoordinator(kQuerySessions);
   if (os) {
      TObjArray *oa = TString(os->GetName()).Tokenize(TString("|"));
      if (oa) {
         TProofDesc *d = 0;
         TIter nxos(oa);
         TObjString *to = (TObjString *) nxos();
         while ((to = (TObjString *) nxos())) {
            // Now parse them ...
            char al[256];
            char tg[256];
            Int_t id = -1, st = -1, nc = 0;
            sscanf(to->GetName(),"%d %s %s %d %d", &id, tg, al, &st, &nc);
            // Add to the list, if not already there
            if (!(d = (TProofDesc *) fSessions->FindObject(tg))) {
               Int_t locid = fSessions->GetSize() + 1;
               d = new TProofDesc(tg, al, GetUrl(), locid, id, st, 0);
               fSessions->Add(d);
            } else {
               // Set missing / update info
               d->SetStatus(st);
               d->SetRemoteId(id);
               d->SetTitle(al);
            }
            // Add to the list for final garbage collection
            ocl->Add(new TObjString(tg));
         }
         SafeDelete(oa);
      }
      SafeDelete(os);
   }

   // Printout and Garbage collection
   if (fSessions->GetSize() > 0) {
      TIter nxd(fSessions);
      TProofDesc *d = 0;
      while ((d = (TProofDesc *)nxd())) {
         if (ocl->FindObject(d->GetName())) {
            if (opt && !strncasecmp(opt,"S",1))
               d->Print("");
         } else {
            fSessions->Remove(d);
            SafeDelete(d);
         }
      }
   }

   // We are done
   return fSessions;
}

//_____________________________________________________________________________
Bool_t TXProofMgr::HandleInput(const void *)
{
   // Handle asynchronous input on the socket

   if (fSocket && fSocket->IsValid()) {
      TMessage *mess;
      if (fSocket->Recv(mess) >= 0) {
         Int_t what = mess->What();
         if (gDebug > 0)
            Info("HandleInput", "%p: got message type: %d", this, what);
         switch (what) {
            case kPROOF_TOUCH:
               fSocket->RemoteTouch();
               break;
            default:
               Warning("HandleInput", "%p: got unknown message type: %d", what);
               break;
         }
      }
   } else {
      Warning("HandleInput", "%p: got message but socket is invalid!");
   }

   // We are done
   return kTRUE;
}

//_____________________________________________________________________________
Bool_t TXProofMgr::HandleError(const void *in)
{
   // Handle error on the input socket

   XHandleErr_t *herr = in ? (XHandleErr_t *)in : 0;

   // Try reconnection
   if (fSocket && herr && (herr->fOpt == 1)) {
      fSocket->Reconnect();
      if (fSocket && fSocket->IsValid()) {
         if (gDebug > 0)
            Printf("ProofMgr: connection to coordinator at %s re-established",
                   fUrl.GetUrl());
         return kFALSE;
      }
   }
   Printf("TXProofMgr::HandleError: %p: got called ...", this);

   // Interrupt any PROOF session in Collect
   if (fSessions && fSessions->GetSize() > 0) {
      TIter nxd(fSessions);
      TProofDesc *d = 0;
      while ((d = (TProofDesc *)nxd())) {
         TProof *p = (TProof *) d->GetProof();
         if (p)
            p->InterruptCurrentMonitor();
      }
   }
   if (gDebug > 0)
      Printf("TXProofMgr::HandleError: %p: DONE ... ", this);

   // We are done
   return kTRUE;
}

//______________________________________________________________________________
Int_t TXProofMgr::Reset(Bool_t hard, const char *usr)
{
   // Send a cleanup request for the sessions associated with the current user.
   // If 'hard' is true sessions are signalled for termination and moved to
   // terminate at all stages (top master, sub-master, workers). Otherwise
   // (default) only top-master sessions are asked to terminate, triggering
   // a gentle session termination. In all cases all sessions should be gone
   // after a few (2 or 3) session checking cycles.
   // A user with superuser privileges can also asks cleaning for an different
   // user, specified by 'usr', or for all users (usr = *)
   // Return 0 on success, -1 in case of error.

   // Nothing to do if not in contact with proofserv
   if (!IsValid()) {
      Warning("Reset","invalid TXProofMgr - do nothing");
      return -1;
   }

   Int_t h = (hard) ? 1 : 0;
   fSocket->SendCoordinator(kCleanupSessions, usr, h);

   return 0;
}

//_____________________________________________________________________________
TProofLog *TXProofMgr::GetSessionLogs(Int_t isess,
                                      const char *stag, const char *pattern)
{
   // Get logs or log tails from last session associated with this manager
   // instance.
   // The arguments allow to specify a session different from the last one:
   //      isess   specifies a position relative to the last one, i.e. 1
   //              for the next to last session; the absolute value is taken
   //              so -1 and 1 are equivalent.
   //      stag    specifies the unique tag of the wanted session
   // The special value stag = "NR" allows to just initialize the TProofLog
   // object w/o retrieving the files; this may be useful when the number
   // of workers is large and only a subset of logs is required.
   // If 'stag' is specified 'isess' is ignored (unless stag = "NR").
   // If 'pattern' is specified only the lines containing it are retrieved
   // (remote grep functionality); to filter out a pattern 'pat' use
   // pattern = "-v pat".
   // Returns a TProofLog object (to be deleted by the caller) on success,
   // 0 if something wrong happened.

   // Nothing to do if not in contact with proofserv
   if (!IsValid()) {
      Warning("GetSessionLogs","invalid TXProofMgr - do nothing");
      return 0;
   }

   TProofLog *pl = 0;

   // The absolute value of isess counts
   isess = (isess > 0) ? -isess : isess;

   // Special option in stag
   bool retrieve = 1;
   TString sesstag(stag);
   if (sesstag == "NR") {
      retrieve = 0;
      sesstag = "";
   }

   // Get the list of paths
   TObjString *os = fSocket->SendCoordinator(kQueryLogPaths, sesstag.Data(), isess);

   // Analyse it now
   Int_t ii = 0;
   if (os) {
      TString rs(os->GetName());
      Ssiz_t from = 0;
      // The session tag
      TString tag;
      if (!rs.Tokenize(tag, from, "|")) {
         Warning("GetSessionLogs", "Session tag undefined: corruption?\n"
                                   " (received string: %s)", os->GetName());
         return (TProofLog *)0;
      }
      // The pool url
      TString purl;
      if (!rs.Tokenize(purl, from, "|")) {
         Warning("GetSessionLogs", "Pool URL undefined: corruption?\n"
                                   " (received string: %s)", os->GetName());
         return (TProofLog *)0;
      }
      // Create the instance now
      if (!pl)
         pl = new TProofLog(tag, GetUrl(), this);

      // Per-node info
      TString to;
      while (rs.Tokenize(to, from, "|")) {
         if (!to.IsNull()) {
            TString ord(to);
            ord.Strip(TString::kLeading, ' ');
            TString url(ord);
            if ((ii = ord.Index(" ")) != kNPOS)
               ord.Remove(ii);
            if ((ii = url.Index(" ")) != kNPOS)
               url.Remove(0, ii + 1);
            // Add to the list (special tag for valgrind outputs)
            if (url.Contains(".valgrind")) ord += "-valgrind";
            pl->Add(ord, url);
            // Notify
            if (gDebug > 1)
               Info("GetSessionLogs", "ord: %s, url: %s", ord.Data(), url.Data());
         }
      }
      // Cleanup
      SafeDelete(os);
      // Retrieve the default part if required
      if (pl && retrieve) {
         if (pattern && strlen(pattern) > 0)
            pl->Retrieve("*", TProofLog::kGrep, 0, pattern);
         else
            pl->Retrieve();
      }
   }

   // Done
   return pl;
}

//______________________________________________________________________________
TObjString *TXProofMgr::ReadBuffer(const char *fin, Long64_t ofs, Int_t len)
{
   // Read, via the coordinator, 'len' bytes from offset 'ofs' of 'file'.
   // Returns a TObjString with the content or 0, in case of failure

   // Nothing to do if not in contact with proofserv
   if (!IsValid()) {
      Warning("ReadBuffer","invalid TXProofMgr - do nothing");
      return (TObjString *)0;
   }

   // Send the request
   return fSocket->SendCoordinator(kReadBuffer, fin, len, ofs, 0);
}

//______________________________________________________________________________
TObjString *TXProofMgr::ReadBuffer(const char *fin, const char *pattern)
{
   // Read, via the coordinator, lines containing 'pattern' in 'file'.
   // Returns a TObjString with the content or 0, in case of failure

   // Nothing to do if not in contact with proofserv
   if (!IsValid()) {
      Warning("ReadBuffer","invalid TXProofMgr - do nothing");
      return (TObjString *)0;
   }

   // Prepare the buffer
   Int_t plen = strlen(pattern);
   Int_t lfi = strlen(fin);
   char *buf = new char[lfi + plen + 1];
   memcpy(buf, fin, lfi);
   memcpy(buf+lfi, pattern, plen);
   buf[lfi+plen] = 0;

   // Send the request
   return fSocket->SendCoordinator(kReadBuffer, buf, plen, 0, 1);
}

//______________________________________________________________________________
void TXProofMgr::ShowROOTVersions()
{
   // Display what ROOT versions are available on the cluster

   // Nothing to do if not in contact with proofserv
   if (!IsValid()) {
      Warning("ShowROOTVersions","invalid TXProofMgr - do nothing");
      return;
   }

   // Send the request
   TObjString *os = fSocket->SendCoordinator(kQueryROOTVersions);
   if (os) {
      // Display it
      Printf("----------------------------------------------------------\n");
      Printf("Available versions (tag ROOT-vers remote-path PROOF-version):\n");
      Printf("%s", os->GetName());
      Printf("----------------------------------------------------------");
      SafeDelete(os);
   }

   // We are done
   return;
}

//______________________________________________________________________________
void TXProofMgr::SetROOTVersion(const char *tag)
{
   // Set the default ROOT version to be used

   // Nothing to do if not in contact with proofserv
   if (!IsValid()) {
      Warning("SetROOTVersion","invalid TXProofMgr - do nothing");
      return;
   }

   // Send the request
   fSocket->SendCoordinator(kROOTVersion, tag);

   // We are done
   return;
}

//______________________________________________________________________________
Int_t TXProofMgr::SendMsgToUsers(const char *msg, const char *usr)
{
   // Send a message to connected users. Only superusers can do this.
   // The first argument specifies the message or the file from where to take
   // the message.
   // The second argument specifies the user to which to send the message: if
   // empty or null the message is send to all the connected users.
   // return 0 in case of success, -1 in case of error

   Int_t rc = 0;

   // Check input
   if (!msg || strlen(msg) <= 0) {
      Error("SendMsgToUsers","no message to send - do nothing");
      return -1;
   }

   // Buffer (max 32K)
   const Int_t kMAXBUF = 32768;
   char buf[kMAXBUF] = {0};
   char *p = &buf[0];
   Int_t space = kMAXBUF - 1;
   Int_t len = 0;
   Int_t lusr = 0;

   // A specific user?
   if (usr && strlen(usr) > 0 && (strlen(usr) != 1 || usr[0] != '*')) {
      lusr = (strlen(usr) + 3);
      sprintf(buf, "u:%s ", usr);
      p += lusr;
      space -= lusr;
   }

   // Is it from file ?
   if (!gSystem->AccessPathName(msg, kFileExists)) {
      // From file: can we read it ?
      if (gSystem->AccessPathName(msg, kReadPermission)) {
         Error("SendMsgToUsers","request to read message from unreadable file '%s'", msg);
         return -1;
      }
      // Open the file
      FILE *f = 0;
      if (!(f = fopen(msg, "r"))) {
         Error("SendMsgToUsers", "file '%s' cannot be open", msg);
         return -1;
      }
      // Determine the number of bytes to be read from the file.
      Int_t left = (Int_t) lseek(fileno(f), (off_t) 0, SEEK_END);
      lseek(fileno(f), (off_t) 0, SEEK_SET);
      // Now readout from file
      Int_t wanted = left;
      if (wanted > space) {
         wanted = space;
         Warning("SendMsgToUsers",
                 "requested to send %d bytes: max size is %d bytes: truncating", left, space);
      }
      do {
         while ((len = read(fileno(f), p, wanted)) < 0 &&
                  TSystem::GetErrno() == EINTR)
            TSystem::ResetErrno();
         if (len < 0) {
            SysError("SendMsgToUsers", "error reading file");
            break;
         }

         // Update counters
         left -= len;
         p += len;
         wanted = (left > kMAXBUF-1) ? kMAXBUF-1 : left;

      } while (len > 0 && left > 0);
   } else {
      // Add the message to the buffer
      len = strlen(msg);
      if (len > space) {
         Warning("SendMsgToUsers",
                 "requested to send %d bytes: max size is %d bytes: truncating", len, space);
         len = space;
      }
      memcpy(p, msg, len);
   }

   // Null-terminate
   buf[len + lusr] = 0;
//   fprintf(stderr,"%s\n", buf);

   // Send the request
   fSocket->SendCoordinator(kSendMsgToUser, buf);

   return rc;
}
 TXProofMgr.cxx:1
 TXProofMgr.cxx:2
 TXProofMgr.cxx:3
 TXProofMgr.cxx:4
 TXProofMgr.cxx:5
 TXProofMgr.cxx:6
 TXProofMgr.cxx:7
 TXProofMgr.cxx:8
 TXProofMgr.cxx:9
 TXProofMgr.cxx:10
 TXProofMgr.cxx:11
 TXProofMgr.cxx:12
 TXProofMgr.cxx:13
 TXProofMgr.cxx:14
 TXProofMgr.cxx:15
 TXProofMgr.cxx:16
 TXProofMgr.cxx:17
 TXProofMgr.cxx:18
 TXProofMgr.cxx:19
 TXProofMgr.cxx:20
 TXProofMgr.cxx:21
 TXProofMgr.cxx:22
 TXProofMgr.cxx:23
 TXProofMgr.cxx:24
 TXProofMgr.cxx:25
 TXProofMgr.cxx:26
 TXProofMgr.cxx:27
 TXProofMgr.cxx:28
 TXProofMgr.cxx:29
 TXProofMgr.cxx:30
 TXProofMgr.cxx:31
 TXProofMgr.cxx:32
 TXProofMgr.cxx:33
 TXProofMgr.cxx:34
 TXProofMgr.cxx:35
 TXProofMgr.cxx:36
 TXProofMgr.cxx:37
 TXProofMgr.cxx:38
 TXProofMgr.cxx:39
 TXProofMgr.cxx:40
 TXProofMgr.cxx:41
 TXProofMgr.cxx:42
 TXProofMgr.cxx:43
 TXProofMgr.cxx:44
 TXProofMgr.cxx:45
 TXProofMgr.cxx:46
 TXProofMgr.cxx:47
 TXProofMgr.cxx:48
 TXProofMgr.cxx:49
 TXProofMgr.cxx:50
 TXProofMgr.cxx:51
 TXProofMgr.cxx:52
 TXProofMgr.cxx:53
 TXProofMgr.cxx:54
 TXProofMgr.cxx:55
 TXProofMgr.cxx:56
 TXProofMgr.cxx:57
 TXProofMgr.cxx:58
 TXProofMgr.cxx:59
 TXProofMgr.cxx:60
 TXProofMgr.cxx:61
 TXProofMgr.cxx:62
 TXProofMgr.cxx:63
 TXProofMgr.cxx:64
 TXProofMgr.cxx:65
 TXProofMgr.cxx:66
 TXProofMgr.cxx:67
 TXProofMgr.cxx:68
 TXProofMgr.cxx:69
 TXProofMgr.cxx:70
 TXProofMgr.cxx:71
 TXProofMgr.cxx:72
 TXProofMgr.cxx:73
 TXProofMgr.cxx:74
 TXProofMgr.cxx:75
 TXProofMgr.cxx:76
 TXProofMgr.cxx:77
 TXProofMgr.cxx:78
 TXProofMgr.cxx:79
 TXProofMgr.cxx:80
 TXProofMgr.cxx:81
 TXProofMgr.cxx:82
 TXProofMgr.cxx:83
 TXProofMgr.cxx:84
 TXProofMgr.cxx:85
 TXProofMgr.cxx:86
 TXProofMgr.cxx:87
 TXProofMgr.cxx:88
 TXProofMgr.cxx:89
 TXProofMgr.cxx:90
 TXProofMgr.cxx:91
 TXProofMgr.cxx:92
 TXProofMgr.cxx:93
 TXProofMgr.cxx:94
 TXProofMgr.cxx:95
 TXProofMgr.cxx:96
 TXProofMgr.cxx:97
 TXProofMgr.cxx:98
 TXProofMgr.cxx:99
 TXProofMgr.cxx:100
 TXProofMgr.cxx:101
 TXProofMgr.cxx:102
 TXProofMgr.cxx:103
 TXProofMgr.cxx:104
 TXProofMgr.cxx:105
 TXProofMgr.cxx:106
 TXProofMgr.cxx:107
 TXProofMgr.cxx:108
 TXProofMgr.cxx:109
 TXProofMgr.cxx:110
 TXProofMgr.cxx:111
 TXProofMgr.cxx:112
 TXProofMgr.cxx:113
 TXProofMgr.cxx:114
 TXProofMgr.cxx:115
 TXProofMgr.cxx:116
 TXProofMgr.cxx:117
 TXProofMgr.cxx:118
 TXProofMgr.cxx:119
 TXProofMgr.cxx:120
 TXProofMgr.cxx:121
 TXProofMgr.cxx:122
 TXProofMgr.cxx:123
 TXProofMgr.cxx:124
 TXProofMgr.cxx:125
 TXProofMgr.cxx:126
 TXProofMgr.cxx:127
 TXProofMgr.cxx:128
 TXProofMgr.cxx:129
 TXProofMgr.cxx:130
 TXProofMgr.cxx:131
 TXProofMgr.cxx:132
 TXProofMgr.cxx:133
 TXProofMgr.cxx:134
 TXProofMgr.cxx:135
 TXProofMgr.cxx:136
 TXProofMgr.cxx:137
 TXProofMgr.cxx:138
 TXProofMgr.cxx:139
 TXProofMgr.cxx:140
 TXProofMgr.cxx:141
 TXProofMgr.cxx:142
 TXProofMgr.cxx:143
 TXProofMgr.cxx:144
 TXProofMgr.cxx:145
 TXProofMgr.cxx:146
 TXProofMgr.cxx:147
 TXProofMgr.cxx:148
 TXProofMgr.cxx:149
 TXProofMgr.cxx:150
 TXProofMgr.cxx:151
 TXProofMgr.cxx:152
 TXProofMgr.cxx:153
 TXProofMgr.cxx:154
 TXProofMgr.cxx:155
 TXProofMgr.cxx:156
 TXProofMgr.cxx:157
 TXProofMgr.cxx:158
 TXProofMgr.cxx:159
 TXProofMgr.cxx:160
 TXProofMgr.cxx:161
 TXProofMgr.cxx:162
 TXProofMgr.cxx:163
 TXProofMgr.cxx:164
 TXProofMgr.cxx:165
 TXProofMgr.cxx:166
 TXProofMgr.cxx:167
 TXProofMgr.cxx:168
 TXProofMgr.cxx:169
 TXProofMgr.cxx:170
 TXProofMgr.cxx:171
 TXProofMgr.cxx:172
 TXProofMgr.cxx:173
 TXProofMgr.cxx:174
 TXProofMgr.cxx:175
 TXProofMgr.cxx:176
 TXProofMgr.cxx:177
 TXProofMgr.cxx:178
 TXProofMgr.cxx:179
 TXProofMgr.cxx:180
 TXProofMgr.cxx:181
 TXProofMgr.cxx:182
 TXProofMgr.cxx:183
 TXProofMgr.cxx:184
 TXProofMgr.cxx:185
 TXProofMgr.cxx:186
 TXProofMgr.cxx:187
 TXProofMgr.cxx:188
 TXProofMgr.cxx:189
 TXProofMgr.cxx:190
 TXProofMgr.cxx:191
 TXProofMgr.cxx:192
 TXProofMgr.cxx:193
 TXProofMgr.cxx:194
 TXProofMgr.cxx:195
 TXProofMgr.cxx:196
 TXProofMgr.cxx:197
 TXProofMgr.cxx:198
 TXProofMgr.cxx:199
 TXProofMgr.cxx:200
 TXProofMgr.cxx:201
 TXProofMgr.cxx:202
 TXProofMgr.cxx:203
 TXProofMgr.cxx:204
 TXProofMgr.cxx:205
 TXProofMgr.cxx:206
 TXProofMgr.cxx:207
 TXProofMgr.cxx:208
 TXProofMgr.cxx:209
 TXProofMgr.cxx:210
 TXProofMgr.cxx:211
 TXProofMgr.cxx:212
 TXProofMgr.cxx:213
 TXProofMgr.cxx:214
 TXProofMgr.cxx:215
 TXProofMgr.cxx:216
 TXProofMgr.cxx:217
 TXProofMgr.cxx:218
 TXProofMgr.cxx:219
 TXProofMgr.cxx:220
 TXProofMgr.cxx:221
 TXProofMgr.cxx:222
 TXProofMgr.cxx:223
 TXProofMgr.cxx:224
 TXProofMgr.cxx:225
 TXProofMgr.cxx:226
 TXProofMgr.cxx:227
 TXProofMgr.cxx:228
 TXProofMgr.cxx:229
 TXProofMgr.cxx:230
 TXProofMgr.cxx:231
 TXProofMgr.cxx:232
 TXProofMgr.cxx:233
 TXProofMgr.cxx:234
 TXProofMgr.cxx:235
 TXProofMgr.cxx:236
 TXProofMgr.cxx:237
 TXProofMgr.cxx:238
 TXProofMgr.cxx:239
 TXProofMgr.cxx:240
 TXProofMgr.cxx:241
 TXProofMgr.cxx:242
 TXProofMgr.cxx:243
 TXProofMgr.cxx:244
 TXProofMgr.cxx:245
 TXProofMgr.cxx:246
 TXProofMgr.cxx:247
 TXProofMgr.cxx:248
 TXProofMgr.cxx:249
 TXProofMgr.cxx:250
 TXProofMgr.cxx:251
 TXProofMgr.cxx:252
 TXProofMgr.cxx:253
 TXProofMgr.cxx:254
 TXProofMgr.cxx:255
 TXProofMgr.cxx:256
 TXProofMgr.cxx:257
 TXProofMgr.cxx:258
 TXProofMgr.cxx:259
 TXProofMgr.cxx:260
 TXProofMgr.cxx:261
 TXProofMgr.cxx:262
 TXProofMgr.cxx:263
 TXProofMgr.cxx:264
 TXProofMgr.cxx:265
 TXProofMgr.cxx:266
 TXProofMgr.cxx:267
 TXProofMgr.cxx:268
 TXProofMgr.cxx:269
 TXProofMgr.cxx:270
 TXProofMgr.cxx:271
 TXProofMgr.cxx:272
 TXProofMgr.cxx:273
 TXProofMgr.cxx:274
 TXProofMgr.cxx:275
 TXProofMgr.cxx:276
 TXProofMgr.cxx:277
 TXProofMgr.cxx:278
 TXProofMgr.cxx:279
 TXProofMgr.cxx:280
 TXProofMgr.cxx:281
 TXProofMgr.cxx:282
 TXProofMgr.cxx:283
 TXProofMgr.cxx:284
 TXProofMgr.cxx:285
 TXProofMgr.cxx:286
 TXProofMgr.cxx:287
 TXProofMgr.cxx:288
 TXProofMgr.cxx:289
 TXProofMgr.cxx:290
 TXProofMgr.cxx:291
 TXProofMgr.cxx:292
 TXProofMgr.cxx:293
 TXProofMgr.cxx:294
 TXProofMgr.cxx:295
 TXProofMgr.cxx:296
 TXProofMgr.cxx:297
 TXProofMgr.cxx:298
 TXProofMgr.cxx:299
 TXProofMgr.cxx:300
 TXProofMgr.cxx:301
 TXProofMgr.cxx:302
 TXProofMgr.cxx:303
 TXProofMgr.cxx:304
 TXProofMgr.cxx:305
 TXProofMgr.cxx:306
 TXProofMgr.cxx:307
 TXProofMgr.cxx:308
 TXProofMgr.cxx:309
 TXProofMgr.cxx:310
 TXProofMgr.cxx:311
 TXProofMgr.cxx:312
 TXProofMgr.cxx:313
 TXProofMgr.cxx:314
 TXProofMgr.cxx:315
 TXProofMgr.cxx:316
 TXProofMgr.cxx:317
 TXProofMgr.cxx:318
 TXProofMgr.cxx:319
 TXProofMgr.cxx:320
 TXProofMgr.cxx:321
 TXProofMgr.cxx:322
 TXProofMgr.cxx:323
 TXProofMgr.cxx:324
 TXProofMgr.cxx:325
 TXProofMgr.cxx:326
 TXProofMgr.cxx:327
 TXProofMgr.cxx:328
 TXProofMgr.cxx:329
 TXProofMgr.cxx:330
 TXProofMgr.cxx:331
 TXProofMgr.cxx:332
 TXProofMgr.cxx:333
 TXProofMgr.cxx:334
 TXProofMgr.cxx:335
 TXProofMgr.cxx:336
 TXProofMgr.cxx:337
 TXProofMgr.cxx:338
 TXProofMgr.cxx:339
 TXProofMgr.cxx:340
 TXProofMgr.cxx:341
 TXProofMgr.cxx:342
 TXProofMgr.cxx:343
 TXProofMgr.cxx:344
 TXProofMgr.cxx:345
 TXProofMgr.cxx:346
 TXProofMgr.cxx:347
 TXProofMgr.cxx:348
 TXProofMgr.cxx:349
 TXProofMgr.cxx:350
 TXProofMgr.cxx:351
 TXProofMgr.cxx:352
 TXProofMgr.cxx:353
 TXProofMgr.cxx:354
 TXProofMgr.cxx:355
 TXProofMgr.cxx:356
 TXProofMgr.cxx:357
 TXProofMgr.cxx:358
 TXProofMgr.cxx:359
 TXProofMgr.cxx:360
 TXProofMgr.cxx:361
 TXProofMgr.cxx:362
 TXProofMgr.cxx:363
 TXProofMgr.cxx:364
 TXProofMgr.cxx:365
 TXProofMgr.cxx:366
 TXProofMgr.cxx:367
 TXProofMgr.cxx:368
 TXProofMgr.cxx:369
 TXProofMgr.cxx:370
 TXProofMgr.cxx:371
 TXProofMgr.cxx:372
 TXProofMgr.cxx:373
 TXProofMgr.cxx:374
 TXProofMgr.cxx:375
 TXProofMgr.cxx:376
 TXProofMgr.cxx:377
 TXProofMgr.cxx:378
 TXProofMgr.cxx:379
 TXProofMgr.cxx:380
 TXProofMgr.cxx:381
 TXProofMgr.cxx:382
 TXProofMgr.cxx:383
 TXProofMgr.cxx:384
 TXProofMgr.cxx:385
 TXProofMgr.cxx:386
 TXProofMgr.cxx:387
 TXProofMgr.cxx:388
 TXProofMgr.cxx:389
 TXProofMgr.cxx:390
 TXProofMgr.cxx:391
 TXProofMgr.cxx:392
 TXProofMgr.cxx:393
 TXProofMgr.cxx:394
 TXProofMgr.cxx:395
 TXProofMgr.cxx:396
 TXProofMgr.cxx:397
 TXProofMgr.cxx:398
 TXProofMgr.cxx:399
 TXProofMgr.cxx:400
 TXProofMgr.cxx:401
 TXProofMgr.cxx:402
 TXProofMgr.cxx:403
 TXProofMgr.cxx:404
 TXProofMgr.cxx:405
 TXProofMgr.cxx:406
 TXProofMgr.cxx:407
 TXProofMgr.cxx:408
 TXProofMgr.cxx:409
 TXProofMgr.cxx:410
 TXProofMgr.cxx:411
 TXProofMgr.cxx:412
 TXProofMgr.cxx:413
 TXProofMgr.cxx:414
 TXProofMgr.cxx:415
 TXProofMgr.cxx:416
 TXProofMgr.cxx:417
 TXProofMgr.cxx:418
 TXProofMgr.cxx:419
 TXProofMgr.cxx:420
 TXProofMgr.cxx:421
 TXProofMgr.cxx:422
 TXProofMgr.cxx:423
 TXProofMgr.cxx:424
 TXProofMgr.cxx:425
 TXProofMgr.cxx:426
 TXProofMgr.cxx:427
 TXProofMgr.cxx:428
 TXProofMgr.cxx:429
 TXProofMgr.cxx:430
 TXProofMgr.cxx:431
 TXProofMgr.cxx:432
 TXProofMgr.cxx:433
 TXProofMgr.cxx:434
 TXProofMgr.cxx:435
 TXProofMgr.cxx:436
 TXProofMgr.cxx:437
 TXProofMgr.cxx:438
 TXProofMgr.cxx:439
 TXProofMgr.cxx:440
 TXProofMgr.cxx:441
 TXProofMgr.cxx:442
 TXProofMgr.cxx:443
 TXProofMgr.cxx:444
 TXProofMgr.cxx:445
 TXProofMgr.cxx:446
 TXProofMgr.cxx:447
 TXProofMgr.cxx:448
 TXProofMgr.cxx:449
 TXProofMgr.cxx:450
 TXProofMgr.cxx:451
 TXProofMgr.cxx:452
 TXProofMgr.cxx:453
 TXProofMgr.cxx:454
 TXProofMgr.cxx:455
 TXProofMgr.cxx:456
 TXProofMgr.cxx:457
 TXProofMgr.cxx:458
 TXProofMgr.cxx:459
 TXProofMgr.cxx:460
 TXProofMgr.cxx:461
 TXProofMgr.cxx:462
 TXProofMgr.cxx:463
 TXProofMgr.cxx:464
 TXProofMgr.cxx:465
 TXProofMgr.cxx:466
 TXProofMgr.cxx:467
 TXProofMgr.cxx:468
 TXProofMgr.cxx:469
 TXProofMgr.cxx:470
 TXProofMgr.cxx:471
 TXProofMgr.cxx:472
 TXProofMgr.cxx:473
 TXProofMgr.cxx:474
 TXProofMgr.cxx:475
 TXProofMgr.cxx:476
 TXProofMgr.cxx:477
 TXProofMgr.cxx:478
 TXProofMgr.cxx:479
 TXProofMgr.cxx:480
 TXProofMgr.cxx:481
 TXProofMgr.cxx:482
 TXProofMgr.cxx:483
 TXProofMgr.cxx:484
 TXProofMgr.cxx:485
 TXProofMgr.cxx:486
 TXProofMgr.cxx:487
 TXProofMgr.cxx:488
 TXProofMgr.cxx:489
 TXProofMgr.cxx:490
 TXProofMgr.cxx:491
 TXProofMgr.cxx:492
 TXProofMgr.cxx:493
 TXProofMgr.cxx:494
 TXProofMgr.cxx:495
 TXProofMgr.cxx:496
 TXProofMgr.cxx:497
 TXProofMgr.cxx:498
 TXProofMgr.cxx:499
 TXProofMgr.cxx:500
 TXProofMgr.cxx:501
 TXProofMgr.cxx:502
 TXProofMgr.cxx:503
 TXProofMgr.cxx:504
 TXProofMgr.cxx:505
 TXProofMgr.cxx:506
 TXProofMgr.cxx:507
 TXProofMgr.cxx:508
 TXProofMgr.cxx:509
 TXProofMgr.cxx:510
 TXProofMgr.cxx:511
 TXProofMgr.cxx:512
 TXProofMgr.cxx:513
 TXProofMgr.cxx:514
 TXProofMgr.cxx:515
 TXProofMgr.cxx:516
 TXProofMgr.cxx:517
 TXProofMgr.cxx:518
 TXProofMgr.cxx:519
 TXProofMgr.cxx:520
 TXProofMgr.cxx:521
 TXProofMgr.cxx:522
 TXProofMgr.cxx:523
 TXProofMgr.cxx:524
 TXProofMgr.cxx:525
 TXProofMgr.cxx:526
 TXProofMgr.cxx:527
 TXProofMgr.cxx:528
 TXProofMgr.cxx:529
 TXProofMgr.cxx:530
 TXProofMgr.cxx:531
 TXProofMgr.cxx:532
 TXProofMgr.cxx:533
 TXProofMgr.cxx:534
 TXProofMgr.cxx:535
 TXProofMgr.cxx:536
 TXProofMgr.cxx:537
 TXProofMgr.cxx:538
 TXProofMgr.cxx:539
 TXProofMgr.cxx:540
 TXProofMgr.cxx:541
 TXProofMgr.cxx:542
 TXProofMgr.cxx:543
 TXProofMgr.cxx:544
 TXProofMgr.cxx:545
 TXProofMgr.cxx:546
 TXProofMgr.cxx:547
 TXProofMgr.cxx:548
 TXProofMgr.cxx:549
 TXProofMgr.cxx:550
 TXProofMgr.cxx:551
 TXProofMgr.cxx:552
 TXProofMgr.cxx:553
 TXProofMgr.cxx:554
 TXProofMgr.cxx:555
 TXProofMgr.cxx:556
 TXProofMgr.cxx:557
 TXProofMgr.cxx:558
 TXProofMgr.cxx:559
 TXProofMgr.cxx:560
 TXProofMgr.cxx:561
 TXProofMgr.cxx:562
 TXProofMgr.cxx:563
 TXProofMgr.cxx:564
 TXProofMgr.cxx:565
 TXProofMgr.cxx:566
 TXProofMgr.cxx:567
 TXProofMgr.cxx:568
 TXProofMgr.cxx:569
 TXProofMgr.cxx:570
 TXProofMgr.cxx:571
 TXProofMgr.cxx:572
 TXProofMgr.cxx:573
 TXProofMgr.cxx:574
 TXProofMgr.cxx:575
 TXProofMgr.cxx:576
 TXProofMgr.cxx:577
 TXProofMgr.cxx:578
 TXProofMgr.cxx:579
 TXProofMgr.cxx:580
 TXProofMgr.cxx:581
 TXProofMgr.cxx:582
 TXProofMgr.cxx:583
 TXProofMgr.cxx:584
 TXProofMgr.cxx:585
 TXProofMgr.cxx:586
 TXProofMgr.cxx:587
 TXProofMgr.cxx:588
 TXProofMgr.cxx:589
 TXProofMgr.cxx:590
 TXProofMgr.cxx:591
 TXProofMgr.cxx:592
 TXProofMgr.cxx:593
 TXProofMgr.cxx:594
 TXProofMgr.cxx:595
 TXProofMgr.cxx:596
 TXProofMgr.cxx:597
 TXProofMgr.cxx:598
 TXProofMgr.cxx:599
 TXProofMgr.cxx:600
 TXProofMgr.cxx:601
 TXProofMgr.cxx:602
 TXProofMgr.cxx:603
 TXProofMgr.cxx:604
 TXProofMgr.cxx:605
 TXProofMgr.cxx:606
 TXProofMgr.cxx:607
 TXProofMgr.cxx:608
 TXProofMgr.cxx:609
 TXProofMgr.cxx:610
 TXProofMgr.cxx:611
 TXProofMgr.cxx:612
 TXProofMgr.cxx:613
 TXProofMgr.cxx:614
 TXProofMgr.cxx:615
 TXProofMgr.cxx:616
 TXProofMgr.cxx:617
 TXProofMgr.cxx:618
 TXProofMgr.cxx:619
 TXProofMgr.cxx:620
 TXProofMgr.cxx:621
 TXProofMgr.cxx:622
 TXProofMgr.cxx:623
 TXProofMgr.cxx:624
 TXProofMgr.cxx:625
 TXProofMgr.cxx:626
 TXProofMgr.cxx:627
 TXProofMgr.cxx:628
 TXProofMgr.cxx:629
 TXProofMgr.cxx:630
 TXProofMgr.cxx:631
 TXProofMgr.cxx:632
 TXProofMgr.cxx:633
 TXProofMgr.cxx:634
 TXProofMgr.cxx:635
 TXProofMgr.cxx:636
 TXProofMgr.cxx:637
 TXProofMgr.cxx:638
 TXProofMgr.cxx:639
 TXProofMgr.cxx:640
 TXProofMgr.cxx:641
 TXProofMgr.cxx:642
 TXProofMgr.cxx:643
 TXProofMgr.cxx:644
 TXProofMgr.cxx:645
 TXProofMgr.cxx:646
 TXProofMgr.cxx:647
 TXProofMgr.cxx:648
 TXProofMgr.cxx:649
 TXProofMgr.cxx:650
 TXProofMgr.cxx:651
 TXProofMgr.cxx:652
 TXProofMgr.cxx:653
 TXProofMgr.cxx:654
 TXProofMgr.cxx:655
 TXProofMgr.cxx:656
 TXProofMgr.cxx:657
 TXProofMgr.cxx:658
 TXProofMgr.cxx:659
 TXProofMgr.cxx:660
 TXProofMgr.cxx:661
 TXProofMgr.cxx:662
 TXProofMgr.cxx:663
 TXProofMgr.cxx:664
 TXProofMgr.cxx:665
 TXProofMgr.cxx:666
 TXProofMgr.cxx:667
 TXProofMgr.cxx:668
 TXProofMgr.cxx:669
 TXProofMgr.cxx:670
 TXProofMgr.cxx:671
 TXProofMgr.cxx:672
 TXProofMgr.cxx:673
 TXProofMgr.cxx:674
 TXProofMgr.cxx:675
 TXProofMgr.cxx:676
 TXProofMgr.cxx:677
 TXProofMgr.cxx:678
 TXProofMgr.cxx:679
 TXProofMgr.cxx:680
 TXProofMgr.cxx:681
 TXProofMgr.cxx:682
 TXProofMgr.cxx:683
 TXProofMgr.cxx:684
 TXProofMgr.cxx:685
 TXProofMgr.cxx:686
 TXProofMgr.cxx:687
 TXProofMgr.cxx:688
 TXProofMgr.cxx:689
 TXProofMgr.cxx:690
 TXProofMgr.cxx:691
 TXProofMgr.cxx:692
 TXProofMgr.cxx:693
 TXProofMgr.cxx:694
 TXProofMgr.cxx:695
 TXProofMgr.cxx:696
 TXProofMgr.cxx:697
 TXProofMgr.cxx:698
 TXProofMgr.cxx:699
 TXProofMgr.cxx:700
 TXProofMgr.cxx:701
 TXProofMgr.cxx:702
 TXProofMgr.cxx:703
 TXProofMgr.cxx:704
 TXProofMgr.cxx:705
 TXProofMgr.cxx:706
 TXProofMgr.cxx:707
 TXProofMgr.cxx:708
 TXProofMgr.cxx:709
 TXProofMgr.cxx:710
 TXProofMgr.cxx:711
 TXProofMgr.cxx:712
 TXProofMgr.cxx:713
 TXProofMgr.cxx:714
 TXProofMgr.cxx:715
 TXProofMgr.cxx:716
 TXProofMgr.cxx:717
 TXProofMgr.cxx:718
 TXProofMgr.cxx:719
 TXProofMgr.cxx:720
 TXProofMgr.cxx:721
 TXProofMgr.cxx:722
 TXProofMgr.cxx:723
 TXProofMgr.cxx:724
 TXProofMgr.cxx:725
 TXProofMgr.cxx:726
 TXProofMgr.cxx:727
 TXProofMgr.cxx:728
 TXProofMgr.cxx:729
 TXProofMgr.cxx:730
 TXProofMgr.cxx:731
 TXProofMgr.cxx:732
 TXProofMgr.cxx:733
 TXProofMgr.cxx:734
 TXProofMgr.cxx:735
 TXProofMgr.cxx:736
 TXProofMgr.cxx:737
 TXProofMgr.cxx:738
 TXProofMgr.cxx:739
 TXProofMgr.cxx:740
 TXProofMgr.cxx:741
 TXProofMgr.cxx:742
 TXProofMgr.cxx:743
 TXProofMgr.cxx:744
 TXProofMgr.cxx:745
 TXProofMgr.cxx:746
 TXProofMgr.cxx:747
 TXProofMgr.cxx:748
 TXProofMgr.cxx:749
 TXProofMgr.cxx:750
 TXProofMgr.cxx:751
 TXProofMgr.cxx:752
 TXProofMgr.cxx:753
 TXProofMgr.cxx:754