Re: EZProxy's effect on speed
Andrew Anderson <[email protected]> Mon, 23 Dec 2019 05:58:48 -0500
| Newsgroups | gmane.education.ezproxy |
|---|---|
| Message-ID | <CAOuKRWvJSR6V=Sgbh42phur-B99j0rEwea5yn-4oU+_Ch36dyw@mail.gmail.com> |
--000000000000b22d2b059a5ceb2f Content-Type: multipart/alternative; boundary="000000000000b22d29059a5ceb2e" --000000000000b22d29059a5ceb2e Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Hi Matthew, As you suspect, there can be many factors that come into play in web performance. The single biggest thing that anyone can do to increase proxy performance is: don't use the proxy. I don't say that to be flippant. What I mean is that I have seen vendors regularly pull in 3rd party assets into their website to be served off their own platforms. Common javascript libraries like jQuery, Angular, etc are hosted on several CDNs across the internet, and using CDN assets benefits everyone in multiple ways: 1) CDN copies of libraries, fonts, etc are more likely to already be locally cached by the patron's browser, decreasing download times; 2) This also reduces the amount of data that is run through the proxy servers, reducing latency and bandwidth usage; and 3) CDNs by their nature are setup for maximum performance, so even non-proxied visitors to the vendor's web sites will benefit as well. Another issue is that too many vendors still insist on collecting every single link used on their website to put into their proxy configurations. I always at least sanity check what vendors claim needs to be proxied, and most of the time, they don't know how their own websites work, so they throw the kitchen sink at the problem. That is how we wind up with configurations that include crazy things like "accounts.google.com", " api.google.com", "docs.google.com", and "fonts.google.com" in them. Ironically enough, what is typically loaded directly are social media trackers, Google analytics, and other assorted ad/tracking "services". There are also network factors. This can be something as simple as not having a robust enough connection for your users to connect to your proxy server. This can take the form of too little bandwidth, or it could be that your users and your proxy server are on different ISPs, and the packets have to bounce halfway around the country to go 5 miles down the road. Again, this happens 4 times per request, and can be further complicated if all 3 legs (user -> proxy -> vendor) incur a measurable network penalty. If each leg adds 100ms, that can easily be 600ms just in establishing the TCP connections. You are also going to take a hit on DNS lookups due to the way that rewrite by host works. How much time spent doing DNS lookups will depend on the website that is being proxied, and your DNS provider, but average DNS lookup speeds can range from <10ms to >60ms; it all adds up after a while, especially on sites pulling content from a lot of different domains. Back before most sites migrated to HTTPS, we had setup Squid servers as upstream proxies, and saw up to 60% of static assets (images, css, javascript, etc) that were able to be delivered from the local cache instead of having to make the full second leg to the vendor's site. I was very happy with those results, as it not only meant faster responses for our users, it also prevented us from having to purchase more bandwidth since caching short-circuited a lot of the content so that it was not traversing our proxy servers 4 times (in from patron, out to vendor, in from vendor, out to patron). Now that most sites are using HTTPS, however, this type of caching is ineffective on the back-end, because attempting to run SSL connections from a rewriting proxy to Squid results in the use of the HTTP CONNECT verb to setup a tunnel through the proxy, which prevents Squid from caching anything at all from the vendor's platform. You could still configure a caching proxy in front of the rewriting proxy to do SSL termination and catch requests before they are rewritten. It's a little bit more work, but I suspect that it would be just as effective as our back-end Squid configuration was. Varnish is another piece of software I would evaluate for that role, or even just plain apache/nginx configured to run as a caching proxy could do it. Our Muse Proxy servers have HTTP object caching built-in, so fortunately I don't have to worry about that. There are also software limitations. I remember that before EZproxy supported gzip natively, that just having Squid behind it handle the back-end request with gzip headers inserted into the request made a tremendous difference in performance for the remaining 40% of the connections that did have to go all the way to the vendor platform. I was debating on putting software in front of EZproxy to enable gzip on the front-end as well, but we did not go through with that idea. One HTTP capability that I do not recall hearing EZproxy support is HTTP Keepalive connections. If you have access to a test web server, the difference in performance with and without Keepalives enabled can be dramatic, as the client does not have to do the TCP 3-way handshake for every new HTTP request; instead, the browser can re-use an existing connection, which saves a lot of time when there are many assets to be loaded. I do not see any configuration settings for EZproxy regarding keepalive, so either it is not supported, or it is not tunable. I used to do a lot of systems-level performance tuning, so there may be some tweaks that you could make to your proxy server that would help it a little at the OS level. I don't believe that I have seen any specific proxy tuning recommendations from OCLC, but guides that talk about tuning web servers and/or general proxy servers should have tips and tricks that would also apply here. Network buffers, socket backlogs, interrupt coalescing, and network offloading/TOE are all things that become important when servers get busy. I wouldn't mind hearing more about your testing methods, because if you are on the same network as the proxy, that would rule out a lot of possible variables, and really narrow it down to the proxy's performance, either EZproxy itself or the server OS/hardware it is running on. As far as actionable things that you can look at in the proxy configuration:= 1) Unless it starts with "scholar", remove "google.com" everywhere you find it with extreme prejudice. I honestly don't know why OCLC still permits "DJ google.com" to be published. 2) If it is or looks like a CDN you should be able to remove it from your stanza. Very few CDNs are authenticated, as that negates a major benefit of using them. 3) If it is or looks like a CDN, you may also need to add "NeverProxy" so that the "J" directives don't sneak it back into the rewriting tables. 4) If it is or looks like a CDN, you may also need to add "AnonymousURL" for AJAX pre-flight checks CDN hosts may literally start with "cdn", or it may be from a commercial provider like Cloudfront, Akamai, Imperva, Fastly, etc. 4) Take a hard look at any hostname that contains "images", "assets", or "static" as well; try treating them like a CDN. 5) Look for inmates running the asylum when it comes to your stanzas. e.g. https://help.oclc.org/Library_Management/EZproxy/Database_stanzas/TrueFlix DJ ereader-static.scholastic.com NeverProxy ereader-static.scholastic.com Seriously? Rewrite it, but NeverProxy it? Andrew On Thu, Dec 19, 2019 at 5:47 PM Matthew Goddard <[email protected]> wrote: > I have a question for the more technically-minded among us. (Thinking of > Andrew Anderson, among others.) > > > > I=E2=80=99ve done some very basic preliminary research on how EZProxy affe= cts the > speed of a user=E2=80=99s experience across a number of different platform= s. The > results are interesting. For ProQuest and EBSCOhost, proxying increased th= e > time to complete a basic task by 31% and 37%, respectively, relative to > doing the same tasks without the proxy. For ScienceDirect, there was no > difference at all, even down to a tenth of a second. For SAGE, proxying wa= s > 7% slower. These numbers represent the mean duration of ten individual > tests, and in all cases, EZproxy was the only variable. > > > > With such large variability across platforms, I=E2=80=99m wondering what s= ort of > factors have a bearing on the speed of proxying. What might Elsevier be > doing to avoid any lag, or what are the aggregators doing to add it? > > > > I=E2=80=99m concerned about those numbers for ProQuest and EBSCO, which se= em to > represent a disservice to our off-campus users. > > > > Matthew > > > > > > *Matthew W. Goddard * > > Assistant Library Director for Resources > > (951) 343-4365 > > [email protected] > > calbaptist.edu <http://www.calbaptist.edu/library>*/library* > > California Baptist University, 8432 Magnolia Ave, Riverside, CA 92504 > > > > > > ------------------------------ > > To unsubscribe from the EZPROXY-L list, click the following link: > http://listserv.oclclists.org/scripts/wa.exe?SUBED1=3DEZPROXY-L&A=3D1 > --=20 Andrew Anderson President & CEO [email protected] t: +1 (727) 536-0214 x100 f: +1 (727) 530-3126 w: www.lirn.net Library & Information Resources Network 25400 US Hwy 19 North, Ste. #220 Clearwater, FL 33763 LinkedIn <http://www.linkedin.com/company/library-and-information-resources-network-i= nc-> | Facebook <http://www.facebook.com/LIRNnotes> | Twitter <http://www.twitter.com/LIRNNotes> | YouTube <http://www.youtube.com/user/LIRNnotes> ******************************************************************** If you wish to stop receiving messages from EZPROXY-L or otherwise amend you= r preferences, you can do so <a href=3D"https://www.oclc.org/forms/internet-subscription.en= .html">here</a>. Or email [email protected] including the relevant text below in the bod= y of the email: =E2=80=A2 To unsubscribe: "unsubscribe EZPROXY-L" =E2=80=A2 To receive EZPROXY-L in digest form: "set EZPROXY-L digest" =E2=80=A2 To set your options to no mail: "set EZPROXY-L nomail" =E2=80=A2 To receive these messages in the future "set EZPROXY-L mail" To contact the list owners directly please send your message to EZPROXY-L-re= [email protected]. If you unsubscribe from EZPROXY-L, you will no longer be able to participate= in any of its features, including the public forum. To unsubscribe from all OCLC marketing email communications (including all OCLC listervs, OCLC Connect emails, OCLC event notifications,= product/service/cooperative updates and newsletters), please email us at [email protected]. --000000000000b22d29059a5ceb2e Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr"><div di= r=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"lt= r"><div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"= font-family:verdana,sans-serif">Hi Matthew,</div><div class=3D"gmail_defaul= t" style=3D"font-family:verdana,sans-serif"><br></div><div class=3D"gmail_d= efault" style=3D"font-family:verdana,sans-serif">As you suspect, there can = be many factors that come into play in web performance.</div><div class=3D"= gmail_default" style=3D"font-family:verdana,sans-serif"><br></div><div clas= s=3D"gmail_default" style=3D"font-family:verdana,sans-serif">The single big= gest thing that anyone can do to increase proxy performance is: don't u= se the proxy.</div><div class=3D"gmail_default" style=3D"font-family:verdan= a,sans-serif"><br></div><div class=3D"gmail_default" style=3D"font-family:v= erdana,sans-serif">I don't say that to be flippant.=C2=A0 What I mean i= s that I have seen vendors regularly pull in 3rd party assets into their we= bsite to be served off their own platforms.=C2=A0 Common javascript librari= es like jQuery, Angular, etc are hosted on several CDNs across the internet= , and using CDN assets benefits everyone in multiple ways: 1) CDN copies of= libraries, fonts, etc are more likely to already be locally cached by the = patron's browser, decreasing download times; 2) This also reduces the a= mount of data that is run through the proxy servers, reducing latency and b= andwidth usage; and 3) CDNs by their nature are setup for maximum performan= ce, so even non-proxied visitors to the vendor's web sites will benefit= as well.</div><div class=3D"gmail_default" style=3D"font-family:verdana,sa= ns-serif"><br></div><div class=3D"gmail_default" style=3D"font-family:verda= na,sans-serif">Another issue is that too many vendors still insist on colle= cting every single link used on their website to put into their proxy confi= gurations.=C2=A0 I always at least sanity check what vendors claim needs to= be proxied, and most of the time, they don't know how their own websit= es work, so they throw the kitchen sink at the problem.=C2=A0 That is how w= e wind up with configurations that include crazy things like "<a href= =3D"http://accounts.google.com">accounts.google.com</a>", "<a hre= f=3D"http://api.google.com">api.google.com</a>", "<a href=3D"http= ://docs.google.com">docs.google.com</a>", and "<a href=3D"http://= fonts.google.com">fonts.google.com</a>" in them.=C2=A0 Ironically enou= gh, what is typically loaded directly are social media trackers, Google ana= lytics, and other assorted ad/tracking "services".</div><div clas= s=3D"gmail_default" style=3D"font-family:verdana,sans-serif"><br></div><div= class=3D"gmail_default" style=3D"font-family:verdana,sans-serif">There are= also network factors.=C2=A0 This can be something as simple as not having = a robust enough connection for your users to connect to your proxy server.= =C2=A0 This can take the form of too little bandwidth, or it could be that = your users and your proxy server are on different ISPs, and the packets hav= e to bounce halfway around the country to go 5 miles down the road.=C2=A0 A= gain, this happens 4 times per request, and can be further complicated if a= ll 3 legs (user -> proxy -> vendor) incur a measurable network penalt= y.=C2=A0 If each leg adds 100ms, that can easily be 600ms just in establish= ing the TCP connections.</div><div class=3D"gmail_default" style=3D"font-fa= mily:verdana,sans-serif"><br></div><div class=3D"gmail_default" style=3D"fo= nt-family:verdana,sans-serif">You are also going to take a hit on DNS looku= ps due to the way that rewrite by host works.=C2=A0 How much time spent doi= ng DNS lookups will depend on the website that is being proxied, and your D= NS provider, but average DNS lookup speeds can range from <10ms to >6= 0ms; it all adds up after a while, especially on sites pulling content from= a lot of different domains.</div><div class=3D"gmail_default" style=3D"fon= t-family:verdana,sans-serif"><br></div><div class=3D"gmail_default"><div cl= ass=3D"gmail_default"><font face=3D"verdana, sans-serif">Back before most s= ites migrated to HTTPS, we had setup Squid servers as upstream proxies, and= saw up to 60% of static assets (images, css, javascript, etc) that were ab= le to be delivered from the local cache instead of having to make the full = second leg to the vendor's site.=C2=A0 I was very happy with those resu= lts, as it not only meant faster responses for our users, it also prevented= us from having to purchase more bandwidth since caching short-circuited a = lot of the content so that it was not traversing our proxy servers 4 times = (in from patron, out to vendor, in from vendor, out to patron).</font></div= ><div class=3D"gmail_default"><font face=3D"verdana, sans-serif"><br></font= ></div><div class=3D"gmail_default"><font face=3D"verdana, sans-serif">Now = that most sites are using HTTPS, however, this type of caching is ineffecti= ve on the back-end, because attempting to run SSL connections from a rewrit= ing proxy to Squid results in the use of the HTTP CONNECT verb to setup a t= unnel through the proxy, which prevents Squid from caching anything at all = from the vendor's platform.=C2=A0 You could still configure a caching p= roxy in front of the rewriting proxy to do SSL termination and catch reques= ts before they are rewritten.=C2=A0 It's a little bit more work, but I = suspect that it would be just as effective as our back-end Squid configurat= ion was.=C2=A0 Varnish is another piece of software I would evaluate for th= at role, or even just plain apache/nginx configured to run as a caching pro= xy could do it.=C2=A0 Our Muse Proxy servers have HTTP object caching built= -in, so fortunately I don't have to worry about that.</font></div><div = class=3D"gmail_default"><br></div></div><div class=3D"gmail_default" style= =3D"font-family:verdana,sans-serif">There are also software limitations.=C2= =A0 I remember that before EZproxy supported gzip natively, that just havin= g Squid behind it handle the back-end request with gzip headers inserted in= to the request made a tremendous difference in performance for the remainin= g=C2=A040% of the connections that did have to go all the way to the vendor= platform.=C2=A0 I was debating on putting software in front of EZproxy to = enable gzip on the front-end as well, but we did not go through with that i= dea.=C2=A0 One HTTP capability that I do not recall hearing EZproxy support= is HTTP Keepalive connections.=C2=A0 If you have access to a test web serv= er, the difference in performance with and without Keepalives enabled can b= e dramatic, as the client does not have to do the TCP 3-way handshake for e= very new HTTP request; instead, the browser can re-use an existing connecti= on, which saves a lot of time when there are many assets to be loaded.=C2= =A0 I do not see any configuration settings for EZproxy regarding keepalive= , so either it is not supported, or it is not tunable.</div><div class=3D"g= mail_default" style=3D"font-family:verdana,sans-serif"><br></div><div class= =3D"gmail_default"><font face=3D"verdana, sans-serif">I used to do a lot of= systems-level performance tuning, so there may be some tweaks that you cou= ld make to your proxy server that would help it a little at the OS level.= =C2=A0 I don't believe that I have seen any specific proxy tuning recom= mendations from OCLC, but guides that talk about tuning web servers and/or = general proxy servers should have tips and tricks that would also apply her= e.=C2=A0 Network buffers, socket backlogs, interrupt coalescing, and networ= k offloading/TOE are all things that become important when servers get busy= .</font><br></div><div class=3D"gmail_default"><font face=3D"verdana, sans-= serif"><br></font></div><div class=3D"gmail_default"><font face=3D"verdana,= sans-serif">I wouldn't mind hearing more about your testing methods, b= ecause if you are on the same network as the proxy, that would rule out a l= ot of possible variables, and really narrow it down to the proxy's perf= ormance, either EZproxy itself or the server OS/hardware it is running on.<= /font><br></div><div class=3D"gmail_default"><font face=3D"verdana, sans-se= rif"><br></font></div><div class=3D"gmail_default"><font face=3D"verdana, s= ans-serif">As far as actionable things that you can look at in the proxy co= nfiguration:</font></div><div class=3D"gmail_default"><font face=3D"verdana= , sans-serif"><br></font></div><div class=3D"gmail_default"><font face=3D"v= erdana, sans-serif">1) Unless it starts with "scholar", remove &q= uot;<a href=3D"http://google.com">google.com</a>" everywhere you find = it with extreme prejudice.=C2=A0 I honestly don't know why OCLC =C2=A0s= till permits "DJ <a href=3D"http://google.com">google.com</a>" to= be published.</font></div><div class=3D"gmail_default"><font face=3D"verda= na, sans-serif">2) If it is or looks like a CDN you should be able to remov= e it from your stanza.=C2=A0 Very few CDNs are authenticated, as that negat= es a major benefit of using them.</font></div><div class=3D"gmail_default">= <font face=3D"verdana, sans-serif">3) If it is=C2=A0or looks like=C2=A0</fo= nt><span style=3D"font-family:verdana,sans-serif">a CDN, you may also need = to add "NeverProxy" so that the "J" directives don'= t sneak it back into the rewriting tables.</span></div><div class=3D"gmail_= default"><font face=3D"verdana, sans-serif">4) If it is=C2=A0or looks like<= /font><span style=3D"font-family:verdana,sans-serif">=C2=A0a CDN, you may a= lso need to add "AnonymousURL" for AJAX pre-flight checks</span><= /div><div class=3D"gmail_default"><span style=3D"font-family:verdana,sans-s= erif"><br></span></div></div></div></div></div></div></div></div></div></di= v></div><blockquote style=3D"margin:0 0 0 40px;border:none;padding:0px"><di= v dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr"><div dir= =3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr= "><div dir=3D"ltr"><div class=3D"gmail_default"><font face=3D"verdana, sans= -serif">CDN hosts may literally start with "cdn", or it may be fr= om a commercial provider like Cloudfront, Akamai, Imperva, Fastly, etc.</fo= nt></div></div></div></div></div></div></div></div></div></div></div></bloc= kquote><div dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr">= <div dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr"><div di= r=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default"><font face=3D"verda= na, sans-serif"><br></font></div><div class=3D"gmail_default"><font face=3D= "verdana, sans-serif">4) Take a hard look at any hostname that contains &qu= ot;images", "assets", or "static" as well; try tre= ating them like a CDN.</font></div><div class=3D"gmail_default"><font face= =3D"verdana, sans-serif">5) Look for inmates running the asylum=C2=A0when i= t comes to your stanzas. e.g.=C2=A0<a href=3D"https://help.oclc.org/Library= _Management/EZproxy/Database_stanzas/TrueFlix">https://help.oclc.org/Librar= y_Management/EZproxy/Database_stanzas/TrueFlix</a></font></div><div class= =3D"gmail_default"><font face=3D"verdana, sans-serif"><br></font></div></di= v></div></div></div></div></div><blockquote style=3D"margin:0px 0px 0px 40p= x;border:none;padding:0px"><div><div><div><div><div><div><div class=3D"gmai= l_default"><font face=3D"verdana, sans-serif"><div class=3D"gmail_default">= DJ <a href=3D"http://ereader-static.scholastic.com">ereader-static.scholast= ic.com</a></div></font></div></div></div></div></div></div></div><div><div>= <div><div><div><div><div class=3D"gmail_default"><font face=3D"verdana, san= s-serif"><div class=3D"gmail_default">NeverProxy <a href=3D"http://ereader-= static.scholastic.com">ereader-static.scholastic.com</a></div></font></div>= </div></div></div></div></div></div></blockquote><div dir=3D"ltr"><div dir= =3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr= "><div class=3D"gmail_default"><font face=3D"verdana, sans-serif"><br></fon= t></div><div class=3D"gmail_default"><font face=3D"verdana, sans-serif">Ser= iously?=C2=A0 Rewrite it, but NeverProxy it?</font></div><div class=3D"gmai= l_default"><font face=3D"verdana, sans-serif"><br></font></div><div class= =3D"gmail_default"><font face=3D"verdana, sans-serif">Andrew</font></div></= div></div></div></div></div></div></div></div></div></div></div><br><div cl= ass=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">On Thu, Dec 19, 2= 019 at 5:47 PM Matthew Goddard <<a href=3D"mailto:[email protected]= u">[email protected]</a>> wrote:<br></div><blockquote class=3D"gma= il_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left-width:1px;border-le= ft-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"> <div lang=3D"EN-US"> <div class=3D"gmail-m_-265233949967785980WordSection1"> <p class=3D"MsoNormal">I have a question for the more technically-minded am= ong us. (Thinking of Andrew Anderson, among others.)<u></u><u></u></p> <p class=3D"MsoNormal"><u></u>=C2=A0<u></u></p> <p class=3D"MsoNormal">I=E2=80=99ve done some very basic preliminary resear= ch on how EZProxy affects the speed of a user=E2=80=99s experience across a= number of different platforms. The results are interesting. For ProQuest a= nd EBSCOhost, proxying increased the time to complete a basic task by 31% and 37%, respectively, relative to doing the same task= s without the proxy. For ScienceDirect, there was no difference at all, eve= n down to a tenth of a second. For SAGE, proxying was 7% slower. These numb= ers represent the mean duration of ten individual tests, and in all cases, EZproxy was the only variable. = <u></u><u></u></p> <p class=3D"MsoNormal"><u></u>=C2=A0<u></u></p> <p class=3D"MsoNormal">With such large variability across platforms, I=E2= =80=99m wondering what sort of factors have a bearing on the speed of proxy= ing. What might Elsevier be doing to avoid any lag, or what are the aggrega= tors doing to add it?<u></u><u></u></p> <p class=3D"MsoNormal"><u></u>=C2=A0<u></u></p> <p class=3D"MsoNormal">I=E2=80=99m concerned about those numbers for ProQue= st and EBSCO, which seem to represent a disservice to our off-campus users. <u></u><u></u></p> <p class=3D"MsoNormal"><u></u>=C2=A0<u></u></p> <p class=3D"MsoNormal">Matthew<u></u><u></u></p> <p class=3D"MsoNormal"><u></u>=C2=A0<u></u></p> <p class=3D"MsoNormal"><u></u>=C2=A0<u></u></p> <table border=3D"0" cellspacing=3D"0" cellpadding=3D"0" width=3D"0" style= =3D"width:575.35pt;margin-left:2.9pt;border-collapse:collapse"> <tbody> <tr style=3D"height:11.85pt"> <td width=3D"767" valign=3D"top" style=3D"width:575.35pt;border-right-width= :1pt;border-bottom-width:1pt;border-left-width:1pt;border-style:none solid = solid;border-right-color:white;border-bottom-color:white;border-left-color:= white;padding:2.9pt;height:11.85pt"> <table border=3D"0" cellspacing=3D"0" cellpadding=3D"0" width=3D"0" style= =3D"width:350.55pt;border-collapse:collapse"> <tbody> <tr style=3D"height:28.95pt"> <td width=3D"168" style=3D"width:125.75pt;border-width:1pt;border-style:sol= id;border-color:rgb(204,153,0) rgb(204,153,0) rgb(204,153,0) white;padding:= 2.9pt;height:28.95pt"> <p class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;line-hei= ght:105%"><u></u><span style=3D"margin-left:23px;margin-top:5px;width:115px= ;height:41px"><img width=3D"115" height=3D"41" src=3D"cid:16f31f311f26917eb= 1"></span><u></u><span style=3D"font-size:9pt;line-height:105%;color:rgb(31= ,73,125)"><u></u><u></u></span></p> </td> <td width=3D"300" valign=3D"top" style=3D"width:224.8pt;border-top-width:1p= t;border-style:solid solid solid none;border-top-color:rgb(204,153,0);borde= r-bottom-width:1pt;border-bottom-color:rgb(204,153,0);border-right-width:1p= t;border-right-color:white;padding:2.9pt;height:28.95pt"> <p class=3D"MsoNormal" style=3D"line-height:115%"><b><span style=3D"font-si= ze:10pt;line-height:115%;font-family:Arial,sans-serif;color:rgb(0,51,102)">= Matthew W. Goddard <u></u><u></u></span></b></p> <p class=3D"MsoNormal" style=3D"line-height:115%"><span style=3D"font-size:= 8pt;line-height:115%;font-family:Arial,sans-serif;color:rgb(163,116,0)">Ass= istant Library Director for Resources<u></u><u></u></span></p> <p class=3D"MsoNormal" style=3D"line-height:115%"><span style=3D"font-size:= 8pt;line-height:115%;font-family:Arial,sans-serif;color:rgb(0,51,102)">(951= ) 343-4365</span><span style=3D"font-size:9pt;line-height:115%;font-family:= Arial,sans-serif;color:rgb(0,51,102)"><u></u><u></u></span></p> <p class=3D"MsoNormal" style=3D"line-height:115%"><span style=3D"font-size:= 8pt;line-height:115%;font-family:Arial,sans-serif;color:rgb(31,73,125)"><a = href=3D"mailto:[email protected]" target=3D"_blank"><span style=3D"co= lor:rgb(5,99,193)">[email protected]</span></a></span><span style=3D"= font-size:8pt;line-height:115%;font-family:Arial,sans-serif;color:rgb(0,51,= 102)"><u></u><u></u></span></p> <p class=3D"MsoNormal" style=3D"line-height:115%"><span style=3D"font-size:= 8pt;line-height:115%;color:rgb(31,73,125)"><a href=3D"http://www.calbaptist= .edu/library" target=3D"_blank"><span style=3D"font-family:Arial,sans-serif= ;color:rgb(5,99,193)">calbaptist.edu</span></a></span><u><span style=3D"fon= t-size:8pt;line-height:115%;font-family:Arial,sans-serif;color:rgb(5,99,193= )">/library</span></u><b><span style=3D"font-size:9pt;line-height:115%;font= -family:Arial,sans-serif;font-variant-ligatures:normal;font-variant-numeric= :normal;font-variant-caps:small-caps;font-variant-alternates:normal;font-va= riant-east-asian:normal;color:rgb(38,57,91)"><u></u><u></u></span></b></p> </td> </tr> <tr style=3D"height:11.85pt"> <td width=3D"467" colspan=3D"2" valign=3D"top" style=3D"width:350.55pt;bord= er-right-width:1pt;border-bottom-width:1pt;border-left-width:1pt;border-sty= le:none solid solid;border-right-color:white;border-bottom-color:white;bord= er-left-color:white;padding:2.9pt;height:11.85pt"> <p class=3D"MsoNormal" style=3D"line-height:90%"><span style=3D"font-size:9= pt;line-height:90%;font-family:Arial,sans-serif;color:rgb(0,51,102)">Califo= rnia Baptist University, 8432 Magnolia Ave, Riverside, CA=C2=A0 92504<u></u= ><u></u></span></p> </td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <p class=3D"MsoNormal"><u></u>=C2=A0<u></u></p> <p class=3D"MsoNormal"><u></u>=C2=A0<u></u></p> </div> </div> <br> <hr> <p align=3D"center">To unsubscribe from the EZPROXY-L list, click the follo= wing link:<br> <a href=3D"http://listserv.oclclists.org/scripts/wa.exe?SUBED1=3DEZPROXY-L&= amp;A=3D1" target=3D"_blank">http://listserv.oclclists.org/scripts/wa.exe?S= UBED1=3DEZPROXY-L&A=3D1</a> </p> </blockquote></div><br clear=3D"all"><div><br></div>-- <br><div dir=3D"ltr"= class=3D"gmail_signature"><div dir=3D"ltr"><div><div dir=3D"ltr"><div><div= dir=3D"ltr"><div><div dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr"><table= width=3D"450" cellpadding=3D"0" cellspacing=3D"0" style=3D"font-family:&qu= ot;Hind Siliguri",Verdana,Helvetica,sans-serif;width:450px;color:rgb(3= 9,16,63)"><tbody style=3D"vertical-align:top"><tr><td valign=3D"top" style= =3D"padding:0px 0px 5px;vertical-align:top"><span style=3D"font-size:9pt"><= br></span><span style=3D"font-size:13pt;font-weight:bold;line-height:0.8;co= lor:rgb(123,43,137)">Andrew=C2=A0Anderson<br></span><span style=3D"font-siz= e:9pt;line-height:2">President & CEO<br></span><span style=3D"font-size= :9pt;line-height:1"><a href=3D"mailto:[email protected]" target=3D"_blank">an= [email protected]</a></span></td><td style=3D"padding:25px"></td></tr><tr><td v= align=3D"top" width=3D"40%" style=3D"border-top-width:1px;border-top-style:= solid;border-top-color:rgb(123,43,137);width:225px;padding:5px 0px 0px;line= -height:18px;vertical-align:top"><span style=3D"font-size:9pt">t: +1 (727) = 536-0214 x100<br></span><span style=3D"font-size:9pt">f: +1 (727) 530-3126<= br></span><span style=3D"font-size:9pt">w:<span>=C2=A0</span><a href=3D"htt= ps://www.lirn.net/" rel=3D"noopener" style=3D"font-weight:bold;font-size:9p= t;color:rgb(123,43,137)" target=3D"_blank">www.lirn.net</a><br></span></td>= <td valign=3D"top" width=3D"60%" style=3D"border-top-width:1px;border-top-s= tyle:solid;border-top-color:rgb(123,43,137);width:225px;padding:5px 0px 0px= ;line-height:18px;vertical-align:top"><span style=3D"font-size:9pt">Library= & Information Resources Network<br></span><span style=3D"font-size:9pt= ">25400 US Hwy 19 North, Ste. #220<br></span><span style=3D"font-size:9pt">= Clearwater, FL 33763</span></td></tr><tr><td colspan=3D"2" width=3D"40%" va= lign=3D"top" style=3D"width:450px;padding:10px 0px 0px;vertical-align:top;t= ext-align:center"><a href=3D"http://www.linkedin.com/company/library-and-in= formation-resources-network-inc-" rel=3D"noopener" style=3D"font-size:9pt;c= olor:rgb(123,43,137)" target=3D"_blank">LinkedIn</a><span>=C2=A0</span>|<sp= an>=C2=A0</span><a href=3D"http://www.facebook.com/LIRNnotes" rel=3D"noopen= er" style=3D"font-size:9pt;color:rgb(123,43,137)" target=3D"_blank">Faceboo= k</a><span>=C2=A0</span>|<span>=C2=A0</span><a href=3D"http://www.twitter.c= om/LIRNNotes" rel=3D"noopener" style=3D"font-size:9pt;color:rgb(123,43,137)= " target=3D"_blank">Twitter</a><span>=C2=A0</span>|<span>=C2=A0</span><a hr= ef=3D"http://www.youtube.com/user/LIRNnotes" rel=3D"noopener" style=3D"font= -size:9pt;color:rgb(123,43,137)" target=3D"_blank">YouTube</a></td></tr></t= body></table></div></div></div></div></div></div></div></div></div></div> <br> <hr> <p align=3D"center">To unsubscribe from the EZPROXY-L list, click the following link:<br> <a href=3D"http://listserv.oclclists.org/scripts/wa.exe?SUBED1=3DEZPROXY-L&A=3D1" target=3D"_blank">http://listserv.oclclists.org/scripts/wa.exe?SUBED1=3DEZPROXY-L&A=3D1</a> </p> --000000000000b22d29059a5ceb2e-- --000000000000b22d2b059a5ceb2f Content-Type: image/jpeg; name="image003.jpg" Content-Disposition: inline; filename="image003.jpg" Content-Transfer-Encoding: base64 Content-ID: <16f31f311f26917eb1> X-Attachment-Id: 16f31f311f26917eb1 /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAoHBwkHBgoJCAkLCwoMDxkQDw4ODx4WFxIZJCAmJSMg IyIoLTkwKCo2KyIjMkQyNjs9QEBAJjBGS0U+Sjk/QD3/2wBDAQsLCw8NDx0QEB09KSMpPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT3/wAARCAApAHMDASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD1fWNW g0bT3urjJxwiDq7dgK8z1LxHqGqzE3FxJHCT/qojtUD+v41sfEK7aTVbe1z8kUW/Hux/wFZOg+H5 tanUlvJtQ21pW7n+6vqa8TGVqlWr7KGyO2jCMYc8h+piGxt9Om025ljd4MnClHb5m+YkHGe34Vu+ F/GUslxHY6o4fedsc54Oewb/ABrW1TwZY31lDFAWglt4/LifOeOuGHfkn864HVdGvdGn8u7jKgn5 JF5VvoaVSNbCz51t5bBFwqx5XuewVial4v0rS7kwXM4DDgneqjPcAsRkjvjpTZdQmm8FpeJIyTSQ Jlx1BJAJHv1rwq0hHijxBPHqE06vhvK8oLhQDwoB6Dn+Z5r6CjBVI83Q8+pJxdj2z/hYWhf8/Sf9 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 paKgo//Z --000000000000b22d2b059a5ceb2f--