[Mono-list] Simple code - differences in output between mono &.Net

Nick Berardi nberardi@zigamorph.com
Wed, 3 Mar 2004 12:22:27 -0500


This is a multi-part message in MIME format.

------=_NextPart_000_0073_01C4011A.31CB48C0
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: 7bit

this is how you can get the drives in windows.  But it would require mono to
implement Win32Native in Microsoft.Win32, see here
http://www.123aspx.com/rotor/rotorsrc.aspx?rot=42415 and this is used to
throw the Win32Error (http://www.123aspx.com/rotor/rotorsrc.aspx?rot=42961)
note I commented it from below.

public static String[] GetLogicalDrives()
{
	ArrayList stuff = new ArrayList();

	if ((int)Environment.OSVersion.Platform == 128)
	{
		string line;
		StreamReader mtab = new StreamReader("/etc/mtab");

		string[] fields;
		while ( (line = mtab.ReadLine()) != null )
		{
			fields = line.Split(new char[]{' '});
			if (fields[0] != "none")
				stuff.Add(fields[1]);
		}
	} else {
		new
SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand();

		int drives = Win32Native.GetLogicalDrives();
		if (drives==0)
			throw new ApplicationException("No Drives Found");
//__Error.WinIOError();
		uint d = (uint)drives;
		char[] root = new char[] {'A', ':', '\\'};
		for(int i = (int)'A'; i <= (int)'Z' || d != 0; i++, d >>= 1)

			if (((int)d & 1) !=0)
				stuff.Add(new String(new char[] {(char)i,
':', '\\'}));
	}

	return (string[])stuff.ToArray(typeof(string));
}

-----Original Message-----
From: mono-list-admin@lists.ximian.com
[mailto:mono-list-admin@lists.ximian.com] On Behalf Of Jonathan Stowe
Sent: Wednesday, March 03, 2004 11:14 AM
To: jonathan.cooper@syntegra.com
Cc: nberardi@zigamorph.com; mono-list@lists.ximian.com
Subject: RE: [Mono-list] Simple code - differences in output between mono
&.Net

On Wed, 2004-03-03 at 15:13, jonathan.cooper@syntegra.com wrote:
> I would assume that the GetLogicalDrives() method on linux would
> require returning the mount points, as these can then be enumerated as
> necessary - for e.g. /dev/cdrom, /dev/usbdrive etc. This approach
> seems much more usable from a development perspective than just
> returning the root.

This could be as simple as this:

using System;
using System.IO;
using System.Collections;

class Test
{

   public static string[] GetLogicalDrives ()
   { 
       string[] drives;

       if ((int)Environment.OSVersion.Platform == 128)
       {
          string line;
          StreamReader mtab = new StreamReader("/etc/mtab");

          ArrayList stuff = new ArrayList();
          string[] fields;
          while ( (line = mtab.ReadLine()) != null )
          {
             fields = line.Split(new char[]{' '});
             if (fields[0] != "none")
             {
                stuff.Add(fields[1]);
             }
          }

          drives = new string[stuff.Count];
          stuff.CopyTo(drives);
       }
       else
       {
          drives = new string [] { "A:\\", "C:\\" };
       }

       return drives;
    }

    public static void Main()
    {
       foreach ( string drive in GetLogicalDrives() )
       {
          Console.WriteLine(drive);
       }
    }
}


>         -----Original Message-----
>         From: Nick Berardi [mailto:nberardi@zigamorph.com] 
>         Sent: 03 March 2004 15:11
>         To: COOPER, Jonathan -Syntegra UK; mono-list@lists.ximian.com
>         Subject: RE: [Mono-list] Simple code - differences in output
>         between mono & .Net
>         
>         
>         
>         I guess logical drives in Linux is just the root.  But I would
>         think that they would include the mount points in here?  Don't
>         you think?  Because basically that is all that a Windows Drive
>         is.  A mounted partition.
>         
>          
>         
>         Anybody on the list disagree?
>         
>          
>         
>                                        
>         ______________________________________________________________
>         
>         From: jonathan.cooper@syntegra.com
>         [mailto:jonathan.cooper@syntegra.com] 
>         Sent: Wednesday, March 03, 2004 9:57 AM
>         To: nberardi@zigamorph.com; mono-list@lists.ximian.com
>         Subject: RE: [Mono-list] Simple code - differences in output
>         between mono & .Net
>         
>         
>          
>         
>         Ah, that would explain it.
>         
>         
>          
>         
>         
>         Shall I continue with the bug submission?
>         
>         
>                 -----Original Message-----
>                 From: Nick Berardi [mailto:nberardi@zigamorph.com] 
>                 Sent: 03 March 2004 14:55
>                 To: COOPER, Jonathan -Syntegra UK;
>                 mono-list@lists.ximian.com
>                 Subject: RE: [Mono-list] Simple code - differences in
>                 output between mono & .Net
>                 
>                 I was right here is your problem:
>                 
>                  
>                 
>                  
>                                 [MonoTODO("Implement on windows, for
real")]
>                                 public static string[] GetLogicalDrives ()
>                                 { 
>                                         //FIXME: Hardcoded Paths
>                                         if
((int)Environment.OSVersion.Platform == 128)
>                                                 return new string[] { "/"
};
>                                         else
>                                                 return new string [] {
"A:\\", "C:\\" };
>                                 }
>                 
>                  
>                 
>                  
>                 
>                                            
>                 ______________________________________________________
>                 
>                 From: mono-list-admin@lists.ximian.com
>                 [mailto:mono-list-admin@lists.ximian.com] On Behalf Of
>                 jonathan.cooper@syntegra.com
>                 Sent: Wednesday, March 03, 2004 9:32 AM
>                 To: mono-list@lists.ximian.com
>                 Subject: [Mono-list] Simple code - differences in
>                 output between mono & .Net
>                 
>                 
>                  
>                 
>                 I have code (at the end of this message) in a .cs
>                 file, compiled with mcs and csc on Windows XP. When
>                 compiled with either compiler the executable works on
>                 both runtimes (.Net and mono). However, the output is
>                 different.
>                 
>                 Run under .Net:
>                 ------------------------
>                 Disk:  A:\
>                 Disk:  C:\
>                 Disk:  D:\
>                 Disk:  K:\
>                 Disk:  L:\
>                 Disk:  Q:\
>                 Disk:  T:\
>                 Disk:  U:\
>                 Disk:  X:\
>                 c:\
>                 Dir:  c:\Compaq
>                 Dir:  c:\Config.Msi
>                 Dir:  c:\Documents and Settings
>                 Dir:  c:\Program Files
>                 Dir:  c:\RECYCLER
>                 Dir:  c:\System Volume Information
>                 Dir:  c:\WINNT
>                 
>                  
>                 
>                 Basically the contents of the root c:\ drive
>                 
>                 Run under mono:
>                 --------------------------
>                 Disk:  A:\
>                 Disk:  C:\
>                 c:\
>                 >> a list of directories in the current directory
>                 rather than the root c:\ <<
>                 
>                 Is this due to an incomplete feature, or am I missing
>                 something?
>                 
>                 Thanks in advance,
>                 Jon Cooper
>                 
>                  
>                 
>                 ------------------------ CODE in drives.cs
>                 ------------------------
>                 
>                 using System;
>                 using System.IO;
>                 
>                 namespace test
>                 { 
>                    class test
>                    {
>                       [STAThread]
>                       static void Main(string[] args) 
>                       {
>                          string[] s = Directory.GetLogicalDrives();
>                          foreach(string drive in s)
>                             Console.WriteLine("Disk:  {0}",drive);
>                 
>                          string mydrive = Console.ReadLine();
>                 
>                          if(mydrive.Length != 0)
>                          {
>                            foreach(string d in
>                 Directory.GetDirectories(mydrive))
>                               Console.WriteLine("Dir:  {0}",d);
>                 
>                            Console.Read();  //pause
>                          }
>                       }
>                    }
>                 }
>                 
>                 
>                 
>
********************************************************************
>                 
>                 This email may contain information which is privileged
>                 or confidential. If you are not the intended recipient
>                 of this email, please notify the sender immediately
>                 and delete it without reading, copying, storing,
>                 forwarding or disclosing its contents to any other
>                 person
>                 Thank you
>                 
>                 Check us out at http://www.syntegra.com
>                 
>
********************************************************************
>                 
>         
>         
>
********************************************************************
>         
>         This email may contain information which is privileged or
>         confidential. If you are not the intended recipient of this
>         email, please notify the sender immediately and delete it
>         without reading, copying, storing, forwarding or disclosing
>         its contents to any other person
>         Thank you
>         
>         Check us out at http://www.syntegra.com
>         
>
********************************************************************
>         
>         
> 
> 
> ********************************************************************
> 
> This email may contain information which is privileged or
> confidential. If you are not the intended recipient of this email,
> please notify the sender immediately and delete it without reading,
> copying, storing, forwarding or disclosing its contents to any other
> person
> Thank you
> 
> Check us out at http://www.syntegra.com
> 
> ********************************************************************

_______________________________________________
Mono-list maillist  -  Mono-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-list

------=_NextPart_000_0073_01C4011A.31CB48C0
Content-Type: application/ms-tnef;
	name="winmail.dat"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="winmail.dat"

eJ8+IhwRAQaQCAAEAAAAAAABAAEAAQeQBgAIAAAA5AQAAAAAAADoAAEIgAcAGAAAAElQTS5NaWNy
b3NvZnQgTWFpbC5Ob3RlADEIAQOQBgAoHQAAJQAAAAsAAgABAAAAAwAmAAAAAAALACsAAAAAAAMA
LgAAAAAAHgBwAAEAAABDAAAAW01vbm8tbGlzdF0gU2ltcGxlIGNvZGUgLSBkaWZmZXJlbmNlcyBp
biBvdXRwdXQgYmV0d2VlbiBtb25vICYuTmV0AAACAXEAAQAAABsAAAABxAE7Zz10fTe91QhIFrdu
/XH0UYeLAAFgTKAACwABDgAAAAACAQoOAQAAABgAAAAAAAAAddl/dBdmoE+soZ0mm6qU7sKAAAAD
ABQOAQAAAB4AKA4BAAAANwAAADAwMDAwMDA0AW5iZXJhcmRpQHppZ2Ftb3JwaC5jb20BbmJlcmFy
ZGlAemlnYW1vcnBoLmNvbQAAHgApDgEAAAA3AAAAMDAwMDAwMDQBbmJlcmFyZGlAemlnYW1vcnBo
LmNvbQFuYmVyYXJkaUB6aWdhbW9ycGguY29tAAACAQkQAQAAADMZAAAvGQAA8k8AAExaRnUMHbv5
AwAKAHJjcGcxMjUaMgxgYwBQAQRzdHPiaAVwYmNoDvUJAA+HZmgN4A+WYmkBQwtgbpEOEDAzMxGm
ZmUSIj8B9wKkA2MCAA+ACsBzZUJ0AtFwcnEyAAAqyQqhbm8U4CAwAdAB0MI2EjAwNTA0FrEB0PkW
oDR9B20Cgw5QBFUUjeoxFYw3FpE5FjMXAhbgjxdgCFUHsgKDMTc4FB4sMjMdcRVCIAdtIEN6RR0F
OR2PFtAevx/FeZpyHQQ4AFAULTE2JAHrIh8DgkcJ0WsjlRjBJD73GMElbwOCVAhwI5USUCeeDDc3
KL8fxChIZWL5CXB3KSOVIeEq/h6vLQYvBxABoA3gLeY1Ln84Nusvrx/EQgdAdA3gI5UzMS8kPirB
M28tM1YIkHRu6mEHgWUt5TkdcRj9HobuMSAQHGggFzkgsTmeIdX/Ow0jdQHQJAEY/SUWOwwmuP8W
QT+vKIY7DComFyFC7yvW/zsMLXshw0YvOq9IQjEqG7H/SX8zFjsMNLkWYUzvNpZHnVc4SwKRCOY7
CW8wVD9l/Q4wNVVqVoFWP1dJVVRXcn9V31mvWW1Y71cfVW8S8DL+OF86YFFgD2EZVVRhQl+v32N/
Yz1iv2DvZLQ5DlBoBJ9pYWGDaWACgg8QeWwHkKpoCeB0AABxAyFsEYGHBRABQAPwZGN0bAqxPQBg
cwqwbKAUsGzibnWCbQIAYWF1dG8AYBhkanUPEAUQZ2h0L2wBCgFr0AoBaQGQcDD9A7IyIeAR5xKo
CNAJwGxgOXBzbnBwyXJkAzBzbnxleBUAc5Fq4BTQbGAx9jEXQRbANwewBbAAwAJzuRWgY3MSIAMw
bmBkb8CcaXYWEA8AFOBtaRDAc3ZgCfAgRAEQbhA00CAaUArAYQnAb+BoIEa/AiF1lA8gdKB5YQNg
dwswE26wAYBzV2xgdGhC7xJQbrAKsHZgbBIgHXB7BL5ye3gQAHrmAYB852J85/JyeuJjYgqwJQB+
0hUw438zBPBlbGxsUXqwelH/AUAPIHawACA0wXlhLaB8AH+BhglQgaQMsYGzbNCBpGSuZ4KGhACD
hmiBlXYDMP9rn2yvbb9uz2/XibER83BV/xLicFFxzItHjMRzlXSgdtzfdTQ3IAGgawB1lzV2Onfw
9wjQGLBzkWKHUAmAAiB2EvF0Pkh5cASQb3Em83XT/jaQzw4gke90a3jQgEB58P8JgJPLdgAr8IX/
hw+IH4kv/2/VQtGKqHDvcf9zCpZVltL3jiN1EJb/UAtiNyBz0VNjexWgC2B0CfAPIGrjmcBz5mQP
EAdwYXiQoDMwpgFtEBFrCYABATB1o1RQdrECUSB7VZQwFeB3GGH/daMOAAUwqDKpQgxAqVFvpfeZ
x4GwDvFhp5CnpHRxqCJrrCN0pn0AsXKEEJCgNf8gsK2ifBCuAQMwmlF58JqA44JxAYBuYmoAYAnw
dmC1ECBcFeB4pTGcMHkJ8Ppcc9BwDzAAIAuQFeB38b+CcJsAAOECMAJgAIBiD2BvsGGbAYAgAhBy
kYGzkW2jDzCcYGVcaAWwerAy74QAraILgYQAaLNDI+ABQfxndrXZtJGc0AuAHVA/gb+2YbdVOVAh
4LWitJB3t+P9uRRqsTEAcAswsDFq4JPgpQ5QdgiQd2sLgGQh4H+7EgTwB0AS8QFADgCFA2U3nGC8
dQIQb50AmwBsef50qMALgLRwr5G+B5zwAMD/nCCbALBhsrCc8JxhCTKckP+AMAJQB0ALkMERAlG7
YZnA/74QvAGagAJgegG+AQJRACD3hLGysC2ga7OxtHAV4MOR/nd7EAkyc7Bv4JwwoAILgNeAIsFB
mDFmCJBsd3GmIOeAMJpAexBwdcWAnQCa8P8HMMOHdGIDYL2wdKawYAfQ/wJRdDJ38KXgFeAJwHnw
nBLfxjAFQhTyFOCagGSZsnPB/wFAsAHAEASQtHDLgsvyoALuMxaAy3R3xGPEscuRdGo/DwCvk6mx
FaEAgAWQbHb/e2DQgQ5wdVDQggGQACDREv+7YaVhAcHQgRSwEgCpsgIw8XPgYSAuqPXQpQ5Q0TL/
sfHRn9Kv07/Q8BJQm6AFgf/Vf9aP15/Q8CHgm6DCQNVP+9of2yUp1AwyANjv3d/bBf5iLWACkd8P
0MMzMNyv4X//4o/jn9DhK/Dk8tF/5l/nb//ffR1w5P/qj+uf7K/Q4SCw/+mP7y/wP/FFCvlzkZlv
mn//m4+cn6pmCrEUwXSJni+fP/+gT3MmCMECwQuAedB0enqwTQQAIAIRuSEgeQhgIPu8APbQZxTw
AeEWEHwAdqEfAiH20PgAsBB58HMuIO80oPnQAjB4EHex0cvAVFDocXVpVFAgGPAV4AHg/wZwU4IA
z3UQplALUHcQpWELBs901CB6gG4zMk63fzB2oqRRTQ3gFDBzytDkdC4KQywgFOAWEMyi/wayxjMV
ghAAxWEPEKmxCT8ASFlQRVJMSU74SyAiCM/JBBlydGv6oEB0cDovL3cS4C4lYcAz+KF4LlOwbS+b
JDD54HIT1HnQYy4TUvI/E+E9NHBQkKAdEQD+riIGsgD+GlJkfzBhxjMPinAxUF5wJSAgANDJAOp5
+brOEYyCAACqAEupCwIAFRqwFxqxNRqxaAB0QRtxcAA6AC8b8XcBHDMuADEAMgAzUABhAHMbsXgc
kWPQAG8AbRvxch3RG4D/HeAeQB4qHUAeQB3AHKAdJuI/HjU9ADQc0SFAHMD1GyLgGb1qGz8cTx1f
Hm//H38gjyGVU3AuAsZgQHB4AT9TkZCRkXUQXxFoP4A3Nf8ZUBJvE38UjxWRU3MQPwoR/7pBAefA
sTKhBnGxcAKBA3L9CkNFg3C3UPDDDQ8XHw8v3zFPEU8SXy6fL685QMAXD/8WzxffGO8Z/xsPI/8l
DyYfxycvKD9FMDkANkUBIe//Iv9Ef0WPRp9Hr0i/Sccp7/8q/zkvLR87TzxfPWkw/3TFzCkgsyCl
UCBJAuBXMJ8IgjNhyvF+oFcwIGKAMM8CgNPwWW904w0K+8IGv79Uf13fXu83UccgwZFjDDA3wDCm
QGNgU/ph/ZBbXXQgR8tATMUgC0DCMETJA8MoKWE1XHthr2Dc//Y790/4U/ml+t/773A//j///08A
VPz2Zm/8ssAw8LA1Iotwj6OIQYNwYXlMAkCDeBClkHVmZiA9WtCHuzB0aGWAXCczYmE4P3K/Zv9y
L3fvCAJ1UCgoYaRQdClFbrsQyJBu4QiCLk9TVoEwx5CiQHoupCF0s/J1YHVwlgA432WWee9xX3nP
gC97fs+CH/+A54EvhL+kAPpS2tHL8naPP4bvhW+JzwlNY/G88G1SP7zxk/AGMIwidXSOWigi0i/L
QGMvjyIidnqJb/+ND4uPkr+Hz2RRxjOl4Ik/75WPlA+Yr3hMdwIAw+A1AO81AMvydWGPIi6OsnTA
oqD7ZYBawCF1cc5waQB+v5vP/5pPoF+Cr5//o5+iGaJ/pg/PjjCXlHVhy/IuUwhQyvAeKHWSYCJk
UGYQJyAn/Fx9dn+of6avp7+tz3uW2ZeUWzBkYJ8xIlrgvmD/kUCsv7Cvrt+vn7SPiDR1MZAuQWRk
siYxXaxv77dvtU+2/7vvfWev9s/33//47/n/av/8H/0vbf9vDwBf/4Cfyp+/Q8wvNyVBINCwZg9/
Zx/Pv7yf0a83Qo+T4LB10QPAdHlQfVBtAkB9chIo1U9uRsdQZy5VT3zAMoDXsFvAQ2/z0Cn8LkQI
cDKBdmvRH9Iv0z/fB3v1oAOmdXAKSS5kj7o9v9y/27/hn3u0A7R+UDCzab/jn7Wv5h8BhzPidZNw
qwEHZPAKsHywRXhjZXBv6wLojzckkJBOBnBlJCA+RgLAMpCRRATQVkBfX/M0swvCSU80s3Zk69/Q
v7/wv+Kv8q8zMN3zdWEo9dL+KQO04K/0z/PP8O6rlAWwnm9a8HVl+1Wr8UEnDCD0Jzr9Ilz9sawx
9y/6T+/5T6kf7/Hd8mn2Mnwi/QGn7nMA7wfVIDwC9lqsEDx8fPYRnzEEMO6CaSt+KwPvNyQMIAdP
NyRBQD7+Pn5hCN9aZQq/NyX+b/9/3wA/Do9703wTQUAmfnCfEv/lnw6vtf8Tr7iaFm83JLlT/4+V
iKE1Ehhf1NX8dxqf7OX5YCIpaRzfCFb9Wx6/WmX/8C/xPxYPzN8lTyQoE08UX68o743ljnB1IHLA
sCiXBlIpuQRUb3RzKNWgcPhlb2YslSKPJ19l8SafX1+/J68ovzIfjbgtNyJPp8RRaLDCsCBNZWBz
2DHXNyPE8p1gRlwxOo8QfLBsby3BYHTgLZ6Q1fBuwkA50nMueGnV8NkAuVcSIFvYAJ1Aw8A6OY9L
Op1kYE/AsEJlwuBs9XvgT3vgSnywQNDC4MCwf2PwXKCJEJ2z1nBboDlgV7NbwJ3Qc2R0oAiwTcJQ
ezYQBqAzCLDHIM7AfnAx5DoxQiBBTTjELZA5YBZqPxVXEW8uMHJAczZ5W6HIoGFXEjjEQ2MNOWBu
XHDF0WRpQHr/xGCOkO/wwtBE4+6CPBc9D5s/5WMgataAQHFSRTlg7FtNPCZkYFM68OqwnWB/VyCO
4DcQ3iB70MggjnBuf+tgqmBose4QVhDDsFxhdM8/wMnwOXMSoC5O35BSUf81HzLPM980709/JDA+
MUChbUHULUGwVMEgfeB+cDV/QmBBwUNvRHmdEO/gWwA69VClPlshd+4QqkBVINYQ/8NQnWA/QVwA
6fCdYN+PnxA/fNDp8NiATMDAsMUBdXj3WKRYB45wcfXQjnAsFYiiT1nSTcDuIAKwcG/14XP/CLDC
gFnCz1Fk8MCwWdHAsP9F0M8gw0FF4VcAWPJYB53Qc0xhODByeUuxfgHPIC7H18DuwI7gdi9j5RBX
cPcIsGNjxCBi5RPPIJDQY0CuVJ0w3oDFcHDv4GFS8M9YB89Q2ODegG11QYFGke+dYMQgvVCdUWY5
MVUgBlD/Y4CqMFaAfNJe0H1RLjBJwL9kwj9DxBJcmV3K+8IuUKz/ZVNG8FjSYIFfYU/gSyNfY5/W
AFf2UKXEIIiiU3l04PfY4LpJcCou76Bw73H12HDfn4Bponywl+pQpWPXoNYQ/0MQWvBqlqS3UKV3
0U0AZ+D/WnC48d8heGKXJVoee/ATNv930aSwd2l30pcH9s97jBHzcRJSRW52XWBN0GkCLphPU1Zp
YesRLlDXoJ50AlE7cOVwVVAyOHqp/3sUe4x8N4jegziOX49vkH//fX+DNy2znrA8gLj0hvWKt//Z
O4NOl2+NS50vnj+fTY1o/4K/jZOqH6svrD2Ui7H/swz/lIuUD42YuS+Xv5uHv4afv/+Jj88Q3jfV
Ao4VnZTYcF6hz5cwnu+dZ9hwcHktkOUF/57PoD/PI4Hfoi+jP4Qw/LMpsvBBOv2yIgiwIkP/reS/
Yae/oX+NlSwlfP+v//uJ5Xgcdl7w9iBBUMCgepr/qu8CUYZQQYGQsIPlZKTAof9aH5JAgc+rH9hw
zjB0EJYg+lfVgWWR4+UTp6+ovaBXf7NuWAeNljcvODfB3zkkTv1acGs+UUXzO4dFz0bTPhC/xI9A
RFUBQVRB9FVxMcjPgUMiQ09PUEVSCLCNPwctcIBW9CBVS0cv/zqsy29Jf0qPS59Mp9B/TUx/GYBO
MdVP14/Yn9mvWJBn/nU4EZXgWlTeJkyhkeFcEe9lcWpia8iVQEJNEViV2r/9bvFuxiBZhmKQWLRM
oHXQvnXToV5OTJJZ4IYAP5VA8kRN0FxyXUBXweng36/+ee4Q4KTkET5gWoBkcJCQ9mJ18FpybGKQ
WYNlcpKx91mDaHDvcWQ/sJWwWrPlD/uLEN7BQV50YTHBIXiwdGI/bFbaH+0I7Z/uv4qgbnn+YtOQ
YpBbsVnSPGLT4Tgx/4YA5ADv3/K/87/03/bv9+399f9f+g/7H/wv/Nj4//3v/8WUVd9Eef7/O5YA
b0R5yK/HybZAr0G3OTo1UIBCoP8Fn0Mix09G389PAg/Rb9J//9OP1J/Vr9a//i8VD/QPFg+d8A1o
rkBZg1i0ZXhugP+14X7QbEcYfxw/F18dPx9v/wX6PoE34FiQC5BW8FvxkJDOd5ZwQZBZ0mJ1hDBZ
MP5iPNBZIHRx8q8hHyXPwl//w2/Ef8UPxh/HL8g/Kp/J3/VCEjQIsDUu38v/zQ/OGf8x/42WDB8N
LzZfDs8P3xDv/0ygOQ+NlkzfFD8+b0Ef20j2d19hKNFo6CDj0t2y5hH/UPBlwWfhK9BCr0IvSF9H
3z9I/0uPSw9NrwLGO3JUT/RET4ggSTxCaQNbsSNAr+lDrkBi0oYBbIjQXUyv/1L/jZV4H3kvej1S
b1ife1gHV59bX42WLy9GSVi6TTsxSC2RPJK1sFAD4f9heF7/YA9+j3+fgK+Bt17v32XvZv6xpaO5
rXQvrt1k7/9rj6lfam9uv2/PZ/+tT65f/21/dR+/HXR/Wd93r3i/ed//et97730Pf5+Ar36PjWj8
33+Ef4WP/b+BP4c/K4Y3Zy37kcA4gG43/4hvAr6KX4ttPTwAT7HwLFAiQZlQT2b/jF+dFgO/AX+R
rwaPB58IoPwzMgjvMt03b4vPmR86l/87bzx/PY8+nz+vQL+Hj6QP/6Ufph+nL6hPQ20iQLkhn1P+
KOE0GwDpQPFQkQDgsemA/1AwKXO6kLlRzkALgF5vJ9faZi0AZXLwC5FwsGG1sP0jQ22uoOhgrQGu
oFTQ8WHp6SZYUN7AVyOgoJ8n132wvGUjUWMAsKa8EKyzeJvm4KJwYUXxGqFya+mA35pws48TF96g
l3By4vGe8K9W0qOSscOaYinewEjpYPplVsByGkKfgKI1jsC4b3/gNhE2G6+pj7/vOxDi8CD/4vCf
cCYgo5JGPyfsxV8p//Un2ESOwGswoOtAcpHGn2/HrXMiyN/HrUTK78v/ID5LzS/OP91Qz2/QfyBR
/9Gv0r8KENPv1P81YNYv1z/fsvDYb7Rq2q/Ze3LIYdxickOwwWFx3K/dv97BbnGwUGcuTWMg3z/g
T1y8RG+3YFAysbQwYHQi4e5nvT/jD3NQUGJQBQFj4D5GsGHlj+afc1A7IENZ3ENMNADon+mvXDTg
mtDhRhAgVm9s5GGroOGAH2PBVRG4T+w/cpFXSU78TlTvD8CP85/zH/Q/9s7mQkRgVlJseSODIrLk
g/+tM5+AYlC6ANxTn7BWovZP//XPwZ/Cp5piw3/EjwC/xo9/x5/cfwLPys/bnwZvYQY+/yZANVCa
sq0iLKCgEDrgY8C+aRHE+HNxIL8iCod5CD+fcHeTAbbDNKH5fDw8DN/v+7+qv7LgrWNkIxEtIOTB
/64xsLKfIO2gUTBRkHERsIF/UVHoEauwJENVoBG/YQZzf5vgcQCtcFWgJL8RLxlPVGeTIbgRrkJk
dpMwoEAs/xpfYQY0QTOwk3MdDxnfIU8/IM8h7/9PJY8l9DOxREX/rjL6U5tArq8k7yofKC8jf/0t
TnUWUjqA7YNzzy2fLqX4LklPLx8sDzJvM3GS8P+tsTPQoEAOwJbAo89ZLzZv37S1Y4Ct0DXPNq97
Oj9OXdhTVEEb4FGBZFHvFz5xVQR2b2leAJcwjzAo/1VnPvDlcK4gPr87H0K/P6/fVXay4GQQ3jEM
dC5V/lcA/zHfSm+wE2PAUZCXYEGl+kT/rjJCcEmvTm8zceFhGCCfICwuV3HA7aBMjzBlKPYiA3U3
oDB2kHLg+lNJX88y31KvRg9x4W15TLRkEP1PtlI+cVCDUh9TL1jPYL1SKFaFLkxikGexYSH9ZBAw
TV9en0SPYL9Lf0yCv6B/7+xH2EemCxFcVildn/9n/09fUGjeUlFWWD9ZT2wfz2iPV0hYJFwQLy9t
kC5Q//qfck92j3Rvc390v3XPdw+/bG95T3pfe298fylEKn9//4CPgZ+Crn3vfW8a761y7bD/jgGa
UJbw+KNBca4x7ne1kHetcJdhrYFwSPGwYa4AZP+FT6G3tkLhgZ9wumH4ILvA+kmRAHmiMEIxn4Cj
QKyU348w+OGfcOTwCrFpsOCWMf+KP6G3rUWHI5ewnxH34I1j/5/Q+FRxMMLjnvDkcJ/ArID+ZfhA
jy9btrHSn3AUw7WwP7WTojGOgRyAYtGwknB5v5cTmtAK8Zchk+9hqXeYsM+XAhWSn8CyIGxvLmO1
sP+y4Pi3FAP4ULoBHx8JKB8B/xggY08bXIzynx+Ez26vs1C+Y6DgLlC8ouTArJBo5TAUcDpw4Hel
wC5zef/40efxJ/AYMKLPok9+f6nv/6r/rA+Cv6hvp++vT7BfqX//s3+0j7Wfrb+xb4Zvh3+Ij/+J
mBWRuD+L/40Pjh+Qprzf/5E/kk+TV5VswZ+WX5dvmf//mwbGP5ufnKaer6A/tz+uPv+kX6Vvpn/Q
b7Kf1w/YH9kv/7bf1P/bXNy/1k/fX+Bv4X//2ojbp7lPul+7b7x9ve++///AD5Ct26fDH8QvxT7H
P+dZ/8h/yY+bL5w/7CbNvM8f25j/0c/S39Ps3d/8z/3f/u/iHr3bpV8BfwKPA1rbpU1vsPxvLQoT
5CIKEymgXBAE17ZAChIn4HiTMJOAbtP52/nFBu4v5CLlgG4Is+UyRwnABObbpX19AAwQAAMA3j+f
TgAAAwACWQAAFgADAAlZAwAAAAsAAIAIIAYAAAAAAMAAAAAAAABGAAAAAAOFAAAAAAAAAwAUgAgg
BgAAAAAAwAAAAAAAAEYAAAAAAYUAAAAAAABAABWACCAGAAAAAADAAAAAAAAARgAAAABghQAAAAjW
6CkAAAADACKACCAGAAAAAADAAAAAAAAARgAAAAAQhQAAAAAAAAsAK4AIIAYAAAAAAMAAAAAAAABG
AAAAAAaFAAAAAAAACwAugAggBgAAAAAAwAAAAAAAAEYAAAAADoUAAAAAAAADAC+ACCAGAAAAAADA
AAAAAAAARgAAAAAYhQAAAAAAAAsAZYAIIAYAAAAAAMAAAAAAAABGAAAAAIKFAAABAAAAHgBegQgg
BgAAAAAAwAAAAAAAAEYAAAAAkYUAAAEAAAAGAAAAMzI3NTIAAAALAB8OAQAAAAIB+A8BAAAAEAAA
AHXZf3QXZqBPrKGdJpuqlO4CAfoPAQAAABAAAAB12X90F2agT6yhnSabqpTuAwD+DwUAAAADAA00
/T8FAAMADzT9PwUAAgEUNAEAAAAQAAAATklUQfm/uAEAqgA32W4AAAIBfwABAAAAMQAAADAwMDAw
MDAwNzVEOTdGNzQxNzY2QTA0RkFDQTE5RDI2OUJBQTk0RUVBNEZEMzEwMAAAAAADAAYQdowxcwMA
BxAtFgAAAwAQEAAAAAADABEQAAAAAB4ACBABAAAAZQAAAFRISVNJU0hPV1lPVUNBTkdFVFRIRURS
SVZFU0lOV0lORE9XU0JVVElUV09VTERSRVFVSVJFTU9OT1RPSU1QTEVNRU5UV0lOMzJOQVRJVkVJ
Tk1JQ1JPU09GVFdJTjMyLFNFRUgAAAAAd4Q=

------=_NextPart_000_0073_01C4011A.31CB48C0--