Return-Path: <eran@hueniverse.com>
X-Original-To: oauth@ietfa.amsl.com
Delivered-To: oauth@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix)
 with ESMTP id 6C9F421F8485 for <oauth@ietfa.amsl.com>;
 Mon, 12 Dec 2011 18:33:23 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.52
X-Spam-Level: 
X-Spam-Status: No, score=-2.52 tagged_above=-999 required=5 tests=[AWL=0.078,
 BAYES_00=-2.599, HTML_MESSAGE=0.001]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com
 [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Bi3L2cmVpnFW for
 <oauth@ietfa.amsl.com>; Mon, 12 Dec 2011 18:33:21 -0800 (PST)
Received: from p3plex1out01.prod.phx3.secureserver.net
 (p3plex1out01.prod.phx3.secureserver.net [72.167.180.17]) by ietfa.amsl.com
 (Postfix) with SMTP id 6DB0821F84A8 for <oauth@ietf.org>;
 Mon, 12 Dec 2011 18:33:16 -0800 (PST)
Received: (qmail 10534 invoked from network); 13 Dec 2011 02:33:15 -0000
Received: from unknown (HELO smtp.ex1.secureserver.net) (72.167.180.46) by
 p3plex1out01.prod.phx3.secureserver.net with SMTP; 13 Dec 2011 02:33:15 -0000
Received: from P3PW5EX1MB01.EX1.SECURESERVER.NET ([10.6.135.19]) by
 P3PW5EX1HT004.EX1.SECURESERVER.NET ([72.167.180.134]) with mapi;
 Mon, 12 Dec 2011 19:33:15 -0700
From: Eran Hammer-Lahav <eran@hueniverse.com>
To: Mike Jones <Michael.Jones@microsoft.com>, "oauth@ietf.org" <oauth@ietf.org>
Date: Mon, 12 Dec 2011 19:33:10 -0700
Thread-Topic: [OAUTH-WG] Using OAuth error_code to glean information from
 the	server
Thread-Index: Acy5GRQ8DCUDRcpaSEuLOrJymTfgmAAF5PRwAAOQbdA=
Message-ID: <90C41DD21FB7C64BB94121FBBC2E723452856C7C78@P3PW5EX1MB01.EX1.SECURESERVER.NET>
References: <8DA2949DB77C2547B14546D35E22A20002D328EC@CH1PRD0302MB127.namprd03.prod.outlook.com>
 <4E1F6AAD24975D4BA5B16804296739435F75FBF7@TK5EX14MBXC283.redmond.corp.microsoft.com>
In-Reply-To: <4E1F6AAD24975D4BA5B16804296739435F75FBF7@TK5EX14MBXC283.redmond.corp.microsoft.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
acceptlanguage: en-US
Content-Type: multipart/alternative;
 boundary="_000_90C41DD21FB7C64BB94121FBBC2E723452856C7C78P3PW5EX1MB01E_"
MIME-Version: 1.0
Subject: Re: [OAUTH-WG] Using OAuth error_code to glean information from
 the	server
X-BeenThere: oauth@ietf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: OAUTH WG <oauth.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/oauth>,
 <mailto:oauth-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/oauth>
List-Post: <mailto:oauth@ietf.org>
List-Help: <mailto:oauth-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/oauth>,
 <mailto:oauth-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 13 Dec 2011 02:33:23 -0000

--_000_90C41DD21FB7C64BB94121FBBC2E723452856C7C78P3PW5EX1MB01E_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

'Client credentials' needs to be removed from invalid_grant. It is not appr=
opriate.

Use invalid_client all the way to a fully authenticate client. ANY failure =
to authenticate the client should result in invalid_client.

Use unauthorized_client for an authenticate client which is not permitted t=
o use this grant type. There are no other issues with an invalid grant rela=
ted to client credentials.

I'll drop it from the e.g. list.

EHL



From: oauth-bounces@ietf.org [mailto:oauth-bounces@ietf.org] On Behalf Of M=
ike Jones
Sent: Monday, December 12, 2011 4:52 PM
To: oauth@ietf.org
Subject: [OAUTH-WG] Using OAuth error_code to glean information from the se=
rver

I recently received an inquiry regarding invalid_client vs. invalid_grant. =
 It seems that there is a potential information disclosure in the specifica=
tion with respect to how these error codes are used:

invalid_client
               Client authentication failed (e.g. unknown client, no
               client authentication included, or unsupported
               authentication method).  The authorization server MAY
               return an HTTP 401 (Unauthorized) status code to indicate
               which HTTP authentication schemes are supported.  If the
               client attempted to authenticate via the "Authorization"
               request header field, the authorization server MUST
               respond with an HTTP 401 (Unauthorized) status code, and
               include the "WWW-Authenticate" response header field
               matching the authentication scheme used by the client.

invalid_grant

               The provided authorization grant (e.g. authorization

               code, resource owner credentials, client credentials) is

               invalid, expired, revoked, does not match the redirection

               URI used in the authorization request, or was issued to

               another client.

If one uses invalid_client when the client is unknown and invalid_grant whe=
n the client credentials are invalid, then an attacker could deduce whether=
 or not a particular client exists.

First, do people agree that this is a potential information leak and that t=
he leak is meaningful?  If so, what mitigation might be suggested?  For ins=
tance, might a server choose to use a single error code for both (and poten=
tially other) cases?

                                                            Thanks,
                                                            -- Mike


--_000_90C41DD21FB7C64BB94121FBBC2E723452856C7C78P3PW5EX1MB01E_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40"><head><META HTTP-EQUIV=3D"Content-Type" CONTENT=
=3D"text/html; charset=3Dus-ascii"><meta name=3DGenerator content=3D"Micros=
oft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
	{font-family:"Segoe UI";
	panose-1:2 11 5 2 4 2 4 2 2 3;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0in;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-priority:99;
	color:purple;
	text-decoration:underline;}
p
	{mso-style-priority:99;
	margin-top:0in;
	margin-right:0in;
	margin-bottom:3.0pt;
	margin-left:0in;
	font-size:12.0pt;
	font-family:"Segoe UI","sans-serif";}
pre
	{mso-style-priority:99;
	mso-style-link:"HTML Preformatted Char";
	margin:0in;
	margin-bottom:.0001pt;
	font-size:10.0pt;
	font-family:"Courier New";}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
	{mso-style-priority:99;
	mso-style-link:"Balloon Text Char";
	margin:0in;
	margin-bottom:.0001pt;
	font-size:8.0pt;
	font-family:"Tahoma","sans-serif";}
span.HTMLPreformattedChar
	{mso-style-name:"HTML Preformatted Char";
	mso-style-priority:99;
	mso-style-link:"HTML Preformatted";
	font-family:"Courier New";}
span.BalloonTextChar
	{mso-style-name:"Balloon Text Char";
	mso-style-priority:99;
	mso-style-link:"Balloon Text";
	font-family:"Tahoma","sans-serif";}
span.EmailStyle22
	{mso-style-type:personal;
	font-family:"Calibri","sans-serif";}
span.EmailStyle23
	{mso-style-type:personal;
	font-family:"Calibri","sans-serif";
	color:#1F497D;}
span.EmailStyle24
	{mso-style-type:personal;
	font-family:"Segoe UI","sans-serif";
	color:#1F497D;}
span.EmailStyle25
	{mso-style-type:personal;
	font-family:"Calibri","sans-serif";
	color:#993366;}
span.grey
	{mso-style-name:grey;}
span.EmailStyle27
	{mso-style-type:personal;
	font-family:"Segoe UI","sans-serif";
	color:#1F497D;}
span.EmailStyle28
	{mso-style-type:personal;
	font-family:"Calibri","sans-serif";
	color:#1F497D;}
span.EmailStyle29
	{mso-style-type:personal-reply;
	font-family:"Calibri","sans-serif";
	color:#1F497D;}
.MsoChpDefault
	{mso-style-type:export-only;
	font-size:10.0pt;}
@page WordSection1
	{size:8.5in 11.0in;
	margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]--></head><body lang=3DEN-US link=3Dblue vli=
nk=3Dpurple><div class=3DWordSection1><p class=3DMsoNormal><span style=3D'f=
ont-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>&#8216;Cl=
ient credentials&#8217; needs to be removed from invalid_grant. It is not a=
ppropriate.<o:p></o:p></span></p><p class=3DMsoNormal><span style=3D'font-s=
ize:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o=
:p></span></p><p class=3DMsoNormal><span style=3D'font-size:11.0pt;font-fam=
ily:"Calibri","sans-serif";color:#1F497D'>Use invalid_client all the way to=
 a fully authenticate client. ANY failure to authenticate the client should=
 result in invalid_client.<o:p></o:p></span></p><p class=3DMsoNormal><span =
style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'=
><o:p>&nbsp;</o:p></span></p><p class=3DMsoNormal><span style=3D'font-size:=
11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Use unauthorized_c=
lient for an authenticate client which is not permitted to use this grant t=
ype. There are no other issues with an invalid grant related to client cred=
entials.<o:p></o:p></span></p><p class=3DMsoNormal><span style=3D'font-size=
:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p>=
</span></p><p class=3DMsoNormal><span style=3D'font-size:11.0pt;font-family=
:"Calibri","sans-serif";color:#1F497D'>I&#8217;ll drop it from the e.g. lis=
t.<o:p></o:p></span></p><p class=3DMsoNormal><span style=3D'font-size:11.0p=
t;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span=
></p><p class=3DMsoNormal><span style=3D'font-size:11.0pt;font-family:"Cali=
bri","sans-serif";color:#1F497D'>EHL<o:p></o:p></span></p><p class=3DMsoNor=
mal><span style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";colo=
r:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=3DMsoNormal><span style=3D'=
font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nb=
sp;</o:p></span></p><p class=3DMsoNormal><span style=3D'font-size:11.0pt;fo=
nt-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p=
><div style=3D'border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in=
 4.0pt'><div><div style=3D'border:none;border-top:solid #B5C4DF 1.0pt;paddi=
ng:3.0pt 0in 0in 0in'><p class=3DMsoNormal><b><span style=3D'font-size:10.0=
pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span style=3D'font-s=
ize:10.0pt;font-family:"Tahoma","sans-serif"'> oauth-bounces@ietf.org [mail=
to:oauth-bounces@ietf.org] <b>On Behalf Of </b>Mike Jones<br><b>Sent:</b> M=
onday, December 12, 2011 4:52 PM<br><b>To:</b> oauth@ietf.org<br><b>Subject=
:</b> [OAUTH-WG] Using OAuth error_code to glean information from the serve=
r<o:p></o:p></span></p></div></div><p class=3DMsoNormal><o:p>&nbsp;</o:p></=
p><p class=3DMsoNormal><span style=3D'font-size:11.0pt;font-family:"Calibri=
","sans-serif";color:#1F497D'>I recently received an inquiry regarding inva=
lid_client vs. invalid_grant. &nbsp;It seems that there is a potential info=
rmation disclosure in the specification with respect to how these error cod=
es are used:<o:p></o:p></span></p><p class=3DMsoNormal style=3D'page-break-=
before:always'><span style=3D'font-size:11.0pt;font-family:"Calibri","sans-=
serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=3DMsoNormal styl=
e=3D'margin-left:.5in;page-break-before:always'><span style=3D'font-size:10=
.0pt;font-family:"Courier New";color:black'>invalid_client<o:p></o:p></span=
></p><p class=3DMsoNormal style=3D'margin-left:.5in;page-break-before:alway=
s'><span style=3D'font-size:10.0pt;font-family:"Courier New";color:black'>&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp; Client authentication failed (e.g. <span style=3D'background:yello=
w;mso-highlight:yellow'>unknown client</span>, no<o:p></o:p></span></p><p c=
lass=3DMsoNormal style=3D'margin-left:.5in;page-break-before:always'><span =
style=3D'font-size:10.0pt;font-family:"Courier New";color:black'>&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
client authentication included, or unsupported<o:p></o:p></span></p><p clas=
s=3DMsoNormal style=3D'margin-left:.5in;page-break-before:always'><span sty=
le=3D'font-size:10.0pt;font-family:"Courier New";color:black'>&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aut=
hentication method).&nbsp; The authorization server MAY<o:p></o:p></span></=
p><p class=3DMsoNormal style=3D'margin-left:.5in;page-break-before:always'>=
<span style=3D'font-size:10.0pt;font-family:"Courier New";color:black'>&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp; return an HTTP 401 (Unauthorized) status code to indicate<o:p></o:p><=
/span></p><p class=3DMsoNormal style=3D'margin-left:.5in;page-break-before:=
always'><span style=3D'font-size:10.0pt;font-family:"Courier New";color:bla=
ck'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp; which HTTP authentication schemes are supported.&nbsp; If the=
<o:p></o:p></span></p><p class=3DMsoNormal style=3D'margin-left:.5in;page-b=
reak-before:always'><span style=3D'font-size:10.0pt;font-family:"Courier Ne=
w";color:black'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp; client attempted to authenticate via the &quot;Au=
thorization&quot;<o:p></o:p></span></p><p class=3DMsoNormal style=3D'margin=
-left:.5in;page-break-before:always'><span style=3D'font-size:10.0pt;font-f=
amily:"Courier New";color:black'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request header field, the author=
ization server MUST<o:p></o:p></span></p><p class=3DMsoNormal style=3D'marg=
in-left:.5in;page-break-before:always'><span style=3D'font-size:10.0pt;font=
-family:"Courier New";color:black'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; respond with an HTTP 401 (Unau=
thorized) status code, and<o:p></o:p></span></p><p class=3DMsoNormal style=
=3D'margin-left:.5in;page-break-before:always'><span style=3D'font-size:10.=
0pt;font-family:"Courier New";color:black'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; include the &quot;WWW-=
Authenticate&quot; response header field<o:p></o:p></span></p><p class=3DMs=
oNormal style=3D'margin-left:.5in;page-break-before:always'><span style=3D'=
font-size:10.0pt;font-family:"Courier New";color:black'>&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; matching =
the authentication scheme used by the client.<o:p></o:p></span></p><pre sty=
le=3D'margin-left:.5in;page-break-before:always'><span style=3D'color:black=
'>invalid_grant<o:p></o:p></span></pre><pre style=3D'margin-left:.5in;page-=
break-before:always'><span style=3D'color:black'>&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The provided aut=
horization grant (e.g. authorization<o:p></o:p></span></pre><pre style=3D'm=
argin-left:.5in;page-break-before:always'><span style=3D'color:black'>&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp; code, resource owner credentials, <span style=3D'background:yellow;mso=
-highlight:yellow'>client credentials</span>) is<o:p></o:p></span></pre><pr=
e style=3D'margin-left:.5in;page-break-before:always'><span style=3D'color:=
black'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp; invalid, expired, revoked, does not match the redirection<=
o:p></o:p></span></pre><pre style=3D'margin-left:.5in;page-break-before:alw=
ays'><span style=3D'color:black'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; URI used in the authorization re=
quest, or was issued to<o:p></o:p></span></pre><pre style=3D'margin-left:.5=
in;page-break-before:always'><span style=3D'color:black'>&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; another =
client.<o:p></o:p></span></pre><p class=3DMsoNormal><span style=3D'font-siz=
e:11.0pt;font-family:"Calibri","sans-serif";color:#993366'><o:p>&nbsp;</o:p=
></span></p><p class=3DMsoNormal><span style=3D'font-size:11.0pt;font-famil=
y:"Calibri","sans-serif";color:#1F497D'>If one uses invalid_client when the=
 client is unknown and invalid_grant when the client credentials are invali=
d, then an attacker could deduce whether or not a particular client exists.=
<o:p></o:p></span></p><p class=3DMsoNormal><span style=3D'font-size:11.0pt;=
font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span><=
/p><p class=3DMsoNormal><span style=3D'font-size:11.0pt;font-family:"Calibr=
i","sans-serif";color:#1F497D'>First, do people agree that this is a potent=
ial information leak and that the leak is meaningful?&nbsp; If so, what mit=
igation might be suggested?&nbsp; For instance, might a server choose to us=
e a single error code for both (and potentially other) cases?<o:p></o:p></s=
pan></p><p class=3DMsoNormal><span style=3D'font-size:11.0pt;font-family:"C=
alibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=3D=
MsoNormal><span style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif=
";color:#1F497D'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Tha=
nks,<o:p></o:p></span></p><p class=3DMsoNormal><span style=3D'font-size:11.=
0pt;font-family:"Calibri","sans-serif";color:#1F497D'>&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- Mike<o:p></o:p></span></p><p class=3DM=
soNormal><span style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif"=
;color:#1F497D'><o:p>&nbsp;</o:p></span></p></div></div></body></html>=

--_000_90C41DD21FB7C64BB94121FBBC2E723452856C7C78P3PW5EX1MB01E_--
