Re: Save link as... silent failure on gopher protocol

Diego <[email protected]> Fri, 3 Jul 2026 14:17:53 +0200
Newsgroups gmane.comp.web.dillo.devel
Message-ID <CAD0qOrS_x50pf5LyGJevo_M-865q=amnZiyeKyrgqtnSQ_eOcg@mail.gmail.com>
--000000000000b6526c0655b3ea54
Content-Type: multipart/alternative; boundary="000000000000b6526b0655b3ea52"

--000000000000b6526b0655b3ea52
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Hello, I'm sending two patches with an idea to solve this problem.
It's a proof of concept that I'm offering to develop and complete, although
I have very little free time.

The first patch works with the latest dillo release (3.3.0) but also works
with the current repository.
It implements changes in dillo, download.dpi, and the file and data DPIs as
examples.
The second patch works with the latest gopher.dpi repository.

The main idea is that the DPIs that handle protocols save the URL and write
the file themselves, coordinating with download.dpi and dillo.

To do this, they implement a new DPI command: `save_url`
d_cmd =3D a_Dpip_build_cmd("cmd=3D%s url=3D%s destination=3D%s", "save_url"=
, url,
dl_dest);

Dillo initiates a download, sending it to download.dpi as before. If it's
HTTP* or FTP*, it downloads directly as it does now. Otherwise, it will
send a `save_url` command to Dillo to coordinate. This allows Dillo to
notify the user, verify the security of the change, etc.Currently, Dillo
only checks if there's a DPI that handles the requested protocol.

(A new function (`a_Dpiapi_is_service_handled(server_str)`) queries `dpid`
without executing the DPI. No code is modified in `dpid`. Modifying `dpid`
or executing the DPI would allow querying the capabilities of the DPIs, but
it doesn't seem necessary.)

- If a DPI is present, it sends the `save_url` command to the DPI that
coordinates with `download.dpi` via a secondary channel so that downloads
can continue even if all Dillo windows are closed.

- If the protocol isn't handled, it notifies download.dpi through the
secondary channel (this reduces the amount of code).

The next step would be to implement `save_url` in other protocol DPIs.

A possible change to download.dpi once all is done is to leave download.dpi
it as just a GUI for DPIs and extract the code to download HTTP to a DPI.
(There's already ftp.dpi)

One last thing: can you recommend a simple Git manual?


Saludos
Diego.

El lun, 25 may 2026 a las 21:23, Rodrigo Arias (<[email protected]>)
escribi=C3=B3:

> Hi,
>
> On Mon, May 25, 2026 at 09:25:58AM -0700, Ben Collver wrote:
> >Good day,
> >
> >I am using dillo 3.3.0 on Slackware64 15.0.
> >
> >If I open a gopher directory, right-click on an item, and click
> >Save link as..., this opens a file save dialog.  If i click OK, it
> >dismisses the dialog.  I expected it to save something, but it
> >creates no new files.
> >
> >Gopher URI:  gopher://gopher.pglaf.org/1/4/0/2/8/40282/
> >Top item:    40282-0
> >
> >I found the following workaround:
> >
> >* Left click 40282-0
> >* Click Save button in browser toolbar
> >
> >This creates a new file as expected.
>
> Yes, this is a known limitation of the downloads in Dillo. Using the
> "Save link as" to fetch a new resource will use wget under the hood,
> which only allows http(s). You can see the message in the console:
>
> > UIcmd_save: /tmp/40282-0.txt
> > ** WARNING **: Ignoring download request for
> > 'gopher://gopher.pglaf.org/0/4/0/2/8/40282/40282-0.txt': not in cache
> > and not downloadable.
>
> Browsing to the target file makes the gopher plugin fetch the file and
> place it in the Dillo cache (you can see it in about:cache). Then saving
> the current page (or going back and clicking the "Save link as" entry)
> works because it fetches it from the cache.
>
> It is planned to solve this some time in the future, but involves
> complex changes. In the meanwhile, you can use this workaround.
>
> Best,
> Rodrigo.
> _______________________________________________
> Dillo-dev mailing list -- dillo-dev-lx9mn2B4QYRWk0Htik3J/[email protected]
> To unsubscribe send an email to dillo-dev-leave-lx9mn2B4QYRWk0Htik3J/[email protected]
>

--000000000000b6526b0655b3ea52
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hello, I&#39;m sending two patches with an idea to solve t=
his problem.<br>It&#39;s a proof of concept that I&#39;m offering to develo=
p and complete, although I have very little free time.<br><br>The first pat=
ch works with the latest dillo release (3.3.0) but also works with the curr=
ent repository.<br>It implements changes in dillo, download.dpi, and the fi=
le and data DPIs as examples.<br>The second patch works with the latest gop=
her.dpi repository.<br><br>The main idea is that the DPIs that handle proto=
cols save the URL and write the file themselves, coordinating with download=
.dpi and dillo.<br><br>To do this, they implement a new DPI command: `save_=
url`<br>d_cmd =3D a_Dpip_build_cmd(&quot;cmd=3D%s url=3D%s destination=3D%s=
&quot;, &quot;save_url&quot;, url, dl_dest);<br><br><div>Dillo initiates a =
download, sending it to download.dpi as before. If it&#39;s HTTP* or FTP*, =
it downloads directly as it does now. Otherwise, it will send a `save_url` =
command to Dillo to coordinate. This allows Dillo to notify the user, verif=
y the security of the change, etc.Currently, Dillo only checks if there&#39=
;s a DPI that handles the requested protocol.</div><div><br></div>(A new fu=
nction (`a_Dpiapi_is_service_handled(server_str)`) queries `dpid` without e=
xecuting the DPI. No code is modified in `dpid`. Modifying `dpid` or execut=
ing the DPI would allow querying the capabilities of the DPIs, but it doesn=
&#39;t seem necessary.)<br><br>- If a DPI is present, it sends the `save_ur=
l` command to the DPI that coordinates with `download.dpi` via a secondary =
channel so that downloads can continue even if all Dillo windows are closed=
.<br><br>- If the protocol isn&#39;t handled, it notifies download.dpi thro=
ugh the secondary channel (this reduces the amount of code).<br><br>The nex=
t step would be to implement `save_url` in other protocol DPIs.<br><br>A po=
ssible change to download.dpi once all is done is to leave download.dpi it =
as just a GUI for DPIs and extract the code to download HTTP to a DPI. (The=
re&#39;s already ftp.dpi)<br><br><div>One last thing: can you recommend a s=
imple Git manual?</div><div><br></div><div><br></div><div>Saludos</div><div=
>Diego.</div></div><br><div class=3D"gmail_quote gmail_quote_container"><di=
v dir=3D"ltr" class=3D"gmail_attr">El lun, 25 may 2026 a las 21:23, Rodrigo=
 Arias (&lt;<a href=3D"mailto:[email protected]">[email protected]</a>&gt=
;) escribi=C3=B3:<br></div><blockquote class=3D"gmail_quote" style=3D"margi=
n:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex=
">Hi,<br>
<br>
On Mon, May 25, 2026 at 09:25:58AM -0700, Ben Collver wrote:<br>
&gt;Good day,<br>
&gt;<br>
&gt;I am using dillo 3.3.0 on Slackware64 15.0.<br>
&gt;<br>
&gt;If I open a gopher directory, right-click on an item, and click<br>
&gt;Save link as..., this opens a file save dialog.=C2=A0 If i click OK, it=
<br>
&gt;dismisses the dialog.=C2=A0 I expected it to save something, but it<br>
&gt;creates no new files.<br>
&gt;<br>
&gt;Gopher URI:=C2=A0 gopher://<a href=3D"http://gopher.pglaf.org/1/4/0/2/8=
/40282/" rel=3D"noreferrer" target=3D"_blank">gopher.pglaf.org/1/4/0/2/8/40=
282/</a><br>
&gt;Top item:=C2=A0 =C2=A0 40282-0<br>
&gt;<br>
&gt;I found the following workaround:<br>
&gt;<br>
&gt;* Left click 40282-0<br>
&gt;* Click Save button in browser toolbar<br>
&gt;<br>
&gt;This creates a new file as expected.<br>
<br>
Yes, this is a known limitation of the downloads in Dillo. Using the <br>
&quot;Save link as&quot; to fetch a new resource will use wget under the ho=
od, <br>
which only allows http(s). You can see the message in the console:<br>
<br>
&gt; UIcmd_save: /tmp/40282-0.txt<br>
&gt; ** WARNING **: Ignoring download request for <br>
&gt; &#39;gopher://<a href=3D"http://gopher.pglaf.org/0/4/0/2/8/40282/40282=
-0.txt" rel=3D"noreferrer" target=3D"_blank">gopher.pglaf.org/0/4/0/2/8/402=
82/40282-0.txt</a>&#39;: not in cache <br>
&gt; and not downloadable.<br>
<br>
Browsing to the target file makes the gopher plugin fetch the file and <br>
place it in the Dillo cache (you can see it in about:cache). Then saving <b=
r>
the current page (or going back and clicking the &quot;Save link as&quot; e=
ntry) <br>
works because it fetches it from the cache.<br>
<br>
It is planned to solve this some time in the future, but involves <br>
complex changes. In the meanwhile, you can use this workaround.<br>
<br>
Best,<br>
Rodrigo.<br>
_______________________________________________<br>
Dillo-dev mailing list -- <a href=3D"mailto:dillo-dev-lx9mn2B4QYRWk0Htik3J/[email protected]" target=
=3D"_blank">dillo-dev-lx9mn2B4QYRWk0Htik3J/[email protected]</a><br>
To unsubscribe send an email to <a href=3D"mailto:dillo-dev-leave@mailman3.=
com" target=3D"_blank">dillo-dev-leave-lx9mn2B4QYRWk0Htik3J/[email protected]</a><br>
</blockquote></div>

--000000000000b6526b0655b3ea52--

--000000000000b6526c0655b3ea54
Content-Type: text/x-patch; charset="US-ASCII"; 
	name="0001_add_save_url_dpi_cmd_to_dillo_downloads_dpi_file_dpi_and_datauri.diff"
Content-Disposition: attachment; 
	filename="0001_add_save_url_dpi_cmd_to_dillo_downloads_dpi_file_dpi_and_datauri.diff"
Content-Transfer-Encoding: base64
Content-ID: <f_mr4weiqj0>
X-Attachment-Id: f_mr4weiqj0

ZGlmZiAtcHJ1IGEvZHBpL2RhdGF1cmkuYyBiL2RwaS9kYXRhdXJpLmMKLS0tIGEvZHBpL2RhdGF1
cmkuYwkyMDI2LTAzLTI5IDE4OjAyOjExLjAwMDAwMDAwMCArMDIwMAorKysgYi9kcGkvZGF0YXVy
aS5jCTIwMjYtMDctMDMgMDI6MDc6MTIuMzEzMDM4Mjg2ICswMjAwCkBAIC0xNzksNiArMTc5LDQ1
IEBAIHN0YXRpYyB2b2lkIHNlbmRfZGVjb2RlZF9kYXRhKGNvbnN0IGNoYXIKICAgIGFfRHBpcF9k
c2hfd3JpdGUoc2gsIDAsIChjaGFyICopZGF0YSwgZGF0YV9zeik7CiB9CiAKKy8qCisgKiBTYXZl
IGRlY29kZWQgZGF0YSB3cml0aW5nIHRtcCBsb2cKKyAqLworc3RhdGljIHZvaWQgc2F2ZV9kZWNv
ZGVkX2RhdGEoY29uc3QgY2hhciAqdXJsLCBjb25zdCBjaGFyICptaW1lX3R5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkc3QsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGRhdGFfc3opCit7Cisg
ICBjaGFyICpsb2dfbmFtZTsKKyAgIEZJTEUgKmxvZ19mcCwgKmRzdF9mcDsKKworICAgbG9nX25h
bWUgPSBkU3RyY29uY2F0KGRzdCwgIi5sb2cudG1wIiwgTlVMTCk7CisgICBpZiAoKGxvZ19mcCA9
IGZvcGVuKGxvZ19uYW1lLCAid2IiKSkgPT0gTlVMTCkgeworICAgICAgTVNHKCJcbkVSUk9SIG9w
ZW5pbmcgbG9nIGZpbGUgZm9yIHNhdmVfdXJsICclcyc6ICVzXG4iLAorICAgICAgICAgICAgbG9n
X25hbWUsIGRTdHJlcnJvcihlcnJubykpOworICAgfQorICAgZEZyZWUobG9nX25hbWUpOworICAg
ZnByaW50Zihsb2dfZnAsICJzYXZlX3VybCA8ZHBpIGNtZD0nc2F2ZV91cmwnIHVybD0nJXMnIGRl
c3RpbmF0aW9uPSclcycgJz5cblxuIiwgdXJsLCBkc3QpOworICAgZmZsdXNoKGxvZ19mcCk7CisK
KyAgIGZwcmludGYobG9nX2ZwLCAiTGVuZ3RoOiAlbGQgKC4uLikgWyVzXVxuXG4iLCBkYXRhX3N6
LCBtaW1lX3R5cGUpOworICAgZmZsdXNoKGxvZ19mcCk7CisKKyAgIC8qIGFsd2F5cyAocmUpd3Jp
dGUgZnJvbSAwICovCisgICBpZiAoICgoZHN0X2ZwID0gZm9wZW4oZHN0LCAid2IiKSkgPT0gTlVM
TCkgfHwgCisgICAgICAgIChmd3JpdGUoKGNoYXIgKilkYXRhLCBkYXRhX3N6LCAxLCBkc3RfZnAp
ICE9IDEpICkgeworICAgICAgZnByaW50Zihsb2dfZnAsICJzYXZlX3VybCBub3Qgb2s6IENhbid0
IG9wZW4vd3JpdGUgZGVzdGluYXRpb24gJyVzJ1xuIlwKKyAgICAgICAgICAgICAgICAgICAgICAi
c2F2ZV91cmwgRU5EXG5cbiIsIGRzdCk7CisgICAgICBmZmx1c2gobG9nX2ZwKTsKKyAgICAgIE1T
RygiXG5FUlJPUiBvcGVuIGZpbGUgdG8gc2F2ZV91cmwgJyVzJzogJXNcbiIsIGRzdCwgZFN0cmVy
cm9yKGVycm5vKSk7CisgICB9IGVsc2UgeworICAgICAgZnByaW50Zihsb2dfZnAsICJzYXZlX3Vy
bCB5ZXMgb2tcbiIgXAorICAgICAgICAgICAgICAgICAgICAgICJzYXZlX3VybCBFTkRcblxuIik7
CisgICAgICBmZmx1c2gobG9nX2ZwKTsKKyAgIH0KKworICAgZmNsb3NlKGxvZ19mcCk7CisgICBm
Y2xvc2UoZHN0X2ZwKTsKK30KKwogc3RhdGljIHZvaWQgc2VuZF9mYWlsdXJlX21lc3NhZ2UoY29u
c3QgY2hhciAqdXJsLCBjb25zdCBjaGFyICptaW1lX3R5cGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3QgZGF0YV9zeikKIHsKQEAg
LTI4NSw3ICszMjQsNyBAQCBzdGF0aWMgdW5zaWduZWQgY2hhciAqZGF0YXVyaV9nZXRfZGF0YShj
CiAgKi8KIGludCBtYWluKHZvaWQpCiB7Ci0gICBjaGFyICpkcGlwX3RhZyA9IE5VTEwsICpjbWQg
PSBOVUxMLCAqdXJsID0gTlVMTCwgKm1pbWVfdHlwZTsKKyAgIGNoYXIgKmRwaXBfdGFnID0gTlVM
TCwgKmNtZCA9IE5VTEwsICp1cmwgPSBOVUxMLCAqZHN0ID0gTlVMTCwgKm1pbWVfdHlwZTsKICAg
IHVuc2lnbmVkIGNoYXIgKmRhdGE7CiAgICBpbnQgcmM7CiAgICBzaXplX3QgZGF0YV9zaXplID0g
MDsKQEAgLTMyOSw3ICszNjgsMTMgQEAgaW50IG1haW4odm9pZCkKIAogICAgaWYgKG1pbWVfdHlw
ZSAmJiBkYXRhKSB7CiAgICAgICAvKiBnb29kIFVSSSAqLwotICAgICAgc2VuZF9kZWNvZGVkX2Rh
dGEodXJsLCBtaW1lX3R5cGUsIGRhdGEsIGRhdGFfc2l6ZSk7CisgICAgICBpZiAoc3RyY21wKGNt
ZCwgIm9wZW5fdXJsIikgPT0gMCkgeworICAgICAgICAgc2VuZF9kZWNvZGVkX2RhdGEodXJsLCBt
aW1lX3R5cGUsIGRhdGEsIGRhdGFfc2l6ZSk7CisgICAgICB9IGVsc2UgaWYgKHN0cmNtcChjbWQs
ICJzYXZlX3VybCIpID09IDApIHsKKyAgICAgICAgIGRzdCA9IGFfRHBpcF9nZXRfYXR0cihkcGlw
X3RhZywgImRlc3RpbmF0aW9uIik7CisgICAgICAgICBzYXZlX2RlY29kZWRfZGF0YSh1cmwsIG1p
bWVfdHlwZSwgZHN0LCBkYXRhLCBkYXRhX3NpemUpOworICAgICAgICAgZEZyZWUoZHN0KTsKKyAg
ICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAvKiBtYWxmb3JtZWQgVVJJICovCiAgICAgICBzZW5k
X2ZhaWx1cmVfbWVzc2FnZSh1cmwsIG1pbWVfdHlwZSwgZGF0YSwgZGF0YV9zaXplKTsKZGlmZiAt
cHJ1IGEvZHBpL2Rvd25sb2Fkcy5jYyBiL2RwaS9kb3dubG9hZHMuY2MKLS0tIGEvZHBpL2Rvd25s
b2Fkcy5jYwkyMDI2LTAzLTI5IDE4OjAyOjExLjAwMDAwMDAwMCArMDIwMAorKysgYi9kcGkvZG93
bmxvYWRzLmNjCTIwMjYtMDctMDMgMDI6MDc6MTIuMzEzMDM4Mjg2ICswMjAwCkBAIC05OCw3ICs5
OCw3IEBAIGNsYXNzIERMSXRlbSB7CiAKICAgIHBpZF90IG1QaWQ7CiAgICBpbnQgTG9nUGlwZVsy
XTsKLSAgIGNoYXIgKnNob3J0bmFtZSwgKmZ1bGxuYW1lOworICAgY2hhciAqc2hvcnRuYW1lLCAq
ZnVsbG5hbWUsICpmYWtld2dldDsKICAgIGNoYXIgKmVzY191cmw7CiAgICBjaGFyICpjb29raWVz
X3BhdGg7CiAgICBjaGFyICp0YXJnZXRfZGlyOwpAQCAtMzIyLDIxICszMjIsMzggQEAgRExJdGVt
OjpETEl0ZW0oY29uc3QgY2hhciAqZnVsbF9maWxlbmFtZQogICAgaWYgKGRTdHJuQXNjaWlDYXNl
Y21wKGVzY191cmwsICJmdHA6LyIsIDUpID09IDApCiAgICAgICBGaWx0ZXJfc210cF9oYWNrKGVz
Y191cmwpOwogICAgY29va2llc19wYXRoID0gZFN0cmNvbmNhdChkR2V0aG9tZWRpcigpLCAiLy5k
aWxsby9jb29raWVzLnR4dCIsIE5VTEwpOwotICAgZGxfYXJndiA9IG5ldyBjaGFyKlsxMF07Ci0g
ICBpbnQgaSA9IDA7Ci0gICBkbF9hcmd2W2krK10gPSAoY2hhciopIndnZXQiOwogICAgaWYgKHN0
YXQoZnVsbG5hbWUsICZzcykgPT0gMCkKICAgICAgIGluaXRfYnl0ZXNpemUgPSAoaW50KXNzLnN0
X3NpemU7Ci0gICBkbF9hcmd2W2krK10gPSAoY2hhciopIi1VIjsKLSAgIGRsX2FyZ3ZbaSsrXSA9
IChjaGFyKikgdXNlcl9hZ2VudDsKLSAgIGRsX2FyZ3ZbaSsrXSA9IChjaGFyKikiLWMiOwotICAg
ZGxfYXJndltpKytdID0gKGNoYXIqKSItLWxvYWQtY29va2llcyI7Ci0gICBkbF9hcmd2W2krK10g
PSBjb29raWVzX3BhdGg7Ci0gICBkbF9hcmd2W2krK10gPSAoY2hhciopIi1PIjsKLSAgIGRsX2Fy
Z3ZbaSsrXSA9IGZ1bGxuYW1lOwotICAgZGxfYXJndltpKytdID0gZXNjX3VybDsKLSAgIGRsX2Fy
Z3ZbaSsrXSA9IE5VTEw7Ci0KKyAgIGRsX2FyZ3YgPSBuZXcgY2hhcipbMTBdOworICAgaW50IGkg
PSAwOworICAgaWYgKChzdHJuY21wKHVybCwgImZ0cDoiLDQpID09IDApIHx8IAorICAgICAgKHN0
cm5jbXAodXJsLCAiZnRwczoiLDUpID09IDApIHx8IAorICAgICAgKHN0cm5jbXAodXJsLCAiaHR0
cDoiLDUpID09IDApIHx8IAorICAgICAgKHN0cm5jbXAodXJsLCAiaHR0cHM6Iiw2KSA9PSAwKSkg
eworICAgICAgZGxfYXJndltpKytdID0gKGNoYXIqKSJ3Z2V0IjsKKyAgICAgIGRsX2FyZ3ZbaSsr
XSA9IChjaGFyKikiLVUiOworICAgICAgZGxfYXJndltpKytdID0gKGNoYXIqKSB1c2VyX2FnZW50
OworICAgICAgZGxfYXJndltpKytdID0gKGNoYXIqKSItYyI7CisgICAgICBkbF9hcmd2W2krK10g
PSAoY2hhciopIi0tbG9hZC1jb29raWVzIjsKKyAgICAgIGRsX2FyZ3ZbaSsrXSA9IGNvb2tpZXNf
cGF0aDsKKyAgICAgIGRsX2FyZ3ZbaSsrXSA9IChjaGFyKikiLU8iOworICAgICAgZGxfYXJndltp
KytdID0gZnVsbG5hbWU7CisgICAgICBkbF9hcmd2W2krK10gPSBlc2NfdXJsOworICAgICAgZGxf
YXJndltpKytdID0gTlVMTDsKKyAgIH0gZWxzZSB7CisgICAgICBmYWtld2dldCA9IGRTdHJjb25j
YXQoInRhaWwgLXYgLUYgXCciLCBmdWxsX2ZpbGVuYW1lLCAiLmxvZy50bXBcJyB8ICIKKyAgICAg
ICAgICJ3aGlsZSBJRlM9IHJlYWQgLXIgbGluZSA7IGRvICIKKyAgICAgICAgICIgICBlY2hvIFwi
JGxpbmVcIiA7ICIKKyAgICAgICAgICIgICBpZiBbIFwic2F2ZV91cmwgRU5EXCIgPSBcIiRsaW5l
XCIgXSA7IHRoZW4gIgorICAgICAgICAgIiAgICAgIHJtIFwnIiwgZnVsbF9maWxlbmFtZSwgIi5s
b2cudG1wXCcgOyAiCisgICAgICAgICAiICAgICAgZXhpdCA7ICIKKyAgICAgICAgICIgICBmaSA7
ICIKKyAgICAgICAgICJkb25lIDE+JjIiLCBOVUxMKTsKKyAgICAgIGRsX2FyZ3ZbaSsrXSA9IChj
aGFyKikic2giOworICAgICAgZGxfYXJndltpKytdID0gKGNoYXIqKSItYyI7CisgICAgICBkbF9h
cmd2W2krK10gPSBmYWtld2dldDsKKyAgICAgIGRsX2FyZ3ZbaSsrXSA9IE5VTEw7CisgICB9CiAg
ICBEYXRhRG9uZSA9IDA7CiAgICBMb2dEb25lID0gMDsKICAgIFVwZGF0ZXNEb25lID0gMDsKQEAg
LTQzMCw2ICs0NDcsNyBAQCBETEl0ZW06OkRMSXRlbShjb25zdCBjaGFyICpmdWxsX2ZpbGVuYW1l
CiBETEl0ZW06On5ETEl0ZW0oKQogewogICAgZnJlZShzaG9ydG5hbWUpOworICAgZEZyZWUoZmFr
ZXdnZXQpOwogICAgZEZyZWUoZnVsbG5hbWUpOwogICAgZEZyZWUodGFyZ2V0X2Rpcik7CiAgICBm
cmVlKGxvZ190ZXh0KTsKQEAgLTg3NCw3ICs4OTIsNiBAQCBzdGF0aWMgdm9pZCByZWFkX3JlcV9j
YihpbnQgcmVxX2ZkLCB2b2lkCiAgICAgICBhX0RwaXBfZHNoX2Nsb3NlKHNoKTsKICAgICAgIGdv
dG8gZW5kOwogICAgfQotICAgYV9EcGlwX2RzaF9jbG9zZShzaCk7CiAgICBfTVNHKCJSZWNlaXZl
ZCB0YWc9eyVzfVxuIiwgZHBpcF90YWcpOwogCiAgICBpZiAoKGNtZCA9IGFfRHBpcF9nZXRfYXR0
cihkcGlwX3RhZywgImNtZCIpKSA9PSBOVUxMKSB7CkBAIC04OTcsOSArOTE0LDI1IEBAIHN0YXRp
YyB2b2lkIHJlYWRfcmVxX2NiKGludCByZXFfZmQsIHZvaWQKICAgICAgIE1TRygiRmFpbGVkIHRv
IHBhcnNlICdkZXN0aW5hdGlvbicgaW4geyVzfVxuIiwgZHBpcF90YWcpOwogICAgICAgZ290byBl
bmQ7CiAgICB9CisgICAvKiB1c2VyLWFnZW50IGlzIG9wdGlvbmFsLiBTb21lIHNjaGVtZXMgZG8g
bm90IHVzZSBpdCAqLwogICAgaWYgKCEodWEgPSBhX0RwaXBfZ2V0X2F0dHIoZHBpcF90YWcsICJ1
c2VyLWFnZW50IikpKXsKICAgICAgIE1TRygiRmFpbGVkIHRvIHBhcnNlICd1c2VyLWFnZW50JyBp
biB7JXN9XG4iLCBkcGlwX3RhZyk7Ci0gICAgICBnb3RvIGVuZDsKKyAgICAgIHVhID0gKGNoYXIq
KSJcIlwiIjsKKyAgIH0KKyAgIC8qCisgICAgKiBBc2sgZGlsbG8gdG8gInNhdmVfdXJsIiBmb3Ig
c2NoZW1lcyBub3Qgc3VwcG9ydGVkIGJ5IHdnZXQuCisgICAgKiBJZiBpdCdzIG5vdCBjYWNoZWQs
IERpbGxvIHNlbmRzIHRoZSBEUEkgY29tbWFuZCB0byB0aGUgY29ycmVjdCBEUEkuCisgICAgKi8K
KyAgIGlmICgoc3RybmNtcCh1cmwsICJmdHA6Iiw0KSAhPSAwKSB8fCAKKyAgICAgIChzdHJuY21w
KHVybCwgImZ0cHM6Iiw1KSAhPSAwKSB8fCAKKyAgICAgIChzdHJuY21wKHVybCwgImh0dHA6Iiw1
KSAhPSAwKSB8fCAKKyAgICAgIChzdHJuY21wKHVybCwgImh0dHBzOiIsNikgIT0gMCkpIHsKKyAg
ICAgIGNoYXIgKmRfY21kOworICAgICAgTVNHKCJ1bmtub3duIHNjaGVtZS9wcm90b2NvbCBpbiB7
JXN9IGFzayBzYXZlX3VybCB0byBkaWxsb1xuIiwgdXJsKTsKKyAgICAgIGRfY21kID0gYV9EcGlw
X2J1aWxkX2NtZCgiY21kPSVzIHVybD0lcyBkZXN0aW5hdGlvbj0lcyIsIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJzYXZlX3VybCIsIHVybCwgZGxfZGVzdCk7CisgICAgICBhX0Rw
aXBfZHNoX3dyaXRlX3N0cihzaCwgMSwgZF9jbWQpOworICAgICAgZEZyZWUoZF9jbWQpOwogICAg
fQogICAgZGxfd2luLT5hZGQoZGxfZGVzdCwgdXJsLCB1YSk7CiAKZGlmZiAtcHJ1IGEvZHBpL2Zp
bGUuYyBiL2RwaS9maWxlLmMKLS0tIGEvZHBpL2ZpbGUuYwkyMDI2LTAzLTI5IDE4OjAyOjExLjAw
MDAwMDAwMCArMDIwMAorKysgYi9kcGkvZmlsZS5jCTIwMjYtMDctMDMgMDI6MDc6MTIuMzE3MDM3
NTQ2ICswMjAwCkBAIC03NzQsNiArNzc0LDk1IEBAIHN0YXRpYyBpbnQgRmlsZV9zZW5kX2ZpbGUo
Q2xpZW50SW5mbyAqY2wKIH0KIAogLyoKKyAqIFdyaXRlIGxvZyBhbmQgc2F2ZSB0aGUgZmlsZSBp
dHNlbGYuCisgKi8KK3N0YXRpYyB2b2lkIEZpbGVfc2F2ZV9maWxlKGNvbnN0IGNoYXIgKnVybCwg
Y29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqZHN0KQoreworCisgICBjb25zdCBjaGFyICpj
dDsKKyAgIGNvbnN0IGNoYXIgKnVua25vd25fdHlwZSA9ICJhcHBsaWNhdGlvbi9vY3RldC1zdHJl
YW0iOworICAgY2hhciBidWZbTEJVRl0sICpsb2dfbmFtZTsKKyAgIEZJTEUgKmxvZ19mcDsKKyAg
IGludCB3cl9mZCwgcmRfZmQsIHdyX3N0LCByZF9zdDsKKyAgIHN0cnVjdCBzdGF0IHNiOworCisg
ICBsb2dfbmFtZSA9IGRTdHJjb25jYXQoZHN0LCAiLmxvZy50bXAiLCBOVUxMKTsKKyAgIGlmICgo
bG9nX2ZwID0gZm9wZW4obG9nX25hbWUsICJ3YiIpKSA9PSBOVUxMKSB7CisgICAgICBNU0coIlxu
RVJST1Igb3BlbmluZyBsb2cgZmlsZSBmb3Igc2F2ZV91cmwgJyVzJzogJXNcbiIsCisgICAgICAg
ICAgICBsb2dfbmFtZSwgZFN0cmVycm9yKGVycm5vKSk7CisgICB9CisgICBkRnJlZShsb2dfbmFt
ZSk7CisKKyAgIGZwcmludGYobG9nX2ZwLCAic2F2ZV91cmwgPGRwaSBjbWQ9J3NhdmVfdXJsJyB1
cmw9JyVzJyBkZXN0aW5hdGlvbj0nJXMnICc+XG5cbiIsIHVybCwgZHN0KTsKKyAgIGZmbHVzaChs
b2dfZnApOworCisgICBpZiAoc3RhdChwYXRoLCAmc2IpICE9IDApIHsKKyAgICAgIGZwcmludGYo
bG9nX2ZwLCAic2F2ZV91cmwgbm90IG9rOiBGaWxlICclcycgZG8gbm90IGV4aXN0XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgInNhdmVfdXJsIEVORFxuXG4iLCBwYXRoKTsKKyAgICAgIGZmbHVz
aChsb2dfZnApOworICAgICAgTVNHKCJcbkVSUk9SIGZvciBzYXZlX3VybCAnJXMnOiBEbyBub3Qg
ZXhpc3RcbiIsIHBhdGgpOworICAgICAgZmNsb3NlKGxvZ19mcCk7CisgICAgICByZXR1cm4gOwor
ICAgfQorCisgICBpZiAoIShjdCA9IEZpbGVfY29udGVudF90eXBlKHBhdGgpKSkKKyAgICAgIGN0
ID0gdW5rbm93bl90eXBlOworCisgICBmcHJpbnRmKGxvZ19mcCwgIkxlbmd0aDogJWxkICguLi4p
IFslc11cblxuIiwgc2Iuc3Rfc2l6ZSwgY3QpOworICAgZmZsdXNoKGxvZ19mcCk7CisKKyAgIC8q
IGFsd2F5cyAocmUpd3JpdGUgZnJvbSAwICovCisgICBpZiAoKHdyX2ZkID0gb3Blbihkc3QsIE9f
V1JPTkxZIHwgT19UUlVOQyB8IE9fQ1JFQVQgfCBPX05PTkJMT0NLLCAKKyAgICAgICAgICAgICAg
ICAgICBTX0lSVVNSIHwgU19JV1VTUikpIDwgMCkgeworICAgICAgZnByaW50Zihsb2dfZnAsICJz
YXZlX3VybCBub3Qgb2s6IENhbid0IGNyZWF0ZS9vcGVuIGRlc3RpbmF0aW9uICclcydcbiIgXAor
ICAgICAgICAgICAgICAgICAgICAgICJzYXZlX3VybCBFTkRcblxuIiwgZHN0KTsKKyAgICAgIGZm
bHVzaChsb2dfZnApOworICAgICAgTVNHKCJcbkVSUk9SIG9wZW4gZmlsZSB0byBzYXZlX3VybCAn
JXMnOiAlc1xuIiwgZHN0LCBkU3RyZXJyb3IoZXJybm8pKTsKKyAgICAgIGZjbG9zZShsb2dfZnAp
OworICAgICAgcmV0dXJuIDsKKyAgIH0KKworICAgaWYgKChyZF9mZCA9IG9wZW4ocGF0aCwgT19S
RE9OTFkgfCBPX05PTkJMT0NLKSkgPCAwKSB7CisgICAgICBmcHJpbnRmKGxvZ19mcCwgInNhdmVf
dXJsIG5vdCBvazogQ2FuJ3Qgb3BlbiBzb3VyY2UgZmlsZSAnJXMnXG4iIFwKKyAgICAgICAgICAg
ICAgICAgICAgICAic2F2ZV91cmwgRU5EXG5cbiIsIHBhdGgpOworICAgICAgZmZsdXNoKGxvZ19m
cCk7CisgICAgICBNU0coIlxuRVJST1Igb3BlbiBmaWxlIHRvIHNhdmVfdXJsICclcyc6ICVzXG4i
LCBwYXRoLCBkU3RyZXJyb3IoZXJybm8pKTsKKyAgICAgIGNsb3NlKHdyX2ZkKTsKKyAgICAgIGZj
bG9zZShsb2dfZnApOworICAgICAgcmV0dXJuIDsKKyAgIH0KKworICAgLyogbGV0J3MgY29weSAq
LworICAgd2hpbGUgKCgocmRfc3QgPSByZWFkKHJkX2ZkLCBidWYsIExCVUYpKSA+IDApIHx8IChl
cnJubyA9PSBFSU5UUikpIHsKKyAgICAgIGlmKGVycm5vID09IEVJTlRSKQorICAgICAgICAgY29u
dGludWUgOworICAgICAgd3Jfc3QgPSB3cml0ZSh3cl9mZCwgYnVmLCByZF9zdCk7CisgICAgICBp
ZiAoKHdyX3N0ICE9IHJkX3N0KSAmJiAoZXJybm8gPT0gRUlOVFIpKSB7CisgICAgICAgICB3cl9z
dCA9IHdyaXRlKHdyX2ZkLCBidWYrd3Jfc3QsIHJkX3N0LXdyX3N0KTsKKyAgICAgIH0gZWxzZSBp
ZiAod3Jfc3QgIT0gcmRfc3QpIHsKKyAgICAgICAgIGZwcmludGYobG9nX2ZwLCAic2F2ZV91cmwg
bm90IG9rOiBDYW4ndCB3cml0ZSBkZXN0IGZpbGUgJyVzJ1xuIiBcCisgICAgICAgICAgICAgICAg
ICAgICAgICAgInNhdmVfdXJsIEVORFxuXG4iLCBkc3QpOworICAgICAgICAgZmZsdXNoKGxvZ19m
cCk7CisgICAgICAgICBNU0coIlxuRVJST1Igd3JpdGluZyBmaWxlIHRvIHNhdmVfdXJsICclcyc6
ICVzXG4iLCBkc3QsIGRTdHJlcnJvcihlcnJubykpOworICAgICAgfQorICAgfQorICAgaWYgKHJk
X3N0IDwgMCkgeworICAgICAgZnByaW50Zihsb2dfZnAsICJzYXZlX3VybCBub3Qgb2s6IENhbid0
IHJlYWQgc3JjIGZpbGUgJyVzJ1xuIiBcCisgICAgICAgICAgICAgICAgICAgICAgInNhdmVfdXJs
IEVORFxuXG4iLCBkc3QpOworICAgICAgZmZsdXNoKGxvZ19mcCk7CisgICAgICBNU0coIlxuRVJS
T1IgcmVhZGluZyBmaWxlIHRvIHNhdmVfdXJsICclcyc6ICVzXG4iLCBwYXRoLCBkU3RyZXJyb3Io
ZXJybm8pKTsKKyAgIH0gZWxzZSB7CisgICAgICBmcHJpbnRmKGxvZ19mcCwgInNhdmVfdXJsIHll
cyBva1xuIiBcCisgICAgICAgICAgICAgICAgICAgICAgInNhdmVfdXJsIEVORFxuXG4iKTsKKyAg
ICAgIGZmbHVzaChsb2dfZnApOworICAgfQorCisgICBmY2xvc2UobG9nX2ZwKTsKKyAgIGNsb3Nl
KHdyX2ZkKTsKKyAgIGNsb3NlKHJkX2ZkKTsKK30KKworLyoKICAqIEdpdmVuIGEgaGV4IG9jdGV0
IChlMywgMkYsIDIwKSwgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nCiAgKiBjaGFyYWN0ZXIgaWYg
dGhlIG9jdGV0IGlzIHZhbGlkLCBhbmQgLTEgb3RoZXJ3aXNlCiAgKi8KQEAgLTkzMSw3ICsxMDIw
LDcgQEAgc3RhdGljIHZvaWQgRmlsZV9yZW1vdmVfY2xpZW50KENsaWVudEluZgogICovCiBzdGF0
aWMgdm9pZCBGaWxlX3NlcnZlX2NsaWVudCh2b2lkICpkYXRhLCBpbnQgZl93cml0ZSkKIHsKLSAg
IGNoYXIgKmRwaXBfdGFnID0gTlVMTCwgKmNtZCA9IE5VTEwsICp1cmwgPSBOVUxMLCAqcGF0aDsK
KyAgIGNoYXIgKmRwaXBfdGFnID0gTlVMTCwgKmNtZCA9IE5VTEwsICp1cmwgPSBOVUxMLCAqcGF0
aCwgKmRzdCA9IE5VTEw7CiAgICBDbGllbnRJbmZvICpjbGllbnQgPSBkYXRhOwogICAgaW50IHN0
OwogCkBAIC05NTgsNiArMTA0Nyw3IEBAIHN0YXRpYyB2b2lkIEZpbGVfc2VydmVfY2xpZW50KHZv
aWQgKmRhdGEKICAgICAgICAgICAgIGNtZCA9IGFfRHBpcF9nZXRfYXR0cihkcGlwX3RhZywgImNt
ZCIpOwogICAgICAgICAgICAgdXJsID0gYV9EcGlwX2dldF9hdHRyKGRwaXBfdGFnLCAidXJsIik7
CiAgICAgICAgICAgICBwYXRoID0gRmlsZV9ub3JtYWxpemVfcGF0aCh1cmwpOworICAgICAgICAg
ICAgZHN0ID0gYV9EcGlwX2dldF9hdHRyKGRwaXBfdGFnLCAiZGVzdGluYXRpb24iKTsKICAgICAg
ICAgICAgIGlmIChjbWQpIHsKICAgICAgICAgICAgICAgIGlmIChzdHJjbXAoY21kLCAiRHBpQnll
IikgPT0gMCkgewogICAgICAgICAgICAgICAgICAgRFBJQllFID0gMTsKQEAgLTk2NiwxMyArMTA1
NiwxNyBAQCBzdGF0aWMgdm9pZCBGaWxlX3NlcnZlX2NsaWVudCh2b2lkICpkYXRhCiAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKHVybCAmJiBkU3RybkFzY2lpQ2FzZWNtcCh1cmwsICJkcGk6Iiwg
NCkgPT0gMCAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJjbXAodXJsKzQsICIvZmls
ZS90b2dnbGUiKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICBGaWxlX3RvZ2dsZV9odG1sX3N0
eWxlKGNsaWVudCk7Ci0gICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhdGgpIHsKKyAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAocGF0aCAmJiBzdHJjbXAoY21kLCAib3Blbl91cmwiKSA9PSAwKSB7
CiAgICAgICAgICAgICAgICAgICBGaWxlX2dldChjbGllbnQsIHBhdGgsIHVybCk7CisgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKHBhdGggJiYgZHN0ICYmIHN0cmNtcChjbWQsICJzYXZlX3VybCIp
ID09IDApIHsKKyAgICAgICAgICAgICAgICAgIEZpbGVfc2F2ZV9maWxlKHVybCwgcGF0aCwgZHN0
KTsKKyAgICAgICAgICAgICAgICAgIGNsaWVudC0+ZmxhZ3MgfD0gRklMRV9ET05FOwogICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgIGNsaWVudC0+ZmxhZ3MgfD0gRklM
RV9FUlI7CiAgICAgICAgICAgICAgICAgICBNU0coIkVSUk9SOiBVUkwgd2FzICVzXG4iLCB1cmwp
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgZEZyZWUoZHN0
KTsKICAgICAgICAgICAgIGRGcmVlKHBhdGgpOwogICAgICAgICAgICAgZEZyZWUodXJsKTsKICAg
ICAgICAgICAgIGRGcmVlKGNtZCk7CmRpZmYgLXBydSBhL3NyYy9jYWNoZS5jIGIvc3JjL2NhY2hl
LmMKLS0tIGEvc3JjL2NhY2hlLmMJMjAyNi0wNC0xMiAwMDoxODoxOS4wMDAwMDAwMDAgKzAyMDAK
KysrIGIvc3JjL2NhY2hlLmMJMjAyNi0wNy0wMyAwMjowNzoxMi4zMTcwMzc1NDYgKzAyMDAKQEAg
LTEyMjksMTkgKzEyMjksNiBAQCBzdGF0aWMgdm9pZCBDYWNoZV9hdXRoX2VudHJ5KENhY2hlRW50
cnlfCiB9CiAKIC8qKgotICogQ2hlY2sgd2hldGhlciBhIFVSTCBzY2hlbWUgaXMgZG93bmxvYWRh
YmxlLgotICogQHJldHVybiAxIGVuYWJsZWQsIDAgZGlzYWJsZWQuCi0gKi8KLWludCBhX0NhY2hl
X2Rvd25sb2FkX2VuYWJsZWQoY29uc3QgRGlsbG9VcmwgKnVybCkKLXsKLSAgIGlmICghZFN0ckFz
Y2lpQ2FzZWNtcChVUkxfU0NIRU1FKHVybCksICJodHRwIikgfHwKLSAgICAgICAhZFN0ckFzY2lp
Q2FzZWNtcChVUkxfU0NIRU1FKHVybCksICJodHRwcyIpIHx8Ci0gICAgICAgIWRTdHJBc2NpaUNh
c2VjbXAoVVJMX1NDSEVNRSh1cmwpLCAiZnRwIikpCi0gICAgICByZXR1cm4gMTsKLSAgIHJldHVy
biAwOwotfQotCi0vKioKICAqIERvbid0IHByb2Nlc3MgZGF0YSBhbnkgZnVydGhlciwgYnV0IGxl
dCB0aGUgY2FjaGUgZmlsbCB0aGUgZW50cnkuCiAgKiAoQ3VycmVudGx5IHVzZWQgdG8gaGFuZGxl
IFdFQl9Sb290VXJsIHJlZGlyZWN0cywKICAqICBhbmQgdG8gaWdub3JlIGltYWdlIHJlZGlyZWN0
cyAtLUpjaWQpCkBAIC0xNDg2LDcgKzE0NzMsNyBAQCBzdGF0aWMgQ2FjaGVFbnRyeV90ICpDYWNo
ZV9wcm9jZXNzX3F1ZXVlCiAgICAgICBpZiAoT2ZmZXJEb3dubG9hZCkgewogICAgICAgICAgLyog
UmVtb3ZlIGVudHJ5IHdoZW4gJ2Nvbm4nIGlzIGFscmVhZHkgZG9uZSAqLwogICAgICAgICAgQ2Fj
aGVfZW50cnlfcmVtb3ZlKE5VTEwsIHVybCk7Ci0gICAgICAgICBpZiAoYV9DYWNoZV9kb3dubG9h
ZF9lbmFibGVkKHVybCkpIHsKKyAgICAgICAgIGlmIChhX0NhcGlfZG93bmxvYWRfZW5hYmxlZCh1
cmwpKSB7CiAgICAgICAgICAgICBDYWNoZV9zYXZlbGlua190ICpkYXRhID0gZE5ldyhDYWNoZV9z
YXZlbGlua190LCAxKTsKICAgICAgICAgICAgIGRhdGEtPmJ3ID0gQ2xpZW50X2J3OwogICAgICAg
ICAgICAgZGF0YS0+dXJsID0gYV9VcmxfZHVwKHVybCk7CmRpZmYgLXBydSBhL3NyYy9jYWNoZS5o
IGIvc3JjL2NhY2hlLmgKLS0tIGEvc3JjL2NhY2hlLmgJMjAyNi0wMy0yOSAxODowMjoxMS4wMDAw
MDAwMDAgKzAyMDAKKysrIGIvc3JjL2NhY2hlLmgJMjAyNi0wNy0wMyAwMjowNzoxMi4zMTcwMzc1
NDYgKzAyMDAKQEAgLTg0LDcgKzg0LDYgQEAgdWludF90IGFfQ2FjaGVfZ2V0X2ZsYWdzKGNvbnN0
IERpbGxvVXJsCiB1aW50X3QgYV9DYWNoZV9nZXRfZmxhZ3Nfd2l0aF9yZWRpcmVjdGlvbihjb25z
dCBEaWxsb1VybCAqdXJsKTsKIGJvb2xfdCBhX0NhY2hlX3Byb2Nlc3NfZGJ1ZihpbnQgT3AsIGNv
bnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBEaWxsb1VybCAqVXJsKTsKLWludCBhX0NhY2hlX2Rvd25sb2FkX2VuYWJsZWQoY29u
c3QgRGlsbG9VcmwgKnVybCk7CiB2b2lkIGFfQ2FjaGVfZW50cnlfcmVtb3ZlX2J5X3VybChEaWxs
b1VybCAqdXJsKTsKIHZvaWQgYV9DYWNoZV9mcmVlYWxsKHZvaWQpOwogQ2FjaGVDbGllbnRfdCAq
YV9DYWNoZV9jbGllbnRfZ2V0X2lmX3VuaXF1ZShpbnQgS2V5KTsKZGlmZiAtcHJ1IGEvc3JjL2Nh
cGkuYyBiL3NyYy9jYXBpLmMKLS0tIGEvc3JjL2NhcGkuYwkyMDI1LTEwLTI2IDE5OjE1OjA1LjAw
MDAwMDAwMCArMDEwMAorKysgYi9zcmMvY2FwaS5jCTIwMjYtMDctMDMgMDI6MDc6MTIuMzIxMDM2
ODA2ICswMjAwCkBAIC0yOTgsNiArMjk4LDExMSBAQCBzdGF0aWMgaW50IENhcGlfdXJsX3VzZXNf
ZHBpKERpbGxvVXJsICp1CiB9CiAKIC8qKgorICogQ2hlY2sgd2hldGhlciBhIFVSTCBzY2hlbWUg
aXMgZG93bmxvYWRhYmxlLgorICogQHJldHVybiAxIGVuYWJsZWQsIDAgZGlzYWJsZWQuCisgKi8K
K2ludCBhX0NhcGlfZG93bmxvYWRfZW5hYmxlZChjb25zdCBEaWxsb1VybCAqdXJsKQoreworICAg
RHN0ciAqc2VydmVyOworICAgaW50IGhhbmRsZWQ7CisKKyAgIGlmICghZFN0ckFzY2lpQ2FzZWNt
cChVUkxfU0NIRU1FKHVybCksICJodHRwIikgfHwKKyAgICAgICAhZFN0ckFzY2lpQ2FzZWNtcChV
UkxfU0NIRU1FKHVybCksICJodHRwcyIpIHx8CisgICAgICAgIWRTdHJBc2NpaUNhc2VjbXAoVVJM
X1NDSEVNRSh1cmwpLCAiZnRwIikgfHwKKyAgICAgICAhZFN0ckFzY2lpQ2FzZWNtcChVUkxfU0NI
RU1FKHVybCksICJmdHBzIikpCisgICAgICByZXR1cm4gMTsKKworICAgLyoKKyAgICAqIHByb3Rv
IERQSXMgc3VwcG9ydCAic2F2ZV91cmwiIGNvbW1hbmQgZm9yIGRvd25sb2FkcyAKKyAgICAqIGNo
ZWNrIGlmIHByb3RvY29sIGlzIGhhbmRsZWQgYnkgYSBEUEkKKyAgICAqLworICAgc2VydmVyID0g
ZFN0cl9uZXcoInByb3RvLiIpOworICAgZFN0cl9hcHBlbmQoc2VydmVyLCBVUkxfU0NIRU1FKHVy
bCkpOworICAgaGFuZGxlZCA9IGFfRHBpYXBpX2lzX3NlcnZpY2VfaGFuZGxlZChzZXJ2ZXItPnN0
cik7CisgICBkU3RyX2ZyZWUoc2VydmVyLCAxKTsKKworICAgcmV0dXJuIGhhbmRsZWQ7Cit9CisK
Ky8qCisgKiBSZWNlaXZlIGRhdGEgZnJvbSB0aGUgY2FjaGUgYW5kIHNhdmUgaXQgdG8gYSBsb2Nh
bCBmaWxlIHdpdGggbG9nCisgKi8KK3N0YXRpYyB2b2lkIENhcGlfZHBpX3NhdmVfdXJsX2NiKGlu
dCBPcCwgQ2FjaGVDbGllbnRfdCAqQ2xpZW50KQoreworICAgRGlsbG9XZWIgKldlYiA9IENsaWVu
dC0+V2ViOworICAgaW50IEJ5dGVzOworCisgICBpZiAoT3ApeworICAgICAgZmZsdXNoKFdlYi0+
c3RyZWFtKTsKKyAgICAgIGZjbG9zZShXZWItPnN0cmVhbSk7CisgICAgICBmcHJpbnRmKFdlYi0+
bG9nX3N0cmVhbSwgInNhdmVfdXJsIHllcyBva1xuIiBcCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInNhdmVfdXJsIEVORFxuXG4iKTsKKyAgICAgIGZmbHVzaChXZWItPmxvZ19zdHJl
YW0pOworICAgICAgZmNsb3NlKFdlYi0+bG9nX3N0cmVhbSk7CisgICB9IGVsc2UgeworICAgICAg
aWYgKChCeXRlcyA9IENsaWVudC0+QnVmU2l6ZSAtIFdlYi0+U2F2ZWRCeXRlcykgPiAwKSB7Cisg
ICAgICAgICBCeXRlcyA9IGZ3cml0ZSgoY2hhciAqKSBDbGllbnQtPkJ1ZiArIFdlYi0+U2F2ZWRC
eXRlcywgMSwgQnl0ZXMsIFdlYi0+c3RyZWFtKTsKKyAgICAgICAgIFdlYi0+U2F2ZWRCeXRlcyAr
PSBCeXRlczsKKyAgICAgIH0KKyAgIH0KK30KKworLyoqCisgKiAuCisgKi8KK3ZvaWQgQ2FwaV9k
cGlfc2F2ZV91cmwoQnJvd3NlcldpbmRvdyAqYncsIGNoYXIgKnNlcnZlciwgY2hhciAqZHBpcF90
YWcpCit7CisgICBjaGFyICp1cmwgPSBOVUxMLCAqZHN0ID0gTlVMTCwgKmxvZ19uYW1lID0gTlVM
TCwgKmJ1ZjsKKyAgIGNoYXIgKnByb3RvX3NlcnZlcjsKKyAgIEZJTEUgKmxvZ19mcCA9IE5VTEw7
CisgICBEaWxsb1VybCAqZHVybCA9IE5VTEw7CisgICBEaWxsb1dlYiAqV2ViID0gTlVMTDsKKyAg
IGludCBidWZfc2l6ZTsKKworICAgTVNHKCJDYXBpX2RwaV9zYXZlX3VybDogYXNrZWQgJXNcblxu
IiwgZHBpcF90YWcpOworCisgICB1cmwgPSBhX0RwaXBfZ2V0X2F0dHIoZHBpcF90YWcsICJ1cmwi
KTsKKyAgIGRzdCA9IGFfRHBpcF9nZXRfYXR0cihkcGlwX3RhZywgImRlc3RpbmF0aW9uIik7CisK
KyAgIGxvZ19uYW1lID0gZFN0cmNvbmNhdChkc3QsICIubG9nLnRtcCIsIE5VTEwpOworICAgaWYg
KChsb2dfZnAgPSBmb3Blbihsb2dfbmFtZSwgIndiIikpID09IE5VTEwpIHsKKyAgICAgIE1TRygi
XG5FUlJPUiBvcGVuaW5nIGxvZyBmaWxlIGZvciBzYXZlX3VybCAnJXMnOiAlc1xuIiwKKyAgICAg
ICAgICAgIGxvZ19uYW1lLCBkU3RyZXJyb3IoZXJybm8pKTsKKyAgIH0KKyAgIGRGcmVlKGxvZ19u
YW1lKTsKKworCisgICBkdXJsID0gYV9VcmxfbmV3KHVybCwgTlVMTCk7CisgICBpZiAoYV9DYXBp
X2dldF9mbGFnc193aXRoX3JlZGlyZWN0aW9uKGR1cmwpICYgQ0FQSV9Jc0NhY2hlZCkgeworICAg
ICAgZnByaW50Zihsb2dfZnAsICJzYXZlX3VybCA8ZHBpIGNtZD0nc2F2ZV91cmwnIHVybD0nJXMn
IGRlc3RpbmF0aW9uPSclcycgJz5cblxuIiwgdXJsLCBkc3QpOworICAgICAgZmZsdXNoKGxvZ19m
cCk7CisKKyAgICAgIGFfQ2FwaV9nZXRfYnVmKGR1cmwsICZidWYsICZidWZfc2l6ZSk7CisgICAg
ICBmcHJpbnRmKGxvZ19mcCwgIkxlbmd0aDogJWQgKC4uLikgWyVzXVxuXG4iLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJ1Zl9zaXplLCBhX0NhcGlfZ2V0X2NvbnRlbnRfdHlwZShkdXJsKSk7
CisgICAgICBmZmx1c2gobG9nX2ZwKTsKKworICAgICAgV2ViID0gYV9XZWJfbmV3KGJ3LCBkdXJs
LCBOVUxMKTsKKyAgICAgIFdlYi0+ZmlsZW5hbWUgPSBkU3RyZHVwKGRzdCk7CisgICAgICBXZWIt
PmxvZ19zdHJlYW0gPSBsb2dfZnA7CisgICAgICBXZWItPmZsYWdzIHw9IFdFQl9Eb3dubG9hZDsK
KyAgICAgIGFfQ2FwaV9vcGVuX3VybChXZWIsIENhcGlfZHBpX3NhdmVfdXJsX2NiLCBXZWIpOwor
ICAgICAgCisgICB9IGVsc2UgaWYgKCBDYXBpX3VybF91c2VzX2RwaShkdXJsLCAmcHJvdG9fc2Vy
dmVyKSAmJiAKKyAgICAgICAgICAgICAgIGFfRHBpYXBpX2lzX3NlcnZpY2VfaGFuZGxlZChwcm90
b19zZXJ2ZXIpICkgeworICAgICAgYV9DYXBpX2RwaV9zZW5kX2NtZChkdXJsLCBidywgZHBpcF90
YWcsIHByb3RvX3NlcnZlciwgMSk7CisgICB9IGVsc2UgeworICAgICAgTVNHKCJDYXBpX2RwaV9z
YXZlX3VybDogcHJvdG8gbm90IGhhbmRsZWQgb3IgaW4gZGlsbG8gY2FjaGVcblxuIik7CisgICAg
ICBmcHJpbnRmKGxvZ19mcCwgInNhdmVfdXJsIG5vdCBvazogJyVzJyBub3QgaGFuZGxlZCBvciBp
biBkaWxsbyBjYWNoZVxuIiBcCisgICAgICAgICAgICAgICAgICAgICAgInNhdmVfdXJsIEVORFxu
XG4iLCB1cmwpOworICAgICAgZmZsdXNoKGxvZ19mcCk7CisgICAgICBmY2xvc2UobG9nX2ZwKTsK
KyAgIH0KKworICAgYV9VcmxfZnJlZShkdXJsKTsKK30KKworLyoqCiAgKiBCdWlsZCB0aGUgZHBp
cCBjb21tYW5kIHRhZywgYWNjb3JkaW5nIHRvIFVSTCBhbmQgc2VydmVyLgogICovCiBzdGF0aWMg
Y2hhciAqQ2FwaV9kcGlfYnVpbGRfY21kKERpbGxvV2ViICp3ZWIsIGNoYXIgKnNlcnZlcikKQEAg
LTQxNiw3ICs1MjEsNyBAQCBpbnQgYV9DYXBpX29wZW5fdXJsKERpbGxvV2ViICp3ZWIsIENBX0Nh
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYi0+ZmlsZW5hbWUsIGRTdHJlcnJvcihlcnJu
bykpOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChh
X0NhY2hlX2Rvd25sb2FkX2VuYWJsZWQod2ViLT51cmwpKSB7CisgICAgICAgIH0gZWxzZSBpZiAo
YV9DYXBpX2Rvd25sb2FkX2VuYWJsZWQod2ViLT51cmwpKSB7CiAgICAgICAgICAgIHNlcnZlciA9
ICJkb3dubG9hZHMiOwogICAgICAgICAgICBjbWQgPSBDYXBpX2RwaV9idWlsZF9jbWQod2ViLCBz
ZXJ2ZXIpOwogICAgICAgICAgICBhX0NhcGlfZHBpX3NlbmRfY21kKHdlYi0+dXJsLCB3ZWItPmJ3
LCBjbWQsIHNlcnZlciwgMSk7CkBAIC03OTUsNiArOTAwLDkgQEAgdm9pZCBhX0NhcGlfY2NjKGlu
dCBPcCwgaW50IEJyYW5jaCwgaW50CiAgICAgICAgICAgICAgICAgKiBhX0NhcGlfb3Blbl91cmwo
KSBhbHJlYWR5IGFkZGVkIGEgbmV3IGNhY2hlIGVudHJ5LAogICAgICAgICAgICAgICAgICogYW5k
IGEgY2xpZW50IGZvciBpdC4KICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgfSBlbHNl
IGlmIChzdHJjbXAoRGF0YTIsICJzYXZlX3VybCIpID09IDApIHsKKyAgICAgICAgICAgICAgIC8q
IEEgRFBJIGFzayBzYXZlX3VybDogc2F2ZSBmcm9tIGNhY2hlIG9yIGEgYXNrIGEgcHJvdG8gRFBJ
ICovCisgICAgICAgICAgICAgICBDYXBpX2RwaV9zYXZlX3VybChjb25uLT5idywgY29ubi0+c2Vy
dmVyLCBEYXRhMSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
IGNhc2UgT3BFbmQ6CmRpZmYgLXBydSBhL3NyYy9jYXBpLmggYi9zcmMvY2FwaS5oCi0tLSBhL3Ny
Yy9jYXBpLmgJMjAyNS0wNi0zMCAyMjoxNTo0My4wMDAwMDAwMDAgKzAyMDAKKysrIGIvc3JjL2Nh
cGkuaAkyMDI2LTA3LTAzIDAyOjA3OjEyLjMyMTAzNjgwNiArMDIwMApAQCAtMzEsNiArMzEsNyBA
QCBjb25zdCBjaGFyICphX0NhcGlfc2V0X2NvbnRlbnRfdHlwZShjb25zCiBpbnQgYV9DYXBpX2dl
dF9mbGFncyhjb25zdCBEaWxsb1VybCAqVXJsKTsKIGludCBhX0NhcGlfZ2V0X2ZsYWdzX3dpdGhf
cmVkaXJlY3Rpb24oY29uc3QgRGlsbG9VcmwgKlVybCk7CiBpbnQgYV9DYXBpX2RwaV92ZXJpZnlf
cmVxdWVzdChCcm93c2VyV2luZG93ICpidywgRGlsbG9VcmwgKnVybCk7CitpbnQgYV9DYXBpX2Rv
d25sb2FkX2VuYWJsZWQoY29uc3QgRGlsbG9VcmwgKnVybCk7CiBpbnQgYV9DYXBpX2RwaV9zZW5k
X2RhdGEoY29uc3QgRGlsbG9VcmwgKnVybCwgdm9pZCAqYncsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqZGF0YSwgaW50IGRhdGFfc3osIGNoYXIgKnNlcnZlciwgaW50IGZsYWdzKTsK
IGludCBhX0NhcGlfZHBpX3NlbmRfY21kKERpbGxvVXJsICp1cmwsIHZvaWQgKmJ3LCBjaGFyICpj
bWQsIGNoYXIgKnNlcnZlciwKZGlmZiAtcHJ1IGEvc3JjL2RwaWFwaS5jIGIvc3JjL2RwaWFwaS5j
Ci0tLSBhL3NyYy9kcGlhcGkuYwkyMDI1LTA2LTMwIDIyOjE1OjQzLjAwMDAwMDAwMCArMDIwMAor
KysgYi9zcmMvZHBpYXBpLmMJMjAyNi0wNy0wMyAwMjowNzoxMi4zMjEwMzY4MDYgKzAyMDAKQEAg
LTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlICJkcGlhcGkuaCIgIC8qIGZvciBwcm90b3R5cGVzICov
CiAjaW5jbHVkZSAiZGlhbG9nLmhoIgogI2luY2x1ZGUgIi4uL2RwaXAvZHBpcC5oIgorI2luY2x1
ZGUgIklPL1VybC5oIgogCiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzksMyArODAsMTUg
QEAgdm9pZCBhX0RwaWFwaV9kaWFsb2coQnJvd3NlcldpbmRvdyAqYncsCiAgICBkRnJlZSh0aXRs
ZSk7IGRGcmVlKG1zZyk7CiB9CiAKKy8qKgorICogQ2hlY2sgaWYgZHBpZCBrbm93cyBhIGRwaSB0
byBoYW5kbGUgYSBzZXJ2aWNlCisgKiAoQSBxdWVyeSBpcyBzZW50IHRvIGRwaWQgYW5kIHRoZW4g
aXRzIGFuc3dlciBwYXJzZWQpCisgKiBub3RlOiBhcyB0aGUgYXZhaWxhYmxlIHNlcnZlcnMgYW5k
L29yIHRoZSBkcGlzIGNhbiBjaGFuZ2UgYXQgYW55IHRpbWUsIAorICogICAgICAgd2UnbGwgYXNr
IGVhY2ggdGltZS4KKyAqIEByZXR1cm4gVFJVRSBpZiBzZXJ2aWNlIGhhbmRsZWQsIEZBTFNFIGlm
IG5vdCB0b2RheQorICovCitpbnQgYV9EcGlhcGlfaXNfc2VydmljZV9oYW5kbGVkKGNvbnN0IGNo
YXIgKnNlcnZlcl9uYW1lKQoreworICAgcmV0dXJuICgoYV9EcGlfZ2V0X3NlcnZlcl9wb3J0KHNl
cnZlcl9uYW1lKSA9PSAtMSkgPyBGQUxTRSA6IFRSVUUpOworfQorCmRpZmYgLXBydSBhL3NyYy9k
cGlhcGkuaCBiL3NyYy9kcGlhcGkuaAotLS0gYS9zcmMvZHBpYXBpLmgJMjAyMy0xMi0wNyAyMjox
MDoxOC4wMDAwMDAwMDAgKzAxMDAKKysrIGIvc3JjL2RwaWFwaS5oCTIwMjYtMDctMDMgMDI6MDc6
MTIuMzIxMDM2ODA2ICswMjAwCkBAIC0xLDMgKzEsNCBAQAogCiB2b2lkIGFfRHBpYXBpX2RpYWxv
ZyhCcm93c2VyV2luZG93ICpidywgY2hhciAqc2VydmVyLCBjaGFyICpkcGlwX3RhZyk7CitpbnQg
YV9EcGlhcGlfaXNfc2VydmljZV9oYW5kbGVkKGNvbnN0IGNoYXIgKnNlcnZlcl9uYW1lKTsKIApk
aWZmIC1wcnUgYS9zcmMvSU8vZHBpLmMgYi9zcmMvSU8vZHBpLmMKLS0tIGEvc3JjL0lPL2RwaS5j
CTIwMjYtMDMtMjkgMTg6MDI6MTEuMDAwMDAwMDAwICswMjAwCisrKyBiL3NyYy9JTy9kcGkuYwky
MDI2LTA3LTAzIDAyOjA3OjEyLjMyNTAzNjA2NiArMDIwMApAQCAtMjM5LDYgKzIzOSwxMCBAQCBz
dGF0aWMgdm9pZCBEcGlfcGFyc2VfdG9rZW4oZHBpX2Nvbm5fdCAqCiAgICAgICB1cmxzdHIgPSBh
X0RwaXBfZ2V0X2F0dHJfbChUb2ssIGNvbm4tPlRva1NpemUsICJ1cmwiKTsKICAgICAgIGFfQ2hh
aW5fZmNiKE9wU2VuZCwgY29ubi0+SW5mb1JlY3YsIHVybHN0ciwgY21kKTsKICAgICAgIGRGcmVl
KHVybHN0cik7CisKKyAgIH0gZWxzZSBpZiAoc3RyY21wKGNtZCwgInNhdmVfdXJsIikgPT0gMCkg
eworICAgICAgLyogc2VuZCB0aGUgZHBpcCB0YWcgKi8KKyAgICAgIGFfQ2hhaW5fZmNiKE9wU2Vu
ZCwgY29ubi0+SW5mb1JlY3YsIHRhZywgY21kKTsKICAgIH0KICAgIGRGcmVlKGNtZCk7CiAKQEAg
LTUyMyw3ICs1MjcsNyBAQCBzdGF0aWMgaW50IERwaV9ibG9ja2luZ19zdGFydF9kcGlkKHZvaWQp
CiAgKiAgICAgICB0aGF0IGNvbm5lY3RpbmcgZWFjaCB0aW1lIHNpZ25pZmljYW50bHkgZGVncmFk
ZXMgcGVyZm9ybWFuY2UsCiAgKiAgICAgICBhbiBvcHRpbWl6ZWQgYXBwcm9hY2ggY2FuIGJlIHRy
aWVkLgogICovCi1zdGF0aWMgaW50IERwaV9nZXRfc2VydmVyX3BvcnQoY29uc3QgY2hhciAqc2Vy
dmVyX25hbWUpCitpbnQgYV9EcGlfZ2V0X3NlcnZlcl9wb3J0KGNvbnN0IGNoYXIgKnNlcnZlcl9u
YW1lKQogewogICAgaW50IHNvY2tfZmQgPSAtMSwgZHBpX3BvcnQgPSAtMTsKICAgIGludCBkcGlk
X3BvcnQsIG9rID0gMDsKQEAgLTUzMiw3ICs1MzYsNyBAQCBzdGF0aWMgaW50IERwaV9nZXRfc2Vy
dmVyX3BvcnQoY29uc3QgY2hhCiAgICBzb2NrbGVuX3Qgc2luX3N6OwogCiAgICBkUmV0dXJuX3Zh
bF9pZl9mYWlsIChzZXJ2ZXJfbmFtZSAhPSBOVUxMLCBkcGlfcG9ydCk7Ci0gICBfTVNHKCJEcGlf
Z2V0X3NlcnZlcl9wb3J0OiBzZXJ2ZXJfbmFtZSA9IFslc11cbiIsIHNlcnZlcl9uYW1lKTsKKyAg
IF9NU0coImFfRHBpX2dldF9zZXJ2ZXJfcG9ydDogc2VydmVyX25hbWUgPSBbJXNdXG4iLCBzZXJ2
ZXJfbmFtZSk7CiAKICAgIC8qIFJlYWQgZHBpZCdzIHBvcnQgZnJvbSBzYXZlZCBmaWxlICovCiAg
ICBpZiAoRHBpX3JlYWRfY29tbV9rZXlzKCZkcGlkX3BvcnQpICE9IC0xKSB7CkBAIC01NDgsNyAr
NTUyLDcgQEAgc3RhdGljIGludCBEcGlfZ2V0X3NlcnZlcl9wb3J0KGNvbnN0IGNoYQogICAgICAg
c2luLnNpbl9wb3J0ID0gaHRvbnMoZHBpZF9wb3J0KTsKICAgICAgIGlmICgoc29ja19mZCA9IERw
aV9tYWtlX3NvY2tldF9mZCgpKSA9PSAtMSB8fAogICAgICAgICAgIGNvbm5lY3Qoc29ja19mZCwg
KHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpbl9zeikgPT0gLTEpIHsKLSAgICAgICAgIE1TRygi
RHBpX2dldF9zZXJ2ZXJfcG9ydDogJXNcbiIsIGRTdHJlcnJvcihlcnJubykpOworICAgICAgICAg
TVNHKCJhX0RwaV9nZXRfc2VydmVyX3BvcnQ6ICVzXG4iLCBkU3RyZXJyb3IoZXJybm8pKTsKICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICBvayA9IDE7CiAgICAgICB9CkBAIC01NjAsNyArNTY0LDcg
QEAgc3RhdGljIGludCBEcGlfZ2V0X3NlcnZlcl9wb3J0KGNvbnN0IGNoYQogICAgICAgX01TRygi
WyVzXVxuIiwgcmVxdWVzdCk7CiAKICAgICAgIGlmIChEcGlfYmxvY2tpbmdfd3JpdGUoc29ja19m
ZCwgcmVxdWVzdCwgc3RybGVuKHJlcXVlc3QpKSA9PSAtMSkgewotICAgICAgICAgTVNHKCJEcGlf
Z2V0X3NlcnZlcl9wb3J0OiAlc1xuIiwgZFN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICBNU0co
ImFfRHBpX2dldF9zZXJ2ZXJfcG9ydDogJXNcbiIsIGRTdHJlcnJvcihlcnJubykpOwogICAgICAg
fSBlbHNlIHsKICAgICAgICAgIG9rID0gMTsKICAgICAgIH0KQEAgLTU3MCw3ICs1NzQsNyBAQCBz
dGF0aWMgaW50IERwaV9nZXRfc2VydmVyX3BvcnQoY29uc3QgY2hhCiAgICAgICAvKiBHZXQgdGhl
IHJlcGx5ICovCiAgICAgICBvayA9IDA7CiAgICAgICBpZiAoKHJwbHkgPSBEcGlfYmxvY2tpbmdf
cmVhZChzb2NrX2ZkKSkgPT0gTlVMTCkgewotICAgICAgICAgTVNHKCJEcGlfZ2V0X3NlcnZlcl9w
b3J0OiBjYW4ndCByZWFkIHNlcnZlciBwb3J0IGZyb20gZHBpZC5cbiIpOworICAgICAgICAgTVNH
KCJhX0RwaV9nZXRfc2VydmVyX3BvcnQ6IGNhbid0IHJlYWQgc2VydmVyIHBvcnQgZnJvbSBkcGlk
LlxuIik7CiAgICAgICB9IGVsc2UgewogICAgICAgICAgb2sgPSAxOwogICAgICAgfQpAQCAtNTgx
LDggKzU4NSw4IEBAIHN0YXRpYyBpbnQgRHBpX2dldF9zZXJ2ZXJfcG9ydChjb25zdCBjaGEKICAg
ICAgIGNtZCA9IGFfRHBpcF9nZXRfYXR0cihycGx5LCAiY21kIik7CiAgICAgICBpZiAoc3RyY21w
KGNtZCwgInNlbmRfZGF0YSIpID09IDApIHsKICAgICAgICAgIHBvcnRfc3RyID0gYV9EcGlwX2dl
dF9hdHRyKHJwbHksICJtc2ciKTsKLSAgICAgICAgIF9NU0coIkRwaV9nZXRfc2VydmVyX3BvcnQ6
IHJwbHk9JXNcbiIsIHJwbHkpOwotICAgICAgICAgX01TRygiRHBpX2dldF9zZXJ2ZXJfcG9ydDog
cG9ydF9zdHI9JXNcbiIsIHBvcnRfc3RyKTsKKyAgICAgICAgIF9NU0coImFfRHBpX2dldF9zZXJ2
ZXJfcG9ydDogcnBseT0lc1xuIiwgcnBseSk7CisgICAgICAgICBfTVNHKCJhX0RwaV9nZXRfc2Vy
dmVyX3BvcnQ6IHBvcnRfc3RyPSVzXG4iLCBwb3J0X3N0cik7CiAgICAgICAgICBkcGlfcG9ydCA9
IHN0cnRvbChwb3J0X3N0ciwgTlVMTCwgMTApOwogICAgICAgICAgZEZyZWUocG9ydF9zdHIpOwog
ICAgICAgICAgb2sgPSAxOwpAQCAtNjA4LDcgKzYxMiw3IEBAIHN0YXRpYyBpbnQgRHBpX2Nvbm5l
Y3Rfc29ja2V0KGNvbnN0IGNoYXIKICAgIGNoYXIgKmNtZCA9IE5VTEw7CiAKICAgIC8qIFF1ZXJ5
IGRwaWQgZm9yIHRoZSBwb3J0IG51bWJlciBmb3IgdGhpcyBzZXJ2ZXIgKi8KLSAgIGlmICgoZHBp
X3BvcnQgPSBEcGlfZ2V0X3NlcnZlcl9wb3J0KHNlcnZlcl9uYW1lKSkgPT0gLTEpIHsKKyAgIGlm
ICgoZHBpX3BvcnQgPSBhX0RwaV9nZXRfc2VydmVyX3BvcnQoc2VydmVyX25hbWUpKSA9PSAtMSkg
ewogICAgICAgX01TRygiRHBpX2Nvbm5lY3Rfc29ja2V0OiBjYW4ndCBnZXQgcG9ydCBudW1iZXIg
Zm9yICVzXG4iLCBzZXJ2ZXJfbmFtZSk7CiAgICAgICByZXR1cm4gLTE7CiAgICB9CmRpZmYgLXBy
dSBhL3NyYy9JTy9VcmwuaCBiL3NyYy9JTy9VcmwuaAotLS0gYS9zcmMvSU8vVXJsLmgJMjAyNS0w
Ni0zMCAyMjoxNTo0My4wMDAwMDAwMDAgKzAyMDAKKysrIGIvc3JjL0lPL1VybC5oCTIwMjYtMDct
MDMgMDI6MDc6MTIuMzI1MDM2MDY2ICswMjAwCkBAIC0yNSw2ICsyNSw3IEBAIHZvaWQgYV9JT19j
Y2MgICAoaW50IE9wLCBpbnQgQnJhbmNoLCBpbnQKIHZvaWQgYV9EcGlfY2NjICAoaW50IE9wLCBp
bnQgQnJhbmNoLCBpbnQgRGlyLCBDaGFpbkxpbmsgKkluZm8sCiAgICAgICAgICAgICAgICAgIHZv
aWQgKkRhdGExLCB2b2lkICpEYXRhMik7CiAKK2ludCBhX0RwaV9nZXRfc2VydmVyX3BvcnQoY29u
c3QgY2hhciAqc2VydmVyX25hbWUpOwogY2hhciAqYV9EcGlfc2VuZF9ibG9ja2luZ19jbWQoY29u
c3QgY2hhciAqc2VydmVyX25hbWUsIGNvbnN0IGNoYXIgKmNtZCk7CiB2b2lkIGFfRHBpX2RpbGxv
X2V4aXQodm9pZCk7CiB2b2lkIGFfRHBpX2luaXQodm9pZCk7CmRpZmYgLXBydSBhL3NyYy93ZWIu
Y2MgYi9zcmMvd2ViLmNjCi0tLSBhL3NyYy93ZWIuY2MJMjAyNS0xMC0wOCAyMjo0NzowOS4wMDAw
MDAwMDAgKzAyMDAKKysrIGIvc3JjL3dlYi5jYwkyMDI2LTA3LTAzIDAyOjA3OjEyLjMyNTAzNjA2
NiArMDIwMApAQCAtMTMxLDYgKzEzMSw3IEBAIERpbGxvV2ViKiBhX1dlYl9uZXcoQnJvd3Nlcldp
bmRvdyAqYncsIGMKICAgIHdlYi0+SW1hZ2UgPSBOVUxMOwogICAgd2ViLT5maWxlbmFtZSA9IE5V
TEw7CiAgICB3ZWItPnN0cmVhbSA9IE5VTEw7CisgICB3ZWItPmxvZ19zdHJlYW0gPSBOVUxMOwog
ICAgd2ViLT5TYXZlZEJ5dGVzID0gMDsKICAgIHdlYi0+YmdDb2xvciA9IDB4MDAwMDAwOyAvKiBE
dW1teSB2YWx1ZSB3aWxsIGJlIG92ZXJ3cml0dGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICogaW4gYV9XZWJfZGlzcGF0Y2hfYnlfdHlwZS4gKi8KZGlmZiAtcHJ1IGEvc3JjL3dlYi5o
aCBiL3NyYy93ZWIuaGgKLS0tIGEvc3JjL3dlYi5oaAkyMDI1LTA2LTMwIDIyOjE1OjQzLjAwMDAw
MDAwMCArMDIwMAorKysgYi9zcmMvd2ViLmhoCTIwMjYtMDctMDMgMDI6MDc6MTIuMzI1MDM2MDY2
ICswMjAwCkBAIC0zMyw2ICszMyw3IEBAIHN0cnVjdCBfRGlsbG9XZWIgewogICBpbnQzMl90IGJn
Q29sb3I7ICAgICAgICAgICAgLyoqPCBmb3IgaW1hZ2UgYmFja2dyb3VuZHMgKi8KICAgY2hhciAq
ZmlsZW5hbWU7ICAgICAgICAgICAgIC8qKjwgVmFyaWFibGVzIGZvciBMb2NhbCBzYXZpbmcgKi8K
ICAgRklMRSAqc3RyZWFtOworICBGSUxFICpsb2dfc3RyZWFtOwogICBpbnQgU2F2ZWRCeXRlczsK
IH07CiAK
--000000000000b6526c0655b3ea54
Content-Type: text/x-patch; charset="US-ASCII"; 
	name="0002-add-save_url-dpi-cmd-to-gopher.diff"
Content-Disposition: attachment; 
	filename="0002-add-save_url-dpi-cmd-to-gopher.diff"
Content-Transfer-Encoding: base64
Content-ID: <f_mr4weits1>
X-Attachment-Id: f_mr4weits1

ZGlmZiAtcHJ1IGEvZHBpLmMgYi9kcGkuYwotLS0gYS9kcGkuYwkyMDI2LTA2LTIzIDIzOjM3OjU1
LjkzNjcyMjczNyArMDIwMAorKysgYi9kcGkuYwkyMDI2LTA3LTAyIDAxOjMxOjE5LjAxMDU3NTQ3
NiArMDIwMApAQCAtMjksMTUgKzI5LDE2IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2F1dGgodm9pZCkg
ewogCWlmIChrZXkgIT0gbG9jYWxfa2V5KSBlcnJ4KDEsICJ3cm9uZyBkaWxsbyBrZXkiKTsKIH0K
IAotc3RhdGljIHZvaWQgZ2V0X3VybChjaGFyICp1cmxfYnVmLCBzaXplX3QgdXJsX2xlbikgewor
c3RhdGljIHZvaWQgZ2V0X3VybChjaGFyICp1cmxfYnVmLCBzaXplX3QgdXJsX2xlbiwgY2hhciAq
KmRzdCkgewogCWNoYXIgYnVmWzIxXTsKIAlzaXplX3QgbGVuOwotCWludCByYzsKLQlzaXplX3Qg
aTsKKwlpbnQgcmMsIHNjOworCXNpemVfdCBpLCBqOwogCiAJcmMgPSByZWFkX2FsbChTVERJTl9G
SUxFTk8sIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwogCWlmIChyYyA8IDApIGVycigxLCAicmVhZCBvcGVu
X3VybCIpOwotCWlmIChzdHJuY21wKGJ1ZiwgIjxjbWQ9J29wZW5fdXJsJyB1cmw9JyIsIDIxKSkg
eworCXNjID0gc3RybmNtcChidWYsICI8Y21kPSdzYXZlX3VybCcgdXJsPSciLCAyMSk7IAorCWlm
IChzdHJuY21wKGJ1ZiwgIjxjbWQ9J29wZW5fdXJsJyB1cmw9JyIsIDIxKSAmJiBzYykgewogCQll
cnIoMSwgImJhZCBvcGVuX3VybCBjbWQ6ICUuKnMiLCAoaW50KSBzaXplb2YoYnVmKSwgYnVmKTsK
IAl9CiAJbGVuID0gdXJsX2xlbjsKQEAgLTQ3LDE1ICs0OCwyMyBAQCBzdGF0aWMgdm9pZCBnZXRf
dXJsKGNoYXIgKnVybF9idWYsIHNpemVfCiAJZm9yIChpID0gMDsgaSA8IGxlbi0xOyBpKyspIHsK
IAkJaWYgKHVybF9idWZbaV0gPT0gJ1wnJyAmJiB1cmxfYnVmW2krMV0gPT0gJyAnKSBicmVhazsK
IAl9CisJaiA9IGk7CisJaWYgKCAhc2MgJiYgIXN0cm5jbXAodXJsX2J1ZiArIGksICInIGRlc3Rp
bmF0aW9uPSciLCAxNSkpIHsKKwkJKmRzdCA9IHVybF9idWYgKyBpICsgMTU7CisJCWZvciAoaSA9
IGkgKyAxNTsgaSA8IGxlbi0xOyBpKyspIHsKKwkJCWlmICh1cmxfYnVmW2ldID09ICdcJycgJiYg
dXJsX2J1ZltpKzFdID09ICcgJykgYnJlYWs7CisJCX0KKwl9CiAJaWYgKGkgPiBsZW4tMyB8fCBz
dHJuY21wKHVybF9idWYgKyBpLCAiJyAnPiIsIDQpKSB7CiAJCWVycigxLCAiYmFkIHVybCBlbmQ6
ICUuKnMiLCAoaW50KSBsZW4sIHVybF9idWYpOwogCX0KIAl1cmxfYnVmW2ldID0gJ1wwJzsKKwl1
cmxfYnVmW2pdID0gJ1wwJzsKIH0KIAotdm9pZCBkcGlfcmVhZF9yZXF1ZXN0KGNoYXIgKnVybF9i
dWYsIHNpemVfdCB1cmxfbGVuKSB7Cit2b2lkIGRwaV9yZWFkX3JlcXVlc3QoY2hhciAqdXJsX2J1
Ziwgc2l6ZV90IHVybF9sZW4sIGNoYXIgKipkc3QpIHsKIAljaGVja19hdXRoKCk7Ci0JZ2V0X3Vy
bCh1cmxfYnVmLCB1cmxfbGVuKTsKKwlnZXRfdXJsKHVybF9idWYsIHVybF9sZW4sIGRzdCk7CiB9
CiAKIHZvaWQgZHBpX3NlbmRfc3RhdHVzKGNvbnN0IGNoYXIgKnN0YXR1cykgewpkaWZmIC1wcnUg
YS9kcGkuaCBiL2RwaS5oCi0tLSBhL2RwaS5oCTIwMjYtMDYtMjMgMjM6Mzc6NTUuOTM2NzIyNzM3
ICswMjAwCisrKyBiL2RwaS5oCTIwMjYtMDctMDIgMDE6MzE6MTkuMDEwNTc1NDc2ICswMjAwCkBA
IC0yLDYgKzIsNiBAQAogCiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAKLXZvaWQgZHBpX3JlYWRfcmVx
dWVzdChjaGFyICp1cmxfYnVmLCBzaXplX3QgdXJsX2xlbik7Cit2b2lkIGRwaV9yZWFkX3JlcXVl
c3QoY2hhciAqdXJsX2J1Ziwgc2l6ZV90IHVybF9sZW4sIGNoYXIgKipkc3QpOwogdm9pZCBkcGlf
c2VuZF9zdGF0dXMoY29uc3QgY2hhciAqc3RhdHVzKTsKIHZvaWQgZHBpX3NlbmRfaGVhZGVyKGNv
bnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqY29udGVudF90eXBlKTsKZGlmZiAtcHJ1IGEvZ29w
aGVyLmZpbHRlci5kcGkuYyBiL2dvcGhlci5maWx0ZXIuZHBpLmMKLS0tIGEvZ29waGVyLmZpbHRl
ci5kcGkuYwkyMDI2LTA2LTIzIDIzOjM3OjU1LjkzNjcyMjczNyArMDIwMAorKysgYi9nb3BoZXIu
ZmlsdGVyLmRwaS5jCTIwMjYtMDctMDIgMDE6MzE6MTkuMDEwNTc1NDc2ICswMjAwCkBAIC0xMCw2
ICsxMCwxMCBAQAogI2luY2x1ZGUgImRwaS5oIgogI2luY2x1ZGUgImlvLmgiCiAKKworc3RhdGlj
IGNvbnN0IGNoYXIgKmRldGVjdF9pbWFnZV9jb250ZW50X3R5cGUoY29uc3QgY2hhciBidWZbNF0p
OworCisKIHN0YXRpYyB2b2lkIHJlc3BvbmRfZXJyc3RyKGNvbnN0IGNoYXIgKmVycnN0ciwgY29u
c3QgY2hhciAqZm10LCAuLi4pIHsKIAl2YV9saXN0IGFwOwogCWludCBlcnIgPSBlcnJubzsKQEAg
LTM3NSw2ICszNzksNjEgQEAgc3RhdGljIHZvaWQgcmVhZF9kYXRhKGludCBzKSB7CiAJfQogfQog
CitzdGF0aWMgdm9pZCBzYXZlX3VybChpbnQgcywgY29uc3QgY2hhciAqdXJsLCBjaGFyIHR5cGUs
IGNvbnN0IGNoYXIgKmRzdCkgeworCWNoYXIgYnVmWzQwOTZdOworCWNoYXIgaWJ1Zls0XTsKKwlj
b25zdCBjaGFyICpjdCA9ICJ0ZXh0L3BsYWluIjsKKwlzaXplX3QgbGVuID0gc2l6ZW9mKGJ1Zik7
CisJRklMRSAqbG9nX2ZwLCAqZGF0YV9mcDsKKwlpbnQgcmMsIGZkOworCisJc25wcmludGYoYnVm
LCBsZW4sICIlcy5sb2cudG1wIiwgZHN0KTsKKwlpZiAoKGxvZ19mcCA9IGZvcGVuKGJ1ZiwgIndi
IikpID09IE5VTEwpIHsKKwkJd2Fybigic2F2ZV91cmwgb3BlbiBsb2cgJyVzJyIsIGJ1Zik7CisJ
fQorCWZwcmludGYobG9nX2ZwLCAic2F2ZV91cmwgPGRwaSBjbWQ9J3NhdmVfdXJsJyB1cmw9JyVz
JyAiIFwKKwkJCSJkZXN0aW5hdGlvbj0nJXMnICc+XG5cbiIsIHVybCwgZHN0KTsKKwlmZmx1c2go
bG9nX2ZwKTsKKwkvKiBhbHdheXMgKHJlKXdyaXRlIGZyb20gMCAqLworCWRhdGFfZnAgPSBmb3Bl
bihkc3QsICJ3YiIpOworCWlmIChkYXRhX2ZwID09IE5VTEwpIHsKKwkJZnByaW50Zihsb2dfZnAs
IAorCQkJInNhdmVfdXJsIG5vdCBvazogQ2FuJ3Qgb3BlbiBkZXN0aW5hdGlvbiAnJXMnXG4iIFwK
KwkJCSJzYXZlX3VybCBFTkRcblxuIiwgZHN0KTsKKwkJZmZsdXNoKGxvZ19mcCk7CisJCWZjbG9z
ZShsb2dfZnApOworCQllcnIoMSwgInNhdmVfdXJsIG9wZW4gZHN0ICclcyciLCBkc3QpOworCX0K
KwlmZCA9IGZpbGVubyhkYXRhX2ZwKTsKKwlpZiAodHlwZSA9PSAnaCcpIGN0ID0gInRleHQvaHRt
bCI7CisJaWYgKHR5cGUgPT0gJ2cnIHx8IHR5cGUgPT0gJ3AnIHx8IHR5cGUgPT0gJ0knKSB7CisJ
CXJjID0gcmVhZF9hbGwocywgaWJ1Ziwgc2l6ZW9mKGlidWYpKTsKKwkJaWYgKHJjIDwgMCkgZXJy
KDEsICJzYXZlX3VybCByZWFkIGltYWdlIHR5cGUiKTsKKwkJY3QgPSBkZXRlY3RfaW1hZ2VfY29u
dGVudF90eXBlKGlidWYpOworCQlyYyA9IHdyaXRlX2FsbChmZCwgaWJ1ZiwgNCk7CisJCWlmIChy
YyA8IDApIGVycigxLCAic2F2ZV91cmwgd3JpdGUiKTsKKwl9CisJZnByaW50Zihsb2dfZnAsICJM
ZW5ndGg6IHVuc3BlY2lmaWVkIFslc11cblxuIiwgY3QpOworCWZmbHVzaChsb2dfZnApOworCisJ
d2hpbGUgKDEpIHsKKwkJcmMgPSByZWFkX3NvbWUocywgYnVmLCAmbGVuKTsKKwkJaWYgKHJjIDwg
MCAmJiBlcnJubyA9PSBFUElQRSkgYnJlYWs7CisJCWlmIChyYyA8IDApIHsgd2Fybigic2F2ZV91
cmwgcmVhZCIpOyBicmVhazsgfQorCQlyYyA9IHdyaXRlX2FsbChmZCwgYnVmLCBsZW4pOworCQlp
ZiAocmMgPCAwKSB7IHdhcm4oInNhdmVfdXJsIHdyaXRlIik7IGJyZWFrOyB9CisJfQorCQorICAg
ICAgICBpZiAocmMgPCAwICYmIGVycm5vID09IEVQSVBFKSBmcHJpbnRmKGxvZ19mcCwgInNhdmVf
dXJsIHllcyBva1xuIik7CisJZWxzZSBmcHJpbnRmKGxvZ19mcCwgInNhdmVfdXJsIG5vdCBvaydc
biIpOworCisJZnByaW50Zihsb2dfZnAsICJzYXZlX3VybCBFTkRcblxuIik7CisKKwlmZmx1c2go
bG9nX2ZwKTsKKwlmY2xvc2UobG9nX2ZwKTsKKwlmY2xvc2UoZGF0YV9mcCk7Cit9CisKIHN0YXRp
YyB2b2lkIHJlbmRlcl9kaXIoaW50IHMsIGNvbnN0IGNoYXIgKnVybCkgewogCWRwaV9zZW5kX2hl
YWRlcih1cmwsICJ0ZXh0L2h0bWwiKTsKIAlwcmludGYoIjwhRE9DVFlQRSBodG1sPiIpOwpAQCAt
NDQwLDcgKzQ5OSw3IEBAIHN0YXRpYyB2b2lkIGZpeF9wYXRoKGNoYXIgKnBhdGgpIHsKIAlxdWVy
eVstMV0gPSAnXHQnOwogfQogCi1zdGF0aWMgdm9pZCByZXNwb25kKGNvbnN0IGNoYXIgKnVybCkg
eworc3RhdGljIHZvaWQgcmVzcG9uZChjb25zdCBjaGFyICp1cmwsIGNvbnN0IGNoYXIgKmRzdCkg
ewogCWludCByYzsKIAljb25zdCBjaGFyICplcnJzdHIgPSBOVUxMOwogCWNoYXIgaG9zdFsxMDI0
XTsKQEAgLTQ2MCw2ICs1MTksMTAgQEAgc3RhdGljIHZvaWQgcmVzcG9uZChjb25zdCBjaGFyICp1
cmwpIHsKIAlpZiAocmMgPCAwKSB7IHJlc3BvbmRfZXJyKCJ3cml0ZSByZXF1ZXN0Iik7IHJldHVy
bjsgfQogCXJjID0gd3JpdGVfYWxsKHMsICJcclxuIiwgMik7CiAJaWYgKHJjIDwgMCkgeyByZXNw
b25kX2Vycigid3JpdGUgcmVxdWVzdCBlbmQiKTsgcmV0dXJuOyB9CisJaWYgKGRzdCAhPSBOVUxM
KSB7CisJCXNhdmVfdXJsKHMsIHVybCwgdHlwZSwgZHN0KTsKKwkJcmV0dXJuIDsKKwl9CiAJc3dp
dGNoICh0eXBlKSB7CiAJCWNhc2UgJzEnOgogCQljYXNlICc3JzoKQEAgLTQ4NCw4ICs1NDcsOSBA
QCBzdGF0aWMgdm9pZCByZXNwb25kKGNvbnN0IGNoYXIgKnVybCkgewogfQogCiBpbnQgbWFpbih2
b2lkKSB7Ci0JY2hhciB1cmxbMTAyNF07CisJY2hhciB1cmxbMjA0OF07CisJY2hhciAqZHN0ID0g
TlVMTDsKIAlzZXR2YnVmKHN0ZG91dCwgTlVMTCwgX0lPTkJGLCBCVUZTSVopOwotCWRwaV9yZWFk
X3JlcXVlc3QodXJsLCBzaXplb2YodXJsKSk7Ci0JcmVzcG9uZCh1cmwpOworCWRwaV9yZWFkX3Jl
cXVlc3QodXJsLCBzaXplb2YodXJsKSwgJmRzdCk7CisJcmVzcG9uZCh1cmwsIGRzdCk7CiB9Cg==
--000000000000b6526c0655b3ea54
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Dillo-dev mailing list -- dillo-dev-lx9mn2B4QYRWk0Htik3J/[email protected]
To unsubscribe send an email to dillo-dev-leave-lx9mn2B4QYRWk0Htik3J/[email protected]

--000000000000b6526c0655b3ea54--