Re: clean up resources after interrupted page load
Sviatoslav Sydorenko <[email protected]> Sat, 29 Jun 2019 21:33:38 +0200
| Newsgroups | gmane.comp.python.cherrypy |
|---|---|
| Message-ID | <CAFYONRA=v_Nib2=Hcm00N2pWoo0+AqLF5TZDtMpzHu9Q-ThuOg@mail.gmail.com> |
--00000000000081f901058c7b7910 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable It seems to be the case that it blocks on socket interactions... This will supposedly improve the situation https://github.com/cherrypy/cheroot/pull/176 --Sviatoslav. Sent from my phone, please pardon any typos. =D1=81=D0=B1, 29 =D1=87=D0=B5=D1=80=D0=B2. 2019, 20:34 =D0=BA=D0=BE=D1=80= =D0=B8=D1=81=D1=82=D1=83=D0=B2=D0=B0=D1=87 Robert Brewer <[email protected]= m> =D0=BF=D0=B8=D1=88=D0=B5: > In Python, you have to explicitly cancel threads inside the thread. So on= e > thing you _can_ do is add a line inside your while loop: "if > response.timed_out: raise cherrypy.TimeoutError()". It won't do anything = if > the thread blocks forever on readline(), but it will allow the thread to > exit as long as readline is yielding. > > On Sat, Jun 29, 2019, 11:25 Sviatoslav Sydorenko < > [email protected]> wrote: > >> Timeout feature has been deprecated because it's not really possible to >> cancel threads. The solution would be to rewrite the engine to use async >> paradigm. >> >> Try submitting an issue against Cheroot with a minimal reproducer. >> There's some WIP there which aims to improve the connection management. >> >> >> --Sviatoslav. >> >> Sent from my phone, please pardon any typos. >> >> =D1=81=D0=B1, 29 =D1=87=D0=B5=D1=80=D0=B2. 2019, 10:05 =D0=BA=D0=BE=D1= =80=D0=B8=D1=81=D1=82=D1=83=D0=B2=D0=B0=D1=87 Anatoliy Kushner <lamazavra@g= mail.com> >> =D0=BF=D0=B8=D1=88=D0=B5: >> >>> With sample code below if subscriber interrupt page load somewhere >>> between client.connect and client.close() then cherrypy will hang and w= ill >>> not clean up used resources like: 1) open tcp socket (from netstat -anp= t on >>> this server i see tcp connections to server that is established for som= e >>> days, while time to executing any commands should finish in 10 sec) 2) = from >>> ps -p 'cherrypy pid' H , i see , that number of threads increased, and >>> number of threads equals number of unclosed tcp connections >>> >>> while debugging this i found that thread stop at "yield bytes(a, >>> 'utf-8')" in while loop. So , is there any way to say cherrypy to kill >>> threads after some timeout ? >>> >>> P.S. response.timeout =3D 30 already set in config and this does not he= lp >>> >>> >>> >>> @cherrypy.expose >>> >>> def test(self, *args, **kwargs): >>> ... >>> ... >>> def getData(host, cmd): >>> html =3D open("menuRp1.html").read() >>> yield bytes(html, 'utf-8') >>> client =3D paramiko.SSHClient() >>> client.connect(hostname=3Dhost, username=3Duser, password=3Dpwd, por= t=3D22) >>> stdin, stdout, stderr =3D client.exec_command(cmd) >>> a=3Dstdout.readline() >>> while a: >>> yield bytes(a, 'utf-8') >>> a=3Dstdout.readline() >>> client.close() >>> html =3D open("menuRp2.html").read() >>> yield bytes(html, 'utf-8') >>> return getData(h, c) >>> test._cp_config =3D {'response.stream': True} >>> >>> >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "cherrypy-users" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to cherrypy-users+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/[email protected] >>> To post to this group, send email to cherrypy-users-/JYPxA39Uh5TLH3MbocFF+G/[email protected] >>> Visit this group at https://groups.google.com/group/cherrypy-users. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/cherrypy-users/92d0f922-5e40-4a5c-b3d= 6-a99d10ff0830%40googlegroups.com >>> <https://groups.google.com/d/msgid/cherrypy-users/92d0f922-5e40-4a5c-b3= d6-a99d10ff0830%40googlegroups.com?utm_medium=3Demail&utm_source=3Dfooter> >>> . >>> For more options, visit https://groups.google.com/d/optout. >>> >> -- >> You received this message because you are subscribed to the Google Group= s >> "cherrypy-users" group. >> To unsubscribe from this group and stop receiving emails from it, send a= n >> email to cherrypy-users+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/[email protected] >> To post to this group, send email to cherrypy-users-/JYPxA39Uh5TLH3MbocFF+G/[email protected] >> Visit this group at https://groups.google.com/group/cherrypy-users. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/cherrypy-users/CAFYONRBoAZFtBsPj1xs3Gz= LDac5iCvww5zd_wVbEPs4gVs_pGQ%40mail.gmail.com >> <https://groups.google.com/d/msgid/cherrypy-users/CAFYONRBoAZFtBsPj1xs3G= zLDac5iCvww5zd_wVbEPs4gVs_pGQ%40mail.gmail.com?utm_medium=3Demail&utm_sourc= e=3Dfooter> >> . >> For more options, visit https://groups.google.com/d/optout. >> > -- > You received this message because you are subscribed to the Google Groups > "cherrypy-users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to cherrypy-users+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/[email protected] > To post to this group, send email to cherrypy-users-/JYPxA39Uh5TLH3MbocFF+G/[email protected] > Visit this group at https://groups.google.com/group/cherrypy-users. > To view this discussion on the web visit > https://groups.google.com/d/msgid/cherrypy-users/CAJ4gti-fbZrzM-mfy7_OKDu= TqBVLCJWWZ11LKOr9eB6d3tomDg%40mail.gmail.com > <https://groups.google.com/d/msgid/cherrypy-users/CAJ4gti-fbZrzM-mfy7_OKD= uTqBVLCJWWZ11LKOr9eB6d3tomDg%40mail.gmail.com?utm_medium=3Demail&utm_source= =3Dfooter> > . > For more options, visit https://groups.google.com/d/optout. > --=20 You received this message because you are subscribed to the Google Groups "= cherrypy-users" group. To unsubscribe from this group and stop receiving emails from it, send an e= mail to cherrypy-users+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/[email protected] To post to this group, send email to cherrypy-users-/JYPxA39Uh5TLH3MbocFF+G/[email protected] Visit this group at https://groups.google.com/group/cherrypy-users. To view this discussion on the web visit https://groups.google.com/d/msgid/= cherrypy-users/CAFYONRA%3Dv_Nib2%3DHcm00N2pWoo0%2BAqLF5TZDtMpzHu9Q-ThuOg%40= mail.gmail.com. For more options, visit https://groups.google.com/d/optout. --00000000000081f901058c7b7910 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"auto">It seems to be the case that it blocks on socket interact= ions...<br><br>This will supposedly improve the situation <a href=3D"https:= //github.com/cherrypy/cheroot/pull/176">https://github.com/cherrypy/cheroot= /pull/176</a><br><br><br><div data-smartmail=3D"gmail_signature">--Sviatosl= av.<br><br>Sent from my phone, please pardon any typos.</div></div><br><div= class=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">=D1=81=D0=B1, = 29 =D1=87=D0=B5=D1=80=D0=B2. 2019, 20:34 =D0=BA=D0=BE=D1=80=D0=B8=D1=81=D1= =82=D1=83=D0=B2=D0=B0=D1=87 Robert Brewer <<a href=3D"mailto:aminusfu@gm= ail.com">[email protected]</a>> =D0=BF=D0=B8=D1=88=D0=B5:<br></div><blo= ckquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #c= cc solid;padding-left:1ex"><div dir=3D"ltr"><div dir=3D"auto">In Python, yo= u have to explicitly cancel threads inside the thread. So one thing you _ca= n_ do is add a line inside your while loop: "if response.timed_out: ra= ise cherrypy.TimeoutError()". It won't do anything if the thread b= locks forever on readline(), but it will allow the thread to exit as long a= s readline is yielding.</div></div><br><div class=3D"gmail_quote"><div dir= =3D"ltr">On Sat, Jun 29, 2019, 11:25 Sviatoslav Sydorenko <<a href=3D"ma= ilto:[email protected]" target=3D"_blank" rel=3D"noreferrer">svya= [email protected]</a>> wrote:<br></div><blockquote class=3D"gmail_= quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,= 204);padding-left:1ex"><div dir=3D"auto">Timeout feature has been deprecate= d because it's not really possible to cancel threads. The solution woul= d be to rewrite the engine to use async paradigm.<div dir=3D"auto"><br></di= v><div dir=3D"auto">Try submitting an issue against Cheroot with a minimal = reproducer. There's some WIP there which aims to improve the connection= management.</div><div dir=3D"auto"><br><br><div dir=3D"auto">--Sviatoslav.= <br><br>Sent from my phone, please pardon any typos.</div></div></div><br><= div class=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">=D1=81=D0= =B1, 29 =D1=87=D0=B5=D1=80=D0=B2. 2019, 10:05 =D0=BA=D0=BE=D1=80=D0=B8=D1= =81=D1=82=D1=83=D0=B2=D0=B0=D1=87 Anatoliy Kushner <<a href=3D"mailto:la= [email protected]" rel=3D"noreferrer noreferrer" target=3D"_blank">lamazavr= [email protected]</a>> =D0=BF=D0=B8=D1=88=D0=B5:<br></div><blockquote class=3D= "gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(2= 04,204,204);padding-left:1ex"><div dir=3D"ltr"><p>With sample code below if= subscriber interrupt page load somewhere=20 between client.connect and client.close() then cherrypy will hang and=20 will not clean up used resources like: 1) open tcp socket (from netstat -anpt on this server i see tcp=20 connections to server that is established for some days, while time to=20 executing any commands should finish in 10 sec) 2) from ps -p 'cherrypy pid' H , i see , that number of threads=20 increased, and number of threads equals number of unclosed tcp=20 connections</p> <p>while debugging this i found that thread stop at "yield bytes(a, &#= 39;utf-8')" in while loop.=20 So , is there any way to say cherrypy to kill threads after some timeout ? = </p> <p>P.S. response.timeout =3D 30 already set in config and this does not he= lp</p><p><br></p><p><br></p><p></p><div style=3D"background-color:rgb(250,2= 50,250);border-color:rgb(187,187,187);border-style:solid;border-width:1px" = class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-32488433280042= 54059m_7974091648130462222prettyprint"><code class=3D"m_-520322455404917777= 8gmail-m_4929671620564195456m_-3248843328004254059m_7974091648130462222pret= typrint"><div class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-= 3248843328004254059m_7974091648130462222subprettyprint"><code><span style= =3D"color:rgb(0,102,102)" class=3D"m_-5203224554049177778gmail-m_4929671620= 564195456m_-3248843328004254059m_7974091648130462222styled-by-prettify">@ch= errypy</span><span style=3D"color:rgb(102,102,0)" class=3D"m_-5203224554049= 177778gmail-m_4929671620564195456m_-3248843328004254059m_797409164813046222= 2styled-by-prettify">.</span><span style=3D"color:rgb(0,0,0)" class=3D"m_-5= 203224554049177778gmail-m_4929671620564195456m_-3248843328004254059m_797409= 1648130462222styled-by-prettify">expose</span></code><span style=3D"color:r= gb(0,0,0)" class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-324= 8843328004254059m_7974091648130462222styled-by-prettify"><br></span><code><= /code><pre class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-324= 8843328004254059m_7974091648130462222lang-py m_-5203224554049177778gmail-m_= 4929671620564195456m_-3248843328004254059m_7974091648130462222prettyprint m= _-5203224554049177778gmail-m_4929671620564195456m_-3248843328004254059m_797= 4091648130462222prettyprinted"><code><span style=3D"color:rgb(0,0,136)" cla= ss=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-32488433280042540= 59m_7974091648130462222styled-by-prettify">def</span><span style=3D"color:r= gb(0,0,0)" class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-324= 8843328004254059m_7974091648130462222styled-by-prettify"> test</span><span = style=3D"color:rgb(102,102,0)" class=3D"m_-5203224554049177778gmail-m_49296= 71620564195456m_-3248843328004254059m_7974091648130462222styled-by-prettify= ">(</span><span style=3D"color:rgb(0,0,136)" class=3D"m_-520322455404917777= 8gmail-m_4929671620564195456m_-3248843328004254059m_7974091648130462222styl= ed-by-prettify">self</span><span style=3D"color:rgb(102,102,0)" class=3D"m_= -5203224554049177778gmail-m_4929671620564195456m_-3248843328004254059m_7974= 091648130462222styled-by-prettify">,</span><span style=3D"color:rgb(0,0,0)"= class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-3248843328004= 254059m_7974091648130462222styled-by-prettify"> </span><span style=3D"color= :rgb(102,102,0)" class=3D"m_-5203224554049177778gmail-m_4929671620564195456= m_-3248843328004254059m_7974091648130462222styled-by-prettify">*</span><spa= n style=3D"color:rgb(0,0,0)" class=3D"m_-5203224554049177778gmail-m_4929671= 620564195456m_-3248843328004254059m_7974091648130462222styled-by-prettify">= args</span><span style=3D"color:rgb(102,102,0)" class=3D"m_-520322455404917= 7778gmail-m_4929671620564195456m_-3248843328004254059m_7974091648130462222s= tyled-by-prettify">,</span><span style=3D"color:rgb(0,0,0)" class=3D"m_-520= 3224554049177778gmail-m_4929671620564195456m_-3248843328004254059m_79740916= 48130462222styled-by-prettify"> </span><span style=3D"color:rgb(102,102,0)"= class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-3248843328004= 254059m_7974091648130462222styled-by-prettify">**</span><span style=3D"colo= r:rgb(0,0,0)" class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-= 3248843328004254059m_7974091648130462222styled-by-prettify">kwargs</span><s= pan style=3D"color:rgb(102,102,0)" class=3D"m_-5203224554049177778gmail-m_4= 929671620564195456m_-3248843328004254059m_7974091648130462222styled-by-pret= tify">):</span><span style=3D"color:rgb(0,0,0)" class=3D"m_-520322455404917= 7778gmail-m_4929671620564195456m_-3248843328004254059m_7974091648130462222s= tyled-by-prettify"><br>=C2=A0</span><span style=3D"color:rgb(102,102,0)" cl= ass=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-3248843328004254= 059m_7974091648130462222styled-by-prettify">...</span><span style=3D"color:= rgb(0,0,0)" class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-32= 48843328004254059m_7974091648130462222styled-by-prettify"><br>=C2=A0</span>= <span style=3D"color:rgb(102,102,0)" class=3D"m_-5203224554049177778gmail-m= _4929671620564195456m_-3248843328004254059m_7974091648130462222styled-by-pr= ettify">...</span><span style=3D"color:rgb(0,0,0)" class=3D"m_-520322455404= 9177778gmail-m_4929671620564195456m_-3248843328004254059m_79740916481304622= 22styled-by-prettify"><br>=C2=A0</span><span style=3D"color:rgb(0,0,136)" c= lass=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-324884332800425= 4059m_7974091648130462222styled-by-prettify">def</span><span style=3D"color= :rgb(0,0,0)" class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-3= 248843328004254059m_7974091648130462222styled-by-prettify"> getData</span><= span style=3D"color:rgb(102,102,0)" class=3D"m_-5203224554049177778gmail-m_= 4929671620564195456m_-3248843328004254059m_7974091648130462222styled-by-pre= ttify">(</span><span style=3D"color:rgb(0,0,0)" class=3D"m_-520322455404917= 7778gmail-m_4929671620564195456m_-3248843328004254059m_7974091648130462222s= tyled-by-prettify">host</span><span style=3D"color:rgb(102,102,0)" class=3D= "m_-5203224554049177778gmail-m_4929671620564195456m_-3248843328004254059m_7= 974091648130462222styled-by-prettify">,</span><span style=3D"color:rgb(0,0,= 0)" class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-3248843328= 004254059m_7974091648130462222styled-by-prettify"> cmd</span><span style=3D= "color:rgb(102,102,0)" class=3D"m_-5203224554049177778gmail-m_4929671620564= 195456m_-3248843328004254059m_7974091648130462222styled-by-prettify">):</sp= an><span style=3D"color:rgb(0,0,0)" class=3D"m_-5203224554049177778gmail-m_= 4929671620564195456m_-3248843328004254059m_7974091648130462222styled-by-pre= ttify"><br>=C2=A0 =C2=A0html </span><span style=3D"color:rgb(102,102,0)" cl= ass=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-3248843328004254= 059m_7974091648130462222styled-by-prettify">=3D</span><span style=3D"color:= rgb(0,0,0)" class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-32= 48843328004254059m_7974091648130462222styled-by-prettify"> open</span><span= style=3D"color:rgb(102,102,0)" class=3D"m_-5203224554049177778gmail-m_4929= 671620564195456m_-3248843328004254059m_7974091648130462222styled-by-prettif= y">(</span><span style=3D"color:rgb(0,136,0)" class=3D"m_-52032245540491777= 78gmail-m_4929671620564195456m_-3248843328004254059m_7974091648130462222sty= led-by-prettify">"menuRp1.html"</span><span style=3D"color:rgb(10= 2,102,0)" class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-3248= 843328004254059m_7974091648130462222styled-by-prettify">).</span><span styl= e=3D"color:rgb(0,0,0)" class=3D"m_-5203224554049177778gmail-m_4929671620564= 195456m_-3248843328004254059m_7974091648130462222styled-by-prettify">read</= span><span style=3D"color:rgb(102,102,0)" class=3D"m_-5203224554049177778gm= ail-m_4929671620564195456m_-3248843328004254059m_7974091648130462222styled-= by-prettify">()</span><span style=3D"color:rgb(0,0,0)" class=3D"m_-52032245= 54049177778gmail-m_4929671620564195456m_-3248843328004254059m_7974091648130= 462222styled-by-prettify"><br>=C2=A0 =C2=A0</span><span style=3D"color:rgb(= 0,0,136)" class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-3248= 843328004254059m_7974091648130462222styled-by-prettify">yield</span><span s= tyle=3D"color:rgb(0,0,0)" class=3D"m_-5203224554049177778gmail-m_4929671620= 564195456m_-3248843328004254059m_7974091648130462222styled-by-prettify"> by= tes</span><span style=3D"color:rgb(102,102,0)" class=3D"m_-5203224554049177= 778gmail-m_4929671620564195456m_-3248843328004254059m_7974091648130462222st= yled-by-prettify">(</span><span style=3D"color:rgb(0,0,0)" class=3D"m_-5203= 224554049177778gmail-m_4929671620564195456m_-3248843328004254059m_797409164= 8130462222styled-by-prettify">html</span><span style=3D"color:rgb(102,102,0= )" class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-32488433280= 04254059m_7974091648130462222styled-by-prettify">,</span><span style=3D"col= or:rgb(0,0,0)" class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_= -3248843328004254059m_7974091648130462222styled-by-prettify"> </span><span = style=3D"color:rgb(0,136,0)" class=3D"m_-5203224554049177778gmail-m_4929671= 620564195456m_-3248843328004254059m_7974091648130462222styled-by-prettify">= 'utf-8'</span><span style=3D"color:rgb(102,102,0)" class=3D"m_-5203= 224554049177778gmail-m_4929671620564195456m_-3248843328004254059m_797409164= 8130462222styled-by-prettify">)</span><span style=3D"color:rgb(0,0,0)" clas= s=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-324884332800425405= 9m_7974091648130462222styled-by-prettify"><br>=C2=A0 =C2=A0client </span><s= pan style=3D"color:rgb(102,102,0)" class=3D"m_-5203224554049177778gmail-m_4= 929671620564195456m_-3248843328004254059m_7974091648130462222styled-by-pret= tify">=3D</span><span style=3D"color:rgb(0,0,0)" class=3D"m_-52032245540491= 77778gmail-m_4929671620564195456m_-3248843328004254059m_7974091648130462222= styled-by-prettify"> paramiko</span><span style=3D"color:rgb(102,102,0)" cl= ass=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-3248843328004254= 059m_7974091648130462222styled-by-prettify">.</span><span style=3D"color:rg= b(102,0,102)" class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-= 3248843328004254059m_7974091648130462222styled-by-prettify">SSHClient</span= ><span style=3D"color:rgb(102,102,0)" class=3D"m_-5203224554049177778gmail-= m_4929671620564195456m_-3248843328004254059m_7974091648130462222styled-by-p= rettify">()</span><span style=3D"color:rgb(0,0,0)" class=3D"m_-520322455404= 9177778gmail-m_4929671620564195456m_-3248843328004254059m_79740916481304622= 22styled-by-prettify"><br>=C2=A0 =C2=A0client</span><span style=3D"color:rg= b(102,102,0)" class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-= 3248843328004254059m_7974091648130462222styled-by-prettify">.</span><span s= tyle=3D"color:rgb(0,0,0)" class=3D"m_-5203224554049177778gmail-m_4929671620= 564195456m_-3248843328004254059m_7974091648130462222styled-by-prettify">con= nect</span><span style=3D"color:rgb(102,102,0)" class=3D"m_-520322455404917= 7778gmail-m_4929671620564195456m_-3248843328004254059m_7974091648130462222s= tyled-by-prettify">(</span><span style=3D"color:rgb(0,0,0)" class=3D"m_-520= 3224554049177778gmail-m_4929671620564195456m_-3248843328004254059m_79740916= 48130462222styled-by-prettify">hostname</span><span style=3D"color:rgb(102,= 102,0)" class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-324884= 3328004254059m_7974091648130462222styled-by-prettify">=3D</span><span style= =3D"color:rgb(0,0,0)" class=3D"m_-5203224554049177778gmail-m_49296716205641= 95456m_-3248843328004254059m_7974091648130462222styled-by-prettify">host</s= pan><span style=3D"color:rgb(102,102,0)" class=3D"m_-5203224554049177778gma= il-m_4929671620564195456m_-3248843328004254059m_7974091648130462222styled-b= y-prettify">,</span><span style=3D"color:rgb(0,0,0)" class=3D"m_-5203224554= 049177778gmail-m_4929671620564195456m_-3248843328004254059m_797409164813046= 2222styled-by-prettify"> username</span><span style=3D"color:rgb(102,102,0)= " class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-324884332800= 4254059m_7974091648130462222styled-by-prettify">=3D</span><span style=3D"co= lor:rgb(0,0,0)" class=3D"m_-5203224554049177778gmail-m_4929671620564195456m= _-3248843328004254059m_7974091648130462222styled-by-prettify">user</span><s= pan style=3D"color:rgb(102,102,0)" class=3D"m_-5203224554049177778gmail-m_4= 929671620564195456m_-3248843328004254059m_7974091648130462222styled-by-pret= tify">,</span><span style=3D"color:rgb(0,0,0)" class=3D"m_-5203224554049177= 778gmail-m_4929671620564195456m_-3248843328004254059m_7974091648130462222st= yled-by-prettify"> password</span><span style=3D"color:rgb(102,102,0)" clas= s=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-324884332800425405= 9m_7974091648130462222styled-by-prettify">=3D</span><span style=3D"color:rg= b(0,0,0)" class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-3248= 843328004254059m_7974091648130462222styled-by-prettify">pwd</span><span sty= le=3D"color:rgb(102,102,0)" class=3D"m_-5203224554049177778gmail-m_49296716= 20564195456m_-3248843328004254059m_7974091648130462222styled-by-prettify">,= </span><span style=3D"color:rgb(0,0,0)" class=3D"m_-5203224554049177778gmai= l-m_4929671620564195456m_-3248843328004254059m_7974091648130462222styled-by= -prettify"> port</span><span style=3D"color:rgb(102,102,0)" class=3D"m_-520= 3224554049177778gmail-m_4929671620564195456m_-3248843328004254059m_79740916= 48130462222styled-by-prettify">=3D</span><span style=3D"color:rgb(0,102,102= )" class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-32488433280= 04254059m_7974091648130462222styled-by-prettify">22</span><span style=3D"co= lor:rgb(102,102,0)" class=3D"m_-5203224554049177778gmail-m_4929671620564195= 456m_-3248843328004254059m_7974091648130462222styled-by-prettify">)</span><= span style=3D"color:rgb(0,0,0)" class=3D"m_-5203224554049177778gmail-m_4929= 671620564195456m_-3248843328004254059m_7974091648130462222styled-by-prettif= y"><br>=C2=A0 =C2=A0stdin</span><span style=3D"color:rgb(102,102,0)" class= =3D"m_-5203224554049177778gmail-m_4929671620564195456m_-3248843328004254059= m_7974091648130462222styled-by-prettify">,</span><span style=3D"color:rgb(0= ,0,0)" class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-3248843= 328004254059m_7974091648130462222styled-by-prettify"> stdout</span><span st= yle=3D"color:rgb(102,102,0)" class=3D"m_-5203224554049177778gmail-m_4929671= 620564195456m_-3248843328004254059m_7974091648130462222styled-by-prettify">= ,</span><span style=3D"color:rgb(0,0,0)" class=3D"m_-5203224554049177778gma= il-m_4929671620564195456m_-3248843328004254059m_7974091648130462222styled-b= y-prettify"> stderr </span><span style=3D"color:rgb(102,102,0)" class=3D"m_= -5203224554049177778gmail-m_4929671620564195456m_-3248843328004254059m_7974= 091648130462222styled-by-prettify">=3D</span><span style=3D"color:rgb(0,0,0= )" class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-32488433280= 04254059m_7974091648130462222styled-by-prettify"> client</span><span style= =3D"color:rgb(102,102,0)" class=3D"m_-5203224554049177778gmail-m_4929671620= 564195456m_-3248843328004254059m_7974091648130462222styled-by-prettify">.</= span><span style=3D"color:rgb(0,0,0)" class=3D"m_-5203224554049177778gmail-= m_4929671620564195456m_-3248843328004254059m_7974091648130462222styled-by-p= rettify">exec_command</span><span style=3D"color:rgb(102,102,0)" class=3D"m= _-5203224554049177778gmail-m_4929671620564195456m_-3248843328004254059m_797= 4091648130462222styled-by-prettify">(</span><span style=3D"color:rgb(0,0,0)= " class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-324884332800= 4254059m_7974091648130462222styled-by-prettify">cmd</span><span style=3D"co= lor:rgb(102,102,0)" class=3D"m_-5203224554049177778gmail-m_4929671620564195= 456m_-3248843328004254059m_7974091648130462222styled-by-prettify">)</span><= span style=3D"color:rgb(0,0,0)" class=3D"m_-5203224554049177778gmail-m_4929= 671620564195456m_-3248843328004254059m_7974091648130462222styled-by-prettif= y"><br>=C2=A0 =C2=A0a</span><span style=3D"color:rgb(102,102,0)" class=3D"m= _-5203224554049177778gmail-m_4929671620564195456m_-3248843328004254059m_797= 4091648130462222styled-by-prettify">=3D</span><span style=3D"color:rgb(0,0,= 0)" class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-3248843328= 004254059m_7974091648130462222styled-by-prettify">stdout</span><span style= =3D"color:rgb(102,102,0)" class=3D"m_-5203224554049177778gmail-m_4929671620= 564195456m_-3248843328004254059m_7974091648130462222styled-by-prettify">.</= span><span style=3D"color:rgb(0,0,0)" class=3D"m_-5203224554049177778gmail-= m_4929671620564195456m_-3248843328004254059m_7974091648130462222styled-by-p= rettify">readline</span><span style=3D"color:rgb(102,102,0)" class=3D"m_-52= 03224554049177778gmail-m_4929671620564195456m_-3248843328004254059m_7974091= 648130462222styled-by-prettify">()</span><span style=3D"color:rgb(0,0,0)" c= lass=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-324884332800425= 4059m_7974091648130462222styled-by-prettify"><br>=C2=A0 =C2=A0</span><span = style=3D"color:rgb(0,0,136)" class=3D"m_-5203224554049177778gmail-m_4929671= 620564195456m_-3248843328004254059m_7974091648130462222styled-by-prettify">= while</span><span style=3D"color:rgb(0,0,0)" class=3D"m_-520322455404917777= 8gmail-m_4929671620564195456m_-3248843328004254059m_7974091648130462222styl= ed-by-prettify"> a</span><span style=3D"color:rgb(102,102,0)" class=3D"m_-5= 203224554049177778gmail-m_4929671620564195456m_-3248843328004254059m_797409= 1648130462222styled-by-prettify">:</span><span style=3D"color:rgb(0,0,0)" c= lass=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-324884332800425= 4059m_7974091648130462222styled-by-prettify"><br>=C2=A0 =C2=A0 =C2=A0</span= ><span style=3D"color:rgb(0,0,136)" class=3D"m_-5203224554049177778gmail-m_= 4929671620564195456m_-3248843328004254059m_7974091648130462222styled-by-pre= ttify">yield</span><span style=3D"color:rgb(0,0,0)" class=3D"m_-52032245540= 49177778gmail-m_4929671620564195456m_-3248843328004254059m_7974091648130462= 222styled-by-prettify"> bytes</span><span style=3D"color:rgb(102,102,0)" cl= ass=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-3248843328004254= 059m_7974091648130462222styled-by-prettify">(</span><span style=3D"color:rg= b(0,0,0)" class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-3248= 843328004254059m_7974091648130462222styled-by-prettify">a</span><span style= =3D"color:rgb(102,102,0)" class=3D"m_-5203224554049177778gmail-m_4929671620= 564195456m_-3248843328004254059m_7974091648130462222styled-by-prettify">,</= span><span style=3D"color:rgb(0,0,0)" class=3D"m_-5203224554049177778gmail-= m_4929671620564195456m_-3248843328004254059m_7974091648130462222styled-by-p= rettify"> </span><span style=3D"color:rgb(0,136,0)" class=3D"m_-52032245540= 49177778gmail-m_4929671620564195456m_-3248843328004254059m_7974091648130462= 222styled-by-prettify">'utf-8'</span><span style=3D"color:rgb(102,1= 02,0)" class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-3248843= 328004254059m_7974091648130462222styled-by-prettify">)</span><span style=3D= "color:rgb(0,0,0)" class=3D"m_-5203224554049177778gmail-m_49296716205641954= 56m_-3248843328004254059m_7974091648130462222styled-by-prettify"><br>=C2=A0= =C2=A0 =C2=A0a</span><span style=3D"color:rgb(102,102,0)" class=3D"m_-5203= 224554049177778gmail-m_4929671620564195456m_-3248843328004254059m_797409164= 8130462222styled-by-prettify">=3D</span><span style=3D"color:rgb(0,0,0)" cl= ass=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-3248843328004254= 059m_7974091648130462222styled-by-prettify">stdout</span><span style=3D"col= or:rgb(102,102,0)" class=3D"m_-5203224554049177778gmail-m_49296716205641954= 56m_-3248843328004254059m_7974091648130462222styled-by-prettify">.</span><s= pan style=3D"color:rgb(0,0,0)" class=3D"m_-5203224554049177778gmail-m_49296= 71620564195456m_-3248843328004254059m_7974091648130462222styled-by-prettify= ">readline</span><span style=3D"color:rgb(102,102,0)" class=3D"m_-520322455= 4049177778gmail-m_4929671620564195456m_-3248843328004254059m_79740916481304= 62222styled-by-prettify">()</span><span style=3D"color:rgb(0,0,0)" class=3D= "m_-5203224554049177778gmail-m_4929671620564195456m_-3248843328004254059m_7= 974091648130462222styled-by-prettify"><br>=C2=A0 =C2=A0client</span><span s= tyle=3D"color:rgb(102,102,0)" class=3D"m_-5203224554049177778gmail-m_492967= 1620564195456m_-3248843328004254059m_7974091648130462222styled-by-prettify"= >.</span><span style=3D"color:rgb(0,0,0)" class=3D"m_-5203224554049177778gm= ail-m_4929671620564195456m_-3248843328004254059m_7974091648130462222styled-= by-prettify">close</span><span style=3D"color:rgb(102,102,0)" class=3D"m_-5= 203224554049177778gmail-m_4929671620564195456m_-3248843328004254059m_797409= 1648130462222styled-by-prettify">()</span><span style=3D"color:rgb(0,0,0)" = class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-32488433280042= 54059m_7974091648130462222styled-by-prettify"><br>=C2=A0 =C2=A0html </span>= <span style=3D"color:rgb(102,102,0)" class=3D"m_-5203224554049177778gmail-m= _4929671620564195456m_-3248843328004254059m_7974091648130462222styled-by-pr= ettify">=3D</span><span style=3D"color:rgb(0,0,0)" class=3D"m_-520322455404= 9177778gmail-m_4929671620564195456m_-3248843328004254059m_79740916481304622= 22styled-by-prettify"> open</span><span style=3D"color:rgb(102,102,0)" clas= s=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-324884332800425405= 9m_7974091648130462222styled-by-prettify">(</span><span style=3D"color:rgb(= 0,136,0)" class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-3248= 843328004254059m_7974091648130462222styled-by-prettify">"menuRp2.html&= quot;</span><span style=3D"color:rgb(102,102,0)" class=3D"m_-52032245540491= 77778gmail-m_4929671620564195456m_-3248843328004254059m_7974091648130462222= styled-by-prettify">).</span><span style=3D"color:rgb(0,0,0)" class=3D"m_-5= 203224554049177778gmail-m_4929671620564195456m_-3248843328004254059m_797409= 1648130462222styled-by-prettify">read</span><span style=3D"color:rgb(102,10= 2,0)" class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-32488433= 28004254059m_7974091648130462222styled-by-prettify">()</span><span style=3D= "color:rgb(0,0,0)" class=3D"m_-5203224554049177778gmail-m_49296716205641954= 56m_-3248843328004254059m_7974091648130462222styled-by-prettify"><br>=C2=A0= =C2=A0</span><span style=3D"color:rgb(0,0,136)" class=3D"m_-52032245540491= 77778gmail-m_4929671620564195456m_-3248843328004254059m_7974091648130462222= styled-by-prettify">yield</span><span style=3D"color:rgb(0,0,0)" class=3D"m= _-5203224554049177778gmail-m_4929671620564195456m_-3248843328004254059m_797= 4091648130462222styled-by-prettify"> bytes</span><span style=3D"color:rgb(1= 02,102,0)" class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-324= 8843328004254059m_7974091648130462222styled-by-prettify">(</span><span styl= e=3D"color:rgb(0,0,0)" class=3D"m_-5203224554049177778gmail-m_4929671620564= 195456m_-3248843328004254059m_7974091648130462222styled-by-prettify">html</= span><span style=3D"color:rgb(102,102,0)" class=3D"m_-5203224554049177778gm= ail-m_4929671620564195456m_-3248843328004254059m_7974091648130462222styled-= by-prettify">,</span><span style=3D"color:rgb(0,0,0)" class=3D"m_-520322455= 4049177778gmail-m_4929671620564195456m_-3248843328004254059m_79740916481304= 62222styled-by-prettify"> </span><span style=3D"color:rgb(0,136,0)" class= =3D"m_-5203224554049177778gmail-m_4929671620564195456m_-3248843328004254059= m_7974091648130462222styled-by-prettify">'utf-8'</span><span style= =3D"color:rgb(102,102,0)" class=3D"m_-5203224554049177778gmail-m_4929671620= 564195456m_-3248843328004254059m_7974091648130462222styled-by-prettify">)</= span><span style=3D"color:rgb(0,0,0)" class=3D"m_-5203224554049177778gmail-= m_4929671620564195456m_-3248843328004254059m_7974091648130462222styled-by-p= rettify"><br>=C2=A0</span><span style=3D"color:rgb(0,0,136)" class=3D"m_-52= 03224554049177778gmail-m_4929671620564195456m_-3248843328004254059m_7974091= 648130462222styled-by-prettify">return</span><span style=3D"color:rgb(0,0,0= )" class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-32488433280= 04254059m_7974091648130462222styled-by-prettify"> getData</span><span style= =3D"color:rgb(102,102,0)" class=3D"m_-5203224554049177778gmail-m_4929671620= 564195456m_-3248843328004254059m_7974091648130462222styled-by-prettify">(</= span><span style=3D"color:rgb(0,0,0)" class=3D"m_-5203224554049177778gmail-= m_4929671620564195456m_-3248843328004254059m_7974091648130462222styled-by-p= rettify">h</span><span style=3D"color:rgb(102,102,0)" class=3D"m_-520322455= 4049177778gmail-m_4929671620564195456m_-3248843328004254059m_79740916481304= 62222styled-by-prettify">,</span><span style=3D"color:rgb(0,0,0)" class=3D"= m_-5203224554049177778gmail-m_4929671620564195456m_-3248843328004254059m_79= 74091648130462222styled-by-prettify"> c</span><span style=3D"color:rgb(102,= 102,0)" class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-324884= 3328004254059m_7974091648130462222styled-by-prettify">)</span><span style= =3D"color:rgb(0,0,0)" class=3D"m_-5203224554049177778gmail-m_49296716205641= 95456m_-3248843328004254059m_7974091648130462222styled-by-prettify"><br>tes= t</span><span style=3D"color:rgb(102,102,0)" class=3D"m_-520322455404917777= 8gmail-m_4929671620564195456m_-3248843328004254059m_7974091648130462222styl= ed-by-prettify">.</span><span style=3D"color:rgb(0,0,0)" class=3D"m_-520322= 4554049177778gmail-m_4929671620564195456m_-3248843328004254059m_79740916481= 30462222styled-by-prettify">_cp_config </span><span style=3D"color:rgb(102,= 102,0)" class=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-324884= 3328004254059m_7974091648130462222styled-by-prettify">=3D</span><span style= =3D"color:rgb(0,0,0)" class=3D"m_-5203224554049177778gmail-m_49296716205641= 95456m_-3248843328004254059m_7974091648130462222styled-by-prettify"> </span= ><span style=3D"color:rgb(102,102,0)" class=3D"m_-5203224554049177778gmail-= m_4929671620564195456m_-3248843328004254059m_7974091648130462222styled-by-p= rettify">{</span><span style=3D"color:rgb(0,136,0)" class=3D"m_-52032245540= 49177778gmail-m_4929671620564195456m_-3248843328004254059m_7974091648130462= 222styled-by-prettify">'response.stream'</span><span style=3D"color= :rgb(102,102,0)" class=3D"m_-5203224554049177778gmail-m_4929671620564195456= m_-3248843328004254059m_7974091648130462222styled-by-prettify">:</span><spa= n style=3D"color:rgb(0,0,0)" class=3D"m_-5203224554049177778gmail-m_4929671= 620564195456m_-3248843328004254059m_7974091648130462222styled-by-prettify">= </span><span style=3D"color:rgb(0,0,136)" class=3D"m_-5203224554049177778g= mail-m_4929671620564195456m_-3248843328004254059m_7974091648130462222styled= -by-prettify">True</span><span style=3D"color:rgb(102,102,0)" class=3D"m_-5= 203224554049177778gmail-m_4929671620564195456m_-3248843328004254059m_797409= 1648130462222styled-by-prettify">}</span><span style=3D"color:rgb(0,0,0)" c= lass=3D"m_-5203224554049177778gmail-m_4929671620564195456m_-324884332800425= 4059m_7974091648130462222styled-by-prettify"> </span></code></pre></div></c= ode></div><br><br><p></p></div> <p></p> -- <br> You received this message because you are subscribed to the Google Groups &= quot;cherrypy-users" group.<br> To unsubscribe from this group and stop receiving emails from it, send an e= mail to <a href=3D"mailto:cherrypy-users+unsubscribe-/[email protected]" rel= =3D"noreferrer noreferrer noreferrer" target=3D"_blank">cherrypy-users+unsu= bscribe-/[email protected]</a>.<br> To post to this group, send email to <a href=3D"mailto:cherrypy-users@googl= egroups.com" rel=3D"noreferrer noreferrer noreferrer" target=3D"_blank">che= rrypy-users-/[email protected]</a>.<br> Visit this group at <a href=3D"https://groups.google.com/group/cherrypy-use= rs" rel=3D"noreferrer noreferrer noreferrer" target=3D"_blank">https://grou= ps.google.com/group/cherrypy-users</a>.<br> To view this discussion on the web visit <a href=3D"https://groups.google.c= om/d/msgid/cherrypy-users/92d0f922-5e40-4a5c-b3d6-a99d10ff0830%40googlegrou= ps.com?utm_medium=3Demail&utm_source=3Dfooter" rel=3D"noreferrer norefe= rrer noreferrer" target=3D"_blank">https://groups.google.com/d/msgid/cherry= py-users/92d0f922-5e40-4a5c-b3d6-a99d10ff0830%40googlegroups.com</a>.<br> For more options, visit <a href=3D"https://groups.google.com/d/optout" rel= =3D"noreferrer noreferrer noreferrer" target=3D"_blank">https://groups.goog= le.com/d/optout</a>.<br> </blockquote></div> <p></p> -- <br> You received this message because you are subscribed to the Google Groups &= quot;cherrypy-users" group.<br> To unsubscribe from this group and stop receiving emails from it, send an e= mail to <a href=3D"mailto:cherrypy-users+unsubscribe-/[email protected]" rel= =3D"noreferrer noreferrer" target=3D"_blank">cherrypy-users+unsubscribe@goo= glegroups.com</a>.<br> To post to this group, send email to <a href=3D"mailto:cherrypy-users@googl= egroups.com" rel=3D"noreferrer noreferrer" target=3D"_blank">cherrypy-users= @googlegroups.com</a>.<br> Visit this group at <a href=3D"https://groups.google.com/group/cherrypy-use= rs" rel=3D"noreferrer noreferrer" target=3D"_blank">https://groups.google.c= om/group/cherrypy-users</a>.<br> To view this discussion on the web visit <a href=3D"https://groups.google.c= om/d/msgid/cherrypy-users/CAFYONRBoAZFtBsPj1xs3GzLDac5iCvww5zd_wVbEPs4gVs_p= GQ%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter" rel=3D"nore= ferrer noreferrer" target=3D"_blank">https://groups.google.com/d/msgid/cher= rypy-users/CAFYONRBoAZFtBsPj1xs3GzLDac5iCvww5zd_wVbEPs4gVs_pGQ%40mail.gmail= .com</a>.<br> For more options, visit <a href=3D"https://groups.google.com/d/optout" rel= =3D"noreferrer noreferrer" target=3D"_blank">https://groups.google.com/d/op= tout</a>.<br> </blockquote></div> <p></p> -- <br> You received this message because you are subscribed to the Google Groups &= quot;cherrypy-users" group.<br> To unsubscribe from this group and stop receiving emails from it, send an e= mail to <a href=3D"mailto:cherrypy-users+unsubscribe-/[email protected]" targ= et=3D"_blank" rel=3D"noreferrer">cherrypy-users+unsubscribe-/[email protected]= m</a>.<br> To post to this group, send email to <a href=3D"mailto:cherrypy-users@googl= egroups.com" target=3D"_blank" rel=3D"noreferrer">cherrypy-users@googlegrou= ps.com</a>.<br> Visit this group at <a href=3D"https://groups.google.com/group/cherrypy-use= rs" target=3D"_blank" rel=3D"noreferrer">https://groups.google.com/group/ch= errypy-users</a>.<br> To view this discussion on the web visit <a href=3D"https://groups.google.c= om/d/msgid/cherrypy-users/CAJ4gti-fbZrzM-mfy7_OKDuTqBVLCJWWZ11LKOr9eB6d3tom= Dg%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter" target=3D"_= blank" rel=3D"noreferrer">https://groups.google.com/d/msgid/cherrypy-users/= CAJ4gti-fbZrzM-mfy7_OKDuTqBVLCJWWZ11LKOr9eB6d3tomDg%40mail.gmail.com</a>.<b= r> For more options, visit <a href=3D"https://groups.google.com/d/optout" targ= et=3D"_blank" rel=3D"noreferrer">https://groups.google.com/d/optout</a>.<br= > </blockquote></div> <p></p> -- <br /> You received this message because you are subscribed to the Google Groups &= quot;cherrypy-users" group.<br /> To unsubscribe from this group and stop receiving emails from it, send an e= mail to <a href=3D"mailto:cherrypy-users+unsubscribe-/[email protected]">cher= rypy-users+unsubscribe-/[email protected]</a>.<br /> To post to this group, send email to <a href=3D"mailto:cherrypy-users@googl= egroups.com">cherrypy-users-/[email protected]</a>.<br /> Visit this group at <a href=3D"https://groups.google.com/group/cherrypy-use= rs">https://groups.google.com/group/cherrypy-users</a>.<br /> To view this discussion on the web visit <a href=3D"https://groups.google.c= om/d/msgid/cherrypy-users/CAFYONRA%3Dv_Nib2%3DHcm00N2pWoo0%2BAqLF5TZDtMpzHu= 9Q-ThuOg%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">https://g= roups.google.com/d/msgid/cherrypy-users/CAFYONRA%3Dv_Nib2%3DHcm00N2pWoo0%2B= AqLF5TZDtMpzHu9Q-ThuOg%40mail.gmail.com</a>.<br /> For more options, visit <a href=3D"https://groups.google.com/d/optout">http= s://groups.google.com/d/optout</a>.<br /> --00000000000081f901058c7b7910--