ROOT logo
// @(#)root/io:$Id$
// Author: Rene Brun   22/01/2007

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

//______________________________________________________________________________
//
// A ROOT file is structured in Directories (like a file system).
// Each Directory has a list of Keys (see TKeys) and a list of objects
// in memory. A Key is a small object that describes the type and location
// of a persistent object in a file. The persistent object may be a directory.
//Begin_Html
/*
<img src="gif/fildir.gif">
*/
//End_Html
//
//      The structure of a file is shown in TFile::TFile
//______________________________________________________________________________

#include "Riostream.h"
#include "Strlen.h"
#include "TDirectoryFile.h"
#include "TFile.h"
#include "TBufferFile.h"
#include "TMapFile.h"
#include "TClassTable.h"
#include "TInterpreter.h"
#include "THashList.h"
#include "TBrowser.h"
#include "TFree.h"
#include "TKey.h"
#include "TStreamerInfo.h"
#include "TROOT.h"
#include "TError.h"
#include "Bytes.h"
#include "TClass.h"
#include "TRegexp.h"
#include "TSystem.h"
#include "TStreamerElement.h"
#include "TProcessUUID.h"
#include "TVirtualMutex.h"

const UInt_t kIsBigFile = BIT(16);
const Int_t  kMaxLen = 2048;

ClassImp(TDirectoryFile)


//______________________________________________________________________________
TDirectoryFile::TDirectoryFile() : TDirectory()
   , fModified(kFALSE), fWritable(kFALSE), fNbytesKeys(0), fNbytesName(0)
   , fBufferSize(0), fSeekDir(0), fSeekParent(0), fSeekKeys(0)
   , fFile(0), fKeys(0)
{
//*-*-*-*-*-*-*-*-*-*-*-*Directory default constructor-*-*-*-*-*-*-*-*-*-*-*-*
//*-*                    =============================

}

//______________________________________________________________________________
TDirectoryFile::TDirectoryFile(const char *name, const char *title, Option_t *classname, TDirectory* initMotherDir)
           : TDirectory()
   , fModified(kFALSE), fWritable(kFALSE), fNbytesKeys(0), fNbytesName(0)
   , fBufferSize(0), fSeekDir(0), fSeekParent(0), fSeekKeys(0)
   , fFile(0), fKeys(0)
{
//*-*-*-*-*-*-*-*-*-*-*-* Create a new DirectoryFile *-*-*-*-*-*-*-*-*-*-*-*-*-*
//*-*                     ==========================
//  A new directory with name,title is created in the current directory
//  The directory header information is immediatly saved on the file
//  A new key is added in the parent directory
//
//  When this constructor is called from a class directly derived
//  from TDirectoryFile, the third argument classname MUST be specified.
//  In this case, classname must be the name of the derived class.
//
//  Note that the directory name cannot contain slashes.

   fName = name;
   fTitle = title;

   if (initMotherDir==0) initMotherDir = gDirectory;

   if (strchr(name,'/')) {
      ::Error("TDirectoryFile","directory name (%s) cannot contain a slash", name);
      gDirectory = 0;
      return;
   }
   if (strlen(GetName()) == 0) {
      ::Error("TDirectoryFile","directory name cannot be \"\"");
      gDirectory = 0;
      return;
   }

   Build(initMotherDir ? initMotherDir->GetFile() : 0, initMotherDir);

   TDirectory* motherdir = GetMotherDir();
   TFile* f = GetFile();

   if ((motherdir==0) || (f==0)) return;
   if (!f->IsWritable()) return; //*-* in case of a directory in memory
   if (motherdir->GetKey(name)) {
      Error("TDirectoryFile","An object with name %s exists already", name);
      return;
   }
   TClass *cl = 0;
   if (strlen(classname) != 0) {
      cl = TClass::GetClass(classname);
      if (!cl) {
         Error("TDirectoryFile","Invalid class name: %s",classname);
         return;
      }
   } else { 
      cl = IsA();
   }

   fBufferSize  = 0;
   fWritable    = kTRUE;

   Init(cl);

   fModified = kFALSE;

   R__LOCKGUARD2(gROOTMutex);
   gROOT->GetUUIDs()->AddUUID(fUUID,this);   
}

//______________________________________________________________________________
void TDirectoryFile::Init(TClass *cl)
{
   // Initialize the key associated with this directory (and the related 
   // data members.

   TFile* f = GetFile();
   if (f->IsBinary()) {
      if (cl==0) {
         cl = IsA();
      }
      TDirectory* motherdir = GetMotherDir();
      fSeekParent  = f->GetSeekDir();
      Int_t nbytes = TDirectoryFile::Sizeof();
      TKey *key    = new TKey(fName,fTitle,cl,nbytes,motherdir);
      fNbytesName  = key->GetKeylen();
      fSeekDir     = key->GetSeekKey();
      if (fSeekDir == 0) return;
      char *buffer = key->GetBuffer();
      TDirectoryFile::FillBuffer(buffer);
      Int_t cycle = motherdir ? motherdir->AppendKey(key) : 0;
      key->WriteFile(cycle);
   } else {
      fSeekParent  = 0;
      fNbytesName  = 0;
      fSeekDir     = f->DirCreateEntry(this);
      if (fSeekDir == 0) return;
   }

}

//______________________________________________________________________________
TDirectoryFile::TDirectoryFile(const TDirectoryFile & directory) : TDirectory(directory)
   , fModified(kFALSE), fWritable(kFALSE), fNbytesKeys(0), fNbytesName(0)
   , fBufferSize(0), fSeekDir(0), fSeekParent(0), fSeekKeys(0)
   , fFile(0), fKeys(0)
{
   // Copy constructor.
   ((TDirectoryFile&)directory).Copy(*this);
}

//______________________________________________________________________________
TDirectoryFile::~TDirectoryFile()
{
   // -- Destructor.

   if (fKeys) {
      fKeys->Delete("slow");
      SafeDelete(fKeys);
   }

   CleanTargets();

   // Delete our content before we become somewhat invalid
   // since some those objects (TTree for example) needs information
   // from this object.  Note that on some platform after the end
   // of the body (i.e. thus during ~TDirectory which is also 
   // contains this code) the exeuction of 'this->GetFile()' fails
   // to return the 'proper' value (because it uses the wrong 
   // virtual function).
   if (fList) {
      fList->Delete("slow");
      SafeDelete(fList);
   }

   if (gDebug) {
      Info("~TDirectoryFile", "dtor called for %s", GetName());
   }
}

//______________________________________________________________________________
void TDirectoryFile::Append(TObject *obj, Bool_t replace /* = kFALSE */)
{
   // Append object to this directory.
   //
   // If replace is true:
   //   remove any existing objects with the same same (if the name is not ""

   if (obj == 0 || fList == 0) return;

   TDirectory::Append(obj,replace);

   if (!fMother) return;
   if (fMother->IsA() == TMapFile::Class()) {
      TMapFile *mfile = (TMapFile*)fMother;
      mfile->Add(obj);
   }
}

//______________________________________________________________________________
Int_t TDirectoryFile::AppendKey(TKey *key)
{
//*-*-*-*-*-*-*Insert key in the linked list of keys of this directory*-*-*-*
//*-*          =======================================================

   fModified = kTRUE;

   key->SetMotherDir(this);

   // This is a fast hash lookup in case the key does not already exist
   TKey *oldkey = (TKey*)fKeys->FindObject(key->GetName());
   if (!oldkey) {
      fKeys->Add(key);
      return 1;
   }

   // If the key name already exists we have to make a scan for it
   // and insert the new key ahead of the current one
   TObjLink *lnk = fKeys->FirstLink();
   while (lnk) {
      oldkey = (TKey*)lnk->GetObject();
      if (!strcmp(oldkey->GetName(), key->GetName()))
         break;
      lnk = lnk->Next();
   }

   fKeys->AddBefore(lnk, key);
   return oldkey->GetCycle() + 1;
}

//______________________________________________________________________________
void TDirectoryFile::Browse(TBrowser *b)
{
   // Browse the content of the directory.

   TString name;

   if (b) {
      TObject *obj = 0;
      TIter nextin(fList);
      TKey *key = 0, *keyo = 0;
      TIter next(fKeys);

      cd();

      //Add objects that are only in memory
      while ((obj = nextin())) {
         if (fKeys->FindObject(obj->GetName())) continue;
         b->Add(obj, obj->GetName());
      }

      //Add keys
      while ((key = (TKey *) next())) {
         int skip = 0;
         if (!keyo || (keyo && strcmp(keyo->GetName(), key->GetName()))) {
            skip = 0;
            obj = fList->FindObject(key->GetName());

            if (obj) {
               b->Add(obj, obj->GetName());
               if (obj->IsFolder() && !obj->InheritsFrom("TTree"))
                  skip = 1;
            }
         }

         if (!skip) {
            name.Form("%s;%d", key->GetName(), key->GetCycle());
            b->Add(key, name);
         }

         keyo = key;
      }
   }
}

//______________________________________________________________________________
void TDirectoryFile::Build(TFile* motherFile, TDirectory* motherDir)
{
//*-*-*-*-*-*-*-*-*-*-*-*Initialise directory to defaults*-*-*-*-*-*-*-*-*-*
//*-*                    ================================

   // If directory is created via default ctor (when dir is read from file)
   // don't add it here to the directory since its name is not yet known.
   // It will be added to the directory in TKey::ReadObj().

   if (motherDir && strlen(GetName()) != 0) motherDir->Append(this);

   fModified   = kTRUE;
   fWritable   = kFALSE;
   fDatimeC.Set();
   fDatimeM.Set();
   fNbytesKeys = 0;
   fSeekDir    = 0;
   fSeekParent = 0;
   fSeekKeys   = 0;
   fList       = new THashList(100,50);
   fKeys       = new THashList(100,50);
   fMother     = motherDir;
   fFile       = motherFile ? motherFile : TFile::CurrentFile();
   SetBit(kCanDelete);
}

//______________________________________________________________________________
Bool_t TDirectoryFile::cd(const char *path)
{
   // Change current directory to "this" directory . Using path one can
   // change the current directory to "path". The absolute path syntax is:
   // file.root:/dir1/dir2
   // where file.root is the file and /dir1/dir2 the desired subdirectory
   // in the file. Relative syntax is relative to "this" directory. E.g:
   // ../aa. Returns kTRUE in case of success.

   Bool_t ok = TDirectory::cd(path);
   if (ok) TFile::CurrentFile() = fFile;
   return ok;
}

//______________________________________________________________________________
void TDirectoryFile::CleanTargets()
{
   // Clean the pointers to this object (gDirectory, TContext, etc.)


   // After CleanTargets either gFile was changed appropriately
   // by a cd() or needs to be set to zero.
   if (gFile == this) {
      gFile = 0;
   }
   TDirectory::CleanTargets();
}

//______________________________________________________________________________
TObject *TDirectoryFile::CloneObject(const TObject *obj, Bool_t autoadd /* = kTRUE */)
{
   // Make a clone of an object using the Streamer facility.
   // If the object derives from TNamed, this function is called
   // by TNamed::Clone. TNamed::Clone uses the optional argument newname to set
   // a new name to the newly created object.
   // 
   // If autoadd is true and if the object class has a
   // DirectoryAutoAdd function, it will be called at the end of the
   // function with the parameter gDirector.  This usually means that
   // the object will be appended to the current ROOT directory.

   // if no default ctor return immediately (error issued by New())
   char *pobj = (char*)obj->IsA()->New();
   if (!pobj) return 0;

   Int_t baseOffset = obj->IsA()->GetBaseClassOffset(TObject::Class());
   if (baseOffset==-1) {
      // cl does not inherit from TObject.
      // Since this is not supported in this function, the only reason we could reach this code
      // is because something is screwed up in the ROOT code.
      Fatal("CloneObject","Incorrect detection of the inheritance from TObject for class %s.\n",
            obj->IsA()->GetName());
   }
   TObject *newobj = (TObject*)(pobj+baseOffset);

   //create a buffer where the object will be streamed
   {
      // NOTE: do we still need to make this change to gFile?
      // NOTE: This can not be 'gDirectory=0' as at least roofit expect gDirectory to not be null
      // during the streaming ....
      TFile *filsav = gFile;
      gFile = 0;
      const Int_t bufsize = 10000;
      TBufferFile buffer(TBuffer::kWrite,bufsize);
      buffer.MapObject(obj);  //register obj in map to handle self reference
      {
         Bool_t isRef = obj->TestBit(kIsReferenced); 
         ((TObject*)obj)->ResetBit(kIsReferenced);

         ((TObject*)obj)->Streamer(buffer);

         if (isRef) ((TObject*)obj)->SetBit(kIsReferenced);
      }

      // read new object from buffer
      buffer.SetReadMode();
      buffer.ResetMap();
      buffer.SetBufferOffset(0);
      buffer.MapObject(newobj);  //register obj in map to handle self reference
      newobj->Streamer(buffer);
      newobj->ResetBit(kIsReferenced);
      newobj->ResetBit(kCanDelete);
      gFile = filsav;
   }

   if (autoadd) {
      ROOT::DirAutoAdd_t func = obj->IsA()->GetDirectoryAutoAdd();
      if (func) {
         func(newobj,this);
      }  
   }
   return newobj;
}

//______________________________________________________________________________
TObject *TDirectoryFile::FindObjectAnyFile(const char *name) const
{
   // Scan the memory lists of all files for an object with name

   TFile *f;
   R__LOCKGUARD2(gROOTMutex);
   TIter next(gROOT->GetListOfFiles());
   while ((f = (TFile*)next())) {
      TObject *obj = f->GetList()->FindObject(name);
      if (obj) return obj;
   }
   return 0;
}



//______________________________________________________________________________
TDirectory *TDirectoryFile::GetDirectory(const char *apath,
                                         Bool_t printError, const char *funcname)
{
   // Find a directory named "apath".
   // It apath is null or empty, returns "this" directory.
   // Otherwise use the name "apath" to find a directory.
   // The absolute path syntax is:
   //    file.root:/dir1/dir2
   // where file.root is the file and /dir1/dir2 the desired subdirectory
   // in the file. Relative syntax is relative to "this" directory. E.g:
   // ../aa.
   // Returns 0 in case path does not exist.
   // If printError is true, use Error with 'funcname' to issue an error message.

   Int_t nch = 0;
   if (apath) nch = strlen(apath);
   if (!nch) {
      return this;
   }

   if (funcname==0 || strlen(funcname)==0) funcname = "GetDirectory";

   TDirectory *result = this;

   char *path = new char[nch+1]; path[0] = 0;
   if (nch) strlcpy(path,apath,nch+1);
   char *s = (char*)strchr(path, ':');
   if (s) {
      *s = '\0';
      R__LOCKGUARD2(gROOTMutex);
      TDirectory *f = (TDirectory *)gROOT->GetListOfFiles()->FindObject(path);
      if (!f && !strcmp(gROOT->GetName(), path)) f = gROOT;
      if (s) *s = ':';
      if (f) {
         result = f;
         if (s && *(s+1)) result = f->GetDirectory(s+1,printError,funcname);
         delete [] path; return result;
      } else {
         if (printError) Error(funcname, "No such file %s", path);
         delete [] path; return 0;
      }
   }

   // path starts with a slash (assumes current file)
   if (path[0] == '/') {
      TDirectory *td = fFile;
      if (!fFile) td = gROOT;
      result = td->GetDirectory(path+1,printError,funcname);
      delete [] path; return result;
   }

   TDirectoryFile *obj;
   char *slash = (char*)strchr(path,'/');
   if (!slash) {                     // we are at the lowest level
      if (!strcmp(path, "..")) {
         result = GetMotherDir();
         delete [] path; return result;
      }
      GetObject(path,obj);
      if (!obj) {
         if (printError) Error(funcname,"Unknown directory %s", path);
         delete [] path; return 0;
      }

      delete [] path; return obj;
   }

   TString subdir(path);
   slash = (char*)strchr(subdir.Data(),'/');
   *slash = 0;
   //Get object with path from current directory/file
   if (!strcmp(subdir, "..")) {
      TDirectory* mom = GetMotherDir();
      if (mom)
         result = mom->GetDirectory(slash+1,printError,funcname);
      delete [] path; return result;
   }
   GetObject(subdir,obj);
   if (!obj) {
      if (printError) Error(funcname,"Unknown directory %s", subdir.Data());
      delete [] path; return 0;
   }

   result = ((TDirectory*)obj)->GetDirectory(slash+1,printError,funcname);
   delete [] path; return result;
}

//______________________________________________________________________________
void TDirectoryFile::Close(Option_t *)
{
   // -- Delete all objects from memory and directory structure itself.

   if (!fList || !fSeekDir) {
      return;
   }

   // Save the directory key list and header
   Save();

   Bool_t fast = kTRUE;
   TObjLink *lnk = fList->FirstLink();
   while (lnk) {
      if (lnk->GetObject()->IsA() == TDirectoryFile::Class()) {fast = kFALSE;break;}
      lnk = lnk->Next();
   }
   // Delete objects from directory list, this in turn, recursively closes all
   // sub-directories (that were allocated on the heap)
   // if this dir contains subdirs, we must use the slow option for Delete!
   // we must avoid "slow" as much as possible, in particular Delete("slow")
   // with a large number of objects (eg >10^5) would take for ever.
   if (fast) fList->Delete();
   else      fList->Delete("slow");

   // Delete keys from key list (but don't delete the list header)
   if (fKeys) {
      fKeys->Delete("slow");
   }

   CleanTargets();
}

//______________________________________________________________________________
void TDirectoryFile::Delete(const char *namecycle)
{
//*-*-*-*-*-*-*-* Delete Objects or/and keys in a directory *-*-*-*-*-*-*-*
//*-*             =========================================
//   namecycle has the format name;cycle
//   namecycle = "" same as namecycle ="T*"
//   name  = * means all
//   cycle = * means all cycles (memory and keys)
//   cycle = "" or cycle = 9999 ==> apply to a memory object
//   When name=* use T* to delete subdirectories also
//
//   To delete one directory, you must specify the directory cycle,
//      eg.  file.Delete("dir1;1");
//
//   examples:
//     foo   : delete object named foo in memory
//     foo*  : delete all objects with a name starting with foo
//     foo;1 : delete cycle 1 of foo on file
//     foo;* : delete all cycles of foo on file and also from memory
//     *;2   : delete all objects on file having the cycle 2
//     *;*   : delete all objects from memory and file
//    T*;*   : delete all objects from memory and file and all subdirectories
//          WARNING
//    If the key to be deleted contains special characters ("+","^","?", etc
//    that have a special meaning for the regular expression parser (see TRegexp)
//    then you must specify 2 backslash characters to escape the regular expression.
//    For example, if the key to be deleted is namecycle = "C++", you must call
//       mydir.Delete("C\\+\\+")).

   if (gDebug)
     Info("Delete","Call for this = %s namecycle = %s",
               GetName(), (namecycle ? namecycle : "null"));

   TDirectory::TContext ctxt(gDirectory, this);
   Short_t  cycle;
   char     name[kMaxLen];
   DecodeNameCycle(namecycle, name, cycle, kMaxLen);

   Int_t deleteall    = 0;
   Int_t deletetree   = 0;
   if(strcmp(name,"*") == 0)   deleteall = 1;
   if(strcmp(name,"*T") == 0){ deleteall = 1; deletetree = 1;}
   if(strcmp(name,"T*") == 0){ deleteall = 1; deletetree = 1;}
   if(namecycle==0 || strlen(namecycle) == 0){ deleteall = 1; deletetree = 1;}
   TRegexp re(name,kTRUE);
   TString s;
   Int_t deleteOK = 0;

//*-*---------------------Case of Object in memory---------------------
//                        ========================
   if (cycle >= 9999 ) {
      TNamed *idcur;
      TIter   next(fList);
      while ((idcur = (TNamed *) next())) {
         deleteOK = 0;
         s = idcur->GetName();
         if (deleteall || s.Index(re) != kNPOS) {
            deleteOK = 1;
            if (idcur->IsA() == TDirectoryFile::Class()) {
               deleteOK = 2;
               if (!deletetree && deleteall) deleteOK = 0;
            }
         }
         if (deleteOK != 0) {
            fList->Remove(idcur);
            if (deleteOK==2) {
               // read subdirectories to correctly delete them
               if (deletetree)
                  ((TDirectory*) idcur)->ReadAll("dirs");
               idcur->Delete(deletetree ? "T*;*" : "*");
               delete idcur;
            } else
               idcur->Delete(name);
         }
      }
//      if (deleteOK == 2) {
//         Info("Delete","Dir:%lx %s", fList->FindObject(name), name);
//         delete fList->FindObject(name); //deleting a TDirectory
//      }
   }
//*-*---------------------Case of Key---------------------
//                        ===========
   if (cycle != 9999 ) {
      if (IsWritable()) {
         TKey *key;
         TIter nextkey(GetListOfKeys());
         while ((key = (TKey *) nextkey())) {
            deleteOK = 0;
            s = key->GetName();
            if (deleteall || s.Index(re) != kNPOS) {
               if (cycle == key->GetCycle()) deleteOK = 1;
               if (cycle > 9999) deleteOK = 1;
               //if (!strcmp(key->GetClassName(),"TDirectory")) {
               if (strstr(key->GetClassName(),"TDirectory")) {
                  deleteOK = 2;
                  if (!deletetree && deleteall) deleteOK = 0;
                  if (cycle == key->GetCycle()) deleteOK = 2;
               }
            }
            if (deleteOK) {
               if (deleteOK==2) {
                  // read directory with subdirectories to correctly delete and free key structure
                  TDirectory* dir = GetDirectory(key->GetName(), kTRUE, "Delete");
                  if (dir!=0) {
                     dir->Delete("T*;*");
                     fList->Remove(dir);
                     delete dir;
                  }
               }

               key->Delete();
               fKeys->Remove(key);
               fModified = kTRUE;
               delete key;
            }
         }
         TFile* f = GetFile();
         if (fModified && (f!=0)) {
            WriteKeys();            //*-* Write new keys structure
            WriteDirHeader();       //*-* Write new directory header
            f->WriteFree();     //*-* Write new free segments list
            f->WriteHeader();   //*-* Write new file header
         }
      }
   }
}

//______________________________________________________________________________
void TDirectoryFile::FillBuffer(char *&buffer)
{
//*-*-*-*-*-*-*-*-*-*-*-*Encode directory header into output buffer*-*-*-*-*-*
//*-*                    =========================================
   Version_t version = TDirectoryFile::Class_Version();
   if (fSeekKeys > TFile::kStartBigFile) version += 1000;
   tobuf(buffer, version);
   fDatimeC.FillBuffer(buffer);
   fDatimeM.FillBuffer(buffer);
   tobuf(buffer, fNbytesKeys);
   tobuf(buffer, fNbytesName);
   if (version > 1000) {
      tobuf(buffer, fSeekDir);
      tobuf(buffer, fSeekParent);
      tobuf(buffer, fSeekKeys);
   } else {
      tobuf(buffer, (Int_t)fSeekDir);
      tobuf(buffer, (Int_t)fSeekParent);
      tobuf(buffer, (Int_t)fSeekKeys);
   }
   fUUID.FillBuffer(buffer);
   if (fFile && fFile->GetVersion() < 40000) return;
   if (version <=1000) for (Int_t i=0;i<3;i++) tobuf(buffer,Int_t(0));
}

//______________________________________________________________________________
TKey *TDirectoryFile::FindKey(const char *keyname) const
{
   // Find key with name keyname in the current directory

   Short_t  cycle;
   char     name[kMaxLen];

   DecodeNameCycle(keyname, name, cycle, kMaxLen);
   return GetKey(name,cycle);
}

//______________________________________________________________________________
TKey *TDirectoryFile::FindKeyAny(const char *keyname) const
{
   // Find key with name keyname in the current directory or
   // its subdirectories.
   // NOTE that If a key is found, the directory containing the key becomes
   // the current directory

   TDirectory *dirsav = gDirectory;
   Short_t  cycle;
   char     name[kMaxLen];

   DecodeNameCycle(keyname, name, cycle, kMaxLen);

   TIter next(GetListOfKeys());
   TKey *key;
   while ((key = (TKey *) next())) {
      if (!strcmp(name, key->GetName()))
         if ((cycle == 9999) || (cycle >= key->GetCycle()))  {
            ((TDirectory*)this)->cd(); // may be we should not make cd ???
            return key;
         }
   }
   //try with subdirectories
   next.Reset();
   while ((key = (TKey *) next())) {
      //if (!strcmp(key->GetClassName(),"TDirectory")) {
      if (strstr(key->GetClassName(),"TDirectory")) {
         TDirectory* subdir =
           ((TDirectory*)this)->GetDirectory(key->GetName(), kTRUE, "FindKeyAny");
         TKey *k = (subdir!=0) ? subdir->FindKeyAny(keyname) : 0;
         if (k) return k;
      }
   }
   if (dirsav) dirsav->cd();
   return 0;
}

//______________________________________________________________________________
TObject *TDirectoryFile::FindObjectAny(const char *aname) const
{
   // Find object by name in the list of memory objects of the current
   // directory or its sub-directories.
   // After this call the current directory is not changed.
   // To automatically set the current directory where the object is found,
   // use FindKeyAny(aname)->ReadObj().

   //object may be already in the list of objects in memory
   TObject *obj = TDirectory::FindObjectAny(aname);
   if (obj) return obj;

   TDirectory *dirsav = gDirectory;
   Short_t  cycle;
   char     name[kMaxLen];

   DecodeNameCycle(aname, name, cycle, kMaxLen);

   TIter next(GetListOfKeys());
   TKey *key;
   //may be a key in the current directory
   while ((key = (TKey *) next())) {
      if (!strcmp(name, key->GetName())) {
         if (cycle == 9999)             return key->ReadObj();
         if (cycle >= key->GetCycle())  return key->ReadObj();
      }
   }
   //try with subdirectories
   next.Reset();
   while ((key = (TKey *) next())) {
      //if (!strcmp(key->GetClassName(),"TDirectory")) {
      if (strstr(key->GetClassName(),"TDirectory")) {
         TDirectory* subdir =
           ((TDirectory*)this)->GetDirectory(key->GetName(), kTRUE, "FindKeyAny");
         TKey *k = subdir==0 ? 0 : subdir->FindKeyAny(aname);
         if (k) { if (dirsav) dirsav->cd(); return k->ReadObj();}
      }
   }
   if (dirsav) dirsav->cd();
   return 0;
}

//______________________________________________________________________________
TObject *TDirectoryFile::Get(const char *namecycle)
{
//  return pointer to object identified by namecycle
//
//   namecycle has the format name;cycle
//   name  = * is illegal, cycle = * is illegal
//   cycle = "" or cycle = 9999 ==> apply to a memory object
//
//   examples:
//     foo   : get object named foo in memory
//             if object is not in memory, try with highest cycle from file
//     foo;1 : get cycle 1 of foo on file
//
//  The retrieved object should in principle derive from TObject.
//  If not, the function TDirectoryFile::GetObject should be called.
//  However, this function will still work for a non-TObject, providing that
//  the calling application cast the return type to the correct type (which
//  is the actual type of the object).
//
//  NOTE:
//  The method GetObject offers better protection and avoids the need
//  for any cast:
//      MyClass *obj;
//      directory->GetObject("some object",obj);
//      if (obj) { ... the object exist and inherits from MyClass ... }
//
//  VERY IMPORTANT NOTE:
//  In case the class of this object derives from TObject but not
//  as a first inheritance, one must use dynamic_cast<>().
//  Example 1: Normal case:
//      class MyClass : public TObject, public AnotherClass
//   then on return, one can do:
//      MyClass *obj = (MyClass*)directory->Get("some object of MyClass");
//
//  Example 2: Special case:
//      class MyClass : public AnotherClass, public TObject
//  then on return, one must do:
//      MyClass *obj = dynamic_cast<MyClass*>(directory->Get("some object of MyClass"));
//
//  Of course, dynamic_cast<> can also be used in the example 1.
//

   Short_t  cycle;
   char     name[kMaxLen];

   DecodeNameCycle(namecycle, name, cycle, kMaxLen);
   Int_t nch = strlen(name);
   for (Int_t i = nch-1; i > 0; i--) {
      if (name[i] == '/') {
         name[i] = 0;
         TDirectory* dirToSearch=GetDirectory(name);
         const char *subnamecycle = namecycle + i + 1;
         name[i] = '/';
         return dirToSearch?dirToSearch->Get(subnamecycle):0;
      }
   }
   const char *namobj = name;

//*-*---------------------Case of Object in memory---------------------
//                        ========================
   TObject *idcur = fList ? fList->FindObject(namobj) : nullptr;
   if (idcur) {
      if (idcur==this && strlen(namobj)!=0) {
         // The object has the same name has the directory and
         // that's what we picked-up!  We just need to ignore
         // it ...
         idcur = 0;
      } else if (cycle == 9999) {
         return idcur;
      } else {
         if (idcur->InheritsFrom(TCollection::Class()))
            idcur->Delete();  // delete also list elements
         delete idcur;
         idcur = 0;
      }
   }

//*-*---------------------Case of Key---------------------
//                        ===========
   TKey *key;
   TIter nextkey(GetListOfKeys());
   while ((key = (TKey *) nextkey())) {
      if (strcmp(namobj,key->GetName()) == 0) {
         if ((cycle == 9999) || (cycle == key->GetCycle())) {
            TDirectory::TContext ctxt(this);
            idcur = key->ReadObj();
            break;
         }
      }
   }

   return idcur;
}

//______________________________________________________________________________
void *TDirectoryFile::GetObjectUnchecked(const char *namecycle)
{
// return pointer to object identified by namecycle.
// The returned object may or may not derive from TObject.
//
//   namecycle has the format name;cycle
//   name  = * is illegal, cycle = * is illegal
//   cycle = "" or cycle = 9999 ==> apply to a memory object
//
//  VERY IMPORTANT NOTE:
//  The calling application must cast the returned object to
//  the final type, eg
//      MyClass *obj = (MyClass*)directory->GetObject("some object of MyClass");

   return GetObjectChecked(namecycle,(TClass*)0);
}

//_________________________________________________________________________________
void *TDirectoryFile::GetObjectChecked(const char *namecycle, const char* classname)
{
// See documentation of TDirectoryFile::GetObjectCheck(const char *namecycle, const TClass *cl)

   return GetObjectChecked(namecycle,TClass::GetClass(classname));
}


//____________________________________________________________________________
void *TDirectoryFile::GetObjectChecked(const char *namecycle, const TClass* expectedClass)
{
// return pointer to object identified by namecycle if and only if the actual
// object is a type suitable to be stored as a pointer to a "expectedClass"
// If expectedClass is null, no check is performed.
//
//   namecycle has the format name;cycle
//   name  = * is illegal, cycle = * is illegal
//   cycle = "" or cycle = 9999 ==> apply to a memory object
//
//  VERY IMPORTANT NOTE:
//  The calling application must cast the returned pointer to
//  the type described by the 2 arguments (i.e. cl):
//      MyClass *obj = (MyClass*)directory->GetObjectChecked("some object of MyClass","MyClass"));
//
//  Note: We recommend using the method TDirectoryFile::GetObject:
//      MyClass *obj = 0;
//      directory->GetObject("some object inheriting from MyClass",obj);
//      if (obj) { ... we found what we are looking for ... }

   Short_t  cycle;
   char     name[kMaxLen];

   DecodeNameCycle(namecycle, name, cycle, kMaxLen);
   Int_t nch = strlen(name);
   for (Int_t i = nch-1; i > 0; i--) {
      if (name[i] == '/') {
         name[i] = 0;
         TDirectory* dirToSearch=GetDirectory(name);
         const char *subnamecycle = namecycle + i + 1;
         name[i] = '/';
         if (dirToSearch) {
            return dirToSearch->GetObjectChecked(subnamecycle, expectedClass);
         } else {
            return 0;
         }
      }
   }
   const char *namobj = name;

//*-*---------------------Case of Object in memory---------------------
//                        ========================
   if (expectedClass==0 || expectedClass->InheritsFrom(TObject::Class())) {
      TObject *objcur = fList ? fList->FindObject(namobj) : 0;
      if (objcur) {
         if (objcur==this && strlen(namobj)!=0) {
            // The object has the same name has the directory and
            // that's what we picked-up!  We just need to ignore
            // it ...
            objcur = 0;
         } else if (cycle == 9999) {
            // Check type
            if (expectedClass && objcur->IsA()->GetBaseClassOffset(expectedClass) == -1) return 0;
            else return objcur;
         } else {
            if (objcur->InheritsFrom(TCollection::Class()))
               objcur->Delete();  // delete also list elements
            delete objcur;
            objcur = 0;
         }
      }
   }

//*-*---------------------Case of Key---------------------
//                        ===========
   void *idcur = 0;
   TKey *key;
   TIter nextkey(GetListOfKeys());
   while ((key = (TKey *) nextkey())) {
      if (strcmp(namobj,key->GetName()) == 0) {
         if ((cycle == 9999) || (cycle == key->GetCycle())) {
            TDirectory::TContext ctxt(this);
            idcur = key->ReadObjectAny(expectedClass);
            break;
         }
      }
   }

   return idcur;
}

//______________________________________________________________________________
Int_t TDirectoryFile::GetBufferSize() const
{
   // Return the buffer size to create new TKeys.
   // If the stored fBufferSize is null, the value returned is the average
   // buffer size of objects in the file so far.

   if (fBufferSize <= 0) return fFile->GetBestBuffer();
   else                  return fBufferSize;
}


//______________________________________________________________________________
TKey *TDirectoryFile::GetKey(const char *name, Short_t cycle) const
{
//*-*-*-*-*-*-*-*-*-*-*Return pointer to key with name,cycle*-*-*-*-*-*-*-*
//*-*                  =====================================
//  if cycle = 9999 returns highest cycle
//

   // TIter::TIter() already checks for null pointers
   TIter next( ((THashList *)(GetListOfKeys()))->GetListForObject(name) );

   TKey *key;
   while (( key = (TKey *)next() )) {
      if (!strcmp(name, key->GetName())) {
         if ((cycle == 9999) || (cycle >= key->GetCycle()))
            return key;
      }
   }

   return 0;
}

//______________________________________________________________________________
void TDirectoryFile::ls(Option_t *option) const
{
//*-*-*-*-*-*-*-*-*-*-*-*List Directory contents*-*-*-*-*-*-*-*-*-*-*-*-*-*
//*-*                    =======================
//  Indentation is used to identify the directory tree
//  Subdirectories are listed first, then objects in memory, then objects on the file
//
//  The option can has the following format:
//     [-d |-m][<regexp>]
//  Option -d means: only list objects in the file
//         -m means: only list objects in memory
//  The <regexp> will be used to match the name of the objects.
//  By default memory and disk objects are listed.
//
   TROOT::IndentLevel();
   cout <<ClassName()<<"*\t\t"<<GetName()<<"\t"<<GetTitle()<<endl;
   TROOT::IncreaseDirLevel();

   TString opta = option;
   TString opt  = opta.Strip(TString::kBoth);
   Bool_t memobj  = kTRUE;
   Bool_t diskobj = kTRUE;
   TString reg = "*";
   if (opt.BeginsWith("-m")) {
      diskobj = kFALSE;
      if (opt.Length() > 2)
         reg = opt(2,opt.Length());
   } else if (opt.BeginsWith("-d")) {
      memobj  = kFALSE;
      if (opt.Length() > 2)
         reg = opt(2,opt.Length());
   } else if (!opt.IsNull())
      reg = opt;

   TRegexp re(reg, kTRUE);

   if (memobj) {
      TObject *obj;
      TIter nextobj(fList);
      while ((obj = (TObject *) nextobj())) {
         TString s = obj->GetName();
         if (s.Index(re) == kNPOS) continue;
         obj->ls(option);            //*-* Loop on all the objects in memory
      }
   }

   if (diskobj) {
      TKey *key;
      TIter next(GetListOfKeys());
      while ((key = (TKey *) next())) {
         TString s = key->GetName();
         if (s.Index(re) == kNPOS) continue;
         key->ls();                 //*-* Loop on all the keys
      }
   }
   TROOT::DecreaseDirLevel();
}

//______________________________________________________________________________
TFile *TDirectoryFile::OpenFile(const char *name, Option_t *option,const char *ftitle, Int_t compress, Int_t netopt)
{
   // Interface to TFile::Open

   return TFile::Open(name,option,ftitle,compress,netopt);

}


//______________________________________________________________________________
TDirectory *TDirectoryFile::mkdir(const char *name, const char *title)
{
   // Create a sub-directory and return a pointer to the created directory.
   // Returns 0 in case of error.
   // Returns 0 if a directory with the same name already exists.
   // Note that the directory name may be of the form "a/b/c" to create a hierarchy of directories.
   // In this case, the function returns the pointer to the "a" directory if the operation is successful.

   if (!name || !title || !strlen(name)) return 0;
   if (!strlen(title)) title = name;
   if (GetKey(name)) {
      Error("mkdir","An object with name %s exists already",name);
      return 0;
   }
   TDirectoryFile *newdir = 0;
   if (const char *slash = strchr(name,'/')) {
      Long_t size = Long_t(slash-name);
      char *workname = new char[size+1];
      strncpy(workname, name, size);
      workname[size] = 0;
      TDirectoryFile *tmpdir;
      GetObject(workname,tmpdir);
      if (!tmpdir) {
         tmpdir = (TDirectoryFile*)mkdir(workname,title);
         if (!tmpdir) return 0;
      }
      if (!newdir) newdir = tmpdir;
      tmpdir->mkdir(slash+1);
      delete[] workname;
      return newdir;
   }

   TDirectory::TContext ctxt(this);

   newdir = new TDirectoryFile(name, title, "", this);

   return newdir;
}

//______________________________________________________________________________
void TDirectoryFile::Purge(Short_t)
{
   // Purge lowest key cycles in a directory.
   // By default, only the highest cycle of a key is kept. Keys for which
   // the "KEEP" flag has been set are not removed. See TKey::Keep().

   if (!IsWritable()) return;

   TDirectory::TContext ctxt(this);

   TKey  *key;
   TIter  prev(GetListOfKeys(), kIterBackward);

   while ((key = (TKey*)prev())) {      // reverse loop on keys
      TKey *keyprev = (TKey*)GetListOfKeys()->Before(key);
      if (!keyprev) break;
      if (key->GetKeep() == 0) {
         if (strcmp(key->GetName(), keyprev->GetName()) == 0) {
            key->Delete(); // Remove from the file.
            delete key;    // Remove from memory.
         }
      }
   }
   TFile* f = GetFile();
   if (fModified && (f!=0)) {
      WriteKeys();                   // Write new keys structure
      WriteDirHeader();              // Write new directory header
      f->WriteFree();                // Write new free segments list
      f->WriteHeader();              // Write new file header
   }
}

//______________________________________________________________________________
void TDirectoryFile::ReadAll(Option_t* opt)
{
   // Read objects from a ROOT db file directory into memory.
   // If an object is already in memory, the memory copy is deleted
   // and the object is again read from the file.
   // If opt=="dirs", only subdirectories will be read
   // If opt=="dirs*" complete directory tree will be read

   TDirectory::TContext ctxt(this);

   TKey *key;
   TIter next(GetListOfKeys());

   Bool_t readdirs = ((opt!=0) && ((strcmp(opt,"dirs")==0) || (strcmp(opt,"dirs*")==0)));

   if (readdirs)
      while ((key = (TKey *) next())) {

         //if (strcmp(key->GetClassName(),"TDirectory")!=0) continue;
         if (strstr(key->GetClassName(),"TDirectory")==0) continue;

         TDirectory *dir = GetDirectory(key->GetName(), kTRUE, "ReadAll");

         if ((dir!=0) && (strcmp(opt,"dirs*")==0)) dir->ReadAll("dirs*");
      }
   else
      while ((key = (TKey *) next())) {
         TObject *thing = GetList()->FindObject(key->GetName());
         if (thing) { delete thing; }
         key->ReadObj();
      }
}

//______________________________________________________________________________
Int_t TDirectoryFile::ReadKeys(Bool_t forceRead)
{
//*-*-*-*-*-*-*-*-*-*-*-*-*Read the KEYS linked list*-*-*-*-*-*-*-*-*-*-*-*-*
//*-*                      =========================
//  Every directory has a linked list (fKeys). This linked list has been
//  written on the file via WriteKeys as a single data record.
//
//  It is interesting to call this function in the following situation.
//  Assume another process1 is connecting this directory in Update mode
//    -Process1 is adding/updating objects in this directory
//    -You want to see the latest status from process1.
//  Example Process1:
//    obj1.Write();
//    obj2.Write();
//    gDirectory->SaveSelf();
//
//  Example Process2
//    gDirectory->ReadKeys();
//    obj1->Draw();
//
//  This is an efficient way (without opening/closing files) to view
//  the latest updates of a file being modified by another process
//  as it is typically the case in a data acquisition system.

   if (fFile==0) return 0;

   if (!fFile->IsBinary())
      return fFile->DirReadKeys(this);

   TDirectory::TContext ctxt(this);

   char *buffer;
   if (forceRead) {
      fKeys->Delete();
      //In case directory was updated by another process, read new
      //position for the keys
      Int_t nbytes = fNbytesName + TDirectoryFile::Sizeof();
      char *header = new char[nbytes];
      buffer       = header;
      fFile->Seek(fSeekDir);
      if ( fFile->ReadBuffer(buffer,nbytes) ) {
         // ReadBuffer return kTRUE in case of failure.
         delete [] header;
         return 0;
      }
      buffer += fNbytesName;
      Version_t versiondir;
      frombuf(buffer,&versiondir);
      fDatimeC.ReadBuffer(buffer);
      fDatimeM.ReadBuffer(buffer);
      frombuf(buffer, &fNbytesKeys);
      frombuf(buffer, &fNbytesName);
      if (versiondir > 1000) {
         frombuf(buffer, &fSeekDir);
         frombuf(buffer, &fSeekParent);
         frombuf(buffer, &fSeekKeys);
      } else {
         Int_t sdir,sparent,skeys;
         frombuf(buffer, &sdir);    fSeekDir    = (Long64_t)sdir;
         frombuf(buffer, &sparent); fSeekParent = (Long64_t)sparent;
         frombuf(buffer, &skeys);   fSeekKeys   = (Long64_t)skeys;
      }
      delete [] header;
   }

   Int_t nkeys = 0;
   Long64_t fsize = fFile->GetSize();
   if ( fSeekKeys >  0) {
      TKey *headerkey    = new TKey(fSeekKeys, fNbytesKeys, this);
      headerkey->ReadFile();
      buffer = headerkey->GetBuffer();
      headerkey->ReadKeyBuffer(buffer);

      TKey *key;
      frombuf(buffer, &nkeys);
      for (Int_t i = 0; i < nkeys; i++) {
         key = new TKey(this);
         key->ReadKeyBuffer(buffer);
         if (key->GetSeekKey() < 64 || key->GetSeekKey() > fsize) {
            Error("ReadKeys","reading illegal key, exiting after %d keys",i);
            fKeys->Remove(key);
            nkeys = i;
            break;
         }
         if (key->GetSeekPdir() < 64 || key->GetSeekPdir() > fsize) {
            Error("ReadKeys","reading illegal key, exiting after %d keys",i);
            fKeys->Remove(key);
            nkeys = i;
            break;
         }
         fKeys->Add(key);
      }
      delete headerkey;
   }

   return nkeys;
}


//______________________________________________________________________________
Int_t TDirectoryFile::ReadTObject(TObject *obj, const char *keyname)
{
   // Read object with keyname from the current directory
   // Read contents of object with specified name from the current directory.
   // First the key with keyname is searched in the current directory,
   // next the key buffer is deserialized into the object.
   // The object must have been created before via the default constructor.
   // See TObject::Write().

   if (!fFile) { Error("Read","No file open"); return 0; }
   TKey *key = 0;
   TIter nextkey(GetListOfKeys());
   while ((key = (TKey *) nextkey())) {
      if (strcmp(keyname,key->GetName()) == 0) {
         return key->Read(obj);
      }
   }
   Error("Read","Key not found"); 
   return 0;
}

//______________________________________________________________________________
void TDirectoryFile::ResetAfterMerge(TFileMergeInfo *info)
{
   // Reset the TDirectory after its content has been merged into another
   // Directory.  This returns the TDirectoryFile object back to its state
   // before any data has been written to the file.
   // The object in the in-memory list are assumed to also have been reset.

   // There is nothing to reset in the base class (TDirectory) since
   // we do want to key the list of in-memory object as is.
   fModified = kFALSE;
   // Does not change: fWritable
   fDatimeC.Set();
   fDatimeM.Set();
   fNbytesKeys = 0; // updated when the keys are written
   fNbytesName = 0; // updated by Init
   // Does not change (user customization): fBufferSize;
   fSeekDir = 0;    // updated by Init
   fSeekParent = 0; // updated by Init
   fSeekKeys = 0;   // updated by Init
   // Does not change: fFile
   TKey *key = (TKey*)fKeys->FindObject(fName);
   TClass *cl = IsA();
   if (key) {
      cl = TClass::GetClass(key->GetClassName());
   }
   // NOTE: We should check that the content is really mergeable and in 
   // the in-mmeory list, before deleting the keys.
   if (fKeys) {
      fKeys->Delete("slow");
   }

   Init(cl);

   // Do the same with the sub-directories.
   TIter   next(GetList());
   TObject *idcur;
   while ((idcur = next())) {
      if (idcur->IsA() == TDirectoryFile::Class()) {
         ((TDirectoryFile*)idcur)->ResetAfterMerge(info);
      }
   }

}

//______________________________________________________________________________
void TDirectoryFile::rmdir(const char *name)
{
   // Removes subdirectory from the directory
   // When diredctory is deleted, all keys in all subdirectories will be
   // read first and deleted from file (if exists)
   // Equivalent call is Delete("name;*");

   if ((name==0) || (*name==0)) return;

   TString mask(name);
   mask+=";*";
   Delete(mask);
}

//______________________________________________________________________________
void TDirectoryFile::Save()
{
//*-*-*-*-*-*-*-*-*-*Save recursively all directory keys and headers-*-*-*-*-*
//*-*                ===============================================

   TDirectory::TContext ctxt(this);

   SaveSelf();

   // recursively save all sub-directories
   if (fList) {
      TObject *idcur;
      TIter    next(fList);
      while ((idcur = next())) {
         if (idcur->InheritsFrom(TDirectoryFile::Class())) {
            TDirectoryFile *dir = (TDirectoryFile*)idcur;
            dir->Save();
         }
      }
   }
}

//______________________________________________________________________________
Int_t TDirectoryFile::SaveObjectAs(const TObject *obj, const char *filename, Option_t *option) const
{
   // Save object in filename,
   // if filename is 0 or "", a file with "objectname.root" is created.
   // The name of the key is the object name.
   // If the operation is successful, it returns the number of bytes written to the file
   // otherwise it returns 0.
   // By default a message is printed. Use option "q" to not print the message.

   if (!obj) return 0;
   TDirectory *dirsav = gDirectory;
   TString fname = filename;
   if (!filename || strlen(filename) == 0) {
      fname.Form("%s.root",obj->GetName());
   }
   TFile *local = TFile::Open(fname.Data(),"recreate");
   if (!local) return 0;
   Int_t nbytes = obj->Write();
   delete local;
   if (dirsav) dirsav->cd();
   TString opt = option;
   opt.ToLower();
   if (!opt.Contains("q")) {
      if (!gSystem->AccessPathName(fname.Data())) obj->Info("SaveAs", "ROOT file %s has been created", fname.Data());
   }
   return nbytes;
}

//______________________________________________________________________________
void TDirectoryFile::SaveSelf(Bool_t force)
{
//*-*-*-*-*-*-*-*-*-*Save Directory keys and header*-*-*-*-*-*-*-*-*-*-*-*
//*-*                ==============================
//  If the directory has been modified (fModified set), write the keys
//  and the directory header. This function assumes the cd is correctly set.
//
//  It is recommended to use this function in the following situation:
//  Assume a process1 using a directory in Update mode
//    -New objects or modified objects have been written to the directory
//    -You do not want to close the file
//    -You want your changes be visible from another process2 already connected
//     to this directory in read mode
//    -Call this function
//    -In process2, use TDirectoryFile::ReadKeys to refresh the directory

   if (IsWritable() && (fModified || force) && fFile) {
      Bool_t dowrite = kTRUE;
      if (fFile->GetListOfFree())
        dowrite = fFile->GetListOfFree()->First() != 0;
      if (dowrite) {
         TDirectory *dirsav = gDirectory;
         if (dirsav != this) cd();
         WriteKeys();          //*-*- Write keys record
         WriteDirHeader();     //*-*- Update directory record
         if (dirsav && dirsav != this) dirsav->cd();
      }
   }
}

//______________________________________________________________________________
void TDirectoryFile::SetBufferSize(Int_t bufsize)
{
   // set the default buffer size when creating new TKeys
   // see also TDirectoryFile::GetBufferSize

   fBufferSize = bufsize;
}

//______________________________________________________________________________
void TDirectoryFile::SetTRefAction(TObject *ref, TObject *parent)
{
   // Find the action to be executed in the dictionary of the parent class
   // and store the corresponding exec number into fBits.
   // This function searches a data member in the class of parent with an
   // offset corresponding to this.
   // If a comment "TEXEC:" is found in the comment field of the data member,
   // the function stores the exec identifier of the exec statement
   // following this keyword.

   Int_t offset = (char*)ref - (char*)parent;
   TClass *cl = parent->IsA();
   cl->BuildRealData(parent);
   TStreamerInfo *info = (TStreamerInfo*)cl->GetStreamerInfo();
   TIter next(info->GetElements());
   TStreamerElement *element;
   while((element = (TStreamerElement*)next())) {
      if (element->GetOffset() != offset) continue;
      Int_t execid = element->GetExecID();
      if (execid > 0) ref->SetBit(execid << 8);
      return;
   }
}

//______________________________________________________________________________
void TDirectoryFile::SetWritable(Bool_t writable)
{
//  Set the new value of fWritable recursively

   TDirectory::TContext ctxt(this);

   fWritable = writable;

   // recursively set all sub-directories
   if (fList) {
      TObject *idcur;
      TIter    next(fList);
      while ((idcur = next())) {
         if (idcur->InheritsFrom(TDirectoryFile::Class())) {
            TDirectoryFile *dir = (TDirectoryFile*)idcur;
            dir->SetWritable(writable);
         }
      }
   }
}


//______________________________________________________________________________
Int_t TDirectoryFile::Sizeof() const
{
//*-*-*-*-*-*-*Return the size in bytes of the directory header*-*-*-*-*-*-*
//*-*          ================================================
   //Int_t nbytes = sizeof(Version_t);    2
   //nbytes     += fDatimeC.Sizeof();
   //nbytes     += fDatimeM.Sizeof();
   //nbytes     += sizeof fNbytesKeys;    4
   //nbytes     += sizeof fNbytesName;    4
   //nbytes     += sizeof fSeekDir;       4 or 8
   //nbytes     += sizeof fSeekParent;    4 or 8
   //nbytes     += sizeof fSeekKeys;      4 or 8
   //nbytes     += fUUID.Sizeof();
   Int_t nbytes = 22;

   nbytes     += fDatimeC.Sizeof();
   nbytes     += fDatimeM.Sizeof();
   nbytes     += fUUID.Sizeof();
    //assume that the file may be above 2 Gbytes if file version is > 4
   if (fFile && fFile->GetVersion() >= 40000) nbytes += 12;
   return nbytes;
}


//_______________________________________________________________________
void TDirectoryFile::Streamer(TBuffer &b)
{
//*-*-*-*-*-*-*-*-*Stream a class object*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
//*-*              =========================================

   Version_t v,version;
   if (b.IsReading()) {
      Build((TFile*)b.GetParent(), 0);
      if (fFile && fFile->IsWritable()) fWritable = kTRUE;

      if (fFile && !fFile->IsBinary()) {
         Version_t R__v = b.ReadVersion(0, 0);

         TClass* dirclass = (R__v < 5) ? TDirectory::Class() : TDirectoryFile::Class();

         b.ClassBegin(dirclass, R__v);

         TString sbuf;

         b.ClassMember("CreateTime","TString");
         sbuf.Streamer(b);
         TDatime timeC(sbuf.Data());
         fDatimeC = timeC;

         b.ClassMember("ModifyTime","TString");
         sbuf.Streamer(b);
         TDatime timeM(sbuf.Data());
         fDatimeM = timeM;

         b.ClassMember("UUID","TString");
         sbuf.Streamer(b);
         TUUID id(sbuf.Data());
         fUUID = id;

         b.ClassEnd(dirclass);

         fSeekKeys = 0; // read keys later in the TKeySQL class
      } else {
         b >> version;
         fDatimeC.Streamer(b);
         fDatimeM.Streamer(b);
         b >> fNbytesKeys;
         b >> fNbytesName;
         if (version > 1000) {
            SetBit(kIsBigFile);
            b >> fSeekDir;
            b >> fSeekParent;
            b >> fSeekKeys;
         } else {
            Int_t sdir,sparent,skeys;
            b >> sdir;    fSeekDir    = (Long64_t)sdir;
            b >> sparent; fSeekParent = (Long64_t)sparent;
            b >> skeys;   fSeekKeys   = (Long64_t)skeys;
         }
         v = version%1000;
         if (v == 2) {
            fUUID.StreamerV1(b);
         } else if (v > 2) {
            fUUID.Streamer(b);
         }
      }
      R__LOCKGUARD2(gROOTMutex);
      gROOT->GetUUIDs()->AddUUID(fUUID,this);
      if (fSeekKeys) ReadKeys();
   } else {
      if (fFile && !fFile->IsBinary()) {
         b.WriteVersion(TDirectoryFile::Class());

         TString sbuf;

         b.ClassBegin(TDirectoryFile::Class());

         b.ClassMember("CreateTime","TString");
         sbuf = fDatimeC.AsSQLString();
         sbuf.Streamer(b);

         b.ClassMember("ModifyTime","TString");
         fDatimeM.Set();
         sbuf = fDatimeM.AsSQLString();
         sbuf.Streamer(b);

         b.ClassMember("UUID","TString");
         sbuf = fUUID.AsString();
         sbuf.Streamer(b);

         b.ClassEnd(TDirectoryFile::Class());
      } else {
         version = TDirectoryFile::Class_Version();
         if (fFile && fFile->GetEND() > TFile::kStartBigFile) version += 1000;
         b << version;
         fDatimeC.Streamer(b);
         fDatimeM.Streamer(b);
         b << fNbytesKeys;
         b << fNbytesName;
         if (version > 1000) {
            b << fSeekDir;
            b << fSeekParent;
            b << fSeekKeys;
         } else {
            b << (Int_t)fSeekDir;
            b << (Int_t)fSeekParent;
            b << (Int_t)fSeekKeys;
         }
         fUUID.Streamer(b);
         if (version <=1000) for (Int_t i=0;i<3;i++) b << Int_t(0);
      }
   }
}

//______________________________________________________________________________
Int_t TDirectoryFile::Write(const char *, Int_t opt, Int_t bufsize)
{
   // Write all objects in memory to disk.
   // Loop on all objects in memory (including subdirectories).
   // A new key is created in the KEYS linked list for each object.
   // For allowed options see TObject::Write().
   // The directory header info is rewritten on the directory header record.

   if (!IsWritable()) return 0;
   TDirectory::TContext ctxt(this);

   // Loop on all objects (including subdirs)
   TIter next(fList);
   TObject *obj;
   Int_t nbytes = 0;
   while ((obj=next())) {
      nbytes += obj->Write(0,opt,bufsize);
   }
   SaveSelf(kTRUE);   // force save itself

   return nbytes;
}

//______________________________________________________________________________
Int_t TDirectoryFile::Write(const char *n, Int_t opt, Int_t bufsize) const
{
   // One can not save a const TDirectory object.

   Error("Write const","A const TDirectory object should not be saved. We try to proceed anyway.");
   return const_cast<TDirectoryFile*>(this)->Write(n, opt, bufsize);
}

//____________________________________________________________________________________
Int_t TDirectoryFile::WriteTObject(const TObject *obj, const char *name, Option_t *option, Int_t bufsize)
{
   // Write object obj to this directory
   // The data structure corresponding to this object is serialized.
   // The corresponding buffer is written to this directory
   // with an associated key with name "name".
   //
   // Writing an object to a file involves the following steps:
   //
   //  -Creation of a support TKey object in the directory.
   //   The TKey object creates a TBuffer object.
   //
   //  -The TBuffer object is filled via the class::Streamer function.
   //
   //  -If the file is compressed (default) a second buffer is created to
   //   hold the compressed buffer.
   //
   //  -Reservation of the corresponding space in the file by looking
   //   in the TFree list of free blocks of the file.
   //
   //  -The buffer is written to the file.
   //
   //  By default, the buffersize will be taken from the average buffer size
   //  of all objects written to the current file so far.
   //  Use TDirectoryFile::SetBufferSize to force a given buffer size.
   //
   //  If a name is specified, it will be the name of the key.
   //  If name is not given, the name of the key will be the name as returned
   //  by obj->GetName().
   //
   //  The option can be a combination of:
   //    "SingleKey", "Overwrite" or "WriteDelete"
   //  Using the "Overwrite" option a previous key with the same name is
   //  overwritten. The previous key is deleted before writing the new object.
   //  Using the "WriteDelete" option a previous key with the same name is
   //  deleted only after the new object has been written. This option
   //  is safer than kOverwrite but it is slower.
   //  The "SingleKey" option is only used by TCollection::Write() to write
   //  a container with a single key instead of each object in the container
   //  with its own key.
   //
   //  An object is read from this directory via TDirectoryFile::Get.
   //
   //  The function returns the total number of bytes written to the directory.
   //  It returns 0 if the object cannot be written.
   //
   //  WARNING: in name avoid special characters like '^','$','.' that are used 
   //  by the regular expression parser (see TRegexp).

   TDirectory::TContext ctxt(this);

   if (fFile==0) {
      const char *objname = "no name specified";
      if (name) objname = name;
      else if (obj) objname = obj->GetName();
      Error("WriteTObject","The current directory (%s) is not associated with a file. The object (%s) has not been written.",GetName(),objname);
      return 0;
   }

   if (!fFile->IsWritable()) {
      if (!fFile->TestBit(TFile::kWriteError)) {
         // Do not print the error if the file already had a SysError.
         Error("WriteTObject","Directory %s is not writable", fFile->GetName());
      }
      return 0;
   }

   if (!obj) return 0;

   TString opt = option;
   opt.ToLower();

   TKey *key=0, *oldkey=0;
   Int_t bsize = GetBufferSize();
   if (bufsize > 0) bsize = bufsize;

   const char *oname;
   if (name && *name)
      oname = name;
   else
      oname = obj->GetName();

   // Remove trailing blanks in object name
   Int_t nch = strlen(oname);
   char *newName = 0;
   if (nch && oname[nch-1] == ' ') {
      newName = new char[nch+1];
      strlcpy(newName,oname,nch+1);
      for (Int_t i=0;i<nch;i++) {
         if (newName[nch-i-1] != ' ') break;
         newName[nch-i-1] = 0;
      }
      oname = newName;
   }

   if (opt.Contains("overwrite")) {
      //One must use GetKey. FindObject would return the lowest cycle of the key!
      //key = (TKey*)gDirectory->GetListOfKeys()->FindObject(oname);
      key = GetKey(oname);
      if (key) {
         key->Delete();
         delete key;
      }
   }
   if (opt.Contains("writedelete")) {
      oldkey = GetKey(oname);
   }
   key = fFile->CreateKey(this, obj, oname, bsize);
   if (newName) delete [] newName;

   if (!key->GetSeekKey()) {
      fKeys->Remove(key);
      delete key;
      if (bufsize) fFile->SetBufferSize(bufsize);
      return 0;
   }
   fFile->SumBuffer(key->GetObjlen());
   Int_t nbytes = key->WriteFile(0);
   if (fFile->TestBit(TFile::kWriteError)) {
      if (bufsize) fFile->SetBufferSize(bufsize);
      return 0;
   }
   if (oldkey) {
      oldkey->Delete();
      delete oldkey;
   }
   if (bufsize) fFile->SetBufferSize(bufsize);

   return nbytes;
}

//______________________________________________________________________________
Int_t TDirectoryFile::WriteObjectAny(const void *obj, const char *classname, const char *name, Option_t *option, Int_t bufsize)
{
   // Write object from pointer of class classname in this directory
   // obj may not derive from TObject
   // see TDirectoryFile::WriteTObject for comments
   //
   // VERY IMPORTANT NOTE:
   //    The value passed as 'obj' needs to be from a pointer to the type described by classname
   //    For example with:
   //      TopClass *top;
   //      BottomClass *bottom;
   //      top = bottom;
   //    you can do:
   //      directory->WriteObjectAny(top,"top","name of object");
   //      directory->WriteObjectAny(bottom,"bottom","name of object");
   //    BUT YOU CAN NOT DO (it will fail in particular with multiple inheritance):
   //      directory->WriteObjectAny(top,"bottom","name of object");
   //
   // We STRONGLY recommend to use
   //      TopClass *top = ....;
   //      directory->WriteObject(top,"name of object")
   //
   //   see laso remarks in TDirectoryFile::WriteTObject

   TClass *cl = TClass::GetClass(classname);
   if (cl == 0) {
      TObject *info_obj = *(TObject**)obj;
      TVirtualStreamerInfo *info = dynamic_cast<TVirtualStreamerInfo*>(info_obj);
      if (info == 0) {
         Error("WriteObjectAny","Unknown class: %s",classname);
         return 0;
      } else {
         cl = info->GetClass();
      }
   }
   return WriteObjectAny(obj,cl,name,option,bufsize);
}

//______________________________________________________________________________
Int_t TDirectoryFile::WriteObjectAny(const void *obj, const TClass *cl, const char *name, Option_t *option, Int_t bufsize)
{
   // Write object of class with dictionary cl in this directory
   // obj may not derive from TObject
   // To get the TClass* cl pointer, one can use
   //    TClass *cl = TClass::GetClass("classname");
   // An alternative is to call the function WriteObjectAny above.
   // see TDirectoryFile::WriteTObject for comments

   TDirectory::TContext ctxt(this);

   if (fFile==0) return 0;

   if (!fFile->IsWritable()) {
      if (!fFile->TestBit(TFile::kWriteError)) {
         // Do not print the error if the file already had a SysError.
         Error("WriteObject","File %s is not writable", fFile->GetName());
      }
      return 0;
   }

   if (!obj || !cl) return 0;
   TKey *key, *oldkey=0;
   Int_t bsize = GetBufferSize();
   if (bufsize > 0) bsize = bufsize;

   TString opt = option;
   opt.ToLower();

   const char *oname;
   if (name && *name)
      oname = name;
   else
      oname = cl->GetName();

   // Remove trailing blanks in object name
   Int_t nch = strlen(oname);
   char *newName = 0;
   if (nch && oname[nch-1] == ' ') {
      newName = new char[nch+1];
      strlcpy(newName,oname,nch+1);
      for (Int_t i=0;i<nch;i++) {
         if (newName[nch-i-1] != ' ') break;
         newName[nch-i-1] = 0;
      }
      oname = newName;
   }

   if (opt.Contains("overwrite")) {
      //One must use GetKey. FindObject would return the lowest cycle of the key!
      //key = (TKey*)gDirectory->GetListOfKeys()->FindObject(oname);
      key = GetKey(oname);
      if (key) {
         key->Delete();
         delete key;
      }
   }
   if (opt.Contains("writedelete")) {
      oldkey = GetKey(oname);
   }
   key = fFile->CreateKey(this, obj, cl, oname, bsize);
   if (newName) delete [] newName;

   if (!key->GetSeekKey()) {
      fKeys->Remove(key);
      delete key;
      return 0;
   }
   fFile->SumBuffer(key->GetObjlen());
   Int_t nbytes = key->WriteFile(0);
   if (fFile->TestBit(TFile::kWriteError)) return 0;

   if (oldkey) {
      oldkey->Delete();
      delete oldkey;
   }

   return nbytes;
}

//______________________________________________________________________________
void TDirectoryFile::WriteDirHeader()
{
//*-*-*-*-*-*-*-*-*-*-*Overwrite the Directory header record*-*-*-*-*-*-*-*-*
//*-*                  =====================================
   TFile* f = GetFile();
   if (f==0) return;

   if (!f->IsBinary()) {
      fDatimeM.Set();
      f->DirWriteHeader(this);
      return;
   }

   Int_t nbytes  = TDirectoryFile::Sizeof();  //Warning ! TFile has a Sizeof()
   char * header = new char[nbytes];
   char * buffer = header;
   fDatimeM.Set();
   TDirectoryFile::FillBuffer(buffer);
   Long64_t pointer = fSeekDir + fNbytesName; // do not overwrite the name/title part
   fModified     = kFALSE;
   f->Seek(pointer);
   f->WriteBuffer(header, nbytes);
   if (f->MustFlush()) f->Flush();
   delete [] header;
}

//______________________________________________________________________________
void TDirectoryFile::WriteKeys()
{
//*-*-*-*-*-*-*-*-*-*-*-*Write KEYS linked list on the file *-*-*-*-*-*-*-*
//*-*                    ==================================
//  The linked list of keys (fKeys) is written as a single data record
//

   TFile* f = GetFile();
   if (f==0) return;

   if (!f->IsBinary()) {
      f->DirWriteKeys(this);
      return;
   }

//*-* Delete the old keys structure if it exists
   if (fSeekKeys != 0) {
      f->MakeFree(fSeekKeys, fSeekKeys + fNbytesKeys -1);
   }
//*-* Write new keys record
   TIter next(fKeys);
   TKey *key;
   Int_t nkeys  = fKeys->GetSize();
   Int_t nbytes = sizeof nkeys;          //*-* Compute size of all keys
   if (f->GetEND() > TFile::kStartBigFile) nbytes += 8;
   while ((key = (TKey*)next())) {
      nbytes += key->Sizeof();
   }
   TKey *headerkey  = new TKey(fName,fTitle,IsA(),nbytes,this);
   if (headerkey->GetSeekKey() == 0) {
      delete headerkey;
      return;
   }
   char *buffer = headerkey->GetBuffer();
   next.Reset();
   tobuf(buffer, nkeys);
   while ((key = (TKey*)next())) {
      key->FillBuffer(buffer);
   }

   fSeekKeys     = headerkey->GetSeekKey();
   fNbytesKeys   = headerkey->GetNbytes();
   headerkey->WriteFile();
   delete headerkey;
}
 TDirectoryFile.cxx:1
 TDirectoryFile.cxx:2
 TDirectoryFile.cxx:3
 TDirectoryFile.cxx:4
 TDirectoryFile.cxx:5
 TDirectoryFile.cxx:6
 TDirectoryFile.cxx:7
 TDirectoryFile.cxx:8
 TDirectoryFile.cxx:9
 TDirectoryFile.cxx:10
 TDirectoryFile.cxx:11
 TDirectoryFile.cxx:12
 TDirectoryFile.cxx:13
 TDirectoryFile.cxx:14
 TDirectoryFile.cxx:15
 TDirectoryFile.cxx:16
 TDirectoryFile.cxx:17
 TDirectoryFile.cxx:18
 TDirectoryFile.cxx:19
 TDirectoryFile.cxx:20
 TDirectoryFile.cxx:21
 TDirectoryFile.cxx:22
 TDirectoryFile.cxx:23
 TDirectoryFile.cxx:24
 TDirectoryFile.cxx:25
 TDirectoryFile.cxx:26
 TDirectoryFile.cxx:27
 TDirectoryFile.cxx:28
 TDirectoryFile.cxx:29
 TDirectoryFile.cxx:30
 TDirectoryFile.cxx:31
 TDirectoryFile.cxx:32
 TDirectoryFile.cxx:33
 TDirectoryFile.cxx:34
 TDirectoryFile.cxx:35
 TDirectoryFile.cxx:36
 TDirectoryFile.cxx:37
 TDirectoryFile.cxx:38
 TDirectoryFile.cxx:39
 TDirectoryFile.cxx:40
 TDirectoryFile.cxx:41
 TDirectoryFile.cxx:42
 TDirectoryFile.cxx:43
 TDirectoryFile.cxx:44
 TDirectoryFile.cxx:45
 TDirectoryFile.cxx:46
 TDirectoryFile.cxx:47
 TDirectoryFile.cxx:48
 TDirectoryFile.cxx:49
 TDirectoryFile.cxx:50
 TDirectoryFile.cxx:51
 TDirectoryFile.cxx:52
 TDirectoryFile.cxx:53
 TDirectoryFile.cxx:54
 TDirectoryFile.cxx:55
 TDirectoryFile.cxx:56
 TDirectoryFile.cxx:57
 TDirectoryFile.cxx:58
 TDirectoryFile.cxx:59
 TDirectoryFile.cxx:60
 TDirectoryFile.cxx:61
 TDirectoryFile.cxx:62
 TDirectoryFile.cxx:63
 TDirectoryFile.cxx:64
 TDirectoryFile.cxx:65
 TDirectoryFile.cxx:66
 TDirectoryFile.cxx:67
 TDirectoryFile.cxx:68
 TDirectoryFile.cxx:69
 TDirectoryFile.cxx:70
 TDirectoryFile.cxx:71
 TDirectoryFile.cxx:72
 TDirectoryFile.cxx:73
 TDirectoryFile.cxx:74
 TDirectoryFile.cxx:75
 TDirectoryFile.cxx:76
 TDirectoryFile.cxx:77
 TDirectoryFile.cxx:78
 TDirectoryFile.cxx:79
 TDirectoryFile.cxx:80
 TDirectoryFile.cxx:81
 TDirectoryFile.cxx:82
 TDirectoryFile.cxx:83
 TDirectoryFile.cxx:84
 TDirectoryFile.cxx:85
 TDirectoryFile.cxx:86
 TDirectoryFile.cxx:87
 TDirectoryFile.cxx:88
 TDirectoryFile.cxx:89
 TDirectoryFile.cxx:90
 TDirectoryFile.cxx:91
 TDirectoryFile.cxx:92
 TDirectoryFile.cxx:93
 TDirectoryFile.cxx:94
 TDirectoryFile.cxx:95
 TDirectoryFile.cxx:96
 TDirectoryFile.cxx:97
 TDirectoryFile.cxx:98
 TDirectoryFile.cxx:99
 TDirectoryFile.cxx:100
 TDirectoryFile.cxx:101
 TDirectoryFile.cxx:102
 TDirectoryFile.cxx:103
 TDirectoryFile.cxx:104
 TDirectoryFile.cxx:105
 TDirectoryFile.cxx:106
 TDirectoryFile.cxx:107
 TDirectoryFile.cxx:108
 TDirectoryFile.cxx:109
 TDirectoryFile.cxx:110
 TDirectoryFile.cxx:111
 TDirectoryFile.cxx:112
 TDirectoryFile.cxx:113
 TDirectoryFile.cxx:114
 TDirectoryFile.cxx:115
 TDirectoryFile.cxx:116
 TDirectoryFile.cxx:117
 TDirectoryFile.cxx:118
 TDirectoryFile.cxx:119
 TDirectoryFile.cxx:120
 TDirectoryFile.cxx:121
 TDirectoryFile.cxx:122
 TDirectoryFile.cxx:123
 TDirectoryFile.cxx:124
 TDirectoryFile.cxx:125
 TDirectoryFile.cxx:126
 TDirectoryFile.cxx:127
 TDirectoryFile.cxx:128
 TDirectoryFile.cxx:129
 TDirectoryFile.cxx:130
 TDirectoryFile.cxx:131
 TDirectoryFile.cxx:132
 TDirectoryFile.cxx:133
 TDirectoryFile.cxx:134
 TDirectoryFile.cxx:135
 TDirectoryFile.cxx:136
 TDirectoryFile.cxx:137
 TDirectoryFile.cxx:138
 TDirectoryFile.cxx:139
 TDirectoryFile.cxx:140
 TDirectoryFile.cxx:141
 TDirectoryFile.cxx:142
 TDirectoryFile.cxx:143
 TDirectoryFile.cxx:144
 TDirectoryFile.cxx:145
 TDirectoryFile.cxx:146
 TDirectoryFile.cxx:147
 TDirectoryFile.cxx:148
 TDirectoryFile.cxx:149
 TDirectoryFile.cxx:150
 TDirectoryFile.cxx:151
 TDirectoryFile.cxx:152
 TDirectoryFile.cxx:153
 TDirectoryFile.cxx:154
 TDirectoryFile.cxx:155
 TDirectoryFile.cxx:156
 TDirectoryFile.cxx:157
 TDirectoryFile.cxx:158
 TDirectoryFile.cxx:159
 TDirectoryFile.cxx:160
 TDirectoryFile.cxx:161
 TDirectoryFile.cxx:162
 TDirectoryFile.cxx:163
 TDirectoryFile.cxx:164
 TDirectoryFile.cxx:165
 TDirectoryFile.cxx:166
 TDirectoryFile.cxx:167
 TDirectoryFile.cxx:168
 TDirectoryFile.cxx:169
 TDirectoryFile.cxx:170
 TDirectoryFile.cxx:171
 TDirectoryFile.cxx:172
 TDirectoryFile.cxx:173
 TDirectoryFile.cxx:174
 TDirectoryFile.cxx:175
 TDirectoryFile.cxx:176
 TDirectoryFile.cxx:177
 TDirectoryFile.cxx:178
 TDirectoryFile.cxx:179
 TDirectoryFile.cxx:180
 TDirectoryFile.cxx:181
 TDirectoryFile.cxx:182
 TDirectoryFile.cxx:183
 TDirectoryFile.cxx:184
 TDirectoryFile.cxx:185
 TDirectoryFile.cxx:186
 TDirectoryFile.cxx:187
 TDirectoryFile.cxx:188
 TDirectoryFile.cxx:189
 TDirectoryFile.cxx:190
 TDirectoryFile.cxx:191
 TDirectoryFile.cxx:192
 TDirectoryFile.cxx:193
 TDirectoryFile.cxx:194
 TDirectoryFile.cxx:195
 TDirectoryFile.cxx:196
 TDirectoryFile.cxx:197
 TDirectoryFile.cxx:198
 TDirectoryFile.cxx:199
 TDirectoryFile.cxx:200
 TDirectoryFile.cxx:201
 TDirectoryFile.cxx:202
 TDirectoryFile.cxx:203
 TDirectoryFile.cxx:204
 TDirectoryFile.cxx:205
 TDirectoryFile.cxx:206
 TDirectoryFile.cxx:207
 TDirectoryFile.cxx:208
 TDirectoryFile.cxx:209
 TDirectoryFile.cxx:210
 TDirectoryFile.cxx:211
 TDirectoryFile.cxx:212
 TDirectoryFile.cxx:213
 TDirectoryFile.cxx:214
 TDirectoryFile.cxx:215
 TDirectoryFile.cxx:216
 TDirectoryFile.cxx:217
 TDirectoryFile.cxx:218
 TDirectoryFile.cxx:219
 TDirectoryFile.cxx:220
 TDirectoryFile.cxx:221
 TDirectoryFile.cxx:222
 TDirectoryFile.cxx:223
 TDirectoryFile.cxx:224
 TDirectoryFile.cxx:225
 TDirectoryFile.cxx:226
 TDirectoryFile.cxx:227
 TDirectoryFile.cxx:228
 TDirectoryFile.cxx:229
 TDirectoryFile.cxx:230
 TDirectoryFile.cxx:231
 TDirectoryFile.cxx:232
 TDirectoryFile.cxx:233
 TDirectoryFile.cxx:234
 TDirectoryFile.cxx:235
 TDirectoryFile.cxx:236
 TDirectoryFile.cxx:237
 TDirectoryFile.cxx:238
 TDirectoryFile.cxx:239
 TDirectoryFile.cxx:240
 TDirectoryFile.cxx:241
 TDirectoryFile.cxx:242
 TDirectoryFile.cxx:243
 TDirectoryFile.cxx:244
 TDirectoryFile.cxx:245
 TDirectoryFile.cxx:246
 TDirectoryFile.cxx:247
 TDirectoryFile.cxx:248
 TDirectoryFile.cxx:249
 TDirectoryFile.cxx:250
 TDirectoryFile.cxx:251
 TDirectoryFile.cxx:252
 TDirectoryFile.cxx:253
 TDirectoryFile.cxx:254
 TDirectoryFile.cxx:255
 TDirectoryFile.cxx:256
 TDirectoryFile.cxx:257
 TDirectoryFile.cxx:258
 TDirectoryFile.cxx:259
 TDirectoryFile.cxx:260
 TDirectoryFile.cxx:261
 TDirectoryFile.cxx:262
 TDirectoryFile.cxx:263
 TDirectoryFile.cxx:264
 TDirectoryFile.cxx:265
 TDirectoryFile.cxx:266
 TDirectoryFile.cxx:267
 TDirectoryFile.cxx:268
 TDirectoryFile.cxx:269
 TDirectoryFile.cxx:270
 TDirectoryFile.cxx:271
 TDirectoryFile.cxx:272
 TDirectoryFile.cxx:273
 TDirectoryFile.cxx:274
 TDirectoryFile.cxx:275
 TDirectoryFile.cxx:276
 TDirectoryFile.cxx:277
 TDirectoryFile.cxx:278
 TDirectoryFile.cxx:279
 TDirectoryFile.cxx:280
 TDirectoryFile.cxx:281
 TDirectoryFile.cxx:282
 TDirectoryFile.cxx:283
 TDirectoryFile.cxx:284
 TDirectoryFile.cxx:285
 TDirectoryFile.cxx:286
 TDirectoryFile.cxx:287
 TDirectoryFile.cxx:288
 TDirectoryFile.cxx:289
 TDirectoryFile.cxx:290
 TDirectoryFile.cxx:291
 TDirectoryFile.cxx:292
 TDirectoryFile.cxx:293
 TDirectoryFile.cxx:294
 TDirectoryFile.cxx:295
 TDirectoryFile.cxx:296
 TDirectoryFile.cxx:297
 TDirectoryFile.cxx:298
 TDirectoryFile.cxx:299
 TDirectoryFile.cxx:300
 TDirectoryFile.cxx:301
 TDirectoryFile.cxx:302
 TDirectoryFile.cxx:303
 TDirectoryFile.cxx:304
 TDirectoryFile.cxx:305
 TDirectoryFile.cxx:306
 TDirectoryFile.cxx:307
 TDirectoryFile.cxx:308
 TDirectoryFile.cxx:309
 TDirectoryFile.cxx:310
 TDirectoryFile.cxx:311
 TDirectoryFile.cxx:312
 TDirectoryFile.cxx:313
 TDirectoryFile.cxx:314
 TDirectoryFile.cxx:315
 TDirectoryFile.cxx:316
 TDirectoryFile.cxx:317
 TDirectoryFile.cxx:318
 TDirectoryFile.cxx:319
 TDirectoryFile.cxx:320
 TDirectoryFile.cxx:321
 TDirectoryFile.cxx:322
 TDirectoryFile.cxx:323
 TDirectoryFile.cxx:324
 TDirectoryFile.cxx:325
 TDirectoryFile.cxx:326
 TDirectoryFile.cxx:327
 TDirectoryFile.cxx:328
 TDirectoryFile.cxx:329
 TDirectoryFile.cxx:330
 TDirectoryFile.cxx:331
 TDirectoryFile.cxx:332
 TDirectoryFile.cxx:333
 TDirectoryFile.cxx:334
 TDirectoryFile.cxx:335
 TDirectoryFile.cxx:336
 TDirectoryFile.cxx:337
 TDirectoryFile.cxx:338
 TDirectoryFile.cxx:339
 TDirectoryFile.cxx:340
 TDirectoryFile.cxx:341
 TDirectoryFile.cxx:342
 TDirectoryFile.cxx:343
 TDirectoryFile.cxx:344
 TDirectoryFile.cxx:345
 TDirectoryFile.cxx:346
 TDirectoryFile.cxx:347
 TDirectoryFile.cxx:348
 TDirectoryFile.cxx:349
 TDirectoryFile.cxx:350
 TDirectoryFile.cxx:351
 TDirectoryFile.cxx:352
 TDirectoryFile.cxx:353
 TDirectoryFile.cxx:354
 TDirectoryFile.cxx:355
 TDirectoryFile.cxx:356
 TDirectoryFile.cxx:357
 TDirectoryFile.cxx:358
 TDirectoryFile.cxx:359
 TDirectoryFile.cxx:360
 TDirectoryFile.cxx:361
 TDirectoryFile.cxx:362
 TDirectoryFile.cxx:363
 TDirectoryFile.cxx:364
 TDirectoryFile.cxx:365
 TDirectoryFile.cxx:366
 TDirectoryFile.cxx:367
 TDirectoryFile.cxx:368
 TDirectoryFile.cxx:369
 TDirectoryFile.cxx:370
 TDirectoryFile.cxx:371
 TDirectoryFile.cxx:372
 TDirectoryFile.cxx:373
 TDirectoryFile.cxx:374
 TDirectoryFile.cxx:375
 TDirectoryFile.cxx:376
 TDirectoryFile.cxx:377
 TDirectoryFile.cxx:378
 TDirectoryFile.cxx:379
 TDirectoryFile.cxx:380
 TDirectoryFile.cxx:381
 TDirectoryFile.cxx:382
 TDirectoryFile.cxx:383
 TDirectoryFile.cxx:384
 TDirectoryFile.cxx:385
 TDirectoryFile.cxx:386
 TDirectoryFile.cxx:387
 TDirectoryFile.cxx:388
 TDirectoryFile.cxx:389
 TDirectoryFile.cxx:390
 TDirectoryFile.cxx:391
 TDirectoryFile.cxx:392
 TDirectoryFile.cxx:393
 TDirectoryFile.cxx:394
 TDirectoryFile.cxx:395
 TDirectoryFile.cxx:396
 TDirectoryFile.cxx:397
 TDirectoryFile.cxx:398
 TDirectoryFile.cxx:399
 TDirectoryFile.cxx:400
 TDirectoryFile.cxx:401
 TDirectoryFile.cxx:402
 TDirectoryFile.cxx:403
 TDirectoryFile.cxx:404
 TDirectoryFile.cxx:405
 TDirectoryFile.cxx:406
 TDirectoryFile.cxx:407
 TDirectoryFile.cxx:408
 TDirectoryFile.cxx:409
 TDirectoryFile.cxx:410
 TDirectoryFile.cxx:411
 TDirectoryFile.cxx:412
 TDirectoryFile.cxx:413
 TDirectoryFile.cxx:414
 TDirectoryFile.cxx:415
 TDirectoryFile.cxx:416
 TDirectoryFile.cxx:417
 TDirectoryFile.cxx:418
 TDirectoryFile.cxx:419
 TDirectoryFile.cxx:420
 TDirectoryFile.cxx:421
 TDirectoryFile.cxx:422
 TDirectoryFile.cxx:423
 TDirectoryFile.cxx:424
 TDirectoryFile.cxx:425
 TDirectoryFile.cxx:426
 TDirectoryFile.cxx:427
 TDirectoryFile.cxx:428
 TDirectoryFile.cxx:429
 TDirectoryFile.cxx:430
 TDirectoryFile.cxx:431
 TDirectoryFile.cxx:432
 TDirectoryFile.cxx:433
 TDirectoryFile.cxx:434
 TDirectoryFile.cxx:435
 TDirectoryFile.cxx:436
 TDirectoryFile.cxx:437
 TDirectoryFile.cxx:438
 TDirectoryFile.cxx:439
 TDirectoryFile.cxx:440
 TDirectoryFile.cxx:441
 TDirectoryFile.cxx:442
 TDirectoryFile.cxx:443
 TDirectoryFile.cxx:444
 TDirectoryFile.cxx:445
 TDirectoryFile.cxx:446
 TDirectoryFile.cxx:447
 TDirectoryFile.cxx:448
 TDirectoryFile.cxx:449
 TDirectoryFile.cxx:450
 TDirectoryFile.cxx:451
 TDirectoryFile.cxx:452
 TDirectoryFile.cxx:453
 TDirectoryFile.cxx:454
 TDirectoryFile.cxx:455
 TDirectoryFile.cxx:456
 TDirectoryFile.cxx:457
 TDirectoryFile.cxx:458
 TDirectoryFile.cxx:459
 TDirectoryFile.cxx:460
 TDirectoryFile.cxx:461
 TDirectoryFile.cxx:462
 TDirectoryFile.cxx:463
 TDirectoryFile.cxx:464
 TDirectoryFile.cxx:465
 TDirectoryFile.cxx:466
 TDirectoryFile.cxx:467
 TDirectoryFile.cxx:468
 TDirectoryFile.cxx:469
 TDirectoryFile.cxx:470
 TDirectoryFile.cxx:471
 TDirectoryFile.cxx:472
 TDirectoryFile.cxx:473
 TDirectoryFile.cxx:474
 TDirectoryFile.cxx:475
 TDirectoryFile.cxx:476
 TDirectoryFile.cxx:477
 TDirectoryFile.cxx:478
 TDirectoryFile.cxx:479
 TDirectoryFile.cxx:480
 TDirectoryFile.cxx:481
 TDirectoryFile.cxx:482
 TDirectoryFile.cxx:483
 TDirectoryFile.cxx:484
 TDirectoryFile.cxx:485
 TDirectoryFile.cxx:486
 TDirectoryFile.cxx:487
 TDirectoryFile.cxx:488
 TDirectoryFile.cxx:489
 TDirectoryFile.cxx:490
 TDirectoryFile.cxx:491
 TDirectoryFile.cxx:492
 TDirectoryFile.cxx:493
 TDirectoryFile.cxx:494
 TDirectoryFile.cxx:495
 TDirectoryFile.cxx:496
 TDirectoryFile.cxx:497
 TDirectoryFile.cxx:498
 TDirectoryFile.cxx:499
 TDirectoryFile.cxx:500
 TDirectoryFile.cxx:501
 TDirectoryFile.cxx:502
 TDirectoryFile.cxx:503
 TDirectoryFile.cxx:504
 TDirectoryFile.cxx:505
 TDirectoryFile.cxx:506
 TDirectoryFile.cxx:507
 TDirectoryFile.cxx:508
 TDirectoryFile.cxx:509
 TDirectoryFile.cxx:510
 TDirectoryFile.cxx:511
 TDirectoryFile.cxx:512
 TDirectoryFile.cxx:513
 TDirectoryFile.cxx:514
 TDirectoryFile.cxx:515
 TDirectoryFile.cxx:516
 TDirectoryFile.cxx:517
 TDirectoryFile.cxx:518
 TDirectoryFile.cxx:519
 TDirectoryFile.cxx:520
 TDirectoryFile.cxx:521
 TDirectoryFile.cxx:522
 TDirectoryFile.cxx:523
 TDirectoryFile.cxx:524
 TDirectoryFile.cxx:525
 TDirectoryFile.cxx:526
 TDirectoryFile.cxx:527
 TDirectoryFile.cxx:528
 TDirectoryFile.cxx:529
 TDirectoryFile.cxx:530
 TDirectoryFile.cxx:531
 TDirectoryFile.cxx:532
 TDirectoryFile.cxx:533
 TDirectoryFile.cxx:534
 TDirectoryFile.cxx:535
 TDirectoryFile.cxx:536
 TDirectoryFile.cxx:537
 TDirectoryFile.cxx:538
 TDirectoryFile.cxx:539
 TDirectoryFile.cxx:540
 TDirectoryFile.cxx:541
 TDirectoryFile.cxx:542
 TDirectoryFile.cxx:543
 TDirectoryFile.cxx:544
 TDirectoryFile.cxx:545
 TDirectoryFile.cxx:546
 TDirectoryFile.cxx:547
 TDirectoryFile.cxx:548
 TDirectoryFile.cxx:549
 TDirectoryFile.cxx:550
 TDirectoryFile.cxx:551
 TDirectoryFile.cxx:552
 TDirectoryFile.cxx:553
 TDirectoryFile.cxx:554
 TDirectoryFile.cxx:555
 TDirectoryFile.cxx:556
 TDirectoryFile.cxx:557
 TDirectoryFile.cxx:558
 TDirectoryFile.cxx:559
 TDirectoryFile.cxx:560
 TDirectoryFile.cxx:561
 TDirectoryFile.cxx:562
 TDirectoryFile.cxx:563
 TDirectoryFile.cxx:564
 TDirectoryFile.cxx:565
 TDirectoryFile.cxx:566
 TDirectoryFile.cxx:567
 TDirectoryFile.cxx:568
 TDirectoryFile.cxx:569
 TDirectoryFile.cxx:570
 TDirectoryFile.cxx:571
 TDirectoryFile.cxx:572
 TDirectoryFile.cxx:573
 TDirectoryFile.cxx:574
 TDirectoryFile.cxx:575
 TDirectoryFile.cxx:576
 TDirectoryFile.cxx:577
 TDirectoryFile.cxx:578
 TDirectoryFile.cxx:579
 TDirectoryFile.cxx:580
 TDirectoryFile.cxx:581
 TDirectoryFile.cxx:582
 TDirectoryFile.cxx:583
 TDirectoryFile.cxx:584
 TDirectoryFile.cxx:585
 TDirectoryFile.cxx:586
 TDirectoryFile.cxx:587
 TDirectoryFile.cxx:588
 TDirectoryFile.cxx:589
 TDirectoryFile.cxx:590
 TDirectoryFile.cxx:591
 TDirectoryFile.cxx:592
 TDirectoryFile.cxx:593
 TDirectoryFile.cxx:594
 TDirectoryFile.cxx:595
 TDirectoryFile.cxx:596
 TDirectoryFile.cxx:597
 TDirectoryFile.cxx:598
 TDirectoryFile.cxx:599
 TDirectoryFile.cxx:600
 TDirectoryFile.cxx:601
 TDirectoryFile.cxx:602
 TDirectoryFile.cxx:603
 TDirectoryFile.cxx:604
 TDirectoryFile.cxx:605
 TDirectoryFile.cxx:606
 TDirectoryFile.cxx:607
 TDirectoryFile.cxx:608
 TDirectoryFile.cxx:609
 TDirectoryFile.cxx:610
 TDirectoryFile.cxx:611
 TDirectoryFile.cxx:612
 TDirectoryFile.cxx:613
 TDirectoryFile.cxx:614
 TDirectoryFile.cxx:615
 TDirectoryFile.cxx:616
 TDirectoryFile.cxx:617
 TDirectoryFile.cxx:618
 TDirectoryFile.cxx:619
 TDirectoryFile.cxx:620
 TDirectoryFile.cxx:621
 TDirectoryFile.cxx:622
 TDirectoryFile.cxx:623
 TDirectoryFile.cxx:624
 TDirectoryFile.cxx:625
 TDirectoryFile.cxx:626
 TDirectoryFile.cxx:627
 TDirectoryFile.cxx:628
 TDirectoryFile.cxx:629
 TDirectoryFile.cxx:630
 TDirectoryFile.cxx:631
 TDirectoryFile.cxx:632
 TDirectoryFile.cxx:633
 TDirectoryFile.cxx:634
 TDirectoryFile.cxx:635
 TDirectoryFile.cxx:636
 TDirectoryFile.cxx:637
 TDirectoryFile.cxx:638
 TDirectoryFile.cxx:639
 TDirectoryFile.cxx:640
 TDirectoryFile.cxx:641
 TDirectoryFile.cxx:642
 TDirectoryFile.cxx:643
 TDirectoryFile.cxx:644
 TDirectoryFile.cxx:645
 TDirectoryFile.cxx:646
 TDirectoryFile.cxx:647
 TDirectoryFile.cxx:648
 TDirectoryFile.cxx:649
 TDirectoryFile.cxx:650
 TDirectoryFile.cxx:651
 TDirectoryFile.cxx:652
 TDirectoryFile.cxx:653
 TDirectoryFile.cxx:654
 TDirectoryFile.cxx:655
 TDirectoryFile.cxx:656
 TDirectoryFile.cxx:657
 TDirectoryFile.cxx:658
 TDirectoryFile.cxx:659
 TDirectoryFile.cxx:660
 TDirectoryFile.cxx:661
 TDirectoryFile.cxx:662
 TDirectoryFile.cxx:663
 TDirectoryFile.cxx:664
 TDirectoryFile.cxx:665
 TDirectoryFile.cxx:666
 TDirectoryFile.cxx:667
 TDirectoryFile.cxx:668
 TDirectoryFile.cxx:669
 TDirectoryFile.cxx:670
 TDirectoryFile.cxx:671
 TDirectoryFile.cxx:672
 TDirectoryFile.cxx:673
 TDirectoryFile.cxx:674
 TDirectoryFile.cxx:675
 TDirectoryFile.cxx:676
 TDirectoryFile.cxx:677
 TDirectoryFile.cxx:678
 TDirectoryFile.cxx:679
 TDirectoryFile.cxx:680
 TDirectoryFile.cxx:681
 TDirectoryFile.cxx:682
 TDirectoryFile.cxx:683
 TDirectoryFile.cxx:684
 TDirectoryFile.cxx:685
 TDirectoryFile.cxx:686
 TDirectoryFile.cxx:687
 TDirectoryFile.cxx:688
 TDirectoryFile.cxx:689
 TDirectoryFile.cxx:690
 TDirectoryFile.cxx:691
 TDirectoryFile.cxx:692
 TDirectoryFile.cxx:693
 TDirectoryFile.cxx:694
 TDirectoryFile.cxx:695
 TDirectoryFile.cxx:696
 TDirectoryFile.cxx:697
 TDirectoryFile.cxx:698
 TDirectoryFile.cxx:699
 TDirectoryFile.cxx:700
 TDirectoryFile.cxx:701
 TDirectoryFile.cxx:702
 TDirectoryFile.cxx:703
 TDirectoryFile.cxx:704
 TDirectoryFile.cxx:705
 TDirectoryFile.cxx:706
 TDirectoryFile.cxx:707
 TDirectoryFile.cxx:708
 TDirectoryFile.cxx:709
 TDirectoryFile.cxx:710
 TDirectoryFile.cxx:711
 TDirectoryFile.cxx:712
 TDirectoryFile.cxx:713
 TDirectoryFile.cxx:714
 TDirectoryFile.cxx:715
 TDirectoryFile.cxx:716
 TDirectoryFile.cxx:717
 TDirectoryFile.cxx:718
 TDirectoryFile.cxx:719
 TDirectoryFile.cxx:720
 TDirectoryFile.cxx:721
 TDirectoryFile.cxx:722
 TDirectoryFile.cxx:723
 TDirectoryFile.cxx:724
 TDirectoryFile.cxx:725
 TDirectoryFile.cxx:726
 TDirectoryFile.cxx:727
 TDirectoryFile.cxx:728
 TDirectoryFile.cxx:729
 TDirectoryFile.cxx:730
 TDirectoryFile.cxx:731
 TDirectoryFile.cxx:732
 TDirectoryFile.cxx:733
 TDirectoryFile.cxx:734
 TDirectoryFile.cxx:735
 TDirectoryFile.cxx:736
 TDirectoryFile.cxx:737
 TDirectoryFile.cxx:738
 TDirectoryFile.cxx:739
 TDirectoryFile.cxx:740
 TDirectoryFile.cxx:741
 TDirectoryFile.cxx:742
 TDirectoryFile.cxx:743
 TDirectoryFile.cxx:744
 TDirectoryFile.cxx:745
 TDirectoryFile.cxx:746
 TDirectoryFile.cxx:747
 TDirectoryFile.cxx:748
 TDirectoryFile.cxx:749
 TDirectoryFile.cxx:750
 TDirectoryFile.cxx:751
 TDirectoryFile.cxx:752
 TDirectoryFile.cxx:753
 TDirectoryFile.cxx:754
 TDirectoryFile.cxx:755
 TDirectoryFile.cxx:756
 TDirectoryFile.cxx:757
 TDirectoryFile.cxx:758
 TDirectoryFile.cxx:759
 TDirectoryFile.cxx:760
 TDirectoryFile.cxx:761
 TDirectoryFile.cxx:762
 TDirectoryFile.cxx:763
 TDirectoryFile.cxx:764
 TDirectoryFile.cxx:765
 TDirectoryFile.cxx:766
 TDirectoryFile.cxx:767
 TDirectoryFile.cxx:768
 TDirectoryFile.cxx:769
 TDirectoryFile.cxx:770
 TDirectoryFile.cxx:771
 TDirectoryFile.cxx:772
 TDirectoryFile.cxx:773
 TDirectoryFile.cxx:774
 TDirectoryFile.cxx:775
 TDirectoryFile.cxx:776
 TDirectoryFile.cxx:777
 TDirectoryFile.cxx:778
 TDirectoryFile.cxx:779
 TDirectoryFile.cxx:780
 TDirectoryFile.cxx:781
 TDirectoryFile.cxx:782
 TDirectoryFile.cxx:783
 TDirectoryFile.cxx:784
 TDirectoryFile.cxx:785
 TDirectoryFile.cxx:786
 TDirectoryFile.cxx:787
 TDirectoryFile.cxx:788
 TDirectoryFile.cxx:789
 TDirectoryFile.cxx:790
 TDirectoryFile.cxx:791
 TDirectoryFile.cxx:792
 TDirectoryFile.cxx:793
 TDirectoryFile.cxx:794
 TDirectoryFile.cxx:795
 TDirectoryFile.cxx:796
 TDirectoryFile.cxx:797
 TDirectoryFile.cxx:798
 TDirectoryFile.cxx:799
 TDirectoryFile.cxx:800
 TDirectoryFile.cxx:801
 TDirectoryFile.cxx:802
 TDirectoryFile.cxx:803
 TDirectoryFile.cxx:804
 TDirectoryFile.cxx:805
 TDirectoryFile.cxx:806
 TDirectoryFile.cxx:807
 TDirectoryFile.cxx:808
 TDirectoryFile.cxx:809
 TDirectoryFile.cxx:810
 TDirectoryFile.cxx:811
 TDirectoryFile.cxx:812
 TDirectoryFile.cxx:813
 TDirectoryFile.cxx:814
 TDirectoryFile.cxx:815
 TDirectoryFile.cxx:816
 TDirectoryFile.cxx:817
 TDirectoryFile.cxx:818
 TDirectoryFile.cxx:819
 TDirectoryFile.cxx:820
 TDirectoryFile.cxx:821
 TDirectoryFile.cxx:822
 TDirectoryFile.cxx:823
 TDirectoryFile.cxx:824
 TDirectoryFile.cxx:825
 TDirectoryFile.cxx:826
 TDirectoryFile.cxx:827
 TDirectoryFile.cxx:828
 TDirectoryFile.cxx:829
 TDirectoryFile.cxx:830
 TDirectoryFile.cxx:831
 TDirectoryFile.cxx:832
 TDirectoryFile.cxx:833
 TDirectoryFile.cxx:834
 TDirectoryFile.cxx:835
 TDirectoryFile.cxx:836
 TDirectoryFile.cxx:837
 TDirectoryFile.cxx:838
 TDirectoryFile.cxx:839
 TDirectoryFile.cxx:840
 TDirectoryFile.cxx:841
 TDirectoryFile.cxx:842
 TDirectoryFile.cxx:843
 TDirectoryFile.cxx:844
 TDirectoryFile.cxx:845
 TDirectoryFile.cxx:846
 TDirectoryFile.cxx:847
 TDirectoryFile.cxx:848
 TDirectoryFile.cxx:849
 TDirectoryFile.cxx:850
 TDirectoryFile.cxx:851
 TDirectoryFile.cxx:852
 TDirectoryFile.cxx:853
 TDirectoryFile.cxx:854
 TDirectoryFile.cxx:855
 TDirectoryFile.cxx:856
 TDirectoryFile.cxx:857
 TDirectoryFile.cxx:858
 TDirectoryFile.cxx:859
 TDirectoryFile.cxx:860
 TDirectoryFile.cxx:861
 TDirectoryFile.cxx:862
 TDirectoryFile.cxx:863
 TDirectoryFile.cxx:864
 TDirectoryFile.cxx:865
 TDirectoryFile.cxx:866
 TDirectoryFile.cxx:867
 TDirectoryFile.cxx:868
 TDirectoryFile.cxx:869
 TDirectoryFile.cxx:870
 TDirectoryFile.cxx:871
 TDirectoryFile.cxx:872
 TDirectoryFile.cxx:873
 TDirectoryFile.cxx:874
 TDirectoryFile.cxx:875
 TDirectoryFile.cxx:876
 TDirectoryFile.cxx:877
 TDirectoryFile.cxx:878
 TDirectoryFile.cxx:879
 TDirectoryFile.cxx:880
 TDirectoryFile.cxx:881
 TDirectoryFile.cxx:882
 TDirectoryFile.cxx:883
 TDirectoryFile.cxx:884
 TDirectoryFile.cxx:885
 TDirectoryFile.cxx:886
 TDirectoryFile.cxx:887
 TDirectoryFile.cxx:888
 TDirectoryFile.cxx:889
 TDirectoryFile.cxx:890
 TDirectoryFile.cxx:891
 TDirectoryFile.cxx:892
 TDirectoryFile.cxx:893
 TDirectoryFile.cxx:894
 TDirectoryFile.cxx:895
 TDirectoryFile.cxx:896
 TDirectoryFile.cxx:897
 TDirectoryFile.cxx:898
 TDirectoryFile.cxx:899
 TDirectoryFile.cxx:900
 TDirectoryFile.cxx:901
 TDirectoryFile.cxx:902
 TDirectoryFile.cxx:903
 TDirectoryFile.cxx:904
 TDirectoryFile.cxx:905
 TDirectoryFile.cxx:906
 TDirectoryFile.cxx:907
 TDirectoryFile.cxx:908
 TDirectoryFile.cxx:909
 TDirectoryFile.cxx:910
 TDirectoryFile.cxx:911
 TDirectoryFile.cxx:912
 TDirectoryFile.cxx:913
 TDirectoryFile.cxx:914
 TDirectoryFile.cxx:915
 TDirectoryFile.cxx:916
 TDirectoryFile.cxx:917
 TDirectoryFile.cxx:918
 TDirectoryFile.cxx:919
 TDirectoryFile.cxx:920
 TDirectoryFile.cxx:921
 TDirectoryFile.cxx:922
 TDirectoryFile.cxx:923
 TDirectoryFile.cxx:924
 TDirectoryFile.cxx:925
 TDirectoryFile.cxx:926
 TDirectoryFile.cxx:927
 TDirectoryFile.cxx:928
 TDirectoryFile.cxx:929
 TDirectoryFile.cxx:930
 TDirectoryFile.cxx:931
 TDirectoryFile.cxx:932
 TDirectoryFile.cxx:933
 TDirectoryFile.cxx:934
 TDirectoryFile.cxx:935
 TDirectoryFile.cxx:936
 TDirectoryFile.cxx:937
 TDirectoryFile.cxx:938
 TDirectoryFile.cxx:939
 TDirectoryFile.cxx:940
 TDirectoryFile.cxx:941
 TDirectoryFile.cxx:942
 TDirectoryFile.cxx:943
 TDirectoryFile.cxx:944
 TDirectoryFile.cxx:945
 TDirectoryFile.cxx:946
 TDirectoryFile.cxx:947
 TDirectoryFile.cxx:948
 TDirectoryFile.cxx:949
 TDirectoryFile.cxx:950
 TDirectoryFile.cxx:951
 TDirectoryFile.cxx:952
 TDirectoryFile.cxx:953
 TDirectoryFile.cxx:954
 TDirectoryFile.cxx:955
 TDirectoryFile.cxx:956
 TDirectoryFile.cxx:957
 TDirectoryFile.cxx:958
 TDirectoryFile.cxx:959
 TDirectoryFile.cxx:960
 TDirectoryFile.cxx:961
 TDirectoryFile.cxx:962
 TDirectoryFile.cxx:963
 TDirectoryFile.cxx:964
 TDirectoryFile.cxx:965
 TDirectoryFile.cxx:966
 TDirectoryFile.cxx:967
 TDirectoryFile.cxx:968
 TDirectoryFile.cxx:969
 TDirectoryFile.cxx:970
 TDirectoryFile.cxx:971
 TDirectoryFile.cxx:972
 TDirectoryFile.cxx:973
 TDirectoryFile.cxx:974
 TDirectoryFile.cxx:975
 TDirectoryFile.cxx:976
 TDirectoryFile.cxx:977
 TDirectoryFile.cxx:978
 TDirectoryFile.cxx:979
 TDirectoryFile.cxx:980
 TDirectoryFile.cxx:981
 TDirectoryFile.cxx:982
 TDirectoryFile.cxx:983
 TDirectoryFile.cxx:984
 TDirectoryFile.cxx:985
 TDirectoryFile.cxx:986
 TDirectoryFile.cxx:987
 TDirectoryFile.cxx:988
 TDirectoryFile.cxx:989
 TDirectoryFile.cxx:990
 TDirectoryFile.cxx:991
 TDirectoryFile.cxx:992
 TDirectoryFile.cxx:993
 TDirectoryFile.cxx:994
 TDirectoryFile.cxx:995
 TDirectoryFile.cxx:996
 TDirectoryFile.cxx:997
 TDirectoryFile.cxx:998
 TDirectoryFile.cxx:999
 TDirectoryFile.cxx:1000
 TDirectoryFile.cxx:1001
 TDirectoryFile.cxx:1002
 TDirectoryFile.cxx:1003
 TDirectoryFile.cxx:1004
 TDirectoryFile.cxx:1005
 TDirectoryFile.cxx:1006
 TDirectoryFile.cxx:1007
 TDirectoryFile.cxx:1008
 TDirectoryFile.cxx:1009
 TDirectoryFile.cxx:1010
 TDirectoryFile.cxx:1011
 TDirectoryFile.cxx:1012
 TDirectoryFile.cxx:1013
 TDirectoryFile.cxx:1014
 TDirectoryFile.cxx:1015
 TDirectoryFile.cxx:1016
 TDirectoryFile.cxx:1017
 TDirectoryFile.cxx:1018
 TDirectoryFile.cxx:1019
 TDirectoryFile.cxx:1020
 TDirectoryFile.cxx:1021
 TDirectoryFile.cxx:1022
 TDirectoryFile.cxx:1023
 TDirectoryFile.cxx:1024
 TDirectoryFile.cxx:1025
 TDirectoryFile.cxx:1026
 TDirectoryFile.cxx:1027
 TDirectoryFile.cxx:1028
 TDirectoryFile.cxx:1029
 TDirectoryFile.cxx:1030
 TDirectoryFile.cxx:1031
 TDirectoryFile.cxx:1032
 TDirectoryFile.cxx:1033
 TDirectoryFile.cxx:1034
 TDirectoryFile.cxx:1035
 TDirectoryFile.cxx:1036
 TDirectoryFile.cxx:1037
 TDirectoryFile.cxx:1038
 TDirectoryFile.cxx:1039
 TDirectoryFile.cxx:1040
 TDirectoryFile.cxx:1041
 TDirectoryFile.cxx:1042
 TDirectoryFile.cxx:1043
 TDirectoryFile.cxx:1044
 TDirectoryFile.cxx:1045
 TDirectoryFile.cxx:1046
 TDirectoryFile.cxx:1047
 TDirectoryFile.cxx:1048
 TDirectoryFile.cxx:1049
 TDirectoryFile.cxx:1050
 TDirectoryFile.cxx:1051
 TDirectoryFile.cxx:1052
 TDirectoryFile.cxx:1053
 TDirectoryFile.cxx:1054
 TDirectoryFile.cxx:1055
 TDirectoryFile.cxx:1056
 TDirectoryFile.cxx:1057
 TDirectoryFile.cxx:1058
 TDirectoryFile.cxx:1059
 TDirectoryFile.cxx:1060
 TDirectoryFile.cxx:1061
 TDirectoryFile.cxx:1062
 TDirectoryFile.cxx:1063
 TDirectoryFile.cxx:1064
 TDirectoryFile.cxx:1065
 TDirectoryFile.cxx:1066
 TDirectoryFile.cxx:1067
 TDirectoryFile.cxx:1068
 TDirectoryFile.cxx:1069
 TDirectoryFile.cxx:1070
 TDirectoryFile.cxx:1071
 TDirectoryFile.cxx:1072
 TDirectoryFile.cxx:1073
 TDirectoryFile.cxx:1074
 TDirectoryFile.cxx:1075
 TDirectoryFile.cxx:1076
 TDirectoryFile.cxx:1077
 TDirectoryFile.cxx:1078
 TDirectoryFile.cxx:1079
 TDirectoryFile.cxx:1080
 TDirectoryFile.cxx:1081
 TDirectoryFile.cxx:1082
 TDirectoryFile.cxx:1083
 TDirectoryFile.cxx:1084
 TDirectoryFile.cxx:1085
 TDirectoryFile.cxx:1086
 TDirectoryFile.cxx:1087
 TDirectoryFile.cxx:1088
 TDirectoryFile.cxx:1089
 TDirectoryFile.cxx:1090
 TDirectoryFile.cxx:1091
 TDirectoryFile.cxx:1092
 TDirectoryFile.cxx:1093
 TDirectoryFile.cxx:1094
 TDirectoryFile.cxx:1095
 TDirectoryFile.cxx:1096
 TDirectoryFile.cxx:1097
 TDirectoryFile.cxx:1098
 TDirectoryFile.cxx:1099
 TDirectoryFile.cxx:1100
 TDirectoryFile.cxx:1101
 TDirectoryFile.cxx:1102
 TDirectoryFile.cxx:1103
 TDirectoryFile.cxx:1104
 TDirectoryFile.cxx:1105
 TDirectoryFile.cxx:1106
 TDirectoryFile.cxx:1107
 TDirectoryFile.cxx:1108
 TDirectoryFile.cxx:1109
 TDirectoryFile.cxx:1110
 TDirectoryFile.cxx:1111
 TDirectoryFile.cxx:1112
 TDirectoryFile.cxx:1113
 TDirectoryFile.cxx:1114
 TDirectoryFile.cxx:1115
 TDirectoryFile.cxx:1116
 TDirectoryFile.cxx:1117
 TDirectoryFile.cxx:1118
 TDirectoryFile.cxx:1119
 TDirectoryFile.cxx:1120
 TDirectoryFile.cxx:1121
 TDirectoryFile.cxx:1122
 TDirectoryFile.cxx:1123
 TDirectoryFile.cxx:1124
 TDirectoryFile.cxx:1125
 TDirectoryFile.cxx:1126
 TDirectoryFile.cxx:1127
 TDirectoryFile.cxx:1128
 TDirectoryFile.cxx:1129
 TDirectoryFile.cxx:1130
 TDirectoryFile.cxx:1131
 TDirectoryFile.cxx:1132
 TDirectoryFile.cxx:1133
 TDirectoryFile.cxx:1134
 TDirectoryFile.cxx:1135
 TDirectoryFile.cxx:1136
 TDirectoryFile.cxx:1137
 TDirectoryFile.cxx:1138
 TDirectoryFile.cxx:1139
 TDirectoryFile.cxx:1140
 TDirectoryFile.cxx:1141
 TDirectoryFile.cxx:1142
 TDirectoryFile.cxx:1143
 TDirectoryFile.cxx:1144
 TDirectoryFile.cxx:1145
 TDirectoryFile.cxx:1146
 TDirectoryFile.cxx:1147
 TDirectoryFile.cxx:1148
 TDirectoryFile.cxx:1149
 TDirectoryFile.cxx:1150
 TDirectoryFile.cxx:1151
 TDirectoryFile.cxx:1152
 TDirectoryFile.cxx:1153
 TDirectoryFile.cxx:1154
 TDirectoryFile.cxx:1155
 TDirectoryFile.cxx:1156
 TDirectoryFile.cxx:1157
 TDirectoryFile.cxx:1158
 TDirectoryFile.cxx:1159
 TDirectoryFile.cxx:1160
 TDirectoryFile.cxx:1161
 TDirectoryFile.cxx:1162
 TDirectoryFile.cxx:1163
 TDirectoryFile.cxx:1164
 TDirectoryFile.cxx:1165
 TDirectoryFile.cxx:1166
 TDirectoryFile.cxx:1167
 TDirectoryFile.cxx:1168
 TDirectoryFile.cxx:1169
 TDirectoryFile.cxx:1170
 TDirectoryFile.cxx:1171
 TDirectoryFile.cxx:1172
 TDirectoryFile.cxx:1173
 TDirectoryFile.cxx:1174
 TDirectoryFile.cxx:1175
 TDirectoryFile.cxx:1176
 TDirectoryFile.cxx:1177
 TDirectoryFile.cxx:1178
 TDirectoryFile.cxx:1179
 TDirectoryFile.cxx:1180
 TDirectoryFile.cxx:1181
 TDirectoryFile.cxx:1182
 TDirectoryFile.cxx:1183
 TDirectoryFile.cxx:1184
 TDirectoryFile.cxx:1185
 TDirectoryFile.cxx:1186
 TDirectoryFile.cxx:1187
 TDirectoryFile.cxx:1188
 TDirectoryFile.cxx:1189
 TDirectoryFile.cxx:1190
 TDirectoryFile.cxx:1191
 TDirectoryFile.cxx:1192
 TDirectoryFile.cxx:1193
 TDirectoryFile.cxx:1194
 TDirectoryFile.cxx:1195
 TDirectoryFile.cxx:1196
 TDirectoryFile.cxx:1197
 TDirectoryFile.cxx:1198
 TDirectoryFile.cxx:1199
 TDirectoryFile.cxx:1200
 TDirectoryFile.cxx:1201
 TDirectoryFile.cxx:1202
 TDirectoryFile.cxx:1203
 TDirectoryFile.cxx:1204
 TDirectoryFile.cxx:1205
 TDirectoryFile.cxx:1206
 TDirectoryFile.cxx:1207
 TDirectoryFile.cxx:1208
 TDirectoryFile.cxx:1209
 TDirectoryFile.cxx:1210
 TDirectoryFile.cxx:1211
 TDirectoryFile.cxx:1212
 TDirectoryFile.cxx:1213
 TDirectoryFile.cxx:1214
 TDirectoryFile.cxx:1215
 TDirectoryFile.cxx:1216
 TDirectoryFile.cxx:1217
 TDirectoryFile.cxx:1218
 TDirectoryFile.cxx:1219
 TDirectoryFile.cxx:1220
 TDirectoryFile.cxx:1221
 TDirectoryFile.cxx:1222
 TDirectoryFile.cxx:1223
 TDirectoryFile.cxx:1224
 TDirectoryFile.cxx:1225
 TDirectoryFile.cxx:1226
 TDirectoryFile.cxx:1227
 TDirectoryFile.cxx:1228
 TDirectoryFile.cxx:1229
 TDirectoryFile.cxx:1230
 TDirectoryFile.cxx:1231
 TDirectoryFile.cxx:1232
 TDirectoryFile.cxx:1233
 TDirectoryFile.cxx:1234
 TDirectoryFile.cxx:1235
 TDirectoryFile.cxx:1236
 TDirectoryFile.cxx:1237
 TDirectoryFile.cxx:1238
 TDirectoryFile.cxx:1239
 TDirectoryFile.cxx:1240
 TDirectoryFile.cxx:1241
 TDirectoryFile.cxx:1242
 TDirectoryFile.cxx:1243
 TDirectoryFile.cxx:1244
 TDirectoryFile.cxx:1245
 TDirectoryFile.cxx:1246
 TDirectoryFile.cxx:1247
 TDirectoryFile.cxx:1248
 TDirectoryFile.cxx:1249
 TDirectoryFile.cxx:1250
 TDirectoryFile.cxx:1251
 TDirectoryFile.cxx:1252
 TDirectoryFile.cxx:1253
 TDirectoryFile.cxx:1254
 TDirectoryFile.cxx:1255
 TDirectoryFile.cxx:1256
 TDirectoryFile.cxx:1257
 TDirectoryFile.cxx:1258
 TDirectoryFile.cxx:1259
 TDirectoryFile.cxx:1260
 TDirectoryFile.cxx:1261
 TDirectoryFile.cxx:1262
 TDirectoryFile.cxx:1263
 TDirectoryFile.cxx:1264
 TDirectoryFile.cxx:1265
 TDirectoryFile.cxx:1266
 TDirectoryFile.cxx:1267
 TDirectoryFile.cxx:1268
 TDirectoryFile.cxx:1269
 TDirectoryFile.cxx:1270
 TDirectoryFile.cxx:1271
 TDirectoryFile.cxx:1272
 TDirectoryFile.cxx:1273
 TDirectoryFile.cxx:1274
 TDirectoryFile.cxx:1275
 TDirectoryFile.cxx:1276
 TDirectoryFile.cxx:1277
 TDirectoryFile.cxx:1278
 TDirectoryFile.cxx:1279
 TDirectoryFile.cxx:1280
 TDirectoryFile.cxx:1281
 TDirectoryFile.cxx:1282
 TDirectoryFile.cxx:1283
 TDirectoryFile.cxx:1284
 TDirectoryFile.cxx:1285
 TDirectoryFile.cxx:1286
 TDirectoryFile.cxx:1287
 TDirectoryFile.cxx:1288
 TDirectoryFile.cxx:1289
 TDirectoryFile.cxx:1290
 TDirectoryFile.cxx:1291
 TDirectoryFile.cxx:1292
 TDirectoryFile.cxx:1293
 TDirectoryFile.cxx:1294
 TDirectoryFile.cxx:1295
 TDirectoryFile.cxx:1296
 TDirectoryFile.cxx:1297
 TDirectoryFile.cxx:1298
 TDirectoryFile.cxx:1299
 TDirectoryFile.cxx:1300
 TDirectoryFile.cxx:1301
 TDirectoryFile.cxx:1302
 TDirectoryFile.cxx:1303
 TDirectoryFile.cxx:1304
 TDirectoryFile.cxx:1305
 TDirectoryFile.cxx:1306
 TDirectoryFile.cxx:1307
 TDirectoryFile.cxx:1308
 TDirectoryFile.cxx:1309
 TDirectoryFile.cxx:1310
 TDirectoryFile.cxx:1311
 TDirectoryFile.cxx:1312
 TDirectoryFile.cxx:1313
 TDirectoryFile.cxx:1314
 TDirectoryFile.cxx:1315
 TDirectoryFile.cxx:1316
 TDirectoryFile.cxx:1317
 TDirectoryFile.cxx:1318
 TDirectoryFile.cxx:1319
 TDirectoryFile.cxx:1320
 TDirectoryFile.cxx:1321
 TDirectoryFile.cxx:1322
 TDirectoryFile.cxx:1323
 TDirectoryFile.cxx:1324
 TDirectoryFile.cxx:1325
 TDirectoryFile.cxx:1326
 TDirectoryFile.cxx:1327
 TDirectoryFile.cxx:1328
 TDirectoryFile.cxx:1329
 TDirectoryFile.cxx:1330
 TDirectoryFile.cxx:1331
 TDirectoryFile.cxx:1332
 TDirectoryFile.cxx:1333
 TDirectoryFile.cxx:1334
 TDirectoryFile.cxx:1335
 TDirectoryFile.cxx:1336
 TDirectoryFile.cxx:1337
 TDirectoryFile.cxx:1338
 TDirectoryFile.cxx:1339
 TDirectoryFile.cxx:1340
 TDirectoryFile.cxx:1341
 TDirectoryFile.cxx:1342
 TDirectoryFile.cxx:1343
 TDirectoryFile.cxx:1344
 TDirectoryFile.cxx:1345
 TDirectoryFile.cxx:1346
 TDirectoryFile.cxx:1347
 TDirectoryFile.cxx:1348
 TDirectoryFile.cxx:1349
 TDirectoryFile.cxx:1350
 TDirectoryFile.cxx:1351
 TDirectoryFile.cxx:1352
 TDirectoryFile.cxx:1353
 TDirectoryFile.cxx:1354
 TDirectoryFile.cxx:1355
 TDirectoryFile.cxx:1356
 TDirectoryFile.cxx:1357
 TDirectoryFile.cxx:1358
 TDirectoryFile.cxx:1359
 TDirectoryFile.cxx:1360
 TDirectoryFile.cxx:1361
 TDirectoryFile.cxx:1362
 TDirectoryFile.cxx:1363
 TDirectoryFile.cxx:1364
 TDirectoryFile.cxx:1365
 TDirectoryFile.cxx:1366
 TDirectoryFile.cxx:1367
 TDirectoryFile.cxx:1368
 TDirectoryFile.cxx:1369
 TDirectoryFile.cxx:1370
 TDirectoryFile.cxx:1371
 TDirectoryFile.cxx:1372
 TDirectoryFile.cxx:1373
 TDirectoryFile.cxx:1374
 TDirectoryFile.cxx:1375
 TDirectoryFile.cxx:1376
 TDirectoryFile.cxx:1377
 TDirectoryFile.cxx:1378
 TDirectoryFile.cxx:1379
 TDirectoryFile.cxx:1380
 TDirectoryFile.cxx:1381
 TDirectoryFile.cxx:1382
 TDirectoryFile.cxx:1383
 TDirectoryFile.cxx:1384
 TDirectoryFile.cxx:1385
 TDirectoryFile.cxx:1386
 TDirectoryFile.cxx:1387
 TDirectoryFile.cxx:1388
 TDirectoryFile.cxx:1389
 TDirectoryFile.cxx:1390
 TDirectoryFile.cxx:1391
 TDirectoryFile.cxx:1392
 TDirectoryFile.cxx:1393
 TDirectoryFile.cxx:1394
 TDirectoryFile.cxx:1395
 TDirectoryFile.cxx:1396
 TDirectoryFile.cxx:1397
 TDirectoryFile.cxx:1398
 TDirectoryFile.cxx:1399
 TDirectoryFile.cxx:1400
 TDirectoryFile.cxx:1401
 TDirectoryFile.cxx:1402
 TDirectoryFile.cxx:1403
 TDirectoryFile.cxx:1404
 TDirectoryFile.cxx:1405
 TDirectoryFile.cxx:1406
 TDirectoryFile.cxx:1407
 TDirectoryFile.cxx:1408
 TDirectoryFile.cxx:1409
 TDirectoryFile.cxx:1410
 TDirectoryFile.cxx:1411
 TDirectoryFile.cxx:1412
 TDirectoryFile.cxx:1413
 TDirectoryFile.cxx:1414
 TDirectoryFile.cxx:1415
 TDirectoryFile.cxx:1416
 TDirectoryFile.cxx:1417
 TDirectoryFile.cxx:1418
 TDirectoryFile.cxx:1419
 TDirectoryFile.cxx:1420
 TDirectoryFile.cxx:1421
 TDirectoryFile.cxx:1422
 TDirectoryFile.cxx:1423
 TDirectoryFile.cxx:1424
 TDirectoryFile.cxx:1425
 TDirectoryFile.cxx:1426
 TDirectoryFile.cxx:1427
 TDirectoryFile.cxx:1428
 TDirectoryFile.cxx:1429
 TDirectoryFile.cxx:1430
 TDirectoryFile.cxx:1431
 TDirectoryFile.cxx:1432
 TDirectoryFile.cxx:1433
 TDirectoryFile.cxx:1434
 TDirectoryFile.cxx:1435
 TDirectoryFile.cxx:1436
 TDirectoryFile.cxx:1437
 TDirectoryFile.cxx:1438
 TDirectoryFile.cxx:1439
 TDirectoryFile.cxx:1440
 TDirectoryFile.cxx:1441
 TDirectoryFile.cxx:1442
 TDirectoryFile.cxx:1443
 TDirectoryFile.cxx:1444
 TDirectoryFile.cxx:1445
 TDirectoryFile.cxx:1446
 TDirectoryFile.cxx:1447
 TDirectoryFile.cxx:1448
 TDirectoryFile.cxx:1449
 TDirectoryFile.cxx:1450
 TDirectoryFile.cxx:1451
 TDirectoryFile.cxx:1452
 TDirectoryFile.cxx:1453
 TDirectoryFile.cxx:1454
 TDirectoryFile.cxx:1455
 TDirectoryFile.cxx:1456
 TDirectoryFile.cxx:1457
 TDirectoryFile.cxx:1458
 TDirectoryFile.cxx:1459
 TDirectoryFile.cxx:1460
 TDirectoryFile.cxx:1461
 TDirectoryFile.cxx:1462
 TDirectoryFile.cxx:1463
 TDirectoryFile.cxx:1464
 TDirectoryFile.cxx:1465
 TDirectoryFile.cxx:1466
 TDirectoryFile.cxx:1467
 TDirectoryFile.cxx:1468
 TDirectoryFile.cxx:1469
 TDirectoryFile.cxx:1470
 TDirectoryFile.cxx:1471
 TDirectoryFile.cxx:1472
 TDirectoryFile.cxx:1473
 TDirectoryFile.cxx:1474
 TDirectoryFile.cxx:1475
 TDirectoryFile.cxx:1476
 TDirectoryFile.cxx:1477
 TDirectoryFile.cxx:1478
 TDirectoryFile.cxx:1479
 TDirectoryFile.cxx:1480
 TDirectoryFile.cxx:1481
 TDirectoryFile.cxx:1482
 TDirectoryFile.cxx:1483
 TDirectoryFile.cxx:1484
 TDirectoryFile.cxx:1485
 TDirectoryFile.cxx:1486
 TDirectoryFile.cxx:1487
 TDirectoryFile.cxx:1488
 TDirectoryFile.cxx:1489
 TDirectoryFile.cxx:1490
 TDirectoryFile.cxx:1491
 TDirectoryFile.cxx:1492
 TDirectoryFile.cxx:1493
 TDirectoryFile.cxx:1494
 TDirectoryFile.cxx:1495
 TDirectoryFile.cxx:1496
 TDirectoryFile.cxx:1497
 TDirectoryFile.cxx:1498
 TDirectoryFile.cxx:1499
 TDirectoryFile.cxx:1500
 TDirectoryFile.cxx:1501
 TDirectoryFile.cxx:1502
 TDirectoryFile.cxx:1503
 TDirectoryFile.cxx:1504
 TDirectoryFile.cxx:1505
 TDirectoryFile.cxx:1506
 TDirectoryFile.cxx:1507
 TDirectoryFile.cxx:1508
 TDirectoryFile.cxx:1509
 TDirectoryFile.cxx:1510
 TDirectoryFile.cxx:1511
 TDirectoryFile.cxx:1512
 TDirectoryFile.cxx:1513
 TDirectoryFile.cxx:1514
 TDirectoryFile.cxx:1515
 TDirectoryFile.cxx:1516
 TDirectoryFile.cxx:1517
 TDirectoryFile.cxx:1518
 TDirectoryFile.cxx:1519
 TDirectoryFile.cxx:1520
 TDirectoryFile.cxx:1521
 TDirectoryFile.cxx:1522
 TDirectoryFile.cxx:1523
 TDirectoryFile.cxx:1524
 TDirectoryFile.cxx:1525
 TDirectoryFile.cxx:1526
 TDirectoryFile.cxx:1527
 TDirectoryFile.cxx:1528
 TDirectoryFile.cxx:1529
 TDirectoryFile.cxx:1530
 TDirectoryFile.cxx:1531
 TDirectoryFile.cxx:1532
 TDirectoryFile.cxx:1533
 TDirectoryFile.cxx:1534
 TDirectoryFile.cxx:1535
 TDirectoryFile.cxx:1536
 TDirectoryFile.cxx:1537
 TDirectoryFile.cxx:1538
 TDirectoryFile.cxx:1539
 TDirectoryFile.cxx:1540
 TDirectoryFile.cxx:1541
 TDirectoryFile.cxx:1542
 TDirectoryFile.cxx:1543
 TDirectoryFile.cxx:1544
 TDirectoryFile.cxx:1545
 TDirectoryFile.cxx:1546
 TDirectoryFile.cxx:1547
 TDirectoryFile.cxx:1548
 TDirectoryFile.cxx:1549
 TDirectoryFile.cxx:1550
 TDirectoryFile.cxx:1551
 TDirectoryFile.cxx:1552
 TDirectoryFile.cxx:1553
 TDirectoryFile.cxx:1554
 TDirectoryFile.cxx:1555
 TDirectoryFile.cxx:1556
 TDirectoryFile.cxx:1557
 TDirectoryFile.cxx:1558
 TDirectoryFile.cxx:1559
 TDirectoryFile.cxx:1560
 TDirectoryFile.cxx:1561
 TDirectoryFile.cxx:1562
 TDirectoryFile.cxx:1563
 TDirectoryFile.cxx:1564
 TDirectoryFile.cxx:1565
 TDirectoryFile.cxx:1566
 TDirectoryFile.cxx:1567
 TDirectoryFile.cxx:1568
 TDirectoryFile.cxx:1569
 TDirectoryFile.cxx:1570
 TDirectoryFile.cxx:1571
 TDirectoryFile.cxx:1572
 TDirectoryFile.cxx:1573
 TDirectoryFile.cxx:1574
 TDirectoryFile.cxx:1575
 TDirectoryFile.cxx:1576
 TDirectoryFile.cxx:1577
 TDirectoryFile.cxx:1578
 TDirectoryFile.cxx:1579
 TDirectoryFile.cxx:1580
 TDirectoryFile.cxx:1581
 TDirectoryFile.cxx:1582
 TDirectoryFile.cxx:1583
 TDirectoryFile.cxx:1584
 TDirectoryFile.cxx:1585
 TDirectoryFile.cxx:1586
 TDirectoryFile.cxx:1587
 TDirectoryFile.cxx:1588
 TDirectoryFile.cxx:1589
 TDirectoryFile.cxx:1590
 TDirectoryFile.cxx:1591
 TDirectoryFile.cxx:1592
 TDirectoryFile.cxx:1593
 TDirectoryFile.cxx:1594
 TDirectoryFile.cxx:1595
 TDirectoryFile.cxx:1596
 TDirectoryFile.cxx:1597
 TDirectoryFile.cxx:1598
 TDirectoryFile.cxx:1599
 TDirectoryFile.cxx:1600
 TDirectoryFile.cxx:1601
 TDirectoryFile.cxx:1602
 TDirectoryFile.cxx:1603
 TDirectoryFile.cxx:1604
 TDirectoryFile.cxx:1605
 TDirectoryFile.cxx:1606
 TDirectoryFile.cxx:1607
 TDirectoryFile.cxx:1608
 TDirectoryFile.cxx:1609
 TDirectoryFile.cxx:1610
 TDirectoryFile.cxx:1611
 TDirectoryFile.cxx:1612
 TDirectoryFile.cxx:1613
 TDirectoryFile.cxx:1614
 TDirectoryFile.cxx:1615
 TDirectoryFile.cxx:1616
 TDirectoryFile.cxx:1617
 TDirectoryFile.cxx:1618
 TDirectoryFile.cxx:1619
 TDirectoryFile.cxx:1620
 TDirectoryFile.cxx:1621
 TDirectoryFile.cxx:1622
 TDirectoryFile.cxx:1623
 TDirectoryFile.cxx:1624
 TDirectoryFile.cxx:1625
 TDirectoryFile.cxx:1626
 TDirectoryFile.cxx:1627
 TDirectoryFile.cxx:1628
 TDirectoryFile.cxx:1629
 TDirectoryFile.cxx:1630
 TDirectoryFile.cxx:1631
 TDirectoryFile.cxx:1632
 TDirectoryFile.cxx:1633
 TDirectoryFile.cxx:1634
 TDirectoryFile.cxx:1635
 TDirectoryFile.cxx:1636
 TDirectoryFile.cxx:1637
 TDirectoryFile.cxx:1638
 TDirectoryFile.cxx:1639
 TDirectoryFile.cxx:1640
 TDirectoryFile.cxx:1641
 TDirectoryFile.cxx:1642
 TDirectoryFile.cxx:1643
 TDirectoryFile.cxx:1644
 TDirectoryFile.cxx:1645
 TDirectoryFile.cxx:1646
 TDirectoryFile.cxx:1647
 TDirectoryFile.cxx:1648
 TDirectoryFile.cxx:1649
 TDirectoryFile.cxx:1650
 TDirectoryFile.cxx:1651
 TDirectoryFile.cxx:1652
 TDirectoryFile.cxx:1653
 TDirectoryFile.cxx:1654
 TDirectoryFile.cxx:1655
 TDirectoryFile.cxx:1656
 TDirectoryFile.cxx:1657
 TDirectoryFile.cxx:1658
 TDirectoryFile.cxx:1659
 TDirectoryFile.cxx:1660
 TDirectoryFile.cxx:1661
 TDirectoryFile.cxx:1662
 TDirectoryFile.cxx:1663
 TDirectoryFile.cxx:1664
 TDirectoryFile.cxx:1665
 TDirectoryFile.cxx:1666
 TDirectoryFile.cxx:1667
 TDirectoryFile.cxx:1668
 TDirectoryFile.cxx:1669
 TDirectoryFile.cxx:1670
 TDirectoryFile.cxx:1671
 TDirectoryFile.cxx:1672
 TDirectoryFile.cxx:1673
 TDirectoryFile.cxx:1674
 TDirectoryFile.cxx:1675
 TDirectoryFile.cxx:1676
 TDirectoryFile.cxx:1677
 TDirectoryFile.cxx:1678
 TDirectoryFile.cxx:1679
 TDirectoryFile.cxx:1680
 TDirectoryFile.cxx:1681
 TDirectoryFile.cxx:1682
 TDirectoryFile.cxx:1683
 TDirectoryFile.cxx:1684
 TDirectoryFile.cxx:1685
 TDirectoryFile.cxx:1686
 TDirectoryFile.cxx:1687
 TDirectoryFile.cxx:1688
 TDirectoryFile.cxx:1689
 TDirectoryFile.cxx:1690
 TDirectoryFile.cxx:1691
 TDirectoryFile.cxx:1692
 TDirectoryFile.cxx:1693
 TDirectoryFile.cxx:1694
 TDirectoryFile.cxx:1695
 TDirectoryFile.cxx:1696
 TDirectoryFile.cxx:1697
 TDirectoryFile.cxx:1698
 TDirectoryFile.cxx:1699
 TDirectoryFile.cxx:1700
 TDirectoryFile.cxx:1701
 TDirectoryFile.cxx:1702
 TDirectoryFile.cxx:1703
 TDirectoryFile.cxx:1704
 TDirectoryFile.cxx:1705
 TDirectoryFile.cxx:1706
 TDirectoryFile.cxx:1707
 TDirectoryFile.cxx:1708
 TDirectoryFile.cxx:1709
 TDirectoryFile.cxx:1710
 TDirectoryFile.cxx:1711
 TDirectoryFile.cxx:1712
 TDirectoryFile.cxx:1713
 TDirectoryFile.cxx:1714
 TDirectoryFile.cxx:1715
 TDirectoryFile.cxx:1716
 TDirectoryFile.cxx:1717
 TDirectoryFile.cxx:1718
 TDirectoryFile.cxx:1719
 TDirectoryFile.cxx:1720
 TDirectoryFile.cxx:1721
 TDirectoryFile.cxx:1722
 TDirectoryFile.cxx:1723
 TDirectoryFile.cxx:1724
 TDirectoryFile.cxx:1725
 TDirectoryFile.cxx:1726
 TDirectoryFile.cxx:1727
 TDirectoryFile.cxx:1728
 TDirectoryFile.cxx:1729
 TDirectoryFile.cxx:1730
 TDirectoryFile.cxx:1731
 TDirectoryFile.cxx:1732
 TDirectoryFile.cxx:1733
 TDirectoryFile.cxx:1734
 TDirectoryFile.cxx:1735
 TDirectoryFile.cxx:1736
 TDirectoryFile.cxx:1737
 TDirectoryFile.cxx:1738
 TDirectoryFile.cxx:1739
 TDirectoryFile.cxx:1740
 TDirectoryFile.cxx:1741
 TDirectoryFile.cxx:1742
 TDirectoryFile.cxx:1743
 TDirectoryFile.cxx:1744
 TDirectoryFile.cxx:1745
 TDirectoryFile.cxx:1746
 TDirectoryFile.cxx:1747
 TDirectoryFile.cxx:1748
 TDirectoryFile.cxx:1749
 TDirectoryFile.cxx:1750
 TDirectoryFile.cxx:1751
 TDirectoryFile.cxx:1752
 TDirectoryFile.cxx:1753
 TDirectoryFile.cxx:1754
 TDirectoryFile.cxx:1755
 TDirectoryFile.cxx:1756
 TDirectoryFile.cxx:1757
 TDirectoryFile.cxx:1758
 TDirectoryFile.cxx:1759
 TDirectoryFile.cxx:1760
 TDirectoryFile.cxx:1761
 TDirectoryFile.cxx:1762
 TDirectoryFile.cxx:1763
 TDirectoryFile.cxx:1764
 TDirectoryFile.cxx:1765
 TDirectoryFile.cxx:1766
 TDirectoryFile.cxx:1767
 TDirectoryFile.cxx:1768
 TDirectoryFile.cxx:1769
 TDirectoryFile.cxx:1770
 TDirectoryFile.cxx:1771
 TDirectoryFile.cxx:1772
 TDirectoryFile.cxx:1773
 TDirectoryFile.cxx:1774
 TDirectoryFile.cxx:1775
 TDirectoryFile.cxx:1776
 TDirectoryFile.cxx:1777
 TDirectoryFile.cxx:1778
 TDirectoryFile.cxx:1779
 TDirectoryFile.cxx:1780
 TDirectoryFile.cxx:1781
 TDirectoryFile.cxx:1782
 TDirectoryFile.cxx:1783
 TDirectoryFile.cxx:1784
 TDirectoryFile.cxx:1785
 TDirectoryFile.cxx:1786
 TDirectoryFile.cxx:1787
 TDirectoryFile.cxx:1788
 TDirectoryFile.cxx:1789
 TDirectoryFile.cxx:1790
 TDirectoryFile.cxx:1791
 TDirectoryFile.cxx:1792
 TDirectoryFile.cxx:1793
 TDirectoryFile.cxx:1794
 TDirectoryFile.cxx:1795
 TDirectoryFile.cxx:1796
 TDirectoryFile.cxx:1797
 TDirectoryFile.cxx:1798
 TDirectoryFile.cxx:1799
 TDirectoryFile.cxx:1800
 TDirectoryFile.cxx:1801
 TDirectoryFile.cxx:1802
 TDirectoryFile.cxx:1803
 TDirectoryFile.cxx:1804
 TDirectoryFile.cxx:1805
 TDirectoryFile.cxx:1806
 TDirectoryFile.cxx:1807
 TDirectoryFile.cxx:1808
 TDirectoryFile.cxx:1809
 TDirectoryFile.cxx:1810
 TDirectoryFile.cxx:1811
 TDirectoryFile.cxx:1812
 TDirectoryFile.cxx:1813
 TDirectoryFile.cxx:1814
 TDirectoryFile.cxx:1815
 TDirectoryFile.cxx:1816
 TDirectoryFile.cxx:1817
 TDirectoryFile.cxx:1818
 TDirectoryFile.cxx:1819
 TDirectoryFile.cxx:1820
 TDirectoryFile.cxx:1821
 TDirectoryFile.cxx:1822
 TDirectoryFile.cxx:1823
 TDirectoryFile.cxx:1824
 TDirectoryFile.cxx:1825
 TDirectoryFile.cxx:1826
 TDirectoryFile.cxx:1827
 TDirectoryFile.cxx:1828
 TDirectoryFile.cxx:1829
 TDirectoryFile.cxx:1830
 TDirectoryFile.cxx:1831
 TDirectoryFile.cxx:1832
 TDirectoryFile.cxx:1833
 TDirectoryFile.cxx:1834
 TDirectoryFile.cxx:1835
 TDirectoryFile.cxx:1836
 TDirectoryFile.cxx:1837
 TDirectoryFile.cxx:1838
 TDirectoryFile.cxx:1839
 TDirectoryFile.cxx:1840
 TDirectoryFile.cxx:1841
 TDirectoryFile.cxx:1842
 TDirectoryFile.cxx:1843
 TDirectoryFile.cxx:1844
 TDirectoryFile.cxx:1845
 TDirectoryFile.cxx:1846
 TDirectoryFile.cxx:1847
 TDirectoryFile.cxx:1848
 TDirectoryFile.cxx:1849
 TDirectoryFile.cxx:1850
 TDirectoryFile.cxx:1851
 TDirectoryFile.cxx:1852
 TDirectoryFile.cxx:1853
 TDirectoryFile.cxx:1854
 TDirectoryFile.cxx:1855
 TDirectoryFile.cxx:1856
 TDirectoryFile.cxx:1857
 TDirectoryFile.cxx:1858
 TDirectoryFile.cxx:1859
 TDirectoryFile.cxx:1860
 TDirectoryFile.cxx:1861
 TDirectoryFile.cxx:1862
 TDirectoryFile.cxx:1863
 TDirectoryFile.cxx:1864
 TDirectoryFile.cxx:1865
 TDirectoryFile.cxx:1866
 TDirectoryFile.cxx:1867
 TDirectoryFile.cxx:1868
 TDirectoryFile.cxx:1869
 TDirectoryFile.cxx:1870
 TDirectoryFile.cxx:1871
 TDirectoryFile.cxx:1872
 TDirectoryFile.cxx:1873
 TDirectoryFile.cxx:1874
 TDirectoryFile.cxx:1875
 TDirectoryFile.cxx:1876
 TDirectoryFile.cxx:1877
 TDirectoryFile.cxx:1878
 TDirectoryFile.cxx:1879
 TDirectoryFile.cxx:1880
 TDirectoryFile.cxx:1881
 TDirectoryFile.cxx:1882
 TDirectoryFile.cxx:1883
 TDirectoryFile.cxx:1884
 TDirectoryFile.cxx:1885
 TDirectoryFile.cxx:1886
 TDirectoryFile.cxx:1887
 TDirectoryFile.cxx:1888
 TDirectoryFile.cxx:1889
 TDirectoryFile.cxx:1890
 TDirectoryFile.cxx:1891
 TDirectoryFile.cxx:1892
 TDirectoryFile.cxx:1893
 TDirectoryFile.cxx:1894
 TDirectoryFile.cxx:1895
 TDirectoryFile.cxx:1896
 TDirectoryFile.cxx:1897
 TDirectoryFile.cxx:1898
 TDirectoryFile.cxx:1899
 TDirectoryFile.cxx:1900
 TDirectoryFile.cxx:1901
 TDirectoryFile.cxx:1902
 TDirectoryFile.cxx:1903
 TDirectoryFile.cxx:1904
 TDirectoryFile.cxx:1905
 TDirectoryFile.cxx:1906
 TDirectoryFile.cxx:1907
 TDirectoryFile.cxx:1908
 TDirectoryFile.cxx:1909
 TDirectoryFile.cxx:1910
 TDirectoryFile.cxx:1911
 TDirectoryFile.cxx:1912
 TDirectoryFile.cxx:1913
 TDirectoryFile.cxx:1914
 TDirectoryFile.cxx:1915
 TDirectoryFile.cxx:1916
 TDirectoryFile.cxx:1917
 TDirectoryFile.cxx:1918
 TDirectoryFile.cxx:1919
 TDirectoryFile.cxx:1920
 TDirectoryFile.cxx:1921
 TDirectoryFile.cxx:1922
 TDirectoryFile.cxx:1923
 TDirectoryFile.cxx:1924
 TDirectoryFile.cxx:1925
 TDirectoryFile.cxx:1926
 TDirectoryFile.cxx:1927
 TDirectoryFile.cxx:1928
 TDirectoryFile.cxx:1929
 TDirectoryFile.cxx:1930
 TDirectoryFile.cxx:1931
 TDirectoryFile.cxx:1932
 TDirectoryFile.cxx:1933
 TDirectoryFile.cxx:1934
 TDirectoryFile.cxx:1935
 TDirectoryFile.cxx:1936
 TDirectoryFile.cxx:1937
 TDirectoryFile.cxx:1938
 TDirectoryFile.cxx:1939
 TDirectoryFile.cxx:1940
 TDirectoryFile.cxx:1941
 TDirectoryFile.cxx:1942
 TDirectoryFile.cxx:1943
 TDirectoryFile.cxx:1944
 TDirectoryFile.cxx:1945
 TDirectoryFile.cxx:1946
 TDirectoryFile.cxx:1947
 TDirectoryFile.cxx:1948
 TDirectoryFile.cxx:1949
 TDirectoryFile.cxx:1950
 TDirectoryFile.cxx:1951
 TDirectoryFile.cxx:1952
 TDirectoryFile.cxx:1953
 TDirectoryFile.cxx:1954
 TDirectoryFile.cxx:1955
 TDirectoryFile.cxx:1956
 TDirectoryFile.cxx:1957
 TDirectoryFile.cxx:1958
 TDirectoryFile.cxx:1959
 TDirectoryFile.cxx:1960
 TDirectoryFile.cxx:1961
 TDirectoryFile.cxx:1962
 TDirectoryFile.cxx:1963
 TDirectoryFile.cxx:1964
 TDirectoryFile.cxx:1965
 TDirectoryFile.cxx:1966
 TDirectoryFile.cxx:1967
 TDirectoryFile.cxx:1968
 TDirectoryFile.cxx:1969
 TDirectoryFile.cxx:1970
 TDirectoryFile.cxx:1971
 TDirectoryFile.cxx:1972
 TDirectoryFile.cxx:1973
 TDirectoryFile.cxx:1974
 TDirectoryFile.cxx:1975
 TDirectoryFile.cxx:1976
 TDirectoryFile.cxx:1977
 TDirectoryFile.cxx:1978
 TDirectoryFile.cxx:1979
 TDirectoryFile.cxx:1980
 TDirectoryFile.cxx:1981
 TDirectoryFile.cxx:1982
 TDirectoryFile.cxx:1983
 TDirectoryFile.cxx:1984
 TDirectoryFile.cxx:1985
 TDirectoryFile.cxx:1986
 TDirectoryFile.cxx:1987
 TDirectoryFile.cxx:1988
 TDirectoryFile.cxx:1989
 TDirectoryFile.cxx:1990
 TDirectoryFile.cxx:1991
 TDirectoryFile.cxx:1992
 TDirectoryFile.cxx:1993
 TDirectoryFile.cxx:1994
 TDirectoryFile.cxx:1995
 TDirectoryFile.cxx:1996
 TDirectoryFile.cxx:1997
 TDirectoryFile.cxx:1998
 TDirectoryFile.cxx:1999
 TDirectoryFile.cxx:2000
 TDirectoryFile.cxx:2001
 TDirectoryFile.cxx:2002
 TDirectoryFile.cxx:2003
 TDirectoryFile.cxx:2004
 TDirectoryFile.cxx:2005
 TDirectoryFile.cxx:2006
 TDirectoryFile.cxx:2007
 TDirectoryFile.cxx:2008
 TDirectoryFile.cxx:2009
 TDirectoryFile.cxx:2010
 TDirectoryFile.cxx:2011
 TDirectoryFile.cxx:2012
 TDirectoryFile.cxx:2013
 TDirectoryFile.cxx:2014
 TDirectoryFile.cxx:2015
 TDirectoryFile.cxx:2016
 TDirectoryFile.cxx:2017
 TDirectoryFile.cxx:2018
 TDirectoryFile.cxx:2019
 TDirectoryFile.cxx:2020
 TDirectoryFile.cxx:2021
 TDirectoryFile.cxx:2022
 TDirectoryFile.cxx:2023
 TDirectoryFile.cxx:2024
 TDirectoryFile.cxx:2025
 TDirectoryFile.cxx:2026
 TDirectoryFile.cxx:2027
 TDirectoryFile.cxx:2028
 TDirectoryFile.cxx:2029
 TDirectoryFile.cxx:2030
 TDirectoryFile.cxx:2031
 TDirectoryFile.cxx:2032
 TDirectoryFile.cxx:2033
 TDirectoryFile.cxx:2034
 TDirectoryFile.cxx:2035
 TDirectoryFile.cxx:2036