<?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>55149</bug_id>
          
          <creation_ts>2011-02-24 08:25:36 -0800</creation_ts>
          <short_desc>[Qt] Revert the support for QNAM affined to a different thread.</short_desc>
          <delta_ts>2011-02-25 06:00:49 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt, QtTriaged</keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jocelyn Turcotte">jturcotte</reporter>
          <assigned_to name="Jocelyn Turcotte">jturcotte</assigned_to>
          <cc>kenneth</cc>
    
    <cc>kling</cc>
    
    <cc>laszlo.gombos</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>357020</commentid>
    <comment_count>0</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-02-24 08:25:36 -0800</bug_when>
    <thetext>Qt 4.8 will have QNAM use its own thread internally by default, no need to keep this complexity in WebKit.

This mainly reverts:
http://trac.webkit.org/changeset/73710
http://trac.webkit.org/changeset/73712</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357084</commentid>
    <comment_count>1</comment_count>
      <attachid>83670</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-02-24 09:22:10 -0800</bug_when>
    <thetext>Created attachment 83670
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357094</commentid>
    <comment_count>2</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-02-24 09:29:33 -0800</bug_when>
    <thetext>Maybe we should do this after 4.8 has actually been released?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357114</commentid>
    <comment_count>3</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-02-24 09:44:03 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Maybe we should do this after 4.8 has actually been released?

There&apos;s no point in waiting. We&apos;re not going to release anything based on trunk before Qt 4.8 anyway, and that will include the threaded HTTP backend for QNAM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357806</commentid>
    <comment_count>4</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-02-25 03:09:22 -0800</bug_when>
    <thetext>Committed r79668: &lt;http://trac.webkit.org/changeset/79668&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357860</commentid>
    <comment_count>5</comment_count>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2011-02-25 05:40:23 -0800</bug_when>
    <thetext>I&apos;m with Kenneth on this one. 

QtNetwork 4.8 is not release yet, so all the benchmarking etc. we&apos;re doing for the trunk is impacted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357865</commentid>
    <comment_count>6</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-02-25 05:51:40 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; I&apos;m with Kenneth on this one. 
&gt; 
&gt; QtNetwork 4.8 is not release yet, so all the benchmarking etc. we&apos;re doing for the trunk is impacted.

What is the relevance of those benchmarks?

We already know that the next release based on trunk is going to be with Qt 4.8, and it will have threaded HTTP in-Qt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357868</commentid>
    <comment_count>7</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-02-25 06:00:49 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; I&apos;m with Kenneth on this one. 
&gt; 
&gt; QtNetwork 4.8 is not release yet, so all the benchmarking etc. we&apos;re doing for the trunk is impacted.

It&apos;s better to at least get this in *for* 4.8.
We could wait and do it in the QtWebKit 2.2 branch and merge it in trunk after. However it would make merging any network work harder between trunk and the branch.

Were you spawning you benchmark QNAM in a secondary thread?
AFAIK, only QtTestBrowser was currently doing it by default, other QtWebKit apps shouldn&apos;t feel any regression from this revert patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83670</attachid>
            <date>2011-02-24 09:22:10 -0800</date>
            <delta_ts>2011-02-24 09:44:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55149-20110224182214.patch</filename>
            <type>text/plain</type>
            <size>54616</size>
            <attacher name="Jocelyn Turcotte">jturcotte</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzk1NDIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4NTUwZTYyNWYyYTM1NTA5
NjRmZjMwZTE0Mjc4ODUxN2U1NzY1OGViLi45ZjZlYjExNjVhYTBmOWI0OWI5MDM2NjkwZjBmZWJi
ODJjMTI2OTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTEtMDItMjQgIEpvY2Vs
eW4gVHVyY290dGUgIDxqb2NlbHluLnR1cmNvdHRlQG5va2lhLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFJldmVydCB0aGUgc3VwcG9y
dCBmb3IgUU5BTSBhZmZpbmVkIHRvIGEgZGlmZmVyZW50IHRocmVhZC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1MTQ5CisKKyAgICAgICAgUXQgNC44
IHdpbGwgaGF2ZSBRTkFNIHVzZSBpdHMgb3duIHRocmVhZCBpbnRlcm5hbGx5IGJ5IGRlZmF1bHQs
CisgICAgICAgIG5vIG5lZWQgdG8ga2VlcCB0aGlzIGNvbXBsZXhpdHkgaW4gV2ViS2l0LgorCisg
ICAgICAgIFRoaXMgbWFpbmx5IHJldmVydHM6CisgICAgICAgIGh0dHA6Ly90cmFjLndlYmtpdC5v
cmcvY2hhbmdlc2V0LzczNzEwCisgICAgICAgIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdl
c2V0LzczNzEyCisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVRdDo6Y29tbWl0TG9hZCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3Jt
RGF0YUlPRGV2aWNlOjpGb3JtRGF0YUlPRGV2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlFOZXR3
b3JrUmVwbHlIYW5kbGVyOjpRTmV0d29ya1JlcGx5SGFuZGxlcik6CisgICAgICAgIChXZWJDb3Jl
OjpRTmV0d29ya1JlcGx5SGFuZGxlcjo6c2V0TG9hZE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
UU5ldHdvcmtSZXBseUhhbmRsZXI6OmFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlFOZXR3b3Jr
UmVwbHlIYW5kbGVyOjpyZWxlYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Omlnbm9yZUh0dHBFcnJv
cik6CisgICAgICAgIChXZWJDb3JlOjpRTmV0d29ya1JlcGx5SGFuZGxlcjo6ZmluaXNoKToKKyAg
ICAgICAgKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlIYW5kbGVyOjpzZW5kUmVzcG9uc2VJZk5lZWRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpRTmV0d29ya1JlcGx5SGFuZGxlcjo6Zm9yd2FyZERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6UU5ldHdvcmtSZXBseUhhbmRsZXI6OnN0YXJ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlIYW5kbGVyOjpzZW5kUXVldWVkSXRlbXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvcXQvUU5ldHdvcmtSZXBseUhhbmRsZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlIYW5kbGVyOjpyZXBseSk6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9xdC9RdE5BTVRocmVhZFNhZmVQcm94eS5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9xdC9RdE5BTVRocmVhZFNhZmVQcm94eS5oOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VIYW5kbGVRdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6d2lsbExvYWRGcm9tQ2FjaGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL3F0L0Nvb2tpZUphclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNv
b2tpZUphcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxk
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llc0VuYWJsZWQpOgorCiAyMDExLTAyLTI0
ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJl
dmlld2VkIGJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJv
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggMDZiNTYyZWRhMmYzYzFiNGMzNTY4
MTFiZjM3MjVlYTQ5OTM3NTZjYi4uNGRmMmViZWNkZmVkZTQ1NjZhOTY4MDcxZWFlNzE3OTNiNzU2
YjQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTE5NDcsNyArMTk0Nyw2IEBAIEhFQURFUlMgKz0gXAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0YXRlTm90aWZpZXIuaCBcCiAgICAgcGxhdGZv
cm0vbmV0d29yay9Qcm90ZWN0aW9uU3BhY2UuaCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9Qcm94
eVNlcnZlci5oIFwKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL3F0L1F0TkFNVGhyZWFkU2FmZVByb3h5
LmggXAogICAgIHBsYXRmb3JtL25ldHdvcmsvcXQvUU5ldHdvcmtSZXBseUhhbmRsZXIuaCBcCiAg
ICAgcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUVycm9yQmFzZS5oIFwKICAgICBwbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlSGFuZGxlLmggXApAQCAtMjQ2NCw3ICsyNDYzLDYgQEAgU09VUkNFUyAr
PSBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZUhhbmRsZVF0LmNwcCBcCiAgICAg
cGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZVJlcXVlc3RRdC5jcHAgXAogICAgIHBsYXRmb3Jt
L25ldHdvcmsvcXQvRG5zUHJlZmV0Y2hIZWxwZXIuY3BwIFwKLSAgICBwbGF0Zm9ybS9uZXR3b3Jr
L3F0L1F0TkFNVGhyZWFkU2FmZVByb3h5LmNwcCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9xdC9Q
cm94eVNlcnZlclF0LmNwcCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9xdC9RTmV0d29ya1JlcGx5
SGFuZGxlci5jcHAgXAogICAgIGVkaXRpbmcvcXQvRWRpdG9yUXQuY3BwIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJp
dmF0ZVF0LmNwcAppbmRleCA4MDZjZjJhNDc3NjlmZjJiYWRmMzZlZmZkYjZkZTFiNzRkMDgwZmYy
Li4xZmM1NDdhMjQyZDlmMmU2NWFmYmQwNjk1OGZlZWQ0YTUzMGM5ZjJhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQ
cml2YXRlUXQuY3BwCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxWaWRlb0Vs
ZW1lbnQuaCIKLSNpbmNsdWRlICJRdE5BTVRocmVhZFNhZmVQcm94eS5oIgogI2luY2x1ZGUgIk5l
dHdvcmtpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRl
ICJSZW5kZXJWaWRlby5oIgpAQCAtMjEwLDggKzIwOSw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlUXQ6OmNvbW1pdExvYWQoY29uc3QgU3RyaW5nJiB1cmwpCiAKICAgICAgICAgaWYgKG1hbmFn
ZXIpIHsKICAgICAgICAgICAgIC8vIFNldCB0aGUgY29va2llcwotICAgICAgICAgICAgUXROQU1U
aHJlYWRTYWZlUHJveHkgbWFuYWdlclByb3h5KG1hbmFnZXIpOwotICAgICAgICAgICAgUUxpc3Q8
UU5ldHdvcmtDb29raWU+IGNvb2tpZXMgPSBtYW5hZ2VyUHJveHkuY29va2llc0ZvclVybChyVXJs
KTsKKyAgICAgICAgICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBtYW5hZ2VyLT5jb29raWVK
YXIoKTsKKyAgICAgICAgICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVzID0gamFyLT5j
b29raWVzRm9yVXJsKHJVcmwpOwogCiAgICAgICAgICAgICAvLyBEb24ndCBzZXQgdGhlIGhlYWRl
ciBpZiB0aGVyZSBhcmUgbm8gY29va2llcy4KICAgICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMg
YSB3YXJuaW5nIGZyb20gYmVpbmcgZW1pdHRlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvcXQvUU5ldHdvcmtSZXBseUhhbmRsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxlci5jcHAKaW5kZXgg
OThmZDY4ZDI2ZWY3YTA1OTNiMzQyYjIyNTI3NmE4YmJhYjkyNjU0OS4uNDA2NGQ5YTQ1Nzg2Y2Zl
ZWNhNjgxOTYzNTQ3MDY0NDExZTMyZGM4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxlci5jcHAKQEAgLTIz
LDcgKzIzLDYgQEAKIAogI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVkZSAiTUlNRVR5
cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgIlF0TkFNVGhyZWFkU2FmZVByb3h5LmgiCiAjaW5jbHVk
ZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIgog
I2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKQEAgLTQ3LDcgKzQ2LDcgQEAKIC8v
IEl0IGlzIGZpeGVkIGluIFF0IDQuNi4zLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTMyMTEzCiAvLyBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTM2NzU1CiAjaWYgUVRfVkVSU0lPTiA+IFFUX1ZFUlNJT05fQ0hFQ0soNCwgNiwg
MikKLSNkZWZpbmUgU0lHTkFMX0NPTk4gUXQ6OkF1dG9Db25uZWN0aW9uCisjZGVmaW5lIFNJR05B
TF9DT05OIFF0OjpEaXJlY3RDb25uZWN0aW9uCiAjZWxzZQogI2RlZmluZSBTSUdOQUxfQ09OTiBR
dDo6UXVldWVkQ29ubmVjdGlvbgogI2VuZGlmCkBAIC01Nyw5ICs1Niw4IEBAIHN0YXRpYyBjb25z
dCBpbnQgZ01heFJlY3Vyc2lvbkxpbWl0ID0gMTA7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8v
IFRha2UgYSBkZWVwIGNvcHkgb2YgdGhlIEZvcm1EYXRhRWxlbWVudAotRm9ybURhdGFJT0Rldmlj
ZTo6Rm9ybURhdGFJT0RldmljZShGb3JtRGF0YSogZGF0YSwgUU9iamVjdCogcGFyZW50KQotICAg
IDogUUlPRGV2aWNlKHBhcmVudCkKLSAgICAsIG1fZm9ybUVsZW1lbnRzKGRhdGEgPyBkYXRhLT5l
bGVtZW50cygpIDogVmVjdG9yPEZvcm1EYXRhRWxlbWVudD4oKSkKK0Zvcm1EYXRhSU9EZXZpY2U6
OkZvcm1EYXRhSU9EZXZpY2UoRm9ybURhdGEqIGRhdGEpCisgICAgOiBtX2Zvcm1FbGVtZW50cyhk
YXRhID8gZGF0YS0+ZWxlbWVudHMoKSA6IFZlY3RvcjxGb3JtRGF0YUVsZW1lbnQ+KCkpCiAgICAg
LCBtX2N1cnJlbnRGaWxlKDApCiAgICAgLCBtX2N1cnJlbnREZWx0YSgwKQogICAgICwgbV9maWxl
U2l6ZSgwKQpAQCAtMTk0LDkgKzE5Miw2IEBAIFFOZXR3b3JrUmVwbHlIYW5kbGVyOjpRTmV0d29y
a1JlcGx5SGFuZGxlcihSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBMb2FkTW9kZSBsb2FkCiAgICAg
LCBtX3Nob3VsZEZvcndhcmREYXRhKGZhbHNlKQogICAgICwgbV9yZWRpcmVjdGlvblRyaWVzKGdN
YXhSZWN1cnNpb25MaW1pdCkKIHsKLSAgICAvLyBNYWtlIHRoaXMgYSBkaXJlY3QgZnVuY3Rpb24g
Y2FsbCBvbmNlIHdlIHJlcXVpcmUgNC42LjErLgotICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKHBy
b2Nlc3NRdWV1ZWRJdGVtcygpKSwgdGhpcywgU0xPVChzZW5kUXVldWVkSXRlbXMoKSksIFNJR05B
TF9DT05OKTsKLQogICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCAmciA9IG1fcmVzb3VyY2VIYW5k
bGUtPmZpcnN0UmVxdWVzdCgpOwogCiAgICAgaWYgKHIuaHR0cE1ldGhvZCgpID09ICJHRVQiKQpA
QCAtMjI3LDEyICsyMjIsNiBAQCBRTmV0d29ya1JlcGx5SGFuZGxlcjo6UU5ldHdvcmtSZXBseUhh
bmRsZXIoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgTG9hZE1vZGUgbG9hZAogICAgICAgICBzdGFy
dCgpOwogfQogCi1RTmV0d29ya1JlcGx5SGFuZGxlcjo6flFOZXR3b3JrUmVwbHlIYW5kbGVyKCkK
LXsKLSAgICBpZiAobV9yZXBseSkKLSAgICAgICAgbV9yZXBseS0+ZGVsZXRlTGF0ZXIoKTsKLX0K
LQogdm9pZCBRTmV0d29ya1JlcGx5SGFuZGxlcjo6c2V0TG9hZE1vZGUoTG9hZE1vZGUgbW9kZSkK
IHsKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY1NTYK
QEAgLTI0MiwyMCArMjMxLDkgQEAgdm9pZCBRTmV0d29ya1JlcGx5SGFuZGxlcjo6c2V0TG9hZE1v
ZGUoTG9hZE1vZGUgbW9kZSkKICAgICBjYXNlIExvYWROb3JtYWw6CiAgICAgICAgIG1fbG9hZE1v
ZGUgPSBMb2FkUmVzdW1pbmc7CiAgICAgICAgIGVtaXQgcHJvY2Vzc1F1ZXVlZEl0ZW1zKCk7Ci0K
LSAgICAgICAgLy8gc2VuZFF1ZXVlZEl0ZW1zKCkgbWF5IGNhdXNlIG1fcmVwbHkgdG8gYmUgc2V0
IHRvIDAgZHVlIHRvIHRoZSBmaW5pc2goKSBjYWxsIGNhdXNpbmcKLSAgICAgICAgLy8gdGhlIFJl
c291cmNlSGFuZGxlIGluc3RhbmNlIHRoYXQgb3ducyB0aGlzIFFOZXR3b3JrUmVwbHlIYW5kbGVy
IHRvIGJlIGRlc3Ryb3llZC4KLSAgICAgICAgaWYgKG1fcmVwbHkpIHsKLSAgICAgICAgICAgIC8v
IFJlc3RhcnQgZm9yd2FyZGluZyBvbmx5IGFmdGVyIHByb2Nlc3NRdWV1ZWRJdGVtcyB0byBtYWtl
IHN1cmUKLSAgICAgICAgICAgIC8vIG91ciBidWZmZXJlZCBkYXRhIHdhcyBoYW5kbGVkIGJlZm9y
ZSBhbnkgaW5jb21pbmcgZGF0YS4KLSAgICAgICAgICAgIG1fcmVwbHktPnNldEZvcndhcmRpbmdE
ZWZlcmVkKGZhbHNlKTsKLSAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIExvYWRE
ZWZlcnJlZDoKLSAgICAgICAgaWYgKG1fcmVwbHkpIHsKLSAgICAgICAgICAgIG1fbG9hZE1vZGUg
PSBMb2FkRGVmZXJyZWQ7Ci0gICAgICAgICAgICBtX3JlcGx5LT5zZXRGb3J3YXJkaW5nRGVmZXJl
ZCh0cnVlKTsKLSAgICAgICAgfQorICAgICAgICBtX2xvYWRNb2RlID0gTG9hZERlZmVycmVkOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIExvYWRSZXN1bWluZzoKICAgICAgICAgUV9BU1NFUlQo
MCk7IC8vIHNob3VsZCBuZXZlciBoYXBwZW4KQEAgLTI2NywzMCArMjQ1LDMxIEBAIHZvaWQgUU5l
dHdvcmtSZXBseUhhbmRsZXI6OmFib3J0KCkKIHsKICAgICBtX3Jlc291cmNlSGFuZGxlID0gMDsK
ICAgICBpZiAobV9yZXBseSkgewotICAgICAgICBRdE5ldHdvcmtSZXBseVRocmVhZFNhZmVQcm94
eSogcmVwbHkgPSByZWxlYXNlKCk7CisgICAgICAgIFFOZXR3b3JrUmVwbHkqIHJlcGx5ID0gcmVs
ZWFzZSgpOwogICAgICAgICByZXBseS0+YWJvcnQoKTsKICAgICAgICAgcmVwbHktPmRlbGV0ZUxh
dGVyKCk7CiAgICAgfQogICAgIGRlbGV0ZUxhdGVyKCk7CiB9CiAKLVF0TmV0d29ya1JlcGx5VGhy
ZWFkU2FmZVByb3h5KiBRTmV0d29ya1JlcGx5SGFuZGxlcjo6cmVsZWFzZSgpCitRTmV0d29ya1Jl
cGx5KiBRTmV0d29ya1JlcGx5SGFuZGxlcjo6cmVsZWFzZSgpCiB7Ci0gICAgUXROZXR3b3JrUmVw
bHlUaHJlYWRTYWZlUHJveHkqIHJlcGx5ID0gbV9yZXBseTsKKyAgICBRTmV0d29ya1JlcGx5KiBy
ZXBseSA9IG1fcmVwbHk7CiAgICAgaWYgKG1fcmVwbHkpIHsKICAgICAgICAgZGlzY29ubmVjdCht
X3JlcGx5LCAwLCB0aGlzLCAwKTsKICAgICAgICAgLy8gV2UgaGF2ZSBxdWV1ZWQgY29ubmVjdGlv
bnMgdG8gdGhlIFFOZXR3b3JrUmVwbHkuIE1ha2Ugc3VyZSBhbnkKICAgICAgICAgLy8gcG9zdGVk
IG1ldGEgY2FsbCBldmVudHMgdGhhdCB3ZXJlIHRoZSByZXN1bHQgb2YgYSBzaWduYWwgZW1pc3Np
b24KICAgICAgICAgLy8gZG9uJ3QgcmVhY2ggdGhlIHNsb3RzIGluIG91ciBpbnN0YW5jZS4KICAg
ICAgICAgUUNvcmVBcHBsaWNhdGlvbjo6cmVtb3ZlUG9zdGVkRXZlbnRzKHRoaXMsIFFFdmVudDo6
TWV0YUNhbGwpOworICAgICAgICBtX3JlcGx5LT5zZXRQYXJlbnQoMCk7CiAgICAgICAgIG1fcmVw
bHkgPSAwOwogICAgIH0KICAgICByZXR1cm4gcmVwbHk7CiB9CiAKLXN0YXRpYyBib29sIGlnbm9y
ZUh0dHBFcnJvcihRdE5ldHdvcmtSZXBseVRocmVhZFNhZmVQcm94eSogcmVwbHksIGJvb2wgcmVj
ZWl2ZWREYXRhKQorc3RhdGljIGJvb2wgaWdub3JlSHR0cEVycm9yKFFOZXR3b3JrUmVwbHkqIHJl
cGx5LCBib29sIHJlY2VpdmVkRGF0YSkKIHsKLSAgICBpbnQgaHR0cFN0YXR1c0NvZGUgPSByZXBs
eS0+aHR0cFN0YXR1c0NvZGUoKTsKKyAgICBpbnQgaHR0cFN0YXR1c0NvZGUgPSByZXBseS0+YXR0
cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6SHR0cFN0YXR1c0NvZGVBdHRyaWJ1dGUpLnRvSW50KCk7
CiAKICAgICBpZiAoaHR0cFN0YXR1c0NvZGUgPT0gNDAxIHx8IGh0dHBTdGF0dXNDb2RlID09IDQw
NykKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zMjYsMTAgKzMwNSwxMCBAQCB2b2lkIFFOZXR3
b3JrUmVwbHlIYW5kbGVyOjpmaW5pc2goKQogICAgICAgICAgICAgY2xpZW50LT5kaWRGaW5pc2hM
b2FkaW5nKG1fcmVzb3VyY2VIYW5kbGUsIDApOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
IFFVcmwgdXJsID0gbV9yZXBseS0+dXJsKCk7Ci0gICAgICAgICAgICBpbnQgaHR0cFN0YXR1c0Nv
ZGUgPSBtX3JlcGx5LT5odHRwU3RhdHVzQ29kZSgpOworICAgICAgICAgICAgaW50IGh0dHBTdGF0
dXNDb2RlID0gbV9yZXBseS0+YXR0cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6SHR0cFN0YXR1c0Nv
ZGVBdHRyaWJ1dGUpLnRvSW50KCk7CiAKICAgICAgICAgICAgIGlmIChodHRwU3RhdHVzQ29kZSkg
ewotICAgICAgICAgICAgICAgIFJlc291cmNlRXJyb3IgZXJyb3IoIkhUVFAiLCBodHRwU3RhdHVz
Q29kZSwgdXJsLnRvU3RyaW5nKCksIFFTdHJpbmc6OmZyb21Bc2NpaShtX3JlcGx5LT5odHRwUmVh
c29uUGhyYXNlKCkpKTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUVycm9yIGVycm9yKCJIVFRQ
IiwgaHR0cFN0YXR1c0NvZGUsIHVybC50b1N0cmluZygpLCBtX3JlcGx5LT5hdHRyaWJ1dGUoUU5l
dHdvcmtSZXF1ZXN0OjpIdHRwUmVhc29uUGhyYXNlQXR0cmlidXRlKS50b1N0cmluZygpKTsKICAg
ICAgICAgICAgICAgICBjbGllbnQtPmRpZEZhaWwobV9yZXNvdXJjZUhhbmRsZSwgZXJyb3IpOwog
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBSZXNvdXJjZUVycm9yIGVycm9y
KCJRdE5ldHdvcmsiLCBtX3JlcGx5LT5lcnJvcigpLCB1cmwudG9TdHJpbmcoKSwgbV9yZXBseS0+
ZXJyb3JTdHJpbmcoKSk7CkBAIC0zNzAsNyArMzQ5LDcgQEAgdm9pZCBRTmV0d29ya1JlcGx5SGFu
ZGxlcjo6c2VuZFJlc3BvbnNlSWZOZWVkZWQoKQogICAgIGlmICghY2xpZW50KQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBXVEY6OlN0cmluZyBjb250ZW50VHlwZSA9IG1fcmVwbHktPmNvbnRlbnRU
eXBlSGVhZGVyKCk7CisgICAgV1RGOjpTdHJpbmcgY29udGVudFR5cGUgPSBtX3JlcGx5LT5oZWFk
ZXIoUU5ldHdvcmtSZXF1ZXN0OjpDb250ZW50VHlwZUhlYWRlcikudG9TdHJpbmcoKTsKICAgICBX
VEY6OlN0cmluZyBlbmNvZGluZyA9IGV4dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlwZShjb250ZW50
VHlwZSk7CiAgICAgV1RGOjpTdHJpbmcgbWltZVR5cGUgPSBleHRyYWN0TUlNRVR5cGVGcm9tTWVk
aWFUeXBlKGNvbnRlbnRUeXBlKTsKIApAQCAtMzgxLDcgKzM2MCw3IEBAIHZvaWQgUU5ldHdvcmtS
ZXBseUhhbmRsZXI6OnNlbmRSZXNwb25zZUlmTmVlZGVkKCkKIAogICAgIEtVUkwgdXJsKG1fcmVw
bHktPnVybCgpKTsKICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlKHVybCwgbWltZVR5cGUu
bG93ZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcmVwbHktPmNvbnRlbnRM
ZW5ndGhIZWFkZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcmVwbHktPmhl
YWRlcihRTmV0d29ya1JlcXVlc3Q6OkNvbnRlbnRMZW5ndGhIZWFkZXIpLnRvTG9uZ0xvbmcoKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nLCBTdHJpbmcoKSk7CiAKICAg
ICBpZiAodXJsLmlzTG9jYWxGaWxlKCkpIHsKQEAgLTM5MCwxMCArMzY5LDEwIEBAIHZvaWQgUU5l
dHdvcmtSZXBseUhhbmRsZXI6OnNlbmRSZXNwb25zZUlmTmVlZGVkKCkKICAgICB9CiAKICAgICAv
LyBUaGUgc3RhdHVzIGNvZGUgaXMgZXF1YWwgdG8gMCBmb3IgcHJvdG9jb2xzIG5vdCBpbiB0aGUg
SFRUUCBmYW1pbHkuCi0gICAgaW50IHN0YXR1c0NvZGUgPSBtX3JlcGx5LT5odHRwU3RhdHVzQ29k
ZSgpOworICAgIGludCBzdGF0dXNDb2RlID0gbV9yZXBseS0+YXR0cmlidXRlKFFOZXR3b3JrUmVx
dWVzdDo6SHR0cFN0YXR1c0NvZGVBdHRyaWJ1dGUpLnRvSW50KCk7CiAKICAgICBpZiAodXJsLnBy
b3RvY29sSW5IVFRQRmFtaWx5KCkpIHsKLSAgICAgICAgU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1l
ID0gZmlsZW5hbWVGcm9tSFRUUENvbnRlbnREaXNwb3NpdGlvbihRU3RyaW5nOjpmcm9tQXNjaWko
bV9yZXBseS0+Y29udGVudERpc3Bvc2l0aW9uSGVhZGVyKCkpKTsKKyAgICAgICAgU3RyaW5nIHN1
Z2dlc3RlZEZpbGVuYW1lID0gZmlsZW5hbWVGcm9tSFRUUENvbnRlbnREaXNwb3NpdGlvbihRU3Ry
aW5nOjpmcm9tQXNjaWkobV9yZXBseS0+cmF3SGVhZGVyKCJDb250ZW50LURpc3Bvc2l0aW9uIikp
KTsKIAogICAgICAgICBpZiAoIXN1Z2dlc3RlZEZpbGVuYW1lLmlzRW1wdHkoKSkKICAgICAgICAg
ICAgIHJlc3BvbnNlLnNldFN1Z2dlc3RlZEZpbGVuYW1lKHN1Z2dlc3RlZEZpbGVuYW1lKTsKQEAg
LTQwMSwxNSArMzgwLDE5IEBAIHZvaWQgUU5ldHdvcmtSZXBseUhhbmRsZXI6OnNlbmRSZXNwb25z
ZUlmTmVlZGVkKCkKICAgICAgICAgICAgIHJlc3BvbnNlLnNldFN1Z2dlc3RlZEZpbGVuYW1lKHVy
bC5sYXN0UGF0aENvbXBvbmVudCgpKTsKIAogICAgICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVz
Q29kZShzdGF0dXNDb2RlKTsKLSAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c1RleHQobV9y
ZXBseS0+aHR0cFJlYXNvblBocmFzZSgpLmNvbnN0RGF0YSgpKTsKKyAgICAgICAgcmVzcG9uc2Uu
c2V0SFRUUFN0YXR1c1RleHQobV9yZXBseS0+YXR0cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6SHR0
cFJlYXNvblBocmFzZUF0dHJpYnV0ZSkudG9CeXRlQXJyYXkoKS5jb25zdERhdGEoKSk7CiAKICAg
ICAgICAgLy8gQWRkIHJlbWFpbmluZyBoZWFkZXJzLgotICAgICAgICBmb3JlYWNoIChjb25zdCBR
dE5ldHdvcmtSZXBseVRocmVhZFNhZmVQcm94eTo6UmF3SGVhZGVyUGFpciYgcGFpciwgbV9yZXBs
eS0+cmF3SGVhZGVyUGFpcnMoKSkgeworI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVD
Syg0LCA3LCAwKQorICAgICAgICBmb3JlYWNoIChjb25zdCBRTmV0d29ya1JlcGx5OjpSYXdIZWFk
ZXJQYWlyJiBwYWlyLCBtX3JlcGx5LT5yYXdIZWFkZXJQYWlycygpKQogICAgICAgICAgICAgcmVz
cG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKFFTdHJpbmc6OmZyb21Bc2NpaShwYWlyLmZpcnN0KSwg
UVN0cmluZzo6ZnJvbUFzY2lpKHBhaXIuc2Vjb25kKSk7Ci0gICAgICAgIH0KKyNlbHNlCisgICAg
ICAgIGZvcmVhY2ggKGNvbnN0IFFCeXRlQXJyYXkmIGhlYWRlck5hbWUsIG1fcmVwbHktPnJhd0hl
YWRlckxpc3QoKSkKKyAgICAgICAgICAgIHJlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChRU3Ry
aW5nOjpmcm9tQXNjaWkoaGVhZGVyTmFtZSksIFFTdHJpbmc6OmZyb21Bc2NpaShtX3JlcGx5LT5y
YXdIZWFkZXIoaGVhZGVyTmFtZSkpKTsKKyNlbmRpZgogICAgIH0KIAotICAgIFFVcmwgcmVkaXJl
Y3Rpb24gPSBtX3JlcGx5LT5yZWRpcmVjdGlvblRhcmdldCgpOworICAgIFFVcmwgcmVkaXJlY3Rp
b24gPSBtX3JlcGx5LT5hdHRyaWJ1dGUoUU5ldHdvcmtSZXF1ZXN0OjpSZWRpcmVjdGlvblRhcmdl
dEF0dHJpYnV0ZSkudG9VcmwoKTsKICAgICBpZiAocmVkaXJlY3Rpb24uaXNWYWxpZCgpKSB7CiAg
ICAgICAgIFFVcmwgbmV3VXJsID0gbV9yZXBseS0+dXJsKCkucmVzb2x2ZWQocmVkaXJlY3Rpb24p
OwogCkBAIC00NTQsMTUgKzQzNywxMyBAQCB2b2lkIFFOZXR3b3JrUmVwbHlIYW5kbGVyOjpzZW5k
UmVzcG9uc2VJZk5lZWRlZCgpCiAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UobV9yZXNv
dXJjZUhhbmRsZSwgcmVzcG9uc2UpOwogfQogCi12b2lkIFFOZXR3b3JrUmVwbHlIYW5kbGVyOjpm
b3J3YXJkRGF0YShjb25zdCBRQnl0ZUFycmF5ICZkYXRhKQordm9pZCBRTmV0d29ya1JlcGx5SGFu
ZGxlcjo6Zm9yd2FyZERhdGEoKQogewogICAgIG1fc2hvdWxkRm9yd2FyZERhdGEgPSAobV9sb2Fk
TW9kZSAhPSBMb2FkTm9ybWFsKTsKLSAgICBpZiAobV9zaG91bGRGb3J3YXJkRGF0YSkgewotICAg
ICAgICBtX2J1ZmZlcmVkRGF0YSArPSBkYXRhOworICAgIGlmIChtX3Nob3VsZEZvcndhcmREYXRh
KQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgaWYgKCFkYXRhLmlzRW1wdHkoKSkKKyAg
ICBpZiAobV9yZXBseS0+Ynl0ZXNBdmFpbGFibGUoKSkKICAgICAgICAgbV9yZXNwb25zZUNvbnRh
aW5zRGF0YSA9IHRydWU7CiAKICAgICBzZW5kUmVzcG9uc2VJZk5lZWRlZCgpOwpAQCAtNDc0LDYg
KzQ1NSw4IEBAIHZvaWQgUU5ldHdvcmtSZXBseUhhbmRsZXI6OmZvcndhcmREYXRhKGNvbnN0IFFC
eXRlQXJyYXkgJmRhdGEpCiAgICAgaWYgKCFtX3Jlc291cmNlSGFuZGxlKQogICAgICAgICByZXR1
cm47CiAKKyAgICBRQnl0ZUFycmF5IGRhdGEgPSBtX3JlcGx5LT5yZWFkKG1fcmVwbHktPmJ5dGVz
QXZhaWxhYmxlKCkpOworCiAgICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IG1fcmVz
b3VyY2VIYW5kbGUtPmNsaWVudCgpOwogICAgIGlmICghY2xpZW50KQogICAgICAgICByZXR1cm47
CkBAIC01MTYsNTMgKzQ5OSw0MSBAQCB2b2lkIFFOZXR3b3JrUmVwbHlIYW5kbGVyOjpzdGFydCgp
CiAgICAgICAgICYmICghdXJsLnRvTG9jYWxGaWxlKCkuaXNFbXB0eSgpIHx8IHVybC5zY2hlbWUo
KSA9PSBRTGF0aW4xU3RyaW5nKCJkYXRhIikpKQogICAgICAgICBtX21ldGhvZCA9IFFOZXR3b3Jr
QWNjZXNzTWFuYWdlcjo6R2V0T3BlcmF0aW9uOwogCi0gICAgbV9yZXBseSA9IG5ldyBRdE5ldHdv
cmtSZXBseVRocmVhZFNhZmVQcm94eShtYW5hZ2VyKTsKLSAgICBjb25uZWN0KG1fcmVwbHksIFNJ
R05BTChmaW5pc2hlZCgpKSwgdGhpcywgU0xPVChmaW5pc2goKSksIFNJR05BTF9DT05OKTsKLQot
ICAgIC8vIEZvciBodHRwKHMpIHdlIGtub3cgdGhhdCB0aGUgaGVhZGVycyBhcmUgY29tcGxldGUg
dXBvbiBtZXRhRGF0YUNoYW5nZWQoKSBlbWlzc2lvbiwgc28gd2UKLSAgICAvLyBjYW4gc2VuZCB0
aGUgcmVzcG9uc2UgYXMgZWFybHkgYXMgcG9zc2libGUKLSAgICBpZiAoc2NoZW1lID09IFFMYXRp
bjFTdHJpbmcoImh0dHAiKSB8fCBzY2hlbWUgPT0gUUxhdGluMVN0cmluZygiaHR0cHMiKSkKLSAg
ICAgICAgY29ubmVjdChtX3JlcGx5LCBTSUdOQUwobWV0YURhdGFDaGFuZ2VkKCkpLCB0aGlzLCBT
TE9UKHNlbmRSZXNwb25zZUlmTmVlZGVkKCkpLCBTSUdOQUxfQ09OTik7Ci0KLSAgICBjb25uZWN0
KG1fcmVwbHksIFNJR05BTChkYXRhUmVjZWl2ZWQoY29uc3QgUUJ5dGVBcnJheSYpKSwgdGhpcywg
U0xPVChmb3J3YXJkRGF0YShjb25zdCBRQnl0ZUFycmF5JikpLCBTSUdOQUxfQ09OTik7Ci0KLSAg
ICBpZiAobV9yZXNvdXJjZUhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkucmVwb3J0VXBsb2FkUHJvZ3Jl
c3MoKSkKLSAgICAgICAgY29ubmVjdChtX3JlcGx5LCBTSUdOQUwodXBsb2FkUHJvZ3Jlc3MocWlu
dDY0LCBxaW50NjQpKSwgdGhpcywgU0xPVCh1cGxvYWRQcm9ncmVzcyhxaW50NjQsIHFpbnQ2NCkp
LCBTSUdOQUxfQ09OTik7Ci0KICAgICBzd2l0Y2ggKG1fbWV0aG9kKSB7CiAgICAgICAgIGNhc2Ug
UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpHZXRPcGVyYXRpb246Ci0gICAgICAgICAgICBtX3JlcGx5
LT5nZXQobV9yZXF1ZXN0KTsKKyAgICAgICAgICAgIG1fcmVwbHkgPSBtYW5hZ2VyLT5nZXQobV9y
ZXF1ZXN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFFOZXR3b3JrQWNjZXNz
TWFuYWdlcjo6UG9zdE9wZXJhdGlvbjogewotICAgICAgICAgICAgRm9ybURhdGFJT0RldmljZSog
cG9zdERldmljZSA9IG5ldyBGb3JtRGF0YUlPRGV2aWNlKGQtPm1fZmlyc3RSZXF1ZXN0Lmh0dHBC
b2R5KCksIHRoaXMpOworICAgICAgICAgICAgRm9ybURhdGFJT0RldmljZSogcG9zdERldmljZSA9
IG5ldyBGb3JtRGF0YUlPRGV2aWNlKGQtPm1fZmlyc3RSZXF1ZXN0Lmh0dHBCb2R5KCkpOyAKICAg
ICAgICAgICAgIC8vIFdlIG1heSBiZSB1cGxvYWRpbmcgZmlsZXMgc28gcHJldmVudCBRTlIgZnJv
bSBidWZmZXJpbmcgZGF0YQogICAgICAgICAgICAgbV9yZXF1ZXN0LnNldEhlYWRlcihRTmV0d29y
a1JlcXVlc3Q6OkNvbnRlbnRMZW5ndGhIZWFkZXIsIHBvc3REZXZpY2UtPmdldEZvcm1EYXRhU2l6
ZSgpKTsKICAgICAgICAgICAgIG1fcmVxdWVzdC5zZXRBdHRyaWJ1dGUoUU5ldHdvcmtSZXF1ZXN0
OjpEb05vdEJ1ZmZlclVwbG9hZERhdGFBdHRyaWJ1dGUsIFFWYXJpYW50KHRydWUpKTsKLSAgICAg
ICAgICAgIG1fcmVwbHktPnBvc3QobV9yZXF1ZXN0LCBwb3N0RGV2aWNlKTsKKyAgICAgICAgICAg
IG1fcmVwbHkgPSBtYW5hZ2VyLT5wb3N0KG1fcmVxdWVzdCwgcG9zdERldmljZSk7CisgICAgICAg
ICAgICBwb3N0RGV2aWNlLT5zZXRQYXJlbnQobV9yZXBseSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6SGVhZE9wZXJh
dGlvbjoKLSAgICAgICAgICAgIG1fcmVwbHktPmhlYWQobV9yZXF1ZXN0KTsKKyAgICAgICAgICAg
IG1fcmVwbHkgPSBtYW5hZ2VyLT5oZWFkKG1fcmVxdWVzdCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBRTmV0d29ya0FjY2Vzc01hbmFnZXI6OlB1dE9wZXJhdGlvbjogewotICAg
ICAgICAgICAgRm9ybURhdGFJT0RldmljZSogcHV0RGV2aWNlID0gbmV3IEZvcm1EYXRhSU9EZXZp
Y2UoZC0+bV9maXJzdFJlcXVlc3QuaHR0cEJvZHkoKSwgdGhpcyk7CisgICAgICAgICAgICBGb3Jt
RGF0YUlPRGV2aWNlKiBwdXREZXZpY2UgPSBuZXcgRm9ybURhdGFJT0RldmljZShkLT5tX2ZpcnN0
UmVxdWVzdC5odHRwQm9keSgpKTsgCiAgICAgICAgICAgICAvLyBXZSBtYXkgYmUgdXBsb2FkaW5n
IGZpbGVzIHNvIHByZXZlbnQgUU5SIGZyb20gYnVmZmVyaW5nIGRhdGEKICAgICAgICAgICAgIG1f
cmVxdWVzdC5zZXRIZWFkZXIoUU5ldHdvcmtSZXF1ZXN0OjpDb250ZW50TGVuZ3RoSGVhZGVyLCBw
dXREZXZpY2UtPmdldEZvcm1EYXRhU2l6ZSgpKTsKICAgICAgICAgICAgIG1fcmVxdWVzdC5zZXRB
dHRyaWJ1dGUoUU5ldHdvcmtSZXF1ZXN0OjpEb05vdEJ1ZmZlclVwbG9hZERhdGFBdHRyaWJ1dGUs
IFFWYXJpYW50KHRydWUpKTsKLSAgICAgICAgICAgIG1fcmVwbHktPnB1dChtX3JlcXVlc3QsIHB1
dERldmljZSk7CisgICAgICAgICAgICBtX3JlcGx5ID0gbWFuYWdlci0+cHV0KG1fcmVxdWVzdCwg
cHV0RGV2aWNlKTsKKyAgICAgICAgICAgIHB1dERldmljZS0+c2V0UGFyZW50KG1fcmVwbHkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBRTmV0d29ya0FjY2Vz
c01hbmFnZXI6OkRlbGV0ZU9wZXJhdGlvbjogewotICAgICAgICAgICAgbV9yZXBseS0+ZGVsZXRl
UmVzb3VyY2UobV9yZXF1ZXN0KTsKKyAgICAgICAgICAgIG1fcmVwbHkgPSBtYW5hZ2VyLT5kZWxl
dGVSZXNvdXJjZShtX3JlcXVlc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICNp
ZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNCwgNywgMCkKICAgICAgICAgY2FzZSBR
TmV0d29ya0FjY2Vzc01hbmFnZXI6OkN1c3RvbU9wZXJhdGlvbjoKLSAgICAgICAgICAgIG1fcmVw
bHktPnNlbmRDdXN0b21SZXF1ZXN0KG1fcmVxdWVzdCwgbV9yZXNvdXJjZUhhbmRsZS0+Zmlyc3RS
ZXF1ZXN0KCkuaHR0cE1ldGhvZCgpLmxhdGluMSgpLmRhdGEoKSk7CisgICAgICAgICAgICBtX3Jl
cGx5ID0gbWFuYWdlci0+c2VuZEN1c3RvbVJlcXVlc3QobV9yZXF1ZXN0LCBtX3Jlc291cmNlSGFu
ZGxlLT5maXJzdFJlcXVlc3QoKS5odHRwTWV0aG9kKCkubGF0aW4xKCkuZGF0YSgpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgICAgIGNhc2UgUU5ldHdvcmtBY2Nlc3NNYW5hZ2Vy
OjpVbmtub3duT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICBtX3JlcGx5LT5kZWxldGVMYXRlcigp
OwogICAgICAgICAgICAgbV9yZXBseSA9IDA7CiAgICAgICAgICAgICBSZXNvdXJjZUhhbmRsZUNs
aWVudCogY2xpZW50ID0gbV9yZXNvdXJjZUhhbmRsZS0+Y2xpZW50KCk7CiAgICAgICAgICAgICBp
ZiAoY2xpZW50KSB7CkBAIC01NzQsNiArNTQ1LDI5IEBAIHZvaWQgUU5ldHdvcmtSZXBseUhhbmRs
ZXI6OnN0YXJ0KCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KKworICAg
IG1fcmVwbHktPnNldFBhcmVudCh0aGlzKTsKKworICAgIGNvbm5lY3QobV9yZXBseSwgU0lHTkFM
KGZpbmlzaGVkKCkpLAorICAgICAgICAgICAgdGhpcywgU0xPVChmaW5pc2goKSksIFNJR05BTF9D
T05OKTsKKworICAgIC8vIEZvciBodHRwKHMpIHdlIGtub3cgdGhhdCB0aGUgaGVhZGVycyBhcmUg
Y29tcGxldGUgdXBvbiBtZXRhRGF0YUNoYW5nZWQoKSBlbWlzc2lvbiwgc28gd2UKKyAgICAvLyBj
YW4gc2VuZCB0aGUgcmVzcG9uc2UgYXMgZWFybHkgYXMgcG9zc2libGUKKyAgICBpZiAoc2NoZW1l
ID09IFFMYXRpbjFTdHJpbmcoImh0dHAiKSB8fCBzY2hlbWUgPT0gUUxhdGluMVN0cmluZygiaHR0
cHMiKSkKKyAgICAgICAgY29ubmVjdChtX3JlcGx5LCBTSUdOQUwobWV0YURhdGFDaGFuZ2VkKCkp
LAorICAgICAgICAgICAgICAgIHRoaXMsIFNMT1Qoc2VuZFJlc3BvbnNlSWZOZWVkZWQoKSksIFNJ
R05BTF9DT05OKTsKKworICAgIGNvbm5lY3QobV9yZXBseSwgU0lHTkFMKHJlYWR5UmVhZCgpKSwK
KyAgICAgICAgICAgIHRoaXMsIFNMT1QoZm9yd2FyZERhdGEoKSksIFNJR05BTF9DT05OKTsKKwor
ICAgIGlmIChtX3Jlc291cmNlSGFuZGxlLT5maXJzdFJlcXVlc3QoKS5yZXBvcnRVcGxvYWRQcm9n
cmVzcygpKSB7CisgICAgICAgIGNvbm5lY3QobV9yZXBseSwgU0lHTkFMKHVwbG9hZFByb2dyZXNz
KHFpbnQ2NCwgcWludDY0KSksCisgICAgICAgICAgICAgICAgdGhpcywgU0xPVCh1cGxvYWRQcm9n
cmVzcyhxaW50NjQsIHFpbnQ2NCkpLCBTSUdOQUxfQ09OTik7CisgICAgfQorCisgICAgLy8gTWFr
ZSB0aGlzIGEgZGlyZWN0IGZ1bmN0aW9uIGNhbGwgb25jZSB3ZSByZXF1aXJlIDQuNi4xKy4KKyAg
ICBjb25uZWN0KHRoaXMsIFNJR05BTChwcm9jZXNzUXVldWVkSXRlbXMoKSksCisgICAgICAgICAg
ICB0aGlzLCBTTE9UKHNlbmRRdWV1ZWRJdGVtcygpKSwgU0lHTkFMX0NPTk4pOwogfQogCiB2b2lk
IFFOZXR3b3JrUmVwbHlIYW5kbGVyOjpyZXNldFN0YXRlKCkKQEAgLTU5OSwxMCArNTkzLDggQEAg
dm9pZCBRTmV0d29ya1JlcGx5SGFuZGxlcjo6c2VuZFF1ZXVlZEl0ZW1zKCkKICAgICBpZiAobV9z
aG91bGRTZW5kUmVzcG9uc2UpCiAgICAgICAgIHNlbmRSZXNwb25zZUlmTmVlZGVkKCk7CiAKLSAg
ICBpZiAobV9zaG91bGRGb3J3YXJkRGF0YSkgewotICAgICAgICBmb3J3YXJkRGF0YShtX2J1ZmZl
cmVkRGF0YSk7Ci0gICAgICAgIG1fYnVmZmVyZWREYXRhLmNsZWFyKCk7Ci0gICAgfQorICAgIGlm
IChtX3Nob3VsZEZvcndhcmREYXRhKQorICAgICAgICBmb3J3YXJkRGF0YSgpOwogCiAgICAgaWYg
KG1fc2hvdWxkRmluaXNoKQogICAgICAgICBmaW5pc2goKTsgCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1FOZXR3b3JrUmVwbHlIYW5kbGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1FOZXR3b3JrUmVwbHlIYW5kbGVyLmgKaW5k
ZXggMTE2MzhiM2RmNWRmMWIxZjg4NWRkZWU5OTRlMmQ4ZmE2MGE5OWExZC4uMTkwZjU5ZjVjMzY1
NGVkNTQ3MzM0MmViZmRlMmY5NGFhOThjYWY2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUU5ldHdvcmtSZXBseUhhbmRsZXIuaApAQCAtMjMs
NyArMjMsNiBAQAogCiAjaW5jbHVkZSA8UU5ldHdvcmtSZXF1ZXN0PgogI2luY2x1ZGUgPFFOZXR3
b3JrQWNjZXNzTWFuYWdlcj4KLSNpbmNsdWRlIDxRTmV0d29ya1JlcGx5PgogCiAjaW5jbHVkZSAi
Rm9ybURhdGEuaCIKIApAQCAtMzUsNyArMzQsNiBAQCBRVF9FTkRfTkFNRVNQQUNFCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJlc291cmNlSGFuZGxlOwotY2xhc3MgUXROZXR3b3JrUmVw
bHlUaHJlYWRTYWZlUHJveHk7CiAKIGNsYXNzIFFOZXR3b3JrUmVwbHlIYW5kbGVyIDogcHVibGlj
IFFPYmplY3QKIHsKQEAgLTQ4LDEyICs0NiwxMyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIFFO
ZXR3b3JrUmVwbHlIYW5kbGVyKFJlc291cmNlSGFuZGxlICpoYW5kbGUsIExvYWRNb2RlKTsKLSAg
ICB+UU5ldHdvcmtSZXBseUhhbmRsZXIoKTsKICAgICB2b2lkIHNldExvYWRNb2RlKExvYWRNb2Rl
KTsKIAorICAgIFFOZXR3b3JrUmVwbHkqIHJlcGx5KCkgY29uc3QgeyByZXR1cm4gbV9yZXBseTsg
fQorCiAgICAgdm9pZCBhYm9ydCgpOwogCi0gICAgUXROZXR3b3JrUmVwbHlUaHJlYWRTYWZlUHJv
eHkqIHJlbGVhc2UoKTsKKyAgICBRTmV0d29ya1JlcGx5KiByZWxlYXNlKCk7CiAKIHNpZ25hbHM6
CiAgICAgdm9pZCBwcm9jZXNzUXVldWVkSXRlbXMoKTsKQEAgLTYxLDcgKzYwLDcgQEAgc2lnbmFs
czoKIHByaXZhdGUgc2xvdHM6CiAgICAgdm9pZCBmaW5pc2goKTsKICAgICB2b2lkIHNlbmRSZXNw
b25zZUlmTmVlZGVkKCk7Ci0gICAgdm9pZCBmb3J3YXJkRGF0YShjb25zdCBRQnl0ZUFycmF5ICZk
YXRhKTsKKyAgICB2b2lkIGZvcndhcmREYXRhKCk7CiAgICAgdm9pZCBzZW5kUXVldWVkSXRlbXMo
KTsKICAgICB2b2lkIHVwbG9hZFByb2dyZXNzKHFpbnQ2NCBieXRlc1NlbnQsIHFpbnQ2NCBieXRl
c1RvdGFsKTsKIApAQCAtNzAsNyArNjksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVzZXRTdGF0
ZSgpOwogICAgIFN0cmluZyBodHRwTWV0aG9kKCkgY29uc3Q7CiAKLSAgICBRdE5ldHdvcmtSZXBs
eVRocmVhZFNhZmVQcm94eSogbV9yZXBseTsKKyAgICBRTmV0d29ya1JlcGx5KiBtX3JlcGx5Owog
ICAgIFJlc291cmNlSGFuZGxlKiBtX3Jlc291cmNlSGFuZGxlOwogICAgIGJvb2wgbV9yZWRpcmVj
dGVkOwogICAgIGJvb2wgbV9yZXNwb25zZVNlbnQ7CkBAIC04NSw3ICs4NCw2IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX3Nob3VsZFNlbmRSZXNwb25zZTsKICAgICBib29sIG1fc2hvdWxkRm9yd2Fy
ZERhdGE7CiAgICAgaW50IG1fcmVkaXJlY3Rpb25UcmllczsKLSAgICBRQnl0ZUFycmF5IG1fYnVm
ZmVyZWREYXRhOwogfTsKIAogLy8gU2VsZiBkZXN0cnVjdGluZyBRSU9EZXZpY2UgZm9yIEZvcm1E
YXRhCkBAIC05Niw3ICs5NCw3IEBAIHByaXZhdGU6CiBjbGFzcyBGb3JtRGF0YUlPRGV2aWNlIDog
cHVibGljIFFJT0RldmljZSB7CiAgICAgUV9PQkpFQ1QKIHB1YmxpYzoKLSAgICBGb3JtRGF0YUlP
RGV2aWNlKEZvcm1EYXRhKiwgUU9iamVjdCogcGFyZW50ID0gMCk7CisgICAgRm9ybURhdGFJT0Rl
dmljZShGb3JtRGF0YSopOwogICAgIH5Gb3JtRGF0YUlPRGV2aWNlKCk7CiAKICAgICBib29sIGlz
U2VxdWVudGlhbCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9xdC9RdE5BTVRocmVhZFNhZmVQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3F0L1F0TkFNVGhyZWFkU2FmZVByb3h5LmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYTk4YjRmNDAwYzYxMGQyNzdlNWY5MTg1ZWJlNDdiYjdkZDg2ZWUxNS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1F0TkFNVGhyZWFkU2FmZVByb3h5LmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDIxMCArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAxMCBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlF0TkFNVGhyZWFkU2FmZVByb3h5LmgiCi0KLSNpbmNsdWRlICJB
c3NlcnRpb25zLmgiCi0jaW5jbHVkZSA8UUFic3RyYWN0TmV0d29ya0NhY2hlPgotI2luY2x1ZGUg
PFFOZXR3b3JrQWNjZXNzTWFuYWdlcj4KLSNpbmNsdWRlIDxRTmV0d29ya0Nvb2tpZUphcj4KLSNp
bmNsdWRlIDxRU3RyaW5nTGlzdD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1RdE5BTVRocmVh
ZFNhZmVQcm94eTo6UXROQU1UaHJlYWRTYWZlUHJveHkoUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyICpt
YW5hZ2VyKQotICAgIDogbV9tYW5hZ2VyKG1hbmFnZXIpCi17Ci0gICAgbW92ZVRvVGhyZWFkKG1h
bmFnZXItPnRocmVhZCgpKTsKLQotICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKGxvY2FsU2V0Q29v
a2llc1JlcXVlc3RlZChjb25zdCBRVXJsJiwgY29uc3QgUVN0cmluZyYpKSwgU0xPVChsb2NhbFNl
dENvb2tpZXMoY29uc3QgUVVybCYsIGNvbnN0IFFTdHJpbmcmKSkpOwotICAgIGNvbm5lY3QodGhp
cywgU0lHTkFMKGxvY2FsQ29va2llc0ZvclVybFJlcXVlc3RlZChjb25zdCBRVXJsJiwgYm9vbCos
IFFMaXN0PFFOZXR3b3JrQ29va2llPiopKSwgU0xPVChsb2NhbENvb2tpZXNGb3JVcmwoY29uc3Qg
UVVybCYsIGJvb2wqLCBRTGlzdDxRTmV0d29ya0Nvb2tpZT4qKSkpOwotICAgIGNvbm5lY3QodGhp
cywgU0lHTkFMKGxvY2FsV2lsbExvYWRGcm9tQ2FjaGVSZXF1ZXN0ZWQoY29uc3QgUVVybCYsIGJv
b2wqLCBib29sKikpLCBTTE9UKGxvY2FsV2lsbExvYWRGcm9tQ2FjaGUoY29uc3QgUVVybCYsIGJv
b2wqLCBib29sKikpKTsKLSAgICBjb25uZWN0KHRoaXMsIFNJR05BTChoYXNDb29raWVKYXJSZXF1
ZXN0ZWQoYm9vbCosIGJvb2wqKSksIFNMT1QoaGFzQ29va2llSmFyKGJvb2wqLCBib29sKikpKTsK
LX0KLQotYm9vbCBRdE5BTVRocmVhZFNhZmVQcm94eTo6aGFzQ29va2llSmFyKCkKLXsKLSAgICBi
b29sIHJlc3VsdDsKLSAgICBib29sIGRvbmUgPSBmYWxzZTsKLSAgICBlbWl0IGhhc0Nvb2tpZUph
clJlcXVlc3RlZCgmZG9uZSwgJnJlc3VsdCk7Ci0gICAgUU11dGV4TG9ja2VyIGxvY2soJm1fcmVz
dWx0TXV0ZXgpOwotICAgIHdoaWxlICghZG9uZSkKLSAgICAgICAgbV9yZXN1bHRXYWl0Q29uZGl0
aW9uLndhaXQoJm1fcmVzdWx0TXV0ZXgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQg
UXROQU1UaHJlYWRTYWZlUHJveHk6OmxvY2FsU2V0Q29va2llcyhjb25zdCBRVXJsJiB1cmwsIGNv
bnN0IFFTdHJpbmcmIGNvb2tpZXMpCi17Ci0gICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tp
ZUxpc3QgPSBRTmV0d29ya0Nvb2tpZTo6cGFyc2VDb29raWVzKGNvb2tpZXMudG9Bc2NpaSgpKTsK
LSAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT46Okl0ZXJhdG9yIGl0ID0gY29va2llTGlzdC5iZWdp
bigpOwotICAgIHdoaWxlIChpdCAhPSBjb29raWVMaXN0LmVuZCgpKSB7Ci0gICAgICAgIGlmIChp
dC0+aXNIdHRwT25seSgpKQotICAgICAgICAgICAgaXQgPSBjb29raWVMaXN0LmVyYXNlKGl0KTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgKytpdDsKLSAgICB9Ci0gICAgbV9tYW5hZ2VyLT5j
b29raWVKYXIoKS0+c2V0Q29va2llc0Zyb21VcmwoY29va2llTGlzdCwgdXJsKTsKLX0KLQotdm9p
ZCBRdE5BTVRocmVhZFNhZmVQcm94eTo6bG9jYWxDb29raWVzRm9yVXJsKGNvbnN0IFFVcmwmIHVy
bCwgYm9vbCogZG9uZSwgUUxpc3Q8UU5ldHdvcmtDb29raWU+KiByZXN1bHQpCi17Ci0gICAgUU11
dGV4TG9ja2VyIGxvY2soJm1fcmVzdWx0TXV0ZXgpOwotICAgICpyZXN1bHQgPSBtX21hbmFnZXIt
PmNvb2tpZUphcigpLT5jb29raWVzRm9yVXJsKHVybCk7Ci0gICAgKmRvbmUgPSB0cnVlOwotICAg
IG1fcmVzdWx0V2FpdENvbmRpdGlvbi53YWtlQWxsKCk7Ci19Ci0KLXZvaWQgUXROQU1UaHJlYWRT
YWZlUHJveHk6OmxvY2FsV2lsbExvYWRGcm9tQ2FjaGUoY29uc3QgUVVybCYgdXJsLCBib29sKiBk
b25lLCBib29sKiByZXN1bHQpCi17Ci0gICAgUU11dGV4TG9ja2VyIGxvY2soJm1fcmVzdWx0TXV0
ZXgpOwotICAgIGlmIChtX21hbmFnZXItPmNhY2hlKCkpCi0gICAgICAgICpyZXN1bHQgPSBtX21h
bmFnZXItPmNhY2hlKCktPm1ldGFEYXRhKHVybCkuaXNWYWxpZCgpOwotICAgIGVsc2UKLSAgICAg
ICAgKnJlc3VsdCA9IGZhbHNlOwotICAgICpkb25lID0gdHJ1ZTsKLSAgICBtX3Jlc3VsdFdhaXRD
b25kaXRpb24ud2FrZUFsbCgpOwotfQotCi12b2lkIFF0TkFNVGhyZWFkU2FmZVByb3h5OjpoYXND
b29raWVKYXIoYm9vbCogZG9uZSwgYm9vbCogcmVzdWx0KQotewotICAgIFFNdXRleExvY2tlciBs
b2NrKCZtX3Jlc3VsdE11dGV4KTsKLSAgICAqcmVzdWx0ID0gISFtX21hbmFnZXItPmNvb2tpZUph
cigpOwotICAgICpkb25lID0gdHJ1ZTsKLSAgICBtX3Jlc3VsdFdhaXRDb25kaXRpb24ud2FrZUFs
bCgpOwotfQotCi1RdE5ldHdvcmtSZXBseVRocmVhZFNhZmVQcm94eTo6UXROZXR3b3JrUmVwbHlU
aHJlYWRTYWZlUHJveHkoUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyICptYW5hZ2VyKQotICAgIDogbV9t
YW5hZ2VyKG1hbmFnZXIpCi0gICAgLCBtX3JlcGx5KDApCi0gICAgLCBtX2ZvcndhcmRpbmdEZWZl
cmVkKGZhbHNlKQotICAgICwgbV9jb250ZW50TGVuZ3RoSGVhZGVyKDApCi0gICAgLCBtX2Vycm9y
KFFOZXR3b3JrUmVwbHk6Ok5vRXJyb3IpCi0gICAgLCBtX2h0dHBTdGF0dXNDb2RlKDApCi17Ci0g
ICAgbW92ZVRvVGhyZWFkKG1hbmFnZXItPnRocmVhZCgpKTsKLQotICAgIC8vIFRoaXMgbWlnaHQg
YmUgdW5uZWNlc3NhcmlseSBoZWF2eSB0byBkbyBmb3IgZWFjaCByZXF1ZXN0IHdoaWxlIHdlIGNv
dWxkIGhhdmUgdGhlIHNhbWUgd3JhcHBlciBmb3IgdGhlIG1hbmFnZXIgaW5zdGVhZAotICAgIGNv
bm5lY3QodGhpcywgU0lHTkFMKGxvY2FsR2V0UmVxdWVzdGVkKGNvbnN0IFFOZXR3b3JrUmVxdWVz
dCYpKSwgU0xPVChsb2NhbEdldChjb25zdCBRTmV0d29ya1JlcXVlc3QmKSkpOwotICAgIGNvbm5l
Y3QodGhpcywgU0lHTkFMKGxvY2FsUG9zdFJlcXVlc3RlZChjb25zdCBRTmV0d29ya1JlcXVlc3Qm
LCBRSU9EZXZpY2UqKSksIFNMT1QobG9jYWxQb3N0KGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYsIFFJ
T0RldmljZSopKSk7Ci0gICAgY29ubmVjdCh0aGlzLCBTSUdOQUwobG9jYWxIZWFkUmVxdWVzdGVk
KGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYpKSwgU0xPVChsb2NhbEhlYWQoY29uc3QgUU5ldHdvcmtS
ZXF1ZXN0JikpKTsKLSAgICBjb25uZWN0KHRoaXMsIFNJR05BTChsb2NhbFB1dFJlcXVlc3RlZChj
b25zdCBRTmV0d29ya1JlcXVlc3QmLCBRSU9EZXZpY2UqKSksIFNMT1QobG9jYWxQdXQoY29uc3Qg
UU5ldHdvcmtSZXF1ZXN0JiwgUUlPRGV2aWNlKikpKTsKLSAgICBjb25uZWN0KHRoaXMsIFNJR05B
TChsb2NhbERlbGV0ZVJlc291cmNlUmVxdWVzdGVkKGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYpKSwg
U0xPVChsb2NhbERlbGV0ZVJlc291cmNlKGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYpKSk7Ci0gICAg
Y29ubmVjdCh0aGlzLCBTSUdOQUwobG9jYWxDdXN0b21SZXF1ZXN0UmVxdWVzdGVkKGNvbnN0IFFO
ZXR3b3JrUmVxdWVzdCYsIGNvbnN0IFFCeXRlQXJyYXkmKSksIFNMT1QobG9jYWxDdXN0b21SZXF1
ZXN0KGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYsIGNvbnN0IFFCeXRlQXJyYXkmKSkpOwotICAgIGNv
bm5lY3QodGhpcywgU0lHTkFMKGxvY2FsQWJvcnRSZXF1ZXN0ZWQoKSksIFNMT1QobG9jYWxBYm9y
dCgpKSk7Ci0gICAgY29ubmVjdCh0aGlzLCBTSUdOQUwobG9jYWxTZXRGb3J3YXJkaW5nRGVmZXJl
ZFJlcXVlc3RlZChib29sKSksIFNMT1QobG9jYWxTZXRGb3J3YXJkaW5nRGVmZXJlZChib29sKSkp
OwotfQotCi1RdE5ldHdvcmtSZXBseVRocmVhZFNhZmVQcm94eTo6flF0TmV0d29ya1JlcGx5VGhy
ZWFkU2FmZVByb3h5KCkKLXsKLSAgICBkZWxldGUgbV9yZXBseTsKLX0KLQotdm9pZCBRdE5ldHdv
cmtSZXBseVRocmVhZFNhZmVQcm94eTo6bG9jYWxHZXQoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiBy
ZXF1ZXN0KQotewotICAgIGxvY2FsU2V0UmVwbHkobV9tYW5hZ2VyLT5nZXQocmVxdWVzdCkpOwot
fQotCi12b2lkIFF0TmV0d29ya1JlcGx5VGhyZWFkU2FmZVByb3h5Ojpsb2NhbFBvc3QoY29uc3Qg
UU5ldHdvcmtSZXF1ZXN0JiByZXF1ZXN0LCBRSU9EZXZpY2UqIGRhdGEpCi17Ci0gICAgbG9jYWxT
ZXRSZXBseShtX21hbmFnZXItPnBvc3QocmVxdWVzdCwgZGF0YSkpOwotfQotCi12b2lkIFF0TmV0
d29ya1JlcGx5VGhyZWFkU2FmZVByb3h5Ojpsb2NhbEhlYWQoY29uc3QgUU5ldHdvcmtSZXF1ZXN0
JiByZXF1ZXN0KQotewotICAgIGxvY2FsU2V0UmVwbHkobV9tYW5hZ2VyLT5oZWFkKHJlcXVlc3Qp
KTsKLX0KLQotdm9pZCBRdE5ldHdvcmtSZXBseVRocmVhZFNhZmVQcm94eTo6bG9jYWxQdXQoY29u
c3QgUU5ldHdvcmtSZXF1ZXN0JiByZXF1ZXN0LCBRSU9EZXZpY2UqIGRhdGEpCi17Ci0gICAgbG9j
YWxTZXRSZXBseShtX21hbmFnZXItPnB1dChyZXF1ZXN0LCBkYXRhKSk7Ci19Ci0KLXZvaWQgUXRO
ZXR3b3JrUmVwbHlUaHJlYWRTYWZlUHJveHk6OmxvY2FsRGVsZXRlUmVzb3VyY2UoY29uc3QgUU5l
dHdvcmtSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIGxvY2FsU2V0UmVwbHkobV9tYW5hZ2VyLT5k
ZWxldGVSZXNvdXJjZShyZXF1ZXN0KSk7Ci19Ci0KLXZvaWQgUXROZXR3b3JrUmVwbHlUaHJlYWRT
YWZlUHJveHk6OmxvY2FsQ3VzdG9tUmVxdWVzdChjb25zdCBRTmV0d29ya1JlcXVlc3QmIHJlcXVl
c3QsIGNvbnN0IFFCeXRlQXJyYXkmIHZlcmIpCi17Ci0jaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJT
SU9OX0NIRUNLKDQsIDcsIDApCi0gICAgbG9jYWxTZXRSZXBseShtX21hbmFnZXItPnNlbmRDdXN0
b21SZXF1ZXN0KHJlcXVlc3QsIHZlcmIpKTsKLSNlbmRpZgotfQotCi12b2lkIFF0TmV0d29ya1Jl
cGx5VGhyZWFkU2FmZVByb3h5Ojpsb2NhbEFib3J0KCkKLXsKLSAgICBpZiAobV9yZXBseSkKLSAg
ICAgICAgbV9yZXBseS0+YWJvcnQoKTsKLX0KLQotdm9pZCBRdE5ldHdvcmtSZXBseVRocmVhZFNh
ZmVQcm94eTo6bG9jYWxGb3J3YXJkRGF0YSgpCi17Ci0gICAgaWYgKG1fcmVwbHktPmJ5dGVzQXZh
aWxhYmxlKCkpIHsKLSAgICAgICAgUUJ5dGVBcnJheSBkYXRhID0gbV9yZXBseS0+cmVhZChtX3Jl
cGx5LT5ieXRlc0F2YWlsYWJsZSgpKTsKLSAgICAgICAgZW1pdCBkYXRhUmVjZWl2ZWQoZGF0YSk7
Ci0gICAgfQotfQotCi12b2lkIFF0TmV0d29ya1JlcGx5VGhyZWFkU2FmZVByb3h5Ojpsb2NhbFNl
dEZvcndhcmRpbmdEZWZlcmVkKGJvb2wgZm9yd2FyZGluZ0RlZmVyZWQpCi17Ci0gICAgaWYgKG1f
Zm9yd2FyZGluZ0RlZmVyZWQgJiYgIWZvcndhcmRpbmdEZWZlcmVkKQotICAgICAgICBsb2NhbEZv
cndhcmREYXRhKCk7Ci0gICAgbV9mb3J3YXJkaW5nRGVmZXJlZCA9IGZvcndhcmRpbmdEZWZlcmVk
OwotfQotCi12b2lkIFF0TmV0d29ya1JlcGx5VGhyZWFkU2FmZVByb3h5Ojpsb2NhbE1pcnJvck1l
bWJlcnMoKQotewotICAgIEFTU0VSVChtX3JlcGx5KTsKLSAgICBRTXV0ZXhMb2NrZXIgbG9jaygm
bV9taXJyb3JlZE1lbWJlcnNNdXRleCk7Ci0KLSAgICBtX2NvbnRlbnREaXNwb3NpdGlvbkhlYWRl
ciA9IG1fcmVwbHktPnJhd0hlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbiIpOwotICAgIG1fY29u
dGVudExlbmd0aEhlYWRlciA9IG1fcmVwbHktPmhlYWRlcihRTmV0d29ya1JlcXVlc3Q6OkNvbnRl
bnRMZW5ndGhIZWFkZXIpLnRvTG9uZ0xvbmcoKTsKLSAgICBtX2NvbnRlbnRUeXBlSGVhZGVyID0g
bV9yZXBseS0+aGVhZGVyKFFOZXR3b3JrUmVxdWVzdDo6Q29udGVudFR5cGVIZWFkZXIpLnRvU3Ry
aW5nKCk7Ci0gICAgbV9lcnJvciA9IG1fcmVwbHktPmVycm9yKCk7Ci0gICAgbV9lcnJvclN0cmlu
ZyA9IG1fcmVwbHktPmVycm9yU3RyaW5nKCk7Ci0gICAgbV9odHRwUmVhc29uUGhyYXNlID0gbV9y
ZXBseS0+YXR0cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6SHR0cFJlYXNvblBocmFzZUF0dHJpYnV0
ZSkudG9CeXRlQXJyYXkoKTsKLSAgICBtX2h0dHBTdGF0dXNDb2RlID0gbV9yZXBseS0+YXR0cmli
dXRlKFFOZXR3b3JrUmVxdWVzdDo6SHR0cFN0YXR1c0NvZGVBdHRyaWJ1dGUpLnRvSW50KCk7Ci0g
ICAgbV91cmwgPSBtX3JlcGx5LT51cmwoKTsKLSAgICBtX3JlZGlyZWN0aW9uVGFyZ2V0ID0gbV9y
ZXBseS0+YXR0cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6UmVkaXJlY3Rpb25UYXJnZXRBdHRyaWJ1
dGUpLnRvVXJsKCk7Ci0jaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDcsIDAp
Ci0gICAgbV9yYXdIZWFkZXJQYWlycyA9IG1fcmVwbHktPnJhd0hlYWRlclBhaXJzKCk7Ci0jZWxz
ZQotICAgIG1fcmF3SGVhZGVyUGFpcnMuY2xlYXIoKTsKLSAgICBmb3JlYWNoIChjb25zdCBRQnl0
ZUFycmF5JiBoZWFkZXJOYW1lLCBtX3JlcGx5LT5yYXdIZWFkZXJMaXN0KCkpCi0gICAgICAgIG1f
cmF3SGVhZGVyUGFpcnMuYXBwZW5kKFJhd0hlYWRlclBhaXIoaGVhZGVyTmFtZSwgbV9yZXBseS0+
cmF3SGVhZGVyKGhlYWRlck5hbWUpKSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBRdE5ldHdvcmtSZXBs
eVRocmVhZFNhZmVQcm94eTo6bG9jYWxTZXRSZXBseShRTmV0d29ya1JlcGx5ICpyZXBseSkKLXsK
LSAgICBBU1NFUlQoIW1fcmVwbHkpOwotICAgIG1fcmVwbHkgPSByZXBseTsKLSAgICBtX3JlcGx5
LT5zZXRQYXJlbnQoMCk7Ci0gICAgY29ubmVjdChtX3JlcGx5LCBTSUdOQUwocmVhZHlSZWFkKCkp
LCB0aGlzLCBTTE9UKGxvY2FsRm9yd2FyZERhdGEoKSkpOwotICAgIC8vIE1ha2Ugc3VyZSBsb2Nh
bE1pcnJvck1lbWJlcnMoKSBpcyBjYWxsZWQgYmVmb3JlIHRoZSBvdXR3YXJkIHNpZ25hbAotICAg
IGNvbm5lY3QobV9yZXBseSwgU0lHTkFMKGZpbmlzaGVkKCkpLCB0aGlzLCBTTE9UKGxvY2FsTWly
cm9yTWVtYmVycygpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOwotICAgIGNvbm5lY3QobV9yZXBs
eSwgU0lHTkFMKGZpbmlzaGVkKCkpLCB0aGlzLCBTSUdOQUwoZmluaXNoZWQoKSkpOwotICAgIC8v
IE1ha2Ugc3VyZSBsb2NhbE1pcnJvck1lbWJlcnMoKSBpcyBjYWxsZWQgYmVmb3JlIHRoZSBvdXR3
YXJkIHNpZ25hbAotICAgIGNvbm5lY3QobV9yZXBseSwgU0lHTkFMKG1ldGFEYXRhQ2hhbmdlZCgp
KSwgdGhpcywgU0xPVChsb2NhbE1pcnJvck1lbWJlcnMoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9u
KTsKLSAgICBjb25uZWN0KG1fcmVwbHksIFNJR05BTChtZXRhRGF0YUNoYW5nZWQoKSksIHRoaXMs
IFNJR05BTChtZXRhRGF0YUNoYW5nZWQoKSkpOwotICAgIGNvbm5lY3QobV9yZXBseSwgU0lHTkFM
KHVwbG9hZFByb2dyZXNzKHFpbnQ2NCwgcWludDY0KSksIHRoaXMsIFNJR05BTCh1cGxvYWRQcm9n
cmVzcyhxaW50NjQsIHFpbnQ2NCkpKTsKLX0KLQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1F0TkFNVGhyZWFkU2FmZVByb3h5LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1F0TkFNVGhyZWFkU2FmZVByb3h5LmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5MDZmZTI5NDVlMDU0ZDQ5NjdjMmFjNGM2ZDZjZmRj
YmUyOTc3MmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9RdE5BTVRocmVhZFNhZmVQcm94eS5o
CisrKyAvZGV2L251bGwKQEAgLTEsMjAyICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAy
MDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0jaWZu
ZGVmIFF0TkFNVGhyZWFkU2FmZVByb3h5X2gKLSNkZWZpbmUgUXROQU1UaHJlYWRTYWZlUHJveHlf
aAotCi0jaW5jbHVkZSA8UU11dGV4PgotI2luY2x1ZGUgPFFOZXR3b3JrQ29va2llPgotI2luY2x1
ZGUgPFFOZXR3b3JrUmVwbHk+Ci0jaW5jbHVkZSA8UU9iamVjdD4KLSNpbmNsdWRlIDxRV2FpdENv
bmRpdGlvbj4KLQotUVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBRTmV0d29ya0FjY2Vzc01hbmFn
ZXI7Ci1jbGFzcyBRTmV0d29ya1JlcXVlc3Q7Ci1jbGFzcyBRVXJsOwotUVRfRU5EX05BTUVTUEFD
RQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFF0TkFNVGhyZWFkU2FmZVByb3h5IDog
cHVibGljIFFPYmplY3QgewotICAgIFFfT0JKRUNUCi1wdWJsaWM6Ci0gICAgUXROQU1UaHJlYWRT
YWZlUHJveHkoUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyICptYW5hZ2VyKTsKLQotICAgIHZvaWQgc2V0
Q29va2llcyhjb25zdCBRVXJsJiB1cmwsIGNvbnN0IFFTdHJpbmcmIGNvb2tpZXMpCi0gICAgewot
ICAgICAgICBlbWl0IGxvY2FsU2V0Q29va2llc1JlcXVlc3RlZCh1cmwsIGNvb2tpZXMpOwotICAg
IH0KLQotICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVzRm9yVXJsKGNvbnN0IFFVcmwm
IHVybCkKLSAgICB7Ci0gICAgICAgIGJvb2wgZG9uZSA9IGZhbHNlOwotICAgICAgICBRTGlzdDxR
TmV0d29ya0Nvb2tpZT4gcmVzdWx0OwotICAgICAgICBlbWl0IGxvY2FsQ29va2llc0ZvclVybFJl
cXVlc3RlZCh1cmwsICZkb25lLCAmcmVzdWx0KTsKLQotICAgICAgICBRTXV0ZXhMb2NrZXIgbG9j
aygmbV9yZXN1bHRNdXRleCk7Ci0gICAgICAgIHdoaWxlICghZG9uZSkKLSAgICAgICAgICAgIG1f
cmVzdWx0V2FpdENvbmRpdGlvbi53YWl0KCZtX3Jlc3VsdE11dGV4KTsKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICB9Ci0KLSAgICBib29sIHdpbGxMb2FkRnJvbUNhY2hlKGNvbnN0IFFVcmwm
IHVybCkKLSAgICB7Ci0gICAgICAgIGJvb2wgZG9uZSA9IGZhbHNlOwotICAgICAgICBib29sIHJl
c3VsdDsKLSAgICAgICAgZW1pdCBsb2NhbFdpbGxMb2FkRnJvbUNhY2hlUmVxdWVzdGVkKHVybCwg
JmRvbmUsICZyZXN1bHQpOwotCi0gICAgICAgIFFNdXRleExvY2tlciBsb2NrKCZtX3Jlc3VsdE11
dGV4KTsKLSAgICAgICAgd2hpbGUgKCFkb25lKQotICAgICAgICAgICAgbV9yZXN1bHRXYWl0Q29u
ZGl0aW9uLndhaXQoJm1fcmVzdWx0TXV0ZXgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IH0KLQotICAgIGJvb2wgaGFzQ29va2llSmFyKCk7Ci0KLXNpZ25hbHM6Ci0gICAgdm9pZCBsb2Nh
bFNldENvb2tpZXNSZXF1ZXN0ZWQoY29uc3QgUVVybCYsIGNvbnN0IFFTdHJpbmcmIGNvb2tpZXMp
OwotICAgIHZvaWQgbG9jYWxDb29raWVzRm9yVXJsUmVxdWVzdGVkKGNvbnN0IFFVcmwmLCBib29s
KiBkb25lLCBRTGlzdDxRTmV0d29ya0Nvb2tpZT4qIHJlc3VsdCk7Ci0gICAgdm9pZCBsb2NhbFdp
bGxMb2FkRnJvbUNhY2hlUmVxdWVzdGVkKGNvbnN0IFFVcmwmLCBib29sKiBkb25lLCBib29sKiBy
ZXN1bHQpOwotICAgIHZvaWQgaGFzQ29va2llSmFyUmVxdWVzdGVkKGJvb2wqIGRvbmUsIGJvb2wq
IHJlc3VsdCk7Ci0KLXByaXZhdGUgc2xvdHM6Ci0gICAgdm9pZCBsb2NhbFNldENvb2tpZXMoY29u
c3QgUVVybCYsIGNvbnN0IFFTdHJpbmcmIGNvb2tpZXMpOwotICAgIHZvaWQgbG9jYWxDb29raWVz
Rm9yVXJsKGNvbnN0IFFVcmwmLCBib29sKiBkb25lLCBRTGlzdDxRTmV0d29ya0Nvb2tpZT4qIHJl
c3VsdCk7Ci0gICAgdm9pZCBsb2NhbFdpbGxMb2FkRnJvbUNhY2hlKGNvbnN0IFFVcmwmLCBib29s
KiBkb25lLCBib29sKiByZXN1bHQpOwotICAgIHZvaWQgaGFzQ29va2llSmFyKGJvb2wqIGRvbmUs
IGJvb2wqIHJlc3VsdCk7Ci0KLXByaXZhdGU6Ci0gICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKiBt
X21hbmFnZXI7Ci0gICAgUU11dGV4IG1fcmVzdWx0TXV0ZXg7Ci0gICAgUVdhaXRDb25kaXRpb24g
bV9yZXN1bHRXYWl0Q29uZGl0aW9uOwotfTsKLQotCi1jbGFzcyBRdE5ldHdvcmtSZXBseVRocmVh
ZFNhZmVQcm94eSA6IHB1YmxpYyBRT2JqZWN0IHsKLSAgICBRX09CSkVDVAotcHVibGljOgotICAg
IHR5cGVkZWYgUVBhaXI8UUJ5dGVBcnJheSwgUUJ5dGVBcnJheT4gUmF3SGVhZGVyUGFpcjsKLSAg
ICBRdE5ldHdvcmtSZXBseVRocmVhZFNhZmVQcm94eShRTmV0d29ya0FjY2Vzc01hbmFnZXIgKm1h
bmFnZXIpOwotICAgIH5RdE5ldHdvcmtSZXBseVRocmVhZFNhZmVQcm94eSgpOwotICAgIHZvaWQg
YWJvcnQoKQotICAgIHsKLSAgICAgICAgZW1pdCBsb2NhbEFib3J0UmVxdWVzdGVkKCk7Ci0gICAg
fQotICAgIHZvaWQgc2V0Rm9yd2FyZGluZ0RlZmVyZWQoYm9vbCBmb3J3YXJkaW5nRGVmZXJlZCkK
LSAgICB7Ci0gICAgICAgIGVtaXQgbG9jYWxTZXRGb3J3YXJkaW5nRGVmZXJlZFJlcXVlc3RlZChm
b3J3YXJkaW5nRGVmZXJlZCk7Ci0gICAgfQotCi0gICAgUUJ5dGVBcnJheSBjb250ZW50RGlzcG9z
aXRpb25IZWFkZXIoKSB7IFFNdXRleExvY2tlciBsb2NrKCZtX21pcnJvcmVkTWVtYmVyc011dGV4
KTsgcmV0dXJuIG1fY29udGVudERpc3Bvc2l0aW9uSGVhZGVyOyB9Ci0gICAgcWxvbmdsb25nIGNv
bnRlbnRMZW5ndGhIZWFkZXIoKSB7IFFNdXRleExvY2tlciBsb2NrKCZtX21pcnJvcmVkTWVtYmVy
c011dGV4KTsgcmV0dXJuIG1fY29udGVudExlbmd0aEhlYWRlcjsgfQotICAgIFFTdHJpbmcgY29u
dGVudFR5cGVIZWFkZXIoKSB7IFFNdXRleExvY2tlciBsb2NrKCZtX21pcnJvcmVkTWVtYmVyc011
dGV4KTsgcmV0dXJuIG1fY29udGVudFR5cGVIZWFkZXI7IH0KLSAgICBRTmV0d29ya1JlcGx5OjpO
ZXR3b3JrRXJyb3IgZXJyb3IoKSB7IFFNdXRleExvY2tlciBsb2NrKCZtX21pcnJvcmVkTWVtYmVy
c011dGV4KTsgcmV0dXJuIG1fZXJyb3I7IH0KLSAgICBRU3RyaW5nIGVycm9yU3RyaW5nKCkgeyBR
TXV0ZXhMb2NrZXIgbG9jaygmbV9taXJyb3JlZE1lbWJlcnNNdXRleCk7IHJldHVybiBtX2Vycm9y
U3RyaW5nOyB9Ci0gICAgUUJ5dGVBcnJheSBodHRwUmVhc29uUGhyYXNlKCkgeyBRTXV0ZXhMb2Nr
ZXIgbG9jaygmbV9taXJyb3JlZE1lbWJlcnNNdXRleCk7IHJldHVybiBtX2h0dHBSZWFzb25QaHJh
c2U7IH0KLSAgICBpbnQgaHR0cFN0YXR1c0NvZGUoKSB7IFFNdXRleExvY2tlciBsb2NrKCZtX21p
cnJvcmVkTWVtYmVyc011dGV4KTsgcmV0dXJuIG1faHR0cFN0YXR1c0NvZGU7IH0KLSAgICBRVXJs
IHVybCgpIHsgUU11dGV4TG9ja2VyIGxvY2soJm1fbWlycm9yZWRNZW1iZXJzTXV0ZXgpOyByZXR1
cm4gbV91cmw7IH0KLSAgICBRVXJsIHJlZGlyZWN0aW9uVGFyZ2V0KCkgeyBRTXV0ZXhMb2NrZXIg
bG9jaygmbV9taXJyb3JlZE1lbWJlcnNNdXRleCk7IHJldHVybiBtX3JlZGlyZWN0aW9uVGFyZ2V0
OyB9Ci0gICAgUUxpc3Q8UmF3SGVhZGVyUGFpcj4gcmF3SGVhZGVyUGFpcnMoKSB7IFFNdXRleExv
Y2tlciBsb2NrKCZtX21pcnJvcmVkTWVtYmVyc011dGV4KTsgcmV0dXJuIG1fcmF3SGVhZGVyUGFp
cnM7IH0KLQotICAgIFFOZXR3b3JrUmVwbHkqIHJlcGx5KCkKLSAgICB7Ci0gICAgICAgIC8vIENh
cmVmdWwsIGFjY2Nlc3NpbmcgdGhlIHJlcGx5IGFjY3Jvc3MgdGhyZWFkcyBtaWdodCBiZSBoYXph
cmRvdXMgdG8geW91ciBoZWFsdGgKLSAgICAgICAgcmV0dXJuIG1fcmVwbHk7Ci0gICAgfQotcHVi
bGljOgotICAgIHZvaWQgZ2V0KGNvbnN0IFFOZXR3b3JrUmVxdWVzdCAmcmVxdWVzdCkKLSAgICB7
Ci0gICAgICAgIGVtaXQgbG9jYWxHZXRSZXF1ZXN0ZWQocmVxdWVzdCk7Ci0gICAgfQotICAgIHZv
aWQgcG9zdChjb25zdCBRTmV0d29ya1JlcXVlc3QgJnJlcXVlc3QsIFFJT0RldmljZSogZGF0YSkK
LSAgICB7Ci0gICAgICAgIGVtaXQgbG9jYWxQb3N0UmVxdWVzdGVkKHJlcXVlc3QsIGRhdGEpOwot
ICAgIH0KLSAgICB2b2lkIGhlYWQoY29uc3QgUU5ldHdvcmtSZXF1ZXN0ICZyZXF1ZXN0KQotICAg
IHsKLSAgICAgICAgZW1pdCBsb2NhbEhlYWRSZXF1ZXN0ZWQocmVxdWVzdCk7Ci0gICAgfQotICAg
IHZvaWQgcHV0KGNvbnN0IFFOZXR3b3JrUmVxdWVzdCAmcmVxdWVzdCwgUUlPRGV2aWNlKiBkYXRh
KQotICAgIHsKLSAgICAgICAgZW1pdCBsb2NhbFB1dFJlcXVlc3RlZChyZXF1ZXN0LCBkYXRhKTsK
LSAgICB9Ci0gICAgdm9pZCBkZWxldGVSZXNvdXJjZShjb25zdCBRTmV0d29ya1JlcXVlc3QgJnJl
cXVlc3QpCi0gICAgewotICAgICAgICBlbWl0IGxvY2FsRGVsZXRlUmVzb3VyY2VSZXF1ZXN0ZWQo
cmVxdWVzdCk7Ci0gICAgfQotI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg0LCA3
LCAwKQotICAgIHZvaWQgc2VuZEN1c3RvbVJlcXVlc3QoY29uc3QgUU5ldHdvcmtSZXF1ZXN0ICZy
ZXF1ZXN0LCBjb25zdCBRQnl0ZUFycmF5JiB2ZXJiKQotICAgIHsKLSAgICAgICAgZW1pdCBsb2Nh
bEN1c3RvbVJlcXVlc3RSZXF1ZXN0ZWQocmVxdWVzdCwgdmVyYik7Ci0gICAgfQotI2VuZGlmCi0K
LXNpZ25hbHM6Ci0gICAgdm9pZCBsb2NhbEdldFJlcXVlc3RlZChjb25zdCBRTmV0d29ya1JlcXVl
c3QmIHJlcXVlc3QpOwotICAgIHZvaWQgbG9jYWxQb3N0UmVxdWVzdGVkKGNvbnN0IFFOZXR3b3Jr
UmVxdWVzdCYgcmVxdWVzdCwgUUlPRGV2aWNlKiBkYXRhKTsKLSAgICB2b2lkIGxvY2FsSGVhZFJl
cXVlc3RlZChjb25zdCBRTmV0d29ya1JlcXVlc3QmIHJlcXVlc3QpOwotICAgIHZvaWQgbG9jYWxQ
dXRSZXF1ZXN0ZWQoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiByZXF1ZXN0LCBRSU9EZXZpY2UqIGRh
dGEpOwotICAgIHZvaWQgbG9jYWxEZWxldGVSZXNvdXJjZVJlcXVlc3RlZChjb25zdCBRTmV0d29y
a1JlcXVlc3QmIHJlcXVlc3QpOwotICAgIHZvaWQgbG9jYWxDdXN0b21SZXF1ZXN0UmVxdWVzdGVk
KGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUUJ5dGVBcnJheSYgdmVyYik7
Ci0gICAgdm9pZCBsb2NhbEFib3J0UmVxdWVzdGVkKCk7Ci0gICAgdm9pZCBsb2NhbFNldEZvcndh
cmRpbmdEZWZlcmVkUmVxdWVzdGVkKGJvb2wgZm9yd2FyZGluZ0RlZmVyZWQpOwotCi0gICAgdm9p
ZCBmaW5pc2hlZCgpOwotICAgIHZvaWQgcmVhZHlSZWFkKCk7Ci0gICAgdm9pZCBtZXRhRGF0YUNo
YW5nZWQoKTsKLSAgICB2b2lkIHVwbG9hZFByb2dyZXNzKHFpbnQ2NCBieXRlc1NlbnQsIHFpbnQ2
NCBieXRlc1RvdGFsKTsKLSAgICB2b2lkIGRhdGFSZWNlaXZlZChjb25zdCBRQnl0ZUFycmF5ICZk
YXRhKTsKLQotcHJpdmF0ZSBzbG90czoKLSAgICB2b2lkIGxvY2FsR2V0KGNvbnN0IFFOZXR3b3Jr
UmVxdWVzdCYgcmVxdWVzdCk7Ci0gICAgdm9pZCBsb2NhbFBvc3QoY29uc3QgUU5ldHdvcmtSZXF1
ZXN0JiByZXF1ZXN0LCBRSU9EZXZpY2UqIGRhdGEpOwotICAgIHZvaWQgbG9jYWxIZWFkKGNvbnN0
IFFOZXR3b3JrUmVxdWVzdCYgcmVxdWVzdCk7Ci0gICAgdm9pZCBsb2NhbFB1dChjb25zdCBRTmV0
d29ya1JlcXVlc3QmIHJlcXVlc3QsIFFJT0RldmljZSogZGF0YSk7Ci0gICAgdm9pZCBsb2NhbERl
bGV0ZVJlc291cmNlKGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYgcmVxdWVzdCk7Ci0gICAgdm9pZCBs
b2NhbEN1c3RvbVJlcXVlc3QoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBR
Qnl0ZUFycmF5JiB2ZXJiKTsKLSAgICB2b2lkIGxvY2FsQWJvcnQoKTsKLSAgICB2b2lkIGxvY2Fs
Rm9yd2FyZERhdGEoKTsKLSAgICB2b2lkIGxvY2FsU2V0Rm9yd2FyZGluZ0RlZmVyZWQoYm9vbCBm
b3J3YXJkaW5nRGVmZXJlZCk7Ci0gICAgdm9pZCBsb2NhbE1pcnJvck1lbWJlcnMoKTsKLQotcHJp
dmF0ZToKLSAgICB2b2lkIGxvY2FsU2V0UmVwbHkoUU5ldHdvcmtSZXBseSAqcmVwbHkpOwotCi0g
ICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyICptX21hbmFnZXI7Ci0gICAgUU5ldHdvcmtSZXBseSAq
bV9yZXBseTsKLSAgICBib29sIG1fZm9yd2FyZGluZ0RlZmVyZWQ7Ci0KLSAgICAvLyBNaXJyb3Jl
ZCBtZW1iZXJzCi0gICAgUU11dGV4IG1fbWlycm9yZWRNZW1iZXJzTXV0ZXg7Ci0gICAgUUJ5dGVB
cnJheSBtX2NvbnRlbnREaXNwb3NpdGlvbkhlYWRlcjsKLSAgICBxbG9uZ2xvbmcgbV9jb250ZW50
TGVuZ3RoSGVhZGVyOwotICAgIFFTdHJpbmcgbV9jb250ZW50VHlwZUhlYWRlcjsKLSAgICBRTmV0
d29ya1JlcGx5OjpOZXR3b3JrRXJyb3IgbV9lcnJvcjsKLSAgICBRU3RyaW5nIG1fZXJyb3JTdHJp
bmc7Ci0gICAgUUJ5dGVBcnJheSBtX2h0dHBSZWFzb25QaHJhc2U7Ci0gICAgaW50IG1faHR0cFN0
YXR1c0NvZGU7Ci0gICAgUVVybCBtX3VybDsKLSAgICBRVXJsIG1fcmVkaXJlY3Rpb25UYXJnZXQ7
Ci0gICAgUUxpc3Q8UmF3SGVhZGVyUGFpcj4gbV9yYXdIZWFkZXJQYWlyczsKLX07Ci0KLX0KLQot
Ci0jZW5kaWYgLy8gUXROQU1UaHJlYWRTYWZlUHJveHlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZUhhbmRsZVF0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VIYW5kbGVRdC5jcHAKaW5kZXggNTYx
MjViN2ExYThlOGI2YWE1NzI4YjkwNWNlODRmM2YzZjY5MTlkNS4uMzc5NTkxODYxNmY2ZTE1YmI4
MmE0MmM5YWFjZjUwYjZmMjM4OGE0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9xdC9SZXNvdXJjZUhhbmRsZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlSGFuZGxlUXQuY3BwCkBAIC0zNSw3ICszNSw2IEBA
CiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRRdC5oIgotI2luY2x1ZGUgIlF0TkFNVGhyZWFk
U2FmZVByb3h5LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYWdl
LmgiCiAjaW5jbHVkZSAiUU5ldHdvcmtSZXBseUhhbmRsZXIuaCIKQEAgLTE1NywxMyArMTU2LDIw
IEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OndpbGxMb2FkRnJvbUNhY2hlKFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCwgRnJhbWUqIGZyYW1lKQogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAorICAgIFFOZXR3b3JrQWNjZXNzTWFuYWdlciogbWFuYWdlciA9IDA7CisgICAg
UUFic3RyYWN0TmV0d29ya0NhY2hlKiBjYWNoZSA9IDA7CiAgICAgaWYgKGZyYW1lLT5sb2FkZXIo
KS0+bmV0d29ya2luZ0NvbnRleHQoKSkgewotICAgICAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXIq
IG1hbmFnZXIgPSBmcmFtZS0+bG9hZGVyKCktPm5ldHdvcmtpbmdDb250ZXh0KCktPm5ldHdvcmtB
Y2Nlc3NNYW5hZ2VyKCk7Ci0gICAgICAgIFF0TkFNVGhyZWFkU2FmZVByb3h5IG1hbmFnZXJQcm94
eShtYW5hZ2VyKTsKLSAgICAgICAgaWYgKG1hbmFnZXJQcm94eS53aWxsTG9hZEZyb21DYWNoZShy
ZXF1ZXN0LnVybCgpKSkgewotICAgICAgICAgICAgcmVxdWVzdC5zZXRDYWNoZVBvbGljeShSZXR1
cm5DYWNoZURhdGFEb250TG9hZCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQorICAgICAgICBtYW5hZ2VyID0gZnJhbWUtPmxvYWRlcigpLT5uZXR3b3JraW5nQ29udGV4dCgp
LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpOworICAgICAgICBjYWNoZSA9IG1hbmFnZXItPmNhY2hl
KCk7CisgICAgfQorCisgICAgaWYgKCFjYWNoZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgUU5ldHdvcmtDYWNoZU1ldGFEYXRhIGRhdGEgPSBjYWNoZS0+bWV0YURhdGEocmVxdWVzdC51
cmwoKSk7CisgICAgaWYgKGRhdGEuaXNWYWxpZCgpKSB7CisgICAgICAgIHJlcXVlc3Quc2V0Q2Fj
aGVQb2xpY3koUmV0dXJuQ2FjaGVEYXRhRG9udExvYWQpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9Db29raWVKYXJRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9D
b29raWVKYXJRdC5jcHAKaW5kZXggZTVhMmRjZGZkMzgzNmRkODEzZmYxMTI2MDNlY2I5MjE0MzY1
NmQyNi4uZjVjMTBmOTVjMmVhY2M3ODgxOGUwZmU3N2VhNGUxYTk5MjUxYTQ2ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0Nvb2tpZUphclF0LmNwcApAQCAtMzQsNyArMzQsNiBAQAog
I2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJOZXR3b3JraW5nQ29udGV4dC5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiUXROQU1UaHJlYWRTYWZlUHJveHkuaCIK
ICNpbmNsdWRlICJxd2ViZnJhbWUuaCIKICNpbmNsdWRlICJxd2VicGFnZS5oIgogI2luY2x1ZGUg
PFFOZXR3b3JrQWNjZXNzTWFuYWdlcj4KQEAgLTQzLDggKzQyLDcgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi0KLXN0YXRpYyBRTmV0d29ya0FjY2Vzc01hbmFnZXIgKm5ldHdvcmtBY2Nlc3NN
YW5hZ2VyKGNvbnN0IERvY3VtZW50ICpkb2N1bWVudCkKK3N0YXRpYyBRTmV0d29ya0Nvb2tpZUph
ciAqY29va2llSmFyKGNvbnN0IERvY3VtZW50ICpkb2N1bWVudCkKIHsKICAgICBpZiAoIWRvY3Vt
ZW50KQogICAgICAgICByZXR1cm4gMDsKQEAgLTU0LDMwICs1MiwzOCBAQCBzdGF0aWMgUU5ldHdv
cmtBY2Nlc3NNYW5hZ2VyICpuZXR3b3JrQWNjZXNzTWFuYWdlcihjb25zdCBEb2N1bWVudCAqZG9j
dW1lbnQpCiAgICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKICAgICBp
ZiAoIWxvYWRlcikKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGxvYWRlci0+bmV0d29y
a2luZ0NvbnRleHQoKS0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKTsKKyAgICBRTmV0d29ya0FjY2Vz
c01hbmFnZXIqIG1hbmFnZXIgPSBsb2FkZXItPm5ldHdvcmtpbmdDb250ZXh0KCktPm5ldHdvcmtB
Y2Nlc3NNYW5hZ2VyKCk7CisgICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IG1hbmFnZXItPmNv
b2tpZUphcigpOworICAgIHJldHVybiBqYXI7CiB9CiAKIHZvaWQgc2V0Q29va2llcyhEb2N1bWVu
dCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAg
ICBRTmV0d29ya0FjY2Vzc01hbmFnZXIqIG1hbmFnZXIgPSBuZXR3b3JrQWNjZXNzTWFuYWdlcihk
b2N1bWVudCk7Ci0gICAgaWYgKCFtYW5hZ2VyKQorICAgIFFVcmwgdSh1cmwpOworICAgIFFVcmwg
cChkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CisgICAgUU5ldHdvcmtDb29raWVK
YXIqIGphciA9IGNvb2tpZUphcihkb2N1bWVudCk7CisgICAgaWYgKCFqYXIpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIC8vIENyZWF0ZSB0aGUgbWFuaXB1bGF0b3Igb24gdGhlIGhlYXAgdG8gbGV0
IGl0IGxpdmUgdW50aWwgdGhlCi0gICAgLy8gYXN5bmMgcmVxdWVzdCBpcyBwaWNrZWQgYnkgdGhl
IG90aGVyIHRocmVhZCdzIGV2ZW50IGxvb3AuCi0gICAgUXROQU1UaHJlYWRTYWZlUHJveHkqIG1h
bmFnZXJQcm94eSA9IG5ldyBRdE5BTVRocmVhZFNhZmVQcm94eShtYW5hZ2VyKTsKLSAgICBtYW5h
Z2VyUHJveHktPnNldENvb2tpZXModXJsLCB2YWx1ZSk7Ci0gICAgbWFuYWdlclByb3h5LT5kZWxl
dGVMYXRlcigpOworICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVzID0gUU5ldHdvcmtD
b29raWU6OnBhcnNlQ29va2llcyhRU3RyaW5nKHZhbHVlKS50b0FzY2lpKCkpOworICAgIFFMaXN0
PFFOZXR3b3JrQ29va2llPjo6SXRlcmF0b3IgaXQgPSBjb29raWVzLmJlZ2luKCk7CisgICAgd2hp
bGUgKGl0ICE9IGNvb2tpZXMuZW5kKCkpIHsKKyAgICAgICAgaWYgKGl0LT5pc0h0dHBPbmx5KCkp
CisgICAgICAgICAgICBpdCA9IGNvb2tpZXMuZXJhc2UoaXQpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICArK2l0OworICAgIH0KKyAgICBqYXItPnNldENvb2tpZXNGcm9tVXJsKGNvb2tpZXMs
IHUpOwogfQogCiBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0
IEtVUkwmIHVybCkKIHsKLSAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXIqIG1hbmFnZXIgPSBuZXR3
b3JrQWNjZXNzTWFuYWdlcihkb2N1bWVudCk7Ci0gICAgaWYgKCFtYW5hZ2VyKQorICAgIFFVcmwg
dSh1cmwpOworICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBjb29raWVKYXIoZG9jdW1lbnQp
OworICAgIGlmICghamFyKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBRdE5BTVRo
cmVhZFNhZmVQcm94eSBtYW5hZ2VyUHJveHkobWFuYWdlcik7Ci0gICAgUUxpc3Q8UU5ldHdvcmtD
b29raWU+IGNvb2tpZXMgPSBtYW5hZ2VyUHJveHkuY29va2llc0ZvclVybCh1cmwpOworICAgIFFM
aXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVzID0gamFyLT5jb29raWVzRm9yVXJsKHUpOwogICAg
IGlmIChjb29raWVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCkBAIC05
NCwxMiArMTAwLDEyIEBAIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgS1VSTCYgdXJsKQogCiBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUo
Y29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMICZ1cmwpCiB7Ci0gICAgUU5ldHdv
cmtBY2Nlc3NNYW5hZ2VyKiBtYW5hZ2VyID0gbmV0d29ya0FjY2Vzc01hbmFnZXIoZG9jdW1lbnQp
OwotICAgIGlmICghbWFuYWdlcikKKyAgICBRVXJsIHUodXJsKTsKKyAgICBRTmV0d29ya0Nvb2tp
ZUphciogamFyID0gY29va2llSmFyKGRvY3VtZW50KTsKKyAgICBpZiAoIWphcikKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogCi0gICAgUXROQU1UaHJlYWRTYWZlUHJveHkgbWFuYWdlclByb3h5
KG1hbmFnZXIpOwotICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVzID0gbWFuYWdlclBy
b3h5LmNvb2tpZXNGb3JVcmwodXJsKTsKKyAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2ll
cyA9IGphci0+Y29va2llc0ZvclVybCh1KTsKICAgICBpZiAoY29va2llcy5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKIApAQCAtMTE0LDEyICsxMjAsOCBAQCBTdHJpbmcgY29v
a2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25z
dCBLVVJMICZ1cmwpCiAKIGJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIGRvY3Vt
ZW50KQogewotICAgIFFOZXR3b3JrQWNjZXNzTWFuYWdlciogbWFuYWdlciA9IG5ldHdvcmtBY2Nl
c3NNYW5hZ2VyKGRvY3VtZW50KTsKLSAgICBpZiAoIW1hbmFnZXIpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIFF0TkFNVGhyZWFkU2FmZVByb3h5IG1hbmFnZXJQcm94eShtYW5hZ2VyKTsK
LSAgICByZXR1cm4gbWFuYWdlclByb3h5Lmhhc0Nvb2tpZUphcigpOworICAgIFFOZXR3b3JrQ29v
a2llSmFyKiBqYXIgPSBjb29raWVKYXIoZG9jdW1lbnQpOworICAgIHJldHVybiBqYXI7CiB9CiAK
IGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8
Q29va2llPiYgcmF3Q29va2llcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggZWY2NWVkNTlkNTg0MjZiZTkz
MzBmYjI1NjY2M2E2MTUxNjY1MTYzNy4uZTgwNWVmZjA0YWM2NzdiMzJjMDEyZDhkNzEwZWU0NjAy
ODNkMTRiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMS0wMi0yNCAgSm9j
ZWx5biBUdXJjb3R0ZSAgPGpvY2VseW4udHVyY290dGVAbm9raWEuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gUmV2ZXJ0IHRoZSBzdXBw
b3J0IGZvciBRTkFNIGFmZmluZWQgdG8gYSBkaWZmZXJlbnQgdGhyZWFkLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTUxNDkKKworICAgICAgICBRdCA0
Ljggd2lsbCBoYXZlIFFOQU0gdXNlIGl0cyBvd24gdGhyZWFkIGludGVybmFsbHkgYnkgZGVmYXVs
dCwKKyAgICAgICAgbm8gbmVlZCB0byBrZWVwIHRoaXMgY29tcGxleGl0eSBpbiBXZWJLaXQuCisK
KyAgICAgICAgVGhpcyBtYWlubHkgcmV2ZXJ0czoKKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0
Lm9yZy9jaGFuZ2VzZXQvNzM3MTAKKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFu
Z2VzZXQvNzM3MTIKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6ZG93bmxvYWQp
OgorICAgICAgICAqIHRlc3RzL3F3ZWJwYWdlL3RzdF9xd2VicGFnZS5jcHA6CisKIDIwMTEtMDIt
MjMgIEFsZXhpcyBNZW5hcmQgIDxhbGV4aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgQXJpeWEgSGlkYXlhdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCmluZGV4IDBlMGFjNmU0
ZjA2NmIyNzY2MTM0Yjg0ZGMwYzY4NzRmNGYxOTJlYjEuLjgwMjQyZmNiZjgwZGFhMzljZjNmYzM2
OTI0YzE4OWE3Yjc5MThjODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcApAQCAtNTksNyArNTksNiBAQAogI2lu
Y2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKLSNpbmNsdWRlICJRdE5BTVRocmVhZFNhZmVQcm94
eS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUU5ldHdvcmtSZXBs
eUhhbmRsZXIuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCkBAIC05OTEs
MTMgKzk5MCwxMyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRvd25sb2FkKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFdlYkNvcgogICAgICAgICByZXR1cm47CiAK
ICAgICBRTmV0d29ya1JlcGx5SGFuZGxlciogaGFuZGxlciA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwo
KS0+bV9qb2I7Ci0gICAgUXROZXR3b3JrUmVwbHlUaHJlYWRTYWZlUHJveHkqIHJlcGx5UHJveHkg
PSBoYW5kbGVyLT5yZWxlYXNlKCk7Ci0gICAgaWYgKHJlcGx5UHJveHkpIHsKKyAgICBRTmV0d29y
a1JlcGx5KiByZXBseSA9IGhhbmRsZXItPnJlbGVhc2UoKTsKKyAgICBpZiAocmVwbHkpIHsKICAg
ICAgICAgUVdlYlBhZ2UgKnBhZ2UgPSBtX3dlYkZyYW1lLT5wYWdlKCk7CiAgICAgICAgIGlmIChw
YWdlLT5mb3J3YXJkVW5zdXBwb3J0ZWRDb250ZW50KCkpCi0gICAgICAgICAgICBlbWl0IHBhZ2Ut
PnVuc3VwcG9ydGVkQ29udGVudChyZXBseVByb3h5LT5yZXBseSgpKTsKKyAgICAgICAgICAgIGVt
aXQgcGFnZS0+dW5zdXBwb3J0ZWRDb250ZW50KHJlcGx5KTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgcmVwbHlQcm94eS0+YWJvcnQoKTsKKyAgICAgICAgICAgIHJlcGx5LT5hYm9ydCgpOwog
ICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC90ZXN0cy9xd2VicGFnZS90
c3RfcXdlYnBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy9xd2VicGFnZS90c3RfcXdl
YnBhZ2UuY3BwCmluZGV4IDI1YjZkNDUwODRkOGIzMTIwM2U5NzI3NTQ0OTgxYmY0NzY1ODQ0Mzgu
LjBiMmQ5YWNlYmRjM2M4YmUxYjgyMDdlYWMwZTNjY2ViNWE3YzVlMzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvcXQvdGVzdHMvcXdlYnBhZ2UvdHN0X3F3ZWJwYWdlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L3F0L3Rlc3RzL3F3ZWJwYWdlL3RzdF9xd2VicGFnZS5jcHAKQEAgLTEzMyw5ICsx
MzMsNyBAQCBwcml2YXRlIHNsb3RzOgogICAgIHZvaWQgZmluZFRleHQoKTsKICAgICB2b2lkIHN1
cHBvcnRlZENvbnRlbnRUeXBlKCk7CiAgICAgdm9pZCBpbmZpbml0ZUxvb3BKUygpOwotICAgIHZv
aWQgbmV0d29ya0FjY2Vzc01hbmFnZXJPbkRpZmZlcmVudFRocmVhZCgpOwogICAgIHZvaWQgbmF2
aWdhdG9yQ29va2llRW5hYmxlZCgpOwotICAgIHZvaWQgbmF2aWdhdG9yQ29va2llRW5hYmxlZEZv
ck5ldHdvcmtBY2Nlc3NNYW5hZ2VyT25EaWZmZXJlbnRUaHJlYWQoKTsKICAgICB2b2lkIGRlbGV0
ZVFXZWJWaWV3VHdpY2UoKTsKIAogI2lmZGVmIFFfT1NfTUFDCkBAIC0yNzAzLDU0ICsyNzAxLDYg
QEAgdm9pZCB0c3RfUVdlYlBhZ2U6OnN1cHBvcnRlZENvbnRlbnRUeXBlKCkKICAgICAgIFFWRVJJ
RlkyKG1fcGFnZS0+c3VwcG9ydHNDb250ZW50VHlwZShtaW1lVHlwZSksIFFTdHJpbmcoIkNhbm5v
dCBoYW5kbGUgY29udGVudCB0eXBlcyAnJTEnISIpLmFyZyhtaW1lVHlwZSkudG9MYXRpbjEoKSk7
CiB9CiAKLWNsYXNzIFF0TkFNVGhyZWFkIDogcHVibGljIFFUaHJlYWQgewotcHVibGljOgotICAg
IFF0TkFNVGhyZWFkKCkKLSAgICAgICAgOiBtX3FuYW0oMCkKLSAgICB7Ci0gICAgfQotICAgIH5R
dE5BTVRocmVhZCgpCi0gICAgewotICAgICAgICBxdWl0KCk7Ci0gICAgICAgIHdhaXQoKTsKLSAg
ICB9Ci0KLSAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXIqIG5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkK
LSAgICB7Ci0gICAgICAgIFFNdXRleExvY2tlciBsb2NrKCZtX211dGV4KTsKLSAgICAgICAgd2hp
bGUgKCFtX3FuYW0pCi0gICAgICAgICAgICBtX3dhaXRDb25kaXRpb24ud2FpdCgmbV9tdXRleCk7
Ci0gICAgICAgIHJldHVybiBtX3FuYW07Ci0gICAgfQotcHJvdGVjdGVkOgotICAgIHZvaWQgcnVu
KCkKLSAgICB7Ci0gICAgICAgIFFfQVNTRVJUKCFtX3FuYW0pOwotICAgICAgICB7Ci0gICAgICAg
ICAgICBRTXV0ZXhMb2NrZXIgbG9jaygmbV9tdXRleCk7Ci0gICAgICAgICAgICBtX3FuYW0gPSBu
ZXcgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOwotICAgICAgICAgICAgbV93YWl0Q29uZGl0aW9uLndh
a2VBbGwoKTsKLSAgICAgICAgfQotICAgICAgICBleGVjKCk7Ci0gICAgICAgIGRlbGV0ZSBtX3Fu
YW07Ci0gICAgfQotcHJpdmF0ZToKLSAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXIqIG1fcW5hbTsK
LSAgICBRTXV0ZXggbV9tdXRleDsKLSAgICBRV2FpdENvbmRpdGlvbiBtX3dhaXRDb25kaXRpb247
Ci19OwotCi12b2lkIHRzdF9RV2ViUGFnZTo6bmV0d29ya0FjY2Vzc01hbmFnZXJPbkRpZmZlcmVu
dFRocmVhZCgpCi17Ci0gICAgUXROQU1UaHJlYWQgcW5hbVRocmVhZDsKLSAgICBxbmFtVGhyZWFk
LnN0YXJ0KCk7Ci0gICAgbV9wYWdlLT5zZXROZXR3b3JrQWNjZXNzTWFuYWdlcihxbmFtVGhyZWFk
Lm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkpOwotICAgIFFTaWduYWxTcHkgbG9hZFNweShtX3BhZ2Us
IFNJR05BTChsb2FkRmluaXNoZWQoYm9vbCkpKTsKLSAgICBRVXJsIHVybCA9IFFVcmwoInFyYzov
Ly9yZXNvdXJjZXMvaW5kZXguaHRtbCIpOwotICAgIG1fcGFnZS0+bWFpbkZyYW1lKCktPmxvYWQo
dXJsKTsKLSAgICBRVFJZX0NPTVBBUkUobG9hZFNweS5jb3VudCgpLCAxKTsKLSAgICBRQ09NUEFS
RShtX3BhZ2UtPm1haW5GcmFtZSgpLT5jaGlsZEZyYW1lcygpWzBdLT51cmwoKSwgUVVybCgicXJj
Oi8vL3Jlc291cmNlcy9mcmFtZV9hLmh0bWwiKSk7Ci19CiAKIHZvaWQgdHN0X1FXZWJQYWdlOjpu
YXZpZ2F0b3JDb29raWVFbmFibGVkKCkKIHsKQEAgLTI3NjMsMTkgKzI3MTMsNiBAQCB2b2lkIHRz
dF9RV2ViUGFnZTo6bmF2aWdhdG9yQ29va2llRW5hYmxlZCgpCiAgICAgUVZFUklGWShtX3BhZ2Ut
Pm1haW5GcmFtZSgpLT5ldmFsdWF0ZUphdmFTY3JpcHQoIm5hdmlnYXRvci5jb29raWVFbmFibGVk
IikudG9Cb29sKCkpOwogfQogCi12b2lkIHRzdF9RV2ViUGFnZTo6bmF2aWdhdG9yQ29va2llRW5h
YmxlZEZvck5ldHdvcmtBY2Nlc3NNYW5hZ2VyT25EaWZmZXJlbnRUaHJlYWQoKQotewotICAgIFF0
TkFNVGhyZWFkIHFuYW1UaHJlYWQ7Ci0gICAgcW5hbVRocmVhZC5zdGFydCgpOwotICAgIG1fcGFn
ZS0+c2V0TmV0d29ya0FjY2Vzc01hbmFnZXIocW5hbVRocmVhZC5uZXR3b3JrQWNjZXNzTWFuYWdl
cigpKTsKLQotICAgIC8vIFRoaXMgY2FsbCBhY2Nlc3MgdGhlIGNvb2tpZSBqYXIsIHRoZSBjb29r
aWUgamFyIG11c3QgYmUgaW4gdGhlIHNhbWUgdGhyZWFkIGFzCi0gICAgLy8gdGhlIG5ldHdvcmsg
YWNjZXNzIG1hbmFnZXIuCi0gICAgUVZFUklGWShtX3BhZ2UtPm1haW5GcmFtZSgpLT5ldmFsdWF0
ZUphdmFTY3JpcHQoIm5hdmlnYXRvci5jb29raWVFbmFibGVkIikudG9Cb29sKCkpOwotCi0gICAg
UUNPTVBBUkUocW5hbVRocmVhZC5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKS0+
dGhyZWFkKCksICZxbmFtVGhyZWFkKTsKLX0KLQogI2lmZGVmIFFfT1NfTUFDCiB2b2lkIHRzdF9R
V2ViUGFnZTo6bWFjQ29weVVuaWNvZGVUb0NsaXBib2FyZCgpCiB7CmRpZmYgLS1naXQgYS9Ub29s
cy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYWIzNDg1ZDgwZjM5YWQyNDNhMzA0
NmU5MWRiNTY0MThmNDUwMWVhNS4uNjc5NGFkMzdiYjBjZmRlZDk3ZWUwMjIxYWNjODJhZmYwODRh
YThiMyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI3IEBACisyMDExLTAyLTI0ICBKb2NlbHluIFR1cmNvdHRlICA8am9jZWx5bi50
dXJjb3R0ZUBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW1F0XSBSZXZlcnQgdGhlIHN1cHBvcnQgZm9yIFFOQU0gYWZmaW5lZCB0byBh
IGRpZmZlcmVudCB0aHJlYWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01NTE0OQorCisgICAgICAgIFF0IDQuOCB3aWxsIGhhdmUgUU5BTSB1c2UgaXRz
IG93biB0aHJlYWQgaW50ZXJuYWxseSBieSBkZWZhdWx0LAorICAgICAgICBubyBuZWVkIHRvIGtl
ZXAgdGhpcyBjb21wbGV4aXR5IGluIFdlYktpdC4KKworICAgICAgICBUaGlzIG1haW5seSByZXZl
cnRzOgorICAgICAgICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC83MzcxMAorICAg
ICAgICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC83MzcxMgorCisgICAgICAgICog
UXRUZXN0QnJvd3Nlci9sYXVuY2hlcndpbmRvdy5jcHA6CisgICAgICAgIChMYXVuY2hlcldpbmRv
dzo6fkxhdW5jaGVyV2luZG93KToKKyAgICAgICAgKExhdW5jaGVyV2luZG93Ojppbml0aWFsaXpl
Vmlldyk6CisgICAgICAgIChMYXVuY2hlcldpbmRvdzo6Y3JlYXRlQ2hyb21lKToKKyAgICAgICAg
KiBRdFRlc3RCcm93c2VyL2xhdW5jaGVyd2luZG93Lmg6CisgICAgICAgIChXaW5kb3dPcHRpb25z
OjpXaW5kb3dPcHRpb25zKToKKyAgICAgICAgKiBRdFRlc3RCcm93c2VyL3dlYnBhZ2UuY3BwOgor
ICAgICAgICAoV2ViUGFnZTo6V2ViUGFnZSk6CisgICAgICAgICogUXRUZXN0QnJvd3Nlci93ZWJw
YWdlLmg6CisKIDIwMTEtMDItMjIgIE9qYW4gVmFmYWkgIDxvamFuQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgpkaWZmIC0tZ2l0IGEvVG9vbHMvUXRUZXN0
QnJvd3Nlci9sYXVuY2hlcndpbmRvdy5jcHAgYi9Ub29scy9RdFRlc3RCcm93c2VyL2xhdW5jaGVy
d2luZG93LmNwcAppbmRleCBiZDMzMmZjNTY2MjgzNTE3NTU4NTUzYmEyMjg5NjI1MDQ4MTU1MzM0
Li5kNzZhZDNhMTBkNDYwOWNjMTRhNjk4NGY3ODZlMWJjNDIzZTI1MWVhIDEwMDY0NAotLS0gYS9U
b29scy9RdFRlc3RCcm93c2VyL2xhdW5jaGVyd2luZG93LmNwcAorKysgYi9Ub29scy9RdFRlc3RC
cm93c2VyL2xhdW5jaGVyd2luZG93LmNwcApAQCAtNTYsOSArNTYsNiBAQCBMYXVuY2hlcldpbmRv
dzo6TGF1bmNoZXJXaW5kb3coV2luZG93T3B0aW9ucyogZGF0YSwgUUdyYXBoaWNzU2NlbmUqIHNo
YXJlZFNjZW5lKQogTGF1bmNoZXJXaW5kb3c6On5MYXVuY2hlcldpbmRvdygpCiB7CiAgICAgZ3Jh
Ylpvb21LZXlzKGZhbHNlKTsKLQotICAgIGlmIChwYWdlKCkpCi0gICAgICAgIHBhZ2UoKS0+c2V0
UW5hbVRocmVhZGVkKGZhbHNlKTsKIH0KIAogdm9pZCBMYXVuY2hlcldpbmRvdzo6aW5pdCgpCkBA
IC05OSw3ICs5Niw2IEBAIHZvaWQgTGF1bmNoZXJXaW5kb3c6OmluaXRpYWxpemVWaWV3KCkKICAg
ICBtX2lucHV0VXJsID0gYWRkcmVzc1VybCgpOwogICAgIFFVcmwgdXJsID0gcGFnZSgpLT5tYWlu
RnJhbWUoKS0+dXJsKCk7CiAgICAgc2V0UGFnZShuZXcgV2ViUGFnZSh0aGlzKSk7Ci0gICAgcGFn
ZSgpLT5zZXRRbmFtVGhyZWFkZWQobV93aW5kb3dPcHRpb25zLnVzZVRocmVhZGVkUW5hbSk7CiAK
ICAgICBRU3BsaXR0ZXIqIHNwbGl0dGVyID0gc3RhdGljX2Nhc3Q8UVNwbGl0dGVyKj4oY2VudHJh
bFdpZGdldCgpKTsKIApAQCAtMjQ2LDEwICsyNDIsNiBAQCB2b2lkIExhdW5jaGVyV2luZG93Ojpj
cmVhdGVDaHJvbWUoKQogICAgIHRvZ2dsZVdlYkdMLT5zZXRDaGVja2FibGUodHJ1ZSk7CiAgICAg
dG9nZ2xlV2ViR0wtPnNldENoZWNrZWQoc2V0dGluZ3MtPnRlc3RBdHRyaWJ1dGUoUVdlYlNldHRp
bmdzOjpXZWJHTEVuYWJsZWQpKTsKIAotICAgIFFBY3Rpb24qIHRvZ2dsZVRocmVhZGVkUW5hbSA9
IHRvb2xzTWVudS0+YWRkQWN0aW9uKCJUb2dnbGUgdGhyZWFkZWQgbmV0d29yayIsIHRoaXMsIFNM
T1QodG9nZ2xlVGhyZWFkZWRRbmFtKGJvb2wpKSk7Ci0gICAgdG9nZ2xlVGhyZWFkZWRRbmFtLT5z
ZXRDaGVja2FibGUodHJ1ZSk7Ci0gICAgdG9nZ2xlVGhyZWFkZWRRbmFtLT5zZXRDaGVja2VkKG1f
d2luZG93T3B0aW9ucy51c2VUaHJlYWRlZFFuYW0pOwotCiAgICAgUUFjdGlvbiogc3BhdGlhbE5h
dmlnYXRpb25BY3Rpb24gPSB0b29sc01lbnUtPmFkZEFjdGlvbigiVG9nZ2xlIFNwYXRpYWwgTmF2
aWdhdGlvbiIsIHRoaXMsIFNMT1QodG9nZ2xlU3BhdGlhbE5hdmlnYXRpb24oYm9vbCkpKTsKICAg
ICBzcGF0aWFsTmF2aWdhdGlvbkFjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUpOwogICAgIHNwYXRp
YWxOYXZpZ2F0aW9uQWN0aW9uLT5zZXRTaG9ydGN1dChRS2V5U2VxdWVuY2UoUXQ6OkNUUkwgfCBR
dDo6U0hJRlQgfCBRdDo6S2V5X1MpKTsKQEAgLTc1NywxMiArNzQ5LDYgQEAgdm9pZCBMYXVuY2hl
cldpbmRvdzo6dG9nZ2xlV2ViR0woYm9vbCB0b2dnbGUpCiAgICAgcGFnZSgpLT5zZXR0aW5ncygp
LT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpXZWJHTEVuYWJsZWQsIHRvZ2dsZSk7CiB9CiAK
LXZvaWQgTGF1bmNoZXJXaW5kb3c6OnRvZ2dsZVRocmVhZGVkUW5hbShib29sIHRvZ2dsZSkKLXsK
LSAgICBtX3dpbmRvd09wdGlvbnMudXNlVGhyZWFkZWRRbmFtID0gdG9nZ2xlOwotICAgIHBhZ2Uo
KS0+c2V0UW5hbVRocmVhZGVkKHRvZ2dsZSk7Ci19Ci0KIHZvaWQgTGF1bmNoZXJXaW5kb3c6OmFu
aW1hdGVkRmxpcCgpCiB7CiAgICAgcW9iamVjdF9jYXN0PFdlYlZpZXdHcmFwaGljc0Jhc2VkKj4o
bV92aWV3KS0+YW5pbWF0ZWRGbGlwKCk7CmRpZmYgLS1naXQgYS9Ub29scy9RdFRlc3RCcm93c2Vy
L2xhdW5jaGVyd2luZG93LmggYi9Ub29scy9RdFRlc3RCcm93c2VyL2xhdW5jaGVyd2luZG93LmgK
aW5kZXggZTEzODU4ZTY2MTJiZGM0ZTg2N2VmMDM2NzM0MTE1NjBiNzBhZTNmZC4uMGI4ZTg3ZDli
NmI0NTI0ZGNkZDEwNzEzZGZkNjBjY2E1NTU2YjVhYyAxMDA2NDQKLS0tIGEvVG9vbHMvUXRUZXN0
QnJvd3Nlci9sYXVuY2hlcndpbmRvdy5oCisrKyBiL1Rvb2xzL1F0VGVzdEJyb3dzZXIvbGF1bmNo
ZXJ3aW5kb3cuaApAQCAtODksNyArODksNiBAQCBwdWJsaWM6CiAjZWxzZQogICAgICAgICAsIHVz
ZUZyYW1lRmxhdHRlbmluZyhmYWxzZSkKICNlbmRpZgotICAgICAgICAsIHVzZVRocmVhZGVkUW5h
bSh0cnVlKQogICAgICAgICAsIGNhY2hlV2ViVmlldyhmYWxzZSkKICAgICAgICAgLCBzaG93RnJh
bWVSYXRlKGZhbHNlKQogICAgICAgICAsIHJlc2l6ZXNUb0NvbnRlbnRzKGZhbHNlKQpAQCAtMTA5
LDcgKzEwOCw2IEBAIHB1YmxpYzoKICAgICBib29sIHVzZVRpbGVkQmFja2luZ1N0b3JlOwogICAg
IGJvb2wgdXNlV2ViR0w7CiAgICAgYm9vbCB1c2VGcmFtZUZsYXR0ZW5pbmc7Ci0gICAgYm9vbCB1
c2VUaHJlYWRlZFFuYW07CiAgICAgYm9vbCBjYWNoZVdlYlZpZXc7CiAgICAgYm9vbCBzaG93RnJh
bWVSYXRlOwogICAgIGJvb2wgcmVzaXplc1RvQ29udGVudHM7CkBAIC0xNjUsNyArMTYzLDYgQEAg
cHJvdGVjdGVkIHNsb3RzOgogICAgIHZvaWQgdG9nZ2xlVGlsZWRCYWNraW5nU3RvcmUoYm9vbCB0
b2dnbGUpOwogICAgIHZvaWQgdG9nZ2xlUmVzaXplc1RvQ29udGVudHMoYm9vbCB0b2dnbGUpOwog
ICAgIHZvaWQgdG9nZ2xlV2ViR0woYm9vbCB0b2dnbGUpOwotICAgIHZvaWQgdG9nZ2xlVGhyZWFk
ZWRRbmFtKGJvb2wgdG9nZ2xlKTsKICAgICB2b2lkIHRvZ2dsZVNwYXRpYWxOYXZpZ2F0aW9uKGJv
b2wgYik7CiAgICAgdm9pZCB0b2dnbGVGdWxsU2NyZWVuTW9kZShib29sIGVuYWJsZSk7CiAgICAg
dm9pZCB0b2dnbGVGcmFtZUZsYXR0ZW5pbmcoYm9vbCB0b2dnbGUpOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvUXRUZXN0QnJvd3Nlci93ZWJwYWdlLmNwcCBiL1Rvb2xzL1F0VGVzdEJyb3dzZXIvd2VicGFn
ZS5jcHAKaW5kZXggNDAwMzU1ZTA4OGZlOTQ2MTM4YTc4M2FkMmYxYjFkY2I2MGY3ZWI2MS4uOTA4
OGNlMjVlOGMwNjI0OTRkNTVjMWVlYTEyMDhkZTYzM2FlYjNmNiAxMDA2NDQKLS0tIGEvVG9vbHMv
UXRUZXN0QnJvd3Nlci93ZWJwYWdlLmNwcAorKysgYi9Ub29scy9RdFRlc3RCcm93c2VyL3dlYnBh
Z2UuY3BwCkBAIC00NSwxMCArNDUsMTEgQEAgV2ViUGFnZTo6V2ViUGFnZShRT2JqZWN0KiBwYXJl
bnQpCiAgICAgOiBRV2ViUGFnZShwYXJlbnQpCiAgICAgLCBtX3VzZXJBZ2VudCgpCiAgICAgLCBt
X2ludGVycnVwdGluZ0phdmFTY3JpcHRFbmFibGVkKGZhbHNlKQotICAgICwgbV9xbmFtVGhyZWFk
KDApCiB7CiAgICAgYXBwbHlQcm94eSgpOwogCisgICAgY29ubmVjdChuZXR3b3JrQWNjZXNzTWFu
YWdlcigpLCBTSUdOQUwoYXV0aGVudGljYXRpb25SZXF1aXJlZChRTmV0d29ya1JlcGx5KiwgUUF1
dGhlbnRpY2F0b3IqKSksCisgICAgICAgICAgICB0aGlzLCBTTE9UKGF1dGhlbnRpY2F0aW9uUmVx
dWlyZWQoUU5ldHdvcmtSZXBseSosIFFBdXRoZW50aWNhdG9yKikpKTsKICAgICBjb25uZWN0KHRo
aXMsIFNJR05BTChmZWF0dXJlUGVybWlzc2lvblJlcXVlc3RlZChRV2ViRnJhbWUqLCBRV2ViUGFn
ZTo6RmVhdHVyZSkpLCB0aGlzLCBTTE9UKHJlcXVlc3RQZXJtaXNzaW9uKFFXZWJGcmFtZSosIFFX
ZWJQYWdlOjpGZWF0dXJlKSkpOwogICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKGZlYXR1cmVQZXJt
aXNzaW9uUmVxdWVzdENhbmNlbGVkKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpGZWF0dXJlKSksIHRo
aXMsIFNMT1QoZmVhdHVyZVBlcm1pc3Npb25SZXF1ZXN0Q2FuY2VsZWQoUVdlYkZyYW1lKiwgUVdl
YlBhZ2U6OkZlYXR1cmUpKSk7CiB9CkBAIC0xMjIsMzAgKzEyMyw2IEBAIFFTdHJpbmcgV2ViUGFn
ZTo6dXNlckFnZW50Rm9yVXJsKGNvbnN0IFFVcmwmIHVybCkgY29uc3QKICAgICByZXR1cm4gUVdl
YlBhZ2U6OnVzZXJBZ2VudEZvclVybCh1cmwpOwogfQogCi12b2lkIFdlYlBhZ2U6OnNldFFuYW1U
aHJlYWRlZChib29sIHRocmVhZGVkKQotewotICAgIGJvb2wgYWxyZWFkeVRocmVhZGVkID0gbmV0
d29ya0FjY2Vzc01hbmFnZXIoKS0+dGhyZWFkKCkgIT0gdGhyZWFkKCk7Ci0gICAgaWYgKHRocmVh
ZGVkID09IGFscmVhZHlUaHJlYWRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHRocmVh
ZGVkKSB7Ci0gICAgICAgIGlmICghbV9xbmFtVGhyZWFkKQotICAgICAgICAgICAgbV9xbmFtVGhy
ZWFkID0gbmV3IFF0TkFNVGhyZWFkKHRoaXMpOwotICAgICAgICBtX3FuYW1UaHJlYWQtPnN0YXJ0
KCk7Ci0gICAgICAgIHNldE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKG1fcW5hbVRocmVhZC0+bmV0d29y
a0FjY2Vzc01hbmFnZXIoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc2V0TmV0d29ya0FjY2Vz
c01hbmFnZXIoMCk7Ci0gICAgICAgIGRlbGV0ZSBtX3FuYW1UaHJlYWQ7Ci0gICAgICAgIG1fcW5h
bVRocmVhZCA9IDA7Ci0gICAgfQotCi0gICAgUXQ6OkNvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25U
eXBlID0gdGhyZWFkZWQgPyBRdDo6QmxvY2tpbmdRdWV1ZWRDb25uZWN0aW9uIDogUXQ6OkRpcmVj
dENvbm5lY3Rpb247Ci0gICAgY29ubmVjdChuZXR3b3JrQWNjZXNzTWFuYWdlcigpLCBTSUdOQUwo
YXV0aGVudGljYXRpb25SZXF1aXJlZChRTmV0d29ya1JlcGx5KiwgUUF1dGhlbnRpY2F0b3IqKSks
Ci0gICAgICAgICAgICB0aGlzLCBTTE9UKGF1dGhlbnRpY2F0aW9uUmVxdWlyZWQoUU5ldHdvcmtS
ZXBseSosIFFBdXRoZW50aWNhdG9yKikpLAotICAgICAgICAgICAgY29ubmVjdGlvblR5cGUpOwot
ICAgIGFwcGx5UHJveHkoKTsKLX0KLQogYm9vbCBXZWJQYWdlOjpzaG91bGRJbnRlcnJ1cHRKYXZh
U2NyaXB0KCkKIHsKICAgICBpZiAoIW1faW50ZXJydXB0aW5nSmF2YVNjcmlwdEVuYWJsZWQpCmRp
ZmYgLS1naXQgYS9Ub29scy9RdFRlc3RCcm93c2VyL3dlYnBhZ2UuaCBiL1Rvb2xzL1F0VGVzdEJy
b3dzZXIvd2VicGFnZS5oCmluZGV4IDNiODU2Yzk4YzM0YzBiNzcwMjY5YWMxMWY0NmNjMzkwOGZl
YWZmODEuLjAxZjNmNmE4Njc1YmE2M2UwNDcyOWM3NzdiY2I4MTQ3MzlmN2RhM2QgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1F0VGVzdEJyb3dzZXIvd2VicGFnZS5oCisrKyBiL1Rvb2xzL1F0VGVzdEJyb3dz
ZXIvd2VicGFnZS5oCkBAIC0zMywxNSArMzMsOSBAQAogI2lmbmRlZiB3ZWJwYWdlX2gKICNkZWZp
bmUgd2VicGFnZV9oCiAKLSNpbmNsdWRlIDxRTXV0ZXg+Ci0jaW5jbHVkZSA8UVNjb3BlZFBvaW50
ZXI+Ci0jaW5jbHVkZSA8UVRocmVhZD4KLSNpbmNsdWRlIDxRV2FpdENvbmRpdGlvbj4KICNpbmNs
dWRlIDxxd2ViZnJhbWUuaD4KICNpbmNsdWRlIDxxd2VicGFnZS5oPgogCi1jbGFzcyBRdE5BTVRo
cmVhZDsKLQogY2xhc3MgV2ViUGFnZSA6IHB1YmxpYyBRV2ViUGFnZSB7CiAgICAgUV9PQkpFQ1QK
IApAQCAtNTcsNyArNTEsNiBAQCBwdWJsaWM6CiAKICAgICBRU3RyaW5nIHVzZXJBZ2VudEZvclVy
bChjb25zdCBRVXJsJiB1cmwpIGNvbnN0OwogICAgIHZvaWQgc2V0SW50ZXJydXB0aW5nSmF2YVNj
cmlwdEVuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1faW50ZXJydXB0aW5nSmF2YVNjcmlwdEVuYWJs
ZWQgPSBlbmFibGVkOyB9Ci0gICAgdm9pZCBzZXRRbmFtVGhyZWFkZWQoYm9vbCB0aHJlYWRlZCk7
CiAKIHB1YmxpYyBzbG90czoKICAgICB2b2lkIG9wZW5VcmxJbkRlZmF1bHRCcm93c2VyKGNvbnN0
IFFVcmwmIHVybCA9IFFVcmwoKSk7CkBAIC03MSw0NiArNjQsNiBAQCBwcml2YXRlOgogICAgIHZv
aWQgYXBwbHlQcm94eSgpOwogICAgIFFTdHJpbmcgbV91c2VyQWdlbnQ7CiAgICAgYm9vbCBtX2lu
dGVycnVwdGluZ0phdmFTY3JpcHRFbmFibGVkOwotICAgIFF0TkFNVGhyZWFkKiBtX3FuYW1UaHJl
YWQ7Ci19OwotCi0KLWNsYXNzIFF0TkFNVGhyZWFkIDogcHVibGljIFFUaHJlYWQgewotcHVibGlj
OgotICAgIFF0TkFNVGhyZWFkKFFPYmplY3QgKnBhcmVudCA9IDApCi0gICAgICAgIDogUVRocmVh
ZChwYXJlbnQpCi0gICAgICAgICwgbV9xbmFtKDApCi0gICAgewotICAgIH0KLSAgICB+UXROQU1U
aHJlYWQoKQotICAgIHsKLSAgICAgICAgcXVpdCgpOwotICAgICAgICB3YWl0KCk7Ci0gICAgfQot
Ci0gICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKiBuZXR3b3JrQWNjZXNzTWFuYWdlcigpCi0gICAg
ewotICAgICAgICBRTXV0ZXhMb2NrZXIgbG9jaygmbV9tdXRleCk7Ci0gICAgICAgIHdoaWxlICgh
bV9xbmFtKQotICAgICAgICAgICAgbV93YWl0Q29uZGl0aW9uLndhaXQoJm1fbXV0ZXgpOwotICAg
ICAgICByZXR1cm4gbV9xbmFtOwotICAgIH0KLXByb3RlY3RlZDoKLSAgICB2b2lkIHJ1bigpCi0g
ICAgewotICAgICAgICBRX0FTU0VSVCghbV9xbmFtKTsKLSAgICAgICAgewotICAgICAgICAgICAg
UU11dGV4TG9ja2VyIGxvY2soJm1fbXV0ZXgpOwotICAgICAgICAgICAgbV9xbmFtID0gbmV3IFFO
ZXR3b3JrQWNjZXNzTWFuYWdlcjsKLSAgICAgICAgICAgIG1fd2FpdENvbmRpdGlvbi53YWtlQWxs
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgZXhlYygpOwotICAgICAgICBkZWxldGUgbV9xbmFtOwot
ICAgIH0KLXByaXZhdGU6Ci0gICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKiBtX3FuYW07Ci0gICAg
UU11dGV4IG1fbXV0ZXg7Ci0gICAgUVdhaXRDb25kaXRpb24gbV93YWl0Q29uZGl0aW9uOwogfTsK
IAogI2VuZGlmCg==
</data>
<flag name="review"
          id="75528"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>