ROOT logo
//*--- Author : V.Pechenov
//*--- Modified: 26.06.07 V.Pechenov
//*--- $Id: hmdcmille.cc,v 1.61 2007/07/09 12:38:36 pechenov Exp $

using namespace std;
#include "hmdcmille.h"
#include "Mille.h"
#include "hades.h"
#include "hruntimedb.h"
#include "hcategory.h"
#include "hiterator.h"
#include "hmdcsizescells.h"
#include "hmdcclussim.h"
#include "hmdctrackdset.h"
#include "hmdctrackparam.h"
#include "hmdcwiredata.h"
#include "hgeantkine.h"
#include "hgeantmdc.h"
#include "hmdcgetcontainers.h"
#include "hmdclayergeompar.h"
#include "hmdclayercorrpar.h"
#include "hmdcgeompar.h"
#include "hspecgeompar.h"
#include "hmdcgeomstruct.h"
#include "hparasciifileio.h"
#include "hmdcdetector.h"
#include "hmdclistcells.h"
#include <TH1.h>
#include <TH2.h>
#include <TSystem.h>

//_HADES_CLASS_DESCRIPTION 
//////////////////////////////////////////////////////////////////////////////
//
// HMdcMille
//
// Interface class for Millipede alignment.
//
//////////////////////////////////////////////////////////////////////////////


ClassImp(HMdcMille)

HMdcMille::HMdcMille() : HMdc12Fit("mdc.Mille","mdc.Mille") {
  setDef();
}

HMdcMille::HMdcMille(const Char_t* milleOutFName,const Char_t* geomPFName,
    Int_t bmTmID,const Char_t* sumOfShFName) : HMdc12Fit("mdc.Mille","mdc.Mille") {
  
  setDef();
  if(bmTmID<0 || bmTmID>9) printErrorAndExit("HMdcMille","beamTimeId must be >= 0 and <=9 !!!");
  beamTimeId = bmTmID;
  
//!  if(milleOutFName) mille = new Mille(milleOutFName);
//!  else printErrorAndExit("HMdcMille",
//!      "Mille output file name is not specifaed !!!");
  milleFileName = milleOutFName;
  openNewBinaryFile();
  
  if(sumOfShFName != 0) sumOfShiftsFName = sumOfShFName;
  if(geomPFName != 0)   geomParFileName  = geomPFName;
  
  readSumOfShiftsFile();
  readPedeResFile(pedeResFName + ".res");
  if(!loadGeometryPar()) printErrorAndExit("HMdcMille","Can't load mdc geometry!!! Stop!");
  if(!makeShifts())      printErrorAndExit("HMdcMille","Can't change mdc geometry!");
   
  char buf[50];
  sprintf(buf,".st%02i",iteration);
  stepIter = buf;
}

void HMdcMille::setDef(void) {
  HMdcTrackDSet::setAnotherFit(this);
  nParMax          = 9;
  iteration        = 0;
  mille            = 0;
  shiftType        = 1;
  doCopyGeomFile   = kFALSE;
  doCopySumShFile  = kTRUE;
  doCopyResFile    = kTRUE;
  doCopyLogFile    = kFALSE;
  doCopyHisFile    = kFALSE;
  
  createPedeInFile = kFALSE; // kTRUE - create par.file
  isGeomChanged    = kFALSE;
  isGeomFileExist  = kFALSE;
  nTracks          = 0;
  nWiresTot        = 0;
  nLayersTot       = 0;
  parSteps[0]      = 0.01;     // shift along X
  parSteps[1]      = 0.01;     // shift along Y
  parSteps[2]      = 0.01;     // shift along Z
  parSteps[3]      = 0.003;    // rotation around X (in degree)
  parSteps[4]      = 0.003;    // rotation around Y (in degree)
  parSteps[5]      = 0.003;    // rotation around Z (in degree)
  parSteps[6]      = 0.004;    // cell thickness
  cellThicknFree   = kFALSE;
  nHists           = 0;
  fixFitTOffset    = kTRUE;
  useMdcShParOnly  = kFALSE;
  doLayP2Align     = kTRUE;
  nWiresMin        = 15;
  thetaCut         = -1.;
  
  pGetCont         = HMdcGetContainers::getObject();
  pMdcDet          = pGetCont->getMdcDetector();
  
  nBinaryFiles     = 0;
  milleFileSize    = 0;
  crPedeTaskFile   = kFALSE;
  
  printDebugFlag   = kFALSE;
  doHists          = kTRUE;
  
  nClustersCut     = 5;  //???
  filteringFlag    = 0;
  for(Int_t s=0;s<6;s++) {
    useSector[s] = kTRUE;
    nWiresCut[s] = 320;
  }
  
  // Clean arrais:
  for(Int_t im=0;im<24;im++)  pSCMod[im]      = NULL;
  for(Int_t il=0;il<144;il++) pSCLayer[il]    = NULL;
  for(Int_t il=0;il<144;il++) nLayerParts[il] = 0;
  for(Int_t s=0;s<6;s++) for(Int_t m=0;m<4;m++) {
    isMdcInAlign[s][m] = kFALSE;
    histInd[s]         = -1;
    mdcMods[s][m]      = 0;
    shiftSysMdc[s][m]  = -1;
    for(Int_t p=0;p<nParMax;p++) {   // Mdc shifts
      mShFlag[s][m][p]   = mFixFlag[s][m][p] = kFALSE;
      shiftsMdc[s][m][p] = 0.;
      sigmaMdc[s][m][p]  = 0.;
    }
    for(Int_t l=0;l<6;l++) {   // Layer shifts
      shiftSysLay[s][m][l] = -1;
      for(Int_t p=0;p<nParMax;p++) {
        lShFlag[s][m][l][p]   = kFALSE;
        lFixFlag[s][m][l][p]  = kFALSE;
        shiftsLay[s][m][l][p] = 0.;
        sigmaLay[s][m][l][p]  = 0.;
      }
    }
  }
  
  shitsInfo[0] = "shift along X axis [mm]";
  shitsInfo[1] = "shift along Y axis [mm]";
  shitsInfo[2] = "shift along Z axis [mm]";
  shitsInfo[3] = "rotation around X axis [deg]";
  shitsInfo[4] = "rotation around Y axis [deg]";
  shitsInfo[5] = "rotation around Z axis [deg]";
  shitsInfo[6] = "cell thickness";
  shitsInfo[7] = "shift along Y axis [mm]";
  shitsInfo[8] = "rotation around Z axis [deg]";
  
  // Default file names:
  pedeResFName     = "millepede";
  sumOfShiftsFName = "sumShifts.txt";
  geomParFileName  = "geoParameters.txt";
}

HMdcMille::~HMdcMille() {
  pGetCont->deleteCont();
}

Bool_t HMdcMille::init(void) {
  return HMdc12Fit::init();
}

Bool_t HMdcMille::reinit(void) {
  if( !HMdc12Fit::reinit() ) return kFALSE;
  HMdcSizesCells* pSizesCells = HMdcSizesCells::getExObject();
  if(pSizesCells == 0) return kFALSE;
  
  setShiftTransformation();
  
  for(Int_t sec=0;sec<6;sec++) {
    nMods[sec] = 0;
    HMdcSizesCellsSec& pSizesCellsSec = (*pSizesCells)[sec];
    if(&pSizesCellsSec == 0) continue;
    if(doHists) createHists(sec);
    for(module=0;module<4;module++) {
      HMdcSizesCellsMod& pSizesCellsMod = pSizesCellsSec[module];
      if(&pSizesCellsMod == 0) continue;
      nMods[sec]++;
      setIMod(sec,module);    // calculate iMod
      pSCMod[iMod] = &pSizesCellsMod;
      
      for(layer=0;layer<6;layer++) {
        HMdcSizesCellsLayer& rSizesCellsLay = pSizesCellsMod[layer];
        setILay(layer);      // calculate iLay
        if(&rSizesCellsLay == 0) continue;
        pSCLayer[iLay]    = &rSizesCellsLay;
        nLayerParts[iLay] = rSizesCellsLay.getLayerNParts();
        if     (shiftType == 0) setTrShiftInSecSys();
        else if(shiftType == 1) setTrShiftInModSys();
        else if(shiftType == 2) setTrShiftInLabSys();
      }
    }
  }

  for(Int_t s=0;s<6;s++) for(Int_t m=0;m<4;m++) for(Int_t l=-1;l<6;l++) {
    if(l>=0 && useMdcShParOnly) continue;
    for(Int_t p=0;p<nParMax;p++) {
      if(l <0 && (!mShFlag[s][m][p]    || mFixFlag[s][m][p]    || sigmaMdc[s][m][p]<0.)   ) continue;
      if(l>=0 && (!lShFlag[s][m][l][p] || lFixFlag[s][m][l][p] || sigmaLay[s][m][l][p]<0.)) continue;
      isMdcInAlign[s][m] = kTRUE;
    }
  }

  return kTRUE;
}

void HMdcMille::createHists(Int_t sec) {
  if(fHistograms != 0 && nHists>0) return;
  if(fHistograms == 0) fHistograms = new TList();
  char name[100];
  char title[100];
  histInd[sec] = nHists;
  
  sprintf(name,"pThVsPhS%i",sec+1);
  sprintf(title,"Sec.%i #Theta vs #phi",sec+1);
  fHistograms->Add(new TH2F(name,title,60,60.,120.,80,10.,90.));
  nHists++;
  
  sprintf(name,"hChi2S%i",sec+1);
  sprintf(title,"Sec.%i Chi^{2}/NDF",sec+1);
  fHistograms->Add(new TH1F(name,title,200,0.,20.));
  nHists++;
  
  sprintf(name,"hNWiresS%i",sec+1);
  sprintf(title,"Sec.%i Num.wires per track",sec+1);
  Int_t nBins = clusFitAlg==4 ? 100 : 50;
  fHistograms->Add(new TH1F(name,title,nBins,0.,nBins));
  nHists++;
  
  nBins = clusFitAlg==4 ? 49 : 25;
  sprintf(name,"hNLayersS%i",sec+1);
  sprintf(title,"Sec.%i Num.layers per track",sec+1);
  fHistograms->Add(new TH1F(name,title,nBins,0.,nBins));
  nHists++;
}

void HMdcMille::setShiftTransformation(void) {
  Double_t steps[6]={0.,0.,0.,0.,0.,0.};
  for(Int_t parn=0;parn<6;parn++) {
    derNorm[parn] =  1./parSteps[parn];
    steps[parn]   =  parSteps[parn];
    HMdcSizesCells::setTransform(steps,posShifts[parn]);

    steps[parn] = -parSteps[parn];
    HMdcSizesCells::setTransform(steps,negShifts[parn]);
    steps[parn] = 0.;
  }
  // For layer thickness align. parameter:
  for(Int_t lay=0;lay<6;lay++) {
    steps[2]        =  parSteps[6]*(lay-3+0.5);
    derLThNorm[lay] =  1./steps[2];
    HMdcSizesCells::setTransform(steps,posLThSh[lay]);
    
    steps[2] = -steps[2];
    HMdcSizesCells::setTransform(steps,negLThSh[lay]);
    steps[2] = 0.;
  }
}

void HMdcMille::setTrShiftInModSys(void) {
  // mdcSys - mdc<->sec. transfomation
  // laySec - rotated_layer<->mdc transfomation
  const HGeomTransform      *mdcSys   = pSCMod[iMod]->getSecTrans();
  const HGeomTransform      *laySec   = pSCLayer[iLay]->getRotLayP1SysRMod();
  const HGeomTransform      *layP2Mod = NULL;
  if(nLayerParts[iLay] == 2) layP2Mod = pSCLayer[iLay]->getRotLayP2SysRMod();
  for(Int_t parn=0;parn<6;parn++) {
    calcShiftInModSys(mdcSys,laySec,posShifts[parn],layPosSh[iLay][parn]);
    calcShiftInModSys(mdcSys,laySec,negShifts[parn],layNegSh[iLay][parn]);
    if(layP2Mod == NULL) continue;
    calcShiftInModSys(mdcSys,layP2Mod,posShifts[parn],layPosSh[iLay][parn+20]);
    calcShiftInModSys(mdcSys,layP2Mod,negShifts[parn],layNegSh[iLay][parn+20]);
  }
  // Cell thickness:
  calcShiftInModSys(mdcSys,laySec,posLThSh[layer],layPosSh[iLay][6]);
  calcShiftInModSys(mdcSys,laySec,negLThSh[layer],layNegSh[iLay][6]);
  if(layP2Mod != NULL) {
    calcShiftInModSys(mdcSys,layP2Mod,posLThSh[layer],layPosSh[iLay][6+20]);
    calcShiftInModSys(mdcSys,layP2Mod,negLThSh[layer],layNegSh[iLay][6+20]);
  }
}

void HMdcMille::setTrShiftInSecSys(void) {
  // laySec - rotated_layer<->sec transfomation
  const HGeomTransform*      laySec   = pSCLayer[iLay]->getRotLayP1SysRSec();
  const HGeomTransform*      layP2Sec = NULL;
  if(nLayerParts[iLay] == 2) layP2Sec = pSCLayer[iLay]->getRotLayP2SysRSec();
  for(Int_t parn=0;parn<6;parn++) {
    calcShiftInSecSys(laySec,posShifts[parn],layPosSh[iLay][parn]);
    calcShiftInSecSys(laySec,negShifts[parn],layNegSh[iLay][parn]);
    if(layP2Sec == NULL) continue;  // Layer second part:
    calcShiftInSecSys(layP2Sec,posShifts[parn],layPosSh[iLay][parn+20]);
    calcShiftInSecSys(layP2Sec,negShifts[parn],layNegSh[iLay][parn+20]);
  }
  // Cell thickness:
  calcShiftInSecSys(laySec,posLThSh[layer],layPosSh[iLay][6]);
  calcShiftInSecSys(laySec,negLThSh[layer],layNegSh[iLay][6]);
  if(layP2Sec == NULL) return;
  // Layer second part:
  calcShiftInSecSys(layP2Sec,posLThSh[layer],layPosSh[iLay][6+20]);
  calcShiftInSecSys(layP2Sec,negLThSh[layer],layNegSh[iLay][6+20]);
}

void HMdcMille::setTrShiftInLabSys(void) {
  // secSys - sec.<->lab. transfomation
  // laySec - rotated_layer<->mdc transfomation
  HMdcSizesCells* pSCells = HMdcSizesCells::getObject();
  const HGeomTransform      *secSys   = (*pSCells)[iSec].getLabTrans();
  const HGeomTransform      *laySec   = pSCLayer[iLay]->getRotLayP1SysRSec();
  const HGeomTransform      *layP2Sec = NULL;
  if(nLayerParts[iLay] == 2) layP2Sec = pSCLayer[iLay]->getRotLayP2SysRSec();
  for(Int_t parn=0;parn<6;parn++) {
    calcShiftInLabSys(secSys,laySec,posShifts[parn],layPosSh[iLay][parn]);
    calcShiftInLabSys(secSys,laySec,negShifts[parn],layNegSh[iLay][parn]);
    if(layP2Sec == NULL) continue;
    calcShiftInLabSys(secSys,layP2Sec,posShifts[parn],layPosSh[iLay][parn+20]);
    calcShiftInLabSys(secSys,layP2Sec,negShifts[parn],layNegSh[iLay][parn+20]);
  }
  // Cell thickness:
  calcShiftInLabSys(secSys,laySec,posLThSh[layer],layPosSh[iLay][6]);
  calcShiftInLabSys(secSys,laySec,negLThSh[layer],layNegSh[iLay][6]);
  if(layP2Sec != NULL) {
    calcShiftInLabSys(secSys,layP2Sec,posLThSh[layer],layPosSh[iLay][6+20]);
    calcShiftInLabSys(secSys,layP2Sec,negLThSh[layer],layNegSh[iLay][6+20]);
  }
}

void HMdcMille::calcShiftInModSys(const HGeomTransform* mdcSys, const HGeomTransform* laySysMod,
    const HGeomTransform& shift, HGeomTransform& laySh) {
  // mdcSys    - mdc<->sec. transfomation
  // laySysMod - rotated_layer<->mdc transfomation
  // shift     - transfomation for shift of one global parameter
  // laySh     - new (shifted) rotated_layer<->sec transfomation
  laySh = *laySysMod;
  laySh.transFrom(shift); 
  laySh.transFrom(*mdcSys);
}

void HMdcMille::calcShiftInSecSys( const HGeomTransform* laySysSec, const HGeomTransform& shift,
    HGeomTransform& laySh) {
  // laySysSec - rotated_layer<->sec transfomation
  // shift     - transfomation for shift of one global parameter
  // laySh     - new (shifted) rotated_layer<->sec transfomation
  laySh = *laySysSec;
  laySh.transFrom(shift); // Do shift of layer<->sec. transfomation
}

void HMdcMille::calcShiftInLabSys(const HGeomTransform* secSys, const HGeomTransform* laySysSec,
    const HGeomTransform& shift, HGeomTransform& laySh) {
  // secSys    - lab.<->sec. transfomation
  // laySysSec - rotated_layer<->sec. transfomation
  // shift     - transfomation for shift of one global parameter
  // laySh     - new (shifted) rotated_layer<->sec transfomation
  laySh = *laySysSec;
  laySh.transFrom(*secSys);
  laySh.transFrom(shift);
  laySh.transTo(*secSys);
}

Bool_t HMdcMille::finalize(void) {
  if(mille) delete mille;
  mille = 0;
  creatSumOfShiftsFile();
  if(!writeParAsciiFile()) printErrorAndExit("finalize","Can't write geometry parameters ASCII file!!!");
  if(createPedeInFile) creatPedeInParamFile();
  if(crPedeTaskFile)   writePedeTaskFile();
  return kTRUE;
}

Int_t HMdcMille::execute(void) {
  if(HMdcTrackDSet::fPrint()) {
    fitpar.setPrintFlag(gHades->getEventCounter());
    if(fitpar.getPrintFlag()) printf(
      "============================== Event %i =============================\n",
      gHades->getEventCounter());
  }
  if(clusFitAlg==3) {
    if(filteringFlag>0) {
      if( !eventFilter() )   return kSkipEvent;
      if( filteringFlag==2 ) return 0;
    }
    fitAlgorithmForMille();
  } else if(clusFitAlg==4) fitAlgForMilleCosmic();
  return 0;
}

Bool_t HMdcMille::eventFilter(void) {
  // For beam data only!
  HMdcClus* pClst;
  UInt_t nClusters[6] = {0,0,0,0,0,0};
  iterClus->Reset();
  while((pClst=(HMdcClus*)iterClus->Next())) if(pClst->getIndexParent()<0) {
    UChar_t sec = pClst->getSec();
    nClusters[sec]++;
  }
  HMdcEvntListCells* pEvLCells = HMdcEvntListCells::getExObject();
  Bool_t isGoodSectors = kFALSE;
  for(Int_t s=0;s<6;s++) {
    useSector[s] = kFALSE;
    if(nMods[s] <= 1) continue;
    if(nClusters[s]>0 && nClusters[s]<=nClustersCut) {
      if(pEvLCells != NULL) {
        Int_t nCells  = (*pEvLCells)[s].getNCells();
        Int_t nWiresC = (nWiresMin*nMods[s])/4;
        if(nCells>=nWiresC && nCells<=nWiresCut[s]) {
          useSector[s]  = kTRUE;
          isGoodSectors = kTRUE;
        }
      } else {
        useSector[s]  = kTRUE;
        isGoodSectors = kTRUE;
      }
    }
  }
  return isGoodSectors;
}

void HMdcMille::fitAlgorithmForMille(void) {
  // Sector fit
  // Magnet off + combined clusters in sector
  HMdcClus* fClst1;
  iterClus->Reset();
  while((fClst1=(HMdcClus*)iterClus->Next())) if(fClst1->getIndexParent()<0) {
    UChar_t sec = fClst1->getSec();
    if(!useSector[sec]) continue;
    //--- Angle theta cut:
//!!!    if(thetaCut>0. && fClst1->getTheta()*TMath::RadToDeg()<thetaCut) continue;
//     Double_t theta = fClst1->getTheta()*TMath::RadToDeg();
//     Double_t phi   = fClst1->getPhi()*TMath::RadToDeg();
//     Int_t    sec   = fClst1->getSec();
/*
if(sec==1) {
  if(theta<35.) {
    if(phi>=108. && theta<35.) continue;
    if(phi>=102. && theta<25.) continue;
    if(phi>=90.  && theta<20.) continue;
  }
} else if(sec==2) {
  if(theta<30.) {
    if(phi>=96. && theta<30.) continue;
    if(phi>=78. && theta<25.) continue;
  }
} else if(sec==3) {
  if(phi>=96. && theta<25.) continue;
} else if(sec==4) {
  if(phi>=108. && theta<25.) continue;
}
*/    
    fittersArr[0].reset();
    Int_t first,last;
    fClst1->getIndexRegChilds(first,last);
    HMdcClus* fClst2 = (first<0) ? 0:(HMdcClus*)fClusCat->getObject(first);
    // Num.wires test:
    Int_t nWr = fClst1->getNDrTimes();
    if(fClst2) nWr += fClst2->getNDrTimes();
    nWiresMinTr = (nWiresMin*nMods[sec])/4;
    if(nWr < nWiresMinTr) continue;
    
    Int_t nWiresInAlign = 0;
    Int_t mod = fClst1->getIOSeg()*2;
    if( isMdcInAlign[sec][mod]   ) nWiresInAlign += fClst1->getNDrTimesMod(0);
    if( isMdcInAlign[sec][mod+1] ) nWiresInAlign += fClst1->getNDrTimesMod(1);
    mod = fClst2->getIOSeg()*2;
    if( isMdcInAlign[sec][mod]   ) nWiresInAlign += fClst2->getNDrTimesMod(0);
    if( isMdcInAlign[sec][mod+1] ) nWiresInAlign += fClst2->getNDrTimesMod(1);
    if(nWiresInAlign < 6) continue;
    
    Bool_t flag=kFALSE;
    if(fClst2==0) {
      if(fClst1->getNDrTimesMod(0)==0 || fClst1->getNDrTimesMod(1)==0) continue;
      Int_t typeClFn = fClst1->getTypeClFinder();
      if(typeClFn==0)      flag = fitSeg(fClst1);       // Two mdc per segment
      else if(typeClFn==2) flag = fitMixedClus(fClst1);
      if(!flag) continue;
      fitter=fittersArr[0].getFitter(0); // ???
      if(fitter->getSegIndex()<0) continue;
      fillTrkCandISeg();
    } else {
      flag = fitSec(fClst1,fClst2);  //??????????????
    }
    if(flag && fitter->getFitStatus()) sendToMille();
  }
}

void HMdcMille::fitAlgForMilleCosmic(void) {
  // Two sector fit
  // Magnet off + combined clusters in sector
fitpar.setChi2PerNdfCut(100.);
  HMdcClus* fClst = NULL;
  iterClus->Reset();
  HMdcClus *fClstArr[6][2];     // [sector][0,1 -IOseg]
  Int_t nSegs[6];
  Int_t nMods[6];
  Int_t secList[4];
  Int_t nLaySec[6];
  Int_t &s1 = secList[0];
  Int_t &s2 = secList[1]; 
  Int_t &s3 = secList[2];
  Int_t &s4 = secList[3];
  // In cosmic one track per event only! First cluster finding:
  while((fClst=(HMdcClus*)iterClus->Next())) if(fClst->getIndexParent()<0) {
    Int_t nSectors  = 0;
    Int_t nSegments = 1;
    Int_t nModules  = 0;
    Int_t nWires    = 0;
    for(Int_t s=0;s<6;s++) {
      fClstArr[s][0] = NULL;
      fClstArr[s][1] = NULL;
      nSegs[s]       = 0;
      nMods[s]       = 0;
      nLaySec[s]     = 0;
    }
    Int_t nWiresInAlign = 0;
    while(kTRUE) {
      Int_t sec = fClst->getSec();
      Int_t seg = fClst->getIOSeg();
      if(fClstArr[sec][seg] != 0) {
        Error("fitAlgForMilleCosmic","Second time HMdcClus for sec.%i seg.%i",sec,seg);
        return;
      }
      Int_t mod = seg*2;
      if( isMdcInAlign[sec][mod]   ) nWiresInAlign += fClst->getNDrTimesMod(0);
      if( isMdcInAlign[sec][mod+1] ) nWiresInAlign += fClst->getNDrTimesMod(1);
      
      fClstArr[sec][seg] = fClst;
      if(nSegs[sec] == 0) {
        secList[nSectors] = sec;
        nSectors++;
      }
      nLaySec[sec] += fClst->getNLayers();
      nSegs[sec]++;
      nSegments++;
      Int_t nm = fClst->getActiveModule()<0;
      nMods[sec] += nm;
      nModules   += nm;
      nWires     += fClst->getNDrTimes();
      Int_t first,last;
      fClst->getIndexRegChilds(first,last);
      if(first < 0 || nSectors == 4) break;
      fClst = (HMdcClus*)fClusCat->getObject(first);
    }
    
    if(nWiresInAlign < 6) continue;
    
    for(Int_t s=0;s<6;s++) if(fClstArr[s][0]==NULL && fClstArr[s][1]!=NULL) {
      fClstArr[s][0] = fClstArr[s][1];
      fClstArr[s][1] = NULL;
    }
    if(nModules==1) continue;
    if(nModules>=4) nWiresMinTr = nWiresMin;
    else            nWiresMinTr = (nWiresMin*nModules)/4;

    if(nWires < nWiresMinTr) continue;  // Num.wires test
    
    
    fittersArr[0].reset();
    Bool_t flag=kFALSE;
    if(nSegments == 1) {
      if(nModules < 2) continue;
      Int_t typeClFn = fClst->getTypeClFinder();
      if(typeClFn==0)          flag = fitSeg(fClst);
      else if(typeClFn==2)     flag = fitMixedClus(fClst);
    } else {
      if     (nSectors == 1) flag = fitSec(fClstArr[s1][0],fClstArr[s1][1]);
      else if(nSectors == 2) flag = fit2Sectors(fClstArr[s1][0],fClstArr[s1][1],
                                                fClstArr[s2][0],fClstArr[s2][1]);
//       else if(nSectors > 2) { //???????????
// Int_t sec1 = 0;
// for(Int_t s=0;s<6;s++) if(s!=sec1 && nLaySec[s]>nLaySec[sec1]) sec1 = s;
// Int_t sec2 = sec1>0 ? 0 : 1;
// for(Int_t s=0;s<6;s++) if(s!=sec1 && s!=sec2 && nLaySec[s]>nLaySec[sec2]) sec2 = s;
// flag = fit2Sectors(fClstArr[sec1][0],fClstArr[sec1][1],fClstArr[sec2][0],fClstArr[sec2][1]);
//       } 
      else if(nSectors == 3) flag = fitNSectors(fClstArr[s1][0],fClstArr[s1][1],
                                                fClstArr[s2][0],fClstArr[s2][1],
                                                fClstArr[s3][0],fClstArr[s3][1],NULL,NULL);
      else if(nSectors == 4) flag = fitNSectors(fClstArr[s1][0],fClstArr[s1][1],
                                                fClstArr[s2][0],fClstArr[s2][1],
                                                fClstArr[s3][0],fClstArr[s3][1],
                                                fClstArr[s4][0],fClstArr[s4][1]);
      
      
      
    }
    
    if(flag && fitter->getFitStatus()) sendToMille(); 
    
//     Int_t first,last;
//     Int_t sec  = fClst1->getSec();
//     fClst1->getIndexRegChilds(first,last);
//     HMdcClus* fClst2 = (first<0) ? NULL : (HMdcClus*)fClusCat->getObject(first);
//     HMdcClus* fClst3 = NULL;
//     HMdcClus* fClst4 = NULL;
//     if(fClst2) {
//       if(sec == fClst2->getSec()) {
//         fClst2->getIndexRegChilds(first,last);
//         fClst3 = (first<0) ? 0:(HMdcClus*)fClusCat->getObject(first);
//       } else {
//         fClst3 = fClst2;
//         fClst2 = NULL;
//       }
//       if(fClst3) {
//         fClst3->getIndexRegChilds(first,last);
//         fClst4 = (first<0) ? 0:(HMdcClus*)fClusCat->getObject(first);
//       }
//     }
//     Int_t sec2 = -1;
//     if(fClst3)      sec2 = fClst3->getSec();
//     else if(fClst4) sec2 = fClst4->getSec();
// Int_t nModules = 0;
// nModules += fClst1->getActiveModule()<0 ? 2:1;
// if(fClst2) nModules += fClst2->getActiveModule()<0 ? 2:1;
// if(fClst3) nModules += fClst3->getActiveModule()<0 ? 2:1;
// if(fClst4) nModules += fClst4->getActiveModule()<0 ? 2:1;
// if(nModules==1) continue;
// if(nModules>=4) nWiresMinTr = nWiresMin;
// else            nWiresMinTr = (nWiresMin*nModules)/4;
// 
//     // Num.wires test:
//     Int_t nWr = fClst1->getNDrTimes();
//     if(fClst2) nWr += fClst2->getNDrTimes();
//     if(fClst3) nWr += fClst3->getNDrTimes();
//     if(fClst4) nWr += fClst4->getNDrTimes();
//     if(nWr < nWiresMinTr) continue;
// 
//     Bool_t flag=kFALSE;
//     if(fClst2==0 && fClst3==0 && fClst4==0) {
//       if(fClst1->getNDrTimesMod(0)==0 || fClst1->getNDrTimesMod(1)==0) continue;
//       Int_t typeClFn = fClst1->getTypeClFinder();
//       if(typeClFn==0)          flag = fitSeg(fClst1);
//       else if(typeClFn==2)     flag = fitMixedClus(fClst1);
//     } else {
//       if(fClst3==0&&fClst4==0) flag = fitSec(fClst1,fClst2);
//       else                     flag = fit2Sectors(fClst1,fClst2,fClst3,fClst4);
//     }
//     if(flag && fitter->getFitStatus()) sendToMille(); 
  }
}

void HMdcMille::sendToMille(void) {
  if(mille == 0) return;
  
  finalParam = fitter->getFinalParam();
  HMdcWiresArr& wiresArr = fitter->getWiresArr();
  Int_t nWiresData = wiresArr.getNDriftTimes();
  
  // test chi2 and ...:
  //  if(fitter->getMaxChi2()>9) return;
  
  // TEST TEST ???????????????!!!!!!!!!!!!!!!!!!!!!!!!!!!
  HMdcList24GroupCells& listCells = wiresArr.getOutputListCells();
  for(Int_t mod=0;mod<4;mod++) {
    Int_t nLayersMod = listCells.getNLayersMod(mod);
    if(nLayersMod == 1) return;
//???    if(mod==1 && nLayersMod < 4) return;
  }
  if(wiresArr.getSector2()>=0) {
    HMdcList24GroupCells &listCells2 = wiresArr.getOutputListCells2();
    for(Int_t mod=0;mod<4;mod++) if(listCells2.getNLayersMod(mod) == 1) return;
    if(wiresArr.getSector3()>=0) {
      HMdcList24GroupCells &listCells3 = wiresArr.getOutputListCells3();
      for(Int_t mod=0;mod<4;mod++) if(listCells3.getNLayersMod(mod) == 1) return;
      if(wiresArr.getSector4()>=0) {
       HMdcList24GroupCells &listCells4 = wiresArr.getOutputListCells4();
        for(Int_t mod=0;mod<4;mod++) if(listCells4.getNLayersMod(mod) == 1) return;
      }
    }
  }
  
  for(Int_t wInd=0;wInd<nWiresData;wInd++) {
    wireData = wiresArr.getWireData(wInd);
    if(wireData->getHitStatus() != 1) continue;
    if(!wireData->isInCell()) return;
  }
  

  p1.setXYZ(finalParam->x1(),finalParam->y1(),finalParam->z1());
  p2.setXYZ(finalParam->x2(),finalParam->y2(),finalParam->z2());
  
  Int_t nWires  = finalParam->getNumOfGoodWires();
  Int_t nLayers = wiresArr.getOutputNLayers();
  if(nWires < nWiresMinTr) return;
  
  // Filling histograms:
  if(doHists) {
    Int_t hstInd = histInd[wiresArr.getSector()];
    if(hstInd>=0) {
      ((TH2F*)fHistograms->At(hstInd))->Fill(finalParam->getPhiDeg(),finalParam->getThetaDeg());
      ((TH1F*)fHistograms->At(hstInd+1))->Fill(finalParam->getChi2());
      ((TH1F*)fHistograms->At(hstInd+2))->Fill(nWires+0.1);
      ((TH1F*)fHistograms->At(hstInd+3))->Fill(nLayers+0.1);
    }
  }
  
  // Derivatives calculation:
  if(fixFitTOffset) {
    for(Int_t wInd=0;wInd<nWiresData;wInd++) {
      wireData = wiresArr.getWireData(wInd);
      if(!wireData->getAnalytDeriv(locDer,0)) continue;
      int nGlobDer = getGlobalDer();
      mille->mille(4,locDer,nGlobDer,globDer,globLabel,-wireData->getDev(),wireData->getErrTdcTime());
    } // nWires
  } else {
    
    for(Int_t mi=0;mi<24;mi++) for(Int_t p=0;p<nParMax;p++) tofDerCorr[mi][p] = 0.;
    
    for(Int_t wInd=0;wInd<nWiresData;wInd++) {
      wireData = wiresArr.getWireData(wInd);
      if(wireData->getHitStatus() != 1) continue;
      setIModILay(); // calculate iMod and iLay + ...
      for(Int_t p=0;p<6;p++)         tofDerCorr[iMod][p] += calcDerTofCorr(p);
      if(mShFlag[sector][module][6]) tofDerCorr[iMod][6] += calcDerTofCorr(6);
    }
    
    for(Int_t wInd=0;wInd<nWiresData;wInd++) {
      wireData = wiresArr.getWireData(wInd);
      if(!wireData->getAnalytDeriv(locDer,finalParam)) continue;
      int nGlobDer = getGlobalDerWTof();
      mille->mille(4,locDer,nGlobDer,globDer,globLabel,
                   -wireData->getDev(),wireData->getErrTdcTime());
// if(module==0) printf("%iw.Glob: Der %g %g %g %g %g %g      %g %g\n",
// wInd,globDer[0],globDer[1],globDer[2],globDer[3],globDer[4],globDer[5],
// globDer[6],globDer[7]);
    } // nWires
  }
  nWiresTot  += nWires;
  nLayersTot += nLayers;
  nTracks++;
  
  milleFileSize += mille->end();
  if(milleFileSize > 1800000000) openNewBinaryFile();
}

void HMdcMille::openNewBinaryFile(void) {
  // New binary file:
  if(mille) delete mille;
  TString newFile(milleFileName);
  newFile += nBinaryFiles;
  mille = new Mille(newFile);
  milleFileSize = 0;
  nBinaryFiles++;
}

void HMdcMille::setIModILay(void) {
  sector = wireData->getSector();
  module = wireData->getModule();
  layer  = wireData->getLayer();
  setIModILay(sector,module,layer); // calculate iMod and iLay
  layPosShCurr = layPosSh[iLay];
  layNegShCurr = layNegSh[iLay];
  layerPart = pSCLayer[iLay]->getLayerPart(wireData->getCell());
  if(layerPart == 1) {
    layPosShCurr += 20;
    layNegShCurr += 20;
  }
}

Int_t HMdcMille::getGlobalDer(void) {
  setIModILay();
  Int_t nParam = 0;
//!!!  Int_t nMdcPar = mShFlag[sector][module][6] ? 7 : 6;
  Int_t nMdcPar = cellThicknFree ? 7 : 6;
  for(Int_t p=0;p<nMdcPar;p++) {
    globLabel[p] = packLabel(sector,module,-1,p); //!!!
    globDer[p]   = calcGlobDer(p);
    nParam++;
  }
  
//  Double_t cs[6]={0.766044,0.939693,1.,1.,0.939693,0.766044};
  if(shiftType == 1 && !useMdcShParOnly) {
    if(layerPart == 0 || !doLayP2Align) {  // Layer part 1
      globLabel[nParam] = packLabel(sector,module,layer,1); // in mdc sys
      globDer[nParam]   = globDer[1];                       // go to central wire number
      // ?      globDer[nParam]   = globDer[1]*cs[layer];
      nParam++;
      // ?     globLabel[nParam] = packLabel(sector,module,layer,2);
      // ?     globDer[nParam]   = globDer[2];
      // ?     nParam++;
      globLabel[nParam] = packLabel(sector,module,layer,5); // in mdc sys
      globDer[nParam]   = globDer[5];                       // go to the wire orientation
      nParam++;
    } else if(layerPart == 1) {  // Layer part 2 (it can be in mdc3 & 4 only)
      globLabel[nParam] = packLabel(sector,module,layer,7); // in mdc sys
      globDer[nParam]   = globDer[1];                       // go to central wire number
      nParam++;
      globLabel[nParam] = packLabel(sector,module,layer,8); // in mdc sys
      globDer[nParam]   = globDer[5];                       // go to the wire orientation
      nParam++;
    }
  }

//printf("0Glob: Der %.3g %.3g %.3g %.3g %.3g %.3g %.3g %.3g\n",
//globDer[0],globDer[1],globDer[2],globDer[3],globDer[4],globDer[5],globDer[6],globDer[7]);
  return nParam;
}

Int_t HMdcMille::getGlobalDerWTof(void) {
  setIModILay();
//!!!  Int_t nMdcPar = mShFlag[sector][module][6] ? 7 : 6;
  Int_t nMdcPar = cellThicknFree ? 7 : 6;
  Int_t nParam  = nMdcPar;
  for(Int_t p=0;p<nMdcPar;p++) {
    globLabel[p] = packLabel(sector,module,-1,p);
    Double_t dTm;
    Double_t corr = calcDerTofCorr(p,&dTm);
    globDer[p] = (dTm + tofDerCorr[iMod][p])*derNorm[p];
    if(useMdcShParOnly || shiftType!=1 || (p!=1 && p!=5) ) continue;
    // For HMdcLayerGeomPar:

    Int_t pInd = p==1 ? nMdcPar : nMdcPar+1;
    Int_t po   = p;
    if(layerPart==1 && doLayP2Align) {
      po    = p==1 ? 7 : 8;
      pInd += 2;
    }
    globLabel[pInd] = packLabel(sector,module,layer,po);
    globDer[pInd]   = (dTm + corr)*derNorm[p];
    nParam++;   
  }
  return nParam;
}

Double_t HMdcMille::calcDerTofCorr(Int_t p,Double_t* dDrTm) {
  Double_t   dDrT      = calcDDriftTime(p);
  if(dDrTm) *dDrTm     = dDrT;
  Double_t   wtNorm    = wireData->getWtNorm();
  Double_t   sumWtNorm = finalParam->getSumWtNorm(wireData->getModIndex());
  if(sumWtNorm > 0.) return -dDrT*wtNorm/sumWtNorm;
  return 0.;
}

int HMdcMille::packLabel(Int_t s,Int_t m,Int_t l,Int_t parn) {
  // if lay<0 - it is shift of mdc, otherwise shift of layer
  if(l<0) l = -1;
  if(createPedeInFile || !isGeomChanged) {
    if(l<0) mShFlag[s][m][parn]    = kTRUE;
    else    lShFlag[s][m][l][parn] = kTRUE;
  }
  int label = (((shiftType*10 + s+1)*10 + m+1)*10 + l+1)*10 + parn+1;
  if(beamTimeId>0 && l<0 && parn!=6) label += beamTimeId*100000;
  return label;
}

Bool_t HMdcMille::unpackLabel(Int_t label,Int_t& btId,Int_t& sys,
    Int_t& sec,Int_t& mod,Int_t& lay,Int_t& parn) {
  // shSys = 0 shift in respect sector system
  // shSys = 1 shift in respect mdc system
  // if lay==-1 - it is shift of mdc, otherwise shift of layer
  // parn = 0 - shift along X
  // parn = 1 - shift along Y
  // parn = 2 - shift along Z
  // parn = 3 - rotation around X
  // parn = 4 - rotation around Y
  // parn = 5 - rotation around Z
  // parn = 6 - cell thickness
  // parn = 7 - shift along Y for second layer part
  // parn = 8 - rotation around Z for second layer part
  btId = label/100000;              // beam time Id
  sys  = (label%100000)/10000;
  sec  = (label%10000)/1000 - 1;
  mod  = (label%1000)/100   - 1;
  lay  = (label%100)/10     - 1;
  parn = (label%10)         - 1;
  if(sec<0||sec>5 || mod<0||mod>3 || lay<-1||lay>5 || parn<0) return kFALSE;
  return kTRUE;
}

Double_t HMdcMille::calcGlobDer(Int_t parNum) {
  Double_t dDrT = calcDDriftTime(parNum);
  if(parNum==6) return dDrT*derLThNorm[layer];
  else          return dDrT*derNorm[parNum];    // derNorm=1/parSteps
}

Double_t HMdcMille::calcDDriftTime(Int_t p) {
  Int_t    dSign1  = {0};
  Int_t    dSign2  = {0};
  Double_t drTime1 = calcDriftTime(layPosShCurr[p],dSign1);
  Double_t drTime2 = calcDriftTime(layNegShCurr[p],dSign2);
  if(dSign1 == dSign2) return (drTime1-drTime2)*0.5; 
  Int_t dSignT = wireData->getDistanceSign();
  if(dSignT==dSign1)   return drTime1 - wireData->getDrTime();
                       return wireData->getDrTime() - drTime2;   // dSignT==dSign2
}

Double_t HMdcMille::calcDriftTime(const HGeomTransform& laySys,Int_t& distSign) {
  HGeomVector p1l,p2l;
  Int_t parSec = finalParam->getSec();
  if(parSec==sector || parSec<0) {
    p1l = p1;
    p2l = p2;
  } else {
    HMdcSizesCells* pSCells = HMdcSizesCells::getObject();
    pSCells->transLineToOtherSec(*finalParam,sector,p1l,p2l);
  }
  p1l = laySys.transTo(p1l);
  p2l = laySys.transTo(p2l);
  return wireData->calcDriftTimeForAlign(p1l,p2l,distSign);
}

void HMdcMille::setPedeInFileName(const char* fname) {
  pedeInParFName = fname;
  if(pedeInParFName.Length() > 0) createPedeInFile = kTRUE;
  else Error("setPedeInFileName","File name is not specified!!!");
}

void HMdcMille::creatPedeInParamFile(void) {
  FILE* file = fopen(pedeInParFName.Data(),"r");
  if(file != NULL) {
    printf("******CreatePedeInParamFile******\n");
    printf("* File %s exist!\n",pedeInParFName.Data());
    printf("* If you want to change this file\n");
    printf("* do it by hand or delete file.\n");
    printf("*********************************\n");
    fclose(file);
    return;
  }
  file = fopen(pedeInParFName.Data(),"w");
  if(file == NULL) Error("creatPedeInParamFile","Can't open file %s",pedeInParFName.Data());
  else {
    TString sys;
    if(shiftType == 0) sys = "All shifts done in sector sys.";
    if(shiftType == 1) sys = "All shifts done in mdc sys.";
    if(shiftType == 2) sys = "All shifts done in lab. sys.";
    fprintf(file," Parameter   !  %s\n",sys.Data());
    for(Int_t s=0;s<6;s++) for(Int_t m=0;m<4;m++) for(Int_t l=-1;l<6;l++) {
      if(l>=0 && useMdcShParOnly) continue;
      for(Int_t p=0;p<nParMax;p++) {
        if(l<0 && !mShFlag[s][m][p]) continue;
        if(l>=0 && !lShFlag[s][m][l][p]) continue;
        if( (l<0 && mFixFlag[s][m][p]) || (l>=0 && lFixFlag[s][m][l][p]) )
             fprintf(file,"%11i     0.0   -1.0000   !",packLabel(s,m,l,p));
        else fprintf(file,"%11i     0.0    0.0000   !",packLabel(s,m,l,p));

        if(l<0) fprintf(file," %is. %im.: mdc",s+1,m+1);
        else  {
          fprintf(file," %is. %im. %il.: layer",s+1,m+1,l+1);
          if(p==7 || p==8) fprintf(file," part II");
        }
        fprintf(file," %s\n",shitsInfo[p].Data());        // Print description
      }
    }
    fclose(file);
  }
}

Bool_t HMdcMille::loadGeometryPar(void) {
  HRuntimeDb* rtdb    = gHades->getRuntimeDb();
  if(rtdb == 0) return kFALSE;
  HParAsciiFileIo* inputFile = new HParAsciiFileIo;
  if(!inputFile->open(const_cast<char*>(geomParFileName.Data()),"in")) return kTRUE; // No file!
  HMdcGeomStruct*  pMdcGeomStruct = (HMdcGeomStruct*)rtdb->getContainer("MdcGeomStruct");
  if( !((HParSet*)pMdcGeomStruct)->init(inputFile) ) return kFALSE;
  pMdcGeomStruct->setStatic();
  pMdcGeomStruct->setInputVersion(1,1);
      
  HSpecGeomPar*     pSpecGeomPar = (HSpecGeomPar*)rtdb->getContainer("SpecGeomPar");
  HMdcGeomPar*      pMdcGeomPar  = (HMdcGeomPar*)rtdb->getContainer("MdcGeomPar");  
  HMdcLayerGeomPar* pMdcLGeomPar = (HMdcLayerGeomPar*)rtdb->getContainer("MdcLayerGeomPar");
  HMdcLayerCorrPar* pMdcLCorrPar = (HMdcLayerCorrPar*)rtdb->getContainer("MdcLayerCorrPar");
  
  if( !((HParSet*)pSpecGeomPar)->init(inputFile) ||
      !((HParSet*)pMdcGeomPar )->init(inputFile) ||
      !((HParSet*)pMdcLGeomPar)->init(inputFile) ||
      !((HParSet*)pMdcLCorrPar)->init(inputFile)) return kFALSE;
    
  pSpecGeomPar->setInputVersion(1,1);
  pMdcGeomPar ->setInputVersion(1,1);
  pMdcLGeomPar->setInputVersion(1,1);
  pMdcLCorrPar->setInputVersion(1,1);
  
  pSpecGeomPar->setStatic();
  pMdcGeomPar ->setStatic();
  pMdcLGeomPar->setStatic();
  pMdcLCorrPar->setStatic();
  
  inputFile->close();
  delete inputFile;
  isGeomFileExist = kTRUE;
  return kTRUE;
}

void HMdcMille::readPedeResFile(const char* fileName) {
  if(fileName == 0) printErrorAndExit("readPedeResFile","File name of Pede results not specified!");
  // Open file:
  FILE* file = fopen(fileName,"r");
  if(file == NULL) {
    if(iteration==0) {
      for(Int_t s=0;s<6;s++) for(Int_t m=0;m<4;m++) for(Int_t p=0;p<9;p++) mShFlag[s][m][p] = kTRUE;
      return;
    }
    printErrorAndExit("readPedeResFile","No pede result file!");
  }

  // Read file:
  TString buffer;
  if( !buffer.Gets(file) ) printErrorAndExit("readPedeResFile","Wrong format of file %s",fileName);
  Ssiz_t pos = buffer.Index("Parameter");
  if(pos<0 || pos>10)      printErrorAndExit("readPedeResFile","Wrong format of file %s",fileName);
  while(buffer.Gets(file) && buffer.Length()>16 && addShifts(buffer));

  fclose(file);
}

Bool_t HMdcMille::makeShifts(void) {
  if( !isGeomChanged ) return kTRUE;
  if( !isGeomFileExist ) return kFALSE;
  HMdcLayerGeomPar* pMdcLGeomPar = pGetCont->getMdcLayerGeomPar();
  HMdcLayerCorrPar* pMdcLCorrPar = pGetCont->getMdcLayerCorrPar();
  Bool_t reCalcLayerTransf = kFALSE;
  HGeomTransform shift;
  HGeomTransform trans;
  for(Int_t s=0;s<6;s++) for(Int_t m=0;m<4;m++) {
    if(pMdcDet->getModule(s,m) == 0) continue;
    HMdcLayerGeomParMod& fLayerParMod  = (*pMdcLGeomPar)[s][m];
    if(!useMdcShParOnly) for(Int_t l=0;l<6;l++) {
      if(shiftSysLay[s][m][l] != 1 ) continue; //!!!!!!!!!!!
      // Tol'ko dlya Y seychas!!!!!!!!!!!!!!!!!!!!!!!!
//V kakoy posledovatel'nosti????
      HMdcLayerGeomParLay& fLayerParLay = fLayerParMod[l];
      Double_t pitch     = fLayerParLay.getPitch();
      Double_t centWrOld = fLayerParLay.getCentralWireNr();
      Double_t wireOrOld = fLayerParLay.getWireOrient();
      Double_t wireOrNew = wireOrOld + shiftsLay[s][m][l][5];             // Layer rotation
      Double_t wireOrR   = wireOrNew*TMath::DegToRad();
      Double_t layShift  = shiftsLay[s][m][l][1]*TMath::Cos(wireOrR) -
                           shiftsLay[s][m][l][0]*TMath::Sin(wireOrR);     // Layer shift
      Double_t centWrNew = centWrOld - layShift/pitch;
      fLayerParLay.setWireOrient(wireOrNew);
      fLayerParLay.setCentralWireNr(centWrNew);

      //  ------- Layer second part: ------- 
      if(m<2 || !doLayP2Align) continue;
      Int_t   firstWrPII;
      Float_t layShiftPIIold, wrOrCorrPIIold;
      if(!pMdcLCorrPar->getLayerCorrPar(s,m,l, firstWrPII,layShiftPIIold,wrOrCorrPIIold)) continue;
      if(firstWrPII>300) pMdcLCorrPar->addLayerShift(s,m,l,firstWrPII,0.,0.);
      else {
//         Double_t wireOrPIIold   = wireOrOld - wrOrCorrPIIold;  
//         Double_t wireOrPIInew   = wireOrPIIold + shiftsLay[s][m][l][8];       // Layer PII rotation
//         
//         Double_t yShiftPIIold   = layShiftPIIold/TMath::Cos(wireOrPIIold);
//         Double_t yShiftPIInew   = yShiftPIIold  + shiftsLay[s][m][l][7];      // Layer PII y-shift
//         
//         Float_t  wrOrCorrPIInew = wireOrNew - wireOrPIInew;
//         Float_t  layShiftPIInew = yShiftPIInew*TMath::Cos(wireOrPIInew*TMath::DegToRad()) - layShift;
        Float_t  wrOrCorrPIInew = wrOrCorrPIIold + shiftsLay[s][m][l][5] - shiftsLay[s][m][l][8];
        Double_t cosWrOrPIInew  = TMath::Cos((wireOrNew - wrOrCorrPIInew)*TMath::DegToRad());
        Float_t  layShiftPIInew = layShiftPIIold + shiftsLay[s][m][l][7]*cosWrOrPIInew - layShift;
  
        pMdcLCorrPar->addLayerShift(s,m,l,firstWrPII,layShiftPIInew,wrOrCorrPIInew);
      }
    }
    if(shiftSysMdc[s][m]<0) continue;
    // Cell thickness:
    if(shiftsMdc[s][m][6] != 0.) {
      for(Int_t l=0;l<6;l++) {
        HMdcLayerGeomParLay& fLayerParLay  = fLayerParMod[l];
        Float_t catDist = fLayerParLay.getCatDist();
        fLayerParLay.setCatDist(catDist + shiftsMdc[s][m][6]);
      }
      reCalcLayerTransf = kTRUE;
    }
    
    // Shift MDC:
    HMdcSizesCells::setTransform(shiftsMdc[s][m],shift); //first 6 par. are used
    HModGeomPar* fMod = pGetCont->getModGeomPar(s,m);
    if(shiftSysMdc[s][m] == 0) {            // shifts in sector coor.system
      if( !pGetCont->getSecTransMod(trans,s,m) ) return kFALSE;
      trans.transFrom(shift);
      trans.transFrom(pGetCont->getLabTransSec(s));
      fMod->getLabTransform() = trans;
    } else if(shiftSysMdc[s][m] == 1) {     // shifts in mdc coor.system
      if(!pGetCont->getLabTransMod(trans,s,m)) return kFALSE;
      shift.transFrom(trans);
      fMod->getLabTransform() = shift;
    } else if(shiftSysMdc[s][m] == 2) {     // shifts in lab.coor.system
      if( !pGetCont->getLabTransMod(trans,s,m) ) return kFALSE;
      trans.transFrom(shift);
      fMod->getLabTransform() = trans;
    }
  }
  if(reCalcLayerTransf) pMdcLGeomPar->calcLayerTransformations();
  if(isGeomChanged) printf("\nMDC geometry has changed !!!\n\n");
  return kTRUE;
}

Bool_t HMdcMille::writeParAsciiFile(void) {
  TString outGeomFileName(geomParFileName + ".last");
  HParAsciiFileIo* outputFile = new HParAsciiFileIo;
  if( !outputFile->open(const_cast<char*>(outGeomFileName.Data()),"out") )
    return kFALSE;
  HRuntimeDb* rtdb    = gHades->getRuntimeDb();
  if(rtdb == 0) return kFALSE;
  if(rtdb->getContainer("MdcGeomStruct")->write(outputFile)<0)   return kFALSE; 
  if(rtdb->getContainer("SpecGeomPar")->write(outputFile)<0)     return kFALSE;
  if(rtdb->getContainer("MdcGeomPar")->write(outputFile)<0)      return kFALSE;
  if(rtdb->getContainer("MdcLayerGeomPar")->write(outputFile)<0) return kFALSE;
  if(rtdb->getContainer("MdcLayerCorrPar")->write(outputFile)<0) return kFALSE;
//  if(rtdb->getContainer("MdcCalParRaw")->write(outputFile)<0)    return kFALSE;  
  outputFile->close();
  delete outputFile;
  if(doCopyGeomFile) copyFile("cp",outGeomFileName);
  if(!isGeomFileExist && !isGeomChanged) {
    TString cpFile("cp "+outGeomFileName+" "+geomParFileName);
    gSystem->Exec(cpFile);
  }
  return kTRUE;
}

void HMdcMille::fixFullMod(Int_t s,Int_t m) {
  for(Int_t p=0;p<7;p++) fixModPar(s,m,p);
}

void HMdcMille::fixModPar(Int_t s,Int_t m,Int_t p) {
  if(s>=0&&s<6 && m>=0&&m<4 && p>=0&&p<7) {
    mFixFlag[s][m][p] = kTRUE;
    if(sigmaMdc[s][m][p] == 0.) sigmaMdc[s][m][p] = -1.;
  }
}

void HMdcMille::fixFullLay(Int_t s,Int_t m,Int_t l) {
  for(Int_t p=0;p<nParMax;p++) fixLayPar(s,m,l,p);
}

void HMdcMille::fixLayPar(Int_t s,Int_t m,Int_t l,Int_t p) {
  if(s<0 || s>5 || m<0 || m>3 || l<0 || l>5 || p<0 || p>8) return;
  lFixFlag[s][m][l][p] = kTRUE;
  if(sigmaLay[s][m][l][p] == 0.) sigmaLay[s][m][l][p] = -1.;
}

void HMdcMille::fixPar(Int_t s,Int_t m,Int_t l,Int_t p) {
  if(l<0) {
    if(p<0) fixFullMod(s,m);
    else    fixModPar(s,m,p);
  } else {
    if(p<0) fixFullLay(s,m,l);
    else    fixLayPar(s,m,l,p);
  }
}

void HMdcMille::readSumOfShiftsFile(void) {
  // Open file:
  FILE* file = fopen(sumOfShiftsFName.Data(),"r");
  if(file == NULL) return;

  // Read file:
  TString buffer;
  if( !buffer.Gets(file) ) printErrorAndExit("readSumOfShiftsFile",
      "Wrong format of file %s",sumOfShiftsFName.Data()); // Stop!
  Ssiz_t pos = buffer.Index("SumOfShifts:");
  if(pos<0 || pos>3) printErrorAndExit("readSumOfShiftsFile",
      "Wrong format of file %s",sumOfShiftsFName.Data()); // Stop!
  
  Int_t sys;
  Int_t n = sscanf(buffer.Data(),"%*s %i %*s %*s %i",&iteration,&sys);              
  if(n!=2 || iteration<0) printErrorAndExit("readSumOfShiftsFile",
      "Wrong format of file %s",sumOfShiftsFName.Data()); // Stop!
  iteration++;
  if( !buffer.Gets(file) ) printErrorAndExit("readSumOfShiftsFile",
      "Wrong format of file %s",sumOfShiftsFName.Data()); // Stop!
  pos = buffer.Index("Statistics:");
  if(pos<0 || pos>3) printErrorAndExit("readSumOfShiftsFile",
      "Wrong format of file %s",sumOfShiftsFName.Data()); // Stop!
  
  while(buffer.Gets(file) && buffer.Length()>16 && addShifts(buffer));
  
  fclose(file);
}

Bool_t HMdcMille::addShifts(TString& buffer) {
  TObjArray* arr = buffer.Tokenize(" ");
  Bool_t exitFlag = kFALSE;
  if(arr->GetEntries()>=3) {
    Int_t    label = ((TObjString*)(arr->At(0)))->GetString().Atoi();
    Double_t shift = ((TObjString*)(arr->At(1)))->GetString().Atof();
    Double_t coef  = ((TObjString*)(arr->At(2)))->GetString().Atof();
    Int_t btId,sys,sec,mod,lay,parn;
    if(!unpackLabel(label,btId,sys,sec,mod,lay,parn))
        printErrorAndExit("addShifts","Wrong format of input file!!! Stop!");
    exitFlag = kTRUE;
    if((btId == 0 || btId == beamTimeId) && pMdcDet->getModule(sec,mod)) {
      mdcMods[sec][mod] = 1;
      if(lay < 0) {
        shiftsMdc[sec][mod][parn]             += shift;
        if(coef >= 0.)  shiftSysMdc[sec][mod]  = sys; // Otherwise = -1
        if(shift != 0.) isGeomChanged          = kTRUE;
        mShFlag[sec][mod][parn]                = kTRUE;
        sigmaMdc[sec][mod][parn]               = coef;
      } else {
        shiftsLay[sec][mod][lay][parn]             += shift;
        if(coef >= 0.)  shiftSysLay[sec][mod][lay]  = sys;
        if(shift != 0.) isGeomChanged               = kTRUE;
        lShFlag[sec][mod][lay][parn]                = kTRUE;
        sigmaLay[sec][mod][lay][parn]               = coef;
      }
    }
  }
  arr->Delete();
  delete arr;
  return exitFlag;
}

void HMdcMille::printErrorAndExit(const char* func,const char* form,const char* str) {
#warning the following warning because of string literal can be ignored!
  if(str == NULL) Error(func,form);
  else            Error(func,form,str);
  exit(1);
}

void HMdcMille::creatSumOfShiftsFile(void) {
  FILE* file = fopen(sumOfShiftsFName.Data(),"w");
  if(file == NULL) printErrorAndExit("creatSumOfShiftsFile",
                                     "Can't open file %s",sumOfShiftsFName.Data());
  TString sys;
  if(shiftType == 0) sys = "all shifts done in sector sys.";
  if(shiftType == 1) sys = "all shifts done in mdc sys.";
  if(shiftType == 2) sys = "all shifts done in lab. sys.";
  Double_t mNWr = Double_t(nWiresTot)/nTracks;
  Double_t mNLy = Double_t(nLayersTot)/nTracks;
  fprintf(file,"SumOfShifts: %i iteration.  System %i - %s\n",iteration,shiftType,sys.Data());
  fprintf(file,"Statistics: %i tracks; %8.4f <wires/tr.>; %8.4f <layers/tr.>\n",nTracks,mNWr,mNLy);
  for(Int_t s=0;s<6;s++) for(Int_t m=0;m<4;m++) for(Int_t l=-1;l<6;l++) {
    if(l>=0 && useMdcShParOnly) continue;
    for(Int_t p=0;p<nParMax;p++) {
      if(l<0  && !mShFlag[s][m][p])    continue;
      if(l>=0 && !lShFlag[s][m][l][p]) continue;

      fprintf(file,"%11i",packLabel(s,m,l,p));             // Print label
      if(l < 0) fprintf(file,"  %18.10e  %9.4e  ! %is. %im.: mdc",
                             shiftsMdc[s][m][p],sigmaMdc[s][m][p],s+1,m+1);
      else {
        fprintf(file,"  %18.10e  %9.4e  ! %is. %im. %il.: layer",
                     shiftsLay[s][m][l][p],sigmaLay[s][m][l][p],s+1,m+1,l+1);
        if(p==7 || p==8) fprintf(file," part II");
      }
      fprintf(file," %s\n",shitsInfo[p].Data());            // Print description
    }
  }
  fclose(file);
  if(doCopySumShFile) copyFile("cp",sumOfShiftsFName);
  if(doCopyResFile)   copyFile("cp",pedeResFName,".res");
  if(doCopyHisFile)   copyFile("mv",pedeResFName,".his");
  if(doCopyLogFile)   copyFile("mv",pedeResFName,".log");
}

void HMdcMille::copyFile(const char* op,TString& file,const char* ext) {
  TString cpFile(op);
  if(ext) cpFile += " "+file+ext+" "+file+ext+stepIter;
  else    cpFile += " "+file+" "+file+stepIter;
  gSystem->Exec(cpFile);
}

void HMdcMille::creatPedeTaskFile(const char* fileName) {
  pedeTaskFileName = fileName;
  if(pedeTaskFileName.Length()<=0) printErrorAndExit("creatPedeTaskFile",
      "File name of pede task list is not specified!");
  crPedeTaskFile = kTRUE;
  // Set default method:
  method         = "inversion       ";
  numOfIter      = 3;
  accuracy       = 0.001;
  mthDescr       = "Gauss matrix inversion";
  bandwidth      = -1;
}

void HMdcMille::useInversionMethod(Int_t nit,Float_t acc) {
  method    = "inversion       ";
  numOfIter = nit;
  accuracy  = acc;
  mthDescr  = "Gauss matrix inversion";
  bandwidth = -1;
}

void HMdcMille::useBandCholeskyMethod(Int_t nit,Float_t acc,Int_t bwidth) {
  method    = "bandcholesky   ";
  numOfIter = nit;
  accuracy  = acc;
  mthDescr  = "Cholesky";
  bandwidth = bwidth;
}

void HMdcMille::useCholeskyMethod(Int_t nit,Float_t acc,Int_t bwidth) {
  method    = "cholesky       ";
  numOfIter = nit;
  accuracy  = acc;
  mthDescr  = "Cholesky";
  bandwidth = bwidth;
}

void HMdcMille::useSparseGMRESMethod(Int_t nit,Float_t acc) {
  method    = "sparseGMRES    ";
  numOfIter = nit;
  accuracy  = acc;
  mthDescr  = "minimal residual";
  bandwidth = -1;
}

void HMdcMille::useFullGMRESMethod(Int_t nit,Float_t acc) {
  method    = "fullGMRES      ";
  numOfIter = nit;
  accuracy  = acc;
  mthDescr  = "minimal residual";
  bandwidth = -1;
}

void HMdcMille::useDiagonalizationMethod(Int_t nit,Float_t acc) {
  method    = "diagonalization";
  numOfIter = nit;
  accuracy  = acc;
  mthDescr  = "diagonalization";
  bandwidth = -1;
}

void HMdcMille::setParConstrainFile(const char* file) {
  parConstrainFile = file;
}

void HMdcMille::writePedeTaskFile(void) {
  if(!crPedeTaskFile) return;
  if(pedeInParFName.Length() <= 0) printErrorAndExit("writePedeTaskFile",
    "File name of parameters list not specified!");
  FILE* file = fopen(pedeTaskFileName.Data(),"w");
  if(file == NULL) printErrorAndExit("writePedeTaskFile","Can't open file %s",pedeTaskFileName.Data());
  fprintf(file,"Cfiles   !\n");
  
  if(parConstrainFile.Length() > 0) 
       fprintf(file,"%s   ! constraints text file\n",parConstrainFile.Data());
  else fprintf(file,"!parConstrain.txt           ! constraints text file\n");
  
  fprintf(file,"%s   !  parameter text file\n",pedeInParFName.Data());
  
  for(Int_t nf=0;nf<nBinaryFiles;nf++) fprintf(file,
      "%s%i    ! binary data file\n",milleFileName.Data(),nf);
  
  if(bandwidth > 0) fprintf(file,"bandwidth %i ! width of band matrix\n",bandwidth);
  fprintf(file,"method %s %i %g  ! %s\n",method.Data(),numOfIter,accuracy,mthDescr.Data());
  fclose(file);
}

void HMdcMille::setMaxNumWiresCut(Int_t* wc) {
  for(Int_t s=0;s<6;s++) nWiresCut[s] = wc[s];
}

void HMdcMille::setMaxNumWiresCut(Int_t cs1,Int_t cs2,Int_t cs3,Int_t cs4,Int_t cs5,Int_t cs6) {
  nWiresCut[0] = cs1;
  nWiresCut[1] = cs2;
  nWiresCut[2] = cs3;
  nWiresCut[3] = cs4;
  nWiresCut[4] = cs5;
  nWiresCut[5] = cs6;
}

void HMdcMille::setMdcShiftParOnly(Bool_t fl) {
  useMdcShParOnly = fl;
  if(useMdcShParOnly) {
    for(Int_t s=0;s<6;s++) for(Int_t m=0;m<4;m++) for(Int_t p=6;p<9;p++) mShFlag[s][m][p] = kFALSE;
  }
}
 hmdcmille.cc:1
 hmdcmille.cc:2
 hmdcmille.cc:3
 hmdcmille.cc:4
 hmdcmille.cc:5
 hmdcmille.cc:6
 hmdcmille.cc:7
 hmdcmille.cc:8
 hmdcmille.cc:9
 hmdcmille.cc:10
 hmdcmille.cc:11
 hmdcmille.cc:12
 hmdcmille.cc:13
 hmdcmille.cc:14
 hmdcmille.cc:15
 hmdcmille.cc:16
 hmdcmille.cc:17
 hmdcmille.cc:18
 hmdcmille.cc:19
 hmdcmille.cc:20
 hmdcmille.cc:21
 hmdcmille.cc:22
 hmdcmille.cc:23
 hmdcmille.cc:24
 hmdcmille.cc:25
 hmdcmille.cc:26
 hmdcmille.cc:27
 hmdcmille.cc:28
 hmdcmille.cc:29
 hmdcmille.cc:30
 hmdcmille.cc:31
 hmdcmille.cc:32
 hmdcmille.cc:33
 hmdcmille.cc:34
 hmdcmille.cc:35
 hmdcmille.cc:36
 hmdcmille.cc:37
 hmdcmille.cc:38
 hmdcmille.cc:39
 hmdcmille.cc:40
 hmdcmille.cc:41
 hmdcmille.cc:42
 hmdcmille.cc:43
 hmdcmille.cc:44
 hmdcmille.cc:45
 hmdcmille.cc:46
 hmdcmille.cc:47
 hmdcmille.cc:48
 hmdcmille.cc:49
 hmdcmille.cc:50
 hmdcmille.cc:51
 hmdcmille.cc:52
 hmdcmille.cc:53
 hmdcmille.cc:54
 hmdcmille.cc:55
 hmdcmille.cc:56
 hmdcmille.cc:57
 hmdcmille.cc:58
 hmdcmille.cc:59
 hmdcmille.cc:60
 hmdcmille.cc:61
 hmdcmille.cc:62
 hmdcmille.cc:63
 hmdcmille.cc:64
 hmdcmille.cc:65
 hmdcmille.cc:66
 hmdcmille.cc:67
 hmdcmille.cc:68
 hmdcmille.cc:69
 hmdcmille.cc:70
 hmdcmille.cc:71
 hmdcmille.cc:72
 hmdcmille.cc:73
 hmdcmille.cc:74
 hmdcmille.cc:75
 hmdcmille.cc:76
 hmdcmille.cc:77
 hmdcmille.cc:78
 hmdcmille.cc:79
 hmdcmille.cc:80
 hmdcmille.cc:81
 hmdcmille.cc:82
 hmdcmille.cc:83
 hmdcmille.cc:84
 hmdcmille.cc:85
 hmdcmille.cc:86
 hmdcmille.cc:87
 hmdcmille.cc:88
 hmdcmille.cc:89
 hmdcmille.cc:90
 hmdcmille.cc:91
 hmdcmille.cc:92
 hmdcmille.cc:93
 hmdcmille.cc:94
 hmdcmille.cc:95
 hmdcmille.cc:96
 hmdcmille.cc:97
 hmdcmille.cc:98
 hmdcmille.cc:99
 hmdcmille.cc:100
 hmdcmille.cc:101
 hmdcmille.cc:102
 hmdcmille.cc:103
 hmdcmille.cc:104
 hmdcmille.cc:105
 hmdcmille.cc:106
 hmdcmille.cc:107
 hmdcmille.cc:108
 hmdcmille.cc:109
 hmdcmille.cc:110
 hmdcmille.cc:111
 hmdcmille.cc:112
 hmdcmille.cc:113
 hmdcmille.cc:114
 hmdcmille.cc:115
 hmdcmille.cc:116
 hmdcmille.cc:117
 hmdcmille.cc:118
 hmdcmille.cc:119
 hmdcmille.cc:120
 hmdcmille.cc:121
 hmdcmille.cc:122
 hmdcmille.cc:123
 hmdcmille.cc:124
 hmdcmille.cc:125
 hmdcmille.cc:126
 hmdcmille.cc:127
 hmdcmille.cc:128
 hmdcmille.cc:129
 hmdcmille.cc:130
 hmdcmille.cc:131
 hmdcmille.cc:132
 hmdcmille.cc:133
 hmdcmille.cc:134
 hmdcmille.cc:135
 hmdcmille.cc:136
 hmdcmille.cc:137
 hmdcmille.cc:138
 hmdcmille.cc:139
 hmdcmille.cc:140
 hmdcmille.cc:141
 hmdcmille.cc:142
 hmdcmille.cc:143
 hmdcmille.cc:144
 hmdcmille.cc:145
 hmdcmille.cc:146
 hmdcmille.cc:147
 hmdcmille.cc:148
 hmdcmille.cc:149
 hmdcmille.cc:150
 hmdcmille.cc:151
 hmdcmille.cc:152
 hmdcmille.cc:153
 hmdcmille.cc:154
 hmdcmille.cc:155
 hmdcmille.cc:156
 hmdcmille.cc:157
 hmdcmille.cc:158
 hmdcmille.cc:159
 hmdcmille.cc:160
 hmdcmille.cc:161
 hmdcmille.cc:162
 hmdcmille.cc:163
 hmdcmille.cc:164
 hmdcmille.cc:165
 hmdcmille.cc:166
 hmdcmille.cc:167
 hmdcmille.cc:168
 hmdcmille.cc:169
 hmdcmille.cc:170
 hmdcmille.cc:171
 hmdcmille.cc:172
 hmdcmille.cc:173
 hmdcmille.cc:174
 hmdcmille.cc:175
 hmdcmille.cc:176
 hmdcmille.cc:177
 hmdcmille.cc:178
 hmdcmille.cc:179
 hmdcmille.cc:180
 hmdcmille.cc:181
 hmdcmille.cc:182
 hmdcmille.cc:183
 hmdcmille.cc:184
 hmdcmille.cc:185
 hmdcmille.cc:186
 hmdcmille.cc:187
 hmdcmille.cc:188
 hmdcmille.cc:189
 hmdcmille.cc:190
 hmdcmille.cc:191
 hmdcmille.cc:192
 hmdcmille.cc:193
 hmdcmille.cc:194
 hmdcmille.cc:195
 hmdcmille.cc:196
 hmdcmille.cc:197
 hmdcmille.cc:198
 hmdcmille.cc:199
 hmdcmille.cc:200
 hmdcmille.cc:201
 hmdcmille.cc:202
 hmdcmille.cc:203
 hmdcmille.cc:204
 hmdcmille.cc:205
 hmdcmille.cc:206
 hmdcmille.cc:207
 hmdcmille.cc:208
 hmdcmille.cc:209
 hmdcmille.cc:210
 hmdcmille.cc:211
 hmdcmille.cc:212
 hmdcmille.cc:213
 hmdcmille.cc:214
 hmdcmille.cc:215
 hmdcmille.cc:216
 hmdcmille.cc:217
 hmdcmille.cc:218
 hmdcmille.cc:219
 hmdcmille.cc:220
 hmdcmille.cc:221
 hmdcmille.cc:222
 hmdcmille.cc:223
 hmdcmille.cc:224
 hmdcmille.cc:225
 hmdcmille.cc:226
 hmdcmille.cc:227
 hmdcmille.cc:228
 hmdcmille.cc:229
 hmdcmille.cc:230
 hmdcmille.cc:231
 hmdcmille.cc:232
 hmdcmille.cc:233
 hmdcmille.cc:234
 hmdcmille.cc:235
 hmdcmille.cc:236
 hmdcmille.cc:237
 hmdcmille.cc:238
 hmdcmille.cc:239
 hmdcmille.cc:240
 hmdcmille.cc:241
 hmdcmille.cc:242
 hmdcmille.cc:243
 hmdcmille.cc:244
 hmdcmille.cc:245
 hmdcmille.cc:246
 hmdcmille.cc:247
 hmdcmille.cc:248
 hmdcmille.cc:249
 hmdcmille.cc:250
 hmdcmille.cc:251
 hmdcmille.cc:252
 hmdcmille.cc:253
 hmdcmille.cc:254
 hmdcmille.cc:255
 hmdcmille.cc:256
 hmdcmille.cc:257
 hmdcmille.cc:258
 hmdcmille.cc:259
 hmdcmille.cc:260
 hmdcmille.cc:261
 hmdcmille.cc:262
 hmdcmille.cc:263
 hmdcmille.cc:264
 hmdcmille.cc:265
 hmdcmille.cc:266
 hmdcmille.cc:267
 hmdcmille.cc:268
 hmdcmille.cc:269
 hmdcmille.cc:270
 hmdcmille.cc:271
 hmdcmille.cc:272
 hmdcmille.cc:273
 hmdcmille.cc:274
 hmdcmille.cc:275
 hmdcmille.cc:276
 hmdcmille.cc:277
 hmdcmille.cc:278
 hmdcmille.cc:279
 hmdcmille.cc:280
 hmdcmille.cc:281
 hmdcmille.cc:282
 hmdcmille.cc:283
 hmdcmille.cc:284
 hmdcmille.cc:285
 hmdcmille.cc:286
 hmdcmille.cc:287
 hmdcmille.cc:288
 hmdcmille.cc:289
 hmdcmille.cc:290
 hmdcmille.cc:291
 hmdcmille.cc:292
 hmdcmille.cc:293
 hmdcmille.cc:294
 hmdcmille.cc:295
 hmdcmille.cc:296
 hmdcmille.cc:297
 hmdcmille.cc:298
 hmdcmille.cc:299
 hmdcmille.cc:300
 hmdcmille.cc:301
 hmdcmille.cc:302
 hmdcmille.cc:303
 hmdcmille.cc:304
 hmdcmille.cc:305
 hmdcmille.cc:306
 hmdcmille.cc:307
 hmdcmille.cc:308
 hmdcmille.cc:309
 hmdcmille.cc:310
 hmdcmille.cc:311
 hmdcmille.cc:312
 hmdcmille.cc:313
 hmdcmille.cc:314
 hmdcmille.cc:315
 hmdcmille.cc:316
 hmdcmille.cc:317
 hmdcmille.cc:318
 hmdcmille.cc:319
 hmdcmille.cc:320
 hmdcmille.cc:321
 hmdcmille.cc:322
 hmdcmille.cc:323
 hmdcmille.cc:324
 hmdcmille.cc:325
 hmdcmille.cc:326
 hmdcmille.cc:327
 hmdcmille.cc:328
 hmdcmille.cc:329
 hmdcmille.cc:330
 hmdcmille.cc:331
 hmdcmille.cc:332
 hmdcmille.cc:333
 hmdcmille.cc:334
 hmdcmille.cc:335
 hmdcmille.cc:336
 hmdcmille.cc:337
 hmdcmille.cc:338
 hmdcmille.cc:339
 hmdcmille.cc:340
 hmdcmille.cc:341
 hmdcmille.cc:342
 hmdcmille.cc:343
 hmdcmille.cc:344
 hmdcmille.cc:345
 hmdcmille.cc:346
 hmdcmille.cc:347
 hmdcmille.cc:348
 hmdcmille.cc:349
 hmdcmille.cc:350
 hmdcmille.cc:351
 hmdcmille.cc:352
 hmdcmille.cc:353
 hmdcmille.cc:354
 hmdcmille.cc:355
 hmdcmille.cc:356
 hmdcmille.cc:357
 hmdcmille.cc:358
 hmdcmille.cc:359
 hmdcmille.cc:360
 hmdcmille.cc:361
 hmdcmille.cc:362
 hmdcmille.cc:363
 hmdcmille.cc:364
 hmdcmille.cc:365
 hmdcmille.cc:366
 hmdcmille.cc:367
 hmdcmille.cc:368
 hmdcmille.cc:369
 hmdcmille.cc:370
 hmdcmille.cc:371
 hmdcmille.cc:372
 hmdcmille.cc:373
 hmdcmille.cc:374
 hmdcmille.cc:375
 hmdcmille.cc:376
 hmdcmille.cc:377
 hmdcmille.cc:378
 hmdcmille.cc:379
 hmdcmille.cc:380
 hmdcmille.cc:381
 hmdcmille.cc:382
 hmdcmille.cc:383
 hmdcmille.cc:384
 hmdcmille.cc:385
 hmdcmille.cc:386
 hmdcmille.cc:387
 hmdcmille.cc:388
 hmdcmille.cc:389
 hmdcmille.cc:390
 hmdcmille.cc:391
 hmdcmille.cc:392
 hmdcmille.cc:393
 hmdcmille.cc:394
 hmdcmille.cc:395
 hmdcmille.cc:396
 hmdcmille.cc:397
 hmdcmille.cc:398
 hmdcmille.cc:399
 hmdcmille.cc:400
 hmdcmille.cc:401
 hmdcmille.cc:402
 hmdcmille.cc:403
 hmdcmille.cc:404
 hmdcmille.cc:405
 hmdcmille.cc:406
 hmdcmille.cc:407
 hmdcmille.cc:408
 hmdcmille.cc:409
 hmdcmille.cc:410
 hmdcmille.cc:411
 hmdcmille.cc:412
 hmdcmille.cc:413
 hmdcmille.cc:414
 hmdcmille.cc:415
 hmdcmille.cc:416
 hmdcmille.cc:417
 hmdcmille.cc:418
 hmdcmille.cc:419
 hmdcmille.cc:420
 hmdcmille.cc:421
 hmdcmille.cc:422
 hmdcmille.cc:423
 hmdcmille.cc:424
 hmdcmille.cc:425
 hmdcmille.cc:426
 hmdcmille.cc:427
 hmdcmille.cc:428
 hmdcmille.cc:429
 hmdcmille.cc:430
 hmdcmille.cc:431
 hmdcmille.cc:432
 hmdcmille.cc:433
 hmdcmille.cc:434
 hmdcmille.cc:435
 hmdcmille.cc:436
 hmdcmille.cc:437
 hmdcmille.cc:438
 hmdcmille.cc:439
 hmdcmille.cc:440
 hmdcmille.cc:441
 hmdcmille.cc:442
 hmdcmille.cc:443
 hmdcmille.cc:444
 hmdcmille.cc:445
 hmdcmille.cc:446
 hmdcmille.cc:447
 hmdcmille.cc:448
 hmdcmille.cc:449
 hmdcmille.cc:450
 hmdcmille.cc:451
 hmdcmille.cc:452
 hmdcmille.cc:453
 hmdcmille.cc:454
 hmdcmille.cc:455
 hmdcmille.cc:456
 hmdcmille.cc:457
 hmdcmille.cc:458
 hmdcmille.cc:459
 hmdcmille.cc:460
 hmdcmille.cc:461
 hmdcmille.cc:462
 hmdcmille.cc:463
 hmdcmille.cc:464
 hmdcmille.cc:465
 hmdcmille.cc:466
 hmdcmille.cc:467
 hmdcmille.cc:468
 hmdcmille.cc:469
 hmdcmille.cc:470
 hmdcmille.cc:471
 hmdcmille.cc:472
 hmdcmille.cc:473
 hmdcmille.cc:474
 hmdcmille.cc:475
 hmdcmille.cc:476
 hmdcmille.cc:477
 hmdcmille.cc:478
 hmdcmille.cc:479
 hmdcmille.cc:480
 hmdcmille.cc:481
 hmdcmille.cc:482
 hmdcmille.cc:483
 hmdcmille.cc:484
 hmdcmille.cc:485
 hmdcmille.cc:486
 hmdcmille.cc:487
 hmdcmille.cc:488
 hmdcmille.cc:489
 hmdcmille.cc:490
 hmdcmille.cc:491
 hmdcmille.cc:492
 hmdcmille.cc:493
 hmdcmille.cc:494
 hmdcmille.cc:495
 hmdcmille.cc:496
 hmdcmille.cc:497
 hmdcmille.cc:498
 hmdcmille.cc:499
 hmdcmille.cc:500
 hmdcmille.cc:501
 hmdcmille.cc:502
 hmdcmille.cc:503
 hmdcmille.cc:504
 hmdcmille.cc:505
 hmdcmille.cc:506
 hmdcmille.cc:507
 hmdcmille.cc:508
 hmdcmille.cc:509
 hmdcmille.cc:510
 hmdcmille.cc:511
 hmdcmille.cc:512
 hmdcmille.cc:513
 hmdcmille.cc:514
 hmdcmille.cc:515
 hmdcmille.cc:516
 hmdcmille.cc:517
 hmdcmille.cc:518
 hmdcmille.cc:519
 hmdcmille.cc:520
 hmdcmille.cc:521
 hmdcmille.cc:522
 hmdcmille.cc:523
 hmdcmille.cc:524
 hmdcmille.cc:525
 hmdcmille.cc:526
 hmdcmille.cc:527
 hmdcmille.cc:528
 hmdcmille.cc:529
 hmdcmille.cc:530
 hmdcmille.cc:531
 hmdcmille.cc:532
 hmdcmille.cc:533
 hmdcmille.cc:534
 hmdcmille.cc:535
 hmdcmille.cc:536
 hmdcmille.cc:537
 hmdcmille.cc:538
 hmdcmille.cc:539
 hmdcmille.cc:540
 hmdcmille.cc:541
 hmdcmille.cc:542
 hmdcmille.cc:543
 hmdcmille.cc:544
 hmdcmille.cc:545
 hmdcmille.cc:546
 hmdcmille.cc:547
 hmdcmille.cc:548
 hmdcmille.cc:549
 hmdcmille.cc:550
 hmdcmille.cc:551
 hmdcmille.cc:552
 hmdcmille.cc:553
 hmdcmille.cc:554
 hmdcmille.cc:555
 hmdcmille.cc:556
 hmdcmille.cc:557
 hmdcmille.cc:558
 hmdcmille.cc:559
 hmdcmille.cc:560
 hmdcmille.cc:561
 hmdcmille.cc:562
 hmdcmille.cc:563
 hmdcmille.cc:564
 hmdcmille.cc:565
 hmdcmille.cc:566
 hmdcmille.cc:567
 hmdcmille.cc:568
 hmdcmille.cc:569
 hmdcmille.cc:570
 hmdcmille.cc:571
 hmdcmille.cc:572
 hmdcmille.cc:573
 hmdcmille.cc:574
 hmdcmille.cc:575
 hmdcmille.cc:576
 hmdcmille.cc:577
 hmdcmille.cc:578
 hmdcmille.cc:579
 hmdcmille.cc:580
 hmdcmille.cc:581
 hmdcmille.cc:582
 hmdcmille.cc:583
 hmdcmille.cc:584
 hmdcmille.cc:585
 hmdcmille.cc:586
 hmdcmille.cc:587
 hmdcmille.cc:588
 hmdcmille.cc:589
 hmdcmille.cc:590
 hmdcmille.cc:591
 hmdcmille.cc:592
 hmdcmille.cc:593
 hmdcmille.cc:594
 hmdcmille.cc:595
 hmdcmille.cc:596
 hmdcmille.cc:597
 hmdcmille.cc:598
 hmdcmille.cc:599
 hmdcmille.cc:600
 hmdcmille.cc:601
 hmdcmille.cc:602
 hmdcmille.cc:603
 hmdcmille.cc:604
 hmdcmille.cc:605
 hmdcmille.cc:606
 hmdcmille.cc:607
 hmdcmille.cc:608
 hmdcmille.cc:609
 hmdcmille.cc:610
 hmdcmille.cc:611
 hmdcmille.cc:612
 hmdcmille.cc:613
 hmdcmille.cc:614
 hmdcmille.cc:615
 hmdcmille.cc:616
 hmdcmille.cc:617
 hmdcmille.cc:618
 hmdcmille.cc:619
 hmdcmille.cc:620
 hmdcmille.cc:621
 hmdcmille.cc:622
 hmdcmille.cc:623
 hmdcmille.cc:624
 hmdcmille.cc:625
 hmdcmille.cc:626
 hmdcmille.cc:627
 hmdcmille.cc:628
 hmdcmille.cc:629
 hmdcmille.cc:630
 hmdcmille.cc:631
 hmdcmille.cc:632
 hmdcmille.cc:633
 hmdcmille.cc:634
 hmdcmille.cc:635
 hmdcmille.cc:636
 hmdcmille.cc:637
 hmdcmille.cc:638
 hmdcmille.cc:639
 hmdcmille.cc:640
 hmdcmille.cc:641
 hmdcmille.cc:642
 hmdcmille.cc:643
 hmdcmille.cc:644
 hmdcmille.cc:645
 hmdcmille.cc:646
 hmdcmille.cc:647
 hmdcmille.cc:648
 hmdcmille.cc:649
 hmdcmille.cc:650
 hmdcmille.cc:651
 hmdcmille.cc:652
 hmdcmille.cc:653
 hmdcmille.cc:654
 hmdcmille.cc:655
 hmdcmille.cc:656
 hmdcmille.cc:657
 hmdcmille.cc:658
 hmdcmille.cc:659
 hmdcmille.cc:660
 hmdcmille.cc:661
 hmdcmille.cc:662
 hmdcmille.cc:663
 hmdcmille.cc:664
 hmdcmille.cc:665
 hmdcmille.cc:666
 hmdcmille.cc:667
 hmdcmille.cc:668
 hmdcmille.cc:669
 hmdcmille.cc:670
 hmdcmille.cc:671
 hmdcmille.cc:672
 hmdcmille.cc:673
 hmdcmille.cc:674
 hmdcmille.cc:675
 hmdcmille.cc:676
 hmdcmille.cc:677
 hmdcmille.cc:678
 hmdcmille.cc:679
 hmdcmille.cc:680
 hmdcmille.cc:681
 hmdcmille.cc:682
 hmdcmille.cc:683
 hmdcmille.cc:684
 hmdcmille.cc:685
 hmdcmille.cc:686
 hmdcmille.cc:687
 hmdcmille.cc:688
 hmdcmille.cc:689
 hmdcmille.cc:690
 hmdcmille.cc:691
 hmdcmille.cc:692
 hmdcmille.cc:693
 hmdcmille.cc:694
 hmdcmille.cc:695
 hmdcmille.cc:696
 hmdcmille.cc:697
 hmdcmille.cc:698
 hmdcmille.cc:699
 hmdcmille.cc:700
 hmdcmille.cc:701
 hmdcmille.cc:702
 hmdcmille.cc:703
 hmdcmille.cc:704
 hmdcmille.cc:705
 hmdcmille.cc:706
 hmdcmille.cc:707
 hmdcmille.cc:708
 hmdcmille.cc:709
 hmdcmille.cc:710
 hmdcmille.cc:711
 hmdcmille.cc:712
 hmdcmille.cc:713
 hmdcmille.cc:714
 hmdcmille.cc:715
 hmdcmille.cc:716
 hmdcmille.cc:717
 hmdcmille.cc:718
 hmdcmille.cc:719
 hmdcmille.cc:720
 hmdcmille.cc:721
 hmdcmille.cc:722
 hmdcmille.cc:723
 hmdcmille.cc:724
 hmdcmille.cc:725
 hmdcmille.cc:726
 hmdcmille.cc:727
 hmdcmille.cc:728
 hmdcmille.cc:729
 hmdcmille.cc:730
 hmdcmille.cc:731
 hmdcmille.cc:732
 hmdcmille.cc:733
 hmdcmille.cc:734
 hmdcmille.cc:735
 hmdcmille.cc:736
 hmdcmille.cc:737
 hmdcmille.cc:738
 hmdcmille.cc:739
 hmdcmille.cc:740
 hmdcmille.cc:741
 hmdcmille.cc:742
 hmdcmille.cc:743
 hmdcmille.cc:744
 hmdcmille.cc:745
 hmdcmille.cc:746
 hmdcmille.cc:747
 hmdcmille.cc:748
 hmdcmille.cc:749
 hmdcmille.cc:750
 hmdcmille.cc:751
 hmdcmille.cc:752
 hmdcmille.cc:753
 hmdcmille.cc:754
 hmdcmille.cc:755
 hmdcmille.cc:756
 hmdcmille.cc:757
 hmdcmille.cc:758
 hmdcmille.cc:759
 hmdcmille.cc:760
 hmdcmille.cc:761
 hmdcmille.cc:762
 hmdcmille.cc:763
 hmdcmille.cc:764
 hmdcmille.cc:765
 hmdcmille.cc:766
 hmdcmille.cc:767
 hmdcmille.cc:768
 hmdcmille.cc:769
 hmdcmille.cc:770
 hmdcmille.cc:771
 hmdcmille.cc:772
 hmdcmille.cc:773
 hmdcmille.cc:774
 hmdcmille.cc:775
 hmdcmille.cc:776
 hmdcmille.cc:777
 hmdcmille.cc:778
 hmdcmille.cc:779
 hmdcmille.cc:780
 hmdcmille.cc:781
 hmdcmille.cc:782
 hmdcmille.cc:783
 hmdcmille.cc:784
 hmdcmille.cc:785
 hmdcmille.cc:786
 hmdcmille.cc:787
 hmdcmille.cc:788
 hmdcmille.cc:789
 hmdcmille.cc:790
 hmdcmille.cc:791
 hmdcmille.cc:792
 hmdcmille.cc:793
 hmdcmille.cc:794
 hmdcmille.cc:795
 hmdcmille.cc:796
 hmdcmille.cc:797
 hmdcmille.cc:798
 hmdcmille.cc:799
 hmdcmille.cc:800
 hmdcmille.cc:801
 hmdcmille.cc:802
 hmdcmille.cc:803
 hmdcmille.cc:804
 hmdcmille.cc:805
 hmdcmille.cc:806
 hmdcmille.cc:807
 hmdcmille.cc:808
 hmdcmille.cc:809
 hmdcmille.cc:810
 hmdcmille.cc:811
 hmdcmille.cc:812
 hmdcmille.cc:813
 hmdcmille.cc:814
 hmdcmille.cc:815
 hmdcmille.cc:816
 hmdcmille.cc:817
 hmdcmille.cc:818
 hmdcmille.cc:819
 hmdcmille.cc:820
 hmdcmille.cc:821
 hmdcmille.cc:822
 hmdcmille.cc:823
 hmdcmille.cc:824
 hmdcmille.cc:825
 hmdcmille.cc:826
 hmdcmille.cc:827
 hmdcmille.cc:828
 hmdcmille.cc:829
 hmdcmille.cc:830
 hmdcmille.cc:831
 hmdcmille.cc:832
 hmdcmille.cc:833
 hmdcmille.cc:834
 hmdcmille.cc:835
 hmdcmille.cc:836
 hmdcmille.cc:837
 hmdcmille.cc:838
 hmdcmille.cc:839
 hmdcmille.cc:840
 hmdcmille.cc:841
 hmdcmille.cc:842
 hmdcmille.cc:843
 hmdcmille.cc:844
 hmdcmille.cc:845
 hmdcmille.cc:846
 hmdcmille.cc:847
 hmdcmille.cc:848
 hmdcmille.cc:849
 hmdcmille.cc:850
 hmdcmille.cc:851
 hmdcmille.cc:852
 hmdcmille.cc:853
 hmdcmille.cc:854
 hmdcmille.cc:855
 hmdcmille.cc:856
 hmdcmille.cc:857
 hmdcmille.cc:858
 hmdcmille.cc:859
 hmdcmille.cc:860
 hmdcmille.cc:861
 hmdcmille.cc:862
 hmdcmille.cc:863
 hmdcmille.cc:864
 hmdcmille.cc:865
 hmdcmille.cc:866
 hmdcmille.cc:867
 hmdcmille.cc:868
 hmdcmille.cc:869
 hmdcmille.cc:870
 hmdcmille.cc:871
 hmdcmille.cc:872
 hmdcmille.cc:873
 hmdcmille.cc:874
 hmdcmille.cc:875
 hmdcmille.cc:876
 hmdcmille.cc:877
 hmdcmille.cc:878
 hmdcmille.cc:879
 hmdcmille.cc:880
 hmdcmille.cc:881
 hmdcmille.cc:882
 hmdcmille.cc:883
 hmdcmille.cc:884
 hmdcmille.cc:885
 hmdcmille.cc:886
 hmdcmille.cc:887
 hmdcmille.cc:888
 hmdcmille.cc:889
 hmdcmille.cc:890
 hmdcmille.cc:891
 hmdcmille.cc:892
 hmdcmille.cc:893
 hmdcmille.cc:894
 hmdcmille.cc:895
 hmdcmille.cc:896
 hmdcmille.cc:897
 hmdcmille.cc:898
 hmdcmille.cc:899
 hmdcmille.cc:900
 hmdcmille.cc:901
 hmdcmille.cc:902
 hmdcmille.cc:903
 hmdcmille.cc:904
 hmdcmille.cc:905
 hmdcmille.cc:906
 hmdcmille.cc:907
 hmdcmille.cc:908
 hmdcmille.cc:909
 hmdcmille.cc:910
 hmdcmille.cc:911
 hmdcmille.cc:912
 hmdcmille.cc:913
 hmdcmille.cc:914
 hmdcmille.cc:915
 hmdcmille.cc:916
 hmdcmille.cc:917
 hmdcmille.cc:918
 hmdcmille.cc:919
 hmdcmille.cc:920
 hmdcmille.cc:921
 hmdcmille.cc:922
 hmdcmille.cc:923
 hmdcmille.cc:924
 hmdcmille.cc:925
 hmdcmille.cc:926
 hmdcmille.cc:927
 hmdcmille.cc:928
 hmdcmille.cc:929
 hmdcmille.cc:930
 hmdcmille.cc:931
 hmdcmille.cc:932
 hmdcmille.cc:933
 hmdcmille.cc:934
 hmdcmille.cc:935
 hmdcmille.cc:936
 hmdcmille.cc:937
 hmdcmille.cc:938
 hmdcmille.cc:939
 hmdcmille.cc:940
 hmdcmille.cc:941
 hmdcmille.cc:942
 hmdcmille.cc:943
 hmdcmille.cc:944
 hmdcmille.cc:945
 hmdcmille.cc:946
 hmdcmille.cc:947
 hmdcmille.cc:948
 hmdcmille.cc:949
 hmdcmille.cc:950
 hmdcmille.cc:951
 hmdcmille.cc:952
 hmdcmille.cc:953
 hmdcmille.cc:954
 hmdcmille.cc:955
 hmdcmille.cc:956
 hmdcmille.cc:957
 hmdcmille.cc:958
 hmdcmille.cc:959
 hmdcmille.cc:960
 hmdcmille.cc:961
 hmdcmille.cc:962
 hmdcmille.cc:963
 hmdcmille.cc:964
 hmdcmille.cc:965
 hmdcmille.cc:966
 hmdcmille.cc:967
 hmdcmille.cc:968
 hmdcmille.cc:969
 hmdcmille.cc:970
 hmdcmille.cc:971
 hmdcmille.cc:972
 hmdcmille.cc:973
 hmdcmille.cc:974
 hmdcmille.cc:975
 hmdcmille.cc:976
 hmdcmille.cc:977
 hmdcmille.cc:978
 hmdcmille.cc:979
 hmdcmille.cc:980
 hmdcmille.cc:981
 hmdcmille.cc:982
 hmdcmille.cc:983
 hmdcmille.cc:984
 hmdcmille.cc:985
 hmdcmille.cc:986
 hmdcmille.cc:987
 hmdcmille.cc:988
 hmdcmille.cc:989
 hmdcmille.cc:990
 hmdcmille.cc:991
 hmdcmille.cc:992
 hmdcmille.cc:993
 hmdcmille.cc:994
 hmdcmille.cc:995
 hmdcmille.cc:996
 hmdcmille.cc:997
 hmdcmille.cc:998
 hmdcmille.cc:999
 hmdcmille.cc:1000
 hmdcmille.cc:1001
 hmdcmille.cc:1002
 hmdcmille.cc:1003
 hmdcmille.cc:1004
 hmdcmille.cc:1005
 hmdcmille.cc:1006
 hmdcmille.cc:1007
 hmdcmille.cc:1008
 hmdcmille.cc:1009
 hmdcmille.cc:1010
 hmdcmille.cc:1011
 hmdcmille.cc:1012
 hmdcmille.cc:1013
 hmdcmille.cc:1014
 hmdcmille.cc:1015
 hmdcmille.cc:1016
 hmdcmille.cc:1017
 hmdcmille.cc:1018
 hmdcmille.cc:1019
 hmdcmille.cc:1020
 hmdcmille.cc:1021
 hmdcmille.cc:1022
 hmdcmille.cc:1023
 hmdcmille.cc:1024
 hmdcmille.cc:1025
 hmdcmille.cc:1026
 hmdcmille.cc:1027
 hmdcmille.cc:1028
 hmdcmille.cc:1029
 hmdcmille.cc:1030
 hmdcmille.cc:1031
 hmdcmille.cc:1032
 hmdcmille.cc:1033
 hmdcmille.cc:1034
 hmdcmille.cc:1035
 hmdcmille.cc:1036
 hmdcmille.cc:1037
 hmdcmille.cc:1038
 hmdcmille.cc:1039
 hmdcmille.cc:1040
 hmdcmille.cc:1041
 hmdcmille.cc:1042
 hmdcmille.cc:1043
 hmdcmille.cc:1044
 hmdcmille.cc:1045
 hmdcmille.cc:1046
 hmdcmille.cc:1047
 hmdcmille.cc:1048
 hmdcmille.cc:1049
 hmdcmille.cc:1050
 hmdcmille.cc:1051
 hmdcmille.cc:1052
 hmdcmille.cc:1053
 hmdcmille.cc:1054
 hmdcmille.cc:1055
 hmdcmille.cc:1056
 hmdcmille.cc:1057
 hmdcmille.cc:1058
 hmdcmille.cc:1059
 hmdcmille.cc:1060
 hmdcmille.cc:1061
 hmdcmille.cc:1062
 hmdcmille.cc:1063
 hmdcmille.cc:1064
 hmdcmille.cc:1065
 hmdcmille.cc:1066
 hmdcmille.cc:1067
 hmdcmille.cc:1068
 hmdcmille.cc:1069
 hmdcmille.cc:1070
 hmdcmille.cc:1071
 hmdcmille.cc:1072
 hmdcmille.cc:1073
 hmdcmille.cc:1074
 hmdcmille.cc:1075
 hmdcmille.cc:1076
 hmdcmille.cc:1077
 hmdcmille.cc:1078
 hmdcmille.cc:1079
 hmdcmille.cc:1080
 hmdcmille.cc:1081
 hmdcmille.cc:1082
 hmdcmille.cc:1083
 hmdcmille.cc:1084
 hmdcmille.cc:1085
 hmdcmille.cc:1086
 hmdcmille.cc:1087
 hmdcmille.cc:1088
 hmdcmille.cc:1089
 hmdcmille.cc:1090
 hmdcmille.cc:1091
 hmdcmille.cc:1092
 hmdcmille.cc:1093
 hmdcmille.cc:1094
 hmdcmille.cc:1095
 hmdcmille.cc:1096
 hmdcmille.cc:1097
 hmdcmille.cc:1098
 hmdcmille.cc:1099
 hmdcmille.cc:1100
 hmdcmille.cc:1101
 hmdcmille.cc:1102
 hmdcmille.cc:1103
 hmdcmille.cc:1104
 hmdcmille.cc:1105
 hmdcmille.cc:1106
 hmdcmille.cc:1107
 hmdcmille.cc:1108
 hmdcmille.cc:1109
 hmdcmille.cc:1110
 hmdcmille.cc:1111
 hmdcmille.cc:1112
 hmdcmille.cc:1113
 hmdcmille.cc:1114
 hmdcmille.cc:1115
 hmdcmille.cc:1116
 hmdcmille.cc:1117
 hmdcmille.cc:1118
 hmdcmille.cc:1119
 hmdcmille.cc:1120
 hmdcmille.cc:1121
 hmdcmille.cc:1122
 hmdcmille.cc:1123
 hmdcmille.cc:1124
 hmdcmille.cc:1125
 hmdcmille.cc:1126
 hmdcmille.cc:1127
 hmdcmille.cc:1128
 hmdcmille.cc:1129
 hmdcmille.cc:1130
 hmdcmille.cc:1131
 hmdcmille.cc:1132
 hmdcmille.cc:1133
 hmdcmille.cc:1134
 hmdcmille.cc:1135
 hmdcmille.cc:1136
 hmdcmille.cc:1137
 hmdcmille.cc:1138
 hmdcmille.cc:1139
 hmdcmille.cc:1140
 hmdcmille.cc:1141
 hmdcmille.cc:1142
 hmdcmille.cc:1143
 hmdcmille.cc:1144
 hmdcmille.cc:1145
 hmdcmille.cc:1146
 hmdcmille.cc:1147
 hmdcmille.cc:1148
 hmdcmille.cc:1149
 hmdcmille.cc:1150
 hmdcmille.cc:1151
 hmdcmille.cc:1152
 hmdcmille.cc:1153
 hmdcmille.cc:1154
 hmdcmille.cc:1155
 hmdcmille.cc:1156
 hmdcmille.cc:1157
 hmdcmille.cc:1158
 hmdcmille.cc:1159
 hmdcmille.cc:1160
 hmdcmille.cc:1161
 hmdcmille.cc:1162
 hmdcmille.cc:1163
 hmdcmille.cc:1164
 hmdcmille.cc:1165
 hmdcmille.cc:1166
 hmdcmille.cc:1167
 hmdcmille.cc:1168
 hmdcmille.cc:1169
 hmdcmille.cc:1170
 hmdcmille.cc:1171
 hmdcmille.cc:1172
 hmdcmille.cc:1173
 hmdcmille.cc:1174
 hmdcmille.cc:1175
 hmdcmille.cc:1176
 hmdcmille.cc:1177
 hmdcmille.cc:1178
 hmdcmille.cc:1179
 hmdcmille.cc:1180
 hmdcmille.cc:1181
 hmdcmille.cc:1182
 hmdcmille.cc:1183
 hmdcmille.cc:1184
 hmdcmille.cc:1185
 hmdcmille.cc:1186
 hmdcmille.cc:1187
 hmdcmille.cc:1188
 hmdcmille.cc:1189
 hmdcmille.cc:1190
 hmdcmille.cc:1191
 hmdcmille.cc:1192
 hmdcmille.cc:1193
 hmdcmille.cc:1194
 hmdcmille.cc:1195
 hmdcmille.cc:1196
 hmdcmille.cc:1197
 hmdcmille.cc:1198
 hmdcmille.cc:1199
 hmdcmille.cc:1200
 hmdcmille.cc:1201
 hmdcmille.cc:1202
 hmdcmille.cc:1203
 hmdcmille.cc:1204
 hmdcmille.cc:1205
 hmdcmille.cc:1206
 hmdcmille.cc:1207
 hmdcmille.cc:1208
 hmdcmille.cc:1209
 hmdcmille.cc:1210
 hmdcmille.cc:1211
 hmdcmille.cc:1212
 hmdcmille.cc:1213
 hmdcmille.cc:1214
 hmdcmille.cc:1215
 hmdcmille.cc:1216
 hmdcmille.cc:1217
 hmdcmille.cc:1218
 hmdcmille.cc:1219
 hmdcmille.cc:1220
 hmdcmille.cc:1221
 hmdcmille.cc:1222
 hmdcmille.cc:1223
 hmdcmille.cc:1224
 hmdcmille.cc:1225
 hmdcmille.cc:1226
 hmdcmille.cc:1227
 hmdcmille.cc:1228
 hmdcmille.cc:1229
 hmdcmille.cc:1230
 hmdcmille.cc:1231
 hmdcmille.cc:1232
 hmdcmille.cc:1233
 hmdcmille.cc:1234
 hmdcmille.cc:1235
 hmdcmille.cc:1236
 hmdcmille.cc:1237
 hmdcmille.cc:1238
 hmdcmille.cc:1239
 hmdcmille.cc:1240
 hmdcmille.cc:1241
 hmdcmille.cc:1242
 hmdcmille.cc:1243
 hmdcmille.cc:1244
 hmdcmille.cc:1245
 hmdcmille.cc:1246
 hmdcmille.cc:1247
 hmdcmille.cc:1248
 hmdcmille.cc:1249
 hmdcmille.cc:1250
 hmdcmille.cc:1251
 hmdcmille.cc:1252
 hmdcmille.cc:1253
 hmdcmille.cc:1254
 hmdcmille.cc:1255
 hmdcmille.cc:1256
 hmdcmille.cc:1257
 hmdcmille.cc:1258
 hmdcmille.cc:1259
 hmdcmille.cc:1260
 hmdcmille.cc:1261
 hmdcmille.cc:1262
 hmdcmille.cc:1263
 hmdcmille.cc:1264
 hmdcmille.cc:1265
 hmdcmille.cc:1266
 hmdcmille.cc:1267
 hmdcmille.cc:1268
 hmdcmille.cc:1269
 hmdcmille.cc:1270
 hmdcmille.cc:1271
 hmdcmille.cc:1272
 hmdcmille.cc:1273
 hmdcmille.cc:1274
 hmdcmille.cc:1275
 hmdcmille.cc:1276
 hmdcmille.cc:1277
 hmdcmille.cc:1278
 hmdcmille.cc:1279
 hmdcmille.cc:1280
 hmdcmille.cc:1281
 hmdcmille.cc:1282
 hmdcmille.cc:1283
 hmdcmille.cc:1284
 hmdcmille.cc:1285
 hmdcmille.cc:1286
 hmdcmille.cc:1287
 hmdcmille.cc:1288
 hmdcmille.cc:1289
 hmdcmille.cc:1290
 hmdcmille.cc:1291
 hmdcmille.cc:1292
 hmdcmille.cc:1293
 hmdcmille.cc:1294
 hmdcmille.cc:1295
 hmdcmille.cc:1296
 hmdcmille.cc:1297
 hmdcmille.cc:1298
 hmdcmille.cc:1299
 hmdcmille.cc:1300
 hmdcmille.cc:1301
 hmdcmille.cc:1302
 hmdcmille.cc:1303
 hmdcmille.cc:1304
 hmdcmille.cc:1305
 hmdcmille.cc:1306
 hmdcmille.cc:1307
 hmdcmille.cc:1308
 hmdcmille.cc:1309
 hmdcmille.cc:1310
 hmdcmille.cc:1311
 hmdcmille.cc:1312
 hmdcmille.cc:1313
 hmdcmille.cc:1314
 hmdcmille.cc:1315
 hmdcmille.cc:1316
 hmdcmille.cc:1317
 hmdcmille.cc:1318
 hmdcmille.cc:1319
 hmdcmille.cc:1320
 hmdcmille.cc:1321
 hmdcmille.cc:1322
 hmdcmille.cc:1323
 hmdcmille.cc:1324
 hmdcmille.cc:1325
 hmdcmille.cc:1326
 hmdcmille.cc:1327
 hmdcmille.cc:1328
 hmdcmille.cc:1329
 hmdcmille.cc:1330
 hmdcmille.cc:1331
 hmdcmille.cc:1332
 hmdcmille.cc:1333
 hmdcmille.cc:1334
 hmdcmille.cc:1335
 hmdcmille.cc:1336
 hmdcmille.cc:1337
 hmdcmille.cc:1338
 hmdcmille.cc:1339
 hmdcmille.cc:1340
 hmdcmille.cc:1341
 hmdcmille.cc:1342
 hmdcmille.cc:1343
 hmdcmille.cc:1344
 hmdcmille.cc:1345
 hmdcmille.cc:1346
 hmdcmille.cc:1347
 hmdcmille.cc:1348
 hmdcmille.cc:1349
 hmdcmille.cc:1350
 hmdcmille.cc:1351
 hmdcmille.cc:1352
 hmdcmille.cc:1353
 hmdcmille.cc:1354
 hmdcmille.cc:1355
 hmdcmille.cc:1356
 hmdcmille.cc:1357
 hmdcmille.cc:1358
 hmdcmille.cc:1359
 hmdcmille.cc:1360
 hmdcmille.cc:1361
 hmdcmille.cc:1362
 hmdcmille.cc:1363
 hmdcmille.cc:1364
 hmdcmille.cc:1365
 hmdcmille.cc:1366
 hmdcmille.cc:1367
 hmdcmille.cc:1368