Click here to Skip to main content
15,890,506 members
Articles / Web Development / ASP.NET
Article

POP3 Email Client with full MIME Support (.NET 2.0)

Rate me:
Please Sign up or sign in to vote.
4.88/5 (109 votes)
8 Oct 2006CPOL9 min read 2.1M   14.2K   289   403
C# class reading ASCII emails from a POP3 server and converting them using MIME to aSystem.Net.Mail.MailMessage derived class for further processing. The complete code is provided (pure C# 2.0, only .NET framework DLLs used). If possible, it matches MIME multiparts to body, attachment, etc. of MailM

Introduction

This is part 2 of my articles about email receiving with POP3 and MIME processing. My first article POP3 Email Client (.NET 2.0) covered the reliable downloading of emails from POP3 servers, which left us with a pure ASCII representation of the email body. This was the easier part.

In this article I provide the code to split the raw ASCII email into body, attachment, alternate views, etc. This was much harder to do, because while the POP3 specification is simple and specified straight forward in one RFC, there are several MIME related RFCs, which provide a multitude of possibilities how simple stuff like an email's actual text can be sent. The MIME specification allows for great flexibility, but Microsoft, being Microsoft, of course supports only a subset (for example no recursion of MIME parts within MIME parts). The provided code supports both worlds completely and gives the programmer the flexibility to access information about the received email as needed.

If you wonder why I wrote this article despite the fact that there are various articles on CodeProject for MIME support, here are some of the shortcomings encountered:

  • some code is not managed
  • use of DLLs without .NET source code
  • too limited functionality
  • no integration with System.Net.Mail.MailMessage
  • no error reporting
  • no XML documentation, etc.

My code is based on the following work:

Background

Structure of a simple email

A simple email in pure ASCII might look like this:

Date: Sat, 2 Sep 2006 17:25:15 +0200
From: Sender@NoSpam.com
To: Receiver@NoSpam.com
Subject: simple plain text mail

Just a plain text email
.

The first 4 lines are called the header of the email and they are separated from the body by an empty line. The end of the email is marked with a line containing just one "." (a period sign). There will be many more header lines when you look at a real email, some RFC standard ones and others, like this one from GMail:

X-Gmail-Received: f105c784e77f8b689759558db72ccd07f60387ba

Introduction of MIME

In the beginning there were just plain ASCII emails as defined in RFC 2822. Plain ASCII was soon not sufficient, though, and the Multipurpose Internet Mail Extensions specification MIME was created to support non US-ASCII texts, multi-part message bodies, rich text (HTML), images, sounds and attachments. The specification tried to offer great flexibility and to cater to all kind of possibilities. The result was numerous RFCs (2045, 2046, 2047, 2049, 2231, 2387, 4288, 4289, ... ). As it often happens in big groups, the whole thing became rather complicated and, even worse, left it to the implementer how precisely body text, etc. are implemented.

In order to help you with the extraction of information from MIME based emails, I'm going to explain to you the basic MIME principles. First let's have a look at a complete MIME email. It might be a bit confusing, but it gives a good overview of the various MIME elements which I will explain one by one. This email has one email header, followed by the email body text and a .GIF picture. Notice the "--0-494165446-1157210079=:74253" line, which separates the various parts of the email, called MIME entities.

Date: Sat, 2 Sep 2006 17:25:15 +0200
From: Sender@NoSpam.com
To: Receiver@NoSpam.com
Subject: simple gmail mail
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="0-494165446-1157210079=:74253"
Content-Transfer-Encoding: 8bit

--0-494165446-1157210079=:74253
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Content-Disposition: inline

This is the email body

This email has a smallPic.gif attachment
--0-494165446-1157210079=:74253
Content-Type: image/gif; name="SmallPic.GIF"
Content-Transfer-Encoding: base64
Content-Description: 437081412-SmallPic.GIF
Content-Disposition: inline; filename="SmallPic.GIF"

R0lGODlhQQBBAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/
NZWZfpnCck/OeTUXvUdXxdi9/SbDPFS4t+/fwIMLH068uPHjyJMrX868ufPn
0KNLn069uvWVAQEAOw==

--0-494165446-1157210079=:74253--
.

Structure of an email header field

An email header field as defined in RFC 2822 has the following structure:
field-name ":" [ field-body ] CRLF

Example:
MIME-Version: 1.0

"MIME-Version" is the field-name, "1.0" is the field-body. The MIME-Version header field is mandatory for every MIME email. All other MIME header fields start with "Content-..."

Content-Type

The most powerful MIME header field is the Content-Type and is defined in RFC 2046. It can look like this:

Content-Type: text/plain;
Content-Type: text/plain; charset=ISO-8859-1
Content-Type: text/plain; charset=us-ascii
Content-Type: text/plain; charset=utf-8
Content-Type: text/html;
Content-Type: text/html; charset=ISO-8859-1
Content-Type: text/css
Content-Type: image/gif; name=image004.gif
Content-Type: image/jpeg; name="image005.jpg"
Content-Type: message/delivery-status
Content-Type: message/rfc822
Content-Type: audio/x-mpeg
Content-Type: video/mpeg-2
Content-Type: application/msword
Content-Type: application/mspowerpoint
Content-Type: application/zip

Content-Type: multipart/mixed;     
        boundary="----=_Part_3431_12384933.1139387792352"
Content-Type: multipart/alternative; 
        boundary="----=_Part_4088_29304219.1115463798628"
Content-Type: multipart/related;     
        boundary="----=_Part_2067_9241611.1139322711488"
Content-Type: multipart/digest;     
        boundary="----=Next message 15543233913938263541"
Content-Type: multipart/report; report-type=delivery-status;
        boundary="k04G6HJ9025016.1136391237/carbon.singnet.com.sg"
Content-Type: multipart/parallel

The Content-Type field is used to specify the nature of the data in the body of a MIME entity, by indicating media type and subtype identifiers, and by providing auxiliary information that may be required for certain media types. Some of the media types are:

  • text
  • image
  • message
  • audio
  • application
  • multipart

Each of the media type defines its own set of subtypes, which might be followed by a set of parameters, each specified in an attribute=value pair. For example:

Content-Type: text/plain; charset=ISO-8859-1; format=flowed

The media type is "text", the subtype is "plain", the attribute is "charset" and the attribute value is "ISO-8859-1". There could be more attribute=value pairs like "format=flowed".

Content-Type Multipart

The media type "multipart" provides the flexibility to split an email into several parts, like plain text, HTML text and attached files. There are versions of multipart (subtypes), but all have the same attribute "boundary". Its value is a string which is unique in the whole email and is used for marking the boundary delimiter lines of the various parts. Let's look at the previous example again, this time only with Content-Type information lines:

Headerlines
Content-Type: multipart/mixed; boundary="0-494165446-1157210079=:74253"
Headerlines

--0-494165446-1157210079=:74253
Content-Type: text/plain; charset=iso-8859-1
Other MIME part header lines

The plain text email body
--0-494165446-1157210079=:74253
Content-Type: image/gif; name="SmallPic.GIF"
Other MIME part header lines

The attachment coded in Base64
--0-494165446-1157210079=:74253--
.

The first 3 lines are part of the email header. The end of the header is marked by an empty line. All other lines are part of the email body, which ends with the line having only a "." (period). The boundary delimiter line breaks the body itself into the email text and the file attachment. This line always starts with "--" followed by the boundary string. The last boundary delimiter line is followed by trailing "--".

Each MIME entity has a entity-header and a entity-body separated by an empty line. Since emails and MIME entities use the same structure and the same kind of header lines, it is possible that whole emails can become a MIME entity, which is useful for mail systems (Content-Type: message). But of course having an email in another email in another email leads to many complications, and so it is no wonder that most mail program use a different solution for forwarding an email, they just merge it with the email text body. This has the advantage that even mail clients not supporting MIME can handle forwarding. Similarly, even the MIME specification is recursive, Microsoft's System.Net.Mail.MailMessage is not ! More about this later.

Content-Type: multipart/mixed

Often the top most multipart subtype is "mixed". It indicates that the email consists of several MIME entities, without specifying anything more about the kind of entities. "multipart/mixed" is used as default, if the actual subtype is not recognised by the email client.

Content-Type: multipart/alternative

The subtype "alternative" is used, if the same email is sent in plain text and HTML. Both have the same content, but in alternative coding. The email client is supposed to display to the user the last alternative part understood by the client. If an email consist of a plain text entity followed by an HTML entity, the email client is supposed to display the HTML text, even if it also knows how to display plain text, because the HTML version came last. An email with plain text and HTML can look like this:

Some header lines
MIME-Version: 1.0
Content-Type: multipart/mixed; 
        boundary="----_=_NextPart_001_01C6CEA2.EF9BECF8"

------_=_NextPart_001_01C6CEA2.EF9BECF8
Content-Type: multipart/alternative; 
        boundary="----_=_NextPart_002_01C6CEA2.EF9BECF8"


------_=_NextPart_002_01C6CEA2.EF9BECF8
Content-Type: text/plain; charset="iso-8859-1"

HTML sample email with bold text and attachment.

------_=_NextPart_002_01C6CEA2.EF9BECF8
Content-Type: text/html; charset="iso-8859-1"

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
  <HEAD>
    <STYLE>
        DIV { FONT-SIZE: 10pt; 
        FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif }
    </STYLE>
    </HEAD>
  <BODY>
    <DIV>
      HTML sample email with <STRONG>bold</STRONG> text and attachment.
    </DIV>
</BODY>
</HTML>
------_=_NextPart_002_01C6CEA2.EF9BECF8--

------_=_NextPart_001_01C6CEA2.EF9BECF8
Content-Type: image/gif; name="SmallPic.GIF"

R0lGODlhQQBBAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/
NZWZfpnCck/OeTUXvUdXxdi9/SbDPFS4t+/fwIMLH068uPHjyJMrX868ufPn
0KNLn069uvWVAQEAOw==

------_=_NextPart_001_01C6CEA2.EF9BECF8--
.

The structure of this email is:

multipart/mixed
| multipart/alternative
| | text/plain; format=flowed; charset=ISO-8859-1
| | text/html; charset=ISO-8859-1
| image/gif; name=SmallPic.GIF

Notice that the picture is part of multipart/mixed, not multipart/alternative.

Content-Type: multipart/related

Multipart-related can be used to send HTML text and graphics or other related material in the same email. It is beyond the scope of this article to explain the details of any other of the multipart mediatypes.

Content-Transfer-Encoding

POP3 defines that the body of an email is 7bit US ASCII code. Since the text displayed to the user can be any Unicode and file attachments are usually array of bytes, the email sender must encode this content to ASCII and we, the receiver of the email, need to decode it. If the value is "7bit", no encoding was used. "8bit", or "binary" has the same meaning, but is not supported by the .NET framework. I treat "8bit" like "7bit", i.e. take the content as it is, whereas "binary" is illegal in POP3, because some character sequences like CRLF "." CRLF have a special meaning in POP3, but might occur in random binary.

Content-Transfer-Encoding: quoted-printable

If a MIME entity consists mostly of US ASCII characters, it is enough to encode just some special characters and all bytes not covered by the US ASCII characterset. "quoted-printable" does this by sending a "=" and the hex value of the byte as ASCII characters. A carriage return (hex: 0D) becomes: "=0D". There are a number of rules dealing with special circumstances. I couldn't find a decoder for quoted-printable in .NET, so I copied the QuotedPrintable Class, by Bill Gearhart source code from ASP emporium.

Content-Transfer-Encoding: base64

Base64 uses a limited set of characters ("A"-"Z", "a"-"z", "0"-"9", "+", "/") to express a 6 bit value. Any 3 bytes can be expressed with 4 encoding characters. As an example, let's take the first 4 ASCII characters "R0lG" of the graphic file in our example email:

R      0      l      G
001001 110100 100101 000110
Resulting 3 bytes:
00100111 01001001 01000110

Details can be found at RFC 1421, 4.3.2.4 Step 4: Printable Encoding

Using the code

The best way to get an understanding of a library is to use it. The Main function in the downloadable code does just that. It connects to an POP3 server (don't forget to provide the proper server name, user name and password) and downloads at most 5 emails. The code will not delete the emails from the server, but the server might delete them anyway, depending on its settings. The structure of the 5 emails will be displayed on the console. "Program.cs" also contains the method SendTestmail() to generate some sample emails.

Emails are received by Pop3MimeClient derived from Pop3MailClient, which is described in POP3 Email Client (.NET 2.0), by Peter Huber and offers all the functionality to interact with the POP3 server. Pop3MimeClient adds the method GetEmail which fetches one particular email from the POP3 server and returns it decoded as RxMailMessage.

Mapping MIME to System.Net.Mail.MailMessage

The System.Net.Mail.MailMessage class is used by System.Net.Mail.SmtpClient for sending emails with SMTP. MailMessage includes only the information needed to send an email. Receiving an email creates some additional information. Therefore, a new class RxMailMessage is inherited deriving from MailMessage and adding properties like DeliveryDate or DeliveredTo.

The SmtpClient converts MailMessage to a MIME conformant email, but MailMessage provides hardly access to any MIME related functionality. When receiving an email, we would like to store the complete information. Pop3MimeClient receives the first MIME entity by MIME entity and stores them as a MIME entity tree in the new Entities collection property of RxMailMessage. If possible, the info is also copied to the properties inherited from MailMessage. This gives the user the freedom to choose if the complete email in MIME form is used for further processing or just the simpler, but possibly incomplete Body, AlternateViews or Attachments as defined by MailMessage. The method decodeEntity can be used as an example how to loop through all MIME entities of an email.

History

  • 11.10.2006 Improvements Constructor, Handling ContentDisposition==null

    • Proper handling of useSSL in Pop3MimeClient constructor
    • Prevent exception when ContentDisposition is null

  • 8.10.2006 Improvements Attachment Handling

    • Detecting content-disposition header field and creating an attachment if it looks like: "C-Disp: attachment"
    • Only MIME entities from multipart/alternative parents become alternative views
    • Added end markers for multiparts in RxMailMessage.MailStructure()

  • 17.9.2006 Original Post

    • I was not too sure how to map the various multipart entities to email body, etc. I analysed probably thousands of emails I received and populated the RxMailMessage properties as appropriate, but it is very likely that you might receive a different formatted email. Please provide some feedback here, if you do so or find any bugs.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
Singapore Singapore
Retired SW Developer from Switzerland living in Singapore

Interested in WPF projects.

Comments and Discussions

 
AnswerRe: Content disposition is null in some mails with attachments Pin
Peter Huber SG13-Mar-07 21:09
mvaPeter Huber SG13-Mar-07 21:09 
GeneralRe: Content disposition is null in some mails with attachments Pin
Nitin198114-Mar-07 7:07
Nitin198114-Mar-07 7:07 
QuestionTranslated source code to VB.NET? Pin
Grubler12-Mar-07 10:51
Grubler12-Mar-07 10:51 
AnswerRe: Translated source code to VB.NET? Pin
Nitin198113-Mar-07 0:43
Nitin198113-Mar-07 0:43 
GeneralRe: Translated source code to VB.NET? Pin
Chii-san13-Mar-07 6:12
Chii-san13-Mar-07 6:12 
GeneralRe: Translated source code to VB.NET? [modified] Pin
Chii-san19-Mar-07 0:32
Chii-san19-Mar-07 0:32 
QuestionHow can we check whether the mail has been already read? Pin
Sushant Patil20-Feb-07 23:22
Sushant Patil20-Feb-07 23:22 
GeneralProblem processing an embedded attachment Pin
Andy Henderson20-Feb-07 2:29
Andy Henderson20-Feb-07 2:29 
Many thanks for the effort you have put into this. I suspect it was a lot more complicated than you thought it would be when you started.

You did ask for feedback, so here it is.

When processing the attached message, I get an exception at:

case TransferEncoding.Base64:
//convert base 64 -> byte[]
==> byte[] bodyBytes = System.Convert.FromBase64String(TransferEncodedMessage);
message.ContentStream = new MemoryStream(bodyBytes, false);

"Invalid character in a Base-64 string."

Processing the following message. To get the remaining messages from the server I have to disconnect and reconnect the client...

Return-Path: <support@supply2.gov.uk>
X-Sieve: cmu-sieve 2.0
Received: from ca2.supply2.gov.uk (ca2.supply2.gov.uk [62.253.177.9])
by smtp.datagate.net.uk (8.13.7/8.13.7) with ESMTP id l1KAm4Ni020747
for <andy@seeita.com>; Tue, 20 Feb 2007 10:48:09 GMT
Received: from [172.17.0.15] (helo=prod.alertapp2.srg2.bip)
by ca2.supply2.gov.uk with esmtp (Exim 4.60)
(envelope-from <support@supply2.gov.uk>)
id 1HJSXU-0000U3-5m
for Andy@SeeITA.com; Tue, 20 Feb 2007 10:48:04 +0000
To: Andy@SeeITA.com
From: support@supply2.gov.uk
Subject: Supply2.gov.uk Opportunity Alert 20-02-2007
Date: Tue, 20 Feb 2007 10:48:04 +0000
X-Mailer: Perl script "Server.pl"
using Mail::Sender 0.8.13 by Jenda Krynicky, Czechlands
running on prod.alertapp2.srg2.bip (127.0.0.1)
under account "rshields"
Message-ID: <20070220_104804_018979.support@supply2.gov.uk>
MIME-Version: 1.0
Content-type: multipart/mixed;
boundary="Message-Boundary-by-Mail-Sender-1171965139"
X-DG-Spam-Status: No
X-DG-Spam-Score: 0.677 () HTML_MESSAGE,HTML_TAG_EXIST_TBODY,NO_REAL_NAME
X-Scanned-By: MIMEDefang 2.57 on 62.204.37.130

This message is in MIME format. Since your mail reader does not understand
this format, some or all of this message may not be legible.

--Message-Boundary-by-Mail-Sender-1171965139
Content-type: text/html
Content-transfer-encoding: Base64
Content-disposition: attachment; filename="3321006-20-02-2007.html"

PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFs
Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25h
bC5kdGQiPjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFu
Zz0iZW4iIGxhbmc9ImVuIj48aGVhZD48dGl0bGU+U3VwcGx5Mi5nb3YudWs8L3RpdGxlPjxzdHls
ZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InByaW50Ij4gaDR7CiBsaW5lLWhlaWdodDogMTAwJTsg
LyogZml4IGZvciBwcmludCB2ZXJzaW9uIGFkZGl0aW9uYWwgbGluZSBoZWlnaHQgKi8KIH0KPC9z
dHlsZT48c3R5bGUgdHlwZT0idGV4dC9jc3MiPiAqIGh0bWwgYm9keSB7CiBmb250OiBub3JtYWwg
NjglIGFyaWFsLCB2ZXJkYW5hLCBsdWNpZGEsIGhlbHZldGljYSwgc2Fucy1zZXJpZjsKIGNvbG9y
OiAjMzMzOwogfQogYm9keSB7CiBmb250OiBub3JtYWwgNzIlIGFyaWFsLCB2ZXJkYW5hLCBsdWNp
ZGEsIGhlbHZldGljYSwgc2Fucy1zZXJpZjsKIGNvbG9yOiAjMzMzOwogfQogaDF7CiBmb250LXNp
emU6IDEuNmVtOwogY29sb3I6ICNmZmY7CiBiYWNrZ3JvdW5kOiAjNjY2Njk5OwogdmVydGljYWwt
YWxpZ246IGNlbnRlcjsKIHBhZGRpbmc6IDAuNWVtIDFlbTsKIGZvbnQtd2VpZ2h0OiBub25lOwog
Ym9yZGVyLWJvdHRvbTogM3B4IHNvbGlkICNDQ0ZGMDA7CiB9CiBoMnsKIGZvbnQtc2l6ZTogMS40
ZW07CiBjb2xvcjogIzY2NjY5OTsKIH0KIGgzewogZm9udC1zaXplOiAxLjJlbTsKIGxpbmUtaGVp
Z2h0OiA5NSUKIH0KIGg0ewogZm9udC1zaXplOiAxZW07CiBsaW5lLWhlaWdodDogNTAlOwogfQpA
bWVkaWEgcHJpbnQgewpoNCB7CiBsaW5lLWhlaWdodDogMTEwJTsKfQogaDV7CiBmb250LXNpemU6
IDFlbTsKIGxpbmUtaGVpZ2h0OiAxMDAlOwogfQp9Ci5jb250cmFjdGg0IHsKIGZvbnQtd2VpZ2h0
OiBib2xkOwogbWFyZ2luLXRvcDogMTBweDsKIGZvbnQtc2l6ZTogMWVtOwogbGluZS1oZWlnaHQ6
IDEwMCU7Cn0KLmhlaWdodHsKIGxpbmUtaGVpZ2h0OiAxMjUlCiB9Cmg1ewogZm9udC1zaXplOiAx
ZW07CiBsaW5lLWhlaWdodDogMTAwJQogfQogcHsKIGNsZWFyOiBsZWZ0OwogfQogZHR7CiBkaXNw
bGF5OiBibG9jazsKIGZvbnQtd2VpZ2h0OiBib2xkOwogZm9udC1zaXplOiAxLjJlbTsKIGNvbG9y
OiAjMDAwOwogbWFyZ2luOjA7CiBwYWRkaW5nOiAwIDAgMC41ZW0gMDsKIGNsZWFyOiBsZWZ0Owog
fQogdGFibGV7CiBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogYm9yZGVyOiBzb2xpZCAxcHgg
I0E2QTZDNTsKIHdpZHRoOiAxMDAlOwogbWFyZ2luLWJvdHRvbTogMXB4OwogfQogdGh7CiB0ZXh0
LWFsaWduOiBsZWZ0Owogd2lkdGg6IDEwZW07CiB9CiB0aCwgdGR7CiBwYWRkaW5nOiA1cHggMTBw
eDsKIH0KIHRhYmxlLnN0YXRzewogZmxvYXQ6IGxlZnQ7CiBtYXJnaW46IDAgMWVtIDJlbSAwOwog
fQogdGFibGUuc3RhdHMsIHRhYmxlLnN0YXRzIHRoLCB0YWJsZS5zdGF0cyB0ZHsKIGJvcmRlci1j
b2xsYXBzZTogY29sbGFwc2U7CiB3aWR0aDogYXV0bzsKIGJvcmRlcjogc29saWQgMXB4ICNBNkE2
QzU7CiB9CiAvKiogbmF2aWdhdGlvbiAqKi8KICNuYXZ7CiBmbG9hdDpsZWZ0Owogd2lkdGg6YXV0
bzsKIG1hcmdpbjowIDAgMWVtIDA7CiBsZXR0ZXItc3BhY2luZzoycHg7CiB9CiAjbmF2IHVsewog
ZmxvYXQ6bGVmdDsKIHdpZHRoOmF1dG87CiBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjZmZmOwog
bWFyZ2luOjA7CiBwYWRkaW5nOjA7CiBsaXN0LXN0eWxlLXR5cGU6bm9uZTsKIH0KICNuYXYgbGl7
CiBkaXNwbGF5OmlubGluZTsKIHBhZGRpbmc6MDsKIG1hcmdpbjowOwogfQogI25hdiBhewogYmFj
a2dyb3VuZDogI0I5QjlENTsKIGJvcmRlcjogMnB4IHNvbGlkICNmZmY7CiBib3JkZXItd2lkdGg6
IDJweCAycHggMnB4IDA7CiBwYWRkaW5nOiAwLjVlbTsKIG1hcmdpbjogMDsKIGNvbG9yOiAjZmZm
OwogdGV4dC1kZWNvcmF0aW9uOiBub25lOwogZGlzcGxheTogYmxvY2s7CiBmbG9hdDogbGVmdDsK
IGZvbnQ6IGJvbGQgMWVtIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7CiB9CiAjbmF2IGE6
aG92ZXIsICNuYXYgYTpmb2N1c3sKIGNvbG9yOiNmZmY7CiBiYWNrZ3JvdW5kOiNBNkE2QzU7CiB9
CiBhewogY29sb3I6ICMzMzM7CiB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKIH0KIGE6aG92
ZXJ7CiBjb2xvcjogIzY2NjY5OTsKIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKIH0KIGE6YWN0aXZl
ewogYmFja2dyb3VuZDojQTZBNkM1OwogY29sb3I6I2ZmZjsKIH0KIGE6dmlzaXRlZHsKIGJhY2tn
cm91bmQ6I0E2QTZDNTsKIGNvbG9yOiNmZmY7CiB9CiBpbnB1dCwgc2VsZWN0ewogZm9udC1zaXpl
OiAxZW07CiB9CiAuaGlnaHdvcmR7CiBiYWNrZ3JvdW5kOiAjMGZmOwogfQogLmhpZ2hleGFjdHdv
cmR7CiBiYWNrZ3JvdW5kOiAjMGYwOwogfQogLmhpZ2hjcHZ7CiBiYWNrZ3JvdW5kOiAjZjAwOwog
fQogbGkgdGh7CiB0ZXh0LWFsaWduOiByaWdodDsKIHZlcnRpY2FsLWFsaWduOiB0b3A7CiB9CiBs
aSB0YWJsZXsKIG1hcmdpbi10b3A6IDVweDsKIGZvbnQtc2l6ZTogMC45ZW07CiB9CiAjdXBncmFk
ZWJveCB7CiBib3JkZXI6IDNweCBzb2xpZCAjNjY2Njk5OwogYmFja2dyb3VuZDogI0RCRERGNjsK
IHBhZGRpbmc6IDIwcHg7CiBsaW5lLWhlaWdodDogMTAwJTsKIGNvbG9yOnJlZDsKIH0KPC9zdHls
ZT48L2hlYWQ+PGJvZHkgaWQ9dG9wPjxoMT5TdXBwbHkyLmdvdi51ayBDb250cmFjdCBBbGVydAo8
L2gxPjxkaXYgaWQ9bmF2Pjx1bD48bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cuc3VwcGx5Mi5nb3Yu
dWsvY2dpLWJpbi9uZXdzcmVhZGVyLmNnaT9hY3Rpb249c2hvd19saXN0IiB0YXJnZXQ9Il9ibGFu
ayI+TmV3c0Rlc2s8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cuc3VwcGx5Mi5nb3Yu
dWsvY2dpLWJpbi9zdXBwbGllcl9ndWlkYW5jZS5jZ2k/aWQ9MTk7YWN0aW9uPXNob3ciICB0YXJn
ZXQ9Il9ibGFuayI+U3VwcGxpZXIgR3VpZGFuY2VzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHBz
Oi8vd3d3LnN1cHBseTIuZ292LnVrL2NnaS1iaW4vZXZlbnRzLmNnaT9hY3Rpb249ZXZlbnRzX2Rp
YXJ5IiAgdGFyZ2V0PSJfYmxhbmsiPkV2ZW50cyAmYW1wOyBTZW1pbmFyczwvYT48L2xpPjxsaT48
YSBocmVmPSJodHRwczovL3d3dy5zdXBwbHkyLmdvdi51ay9jZ2ktYmluL2hlbHAuY2dpP2FjdGlv
bj1mYXFzIiAgdGFyZ2V0PSJfYmxhbmsiPlN1cHBseTIuZ292LnVrIEhlbHA8L2E+PC9saT48bGk+
PGEgaHJlZj0iaHR0cHM6Ly93d3cuc3VwcGx5Mi5nb3YudWsvY2dpLWJpbi9pbmRleC5jZ2kiIHRh
cmdldD0iX2JsYW5rIj5NZW1iZXJzIEFyZWE8L2E+PC9saT48bGk+PGEgaHJlZj0iI3N0YXRzIj5T
ZWFyY2ggU3RhdGlzdGljczwvYT48L2xpPjwvdWw+PC9kaXY+PHA+VG9kYXkgU3VwcGx5Mi5nb3Yu
dWsgZm91bmQgPHN0cm9uZz4wPC9zdHJvbmc+IGNvbnRyYWN0KHMpIGluIHlvdXIgYXJlYShzKSBt
YXRjaGluZyA8YSBocmVmPSJodHRwczovL3d3dy5zdXBwbHkyLmdvdi51ay9zZWFyY2gvY2dpLWJp
bi9wcm9maWxlL3Byb2ZpbGUuY2dpP2FsZXJ0IiAgdGFyZ2V0PSJfYmxhbmsiPllvdXIgQ29udHJh
Y3QgQWxlcnQgUHJvZmlsZTwvYT48L3A+PGRpdiBpZD11cGdyYWRlYm94PjxoNT5Ub2RheSBTdXBw
bHkyLmdvdi51ayBmb3VuZCA8c3Ryb25nPjU8L3N0cm9uZz4gY29udHJhY3Qocykgb3V0c2lkZSB5
b3VyIHN1YnNjcmliZWQgcmVnaW9uKHMpIGJ1dCBtYXRjaGluZyA8YSBocmVmPSJodHRwczovL3d3
dy5zdXBwbHkyLmdvdi51ay9zZWFyY2gvY2dpLWJpbi9wcm9maWxlL3Byb2ZpbGUuY2dpP2FsZXJ0
IiAgdGFyZ2V0PSJfYmxhbmsiPllvdXIgQ29udHJhY3QgQWxlcnQgUHJvZmlsZTwvYT48L2g1Pjxo
NT4gRG9uJ3QgbWlzcyBvdXQgb24gb3RoZXIgY29udHJhY3Qgb3Bwb3J0dW5pdGllcyB0aGF0IGNv
dWxkIGhlbHAgdG8gZ3JvdyB5b3VyIGJ1c2luZXNzLiBUbyB1cGdyYWRlIHlvdXIgc2VydmljZSwg
Y2xpY2sgPGEgaHJlZj0iaHR0cHM6Ly93d3cuc3VwcGx5Mi5nb3YudWsvY2dpLWJpbi91cGdyYWRl
LmNnaSIgdGFyZ2V0PSJfYmxhbmsiPmhlcmU8L2E+PC9oNT48L2Rpdj48aDI+VXBncmFkZSBIaWdo
IFZhbHVlIE5vdGljZXM8L2gyPjxvbD4KPGxpPjxhIGhyZWY9IiNVSFZOMSI+VUstTGVpY2VzdGVy
OiBmaW5hbmNpYWwgY29uc3VsdGFuY3kgc2VydmljZXM8L2E+PC9saT4KPGxpPjxhIGhyZWY9IiNV
SFZOMiI+VUstTG9uZG9uOiBpbmZvcm1hdGlvbiBzeXN0ZW1zIG9yIHRlY2hub2xvZ3kgc3RyYXRl
Z2ljIHJldmlldyBzZXJ2aWNlczwvYT48L2xpPgo8bGk+PGEgaHJlZj0iI1VIVk4zIj5VSy1OZXdj
YXN0bGUgdXBvbiBUeW5lOiBjb25zdHJ1Y3Rpb24gd29yazwvYT48L2xpPgo8bGk+PGEgaHJlZj0i
I1VIVk40Ij5VSy1HbGFzZ293OiBidXNpbmVzcyBhbmFseXNpcyBjb25zdWx0YW5jeSBzZXJ2aWNl
czwvYT48L2xpPjwvb2w+PGgyPlVwZ3JhZGUgSGlnaCBWYWx1ZSBBd2FyZHM8L2gyPjxvbD4KPGxp
PjxhIGhyZWY9IiNVSFZBMSI+VUstQ2FtYnJpZGdlOiBwcm9qZWN0IG1hbmFnZW1lbnQgY29uc3Vs
dGFuY3kgc2VydmljZXM8L2E+PC9saT48L29sPjxoMT5VcGdyYWRlIEhpZ2ggVmFsdWUgTm90aWNl
czwvaDE+CQk8YSBuYW1lPSJVSFZOMSI8L2E+PGRpdiBpZD1uYXY+PHVsPjxsaT48YSBocmVmPSIj
dG9wIj5pbmRleDwvYT48L2xpPjxsaT48YSBocmVmPSIjVUhWTjIiPm5leHQ8L2E+PC9saT48bGk+
PGEgaHJlZj0iaHR0cHM6Ly93d3cuc3VwcGx5Mi5nb3YudWsvc2VhcmNoL2NnaS1iaW4vY29udHJh
Y3Rfc2VhcmNoL2NvbnRyYWN0X2RldGFpbHMuY2dpP2FjdGlvbj1wcmludF92aWV3JmFtcDt0cmFj
a2VyUmVmPVRLUi0yMDA3MjIwLU9KLTI0NDg4MjkiIHRhcmdldD0iX2JsYW5rIj5vbmxpbmUgcHJp
bnQ8L2E+PC9saT48L3VsPjwvZGl2PjxkbD48ZHQgaWQ9YzE+MS4gVUstTGVpY2VzdGVyOiBmaW5h
bmNpYWwgY29uc3VsdGFuY3kgc2VydmljZXM8L2R0PjxkZD48dGFibGU+PHRib2R5Pjx0cj48dGQ+
PGI+RW50cnkgRGF0ZTogPC9iPjIwLzAyLzIwMDc8YnIvPjxiPlJlZmVyZW5jZTogPC9iPk5vdCBw
cm92aWRlZDxici8+PGI+VHlwZSBvZiBkb2N1bWVudDogPC9iPkNvbnRyYWN0IE5vdGljZTxici8+
PGI+Q291bnRyeTogPC9iPlVOSVRFRCBLSU5HRE9NPGJyLz48Yj5OYXR1cmUgb2YgY29udHJhY3Q6
IDwvYj5TZXJ2aWNlIGNvbnRyYWN0PGJyLz48YnIvPkZpbmFuY2lhbCBjb25zdWx0YW5jeSBzZXJ2
aWNlczxici8+ICAgIEhhcmR3YXJlIGNvbnN1bHRhbmN5IHNlcnZpY2VzPGJyLz4gICAgQnVzaW5l
c3MgYW5hbHlzaXMgY29uc3VsdGFuY3kgc2VydmljZXM8YnIvPiAgICBTeXN0ZW1zIGNvbnN1bHRh
bmN5IHNlcnZpY2VzPGJyLz4gICAgU29mdHdhcmUgY29uc3VsdGFuY3kgc2VydmljZXM8YnIvPiAg
ICBCdXNpbmVzcyBhbmQgbWFuYWdlbWVudCBjb25zdWx0YW5jeSBhbmQgcmVsYXRlZCBzZXJ2aWNl
czxici8+ICAgIEh1bWFuIHJlc291cmNlcyBtYW5hZ2VtZW50IGNvbnN1bHRhbmN5IHNlcnZpY2Vz
PGJyLz4gICAgUHVibGljIHJlbGF0aW9ucyBjb25zdWx0YW5jeSBzZXJ2aWNlczxici8+ICAgIEFy
Y2hpdGVjdHVyYWwsIGVuZ2luZWVyaW5nLCBjb25zdHIuLi48L2JyPjxici8+PHN0cm9uZz48cD5U
aGlzIGNvbnRyYWN0IGFuZCBvdGhlcnMgbGlrZSBpdCBjYW4gYmUgdmlld2VkIGluIGZ1bGwgYnkg
dXBncmFkaW5nIHlvdXIgc3Vic2NyaXB0aW9uIGxldmVsLjxici8+Q2xpY2sgPGEgaHJlZj0iaHR0
cHM6Ly93d3cuc3VwcGx5Mi5nb3YudWsvY2dpLWJpbi91cGdyYWRlLmNnaT9yZWdpb249VUtGMjI7
dmFsdWU9aGlnaCI+aGVyZTwvYT4gdG8gdmlldyB0aGUgY29tcGxldGUgY29udHJhY3QgYW5kIG90
aGVycyBsaWtlIHRoaXMgZm9yIHlvdXIgYXJlYSBmb3IgdGhlIHJlc3Qgb2YgeW91ciBzdWJzY3Jp
cHRpb24gcGVyaW9kPC9wPjwvc3Ryb25nPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kZD48
L2RsPgkJPGEgbmFtZT0iVUhWTjIiPC9hPjxkaXYgaWQ9bmF2Pjx1bD48bGk+PGEgaHJlZj0iI3Rv
cCI+aW5kZXg8L2E+PC9saT48bGk+PGEgaHJlZj0iI1VIVk4xIj5wcmV2aW91czwvYT48L2xpPjxs
aT48YSBocmVmPSIjVUhWTjMiPm5leHQ8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cu
c3VwcGx5Mi5nb3YudWsvc2VhcmNoL2NnaS1iaW4vY29udHJhY3Rfc2VhcmNoL2NvbnRyYWN0X2Rl
dGFpbHMuY2dpP2FjdGlvbj1wcmludF92aWV3JmFtcDt0cmFja2VyUmVmPVRLUi0yMDA3MjIwLU9K
LTI0NDk5MTIiIHRhcmdldD0iX2JsYW5rIj5vbmxpbmUgcHJpbnQ8L2E+PC9saT48L3VsPjwvZGl2
PjxkbD48ZHQgaWQ9YzE+Mi4gVUstTG9uZG9uOiBpbmZvcm1hdGlvbiBzeXN0ZW1zIG9yIHRlY2hu
b2xvZ3kgc3RyYXRlZ2ljIHJldmlldyBzZXJ2aWNlczwvZHQ+PGRkPjx0YWJsZT48dGJvZHk+PHRy
Pjx0ZD48Yj5FbnRyeSBEYXRlOiA8L2I+MjAvMDIvMjAwNzxici8+PGI+UmVmZXJlbmNlOiA8L2I+
Tm90IHByb3ZpZGVkPGJyLz48Yj5UeXBlIG9mIGRvY3VtZW50OiA8L2I+Q29udHJhY3QgTm90aWNl
PGJyLz48Yj5Db3VudHJ5OiA8L2I+VU5JVEVEIEtJTkdET008YnIvPjxiPk5hdHVyZSBvZiBjb250
cmFjdDogPC9iPlNlcnZpY2UgY29udHJhY3Q8YnIvPjxici8+IFVLLUxvbmRvbjogc2VhcmNoIGVu
Z2luZSBvcHRpbWlzYXRpb24gcmV2aWV3Ljxici8+ICAgIFRoaXMgcmVxdWlyZWQgc2VydmljZSBp
bmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvOjxici8+ICAgIFByb3ZpZGUgYSB0cmFuc3Bh
cmVudCBhcHByb2FjaCB0byBzZWFyY2ggZW5naW5lIG9wdGltaXNhdGlvbiAoU0VPKS4gVGhlIGFn
ZW5jeSBtdXN0IGRlc2NyaWJlIGluIGRldGFpbCB0aGUgc3RyYXRlZ2llcyBhbmQgdGVjaG5pcXVl
cyB0aGV5IHVzZSB0byBpbXByb3ZlIFNFTywgcHJpb3JpdGlzZSBjaGFuZ2VzIGFuZCBiZSBwcm9h
Y3RpdmUgaW4gbWFraW5nIHJlY29tbWVuZGF0aW9ucyB0aGF0IGNhbiBiZSBlYXNpbHkgaW1wbGVt
ZW50ZWQgYW5kIG1vbml0b3JlZC48YnIvPiAgICBEZXNjcmliZS4uLjwvYnI+PGJyLz48c3Ryb25n
PjxwPlRoaXMgY29udHJhY3QgYW5kIG90aGVycyBsaWtlIGl0IGNhbiBiZSB2aWV3ZWQgaW4gZnVs
bCBieSB1cGdyYWRpbmcgeW91ciBzdWJzY3JpcHRpb24gbGV2ZWwuPGJyLz5DbGljayA8YSBocmVm
PSJodHRwczovL3d3dy5zdXBwbHkyLmdvdi51ay9jZ2ktYmluL3VwZ3JhZGUuY2dpP3JlZ2lvbj1V
S0kyMzt2YWx1ZT1oaWdoIj5oZXJlPC9hPiB0byB2aWV3IHRoZSBjb21wbGV0ZSBjb250cmFjdCBh
bmQgb3RoZXJzIGxpa2UgdGhpcyBmb3IgeW91ciBhcmVhIGZvciB0aGUgcmVzdCBvZiB5b3VyIHN1
YnNjcmlwdGlvbiBwZXJpb2Q8L3A+PC9zdHJvbmc+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48
L2RkPjwvZGw+CQk8YSBuYW1lPSJVSFZOMyI8L2E+PGRpdiBpZD1uYXY+PHVsPjxsaT48YSBocmVm
PSIjdG9wIj5pbmRleDwvYT48L2xpPjxsaT48YSBocmVmPSIjVUhWTjIiPnByZXZpb3VzPC9hPjwv
bGk+PGxpPjxhIGhyZWY9IiNVSFZONCI+bmV4dDwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwczov
L3d3dy5zdXBwbHkyLmdvdi51ay9zZWFyY2gvY2dpLWJpbi9jb250cmFjdF9zZWFyY2gvY29udHJh
Y3RfZGV0YWlscy5jZ2k/YWN0aW9uPXByaW50X3ZpZXcmYW1wO3RyYWNrZXJSZWY9VEtSLTIwMDcy
MjAtT0otMjQ0OTQwMyIgdGFyZ2V0PSJfYmxhbmsiPm9ubGluZSBwcmludDwvYT48L2xpPjwvdWw+
PC9kaXY+PGRsPjxkdCBpZD1jMT4zLiBVSy1OZXdjYXN0bGUgdXBvbiBUeW5lOiBjb25zdHJ1Y3Rp
b24gd29yazwvZHQ+PGRkPjx0YWJsZT48dGJvZHk+PHRyPjx0ZD48Yj5FbnRyeSBEYXRlOiA8L2I+
MjAvMDIvMjAwNzxici8+PGI+UmVmZXJlbmNlOiA8L2I+Tm90IHByb3ZpZGVkPGJyLz48Yj5UeXBl
IG9mIGRvY3VtZW50OiA8L2I+Q29udHJhY3QgTm90aWNlPGJyLz48Yj5Db3VudHJ5OiA8L2I+VU5J
VEVEIEtJTkdET008YnIvPjxiPk5hdHVyZSBvZiBjb250cmFjdDogPC9iPldvcmtzIGNvbnRyYWN0
PGJyLz48YnIvPk5ld2Nhc3RsZSBDaXR5IENvdW5jaWwgaXMgc2Vla2luZyBhIHByaXZhdGUgc2Vj
dG9yIHBhcnRuZXIgaW4gb3JkZXIgdG8gZGVsaXZlciBhIGNvbXByZWhlbnNpdmUgaG91c2luZy1s
ZWQgcmVnZW5lcmF0aW9uIGRldmVsb3BtZW50IGluIHRoZSBXZXN0IEVuZCBvZiBOZXdjYXN0bGUg
dXBvbiBUeW5lIGFzIHBhcnQgb2YgdGhlIEhvdXNpbmcgTWFya2V0IFJlbmV3YWwgUGF0aGZpbmRl
ciBwcm9ncmFtbWUuIFRoZSBwYXJ0bmVyIHdpbGwgYmUgcmVxdWlyZWQgdG8gcHJvdmlkZSBpbm5v
dmF0aW9uIGJvdGggaW4gdGVybXMgb2YgZGVzaWduIGFuZCBkZWxpdmVyeSwgdXNpbmcgdGhlaXIg
ZmluYW5jaWFsIGFuZCBkZXZlbG9wbWVudCBleHBlcnRpc2UuIFRoZSBzY2hlbWUgd2lsbCBpbmNs
dWRlIG5ldyBob3UuLi48L2JyPjxici8+PHN0cm9uZz48cD5UaGlzIGNvbnRyYWN0IGFuZCBvdGhl
cnMgbGlrZSBpdCBjYW4gYmUgdmlld2VkIGluIGZ1bGwgYnkgdXBncmFkaW5nIHlvdXIgc3Vic2Ny
aXB0aW9uIGxldmVsLjxici8+Q2xpY2sgPGEgaHJlZj0iaHR0cHM6Ly93d3cuc3VwcGx5Mi5nb3Yu
dWsvY2dpLWJpbi91cGdyYWRlLmNnaT9yZWdpb249VUtDMjt2YWx1ZT1oaWdoIj5oZXJlPC9hPiB0
byB2aWV3IHRoZSBjb21wbGV0ZSBjb250cmFjdCBhbmQgb3RoZXJzIGxpa2UgdGhpcyBmb3IgeW91
ciBhcmVhIGZvciB0aGUgcmVzdCBvZiB5b3VyIHN1YnNjcmlwdGlvbiBwZXJpb2Q8L3A+PC9zdHJv
bmc+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L2RkPjwvZGw+CQk8YSBuYW1lPSJVSFZONCI8
L2E+PGRpdiBpZD1uYXY+PHVsPjxsaT48YSBocmVmPSIjdG9wIj5pbmRleDwvYT48L2xpPjxsaT48
YSBocmVmPSIjVUhWTjMiPnByZXZpb3VzPC9hPjwvbGk+PGxpPjxhIGhyZWY9IiNVSFZBMSI+bmV4
dDwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwczovL3d3dy5zdXBwbHkyLmdvdi51ay9zZWFyY2gv
Y2dpLWJpbi9jb250cmFjdF9zZWFyY2gvY29udHJhY3RfZGV0YWlscy5jZ2k/YWN0aW9uPXByaW50
X3ZpZXcmYW1wO3RyYWNrZXJSZWY9VEtSLTIwMDcyMjAtT0otMjQ0ODg2NCIgdGFyZ2V0PSJfYmxh
bmsiPm9ubGluZSBwcmludDwvYT48L2xpPjwvdWw+PC9kaXY+PGRsPjxkdCBpZD1jMT40LiBVSy1H
bGFzZ293OiBidXNpbmVzcyBhbmFseXNpcyBjb25zdWx0YW5jeSBzZXJ2aWNlczwvZHQ+PGRkPjx0
YWJsZT48dGJvZHk+PHRyPjx0ZD48Yj5FbnRyeSBEYXRlOiA8L2I+MjAvMDIvMjAwNzxici8+PGI+
UmVmZXJlbmNlOiA8L2I+Tm90IHByb3ZpZGVkPGJyLz48Yj5UeXBlIG9mIGRvY3VtZW50OiA8L2I+
Q29udHJhY3QgTm90aWNlPGJyLz48Yj5Db3VudHJ5OiA8L2I+VU5JVEVEIEtJTkdET008YnIvPjxi
Pk5hdHVyZSBvZiBjb250cmFjdDogPC9iPlNlcnZpY2UgY29udHJhY3Q8YnIvPjxici8+QnVzaW5l
c3MgYW5hbHlzaXMgY29uc3VsdGFuY3kgc2VydmljZXMuLi48L2JyPjxici8+PHN0cm9uZz48cD5U
aGlzIGNvbnRyYWN0IGFuZCBvdGhlcnMgbGlrZSBpdCBjYW4gYmUgdmlld2VkIGluIGZ1bGwgYnkg
dXBncmFkaW5nIHlvdXIgc3Vic2NyaXB0aW9uIGxldmVsLjxici8+Q2xpY2sgPGEgaHJlZj0iaHR0
cHM6Ly93d3cuc3VwcGx5Mi5nb3YudWsvY2dpLWJpbi91cGdyYWRlLmNnaT9yZWdpb249VUtNMzQ7
dmFsdWU9aGlnaCI+aGVyZTwvYT4gdG8gdmlldyB0aGUgY29tcGxldGUgY29udHJhY3QgYW5kIG90
aGVycyBsaWtlIHRoaXMgZm9yIHlvdXIgYXJlYSBmb3IgdGhlIHJlc3Qgb2YgeW91ciBzdWJzY3Jp
cHRpb24gcGVyaW9kPC9wPjwvc3Ryb25nPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kZD48
L2RsPjxoMT5VcGdyYWRlIEhpZ2ggVmFsdWUgQXdhcmRzPC9oMT4JCTxhIG5hbWU9IlVIVkExIjwv
YT48ZGl2IGlkPW5hdj48dWw+PGxpPjxhIGhyZWY9IiN0b3AiPmluZGV4PC9hPjwvbGk+PGxpPjxh
IGhyZWY9IiNVSFZONCI+cHJldmlvdXM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cu
c3VwcGx5Mi5nb3YudWsvc2VhcmNoL2NnaS1iaW4vY29udHJhY3Rfc2VhcmNoL2NvbnRyYWN0X2Rl
dGFpbHMuY2dpP2FjdGlvbj1wcmludF92aWV3JmFtcDt0cmFja2VyUmVmPVRLUi0yMDA3MjIwLU9K
LTI0NDkyMzkiIHRhcmdldD0iX2JsYW5rIj5vbmxpbmUgcHJpbnQ8L2E+PC9saT48L3VsPjwvZGl2
PjxkbD48ZHQgaWQ9YzE+MS4gVUstQ2FtYnJpZGdlOiBwcm9qZWN0IG1hbmFnZW1lbnQgY29uc3Vs
dGFuY3kgc2VydmljZXM8L2R0PjxkZD48dGFibGU+PHRib2R5Pjx0cj48dGQ+PGI+RW50cnkgRGF0
ZTogPC9iPjIwLzAyLzIwMDc8YnIvPjxiPlJlZmVyZW5jZTogPC9iPk5vdCBwcm92aWRlZDxici8+
PGI+VHlwZSBvZiBkb2N1bWVudDogPC9iPkNvbnRyYWN0IEF3YXJkPGJyLz48Yj5Db3VudHJ5OiA8
L2I+VU5JVEVEIEtJTkdET008YnIvPjxiPk5hdHVyZSBvZiBjb250cmFjdDogPC9iPlNlcnZpY2Ug
Y29udHJhY3Q8YnIvPjxici8+IFByb2plY3QgTWFuYWdlbWVudCBmb3IgQ29tbXVuaWNhdGlvbnMg
Q2FtcGFpZ25zLjxici8+ICAgIEVFREEgaXMgbG9va2luZyBmb3IgYSBzdXBwbGllciB3aGljaCBj
YW4gZnVsZmlsIHRoZSBmb2xsb3dpbmcgcmVxdWlyZW1lbnRzICh0aGlzIGxpc3QgaXMgbm90IGV4
aGF1c3RpdmUsIGJ1dCBpcyB0eXBpY2FsIG9mIHRoZSB0eXBlcyBvZiBhY3Rpdml0eSBhbmQgbWF5
IGluY2x1ZGUpOjxici8+ICAgIC0gZGV2ZWxvcCBhbmQgcHJvamVjdCBtYW5hZ2UgY29tcGxleCBj
b21tdW5pY2F0aW9ucyBjYW1wYWlnbnMgdXNpbmcgc3Ryb25nIHByb2plY3QgbWFuYWdlbWVudCBz
a2lsbHM7PGJyLz4gICAgLSBwcm9qZWN0IG1hbmFnZW1lbnQsIHBsYW5uaW5nLCBhbmQgbW9uaXRv
cmluZyBvZiBtYWpvciBjb21tdS4uLjwvYnI+PGJyLz48c3Ryb25nPjxwPlRoaXMgY29udHJhY3Qg
YW5kIG90aGVycyBsaWtlIGl0IGNhbiBiZSB2aWV3ZWQgaW4gZnVsbCBieSB1cGdyYWRpbmcgeW91
ciBzdWJzY3JpcHRpb24gbGV2ZWwuPGJyLz5DbGljayA8YSBocmVmPSJodHRwczovL3d3dy5zdXBw
bHkyLmdvdi51ay9jZ2ktYmluL3VwZ3JhZGUuY2dpP3JlZ2lvbj1VS0g7dmFsdWU9aGlnaCI+aGVy
ZTwvYT4gdG8gdmlldyB0aGUgY29tcGxldGUgY29udHJhY3QgYW5kIG90aGVycyBsaWtlIHRoaXMg
Zm9yIHlvdXIgYXJlYSBmb3IgdGhlIHJlc3Qgb2YgeW91ciBzdWJzY3JpcHRpb24gcGVyaW9kPC9w
Pjwvc3Ryb25nPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kZD48L2RsPjxoMSBpZD0ic3Rh
dHMiPlNlYXJjaCBTdGF0aXN0aWNzPC9oMT48dGFibGU+PHRyIHZhbGlnbj10b3A+PHRkPjx0YWJs
ZSBjbGFzcz1zdGF0cyBpZD0ic3RhdHMiPjx0Ym9keT48dHI+PHRoIGNvbHNwYW49Mj48c3BhbiBj
bGFzcz1oaWdod29yZD5LZXl3b3Jkczwvc3Bhbj48L3RoPjwvdHI+PC90Ym9keT48L3RhYmxlPjwv
dGQ+PHRkPjx0YWJsZSBjbGFzcz1zdGF0cyBpZD0ic3RhdHMiPjx0Ym9keT48dHI+PHRoIGNvbHNw
YW49Mj48c3BhbiBjbGFzcz1oaWdoZXhhY3R3b3JkPkV4YWN0IEtleXdvcmRzPC9zcGFuPjwvdGg+
PC90cj48L3Rib2R5PjwvdGFibGU+PC90ZD48dGQ+PHRhYmxlIGNsYXNzPXN0YXRzPjx0Ym9keT48
dHI+PHRoIGNvbHNwYW49Mz48c3BhbiBjbGFzcz1oaWdoY3B2PkNQViBDb2Rlczwvc3Bhbj48L3Ro
PjwvdHI+PHRyPjx0ZCBjbGFzcz1oaWdoPjcyMjQ2MDAwPC90ZD48dGQ+U3lzdGVtcyBjb25zdWx0
YW5jeSBzZXJ2aWNlcy48L3RkPjx0ZD4yPC90ZD48L3RyPjx0cj48dGQgY2xhc3M9aGlnaD43MjI2
NjAwMDwvdGQ+PHRkPlNvZnR3YXJlIGNvbnN1bHRhbmN5IHNlcnZpY2VzLjwvdGQ+PHRkPjI8L3Rk
PjwvdHI+PC90Ym9keT48L3RhYmxlPjwvdGQ+PC90cj48dHIgdmFsaWduPXRvcD48dGQ+PHRhYmxl
IGNsYXNzPXN0YXRzPjx0Ym9keT48dHI+PHRoPiBDb250cmFjdHMgRm91bmQKPC90aD48dGg+TG93
IFZhbHVlPC90aD48dGg+SGlnaCBWYWx1ZTwvdGg+PHRoPlRvdGFsPC90aD48L3RyPjx0cj48dGQ+
V2l0aGluIHlvdXIgc3Vic2NyaWJlZCByZWdpb24ocyk8L3RkPjx0ZD4wPC90ZD48dGQ+MDwvdGQ+
PHRoPjA8L3RoPjwvdHI+PHRyPjx0ZD5PdXRzaWRlIHlvdXIgc3Vic2NyaWJlZCByZWdpb24ocyk8
L3RkPjx0ZD4wPC90ZD48dGQ+NTwvdGQ+PHRoPjU8L3RoPjwvdHI+PHRyPjx0aD5Ub3RhbDwvdGg+
PHRoPjA8L3RoPjx0aD41PC90aD48dGg+NTwvdGg+PC90cj48L3Rib2R5PjwvdGFibGU+PC90ZD48
dGQ+PHRhYmxlIGNsYXNzPXN0YXRzPjx0Ym9keT48dHI+PHRoIGNvbHNwYW49Mj5Db250cmFjdHMg
QXZhaWxhYmxlIHdpdGhpbiB0aGUgbGFzdCAyNCBob3VyczwvdGg+PC90cj48dHI+PHRkPk5vdGlj
ZXM8L3RkPjx0ZD4xMDU8L3RkPjwvdHI+PHRyPjx0ZD5Bd2FyZHM8L3RkPjx0ZD4zMzwvdGQ+PC90
cj48L3Rib2R5PjwvdGFibGU+PC90ZD48L3RyPjwvdGFibGU+PHA+PGEgaHJlZj0iI3RvcCI+YmFj
ayB0byB0b3A8L2E+PC9wPjwvYm9keT48L2h0bWw+Cg==
=
--Message-Boundary-by-Mail-Sender-1171965139
Content-type: text/plain; charset="iso-8859-1"
Content-description: Mail message body
Content-transfer-encoding: quoted-printable
Content-disposition: inline

Dear Andy Henderson,=20

Welcome to the contract alert service from Supply2.gov.uk.=20=20
=20
Please find attached the contract opportunities matching your Daily Alert P=
rofile.
=20
If you have not yet set up your unique profile or if you wish to amend it, =
this can be done by following the instructions at https://www.supply2.gov.u=
k/search/cgi-bin/profile/profile.cgi
=20
If you have any questions relating to the service please call our dedicated=
Customer Support team on - Tel: 0845 270 7085. Email: support@supply2.go=
v.uk=20

=20


Best regards,

Supply2.gov.uk Supplier Helpdesk=20

Email: supplier@supply2.gov.uk=
=
--Message-Boundary-by-Mail-Sender-1171965139--

.


Andy Henderson
GeneralRe: Problem processing an embedded attachment Pin
00K5-Jun-07 11:57
00K5-Jun-07 11:57 
GeneralNon funziona Pin
andr7620-Feb-07 0:21
andr7620-Feb-07 0:21 
AnswerRe: Non funziona - check firewall Pin
Peter Huber SG20-Feb-07 16:24
mvaPeter Huber SG20-Feb-07 16:24 
GeneralGetMailboxStats Method Pin
sgrossman1-Feb-07 6:32
sgrossman1-Feb-07 6:32 
GeneralRe: GetMailboxStats Method Pin
Chii-san13-Mar-07 6:17
Chii-san13-Mar-07 6:17 
QuestionBcc and HTML Bodies Pin
sgrossman29-Jan-07 11:14
sgrossman29-Jan-07 11:14 
AnswerRe: Bcc and HTML Bodies Pin
Peter Huber SG29-Jan-07 15:35
mvaPeter Huber SG29-Jan-07 15:35 
GeneralRe: Bcc and HTML Bodies Pin
sgrossman30-Jan-07 11:30
sgrossman30-Jan-07 11:30 
GeneralRe: Bcc and HTML Bodies Pin
Peter Huber SG30-Jan-07 14:08
mvaPeter Huber SG30-Jan-07 14:08 
NewsEncodedWord, Encoding and Subject Pin
alex_boyer28-Jan-07 11:08
alex_boyer28-Jan-07 11:08 
GeneralRe: EncodedWord, Encoding and Subject Pin
shaneritchie27-Feb-07 1:35
shaneritchie27-Feb-07 1:35 
GeneralRe: EncodedWord, Encoding and Subject Pin
Member 470508822-Dec-07 9:18
Member 470508822-Dec-07 9:18 
QuestionPriority Pin
flash-man23-Jan-07 14:00
flash-man23-Jan-07 14:00 
QuestionRe: Priority Pin
Mad20061-Feb-07 6:35
Mad20061-Feb-07 6:35 
AnswerRe: Priority Pin
priyaAru14-Mar-07 0:38
priyaAru14-Mar-07 0:38 
AnswerRe: Priority Pin
Mad200614-Mar-07 8:27
Mad200614-Mar-07 8:27 
GeneralRe: Priority Pin
priyaAru15-Mar-07 4:53
priyaAru15-Mar-07 4:53 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.