Join with a Where.Contains Failing

Nov 7, 2013 at 10:47 PM
Having an issue with a double join (3 tables) with .Where(x=> array.Contains(x.field) on the first table that is failing. See below (Why E1.J1.E1.Dest)

Also - If I drop the contains and make it .Where(x=> field == "SingleValue") it Works

                dest = "LON,TKU,OSL,BGO,CPH,AAL,AAR,ODE,BLL,STO,GOT";

                List<string> b = dest.Split(',').ToList();
                IQueryable<Housebill> data = this.CifDbContext.Iclogs.Where(file => b.Contains(file.Dest))
                .Join(this.CifDbContext.Hhlogs,
                    ic => ic.Serialno,
                    hh => hh.Consserial,
                    (ic, hh) => new { icnew = ic, hhnew = hh })
                .Join(this.CifDbContext.Ohlogs,
                    J1 => J1.hhnew.Hawbserial,
                    oh => oh.Serialno,
                    (hh1, oh) => new { hh2 = hh1, o = oh }).OrderByDescending(x => x.o.Date)
                    .Select(x => new Housebill { Serialno = x.o.Serialno, Dest = x.o.Dest, Origin = x.o.Origin, Hawbno = x.o.Hawbno, Consignee = x.o.Consignee, Customer = x.o.Customer, Consrefnam = x.o.Consrefnam, Date = x.o.Date, Refname = x.o.Refname });
USE ohlog ORDER Serialno
SELECT 0
USE hhlog ORDER ConsSerial
SELECT 0
USE iclog order dest
SET RELATION TO serialno INTO hhlog  

SELECT hhlog
SET RELATION TO HawbSerial INTO Ohlog  
SET FILTER TO constype="I"
SELECT iclog

SET FILTER TO dest$"LON,TKU,OSL,BGO,CPH,AAL,AAR,ODE,BLL,STO,GOT"
BROWSE FIELDS iclog.date,iclog.serialno,hhlog.serialno,ohlog.serialno,ohlog.hawbno,ohlog.origin,ohlog.dest
VfpClient Information: 0 : [11/7/2013 5:14:47 PM|ExecuteReader] Executing 5:
TEXT TO __vfpClient___XmlToCursor1 NOSHOW
<VFPData>
  <xsd:schema id="VFPData" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:element name="VFPData" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="curTempIdList" minOccurs="0" maxOccurs="unbounded">
            <xsd:complexType>
              <xsd:attribute name="Id" use="required">
                <xsd:simpleType>
                  <xsd:restriction base="xsd:string">
                    <xsd:maxLength value="254" />
                  </xsd:restriction>
                </xsd:simpleType>
              </xsd:attribute>
              <xsd:anyAttribute namespace="http://www.w3.org/XML/1998/namespace" processContext="lax" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <curTempIdList Id="LON" />
  <curTempIdList Id="TKU" />
  <curTempIdList Id="OSL" />
  <curTempIdList Id="BGO" />
  <curTempIdList Id="CPH" />
  <curTempIdList Id="AAL" />
  <curTempIdList Id="AAR" />
  <curTempIdList Id="ODE" />
  <curTempIdList Id="BLL" />
  <curTempIdList Id="STO" />
  <curTempIdList Id="GOT" />
</VFPData>
ENDTEXT


SELECT  ;
G1.A1 AS C1 ;
FROM ( SELECT  ;
    COUNT(F1.A1) AS A1 ;
    FROM ( SELECT  ;
        1 AS A1 ;
        FROM    Iclog E1 ;
        INNER JOIN  (SELECT Id ;
            FROM (iif(XmlToCursor(__vfpClient___XmlToCursor1, 'curXml1') > 0, 'curXml1', '')) ) Xml1 ON E1.J1.E1.Dest = (Xml1.Id) ;
        INNER JOIN Hhlog E2 ON E1.Serialno = E2.Consserial ;
        INNER JOIN Ohlog E3 ON E2.Hawbserial = E3.Serialno ;
        WHERE 0 = 0 ;
    )  F1 ;
)  G1
VfpClient Error: 0 : VfpClient.VfpException (0x80004005): Variable 'DEST' is not found. ---> System.Data.OleDb.OleDbException (0x80004005): Variable 'DEST' is not found.
   at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
   at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
   at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
   at VfpClient.VfpCommand.<>c__DisplayClass1.<ExecuteDbDataReader>b__0(VfpCommand vfpCommand)
   at VfpClient.VfpCommand.<>c__DisplayClassf`1.<Execute>b__c()
   at VfpClient.VfpCommand.ExecuteWithTracing[T](VfpCommand vfpCommand, VfpCommandMethod method, Func`1 executeFunc)
VfpClient Error: 0 : [11/7/2013 5:15:13 PM|ExecuteReader] - Failed 5:
VfpClient.VfpException (0x80004005): Variable 'DEST' is not found. ---> System.Data.OleDb.OleDbException (0x80004005): Variable 'DEST' is not found.
   at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
   at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
   at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
   at VfpClient.VfpCommand.<>c__DisplayClass1.<ExecuteDbDataReader>b__0(VfpCommand vfpCommand)
   at VfpClient.VfpCommand.<>c__DisplayClassf`1.<Execute>b__c()
   at VfpClient.VfpCommand.ExecuteWithTracing[T](VfpCommand vfpCommand, VfpCommandMethod method, Func`1 executeFunc)
   at VfpClient.VfpCommand.ExecuteWithTracing[T](VfpCommand vfpCommand, VfpCommandMethod method, Func`1 executeFunc)
Thanks again,
Mike
Nov 7, 2013 at 11:38 PM
I think I might of solved it - I think I'm hitting some limitation on the SQL command size.
I chopped the list of 3 digit airport codes for my example, and now it's working?

strange thing is with a shorter list it doesnt build the XML curTempIdList ? Weird?

Posting both below for your advise - will dive into it more tomorrow
VfpClient Information: 0 : [11/7/2013 7:24:56 PM|ExecuteReader] Executing 10:
__vfpClient_p__linq__0 = 25
__vfpClient___C2P__1 = 'I'

SELECT TOP __vfpClient_p__linq__0  ;
P1.C1,  ;
P1.Serialno,  ;
P1.Dest,  ;
P1.Origin,  ;
P1.Hawbno,  ;
P1.Consignee,  ;
P1.Customer,  ;
P1.Consrefnam,  ;
P1.Date,  ;
P1.Refname ;
FROM ( SELECT  ;
    E3.Serialno,  ;
    E3.Hawbno,  ;
    E3.Refname,  ;
    E3.Customer,  ;
    E3.Origin,  ;
    E3.Dest,  ;
    E3.Date,  ;
    E3.Consrefnam,  ;
    E3.Consignee,  ;
    1 AS C1 ;
    FROM   Iclog E1 ;
    INNER JOIN Hhlog E2 ON E1.Serialno = E2.Consserial ;
    INNER JOIN Ohlog E3 ON E2.Hawbserial = E3.Serialno ;
    WHERE (E1.Dest IN ('AAL','AAR','ABZ','AMS','ATH','BBU','BER','BGO','BHX','BLL','BOH','BRE','BRS','BUD','CGN','CPH','CWL','DBV','DME','DUS','EDI','EMA','ENS','FRA','GLA','GOT','GRZ','HAJ','HAM','HEL','INN','KRK','LBA','LGW','LHR','LON','LPL','LUX','MAN','MME','MMX','NCL','NWI','ODE','OMS','OSL','PIK','PLH','PRG','RIX','ROT','RTM','SJJ','SOF','SOU','STN','STO','SVO','SZG','TKU','TLL','VIE','VNO','WAW','WRO','ZAG') ) AND (E2.Constype = (__vfpClient___C2P__1)) ;
)  P1 ;
ORDER BY P1.Date DESC
VfpClient Information: 0 : [11/7/2013 7:25:01 PM|ExecuteReader] Finished 10 in 00:00:04.7619081:  [VfpDataReader(C1:Numeric, Serialno:Character, Dest:Character, Origin:Character, Hawbno:Character, Consignee:Character, Customer:Character, Consrefnam:Character, Date:Date, Refname:Character)]
Consignee:Character, Customer:Character, Consrefnam:Character, Date:Date, Refname:Character)]
VfpClient Information: 0 : [11/7/2013 7:27:59 PM|ExecuteReader] Executing 5:
TEXT TO __vfpClient___XmlToCursor1 NOSHOW
<VFPData>
  <xsd:schema id="VFPData" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:element name="VFPData" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="curTempIdList" minOccurs="0" maxOccurs="unbounded">
            <xsd:complexType>
              <xsd:attribute name="Id" use="required">
                <xsd:simpleType>
                  <xsd:restriction base="xsd:string">
                    <xsd:maxLength value="254" />
                  </xsd:restriction>
                </xsd:simpleType>
              </xsd:attribute>
              <xsd:anyAttribute namespace="http://www.w3.org/XML/1998/namespace" processContext="lax" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <curTempIdList Id="AAL" />
  <curTempIdList Id="AAR" />
  <curTempIdList Id="ABZ" />
  <curTempIdList Id="AMS" />
  <curTempIdList Id="ATH" />
  <curTempIdList Id="BBU" />
  <curTempIdList Id="BER" />
  <curTempIdList Id="BGO" />
  <curTempIdList Id="BHX" />
  <curTempIdList Id="BLL" />
  <curTempIdList Id="BOH" />
  <curTempIdList Id="BRE" />
  <curTempIdList Id="BRS" />
  <curTempIdList Id="BUD" />
  <curTempIdList Id="CGN" />
  <curTempIdList Id="CPH" />
  <curTempIdList Id="CWL" />
  <curTempIdList Id="DBV" />
  <curTempIdList Id="DME" />
  <curTempIdList Id="DUS" />
  <curTempIdList Id="EDI" />
  <curTempIdList Id="EMA" />
  <curTempIdList Id="ENS" />
  <curTempIdList Id="FRA" />
  <curTempIdList Id="GLA" />
  <curTempIdList Id="GOT" />
  <curTempIdList Id="GRZ" />
  <curTempIdList Id="HAJ" />
  <curTempIdList Id="HAM" />
  <curTempIdList Id="HEL" />
  <curTempIdList Id="INN" />
  <curTempIdList Id="KRK" />
  <curTempIdList Id="LBA" />
  <curTempIdList Id="LGW" />
  <curTempIdList Id="LHR" />
  <curTempIdList Id="LON" />
  <curTempIdList Id="LPL" />
  <curTempIdList Id="LUX" />
  <curTempIdList Id="MAN" />
  <curTempIdList Id="MME" />
  <curTempIdList Id="MMX" />
  <curTempIdList Id="NCL" />
  <curTempIdList Id="NWI" />
  <curTempIdList Id="ODE" />
  <curTempIdList Id="OMS" />
  <curTempIdList Id="OSL" />
  <curTempIdList Id="PIK" />
  <curTempIdList Id="PLH" />
  <curTempIdList Id="PRG" />
  <curTempIdList Id="RIX" />
  <curTempIdList Id="ROT" />
  <curTempIdList Id="RTM" />
  <curTempIdList Id="SJJ" />
  <curTempIdList Id="SOF" />
  <curTempIdList Id="SOU" />
  <curTempIdList Id="STN" />
  <curTempIdList Id="STO" />
  <curTempIdList Id="SVO" />
  <curTempIdList Id="SZG" />
  <curTempIdList Id="TKU" />
  <curTempIdList Id="TLL" />
  <curTempIdList Id="VIE" />
  <curTempIdList Id="VNO" />
  <curTempIdList Id="WAW" />
  <curTempIdList Id="WRO" />
  <curTempIdList Id="NUR" />
  <curTempIdList Id="ZAG" />
</VFPData>
ENDTEXT

__vfpClient___C2P__1 = 'I'

SELECT  ;
G1.A1 AS C1 ;
FROM ( SELECT  ;
    COUNT(F1.A1) AS A1 ;
    FROM ( SELECT  ;
        1 AS A1 ;
        FROM    Iclog E1 ;
        INNER JOIN  (SELECT Id ;
            FROM (iif(XmlToCursor(__vfpClient___XmlToCursor1, 'curXml1') > 0, 'curXml1', '')) ) Xml1 ON E1.J1.E1.Dest = (Xml1.Id) ;
        INNER JOIN Hhlog E2 ON E1.Serialno = E2.Consserial ;
        INNER JOIN Ohlog E3 ON E2.Hawbserial = E3.Serialno ;
        WHERE E2.Constype = (__vfpClient___C2P__1) ;
    )  F1 ;
)  G1
VfpClient Error: 0 : VfpClient.VfpException (0x80004005): Variable 'DEST' is not found. ---> System.Data.OleDb.OleDbException (0x80004005): Variable 'DEST' is not found.
   at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
   at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
   at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
   at VfpClient.VfpCommand.<>c__DisplayClass1.<ExecuteDbDataReader>b__0(VfpCommand vfpCommand)
   at VfpClient.VfpCommand.<>c__DisplayClassf`1.<Execute>b__c()
   at VfpClient.VfpCommand.ExecuteWithTracing[T](VfpCommand vfpCommand, VfpCommandMethod method, Func`1 executeFunc)
VfpClient Error: 0 : [11/7/2013 7:28:22 PM|ExecuteReader] - Failed 5:
VfpClient.VfpException (0x80004005): Variable 'DEST' is not found. ---> System.Data.OleDb.OleDbException (0x80004005): Variable 'DEST' is not found.
   at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
   at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
   at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
   at VfpClient.VfpCommand.<>c__DisplayClass1.<ExecuteDbDataReader>b__0(VfpCommand vfpCommand)
   at VfpClient.VfpCommand.<>c__DisplayClassf`1.<Execute>b__c()
   at VfpClient.VfpCommand.ExecuteWithTracing[T](VfpCommand vfpCommand, VfpCommandMethod method, Func`1 executeFunc)
   at VfpClient.VfpCommand.ExecuteWithTracing[T](VfpCommand vfpCommand, VfpCommandMethod method, Func`1 executeFunc)
Nov 8, 2013 at 5:07 PM
debugging my way through it - wish me luck!

see your recent mod to XmlToCursor this morning, merged it in, still failing :(

if you have any suggestions , let me know

Thanks,
Mike
Nov 8, 2013 at 6:44 PM
ok, I'm diving deeper.

I'm giving up on why sometimes it builds the cursor file instead of the string inside the SQL statement - guessing it's a performance thing?

What I did do to prove the cursor method is ok by editing the command after CreateCommand - SqlGenerator and changed it from E1.J1.E1.Dest to Just E1.Dest and the query passed :)

gonna try to figure out why the E1.J1

Mike
Coordinator
Nov 8, 2013 at 7:47 PM
The use of XmlToCursor is to avoid the infamous "VFP Error 1812 – Statement too long" issue. The VfpEntityFrameworkProvider.Visitors.Rewriters.XmlToCursorRewritter class includes the logic to determine when XmlToCursor should be included in the select statement. Basically, I check to see which would be shorter... the XmlToCursor string or the "field in (values)" string.

The bug that you've identified is happening in VfpEntityFrameworkProvider.Visitors.Rewriters.XmlToCursorJoinRewriter which changes a "field in (select id from XmlToCursor)" into an "inner join XmlToCursor" type of statement. This rewrite can have a big impact on performance (at least in my experience).

Could you send me a example project that I could use for debugging?
Nov 8, 2013 at 7:54 PM
I'll get some DBF's and isolate the code.

Is there a better way to write the Linq givin the VFP relation?

Thanks,
Mike
Coordinator
Nov 9, 2013 at 3:44 PM
There is nothing wrong with the LINQ statement.
I'm able to reproduce this issue so no need for an example project. I'll let you know when a fix is available.
Nov 9, 2013 at 3:54 PM
I sent you a test project yesterday - did you get it?

Sent from my iPhone

Coordinator
Nov 10, 2013 at 10:14 PM
I posted a new build that includes a fix for this issue.
Nov 10, 2013 at 10:56 PM
PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0 L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPjwvaGVhZD48Ym9keSBkaXI9ImF1dG8iPjxkaXY+WW91J3Jl IHRoZSBtYW4hPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5UaGFuayB5b3UgdmVyeSBtdWNoITwv ZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+V2lsbCB0ZXN0IHRvbW9ycm93LCBJIHNlZSBlZjYgc3R1 ZmYgLCBpcyBpdCByZWFkeTwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+TWlrZSZuYnNwOzxicj48 YnI+U2VudCBmcm9tIG15IGlQaG9uZTwvZGl2PjxkaXY+PGJyPk9uIE5vdiAxMCwgMjAxMywgYXQg NjoxNCBQTSwgIlRvbUJyb3RoZXJzIiAmbHQ7PGEgaHJlZj0ibWFpbHRvOm5vdGlmaWNhdGlvbnNA Y29kZXBsZXguY29tIj5ub3RpZmljYXRpb25zQGNvZGVwbGV4LmNvbTwvYT4mZ3Q7IHdyb3RlOjxi cj48YnI+PC9kaXY+PGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSI+PGRpdj48bWV0YSBodHRwLWVxdWl2 PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+IDxzdHls ZT5Cb2R5e2ZvbnQtZmFtaWx5OiBWZXJkYW5hOyBmb250LXNpemU6IDAuNzVlbTt9I1RocmVhZE5v dGlmaWNhdGlvbkZvb3Rlcntib3JkZXItdG9wOiAxcHggc29saWQgI2NjYzsgY29sb3I6IGdyYXk7 fSNUaHJlYWROb3RpZmljYXRpb25Qb3N0Qm9keXtNYXJnaW4tQm90dG9tOiAyZW07fSBwcmUge2Zv bnQtc2l6ZToxLjI1ZW07fTwvc3R5bGU+ICAgPHN0eWxlPkJvZHl7Zm9udC1mYW1pbHk6IFZlcmRh bmE7IGZvbnQtc2l6ZTogMC43NWVtO30jVGhyZWFkTm90aWZpY2F0aW9uRm9vdGVye2NvbG9yOiBn cmF5OyBib3JkZXItdG9wOiAxcHggc29saWQgI2NjYzt9I1RocmVhZE5vdGlmaWNhdGlvblBvc3RC b2R5e01hcmdpbi1Cb3R0b206IDJlbTt9PC9zdHlsZT48cD5Gcm9tOiBUb21Ccm90aGVyczwvcD4g PGRpdiBpZD0iVGhyZWFkTm90aWZpY2F0aW9uUG9zdEJvZHkiPkkgcG9zdGVkIGEgbmV3IGJ1aWxk IHRoYXQgaW5jbHVkZXMgYSBmaXggZm9yIHRoaXMgaXNzdWUuPGJyPg0KPC9kaXY+IDxkaXYgaWQ9 IlRocmVhZE5vdGlmaWNhdGlvbkZvb3RlciI+IDxwPlJlYWQgdGhlIDxhIGhyZWY9Imh0dHA6Ly92 ZnBlZnByb3ZpZGVyLmNvZGVwbGV4LmNvbS9kaXNjdXNzaW9ucy80NjY5MTcjcG9zdDExMjE0NDUi PmZ1bGwgZGlzY3Vzc2lvbiBvbmxpbmU8L2E+LjwvcD4gPHA+VG8gYWRkIGEgcG9zdCB0byB0aGlz IGRpc2N1c3Npb24sIHJlcGx5IHRvIHRoaXMgZW1haWwgKDxhIGhyZWY9Im1haWx0bzp2ZnBlZnBy b3ZpZGVyQGRpc2N1c3Npb25zLmNvZGVwbGV4LmNvbT9zdWJqZWN0PVt2ZnBlZnByb3ZpZGVyOjQ2 NjkxN10iPnZmcGVmcHJvdmlkZXJAZGlzY3Vzc2lvbnMuY29kZXBsZXguY29tPC9hPik8L3A+IDxw PlRvIHN0YXJ0IGEgbmV3IGRpc2N1c3Npb24gZm9yIHRoaXMgcHJvamVjdCwgZW1haWwgPGEgaHJl Zj0ibWFpbHRvOnZmcGVmcHJvdmlkZXJAZGlzY3Vzc2lvbnMuY29kZXBsZXguY29tIj52ZnBlZnBy b3ZpZGVyQGRpc2N1c3Npb25zLmNvZGVwbGV4LmNvbTwvYT48L3A+IDxwPllvdSBhcmUgcmVjZWl2 aW5nIHRoaXMgZW1haWwgYmVjYXVzZSB5b3Ugc3Vic2NyaWJlZCB0byB0aGlzIGRpc2N1c3Npb24g b24gQ29kZVBsZXguIFlvdSBjYW4gPGEgaHJlZj0iaHR0cDovL3ZmcGVmcHJvdmlkZXIuY29kZXBs ZXguY29tL2Rpc2N1c3Npb25zLzQ2NjkxNy91bnN1YnNjcmliZS8iPnVuc3Vic2NyaWJlPC9hPiBv biA8YSBocmVmPSJodHRwOi8vQ29kZVBsZXguY29tIj5Db2RlUGxleC5jb208L2E+LjwvcD4gPHA+ UGxlYXNlIG5vdGU6IEltYWdlcyBhbmQgYXR0YWNobWVudHMgd2lsbCBiZSByZW1vdmVkIGZyb20g ZW1haWxzLiBBbnkgcG9zdHMgdG8gdGhpcyBkaXNjdXNzaW9uIHdpbGwgYWxzbyBiZSBhdmFpbGFi bGUgb25saW5lIGF0IDxhIGhyZWY9Imh0dHA6Ly9Db2RlUGxleC5jb20iPkNvZGVQbGV4LmNvbTwv YT48L3A+IDwvZGl2PiAgPC9kaXY+PC9ibG9ja3F1b3RlPjwvYm9keT48L2h0bWw+ --Apple-Mail-9C350DA2-74CD-456A-9B29-E253F1468745--