<?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>82441</bug_id>
          
          <creation_ts>2012-03-28 02:44:26 -0700</creation_ts>
          <short_desc>[GTK] Initial cookies API for WebKit2 GTK+ API</short_desc>
          <delta_ts>2012-04-16 08:32:39 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</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>
          
          <blocked>82598</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gustavo</cc>
    
    <cc>mrobinson</cc>
    
    <cc>svillar</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>589781</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-28 02:44:26 -0700</bug_when>
    <thetext>Add an initial WebKitCookieManager object to be able to set the acceptance policy, get domains and delete cookies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589789</commentid>
    <comment_count>1</comment_count>
      <attachid>134247</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-28 02:51:27 -0700</bug_when>
    <thetext>Created attachment 134247
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589792</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-28 02:54:18 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600206</commentid>
    <comment_count>3</comment_count>
      <attachid>134247</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-04-11 05:15:13 -0700</bug_when>
    <thetext>Comment on attachment 134247
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=134247&amp;action=review

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.cpp:210
&gt; +    WKCookieManagerDeleteCookiesForHostname(manager-&gt;priv-&gt;wkCookieManager.get(), wkDomain.get());

Are the delete calls synchronous, or do we just not care about the result in this case? Also what about deleting a single cookie? That&apos;s something Ephy does today, something we want to keep supporting?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600222</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-04-11 06:24:09 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 134247 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=134247&amp;action=review

Thanks for reviewing!

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.cpp:210
&gt; &gt; +    WKCookieManagerDeleteCookiesForHostname(manager-&gt;priv-&gt;wkCookieManager.get(), wkDomain.get());
&gt; 
&gt; Are the delete calls synchronous, or do we just not care about the result in this case?

It&apos;s async, but the C API doesn&apos;t provide any result nor callback to be emitted when the operation finishes.

&gt; Also what about deleting a single cookie?

Not supported by the C API.

&gt; That&apos;s something Ephy does today, something we want to keep supporting?

As I commented in the mailing list when I proposed this API, it&apos;s not a common operation, people usually remove the cookies for a domain rather than a single cookie. However, since bugs #82081 and #82082 landed already, it&apos;s now possible to see the details of all cookies using the inspector, as well as deleting a single cookie. So, we could leave that as an advanced feature available through the inspector. Or we can add the API if you think it&apos;s really important. In any case, I think it would be batter to discuss about it in the mailing list, see this thread:

https://lists.webkit.org/pipermail/webkit-gtk/2012-March/001007.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600312</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-04-11 09:15:05 -0700</bug_when>
    <thetext>Committed r113870: &lt;http://trac.webkit.org/changeset/113870&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>603175</commentid>
    <comment_count>6</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-04-16 08:32:39 -0700</bug_when>
    <thetext>I think using the inspector for these advanced features is a great idea, yeah =)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134247</attachid>
            <date>2012-03-28 02:51:27 -0700</date>
            <delta_ts>2012-04-11 05:15:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-cookie-manager.diff</filename>
            <type>text/plain</type>
            <size>35617</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA4MDZkNjYxLi4zMmE1ZTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTgg
QEAKKzIwMTItMDMtMjggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEluaXRpYWwgY29va2llcyBBUEkgZm9yIFdlYktpdDIgR1RLKyBB
UEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyNDQx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbTogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAgICh3
ZWJraXRfY29va2llX21hbmFnZXJfaW5pdCk6CisgICAgICAgICh3ZWJraXRDb29raWVNYW5hZ2Vy
RmluYWxpemUpOgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2NsYXNzX2luaXQpOgor
ICAgICAgICAod2Via2l0Q29va2llTWFuYWdlckNyZWF0ZSk6IENyZWF0ZSBhIG5ldyBXZWJLaXRD
b29raWVNYW5hZ2VyIGZvcgorICAgICAgICB0aGUgZ2l2ZW4gV0tDb29raWVNYW5hZ2VyUmVmLgor
ICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9hY2NlcHRfcG9saWN5KTogU2V0IHRo
ZSBjb29raWUKKyAgICAgICAgYWNjZXB0YW5jZSBwb2xpY3kuCisgICAgICAgICh3ZWJraXRDb29r
aWVNYW5hZ2VyR2V0QWNjZXB0UG9saWN5Q2FsbGJhY2spOiBDYWxsYmFjayBjYWxsZWQgYnkKKyAg
ICAgICAgdGhlIEMgQVBJIHdoZW4gdGhlIGNvb2tpZSBhY2NlcHRhbmNlIHBvbGljeSBoYXMgYmVl
biByZWNlaXZlZC4KKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNjZXB0X3Bv
bGljeSk6IEFzeW5jaHJvbm91c2x5IGdldCB0aGUKKyAgICAgICAgY29va2llIGFjY2VwdGFuY2Ug
cG9saWN5LgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5
X2ZpbmlzaCk6IEZpbmlzaCBhc3luYworICAgICAgICBvcGVyYXRpb24gc3RhcnRlZCBieSB3ZWJr
aXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3koKQorICAgICAgICByZXR1cm5pbmcg
dGhlIGNvb2tpZSBhY2NlcHRhbmNlIHBvbGljeS4KKyAgICAgICAgKHdlYmtpdENvb2tpZU1hbmFn
ZXJHZXREb21haW5zV2l0aENvb2tpZXNDYWxsYmFjayk6IENhbGxiYWNrCisgICAgICAgIGNhbGxl
ZCBieSB0aGUgQyBBUEkgd2hlbiB0aGUgbGlzdCBvZiBob3N0bmFtZXMgd2l0aCBjb29raWVzIGhh
cworICAgICAgICBiZWVuIHJlY2VpdmVkLgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2Vy
X2dldF9kb21haW5zX3dpdGhfY29va2llcyk6IEFzeW5jaHJvbm91c2x5CisgICAgICAgIGdldCB0
aGUgbGlzdCBvZiBkb21haW5zIHdpdGggY29va2llcy4KKyAgICAgICAgKHdlYmtpdF9jb29raWVf
bWFuYWdlcl9nZXRfZG9tYWluc193aXRoX2Nvb2tpZXNfZmluaXNoKTogRmluaXNoCisgICAgICAg
IGFzeW5jIG9wZXJhdGlvbiBzdGFydGVkIGJ5CisgICAgICAgIHdlYmtpdF9jb29raWVfbWFuYWdl
cl9nZXRfZG9tYWluc193aXRoX2Nvb2tpZXMoKSByZXR1cm5pbmcgdGhlCisgICAgICAgIGxpc3Qg
b2YgZG9tYWlucy4KKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2ll
c19mb3JfZG9tYWluKTogRGVsZXRlIGFsbAorICAgICAgICBjb29raWVzIGZvciB0aGUgZ2l2ZW4g
ZG9tYWluLgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9hbGxfY29va2ll
cyk6IERlbGV0ZSBhbGwgY29va2llcy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRDb29raWVNYW5hZ2VyLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdENvb2tpZU1hbmFnZXJQcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwOgorICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0
X2dldF9jb29raWVfbWFuYWdlcik6IEdldCB0aGUKKyAgICAgICAgV2ViS2l0Q29va2llTWFuYWdl
ciBhc3NvY2lhdGVkIHdpdGggdGhlIHdlYiBjb250ZXh0LgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9k
b2NzL3dlYmtpdDJndGstZG9jcy5zZ21sOiBBZGQgbmV3IGNoYXB0ZXIgZm9yCisgICAgICAgIFdl
YktpdENvb2tpZU1hbmFnZXIuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJr
aXQyZ3RrLXNlY3Rpb25zLnR4dDogQWRkIG5ldyBzeW1ib2xzLgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlczogQWRkCisgICAgICAgIHdlYmtpdF9jb29r
aWVfbWFuYWdlcl9nZXRfdHlwZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9H
TlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0Q29v
a2llTWFuYWdlci5jcHA6IEFkZGVkLgorICAgICAgICAodGVzdENvb2tpZU1hbmFnZXJBY2NlcHRQ
b2xpY3kpOgorICAgICAgICAodGVzdENvb2tpZU1hbmFnZXJEZWxldGVDb29raWVzKToKKyAgICAg
ICAgKHNlcnZlckNhbGxiYWNrKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRl
ckFsbCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oOiBJbmNsdWRlIFdl
YktpdENvb2tpZU1hbmFnZXIuaC4KKwogMjAxMi0wMy0yNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3Mg
IDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IFdlYkZyYW1lTmV0d29y
a2luZ0NvbnRleHQgZm9yIHNvdXAgaW4gV2ViS2l0MgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCAz
NjRkM2QxLi5kODNkMjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5h
bQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtODYsNiArODYsNyBAQCBu
b2Rpc3RfbGlid2Via2l0Mmd0a2luY2x1ZGVfSEVBREVSUyA9IFwKIGxpYndlYmtpdDJndGtpbmNs
dWRlX0hFQURFUlMgPSBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNr
Rm9yd2FyZExpc3QuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNr
Rm9yd2FyZExpc3RJdGVtLmggXAorCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
Q29va2llTWFuYWdlci5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERl
ZmluZXMuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5o
IFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVkaXRpbmdDb21tYW5kcy5o
IFwKQEAgLTU0NSw2ICs1NDYsOSBAQCB3ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uaCBcCiAJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5j
cHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJk
TGlzdFByaXZhdGUuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
Q29va2llTWFuYWdlci5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRDb29raWVNYW5hZ2VyLmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0RGVmaW5lcy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXREb3dubG9hZC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdERvd25sb2FkLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0Q29va2llTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5iMjAxM2UwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29va2llTWFuYWdlci5jcHAKQEAgLTAsMCArMSwy
MjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRDb29raWVNYW5hZ2VyLmgiCisKKyNpbmNsdWRlICJX
ZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdEVudW1UeXBlcy5o
IgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK3N0cnVjdCBfV2ViS2l0Q29v
a2llTWFuYWdlclByaXZhdGUgeworICAgIFdLUmV0YWluUHRyPFdLQ29va2llTWFuYWdlclJlZj4g
d2tDb29raWVNYW5hZ2VyOworfTsKKworR19ERUZJTkVfVFlQRShXZWJLaXRDb29raWVNYW5hZ2Vy
LCB3ZWJraXRfY29va2llX21hbmFnZXIsIEdfVFlQRV9PQkpFQ1QpCisKK0NPTVBJTEVfQVNTRVJU
X01BVENISU5HX0VOVU0oV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX0FMV0FZUywga1dLSFRU
UENvb2tpZUFjY2VwdFBvbGljeUFsd2F5cyk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVN
KFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9ORVZFUiwga1dLSFRUUENvb2tpZUFjY2VwdFBv
bGljeU5ldmVyKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX0NPT0tJRV9Q
T0xJQ1lfQUNDRVBUX05PX1RISVJEX1BBUlRZLCBrV0tIVFRQQ29va2llQWNjZXB0UG9saWN5T25s
eUZyb21NYWluRG9jdW1lbnREb21haW4pOworCitzdGF0aWMgdm9pZCB3ZWJraXRfY29va2llX21h
bmFnZXJfaW5pdChXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyKQoreworICAgIFdlYktpdENv
b2tpZU1hbmFnZXJQcml2YXRlKiBwcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG1h
bmFnZXIsIFdFQktJVF9UWVBFX0NPT0tJRV9NQU5BR0VSLCBXZWJLaXRDb29raWVNYW5hZ2VyUHJp
dmF0ZSk7CisgICAgbWFuYWdlci0+cHJpdiA9IHByaXY7CisgICAgbmV3IChwcml2KSBXZWJLaXRD
b29raWVNYW5hZ2VyUHJpdmF0ZSgpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRDb29raWVNYW5h
Z2VyRmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdFQktJVF9DT09LSUVfTUFOQUdF
UihvYmplY3QpLT5wcml2LT5+V2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUoKTsKKyAgICBHX09C
SkVDVF9DTEFTUyh3ZWJraXRfY29va2llX21hbmFnZXJfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUo
b2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2NsYXNzX2lu
aXQoV2ViS2l0Q29va2llTWFuYWdlckNsYXNzKiBmaW5kQ2xhc3MpCit7CisgICAgR09iamVjdENs
YXNzKiBnT2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhmaW5kQ2xhc3MpOworICAgIGdPYmpl
Y3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRDb29raWVNYW5hZ2VyRmluYWxpemU7CisKKyAgICBn
X3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZmluZENsYXNzLCBzaXplb2YoV2ViS2l0Q29va2llTWFu
YWdlclByaXZhdGUpKTsKK30KKworV2ViS2l0Q29va2llTWFuYWdlciogd2Via2l0Q29va2llTWFu
YWdlckNyZWF0ZShXS0Nvb2tpZU1hbmFnZXJSZWYgd2tDb29raWVNYW5hZ2VyKQoreworICAgIFdl
YktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIgPSBXRUJLSVRfQ09PS0lFX01BTkFHRVIoZ19vYmpl
Y3RfbmV3KFdFQktJVF9UWVBFX0NPT0tJRV9NQU5BR0VSLCBOVUxMKSk7CisgICAgbWFuYWdlci0+
cHJpdi0+d2tDb29raWVNYW5hZ2VyID0gd2tDb29raWVNYW5hZ2VyOworICAgIHJldHVybiBtYW5h
Z2VyOworfQorCisvKioKKyAqIHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvbGlj
eToKKyAqIEBjb29raWVfbWFuYWdlcjogYSAjV2ViS2l0Q29va2llTWFuYWdlcgorICogQHBvbGlj
eTogYSAjV2ViS2l0Q29va2llQWNjZXB0UG9saWN5CisgKgorICogU2V0IHRoZSBjb29raWUgYWNj
ZXB0YW5jZSBwb2xpY3kgb2YgQGNvb2tpZV9tYW5hZ2VyIGFzIEBwb2xpY3kuCisgKi8KK3ZvaWQg
d2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9hY2NlcHRfcG9saWN5KFdlYktpdENvb2tpZU1hbmFn
ZXIqIG1hbmFnZXIsIFdlYktpdENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpCit7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09PS0lFX01BTkFHRVIobWFuYWdlcikpOworCisgICAg
V0tDb29raWVNYW5hZ2VyU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShtYW5hZ2VyLT5wcml2LT53
a0Nvb2tpZU1hbmFnZXIuZ2V0KCksIHBvbGljeSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdENv
b2tpZU1hbmFnZXJHZXRBY2NlcHRQb2xpY3lDYWxsYmFjayhXS0hUVFBDb29raWVBY2NlcHRQb2xp
Y3kgcG9saWN5LCBXS0Vycm9yUmVmLCB2b2lkKiBjb250ZXh0KQoreworICAgIEdSZWZQdHI8R1Np
bXBsZUFzeW5jUmVzdWx0PiByZXN1bHQgPSBhZG9wdEdSZWYoR19TSU1QTEVfQVNZTkNfUkVTVUxU
KGNvbnRleHQpKTsKKyAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19ncG9pbnRl
cihyZXN1bHQuZ2V0KCksIEdVSU5UX1RPX1BPSU5URVIocG9saWN5KSwgMCk7CisgICAgZ19zaW1w
bGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlKHJlc3VsdC5nZXQoKSk7Cit9CisKKy8qKgorICogd2Vi
a2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5OgorICogQGNvb2tpZV9tYW5hZ2Vy
OiBhICNXZWJLaXRDb29raWVNYW5hZ2VyCisgKiBAY2FsbGJhY2s6IChzY29wZSBhc3luYyk6IGEg
I0dBc3luY1JlYWR5Q2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSByZXF1ZXN0IGlzIHNhdGlzZmll
ZAorICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiB0aGUgZGF0YSB0byBwYXNzIHRvIGNhbGxiYWNr
IGZ1bmN0aW9uCisgKgorICogQXN5bmNocm9ub3VzbHkgZ2V0IHRoZSBjb29raWUgYWNjZXB0YW5j
ZSBwb2xpY3kgb2YgQGNvb2tpZV9tYW5hZ2VyLgorICoKKyAqIFdoZW4gdGhlIG9wZXJhdGlvbiBp
cyBmaW5pc2hlZCwgQGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkLiBZb3UgY2FuIHRoZW4gY2FsbAor
ICogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5X2ZpbmlzaCgpIHRvIGdl
dCB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisgKi8KK3ZvaWQgd2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIEdB
c3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VSKG1hbmFnZXIpKTsKKworICAg
IEdTaW1wbGVBc3luY1Jlc3VsdCogcmVzdWx0ID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyhH
X09CSkVDVChtYW5hZ2VyKSwgY2FsbGJhY2ssIHVzZXJEYXRhLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0
PGdwb2ludGVyPih3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3kpKTsKKyAg
ICBXS0Nvb2tpZU1hbmFnZXJHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KG1hbmFnZXItPnByaXYt
PndrQ29va2llTWFuYWdlci5nZXQoKSwgcmVzdWx0LCB3ZWJraXRDb29raWVNYW5hZ2VyR2V0QWNj
ZXB0UG9saWN5Q2FsbGJhY2spOworfQorCisvKioKKyAqIHdlYmtpdF9jb29raWVfbWFuYWdlcl9n
ZXRfYWNjZXB0X3BvbGljeV9maW5pc2g6CisgKiBAY29va2llX21hbmFnZXI6IGEgI1dlYktpdENv
b2tpZU1hbmFnZXIKKyAqIEByZXN1bHQ6IGEgI0dBc3luY1Jlc3VsdAorICogQGVycm9yOiByZXR1
cm4gbG9jYXRpb24gZm9yIGVycm9yIG9yICVOVUxMIHRvIGlnbm9yZQorICoKKyAqIEZpbmlzaCBh
biBhc3luY2hyb25vdXMgb3BlcmF0aW9uIHN0YXJ0ZWQgd2l0aCB3ZWJraXRfY29va2llX21hbmFn
ZXJfZ2V0X2FjY2VwdF9wb2xpY3koKS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgY29va2llIGFjY2Vw
dGFuY2UgcG9saWN5IG9mIEBjb29raWVfbWFuYWdlciBhcyBhICNXZWJLaXRDb29raWVBY2NlcHRQ
b2xpY3kuCisgKi8KK1dlYktpdENvb2tpZUFjY2VwdFBvbGljeSB3ZWJraXRfY29va2llX21hbmFn
ZXJfZ2V0X2FjY2VwdF9wb2xpY3lfZmluaXNoKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIs
IEdBc3luY1Jlc3VsdCogcmVzdWx0LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfQ09PS0lFX01BTkFHRVIobWFuYWdlciksIFdFQktJVF9DT09L
SUVfUE9MSUNZX0FDQ0VQVF9OT19USElSRF9QQVJUWSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoR19JU19BU1lOQ19SRVNVTFQocmVzdWx0KSwgV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBU
X05PX1RISVJEX1BBUlRZKTsKKworICAgIEdTaW1wbGVBc3luY1Jlc3VsdCogc2ltcGxlUmVzdWx0
ID0gR19TSU1QTEVfQVNZTkNfUkVTVUxUKHJlc3VsdCk7CisgICAgZ193YXJuX2lmX2ZhaWwoZ19z
aW1wbGVfYXN5bmNfcmVzdWx0X2dldF9zb3VyY2VfdGFnKHNpbXBsZVJlc3VsdCkgPT0gd2Via2l0
X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KTsKKworICAgIGlmIChnX3NpbXBsZV9h
c3luY19yZXN1bHRfcHJvcGFnYXRlX2Vycm9yKHNpbXBsZVJlc3VsdCwgZXJyb3IpKQorICAgICAg
ICByZXR1cm4gV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05PX1RISVJEX1BBUlRZOworCisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdENvb2tpZUFjY2VwdFBvbGljeT4oR1BPSU5URVJf
VE9fVUlOVChnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X29wX3Jlc19ncG9pbnRlcihzaW1wbGVS
ZXN1bHQpKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdENvb2tpZU1hbmFnZXJHZXREb21haW5z
V2l0aENvb2tpZXNDYWxsYmFjayhXS0FycmF5UmVmIHdrRG9tYWlucywgV0tFcnJvclJlZiwgdm9p
ZCogY29udGV4dCkKK3sKKyAgICBHUmVmUHRyPEdTaW1wbGVBc3luY1Jlc3VsdD4gcmVzdWx0ID0g
YWRvcHRHUmVmKEdfU0lNUExFX0FTWU5DX1JFU1VMVChjb250ZXh0KSk7CisgICAgR1B0ckFycmF5
KiBkb21haW5zID0gZ19wdHJfYXJyYXlfbmV3X3dpdGhfZnJlZV9mdW5jKGdfZnJlZSk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBXS0FycmF5R2V0U2l6ZSh3a0RvbWFpbnMpOyArK2kpIHsK
KyAgICAgICAgV0tTdHJpbmdSZWYgd2tEb21haW4gPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4o
V0tBcnJheUdldEl0ZW1BdEluZGV4KHdrRG9tYWlucywgaSkpOworICAgICAgICBTdHJpbmcgZG9t
YWluID0gdG9JbXBsKHdrRG9tYWluKS0+c3RyaW5nKCk7CisgICAgICAgIGlmIChkb21haW4uaXNF
bXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGdfcHRyX2FycmF5X2FkZChk
b21haW5zLCBnX3N0cmR1cChkb21haW4udXRmOCgpLmRhdGEoKSkpOworICAgIH0KKyAgICBnX3B0
cl9hcnJheV9hZGQoZG9tYWlucywgMCk7CisgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9v
cF9yZXNfZ3BvaW50ZXIocmVzdWx0LmdldCgpLCBkb21haW5zLCByZWludGVycHJldF9jYXN0PEdE
ZXN0cm95Tm90aWZ5PihnX3B0cl9hcnJheV91bnJlZikpOworICAgIGdfc2ltcGxlX2FzeW5jX3Jl
c3VsdF9jb21wbGV0ZShyZXN1bHQuZ2V0KCkpOworfQorCisvKioKKyAqIHdlYmtpdF9jb29raWVf
bWFuYWdlcl9nZXRfZG9tYWluc193aXRoX2Nvb2tpZXM6CisgKiBAY29va2llX21hbmFnZXI6IGEg
I1dlYktpdENvb2tpZU1hbmFnZXIKKyAqIEBjYWxsYmFjazogKHNjb3BlIGFzeW5jKTogYSAjR0Fz
eW5jUmVhZHlDYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIHJlcXVlc3QgaXMgc2F0aXNmaWVkCisg
KiBAdXNlcl9kYXRhOiAoY2xvc3VyZSk6IHRoZSBkYXRhIHRvIHBhc3MgdG8gY2FsbGJhY2sgZnVu
Y3Rpb24KKyAqCisgKiBBc3luY2hyb25vdXNseSBnZXQgdGhlIGxpc3Qgb2YgZG9tYWlucyBmb3Ig
d2hpY2ggQGNvb2tpZV9tYW5hZ2VyIGNvbnRhaW5zIGNvb2tpZXMuCisgKgorICogV2hlbiB0aGUg
b3BlcmF0aW9uIGlzIGZpbmlzaGVkLCBAY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQuIFlvdSBjYW4g
dGhlbiBjYWxsCisgKiB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFpbnNfd2l0aF9jb29r
aWVzX2ZpbmlzaCgpIHRvIGdldCB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisgKi8KK3Zv
aWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9kb21haW5zX3dpdGhfY29va2llcyhXZWJLaXRD
b29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLCBncG9p
bnRlciB1c2VyRGF0YSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19DT09LSUVf
TUFOQUdFUihtYW5hZ2VyKSk7CisKKyAgICBHU2ltcGxlQXN5bmNSZXN1bHQqIHJlc3VsdCA9IGdf
c2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcoR19PQkpFQ1QobWFuYWdlciksIGNhbGxiYWNrLCB1c2Vy
RGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4od2Via2l0X2Nvb2tpZV9tYW5hZ2Vy
X2dldF9kb21haW5zX3dpdGhfY29va2llcykpOworICAgIFdLQ29va2llTWFuYWdlckdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKG1hbmFnZXItPnByaXYtPndrQ29va2llTWFuYWdlci5nZXQoKSwgcmVz
dWx0LCB3ZWJraXRDb29raWVNYW5hZ2VyR2V0RG9tYWluc1dpdGhDb29raWVzQ2FsbGJhY2spOwor
fQorCisvKioKKyAqIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfZG9tYWluc193aXRoX2Nvb2tp
ZXNfZmluaXNoOgorICogQGNvb2tpZV9tYW5hZ2VyOiBhICNXZWJLaXRDb29raWVNYW5hZ2VyCisg
KiBAcmVzdWx0OiBhICNHQXN5bmNSZXN1bHQKKyAqIEBlcnJvcjogcmV0dXJuIGxvY2F0aW9uIGZv
ciBlcnJvciBvciAlTlVMTCB0byBpZ25vcmUKKyAqCisgKiBGaW5pc2ggYW4gYXN5bmNocm9ub3Vz
IG9wZXJhdGlvbiBzdGFydGVkIHdpdGggd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9kb21haW5z
X3dpdGhfY29va2llcygpLgorICogVGhlIHJldHVybiB2YWx1ZSBpcyBhICVOVUxMIHRlcm1pbmF0
ZWQgbGlzdCBvZiBzdHJpbmdzIHdoaWNoIHNob3VsZAorICogYmUgcmVsZWFzZWQgd2l0aCBnX3N0
cmZyZWV2KCkuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChhcnJheSB6ZXJvLXRl
cm1pbmF0ZWQ9MSk6IEEgJU5VTEwgdGVybWluYXRlZCBhcnJheSBvZiBkb21haW4gbmFtZXMKKyAq
ICAgIG9yICVOVUxMIGluIGNhc2Ugb2YgZXJyb3IuCisgKi8KK2djaGFyKiogd2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX2dldF9kb21haW5zX3dpdGhfY29va2llc19maW5pc2goV2ViS2l0Q29va2llTWFu
YWdlciogbWFuYWdlciwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIEdFcnJvcioqIGVycm9yKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19DT09LSUVfTUFOQUdFUihtYW5hZ2Vy
KSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoR19JU19BU1lOQ19SRVNVTFQocmVzdWx0
KSwgMCk7CisKKyAgICBHU2ltcGxlQXN5bmNSZXN1bHQqIHNpbXBsZVJlc3VsdCA9IEdfU0lNUExF
X0FTWU5DX1JFU1VMVChyZXN1bHQpOworICAgIGdfd2Fybl9pZl9mYWlsKGdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9nZXRfc291cmNlX3RhZyhzaW1wbGVSZXN1bHQpID09IHdlYmtpdF9jb29raWVfbWFu
YWdlcl9nZXRfZG9tYWluc193aXRoX2Nvb2tpZXMpOworCisgICAgaWYgKGdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9wcm9wYWdhdGVfZXJyb3Ioc2ltcGxlUmVzdWx0LCBlcnJvcikpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgR1B0ckFycmF5KiBkb21haW5zID0gc3RhdGljX2Nhc3Q8R1B0ckFycmF5
Kj4oZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3BvaW50ZXIoc2ltcGxlUmVzdWx0
KSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPihnX3B0cl9hcnJheV9mcmVl
KGRvbWFpbnMsIEZBTFNFKSk7Cit9CisKKy8qKgorICogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2Rl
bGV0ZV9jb29raWVzX2Zvcl9kb21haW46CisgKiBAY29va2llX21hbmFnZXI6IGEgI1dlYktpdENv
b2tpZU1hbmFnZXIKKyAqIEBkb21haW46IGEgZG9tYWluIG5hbWUKKyAqCisgKiBSZW1vdmUgYWxs
IGNvb2tpZXMgb2YgQGNvb2tpZV9tYW5hZ2VyIGZvciB0aGUgZ2l2ZW4gQGRvbWFpbi4KKyAqLwor
dm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZXNfZm9yX2RvbWFpbihXZWJL
aXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBjb25zdCBnY2hhciogZG9tYWluKQoreworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VSKG1hbmFnZXIpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKGRvbWFpbik7CisKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
d2tEb21haW4oQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZG9tYWluKSk7
CisgICAgV0tDb29raWVNYW5hZ2VyRGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKG1hbmFnZXItPnBy
aXYtPndrQ29va2llTWFuYWdlci5nZXQoKSwgd2tEb21haW4uZ2V0KCkpOworfQorCisvKioKKyAq
IHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfYWxsX2Nvb2tpZXM6CisgKiBAY29va2llX21h
bmFnZXI6IGEgI1dlYktpdENvb2tpZU1hbmFnZXIKKyAqCisgKiBEZWxldGUgYWxsIGNvb2tpZXMg
b2YgQGNvb2tpZV9tYW5hZ2VyCisgKi8KK3ZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0
ZV9hbGxfY29va2llcyhXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyKQoreworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VSKG1hbmFnZXIpKTsKKworICAgIFdL
Q29va2llTWFuYWdlckRlbGV0ZUFsbENvb2tpZXMobWFuYWdlci0+cHJpdi0+d2tDb29raWVNYW5h
Z2VyLmdldCgpKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdENvb2tpZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdENvb2tpZU1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi43OTFhNjFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0Q29va2llTWFuYWdlci5oCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVQyX0hf
SU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkg
PHdlYmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisK
KyNpZm5kZWYgV2ViS2l0Q29va2llTWFuYWdlcl9oCisjZGVmaW5lIFdlYktpdENvb2tpZU1hbmFn
ZXJfaAorCisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Cisj
aW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2Rl
ZmluZSBXRUJLSVRfVFlQRV9DT09LSUVfTUFOQUdFUiAgICAgICAgICAgICh3ZWJraXRfY29va2ll
X21hbmFnZXJfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0NPT0tJRV9NQU5BR0VSKG9iaikg
ICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBF
X0NPT0tJRV9NQU5BR0VSLCBXZWJLaXRDb29raWVNYW5hZ2VyKSkKKyNkZWZpbmUgV0VCS0lUX0lT
X0NPT0tJRV9NQU5BR0VSKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUo
KG9iaiksIFdFQktJVF9UWVBFX0NPT0tJRV9NQU5BR0VSKSkKKyNkZWZpbmUgV0VCS0lUX0NPT0tJ
RV9NQU5BR0VSX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNz
KSwgIFdFQktJVF9UWVBFX0NPT0tJRV9NQU5BR0VSLCBXZWJLaXRDb29raWVNYW5hZ2VyQ2xhc3Mp
KQorI2RlZmluZSBXRUJLSVRfSVNfQ09PS0lFX01BTkFHRVJfQ0xBU1Moa2xhc3MpIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfQ09PS0lFX01BTkFHRVIpKQor
I2RlZmluZSBXRUJLSVRfQ09PS0lFX01BTkFHRVJfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5T
VEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfQ09PS0lFX01BTkFHRVIsIFdlYktp
dENvb2tpZU1hbmFnZXJDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRDb29raWVNYW5h
Z2VyICAgICAgICBXZWJLaXRDb29raWVNYW5hZ2VyOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdENv
b2tpZU1hbmFnZXJDbGFzcyAgIFdlYktpdENvb2tpZU1hbmFnZXJDbGFzczsKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSBXZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0
ZTsKKworLyoqCisgKiBXZWJLaXRDb29raWVBY2NlcHRQb2xpY3k6CisgKiBAV0VCS0lUX0NPT0tJ
RV9QT0xJQ1lfQUNDRVBUX0FMV0FZUzogQWNjZXB0IGFsbCBjb29raWVzIHVuY29uZGl0aW9uYWxs
eS4KKyAqIEBXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfTkVWRVI6IFJlamVjdCBhbGwgY29v
a2llcyB1bmNvbmRpdGlvbmFsbHkuCisgKiBAV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05P
X1RISVJEX1BBUlRZOiBBY2NlcHQgb25seSBjb29raWVzIHNldCBieSB0aGUgbWFpbiBkb2N1bWVu
dCBsb2FkZWQuCisgKgorICogRW51bSB2YWx1ZXMgdXNlZCB0byBkZW5vdGUgdGhlIGNvb2tpZSBh
Y2NlcHRhbmNlIHBvbGljaWVzLgorICovCit0eXBlZGVmIGVudW0geworICAgIFdFQktJVF9DT09L
SUVfUE9MSUNZX0FDQ0VQVF9BTFdBWVMsCisgICAgV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBU
X05FVkVSLAorICAgIFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9OT19USElSRF9QQVJUWQor
fSBXZWJLaXRDb29raWVBY2NlcHRQb2xpY3k7CisKK3N0cnVjdCBfV2ViS2l0Q29va2llTWFuYWdl
ciB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICBXZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0
ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0Q29va2llTWFuYWdlckNsYXNzIHsKKyAgICBH
T2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0
X2Nvb2tpZV9tYW5hZ2VyX2dldF90eXBlICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOwor
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvbGlj
eSAgICAgICAgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAgICAqY29va2llX21hbmFnZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V2ViS2l0Q29va2llQWNjZXB0UG9saWN5IHBvbGljeSk7CisKK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5ICAgICAgICAgICAgICAgKFdlYktp
dENvb2tpZU1hbmFnZXIgICAgICpjb29raWVfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrICAg
ICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgICAgIHVzZXJfZGF0YSk7CisKK1dFQktJ
VF9BUEkgV2ViS2l0Q29va2llQWNjZXB0UG9saWN5Cit3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0
X2FjY2VwdF9wb2xpY3lfZmluaXNoICAgICAgICAoV2ViS2l0Q29va2llTWFuYWdlciAgICAgKmNv
b2tpZV9tYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICAgICpyZXN1bHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAg
ICAgICAgICAgICAqKmVycm9yKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfY29va2llX21h
bmFnZXJfZ2V0X2RvbWFpbnNfd2l0aF9jb29raWVzICAgICAgICAoV2ViS2l0Q29va2llTWFuYWdl
ciAgICAgKmNvb2tpZV9tYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgICAgICBjYWxsYmFjaywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
cG9pbnRlciAgICAgICAgICAgICAgICAgdXNlcl9kYXRhKTsKKworV0VCS0lUX0FQSSBnY2hhciAq
Kgord2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9kb21haW5zX3dpdGhfY29va2llc19maW5pc2gg
KFdlYktpdENvb2tpZU1hbmFnZXIgICAgICpjb29raWVfbWFuYWdlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQgICAg
ICAgICAgICAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAgICAgKiplcnJvcik7CisKK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWVzX2Zvcl9kb21h
aW4gICAgICAgKFdlYktpdENvb2tpZU1hbmFnZXIgICAgICpjb29raWVfbWFuYWdlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBn
Y2hhciAgICAgICAgICAgICAqZG9tYWluKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfY29v
a2llX21hbmFnZXJfZGVsZXRlX2FsbF9jb29raWVzICAgICAgICAgICAgICAoV2ViS2l0Q29va2ll
TWFuYWdlciAgICAgKmNvb2tpZV9tYW5hZ2VyKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVN
YW5hZ2VyUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
Q29va2llTWFuYWdlclByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5hMzg3YWY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUuaApAQCAtMCwwICsxLDI4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0Q29va2llTWFu
YWdlclByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZV9oCisKKyNp
bmNsdWRlICJXZWJLaXRDb29raWVNYW5hZ2VyLmgiCisjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5o
IgorCitXZWJLaXRDb29raWVNYW5hZ2VyKiB3ZWJraXRDb29raWVNYW5hZ2VyQ3JlYXRlKFdLQ29v
a2llTWFuYWdlclJlZik7CisKKyNlbmRpZiAvLyBXZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJD
b250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNv
bnRleHQuY3BwCmluZGV4IDM2MGIwYTYuLjMwZGJiZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwCkBAIC0yMSw2ICsy
MSw3IEBACiAjaW5jbHVkZSAiV2ViS2l0V2ViQ29udGV4dC5oIgogCiAjaW5jbHVkZSAiV2ViQ29u
dGV4dC5oIgorI2luY2x1ZGUgIldlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0RG93bmxvYWRDbGllbnQuaCIKICNpbmNsdWRlICJXZWJLaXREb3dubG9hZFByaXZh
dGUuaCIKICNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCkBAIC0zOSw2ICs0MCw4IEBAIGVudW0g
ewogCiBzdHJ1Y3QgX1dlYktpdFdlYkNvbnRleHRQcml2YXRlIHsKICAgICBXS1JldGFpblB0cjxX
S0NvbnRleHRSZWY+IGNvbnRleHQ7CisKKyAgICBHUmVmUHRyPFdlYktpdENvb2tpZU1hbmFnZXI+
IGNvb2tpZU1hbmFnZXI7CiB9OwogCiBzdGF0aWMgZ3VpbnQgc2lnbmFsc1tMQVNUX1NJR05BTF0g
PSB7IDAsIH07CkBAIC0yMTUsNiArMjE4LDI1IEBAIFdlYktpdERvd25sb2FkKiB3ZWJraXRfd2Vi
X2NvbnRleHRfZG93bmxvYWRfdXJpKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIGNvbnN0CiAg
ICAgcmV0dXJuIGRvd25sb2FkOwogfQogCisvKioKKyAqIHdlYmtpdF93ZWJfY29udGV4dF9nZXRf
Y29va2llX21hbmFnZXI6CisgKiBAY29udGV4dDogYSAjV2ViS2l0V2ViQ29udGV4dAorICoKKyAq
IEdldCB0aGUgI1dlYktpdENvb2tpZU1hbmFnZXIgb2YgQGNvbnRleHQuCisgKgorICogUmV0dXJu
czogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI1dlYktpdENvb2tpZU1hbmFnZXIgb2YgQGNvbnRleHQu
CisgKi8KK1dlYktpdENvb2tpZU1hbmFnZXIqIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfY29va2ll
X21hbmFnZXIoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfSVNfV0VCX0NPTlRFWFQoY29udGV4dCksIDApOworCisgICAgV2ViS2l0
V2ViQ29udGV4dFByaXZhdGUqIHByaXYgPSBjb250ZXh0LT5wcml2OworICAgIGlmICghcHJpdi0+
Y29va2llTWFuYWdlcikKKyAgICAgICAgcHJpdi0+Y29va2llTWFuYWdlciA9IGFkb3B0R1JlZih3
ZWJraXRDb29raWVNYW5hZ2VyQ3JlYXRlKFdLQ29udGV4dEdldENvb2tpZU1hbmFnZXIocHJpdi0+
Y29udGV4dC5nZXQoKSkpKTsKKworICAgIHJldHVybiBwcml2LT5jb29raWVNYW5hZ2VyLmdldCgp
OworfQorCiBXZWJLaXREb3dubG9hZCogd2Via2l0V2ViQ29udGV4dEdldE9yQ3JlYXRlRG93bmxv
YWQoV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkKQogewogICAgIEdSZWZQdHI8V2ViS2l0RG93bmxv
YWQ+IGRvd25sb2FkID0gZG93bmxvYWRzTWFwKCkuZ2V0KHdrRG93bmxvYWQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oCmluZGV4
IGI4OGJlZDAuLjQ1YjZlNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmgKQEAgLTI1LDYgKzI1LDcgQEAKICNkZWZpbmUgV2Vi
S2l0V2ViQ29udGV4dF9oCiAKICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0Q29va2llTWFuYWdlci5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVm
aW5lcy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RG93bmxvYWQuaD4KIApAQCAtNzksMjAg
KzgwLDIzIEBAIHN0cnVjdCBfV2ViS2l0V2ViQ29udGV4dENsYXNzIHsKIH07CiAKIFdFQktJVF9B
UEkgR1R5cGUKLXdlYmtpdF93ZWJfY29udGV4dF9nZXRfdHlwZSAgICAgICAgKHZvaWQpOword2Vi
a2l0X3dlYl9jb250ZXh0X2dldF90eXBlICAgICAgICAgICAodm9pZCk7CiAKIFdFQktJVF9BUEkg
V2ViS2l0V2ViQ29udGV4dCAqCi13ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQgICAgICh2
b2lkKTsKK3dlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCAgICAgICAgKHZvaWQpOwogCiBX
RUJLSVRfQVBJIHZvaWQKLXdlYmtpdF93ZWJfY29udGV4dF9zZXRfY2FjaGVfbW9kZWwgKFdlYktp
dFdlYkNvbnRleHQgKmNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXZWJLaXRDYWNoZU1vZGVsICBjYWNoZV9tb2RlbCk7Cit3ZWJraXRfd2ViX2NvbnRleHRfc2V0
X2NhY2hlX21vZGVsICAgIChXZWJLaXRXZWJDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0Q2FjaGVNb2RlbCAgY2FjaGVfbW9kZWwp
OwogV0VCS0lUX0FQSSBXZWJLaXRDYWNoZU1vZGVsCi13ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Nh
Y2hlX21vZGVsIChXZWJLaXRXZWJDb250ZXh0ICpjb250ZXh0KTsKK3dlYmtpdF93ZWJfY29udGV4
dF9nZXRfY2FjaGVfbW9kZWwgICAgKFdlYktpdFdlYkNvbnRleHQgKmNvbnRleHQpOwogCiBXRUJL
SVRfQVBJIFdlYktpdERvd25sb2FkICoKLXdlYmtpdF93ZWJfY29udGV4dF9kb3dubG9hZF91cmkg
ICAgKFdlYktpdFdlYkNvbnRleHQgKmNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICp1cmkpOword2Via2l0X3dlYl9jb250ZXh0X2Rv
d25sb2FkX3VyaSAgICAgICAoV2ViS2l0V2ViQ29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKnVyaSk7CisKK1dF
QktJVF9BUEkgV2ViS2l0Q29va2llTWFuYWdlciAqCit3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Nv
b2tpZV9tYW5hZ2VyIChXZWJLaXRXZWJDb250ZXh0ICpjb250ZXh0KTsKIAogR19FTkRfREVDTFMK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJr
aXQyZ3RrLWRvY3Muc2dtbCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mv
d2Via2l0Mmd0ay1kb2NzLnNnbWwKaW5kZXggOWYwODY2My4uMzJjNzI1NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dt
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGst
ZG9jcy5zZ21sCkBAIC0yOSw2ICsyOSw3IEBACiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dl
YktpdFdlYlJlc291cmNlLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRF
cnJvci54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RmluZENvbnRyb2xs
ZXIueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdENvb2tpZU1hbmFnZXIu
eG1sIi8+CiAgIDwvY2hhcHRlcj4KIAogICA8aW5kZXggaWQ9ImluZGV4LWFsbCI+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2Vj
dGlvbnMudHh0IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQy
Z3RrLXNlY3Rpb25zLnR4dAppbmRleCA4MjlkZTFjLi5kYzM4MDk1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1z
ZWN0aW9ucy50eHQKQEAgLTI4LDYgKzI4LDcgQEAgd2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZh
dWx0CiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2NhY2hlX21vZGVsCiB3ZWJraXRfd2ViX2NvbnRl
eHRfc2V0X2NhY2hlX21vZGVsCiB3ZWJraXRfd2ViX2NvbnRleHRfZG93bmxvYWRfdXJpCit3ZWJr
aXRfd2ViX2NvbnRleHRfZ2V0X2Nvb2tpZV9tYW5hZ2VyCiAKIDxTVUJTRUNUSU9OIFN0YW5kYXJk
PgogV2ViS2l0V2ViQ29udGV4dENsYXNzCkBAIC01NDYsMyArNTQ3LDI5IEBAIFdFQktJVF9GSU5E
X0NPTlRST0xMRVJfR0VUX0NMQVNTCiBXZWJLaXRGaW5kQ29udHJvbGxlclByaXZhdGUKIHdlYmtp
dF9maW5kX2NvbnRyb2xsZXJfZ2V0X3R5cGUKIDwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklM
RT5XZWJLaXRDb29raWVNYW5hZ2VyPC9GSUxFPgorV2ViS2l0Q29va2llTWFuYWdlcgorV2ViS2l0
Q29va2llQWNjZXB0UG9saWN5Cit3ZWJraXRfY29va2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xp
Y3kKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNjZXB0X3BvbGljeQord2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5X2ZpbmlzaAord2Via2l0X2Nvb2tpZV9tYW5hZ2Vy
X2dldF9kb21haW5zX3dpdGhfY29va2llcword2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9kb21h
aW5zX3dpdGhfY29va2llc19maW5pc2gKK3dlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29v
a2llc19mb3JfZG9tYWluCit3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2FsbF9jb29raWVz
CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0Q29va2llTWFuYWdlckNsYXNzCitXRUJL
SVRfVFlQRV9DT09LSUVfTUFOQUdFUgorV0VCS0lUX0NPT0tJRV9NQU5BR0VSCitXRUJLSVRfSVNf
Q09PS0lFX01BTkFHRVIKK1dFQktJVF9DT09LSUVfTUFOQUdFUl9DTEFTUworV0VCS0lUX0lTX0NP
T0tJRV9NQU5BR0VSX0NMQVNTCitXRUJLSVRfQ09PS0lFX01BTkFHRVJfR0VUX0NMQVNTCisKKzxT
VUJTRUNUSU9OIFByaXZhdGU+CitXZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZQord2Via2l0X2Nv
b2tpZV9tYW5hZ2VyX2dldF90eXBlCis8L1NFQ1RJT04+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMKaW5kZXggZmRiMjFj
YS4uNDNhYjRmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
ZG9jcy93ZWJraXQyZ3RrLnR5cGVzCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcwpAQCAtMTMsMyArMTMsNCBAQCB3ZWJraXRfZmluZF9j
b250cm9sbGVyX2dldF90eXBlCiB3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfdHlwZQogd2Via2l0
X2phdmFzY3JpcHRfcmVzdWx0X2dldF90eXBlCiB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF90eXBl
Cit3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X3R5cGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KaW5kZXggYzg2MTEyNS4u
YjM4OWY0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvR05VbWFrZWZpbGUuYW0KQEAgLTIsNiArMiw3IEBAIGlmIEVOQUJMRV9XRUJLSVQyCiAK
IFRFU1RfUFJPR1MgKz0gXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0QmFja0Zvcndh
cmRMaXN0IFwKKwlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdENvb2tpZU1hbmFnZXIgXAog
CVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0RG93bmxvYWRzIFwKIAlQcm9ncmFtcy9XZWJL
aXQyQVBJVGVzdHMvVGVzdExvYWRlckNsaWVudCBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3Rz
L1Rlc3RQcmludGluZyBcCkBAIC0xNDIsNCArMTQzLDEwIEBAIFByb2dyYW1zX1dlYktpdDJBUElU
ZXN0c19UZXN0UmVzb3VyY2VzX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQog
UHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RSZXNvdXJjZXNfTERBREQgPSAkKHdlYmtpdDJf
dGVzdHNfbGRhZGQpCiBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFJlc291cmNlc19MREZM
QUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCiAKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0
c19UZXN0Q29va2llTWFuYWdlcl9TT1VSQ0VTID0gXAorICAgICAgICBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0Q29va2llTWFuYWdlci5jcHAKK1Byb2dyYW1zX1dl
YktpdDJBUElUZXN0c19UZXN0Q29va2llTWFuYWdlcl9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0
c19jcHBmbGFncykKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0Q29va2llTWFuYWdlcl9M
REFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19U
ZXN0Q29va2llTWFuYWdlcl9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCisKIGVu
ZGlmICMgRU5BQkxFX1dFQktJVDIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1Rlc3RDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RDb29raWVNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTc0Y2JlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdENvb2tpZU1hbmFnZXIuY3BwCkBA
IC0wLDAgKzEsMjAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKKyNpbmNs
dWRlICJXZWJWaWV3VGVzdC5oIgorCitzdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsK
Kworc3RhdGljIGNvbnN0IGNoYXIqIGtGaXJzdFBhcnR5RG9tYWluID0gIjEyNy4wLjAuMSI7Citz
dGF0aWMgY29uc3QgY2hhcioga1RoaXJkUGFydHlEb21haW4gPSAibG9jYWxob3N0IjsKK3N0YXRp
YyBjb25zdCBjaGFyKiBrSW5kZXhIdG1sRm9ybWF0ID0KKyAgICAiPGh0bWw+PGJvZHk+IgorICAg
ICIgPHA+V2ViS2l0R1RLKyBDb29raWUgTWFuYWdlciB0ZXN0PC9wPiIKKyAgICAiIDxpbWcgc3Jj
PSdodHRwOi8vbG9jYWxob3N0OiV1L2ltYWdlLnBuZycgd2lkdGg9NSBoZWlnaHQ9NT48L2ltZz4i
CisgICAgIjwvYm9keT48L2h0bWw+IjsKKworY2xhc3MgQ29va2llTWFuYWdlclRlc3Q6IHB1Ymxp
YyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShDb29r
aWVNYW5hZ2VyVGVzdCk7CisKKyAgICBDb29raWVNYW5hZ2VyVGVzdCgpCisgICAgICAgIDogV2Vi
Vmlld1Rlc3QoKQorICAgICAgICAsIG1fY29va2llTWFuYWdlcih3ZWJraXRfd2ViX2NvbnRleHRf
Z2V0X2Nvb2tpZV9tYW5hZ2VyKHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dChtX3dlYlZpZXcp
KSkKKyAgICAgICAgLCBtX2FjY2VwdFBvbGljeShXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRf
Tk9fVEhJUkRfUEFSVFkpCisgICAgICAgICwgbV9kb21haW5zKDApCisgICAgeworICAgIH0KKwor
ICAgIH5Db29raWVNYW5hZ2VyVGVzdCgpCisgICAgeworICAgICAgICBnX3N0cmZyZWV2KG1fZG9t
YWlucyk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZ2V0QWNjZXB0UG9saWN5UmVhZHlDYWxs
YmFjayhHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2Vy
RGF0YSkKKyAgICB7CisgICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgV2Vi
S2l0Q29va2llQWNjZXB0UG9saWN5IHBvbGljeSA9IHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRf
YWNjZXB0X3BvbGljeV9maW5pc2goV0VCS0lUX0NPT0tJRV9NQU5BR0VSKG9iamVjdCksIHJlc3Vs
dCwgJmVycm9yLm91dFB0cigpKTsKKyAgICAgICAgZ19hc3NlcnQoIWVycm9yLmdldCgpKTsKKwor
ICAgICAgICBDb29raWVNYW5hZ2VyVGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PENvb2tpZU1hbmFn
ZXJUZXN0Kj4odXNlckRhdGEpOworICAgICAgICB0ZXN0LT5tX2FjY2VwdFBvbGljeSA9IHBvbGlj
eTsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisK
KyAgICBXZWJLaXRDb29raWVBY2NlcHRQb2xpY3kgZ2V0QWNjZXB0UG9saWN5KCkKKyAgICB7Cisg
ICAgICAgIG1fYWNjZXB0UG9saWN5ID0gV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05PX1RI
SVJEX1BBUlRZOworICAgICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xp
Y3kobV9jb29raWVNYW5hZ2VyLCBnZXRBY2NlcHRQb2xpY3lSZWFkeUNhbGxiYWNrLCB0aGlzKTsK
KyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworCisgICAgICAgIHJldHVybiBt
X2FjY2VwdFBvbGljeTsKKyAgICB9CisKKyAgICB2b2lkIHNldEFjY2VwdFBvbGljeShXZWJLaXRD
b29raWVBY2NlcHRQb2xpY3kgcG9saWN5KQorICAgIHsKKyAgICAgICAgd2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX3NldF9hY2NlcHRfcG9saWN5KG1fY29va2llTWFuYWdlciwgcG9saWN5KTsKKyAgICB9
CisKKyAgICBzdGF0aWMgdm9pZCBnZXREb21haW5zUmVhZHlDYWxsYmFjayhHT2JqZWN0KiBvYmpl
Y3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKKyAgICB7CisgICAg
ICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgY2hhcioqIGRvbWFpbnMgPSB3ZWJr
aXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFpbnNfd2l0aF9jb29raWVzX2ZpbmlzaChXRUJLSVRf
Q09PS0lFX01BTkFHRVIob2JqZWN0KSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpOworICAgICAg
ICBnX2Fzc2VydCghZXJyb3IuZ2V0KCkpOworCisgICAgICAgIENvb2tpZU1hbmFnZXJUZXN0KiB0
ZXN0ID0gc3RhdGljX2Nhc3Q8Q29va2llTWFuYWdlclRlc3QqPih1c2VyRGF0YSk7CisgICAgICAg
IHRlc3QtPm1fZG9tYWlucyA9IGRvbWFpbnM7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVz
dC0+bV9tYWluTG9vcCk7CisgICAgfQorCisgICAgY2hhcioqIGdldERvbWFpbnMoKQorICAgIHsK
KyAgICAgICAgZ19zdHJmcmVldihtX2RvbWFpbnMpOworICAgICAgICBtX2RvbWFpbnMgPSAwOwor
ICAgICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFpbnNfd2l0aF9jb29raWVzKG1f
Y29va2llTWFuYWdlciwgZ2V0RG9tYWluc1JlYWR5Q2FsbGJhY2ssIHRoaXMpOworICAgICAgICBn
X21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisKKyAgICAgICAgcmV0dXJuIG1fZG9tYWluczsK
KyAgICB9CisKKyAgICB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JEb21haW4oY29uc3QgY2hhciogZG9t
YWluKQorICAgIHsKKyAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWVz
X2Zvcl9kb21haW4obV9jb29raWVNYW5hZ2VyLCBkb21haW4pOworICAgIH0KKworICAgIHZvaWQg
ZGVsZXRlQWxsQ29va2llcygpCisgICAgeworICAgICAgICB3ZWJraXRfY29va2llX21hbmFnZXJf
ZGVsZXRlX2FsbF9jb29raWVzKG1fY29va2llTWFuYWdlcik7CisgICAgfQorCisgICAgV2ViS2l0
Q29va2llTWFuYWdlciogbV9jb29raWVNYW5hZ2VyOworICAgIFdlYktpdENvb2tpZUFjY2VwdFBv
bGljeSBtX2FjY2VwdFBvbGljeTsKKyAgICBjaGFyKiogbV9kb21haW5zOworfTsKKworc3RhdGlj
IHZvaWQgdGVzdENvb2tpZU1hbmFnZXJBY2NlcHRQb2xpY3koQ29va2llTWFuYWdlclRlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gRGVmYXVsdCBwb2xpY3kgaXMgTk9fVEhJUkRf
UEFSVFkuCisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPmdldEFjY2VwdFBvbGljeSgpLCA9PSwg
V0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05PX1RISVJEX1BBUlRZKTsKKyAgICB0ZXN0LT5s
b2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsKKyAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBjaGFyKiogZG9tYWlucyA9IHRl
c3QtPmdldERvbWFpbnMoKTsKKyAgICBnX2Fzc2VydChkb21haW5zKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZ19zdHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDEpOworICAgIGdfYXNzZXJ0X2NtcHN0
cihkb21haW5zWzBdLCA9PSwga0ZpcnN0UGFydHlEb21haW4pOworICAgIHRlc3QtPmRlbGV0ZUFs
bENvb2tpZXMoKTsKKworICAgIHRlc3QtPnNldEFjY2VwdFBvbGljeShXRUJLSVRfQ09PS0lFX1BP
TElDWV9BQ0NFUFRfQUxXQVlTKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+Z2V0QWNjZXB0
UG9saWN5KCksID09LCBXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfQUxXQVlTKTsKKyAgICB0
ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgp
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBkb21haW5zID0gdGVz
dC0+Z2V0RG9tYWlucygpOworICAgIGdfYXNzZXJ0KGRvbWFpbnMpOworICAgIGdfYXNzZXJ0X2Nt
cGludChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwgMik7CisgICAgZ19hc3NlcnRfY21wc3Ry
KGRvbWFpbnNbMF0sID09LCBrRmlyc3RQYXJ0eURvbWFpbik7CisgICAgZ19hc3NlcnRfY21wc3Ry
KGRvbWFpbnNbMV0sID09LCBrVGhpcmRQYXJ0eURvbWFpbik7CisgICAgdGVzdC0+ZGVsZXRlQWxs
Q29va2llcygpOworCisgICAgdGVzdC0+c2V0QWNjZXB0UG9saWN5KFdFQktJVF9DT09LSUVfUE9M
SUNZX0FDQ0VQVF9ORVZFUik7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPmdldEFjY2VwdFBv
bGljeSgpLCA9PSwgV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05FVkVSKTsKKyAgICB0ZXN0
LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBkb21haW5zID0gdGVzdC0+
Z2V0RG9tYWlucygpOworICAgIGdfYXNzZXJ0KGRvbWFpbnMpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RD
b29raWVNYW5hZ2VyRGVsZXRlQ29va2llcyhDb29raWVNYW5hZ2VyVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zZXRBY2NlcHRQb2xpY3koV0VCS0lUX0NPT0tJRV9QT0xJ
Q1lfQUNDRVBUX0FMV0FZUyk7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlu
cygpKSwgPT0sIDIpOworCisgICAgLy8gRGVsZXRlIGZpcnN0IHBhcnR5IGNvb2tpZXMuCisgICAg
dGVzdC0+ZGVsZXRlQ29va2llc0ZvckRvbWFpbihrRmlyc3RQYXJ0eURvbWFpbik7CisgICAgZ19h
c3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDEpOwor
CisgICAgLy8gRGVsZXRlIHRoaXJkIHBhcnR5IGNvb2tpZXMuCisgICAgdGVzdC0+ZGVsZXRlQ29v
a2llc0ZvckRvbWFpbihrVGhpcmRQYXJ0eURvbWFpbik7CisgICAgZ19hc3NlcnRfY21waW50KGdf
c3Rydl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDApOworCisgICAgdGVzdC0+bG9h
ZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7CisgICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnRfY21waW50KGdfc3Ry
dl9sZW5ndGgodGVzdC0+Z2V0RG9tYWlucygpKSwgPT0sIDIpOworCisgICAgLy8gRGVsZXRlIGFs
bCBjb29raWVzLgorICAgIHRlc3QtPmRlbGV0ZUFsbENvb2tpZXMoKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZ19zdHJ2X2xlbmd0aCh0ZXN0LT5nZXREb21haW5zKCkpLCA9PSwgMCk7Cit9CisKK3N0
YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2Uq
IG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4
dCosIGdwb2ludGVyKQoreworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0Rf
R0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RB
VFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzb3Vw
X21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CisgICAgaWYgKGdf
c3RyX2VxdWFsKHBhdGgsICIvaW5kZXguaHRtbCIpKSB7CisgICAgICAgIGNoYXIqIGluZGV4SHRt
bCA9IGdfc3RyZHVwX3ByaW50ZihrSW5kZXhIdG1sRm9ybWF0LCBzb3VwX3NlcnZlcl9nZXRfcG9y
dChzZXJ2ZXIpKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfcmVwbGFjZShtZXNzYWdl
LT5yZXNwb25zZV9oZWFkZXJzLCAiU2V0LUNvb2tpZSIsICJmb289YmFyIik7CisgICAgICAgIHNv
dXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9S
WV9UQUtFLCBpbmRleEh0bWwsIHN0cmxlbihpbmRleEh0bWwpKTsKKyAgICB9IGVsc2UgaWYgKGdf
c3RyX2VxdWFsKHBhdGgsICIvaW1hZ2UucG5nIikpCisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFk
ZXJzX3JlcGxhY2UobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIlNldC1Db29raWUiLCAiYmF6
PXF1eCIpOworICAgIGVsc2UKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICBz
b3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKK30KKwor
dm9pZCBiZWZvcmVBbGwoKQoreworICAgIGtTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigp
OworICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CisKKyAgICBDb29raWVNYW5hZ2Vy
VGVzdDo6YWRkKCJXZWJLaXRDb29raWVNYW5hZ2VyIiwgImFjY2VwdC1wb2xpY3kiLCB0ZXN0Q29v
a2llTWFuYWdlckFjY2VwdFBvbGljeSk7CisgICAgQ29va2llTWFuYWdlclRlc3Q6OmFkZCgiV2Vi
S2l0Q29va2llTWFuYWdlciIsICJkZWxldGUtY29va2llcyIsIHRlc3RDb29raWVNYW5hZ2VyRGVs
ZXRlQ29va2llcyk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworICAgIGRlbGV0ZSBrU2VydmVy
OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0
Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCmluZGV4IDdk
M2ZiMGEuLjVlN2Y2Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3dlYmtpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJr
aXQyLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0QmFja0Zv
cndhcmRMaXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVt
Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRDb29raWVNYW5hZ2VyLmg+CiAjaW5jbHVkZSA8
d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREb3dubG9h
ZC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RWRpdGluZ0NvbW1hbmRzLmg+Cg==
</data>
<flag name="review"
          id="138466"
          type_id="1"
          status="+"
          setter="gustavo"
    />
          </attachment>
      

    </bug>

</bugzilla>