<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>16040</bug_id>
          
          <creation_ts>2007-11-18 09:44:00 -0800</creation_ts>
          <short_desc>[GTK] GtkLauncher should be written in C</short_desc>
          <delta_ts>2007-11-19 07:59:35 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alp Toker">alp</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>61575</commentid>
    <comment_count>0</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-11-18 09:44:00 -0800</bug_when>
    <thetext>Since our public API is C-only, the example code should be plain C, not C++.

It could do with a general cleanup as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61576</commentid>
    <comment_count>1</comment_count>
      <attachid>17365</attachid>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-11-18 09:50:20 -0800</bug_when>
    <thetext>Created attachment 17365
Cleaned up C GtkLauncher, WIP

This is practically a rewrite, ported to C, using a toolbar instead of a menu, changing coding-style to something more common to C/GTK+ developers, and cleaning up old leftovers.

It still has globals. We can probably fix that later though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61585</commentid>
    <comment_count>2</comment_count>
      <attachid>17367</attachid>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-11-18 11:02:50 -0800</bug_when>
    <thetext>Created attachment 17367
Ported to C

Note that this patch does not attempt to fix all issues with the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61586</commentid>
    <comment_count>3</comment_count>
      <attachid>17368</attachid>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-11-18 11:07:08 -0800</bug_when>
    <thetext>Created attachment 17368
Ported to C

Missed the ChangeLog in the previous patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61669</commentid>
    <comment_count>4</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-11-19 06:46:18 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Created an attachment (id=17368) [edit]
&gt; Ported to C

IIRC the // comment was only introduced in C99. M$ Visual Studio doesn&apos;t support it. If you want GtkLauncher to be portable you want to change the comments to be C comments.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61670</commentid>
    <comment_count>5</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-11-19 07:01:15 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; Created an attachment (id=17368) [edit]
&gt; &gt; Ported to C
&gt; 
&gt; IIRC the // comment was only introduced in C99. M$ Visual Studio doesn&apos;t
&gt; support it. If you want GtkLauncher to be portable you want to change the
&gt; comments to be C comments.
&gt; 

Noted. Will fix this up before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61679</commentid>
    <comment_count>6</comment_count>
      <attachid>17368</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2007-11-19 07:54:17 -0800</bug_when>
    <thetext>Comment on attachment 17368
Ported to C

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61681</commentid>
    <comment_count>7</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-11-19 07:59:35 -0800</bug_when>
    <thetext>Landed in r27906.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>17365</attachid>
            <date>2007-11-18 09:50:20 -0800</date>
            <delta_ts>2007-11-18 11:02:50 -0800</delta_ts>
            <desc>Cleaned up C GtkLauncher, WIP</desc>
            <filename>main.c</filename>
            <type>text/plain</type>
            <size>5182</size>
            <attacher name="Alp Toker">alp</attacher>
            
              <data encoding="base64">I2luY2x1ZGUgIndlYmtpdGd0a3BhZ2UuaCIKI2luY2x1ZGUgIndlYmtpdGd0a2dsb2JhbC5oIgoj
aW5jbHVkZSA8Z3RrL2d0ay5oPgoKc3RhdGljIEd0a1dpZGdldCogbWFpbl93aW5kb3c7CnN0YXRp
YyBHdGtXaWRnZXQqIHVybF9lbnRyeTsKc3RhdGljIEd0a1N0YXR1c2JhciogbWFpbl9zdGF0dXNi
YXI7CnN0YXRpYyBXZWJLaXRQYWdlKiB3ZWJfcGFnZTsKc3RhdGljIGdjaGFyKiBtYWluX3RpdGxl
OwpzdGF0aWMgZ2ludCBsb2FkX3Byb2dyZXNzOwpzdGF0aWMgZ3VpbnQgc3RhdHVzX2NvbnRleHRf
aWQ7CgpzdGF0aWMgdm9pZAphY3RpdmF0ZV91cmxfZW50cnlfY2IgKEd0a1dpZGdldCogZW50cnks
IGdwb2ludGVyIGRhdGEpCnsKICAgIGNvbnN0IGdjaGFyKiB1cmwgPSBndGtfZW50cnlfZ2V0X3Rl
eHQgKEdUS19FTlRSWSAoZW50cnkpKTsKICAgIGdfYXNzZXJ0ICh1cmwpOwogICAgd2Via2l0X3Bh
Z2Vfb3BlbiAod2ViX3BhZ2UsIHVybCk7Cn0KCnN0YXRpYyB2b2lkCnVwZGF0ZV90aXRsZSAoR3Rr
V2luZG93KiB3aW5kb3cpCnsKICAgIEdTdHJpbmcqIHN0cmluZyA9IGdfc3RyaW5nX25ldyAobWFp
bl90aXRsZSk7CiAgICBnX3N0cmluZ19hcHBlbmQgKHN0cmluZywgIiAtIFdlYktpdCBMYXVuY2hl
ciIpOwogICAgaWYgKGxvYWRfcHJvZ3Jlc3MgPCAxMDApCiAgICAgICAgZ19zdHJpbmdfYXBwZW5k
X3ByaW50ZiAoc3RyaW5nLCAiICglZCUlKSIsIGxvYWRfcHJvZ3Jlc3MpOwogICAgZ2NoYXIqIHRp
dGxlID0gZ19zdHJpbmdfZnJlZSAoc3RyaW5nLCBGQUxTRSk7CiAgICBndGtfd2luZG93X3NldF90
aXRsZSAod2luZG93LCB0aXRsZSk7CiAgICBnX2ZyZWUgKHRpdGxlKTsKfQoKc3RhdGljIHZvaWQK
bGlua19ob3Zlcl9jYiAoV2ViS2l0UGFnZSogcGFnZSwgY29uc3QgZ2NoYXIqIGh1aCwgY29uc3Qg
Z2NoYXIqIGxpbmssIGdwb2ludGVyIGRhdGEpCnsKICAgIC8vIHVuZGVyZmxvdyBpcyBhbGxvd2Vk
CiAgICBndGtfc3RhdHVzYmFyX3BvcCAobWFpbl9zdGF0dXNiYXIsIHN0YXR1c19jb250ZXh0X2lk
KTsKICAgIGlmIChsaW5rKQogICAgICAgIGd0a19zdGF0dXNiYXJfcHVzaCAobWFpbl9zdGF0dXNi
YXIsIHN0YXR1c19jb250ZXh0X2lkLCBsaW5rKTsKfQoKc3RhdGljIHZvaWQKdGl0bGVfY2hhbmdl
X2NiIChXZWJLaXRQYWdlKiBwYWdlLCBjb25zdCBnY2hhciogdGl0bGUsIGNvbnN0IGdjaGFyKiB1
cmwsIGdwb2ludGVyIGRhdGEpCnsKICAgIGd0a19lbnRyeV9zZXRfdGV4dCAoR1RLX0VOVFJZICh1
cmxfZW50cnkpLCB1cmwpOwoKICAgIGlmIChtYWluX3RpdGxlKQogICAgICAgIGdfZnJlZSAobWFp
bl90aXRsZSk7CiAgICBtYWluX3RpdGxlID0gZ19zdHJkdXAgKHRpdGxlKTsKICAgIHVwZGF0ZV90
aXRsZSAoR1RLX1dJTkRPVyAobWFpbl93aW5kb3cpKTsKfQoKc3RhdGljIHZvaWQKcHJvZ3Jlc3Nf
Y2hhbmdlX2NiIChXZWJLaXRQYWdlKiBwYWdlLCBnaW50IHByb2dyZXNzLCBncG9pbnRlciBkYXRh
KQp7CiAgICBsb2FkX3Byb2dyZXNzID0gcHJvZ3Jlc3M7CiAgICB1cGRhdGVfdGl0bGUgKEdUS19X
SU5ET1cgKG1haW5fd2luZG93KSk7Cn0KCnN0YXRpYyB2b2lkCmZyYW1lRGVzdHJveV9jYiAoR3Rr
V2lkZ2V0KiB3aWRnZXQsIGdwb2ludGVyIGRhdGEpCnsKICAgIGd0a19tYWluX3F1aXQgKCk7Cn0K
CnN0YXRpYyB2b2lkCmdvX2JhY2tfY2IgKEd0a1dpZGdldCogd2lkZ2V0LCBncG9pbnRlciBkYXRh
KQp7CiAgICBnX2Fzc2VydCAoIWRhdGEpOwogICAgd2Via2l0X3BhZ2VfZ29fYmFja3dhcmQgKHdl
Yl9wYWdlKTsKfQoKc3RhdGljIHZvaWQKZ29fZm9yd2FyZF9jYiAoR3RrV2lkZ2V0KiB3aWRnZXQs
IGdwb2ludGVyIGRhdGEpCnsKICAgIGdfYXNzZXJ0ICghZGF0YSk7CiAgICB3ZWJraXRfcGFnZV9n
b19mb3J3YXJkICh3ZWJfcGFnZSk7Cn0KCnN0YXRpYyBHdGtXaWRnZXQqCmNyZWF0ZV9icm93c2Vy
ICgpCnsKICAgIEd0a1dpZGdldCogc2Nyb2xsZWRfd2luZG93ID0gZ3RrX3Njcm9sbGVkX3dpbmRv
d19uZXcgKE5VTEwsIE5VTEwpOwogICAgZ3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5IChH
VEtfU0NST0xMRURfV0lORE9XIChzY3JvbGxlZF93aW5kb3cpLCBHVEtfUE9MSUNZX0FVVE9NQVRJ
QywgR1RLX1BPTElDWV9BVVRPTUFUSUMpOwoKICAgIHdlYl9wYWdlID0gV0VCS0lUX1BBR0UgKHdl
YmtpdF9wYWdlX25ldyAoKSk7CiAgICBndGtfY29udGFpbmVyX2FkZCAoR1RLX0NPTlRBSU5FUiAo
c2Nyb2xsZWRfd2luZG93KSwgR1RLX1dJREdFVCAod2ViX3BhZ2UpKTsKCiAgICBnX3NpZ25hbF9j
b25uZWN0IChHX09CSkVDVCAod2ViX3BhZ2UpLCAidGl0bGUtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sg
KHRpdGxlX2NoYW5nZV9jYiksIHdlYl9wYWdlKTsKICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JK
RUNUICh3ZWJfcGFnZSksICJsb2FkLXByb2dyZXNzLWNoYW5nZWQiLCBHX0NBTExCQUNLIChwcm9n
cmVzc19jaGFuZ2VfY2IpLCB3ZWJfcGFnZSk7CiAgICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVD
VCAod2ViX3BhZ2UpLCAiaG92ZXJpbmctb3Zlci1saW5rIiwgR19DQUxMQkFDSyAobGlua19ob3Zl
cl9jYiksIHdlYl9wYWdlKTsKCiAgICByZXR1cm4gc2Nyb2xsZWRfd2luZG93Owp9CgpzdGF0aWMg
R3RrV2lkZ2V0KgpjcmVhdGVfc3RhdHVzYmFyICgpCnsKICAgIG1haW5fc3RhdHVzYmFyID0gR1RL
X1NUQVRVU0JBUiAoZ3RrX3N0YXR1c2Jhcl9uZXcgKCkpOwogICAgc3RhdHVzX2NvbnRleHRfaWQg
PSBndGtfc3RhdHVzYmFyX2dldF9jb250ZXh0X2lkIChtYWluX3N0YXR1c2JhciwgIkxpbmsgSG92
ZXIiKTsKCiAgICByZXR1cm4gKEd0a1dpZGdldCopbWFpbl9zdGF0dXNiYXI7Cn0KCnN0YXRpYyBH
dGtXaWRnZXQqCmNyZWF0ZV90b29sYmFyICgpCnsKICAgIEd0a1dpZGdldCogdG9vbGJhciA9IGd0
a190b29sYmFyX25ldyAoKTsKCiAgICBndGtfdG9vbGJhcl9zZXRfb3JpZW50YXRpb24gKEdUS19U
T09MQkFSICh0b29sYmFyKSwgR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwpOwogICAgZ3RrX3Rv
b2xiYXJfc2V0X3N0eWxlIChHVEtfVE9PTEJBUiAodG9vbGJhciksIEdUS19UT09MQkFSX0JPVEhf
SE9SSVopOwoKICAgIEd0a1Rvb2xJdGVtKiBpdGVtOwoKICAgIC8vIHRoZSBiYWNrIGJ1dHRvbgog
ICAgaXRlbSA9IGd0a190b29sX2J1dHRvbl9uZXdfZnJvbV9zdG9jayAoR1RLX1NUT0NLX0dPX0JB
Q0spOwogICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKGl0ZW0pLCAiY2xpY2tlZCIsIEdf
Q0FMTEJBQ0sgKGdvX2JhY2tfY2IpLCBOVUxMKTsKICAgIGd0a190b29sYmFyX2luc2VydCAoR1RL
X1RPT0xCQVIgKHRvb2xiYXIpLCBpdGVtLCAtMSk7CgogICAgLy8gVGhlIGZvcndhcmQgYnV0dG9u
CiAgICBpdGVtID0gZ3RrX3Rvb2xfYnV0dG9uX25ld19mcm9tX3N0b2NrIChHVEtfU1RPQ0tfR09f
Rk9SV0FSRCk7CiAgICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAoaXRlbSksICJjbGlja2Vk
IiwgR19DQUxMQkFDSyAoZ29fZm9yd2FyZF9jYiksIE5VTEwpOwogICAgZ3RrX3Rvb2xiYXJfaW5z
ZXJ0IChHVEtfVE9PTEJBUiAodG9vbGJhciksIGl0ZW0sIC0xKTsKCiAgICAvLyBUaGUgVVJMIGVu
dHJ5CiAgICBpdGVtID0gZ3RrX3Rvb2xfaXRlbV9uZXcgKCk7CiAgICBndGtfdG9vbF9pdGVtX3Nl
dF9leHBhbmQgKGl0ZW0sIFRSVUUpOwogICAgdXJsX2VudHJ5ID0gZ3RrX2VudHJ5X25ldyAoKTsK
ICAgIGd0a19jb250YWluZXJfYWRkIChHVEtfQ09OVEFJTkVSIChpdGVtKSwgdXJsX2VudHJ5KTsK
ICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUICh1cmxfZW50cnkpLCAiYWN0aXZhdGUiLCBH
X0NBTExCQUNLIChhY3RpdmF0ZV91cmxfZW50cnlfY2IpLCBOVUxMKTsKICAgIGd0a190b29sYmFy
X2luc2VydCAoR1RLX1RPT0xCQVIgKHRvb2xiYXIpLCBpdGVtLCAtMSk7CgogICAgLy8gVGhlIGdv
IGJ1dHRvbgogICAgaXRlbSA9IGd0a190b29sX2J1dHRvbl9uZXdfZnJvbV9zdG9jayAoR1RLX1NU
T0NLX09LKTsKICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZCAoR19PQkpFQ1QgKGl0ZW0pLCAi
Y2xpY2tlZCIsIEdfQ0FMTEJBQ0sgKGFjdGl2YXRlX3VybF9lbnRyeV9jYiksIChncG9pbnRlcil1
cmxfZW50cnkpOwogICAgZ3RrX3Rvb2xiYXJfaW5zZXJ0IChHVEtfVE9PTEJBUiAodG9vbGJhciks
IGl0ZW0sIC0xKTsKCiAgICByZXR1cm4gdG9vbGJhcjsKfQoKc3RhdGljIEd0a1dpZGdldCoKY3Jl
YXRlX3dpbmRvdyAoKQp7CiAgICBHdGtXaWRnZXQqIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3IChH
VEtfV0lORE9XX1RPUExFVkVMKTsKICAgIGd0a193aW5kb3dfc2V0X2RlZmF1bHRfc2l6ZSAoR1RL
X1dJTkRPVyAod2luZG93KSwgODAwLCA2MDApOwogICAgZ3RrX3dpZGdldF9zZXRfbmFtZSAod2lu
ZG93LCAiR3RrTGF1bmNoZXIiKTsKICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUICh3aW5k
b3cpLCAiZGVzdHJveSIsIEdfQ0FMTEJBQ0sgKGZyYW1lRGVzdHJveV9jYiksIE5VTEwpOwoKICAg
IHJldHVybiB3aW5kb3c7Cn0KCmludAptYWluIChpbnQgYXJnYywgY2hhciogYXJndltdKQp7CiAg
ICBndGtfaW5pdCAoJmFyZ2MsICZhcmd2KTsKICAgIHdlYmtpdF9pbml0ICgpOwoKICAgIEd0a1dp
ZGdldCogdmJveCA9IGd0a192Ym94X25ldyAoRkFMU0UsIDApOwogICAgZ3RrX2JveF9wYWNrX3N0
YXJ0IChHVEtfQk9YICh2Ym94KSwgY3JlYXRlX3Rvb2xiYXIgKCksIEZBTFNFLCBGQUxTRSwgMCk7
CiAgICBndGtfYm94X3BhY2tfc3RhcnQgKEdUS19CT1ggKHZib3gpLCBjcmVhdGVfYnJvd3NlciAo
KSwgVFJVRSwgVFJVRSwgMCk7CiAgICBndGtfYm94X3BhY2tfc3RhcnQgKEdUS19CT1ggKHZib3gp
LCBjcmVhdGVfc3RhdHVzYmFyICgpLCBGQUxTRSwgRkFMU0UsIDApOwoKICAgIG1haW5fd2luZG93
ID0gY3JlYXRlX3dpbmRvdyAoKTsKICAgIGd0a19jb250YWluZXJfYWRkIChHVEtfQ09OVEFJTkVS
IChtYWluX3dpbmRvdyksIHZib3gpOwoKICAgIGNvbnN0IGdjaGFyKiB1cmwgPSAoY29uc3QgZ2No
YXIqKSAoYXJnYyA+IDEgPyBhcmd2WzFdIDogImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iKTsKICAg
IHdlYmtpdF9wYWdlX29wZW4gKHdlYl9wYWdlLCB1cmwpOwoKICAgIGd0a193aWRnZXRfc2hvd19h
bGwgKG1haW5fd2luZG93KTsKICAgIGd0a19tYWluICgpOwoKICAgIHJldHVybiAwOwp9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17367</attachid>
            <date>2007-11-18 11:02:50 -0800</date>
            <delta_ts>2007-11-18 11:07:08 -0800</delta_ts>
            <desc>Ported to C</desc>
            <filename>gtklauncher.patch</filename>
            <type>text/plain</type>
            <size>13348</size>
            <attacher name="Alp Toker">alp</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0d0a0xhdW5jaGVyL0d0a0xhdW5jaGVyLnBybwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXRUb29scy9HdGtMYXVuY2hlci9HdGtMYXVuY2hlci5wcm8JKHJldmlzaW9uIDI3
ODg4KQorKysgV2ViS2l0VG9vbHMvR3RrTGF1bmNoZXIvR3RrTGF1bmNoZXIucHJvCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogVEVNUExBVEUgPSBhcHAKLVNPVVJDRVMgKz0gbWFpbi5j
cHAKK1NPVVJDRVMgKz0gbWFpbi5jCiBDT05GSUcgLT0gYXBwX2J1bmRsZQogCiBCQVNFX0RJUiA9
ICQkUFdELy4uLy4uCkluZGV4OiBXZWJLaXRUb29scy9HdGtMYXVuY2hlci9tYWluLmMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0VG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5jCShyZXZpc2lvbiAwKQorKysg
V2ViS2l0VG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAid2Via2l0Z3RrcGFnZS5oIgorI2luY2x1ZGUgIndlYmtpdGd0a2dsb2JhbC5oIgorI2luY2x1
ZGUgPGd0ay9ndGsuaD4KKworc3RhdGljIEd0a1dpZGdldCogbWFpbl93aW5kb3c7CitzdGF0aWMg
R3RrV2lkZ2V0KiB1cmxfZW50cnk7CitzdGF0aWMgR3RrU3RhdHVzYmFyKiBtYWluX3N0YXR1c2Jh
cjsKK3N0YXRpYyBXZWJLaXRQYWdlKiB3ZWJfcGFnZTsKK3N0YXRpYyBnY2hhciogbWFpbl90aXRs
ZTsKK3N0YXRpYyBnaW50IGxvYWRfcHJvZ3Jlc3M7CitzdGF0aWMgZ3VpbnQgc3RhdHVzX2NvbnRl
eHRfaWQ7CisKK3N0YXRpYyB2b2lkCithY3RpdmF0ZV91cmxfZW50cnlfY2IgKEd0a1dpZGdldCog
ZW50cnksIGdwb2ludGVyIGRhdGEpCit7CisgICAgY29uc3QgZ2NoYXIqIHVybCA9IGd0a19lbnRy
eV9nZXRfdGV4dCAoR1RLX0VOVFJZIChlbnRyeSkpOworICAgIGdfYXNzZXJ0ICh1cmwpOworICAg
IHdlYmtpdF9wYWdlX29wZW4gKHdlYl9wYWdlLCB1cmwpOworfQorCitzdGF0aWMgdm9pZAordXBk
YXRlX3RpdGxlIChHdGtXaW5kb3cqIHdpbmRvdykKK3sKKyAgICBHU3RyaW5nKiBzdHJpbmcgPSBn
X3N0cmluZ19uZXcgKG1haW5fdGl0bGUpOworICAgIGdfc3RyaW5nX2FwcGVuZCAoc3RyaW5nLCAi
IC0gV2ViS2l0IExhdW5jaGVyIik7CisgICAgaWYgKGxvYWRfcHJvZ3Jlc3MgPCAxMDApCisgICAg
ICAgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHN0cmluZywgIiAoJWQlJSkiLCBsb2FkX3Byb2dy
ZXNzKTsKKyAgICBnY2hhciogdGl0bGUgPSBnX3N0cmluZ19mcmVlIChzdHJpbmcsIEZBTFNFKTsK
KyAgICBndGtfd2luZG93X3NldF90aXRsZSAod2luZG93LCB0aXRsZSk7CisgICAgZ19mcmVlICh0
aXRsZSk7Cit9CisKK3N0YXRpYyB2b2lkCitsaW5rX2hvdmVyX2NiIChXZWJLaXRQYWdlKiBwYWdl
LCBjb25zdCBnY2hhciogdGl0bGUsIGNvbnN0IGdjaGFyKiBsaW5rLCBncG9pbnRlciBkYXRhKQor
eworICAgIC8vIHVuZGVyZmxvdyBpcyBhbGxvd2VkCisgICAgZ3RrX3N0YXR1c2Jhcl9wb3AgKG1h
aW5fc3RhdHVzYmFyLCBzdGF0dXNfY29udGV4dF9pZCk7CisgICAgaWYgKGxpbmspCisgICAgICAg
IGd0a19zdGF0dXNiYXJfcHVzaCAobWFpbl9zdGF0dXNiYXIsIHN0YXR1c19jb250ZXh0X2lkLCBs
aW5rKTsKK30KKworc3RhdGljIHZvaWQKK3RpdGxlX2NoYW5nZV9jYiAoV2ViS2l0UGFnZSogcGFn
ZSwgY29uc3QgZ2NoYXIqIHRpdGxlLCBjb25zdCBnY2hhciogdXJsLCBncG9pbnRlciBkYXRhKQor
eworICAgIGd0a19lbnRyeV9zZXRfdGV4dCAoR1RLX0VOVFJZICh1cmxfZW50cnkpLCB1cmwpOwor
CisgICAgaWYgKG1haW5fdGl0bGUpCisgICAgICAgIGdfZnJlZSAobWFpbl90aXRsZSk7CisgICAg
bWFpbl90aXRsZSA9IGdfc3RyZHVwICh0aXRsZSk7CisgICAgdXBkYXRlX3RpdGxlIChHVEtfV0lO
RE9XIChtYWluX3dpbmRvdykpOworfQorCitzdGF0aWMgdm9pZAorcHJvZ3Jlc3NfY2hhbmdlX2Ni
IChXZWJLaXRQYWdlKiBwYWdlLCBnaW50IHByb2dyZXNzLCBncG9pbnRlciBkYXRhKQoreworICAg
IGxvYWRfcHJvZ3Jlc3MgPSBwcm9ncmVzczsKKyAgICB1cGRhdGVfdGl0bGUgKEdUS19XSU5ET1cg
KG1haW5fd2luZG93KSk7Cit9CisKK3N0YXRpYyB2b2lkCitkZXN0cm95X2NiIChHdGtXaWRnZXQq
IHdpZGdldCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBndGtfbWFpbl9xdWl0ICgpOworfQorCitz
dGF0aWMgdm9pZAorZ29fYmFja19jYiAoR3RrV2lkZ2V0KiB3aWRnZXQsIGdwb2ludGVyIGRhdGEp
Cit7CisgICAgd2Via2l0X3BhZ2VfZ29fYmFja3dhcmQgKHdlYl9wYWdlKTsKK30KKworc3RhdGlj
IHZvaWQKK2dvX2ZvcndhcmRfY2IgKEd0a1dpZGdldCogd2lkZ2V0LCBncG9pbnRlciBkYXRhKQor
eworICAgIHdlYmtpdF9wYWdlX2dvX2ZvcndhcmQgKHdlYl9wYWdlKTsKK30KKworc3RhdGljIEd0
a1dpZGdldCoKK2NyZWF0ZV9icm93c2VyICgpCit7CisgICAgR3RrV2lkZ2V0KiBzY3JvbGxlZF93
aW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldyAoTlVMTCwgTlVMTCk7CisgICAgZ3RrX3Nj
cm9sbGVkX3dpbmRvd19zZXRfcG9saWN5IChHVEtfU0NST0xMRURfV0lORE9XIChzY3JvbGxlZF93
aW5kb3cpLCBHVEtfUE9MSUNZX0FVVE9NQVRJQywgR1RLX1BPTElDWV9BVVRPTUFUSUMpOworCisg
ICAgd2ViX3BhZ2UgPSBXRUJLSVRfUEFHRSAod2Via2l0X3BhZ2VfbmV3ICgpKTsKKyAgICBndGtf
Y29udGFpbmVyX2FkZCAoR1RLX0NPTlRBSU5FUiAoc2Nyb2xsZWRfd2luZG93KSwgR1RLX1dJREdF
VCAod2ViX3BhZ2UpKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUICh3ZWJfcGFn
ZSksICJ0aXRsZS1jaGFuZ2VkIiwgR19DQUxMQkFDSyAodGl0bGVfY2hhbmdlX2NiKSwgd2ViX3Bh
Z2UpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUICh3ZWJfcGFnZSksICJsb2FkLXBy
b2dyZXNzLWNoYW5nZWQiLCBHX0NBTExCQUNLIChwcm9ncmVzc19jaGFuZ2VfY2IpLCB3ZWJfcGFn
ZSk7CisgICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKHdlYl9wYWdlKSwgImhvdmVyaW5n
LW92ZXItbGluayIsIEdfQ0FMTEJBQ0sgKGxpbmtfaG92ZXJfY2IpLCB3ZWJfcGFnZSk7CisKKyAg
ICByZXR1cm4gc2Nyb2xsZWRfd2luZG93OworfQorCitzdGF0aWMgR3RrV2lkZ2V0KgorY3JlYXRl
X3N0YXR1c2JhciAoKQoreworICAgIG1haW5fc3RhdHVzYmFyID0gR1RLX1NUQVRVU0JBUiAoZ3Rr
X3N0YXR1c2Jhcl9uZXcgKCkpOworICAgIHN0YXR1c19jb250ZXh0X2lkID0gZ3RrX3N0YXR1c2Jh
cl9nZXRfY29udGV4dF9pZCAobWFpbl9zdGF0dXNiYXIsICJMaW5rIEhvdmVyIik7CisKKyAgICBy
ZXR1cm4gKEd0a1dpZGdldCopbWFpbl9zdGF0dXNiYXI7Cit9CisKK3N0YXRpYyBHdGtXaWRnZXQq
CitjcmVhdGVfdG9vbGJhciAoKQoreworICAgIEd0a1dpZGdldCogdG9vbGJhciA9IGd0a190b29s
YmFyX25ldyAoKTsKKworICAgIGd0a190b29sYmFyX3NldF9vcmllbnRhdGlvbiAoR1RLX1RPT0xC
QVIgKHRvb2xiYXIpLCBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCk7CisgICAgZ3RrX3Rvb2xi
YXJfc2V0X3N0eWxlIChHVEtfVE9PTEJBUiAodG9vbGJhciksIEdUS19UT09MQkFSX0JPVEhfSE9S
SVopOworCisgICAgR3RrVG9vbEl0ZW0qIGl0ZW07CisKKyAgICAvLyB0aGUgYmFjayBidXR0b24K
KyAgICBpdGVtID0gZ3RrX3Rvb2xfYnV0dG9uX25ld19mcm9tX3N0b2NrIChHVEtfU1RPQ0tfR09f
QkFDSyk7CisgICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKGl0ZW0pLCAiY2xpY2tlZCIs
IEdfQ0FMTEJBQ0sgKGdvX2JhY2tfY2IpLCBOVUxMKTsKKyAgICBndGtfdG9vbGJhcl9pbnNlcnQg
KEdUS19UT09MQkFSICh0b29sYmFyKSwgaXRlbSwgLTEpOworCisgICAgLy8gVGhlIGZvcndhcmQg
YnV0dG9uCisgICAgaXRlbSA9IGd0a190b29sX2J1dHRvbl9uZXdfZnJvbV9zdG9jayAoR1RLX1NU
T0NLX0dPX0ZPUldBUkQpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChpdGVtKSwg
ImNsaWNrZWQiLCBHX0NBTExCQUNLIChnb19mb3J3YXJkX2NiKSwgTlVMTCk7CisgICAgZ3RrX3Rv
b2xiYXJfaW5zZXJ0IChHVEtfVE9PTEJBUiAodG9vbGJhciksIGl0ZW0sIC0xKTsKKworICAgIC8v
IFRoZSBVUkwgZW50cnkKKyAgICBpdGVtID0gZ3RrX3Rvb2xfaXRlbV9uZXcgKCk7CisgICAgZ3Rr
X3Rvb2xfaXRlbV9zZXRfZXhwYW5kIChpdGVtLCBUUlVFKTsKKyAgICB1cmxfZW50cnkgPSBndGtf
ZW50cnlfbmV3ICgpOworICAgIGd0a19jb250YWluZXJfYWRkIChHVEtfQ09OVEFJTkVSIChpdGVt
KSwgdXJsX2VudHJ5KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAodXJsX2VudHJ5
KSwgImFjdGl2YXRlIiwgR19DQUxMQkFDSyAoYWN0aXZhdGVfdXJsX2VudHJ5X2NiKSwgTlVMTCk7
CisgICAgZ3RrX3Rvb2xiYXJfaW5zZXJ0IChHVEtfVE9PTEJBUiAodG9vbGJhciksIGl0ZW0sIC0x
KTsKKworICAgIC8vIFRoZSBnbyBidXR0b24KKyAgICBpdGVtID0gZ3RrX3Rvb2xfYnV0dG9uX25l
d19mcm9tX3N0b2NrIChHVEtfU1RPQ0tfT0spOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBl
ZCAoR19PQkpFQ1QgKGl0ZW0pLCAiY2xpY2tlZCIsIEdfQ0FMTEJBQ0sgKGFjdGl2YXRlX3VybF9l
bnRyeV9jYiksIChncG9pbnRlcil1cmxfZW50cnkpOworICAgIGd0a190b29sYmFyX2luc2VydCAo
R1RLX1RPT0xCQVIgKHRvb2xiYXIpLCBpdGVtLCAtMSk7CisKKyAgICByZXR1cm4gdG9vbGJhcjsK
K30KKworc3RhdGljIEd0a1dpZGdldCoKK2NyZWF0ZV93aW5kb3cgKCkKK3sKKyAgICBHdGtXaWRn
ZXQqIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3IChHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICBn
dGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUgKEdUS19XSU5ET1cgKHdpbmRvdyksIDgwMCwgNjAw
KTsKKyAgICBndGtfd2lkZ2V0X3NldF9uYW1lICh3aW5kb3csICJHdGtMYXVuY2hlciIpOworICAg
IGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUICh3aW5kb3cpLCAiZGVzdHJveSIsIEdfQ0FMTEJB
Q0sgKGRlc3Ryb3lfY2IpLCBOVUxMKTsKKworICAgIHJldHVybiB3aW5kb3c7Cit9CisKK2ludAor
bWFpbiAoaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKK3sKKyAgICBndGtfaW5pdCAoJmFyZ2MsICZh
cmd2KTsKKyAgICB3ZWJraXRfaW5pdCAoKTsKKworICAgIEd0a1dpZGdldCogdmJveCA9IGd0a192
Ym94X25ldyAoRkFMU0UsIDApOworICAgIGd0a19ib3hfcGFja19zdGFydCAoR1RLX0JPWCAodmJv
eCksIGNyZWF0ZV90b29sYmFyICgpLCBGQUxTRSwgRkFMU0UsIDApOworICAgIGd0a19ib3hfcGFj
a19zdGFydCAoR1RLX0JPWCAodmJveCksIGNyZWF0ZV9icm93c2VyICgpLCBUUlVFLCBUUlVFLCAw
KTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQgKEdUS19CT1ggKHZib3gpLCBjcmVhdGVfc3RhdHVz
YmFyICgpLCBGQUxTRSwgRkFMU0UsIDApOworCisgICAgbWFpbl93aW5kb3cgPSBjcmVhdGVfd2lu
ZG93ICgpOworICAgIGd0a19jb250YWluZXJfYWRkIChHVEtfQ09OVEFJTkVSIChtYWluX3dpbmRv
dyksIHZib3gpOworCisgICAgZ2NoYXIqIHVybCA9IChnY2hhciopIChhcmdjID4gMSA/IGFyZ3Zb
MV0gOiAiaHR0cDovL3d3dy5nb29nbGUuY29tLyIpOworICAgIHdlYmtpdF9wYWdlX29wZW4gKHdl
Yl9wYWdlLCB1cmwpOworCisgICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzIChHVEtfV0lER0VUICh3
ZWJfcGFnZSkpOworICAgIGd0a193aWRnZXRfc2hvd19hbGwgKG1haW5fd2luZG93KTsKKyAgICBn
dGtfbWFpbiAoKTsKKworICAgIHJldHVybiAwOworfQpJbmRleDogV2ViS2l0VG9vbHMvR3RrTGF1
bmNoZXIvbWFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvR3RrTGF1bmNoZXIvbWFp
bi5jcHAJKHJldmlzaW9uIDI3ODg4KQorKysgV2ViS2l0VG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTc0ICswLDAgQEAKLSNpbmNsdWRlICJ3ZWJraXRndGtw
YWdlLmgiCi0jaW5jbHVkZSAid2Via2l0Z3RrZ2xvYmFsLmgiCi0KLSNpbmNsdWRlIDxndGsvZ3Rr
Lmg+Ci0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotc3RhdGljIEd0a1dpZGdldCogZ1VSTEJhckVu
dHJ5Owotc3RhdGljIEd0a1dpZGdldCogZ1RvcExldmVsV2luZG93Owotc3RhdGljIEd0a1N0YXR1
c2JhciogZ1N0YXR1c2JhcjsKLXN0YXRpYyBXZWJLaXRQYWdlKiBnUGFnZTsKLXN0YXRpYyBnY2hh
ciogZ1RpdGxlOwotc3RhdGljIGdpbnQgZ1Byb2dyZXNzOwotc3RhdGljIGd1aW50IGdTdGF0dXNi
YXJDb250ZXh0SWQ7Ci0KLXN0YXRpYyB2b2lkIGdvVG9VUkxCYXJUZXh0KEd0a1dpZGdldCogdXJs
QmFyRW50cnkpCi17Ci0gICAgY29uc3QgZ2NoYXIqIHVybCA9IGd0a19lbnRyeV9nZXRfdGV4dChH
VEtfRU5UUlkodXJsQmFyRW50cnkpKTsKLSAgICBpZiAoIXVybCB8fCBzdHJsZW4odXJsKSA9PSAw
KQotICAgICAgICByZXR1cm47Ci0KLSAgICB3ZWJraXRfcGFnZV9vcGVuKGdQYWdlLCB1cmwpOwot
fQotCi1zdGF0aWMgdm9pZCBnb0J1dHRvbkNsaWNrZWRDYWxsYmFjayhHdGtXaWRnZXQqLCBHdGtX
aWRnZXQqIGVudHJ5KQotewotICAgIGdvVG9VUkxCYXJUZXh0KGVudHJ5KTsKLX0KLQotc3RhdGlj
IHZvaWQgdXJsQmFyRW50ZXJDYWxsYmFjayhHdGtXaWRnZXQqLCBHdGtXaWRnZXQqIGVudHJ5KQot
ewotICAgIGdvVG9VUkxCYXJUZXh0KGVudHJ5KTsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlV2lu
ZG93VGl0bGUoKQotewotICAgIEdTdHJpbmcqIHN0cmluZyA9IGdfc3RyaW5nX25ldyhOVUxMKTsK
LSAgICBnX3N0cmluZ19wcmludGYoc3RyaW5nLCAiR3RrTGF1bmNoZXIgJXMgICglZC8xMDApIiwg
Z1RpdGxlLCBnUHJvZ3Jlc3MpOwotICAgIGdjaGFyKiB0aXRsZSA9IGdfc3RyaW5nX2ZyZWUoc3Ry
aW5nLCBGQUxTRSk7Ci0gICAgZ3RrX3dpbmRvd19zZXRfdGl0bGUoR1RLX1dJTkRPVyhnVG9wTGV2
ZWxXaW5kb3cpLCB0aXRsZSk7Ci0gICAgZ19mcmVlKHRpdGxlKTsKLX0KLQotc3RhdGljIHZvaWQg
aG92ZXJpbmdPdmVyTGluayhXZWJLaXRQYWdlKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciog
bGluaywgdm9pZCopCi17Ci0gICAgLy8gdW5kZXJmbG93IGlzIGFsbG93ZWQKLSAgICBndGtfc3Rh
dHVzYmFyX3BvcChnU3RhdHVzYmFyLCBnU3RhdHVzYmFyQ29udGV4dElkKTsKLSAgICBpZiAobGlu
aykKLSAgICAgICAgZ3RrX3N0YXR1c2Jhcl9wdXNoKGdTdGF0dXNiYXIsIGdTdGF0dXNiYXJDb250
ZXh0SWQsIGxpbmspOwotfQotCi1zdGF0aWMgdm9pZCB0aXRsZUNoYW5nZWQoV2ViS2l0UGFnZSos
IGNvbnN0IGdjaGFyKiB0aXRsZSwgY29uc3QgZ2NoYXIqIHVybCwgV2ViS2l0UGFnZSopCi17Ci0g
ICAgZ3RrX2VudHJ5X3NldF90ZXh0KEdUS19FTlRSWShnVVJMQmFyRW50cnkpLCB1cmwpOwotCi0g
ICAgaWYgKGdUaXRsZSkKLSAgICAgICAgZ19mcmVlKGdUaXRsZSk7Ci0gICAgZ1RpdGxlID0gZ19z
dHJkdXAodGl0bGUpOwotICAgIHVwZGF0ZVdpbmRvd1RpdGxlKCk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHByb2dyZXNzQ2hhbmdlZChXZWJLaXRQYWdlKiwgZ2ludCBwcm9ncmVzcywgV2ViS2l0UGFnZSop
Ci17Ci0gICAgZ1Byb2dyZXNzID0gcHJvZ3Jlc3M7Ci0gICAgdXBkYXRlV2luZG93VGl0bGUoKTsK
LX0KLQotc3RhdGljIHZvaWQgZnJhbWVEZXN0cm95Q2FsbGJhY2soR3RrV2lkZ2V0KiwgZ3BvaW50
ZXIpCi17Ci0gICAgZ3RrX21haW5fcXVpdCgpOwotfQotCi1zdGF0aWMgdm9pZCBtZW51TWFpbkJh
Y2tDYWxsYmFjayhncG9pbnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0KCFkYXRhKTsKLSAgICB3
ZWJraXRfcGFnZV9nb19iYWNrd2FyZChnUGFnZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1lbnVNYWlu
Rm9yd2FyZENhbGxiYWNrKGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnQoIWRhdGEpOwot
ICAgIHdlYmtpdF9wYWdlX2dvX2ZvcndhcmQoZ1BhZ2UpOwotfQotCi1zdGF0aWMgdm9pZCBtZW51
TWFpblF1aXRDYWxsYmFjayhncG9pbnRlcikKLXsKLSAgICBndGtfbWFpbl9xdWl0KCk7Ci19Ci0K
LXN0YXRpYyBHdGtXaWRnZXQqIHNldHVwTWFpbk1lbnUoKQotewotICAgIEd0a1dpZGdldCogbWVu
dU1haW4gPSBndGtfbWVudV9uZXcoKTsKLSAgICBHdGtXaWRnZXQqIG1lbnVNYWluQmFjayA9IGd0
a19tZW51X2l0ZW1fbmV3X3dpdGhfbGFiZWwoIkJhY2siKTsKLSAgICBndGtfbWVudV9zaGVsbF9h
cHBlbmQoR1RLX01FTlVfU0hFTEwobWVudU1haW4pLCBtZW51TWFpbkJhY2spOwotICAgIGdfc2ln
bmFsX2Nvbm5lY3Rfc3dhcHBlZChHX09CSkVDVChtZW51TWFpbkJhY2spLCAiYWN0aXZhdGUiLCBH
X0NBTExCQUNLKG1lbnVNYWluQmFja0NhbGxiYWNrKSwgTlVMTCk7Ci0gICAgZ3RrX3dpZGdldF9z
aG93KG1lbnVNYWluQmFjayk7Ci0KLSAgICBHdGtXaWRnZXQqIG1lbnVNYWluRm9yd2FyZCA9IGd0
a19tZW51X2l0ZW1fbmV3X3dpdGhfbGFiZWwoIkZvcndhcmQiKTsKLSAgICBndGtfbWVudV9zaGVs
bF9hcHBlbmQoR1RLX01FTlVfU0hFTEwobWVudU1haW4pLCBtZW51TWFpbkZvcndhcmQpOwotICAg
IGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChHX09CSkVDVChtZW51TWFpbkZvcndhcmQpLCAiYWN0
aXZhdGUiLCBHX0NBTExCQUNLKG1lbnVNYWluRm9yd2FyZENhbGxiYWNrKSwgTlVMTCk7Ci0gICAg
Z3RrX3dpZGdldF9zaG93KG1lbnVNYWluRm9yd2FyZCk7Ci0KLSAgICBHdGtXaWRnZXQqIG1lbnVN
YWluUXVpdCA9IGd0a19tZW51X2l0ZW1fbmV3X3dpdGhfbGFiZWwoIlF1aXQiKTsKLSAgICBndGtf
bWVudV9zaGVsbF9hcHBlbmQoR1RLX01FTlVfU0hFTEwobWVudU1haW4pLCBtZW51TWFpblF1aXQp
OwotICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChHX09CSkVDVChtZW51TWFpblF1aXQpLCAi
YWN0aXZhdGUiLCBHX0NBTExCQUNLKG1lbnVNYWluUXVpdENhbGxiYWNrKSwgTlVMTCk7Ci0gICAg
Z3RrX3dpZGdldF9zaG93KG1lbnVNYWluUXVpdCk7Ci0KLSAgICBHdGtXaWRnZXQqIG1lbnVNYWlu
Um9vdCA9IGd0a19tZW51X2l0ZW1fbmV3X3dpdGhfbGFiZWwoIk1haW4iKTsKLSAgICBndGtfd2lk
Z2V0X3Nob3cobWVudU1haW5Sb290KTsKLSAgICBndGtfbWVudV9pdGVtX3NldF9zdWJtZW51KEdU
S19NRU5VX0lURU0obWVudU1haW5Sb290KSwgbWVudU1haW4pOwotICAgIAotICAgIHJldHVybiBt
ZW51TWFpblJvb3Q7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldHVwTWFpbldpbmRvd1VJKCkKLXsKLSAg
ICBHdGtXaWRnZXQqIG1lbnVNYWluUm9vdCA9IHNldHVwTWFpbk1lbnUoKTsKLQotICAgIEd0a1dp
ZGdldCogbWVudUJhciA9IGd0a19tZW51X2Jhcl9uZXcoKTsKLSAgICBndGtfbWVudV9zaGVsbF9h
cHBlbmQoR1RLX01FTlVfU0hFTEwobWVudUJhciksIG1lbnVNYWluUm9vdCk7Ci0KLSAgICBnVG9w
TGV2ZWxXaW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKLSAgICBn
dGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyhnVG9wTGV2ZWxXaW5kb3cpLCA4
MDAsIDYwMCk7Ci0gICAgZ3RrX3dpZGdldF9zZXRfbmFtZShnVG9wTGV2ZWxXaW5kb3csICJHdGtM
YXVuY2hlciIpOwotICAgIEd0a1dpZGdldCogdmJveCA9IGd0a192Ym94X25ldyhGQUxTRSwgMCk7
Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihnVG9wTGV2ZWxXaW5kb3cpLCB2
Ym94KTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KEdfT0JKRUNUKGdUb3BMZXZlbFdpbmRvdyksICJk
ZXN0cm95IiwgR19DQUxMQkFDSyhmcmFtZURlc3Ryb3lDYWxsYmFjayksIE5VTEwpOwotCi0gICAg
R3RrV2lkZ2V0KiBoYm94ID0gZ3RrX2hib3hfbmV3KEZBTFNFLCAyKTsKLSAgICBndGtfYm94X3Bh
Y2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgbWVudUJhciwgRkFMU0UsIEZBTFNFLCAwKTsKLSAgICBn
dGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgaGJveCwgRkFMU0UsIEZBTFNFLCAwKTsK
LQotICAgIGdVUkxCYXJFbnRyeSA9IGd0a19lbnRyeV9uZXcoKTsKLSAgICBnX3NpZ25hbF9jb25u
ZWN0KEdfT0JKRUNUKGdVUkxCYXJFbnRyeSksICJhY3RpdmF0ZSIsIEdfQ0FMTEJBQ0sodXJsQmFy
RW50ZXJDYWxsYmFjayksIChncG9pbnRlcilnVVJMQmFyRW50cnkpOwotICAgIGd0a19ib3hfcGFj
a19zdGFydChHVEtfQk9YKGhib3gpLCBnVVJMQmFyRW50cnksIFRSVUUsIFRSVUUsIDApOwotCi0g
ICAgR3RrV2lkZ2V0KiB1cmxCYXJTdWJtaXRCdXR0b24gPSBndGtfYnV0dG9uX25ld193aXRoX2xh
YmVsKCJHbyIpOyAgCi0gICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goaGJveCksIHVybEJh
clN1Ym1pdEJ1dHRvbiwgRkFMU0UsIEZBTFNFLCAwKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KEdf
T0JKRUNUKHVybEJhclN1Ym1pdEJ1dHRvbiksICJjbGlja2VkIiwgR19DQUxMQkFDSyhnb0J1dHRv
bkNsaWNrZWRDYWxsYmFjayksIChncG9pbnRlcilnVVJMQmFyRW50cnkpOwotICAgIGd0a193aWRn
ZXRfc2hvdyh2Ym94KTsKLQotICAgIEd0a1dpZGdldCogc2Nyb2xsZWRXaW5kb3cgPSBndGtfc2Ny
b2xsZWRfd2luZG93X25ldyhOVUxMLE5VTEwpOwotICAgIGd0a19zY3JvbGxlZF93aW5kb3dfc2V0
X3BvbGljeShHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkV2luZG93KSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1BPTElDWV9BVVRPTUFUSUMsIEdUS19QT0xJQ1lf
QVVUT01BVElDKTsKLSAgICAKLSAgICAKLSAgICBnUGFnZSA9IFdFQktJVF9QQUdFKHdlYmtpdF9w
YWdlX25ldygpKTsKLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHNjcm9sbGVk
V2luZG93KSwgR1RLX1dJREdFVChnUGFnZSkpOwotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtf
Qk9YKHZib3gpLCBzY3JvbGxlZFdpbmRvdywgVFJVRSwgVFJVRSwgMCk7Ci0KLSAgICBnU3RhdHVz
YmFyID0gR1RLX1NUQVRVU0JBUihndGtfc3RhdHVzYmFyX25ldygpKTsKLSAgICBnU3RhdHVzYmFy
Q29udGV4dElkID0gZ3RrX3N0YXR1c2Jhcl9nZXRfY29udGV4dF9pZChnU3RhdHVzYmFyLCAiTGlu
ayBIb3ZlciIpOwotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBHVEtfV0lE
R0VUKGdTdGF0dXNiYXIpLCBGQUxTRSwgRkFMU0UsIDApOwotICAgIAotICAgIGdfc2lnbmFsX2Nv
bm5lY3QoZ1BhZ2UsICJ0aXRsZS1jaGFuZ2VkIiwgR19DQUxMQkFDSyh0aXRsZUNoYW5nZWQpLCBn
UGFnZSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChnUGFnZSwgImxvYWQtcHJvZ3Jlc3MtY2hhbmdl
ZCIsIEdfQ0FMTEJBQ0socHJvZ3Jlc3NDaGFuZ2VkKSwgZ1BhZ2UpOwotICAgIGdfc2lnbmFsX2Nv
bm5lY3QoZ1BhZ2UsICJob3ZlcmluZy1vdmVyLWxpbmsiLCBHX0NBTExCQUNLKGhvdmVyaW5nT3Zl
ckxpbmspLCBnUGFnZSk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pIAot
ewotICAgIGd0a19pbml0KCZhcmdjLCAmYXJndik7Ci0gICAgd2Via2l0X2luaXQoKTsKLQotICAg
IHNldHVwTWFpbldpbmRvd1VJKCk7Ci0KLSAgICBjb25zdCBnY2hhciogdXJsID0gc3RhdGljX2Nh
c3Q8Y29uc3QgZ2NoYXIqPihhcmdjID4gMSA/IGFyZ3ZbMV0gOiAiaHR0cDovL3d3dy5nb29nbGUu
Y29tIik7Ci0gICAgd2Via2l0X3BhZ2Vfb3BlbihnUGFnZSwgdXJsKTsKLQotICAgIGd0a193aWRn
ZXRfc2hvd19hbGwoZ1RvcExldmVsV2luZG93KTsKLSAgICBndGtfbWFpbigpOwotICAgIHJldHVy
biAwOwotfQotCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17368</attachid>
            <date>2007-11-18 11:07:08 -0800</date>
            <delta_ts>2007-11-19 07:54:17 -0800</delta_ts>
            <desc>Ported to C</desc>
            <filename>gtklauncher.patch</filename>
            <type>text/plain</type>
            <size>14595</size>
            <attacher name="Alp Toker">alp</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDI3ODkwKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMDctMTEtMTggIEFscCBUb2tlciAgPGFscEBh
dG9rZXIuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDQwCisgICAgICAg
IFtHVEtdIEd0a0xhdW5jaGVyIHNob3VsZCBiZSB3cml0dGVuIGluIEMKKworICAgICAgICBQb3J0
IEd0a0xhdW5jaGVyIHRvIHBsYWluIEMuCisKKyAgICAgICAgVXNlIGEgbW9yZSBjb252ZW50aW9u
YWwgR1RLKyBjb2Rpbmcgc3R5bGUuCisKKyAgICAgICAgVXNlIGEgdG9vbGJhciBpbnN0ZWFkIG9m
IG1lbnVzLgorCisgICAgICAgIFZhcmlvdXMgc2lnbmF0dXJlIGZpeGVzIGFuZCBjbGVhbnVwcy4K
KworICAgICAgICBBZGQgYSBsaWNlbnNlIGhlYWRlci4gQXNzdW1lIGFsbCBwcmV2aW91cyBtb2Rp
ZmljYXRpb25zIHdlcmUgY29weXJpZ2h0CisgICAgICAgIGFzc2lnbmVkIHRvIEFwcGxlIEluYy4g
YnkgZGVmYXVsdC4KKworICAgICAgICAqIEd0a0xhdW5jaGVyL0d0a0xhdW5jaGVyLnBybzoKKyAg
ICAgICAgKiBHdGtMYXVuY2hlci9tYWluLmM6IEFkZGVkLgorICAgICAgICAoYWN0aXZhdGVfdXJs
X2VudHJ5X2NiKToKKyAgICAgICAgKHVwZGF0ZV90aXRsZSk6CisgICAgICAgIChsaW5rX2hvdmVy
X2NiKToKKyAgICAgICAgKHRpdGxlX2NoYW5nZV9jYik6CisgICAgICAgIChwcm9ncmVzc19jaGFu
Z2VfY2IpOgorICAgICAgICAoZGVzdHJveV9jYik6CisgICAgICAgIChnb19iYWNrX2NiKToKKyAg
ICAgICAgKGdvX2ZvcndhcmRfY2IpOgorICAgICAgICAoY3JlYXRlX2Jyb3dzZXIpOgorICAgICAg
ICAoY3JlYXRlX3N0YXR1c2Jhcik6CisgICAgICAgIChjcmVhdGVfdG9vbGJhcik6CisgICAgICAg
IChjcmVhdGVfd2luZG93KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIEd0a0xhdW5jaGVy
L21haW4uY3BwOiBSZW1vdmVkLgorCiAyMDA3LTExLTE4ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8
YXBAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgpJbmRleDog
V2ViS2l0VG9vbHMvR3RrTGF1bmNoZXIvR3RrTGF1bmNoZXIucHJvCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdFRvb2xzL0d0a0xhdW5jaGVyL0d0a0xhdW5jaGVyLnBybwkocmV2aXNpb24gMjc4ODgpCisr
KyBXZWJLaXRUb29scy9HdGtMYXVuY2hlci9HdGtMYXVuY2hlci5wcm8JKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiBURU1QTEFURSA9IGFwcAotU09VUkNFUyArPSBtYWluLmNwcAorU09V
UkNFUyArPSBtYWluLmMKIENPTkZJRyAtPSBhcHBfYnVuZGxlCiAKIEJBU0VfRElSID0gJCRQV0Qv
Li4vLi4KSW5kZXg6IFdlYktpdFRvb2xzL0d0a0xhdW5jaGVyL21haW4uYwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9HdGtMYXVuY2hlci9tYWluLmMJKHJldmlzaW9uIDApCisrKyBXZWJLaXRU
b29scy9HdGtMYXVuY2hlci9tYWluLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTk4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAo
QykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJ3ZWJr
aXRndGtwYWdlLmgiCisjaW5jbHVkZSAid2Via2l0Z3RrZ2xvYmFsLmgiCisjaW5jbHVkZSA8Z3Rr
L2d0ay5oPgorCitzdGF0aWMgR3RrV2lkZ2V0KiBtYWluX3dpbmRvdzsKK3N0YXRpYyBHdGtXaWRn
ZXQqIHVybF9lbnRyeTsKK3N0YXRpYyBHdGtTdGF0dXNiYXIqIG1haW5fc3RhdHVzYmFyOworc3Rh
dGljIFdlYktpdFBhZ2UqIHdlYl9wYWdlOworc3RhdGljIGdjaGFyKiBtYWluX3RpdGxlOworc3Rh
dGljIGdpbnQgbG9hZF9wcm9ncmVzczsKK3N0YXRpYyBndWludCBzdGF0dXNfY29udGV4dF9pZDsK
Kworc3RhdGljIHZvaWQKK2FjdGl2YXRlX3VybF9lbnRyeV9jYiAoR3RrV2lkZ2V0KiBlbnRyeSwg
Z3BvaW50ZXIgZGF0YSkKK3sKKyAgICBjb25zdCBnY2hhciogdXJsID0gZ3RrX2VudHJ5X2dldF90
ZXh0IChHVEtfRU5UUlkgKGVudHJ5KSk7CisgICAgZ19hc3NlcnQgKHVybCk7CisgICAgd2Via2l0
X3BhZ2Vfb3BlbiAod2ViX3BhZ2UsIHVybCk7Cit9CisKK3N0YXRpYyB2b2lkCit1cGRhdGVfdGl0
bGUgKEd0a1dpbmRvdyogd2luZG93KQoreworICAgIEdTdHJpbmcqIHN0cmluZyA9IGdfc3RyaW5n
X25ldyAobWFpbl90aXRsZSk7CisgICAgZ19zdHJpbmdfYXBwZW5kIChzdHJpbmcsICIgLSBXZWJL
aXQgTGF1bmNoZXIiKTsKKyAgICBpZiAobG9hZF9wcm9ncmVzcyA8IDEwMCkKKyAgICAgICAgZ19z
dHJpbmdfYXBwZW5kX3ByaW50ZiAoc3RyaW5nLCAiICglZCUlKSIsIGxvYWRfcHJvZ3Jlc3MpOwor
ICAgIGdjaGFyKiB0aXRsZSA9IGdfc3RyaW5nX2ZyZWUgKHN0cmluZywgRkFMU0UpOworICAgIGd0
a193aW5kb3dfc2V0X3RpdGxlICh3aW5kb3csIHRpdGxlKTsKKyAgICBnX2ZyZWUgKHRpdGxlKTsK
K30KKworc3RhdGljIHZvaWQKK2xpbmtfaG92ZXJfY2IgKFdlYktpdFBhZ2UqIHBhZ2UsIGNvbnN0
IGdjaGFyKiB0aXRsZSwgY29uc3QgZ2NoYXIqIGxpbmssIGdwb2ludGVyIGRhdGEpCit7CisgICAg
Ly8gdW5kZXJmbG93IGlzIGFsbG93ZWQKKyAgICBndGtfc3RhdHVzYmFyX3BvcCAobWFpbl9zdGF0
dXNiYXIsIHN0YXR1c19jb250ZXh0X2lkKTsKKyAgICBpZiAobGluaykKKyAgICAgICAgZ3RrX3N0
YXR1c2Jhcl9wdXNoIChtYWluX3N0YXR1c2Jhciwgc3RhdHVzX2NvbnRleHRfaWQsIGxpbmspOwor
fQorCitzdGF0aWMgdm9pZAordGl0bGVfY2hhbmdlX2NiIChXZWJLaXRQYWdlKiBwYWdlLCBjb25z
dCBnY2hhciogdGl0bGUsIGNvbnN0IGdjaGFyKiB1cmwsIGdwb2ludGVyIGRhdGEpCit7CisgICAg
Z3RrX2VudHJ5X3NldF90ZXh0IChHVEtfRU5UUlkgKHVybF9lbnRyeSksIHVybCk7CisKKyAgICBp
ZiAobWFpbl90aXRsZSkKKyAgICAgICAgZ19mcmVlIChtYWluX3RpdGxlKTsKKyAgICBtYWluX3Rp
dGxlID0gZ19zdHJkdXAgKHRpdGxlKTsKKyAgICB1cGRhdGVfdGl0bGUgKEdUS19XSU5ET1cgKG1h
aW5fd2luZG93KSk7Cit9CisKK3N0YXRpYyB2b2lkCitwcm9ncmVzc19jaGFuZ2VfY2IgKFdlYktp
dFBhZ2UqIHBhZ2UsIGdpbnQgcHJvZ3Jlc3MsIGdwb2ludGVyIGRhdGEpCit7CisgICAgbG9hZF9w
cm9ncmVzcyA9IHByb2dyZXNzOworICAgIHVwZGF0ZV90aXRsZSAoR1RLX1dJTkRPVyAobWFpbl93
aW5kb3cpKTsKK30KKworc3RhdGljIHZvaWQKK2Rlc3Ryb3lfY2IgKEd0a1dpZGdldCogd2lkZ2V0
LCBncG9pbnRlciBkYXRhKQoreworICAgIGd0a19tYWluX3F1aXQgKCk7Cit9CisKK3N0YXRpYyB2
b2lkCitnb19iYWNrX2NiIChHdGtXaWRnZXQqIHdpZGdldCwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAg
ICB3ZWJraXRfcGFnZV9nb19iYWNrd2FyZCAod2ViX3BhZ2UpOworfQorCitzdGF0aWMgdm9pZAor
Z29fZm9yd2FyZF9jYiAoR3RrV2lkZ2V0KiB3aWRnZXQsIGdwb2ludGVyIGRhdGEpCit7CisgICAg
d2Via2l0X3BhZ2VfZ29fZm9yd2FyZCAod2ViX3BhZ2UpOworfQorCitzdGF0aWMgR3RrV2lkZ2V0
KgorY3JlYXRlX2Jyb3dzZXIgKCkKK3sKKyAgICBHdGtXaWRnZXQqIHNjcm9sbGVkX3dpbmRvdyA9
IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3IChOVUxMLCBOVUxMKTsKKyAgICBndGtfc2Nyb2xsZWRf
d2luZG93X3NldF9wb2xpY3kgKEdUS19TQ1JPTExFRF9XSU5ET1cgKHNjcm9sbGVkX3dpbmRvdyks
IEdUS19QT0xJQ1lfQVVUT01BVElDLCBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7CisKKyAgICB3ZWJf
cGFnZSA9IFdFQktJVF9QQUdFICh3ZWJraXRfcGFnZV9uZXcgKCkpOworICAgIGd0a19jb250YWlu
ZXJfYWRkIChHVEtfQ09OVEFJTkVSIChzY3JvbGxlZF93aW5kb3cpLCBHVEtfV0lER0VUICh3ZWJf
cGFnZSkpOworCisgICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKHdlYl9wYWdlKSwgInRp
dGxlLWNoYW5nZWQiLCBHX0NBTExCQUNLICh0aXRsZV9jaGFuZ2VfY2IpLCB3ZWJfcGFnZSk7Cisg
ICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKHdlYl9wYWdlKSwgImxvYWQtcHJvZ3Jlc3Mt
Y2hhbmdlZCIsIEdfQ0FMTEJBQ0sgKHByb2dyZXNzX2NoYW5nZV9jYiksIHdlYl9wYWdlKTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAod2ViX3BhZ2UpLCAiaG92ZXJpbmctb3Zlci1s
aW5rIiwgR19DQUxMQkFDSyAobGlua19ob3Zlcl9jYiksIHdlYl9wYWdlKTsKKworICAgIHJldHVy
biBzY3JvbGxlZF93aW5kb3c7Cit9CisKK3N0YXRpYyBHdGtXaWRnZXQqCitjcmVhdGVfc3RhdHVz
YmFyICgpCit7CisgICAgbWFpbl9zdGF0dXNiYXIgPSBHVEtfU1RBVFVTQkFSIChndGtfc3RhdHVz
YmFyX25ldyAoKSk7CisgICAgc3RhdHVzX2NvbnRleHRfaWQgPSBndGtfc3RhdHVzYmFyX2dldF9j
b250ZXh0X2lkIChtYWluX3N0YXR1c2JhciwgIkxpbmsgSG92ZXIiKTsKKworICAgIHJldHVybiAo
R3RrV2lkZ2V0KiltYWluX3N0YXR1c2JhcjsKK30KKworc3RhdGljIEd0a1dpZGdldCoKK2NyZWF0
ZV90b29sYmFyICgpCit7CisgICAgR3RrV2lkZ2V0KiB0b29sYmFyID0gZ3RrX3Rvb2xiYXJfbmV3
ICgpOworCisgICAgZ3RrX3Rvb2xiYXJfc2V0X29yaWVudGF0aW9uIChHVEtfVE9PTEJBUiAodG9v
bGJhciksIEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMKTsKKyAgICBndGtfdG9vbGJhcl9zZXRf
c3R5bGUgKEdUS19UT09MQkFSICh0b29sYmFyKSwgR1RLX1RPT0xCQVJfQk9USF9IT1JJWik7CisK
KyAgICBHdGtUb29sSXRlbSogaXRlbTsKKworICAgIC8vIHRoZSBiYWNrIGJ1dHRvbgorICAgIGl0
ZW0gPSBndGtfdG9vbF9idXR0b25fbmV3X2Zyb21fc3RvY2sgKEdUS19TVE9DS19HT19CQUNLKTsK
KyAgICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAoaXRlbSksICJjbGlja2VkIiwgR19DQUxM
QkFDSyAoZ29fYmFja19jYiksIE5VTEwpOworICAgIGd0a190b29sYmFyX2luc2VydCAoR1RLX1RP
T0xCQVIgKHRvb2xiYXIpLCBpdGVtLCAtMSk7CisKKyAgICAvLyBUaGUgZm9yd2FyZCBidXR0b24K
KyAgICBpdGVtID0gZ3RrX3Rvb2xfYnV0dG9uX25ld19mcm9tX3N0b2NrIChHVEtfU1RPQ0tfR09f
Rk9SV0FSRCk7CisgICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKGl0ZW0pLCAiY2xpY2tl
ZCIsIEdfQ0FMTEJBQ0sgKGdvX2ZvcndhcmRfY2IpLCBOVUxMKTsKKyAgICBndGtfdG9vbGJhcl9p
bnNlcnQgKEdUS19UT09MQkFSICh0b29sYmFyKSwgaXRlbSwgLTEpOworCisgICAgLy8gVGhlIFVS
TCBlbnRyeQorICAgIGl0ZW0gPSBndGtfdG9vbF9pdGVtX25ldyAoKTsKKyAgICBndGtfdG9vbF9p
dGVtX3NldF9leHBhbmQgKGl0ZW0sIFRSVUUpOworICAgIHVybF9lbnRyeSA9IGd0a19lbnRyeV9u
ZXcgKCk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQgKEdUS19DT05UQUlORVIgKGl0ZW0pLCB1cmxf
ZW50cnkpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUICh1cmxfZW50cnkpLCAiYWN0
aXZhdGUiLCBHX0NBTExCQUNLIChhY3RpdmF0ZV91cmxfZW50cnlfY2IpLCBOVUxMKTsKKyAgICBn
dGtfdG9vbGJhcl9pbnNlcnQgKEdUS19UT09MQkFSICh0b29sYmFyKSwgaXRlbSwgLTEpOworCisg
ICAgLy8gVGhlIGdvIGJ1dHRvbgorICAgIGl0ZW0gPSBndGtfdG9vbF9idXR0b25fbmV3X2Zyb21f
c3RvY2sgKEdUS19TVE9DS19PSyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkIChHX09C
SkVDVCAoaXRlbSksICJjbGlja2VkIiwgR19DQUxMQkFDSyAoYWN0aXZhdGVfdXJsX2VudHJ5X2Ni
KSwgKGdwb2ludGVyKXVybF9lbnRyeSk7CisgICAgZ3RrX3Rvb2xiYXJfaW5zZXJ0IChHVEtfVE9P
TEJBUiAodG9vbGJhciksIGl0ZW0sIC0xKTsKKworICAgIHJldHVybiB0b29sYmFyOworfQorCitz
dGF0aWMgR3RrV2lkZ2V0KgorY3JlYXRlX3dpbmRvdyAoKQoreworICAgIEd0a1dpZGdldCogd2lu
ZG93ID0gZ3RrX3dpbmRvd19uZXcgKEdUS19XSU5ET1dfVE9QTEVWRUwpOworICAgIGd0a193aW5k
b3dfc2V0X2RlZmF1bHRfc2l6ZSAoR1RLX1dJTkRPVyAod2luZG93KSwgODAwLCA2MDApOworICAg
IGd0a193aWRnZXRfc2V0X25hbWUgKHdpbmRvdywgIkd0a0xhdW5jaGVyIik7CisgICAgZ19zaWdu
YWxfY29ubmVjdCAoR19PQkpFQ1QgKHdpbmRvdyksICJkZXN0cm95IiwgR19DQUxMQkFDSyAoZGVz
dHJveV9jYiksIE5VTEwpOworCisgICAgcmV0dXJuIHdpbmRvdzsKK30KKworaW50CittYWluIChp
bnQgYXJnYywgY2hhciogYXJndltdKQoreworICAgIGd0a19pbml0ICgmYXJnYywgJmFyZ3YpOwor
ICAgIHdlYmtpdF9pbml0ICgpOworCisgICAgR3RrV2lkZ2V0KiB2Ym94ID0gZ3RrX3Zib3hfbmV3
IChGQUxTRSwgMCk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0IChHVEtfQk9YICh2Ym94KSwgY3Jl
YXRlX3Rvb2xiYXIgKCksIEZBTFNFLCBGQUxTRSwgMCk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0
IChHVEtfQk9YICh2Ym94KSwgY3JlYXRlX2Jyb3dzZXIgKCksIFRSVUUsIFRSVUUsIDApOworICAg
IGd0a19ib3hfcGFja19zdGFydCAoR1RLX0JPWCAodmJveCksIGNyZWF0ZV9zdGF0dXNiYXIgKCks
IEZBTFNFLCBGQUxTRSwgMCk7CisKKyAgICBtYWluX3dpbmRvdyA9IGNyZWF0ZV93aW5kb3cgKCk7
CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQgKEdUS19DT05UQUlORVIgKG1haW5fd2luZG93KSwgdmJv
eCk7CisKKyAgICBnY2hhciogdXJsID0gKGdjaGFyKikgKGFyZ2MgPiAxID8gYXJndlsxXSA6ICJo
dHRwOi8vd3d3Lmdvb2dsZS5jb20vIik7CisgICAgd2Via2l0X3BhZ2Vfb3BlbiAod2ViX3BhZ2Us
IHVybCk7CisKKyAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMgKEdUS19XSURHRVQgKHdlYl9wYWdl
KSk7CisgICAgZ3RrX3dpZGdldF9zaG93X2FsbCAobWFpbl93aW5kb3cpOworICAgIGd0a19tYWlu
ICgpOworCisgICAgcmV0dXJuIDA7Cit9CkluZGV4OiBXZWJLaXRUb29scy9HdGtMYXVuY2hlci9t
YWluLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9HdGtMYXVuY2hlci9tYWluLmNwcAko
cmV2aXNpb24gMjc4ODgpCisrKyBXZWJLaXRUb29scy9HdGtMYXVuY2hlci9tYWluLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSwxNzQgKzAsMCBAQAotI2luY2x1ZGUgIndlYmtpdGd0a3BhZ2UuaCIK
LSNpbmNsdWRlICJ3ZWJraXRndGtnbG9iYWwuaCIKLQotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQot
I2luY2x1ZGUgPHN0cmluZy5oPgotCi1zdGF0aWMgR3RrV2lkZ2V0KiBnVVJMQmFyRW50cnk7Ci1z
dGF0aWMgR3RrV2lkZ2V0KiBnVG9wTGV2ZWxXaW5kb3c7Ci1zdGF0aWMgR3RrU3RhdHVzYmFyKiBn
U3RhdHVzYmFyOwotc3RhdGljIFdlYktpdFBhZ2UqIGdQYWdlOwotc3RhdGljIGdjaGFyKiBnVGl0
bGU7Ci1zdGF0aWMgZ2ludCBnUHJvZ3Jlc3M7Ci1zdGF0aWMgZ3VpbnQgZ1N0YXR1c2JhckNvbnRl
eHRJZDsKLQotc3RhdGljIHZvaWQgZ29Ub1VSTEJhclRleHQoR3RrV2lkZ2V0KiB1cmxCYXJFbnRy
eSkKLXsKLSAgICBjb25zdCBnY2hhciogdXJsID0gZ3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRS
WSh1cmxCYXJFbnRyeSkpOwotICAgIGlmICghdXJsIHx8IHN0cmxlbih1cmwpID09IDApCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHdlYmtpdF9wYWdlX29wZW4oZ1BhZ2UsIHVybCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGdvQnV0dG9uQ2xpY2tlZENhbGxiYWNrKEd0a1dpZGdldCosIEd0a1dpZGdldCog
ZW50cnkpCi17Ci0gICAgZ29Ub1VSTEJhclRleHQoZW50cnkpOwotfQotCi1zdGF0aWMgdm9pZCB1
cmxCYXJFbnRlckNhbGxiYWNrKEd0a1dpZGdldCosIEd0a1dpZGdldCogZW50cnkpCi17Ci0gICAg
Z29Ub1VSTEJhclRleHQoZW50cnkpOwotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVXaW5kb3dUaXRs
ZSgpCi17Ci0gICAgR1N0cmluZyogc3RyaW5nID0gZ19zdHJpbmdfbmV3KE5VTEwpOwotICAgIGdf
c3RyaW5nX3ByaW50ZihzdHJpbmcsICJHdGtMYXVuY2hlciAlcyAgKCVkLzEwMCkiLCBnVGl0bGUs
IGdQcm9ncmVzcyk7Ci0gICAgZ2NoYXIqIHRpdGxlID0gZ19zdHJpbmdfZnJlZShzdHJpbmcsIEZB
TFNFKTsKLSAgICBndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKGdUb3BMZXZlbFdpbmRv
dyksIHRpdGxlKTsKLSAgICBnX2ZyZWUodGl0bGUpOwotfQotCi1zdGF0aWMgdm9pZCBob3Zlcmlu
Z092ZXJMaW5rKFdlYktpdFBhZ2UqLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFyKiBsaW5rLCB2
b2lkKikKLXsKLSAgICAvLyB1bmRlcmZsb3cgaXMgYWxsb3dlZAotICAgIGd0a19zdGF0dXNiYXJf
cG9wKGdTdGF0dXNiYXIsIGdTdGF0dXNiYXJDb250ZXh0SWQpOwotICAgIGlmIChsaW5rKQotICAg
ICAgICBndGtfc3RhdHVzYmFyX3B1c2goZ1N0YXR1c2JhciwgZ1N0YXR1c2JhckNvbnRleHRJZCwg
bGluayk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRpdGxlQ2hhbmdlZChXZWJLaXRQYWdlKiwgY29uc3Qg
Z2NoYXIqIHRpdGxlLCBjb25zdCBnY2hhciogdXJsLCBXZWJLaXRQYWdlKikKLXsKLSAgICBndGtf
ZW50cnlfc2V0X3RleHQoR1RLX0VOVFJZKGdVUkxCYXJFbnRyeSksIHVybCk7Ci0KLSAgICBpZiAo
Z1RpdGxlKQotICAgICAgICBnX2ZyZWUoZ1RpdGxlKTsKLSAgICBnVGl0bGUgPSBnX3N0cmR1cCh0
aXRsZSk7Ci0gICAgdXBkYXRlV2luZG93VGl0bGUoKTsKLX0KLQotc3RhdGljIHZvaWQgcHJvZ3Jl
c3NDaGFuZ2VkKFdlYktpdFBhZ2UqLCBnaW50IHByb2dyZXNzLCBXZWJLaXRQYWdlKikKLXsKLSAg
ICBnUHJvZ3Jlc3MgPSBwcm9ncmVzczsKLSAgICB1cGRhdGVXaW5kb3dUaXRsZSgpOwotfQotCi1z
dGF0aWMgdm9pZCBmcmFtZURlc3Ryb3lDYWxsYmFjayhHdGtXaWRnZXQqLCBncG9pbnRlcikKLXsK
LSAgICBndGtfbWFpbl9xdWl0KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1lbnVNYWluQmFja0NhbGxi
YWNrKGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnQoIWRhdGEpOwotICAgIHdlYmtpdF9w
YWdlX2dvX2JhY2t3YXJkKGdQYWdlKTsKLX0KLQotc3RhdGljIHZvaWQgbWVudU1haW5Gb3J3YXJk
Q2FsbGJhY2soZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBnX2Fzc2VydCghZGF0YSk7Ci0gICAgd2Vi
a2l0X3BhZ2VfZ29fZm9yd2FyZChnUGFnZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1lbnVNYWluUXVp
dENhbGxiYWNrKGdwb2ludGVyKQotewotICAgIGd0a19tYWluX3F1aXQoKTsKLX0KLQotc3RhdGlj
IEd0a1dpZGdldCogc2V0dXBNYWluTWVudSgpCi17Ci0gICAgR3RrV2lkZ2V0KiBtZW51TWFpbiA9
IGd0a19tZW51X25ldygpOwotICAgIEd0a1dpZGdldCogbWVudU1haW5CYWNrID0gZ3RrX21lbnVf
aXRlbV9uZXdfd2l0aF9sYWJlbCgiQmFjayIpOwotICAgIGd0a19tZW51X3NoZWxsX2FwcGVuZChH
VEtfTUVOVV9TSEVMTChtZW51TWFpbiksIG1lbnVNYWluQmFjayk7Ci0gICAgZ19zaWduYWxfY29u
bmVjdF9zd2FwcGVkKEdfT0JKRUNUKG1lbnVNYWluQmFjayksICJhY3RpdmF0ZSIsIEdfQ0FMTEJB
Q0sobWVudU1haW5CYWNrQ2FsbGJhY2spLCBOVUxMKTsKLSAgICBndGtfd2lkZ2V0X3Nob3cobWVu
dU1haW5CYWNrKTsKLQotICAgIEd0a1dpZGdldCogbWVudU1haW5Gb3J3YXJkID0gZ3RrX21lbnVf
aXRlbV9uZXdfd2l0aF9sYWJlbCgiRm9yd2FyZCIpOwotICAgIGd0a19tZW51X3NoZWxsX2FwcGVu
ZChHVEtfTUVOVV9TSEVMTChtZW51TWFpbiksIG1lbnVNYWluRm9yd2FyZCk7Ci0gICAgZ19zaWdu
YWxfY29ubmVjdF9zd2FwcGVkKEdfT0JKRUNUKG1lbnVNYWluRm9yd2FyZCksICJhY3RpdmF0ZSIs
IEdfQ0FMTEJBQ0sobWVudU1haW5Gb3J3YXJkQ2FsbGJhY2spLCBOVUxMKTsKLSAgICBndGtfd2lk
Z2V0X3Nob3cobWVudU1haW5Gb3J3YXJkKTsKLQotICAgIEd0a1dpZGdldCogbWVudU1haW5RdWl0
ID0gZ3RrX21lbnVfaXRlbV9uZXdfd2l0aF9sYWJlbCgiUXVpdCIpOwotICAgIGd0a19tZW51X3No
ZWxsX2FwcGVuZChHVEtfTUVOVV9TSEVMTChtZW51TWFpbiksIG1lbnVNYWluUXVpdCk7Ci0gICAg
Z19zaWduYWxfY29ubmVjdF9zd2FwcGVkKEdfT0JKRUNUKG1lbnVNYWluUXVpdCksICJhY3RpdmF0
ZSIsIEdfQ0FMTEJBQ0sobWVudU1haW5RdWl0Q2FsbGJhY2spLCBOVUxMKTsKLSAgICBndGtfd2lk
Z2V0X3Nob3cobWVudU1haW5RdWl0KTsKLQotICAgIEd0a1dpZGdldCogbWVudU1haW5Sb290ID0g
Z3RrX21lbnVfaXRlbV9uZXdfd2l0aF9sYWJlbCgiTWFpbiIpOwotICAgIGd0a193aWRnZXRfc2hv
dyhtZW51TWFpblJvb3QpOwotICAgIGd0a19tZW51X2l0ZW1fc2V0X3N1Ym1lbnUoR1RLX01FTlVf
SVRFTShtZW51TWFpblJvb3QpLCBtZW51TWFpbik7Ci0gICAgCi0gICAgcmV0dXJuIG1lbnVNYWlu
Um9vdDsKLX0KLQotc3RhdGljIHZvaWQgc2V0dXBNYWluV2luZG93VUkoKQotewotICAgIEd0a1dp
ZGdldCogbWVudU1haW5Sb290ID0gc2V0dXBNYWluTWVudSgpOwotCi0gICAgR3RrV2lkZ2V0KiBt
ZW51QmFyID0gZ3RrX21lbnVfYmFyX25ldygpOwotICAgIGd0a19tZW51X3NoZWxsX2FwcGVuZChH
VEtfTUVOVV9TSEVMTChtZW51QmFyKSwgbWVudU1haW5Sb290KTsKLQotICAgIGdUb3BMZXZlbFdp
bmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotICAgIGd0a193aW5k
b3dfc2V0X2RlZmF1bHRfc2l6ZShHVEtfV0lORE9XKGdUb3BMZXZlbFdpbmRvdyksIDgwMCwgNjAw
KTsKLSAgICBndGtfd2lkZ2V0X3NldF9uYW1lKGdUb3BMZXZlbFdpbmRvdywgIkd0a0xhdW5jaGVy
Iik7Ci0gICAgR3RrV2lkZ2V0KiB2Ym94ID0gZ3RrX3Zib3hfbmV3KEZBTFNFLCAwKTsKLSAgICBn
dGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGdUb3BMZXZlbFdpbmRvdyksIHZib3gpOwot
ICAgIGdfc2lnbmFsX2Nvbm5lY3QoR19PQkpFQ1QoZ1RvcExldmVsV2luZG93KSwgImRlc3Ryb3ki
LCBHX0NBTExCQUNLKGZyYW1lRGVzdHJveUNhbGxiYWNrKSwgTlVMTCk7Ci0KLSAgICBHdGtXaWRn
ZXQqIGhib3ggPSBndGtfaGJveF9uZXcoRkFMU0UsIDIpOwotICAgIGd0a19ib3hfcGFja19zdGFy
dChHVEtfQk9YKHZib3gpLCBtZW51QmFyLCBGQUxTRSwgRkFMU0UsIDApOwotICAgIGd0a19ib3hf
cGFja19zdGFydChHVEtfQk9YKHZib3gpLCBoYm94LCBGQUxTRSwgRkFMU0UsIDApOwotCi0gICAg
Z1VSTEJhckVudHJ5ID0gZ3RrX2VudHJ5X25ldygpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoR19P
QkpFQ1QoZ1VSTEJhckVudHJ5KSwgImFjdGl2YXRlIiwgR19DQUxMQkFDSyh1cmxCYXJFbnRlckNh
bGxiYWNrKSwgKGdwb2ludGVyKWdVUkxCYXJFbnRyeSk7Ci0gICAgZ3RrX2JveF9wYWNrX3N0YXJ0
KEdUS19CT1goaGJveCksIGdVUkxCYXJFbnRyeSwgVFJVRSwgVFJVRSwgMCk7Ci0KLSAgICBHdGtX
aWRnZXQqIHVybEJhclN1Ym1pdEJ1dHRvbiA9IGd0a19idXR0b25fbmV3X3dpdGhfbGFiZWwoIkdv
Iik7ICAKLSAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChoYm94KSwgdXJsQmFyU3VibWl0
QnV0dG9uLCBGQUxTRSwgRkFMU0UsIDApOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoR19PQkpFQ1Qo
dXJsQmFyU3VibWl0QnV0dG9uKSwgImNsaWNrZWQiLCBHX0NBTExCQUNLKGdvQnV0dG9uQ2xpY2tl
ZENhbGxiYWNrKSwgKGdwb2ludGVyKWdVUkxCYXJFbnRyeSk7Ci0gICAgZ3RrX3dpZGdldF9zaG93
KHZib3gpOwotCi0gICAgR3RrV2lkZ2V0KiBzY3JvbGxlZFdpbmRvdyA9IGd0a19zY3JvbGxlZF93
aW5kb3dfbmV3KE5VTEwsTlVMTCk7Ci0gICAgZ3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5
KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRXaW5kb3cpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHVEtfUE9MSUNZX0FVVE9NQVRJQywgR1RLX1BPTElDWV9BVVRPTUFU
SUMpOwotICAgIAotICAgIAotICAgIGdQYWdlID0gV0VCS0lUX1BBR0Uod2Via2l0X3BhZ2VfbmV3
KCkpOwotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoc2Nyb2xsZWRXaW5kb3cp
LCBHVEtfV0lER0VUKGdQYWdlKSk7Ci0gICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJv
eCksIHNjcm9sbGVkV2luZG93LCBUUlVFLCBUUlVFLCAwKTsKLQotICAgIGdTdGF0dXNiYXIgPSBH
VEtfU1RBVFVTQkFSKGd0a19zdGF0dXNiYXJfbmV3KCkpOwotICAgIGdTdGF0dXNiYXJDb250ZXh0
SWQgPSBndGtfc3RhdHVzYmFyX2dldF9jb250ZXh0X2lkKGdTdGF0dXNiYXIsICJMaW5rIEhvdmVy
Iik7Ci0gICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIEdUS19XSURHRVQoZ1N0
YXR1c2JhciksIEZBTFNFLCBGQUxTRSwgMCk7Ci0gICAgCi0gICAgZ19zaWduYWxfY29ubmVjdChn
UGFnZSwgInRpdGxlLWNoYW5nZWQiLCBHX0NBTExCQUNLKHRpdGxlQ2hhbmdlZCksIGdQYWdlKTsK
LSAgICBnX3NpZ25hbF9jb25uZWN0KGdQYWdlLCAibG9hZC1wcm9ncmVzcy1jaGFuZ2VkIiwgR19D
QUxMQkFDSyhwcm9ncmVzc0NoYW5nZWQpLCBnUGFnZSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChn
UGFnZSwgImhvdmVyaW5nLW92ZXItbGluayIsIEdfQ0FMTEJBQ0soaG92ZXJpbmdPdmVyTGluayks
IGdQYWdlKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkgCi17Ci0gICAg
Z3RrX2luaXQoJmFyZ2MsICZhcmd2KTsKLSAgICB3ZWJraXRfaW5pdCgpOwotCi0gICAgc2V0dXBN
YWluV2luZG93VUkoKTsKLQotICAgIGNvbnN0IGdjaGFyKiB1cmwgPSBzdGF0aWNfY2FzdDxjb25z
dCBnY2hhcio+KGFyZ2MgPiAxID8gYXJndlsxXSA6ICJodHRwOi8vd3d3Lmdvb2dsZS5jb20iKTsK
LSAgICB3ZWJraXRfcGFnZV9vcGVuKGdQYWdlLCB1cmwpOwotCi0gICAgZ3RrX3dpZGdldF9zaG93
X2FsbChnVG9wTGV2ZWxXaW5kb3cpOwotICAgIGd0a19tYWluKCk7Ci0gICAgcmV0dXJuIDA7Ci19
Ci0K
</data>
<flag name="review"
          id="7408"
          type_id="1"
          status="+"
          setter="mrowe"
    />
          </attachment>
      

    </bug>

</bugzilla>