<?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>17972</bug_id>
          
          <creation_ts>2008-03-20 15:18:13 -0700</creation_ts>
          <short_desc>[Curl] Rewrite of curl backend to run in event loop</short_desc>
          <delta_ts>2013-10-01 07:31:44 -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>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Curl</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Emmel">mike.emmel</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ahya365</cc>
    
    <cc>alp</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cosimoc</cc>
    
    <cc>galpeter</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>mrowe</cc>
    
    <cc>ossy</cc>
    
    <cc>thisisbradley</cc>
    
    <cc>tofu.linden</cc>
    
    <cc>zaheer.mot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>74569</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2008-03-20 15:18:13 -0700</bug_when>
    <thetext>This version of the curl backend can register file handles with the platform event loop for platforms that support this like gtk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74570</commentid>
    <comment_count>1</comment_count>
      <attachid>19910</attachid>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2008-03-20 15:19:06 -0700</bug_when>
    <thetext>Created attachment 19910
Curl with file handles watched by event loop</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74896</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-03-23 18:24:26 -0700</bug_when>
    <thetext>Why do we need a second curl backend rather than improving the existing backend?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74912</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2008-03-23 20:20:55 -0700</bug_when>
    <thetext>
The biggest reason is Alp Toker said he wanted it this way to bring it in.

Primarily so the old backend can be used as a fallback during transition and give time for other ports using the curl backend to support the new interface.
Since it fallbacks to polling if no manager is registered we should be able to switch and remove the old one fairly quickly.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>75359</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2008-03-26 14:19:40 -0700</bug_when>
    <thetext>
Alp can you comment on this ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78351</commentid>
    <comment_count>5</comment_count>
      <attachid>20710</attachid>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2008-04-20 17:05:23 -0700</bug_when>
    <thetext>Created attachment 20710
Update patch after testing acid2


Add changelog several bug fixes to make patch work with acid2.
Works in polling and registered file handle mode.
Finally curl frees resources !</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89337</commentid>
    <comment_count>6</comment_count>
      <attachid>20710</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-25 20:58:10 -0700</bug_when>
    <thetext>Comment on attachment 20710
Update patch after testing acid2

Supposedly Alp is a person who knows about Curl...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89352</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2008-08-25 23:54:05 -0700</bug_when>
    <thetext>
If someone is willing to review this I have one small change thats floating about.

--- WebKit-r34342-orig/WebCore/platform/network/ncurl/ResourceHandleInternalCurl.cpp    2008-07-02 16:26:30.000000000 +0000

+++ WebKit-r34342/WebCore/platform/network/ncurl/ResourceHandleInternalCurl.cpp 
@@ -659,7 +669,7 @@

         return;



     m_request.setHTTPHeaderField(&quot;PropagateHttpHeader&quot;, &quot;true&quot;);

-    m_request.setHTTPContentType(&quot;Content-Type: application/x-www-form-urlencoded&quot;);

+    m_request.setHTTPContentType(&quot;application/x-www-form-urlencoded&quot;);

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97456</commentid>
    <comment_count>8</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2008-11-03 07:27:38 -0800</bug_when>
    <thetext>Yes, it is on my mind, but it will take some more time though. I want to get parts of the test suite running before adding and switching to a new backend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126133</commentid>
    <comment_count>9</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-15 21:58:39 -0700</bug_when>
    <thetext>I know this patch is ancient, but this might be usable on the Win/Cairo build using the CFRunLoop infrastructure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136379</commentid>
    <comment_count>10</comment_count>
      <attachid>20710</attachid>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2009-07-31 21:04:51 -0700</bug_when>
    <thetext>Comment on attachment 20710
Update patch after testing acid2

Thanks for the patch. This patch needs to be updated and made standalone regardless of port by removing the Gtk related changes, as the Gtk port is now using libsoup as the sole backend. Other ports may benefit from these enhancements and would be nice if a port maintainer interested can follow it through.

Thanks again for the patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136395</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2009-07-31 21:59:04 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 20710 [details])
&gt; Thanks for the patch. This patch needs to be updated and made standalone
&gt; regardless of port by removing the Gtk related changes, as the Gtk port is now
&gt; using libsoup as the sole backend. Other ports may benefit from these
&gt; enhancements and would be nice if a port maintainer interested can follow it
&gt; through.
&gt; 
&gt; Thanks again for the patch!

Wow this patch is over a year old now :)
I don&apos;t have any plans to rework it myself. There are new hooks for running in the main loop which should allow this to be done in a generic fashion.
If they don&apos;t work they should work.

I&apos;ve since moved on to using neon as my core http lib so I&apos;m no longer using curl.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19910</attachid>
            <date>2008-03-20 15:19:06 -0700</date>
            <delta_ts>2008-04-20 17:02:43 -0700</delta_ts>
            <desc>Curl with file handles watched by event loop</desc>
            <filename>ncurl.patch</filename>
            <type>text/plain</type>
            <size>50700</size>
            <attacher name="Michael Emmel">mike.emmel</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCmluZGV4IDAxYjUwNjEuLjdjYzdiYTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTAzOCw2ICsxMDM4LDE4IEBA
IHdlYmNvcmVfc291cmNlcyArPSBcCiAKIGVuZGlmICMgRU5EIFVTRV9DVVJMCiAKK2lmIFVTRV9O
Q1VSTAord2ViY29yZV9jcHBmbGFncyArPSBcCisJLURXVEZfVVNFX05DVVJMPTEgXAorCS1JJChz
cmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9uY3VybAorCit3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9uY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwu
Y3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbmN1cmwvUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbEN1cmwuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ3RrL1Jlc291cmNlSGFu
ZGxlTWFuYWdlckd0ay5jcHAKKworZW5kaWYgIyBFTkQgVVNFX05DVVJMCisKIGlmIFVTRV9TT1VQ
CiB3ZWJjb3JlX2NwcGZsYWdzICs9IFwKIAktRFdURl9VU0VfU09VUD0xIFwKQEAgLTEwNDUsNyAr
MTA1Nyw3IEBAIHdlYmNvcmVfY3BwZmxhZ3MgKz0gXAogCiB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKLWVu
ZGlmCitlbmRpZiAjIEVORCBVU0VfU09VUAogCiAjIC0tLQogIyBGcmVldHlwZSBmb250IGJhY2tl
bmQKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUlu
dGVybmFsLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5h
bC5oCmluZGV4IGNiYmEzYzQuLjMxYzBkODggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaApAQCAtNDQsNiArNDQsMTMgQEAKICNpbmNs
dWRlIDxjdXJsL2N1cmwuaD4KICNlbmRpZgogCisjaWYgVVNFKE5DVVJMKQorI2luY2x1ZGUgPGN1
cmwvY3VybC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSAiQ1N0cmluZy5o
IgorI2luY2x1ZGUgIlRpbWVyLmgiCisjZW5kaWYKKwogI2lmIFVTRShTT1VQKQogI2luY2x1ZGUg
PGxpYnNvdXAvc291cC5oPgogI2VuZGlmCkBAIC0xMDYsNiArMTEzLDI0IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgICAgICwgbV9mb3JtRGF0YUVsZW1lbnRJbmRleCgwKQogICAgICAg
ICAgICAgLCBtX2Zvcm1EYXRhRWxlbWVudERhdGFPZmZzZXQoMCkKICNlbmRpZgorI2lmIFVTRShO
Q1VSTCkKKyAgICAgICAgICAgICwgbV9sb2FkZXIobG9hZGVyKQorICAgICAgICAgICAgLCBtX2Rv
d25sb2FkVGltZXIodGhpcywgJlJlc291cmNlSGFuZGxlSW50ZXJuYWw6OmRvd25sb2FkVGltZXIp
CisgICAgICAgICAgICAsIG1fY3VybE11bHRpSGFuZGxlKDApCisgICAgICAgICAgICAsIG1faGFu
ZGxlKDApCisgICAgICAgICAgICAsIG1fdXJsKDApCisgICAgICAgICAgICAsIG1fY3VzdG9tSGVh
ZGVycygwKQorICAgICAgICAgICAgLCBtX2N1c3RvbVBvc3RIZWFkZXJzKDApCisgICAgICAgICAg
ICAsIG1fZmlsZVBvc3QoMCkKKyAgICAgICAgICAgICwgbV9zZW50UmVzcG9uc2UoZmFsc2UpCisg
ICAgICAgICAgICAsIG1fY2FsbGJhY2soMCkKKyAgICAgICAgICAgICwgbV9jYW5jZWxsZWQoMCkK
KyAgICAgICAgICAgICwgbV9vcGVuRmlsZUhhbmRsZXMoMCkKKyAgICAgICAgICAgICwgbV9wb3N0
RmlsZU5hbWUoMCkKKyAgICAgICAgICAgICwgbV9maWxlKDApCisgICAgICAgICAgICAsIG1fZm9y
bURhdGFFbGVtZW50SW5kZXgoMCkKKyAgICAgICAgICAgICwgbV9mb3JtRGF0YUVsZW1lbnREYXRh
T2Zmc2V0KDApCisjZW5kaWYKICNpZiBVU0UoU09VUCkKICAgICAgICAgICAgICwgbV9tc2coMCkK
ICNlbmRpZgpAQCAtMTY5LDEwICsxOTQsNDUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBzaXplX3QgbV9mb3JtRGF0YUVsZW1lbnREYXRhT2Zmc2V0OwogICAgICAgICBWZWN0b3I8Y2hh
cj4gbV9wb3N0Qnl0ZXM7CiAjZW5kaWYKKworI2lmIFVTRShOQ1VSTCkKKyAgICAgICAgdm9pZCBp
bml0Q1VSTCgpOworICAgICAgICBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNl
JiwgVmVjdG9yPGNoYXI+JiBkYXRhLCBGcmFtZSogZnJhbWUpOworICAgICAgICB2b2lkIHNldFRp
bWVvdXQobG9uZyk7CisgICAgICAgIHZvaWQgZG93bmxvYWRUaW1lcihUaW1lcjxSZXNvdXJjZUhh
bmRsZUludGVybmFsPiopOworICAgICAgICB2b2lkIHN0YXJ0KEZyYW1lKiwgYm9vbCBzeW5jaHJv
bm91cyk7CisgICAgICAgIHZvaWQgc2V0dXBQVVQoKTsKKyAgICAgICAgdm9pZCBzZXR1cFBPU1Qo
KTsKKyAgICAgICAgdm9pZCBjaGVja01lc3NhZ2VzKCk7CisgICAgICAgIHZvaWQgaGFuZGxlU29j
a2V0Q2FsbEJhY2soY3VybF9zb2NrZXRfdCxpbnQgYWN0aW9uKTsKKyAgICAgICAgdm9pZCBjYW5j
ZWwoKTsKKworICAgICAgICBSZXNvdXJjZUhhbmRsZSogbV9sb2FkZXI7CisgICAgICAgIFRpbWVy
PFJlc291cmNlSGFuZGxlSW50ZXJuYWw+IG1fZG93bmxvYWRUaW1lcjsKKyAgICAgICAgUmVzb3Vy
Y2VSZXNwb25zZSBtX3Jlc3BvbnNlOworICAgICAgICBSZXNvdXJjZUVycm9yIG1fZXJyb3I7Cisg
ICAgICAgIENVUkxNKiBtX2N1cmxNdWx0aUhhbmRsZTsKKyAgICAgICAgQ1VSTCogbV9oYW5kbGU7
CisgICAgICAgIGNoYXIqIG1fdXJsOworICAgICAgICBzdHJ1Y3QgY3VybF9zbGlzdCogbV9jdXN0
b21IZWFkZXJzOworICAgICAgICBzdHJ1Y3QgY3VybF9zbGlzdCogbV9jdXN0b21Qb3N0SGVhZGVy
czsKKyAgICAgICAgc3RydWN0IGN1cmxfaHR0cHBvc3QqIG1fZmlsZVBvc3Q7CisgICAgICAgIGJv
b2wgbV9zZW50UmVzcG9uc2U7CisgICAgICAgIHZvaWQqIG1fY2FsbGJhY2s7CisgICAgICAgIGJv
b2wgbV9jYW5jZWxsZWQ7CisgICAgICAgIGludCAgbV9vcGVuRmlsZUhhbmRsZXM7CisgICAgICAg
IGNoYXIqIG1fcG9zdEZpbGVOYW1lOworICAgICAgICBGSUxFKiBtX2ZpbGU7CisgICAgICAgIHNp
emVfdCBtX2Zvcm1EYXRhRWxlbWVudEluZGV4OworICAgICAgICBzaXplX3QgbV9mb3JtRGF0YUVs
ZW1lbnREYXRhT2Zmc2V0OworICAgICAgICBWZWN0b3I8Y2hhcj4gbV9yZXN1bHREYXRhOworICAg
ICAgICBWZWN0b3I8Y2hhcj4gbV9wb3N0Qnl0ZXM7CisgICAgICAgIFZlY3RvcjxDU3RyaW5nPiBt
X2NzdHJpbmdzOworI2VuZGlmCisKICNpZiBVU0UoU09VUCkKICAgICAgICAgU291cE1lc3NhZ2Uq
IG1fbXNnOwogICAgICAgICBTb3VwU2Vzc2lvbiogc2Vzc2lvbjsKLSAgICAgICAgUmVzb3VyY2VS
ZXNwb25zZSBtX3Jlc3BvbnNlOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oUVQpCiAjaWYgUVRfVkVS
U0lPTiA8IDB4MDQwNDAwCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ3Rr
L1Jlc291cmNlSGFuZGxlTWFuYWdlckd0ay5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Z3RrL1Jlc291cmNlSGFuZGxlTWFuYWdlckd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNGI0MjEwNwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9ndGsvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyR3RrLmNwcApAQCAtMCwwICsxLDE2MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVs
IG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxh
bHAudG9rZXJAY29sbGFib3JhLmNvLnVrPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBI
YW5zIFBldGVyIEZyZXl0aGVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZU1hbmFnZXIuaCIKKyNpbmNs
dWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisj
aW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisj
aW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgorI2luY2x1ZGUgIkhUVFBQYXJzZXJz
LmgiCisjaW5jbHVkZSAiQmFzZTY0LmgiCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgor
CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgR3RrSU9DaGFubmVsUHJpdmF0ZSB7
CisgICAgR0lPQ2hhbm5lbCogY2hhbm5lbDsKKyAgICBndWludCBpZDsKKyAgICBSZXNvdXJjZUhh
bmRsZUludGVybmFsKiBqb2I7CisgICAgaW50IG1hc2s7CisgICAgY3VybF9zb2NrZXRfdCBzb2Nr
ZmQ7Cit9OyAKKworCitzdGF0aWMgZ2Jvb2xlYW4gcmVzb3VyY2VIYW5kbGVHSU9GdW5jKEdJT0No
YW5uZWwgKnNvdXJjZSwgR0lPQ29uZGl0aW9uIGNvbmRpdGlvbiwgZ3BvaW50ZXIgZGF0YSkKK3sK
KyAgICBHdGtJT0NoYW5uZWxQcml2YXRlKiBwcml2ID0gc3RhdGljX2Nhc3Q8R3RrSU9DaGFubmVs
UHJpdmF0ZSo+KGRhdGEpOworICAgIGNoYXIgKmNuYW1lOworICAgIGludCBhY3Rpb24gPSAwOwor
ICAgIGJvb2wgZG9EZWxldGUgPSBmYWxzZTsKKworICAgIHN3aXRjaChjb25kaXRpb24pCisgICAg
eworICAgICAgY2FzZSBHX0lPX0lOOgorICAgICAgICBjbmFtZSA9ICJHX0lPX0lOIjsKKyAgICAg
ICAgYWN0aW9uID0gQ1VSTF9DU0VMRUNUX0lOOworICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdf
SU9fT1VUOgorICAgICAgICBjbmFtZSA9ICJHX0lPX09VVCI7CisgICAgICAgIGFjdGlvbiA9IENV
UkxfQ1NFTEVDVF9PVVQ7CisgICAgICBicmVhazsKKyAgICAgIGNhc2UgR19JT19QUkk6CisgICAg
ICAgIGNuYW1lID0gIkdfSU9fUFJJIjsKKyAgICAgICAgYWN0aW9uID0gQ1VSTF9DU0VMRUNUX09V
VDsKKyAgICAgIGJyZWFrOworICAgICAgY2FzZSBHX0lPX0VSUjoKKyAgICAgICAgY25hbWUgPSAi
R19JT19FUlIiOworICAgICAgICBhY3Rpb24gPSBDVVJMX0NTRUxFQ1RfRVJSOworICAgICAgICBk
b0RlbGV0ZSA9IHRydWU7CisgICAgICBicmVhazsKKyAgICAgIGNhc2UgR19JT19IVVA6CisgICAg
ICAgIGNuYW1lID0gIkdfSU9fVVAiOworICAgICAgICBhY3Rpb24gPSBDVVJMX0NTRUxFQ1RfRVJS
OworICAgICAgICBkb0RlbGV0ZSA9IHRydWU7CisgICAgICBicmVhazsKKyAgICAgIGNhc2UgR19J
T19OVkFMOgorICAgICAgICBjbmFtZSA9ICJHX0lPX05WQUwiOworICAgICAgICBhY3Rpb24gPSBD
VVJMX0NTRUxFQ1RfRVJSOworICAgICAgICBkb0RlbGV0ZSA9IHRydWU7CisgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBwcml2LT5qb2ItPmhhbmRsZVNvY2tldENhbGxCYWNrKHByaXYtPnNvY2tm
ZCxhY3Rpb24pOworCisgICAgaWYoZG9EZWxldGUpIHsKKyAgICAgICAgZGVsZXRlIHByaXY7Cisg
ICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK1Jlc291
cmNlSGFuZGxlTWFuYWdlciogUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpzaGFyZWRJbnN0YW5jZSgp
Cit7CisgICAgc3RhdGljIFJlc291cmNlSGFuZGxlTWFuYWdlciogc2hhcmVkOworICAgIGlmKCFz
aGFyZWQpCisgICAgICAgIHNoYXJlZCA9IG5ldyBSZXNvdXJjZUhhbmRsZU1hbmFnZXIoKTsKKyAg
ICByZXR1cm4gc2hhcmVkOworfQorCitSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OlJlc291cmNlSGFu
ZGxlTWFuYWdlcigpCis6IG1fY29va2llSmFyRmlsZU5hbWUoKGNoYXIqKSIvdG1wL2Nvb2tpZXMt
Y3VybC50eHQiKQoreworfQorCitSZXNvdXJjZUhhbmRsZU1hbmFnZXI6On5SZXNvdXJjZUhhbmRs
ZU1hbmFnZXIoKQoreworfQorCit2b2lkKiBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmFkZEZpbGVI
YW5kbGVEYXRhU291cmNlKFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGpvYiwgY3VybF9zb2NrZXRf
dCBzb2NrZmQsIGludCBtYXNrKQoreworICAgIGludCBjb25kaXRpb24gPSBHX0lPX1BSSSB8IEdf
SU9fRVJSIHwgR19JT19IVVAgfCBHX0lPX05WQUw7CisKKyAgICBpZihtYXNrICYgQ1VSTF9DU0VM
RUNUX0lOKQorICAgICAgICBjb25kaXRpb24gfD0gR19JT19JTjsgCisgICAgaWYobWFzayAmIENV
UkxfQ1NFTEVDVF9PVVQpCisgICAgICAgIGNvbmRpdGlvbiB8PSBHX0lPX09VVDsgCisKKyAgICBH
dGtJT0NoYW5uZWxQcml2YXRlKiBkYXRhID0gbmV3IEd0a0lPQ2hhbm5lbFByaXZhdGU7CisjaWZu
ZGVmIEdfT1NfV0lOMzIKKyAgICBHSU9DaGFubmVsKiBjaGFubmVsID0gZ19pb19jaGFubmVsX3Vu
aXhfbmV3IChzb2NrZmQpOworI2Vsc2UKKyAgICBHSU9DaGFubmVsKiBjaGFubmVsID0gZ19pb19j
aGFubmVsX3dpbjMyX25ld19zb2NrZXQgKHNvY2tmZCk7CisjZW5kaWYKKyAgICBkYXRhLT5jaGFu
bmVsID0gY2hhbm5lbDsKKyAgICBkYXRhLT5qb2IgPSBqb2I7CisgICAgZGF0YS0+bWFzayA9IG1h
c2s7CisgICAgZGF0YS0+c29ja2ZkID0gc29ja2ZkOworICAgIGdfaW9fY2hhbm5lbF9zZXRfZmxh
Z3MoY2hhbm5lbCwgR19JT19GTEFHX05PTkJMT0NLLCBOVUxMKTsKKyAgICBnX2lvX2NoYW5uZWxf
c2V0X2VuY29kaW5nIChjaGFubmVsLCBOVUxMLCBOVUxMKTsKKyAgICBnX2lvX2NoYW5uZWxfc2V0
X2J1ZmZlcmVkIChjaGFubmVsLCBGQUxTRSk7CisgICAgZ19pb19jaGFubmVsX3NldF9jbG9zZV9v
bl91bnJlZiAoY2hhbm5lbCwgRkFMU0UpOworICAgIGRhdGEtPmlkID0gZ19pb19hZGRfd2F0Y2hf
ZnVsbChjaGFubmVsLEdfUFJJT1JJVFlfREVGQVVMVCwoR0lPQ29uZGl0aW9uKWNvbmRpdGlvbiwo
R0lPRnVuYylyZXNvdXJjZUhhbmRsZUdJT0Z1bmMsZGF0YSxOVUxMKTsKKyAgICBnX2lvX2NoYW5u
ZWxfdW5yZWYgKGNoYW5uZWwpOworICAgIHJldHVybiggKHZvaWQqKWRhdGEpOworfQorCit2b2lk
IFJlc291cmNlSGFuZGxlTWFuYWdlcjo6cmVtb3ZlRmlsZUhhbmRsZURhdGFTb3VyY2UoUmVzb3Vy
Y2VIYW5kbGVJbnRlcm5hbCosIGN1cmxfc29ja2V0X3Qgcyx2b2lkKiBkYXRhKQoreworICAgIEd0
a0lPQ2hhbm5lbFByaXZhdGUqIHByaXYgPSBzdGF0aWNfY2FzdDxHdGtJT0NoYW5uZWxQcml2YXRl
Kj4oZGF0YSk7CisgICAgZ19zb3VyY2VfcmVtb3ZlKHByaXYtPmlkKTsKKyAgICBkZWxldGUgcHJp
djsKK30KKworfQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbmN1cmwv
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9uY3Vy
bC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjc1M2FjNmYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvbmN1cmwvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaApAQCAtMCwwICsxLDQ2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisjaWZuZGVmIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlX2gKKyNkZWZpbmUgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VfaAorCisjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UgOiBwdWJsaWMgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlIHsKK3B1YmxpYzoKKyAgICBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSgpCisgICAgeworICAgIH0KKworICAgIEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlLCBjb25z
dCBDcmVkZW50aWFsJiBwcm9wb3NlZENyZWRlbnRpYWwsIHVuc2lnbmVkIHByZXZpb3VzRmFpbHVy
ZUNvdW50LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgY29uc3QgUmVzb3VyY2VF
cnJvciYgZXJyb3IpCisgICAgICAgIDogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlKHByb3Rl
Y3Rpb25TcGFjZSwgcHJvcG9zZWRDcmVkZW50aWFsLCBwcmV2aW91c0ZhaWx1cmVDb3VudCwgcmVz
cG9uc2UsIGVycm9yKQorICAgIHsKKyAgICB9Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL25jdXJsL1Jlc291cmNlRXJyb3IuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9uY3VybC9SZXNvdXJjZUVycm9yLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMGE4ZWI2NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9uY3VybC9SZXNvdXJjZUVycm9yLmgKQEAgLTAsMCArMSw0OSBAQAor
Ly8gLSotIG1vZGU6IGMrKzsgYy1iYXNpYy1vZmZzZXQ6IDQgLSotCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIFJlc291cmNlRXJyb3JfaAorI2RlZmluZSBSZXNvdXJjZUVycm9yX2gKKwor
I2luY2x1ZGUgIlJlc291cmNlRXJyb3JCYXNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgUmVzb3VyY2VFcnJvciA6IHB1YmxpYyBSZXNvdXJjZUVycm9yQmFzZQoreworcHVibGlj
OgorICAgIFJlc291cmNlRXJyb3IoKQorICAgIHsKKyAgICB9CisKKyAgICBSZXNvdXJjZUVycm9y
KGNvbnN0IFN0cmluZyYgZG9tYWluLCBpbnQgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGZhaWxp
bmdVUkwsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGVzY3JpcHRpb24pCisgICAgICAgIDogUmVz
b3VyY2VFcnJvckJhc2UoZG9tYWluLCBlcnJvckNvZGUsIGZhaWxpbmdVUkwsIGxvY2FsaXplZERl
c2NyaXB0aW9uKQorICAgIHsKKyAgICB9Cit9OworCit9CisKKyNlbmRpZiAvLyBSZXNvdXJjZUVy
cm9yX2hfCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbmN1cmwvUmVzb3Vy
Y2VIYW5kbGVDdXJsLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9uY3VybC9SZXNvdXJj
ZUhhbmRsZUN1cmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMGIx
YWUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbmN1cmwvUmVz
b3VyY2VIYW5kbGVDdXJsLmNwcApAQCAtMCwwICsxLDgzIEBACisvKioKKyAqIEBmaWxlIFJlc291
cmNlSGFuZGxlQ3VybC5jcHAgKgorICogQkFMIEltcGxlbWVudGF0aW9uIG9mIHRyYW5zZmVyIGpv
Yiwgd2l0aCBjdXJsCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5k
bGVDbGllbnQuaCIKKyNpbmNsdWRlICJEb2NMb2FkZXIuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJG
b3JtRGF0YS5oIgorI2luY2x1ZGUgInd0Zi9IYXNoU2V0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRl
ICJ3dGYvVmVjdG9yLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUg
PGN1cmwvY3VybC5oPgorI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKKworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKworYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoRnJhbWUqIGZyYW1lKQorewor
ICAgIGQtPnN0YXJ0KGZyYW1lLGZhbHNlKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1Jlc291
cmNlSGFuZGxlOjp+UmVzb3VyY2VIYW5kbGUoKQoreworfQorCisKK3ZvaWQgUmVzb3VyY2VIYW5k
bGU6OmNhbmNlbCgpCit7CisgICAgZC0+Y2FuY2VsKCk7CisgICAgcmV0dXJuOworfQorCisKKwor
Cit2b2lkIFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VFcnJvciYgZXJyb3IsCisgICAgICAgIFJl
c291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEsIEZyYW1lKiBmcmFt
ZSkKK3sKKyAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KHJlcXVlc3QsZXJyb3IscmVzcG9uc2UsZGF0YSxmcmFtZSk7Cit9CisKK2Jvb2wgUmVzb3Vy
Y2VIYW5kbGU6OndpbGxMb2FkRnJvbUNhY2hlKFJlc291cmNlUmVxdWVzdCYpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVzb3VyY2VIYW5k
bGU6OmxvYWRzQmxvY2tlZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK1Bhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBSZXNvdXJjZUhhbmRsZTo6YnVm
ZmVyZWREYXRhKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBSZXNvdXJjZUhhbmRsZTo6
c3VwcG9ydHNCdWZmZXJlZERhdGEoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBS
ZXNvdXJjZUhhbmRsZTo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKK3sKKyAgICBkLT5t
X2RlZmVyc0xvYWRpbmcgPSBkZWZlcnM7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworCisK
K30gCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbmN1cmwvUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbEN1cmwuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL25jdXJsL1Jl
c291cmNlSGFuZGxlSW50ZXJuYWxDdXJsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4zMDEwZTllCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL25jdXJsL1Jlc291cmNlSGFuZGxlSW50ZXJuYWxDdXJsLmNwcApAQCAtMCwwICsxLDc2MCBA
QAorLyoqCisgKiBAZmlsZSBSZXNvdXJjZUhhbmRsZUN1cmwuY3BwICoKKyAqIEJBTCBJbXBsZW1l
bnRhdGlvbiBvZiB0cmFuc2ZlciBqb2IsIHdpdGggY3VybAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgor
I2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSAiRG9jTG9hZGVyLmgi
CisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUlu
dGVybmFsLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmgiCisjaW5jbHVkZSAi
SFRUUFBhcnNlcnMuaCIKKyNpbmNsdWRlICJCYXNlNjQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJGb3JtRGF0YS5oIgorI2lu
Y2x1ZGUgInd0Zi9IYXNoU2V0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNs
dWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJ3dGYvVmVjdG9yLmgi
CisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIK
KyNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCisjaW5jbHVkZSAid3RmL0Fzc2VydGlvbnMuaCIKKyNp
bmNsdWRlIDxjdXJsL2N1cmwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaWYgUExBVEZPUk0o
R1RLKQorICAgICNpZiBHTElCX0NIRUNLX1ZFUlNJT04oMiwxMiwwKQorICAgICAgICAjZGVmaW5l
IFVTRV9HTElCX0JBU0U2NAorICAgICNlbmRpZgorI2VuZGlmCisKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisKK2NvbnN0IGludCBzZWxlY3RUaW1lb3V0TVMgPSA1Oworc3RhdGljIGNoYXIgZXJy
b3JfYnVmZmVyW0NVUkxfRVJST1JfU0laRV07CitzdGF0aWMgY2hhciogbV9jb29raWVKYXJGaWxl
TmFtZTsKK3N0YXRpYyBDVVJMU0gqIG1fY3VybFNoYXJlSGFuZGxlOyAvLyBGSVhNRTogbmV2ZXIg
ZnJlZWQKK3N0YXRpYyBSZXNvdXJjZUhhbmRsZU1hbmFnZXIqIG1fbWFuYWdlciA9IDA7CisKKwor
c3RhdGljIHNpemVfdCB3cml0ZUNhbGxiYWNrKHZvaWQqIHB0ciwgc2l6ZV90IHNpemUsIHNpemVf
dCBubWVtYiwgdm9pZCogb2JqKQoreworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBz
dGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZUludGVybmFsKj4ob2JqKTsKKyAgICBBU1NFUlQoZCk7
CisgICAgbG9uZyBjb2RlID0gMDsKKyAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhkLT5tX2hhbmRsZSwg
Q1VSTElORk9fUkVTUE9OU0VfQ09ERSwgJmNvZGUpOworICAgIGludCB0b3RhbFNpemUgPSBzaXpl
ICogbm1lbWI7CisKKyAgICAvLyBhdm9pZCBoYXZpbmcgcmVkaXJlY3Rpb24gbWVzc2FnZXMgaW4g
dGhlIGJvZHkgIQorICAgIC8vIHRoaXMgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSBidXQgYXBwYXJl
bnRseSBpcy4gQ1VSTCB3cml0ZXMgdGhlIGRhdGEKKyAgICAvLyBvZiBodG1sIHBhZ2UgZXZlbiBp
ZiBpdCBpcyBhIHJlZGlyZWN0IHRoYXQgd2FzIGhhbmRsZWQgaW50ZXJuYWxseQorICAgIC8vIGNh
biBiZSBvYnNlcnZlZCBlLmcuIG9uIGdtYWlsLmNvbQorICAgIGlmIChjb2RlID49IDMwMCAmJiBj
b2RlIDwgNDAwKSB7CisgICAgICAgIHJldHVybiB0b3RhbFNpemU7CisgICAgfQorCisgICAgLy8g
c2luY2UgdGhlIGNvZGUgaW4gaGVhZGVyQ2FsbGJhY2sgd2lsbCBub3QgaGF2ZSBydW4gZm9yIGxv
Y2FsIGZpbGVzCisgICAgLy8gdGhlIGNvZGUgdG8gc2V0IHRoZSBVUkwgYW5kIGZpcmUgZGlkUmVj
ZWl2ZVJlc3BvbnNlIGlzIG5ldmVyIHJ1biwKKyAgICAvLyB3aGljaCBtZWFucyB0aGUgUmVzb3Vy
Y2VMb2FkZXIncyByZXNwb25zZSBkb2VzIG5vdCBjb250YWluIHRoZSBVUkwuCisgICAgLy8gUnVu
IHRoZSBjb2RlIGhlcmUgZm9yIGxvY2FsIGZpbGVzIHRvIHJlc29sdmUgdGhlIGlzc3VlLgorICAg
IC8vIFRPRE86IFNlZSBpZiB0aGVyZSBpcyBhIGJldHRlciBhcHByb2FjaCBmb3IgaGFuZGxpbmcg
dGhpcy4KKyAgICBpZiAoIWQtPm1fcmVzcG9uc2UucmVzcG9uc2VGaXJlZCgpKSB7CisgICAgICAg
IGNvbnN0IGNoYXIqIGhkcjsKKyAgICAgICAgQ1VSTGNvZGUgZXJyID0gY3VybF9lYXN5X2dldGlu
Zm8oZC0+bV9oYW5kbGUsIENVUkxJTkZPX0VGRkVDVElWRV9VUkwsICZoZHIpOworICAgICAgICBp
ZihDVVJMRV9PSyA9PSBlcnIpCisgICAgICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldFVybChLVVJM
KGhkcikpOworICAgICAgICBpZiAoZC0+bV9jbGllbnQpCisgICAgICAgICAgICBkLT5tX2NsaWVu
dC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGQtPm1fbG9hZGVyLCBkLT5tX3Jlc3BvbnNlKTsKKyAgICAg
ICAgZC0+bV9yZXNwb25zZS5zZXRSZXNwb25zZUZpcmVkKHRydWUpOworICAgIH0KKworICAgIGlm
IChkLT5tX2NsaWVudCkKKyAgICAgICAgZC0+bV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKGQtPm1f
bG9hZGVyLCBzdGF0aWNfY2FzdDxjaGFyKj4gKHB0ciksIHRvdGFsU2l6ZSwgdG90YWxTaXplKTsK
KyAgICBlbHNlCisgICAgICAgIGQtPm1fcmVzdWx0RGF0YS5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hh
cio+IChwdHIpLCB0b3RhbFNpemUpOworCisgICAgcmV0dXJuIHRvdGFsU2l6ZTsKK30KKworc3Rh
dGljIHNpemVfdCBoZWFkZXJDYWxsYmFjayhjaGFyKiBwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qg
bm1lbWIsIHZvaWQqIG9iaikKK3sKKyAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gc3Rh
dGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCo+KG9iaik7CisgICAgQVNTRVJUKGQpOwor
ICAgIGlmIChkLT5tX2NhbmNlbGxlZCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgc2l6ZV90IHRv
dGFsU2l6ZSA9IHNpemUgKiBubWVtYjsKKworICAgIFN0cmluZyBoZWFkZXIoc3RhdGljX2Nhc3Q8
Y29uc3QgY2hhcio+KHB0ciksIHRvdGFsU2l6ZSk7CisKKyAgICAvKgorICAgICAqIGEpIFdlIGNh
biBmaW5pc2ggYW5kIHNlbmQgdGhlIFJlc291cmNlUmVzcG9uc2UKKyAgICAgKiBiKSBXZSB3aWxs
IGFkZCB0aGUgY3VycmVudCBoZWFkZXIgdG8gdGhlIEhUVFBIZWFkZXJNYXAgb2YgdGhlIFJlc291
cmNlUmVzcG9uc2UKKyAgICAgKi8KKyAgICBpZiAoaGVhZGVyID09IFN0cmluZygiXHJcbiIpKSB7
CisgICAgICAgIENVUkwqIGggPSBkLT5tX2hhbmRsZTsKKyAgICAgICAgQ1VSTGNvZGUgZXJyOwor
CisgICAgICAgIGRvdWJsZSBjb250ZW50TGVuZ3RoID0gMDsKKyAgICAgICAgZXJyID0gY3VybF9l
YXN5X2dldGluZm8oaCwgQ1VSTElORk9fQ09OVEVOVF9MRU5HVEhfRE9XTkxPQUQsICZjb250ZW50
TGVuZ3RoKTsKKyAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgo
c3RhdGljX2Nhc3Q8bG9uZyBsb25nIGludD4oY29udGVudExlbmd0aCkpOworCisgICAgICAgIGNv
bnN0IGNoYXIqIGhkcjsKKyAgICAgICAgZXJyID0gY3VybF9lYXN5X2dldGluZm8oaCwgQ1VSTElO
Rk9fRUZGRUNUSVZFX1VSTCwgJmhkcik7CisgICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0VXJsKEtV
UkwoaGRyKSk7CisKKyAgICAgICAgbG9uZyBodHRwQ29kZSA9IDA7CisgICAgICAgIGVyciA9IGN1
cmxfZWFzeV9nZXRpbmZvKGgsIENVUkxJTkZPX1JFU1BPTlNFX0NPREUsICZodHRwQ29kZSk7Cisg
ICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoaHR0cENvZGUpOworCisgICAg
ICAgIGQtPm1fcmVzcG9uc2Uuc2V0TWltZVR5cGUoZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlw
ZShkLT5tX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgiQ29udGVudC1UeXBlIikpKTsKKyAgICAg
ICAgZC0+bV9yZXNwb25zZS5zZXRUZXh0RW5jb2RpbmdOYW1lKGV4dHJhY3RDaGFyc2V0RnJvbU1l
ZGlhVHlwZShkLT5tX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgiQ29udGVudC1UeXBlIikpKTsK
KyAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRTdWdnZXN0ZWRGaWxlbmFtZShmaWxlbmFtZUZyb21I
VFRQQ29udGVudERpc3Bvc2l0aW9uKGQtPm1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJDb250
ZW50LURpc3Bvc2l0aW9uIikpKTsKKworICAgICAgICAvLyBIVFRQIHJlZGlyZWN0aW9uCisgICAg
ICAgIGlmIChodHRwQ29kZSA+PSAzMDAgJiYgaHR0cENvZGUgPCA0MDApIHsKKyAgICAgICAgICAg
IFN0cmluZyBsb2NhdGlvbiA9IGQtPm1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJsb2NhdGlv
biIpOworICAgICAgICAgICAgaWYgKCFsb2NhdGlvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
ICAgICBLVVJMIG5ld1VSTCA9IEtVUkwoZC0+bV9yZXF1ZXN0LnVybCgpLGxvY2F0aW9uKTsKKwor
ICAgICAgICAgICAgICAgIFJlc291cmNlUmVxdWVzdCByZWRpcmVjdGVkUmVxdWVzdCA9IGQtPm1f
cmVxdWVzdDsKKyAgICAgICAgICAgICAgICByZWRpcmVjdGVkUmVxdWVzdC5zZXRVUkwobmV3VVJM
KTsKKyAgICAgICAgICAgICAgICBpZiAoZC0+bV9jbGllbnQpCisgICAgICAgICAgICAgICAgICAg
IGQtPm1fY2xpZW50LT53aWxsU2VuZFJlcXVlc3QoZC0+bV9sb2FkZXIsIHJlZGlyZWN0ZWRSZXF1
ZXN0LCBkLT5tX3Jlc3BvbnNlKTsKKworICAgICAgICAgICAgICAgIGQtPm1fcmVxdWVzdC5zZXRV
UkwobmV3VVJMKTsKKworICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbFNpemU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoZC0+bV9jbGllbnQpCisgICAgICAgICAg
ICBkLT5tX2NsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGQtPm1fbG9hZGVyLCBkLT5tX3Jlc3Bv
bnNlKTsKKyAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRSZXNwb25zZUZpcmVkKHRydWUpOworCisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaW50IHNwbGl0UG9zID0gaGVhZGVyLmZpbmQoIjoiKTsKKyAg
ICAgICAgaWYgKHNwbGl0UG9zICE9IC0xKQorICAgICAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRI
VFRQSGVhZGVyRmllbGQoaGVhZGVyLmxlZnQoc3BsaXRQb3MpLCBoZWFkZXIuc3Vic3RyaW5nKHNw
bGl0UG9zKzEpLnN0cmlwV2hpdGVTcGFjZSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gdG90YWxT
aXplOworfQorCisvKiB0aGlzIGNhbGxiYWNrIG1pZ2h0IHZlcnkgd2VsbCBiZSBjYWxsZWQgbXVs
dGlwbGUgdGltZXMgZm9yIGEgc2luZ2xlIGVhc3kKKyAgIGhhbmRsZS4gQm90aCB0byBjaGFuZ2Ug
dGhlIHN0YXRlIG9mIHRoZSAnd2hhdCcgYnV0IGFsc28gdG8gbWFrZSBpdCBkZWFsCisgICB3aXRo
IG1vcmUgdGhhbiBvbmUgc29ja2V0LiAqLworc3RhdGljIGludCBzb2NrZXRDYWxsYmFjayhDVVJM
ICplYXN5LCAgICAgIC8qIGVhc3kgaGFuZGxlICovCisgICAgICAgICAgICAgICAgICAgICAgICAg
IGN1cmxfc29ja2V0X3QgcywgLyogc29ja2V0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBhY3Rpb24sICAgICAgICAvKiBXaHkgaSB3YXMgY2FsbGVkICovCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQqIHVzZXJwLCAvKiBwcml2YXRlIHBvaW50ZXIgKi8KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgdm9pZCAqc29ja2V0cCkgICAgLyogInByaXZhdGUiIHBlciBzb2Nr
ZXQgcG9pbnRlciAqLworeworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQ7CisgICAgY3Vy
bF9lYXN5X2dldGluZm8oZWFzeSwgQ1VSTElORk9fUFJJVkFURSwgJmQpOworCisgICAgaWYgKHNv
Y2tldHApIHsKKyAgICAgICAgbV9tYW5hZ2VyLT5yZW1vdmVGaWxlSGFuZGxlRGF0YVNvdXJjZShk
LHMsc29ja2V0cCk7CisgICAgICAgIGN1cmxfbXVsdGlfYXNzaWduKGQtPm1fY3VybE11bHRpSGFu
ZGxlLCBzLDApOworICAgICAgICBkLT5tX29wZW5GaWxlSGFuZGxlcy0tOworICAgIH0KKworICAg
IHN3aXRjaCAoYWN0aW9uKSB7CisgICAgY2FzZSBDVVJMX1BPTExfUkVNT1ZFOiB7CisgICAgICAg
IC8vZGVmYXVsdCBhY3Rpb24KKyAgICB9CisgICAgYnJlYWs7CisgICAgY2FzZSBDVVJMX1BPTExf
Tk9ORTogeworICAgICAgICAvL3doYXQgc2hvdWxkIEkgZG8gPworICAgIH0KKyAgICBicmVhazsK
KyAgICBjYXNlIENVUkxfUE9MTF9JTjogeworICAgICAgICB2b2lkKiBjZCA9IG1fbWFuYWdlci0+
YWRkRmlsZUhhbmRsZURhdGFTb3VyY2UoZCxzLENVUkxfQ1NFTEVDVF9JTik7CisgICAgICAgIGN1
cmxfbXVsdGlfYXNzaWduKGQtPm1fY3VybE11bHRpSGFuZGxlLCBzLGNkKTsKKyAgICAgICAgZC0+
bV9vcGVuRmlsZUhhbmRsZXMrKzsKKyAgICB9CisgICAgYnJlYWs7CisgICAgY2FzZSBDVVJMX1BP
TExfT1VUOiB7CisgICAgICAgIHZvaWQqIGNkID0gbV9tYW5hZ2VyLT5hZGRGaWxlSGFuZGxlRGF0
YVNvdXJjZShkLHMsQ1VSTF9DU0VMRUNUX09VVCk7CisgICAgICAgIGN1cmxfbXVsdGlfYXNzaWdu
KGQtPm1fY3VybE11bHRpSGFuZGxlLCBzLGNkKTsKKyAgICAgICAgZC0+bV9vcGVuRmlsZUhhbmRs
ZXMrKzsKKyAgICB9CisgICAgYnJlYWs7CisgICAgY2FzZSBDVVJMX1BPTExfSU5PVVQ6IHsKKyAg
ICAgICAgdm9pZCogY2QgPSBtX21hbmFnZXItPmFkZEZpbGVIYW5kbGVEYXRhU291cmNlKGQscyxD
VVJMX0NTRUxFQ1RfSU4gfCBDVVJMX0NTRUxFQ1RfT1VUKTsKKyAgICAgICAgY3VybF9tdWx0aV9h
c3NpZ24oZC0+bV9jdXJsTXVsdGlIYW5kbGUsIHMsY2QpOworICAgICAgICBkLT5tX29wZW5GaWxl
SGFuZGxlcysrOworICAgIH0KKyAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9CisgICAgLy9DbGVhbiB1cCBpZiBuZWVkZWQKKyAgICBpZighZC0+bV9vcGVuRmls
ZUhhbmRsZXMpCisgICAgICAgIGQtPnNldFRpbWVvdXQoMTApOworICAgIHJldHVybiAwOworfQor
CitzdGF0aWMgaW50IHRpbWVyQ2FsbGJhY2soQ1VSTE0gKm11bHRpLCBsb25nIHRpbWVvdXRfbXMs
IHZvaWQgKnVzZXJwKQoreworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBzdGF0aWNf
Y2FzdDxSZXNvdXJjZUhhbmRsZUludGVybmFsKj4odXNlcnApOworICAgIGQtPnNldFRpbWVvdXQo
dGltZW91dF9tcyk7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgaXMgY2FsbGVkIHRvIG9i
dGFpbiBIVFRQIFBPU1Qgb3IgUFVUIGRhdGEuCisgICBJdGVyYXRlIHRocm91Z2ggRm9ybURhdGEg
ZWxlbWVudHMgYW5kIHVwbG9hZCBmaWxlcy4KKyAgIENhcmVmdWxseSByZXNwZWN0IHRoZSBnaXZl
biBidWZmZXIgc2l6ZSBhbmQgZmlsbCB0aGUgcmVzdCBvZiB0aGUgZGF0YSBhdCB0aGUgbmV4dCBj
YWxscy4KKyovCitzaXplX3QgcmVhZENhbGxiYWNrKHZvaWQqIHB0ciwgc2l6ZV90IHNpemUsIHNp
emVfdCBubWVtYiwgdm9pZCogZGF0YSkKK3sKKyAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBk
ID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCo+KGRhdGEpOworICAgIGlmIChk
LT5tX2NhbmNlbGxlZCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBzaXplX3Qgc2VudCA9IDA7
CisgICAgc2l6ZV90IHRvU2VuZCA9IHNpemUgKiBubWVtYjsKKyAgICBpZiAoIXRvU2VuZCkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBWZWN0b3I8Rm9ybURhdGFFbGVtZW50PiBlbGVtZW50cyA9
IGQtPm1fcmVxdWVzdC5odHRwQm9keSgpLT5lbGVtZW50cygpOworICAgIGlmIChkLT5tX2Zvcm1E
YXRhRWxlbWVudEluZGV4ID49IGVsZW1lbnRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBGb3JtRGF0YUVsZW1lbnQgZWxlbWVudCA9IGVsZW1lbnRzW2QtPm1fZm9ybURhdGFFbGVt
ZW50SW5kZXhdOworCisgICAgaWYgKGVsZW1lbnQubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6
ZW5jb2RlZEZpbGUpIHsKKyAgICAgICAgaWYgKCFkLT5tX2ZpbGUpCisgICAgICAgICAgICBkLT5t
X2ZpbGUgPSBmb3BlbihlbGVtZW50Lm1fZmlsZW5hbWUudXRmOCgpLmRhdGEoKSwgInJiIik7CisK
KyAgICAgICAgaWYgKCFkLT5tX2ZpbGUpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBzaG93IGEg
dXNlciBlcnJvcj8KKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHdoaWxlIHRyeWluZyB0
byBvcGVuICVzIGZvciB1cGxvYWRcbiIsIGVsZW1lbnQubV9maWxlbmFtZS51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgICAgIGQtPmNhbmNlbCgpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIH0KKworICAgICAgICBzZW50ID0gZnJlYWQocHRyLCBzaXplLCBubWVtYiwgZC0+bV9maWxl
KTsKKyAgICAgICAgaWYgKCFzaXplICYmIGZlcnJvcihkLT5tX2ZpbGUpKSB7CisgICAgICAgICAg
ICAvLyBGSVhNRTogc2hvdyBhIHVzZXIgZXJyb3I/CisgICAgICAgICAgICBMT0dfRVJST1IoIkZh
aWxlZCB3aGlsZSB0cnlpbmcgdG8gcmVhZCAlcyBmb3IgdXBsb2FkXG4iLCBlbGVtZW50Lm1fZmls
ZW5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBkLT5jYW5jZWwoKTsKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGlmIChmZW9mKGQtPm1fZmlsZSkpIHsK
KyAgICAgICAgICAgIGZjbG9zZShkLT5tX2ZpbGUpOworICAgICAgICAgICAgZC0+bV9maWxlID0g
MDsKKyAgICAgICAgICAgIGQtPm1fZm9ybURhdGFFbGVtZW50SW5kZXgrKzsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIHNpemVfdCBlbGVtZW50U2l6ZSA9IGVsZW1lbnQubV9kYXRh
LnNpemUoKSAtIGQtPm1fZm9ybURhdGFFbGVtZW50RGF0YU9mZnNldDsKKyAgICAgICAgc2VudCA9
IGVsZW1lbnRTaXplID4gdG9TZW5kID8gdG9TZW5kIDogZWxlbWVudFNpemU7CisgICAgICAgIG1l
bWNweShwdHIsIGVsZW1lbnQubV9kYXRhLmRhdGEoKSArIGQtPm1fZm9ybURhdGFFbGVtZW50RGF0
YU9mZnNldCwgc2VudCk7CisgICAgICAgIGlmIChlbGVtZW50U2l6ZSA+IHNlbnQpCisgICAgICAg
ICAgICBkLT5tX2Zvcm1EYXRhRWxlbWVudERhdGFPZmZzZXQgKz0gc2VudDsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBkLT5tX2Zvcm1EYXRhRWxlbWVudERhdGFPZmZzZXQgPSAwOworICAg
ICAgICAgICAgZC0+bV9mb3JtRGF0YUVsZW1lbnRJbmRleCsrOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIHNlbnQ7Cit9CisKK1Jlc291cmNlSGFuZGxlSW50ZXJuYWw6On5SZXNvdXJj
ZUhhbmRsZUludGVybmFsKCkKK3sKKyAgICBjYW5jZWwoKTsKKworfQorCit2b2lkIFJlc291cmNl
SGFuZGxlSW50ZXJuYWw6OmhhbmRsZVNvY2tldENhbGxCYWNrKGN1cmxfc29ja2V0X3QgcywgaW50
IGFjdGlvbikKK3sKKyAgICBpbnQgaGFuZGxlcyA9IC0xOworICAgIHN3aXRjaCAoYWN0aW9uKSB7
CisgICAgY2FzZSBDVVJMX0NTRUxFQ1RfT1VUOgorICAgICAgICAvL2N1cmxfbXVsdGlfc29ja2V0
X2FjdGlvbihtX2N1cmxNdWx0aUhhbmRsZSwgcywgQ1VSTF9DU0VMRUNUX09VVCwgJmhhbmRsZXMp
OworICAgICAgICBjdXJsX211bHRpX3NvY2tldF9hY3Rpb24obV9jdXJsTXVsdGlIYW5kbGUsIHMs
MCwgJmhhbmRsZXMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENVUkxfQ1NFTEVDVF9JTjoK
KyAgICAgICAgLy9jdXJsX211bHRpX3NvY2tldF9hY3Rpb24obV9jdXJsTXVsdGlIYW5kbGUsIHMs
IENVUkxfQ1NFTEVDVF9JTiwgJmhhbmRsZXMpOworICAgICAgICBjdXJsX211bHRpX3NvY2tldF9h
Y3Rpb24obV9jdXJsTXVsdGlIYW5kbGUsIHMsMCwgJmhhbmRsZXMpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIENVUkxfQ1NFTEVDVF9FUlI6CisgICAgICAgIC8vZG8gbm90aGluZyBvbiBlcnJv
ciBleGNlcHQgY2hlY2sgbWVzc2FnZXMKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgLy9QYXNzIDAgbGV0IGN1cmwgZGVjaWRlIHdoYXQgdG8gZG8KKyAgICAgICAgY3VybF9t
dWx0aV9zb2NrZXRfYWN0aW9uKG1fY3VybE11bHRpSGFuZGxlLCBzLDAsICZoYW5kbGVzKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIHNldFRpbWVvdXQoMCk7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VIYW5kbGVJbnRlcm5hbDo6ZG93bmxvYWRUaW1lcihUaW1lcjxSZXNvdXJjZUhhbmRsZUludGVy
bmFsPiopCit7CisgICAgY2hlY2tNZXNzYWdlcygpOworfQorCisvLyBGSVhNRTogVGhpcyBmdW5j
dGlvbiBkb2VzIG5vdCBkZWFsIHByb3Blcmx5IHdpdGggdGV4dCBlbmNvZGluZ3MuCitzdGF0aWMg
dm9pZCBwYXJzZURhdGFVcmwoUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCkKK3sKKyAgICBTdHJp
bmcgZGF0YSA9IGQtPm1fbG9hZGVyLT5yZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCk7CisKKyAgICBB
U1NFUlQoZGF0YS5zdGFydHNXaXRoKCJkYXRhOiIsIGZhbHNlKSk7CisKKyAgICBTdHJpbmcgaGVh
ZGVyOworICAgIGJvb2wgYmFzZTY0ID0gZmFsc2U7CisKKyAgICBpbnQgaW5kZXggPSBkYXRhLmZp
bmQoJywnKTsKKyAgICBpZiAoaW5kZXggIT0gLTEpIHsKKyAgICAgICAgaGVhZGVyID0gZGF0YS5z
dWJzdHJpbmcoNSwgaW5kZXggLSA1KS5sb3dlcigpOworICAgICAgICBkYXRhID0gZGF0YS5zdWJz
dHJpbmcoaW5kZXggKyAxKTsKKworICAgICAgICBpZiAoaGVhZGVyLmVuZHNXaXRoKCI7YmFzZTY0
IikpIHsKKyAgICAgICAgICAgIGJhc2U2NCA9IHRydWU7CisgICAgICAgICAgICBoZWFkZXIgPSBo
ZWFkZXIubGVmdChoZWFkZXIubGVuZ3RoKCkgLSA3KTsKKyAgICAgICAgfQorICAgIH0gZWxzZQor
ICAgICAgICBkYXRhID0gU3RyaW5nKCk7CisKKyAgICBkYXRhID0gZGVjb2RlVVJMRXNjYXBlU2Vx
dWVuY2VzKGRhdGEpOworCisgICAgc2l6ZV90IG91dExlbmd0aCA9IDA7CisgICAgY2hhciogb3V0
RGF0YSA9IDA7CisgICAgaWYgKGJhc2U2NCAmJiAhZGF0YS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
Ly8gVXNlIHRoZSBHTGliIEJhc2U2NCBpZiBhdmFpbGFibGUsIHNpbmNlIFdlYkNvcmUncyBkZWNv
ZGVyIGlzbid0CisgICAgICAgIC8vIGdlbmVyYWwtcHVycG9zZSBhbmQgZmFpbHMgb24gQWNpZDMg
dGVzdCA5NyAod2hpdGVzcGFjZSkuCisjaWZkZWYgVVNFX0dMSUJfQkFTRTY0CisgICAgICAgIG91
dERhdGEgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihnX2Jhc2U2NF9kZWNvZGUoZGF0YS51dGY4
KCkuZGF0YSgpLCAmb3V0TGVuZ3RoKSk7CisjZWxzZQorICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0
OworICAgICAgICBpZiAoYmFzZTY0RGVjb2RlKGRhdGEubGF0aW4xKCkuZGF0YSgpLCBkYXRhLmxl
bmd0aCgpLCBvdXQpKQorICAgICAgICAgICAgZGF0YSA9IFN0cmluZyhvdXQuZGF0YSgpLCBvdXQu
c2l6ZSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGF0YSA9IFN0cmluZygpOworI2Vu
ZGlmCisgICAgfQorCisgICAgaWYgKGhlYWRlci5pc0VtcHR5KCkpCisgICAgICAgIGhlYWRlciA9
ICJ0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUkiOworCisgICAgUmVzb3VyY2VIYW5kbGVDbGll
bnQqIGNsaWVudCA9IGQtPm1fY2xpZW50OworCisgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25z
ZTsKKworICAgIHJlc3BvbnNlLnNldE1pbWVUeXBlKGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5
cGUoaGVhZGVyKSk7CisgICAgcmVzcG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZShleHRyYWN0Q2hh
cnNldEZyb21NZWRpYVR5cGUoaGVhZGVyKSk7CisgICAgaWYgKG91dERhdGEpCisgICAgICAgIHJl
c3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aChvdXRMZW5ndGgpOworICAgIGVsc2UKKyAg
ICAgICAgcmVzcG9uc2Uuc2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKGRhdGEubGVuZ3RoKCkpOwor
ICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKDIwMCk7CisKKyAgICBjbGllbnQtPmRpZFJl
Y2VpdmVSZXNwb25zZShkLT5tX2xvYWRlciwgcmVzcG9uc2UpOworCisgICAgaWYgKG91dERhdGEp
CisgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoZC0+bV9sb2FkZXIsIG91dERhdGEsIG91
dExlbmd0aCwgMCk7CisgICAgZWxzZQorICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVEYXRhKGQt
Pm1fbG9hZGVyLCBkYXRhLmxhdGluMSgpLmRhdGEoKSwgZGF0YS5sZW5ndGgoKSwgMCk7CisKKyNp
ZmRlZiBVU0VfR0xJQl9CQVNFNjQKKyAgICBnX2ZyZWUob3V0RGF0YSk7CisjZW5kaWYKKworICAg
IGNsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhkLT5tX2xvYWRlcik7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VIYW5kbGVJbnRlcm5hbDo6c3RhcnQoRnJhbWUqLGJvb2wgc3luY2hyb25vdXMpCit7CisgICAg
aWYgKG1fbG9hZGVyKQorICAgICAgICBtX2xvYWRlci0+cmVmKCk7CisgICAgaW5pdENVUkwoKTsK
KworICAgIEtVUkwga3VybCA9IG1fcmVxdWVzdC51cmwoKTsKKworICAgIGlmIChrdXJsLnByb3Rv
Y29sSXMoImRhdGEiKSkgeworICAgICAgICBwYXJzZURhdGFVcmwodGhpcyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBjaGVjayBmb3IgKHByb2JhYmx5KSBicm9rZW4gcmVxdWVz
dHMKKyAgICBpZiAobV9yZXF1ZXN0Lmh0dHBNZXRob2QoKSAhPSAiR0VUIiAmJgorICAgICAgICAg
ICAgbV9yZXF1ZXN0Lmh0dHBNZXRob2QoKSAhPSAiUE9TVCIgJiYKKyAgICAgICAgICAgIG1fcmVx
dWVzdC5odHRwTWV0aG9kKCkgIT0gIlBVVCIpIHsKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3Jlc3BvbnNlLnNldFVybChtX3JlcXVlc3Qu
dXJsKCkpOworICAgIC8vIFJlbW92ZSBhbnkgZnJhZ21lbnQgcGFydCwgb3RoZXJ3aXNlIGN1cmwg
d2lsbCBzZW5kIGl0IGFzIHBhcnQgb2YgdGhlIHJlcXVlc3QuCisgICAga3VybC5zZXRSZWYoIiIp
OworCisgICAgU3RyaW5nIHN1cmwgPSBrdXJsLnN0cmluZygpOworICAgIC8vcmVtb3ZlIGFueSBx
dWVyeSBwYXJ0IHNlbnQgdG8gYSBsb2NhbCBmaWxlCisgICAgLy9hbGxvd3MgaHR0cCBzdHlsZSBn
ZXQgb3B0aW9ucyB0byBiZSBoYW5kbGVkIGJ5IGEgbG9jYWwgZmlsZQorICAgIC8vTW96aWxsYSBl
eGNlcHRzIGZpbGU6Ly9mb29iYXIuY29tL2Zvbz9nZXRvcHMKKworICAgIGlmIChrdXJsLmlzTG9j
YWxGaWxlKCkpIHsKKyAgICAgICAgU3RyaW5nIHF1ZXJ5ID0ga3VybC5xdWVyeSgpOworICAgICAg
ICAvLyBSZW1vdmUgYW55IHF1ZXJ5IHBhcnQgc2VudCB0byBhIGxvY2FsIGZpbGUuCisgICAgICAg
IGlmICghcXVlcnkuaXNFbXB0eSgpKQorICAgICAgICAgICAgc3VybCA9IHN1cmwubGVmdChzdXJs
LmZpbmQocXVlcnkpKTsKKyAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBNSU1FIHR5cGUgYmFzZWQg
b24gdGhlIHBhdGguCisgICAgICAgIG1fcmVzcG9uc2Uuc2V0TWltZVR5cGUoTUlNRVR5cGVSZWdp
c3RyeTo6Z2V0TUlNRVR5cGVGb3JQYXRoKHN1cmwpKTsKKyAgICB9CisKKyAgICAvLyB1cmwgcHRy
IG11c3QgcmVtYWluIHZhbGlkIHRocm91Z2ggdGhlIHJlcXVlc3QKKyAgICBtX3VybCA9ICBzdHJk
dXAoc3VybC5sYXRpbjEoKS5kYXRhKCkpOworCisgICAgbV9oYW5kbGUgPSBjdXJsX2Vhc3lfaW5p
dCgpOworI2lmbmRlZiBOREVCVUcKKyAgICBpZiAoZ2V0ZW52KCJERUJVR19DVVJMIikpCisgICAg
ICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfVkVSQk9TRSwgMSk7CisjZW5k
aWYKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1BSSVZBVEUsIHRoaXMp
OworICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfRVJST1JCVUZGRVIsIGVy
cm9yX2J1ZmZlcik7CisgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9XUklU
RUZVTkNUSU9OLCB3cml0ZUNhbGxiYWNrKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxl
LCBDVVJMT1BUX1dSSVRFREFUQSwgdGhpcyk7CisgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRs
ZSwgQ1VSTE9QVF9IRUFERVJGVU5DVElPTiwgaGVhZGVyQ2FsbGJhY2spOworICAgIGN1cmxfZWFz
eV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfV1JJVEVIRUFERVIsIHRoaXMpOworICAgIGN1cmxf
ZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfQVVUT1JFRkVSRVIsIDEpOworICAgIGN1cmxf
ZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIDEpOworICAgIGN1
cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfTUFYUkVESVJTLCAxMCk7CisgICAgY3Vy
bF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9IVFRQQVVUSCwgQ1VSTEFVVEhfQU5ZKTsK
KyAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1NIQVJFLCBtX2N1cmxTaGFy
ZUhhbmRsZSk7CisgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9ETlNfQ0FD
SEVfVElNRU9VVCwgNjAgKiA1KTsgLy8gNSBtaW51dGVzCisgICAgLy8gRklYTUU6IEVuYWJsZSBT
U0wgdmVyaWZpY2F0aW9uIHdoZW4gd2UgaGF2ZSBhIHdheSBvZiBzaGlwcGluZyBjZXJ0cworICAg
IC8vIGFuZC9vciByZXBvcnRpbmcgU1NMIGVycm9ycyB0byB0aGUgdXNlci4KKyAgICBjdXJsX2Vh
c3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCBmYWxzZSk7CisgICAg
Y3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9FTkNPRElORywgIiIpOworCisgICAg
Y3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9VUkwsIG1fdXJsKTsKKworCisgICAg
aWYgKG1fcmVxdWVzdC5odHRwTWV0aG9kKCkgPT0gIkdFVCIpCisgICAgICAgIGN1cmxfZWFzeV9z
ZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfSFRUUEdFVCwgVFJVRSk7CisgICAgZWxzZSBpZiAobV9y
ZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSAiUE9TVCIpCisgICAgICAgIHNldHVwUE9TVCgpOworICAg
IGVsc2UgaWYgKG1fcmVxdWVzdC5odHRwTWV0aG9kKCkgPT0gIlBVVCIpCisgICAgICAgIHNldHVw
UFVUKCk7CisgICAgZWxzZSBpZiAobV9yZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSAiSEVBRCIpCisg
ICAgICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfTk9CT0RZLCBUUlVFKTsK
KworICAgIC8veG1sSHR0cFJlcXVlc3Qgc2VlIHhtbC94bWxodHRwcmVxdWVzdC5jcHAKKyAgICBp
ZiAobV9yZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKS5zaXplKCkgPiAwKSB7CisgICAgICAgIEhU
VFBIZWFkZXJNYXAgY3VzdG9tSGVhZGVycyA9ICBtX3JlcXVlc3QuaHR0cEhlYWRlckZpZWxkcygp
OworICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjdXN0b21IZWFk
ZXJzLmVuZCgpOworICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gY3VzdG9tSGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAg
IFN0cmluZyBrZXkgPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBpdC0+
c2Vjb25kOworICAgICAgICAgICAgU3RyaW5nIGhlYWRlclN0cmluZyhrZXkpOworICAgICAgICAg
ICAgaGVhZGVyU3RyaW5nLmFwcGVuZCgiOiAiKTsKKyAgICAgICAgICAgIGhlYWRlclN0cmluZy5h
cHBlbmQodmFsdWUpOworICAgICAgICAgICAgQ1N0cmluZyBoZWFkZXJMYXRpbjEgPSBoZWFkZXJT
dHJpbmcubGF0aW4xKCk7CisgICAgICAgICAgICBtX2N1c3RvbUhlYWRlcnMgPSBjdXJsX3NsaXN0
X2FwcGVuZChtX2N1c3RvbUhlYWRlcnMsaGVhZGVyTGF0aW4xLmRhdGEoKSk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKG1fY3VzdG9tSGVhZGVycykKKyAgICAgICAgICAgIGN1cmxfZWFzeV9zZXRv
cHQobV9oYW5kbGUsIENVUkxPUFRfSFRUUEhFQURFUiwgbV9jdXN0b21IZWFkZXJzKTsKKyAgICB9
CisKKyAgICBpZiAobV9jb29raWVKYXJGaWxlTmFtZSkgeworICAgICAgICBjdXJsX2Vhc3lfc2V0
b3B0KG1faGFuZGxlLCBDVVJMT1BUX0NPT0tJRUZJTEUsIG1fY29va2llSmFyRmlsZU5hbWUpOwor
ICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX0NPT0tJRUpBUiwgbV9j
b29raWVKYXJGaWxlTmFtZSk7CisgICAgfQorCisgICAgaWYgKCFzeW5jaHJvbm91cykgeworICAg
ICAgICBtX2N1cmxNdWx0aUhhbmRsZSA9IGN1cmxfbXVsdGlfaW5pdCgpOworICAgICAgICBpZiAo
bV9tYW5hZ2VyKQorICAgICAgICAgICAgY3VybF9tdWx0aV9zZXRvcHQobV9jdXJsTXVsdGlIYW5k
bGUsIENVUkxNT1BUX1NPQ0tFVEZVTkNUSU9OLCBzb2NrZXRDYWxsYmFjayk7CisgICAgICAgIC8v
Y3VybF9tdWx0aV9zZXRvcHQobV9jdXJsTXVsdGlIYW5kbGUsQ1VSTE1PUFRfUElQRUxJTklORywx
KTsKKyAgICAgICAgY3VybF9tdWx0aV9zZXRvcHQobV9jdXJsTXVsdGlIYW5kbGUsIENVUkxNT1BU
X1NPQ0tFVERBVEEsdGhpcyk7CisgICAgICAgIGN1cmxfbXVsdGlfc2V0b3B0KG1fY3VybE11bHRp
SGFuZGxlLCBDVVJMTU9QVF9USU1FUkZVTkNUSU9OLHRpbWVyQ2FsbGJhY2spOworICAgICAgICBj
dXJsX211bHRpX3NldG9wdChtX2N1cmxNdWx0aUhhbmRsZSwgQ1VSTE1PUFRfVElNRVJEQVRBLHRo
aXMpOworICAgICAgICBDVVJMTWNvZGUgcmV0ID0gY3VybF9tdWx0aV9hZGRfaGFuZGxlKG1fY3Vy
bE11bHRpSGFuZGxlLCBtX2hhbmRsZSk7CisgICAgICAgIC8vIGRvbid0IGNhbGwgcGVyZm9ybSwg
YmVjYXVzZSBldmVudHMgbXVzdCBiZSBhc3luYworICAgICAgICAvLyB0aW1lb3V0IHdpbGwgb2Nj
dXIgYW5kIGRvIGN1cmxfbXVsdGlfcGVyZm9ybQorICAgICAgICBpZiAocmV0ICYmIHJldCAhPSBD
VVJMTV9DQUxMX01VTFRJX1BFUkZPUk0pIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3Ig
JWQgc3RhcnRpbmcgam9iICVzXG4iLCByZXQsIG1fcmVxdWVzdC51cmwoKS5zdHJpbmcoKS5sYXRp
bjEoKS5kYXRhKCkpOworICAgICAgICAgICAgY2FuY2VsKCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9CisgICAgc2V0VGltZW91dCgwKTsKK30KKwordm9pZCBSZXNvdXJj
ZUhhbmRsZUludGVybmFsOjppbml0Q1VSTCgpCit7CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6
ZWQ7CisgICAgaWYgKGluaXRpYWxpemVkKQorICAgICAgICByZXR1cm47CisgICAgaW5pdGlhbGl6
ZWQgPSB0cnVlOworICAgIC8vQ29tbWVudCBvdXQgdGhpcyBsaW5lIHRvIGNhdXNlIHBvbGxpbmcK
KyAgICBtX21hbmFnZXIgPSBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OnNoYXJlZEluc3RhbmNlKCk7
CisgICAgaWYgKG1fbWFuYWdlcikKKyAgICAgICAgbV9jb29raWVKYXJGaWxlTmFtZSA9IHN0cmR1
cCgoY2hhciopbV9tYW5hZ2VyLT5nZXRDb29raWVKYXJGaWxlTmFtZSgpKTsKKyAgICBjdXJsX2ds
b2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCk7CisgICAgbV9jdXJsU2hhcmVIYW5kbGUgPSBjdXJs
X3NoYXJlX2luaXQoKTsKKyAgICBjdXJsX3NoYXJlX3NldG9wdChtX2N1cmxTaGFyZUhhbmRsZSwg
Q1VSTFNIT1BUX1NIQVJFLCBDVVJMX0xPQ0tfREFUQV9DT09LSUUpOworICAgIGN1cmxfc2hhcmVf
c2V0b3B0KG1fY3VybFNoYXJlSGFuZGxlLCBDVVJMU0hPUFRfU0hBUkUsIENVUkxfTE9DS19EQVRB
X0ROUyk7Cit9CisKKy8qKgorICogY2hlY2sgZm9yIG1lc3NhZ2VzCisgKi8KK3ZvaWQgUmVzb3Vy
Y2VIYW5kbGVJbnRlcm5hbDo6Y2hlY2tNZXNzYWdlcygpCit7CisgICAgaW50IGhhbmRsZXMgPSAw
OworCisgICAgaWYgKG1fY2FuY2VsbGVkKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1fbWFu
YWdlcikKKyAgICAgICAgd2hpbGUgKGN1cmxfbXVsdGlfc29ja2V0X2FsbChtX2N1cmxNdWx0aUhh
bmRsZSwgJmhhbmRsZXMpID09IENVUkxNX0NBTExfTVVMVElfUEVSRk9STSkge30KKyAgICBlbHNl
IHsKKyAgICAgICAgZmRfc2V0IGZkcmVhZDsKKyAgICAgICAgZmRfc2V0IGZkd3JpdGU7CisgICAg
ICAgIGZkX3NldCBmZGV4Y2VwOworICAgICAgICBpbnQgbWF4ZmQgPSAwOworICAgICAgICBzdHJ1
Y3QgdGltZXZhbCB0aW1lb3V0OworICAgICAgICB0aW1lb3V0LnR2X3NlYyA9IDA7CisgICAgICAg
IHRpbWVvdXQudHZfdXNlYyA9IHNlbGVjdFRpbWVvdXRNUyAqIDEwMDA7ICAgICAgIC8vIHNlbGVj
dCB3YWl0cyBtaWNyb3NlY29uZHMKKyAgICAgICAgLy8gVGVtcG9yYXJpbHkgZGlzYWJsZSB0aW1l
cnMgc2luY2Ugc2lnbmFscyBtYXkgaW50ZXJydXB0IHNlbGVjdCgpLCByYWlzaW5nIEVJTlRSIGVy
cm9ycyBvbiBzb21lIHBsYXRmb3JtcworICAgICAgICBzZXREZWZlcnJpbmdUaW1lcnModHJ1ZSk7
CisgICAgICAgIGludCByYyA9IDA7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIEZEX1pFUk8o
JmZkcmVhZCk7CisgICAgICAgICAgICBGRF9aRVJPKCZmZHdyaXRlKTsKKyAgICAgICAgICAgIEZE
X1pFUk8oJmZkZXhjZXApOworICAgICAgICAgICAgY3VybF9tdWx0aV9mZHNldChtX2N1cmxNdWx0
aUhhbmRsZSwgJmZkcmVhZCwgJmZkd3JpdGUsICZmZGV4Y2VwLCAmbWF4ZmQpOworICAgICAgICAg
ICAgLy8gV2hlbiB0aGUgMyBmaWxlIGRlc2NyaXB0b3JzIGFyZSBlbXB0eSwgd2luc29jayB3aWxs
IHJldHVybiAtMQorICAgICAgICAgICAgLy8gYW5kIGJhaWwgb3V0LCBzdG9wcGluZyB0aGUgZmls
ZSBkb3dubG9hZC4gU28gbWFrZSBzdXJlIHdlCisgICAgICAgICAgICAvLyBoYXZlIHZhbGlkIGZp
bGUgZGVzY3JpcHRvcnMgYmVmb3JlIGNhbGxpbmcgc2VsZWN0LgorICAgICAgICAgICAgaWYgKG1h
eGZkID49IDApCisgICAgICAgICAgICAgICAgcmMgPSA6OnNlbGVjdChtYXhmZCArIDEsICZmZHJl
YWQsICZmZHdyaXRlLCAmZmRleGNlcCwgJnRpbWVvdXQpOworICAgICAgICB9IHdoaWxlIChyYyA9
PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisgICAgICAgIHNldERlZmVycmluZ1RpbWVycyhmYWxz
ZSk7CisKKyAgICAgICAgaWYgKC0xID09IHJjKSB7CisjaWZuZGVmIE5ERUJVRworICAgICAgICAg
ICAgcGVycm9yKCJiYWQ6IHNlbGVjdCgpIHJldHVybmVkIC0xOiAiKTsKKyNlbmRpZgorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKGN1cmxfbXVsdGlfcGVy
Zm9ybShtX2N1cmxNdWx0aUhhbmRsZSwgJmhhbmRsZXMpID09IENVUkxNX0NBTExfTVVMVElfUEVS
Rk9STSkgeyB9CisgICAgfQorCisgICAgaW50IG1lc3NhZ2VzSW5RdWV1ZSA9IDA7CisgICAgLy8g
Y2hlY2sgdGhlIGN1cmwgbWVzc2FnZXMgaW5kaWNhdGluZyBjb21wbGV0ZWQgdHJhbnNmZXJzCisg
ICAgLy8gYW5kIGZyZWUgdGhlaXIgcmVzb3VyY2VzCisgICAgd2hpbGUgKENVUkxNc2cqIG1zZyA9
IGN1cmxfbXVsdGlfaW5mb19yZWFkKG1fY3VybE11bHRpSGFuZGxlLCAmbWVzc2FnZXNJblF1ZXVl
KSkgeworCisgICAgICAgIGlmIChtc2ctPm1zZyA9PSBDVVJMTVNHX0RPTkUpIHsKKyAgICAgICAg
ICAgIC8vIGZpbmQgdGhlIG5vZGUgd2hpY2ggaGFzIHNhbWUgbV9oYW5kbGUgYXMgY29tcGxldGVk
IHRyYW5zZmVyCisgICAgICAgICAgICBpZiAobXNnLT5kYXRhLnJlc3VsdCAhPSBDVVJMRV9PSykg
eworICAgICAgICAgICAgICAgIExPR19FUlJPUigiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6ZXJy
b3JbJXNdICVzOiVzXG4iLGVycm9yX2J1ZmZlcixjdXJsX2Vhc3lfc3RyZXJyb3IobXNnLT5kYXRh
LnJlc3VsdCksbV91cmwpOworICAgICAgICAgICAgICAgIEtVUkwgdXJsKG1fdXJsKTsKKyAgICAg
ICAgICAgICAgICBSZXNvdXJjZUVycm9yIGpvYkVycm9yKHVybC5ob3N0KCksIC0xLCB1cmwuc3Ry
aW5nKCksIFN0cmluZyhjdXJsX2Vhc3lfc3RyZXJyb3IobXNnLT5kYXRhLnJlc3VsdCkpKTsKKyAg
ICAgICAgICAgICAgICAvL0ZJWE1FOiBtYWtlIGVycm9yIGRlc2NyaXB0aXZlCisgICAgICAgICAg
ICAgICAgaWYgKG1fY2xpZW50KQorICAgICAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkRmFp
bChtX2xvYWRlciwgam9iRXJyb3IpOyAvL2RpZEZhaWwgcmVsZWFzZSByZXNvdXJjZXMuCisgICAg
ICAgICAgICB9ZWxzZQorICAgICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5n
KG1fbG9hZGVyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvL0ZJWE1FOiBjdXJsIHN0aWxsIG5l
ZWRzIHNvbWUgcG9sbGluZyBmb3IgbWVzc2FnZXMgOigKKyAgICAvLyBhbmQgaXMgbm90IHNlbmRp
bmcgYSBuZXcgdGltZW91dCBldmVyeSB0aW1lIGl0cyBuZWVkZWQKKyAgICAvLyBUaGlzIHNob3Vs
ZCBiZSByZW1vdmVkIG9uY2UgdGltZW91dHMgZ2V0IGEgYml0IGJldHRlcgorICAgIGlmICghbV9t
YW5hZ2VyIHx8ICFtX29wZW5GaWxlSGFuZGxlcykKKyAgICAgICAgc2V0VGltZW91dCgxMCk7Cit9
CisKKworCit2b2lkICBSZXNvdXJjZUhhbmRsZUludGVybmFsOjpzZXR1cFBVVCgpCit7CisgICAg
aWYgKG1fcmVxdWVzdC5odHRwTWV0aG9kKCkgIT0gIlBVVCIpCisgICAgICAgIHJldHVybjsKKyAg
ICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1VQTE9BRCwgVFJVRSkgOworICAg
IHN0cnVjdCBjdXJsX3NsaXN0ICpzbGlzdD1OVUxMOworICAgIC8vRklYTUU6IGhtbW0gZGlzYWJs
ZSBFeHBlY3Q6IDEwMC1jb250aW51ZQorICAgIC8vc2xpc3QgPSBjdXJsX3NsaXN0X2FwcGVuZChz
bGlzdCwiRXhwZWN0OiIpOworICAgIC8vanVzdCBzdXBwcm90IEh0dHAgMS4xIGNodW5ja2VkIGVu
Y29kaW5nIG5vdworICAgIHNsaXN0ID0gY3VybF9zbGlzdF9hcHBlbmQoc2xpc3QsICJUcmFuc2Zl
ci1FbmNvZGluZzogY2h1bmtlZCIpOworICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENV
UkxPUFRfSFRUUEhFQURFUiwgc2xpc3QpOworICAgIG1fY3VzdG9tUG9zdEhlYWRlcnMgPSBzbGlz
dDsKK30KKwordm9pZCAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6c2V0dXBQT1NUKCkKK3sKKyAg
ICBWZWN0b3I8Rm9ybURhdGFFbGVtZW50PiBlbGVtZW50cyA9IG1fcmVxdWVzdC5odHRwQm9keSgp
LT5lbGVtZW50cygpOworICAgIHNpemVfdCBudW1FbGVtZW50cyA9IGVsZW1lbnRzLnNpemUoKTsK
KworICAgIGlmICghbnVtRWxlbWVudHMpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcmVxdWVz
dC5zZXRIVFRQSGVhZGVyRmllbGQoIlByb3BhZ2F0ZUh0dHBIZWFkZXIiLCAidHJ1ZSIpOworICAg
IG1fcmVxdWVzdC5zZXRIVFRQQ29udGVudFR5cGUoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24v
eC13d3ctZm9ybS11cmxlbmNvZGVkIik7CisKKyNpZiAwCisgICAgLy9kaXNhYmxlIEV4cGVjdDog
MTAwLWNvbnRpbnVlCisgICAgeworICAgICAgICBzdHJ1Y3QgY3VybF9zbGlzdCAqc2xpc3QgPSBO
VUxMOworICAgICAgICBzbGlzdCA9IGN1cmxfc2xpc3RfYXBwZW5kKHNsaXN0LCAiRXhwZWN0OiIp
OworICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX0hUVFBIRUFERVIs
IHNsaXN0KTsKKyAgICAgICAgbV9jdXN0b21Qb3N0SGVhZGVycyA9IHNsaXN0OworICAgIH0KKyNl
bmRpZgorCisgICAgLy8gRG8gbm90IHN0cmVhbSBmb3Igc2ltcGxlIFBPU1QgZGF0YQorICAgIGlm
IChudW1FbGVtZW50cyA9PSAxKSB7CisgICAgICAgIG1fcmVxdWVzdC5odHRwQm9keSgpLT5mbGF0
dGVuKG1fcG9zdEJ5dGVzKTsKKyAgICAgICAgaWYgKG1fcG9zdEJ5dGVzLnNpemUoKSAhPSAwKSB7
CisgICAgICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1BPU1QsIFRS
VUUpOworICAgICAgICAgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9QT1NU
RklFTERTSVpFLCBtX3Bvc3RCeXRlcy5zaXplKCkpOworICAgICAgICAgICAgY3VybF9lYXN5X3Nl
dG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9QT1NURklFTERTLCBtX3Bvc3RCeXRlcy5kYXRhKCkpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBPYnRhaW4gdGhlIHRv
dGFsIHNpemUgb2YgdGhlIFBPU1QKKyAgICBzdGF0aWMgY29uc3QgbG9uZyBsb25nIG1heEN1cmxP
ZmZUID0gKDFMTCA8PCAoc2l6ZW9mKGN1cmxfb2ZmX3QpICogOCAtIDEpKSAtIDE7CisgICAgY3Vy
bF9vZmZfdCBzaXplID0gMDsKKyAgICBib29sIGNodW5rZWRUcmFuc2ZlciA9IGZhbHNlOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykgeworICAgICAgICBGb3Jt
RGF0YUVsZW1lbnQgZWxlbWVudCA9IGVsZW1lbnRzW2ldOworICAgICAgICBpZiAoZWxlbWVudC5t
X3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjplbmNvZGVkRmlsZSkgeworICAgICAgICAgICAgbG9u
ZyBsb25nIGZpbGVTaXplUmVzdWx0OworI2lmIDAgLy9GSVhNRTogTm90IHVzZWQgaW4gY3VybCBp
cyB0aGlzIG5lZWRlZCA/CisgICAgICAgICAgICBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqbGFzdHB0
ciA9IE5VTEw7CisKKyAgICAgICAgICAgIC8va2VlcCByZWYgaGVyZSBzbyBpdHMgbm90IGZyZWVk
CisgICAgICAgICAgICBtX3Bvc3RGaWxlTmFtZSA9IHN0cmR1cChlbGVtZW50c1tpXS5tX2ZpbGVu
YW1lLnV0ZjgoKS5kYXRhKCkpOworCisgICAgICAgICAgICAvLyBGaWxsIGluIHRoZSBmaWxlIHVw
bG9hZCBmaWVsZCAKKyAgICAgICAgICAgIGN1cmxfZm9ybWFkZCgmbV9maWxlUG9zdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAmbGFzdHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBD
VVJMRk9STV9DT1BZTkFNRSwgInNlbmRmaWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBD
VVJMRk9STV9GSUxFLCBtX3Bvc3RGaWxlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBD
VVJMRk9STV9FTkQpOworCisgICAgICAgICAgICAvKiBGaWxsIGluIHRoZSBmaWxlbmFtZSBmaWVs
ZCAqLworICAgICAgICAgICAgY3VybF9mb3JtYWRkKCZtX2ZpbGVQb3N0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICZsYXN0cHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxGT1JN
X0NPUFlOQU1FLCAiZmlsZW5hbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxGT1JN
X0NPUFlDT05URU5UUywgbV9wb3N0RmlsZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
Q1VSTEZPUk1fRU5EKTsKKworICAgICAgICAgICAgLyogRmlsbCBpbiB0aGUgc3VibWl0IGZpZWxk
IHRvbywgZXZlbiBpZiB0aGlzIGlzIHJhcmVseSBuZWVkZWQgKi8KKyAgICAgICAgICAgIGN1cmxf
Zm9ybWFkZCgmbV9maWxlUG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAmbGFzdHB0ciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMRk9STV9DT1BZTkFNRSwgInN1Ym1pdCIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTEZPUk1fQ09QWUNPTlRFTlRTLCAic2VuZCIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTEZPUk1fRU5EKTsKKyNlbmRpZgorICAgICAgICAg
ICAgaWYgKGdldEZpbGVTaXplKGVsZW1lbnQubV9maWxlbmFtZSwgZmlsZVNpemVSZXN1bHQpKSB7
CisgICAgICAgICAgICAgICAgaWYgKGZpbGVTaXplUmVzdWx0ID4gbWF4Q3VybE9mZlQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gRmlsZSBzaXplIGlzIHRvbyBiaWcgZm9yIHNwZWNpZnlpbmcg
aXQgdG8gY1VSTAorICAgICAgICAgICAgICAgICAgICBjaHVua2VkVHJhbnNmZXIgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgc2l6ZSArPSBmaWxlU2l6ZVJlc3VsdDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgY2h1bmtlZFRyYW5zZmVyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzaXplICs9IGVs
ZW1lbnRzW2ldLm1fZGF0YS5zaXplKCk7CisgICAgfQorCisgICAgY3VybF9lYXN5X3NldG9wdCht
X2hhbmRsZSwgQ1VSTE9QVF9QT1NULCBUUlVFKTsKKworICAgIC8vIGNVUkwgZ3Vlc3NlcyB0aGF0
IHdlIHdhbnQgY2h1bmtlZCBlbmNvZGluZyBhcyBsb25nIGFzIHdlIHNwZWNpZnkgdGhlIGhlYWRl
cgorICAgIGlmIChjaHVua2VkVHJhbnNmZXIpCisgICAgICAgIG1fY3VzdG9tSGVhZGVycyA9IGN1
cmxfc2xpc3RfYXBwZW5kKG1fY3VzdG9tSGVhZGVycywgIlRyYW5zZmVyLUVuY29kaW5nOiBjaHVu
a2VkIik7CisgICAgZWxzZQorICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJM
T1BUX1BPU1RGSUVMRFNJWkVfTEFSR0UsIHNpemUpOworCisgICAgY3VybF9lYXN5X3NldG9wdCht
X2hhbmRsZSwgQ1VSTE9QVF9SRUFERlVOQ1RJT04sIHJlYWRDYWxsYmFjayk7CisgICAgY3VybF9l
YXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9SRUFEREFUQSwgdGhpcyk7Cit9CisKKwordm9p
ZCBSZXNvdXJjZUhhbmRsZUludGVybmFsOjpjYW5jZWwoKQoreworICAgIG1fY2FuY2VsbGVkID0g
dHJ1ZTsKKworICAgIGlmIChtX2Rvd25sb2FkVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9k
b3dubG9hZFRpbWVyLnN0b3AoKTsKKworICAgIGlmIChtX2hhbmRsZSkgeworICAgICAgICBpZiht
X2N1cmxNdWx0aUhhbmRsZSkgeworICAgICAgICAgICAgY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxl
KG1fY3VybE11bHRpSGFuZGxlLG1faGFuZGxlKTsKKyAgICAgICAgICAgIGN1cmxfbXVsdGlfY2xl
YW51cChtX2N1cmxNdWx0aUhhbmRsZSk7CisgICAgICAgICAgICBtX2N1cmxNdWx0aUhhbmRsZSA9
IDA7CisgICAgICAgIH0KKyAgICAgICAgY3VybF9lYXN5X2NsZWFudXAobV9oYW5kbGUpOworICAg
ICAgICBtX2hhbmRsZSA9IDA7CisgICAgfQorICAgIGlmIChtX2N1c3RvbUhlYWRlcnMpCisgICAg
ICAgIGN1cmxfc2xpc3RfZnJlZV9hbGwobV9jdXN0b21IZWFkZXJzKTsKKyAgICBpZiAobV9jdXN0
b21Qb3N0SGVhZGVycykKKyAgICAgICAgY3VybF9zbGlzdF9mcmVlX2FsbChtX2N1c3RvbVBvc3RI
ZWFkZXJzKTsKKyAgICBpZiAobV91cmwpCisgICAgICAgIGZyZWUobV91cmwpOworICAgIGlmICht
X3Bvc3RGaWxlTmFtZSkKKyAgICAgICAgZnJlZShtX3Bvc3RGaWxlTmFtZSk7CisKKyAgICBtX2N1
c3RvbUhlYWRlcnMgPSAwOworICAgIG1fY3VzdG9tUG9zdEhlYWRlcnMgPTA7CisgICAgbV91cmwg
PSAwOworICAgIG1fcG9zdEZpbGVOYW1lID0gMDsKK30KKworCisKKwordm9pZCBSZXNvdXJjZUhh
bmRsZUludGVybmFsOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VFcnJvciYgZXJyb3IsCisgICAgICAgIFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEsIEZyYW1lKikKK3sKKyAgICBDVVJM
Y29kZSByZXMgPSBDVVJMRV9PSzsKKworICAgIEFTU0VSVCgwKTsKKyAgICBSZXNvdXJjZUhhbmRs
ZUludGVybmFsKiBqb2IgPSBuZXcgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCgwLHJlcXVlc3QsMCxm
YWxzZSxmYWxzZSx0cnVlKTsKKyAgICBqb2ItPnN0YXJ0KDAsdHJ1ZSk7CisKKyAgICByZXMgPSBj
dXJsX2Vhc3lfcGVyZm9ybShqb2ItPm1faGFuZGxlKTsKKyAgICAvL0ZJWE1FOiBtYWtlIGVycm9y
IGRlc2NyaXB0aXZlIHRoaXMgbWF5IGJlIGJyb2tlbgorICAgIGlmIChyZXMgIT0gQ1VSTEVfT0sp
IHsKKyAgICAgICAgZXJyb3IgPSBSZXNvdXJjZUVycm9yKCk7CisgICAgfQorICAgIHJlc3BvbnNl
ID0gam9iLT5tX3Jlc3BvbnNlOworICAgIGRhdGEgPSBqb2ItPm1fcmVzdWx0RGF0YTsKKyAgICBk
ZWxldGUgam9iOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6OnNldFRpbWVvdXQo
bG9uZyB0aW1lb3V0KQoreworICAgIGxvbmcgdG07CisgICAgY3VybF9tdWx0aV90aW1lb3V0KG1f
Y3VybE11bHRpSGFuZGxlLCZ0bSk7CisgICAgLyotMSBtZWFucyBDdXJsIGRvZXMgbm90IGtub3cg
dGhlIHRpbWUgdG8gd2FpdCBqdXN0IGN5Y2xlICovCisgICAgaWYgKHRpbWVvdXQgPT0gLTEpCisg
ICAgICAgIHRpbWVvdXQgPSAxMDsKKyAgICBlbHNlIGlmICh0aW1lb3V0ID09IDApCisgICAgICAg
IHRpbWVvdXQgPSAxMDsKKyAgICBlbHNlCisgICAgICAgIHRpbWVvdXQgPSA1MDsgLy8gc2VlIGh0
dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAwNy0wNy8wMzM1Lmh0bWwgSSdtIG5vdCBnZXR0
aW5nIGEgZGVjZW50IHRpbWVvdXQKKworICAgIGRvdWJsZSBzZWNzID0gdGltZW91dC8xMDAwLjA7
CisgICAgLypjYWxsYmFjayBhcmUgY2hlY2tlZCB0byBiZSBpbiB0aGUgbGlzdCBvbmx5IG9uY2Uq
LworICAgIGlmIChtX2Rvd25sb2FkVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9kb3dubG9h
ZFRpbWVyLnN0b3AoKTsKKyAgICBtX2Rvd25sb2FkVGltZXIuc3RhcnRPbmVTaG90KHNlY3MpOwor
fQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbmN1cmwvUmVzb3Vy
Y2VIYW5kbGVNYW5hZ2VyLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbmN1cmwvUmVzb3Vy
Y2VIYW5kbGVNYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI1
NTliOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9uY3VybC9S
ZXNvdXJjZUhhbmRsZU1hbmFnZXIuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZXNvdXJjZUhhbmRsZU1hbmFn
ZXJfaAorI2RlZmluZSBSZXNvdXJjZUhhbmRsZU1hbmFnZXJfaAorCisjaW5jbHVkZSAiRnJhbWUu
aCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50Lmgi
CisKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDsKKworY2xh
c3MgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVzb3VyY2VI
YW5kbGVNYW5hZ2VyKiBzaGFyZWRJbnN0YW5jZSgpOworICAgIHZvaWQqIGFkZEZpbGVIYW5kbGVE
YXRhU291cmNlKFJlc291cmNlSGFuZGxlSW50ZXJuYWwqLCBjdXJsX3NvY2tldF90LCBpbnQgbWFz
ayk7CisgICAgdm9pZCByZW1vdmVGaWxlSGFuZGxlRGF0YVNvdXJjZShSZXNvdXJjZUhhbmRsZUlu
dGVybmFsKiwgY3VybF9zb2NrZXRfdCwgdm9pZCogZGF0YSk7CisgICAgdm9pZCBzZXRDb29raWVK
YXJGaWxlTmFtZShjaGFyKiBjb29raWVKYXJGaWxlTmFtZSkgeyBtX2Nvb2tpZUphckZpbGVOYW1l
ID0gY29va2llSmFyRmlsZU5hbWU7IH0KKyAgICBjb25zdCBjaGFyKiBnZXRDb29raWVKYXJGaWxl
TmFtZSgpIHsgcmV0dXJuIG1fY29va2llSmFyRmlsZU5hbWU7IH0KKworcHJpdmF0ZToKKyAgICBS
ZXNvdXJjZUhhbmRsZU1hbmFnZXIoKTsKKyAgICB+UmVzb3VyY2VIYW5kbGVNYW5hZ2VyKCk7Cisg
ICAgY2hhciogbV9jb29raWVKYXJGaWxlTmFtZTsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbmN1cmwvUmVzb3VyY2VSZXF1ZXN0LmggYi9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbmN1cmwvUmVzb3VyY2VSZXF1ZXN0LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdlZGI5MQotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9uY3VybC9SZXNvdXJjZVJlcXVlc3QuaApAQCAtMCwwICsx
LDY3IEBACisvLyAtKi0gbW9kZTogYysrOyBjLWJhc2ljLW9mZnNldDogNCAtKi0KKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyA8c2FtLndlaW5p
Z0BnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZXNvdXJjZVJlcXVlc3RfaAorI2RlZmluZSBS
ZXNvdXJjZVJlcXVlc3RfaAorCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0QmFzZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBzdHJ1Y3QgUmVzb3VyY2VSZXF1ZXN0IDogUmVzb3Vy
Y2VSZXF1ZXN0QmFzZSB7CisKKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFN0cmluZyYg
dXJsKQorICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKEtVUkwodXJsKSwgVXNlUHJv
dG9jb2xDYWNoZVBvbGljeSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgUmVzb3Vy
Y2VSZXF1ZXN0KGNvbnN0IEtVUkwmIHVybCkKKyAgICAgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0
QmFzZSh1cmwsIFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgICAgIFJlc291cmNlUmVxdWVzdChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
cmVmZXJyZXIsIFJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5IHBvbGljeSA9IFVzZVByb3RvY29s
Q2FjaGVQb2xpY3kpCisgICAgICAgICAgICA6IFJlc291cmNlUmVxdWVzdEJhc2UodXJsLCBwb2xp
Y3kpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNldEhUVFBSZWZlcnJlcihyZWZlcnJlcik7Cisg
ICAgICAgIH0KKworICAgICAgICBSZXNvdXJjZVJlcXVlc3QoKQorICAgICAgICAgICAgOiBSZXNv
dXJjZVJlcXVlc3RCYXNlKEtVUkwoKSwgVXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKKyAgICAgICAg
eworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgUmVzb3Vy
Y2VSZXF1ZXN0QmFzZTsKKworICAgICAgICB2b2lkIGRvVXBkYXRlUGxhdGZvcm1SZXF1ZXN0KCkg
e30KKyAgICAgICAgdm9pZCBkb1VwZGF0ZVJlc291cmNlUmVxdWVzdCgpIHt9CisgICAgfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUmVzb3VyY2VSZXF1ZXN0X2gKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9uY3VybC9SZXNvdXJjZVJlc3BvbnNl
LmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbmN1cmwvUmVzb3VyY2VSZXNwb25zZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ZTk5ZjEKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbmN1cmwvUmVzb3VyY2VSZXNwb25zZS5oCkBA
IC0wLDAgKzEsNjUgQEAKKy8vIC0qLSBtb2RlOiBjKys7IGMtYmFzaWMtb2Zmc2V0OiA0IC0qLQor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJlc291cmNlUmVzcG9uc2VfaAorI2RlZmluZSBS
ZXNvdXJjZVJlc3BvbnNlX2gKKworI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2VCYXNlLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVzb3VyY2VSZXNwb25zZSA6IHB1YmxpYyBS
ZXNvdXJjZVJlc3BvbnNlQmFzZSB7CitwdWJsaWM6CisgICAgUmVzb3VyY2VSZXNwb25zZSgpCisg
ICAgICAgIDogUmVzb3VyY2VSZXNwb25zZUJhc2UoKSwKKyAgICAgICAgICBtX3Jlc3BvbnNlRmly
ZWQoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIFJlc291cmNlUmVzcG9uc2UoY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBsb25nIGxvbmcgZXhwZWN0ZWRMZW5ndGgs
IGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkK
KyAgICAgICAgOiBSZXNvdXJjZVJlc3BvbnNlQmFzZSh1cmwsIG1pbWVUeXBlLCBleHBlY3RlZExl
bmd0aCwgdGV4dEVuY29kaW5nTmFtZSwgZmlsZW5hbWUpLAorICAgICAgICAgIG1fcmVzcG9uc2VG
aXJlZChmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBzZXRSZXNwb25zZUZpcmVkKGJv
b2wgZmlyZWQpIHsgbV9yZXNwb25zZUZpcmVkID0gZmlyZWQ7IH0KKyAgICBib29sIHJlc3BvbnNl
RmlyZWQoKSB7IHJldHVybiBtX3Jlc3BvbnNlRmlyZWQ7IH0KKyAgICB2b2lkIHNldElzTnVsbCgg
Ym9vbCBiICkgeyBtX2lzTnVsbCA9IGI7IH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3Mg
UmVzb3VyY2VSZXNwb25zZUJhc2U7CisKKyAgICB2b2lkIGRvVXBkYXRlUmVzb3VyY2VSZXNwb25z
ZSgpCisgICAgeworICAgIH0KKworICAgIGJvb2wgbV9yZXNwb25zZUZpcmVkOworCit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBSZXNvdXJjZVJlc3BvbnNlX2gKZGlm
ZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCA2NGYzMmRjLi5kY2Q2
MzhjIDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC0yMDIs
OCArMjAyLDggQEAgQUNfQVJHX1dJVEgoaHR0cF9iYWNrZW5kLAogICAgICAgICAgICAgW10sW3dp
dGhfaHR0cF9iYWNrZW5kPSJjdXJsIl0pCiAKIGNhc2UgIiR3aXRoX2h0dHBfYmFja2VuZCIgaW4K
LSAgICAgY3VybHxzb3VwKSA7OwotICAgICAqKSBBQ19NU0dfRVJST1IoW0ludmFsaWQgSFRUUCBi
YWNrZW5kOiBtdXN0IGJlIGN1cmwsIHNvdXAuXSkgOzsKKyAgICAgY3VybHxuY3VybHxzb3VwKSA7
OworICAgICAqKSBBQ19NU0dfRVJST1IoW0ludmFsaWQgSFRUUCBiYWNrZW5kOiBtdXN0IGJlIGN1
cmwsIG5jdXJsLCBzb3VwLl0pIDs7CiBlc2FjCiAKIEFDX01TR19SRVNVTFQoWyR3aXRoX2h0dHBf
YmFja2VuZF0pCkBAIC00MTQsNyArNDE0LDcgQEAgaWYgdGVzdCAiJGVuYWJsZV9kZWJ1ZyIgPSAi
eWVzIjsgdGhlbgogZmkKIAogIyBjaGVjayBpZiBjdXJsIGlzIGF2YWlsYWJsZQotaWYgdGVzdCAi
JHdpdGhfaHR0cF9iYWNrZW5kIiA9ICJjdXJsIjsgdGhlbgoraWYgdGVzdCAiJHdpdGhfaHR0cF9i
YWNrZW5kIiA9ICJjdXJsIiB8fCB0ZXN0ICIkd2l0aF9odHRwX2JhY2tlbmQiID0gIm5jdXJsIjsg
dGhlbgogICAgUEtHX0NIRUNLX01PRFVMRVMoW0xJQkNVUkxdLAogICAgICAgICAgICAgICAgICAg
ICAgW2xpYmN1cmwgPj0gJExJQkNVUkxfUkVRVUlSRURfVkVSU0lPTl0pCiAgICBBQ19TVUJTVChb
TElCQ1VSTF9DRkxBR1NdKQpAQCAtNDg5LDYgKzQ4OSw3IEBAIEFNX0NPTkRJVElPTkFMKFtUQVJH
RVRfRElSRUNURkJdLCBbdGVzdCAiJHdpdGhfdGFyZ2V0IiA9ICJkaXJlY3RmYiJdKQogCiAjIEhU
VFAgYmFja2VuZCBjb25kaXRpb25hbHMKIEFNX0NPTkRJVElPTkFMKFtVU0VfQ1VSTF0sIFt0ZXN0
ICIkd2l0aF9odHRwX2JhY2tlbmQiID0gImN1cmwiXSkKK0FNX0NPTkRJVElPTkFMKFtVU0VfTkNV
UkxdLCBbdGVzdCAiJHdpdGhfaHR0cF9iYWNrZW5kIiA9ICJuY3VybCJdKQogQU1fQ09ORElUSU9O
QUwoW1VTRV9TT1VQXSwgW3Rlc3QgIiR3aXRoX2h0dHBfYmFja2VuZCIgPSAic291cCJdKQogCiAj
IEZvbnQgYmFja2VuZCBjb25kaXRpb25hbHMK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20710</attachid>
            <date>2008-04-20 17:05:23 -0700</date>
            <delta_ts>2010-06-10 17:54:18 -0700</delta_ts>
            <desc>Update patch after testing acid2</desc>
            <filename>ncurl.patch</filename>
            <type>text/plain</type>
            <size>54574</size>
            <attacher name="Michael Emmel">mike.emmel</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBhZmVlYjhhLi4yYWE5NjQ0
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMDgtMDMtMTIgIE1pY2hhZWwgRW1tZWwgIDxtaWtlLmVtbWVsQGdtYWlsLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSA/LgorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3OTcyCisgICAgICAgIFJld3JpdGUgb2YgY3VybCBiYWNrZW5kIHRvIHJ1
biBpbiBldmVudCBsb29wCisKKyAgICAgICAgKiBjb25maWd1cmUuYWM6CisgICAgICAgICogV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oOiAKKyAgICAgICAgKiBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvZ3RrL1Jlc291cmNlSGFuZGxlTWFuYWdlckd0ay5jcHA6CisgICAgICAgICogV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL25jdXJsL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg6CisgICAg
ICAgICogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL25jdXJsL0Nvb2tpZUphckN1cmwuY3BwOgor
ICAgICAgICAqIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9uY3VybC9SZXNvdXJjZUVycm9yLmg6
CisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL25jdXJsL1Jlc291cmNlSGFuZGxl
Q3VybC5jcHA6CisgICAgICAgICogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL25jdXJsL1Jlc291
cmNlSGFuZGxlSW50ZXJuYWxDdXJsLmNwcDoKKyAgICAgICAgKiBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvbmN1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmg6CisgICAgICAgICogV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL25jdXJsL1Jlc291cmNlUmVxdWVzdC5oOgorICAgICAgICAqIFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9uY3VybC9SZXNvdXJjZVJlc3BvbnNlLmg6CisKKwogMjAwOC0w
NC0xNyAgQWxwIFRva2VyICA8YWxwQGF0b2tlci5jb20+CiAKICAgICAgICAgR1RLKyBidWlsZCBm
aXguIEJhY2sgb3V0IHRoZSBsaWJqcGVnIGNoZWNrIHBhcnQgb2YgcjMyMDA4IGZyb20gYnVnCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQppbmRleCA1N2MyMmU1Li4xYzJkMWU1IDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTEwNjYsNiArMTA2NiwxOSBAQCB3
ZWJjb3JlX3NvdXJjZXMgKz0gXAogCiBlbmRpZiAjIEVORCBVU0VfQ1VSTAogCitpZiBVU0VfTkNV
UkwKK3dlYmNvcmVfY3BwZmxhZ3MgKz0gXAorCS1EV1RGX1VTRV9OQ1VSTD0xIFwKKwktSSQoc3Jj
ZGlyKS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbmN1cmwKKword2ViY29yZV9zb3VyY2VzICs9
IFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbmN1cmwvQ29va2llSmFyQ3VybC5jcHAgXAor
CVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9uY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwIFwK
KwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbmN1cmwvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbEN1
cmwuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ3RrL1Jlc291cmNlSGFuZGxlTWFu
YWdlckd0ay5jcHAKKworZW5kaWYgIyBFTkQgVVNFX05DVVJMCisKIGlmIFVTRV9TT1VQCiB3ZWJj
b3JlX2NwcGZsYWdzICs9IFwKIAktRFdURl9VU0VfU09VUD0xIFwKQEAgLTEwNzQsNyArMTA4Nyw3
IEBAIHdlYmNvcmVfY3BwZmxhZ3MgKz0gXAogd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmNwcCBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAotZW5kaWYKK2VuZGlmICMg
RU5EIFVTRV9TT1VQCiAKICMgLS0tCiAjIEZyZWV0eXBlIGZvbnQgYmFja2VuZApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgKaW5kZXggZGI5
OGFlMi4uZjcyYzA3OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlSGFuZGxlSW50ZXJuYWwuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VIYW5kbGVJbnRlcm5hbC5oCkBAIC00NSw2ICs0NSwxMyBAQAogI2luY2x1ZGUgPGN1cmwvY3Vy
bC5oPgogI2VuZGlmCiAKKyNpZiBVU0UoTkNVUkwpCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAi
VGltZXIuaCIKKyNlbmRpZgorCiAjaWYgVVNFKFNPVVApCiAjaW5jbHVkZSA8bGlic291cC9zb3Vw
Lmg+CiAjZW5kaWYKQEAgLTEwNyw2ICsxMTQsMjMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAgICAgLCBtX2Zvcm1EYXRhRWxlbWVudEluZGV4KDApCiAgICAgICAgICAgICAsIG1fZm9y
bURhdGFFbGVtZW50RGF0YU9mZnNldCgwKQogI2VuZGlmCisjaWYgVVNFKE5DVVJMKQorICAgICAg
ICAgICAgLCBtX2xvYWRlcihsb2FkZXIpCisgICAgICAgICAgICAsIG1fZG93bmxvYWRUaW1lcih0
aGlzLCAmUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6ZG93bmxvYWRUaW1lcikKKyAgICAgICAgICAg
ICwgbV9jdXJsTXVsdGlIYW5kbGUoMCkKKyAgICAgICAgICAgICwgbV9oYW5kbGUoMCkKKyAgICAg
ICAgICAgICwgbV91cmwoMCkKKyAgICAgICAgICAgICwgbV9jdXN0b21IZWFkZXJzKDApCisgICAg
ICAgICAgICAsIG1fY3VzdG9tUG9zdEhlYWRlcnMoMCkKKyAgICAgICAgICAgICwgbV9maWxlUG9z
dCgwKQorICAgICAgICAgICAgLCBtX3NlbnRSZXNwb25zZShmYWxzZSkKKyAgICAgICAgICAgICwg
bV9jYW5jZWxsZWQoZmFsc2UpCisgICAgICAgICAgICAsIG1fb3BlbkZpbGVIYW5kbGVzKDApCisg
ICAgICAgICAgICAsIG1fcG9zdEZpbGVOYW1lKDApCisgICAgICAgICAgICAsIG1fZmlsZSgwKQor
ICAgICAgICAgICAgLCBtX2Zvcm1EYXRhRWxlbWVudEluZGV4KDApCisgICAgICAgICAgICAsIG1f
Zm9ybURhdGFFbGVtZW50RGF0YU9mZnNldCgwKQorI2VuZGlmCiAjaWYgVVNFKFNPVVApCiAgICAg
ICAgICAgICAsIG1fbXNnKDApCiAgICAgICAgICAgICAsIG1fY2FuY2VsbGVkKGZhbHNlKQpAQCAt
MTcyLDYgKzE5Niw0MSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHNpemVfdCBtX2Zv
cm1EYXRhRWxlbWVudERhdGFPZmZzZXQ7CiAgICAgICAgIFZlY3RvcjxjaGFyPiBtX3Bvc3RCeXRl
czsKICNlbmRpZgorCisjaWYgVVNFKE5DVVJMKQorICAgICAgICB2b2lkIGluaXRDVVJMKCk7Cisg
ICAgICAgIHN0YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hh
cj4mIGRhdGEsIEZyYW1lKiBmcmFtZSk7CisgICAgICAgIHZvaWQgc2V0VGltZW91dChsb25nKTsK
KyAgICAgICAgdm9pZCBkb3dubG9hZFRpbWVyKFRpbWVyPFJlc291cmNlSGFuZGxlSW50ZXJuYWw+
Kik7CisgICAgICAgIGJvb2wgc3RhcnQoRnJhbWUqLCBib29sIHN5bmNocm9ub3VzKTsKKyAgICAg
ICAgdm9pZCBzZXR1cFBVVCgpOworICAgICAgICB2b2lkIHNldHVwUE9TVCgpOworICAgICAgICB2
b2lkIGNoZWNrTWVzc2FnZXMoKTsKKyAgICAgICAgdm9pZCBoYW5kbGVTb2NrZXRDYWxsQmFjayhj
dXJsX3NvY2tldF90LGludCBhY3Rpb24pOworICAgICAgICB2b2lkIGNhbmNlbCgpOworCisgICAg
ICAgIFJlc291cmNlSGFuZGxlKiBtX2xvYWRlcjsKKyAgICAgICAgVGltZXI8UmVzb3VyY2VIYW5k
bGVJbnRlcm5hbD4gbV9kb3dubG9hZFRpbWVyOworICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIG1f
cmVzcG9uc2U7CisgICAgICAgIFJlc291cmNlRXJyb3IgbV9lcnJvcjsKKyAgICAgICAgQ1VSTE0q
IG1fY3VybE11bHRpSGFuZGxlOworICAgICAgICBDVVJMKiBtX2hhbmRsZTsKKyAgICAgICAgY2hh
ciogbV91cmw7CisgICAgICAgIHN0cnVjdCBjdXJsX3NsaXN0KiBtX2N1c3RvbUhlYWRlcnM7Cisg
ICAgICAgIHN0cnVjdCBjdXJsX3NsaXN0KiBtX2N1c3RvbVBvc3RIZWFkZXJzOworICAgICAgICBz
dHJ1Y3QgY3VybF9odHRwcG9zdCogbV9maWxlUG9zdDsKKyAgICAgICAgYm9vbCBtX3NlbnRSZXNw
b25zZTsKKyAgICAgICAgYm9vbCBtX2NhbmNlbGxlZDsKKyAgICAgICAgaW50ICBtX29wZW5GaWxl
SGFuZGxlczsKKyAgICAgICAgY2hhciogbV9wb3N0RmlsZU5hbWU7CisgICAgICAgIEZJTEUqIG1f
ZmlsZTsKKyAgICAgICAgc2l6ZV90IG1fZm9ybURhdGFFbGVtZW50SW5kZXg7CisgICAgICAgIHNp
emVfdCBtX2Zvcm1EYXRhRWxlbWVudERhdGFPZmZzZXQ7CisgICAgICAgIFZlY3RvcjxjaGFyPiBt
X3Jlc3VsdERhdGE7CisgICAgICAgIFZlY3RvcjxjaGFyPiBtX3Bvc3RCeXRlczsKKyAgICAgICAg
VmVjdG9yPENTdHJpbmc+IG1fY3N0cmluZ3M7CisjZW5kaWYKKwogI2lmIFVTRShTT1VQKQogICAg
ICAgICBTb3VwTWVzc2FnZSogbV9tc2c7CiAgICAgICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNw
b25zZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ndGsvUmVzb3VyY2VI
YW5kbGVNYW5hZ2VyR3RrLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ndGsvUmVzb3Vy
Y2VIYW5kbGVNYW5hZ2VyR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5iZTVkOTQwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2d0
ay9SZXNvdXJjZUhhbmRsZU1hbmFnZXJHdGsuY3BwCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1l
bEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscC50b2tlckBj
b2xsYWJvcmEuY28udWs+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlTWFuYWdlci5oIgorI2luY2x1ZGUgIlJlc291
cmNlSGFuZGxlSW50ZXJuYWwuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJG
aWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCisjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKKyNpbmNs
dWRlICJCYXNlNjQuaCIKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBHdGtJT0NoYW5uZWxQcml2YXRlIHsKKyAgICBHSU9D
aGFubmVsKiBjaGFubmVsOworICAgIGd1aW50IGlkOworICAgIFJlc291cmNlSGFuZGxlSW50ZXJu
YWwqIGpvYjsKKyAgICBpbnQgbWFzazsKKyAgICBjdXJsX3NvY2tldF90IHNvY2tmZDsKK307CisK
Kworc3RhdGljIGdib29sZWFuIHJlc291cmNlSGFuZGxlR0lPRnVuYyhHSU9DaGFubmVsICpzb3Vy
Y2UsIEdJT0NvbmRpdGlvbiBjb25kaXRpb24sIGdwb2ludGVyIGRhdGEpCit7CisgICAgR3RrSU9D
aGFubmVsUHJpdmF0ZSogcHJpdiA9IHN0YXRpY19jYXN0PEd0a0lPQ2hhbm5lbFByaXZhdGUqPihk
YXRhKTsKKyAgICBjaGFyICpjbmFtZTsKKyAgICBpbnQgYWN0aW9uID0gMDsKKyAgICBib29sIGRv
RGVsZXRlID0gZmFsc2U7CisKKyAgICBzd2l0Y2ggKGNvbmRpdGlvbikgeworICAgIGNhc2UgR19J
T19JTjoKKyAgICAgICAgY25hbWUgPSAiR19JT19JTiI7CisgICAgICAgIGFjdGlvbiA9IENVUkxf
Q1NFTEVDVF9JTjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX0lPX09VVDoKKyAgICAgICAg
Y25hbWUgPSAiR19JT19PVVQiOworICAgICAgICBhY3Rpb24gPSBDVVJMX0NTRUxFQ1RfT1VUOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEdfSU9fUFJJOgorICAgICAgICBjbmFtZSA9ICJHX0lP
X1BSSSI7CisgICAgICAgIGFjdGlvbiA9IENVUkxfQ1NFTEVDVF9PVVQ7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR19JT19FUlI6CisgICAgICAgIGNuYW1lID0gIkdfSU9fRVJSIjsKKyAgICAg
ICAgYWN0aW9uID0gQ1VSTF9DU0VMRUNUX0VSUjsKKyAgICAgICAgZG9EZWxldGUgPSB0cnVlOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEdfSU9fSFVQOgorICAgICAgICBjbmFtZSA9ICJHX0lP
X1VQIjsKKyAgICAgICAgYWN0aW9uID0gQ1VSTF9DU0VMRUNUX0VSUjsKKyAgICAgICAgZG9EZWxl
dGUgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdfSU9fTlZBTDoKKyAgICAgICAg
Y25hbWUgPSAiR19JT19OVkFMIjsKKyAgICAgICAgYWN0aW9uID0gQ1VSTF9DU0VMRUNUX0VSUjsK
KyAgICAgICAgZG9EZWxldGUgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBw
cml2LT5qb2ItPmhhbmRsZVNvY2tldENhbGxCYWNrKHByaXYtPnNvY2tmZCxhY3Rpb24pOworCisg
ICAgaWYgKGRvRGVsZXRlKSB7CisgICAgICAgIGRlbGV0ZSBwcml2OworICAgICAgICByZXR1cm4g
RkFMU0U7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorCitSZXNvdXJjZUhhbmRsZU1hbmFn
ZXIqIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6c2hhcmVkSW5zdGFuY2UoKQoreworICAgIHN0YXRp
YyBSZXNvdXJjZUhhbmRsZU1hbmFnZXIqIHNoYXJlZDsKKyAgICBpZiAoIXNoYXJlZCkKKyAgICAg
ICAgc2hhcmVkID0gbmV3IFJlc291cmNlSGFuZGxlTWFuYWdlcigpOworICAgIHJldHVybiBzaGFy
ZWQ7Cit9CisKK1Jlc291cmNlSGFuZGxlTWFuYWdlcjo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyKCkK
KyAgICAgICAgOiBtX2Nvb2tpZUphckZpbGVOYW1lKChjaGFyKikiL3RtcC9jb29raWVzLWN1cmwu
dHh0IikKK3sKK30KKworUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjp+UmVzb3VyY2VIYW5kbGVNYW5h
Z2VyKCkKK3sKK30KKwordm9pZCogUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjphZGRGaWxlSGFuZGxl
RGF0YVNvdXJjZShSZXNvdXJjZUhhbmRsZUludGVybmFsKiBqb2IsIGN1cmxfc29ja2V0X3Qgc29j
a2ZkLCBpbnQgbWFzaykKK3sKKyAgICBpbnQgY29uZGl0aW9uID0gR19JT19QUkkgfCBHX0lPX0VS
UiB8IEdfSU9fSFVQIHwgR19JT19OVkFMOworCisgICAgaWYgKG1hc2sgJiBDVVJMX0NTRUxFQ1Rf
SU4pCisgICAgICAgIGNvbmRpdGlvbiB8PSBHX0lPX0lOOworICAgIGlmIChtYXNrICYgQ1VSTF9D
U0VMRUNUX09VVCkKKyAgICAgICAgY29uZGl0aW9uIHw9IEdfSU9fT1VUOworCisgICAgR3RrSU9D
aGFubmVsUHJpdmF0ZSogZGF0YSA9IG5ldyBHdGtJT0NoYW5uZWxQcml2YXRlOworI2lmbmRlZiBH
X09TX1dJTjMyCisgICAgR0lPQ2hhbm5lbCogY2hhbm5lbCA9IGdfaW9fY2hhbm5lbF91bml4X25l
dyhzb2NrZmQpOworI2Vsc2UKKyAgICBHSU9DaGFubmVsKiBjaGFubmVsID0gZ19pb19jaGFubmVs
X3dpbjMyX25ld19zb2NrZXQoc29ja2ZkKTsKKyNlbmRpZgorICAgIGRhdGEtPmNoYW5uZWwgPSBj
aGFubmVsOworICAgIGRhdGEtPmpvYiA9IGpvYjsKKyAgICBkYXRhLT5tYXNrID0gbWFzazsKKyAg
ICBkYXRhLT5zb2NrZmQgPSBzb2NrZmQ7CisgICAgZ19pb19jaGFubmVsX3NldF9mbGFncyhjaGFu
bmVsLCBHX0lPX0ZMQUdfTk9OQkxPQ0ssIE5VTEwpOworICAgIGdfaW9fY2hhbm5lbF9zZXRfZW5j
b2RpbmcoY2hhbm5lbCwgTlVMTCwgTlVMTCk7CisgICAgZ19pb19jaGFubmVsX3NldF9idWZmZXJl
ZChjaGFubmVsLCBGQUxTRSk7CisgICAgZ19pb19jaGFubmVsX3NldF9jbG9zZV9vbl91bnJlZihj
aGFubmVsLCBGQUxTRSk7CisgICAgZGF0YS0+aWQgPSBnX2lvX2FkZF93YXRjaF9mdWxsKGNoYW5u
ZWwsR19QUklPUklUWV9ERUZBVUxULChHSU9Db25kaXRpb24pY29uZGl0aW9uLChHSU9GdW5jKXJl
c291cmNlSGFuZGxlR0lPRnVuYyxkYXRhLE5VTEwpOworICAgIGdfaW9fY2hhbm5lbF91bnJlZihj
aGFubmVsKTsKKyAgICByZXR1cm4oKHZvaWQqKWRhdGEpOworfQorCit2b2lkIFJlc291cmNlSGFu
ZGxlTWFuYWdlcjo6cmVtb3ZlRmlsZUhhbmRsZURhdGFTb3VyY2UoUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbCosIGN1cmxfc29ja2V0X3Qgcyx2b2lkKiBkYXRhKQoreworICAgIEd0a0lPQ2hhbm5lbFBy
aXZhdGUqIHByaXYgPSBzdGF0aWNfY2FzdDxHdGtJT0NoYW5uZWxQcml2YXRlKj4oZGF0YSk7Cisg
ICAgZ19zb3VyY2VfcmVtb3ZlKHByaXYtPmlkKTsKKyAgICBkZWxldGUgcHJpdjsKK30KKworfQor
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbmN1cmwvQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9uY3VybC9BdXRoZW50aWNh
dGlvbkNoYWxsZW5nZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMDk4
OTAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbmN1cmwvQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYg
QXV0aGVudGljYXRpb25DaGFsbGVuZ2VfaAorI2RlZmluZSBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZV9oCisKKyNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUJhc2UuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSA6IHB1YmxpYyBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZUJhc2UKK3sKK3B1YmxpYzoKKyAgICBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSgpCisgICAgeworICAgIH0KKworICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlLCBjb25zdCBDcmVkZW50aWFs
JiBwcm9wb3NlZENyZWRlbnRpYWwsIHVuc2lnbmVkIHByZXZpb3VzRmFpbHVyZUNvdW50LCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3Ip
CisgICAgICAgIDogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlKHByb3RlY3Rpb25TcGFjZSwg
cHJvcG9zZWRDcmVkZW50aWFsLCBwcmV2aW91c0ZhaWx1cmVDb3VudCwgcmVzcG9uc2UsIGVycm9y
KQorICAgIHsKKyAgICB9Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL25jdXJsL0Nvb2tpZUphckN1cmwuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL25jdXJsL0Nvb2tpZUphckN1cmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjJmNzZlYmMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvbmN1cmwvQ29va2llSmFyQ3VybC5jcHAKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkNvb2tpZUphci5oIgorCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4gY29va2llSmFyOworCit2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywg
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKnBvbGljeVVSTCovLCBjb25zdCBTdHJpbmcm
IHZhbHVlKQoreworICAgIGNvb2tpZUphci5zZXQodXJsLnN0cmluZygpLCB2YWx1ZSk7Cit9CisK
K1N0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwm
IHVybCkKK3sKKyAgICByZXR1cm4gY29va2llSmFyLmdldCh1cmwuc3RyaW5nKCkpOworfQorCiti
b29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8pCit7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9uY3VybC9SZXNvdXJjZUVycm9yLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbmN1cmwv
UmVzb3VyY2VFcnJvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZTBi
NGQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbmN1cmwvUmVz
b3VyY2VFcnJvci5oCkBAIC0wLDAgKzEsNDkgQEAKKy8vIC0qLSBtb2RlOiBjKys7IGMtYmFzaWMt
b2Zmc2V0OiA0IC0qLQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJlc291cmNlRXJyb3Jf
aAorI2RlZmluZSBSZXNvdXJjZUVycm9yX2gKKworI2luY2x1ZGUgIlJlc291cmNlRXJyb3JCYXNl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVzb3VyY2VFcnJvciA6IHB1Ymxp
YyBSZXNvdXJjZUVycm9yQmFzZQoreworcHVibGljOgorICAgIFJlc291cmNlRXJyb3IoKQorICAg
IHsKKyAgICB9CisKKyAgICBSZXNvdXJjZUVycm9yKGNvbnN0IFN0cmluZyYgZG9tYWluLCBpbnQg
ZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGZhaWxpbmdVUkwsIGNvbnN0IFN0cmluZyYgbG9jYWxp
emVkRGVzY3JpcHRpb24pCisgICAgICAgIDogUmVzb3VyY2VFcnJvckJhc2UoZG9tYWluLCBlcnJv
ckNvZGUsIGZhaWxpbmdVUkwsIGxvY2FsaXplZERlc2NyaXB0aW9uKQorICAgIHsKKyAgICB9Cit9
OworCit9CisKKyNlbmRpZiAvLyBSZXNvdXJjZUVycm9yX2hfCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvbmN1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9uY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NWVjNzIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvbmN1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcApAQCAtMCww
ICsxLDgyIEBACisvKioKKyAqIEBmaWxlIFJlc291cmNlSGFuZGxlQ3VybC5jcHAgKgorICogQkFM
IEltcGxlbWVudGF0aW9uIG9mIHRyYW5zZmVyIGpvYiwgd2l0aCBjdXJsCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFu
ZGxlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKKyNpbmNsdWRlICJEb2NM
b2FkZXIuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJlc291cmNl
SGFuZGxlSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJGb3JtRGF0YS5oIgorI2luY2x1ZGUgInd0Zi9I
YXNoU2V0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJ3dGYvVmVjdG9yLmgiCisjaW5jbHVkZSAi
TUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorI2luY2x1ZGUgIlN5
c3RlbVRpbWUuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKworYm9vbCBSZXNvdXJjZUhh
bmRsZTo6c3RhcnQoRnJhbWUqIGZyYW1lKQoreworICAgIHJldHVybiBkLT5zdGFydChmcmFtZSxm
YWxzZSk7Cit9CisKK1Jlc291cmNlSGFuZGxlOjp+UmVzb3VyY2VIYW5kbGUoKQoreworfQorCisK
K3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNhbmNlbCgpCit7CisgICAgZC0+Y2FuY2VsKCk7CisgICAg
cmV0dXJuOworfQorCisKKworCit2b2lkIFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VFcnJvciYg
ZXJyb3IsCisgICAgICAgIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4m
IGRhdGEsIEZyYW1lKiBmcmFtZSkKK3sKKyAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsOjpsb2Fk
UmVzb3VyY2VTeW5jaHJvbm91c2x5KHJlcXVlc3QsZXJyb3IscmVzcG9uc2UsZGF0YSxmcmFtZSk7
Cit9CisKK2Jvb2wgUmVzb3VyY2VIYW5kbGU6OndpbGxMb2FkRnJvbUNhY2hlKFJlc291cmNlUmVx
dWVzdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgUmVzb3VyY2VIYW5kbGU6OmxvYWRzQmxvY2tlZCgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1Bhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBS
ZXNvdXJjZUhhbmRsZTo6YnVmZmVyZWREYXRhKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworYm9v
bCBSZXNvdXJjZUhhbmRsZTo6c3VwcG9ydHNCdWZmZXJlZERhdGEoKQoreworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRl
ZmVycykKK3sKKyAgICBkLT5tX2RlZmVyc0xvYWRpbmcgPSBkZWZlcnM7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworCisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9uY3VybC9SZXNvdXJjZUhhbmRsZUludGVybmFsQ3VybC5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvbmN1cmwvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbEN1cmwuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5OWI2YjUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvbmN1cmwvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbEN1cmwuY3Bw
CkBAIC0wLDAgKzEsODAxIEBACisvKioKKyAqIEBmaWxlIFJlc291cmNlSGFuZGxlQ3VybC5jcHAg
KgorICogQkFMIEltcGxlbWVudGF0aW9uIG9mIHRyYW5zZmVyIGpvYiwgd2l0aCBjdXJsCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJl
c291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKKyNpbmNs
dWRlICJEb2NMb2FkZXIuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUg
IlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZU1hbmFn
ZXIuaCIKKyNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgorI2luY2x1ZGUgIkJhc2U2NC5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUg
IkZvcm1EYXRhLmgiCisjaW5jbHVkZSAid3RmL0hhc2hTZXQuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1
ZGUgInd0Zi9WZWN0b3IuaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiTUlN
RVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKKyNpbmNsdWRlICJ3dGYv
QXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorI2luY2x1ZGUgPGVycm5vLmg+
CisKKyNpZiBQTEFURk9STShHVEspCisjaWYgR0xJQl9DSEVDS19WRVJTSU9OKDIsMTIsMCkKKyNk
ZWZpbmUgVVNFX0dMSUJfQkFTRTY0CisjZW5kaWYKKyNlbmRpZgorCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworCitjb25zdCBpbnQgc2VsZWN0VGltZW91dE1TID0gNTsKK3N0YXRpYyBjaGFyIGVy
cm9yX2J1ZmZlcltDVVJMX0VSUk9SX1NJWkVdOworc3RhdGljIGNoYXIqIG1fY29va2llSmFyRmls
ZU5hbWU7CitzdGF0aWMgQ1VSTFNIKiBtX2N1cmxTaGFyZUhhbmRsZTsKK3N0YXRpYyBSZXNvdXJj
ZUhhbmRsZU1hbmFnZXIqIG1fbWFuYWdlciA9IDA7CisKK3N0YXRpYyBjb25zdCBib29sIGlnbm9y
ZVNTTEVycm9ycyA9IGdldGVudigiV0VCS0lUX0lHTk9SRV9TU0xfRVJST1JTIik7CisKK3N0YXRp
YyBzaXplX3Qgd3JpdGVDYWxsYmFjayh2b2lkKiBwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1l
bWIsIHZvaWQqIG9iaikKK3sKKyAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gc3RhdGlj
X2Nhc3Q8UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCo+KG9iaik7CisgICAgQVNTRVJUKGQpOworICAg
IGxvbmcgaHR0cENvZGUgPSAwOworICAgIGlmIChkLT5tX2NhbmNlbGxlZCkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgY3VybF9lYXN5X2dldGluZm8oZC0+bV9oYW5kbGUsIENVUkxJTkZPX1JFU1BP
TlNFX0NPREUsICZodHRwQ29kZSk7CisgICAgaW50IHRvdGFsU2l6ZSA9IHNpemUgKiBubWVtYjsK
KworICAgIC8vIEF2b2lkIGhhdmluZyByZWRpcmVjdGlvbiBtZXNzYWdlcyBpbiB0aGUgYm9keSAh
CisgICAgLy8gdGhpcyBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5IGJ1dCBhcHBhcmVudGx5IGlzLiBD
VVJMIHdyaXRlcyB0aGUgZGF0YQorICAgIC8vIG9mIGh0bWwgcGFnZSBldmVuIGlmIGl0IGlzIGEg
cmVkaXJlY3QgdGhhdCB3YXMgaGFuZGxlZCBpbnRlcm5hbGx5CisgICAgLy8gY2FuIGJlIG9ic2Vy
dmVkIGUuZy4gb24gZ21haWwuY29tCisgICAgaWYgKGh0dHBDb2RlID49IDMwMCAmJiBodHRwQ29k
ZSA8IDQwMCkgeworICAgICAgICByZXR1cm4gdG90YWxTaXplOworICAgIH0KKworICAgIC8vIHNp
bmNlIHRoZSBjb2RlIGluIGhlYWRlckNhbGxiYWNrIHdpbGwgbm90IGhhdmUgcnVuIGZvciBsb2Nh
bCBmaWxlcworICAgIC8vIHRoZSBjb2RlIHRvIHNldCB0aGUgVVJMIGFuZCBmaXJlIGRpZFJlY2Vp
dmVSZXNwb25zZSBpcyBuZXZlciBydW4sCisgICAgLy8gd2hpY2ggbWVhbnMgdGhlIFJlc291cmNl
TG9hZGVyJ3MgcmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiB0aGUgVVJMLgorICAgIC8vIFJ1biB0
aGUgY29kZSBoZXJlIGZvciBsb2NhbCBmaWxlcyB0byByZXNvbHZlIHRoZSBpc3N1ZS4KKyAgICAv
LyBUT0RPOiBTZWUgaWYgdGhlcmUgaXMgYSBiZXR0ZXIgYXBwcm9hY2ggZm9yIGhhbmRsaW5nIHRo
aXMuCisgICAgaWYgKCFkLT5tX3Jlc3BvbnNlLnJlc3BvbnNlRmlyZWQoKSkgeworICAgICAgICBj
b25zdCBjaGFyKiBoZHI7CisgICAgICAgIENVUkxjb2RlIGVyciA9IGN1cmxfZWFzeV9nZXRpbmZv
KGQtPm1faGFuZGxlLCBDVVJMSU5GT19FRkZFQ1RJVkVfVVJMLCAmaGRyKTsKKyAgICAgICAgaWYg
KENVUkxFX09LID09IGVycikKKyAgICAgICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0VXJsKEtVUkwo
aGRyKSk7CisgICAgICAgIGlmIChkLT5tX2NsaWVudCkKKyAgICAgICAgICAgIGQtPm1fY2xpZW50
LT5kaWRSZWNlaXZlUmVzcG9uc2UoZC0+bV9sb2FkZXIsIGQtPm1fcmVzcG9uc2UpOworICAgICAg
ICBkLT5tX3Jlc3BvbnNlLnNldFJlc3BvbnNlRmlyZWQodHJ1ZSk7CisgICAgfQorCisgICAgaWYg
KGQtPm1fY2xpZW50KQorICAgICAgICBkLT5tX2NsaWVudC0+ZGlkUmVjZWl2ZURhdGEoZC0+bV9s
b2FkZXIsIHN0YXRpY19jYXN0PGNoYXIqPihwdHIpLCB0b3RhbFNpemUsIDApOworICAgIGVsc2UK
KyAgICAgICAgZC0+bV9yZXN1bHREYXRhLmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyKj4ocHRyKSwg
dG90YWxTaXplKTsKKworICAgIHJldHVybiB0b3RhbFNpemU7Cit9CisKK3N0YXRpYyBzaXplX3Qg
aGVhZGVyQ2FsbGJhY2soY2hhciogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lk
KiBvYmopCit7CisgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IHN0YXRpY19jYXN0PFJl
c291cmNlSGFuZGxlSW50ZXJuYWwqPihvYmopOworICAgIEFTU0VSVChkKTsKKyAgICBpZiAoZC0+
bV9jYW5jZWxsZWQpCisgICAgICAgIHJldHVybiAwOworICAgIHNpemVfdCB0b3RhbFNpemUgPSBz
aXplICogbm1lbWI7CisKKyAgICBTdHJpbmcgaGVhZGVyKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIq
PihwdHIpLCB0b3RhbFNpemUpOworCisgICAgLyoKKyAgICAgKiBhKSBXZSBjYW4gZmluaXNoIGFu
ZCBzZW5kIHRoZSBSZXNvdXJjZVJlc3BvbnNlCisgICAgICogYikgV2Ugd2lsbCBhZGQgdGhlIGN1
cnJlbnQgaGVhZGVyIHRvIHRoZSBIVFRQSGVhZGVyTWFwIG9mIHRoZSBSZXNvdXJjZVJlc3BvbnNl
CisgICAgICovCisgICAgaWYgKGhlYWRlciA9PSBTdHJpbmcoIlxyXG4iKSkgeworICAgICAgICBD
VVJMKiBoID0gZC0+bV9oYW5kbGU7CisgICAgICAgIENVUkxjb2RlIGVycjsKKworICAgICAgICBk
b3VibGUgY29udGVudExlbmd0aCA9IDA7CisgICAgICAgIGVyciA9IGN1cmxfZWFzeV9nZXRpbmZv
KGgsIENVUkxJTkZPX0NPTlRFTlRfTEVOR1RIX0RPV05MT0FELCAmY29udGVudExlbmd0aCk7Cisg
ICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKHN0YXRpY19jYXN0
PGxvbmcgbG9uZyBpbnQ+KGNvbnRlbnRMZW5ndGgpKTsKKworICAgICAgICBjb25zdCBjaGFyKiBo
ZHI7CisgICAgICAgIGVyciA9IGN1cmxfZWFzeV9nZXRpbmZvKGgsIENVUkxJTkZPX0VGRkVDVElW
RV9VUkwsICZoZHIpOworICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldFVybChLVVJMKGhkcikpOwor
CisgICAgICAgIGxvbmcgaHR0cENvZGUgPSAwOworICAgICAgICBlcnIgPSBjdXJsX2Vhc3lfZ2V0
aW5mbyhoLCBDVVJMSU5GT19SRVNQT05TRV9DT0RFLCAmaHR0cENvZGUpOworICAgICAgICBkLT5t
X3Jlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKGh0dHBDb2RlKTsKKworICAgICAgICBkLT5tX3Jl
c3BvbnNlLnNldE1pbWVUeXBlKGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUoZC0+bV9yZXNw
b25zZS5odHRwSGVhZGVyRmllbGQoIkNvbnRlbnQtVHlwZSIpKSk7CisgICAgICAgIGQtPm1fcmVz
cG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZShleHRyYWN0Q2hhcnNldEZyb21NZWRpYVR5cGUoZC0+
bV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoIkNvbnRlbnQtVHlwZSIpKSk7CisgICAgICAgIGQt
Pm1fcmVzcG9uc2Uuc2V0U3VnZ2VzdGVkRmlsZW5hbWUoZmlsZW5hbWVGcm9tSFRUUENvbnRlbnRE
aXNwb3NpdGlvbihkLT5tX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgiQ29udGVudC1EaXNwb3Np
dGlvbiIpKSk7CisKKyAgICAgICAgLy8gSFRUUCByZWRpcmVjdGlvbgorICAgICAgICBpZiAoaHR0
cENvZGUgPj0gMzAwICYmIGh0dHBDb2RlIDwgNDAwKSB7CisgICAgICAgICAgICBTdHJpbmcgbG9j
YXRpb24gPSBkLT5tX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgibG9jYXRpb24iKTsKKyAgICAg
ICAgICAgIGlmICghbG9jYXRpb24uaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgS1VSTCBu
ZXdVUkwgPSBLVVJMKGQtPm1fcmVxdWVzdC51cmwoKSxsb2NhdGlvbik7CisKKyAgICAgICAgICAg
ICAgICBSZXNvdXJjZVJlcXVlc3QgcmVkaXJlY3RlZFJlcXVlc3QgPSBkLT5tX3JlcXVlc3Q7Cisg
ICAgICAgICAgICAgICAgcmVkaXJlY3RlZFJlcXVlc3Quc2V0VVJMKG5ld1VSTCk7CisgICAgICAg
ICAgICAgICAgaWYgKGQtPm1fY2xpZW50KQorICAgICAgICAgICAgICAgICAgICBkLT5tX2NsaWVu
dC0+d2lsbFNlbmRSZXF1ZXN0KGQtPm1fbG9hZGVyLCByZWRpcmVjdGVkUmVxdWVzdCwgZC0+bV9y
ZXNwb25zZSk7CisKKyAgICAgICAgICAgICAgICBkLT5tX3JlcXVlc3Quc2V0VVJMKG5ld1VSTCk7
CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdG90YWxTaXplOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGlmIChkLT5tX2NsaWVudCkKKyAgICAgICAgICAgIGQtPm1fY2xpZW50
LT5kaWRSZWNlaXZlUmVzcG9uc2UoZC0+bV9sb2FkZXIsIGQtPm1fcmVzcG9uc2UpOworICAgICAg
ICBkLT5tX3Jlc3BvbnNlLnNldFJlc3BvbnNlRmlyZWQodHJ1ZSk7CisKKyAgICB9IGVsc2Ugewor
ICAgICAgICBpbnQgc3BsaXRQb3MgPSBoZWFkZXIuZmluZCgiOiIpOworICAgICAgICBpZiAoc3Bs
aXRQb3MgIT0gLTEpCisgICAgICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVs
ZChoZWFkZXIubGVmdChzcGxpdFBvcyksIGhlYWRlci5zdWJzdHJpbmcoc3BsaXRQb3MrMSkuc3Ry
aXBXaGl0ZVNwYWNlKCkpOworICAgIH0KKworICAgIHJldHVybiB0b3RhbFNpemU7Cit9CisKKy8q
IHRoaXMgY2FsbGJhY2sgbWlnaHQgdmVyeSB3ZWxsIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBm
b3IgYSBzaW5nbGUgZWFzeQorICAgaGFuZGxlLiBCb3RoIHRvIGNoYW5nZSB0aGUgc3RhdGUgb2Yg
dGhlICd3aGF0JyBidXQgYWxzbyB0byBtYWtlIGl0IGRlYWwKKyAgIHdpdGggbW9yZSB0aGFuIG9u
ZSBzb2NrZXQuICovCitzdGF0aWMgaW50IHNvY2tldENhbGxiYWNrKENVUkwgKmVhc3ksICAgICAg
LyogZWFzeSBoYW5kbGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9zb2NrZXRf
dCBzLCAvKiBzb2NrZXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFjdGlvbiwg
ICAgICAgIC8qIFdoeSBpIHdhcyBjYWxsZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
dm9pZCogdXNlcnAsIC8qIHByaXZhdGUgcG9pbnRlciAqLworICAgICAgICAgICAgICAgICAgICAg
ICAgICB2b2lkICpzb2NrZXRwKSAgICAvKiAicHJpdmF0ZSIgcGVyIHNvY2tldCBwb2ludGVyICov
Cit7CisgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZDsKKyAgICBjdXJsX2Vhc3lfZ2V0aW5m
byhlYXN5LCBDVVJMSU5GT19QUklWQVRFLCAmZCk7CisKKyAgICBpZiAoc29ja2V0cCkgeworICAg
ICAgICBtX21hbmFnZXItPnJlbW92ZUZpbGVIYW5kbGVEYXRhU291cmNlKGQscyxzb2NrZXRwKTsK
KyAgICAgICAgY3VybF9tdWx0aV9hc3NpZ24oZC0+bV9jdXJsTXVsdGlIYW5kbGUsIHMsMCk7Cisg
ICAgICAgIGQtPm1fb3BlbkZpbGVIYW5kbGVzLS07CisgICAgfQorCisgICAgc3dpdGNoIChhY3Rp
b24pIHsKKyAgICAgICAgY2FzZSBDVVJMX1BPTExfUkVNT1ZFOiB7CisgICAgICAgICAgICAvLyBE
ZWZhdWx0IGFjdGlvbgorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENV
UkxfUE9MTF9OT05FOiB7CisgICAgICAgICAgICAvLyBGSVhNRTogV2hhdCBzaG91bGQgSSBkbyA/
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1VSTF9QT0xMX0lOOiB7
CisgICAgICAgICAgICB2b2lkKiBjZCA9IG1fbWFuYWdlci0+YWRkRmlsZUhhbmRsZURhdGFTb3Vy
Y2UoZCxzLENVUkxfQ1NFTEVDVF9JTik7CisgICAgICAgICAgICBjdXJsX211bHRpX2Fzc2lnbihk
LT5tX2N1cmxNdWx0aUhhbmRsZSwgcyxjZCk7CisgICAgICAgICAgICBkLT5tX29wZW5GaWxlSGFu
ZGxlcysrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENVUkxfUE9M
TF9PVVQ6IHsKKyAgICAgICAgICAgIHZvaWQqIGNkID0gbV9tYW5hZ2VyLT5hZGRGaWxlSGFuZGxl
RGF0YVNvdXJjZShkLHMsQ1VSTF9DU0VMRUNUX09VVCk7CisgICAgICAgICAgICBjdXJsX211bHRp
X2Fzc2lnbihkLT5tX2N1cmxNdWx0aUhhbmRsZSwgcyxjZCk7CisgICAgICAgICAgICBkLT5tX29w
ZW5GaWxlSGFuZGxlcysrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IENVUkxfUE9MTF9JTk9VVDogeworICAgICAgICAgICAgdm9pZCogY2QgPSBtX21hbmFnZXItPmFk
ZEZpbGVIYW5kbGVEYXRhU291cmNlKGQscyxDVVJMX0NTRUxFQ1RfSU4gfCBDVVJMX0NTRUxFQ1Rf
T1VUKTsKKyAgICAgICAgICAgIGN1cmxfbXVsdGlfYXNzaWduKGQtPm1fY3VybE11bHRpSGFuZGxl
LCBzLGNkKTsKKyAgICAgICAgICAgIGQtPm1fb3BlbkZpbGVIYW5kbGVzKys7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgaWYgKCFkLT5tX29wZW5GaWxlSGFuZGxlcykKKyAgICAgICAgZC0+c2V0VGltZW91
dCgwKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aW1lckNhbGxiYWNrKENVUkxN
ICptdWx0aSwgbG9uZyB0aW1lb3V0X21zLCB2b2lkICp1c2VycCkKK3sKKyAgICBSZXNvdXJjZUhh
bmRsZUludGVybmFsKiBkID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCo+KHVz
ZXJwKTsKKyAgICBkLT5zZXRUaW1lb3V0KHRpbWVvdXRfbXMpOworICAgIHJldHVybiAwOworfQor
CisvKiBUaGlzIGlzIGNhbGxlZCB0byBvYnRhaW4gSFRUUCBQT1NUIG9yIFBVVCBkYXRhLgorICAg
SXRlcmF0ZSB0aHJvdWdoIEZvcm1EYXRhIGVsZW1lbnRzIGFuZCB1cGxvYWQgZmlsZXMuCisgICBD
YXJlZnVsbHkgcmVzcGVjdCB0aGUgZ2l2ZW4gYnVmZmVyIHNpemUgYW5kIGZpbGwgdGhlIHJlc3Qg
b2YgdGhlIGRhdGEgYXQgdGhlIG5leHQgY2FsbHMuCisqLworc2l6ZV90IHJlYWRDYWxsYmFjayh2
b2lkKiBwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQqIGRhdGEpCit7CisgICAg
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlSW50
ZXJuYWwqPihkYXRhKTsKKyAgICBpZiAoZC0+bV9jYW5jZWxsZWQpCisgICAgICAgIHJldHVybiAw
OworCisgICAgc2l6ZV90IHNlbnQgPSAwOworICAgIHNpemVfdCB0b1NlbmQgPSBzaXplICogbm1l
bWI7CisgICAgaWYgKCF0b1NlbmQpCisgICAgICAgIHJldHVybiAwOworCisgICAgVmVjdG9yPEZv
cm1EYXRhRWxlbWVudD4gZWxlbWVudHM7CisgICAgaWYgKGQtPm1fcmVxdWVzdC5odHRwQm9keSgp
KQorICAgICAgICBlbGVtZW50cyA9IGQtPm1fcmVxdWVzdC5odHRwQm9keSgpLT5lbGVtZW50cygp
OworICAgIGlmIChkLT5tX2Zvcm1EYXRhRWxlbWVudEluZGV4ID49IGVsZW1lbnRzLnNpemUoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBGb3JtRGF0YUVsZW1lbnQgZWxlbWVudCA9IGVsZW1l
bnRzW2QtPm1fZm9ybURhdGFFbGVtZW50SW5kZXhdOworCisgICAgaWYgKGVsZW1lbnQubV90eXBl
ID09IEZvcm1EYXRhRWxlbWVudDo6ZW5jb2RlZEZpbGUpIHsKKyAgICAgICAgaWYgKCFkLT5tX2Zp
bGUpCisgICAgICAgICAgICBkLT5tX2ZpbGUgPSBmb3BlbihlbGVtZW50Lm1fZmlsZW5hbWUudXRm
OCgpLmRhdGEoKSwgInJiIik7CisKKyAgICAgICAgaWYgKCFkLT5tX2ZpbGUpIHsKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBzaG93IGEgdXNlciBlcnJvcj8KKyAgICAgICAgICAgIExPR19FUlJPUigi
RmFpbGVkIHdoaWxlIHRyeWluZyB0byBvcGVuICVzIGZvciB1cGxvYWRcbiIsIGVsZW1lbnQubV9m
aWxlbmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGQtPmNhbmNlbCgpOworICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBzZW50ID0gZnJlYWQocHRyLCBz
aXplLCBubWVtYiwgZC0+bV9maWxlKTsKKyAgICAgICAgaWYgKCFzaXplICYmIGZlcnJvcihkLT5t
X2ZpbGUpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogc2hvdyBhIHVzZXIgZXJyb3I/CisgICAg
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB3aGlsZSB0cnlpbmcgdG8gcmVhZCAlcyBmb3IgdXBs
b2FkXG4iLCBlbGVtZW50Lm1fZmlsZW5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBk
LT5jYW5jZWwoKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGlm
IChmZW9mKGQtPm1fZmlsZSkpIHsKKyAgICAgICAgICAgIGZjbG9zZShkLT5tX2ZpbGUpOworICAg
ICAgICAgICAgZC0+bV9maWxlID0gMDsKKyAgICAgICAgICAgIGQtPm1fZm9ybURhdGFFbGVtZW50
SW5kZXgrKzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHNpemVfdCBlbGVtZW50
U2l6ZSA9IGVsZW1lbnQubV9kYXRhLnNpemUoKSAtIGQtPm1fZm9ybURhdGFFbGVtZW50RGF0YU9m
ZnNldDsKKyAgICAgICAgc2VudCA9IGVsZW1lbnRTaXplID4gdG9TZW5kID8gdG9TZW5kIDogZWxl
bWVudFNpemU7CisgICAgICAgIG1lbWNweShwdHIsIGVsZW1lbnQubV9kYXRhLmRhdGEoKSArIGQt
Pm1fZm9ybURhdGFFbGVtZW50RGF0YU9mZnNldCwgc2VudCk7CisgICAgICAgIGlmIChlbGVtZW50
U2l6ZSA+IHNlbnQpCisgICAgICAgICAgICBkLT5tX2Zvcm1EYXRhRWxlbWVudERhdGFPZmZzZXQg
Kz0gc2VudDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBkLT5tX2Zvcm1EYXRhRWxlbWVu
dERhdGFPZmZzZXQgPSAwOworICAgICAgICAgICAgZC0+bV9mb3JtRGF0YUVsZW1lbnRJbmRleCsr
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHNlbnQ7Cit9CisKK1Jlc291cmNlSGFu
ZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUludGVybmFsKCkKK3sKKyAgICBjYW5jZWwoKTsK
KworICAgIG1fZG93bmxvYWRUaW1lci5zdG9wKCk7CisKKyAgICBpZiAobV9oYW5kbGUpIHsKKyAg
ICAgICAgaWYgKG1fY3VybE11bHRpSGFuZGxlKSB7CisgICAgICAgICAgICBjdXJsX211bHRpX3Jl
bW92ZV9oYW5kbGUobV9jdXJsTXVsdGlIYW5kbGUsbV9oYW5kbGUpOworICAgICAgICAgICAgY3Vy
bF9tdWx0aV9jbGVhbnVwKG1fY3VybE11bHRpSGFuZGxlKTsKKyAgICAgICAgICAgIG1fY3VybE11
bHRpSGFuZGxlID0gMDsKKyAgICAgICAgfQorICAgICAgICBjdXJsX2Vhc3lfY2xlYW51cChtX2hh
bmRsZSk7CisgICAgICAgIG1faGFuZGxlID0gMDsKKyAgICB9CisgICAgaWYgKG1fY3VzdG9tSGVh
ZGVycykKKyAgICAgICAgY3VybF9zbGlzdF9mcmVlX2FsbChtX2N1c3RvbUhlYWRlcnMpOworICAg
IGlmIChtX2N1c3RvbVBvc3RIZWFkZXJzKQorICAgICAgICBjdXJsX3NsaXN0X2ZyZWVfYWxsKG1f
Y3VzdG9tUG9zdEhlYWRlcnMpOworICAgIGlmIChtX3VybCkKKyAgICAgICAgZnJlZShtX3VybCk7
CisgICAgaWYgKG1fcG9zdEZpbGVOYW1lKQorICAgICAgICBmcmVlKG1fcG9zdEZpbGVOYW1lKTsK
KworICAgIG1fY3VzdG9tSGVhZGVycyA9IDA7CisgICAgbV9jdXN0b21Qb3N0SGVhZGVycyA9MDsK
KyAgICBtX3VybCA9IDA7CisgICAgbV9wb3N0RmlsZU5hbWUgPSAwOworfQorCit2b2lkIFJlc291
cmNlSGFuZGxlSW50ZXJuYWw6OmhhbmRsZVNvY2tldENhbGxCYWNrKGN1cmxfc29ja2V0X3Qgcywg
aW50IGFjdGlvbikKK3sKKyAgICBpZiAobV9jYW5jZWxsZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIEJsb2NrIGRlbGV0ZSB3aGlsZSBpbiBjdXJsIGNhbGxzCisgICAgbV9sb2FkZXItPnJl
ZigpOworCisgICAgaW50IGhhbmRsZXMgPSAtMTsKKyAgICBzd2l0Y2ggKGFjdGlvbikgeworICAg
ICAgICBjYXNlIENVUkxfQ1NFTEVDVF9PVVQ6CisgICAgICAgICAgICBjdXJsX211bHRpX3NvY2tl
dF9hY3Rpb24obV9jdXJsTXVsdGlIYW5kbGUsIHMsIENVUkxfQ1NFTEVDVF9PVVQsICZoYW5kbGVz
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENVUkxfQ1NFTEVDVF9JTjoKKyAg
ICAgICAgICAgIGN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbihtX2N1cmxNdWx0aUhhbmRsZSwgcywg
Q1VSTF9DU0VMRUNUX0lOLCAmaGFuZGxlcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBDVVJMX0NTRUxFQ1RfRVJSOgorICAgICAgICAgICAgLy8gRG8gbm90aGluZyBvbiBlcnJv
ciBleGNlcHQgY2hlY2sgbWVzc2FnZXMKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgLy8gUGFzcyAwIGxldCBjdXJsIGRlY2lkZSB3aGF0IHRvIGRvCisg
ICAgICAgICAgICBjdXJsX211bHRpX3NvY2tldF9hY3Rpb24obV9jdXJsTXVsdGlIYW5kbGUsIHMs
MCwgJmhhbmRsZXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9sb2FkZXIt
PmRlcmVmKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6ZG93bmxvYWRUaW1l
cihUaW1lcjxSZXNvdXJjZUhhbmRsZUludGVybmFsPiopCit7CisgICAgY2hlY2tNZXNzYWdlcygp
OworfQorCisvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBkZWFsIHByb3Blcmx5IHdp
dGggdGV4dCBlbmNvZGluZ3MuCitzdGF0aWMgdm9pZCBwYXJzZURhdGFVcmwoUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbCogZCkKK3sKKyAgICBTdHJpbmcgZGF0YSA9IGQtPm1fbG9hZGVyLT5yZXF1ZXN0
KCkudXJsKCkuc3RyaW5nKCk7CisKKyAgICBBU1NFUlQoZGF0YS5zdGFydHNXaXRoKCJkYXRhOiIs
IGZhbHNlKSk7CisKKyAgICBTdHJpbmcgaGVhZGVyOworICAgIGJvb2wgYmFzZTY0ID0gZmFsc2U7
CisKKyAgICBpbnQgaW5kZXggPSBkYXRhLmZpbmQoJywnKTsKKyAgICBpZiAoaW5kZXggIT0gLTEp
IHsKKyAgICAgICAgaGVhZGVyID0gZGF0YS5zdWJzdHJpbmcoNSwgaW5kZXggLSA1KS5sb3dlcigp
OworICAgICAgICBkYXRhID0gZGF0YS5zdWJzdHJpbmcoaW5kZXggKyAxKTsKKworICAgICAgICBp
ZiAoaGVhZGVyLmVuZHNXaXRoKCI7YmFzZTY0IikpIHsKKyAgICAgICAgICAgIGJhc2U2NCA9IHRy
dWU7CisgICAgICAgICAgICBoZWFkZXIgPSBoZWFkZXIubGVmdChoZWFkZXIubGVuZ3RoKCkgLSA3
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBkYXRhID0gU3RyaW5nKCk7CisKKyAg
ICBkYXRhID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGRhdGEpOworCisgICAgc2l6ZV90IG91
dExlbmd0aCA9IDA7CisgICAgY2hhciogb3V0RGF0YSA9IDA7CisgICAgaWYgKGJhc2U2NCAmJiAh
ZGF0YS5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gVXNlIHRoZSBHTGliIEJhc2U2NCBpZiBhdmFp
bGFibGUsIHNpbmNlIFdlYkNvcmUncyBkZWNvZGVyIGlzbid0CisgICAgICAgIC8vIGdlbmVyYWwt
cHVycG9zZSBhbmQgZmFpbHMgb24gQWNpZDMgdGVzdCA5NyAod2hpdGVzcGFjZSkuCisjaWZkZWYg
VVNFX0dMSUJfQkFTRTY0CisgICAgICAgIG91dERhdGEgPSByZWludGVycHJldF9jYXN0PGNoYXIq
PihnX2Jhc2U2NF9kZWNvZGUoZGF0YS51dGY4KCkuZGF0YSgpLCAmb3V0TGVuZ3RoKSk7CisjZWxz
ZQorICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0OworICAgICAgICBpZiAoYmFzZTY0RGVjb2RlKGRh
dGEubGF0aW4xKCkuZGF0YSgpLCBkYXRhLmxlbmd0aCgpLCBvdXQpKQorICAgICAgICAgICAgZGF0
YSA9IFN0cmluZyhvdXQuZGF0YSgpLCBvdXQuc2l6ZSgpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgZGF0YSA9IFN0cmluZygpOworI2VuZGlmCisgICAgfQorCisgICAgaWYgKGhlYWRlci5p
c0VtcHR5KCkpCisgICAgICAgIGhlYWRlciA9ICJ0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUki
OworCisKKyAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOworCisgICAgcmVzcG9uc2Uuc2V0
TWltZVR5cGUoZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShoZWFkZXIpKTsKKyAgICByZXNw
b25zZS5zZXRUZXh0RW5jb2RpbmdOYW1lKGV4dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlwZShoZWFk
ZXIpKTsKKyAgICBpZiAob3V0RGF0YSkKKyAgICAgICAgcmVzcG9uc2Uuc2V0RXhwZWN0ZWRDb250
ZW50TGVuZ3RoKG91dExlbmd0aCk7CisgICAgZWxzZQorICAgICAgICByZXNwb25zZS5zZXRFeHBl
Y3RlZENvbnRlbnRMZW5ndGgoZGF0YS5sZW5ndGgoKSk7CisgICAgcmVzcG9uc2Uuc2V0SFRUUFN0
YXR1c0NvZGUoMjAwKTsKKworICAgIGQtPm1fY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoZC0+
bV9sb2FkZXIsIHJlc3BvbnNlKTsKKworICAgIGlmIChvdXREYXRhKQorICAgICAgICBkLT5tX2Ns
aWVudC0+ZGlkUmVjZWl2ZURhdGEoZC0+bV9sb2FkZXIsIG91dERhdGEsIG91dExlbmd0aCwgMCk7
CisgICAgZWxzZQorICAgICAgICBkLT5tX2NsaWVudC0+ZGlkUmVjZWl2ZURhdGEoZC0+bV9sb2Fk
ZXIsIGRhdGEubGF0aW4xKCkuZGF0YSgpLCBkYXRhLmxlbmd0aCgpLCAwKTsKKworI2lmZGVmIFVT
RV9HTElCX0JBU0U2NAorICAgIGdfZnJlZShvdXREYXRhKTsKKyNlbmRpZgorCisgICAgZC0+bV9j
bGllbnQtPmRpZEZpbmlzaExvYWRpbmcoZC0+bV9sb2FkZXIpOworfQorCitib29sIFJlc291cmNl
SGFuZGxlSW50ZXJuYWw6OnN0YXJ0KEZyYW1lKixib29sIHN5bmNocm9ub3VzKQoreworICAgIGlu
aXRDVVJMKCk7CisKKyAgICBLVVJMIGt1cmwgPSBtX3JlcXVlc3QudXJsKCk7CisKKyAgICBpZiAo
a3VybC5wcm90b2NvbElzKCJkYXRhIikpIHsKKyAgICAgICAgc2V0VGltZW91dCgwKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgQVNTRVJUKG1fbG9hZGVyKTsKKworICAgIC8v
IENoZWNrIGZvciAocHJvYmFibHkpIGJyb2tlbiByZXF1ZXN0cworICAgIGlmIChtX3JlcXVlc3Qu
aHR0cE1ldGhvZCgpICE9ICJHRVQiICYmCisgICAgICAgICAgICBtX3JlcXVlc3QuaHR0cE1ldGhv
ZCgpICE9ICJQT1NUIiAmJgorICAgICAgICAgICAgbV9yZXF1ZXN0Lmh0dHBNZXRob2QoKSAhPSAi
UFVUIikgeworICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIG1fcmVzcG9uc2Uuc2V0VXJsKG1fcmVxdWVzdC51cmwoKSk7CisgICAgLy8g
UmVtb3ZlIGFueSBmcmFnbWVudCBwYXJ0LCBvdGhlcndpc2UgY3VybCB3aWxsIHNlbmQgaXQgYXMg
cGFydCBvZiB0aGUgcmVxdWVzdC4KKyAgICBrdXJsLnNldFJlZigiIik7CisKKyAgICBTdHJpbmcg
c3VybCA9IGt1cmwuc3RyaW5nKCk7CisgICAgLy8gUmVtb3ZlIGFueSBxdWVyeSBwYXJ0IHNlbnQg
dG8gYSBsb2NhbCBmaWxlCisgICAgLy8gYWxsb3dzIGh0dHAgc3R5bGUgZ2V0IG9wdGlvbnMgdG8g
YmUgaGFuZGxlZCBieSBhIGxvY2FsIGZpbGUKKyAgICAvLyBNb3ppbGxhIGV4Y2VwdHMgZmlsZTov
L2Zvb2Jhci5jb20vZm9vP2dldG9wcworCisgICAgaWYgKGt1cmwuaXNMb2NhbEZpbGUoKSkgewor
ICAgICAgICBTdHJpbmcgcXVlcnkgPSBrdXJsLnF1ZXJ5KCk7CisgICAgICAgIC8vIFJlbW92ZSBh
bnkgcXVlcnkgcGFydCBzZW50IHRvIGEgbG9jYWwgZmlsZS4KKyAgICAgICAgaWYgKCFxdWVyeS5p
c0VtcHR5KCkpCisgICAgICAgICAgICBzdXJsID0gc3VybC5sZWZ0KHN1cmwuZmluZChxdWVyeSkp
OworICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIE1JTUUgdHlwZSBiYXNlZCBvbiB0aGUgcGF0aC4K
KyAgICAgICAgbV9yZXNwb25zZS5zZXRNaW1lVHlwZShNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1F
VHlwZUZvclBhdGgoc3VybCkpOworICAgIH0KKworICAgIC8vIFVybCBwdHIgbXVzdCByZW1haW4g
dmFsaWQgdGhyb3VnaCB0aGUgcmVxdWVzdAorICAgIG1fdXJsID0gIHN0cmR1cChzdXJsLmxhdGlu
MSgpLmRhdGEoKSk7CisKKyAgICBtX2hhbmRsZSA9IGN1cmxfZWFzeV9pbml0KCk7CisjaWZuZGVm
IE5ERUJVRworICAgIGlmIChnZXRlbnYoIkRFQlVHX0NVUkwiKSkKKyAgICAgICAgY3VybF9lYXN5
X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9WRVJCT1NFLCAxKTsKKyNlbmRpZgorICAgIGN1cmxf
ZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfUFJJVkFURSwgdGhpcyk7CisgICAgY3VybF9l
YXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9FUlJPUkJVRkZFUiwgZXJyb3JfYnVmZmVyKTsK
KyAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIHdy
aXRlQ2FsbGJhY2spOworICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfV1JJ
VEVEQVRBLCB0aGlzKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX0hF
QURFUkZVTkNUSU9OLCBoZWFkZXJDYWxsYmFjayk7CisgICAgY3VybF9lYXN5X3NldG9wdChtX2hh
bmRsZSwgQ1VSTE9QVF9XUklURUhFQURFUiwgdGhpcyk7CisgICAgY3VybF9lYXN5X3NldG9wdCht
X2hhbmRsZSwgQ1VSTE9QVF9BVVRPUkVGRVJFUiwgMSk7CisgICAgY3VybF9lYXN5X3NldG9wdCht
X2hhbmRsZSwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgMSk7CisgICAgY3VybF9lYXN5X3NldG9w
dChtX2hhbmRsZSwgQ1VSTE9QVF9NQVhSRURJUlMsIDEwKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0
KG1faGFuZGxlLCBDVVJMT1BUX0hUVFBBVVRILCBDVVJMQVVUSF9BTlkpOworICAgIGN1cmxfZWFz
eV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfU0hBUkUsIG1fY3VybFNoYXJlSGFuZGxlKTsKKyAg
ICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX0ROU19DQUNIRV9USU1FT1VULCA2
MCAqIDUpOyAvLyA1IG1pbnV0ZXMKKyAgICAvLyBGSVhNRTogRW5hYmxlIFNTTCB2ZXJpZmljYXRp
b24gd2hlbiB3ZSBoYXZlIGEgd2F5IG9mIHNoaXBwaW5nIGNlcnRzCisgICAgLy8gYW5kL29yIHJl
cG9ydGluZyBTU0wgZXJyb3JzIHRvIHRoZSB1c2VyLgorICAgIGlmIChpZ25vcmVTU0xFcnJvcnMp
CisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfU1NMX1ZFUklGWVBF
RVIsIGZhbHNlKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX0VOQ09E
SU5HLCAiIik7CisKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1VSTCwg
bV91cmwpOworCisKKyAgICBpZiAobV9yZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSAiR0VUIikKKyAg
ICAgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9IVFRQR0VULCBUUlVFKTsK
KyAgICBlbHNlIGlmIChtX3JlcXVlc3QuaHR0cE1ldGhvZCgpID09ICJQT1NUIikKKyAgICAgICAg
c2V0dXBQT1NUKCk7CisgICAgZWxzZSBpZiAobV9yZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSAiUFVU
IikKKyAgICAgICAgc2V0dXBQVVQoKTsKKyAgICBlbHNlIGlmIChtX3JlcXVlc3QuaHR0cE1ldGhv
ZCgpID09ICJIRUFEIikKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9Q
VF9OT0JPRFksIFRSVUUpOworCisgICAgLy8geG1sSHR0cFJlcXVlc3Qgc2VlIHhtbC94bWxodHRw
cmVxdWVzdC5jcHAKKyAgICBpZiAobV9yZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKS5zaXplKCkg
PiAwKSB7CisgICAgICAgIEhUVFBIZWFkZXJNYXAgY3VzdG9tSGVhZGVycyA9ICBtX3JlcXVlc3Qu
aHR0cEhlYWRlckZpZWxkcygpOworICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBjdXN0b21IZWFkZXJzLmVuZCgpOworICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VzdG9tSGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgICAgIFN0cmluZyBrZXkgPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBT
dHJpbmcgdmFsdWUgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgU3RyaW5nIGhlYWRlclN0cmlu
ZyhrZXkpOworICAgICAgICAgICAgaGVhZGVyU3RyaW5nLmFwcGVuZCgiOiAiKTsKKyAgICAgICAg
ICAgIGhlYWRlclN0cmluZy5hcHBlbmQodmFsdWUpOworICAgICAgICAgICAgQ1N0cmluZyBoZWFk
ZXJMYXRpbjEgPSBoZWFkZXJTdHJpbmcubGF0aW4xKCk7CisgICAgICAgICAgICBtX2N1c3RvbUhl
YWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChtX2N1c3RvbUhlYWRlcnMsaGVhZGVyTGF0aW4xLmRh
dGEoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fY3VzdG9tSGVhZGVycykKKyAgICAgICAg
ICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfSFRUUEhFQURFUiwgbV9jdXN0
b21IZWFkZXJzKTsKKyAgICB9CisKKyAgICBpZiAobV9jb29raWVKYXJGaWxlTmFtZSkgeworICAg
ICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX0NPT0tJRUZJTEUsIG1fY29v
a2llSmFyRmlsZU5hbWUpOworICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJM
T1BUX0NPT0tJRUpBUiwgbV9jb29raWVKYXJGaWxlTmFtZSk7CisgICAgfQorCisgICAgaWYgKCFz
eW5jaHJvbm91cykgeworICAgICAgICBtX2N1cmxNdWx0aUhhbmRsZSA9IGN1cmxfbXVsdGlfaW5p
dCgpOworICAgICAgICBpZiAobV9tYW5hZ2VyKQorICAgICAgICAgICAgY3VybF9tdWx0aV9zZXRv
cHQobV9jdXJsTXVsdGlIYW5kbGUsIENVUkxNT1BUX1NPQ0tFVEZVTkNUSU9OLCBzb2NrZXRDYWxs
YmFjayk7CisgICAgICAgIC8vY3VybF9tdWx0aV9zZXRvcHQobV9jdXJsTXVsdGlIYW5kbGUsQ1VS
TE1PUFRfUElQRUxJTklORywxKTsKKyAgICAgICAgY3VybF9tdWx0aV9zZXRvcHQobV9jdXJsTXVs
dGlIYW5kbGUsIENVUkxNT1BUX1NPQ0tFVERBVEEsdGhpcyk7CisgICAgICAgIGN1cmxfbXVsdGlf
c2V0b3B0KG1fY3VybE11bHRpSGFuZGxlLCBDVVJMTU9QVF9USU1FUkZVTkNUSU9OLHRpbWVyQ2Fs
bGJhY2spOworICAgICAgICBjdXJsX211bHRpX3NldG9wdChtX2N1cmxNdWx0aUhhbmRsZSwgQ1VS
TE1PUFRfVElNRVJEQVRBLHRoaXMpOworICAgICAgICBDVVJMTWNvZGUgcmV0ID0gY3VybF9tdWx0
aV9hZGRfaGFuZGxlKG1fY3VybE11bHRpSGFuZGxlLCBtX2hhbmRsZSk7CisgICAgICAgIC8vIERv
bid0IGNhbGwgcGVyZm9ybSwgYmVjYXVzZSBldmVudHMgbXVzdCBiZSBhc3luYworICAgICAgICAv
LyB0aW1lb3V0IHdpbGwgb2NjdXIgYW5kIGRvIGN1cmxfbXVsdGlfcGVyZm9ybQorICAgICAgICBp
ZiAocmV0ICYmIHJldCAhPSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk0pIHsKKyAgICAgICAgICAg
IFN0cmluZyBlcnIgPSBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKG1fcmVxdWVzdC51cmwo
KS5zdHJpbmcoKSk7CisgICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yICVkIHN0YXJ0aW5nIGpv
YiAlc1xuIiwgcmV0LGVyci5sYXRpbjEoKS5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorICAgIHNldFRpbWVvdXQoMCk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6aW5pdENVUkwoKQoreworICAg
IHN0YXRpYyBib29sIGluaXRpYWxpemVkOworICAgIGlmIChpbml0aWFsaXplZCkKKyAgICAgICAg
cmV0dXJuOworICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAvLyBDb21tZW50IG91dCB0aGlz
IGxpbmUgdG8gY2F1c2UgcG9sbGluZyBmb3IgdGVzdGluZworICAgIG1fbWFuYWdlciA9IFJlc291
cmNlSGFuZGxlTWFuYWdlcjo6c2hhcmVkSW5zdGFuY2UoKTsKKyAgICBpZiAobV9tYW5hZ2VyKQor
ICAgICAgICBtX2Nvb2tpZUphckZpbGVOYW1lID0gc3RyZHVwKChjaGFyKiltX21hbmFnZXItPmdl
dENvb2tpZUphckZpbGVOYW1lKCkpOworICAgIGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxf
QUxMKTsKKyAgICBtX2N1cmxTaGFyZUhhbmRsZSA9IGN1cmxfc2hhcmVfaW5pdCgpOworICAgIGN1
cmxfc2hhcmVfc2V0b3B0KG1fY3VybFNoYXJlSGFuZGxlLCBDVVJMU0hPUFRfU0hBUkUsIENVUkxf
TE9DS19EQVRBX0NPT0tJRSk7CisgICAgY3VybF9zaGFyZV9zZXRvcHQobV9jdXJsU2hhcmVIYW5k
bGUsIENVUkxTSE9QVF9TSEFSRSwgQ1VSTF9MT0NLX0RBVEFfRE5TKTsKK30KKworLyoqCisgKiBj
aGVjayBmb3IgbWVzc2FnZXMKKyAqLwordm9pZCBSZXNvdXJjZUhhbmRsZUludGVybmFsOjpjaGVj
a01lc3NhZ2VzKCkKK3sKKyAgICBpbnQgaGFuZGxlcyA9IDA7CisgICAgaW50IG1lc3NhZ2VzSW5R
dWV1ZSA9IDA7CisgICAgYm9vbCBmaW5pc2hlZCA9IGZhbHNlOworCisgICAgaWYgKG1fY2FuY2Vs
bGVkKQorICAgICAgICByZXR1cm47CisgICAgS1VSTCBrdXJsID0gbV9yZXF1ZXN0LnVybCgpOwor
CisgICAgaWYgKGt1cmwucHJvdG9jb2xJcygiZGF0YSIpKSB7CisgICAgICAgIHBhcnNlRGF0YVVy
bCh0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEJsb2NrIGRlbGV0ZSB3
aGlsZSBpbiBjdXJsIGNhbGxzCisgICAgbV9sb2FkZXItPnJlZigpOworCisKKyAgICBpZiAobV9t
YW5hZ2VyKQorICAgICAgICB3aGlsZSAoIW1fY2FuY2VsbGVkICYmIGN1cmxfbXVsdGlfc29ja2V0
X2FsbChtX2N1cmxNdWx0aUhhbmRsZSwgJmhhbmRsZXMpID09IENVUkxNX0NBTExfTVVMVElfUEVS
Rk9STSkge30KKyAgICBlbHNlIHsKKyAgICAgICAgZmRfc2V0IGZkcmVhZDsKKyAgICAgICAgZmRf
c2V0IGZkd3JpdGU7CisgICAgICAgIGZkX3NldCBmZGV4Y2VwOworICAgICAgICBpbnQgbWF4ZmQg
PSAwOworICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0OworICAgICAgICB0aW1lb3V0LnR2
X3NlYyA9IDA7CisgICAgICAgIHRpbWVvdXQudHZfdXNlYyA9IHNlbGVjdFRpbWVvdXRNUyAqIDEw
MDA7ICAgICAgIC8vIFNlbGVjdCB3YWl0cyBtaWNyb3NlY29uZHMKKyAgICAgICAgLy8gVGVtcG9y
YXJpbHkgZGlzYWJsZSB0aW1lcnMgc2luY2Ugc2lnbmFscyBtYXkgaW50ZXJydXB0IHNlbGVjdCgp
LCByYWlzaW5nIEVJTlRSIGVycm9ycyBvbiBzb21lIHBsYXRmb3JtcworICAgICAgICBzZXREZWZl
cnJpbmdUaW1lcnModHJ1ZSk7CisgICAgICAgIGludCByYyA9IDA7CisgICAgICAgIGRvIHsKKyAg
ICAgICAgICAgIEZEX1pFUk8oJmZkcmVhZCk7CisgICAgICAgICAgICBGRF9aRVJPKCZmZHdyaXRl
KTsKKyAgICAgICAgICAgIEZEX1pFUk8oJmZkZXhjZXApOworICAgICAgICAgICAgY3VybF9tdWx0
aV9mZHNldChtX2N1cmxNdWx0aUhhbmRsZSwgJmZkcmVhZCwgJmZkd3JpdGUsICZmZGV4Y2VwLCAm
bWF4ZmQpOworICAgICAgICAgICAgLy8gV2hlbiB0aGUgMyBmaWxlIGRlc2NyaXB0b3JzIGFyZSBl
bXB0eSwgd2luc29jayB3aWxsIHJldHVybiAtMQorICAgICAgICAgICAgLy8gYW5kIGJhaWwgb3V0
LCBzdG9wcGluZyB0aGUgZmlsZSBkb3dubG9hZC4gU28gbWFrZSBzdXJlIHdlCisgICAgICAgICAg
ICAvLyBoYXZlIHZhbGlkIGZpbGUgZGVzY3JpcHRvcnMgYmVmb3JlIGNhbGxpbmcgc2VsZWN0Lgor
ICAgICAgICAgICAgaWYgKG1heGZkID49IDApCisgICAgICAgICAgICAgICAgcmMgPSA6OnNlbGVj
dChtYXhmZCArIDEsICZmZHJlYWQsICZmZHdyaXRlLCAmZmRleGNlcCwgJnRpbWVvdXQpOworICAg
ICAgICB9IHdoaWxlICghbV9jYW5jZWxsZWQgJiYgcmMgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIp
OworICAgICAgICBzZXREZWZlcnJpbmdUaW1lcnMoZmFsc2UpOworICAgICAgICBpZiAobV9jYW5j
ZWxsZWQpCisgICAgICAgICAgICBnb3RvIEZJTklTSEVEOworCisgICAgICAgIGlmICgtMSA9PSBy
YykgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgIHBlcnJvcigiYmFkOiBzZWxlY3QoKSBy
ZXR1cm5lZCAtMTogIik7CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIHdoaWxlICghbV9jYW5jZWxsZWQgJiYgY3VybF9tdWx0aV9wZXJmb3JtKG1fY3Vy
bE11bHRpSGFuZGxlLCAmaGFuZGxlcykgPT0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNKSB7IH0K
KyAgICB9CisgICAgaWYgKG1fY2FuY2VsbGVkKQorICAgICAgICBnb3RvIEZJTklTSEVEOworCisg
ICAgLy8gQ2hlY2sgdGhlIGN1cmwgbWVzc2FnZXMgaW5kaWNhdGluZyBjb21wbGV0ZWQgdHJhbnNm
ZXJzCisgICAgLy8gYW5kIGZyZWUgdGhlaXIgcmVzb3VyY2VzCisgICAgd2hpbGUgKENVUkxNc2cq
IG1zZyA9IGN1cmxfbXVsdGlfaW5mb19yZWFkKG1fY3VybE11bHRpSGFuZGxlLCAmbWVzc2FnZXNJ
blF1ZXVlKSkgeworCisgICAgICAgIGlmIChtX2NhbmNlbGxlZCkKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGlmIChtc2ctPm1zZyA9PSBDVVJMTVNHX0RPTkUpIHsKKyAgICAgICAgICAg
IGZpbmlzaGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIC8vIEZpbmQgdGhlIG5vZGUgd2hpY2ggaGFz
IHNhbWUgbV9oYW5kbGUgYXMgY29tcGxldGVkIHRyYW5zZmVyCisgICAgICAgICAgICBpZiAobXNn
LT5kYXRhLnJlc3VsdCAhPSBDVVJMRV9PSykgeworICAgICAgICAgICAgICAgIExPR19FUlJPUigi
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6ZXJyb3JbJXNdICVzOiVzXG4iLGVycm9yX2J1ZmZlcixj
dXJsX2Vhc3lfc3RyZXJyb3IobXNnLT5kYXRhLnJlc3VsdCksbV91cmwpOworICAgICAgICAgICAg
ICAgIEtVUkwgdXJsKG1fdXJsKTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUVycm9yIGpvYkVy
cm9yKHVybC5ob3N0KCksIC0xLCB1cmwuc3RyaW5nKCksIFN0cmluZyhjdXJsX2Vhc3lfc3RyZXJy
b3IobXNnLT5kYXRhLnJlc3VsdCkpKTsKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkRmFp
bChtX2xvYWRlciwgam9iRXJyb3IpOyAvL2RpZEZhaWwgcmVsZWFzZSByZXNvdXJjZXMuCisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2Fk
aW5nKG1fbG9hZGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8v
IEZJWE1FOiBjdXJsIHN0aWxsIG5lZWRzIHNvbWUgcG9sbGluZyBmb3IgbWVzc2FnZXMgOigKKyAg
ICAvLyBhbmQgaXMgbm90IHNlbmRpbmcgYSBuZXcgdGltZW91dCBldmVyeSB0aW1lIGl0cyBuZWVk
ZWQKKyAgICAvLyBUaGlzIHNob3VsZCBiZSByZW1vdmVkIG9uY2UgdGltZW91dHMgZ2V0IGEgYml0
IGJldHRlcgorICAgIGlmICghZmluaXNoZWQgJiYgIW1fY2FuY2VsbGVkICYmICghbV9tYW5hZ2Vy
IHx8ICFtX29wZW5GaWxlSGFuZGxlcykpCisgICAgICAgIHNldFRpbWVvdXQoMTApOworCisgICAg
RklOSVNIRUQ6CisgICAgbV9sb2FkZXItPmRlcmVmKCk7CisKK30KKworCisKK3ZvaWQgIFJlc291
cmNlSGFuZGxlSW50ZXJuYWw6OnNldHVwUFVUKCkKK3sKKyAgICBpZiAobV9yZXF1ZXN0Lmh0dHBN
ZXRob2QoKSAhPSAiUFVUIikKKyAgICAgICAgcmV0dXJuOworICAgIGN1cmxfZWFzeV9zZXRvcHQo
bV9oYW5kbGUsIENVUkxPUFRfVVBMT0FELCBUUlVFKSA7CisgICAgc3RydWN0IGN1cmxfc2xpc3Qg
KnNsaXN0PU5VTEw7CisgICAgLy8gRklYTUU6IGhtbW0gZGlzYWJsZSBFeHBlY3Q6IDEwMC1jb250
aW51ZQorICAgIC8vc2xpc3QgPSBjdXJsX3NsaXN0X2FwcGVuZChzbGlzdCwiRXhwZWN0OiIpOwor
ICAgIC8vanVzdCBzdXBwcm90IEh0dHAgMS4xIGNodW5ja2VkIGVuY29kaW5nIG5vdworICAgIHNs
aXN0ID0gY3VybF9zbGlzdF9hcHBlbmQoc2xpc3QsICJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtl
ZCIpOworICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfSFRUUEhFQURFUiwg
c2xpc3QpOworICAgIG1fY3VzdG9tUG9zdEhlYWRlcnMgPSBzbGlzdDsKK30KKwordm9pZCAgUmVz
b3VyY2VIYW5kbGVJbnRlcm5hbDo6c2V0dXBQT1NUKCkKK3sKKyAgICBWZWN0b3I8Rm9ybURhdGFF
bGVtZW50PiBlbGVtZW50czsKKyAgICBpZiAobV9yZXF1ZXN0Lmh0dHBCb2R5KCkpCisgICAgICAg
IGVsZW1lbnRzID0gbV9yZXF1ZXN0Lmh0dHBCb2R5KCktPmVsZW1lbnRzKCk7CisKKyAgICBzaXpl
X3QgbnVtRWxlbWVudHMgPSBlbGVtZW50cy5zaXplKCk7CisKKyAgICBpZiAoIW51bUVsZW1lbnRz
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3JlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKCJQ
cm9wYWdhdGVIdHRwSGVhZGVyIiwgInRydWUiKTsKKyAgICBtX3JlcXVlc3Quc2V0SFRUUENvbnRl
bnRUeXBlKCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIp
OworCisjaWYgMAorICAgIC8vIERpc2FibGUgRXhwZWN0OiAxMDAtY29udGludWUKKyAgICB7Cisg
ICAgICAgIHN0cnVjdCBjdXJsX3NsaXN0ICpzbGlzdCA9IE5VTEw7CisgICAgICAgIHNsaXN0ID0g
Y3VybF9zbGlzdF9hcHBlbmQoc2xpc3QsICJFeHBlY3Q6Iik7CisgICAgICAgIGN1cmxfZWFzeV9z
ZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfSFRUUEhFQURFUiwgc2xpc3QpOworICAgICAgICBtX2N1
c3RvbVBvc3RIZWFkZXJzID0gc2xpc3Q7CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBEbyBub3Qg
c3RyZWFtIGZvciBzaW1wbGUgUE9TVCBkYXRhCisgICAgaWYgKG51bUVsZW1lbnRzID09IDEpIHsK
KyAgICAgICAgbV9yZXF1ZXN0Lmh0dHBCb2R5KCktPmZsYXR0ZW4obV9wb3N0Qnl0ZXMpOworICAg
ICAgICBpZiAobV9wb3N0Qnl0ZXMuc2l6ZSgpICE9IDApIHsKKyAgICAgICAgICAgIGN1cmxfZWFz
eV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfUE9TVCwgVFJVRSk7CisgICAgICAgICAgICBjdXJs
X2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1BPU1RGSUVMRFNJWkUsIG1fcG9zdEJ5dGVz
LnNpemUoKSk7CisgICAgICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BU
X1BPU1RGSUVMRFMsIG1fcG9zdEJ5dGVzLmRhdGEoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIE9idGFpbiB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgUE9TVAor
ICAgIHN0YXRpYyBjb25zdCBsb25nIGxvbmcgbWF4Q3VybE9mZlQgPSAoMUxMIDw8IChzaXplb2Yo
Y3VybF9vZmZfdCkgKiA4IC0gMSkpIC0gMTsKKyAgICBjdXJsX29mZl90IHNpemUgPSAwOworICAg
IGJvb2wgY2h1bmtlZFRyYW5zZmVyID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBudW1FbGVtZW50czsgaSsrKSB7CisgICAgICAgIEZvcm1EYXRhRWxlbWVudCBlbGVtZW50ID0g
ZWxlbWVudHNbaV07CisgICAgICAgIGlmIChlbGVtZW50Lm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1l
bnQ6OmVuY29kZWRGaWxlKSB7CisgICAgICAgICAgICBsb25nIGxvbmcgZmlsZVNpemVSZXN1bHQ7
CisjaWYgMCAvLyBGSVhNRTogTm90IHVzZWQgaW4gY3VybCBpcyB0aGlzIG5lZWRlZCA/CisgICAg
ICAgICAgICBzdHJ1Y3QgY3VybF9odHRwcG9zdCAqbGFzdHB0ciA9IE5VTEw7CisKKyAgICAgICAg
ICAgIC8va2VlcCByZWYgaGVyZSBzbyBpdHMgbm90IGZyZWVkCisgICAgICAgICAgICBtX3Bvc3RG
aWxlTmFtZSA9IHN0cmR1cChlbGVtZW50c1tpXS5tX2ZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkpOwor
CisgICAgICAgICAgICAvLyBGaWxsIGluIHRoZSBmaWxlIHVwbG9hZCBmaWVsZAorICAgICAgICAg
ICAgY3VybF9mb3JtYWRkKCZtX2ZpbGVQb3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICZs
YXN0cHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxGT1JNX0NPUFlOQU1FLCAic2Vu
ZGZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxGT1JNX0ZJTEUsIG1fcG9zdEZp
bGVOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIENVUkxGT1JNX0VORCk7CisKKyAgICAg
ICAgICAgIC8qIEZpbGwgaW4gdGhlIGZpbGVuYW1lIGZpZWxkICovCisgICAgICAgICAgICBjdXJs
X2Zvcm1hZGQoJm1fZmlsZVBvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgJmxhc3RwdHIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTEZPUk1fQ09QWU5BTUUsICJmaWxlbmFtZSIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgQ1VSTEZPUk1fQ09QWUNPTlRFTlRTLCBtX3Bvc3RG
aWxlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDVVJMRk9STV9FTkQpOworCisgICAg
ICAgICAgICAvKiBGaWxsIGluIHRoZSBzdWJtaXQgZmllbGQgdG9vLCBldmVuIGlmIHRoaXMgaXMg
cmFyZWx5IG5lZWRlZCAqLworICAgICAgICAgICAgY3VybF9mb3JtYWRkKCZtX2ZpbGVQb3N0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICZsYXN0cHRyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIENVUkxGT1JNX0NPUFlOQU1FLCAic3VibWl0IiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBDVVJMRk9STV9DT1BZQ09OVEVOVFMsICJzZW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBDVVJMRk9STV9FTkQpOworI2VuZGlmCisgICAgICAgICAgICBpZiAoZ2V0RmlsZVNpemUoZWxl
bWVudC5tX2ZpbGVuYW1lLCBmaWxlU2l6ZVJlc3VsdCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
ZmlsZVNpemVSZXN1bHQgPiBtYXhDdXJsT2ZmVCkgeworICAgICAgICAgICAgICAgICAgICAvLyBG
aWxlIHNpemUgaXMgdG9vIGJpZyBmb3Igc3BlY2lmeWluZyBpdCB0byBjVVJMCisgICAgICAgICAg
ICAgICAgICAgIGNodW5rZWRUcmFuc2ZlciA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzaXplICs9IGZpbGVTaXpl
UmVzdWx0OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjaHVua2VkVHJh
bnNmZXIgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNpemUgKz0gZWxlbWVudHNbaV0ubV9kYXRhLnNpemUo
KTsKKyAgICB9CisKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1BPU1Qs
IFRSVUUpOworCisgICAgLy8gQ1VSTCBndWVzc2VzIHRoYXQgd2Ugd2FudCBjaHVua2VkIGVuY29k
aW5nIGFzIGxvbmcgYXMgd2Ugc3BlY2lmeSB0aGUgaGVhZGVyCisgICAgaWYgKGNodW5rZWRUcmFu
c2ZlcikKKyAgICAgICAgbV9jdXN0b21IZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQobV9jdXN0
b21IZWFkZXJzLCAiVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQiKTsKKyAgICBlbHNlCisgICAg
ICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfUE9TVEZJRUxEU0laRV9MQVJH
RSwgc2l6ZSk7CisKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1JFQURG
VU5DVElPTiwgcmVhZENhbGxiYWNrKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBD
VVJMT1BUX1JFQUREQVRBLCB0aGlzKTsKK30KKworCit2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJu
YWw6OmNhbmNlbCgpCit7CisgICAgbV9jYW5jZWxsZWQgPSB0cnVlOworfQorCisKKworCit2b2lk
IFJlc291cmNlSGFuZGxlSW50ZXJuYWw6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUVycm9yJiBlcnJvciwKKyAgICAgICAg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSwgRnJhbWUqKQor
eworICAgIENVUkxjb2RlIHJldCA9IENVUkxFX09LOworCisgICAgQVNTRVJUKDApOworICAgIFJl
c291cmNlSGFuZGxlSW50ZXJuYWwqIGpvYiA9IG5ldyBSZXNvdXJjZUhhbmRsZUludGVybmFsKDAs
cmVxdWVzdCwwLGZhbHNlLGZhbHNlLHRydWUpOworICAgIGpvYi0+c3RhcnQoMCx0cnVlKTsKKyAg
ICAvLyBEYXRhIHVybCBpcyBmaW5pc2hlZAorICAgIEtVUkwga3VybCA9IHJlcXVlc3QudXJsKCk7
CisgICAgaWYgKGt1cmwucHJvdG9jb2xJcygiZGF0YSIpKQorICAgICAgICByZXR1cm47CisKKyAg
ICByZXQgPSBjdXJsX2Vhc3lfcGVyZm9ybShqb2ItPm1faGFuZGxlKTsKKworICAgIGlmIChyZXQg
IT0gQ1VSTEVfT0spIHsKKyAgICAgICAgZXJyb3IgPSBSZXNvdXJjZUVycm9yKFN0cmluZyhqb2It
Pm1fdXJsKSwgcmV0LCBTdHJpbmcoam9iLT5tX3VybCksIFN0cmluZyhjdXJsX2Vhc3lfc3RyZXJy
b3IocmV0KSkpOworICAgIH0KKyAgICByZXNwb25zZSA9IGpvYi0+bV9yZXNwb25zZTsKKyAgICBk
YXRhID0gam9iLT5tX3Jlc3VsdERhdGE7CisgICAgZGVsZXRlIGpvYjsKK30KKwordm9pZCBSZXNv
dXJjZUhhbmRsZUludGVybmFsOjpzZXRUaW1lb3V0KGxvbmcgdGltZW91dCkKK3sKKyAgICBsb25n
IHRtOworICAgIGlmIChtX2NhbmNlbGxlZCkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY3VybF9tdWx0aV90aW1lb3V0KG1fY3VybE11bHRpSGFuZGxlLCZ0bSk7CisgICAgLyotMSBt
ZWFucyBDdXJsIGRvZXMgbm90IGtub3cgdGhlIHRpbWUgdG8gd2FpdCBqdXN0IGN5Y2xlICovCisg
ICAgaWYgKHRpbWVvdXQgPT0gLTEpCisgICAgICAgIHRpbWVvdXQgPSAxMDsKKyAgICBlbHNlIGlm
ICh0aW1lb3V0ID09IDApCisgICAgICAgIHRpbWVvdXQgPSAxMDsKKyAgICBlbHNlCisgICAgICAg
IHRpbWVvdXQgPSA1MDsgLy8gU2VlIGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAwNy0w
Ny8wMzM1Lmh0bWwgSSdtIG5vdCBnZXR0aW5nIGEgZGVjZW50IHRpbWVvdXQKKworICAgIGRvdWJs
ZSBzZWNzID0gdGltZW91dC8xMDAwLjA7CisKKyAgICBtX2Rvd25sb2FkVGltZXIuc3RvcCgpOwor
ICAgIG1fZG93bmxvYWRUaW1lci5zdGFydE9uZVNob3Qoc2Vjcyk7Cit9CisKK30KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9uY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9uY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjE4OWZmCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL25jdXJsL1Jlc291cmNlSGFuZGxlTWFu
YWdlci5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFJlc291cmNlSGFuZGxlTWFuYWdlcl9oCisjZGVmaW5lIFJl
c291cmNlSGFuZGxlTWFuYWdlcl9oCisKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlRp
bWVyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKKworI2luY2x1ZGUgPGN1
cmwvY3VybC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBSZXNvdXJjZUhhbmRsZUludGVybmFsOworCitjbGFzcyBSZXNvdXJjZUhhbmRs
ZU1hbmFnZXIKK3sKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyKiBz
aGFyZWRJbnN0YW5jZSgpOworICAgIHZvaWQqIGFkZEZpbGVIYW5kbGVEYXRhU291cmNlKFJlc291
cmNlSGFuZGxlSW50ZXJuYWwqLCBjdXJsX3NvY2tldF90LCBpbnQgbWFzayk7CisgICAgdm9pZCBy
ZW1vdmVGaWxlSGFuZGxlRGF0YVNvdXJjZShSZXNvdXJjZUhhbmRsZUludGVybmFsKiwgY3VybF9z
b2NrZXRfdCwgdm9pZCogZGF0YSk7CisgICAgdm9pZCBzZXRDb29raWVKYXJGaWxlTmFtZShjaGFy
KiBjb29raWVKYXJGaWxlTmFtZSkKKyAgICB7CisgICAgICAgIG1fY29va2llSmFyRmlsZU5hbWUg
PSBjb29raWVKYXJGaWxlTmFtZTsKKyAgICB9CisgICAgY29uc3QgY2hhciogZ2V0Q29va2llSmFy
RmlsZU5hbWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29va2llSmFyRmlsZU5hbWU7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIFJlc291cmNlSGFuZGxlTWFuYWdlcigpOworICAgIH5SZXNv
dXJjZUhhbmRsZU1hbmFnZXIoKTsKKyAgICBjaGFyKiBtX2Nvb2tpZUphckZpbGVOYW1lOworfTsK
KworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9uY3Vy
bC9SZXNvdXJjZVJlcXVlc3QuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9uY3VybC9SZXNv
dXJjZVJlcXVlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTMwZTY4
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL25jdXJsL1Jlc291
cmNlUmVxdWVzdC5oCkBAIC0wLDAgKzEsNjggQEAKKy8vIC0qLSBtb2RlOiBjKys7IGMtYmFzaWMt
b2Zmc2V0OiA0IC0qLQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBT
YW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJlc291
cmNlUmVxdWVzdF9oCisjZGVmaW5lIFJlc291cmNlUmVxdWVzdF9oCisKKyNpbmNsdWRlICJSZXNv
dXJjZVJlcXVlc3RCYXNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IFJlc291
cmNlUmVxdWVzdCA6IFJlc291cmNlUmVxdWVzdEJhc2UKK3sKKworICAgIFJlc291cmNlUmVxdWVz
dChjb25zdCBTdHJpbmcmIHVybCkKKyAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKEtVUkwo
dXJsKSwgVXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKKyAgICB7CisgICAgfQorCisgICAgUmVzb3Vy
Y2VSZXF1ZXN0KGNvbnN0IEtVUkwmIHVybCkKKyAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNl
KHVybCwgVXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKKyAgICB7CisgICAgfQorCisgICAgUmVzb3Vy
Y2VSZXF1ZXN0KGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgUmVzb3Vy
Y2VSZXF1ZXN0Q2FjaGVQb2xpY3kgcG9saWN5ID0gVXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKKyAg
ICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKHVybCwgcG9saWN5KQorICAgIHsKKyAgICAgICAg
c2V0SFRUUFJlZmVycmVyKHJlZmVycmVyKTsKKyAgICB9CisKKyAgICBSZXNvdXJjZVJlcXVlc3Qo
KQorICAgICAgICA6IFJlc291cmNlUmVxdWVzdEJhc2UoS1VSTCgpLCBVc2VQcm90b2NvbENhY2hl
UG9saWN5KQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFJlc291
cmNlUmVxdWVzdEJhc2U7CisKKyAgICB2b2lkIGRvVXBkYXRlUGxhdGZvcm1SZXF1ZXN0KCkge30K
KyAgICB2b2lkIGRvVXBkYXRlUmVzb3VyY2VSZXF1ZXN0KCkge30KK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFJlc291cmNlUmVxdWVzdF9oCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbmN1cmwvUmVzb3VyY2VSZXNwb25zZS5oIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL25jdXJsL1Jlc291cmNlUmVzcG9uc2UuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzYwMzA3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL25jdXJsL1Jlc291cmNlUmVzcG9uc2UuaApAQCAtMCwwICsxLDc1
IEBACisvLyAtKi0gbW9kZTogYysrOyBjLWJhc2ljLW9mZnNldDogNCAtKi0KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBSZXNvdXJjZVJlc3BvbnNlX2gKKyNkZWZpbmUgUmVzb3VyY2VSZXNw
b25zZV9oCisKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlQmFzZS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFJlc291cmNlUmVzcG9uc2UgOiBwdWJsaWMgUmVzb3VyY2VSZXNw
b25zZUJhc2UKK3sKK3B1YmxpYzoKKyAgICBSZXNvdXJjZVJlc3BvbnNlKCkKKyAgICAgICAgOiBS
ZXNvdXJjZVJlc3BvbnNlQmFzZSgpLAorICAgICAgICAgICAgbV9yZXNwb25zZUZpcmVkKGZhbHNl
KQorICAgIHsKKyAgICB9CisKKyAgICBSZXNvdXJjZVJlc3BvbnNlKGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgbG9uZyBsb25nIGV4cGVjdGVkTGVuZ3RoLCBjb25zdCBT
dHJpbmcmIHRleHRFbmNvZGluZ05hbWUsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCisgICAgICAg
IDogUmVzb3VyY2VSZXNwb25zZUJhc2UodXJsLCBtaW1lVHlwZSwgZXhwZWN0ZWRMZW5ndGgsIHRl
eHRFbmNvZGluZ05hbWUsIGZpbGVuYW1lKSwKKyAgICAgICAgICAgIG1fcmVzcG9uc2VGaXJlZChm
YWxzZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBzZXRSZXNwb25zZUZpcmVkKGJvb2wgZmly
ZWQpCisgICAgeworICAgICAgICBtX3Jlc3BvbnNlRmlyZWQgPSBmaXJlZDsKKyAgICB9CisgICAg
Ym9vbCByZXNwb25zZUZpcmVkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Jlc3BvbnNlRmly
ZWQ7CisgICAgfQorICAgIHZvaWQgc2V0SXNOdWxsKGJvb2wgYikKKyAgICB7CisgICAgICAgIG1f
aXNOdWxsID0gYjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFJlc291cmNl
UmVzcG9uc2VCYXNlOworCisgICAgdm9pZCBkb1VwZGF0ZVJlc291cmNlUmVzcG9uc2UoKQorICAg
IHsKKyAgICB9CisKKyAgICBib29sIG1fcmVzcG9uc2VGaXJlZDsKKworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUmVzb3VyY2VSZXNwb25zZV9oCmRpZmYgLS1naXQg
YS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggODhkYzJkYy4uNjFkMzNmMSAxMDA2
NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMjAwLDEzICsyMDAs
MTMgQEAgZmkKICMgZGV0ZXJtaW5lIHRoZSBodHRwIGJhY2tlbmQKIEFDX01TR19DSEVDS0lORyhb
dGhlIEhUVFAgYmFja2VuZCB0byB1c2VdKQogQUNfQVJHX1dJVEgoaHR0cF9iYWNrZW5kLAotICAg
ICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1odHRwLWJhY2tlbmQ9QDw6QGN1cmwvc291
cEA6PkBdLAorICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1odHRwLWJhY2tlbmQ9
QDw6QGN1cmwvbmN1cmwvc291cEA6PkBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW1Nl
bGVjdCBIVFRQIGJhY2tlbmQgW2RlZmF1bHQ9Y3VybF1dKSwKICAgICAgICAgICAgIFtdLFt3aXRo
X2h0dHBfYmFja2VuZD0iY3VybCJdKQogCiBjYXNlICIkd2l0aF9odHRwX2JhY2tlbmQiIGluCi0g
ICAgIGN1cmx8c291cCkgOzsKLSAgICAgKikgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIEhUVFAgYmFj
a2VuZDogbXVzdCBiZSBjdXJsLCBzb3VwLl0pIDs7CisgICAgIGN1cmx8bmN1cmx8c291cCkgOzsK
KyAgICAgKikgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIEhUVFAgYmFja2VuZDogbXVzdCBiZSBjdXJs
LCBuY3VybCwgc291cC5dKSA7OwogZXNhYwogCiBBQ19NU0dfUkVTVUxUKFskd2l0aF9odHRwX2Jh
Y2tlbmRdKQpAQCAtNDI1LDcgKzQyNSw3IEBAIGlmIHRlc3QgIiRlbmFibGVfZGVidWciID0gInll
cyI7IHRoZW4KIGZpCiAKICMgY2hlY2sgaWYgY3VybCBpcyBhdmFpbGFibGUKLWlmIHRlc3QgIiR3
aXRoX2h0dHBfYmFja2VuZCIgPSAiY3VybCI7IHRoZW4KK2lmIHRlc3QgIiR3aXRoX2h0dHBfYmFj
a2VuZCIgPSAiY3VybCIgfHwgdGVzdCAiJHdpdGhfaHR0cF9iYWNrZW5kIiA9ICJuY3VybCI7IHRo
ZW4KICAgIFBLR19DSEVDS19NT0RVTEVTKFtMSUJDVVJMXSwKICAgICAgICAgICAgICAgICAgICAg
IFtsaWJjdXJsID49ICRMSUJDVVJMX1JFUVVJUkVEX1ZFUlNJT05dKQogICAgQUNfU1VCU1QoW0xJ
QkNVUkxfQ0ZMQUdTXSkKQEAgLTUwMCw2ICs1MDAsNyBAQCBBTV9DT05ESVRJT05BTChbVEFSR0VU
X0RJUkVDVEZCXSwgW3Rlc3QgIiR3aXRoX3RhcmdldCIgPSAiZGlyZWN0ZmIiXSkKIAogIyBIVFRQ
IGJhY2tlbmQgY29uZGl0aW9uYWxzCiBBTV9DT05ESVRJT05BTChbVVNFX0NVUkxdLCBbdGVzdCAi
JHdpdGhfaHR0cF9iYWNrZW5kIiA9ICJjdXJsIl0pCitBTV9DT05ESVRJT05BTChbVVNFX05DVVJM
XSwgW3Rlc3QgIiR3aXRoX2h0dHBfYmFja2VuZCIgPSAibmN1cmwiXSkKIEFNX0NPTkRJVElPTkFM
KFtVU0VfU09VUF0sIFt0ZXN0ICIkd2l0aF9odHRwX2JhY2tlbmQiID0gInNvdXAiXSkKIAogIyBG
b250IGJhY2tlbmQgY29uZGl0aW9uYWxzCg==
</data>
<flag name="review"
          id="9050"
          type_id="1"
          status="-"
          setter="jmalonzo"
    />
          </attachment>
      

    </bug>

</bugzilla>