Fw: [hfs-user] Problems with HFS+ empty volume...

Entwicklung entwicklung@whengenibk.de
Fri, 5 Apr 2002 12:02:37 +0200


This is a multi-part message in MIME format.

------=_NextPart_000_001D_01C1DC99.C750C1B0
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Hello Listers,
                   I would be grateful to anyone who could just take a =
look at the following code ( for the HFS+ Volume Header) and let me know =
if there are any major defects. I'm having a problem detecting the point =
of failure - the volume contains 0 files or directories and is not even =
getting mounted.
Could it be that not setting the attributes file and startupfile to =
anthing is creating some problem ?

I'm probably missing out on something basic here and am not able to =
proceed...please help if you can.

Regards,
Nandini
=20
HFSPlusVolumeHeader myVolumeHeader;=20

  myVolHeader.signature=3DkHFSPlusSigWord;
  myVolHeader.version=3DkHFSPlusVersion;// current version is =
kHFSPlusVersion=20
  myVolHeader.attributes=3D0x0100;            // volume attributes=20
  myVolHeader.lastMountedVersion=3DkHFSPlusMountVersion;    // =
implementation version which last   mounted volume=20
  myVolHeader.reserved=3D0;             // reserved - set to zero=20

  myVolHeader.createDate=3DVolCrDate;             // date and time of =
volume creation=20
  myVolHeader.modifyDate=3DVolCrDate;             // date and time of =
last modification=20
  myVolHeader.backupDate=3DVolCrDate;             // date and time of =
last backup=20
  myVolHeader.checkedDate=3DVolCrDate;            // date and time of =
last disk check=20

  myVolHeader.fileCount=3D0;        // number of files in volume=20
  myVolHeader.folderCount=3D0;       // number of directories in volume=20

  myVolHeader.blockSize=3D512;          // size (in bytes) of allocation =
blocks=20
  myVolHeader.totalBlocks=3D28;/*assuming   =20
  allocation block=3D 512 bytes;  number of allocation blocks in volume =
(includes this header and VBM)*/
  myVolHeader.freeBlocks=3D0;           // number of unused allocation =
blocks=20

  myVolHeader.nextAllocation=3D0;       // start of next allocation =
search=20
  myVolHeader.rsrcClumpSize=3D512;        // default resource fork clump =
size=20
  myVolHeader.dataClumpSize=3D512;        // default data fork clump =
size=20
  myVolHeader.nextCatalogID=3D0x00000000;        // next unused catalog =
node ID=20

  myVolHeader.writeCount=3D0x00000000;           // volume write count=20
  myVolHeader.encodingsBitmap[0]=3D0x00000000;        // which encodings =
have been used on this volume=20
  myVolHeader.encodingsBitmap[1]=3D0x00000000;
 =20
  for(int i=3D0;i<32;i++)
 myVolHeader.finderInfo[i]=3D0x00;         // information used by the =
Finder=20

  myVolHeader.allocationFile.clumpSize=3D512;         // allocation =
bitmap file=20
  myVolHeader.allocationFile.extents[0].blockCount=3D1;
  myVolHeader.allocationFile.extents[0].startBlock=3D3;
  for(i=3D1;i<8;i++)
  {=20
    myVolHeader.allocationFile.extents[i].blockCount=3D0;
    myVolHeader.allocationFile.extents[i].startBlock=3D0;
  }
  myVolHeader.allocationFile.logicalSize[0]=3D0;
  myVolHeader.allocationFile.logicalSize[1]=3D512;
  myVolHeader.allocationFile.totalBlocks=3D1;
 =20
  myVolHeader.extentsFile.clumpSize=3D512;            // extents B-tree =
file=20
  myVolHeader.extentsFile.extents[0].blockCount=3D4;
  myVolHeader.extentsFile.extents[0].startBlock=3D4;=20
  for(i=3D1;i<8;i++)
  {=20
   myVolHeader.extentsFile.extents[i].blockCount=3D0;
   myVolHeader.extentsFile.extents[i].startBlock=3D0;
  }
  myVolHeader.extentsFile.logicalSize[0]=3D0;
  myVolHeader.extentsFile.logicalSize[1]=3D512*4;
  myVolHeader.extentsFile.totalBlocks=3D4;
 =20


  myVolHeader.catalogFile.clumpSize=3D512;            // catalog B-tree =
file=20
  myVolHeader.catalogFile.extents[0].blockCount=3D4*4;
  =
myVolHeader.catalogFile.extents[0].startBlock=3DmyVolHeader.extentsFile.e=
xtents[0].startBlock+4;
  for(i=3D1;i<8;i++)
  {=20
 myVolHeader.catalogFile.extents[i].blockCount =3D0;
 myVolHeader.catalogFile.extents[i].startBlock=3D0;
  }
  myVolHeader.catalogFile.logicalSize[0]=3D0;
  myVolHeader.catalogFile.logicalSize[1]=3D512*4*4;
  myVolHeader.catalogFile.totalBlocks=3D4*4;

=20

  myVolHeader.attributesFile.clumpSize=3D512;         // extended =
attributes B-tree file=20
  for(i=3D0;i<8;i++)
  {  =20
 myVolHeader.attributesFile.extents[i].blockCount=3D0;
 myVolHeader.attributesFile.extents[i].startBlock=3D0;
  }
  myVolHeader.attributesFile.logicalSize[0]=3D0;
  myVolHeader.attributesFile.logicalSize[1]=3D0;
  myVolHeader.attributesFile.totalBlocks=3D0;

=20

  myVolHeader.startupFile.clumpSize=3D512;            // boot file=20
  for(i=3D0;i<8;i++)
  {=20
 myVolHeader.startupFile.extents[i].blockCount=3D0;
 myVolHeader.startupFile.extents[i].startBlock=3D0;
  }
  myVolHeader.startupFile.logicalSize[0]=3D0;
  myVolHeader.startupFile.logicalSize[1]=3D0;
  myVolHeader.startupFile.totalBlocks=3D0;
    =20
  ----- Original Message -----=20
  From: Entwicklung=20
  To: hfs-user@lists.mars.org=20
  Sent: Thursday, April 04, 2002 3:44 PM
  Subject: [hfs-user] Problems with HFS+ empty volume...


  Hello Listers,
                    I just wanted to check if anyone knows if it is =
essential to have an empty B-Tree for the attribute and startup file in =
an HFS+ image. In case of HFS these weren't present in my image. In case =
of HFS+ I've increased the node size of the catalog to 4kB and included =
the other changes as discussed. Only thing I haven't done is to create a =
B-Tree for the attributes file and the start up file - in short I'm not =
writing anything into the image for these and have set the respective =
extents, sizes setc. to 0 in the Volume Header. Is this right or should =
these be present in the image as 'empty' B-Trees ???
  =20
  I'm right now creating an empty volume with 0 contents but just the =
basic structures needed (the way I started off for HFS). The only =
problem is that I don't have any utilities to create sample HFS+ images =
which I can cross-check my image with.... Disk Copy on my iMac with =
MacOS 9 creates only HFS-Volumes by default and Norton Disk Doctor on my =
Mac recognizes the volume as MacOS Extended but doesn't really bring me =
any further (since my Mac is unable to mount the volume). There seems to =
be a hfsplus reader on Sourceforge since the end of last year but I need =
something like a sample hfsplus writer. Any idea if sth like this exists =
on the Mac or on other platforms. My Mac has just a CD-drive (no writer) =
and no floppy drive which make file transfer as cumbersome as it can =
get.

  Any idea why this fails ?  Would be glad for any suggestions/tips...

  Regards,
  Nandini=20

------=_NextPart_000_001D_01C1DC99.C750C1B0
Content-Type: text/html;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content=3D"text/html; charset=3Diso-8859-1" =
http-equiv=3DContent-Type>
<META content=3D"MSHTML 5.00.2920.0" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT face=3DArial size=3D2>Hello Listers,</FONT></DIV>
<DIV><FONT face=3DArial=20
size=3D2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
I would be grateful to anyone who could just take a look at the =
following code (=20
for the HFS+ Volume Header) and let me know if there are any major =
defects. I'm=20
having a problem detecting the point of failure - the volume contains 0 =
files or=20
directories and is not even getting mounted.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>Could it be that not setting the =
attributes file=20
and startupfile to anthing is creating some problem ?</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>I'm probably missing out on something =
basic here=20
and am not able to proceed...please help if you can.</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>Regards,</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>Nandini</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>HFSPlusVolumeHeader myVolumeHeader; =
</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>&nbsp;=20
myVolHeader.signature=3DkHFSPlusSigWord;<BR>&nbsp;=20
myVolHeader.version=3DkHFSPlusVersion;// current version is =
kHFSPlusVersion=20
<BR>&nbsp;=20
myVolHeader.attributes=3D0x0100;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;=20
// volume attributes <BR>&nbsp;=20
myVolHeader.lastMountedVersion=3DkHFSPlusMountVersion;&nbsp;&nbsp;&nbsp; =
//=20
implementation version which last&nbsp;&nbsp; mounted volume <BR>&nbsp;=20
myVolHeader.reserved=3D0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;=20
// reserved - set to zero </FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>&nbsp;=20
myVolHeader.createDate=3DVolCrDate;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
// date and time of volume creation <BR>&nbsp;=20
myVolHeader.modifyDate=3DVolCrDate;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
// date and time of last modification <BR>&nbsp;=20
myVolHeader.backupDate=3DVolCrDate;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
// date and time of last backup <BR>&nbsp;=20
myVolHeader.checkedDate=3DVolCrDate;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
// date and time of last disk check </FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>&nbsp;=20
myVolHeader.fileCount=3D0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // =
number of=20
files in volume <BR>&nbsp;=20
myVolHeader.folderCount=3D0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // =
number of=20
directories in volume </FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>&nbsp;=20
myVolHeader.blockSize=3D512;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;=20
// size (in bytes) of allocation blocks <BR>&nbsp;=20
myVolHeader.totalBlocks=3D28;/*assuming&nbsp;&nbsp;&nbsp; </FONT></DIV>
<DIV><FONT face=3DArial size=3D2>&nbsp; allocation block=3D 512 =
bytes;&nbsp; number of=20
allocation blocks in volume (includes this header and VBM)*/<BR>&nbsp;=20
myVolHeader.freeBlocks=3D0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;=20
// number of unused allocation blocks </FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>&nbsp;=20
myVolHeader.nextAllocation=3D0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // =
start of=20
next allocation search <BR>&nbsp;=20
myVolHeader.rsrcClumpSize=3D512;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
; //=20
default resource fork clump size <BR>&nbsp;=20
myVolHeader.dataClumpSize=3D512;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
; //=20
default data fork clump size <BR>&nbsp;=20
myVolHeader.nextCatalogID=3D0x00000000;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;=20
// next unused catalog node ID </FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>&nbsp;=20
myVolHeader.writeCount=3D0x00000000;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;=20
// volume write count <BR>&nbsp;=20
myVolHeader.encodingsBitmap[0]=3D0x00000000;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;=20
// which encodings have been used on this volume <BR>&nbsp;=20
myVolHeader.encodingsBitmap[1]=3D0x00000000;<BR>&nbsp; <BR>&nbsp; =
for(int=20
i=3D0;i&lt;32;i++)<BR>&nbsp;myVolHeader.finderInfo[i]=3D0x00;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
// information used by the Finder </FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>&nbsp;=20
myVolHeader.allocationFile.clumpSize=3D512;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;=20
// allocation bitmap file <BR>&nbsp;=20
myVolHeader.allocationFile.extents[0].blockCount=3D1;<BR>&nbsp;=20
myVolHeader.allocationFile.extents[0].startBlock=3D3;<BR>&nbsp;=20
for(i=3D1;i&lt;8;i++)<BR>&nbsp; { <BR>&nbsp;&nbsp;&nbsp;=20
myVolHeader.allocationFile.extents[i].blockCount=3D0;<BR>&nbsp;&nbsp;&nbs=
p;=20
myVolHeader.allocationFile.extents[i].startBlock=3D0;<BR>&nbsp; =
}<BR>&nbsp;=20
myVolHeader.allocationFile.logicalSize[0]=3D0;<BR>&nbsp;=20
myVolHeader.allocationFile.logicalSize[1]=3D512;<BR>&nbsp;=20
myVolHeader.allocationFile.totalBlocks=3D1;<BR>&nbsp; <BR>&nbsp;=20
myVolHeader.extentsFile.clumpSize=3D512;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
// extents B-tree file <BR>&nbsp;=20
myVolHeader.extentsFile.extents[0].blockCount=3D4;<BR>&nbsp;=20
myVolHeader.extentsFile.extents[0].startBlock=3D4; <BR>&nbsp;=20
for(i=3D1;i&lt;8;i++)<BR>&nbsp; { <BR>&nbsp;&nbsp;=20
myVolHeader.extentsFile.extents[i].blockCount=3D0;<BR>&nbsp;&nbsp;=20
myVolHeader.extentsFile.extents[i].startBlock=3D0;<BR>&nbsp; }<BR>&nbsp; =

myVolHeader.extentsFile.logicalSize[0]=3D0;<BR>&nbsp;=20
myVolHeader.extentsFile.logicalSize[1]=3D512*4;<BR>&nbsp;=20
myVolHeader.extentsFile.totalBlocks=3D4;<BR>&nbsp; </FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2><BR>&nbsp;=20
myVolHeader.catalogFile.clumpSize=3D512;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
// catalog B-tree file <BR>&nbsp;=20
myVolHeader.catalogFile.extents[0].blockCount=3D4*4;<BR>&nbsp;=20
myVolHeader.catalogFile.extents[0].startBlock=3DmyVolHeader.extentsFile.e=
xtents[0].startBlock+4;<BR>&nbsp;=20
for(i=3D1;i&lt;8;i++)<BR>&nbsp; {=20
<BR>&nbsp;myVolHeader.catalogFile.extents[i].blockCount=20
=3D0;<BR>&nbsp;myVolHeader.catalogFile.extents[i].startBlock=3D0;<BR>&nbs=
p;=20
}<BR>&nbsp; myVolHeader.catalogFile.logicalSize[0]=3D0;<BR>&nbsp;=20
myVolHeader.catalogFile.logicalSize[1]=3D512*4*4;<BR>&nbsp;=20
myVolHeader.catalogFile.totalBlocks=3D4*4;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>&nbsp;=20
myVolHeader.attributesFile.clumpSize=3D512;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;=20
// extended attributes B-tree file <BR>&nbsp; =
for(i=3D0;i&lt;8;i++)<BR>&nbsp;=20
{&nbsp;&nbsp;=20
<BR>&nbsp;myVolHeader.attributesFile.extents[i].blockCount=3D0;<BR>&nbsp;=
myVolHeader.attributesFile.extents[i].startBlock=3D0;<BR>&nbsp;=20
}<BR>&nbsp; myVolHeader.attributesFile.logicalSize[0]=3D0;<BR>&nbsp;=20
myVolHeader.attributesFile.logicalSize[1]=3D0;<BR>&nbsp;=20
myVolHeader.attributesFile.totalBlocks=3D0;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>&nbsp;=20
myVolHeader.startupFile.clumpSize=3D512;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
// boot file <BR>&nbsp; for(i=3D0;i&lt;8;i++)<BR>&nbsp; {=20
<BR>&nbsp;myVolHeader.startupFile.extents[i].blockCount=3D0;<BR>&nbsp;myV=
olHeader.startupFile.extents[i].startBlock=3D0;<BR>&nbsp;=20
}<BR>&nbsp; myVolHeader.startupFile.logicalSize[0]=3D0;<BR>&nbsp;=20
myVolHeader.startupFile.logicalSize[1]=3D0;<BR>&nbsp;=20
myVolHeader.startupFile.totalBlocks=3D0;<BR>&nbsp;&nbsp;&nbsp;&nbsp; =
</FONT></DIV>
<BLOCKQUOTE=20
style=3D"BORDER-LEFT: #000000 2px solid; MARGIN-LEFT: 5px; MARGIN-RIGHT: =
0px; PADDING-LEFT: 5px; PADDING-RIGHT: 0px">
  <DIV style=3D"FONT: 10pt arial">----- Original Message ----- </DIV>
  <DIV=20
  style=3D"BACKGROUND: #e4e4e4; FONT: 10pt arial; font-color: =
black"><B>From:</B>=20
  <A href=3D"mailto:entwicklung@whengenibk.de"=20
  title=3Dentwicklung@whengenibk.de>Entwicklung</A> </DIV>
  <DIV style=3D"FONT: 10pt arial"><B>To:</B> <A=20
  href=3D"mailto:hfs-user@lists.mars.org"=20
  title=3Dhfs-user@lists.mars.org>hfs-user@lists.mars.org</A> </DIV>
  <DIV style=3D"FONT: 10pt arial"><B>Sent:</B> Thursday, April 04, 2002 =
3:44=20
  PM</DIV>
  <DIV style=3D"FONT: 10pt arial"><B>Subject:</B> [hfs-user] Problems =
with HFS+=20
  empty volume...</DIV>
  <DIV><BR></DIV>
  <DIV><FONT face=3DArial size=3D2>Hello Listers,</FONT></DIV>
  <DIV><FONT face=3DArial=20
  =
size=3D2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
  I just wanted to check if anyone knows if&nbsp;it is essential to have =
an=20
  empty B-Tree for the attribute and startup file in an HFS+ image. In =
case of=20
  HFS these weren't present in my image. In case of HFS+ I've increased =
the node=20
  size of the catalog to 4kB and included the other changes as =
discussed. Only=20
  thing I haven't done is to create a B-Tree for the attributes file and =
the=20
  start up file - in short I'm not writing anything into the image for =
these and=20
  have set the respective extents, sizes setc. to 0 in the Volume =
Header. Is=20
  this right or should these be present in the image as 'empty' B-Trees=20
  ???</FONT></DIV>
  <DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
  <DIV><FONT face=3DArial size=3D2>I'm right now creating an empty =
volume with 0=20
  contents but just the basic structures needed (the way I started off =
for=20
  HFS).&nbsp;The only problem is that I don't have any utilities to =
create=20
  sample&nbsp;HFS+ images which I can cross-check my image with.... Disk =
Copy on=20
  my iMac with MacOS 9 creates only HFS-Volumes by default and Norton =
Disk=20
  Doctor on my Mac recognizes the volume as MacOS Extended =
but&nbsp;doesn't=20
  really bring me any further (since my Mac is unable to mount the =
volume).=20
  There seems to be a hfsplus reader on Sourceforge since the end of =
last year=20
  but I need something like a sample hfsplus writer. Any idea if sth =
like this=20
  exists on the Mac or on other platforms. My Mac has just a CD-drive =
(no=20
  writer) and no floppy drive which make file transfer as cumbersome as =
it can=20
  get.</FONT></DIV>
  <DIV>&nbsp;</DIV>
  <DIV><FONT face=3DArial size=3D2>Any idea why this fails ? =
</FONT>&nbsp;<FONT=20
  face=3DArial size=3D2>Would be glad for any =
suggestions/tips...</FONT></DIV>
  <DIV>&nbsp;</DIV>
  <DIV><FONT face=3DArial size=3D2>Regards,</FONT></DIV>
  <DIV><FONT face=3DArial=20
size=3D2>Nandini</FONT>&nbsp;</DIV></BLOCKQUOTE></BODY></HTML>

------=_NextPart_000_001D_01C1DC99.C750C1B0--