<?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>162267</bug_id>
          
          <creation_ts>2016-09-20 06:09:03 -0700</creation_ts>
          <short_desc>[GTK] Clean up DataObjectGtk handling</short_desc>
          <delta_ts>2016-09-20 23:19:42 -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>WebKitGTK</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>berto</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gustavo</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>mrobinson</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1231600</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-09-20 06:09:03 -0700</bug_when>
    <thetext>In some cases the ownership of DataObjectGtk instances is not clear enough, and we have hacks to avoid memory leaks because of that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231603</commentid>
    <comment_count>1</comment_count>
      <attachid>289342</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-09-20 06:34:57 -0700</bug_when>
    <thetext>Created attachment 289342
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231605</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-20 06:37:16 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231749</commentid>
    <comment_count>3</comment_count>
      <attachid>289342</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-09-20 10:30:31 -0700</bug_when>
    <thetext>Comment on attachment 289342
Patch

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

&gt; Source/WebCore/platform/gtk/PasteboardHelper.cpp:295
&gt; +        TemporaryChange&lt;DataObjectGtk*&gt; change(settingClipboardDataObject, const_cast&lt;DataObjectGtk*&gt;(&amp;dataObject));

Why is this function receiving a const DataObjectGtk*? Why were you unable to get rid of this const_cast?

&gt; Source/WebKit2/Shared/gtk/PasteboardContent.cpp:36
&gt; +PasteboardContent::PasteboardContent(const WebCore::DataObjectGtk&amp; data)
&gt; +    : dataObject(const_cast&lt;WebCore::DataObjectGtk&amp;&gt;(data))

Again, why is the parameter const? What call site cannot be fixed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231986</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-09-20 23:17:40 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 289342 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=289342&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/gtk/PasteboardHelper.cpp:295
&gt; &gt; +        TemporaryChange&lt;DataObjectGtk*&gt; change(settingClipboardDataObject, const_cast&lt;DataObjectGtk*&gt;(&amp;dataObject));
&gt; 
&gt; Why is this function receiving a const DataObjectGtk*? Why were you unable
&gt; to get rid of this const_cast?
&gt; 
&gt; &gt; Source/WebKit2/Shared/gtk/PasteboardContent.cpp:36
&gt; &gt; +PasteboardContent::PasteboardContent(const WebCore::DataObjectGtk&amp; data)
&gt; &gt; +    : dataObject(const_cast&lt;WebCore::DataObjectGtk&amp;&gt;(data))
&gt; 
&gt; Again, why is the parameter const? What call site cannot be fixed?

Both are special cases. You can&apos;t create smart pointers from const references/pointers, but in these particular cases the object is going to be const, the only change we are going to do to the object is taking a reference, and RefCounted::ref() is const indeed. So we can&apos;t fix the callers, because it&apos;s correct to receive consts, but we cast to allow creating a Ref&lt;&gt; that we know we are ot going to modify.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231987</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-09-20 23:19:42 -0700</bug_when>
    <thetext>Committed r206197: &lt;http://trac.webkit.org/changeset/206197&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289342</attachid>
            <date>2016-09-20 06:34:57 -0700</date>
            <delta_ts>2016-09-20 10:30:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk-data-object-cleanup.diff</filename>
            <type>text/plain</type>
            <size>49269</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzYzU5YTk1Li5kOTA0NzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYg
QEAKKzIwMTYtMDktMjAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIENsZWFuIHVwIERhdGFPYmplY3RHdGsgaGFuZGxpbmcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjI2NworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vUGFz
dGVib2FyZC5oOiBVc2UgUmVmIGluc3RlYWQgb2YgUmVmUHRyIGZvciBEYXRhT2JqZWN0R3RrIG1l
bWJlci4KKyAgICAgICAgKiBwbGF0Zm9ybS9QYXN0ZWJvYXJkU3RyYXRlZ3kuaDogUGFzcyBhIGNv
bnN0IHJlZmVyZW5jZSB0byBEYXRhT2JqZWN0R3RrIGluIHdyaXRlIG1ldGhvZCBhbmQgcmV0dXJu
IGEgUmVmIGZyb20gcmVhZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybVBhc3RlYm9hcmQu
aDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6OmltYWdlKTogVXNlIEltYWdlIGluc3RlYWQgb2Yg
R2RrUGl4YnVmLgorICAgICAgICAoV2ViQ29yZTo6RGF0YU9iamVjdEd0azo6c2V0SW1hZ2UpOgor
ICAgICAgICAqIHBsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckRyYWdBbmREcm9wKTogVXNlIGEgcmVmZXJlbmNlIGlu
c3RlYWQgb2YgYSBwb2ludGVyLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6UGFzdGVi
b2FyZCk6IFJlY2VpdmVzIGEgcmVmZXJlbmNlLCBzbyB3ZSBjYW4gYWxzbyByZW1vdmUgdGhlIEFT
U0VSVC4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmRhdGFPYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVUb0NsaXBib2FyZCk6IFJlbW92ZSB0aGUgU2hv
dWxkSW5jbHVkZVNtYXJ0UGFzdGUgcGFyYW1ldGVyLCBjYWxsZXJzIHNob3VsZCBhbHNvIHVwZGF0
ZQorICAgICAgICBjYW5TbWFydFBhc3RlIHByb3BlcnR5IG9mIERhdGFPYmplY3RHdGsgYmVmb3Jl
IGNhbGxpbmcgdGhpcy4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlUGxhaW5U
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlKTogRG8gbm90IGNvbnZl
cnQgdGhlIGltYWdlIHRoZSBHZGtQaXhidWYsIHBhc3MgdGhlIGltYWdlIHRvIHRoZSBEYXRhT2Jq
ZWN0R3RrIGluc3RlYWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEhlbHBlcjo6ZmlsbFNlbGVjdGlvbkRh
dGEpOiBDb252ZXJ0IHRoZSBEYXRhT2JqZWN0R3RrIGltYWdlIHRvIEdka1BpeGJ1ZiByaWdodCBi
ZWZvcmUKKyAgICAgICAgcGFzc2luZyBpdCB0byBndGtfc2VsZWN0aW9uX2RhdGFfc2V0X3BpeGJ1
ZigpLgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkU2V0RGF0YTo6Q2xpcGJvYXJkU2V0RGF0
YSk6IFVzZSByZWZlcmVuY2UgaW5zdGVhZCBvZiBwb2ludGVyLgorICAgICAgICAoV2ViQ29yZTo6
Z2V0Q2xpcGJvYXJkQ29udGVudHNDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpjbGVhckNs
aXBib2FyZENvbnRlbnRzQ2FsbGJhY2spOiBOZXZlciBjbGVhciB0aGUgc2F2ZWQgRGF0YU9iamVj
dEd0aywgdGhhdCB3YXMgb25seSBuZWVkZWQgd2hlbiB3ZSBoYWQKKyAgICAgICAgYSBnbG9iYWwg
RGF0YU9iamVjdEd0ayBhc3NvY2lhdGVkIHRvIGEgR3RrQ2xpcGJvYXJkLgorICAgICAgICAoV2Vi
Q29yZTo6UGFzdGVib2FyZEhlbHBlcjo6d3JpdGVDbGlwYm9hcmRDb250ZW50cyk6IFVzZSBUZW1w
b3JhcnlDaGFuZ2UgdG8gc2V0IHRoZSBzZXR0aW5nQ2xpcGJvYXJkRGF0YU9iamVjdCBnbG9iYWwu
CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1BsYXRmb3JtUGFzdGVib2FyZEd0ay5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OndyaXRlVG9DbGlwYm9hcmQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjpyZWFkRnJvbUNsaXBib2FyZCk6CisK
IDIwMTYtMDktMTkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBB
ZGQgc3VwcG9ydCBmb3IgSFRNTFNvdXJjZUVsZW1lbnQucHJvdG90eXBlLnNpemVzIC8gSFRNTFNv
dXJjZUVsZW1lbnQucHJvdG90eXBlLnNyY3NldApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUGFzdGVib2FyZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2Fy
ZC5oCmluZGV4IDU5YjQ5OGYuLmQyMzgyNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Bhc3RlYm9hcmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJv
YXJkLmgKQEAgLTEzOCw3ICsxMzgsNyBAQCBwdWJsaWM6CiAKICNpZiBQTEFURk9STShHVEspCiAg
ICAgZXhwbGljaXQgUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIGV4cGxpY2l0
IFBhc3RlYm9hcmQoUmVmUHRyPERhdGFPYmplY3RHdGs+JiYpOworICAgIGV4cGxpY2l0IFBhc3Rl
Ym9hcmQoRGF0YU9iamVjdEd0ayYpOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCkBAIC0y
MjAsMTAgKzIyMCw5IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdUSykKLSAg
ICBlbnVtIGNsYXNzIFNob3VsZEluY2x1ZGVTbWFydFBhc3RlIHsgTm8sIFllcyB9OwotICAgIHZv
aWQgd3JpdGVUb0NsaXBib2FyZChTaG91bGRJbmNsdWRlU21hcnRQYXN0ZSA9IFNob3VsZEluY2x1
ZGVTbWFydFBhc3RlOjpObyk7CisgICAgdm9pZCB3cml0ZVRvQ2xpcGJvYXJkKCk7CiAgICAgdm9p
ZCByZWFkRnJvbUNsaXBib2FyZCgpOwotICAgIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiBtX2RhdGFP
YmplY3Q7CisgICAgUmVmPERhdGFPYmplY3RHdGs+IG1fZGF0YU9iamVjdDsKICAgICBTdHJpbmcg
bV9uYW1lOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bh
c3RlYm9hcmRTdHJhdGVneS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZFN0
cmF0ZWd5LmgKaW5kZXggODE3MTZmNS4uNjA4YmYxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUGFzdGVib2FyZFN0cmF0ZWd5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGFzdGVib2FyZFN0cmF0ZWd5LmgKQEAgLTczLDggKzczLDggQEAgcHVibGljOgogICAg
IHZpcnR1YWwgbG9uZyBzZXRTdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpID0gMDsKICNl
bmRpZgogI2lmIFBMQVRGT1JNKEdUSykKLSAgICB2aXJ0dWFsIHZvaWQgd3JpdGVUb0NsaXBib2Fy
ZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBSZWZQdHI8RGF0YU9iamVjdEd0
az4mKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8RGF0YU9iamVjdEd0az4gcmVhZEZyb21DbGlw
Ym9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCB3cml0ZVRvQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IERh
dGFPYmplY3RHdGsmKSA9IDA7CisgICAgdmlydHVhbCBSZWY8RGF0YU9iamVjdEd0az4gcmVhZEZy
b21DbGlwYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgPSAwOwogI2VuZGlmIC8v
IFBMQVRGT1JNKEdUSykKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5QYXN0ZWJvYXJkU3RyYXRl
Z3koKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1QYXN0ZWJv
YXJkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVBhc3RlYm9hcmQuaAppbmRl
eCA2OTViYzBlLi5kYzcyNjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Q
bGF0Zm9ybVBhc3RlYm9hcmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9y
bVBhc3RlYm9hcmQuaApAQCAtODYsOCArODYsOCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBP
UlQgaW50IGNvdW50KCk7CiAKICNpZiBQTEFURk9STShHVEspCi0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCB3cml0ZVRvQ2xpcGJvYXJkKGNvbnN0IFJlZlB0cjxEYXRhT2JqZWN0R3RrPiYsIHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPiYmIHByaW1hcnlTZWxlY3Rpb25DbGVhcmVkKTsKLSAgICBXRUJDT1JF
X0VYUE9SVCBSZWZQdHI8RGF0YU9iamVjdEd0az4gcmVhZEZyb21DbGlwYm9hcmQoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHdyaXRlVG9DbGlwYm9hcmQoY29uc3QgRGF0YU9iamVjdEd0ayYs
IHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYmIHByaW1hcnlTZWxlY3Rpb25DbGVhcmVkKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBSZWY8RGF0YU9iamVjdEd0az4gcmVhZEZyb21DbGlwYm9hcmQoKTsKICNl
bmRpZgogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0RhdGFPYmplY3RHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0
R3RrLmgKaW5kZXggZTI5M2IyOS4uMTdlOGQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvRGF0YU9iamVjdEd0ay5oCkBAIC0xOCwxMSArMTgsMTAgQEAKIAogI3ByYWdtYSBvbmNl
CiAKLSNpbmNsdWRlICJGaWxlTGlzdC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAi
VVJMLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM3LDggKzM2LDggQEAgcHVi
bGljOgogICAgIGNvbnN0IFVSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KICAgICBj
b25zdCBTdHJpbmcmIHVyaUxpc3QoKSBjb25zdCB7IHJldHVybiBtX3VyaUxpc3Q7IH0KICAgICBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKCkgY29uc3QgeyByZXR1cm4gbV9maWxlbmFt
ZXM7IH0KLSAgICBHZGtQaXhidWYqIGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQo
KTsgfQotICAgIHZvaWQgc2V0SW1hZ2UoR2RrUGl4YnVmKiBuZXdJbWFnZSkgeyBtX2ltYWdlID0g
bmV3SW1hZ2U7IH0KKyAgICBJbWFnZSogaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdl
dCgpOyB9CisgICAgdm9pZCBzZXRJbWFnZShJbWFnZSogbmV3SW1hZ2UpIHsgbV9pbWFnZSA9IG5l
d0ltYWdlOyB9CiAgICAgdm9pZCBzZXRVUkwoY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJik7CiAg
ICAgYm9vbCBoYXNVbmtub3duVHlwZURhdGEoKSBjb25zdCB7IHJldHVybiAhbV91bmtub3duVHlw
ZURhdGEuaXNFbXB0eSgpOyB9CiAgICAgYm9vbCBoYXNUZXh0KCkgY29uc3QgeyByZXR1cm4gIW1f
dGV4dC5pc0VtcHR5KCk7IH0KQEAgLTc0LDcgKzczLDcgQEAgcHJpdmF0ZToKICAgICBVUkwgbV91
cmw7CiAgICAgU3RyaW5nIG1fdXJpTGlzdDsKICAgICBWZWN0b3I8U3RyaW5nPiBtX2ZpbGVuYW1l
czsKLSAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gbV9pbWFnZTsKKyAgICBSZWZQdHI8SW1hZ2U+IG1f
aW1hZ2U7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV91bmtub3duVHlwZURhdGE7CiAg
ICAgYm9vbCBtX2NhblNtYXJ0UmVwbGFjZSB7IGZhbHNlIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCmluZGV4IGI3MDI3NjQuLjA3ZDljYzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKQEAg
LTYyLDcgKzYyLDggQEAgc3RkOjp1bmlxdWVfcHRyPFBhc3RlYm9hcmQ+IFBhc3RlYm9hcmQ6OmNy
ZWF0ZUZvckRyYWdBbmREcm9wKCkKIAogc3RkOjp1bmlxdWVfcHRyPFBhc3RlYm9hcmQ+IFBhc3Rl
Ym9hcmQ6OmNyZWF0ZUZvckRyYWdBbmREcm9wKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKIHsK
LSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxQYXN0ZWJvYXJkPihkcmFnRGF0YS5wbGF0Zm9y
bURhdGEoKSk7CisgICAgQVNTRVJUKGRyYWdEYXRhLnBsYXRmb3JtRGF0YSgpKTsKKyAgICByZXR1
cm4gc3RkOjptYWtlX3VuaXF1ZTxQYXN0ZWJvYXJkPigqZHJhZ0RhdGEucGxhdGZvcm1EYXRhKCkp
OwogfQogI2VuZGlmCiAKQEAgLTc1LDEwICs3Niw5IEBAIFBhc3RlYm9hcmRJbWFnZTo6flBhc3Rl
Ym9hcmRJbWFnZSgpCiB7CiB9CiAKLVBhc3RlYm9hcmQ6OlBhc3RlYm9hcmQoUmVmUHRyPERhdGFP
YmplY3RHdGs+JiYgZGF0YU9iamVjdCkKLSAgICA6IG1fZGF0YU9iamVjdChXVEZNb3ZlKGRhdGFP
YmplY3QpKQorUGFzdGVib2FyZDo6UGFzdGVib2FyZChEYXRhT2JqZWN0R3RrJiBkYXRhT2JqZWN0
KQorICAgIDogbV9kYXRhT2JqZWN0KGRhdGFPYmplY3QpCiB7Ci0gICAgQVNTRVJUKG1fZGF0YU9i
amVjdCk7CiB9CiAKIFBhc3RlYm9hcmQ6OlBhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiBuYW1lKQpA
QCAtOTMsNyArOTMsNyBAQCBQYXN0ZWJvYXJkOjp+UGFzdGVib2FyZCgpCiAKIGNvbnN0IERhdGFP
YmplY3RHdGsmIFBhc3RlYm9hcmQ6OmRhdGFPYmplY3QoKSBjb25zdAogewotICAgIHJldHVybiAq
bV9kYXRhT2JqZWN0OworICAgIHJldHVybiBtX2RhdGFPYmplY3QuZ2V0KCk7CiB9CiAKIHN0YXRp
YyBDbGlwYm9hcmREYXRhVHlwZSBkYXRhT2JqZWN0VHlwZUZyb21IVE1MQ2xpcGJvYXJkVHlwZShj
b25zdCBTdHJpbmcmIHJhd1R5cGUpCkBAIC0xMTksMTEgKzExOSwxMSBAQCBzdGF0aWMgQ2xpcGJv
YXJkRGF0YVR5cGUgZGF0YU9iamVjdFR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUoY29uc3QgU3Ry
aW5nJiByYXdUeQogICAgIHJldHVybiBDbGlwYm9hcmREYXRhVHlwZVVua25vd247CiB9CiAKLXZv
aWQgUGFzdGVib2FyZDo6d3JpdGVUb0NsaXBib2FyZChTaG91bGRJbmNsdWRlU21hcnRQYXN0ZSBz
aG91bGRJbmNsdWRlU21hcnRQYXN0ZSkKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVUb0NsaXBib2Fy
ZCgpCiB7CiAgICAgaWYgKG1fbmFtZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1f
ZGF0YU9iamVjdC0+c2V0Q2FuU21hcnRSZXBsYWNlKHNob3VsZEluY2x1ZGVTbWFydFBhc3RlID09
IFNob3VsZEluY2x1ZGVTbWFydFBhc3RlOjpZZXMpOworCiAgICAgcGxhdGZvcm1TdHJhdGVnaWVz
KCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT53cml0ZVRvQ2xpcGJvYXJkKG1fbmFtZSwgbV9kYXRh
T2JqZWN0KTsKIH0KIApAQCAtMTU5LDggKzE1OSw5IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVQ
bGFpblRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBTbWFydFJlcGxhY2VPcHRpb24gc21hcnRSZXBs
CiB7CiAgICAgbV9kYXRhT2JqZWN0LT5jbGVhckFsbCgpOwogICAgIG1fZGF0YU9iamVjdC0+c2V0
VGV4dCh0ZXh0KTsKKyAgICBtX2RhdGFPYmplY3QtPnNldENhblNtYXJ0UmVwbGFjZShzbWFydFJl
cGxhY2VPcHRpb24gPT0gQ2FuU21hcnRSZXBsYWNlKTsKIAotICAgIHdyaXRlVG9DbGlwYm9hcmQo
c21hcnRSZXBsYWNlT3B0aW9uID09IENhblNtYXJ0UmVwbGFjZSA/IFNob3VsZEluY2x1ZGVTbWFy
dFBhc3RlOjpZZXMgOiBTaG91bGRJbmNsdWRlU21hcnRQYXN0ZTo6Tm8pOworICAgIHdyaXRlVG9D
bGlwYm9hcmQoKTsKIH0KIAogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJk
VVJMJiBwYXN0ZWJvYXJkVVJMKQpAQCAtMTgwLDEwICsxODEsNyBAQCB2b2lkIFBhc3RlYm9hcmQ6
OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRJbWFnZSYgcGFzdGVib2FyZEltYWdlKQogICAgICAgICBt
X2RhdGFPYmplY3QtPnNldFVSTChwYXN0ZWJvYXJkSW1hZ2UudXJsLnVybCwgcGFzdGVib2FyZElt
YWdlLnVybC50aXRsZSk7CiAgICAgICAgIG1fZGF0YU9iamVjdC0+c2V0TWFya3VwKHBhc3RlYm9h
cmRJbWFnZS51cmwubWFya3VwKTsKICAgICB9Ci0KLSAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gcGl4
YnVmID0gYWRvcHRHUmVmKHBhc3RlYm9hcmRJbWFnZS5pbWFnZS0+Z2V0R2RrUGl4YnVmKCkpOwot
ICAgIGlmIChwaXhidWYpCi0gICAgICAgIG1fZGF0YU9iamVjdC0+c2V0SW1hZ2UocGl4YnVmLmdl
dCgpKTsKKyAgICBtX2RhdGFPYmplY3QtPnNldEltYWdlKHBhc3RlYm9hcmRJbWFnZS5pbWFnZS5n
ZXQoKSk7CiAKICAgICB3cml0ZVRvQ2xpcGJvYXJkKCk7CiB9CkBAIC0xOTMsOCArMTkxLDkgQEAg
dm9pZCBQYXN0ZWJvYXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJkV2ViQ29udGVudCYgcGFzdGVi
b2FyZENvbnRlbnQpCiAgICAgbV9kYXRhT2JqZWN0LT5jbGVhckFsbCgpOwogICAgIG1fZGF0YU9i
amVjdC0+c2V0VGV4dChwYXN0ZWJvYXJkQ29udGVudC50ZXh0KTsKICAgICBtX2RhdGFPYmplY3Qt
PnNldE1hcmt1cChwYXN0ZWJvYXJkQ29udGVudC5tYXJrdXApOworICAgIG1fZGF0YU9iamVjdC0+
c2V0Q2FuU21hcnRSZXBsYWNlKHBhc3RlYm9hcmRDb250ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRl
KTsKIAotICAgIHdyaXRlVG9DbGlwYm9hcmQocGFzdGVib2FyZENvbnRlbnQuY2FuU21hcnRDb3B5
T3JEZWxldGUgPyBTaG91bGRJbmNsdWRlU21hcnRQYXN0ZTo6WWVzIDogU2hvdWxkSW5jbHVkZVNt
YXJ0UGFzdGU6Ok5vKTsKKyAgICB3cml0ZVRvQ2xpcGJvYXJkKCk7CiB9CiAKIHZvaWQgUGFzdGVi
b2FyZDo6d3JpdGVQYXN0ZWJvYXJkKGNvbnN0IFBhc3RlYm9hcmQmIHNvdXJjZVBhc3RlYm9hcmQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5jcHAK
aW5kZXggYTg5Y2YxYi4uZTY3ZWZiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcApAQCAtMjUsOSArMjUsOCBAQAogCiAjaW5jbHVkZSAi
RGF0YU9iamVjdEd0ay5oIgogI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLSNpbmNsdWRlICJQ
YXN0ZWJvYXJkLmgiCi0jaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgogI2luY2x1ZGUg
PGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CiAjaW5jbHVkZSA8
d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApA
QCAtMTQ4LDEwICsxNDcsMTEgQEAgdm9pZCBQYXN0ZWJvYXJkSGVscGVyOjpmaWxsU2VsZWN0aW9u
RGF0YShHdGtTZWxlY3Rpb25EYXRhKiBzZWxlY3Rpb25EYXRhLCBndWludAogICAgICAgICBndGtf
c2VsZWN0aW9uX2RhdGFfc2V0KHNlbGVjdGlvbkRhdGEsIG5ldHNjYXBlVVJMQXRvbSwgOCwKICAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZ3VjaGFyKj4ocmVzdWx0RGF0YS5nZXQo
KSksIHN0cmxlbihyZXN1bHREYXRhLmdldCgpKSk7CiAKLSAgICB9IGVsc2UgaWYgKGluZm8gPT0g
VGFyZ2V0VHlwZUltYWdlKQotICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0X3BpeGJ1Zihz
ZWxlY3Rpb25EYXRhLCBkYXRhT2JqZWN0LmltYWdlKCkpOworICAgIH0gZWxzZSBpZiAoaW5mbyA9
PSBUYXJnZXRUeXBlSW1hZ2UgJiYgZGF0YU9iamVjdC5oYXNJbWFnZSgpKSB7CisgICAgICAgIEdS
ZWZQdHI8R2RrUGl4YnVmPiBwaXhidWYgPSBhZG9wdEdSZWYoZGF0YU9iamVjdC5pbWFnZSgpLT5n
ZXRHZGtQaXhidWYoKSk7CisgICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9zZXRfcGl4YnVmKHNl
bGVjdGlvbkRhdGEsIHBpeGJ1Zi5nZXQoKSk7CiAKLSAgICBlbHNlIGlmIChpbmZvID09IFRhcmdl
dFR5cGVTbWFydFBhc3RlKQorICAgIH0gZWxzZSBpZiAoaW5mbyA9PSBUYXJnZXRUeXBlU21hcnRQ
YXN0ZSkKICAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldF90ZXh0KHNlbGVjdGlvbkRhdGEs
ICIiLCAtMSk7CiAKICAgICBlbHNlIGlmIChpbmZvID09IFRhcmdldFR5cGVVbmtub3duKSB7CkBA
IC0yNTcsNyArMjU3LDcgQEAgVmVjdG9yPEdka0F0b20+IFBhc3RlYm9hcmRIZWxwZXI6OmRyb3BB
dG9tc0ZvckNvbnRleHQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWcKIHN0YXRpYyBEYXRhT2Jq
ZWN0R3RrKiBzZXR0aW5nQ2xpcGJvYXJkRGF0YU9iamVjdCA9IDA7CiAKIHN0cnVjdCBDbGlwYm9h
cmRTZXREYXRhIHsKLSAgICBDbGlwYm9hcmRTZXREYXRhKERhdGFPYmplY3RHdGsqIGRhdGFPYmpl
Y3QsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiYmIHNlbGVjdGlvbkNsZWFyZWRDYWxsYmFjaykKKyAg
ICBDbGlwYm9hcmRTZXREYXRhKERhdGFPYmplY3RHdGsmIGRhdGFPYmplY3QsIHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPiYmIHNlbGVjdGlvbkNsZWFyZWRDYWxsYmFjaykKICAgICAgICAgOiBkYXRhT2Jq
ZWN0KGRhdGFPYmplY3QpCiAgICAgICAgICwgc2VsZWN0aW9uQ2xlYXJlZENhbGxiYWNrKFdURk1v
dmUoc2VsZWN0aW9uQ2xlYXJlZENhbGxiYWNrKSkKICAgICB7CkBAIC0yNjcsMjQgKzI2NywxOSBA
QCBzdHJ1Y3QgQ2xpcGJvYXJkU2V0RGF0YSB7CiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxE
YXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0OworICAgIFJlZjxEYXRhT2JqZWN0R3RrPiBkYXRhT2Jq
ZWN0OwogICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzZWxlY3Rpb25DbGVhcmVkQ2FsbGJhY2s7
CiB9OwogCiBzdGF0aWMgdm9pZCBnZXRDbGlwYm9hcmRDb250ZW50c0NhbGxiYWNrKEd0a0NsaXBi
b2FyZCosIEd0a1NlbGVjdGlvbkRhdGEgKnNlbGVjdGlvbkRhdGEsIGd1aW50IGluZm8sIGdwb2lu
dGVyIHVzZXJEYXRhKQogewogICAgIGF1dG8qIGRhdGEgPSBzdGF0aWNfY2FzdDxDbGlwYm9hcmRT
ZXREYXRhKj4odXNlckRhdGEpOwotICAgIFBhc3RlYm9hcmRIZWxwZXI6OnNpbmdsZXRvbigpLmZp
bGxTZWxlY3Rpb25EYXRhKHNlbGVjdGlvbkRhdGEsIGluZm8sICpkYXRhLT5kYXRhT2JqZWN0KTsK
KyAgICBQYXN0ZWJvYXJkSGVscGVyOjpzaW5nbGV0b24oKS5maWxsU2VsZWN0aW9uRGF0YShzZWxl
Y3Rpb25EYXRhLCBpbmZvLCBkYXRhLT5kYXRhT2JqZWN0KTsKIH0KIAogc3RhdGljIHZvaWQgY2xl
YXJDbGlwYm9hcmRDb250ZW50c0NhbGxiYWNrKEd0a0NsaXBib2FyZCosIGdwb2ludGVyIHVzZXJE
YXRhKQogewogICAgIHN0ZDo6dW5pcXVlX3B0cjxDbGlwYm9hcmRTZXREYXRhPiBkYXRhKHN0YXRp
Y19jYXN0PENsaXBib2FyZFNldERhdGEqPih1c2VyRGF0YSkpOwotCi0gICAgLy8gT25seSBjbGVh
ciB0aGUgRGF0YU9iamVjdCBmb3IgdGhpcyBjbGlwYm9hcmQgaWYgd2UgYXJlIG5vdCBjdXJyZW50
bHkgc2V0dGluZyBpdC4KLSAgICBpZiAoZGF0YS0+ZGF0YU9iamVjdC5nZXQoKSAhPSBzZXR0aW5n
Q2xpcGJvYXJkRGF0YU9iamVjdCkKLSAgICAgICAgZGF0YS0+ZGF0YU9iamVjdC0+Y2xlYXJBbGwo
KTsKLQogICAgIGlmIChkYXRhLT5zZWxlY3Rpb25DbGVhcmVkQ2FsbGJhY2spCiAgICAgICAgIGRh
dGEtPnNlbGVjdGlvbkNsZWFyZWRDYWxsYmFjaygpOwogfQpAQCAtMjk3LDE2ICsyOTIsMTMgQEAg
dm9pZCBQYXN0ZWJvYXJkSGVscGVyOjp3cml0ZUNsaXBib2FyZENvbnRlbnRzKEd0a0NsaXBib2Fy
ZCogY2xpcGJvYXJkLCBjb25zdCBEYXQKICAgICBHdGtUYXJnZXRFbnRyeSogdGFibGUgPSBndGtf
dGFyZ2V0X3RhYmxlX25ld19mcm9tX2xpc3QobGlzdC5nZXQoKSwgJm51bWJlck9mVGFyZ2V0cyk7
CiAKICAgICBpZiAobnVtYmVyT2ZUYXJnZXRzID4gMCAmJiB0YWJsZSkgewotICAgICAgICBzZXR0
aW5nQ2xpcGJvYXJkRGF0YU9iamVjdCA9IGNvbnN0X2Nhc3Q8RGF0YU9iamVjdEd0ayo+KCZkYXRh
T2JqZWN0KTsKLQotICAgICAgICBhdXRvIGRhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPENsaXBib2Fy
ZFNldERhdGE+KHNldHRpbmdDbGlwYm9hcmREYXRhT2JqZWN0LCBXVEZNb3ZlKHByaW1hcnlTZWxl
Y3Rpb25DbGVhcmVkKSk7CisgICAgICAgIFRlbXBvcmFyeUNoYW5nZTxEYXRhT2JqZWN0R3RrKj4g
Y2hhbmdlKHNldHRpbmdDbGlwYm9hcmREYXRhT2JqZWN0LCBjb25zdF9jYXN0PERhdGFPYmplY3RH
dGsqPigmZGF0YU9iamVjdCkpOworICAgICAgICBhdXRvIGRhdGEgPSBzdGQ6Om1ha2VfdW5pcXVl
PENsaXBib2FyZFNldERhdGE+KCpzZXR0aW5nQ2xpcGJvYXJkRGF0YU9iamVjdCwgV1RGTW92ZShw
cmltYXJ5U2VsZWN0aW9uQ2xlYXJlZCkpOwogICAgICAgICBpZiAoZ3RrX2NsaXBib2FyZF9zZXRf
d2l0aF9kYXRhKGNsaXBib2FyZCwgdGFibGUsIG51bWJlck9mVGFyZ2V0cywgZ2V0Q2xpcGJvYXJk
Q29udGVudHNDYWxsYmFjaywgY2xlYXJDbGlwYm9hcmRDb250ZW50c0NhbGxiYWNrLCBkYXRhLmdl
dCgpKSkgewogICAgICAgICAgICAgZ3RrX2NsaXBib2FyZF9zZXRfY2FuX3N0b3JlKGNsaXBib2Fy
ZCwgbnVsbHB0ciwgMCk7CiAgICAgICAgICAgICAvLyBXaGVuIGd0a19jbGlwYm9hcmRfc2V0X3dp
dGhfZGF0YSgpIHN1Y2NlZWRzIGNsZWFyQ2xpcGJvYXJkQ29udGVudHNDYWxsYmFjayB0YWtlcyB0
aGUgb3duZXJzaGlwIG9mIGRhdGEsIHNvIHdlIGxlYWsgaXQgaGVyZS4KICAgICAgICAgICAgIGRh
dGEucmVsZWFzZSgpOwogICAgICAgICB9Ci0KLSAgICAgICAgc2V0dGluZ0NsaXBib2FyZERhdGFP
YmplY3QgPSBudWxscHRyOwogICAgIH0gZWxzZQogICAgICAgICBndGtfY2xpcGJvYXJkX2NsZWFy
KGNsaXBib2FyZCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Q
bGF0Zm9ybVBhc3RlYm9hcmRHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bs
YXRmb3JtUGFzdGVib2FyZEd0ay5jcHAKaW5kZXggYjdjYmVhZC4uMTQ5MDk2YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtUGFzdGVib2FyZEd0ay5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtUGFzdGVib2FyZEd0ay5j
cHAKQEAgLTM0LDE1ICszNCwxNSBAQCBQbGF0Zm9ybVBhc3RlYm9hcmQ6OlBsYXRmb3JtUGFzdGVi
b2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogICAgIEFTU0VSVChtX2NsaXBib2Fy
ZCk7CiB9CiAKLXZvaWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjp3cml0ZVRvQ2xpcGJvYXJkKGNvbnN0
IFJlZlB0cjxEYXRhT2JqZWN0R3RrPiYgZGF0YU9iamVjdCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+
JiYgcHJpbWFyeVNlbGVjdGlvbkNsZWFyZWQpCit2b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6d3Jp
dGVUb0NsaXBib2FyZChjb25zdCBEYXRhT2JqZWN0R3RrJiBkYXRhT2JqZWN0LCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoKT4mJiBwcmltYXJ5U2VsZWN0aW9uQ2xlYXJlZCkKIHsKLSAgICBQYXN0ZWJvYXJk
SGVscGVyOjpzaW5nbGV0b24oKS53cml0ZUNsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJvYXJkLCAq
ZGF0YU9iamVjdCwgZ3RrX2NsaXBib2FyZF9nZXQoR0RLX1NFTEVDVElPTl9QUklNQVJZKSA9PSBt
X2NsaXBib2FyZCA/IFdURk1vdmUocHJpbWFyeVNlbGVjdGlvbkNsZWFyZWQpIDogbnVsbHB0cik7
CisgICAgUGFzdGVib2FyZEhlbHBlcjo6c2luZ2xldG9uKCkud3JpdGVDbGlwYm9hcmRDb250ZW50
cyhtX2NsaXBib2FyZCwgZGF0YU9iamVjdCwgZ3RrX2NsaXBib2FyZF9nZXQoR0RLX1NFTEVDVElP
Tl9QUklNQVJZKSA9PSBtX2NsaXBib2FyZCA/IFdURk1vdmUocHJpbWFyeVNlbGVjdGlvbkNsZWFy
ZWQpIDogbnVsbHB0cik7CiB9CiAKLVJlZlB0cjxEYXRhT2JqZWN0R3RrPiBQbGF0Zm9ybVBhc3Rl
Ym9hcmQ6OnJlYWRGcm9tQ2xpcGJvYXJkKCkKK1JlZjxEYXRhT2JqZWN0R3RrPiBQbGF0Zm9ybVBh
c3RlYm9hcmQ6OnJlYWRGcm9tQ2xpcGJvYXJkKCkKIHsKLSAgICBSZWZQdHI8RGF0YU9iamVjdEd0
az4gZGF0YU9iamVjdCA9IERhdGFPYmplY3RHdGs6OmNyZWF0ZSgpOwotICAgIFBhc3RlYm9hcmRI
ZWxwZXI6OnNpbmdsZXRvbigpLmdldENsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJvYXJkLCAqZGF0
YU9iamVjdCk7CisgICAgUmVmPERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3QoRGF0YU9iamVjdEd0
azo6Y3JlYXRlKCkpOworICAgIFBhc3RlYm9hcmRIZWxwZXI6OnNpbmdsZXRvbigpLmdldENsaXBi
b2FyZENvbnRlbnRzKG1fY2xpcGJvYXJkLCBkYXRhT2JqZWN0LmdldCgpKTsKICAgICByZXR1cm4g
ZGF0YU9iamVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDNiMWIzNGQuLjBkNDVhOGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw2MSBAQAorMjAxNi0wOS0yMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxj
Z2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gQ2xlYW4gdXAgRGF0YU9iamVjdEd0
ayBoYW5kbGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTYyMjY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSW4gc29tZSBjYXNlcyB0aGUgb3duZXJzaGlwIG9mIERhdGFPYmplY3RHdGsgaW5zdGFuY2Vz
IGlzIG5vdCBjbGVhciBlbm91Z2gsIGFuZCB3ZSBoYXZlIGhhY2tzIHRvIGF2b2lkIG1lbW9yeQor
ICAgICAgICBsZWFrcyBiZWNhdXNlIG9mIHRoYXQuCisKKyAgICAgICAgKiBTaGFyZWQvZ3RrL0Fy
Z3VtZW50Q29kZXJzR3RrLmNwcDoKKyAgICAgICAgKElQQzo6ZW5jb2RlSW1hZ2UpOiBVc2UgSW1h
Z2UgaW5zdGVhZCBvZiBHZGtQaXhidWYuCisgICAgICAgIChJUEM6OmRlY29kZUltYWdlKTogRGl0
dG8uCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8RGF0YU9iamVjdEd0az46OmVuY29kZSk6
CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8RGF0YU9iamVjdEd0az46OmRlY29kZSk6Cisg
ICAgICAgIChJUEM6OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChJUEM6OmRlY29kZSk6IERl
bGV0ZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8RHJhZ0RhdGE+OjplbmNvZGUpOiBE
ZWxldGVkLgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPERyYWdEYXRhPjo6ZGVjb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmg6CisgICAg
ICAgICogU2hhcmVkL2d0ay9QYXN0ZWJvYXJkQ29udGVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OlBhc3RlYm9hcmRDb250ZW50OjpQYXN0ZWJvYXJkQ29udGVudCk6IEFkZCBlbXB0eSBjb25zdHJ1
Y3RvciB0aGF0IGNyZWF0ZXMgYSBuZXcgRGF0YU9iamVjdEd0aywgYQorICAgICAgICBjb25zdHJ1
Y3RvciB0aGF0IHJlY2VpdmVzIGEgY29uc3QgcmVmZXJlbmNlIGFuZCBhbm90aGVyIG9uZSB0aGF0
IHRha2VzIHRoZSBvd25lcnNoaXAgb2YgdGhlIGdpdmVuIERhdGFPYmplY3RHdGsuCisgICAgICAg
IChXZWJLaXQ6OlBhc3RlYm9hcmRDb250ZW50OjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpQ
YXN0ZWJvYXJkQ29udGVudDo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvZ3RrL1Bhc3RlYm9h
cmRDb250ZW50Lmg6IFVzZSBSZWYgaW5zdGVhZCBvZiBSZWZQdHIgZm9yIHRoZSBEYXRhT2JqZWN0
R3RrIG1lbWJlci4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzdGFydERyYWcpOiBUcmFuc2Zl
ciB0aGUgRGF0YU9iamVjdEd0ayB0byB0aGUgRHJhZ0FuZERyb3BIYW5kbGVyLCBpbnN0ZWFkIG9m
IHVzaW5nIERyYWdEYXRhLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJ
bXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VDbGllbnQuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpw
ZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24pOiBJbnN0ZWFkIG9mIHNlbmRpbmcgYSBEcmFnRGF0
YSBvYmplY3QgdG8gdGhlIHdlYiBwcm9jZXNzLAorICAgICAgICBzZW5kIHRoZSBEYXRhT2JqZWN0
R3RrIGFuZCBEcmFnRGF0YSBtZW1iZXJzIG5lZWRlZCBhcyBwYXJhbWV0ZXJzLgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnN0YXJ0RHJhZyk6IFRyYW5zZmVyIHRoZSByZWNlaXZlZCBE
YXRhT2JqZWN0R3RrIHRvIHBhZ2UgY2xpZW50LCBpbnN0ZWFkIG9mIHVzaW5nCisgICAgICAgIERy
YWdEYXRhLiBBbHNvIG5vdGlmeSB0aGUgd2ViIHByb2Nlc3MgdGhhdCBkcmFnIHN0YXJ0ZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkubWVzc2FnZXMuaW46IFVwZGF0ZSBTdGFydERyYWcgbWVzc2FnZSBwYXJhbWV0
ZXJzLgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvRHJhZ0FuZERyb3BIYW5kbGVyLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6RHJhZ0FuZERyb3BIYW5kbGVyOjpEcmFnQW5kRHJvcEhhbmRsZXIpOiBS
ZW1vdmUgdW5uZWVkZWQgaW5pdGlhbGl6YXRpb24uCisgICAgICAgIChXZWJLaXQ6OkRyYWdBbmRE
cm9wSGFuZGxlcjo6c3RhcnREcmFnKTogVGFrZSBvd25lcnNoaXAgb2YgdGhlIGdpdmVuIERhdGFP
YmplY3RHdGsuCisgICAgICAgICogVUlQcm9jZXNzL2d0ay9EcmFnQW5kRHJvcEhhbmRsZXIuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYlBhc3RlYm9hcmRQcm94eUd0ay5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6d3JpdGVUb0NsaXBib2FyZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhc3RlYm9hcmRQcm94eTo6cmVhZEZyb21DbGlwYm9hcmQpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjp3cml0ZVRvQ2xpcGJv
YXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpyZWFkRnJvbUNs
aXBib2FyZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9y
bVN0cmF0ZWdpZXMuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9X
ZWJEcmFnQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Y29udmVydENhaXJvU3VyZmFj
ZVRvU2hhcmVhYmxlQml0bWFwKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0NsaWVudDo6c3Rh
cnREcmFnKTogRG8gbm90IGNyZWF0ZSBhIERyYWdEYXRhIGFuZCBwYXNzIHRoZSBEYXRhT2JqZWN0
R3RrIGRpcmVjdGx5IHRvIHRoZQorICAgICAgICBtZXNzYWdlLiBBbHNvIG5vdGlmeSB0aGUgV2Vi
UGFnZSB0aGF0IGRyYWcgaXMgYWJvdXQgdG8gc3RhcnQuCisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRHJh
Z0NvbnRyb2xsZXJBY3Rpb24pOiBSZW1vdmUgZXhwbGljaXQgRGF0YU9iamVjdEd0ayBkZXJlZnMg
YW5kIHNpbXBseSBjcmVhdGUgYQorICAgICAgICBEcmFnRGF0YSB1c2luZyB0aGUgRGF0YU9iamVj
dEd0ayBwb2ludGVyIGFzIHBsYXRmb3JtIGRhdGEuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNz
YWdlcy5pbjogVXBkYXRlIFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbiBtZXNzYWdlIHBhcmFt
ZXRlcnMuCisKIDIwMTYtMDktMTkgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5j
b20+CiAKICAgICAgICAgQWRkIGEgdW5pdCB0ZXN0IGNvdmVyaW5nIDxodHRwczovL3RyYWMud2Vi
a2l0Lm9yZy9jaGFuZ2VzZXQvMjA1OTgzPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3Rr
L0FyZ3VtZW50Q29kZXJzR3RrLmNwcAppbmRleCBjNmQyMzU4Li5lNjg2YmIzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmNwcApAQCAtMzAsMTAg
KzMwLDkgQEAKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJXZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0RhdGFPYmplY3RHdGsuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0RyYWdEYXRhLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0Nv
bnRleHQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0d0a1ZlcnNpb25pbmcuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1BsYXRmb3JtQ29udGV4dENhaXJvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZS5o
PgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNDEsMTUgKzQwLDEwIEBAIHVzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7CiAKIG5hbWVzcGFjZSBJUEMgewogCi1zdGF0aWMgdm9pZCBlbmNvZGVJ
bWFnZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBHZGtQaXhidWYqIHBpeGJ1ZikKK3N0YXRpYyB2
b2lkIGVuY29kZUltYWdlKEVuY29kZXImIGVuY29kZXIsIEltYWdlJiBpbWFnZSkKIHsKLSAgICBJ
bnRTaXplIGltYWdlU2l6ZShnZGtfcGl4YnVmX2dldF93aWR0aChwaXhidWYpLCBnZGtfcGl4YnVm
X2dldF9oZWlnaHQocGl4YnVmKSk7Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFw
ID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoaW1hZ2VTaXplLCBTaGFyZWFibGVC
aXRtYXA6OlN1cHBvcnRzQWxwaGEpOwotICAgIGF1dG8gZ3JhcGhpY3NDb250ZXh0ID0gYml0bWFw
LT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKLQotICAgIGNhaXJvX3QqIGNyID0gZ3JhcGhpY3ND
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKLSAgICBnZGtfY2Fpcm9fc2V0X3NvdXJj
ZV9waXhidWYoY3IsIHBpeGJ1ZiwgMCwgMCk7Ci0gICAgY2Fpcm9fcGFpbnQoY3IpOworICAgIFJl
ZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hh
cmVhYmxlKEludFNpemUoaW1hZ2Uuc2l6ZSgpKSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0Fs
cGhhKTsKKyAgICBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpLT5kcmF3SW1hZ2UoaW1h
Z2UsIEludFBvaW50KCkpOwogCiAgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOwog
ICAgIGJpdG1hcC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSk7CkBAIC01Nyw3ICs1MSw3IEBAIHN0YXRp
YyB2b2lkIGVuY29kZUltYWdlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEdka1BpeGJ1ZiogcGl4
YnVmKQogICAgIGVuY29kZXIgPDwgaGFuZGxlOwogfQogCi1zdGF0aWMgYm9vbCBkZWNvZGVJbWFn
ZShEZWNvZGVyJiBkZWNvZGVyLCBHUmVmUHRyPEdka1BpeGJ1Zj4mIHBpeGJ1ZikKK3N0YXRpYyBi
b29sIGRlY29kZUltYWdlKERlY29kZXImIGRlY29kZXIsIFJlZlB0cjxJbWFnZT4mIGltYWdlKQog
ewogICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGhhbmRsZSkpCkBAIC02Niw2MSArNjAsNTEgQEAgc3RhdGljIGJvb2wgZGVjb2RlSW1h
Z2UoRGVjb2RlciYgZGVjb2RlciwgR1JlZlB0cjxHZGtQaXhidWY+JiBwaXhidWYpCiAgICAgUmVm
UHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaGFu
ZGxlKTsKICAgICBpZiAoIWJpdG1hcCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVm
UHRyPEltYWdlPiBpbWFnZSA9IGJpdG1hcC0+Y3JlYXRlSW1hZ2UoKTsKKyAgICBpbWFnZSA9IGJp
dG1hcC0+Y3JlYXRlSW1hZ2UoKTsKICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlID0gaW1hZ2UtPm5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgaWYgKCFzdXJmYWNlKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBwaXhidWYgPSBhZG9wdEdSZWYoZ2RrX3BpeGJ1Zl9nZXRfZnJvbV9z
dXJmYWNlKHN1cmZhY2UuZ2V0KCksIDAsIDAsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRo
KHN1cmZhY2UuZ2V0KCkpLCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZS5n
ZXQoKSkpKTsKLSAgICBpZiAoIXBpeGJ1ZikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IERh
dGFPYmplY3RHdGsqIGRhdGFPYmplY3QpCit2b2lkIEFyZ3VtZW50Q29kZXI8RGF0YU9iamVjdEd0
az46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBEYXRhT2JqZWN0R3RrJiBkYXRhT2Jq
ZWN0KQogewotICAgIGJvb2wgaGFzVGV4dCA9IGRhdGFPYmplY3QtPmhhc1RleHQoKTsKKyAgICBi
b29sIGhhc1RleHQgPSBkYXRhT2JqZWN0Lmhhc1RleHQoKTsKICAgICBlbmNvZGVyIDw8IGhhc1Rl
eHQ7CiAgICAgaWYgKGhhc1RleHQpCi0gICAgICAgIGVuY29kZXIgPDwgZGF0YU9iamVjdC0+dGV4
dCgpOworICAgICAgICBlbmNvZGVyIDw8IGRhdGFPYmplY3QudGV4dCgpOwogCi0gICAgYm9vbCBo
YXNNYXJrdXAgPSBkYXRhT2JqZWN0LT5oYXNNYXJrdXAoKTsKKyAgICBib29sIGhhc01hcmt1cCA9
IGRhdGFPYmplY3QuaGFzTWFya3VwKCk7CiAgICAgZW5jb2RlciA8PCBoYXNNYXJrdXA7CiAgICAg
aWYgKGhhc01hcmt1cCkKLSAgICAgICAgZW5jb2RlciA8PCBkYXRhT2JqZWN0LT5tYXJrdXAoKTsK
KyAgICAgICAgZW5jb2RlciA8PCBkYXRhT2JqZWN0Lm1hcmt1cCgpOwogCi0gICAgYm9vbCBoYXNV
UkwgPSBkYXRhT2JqZWN0LT5oYXNVUkwoKTsKKyAgICBib29sIGhhc1VSTCA9IGRhdGFPYmplY3Qu
aGFzVVJMKCk7CiAgICAgZW5jb2RlciA8PCBoYXNVUkw7CiAgICAgaWYgKGhhc1VSTCkKLSAgICAg
ICAgZW5jb2RlciA8PCBkYXRhT2JqZWN0LT51cmwoKS5zdHJpbmcoKTsKKyAgICAgICAgZW5jb2Rl
ciA8PCBkYXRhT2JqZWN0LnVybCgpLnN0cmluZygpOwogCi0gICAgYm9vbCBoYXNVUklMaXN0ID0g
ZGF0YU9iamVjdC0+aGFzVVJJTGlzdCgpOworICAgIGJvb2wgaGFzVVJJTGlzdCA9IGRhdGFPYmpl
Y3QuaGFzVVJJTGlzdCgpOwogICAgIGVuY29kZXIgPDwgaGFzVVJJTGlzdDsKICAgICBpZiAoaGFz
VVJJTGlzdCkKLSAgICAgICAgZW5jb2RlciA8PCBkYXRhT2JqZWN0LT51cmlMaXN0KCk7CisgICAg
ICAgIGVuY29kZXIgPDwgZGF0YU9iamVjdC51cmlMaXN0KCk7CiAKLSAgICBib29sIGhhc0ltYWdl
ID0gZGF0YU9iamVjdC0+aGFzSW1hZ2UoKTsKKyAgICBib29sIGhhc0ltYWdlID0gZGF0YU9iamVj
dC5oYXNJbWFnZSgpOwogICAgIGVuY29kZXIgPDwgaGFzSW1hZ2U7CiAgICAgaWYgKGhhc0ltYWdl
KQotICAgICAgICBlbmNvZGVJbWFnZShlbmNvZGVyLCBkYXRhT2JqZWN0LT5pbWFnZSgpKTsKKyAg
ICAgICAgZW5jb2RlSW1hZ2UoZW5jb2RlciwgKmRhdGFPYmplY3QuaW1hZ2UoKSk7CiAKLSAgICBi
b29sIGhhc1Vua25vd25UeXBlRGF0YSA9IGRhdGFPYmplY3QtPmhhc1Vua25vd25UeXBlRGF0YSgp
OworICAgIGJvb2wgaGFzVW5rbm93blR5cGVEYXRhID0gZGF0YU9iamVjdC5oYXNVbmtub3duVHlw
ZURhdGEoKTsKICAgICBlbmNvZGVyIDw8IGhhc1Vua25vd25UeXBlRGF0YTsKICAgICBpZiAoaGFz
VW5rbm93blR5cGVEYXRhKQotICAgICAgICBlbmNvZGVyIDw8IGRhdGFPYmplY3QtPnVua25vd25U
eXBlcygpOworICAgICAgICBlbmNvZGVyIDw8IGRhdGFPYmplY3QudW5rbm93blR5cGVzKCk7CiAK
LSAgICBib29sIGNhblNtYXJ0UmVwbGFjZSA9IGRhdGFPYmplY3QtPmNhblNtYXJ0UmVwbGFjZSgp
OworICAgIGJvb2wgY2FuU21hcnRSZXBsYWNlID0gZGF0YU9iamVjdC5jYW5TbWFydFJlcGxhY2Uo
KTsKICAgICBlbmNvZGVyIDw8IGNhblNtYXJ0UmVwbGFjZTsKIH0KIAotYm9vbCBkZWNvZGUoRGVj
b2RlciYgZGVjb2RlciwgUmVmUHRyPERhdGFPYmplY3RHdGs+JiBkYXRhT2JqZWN0KQorYm9vbCBB
cmd1bWVudENvZGVyPERhdGFPYmplY3RHdGs+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgRGF0
YU9iamVjdEd0ayYgZGF0YU9iamVjdCkKIHsKLSAgICBSZWZQdHI8RGF0YU9iamVjdEd0az4gZGF0
YSA9IERhdGFPYmplY3RHdGs6OmNyZWF0ZSgpOworICAgIGRhdGFPYmplY3QuY2xlYXJBbGwoKTsK
IAogICAgIGJvb2wgaGFzVGV4dDsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc1RleHQpKQpA
QCAtMTI5LDcgKzExMyw3IEBAIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJlZlB0cjxE
YXRhT2JqZWN0R3RrPiYgZGF0YU9iamVjdCkKICAgICAgICAgU3RyaW5nIHRleHQ7CiAgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUodGV4dCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGRhdGEtPnNldFRleHQodGV4dCk7CisgICAgICAgIGRhdGFPYmplY3Quc2V0VGV4dCh0
ZXh0KTsKICAgICB9CiAKICAgICBib29sIGhhc01hcmt1cDsKQEAgLTEzOSw3ICsxMjMsNyBAQCBi
b29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZWZQdHI8RGF0YU9iamVjdEd0az4mIGRhdGFP
YmplY3QpCiAgICAgICAgIFN0cmluZyBtYXJrdXA7CiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUobWFya3VwKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZGF0YS0+c2V0
TWFya3VwKG1hcmt1cCk7CisgICAgICAgIGRhdGFPYmplY3Quc2V0TWFya3VwKG1hcmt1cCk7CiAg
ICAgfQogCiAgICAgYm9vbCBoYXNVUkw7CkBAIC0xNDksNyArMTMzLDcgQEAgYm9vbCBkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgUmVmUHRyPERhdGFPYmplY3RHdGs+JiBkYXRhT2JqZWN0KQogICAg
ICAgICBTdHJpbmcgdXJsOwogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHVybCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGRhdGEtPnNldFVSTChVUkwoVVJMKCksIHVy
bCksIFN0cmluZygpKTsKKyAgICAgICAgZGF0YU9iamVjdC5zZXRVUkwoVVJMKFVSTCgpLCB1cmwp
LCBTdHJpbmcoKSk7CiAgICAgfQogCiAgICAgYm9vbCBoYXNVUklMaXN0OwpAQCAtMTU5LDE3ICsx
NDMsMTcgQEAgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmVmUHRyPERhdGFPYmplY3RH
dGs+JiBkYXRhT2JqZWN0KQogICAgICAgICBTdHJpbmcgdXJpTGlzdDsKICAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZSh1cmlMaXN0KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgZGF0YS0+c2V0VVJJTGlzdCh1cmlMaXN0KTsKKyAgICAgICAgZGF0YU9iamVjdC5zZXRVUklM
aXN0KHVyaUxpc3QpOwogICAgIH0KIAogICAgIGJvb2wgaGFzSW1hZ2U7CiAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShoYXNJbWFnZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoaGFz
SW1hZ2UpIHsKLSAgICAgICAgR1JlZlB0cjxHZGtQaXhidWY+IGltYWdlOworICAgICAgICBSZWZQ
dHI8SW1hZ2U+IGltYWdlOwogICAgICAgICBpZiAoIWRlY29kZUltYWdlKGRlY29kZXIsIGltYWdl
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZGF0YS0+c2V0SW1hZ2UoaW1h
Z2UuZ2V0KCkpOworICAgICAgICBkYXRhT2JqZWN0LnNldEltYWdlKGltYWdlLmdldCgpKTsKICAg
ICB9CiAKICAgICBib29sIGhhc1Vua25vd25UeXBlRGF0YTsKQEAgLTE4Miw2NyArMTY2LDE2IEBA
IGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiYgZGF0
YU9iamVjdCkKIAogICAgICAgICBhdXRvIGVuZCA9IHVua25vd25UeXBlcy5lbmQoKTsKICAgICAg
ICAgZm9yIChhdXRvIGl0ID0gdW5rbm93blR5cGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgICAgIGRhdGEtPnNldFVua25vd25UeXBlRGF0YShpdC0+a2V5LCBpdC0+dmFsdWUp
OworICAgICAgICAgICAgZGF0YU9iamVjdC5zZXRVbmtub3duVHlwZURhdGEoaXQtPmtleSwgaXQt
PnZhbHVlKTsKICAgICB9CiAKICAgICBib29sIGNhblNtYXJ0UmVwbGFjZTsKICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGNhblNtYXJ0UmVwbGFjZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBkYXRhLT5zZXRDYW5TbWFydFJlcGxhY2UoY2FuU21hcnRSZXBsYWNlKTsKLQotICAgIGRhdGFP
YmplY3QgPSBkYXRhOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLSNpZiBFTkFCTEUoRFJBR19T
VVBQT1JUKQotdm9pZCBBcmd1bWVudENvZGVyPERyYWdEYXRhPjo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKLXsKLSAgICBlbmNvZGVyIDw8IGRyYWdE
YXRhLmNsaWVudFBvc2l0aW9uKCk7Ci0gICAgZW5jb2RlciA8PCBkcmFnRGF0YS5nbG9iYWxQb3Np
dGlvbigpOwotICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGRyYWdEYXRhLmRy
YWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaygpKTsKLSAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0
PHVpbnQ2NF90PihkcmFnRGF0YS5mbGFncygpKTsKLQotICAgIERhdGFPYmplY3RHdGsqIHBsYXRm
b3JtRGF0YSA9IGRyYWdEYXRhLnBsYXRmb3JtRGF0YSgpOwotICAgIGVuY29kZXIgPDwgc3RhdGlj
X2Nhc3Q8Ym9vbD4ocGxhdGZvcm1EYXRhKTsKLSAgICBpZiAocGxhdGZvcm1EYXRhKQotICAgICAg
ICBJUEM6OmVuY29kZShlbmNvZGVyLCBwbGF0Zm9ybURhdGEpOwotfQotCi1ib29sIEFyZ3VtZW50
Q29kZXI8RHJhZ0RhdGE+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgRHJhZ0RhdGEmIGRyYWdE
YXRhKQotewotICAgIEludFBvaW50IGNsaWVudFBvc2l0aW9uOwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoY2xpZW50UG9zaXRpb24pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBJbnRQ
b2ludCBnbG9iYWxQb3NpdGlvbjsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGdsb2JhbFBvc2l0
aW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdWludDY0X3Qgc291cmNlT3BlcmF0
aW9uTWFzazsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNvdXJjZU9wZXJhdGlvbk1hc2spKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1aW50NjRfdCBmbGFnczsKLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGZsYWdzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBo
YXNQbGF0Zm9ybURhdGE7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYXNQbGF0Zm9ybURhdGEp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZWZQdHI8RGF0YU9iamVjdEd0az4gcGxh
dGZvcm1EYXRhOwotICAgIGlmIChoYXNQbGF0Zm9ybURhdGEpIHsKLSAgICAgICAgaWYgKCFJUEM6
OmRlY29kZShkZWNvZGVyLCBwbGF0Zm9ybURhdGEpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGRyYWdEYXRhID0gRHJhZ0RhdGEocGxhdGZvcm1EYXRhLmxlYWtSZWYo
KSwgY2xpZW50UG9zaXRpb24sIGdsb2JhbFBvc2l0aW9uLCBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0
aW9uPihzb3VyY2VPcGVyYXRpb25NYXNrKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PERyYWdBcHBsaWNhdGlvbkZsYWdzPihmbGFncykpOworICAgIGRhdGFPYmplY3Quc2V0
Q2FuU21hcnRSZXBsYWNlKGNhblNtYXJ0UmVwbGFjZSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
LSNlbmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JUKQogCiBzdGF0aWMgdm9pZCBlbmNvZGVHS2V5
RmlsZShFbmNvZGVyJiBlbmNvZGVyLCBHS2V5RmlsZSoga2V5RmlsZSkKIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuaCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuaAppbmRleCAxNjljNjY5Li44ZWE5
NGFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJz
R3RrLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5o
CkBAIC0zNCwyNiArMzQsMjAgQEAgdHlwZWRlZiBzdHJ1Y3QgX0d0a1BhZ2VTZXR1cCBHdGtQYWdl
U2V0dXA7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERhdGFPYmplY3RHdGs7Ci1jbGFz
cyBEcmFnRGF0YTsKIH0KIAogbmFtZXNwYWNlIElQQyB7CiAKLSNpZiBFTkFCTEUoRFJBR19TVVBQ
T1JUKQotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpEcmFnRGF0YT4g
ewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6RHJhZ0Rh
dGEmKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6OkRyYWdEYXRh
Jik7Ci19OwotI2VuZGlmCi0KIHZvaWQgZW5jb2RlKEVuY29kZXImLCBHdGtQcmludFNldHRpbmdz
Kik7CiBib29sIGRlY29kZShEZWNvZGVyJiwgR1JlZlB0cjxHdGtQcmludFNldHRpbmdzPiYpOwog
CiB2b2lkIGVuY29kZShFbmNvZGVyJiwgR3RrUGFnZVNldHVwKik7CiBib29sIGRlY29kZShEZWNv
ZGVyJiwgR1JlZlB0cjxHdGtQYWdlU2V0dXA+Jik7CiAKLXZvaWQgZW5jb2RlKEVuY29kZXImLCBj
b25zdCBXZWJDb3JlOjpEYXRhT2JqZWN0R3RrKik7Ci1ib29sIGRlY29kZShEZWNvZGVyJiwgUmVm
UHRyPFdlYkNvcmU6OkRhdGFPYmplY3RHdGs+Jik7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVu
dENvZGVyPFdlYkNvcmU6OkRhdGFPYmplY3RHdGs+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUo
RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkRhdGFPYmplY3RHdGsmKTsKKyAgICBzdGF0aWMgYm9v
bCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6OkRhdGFPYmplY3RHdGsmKTsKK307CiAKIH0gLy8g
bmFtZXNwYWNlIElQQwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1Bh
c3RlYm9hcmRDb250ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvUGFzdGVib2Fy
ZENvbnRlbnQuY3BwCmluZGV4IGI4OWVlNTYuLjMxMDVjMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9ndGsvUGFzdGVib2FyZENvbnRlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9ndGsvUGFzdGVib2FyZENvbnRlbnQuY3BwCkBAIC0yNywyMCArMjcsMjkgQEAK
IAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVBhc3RlYm9hcmRDb250ZW50OjpQYXN0ZWJvYXJkQ29u
dGVudChjb25zdCBSZWZQdHI8V2ViQ29yZTo6RGF0YU9iamVjdEd0az4mIGRhdGEpCi0gICAgOiBk
YXRhT2JqZWN0KGRhdGEpCitQYXN0ZWJvYXJkQ29udGVudDo6UGFzdGVib2FyZENvbnRlbnQoKQor
ICAgIDogZGF0YU9iamVjdChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpjcmVhdGUoKSkKK3sKK30K
KworUGFzdGVib2FyZENvbnRlbnQ6OlBhc3RlYm9hcmRDb250ZW50KGNvbnN0IFdlYkNvcmU6OkRh
dGFPYmplY3RHdGsmIGRhdGEpCisgICAgOiBkYXRhT2JqZWN0KGNvbnN0X2Nhc3Q8V2ViQ29yZTo6
RGF0YU9iamVjdEd0ayY+KGRhdGEpKQoreworfQorCitQYXN0ZWJvYXJkQ29udGVudDo6UGFzdGVi
b2FyZENvbnRlbnQoUmVmPFdlYkNvcmU6OkRhdGFPYmplY3RHdGs+JiYgZGF0YSkKKyAgICA6IGRh
dGFPYmplY3QoV1RGTW92ZShkYXRhKSkKIHsKLSAgICBBU1NFUlQoZGF0YU9iamVjdCk7CiB9CiAK
IHZvaWQgUGFzdGVib2FyZENvbnRlbnQ6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNv
bnN0CiB7Ci0gICAgSVBDOjplbmNvZGUoZW5jb2RlciwgZGF0YU9iamVjdC5nZXQoKSk7CisgICAg
ZW5jb2RlciA8PCBkYXRhT2JqZWN0LmdldCgpOwogfQogCiBib29sIFBhc3RlYm9hcmRDb250ZW50
OjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBQYXN0ZWJvYXJkQ29udGVudCYgcGFzdGVi
b2FyZENvbnRlbnQpCiB7Ci0gICAgcmV0dXJuIElQQzo6ZGVjb2RlKGRlY29kZXIsIHBhc3RlYm9h
cmRDb250ZW50LmRhdGFPYmplY3QpOworICAgIHJldHVybiBkZWNvZGVyLmRlY29kZShwYXN0ZWJv
YXJkQ29udGVudC5kYXRhT2JqZWN0LmdldCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1Bhc3RlYm9hcmRDb250ZW50
LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1Bhc3RlYm9hcmRDb250ZW50LmgKaW5kZXgg
MDk4ZDE3Zi4uOThkOTI1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Q
YXN0ZWJvYXJkQ29udGVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvUGFzdGVi
b2FyZENvbnRlbnQuaApAQCAtMjksMTAgKzI5LDExIEBAIGNsYXNzIEVuY29kZXI7CiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogc3RydWN0IFBhc3RlYm9hcmRDb250ZW50IHsKLSAgICBQYXN0ZWJvYXJk
Q29udGVudCgpID0gZGVmYXVsdDsKLSAgICBleHBsaWNpdCBQYXN0ZWJvYXJkQ29udGVudChjb25z
dCBSZWZQdHI8V2ViQ29yZTo6RGF0YU9iamVjdEd0az4mKTsKKyAgICBQYXN0ZWJvYXJkQ29udGVu
dCgpOworICAgIGV4cGxpY2l0IFBhc3RlYm9hcmRDb250ZW50KGNvbnN0IFdlYkNvcmU6OkRhdGFP
YmplY3RHdGsmKTsKKyAgICBleHBsaWNpdCBQYXN0ZWJvYXJkQ29udGVudChSZWY8V2ViQ29yZTo6
RGF0YU9iamVjdEd0az4mJik7CiAKLSAgICBSZWZQdHI8V2ViQ29yZTo6RGF0YU9iamVjdEd0az4g
ZGF0YU9iamVjdDsKKyAgICBSZWY8V2ViQ29yZTo6RGF0YU9iamVjdEd0az4gZGF0YU9iamVjdDsK
IAogICAgIHZvaWQgZW5jb2RlKElQQzo6RW5jb2RlciYpIGNvbnN0OwogICAgIHN0YXRpYyBib29s
IGRlY29kZShJUEM6OkRlY29kZXImLCBQYXN0ZWJvYXJkQ29udGVudCYpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCmluZGV4IDhk
MjU4ZjYuLmI2NDlkYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1BhZ2VDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKQEAgLTI1NCwxMCArMjU0LDEwIEBAIHZvaWQgUGFnZUNs
aWVudEltcGw6OmRpZENoYW5nZUNvbnRlbnRTaXplKGNvbnN0IEludFNpemUmIHNpemUpCiB9CiAK
ICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c3RhcnREcmFn
KGNvbnN0IFdlYkNvcmU6OkRyYWdEYXRhJiBkcmFnRGF0YSwgUGFzc1JlZlB0cjxTaGFyZWFibGVC
aXRtYXA+IGRyYWdJbWFnZSkKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnN0YXJ0RHJhZyhSZWY8RGF0
YU9iamVjdEd0az4mJiBzZWxlY3Rpb24sIERyYWdPcGVyYXRpb24gZHJhZ09wZXJhdGlvbiwgUmVm
UHRyPFNoYXJlYWJsZUJpdG1hcD4mJiBkcmFnSW1hZ2UpCiB7CiAgICAgV2ViS2l0V2ViVmlld0Jh
c2UqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRShtX3ZpZXdXaWRnZXQpOwotICAgIHdl
YmtpdFdlYlZpZXdCYXNlRHJhZ0FuZERyb3BIYW5kbGVyKHdlYlZpZXcpLnN0YXJ0RHJhZyhkcmFn
RGF0YSwgZHJhZ0ltYWdlKTsKKyAgICB3ZWJraXRXZWJWaWV3QmFzZURyYWdBbmREcm9wSGFuZGxl
cih3ZWJWaWV3KS5zdGFydERyYWcoV1RGTW92ZShzZWxlY3Rpb24pLCBkcmFnT3BlcmF0aW9uLCBX
VEZNb3ZlKGRyYWdJbWFnZSkpOwogCiAgICAgLy8gQSBkcmFnIHN0YXJ0aW5nIHNob3VsZCBwcmV2
ZW50IGEgZG91YmxlLWNsaWNrIGZyb20gaGFwcGVuaW5nLiBUaGlzIG1pZ2h0CiAgICAgLy8gaGFw
cGVuIGlmIGEgZHJhZyBpcyBmb2xsb3dlZCB2ZXJ5IHF1aWNrbHkgYnkgYW5vdGhlciBjbGljayAo
bGlrZSBpbiB0aGUgV1RSKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9QYWdlQ2xpZW50SW1wbC5oCmluZGV4IGZlODRmYjIuLmNjMTgwOWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaApAQCAtODYsNyAr
ODYsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgdm9pZCBzZWxlY3Rpb25EaWRDaGFuZ2UoKSBv
dmVycmlkZTsKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQotICAgIHZvaWQgc3RhcnREcmFnKGNv
bnN0IFdlYkNvcmU6OkRyYWdEYXRhJiwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGRyYWdJ
bWFnZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBzdGFydERyYWcoUmVmPFdlYkNvcmU6OkRhdGFPYmpl
Y3RHdGs+JiYsIFdlYkNvcmU6OkRyYWdPcGVyYXRpb24sIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+
JiYgZHJhZ0ltYWdlKSBvdmVycmlkZTsKICNlbmRpZgogCiAgICAgdm9pZCBlbnRlckFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSBvdmVycmlkZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCmluZGV4IDFiMjRkYjIuLmIxNzY2MzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaApAQCAtMTU3LDcgKzE1Nyw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ29udGVudFNpemUoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYpID0gMDsKIAogI2lmIFBMQVRGT1JNKEdUSykgJiYgRU5BQkxFKERSQUdfU1VQ
UE9SVCkKLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnKGNvbnN0IFdlYkNvcmU6OkRyYWdEYXRh
JiwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGRyYWdJbWFnZSkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBzdGFydERyYWcoUmVmPFdlYkNvcmU6OkRhdGFPYmplY3RHdGs+JiYsIFdlYkNvcmU6
OkRyYWdPcGVyYXRpb24sIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+JiYgZHJhZ0ltYWdlKSA9IDA7
CiAjZW5kaWYKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vy
c29yJikgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRl
eCA5ZGEyMGNjLi45YTZjZTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcApAQCAtMTU1LDYgKzE1NSwxMCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dEluZGlj
YXRvcldpbmRvdy5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSAiUGFz
dGVib2FyZENvbnRlbnQuaCIKKyNlbmRpZgorCiAjaWYgVVNFKENBSVJPKQogI2luY2x1ZGUgPFdl
YkNvcmUvQ2Fpcm9VdGlsaXRpZXMuaD4KICNlbmRpZgpAQCAtMTc2OCw3ICsxNzcyLDEwIEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oRHJhZ0NvbnRyb2xs
ZXJBY3Rpb24gYWN0aW9uLCBEcmFnCiAgICAgU3RyaW5nIHVybCA9IGRyYWdEYXRhLmFzVVJMKCk7
CiAgICAgaWYgKCF1cmwuaXNFbXB0eSgpKQogICAgICAgICBtX3Byb2Nlc3MtPmFzc3VtZVJlYWRB
Y2Nlc3NUb0Jhc2VVUkwodXJsKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihhY3Rpb24sIGRyYWdEYXRhKSwgbV9wYWdl
SUQpOworCisgICAgQVNTRVJUKGRyYWdEYXRhLnBsYXRmb3JtRGF0YSgpKTsKKyAgICBQYXN0ZWJv
YXJkQ29udGVudCBzZWxlY3Rpb24oKmRyYWdEYXRhLnBsYXRmb3JtRGF0YSgpKTsKKyAgICBtX3By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlv
bihhY3Rpb24sIGRyYWdEYXRhLmNsaWVudFBvc2l0aW9uKCksIGRyYWdEYXRhLmdsb2JhbFBvc2l0
aW9uKCksIGRyYWdEYXRhLmRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaygpLCBzZWxlY3Rpb24s
IGRyYWdEYXRhLmZsYWdzKCkpLCBtX3BhZ2VJRCk7CiAjZWxzZQogICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKGFjdGlvbiwg
ZHJhZ0RhdGEuY2xpZW50UG9zaXRpb24oKSwgZHJhZ0RhdGEuZ2xvYmFsUG9zaXRpb24oKSwgZHJh
Z0RhdGEuZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKCksIGRyYWdTdG9yYWdlTmFtZSwgZHJh
Z0RhdGEuZmxhZ3MoKSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgc2FuZGJveEV4dGVuc2lvbnNG
b3JVcGxvYWQpLCBtX3BhZ2VJRCk7CiAjZW5kaWYKQEAgLTE3ODQsMTYgKzE3OTEsMTIgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OmRpZFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50NjRfdCBk
cmFnT3BlcmF0aW9uLCBib29sIG0KIH0KIAogI2lmIFBMQVRGT1JNKEdUSykKLXZvaWQgV2ViUGFn
ZVByb3h5OjpzdGFydERyYWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhLCBjb25zdCBTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZSYgZHJhZ0ltYWdlSGFuZGxlKQordm9pZCBXZWJQYWdlUHJveHk6OnN0
YXJ0RHJhZyhQYXN0ZWJvYXJkQ29udGVudCYmIHNlbGVjdGlvbiwgdWludDY0X3QgZHJhZ09wZXJh
dGlvbiwgY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGRyYWdJbWFnZUhhbmRsZSkKIHsK
LSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1hZ2UgPSAwOwotICAgIGlmICghZHJh
Z0ltYWdlSGFuZGxlLmlzTnVsbCgpKSB7Ci0gICAgICAgIGRyYWdJbWFnZSA9IFNoYXJlYWJsZUJp
dG1hcDo6Y3JlYXRlKGRyYWdJbWFnZUhhbmRsZSk7Ci0gICAgICAgIGlmICghZHJhZ0ltYWdlKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBk
cmFnSW1hZ2UgPSAhZHJhZ0ltYWdlSGFuZGxlLmlzTnVsbCgpID8gU2hhcmVhYmxlQml0bWFwOjpj
cmVhdGUoZHJhZ0ltYWdlSGFuZGxlKSA6IG51bGxwdHI7CisgICAgbV9wYWdlQ2xpZW50LnN0YXJ0
RHJhZyhXVEZNb3ZlKHNlbGVjdGlvbi5kYXRhT2JqZWN0KSwgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
RHJhZ09wZXJhdGlvbj4oZHJhZ09wZXJhdGlvbiksIFdURk1vdmUoZHJhZ0ltYWdlKSk7CiAKLSAg
ICBtX3BhZ2VDbGllbnQuc3RhcnREcmFnKGRyYWdEYXRhLCBkcmFnSW1hZ2UucmVsZWFzZSgpKTsK
KyAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZFN0YXJ0RHJhZygpLCBt
X3BhZ2VJRCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCmluZGV4IDg2MTJmN2MuLjlhODBjZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmgKQEAgLTgwOSw3ICs4MDksNyBAQCBwdWJsaWM6CiAjZW5kaWYKICNlbmRpZgog
I2lmIFBMQVRGT1JNKEdUSykKLSAgICB2b2lkIHN0YXJ0RHJhZyhjb25zdCBXZWJDb3JlOjpEcmFn
RGF0YSYsIGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBkcmFnSW1hZ2UpOworICAgIHZv
aWQgc3RhcnREcmFnKFBhc3RlYm9hcmRDb250ZW50JiYsIHVpbnQ2NF90IGRyYWdPcGVyYXRpb24s
IGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBkcmFnSW1hZ2UpOwogI2VuZGlmCiAjZW5k
aWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5t
ZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2Fn
ZXMuaW4KaW5kZXggOTQ0YjZmMS4uYWU3OWE4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCkBAIC0zMDgsNyArMzA4LDcgQEAgbWVz
c2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICNlbmRpZgogI2VuZGlmCiAjaWYgUExBVEZPUk0oR1RL
KSAmJiBFTkFCTEUoRFJBR19TVVBQT1JUKQotICAgIFN0YXJ0RHJhZyhXZWJDb3JlOjpEcmFnRGF0
YSBkcmFnRGF0YSwgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBkcmFnSW1hZ2UpCisg
ICAgU3RhcnREcmFnKHN0cnVjdCBXZWJLaXQ6OlBhc3RlYm9hcmRDb250ZW50IHNlbGVjdGlvbiwg
dWludDY0X3QgZHJhZ09wZXJhdGlvbiwgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBk
cmFnSW1hZ2UpCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9EcmFnQW5kRHJvcEhhbmRsZXIuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2d0ay9EcmFnQW5kRHJvcEhhbmRsZXIuY3BwCmluZGV4IDE2ZGJh
N2YuLjZmMjllZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvRHJh
Z0FuZERyb3BIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0Ry
YWdBbmREcm9wSGFuZGxlci5jcHAKQEAgLTQ0LDkgKzQ0LDYgQEAgbmFtZXNwYWNlIFdlYktpdCB7
CiAKIERyYWdBbmREcm9wSGFuZGxlcjo6RHJhZ0FuZERyb3BIYW5kbGVyKFdlYlBhZ2VQcm94eSYg
cGFnZSkKICAgICA6IG1fcGFnZShwYWdlKQotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDE2LCAw
KQotICAgICwgbV9kcmFnQ29udGV4dChudWxscHRyKQotI2VuZGlmCiB7CiB9CiAKQEAgLTExMSwx
OCArMTA4LDE4IEBAIHN0YXRpYyBpbmxpbmUgRHJhZ09wZXJhdGlvbiBnZGtEcmFnQWN0aW9uVG9E
cmFnT3BlcmF0aW9uKEdka0RyYWdBY3Rpb24gZ2RrQWN0aW9uCiAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PERyYWdPcGVyYXRpb24+KGFjdGlvbik7CiB9CiAKLXZvaWQgRHJhZ0FuZERyb3BIYW5kbGVy
OjpzdGFydERyYWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhLCBQYXNzUmVmUHRyPFNoYXJlYWJs
ZUJpdG1hcD4gZHJhZ0ltYWdlKQordm9pZCBEcmFnQW5kRHJvcEhhbmRsZXI6OnN0YXJ0RHJhZyhS
ZWY8RGF0YU9iamVjdEd0az4mJiBzZWxlY3Rpb24sIERyYWdPcGVyYXRpb24gZHJhZ09wZXJhdGlv
biwgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4mJiBkcmFnSW1hZ2UpCiB7CiAjaWYgR1RLX0NIRUNL
X1ZFUlNJT04oMywgMTYsIDApCi0gICAgbV9kcmFnZ2luZ0RhdGFPYmplY3QgPSBhZG9wdFJlZihk
cmFnRGF0YS5wbGF0Zm9ybURhdGEoKSk7CisgICAgbV9kcmFnZ2luZ0RhdGFPYmplY3QgPSBXVEZN
b3ZlKHNlbGVjdGlvbik7CiAgICAgR1JlZlB0cjxHdGtUYXJnZXRMaXN0PiB0YXJnZXRMaXN0ID0g
UGFzdGVib2FyZEhlbHBlcjo6c2luZ2xldG9uKCkudGFyZ2V0TGlzdEZvckRhdGFPYmplY3QoKm1f
ZHJhZ2dpbmdEYXRhT2JqZWN0KTsKICNlbHNlCi0gICAgUmVmUHRyPERhdGFPYmplY3RHdGs+IGRh
dGFPYmplY3QgPSBhZG9wdFJlZihkcmFnRGF0YS5wbGF0Zm9ybURhdGEoKSk7CisgICAgUmVmUHRy
PERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3QgPSBXVEZNb3ZlKHNlbGVjdGlvbik7CiAgICAgR1Jl
ZlB0cjxHdGtUYXJnZXRMaXN0PiB0YXJnZXRMaXN0ID0gUGFzdGVib2FyZEhlbHBlcjo6c2luZ2xl
dG9uKCkudGFyZ2V0TGlzdEZvckRhdGFPYmplY3QoKmRhdGFPYmplY3QpOwogI2VuZGlmCiAKICAg
ICBHVW5pcXVlUHRyPEdka0V2ZW50PiBjdXJyZW50RXZlbnQoZ3RrX2dldF9jdXJyZW50X2V2ZW50
KCkpOwotICAgIEdka0RyYWdDb250ZXh0KiBjb250ZXh0ID0gZ3RrX2RyYWdfYmVnaW4obV9wYWdl
LnZpZXdXaWRnZXQoKSwgdGFyZ2V0TGlzdC5nZXQoKSwgZHJhZ09wZXJhdGlvblRvR2RrRHJhZ0Fj
dGlvbnMoZHJhZ0RhdGEuZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKCkpLAorICAgIEdka0Ry
YWdDb250ZXh0KiBjb250ZXh0ID0gZ3RrX2RyYWdfYmVnaW4obV9wYWdlLnZpZXdXaWRnZXQoKSwg
dGFyZ2V0TGlzdC5nZXQoKSwgZHJhZ09wZXJhdGlvblRvR2RrRHJhZ0FjdGlvbnMoZHJhZ09wZXJh
dGlvbiksCiAgICAgICAgIEdES19CVVRUT05fUFJJTUFSWSwgY3VycmVudEV2ZW50LmdldCgpKTsK
IAogI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDE2LCAwKQpAQCAtMTM1LDcgKzEzMiw3IEBAIHZv
aWQgRHJhZ0FuZERyb3BIYW5kbGVyOjpzdGFydERyYWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRh
LCBQYXNzUmVmUHRyPFNoYXJlYWJsCiAjZWxzZQogICAgIC8vIFdlIGRvbid0IGhhdmUgZ3RrX2Ry
YWdfY2FuY2VsKCkgaW4gR1RLKyA8IDMuMTYsIHNvIHdlIHVzZSB0aGUgb2xkIGNvZGUuCiAgICAg
Ly8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg0NjgKLSAg
ICBtX2RyYWdnaW5nRGF0YU9iamVjdHMuc2V0KGNvbnRleHQsIGRhdGFPYmplY3QuZ2V0KCkpOwor
ICAgIG1fZHJhZ2dpbmdEYXRhT2JqZWN0cy5zZXQoY29udGV4dCwgV1RGTW92ZShkYXRhT2JqZWN0
KSk7CiAjZW5kaWYKIAogICAgIGlmIChkcmFnSW1hZ2UpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9ndGsvRHJhZ0FuZERyb3BIYW5kbGVyLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZ3RrL0RyYWdBbmREcm9wSGFuZGxlci5oCmluZGV4IDUwMjBiOWMuLjY3MmQx
YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvRHJhZ0FuZERyb3BI
YW5kbGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9EcmFnQW5kRHJvcEhh
bmRsZXIuaApAQCAtMjMsMTYgKzIzLDE3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAgKi8KIAotI2lmbmRlZiBEcmFnQW5kRHJvcEhhbmRsZXJfaAotI2RlZmluZSBEcmFn
QW5kRHJvcEhhbmRsZXJfaAorI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JU
KQogCiAjaW5jbHVkZSA8V2ViQ29yZS9EYXRhT2JqZWN0R3RrLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9EcmFnQWN0aW9ucy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UG9pbnQuaD4KICNpbmNsdWRl
IDxndGsvZ3RrLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CiAKIHR5cGVkZWYgc3Ry
dWN0IF9HZGtEcmFnQ29udGV4dCBHZGtEcmFnQ29udGV4dDsKIHR5cGVkZWYgc3RydWN0IF9HdGtT
ZWxlY3Rpb25EYXRhIEd0a1NlbGVjdGlvbkRhdGE7CkBAIC01MSw3ICs1Miw3IEBAIGNsYXNzIERy
YWdBbmREcm9wSGFuZGxlciB7CiBwdWJsaWM6CiAgICAgRHJhZ0FuZERyb3BIYW5kbGVyKFdlYlBh
Z2VQcm94eSYpOwogCi0gICAgdm9pZCBzdGFydERyYWcoY29uc3QgV2ViQ29yZTo6RHJhZ0RhdGEm
LCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlKTsKKyAgICB2b2lkIHN0YXJ0
RHJhZyhSZWY8V2ViQ29yZTo6RGF0YU9iamVjdEd0az4mJiwgV2ViQ29yZTo6RHJhZ09wZXJhdGlv
biwgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4mJiBkcmFnSW1hZ2UpOwogICAgIHZvaWQgZmlsbERy
YWdEYXRhKEdka0RyYWdDb250ZXh0KiwgR3RrU2VsZWN0aW9uRGF0YSosIHVuc2lnbmVkIGluZm8p
OwogICAgIHZvaWQgZmluaXNoRHJhZyhHZGtEcmFnQ29udGV4dCopOwogCkBAIC05MCw1ICs5MSwz
IEBAIHByaXZhdGU6CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShE
UkFHX1NVUFBPUlQpCi0KLSNlbmRpZiAvLyBEcmFnQW5kRHJvcEhhbmRsZXJfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQYXN0ZWJvYXJkUHJveHlHdGsuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQYXN0ZWJvYXJkUHJveHlHdGsuY3Bw
CmluZGV4IDE1ZjkwZDMuLmUyNWE0YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9ndGsvV2ViUGFzdGVib2FyZFByb3h5R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZ3RrL1dlYlBhc3RlYm9hcmRQcm94eUd0ay5jcHAKQEAgLTQxLDcgKzQxLDcgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6d3JpdGVUb0NsaXBi
b2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBQYXN0ZWJvYXJkQ29udGVu
dCYgcGFzdGVib2FyZENvbnRlbnQpCiB7CiAgICAgVGVtcG9yYXJ5Q2hhbmdlPFdlYkZyYW1lUHJv
eHkqPiBmcmFtZVdyaXRpbmdUb0NsaXBib2FyZChtX2ZyYW1lV3JpdGluZ1RvQ2xpcGJvYXJkLCBt
X3ByaW1hcnlTZWxlY3Rpb25Pd25lcik7Ci0gICAgUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9h
cmROYW1lKS53cml0ZVRvQ2xpcGJvYXJkKHBhc3RlYm9hcmRDb250ZW50LmRhdGFPYmplY3QsIFt0
aGlzXSB7CisgICAgUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS53cml0ZVRvQ2xp
cGJvYXJkKHBhc3RlYm9hcmRDb250ZW50LmRhdGFPYmplY3QuZ2V0KCksIFt0aGlzXSB7CiAgICAg
ICAgIGlmIChtX2ZyYW1lV3JpdGluZ1RvQ2xpcGJvYXJkID09IG1fcHJpbWFyeVNlbGVjdGlvbk93
bmVyKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBzZXRQcmltYXJ5U2VsZWN0aW9uT3du
ZXIobnVsbHB0cik7CkBAIC01MCw3ICs1MCw3IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojp3
cml0ZVRvQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFBhCiAK
IHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpyZWFkRnJvbUNsaXBib2FyZChjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lLCBQYXN0ZWJvYXJkQ29udGVudCYgcGFzdGVib2FyZENvbnRlbnQpCiB7
Ci0gICAgcGFzdGVib2FyZENvbnRlbnQgPSBQYXN0ZWJvYXJkQ29udGVudChQbGF0Zm9ybVBhc3Rl
Ym9hcmQocGFzdGVib2FyZE5hbWUpLnJlYWRGcm9tQ2xpcGJvYXJkKCkuZ2V0KCkpOworICAgIHBh
c3RlYm9hcmRDb250ZW50ID0gUGFzdGVib2FyZENvbnRlbnQoUGxhdGZvcm1QYXN0ZWJvYXJkKHBh
c3RlYm9hcmROYW1lKS5yZWFkRnJvbUNsaXBib2FyZCgpKTsKIH0KIAogdm9pZCBXZWJQYXN0ZWJv
YXJkUHJveHk6OnNldFByaW1hcnlTZWxlY3Rpb25Pd25lcihXZWJGcmFtZVByb3h5KiBmcmFtZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAppbmRleCA5MjgwYTk2Li5lMDRkY2Q1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCkBAIC0zNDYsMTcgKzM0Niwx
NyBAQCBsb25nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y2hhbmdlQ291bnQoKQogI2lmIFBMQVRG
T1JNKEdUSykKIC8vIFBhc3RlYm9hcmRTdHJhdGVneQogCi12b2lkIFdlYlBsYXRmb3JtU3RyYXRl
Z2llczo6d3JpdGVUb0NsaXBib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25z
dCBSZWZQdHI8V2ViQ29yZTo6RGF0YU9iamVjdEd0az4mIGRhdGFPYmplY3QpCit2b2lkIFdlYlBs
YXRmb3JtU3RyYXRlZ2llczo6d3JpdGVUb0NsaXBib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lLCBjb25zdCBEYXRhT2JqZWN0R3RrJiBkYXRhT2JqZWN0KQogewotICAgIFBhc3RlYm9h
cmRDb250ZW50IHBhc3RlYm9hcmRDb250ZW50ID0gUGFzdGVib2FyZENvbnRlbnQoZGF0YU9iamVj
dC5nZXQoKSk7CisgICAgUGFzdGVib2FyZENvbnRlbnQgcGFzdGVib2FyZENvbnRlbnQoZGF0YU9i
amVjdCk7CiAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpXcml0ZVRvQ2xpcGJvYXJk
KHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJkQ29udGVudCksIDApOwogfQogCi1SZWZQdHI8V2Vi
Q29yZTo6RGF0YU9iamVjdEd0az4gV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpyZWFkRnJvbUNsaXBi
b2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQorUmVmPERhdGFPYmplY3RHdGs+IFdl
YlBsYXRmb3JtU3RyYXRlZ2llczo6cmVhZEZyb21DbGlwYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkTmFtZSkKIHsKICAgICBQYXN0ZWJvYXJkQ29udGVudCBwYXN0ZWJvYXJkQ29udGVudDsK
ICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpSZWFkRnJvbUNsaXBib2FyZChw
YXN0ZWJvYXJkTmFtZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlJlYWRGcm9tQ2xp
cGJvYXJkOjpSZXBseShwYXN0ZWJvYXJkQ29udGVudCksIDApOwotICAgIHJldHVybiBwYXN0ZWJv
YXJkQ29udGVudC5kYXRhT2JqZWN0OworICAgIHJldHVybiBXVEZNb3ZlKHBhc3RlYm9hcmRDb250
ZW50LmRhdGFPYmplY3QpOwogfQogCiAjZW5kaWYgLy8gUExBVEZPUk0oR1RLKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0
cmF0ZWdpZXMuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzLmgKaW5kZXggZjNlNWQ4MS4uMTY3YzY2ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0
ZWdpZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YlBsYXRmb3JtU3RyYXRlZ2llcy5oCkBAIC04Nyw4ICs4Nyw4IEBAIHByaXZhdGU6CiAgICAgbG9u
ZyBzZXRTdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIG92ZXJyaWRlOwogI2VuZGlmCiAj
aWYgUExBVEZPUk0oR1RLKQotICAgIHZvaWQgd3JpdGVUb0NsaXBib2FyZChjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lLCBjb25zdCBSZWZQdHI8V2ViQ29yZTo6RGF0YU9iamVjdEd0az4mKSBv
dmVycmlkZTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6RGF0YU9iamVjdEd0az4gcmVhZEZyb21DbGlw
Ym9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgb3ZlcnJpZGU7CisgICAgdm9pZCB3
cml0ZVRvQ2xpcGJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFdlYkNv
cmU6OkRhdGFPYmplY3RHdGsmKSBvdmVycmlkZTsKKyAgICBSZWY8V2ViQ29yZTo6RGF0YU9iamVj
dEd0az4gcmVhZEZyb21DbGlwYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgb3Zl
cnJpZGU7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkRyYWdDbGllbnRHdGsuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRHJhZ0NsaWVudEd0ay5jcHAKaW5k
ZXggNWRhYjBhMi4uMjBkMTk1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRHJhZ0NsaWVudEd0ay5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRHJhZ0NsaWVudEd0ay5jcHAK
QEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogCiAjaW5jbHVkZSAi
QXJndW1lbnRDb2RlcnNHdGsuaCIKKyNpbmNsdWRlICJQYXN0ZWJvYXJkQ29udGVudC5oIgogI2lu
Y2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRl
ICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgpAQCAtNDMsMTcgKzQ0LDE3IEBAIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotc3RhdGljIFBhc3NSZWZQdHI8
U2hhcmVhYmxlQml0bWFwPiBjb252ZXJ0Q2Fpcm9TdXJmYWNlVG9TaGFyZWFibGVCaXRtYXAoY2Fp
cm9fc3VyZmFjZV90KiBzdXJmYWNlKQorc3RhdGljIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNv
bnZlcnRDYWlyb1N1cmZhY2VUb1NoYXJlYWJsZUJpdG1hcChjYWlyb19zdXJmYWNlX3QqIHN1cmZh
Y2UpCiB7CiAgICAgaWYgKCFzdXJmYWNlKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICBJbnRTaXplIGltYWdlU2l6ZShjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF93aWR0aChzdXJmYWNlKSwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZh
Y2UpKTsKICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRt
YXA6OmNyZWF0ZVNoYXJlYWJsZShpbWFnZVNpemUsIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNB
bHBoYSk7CiAgICAgYXV0byBncmFwaGljc0NvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNz
Q29udGV4dCgpOwogCiAgICAgZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJh
d1N1cmZhY2VUb0NvbnRleHQoc3VyZmFjZSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVNpemUp
LCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlU2l6ZSksICpncmFwaGljc0NvbnRleHQpOwotICAg
IHJldHVybiBiaXRtYXAucmVsZWFzZSgpOworICAgIHJldHVybiBiaXRtYXA7CiB9CiAKIHZvaWQg
V2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiBkcmFnSW1hZ2UsIGNvbnN0IElu
dFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBE
YXRhVHJhbnNmZXImIGRhdGFUcmFuc2ZlciwgRnJhbWUmLCBib29sKQpAQCAtNjUsOSArNjYsMTAg
QEAgdm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGRyYWdJbWFnZSwg
Y29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2kKICAgICBpZiAoYml0bWFwICYmICFiaXRtYXAtPmNy
ZWF0ZUhhbmRsZShoYW5kbGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBhdXRvJiBk
YXRhT2JqZWN0ID0gZGF0YVRyYW5zZmVyLnBhc3RlYm9hcmQoKS5kYXRhT2JqZWN0KCk7Ci0gICAg
RHJhZ0RhdGEgZHJhZ0RhdGEoY29uc3RfY2FzdDxEYXRhT2JqZWN0R3RrKj4oJmRhdGFPYmplY3Qp
LCBjbGllbnRQb3NpdGlvbiwgZ2xvYmFsUG9zaXRpb24sIGRhdGFUcmFuc2Zlci5zb3VyY2VPcGVy
YXRpb24oKSk7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlN0YXJ0
RHJhZyhkcmFnRGF0YSwgaGFuZGxlKSk7CisgICAgbV9wYWdlLT53aWxsU3RhcnREcmFnKCk7CisK
KyAgICBQYXN0ZWJvYXJkQ29udGVudCBzZWxlY3Rpb24oZGF0YVRyYW5zZmVyLnBhc3RlYm9hcmQo
KS5kYXRhT2JqZWN0KCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpTdGFydERyYWcoc2VsZWN0aW9uLCBkYXRhVHJhbnNmZXIuc291cmNlT3BlcmF0aW9uKCksIGhh
bmRsZSkpOwogfQogCiB9OyAvLyBuYW1lc3BhY2UgV2ViS2l0LgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IGVjYjk5NmUuLmIwYjIyZDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTIx
Nyw5ICsyMTcsMTAgQEAKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR1RLKQotI2luY2x1ZGUgPGd0
ay9ndGsuaD4KLSNpbmNsdWRlICJEYXRhT2JqZWN0R3RrLmgiCisjaW5jbHVkZSAiUGFzdGVib2Fy
ZENvbnRlbnQuaCIKICNpbmNsdWRlICJXZWJQcmludE9wZXJhdGlvbkd0ay5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvRGF0YU9iamVjdEd0ay5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KICNlbmRpZgog
CiAjaWYgUExBVEZPUk0oSU9TKQpAQCAtMzM5NiwxNSArMzM5NywxNCBAQCBib29sIFdlYlBhZ2U6
OmhhbmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2dCkKICNpZiBFTkFC
TEUoRFJBR19TVVBQT1JUKQogCiAjaWYgUExBVEZPUk0oR1RLKQotdm9pZCBXZWJQYWdlOjpwZXJm
b3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgYWN0aW9uLCBXZWJDb3JlOjpEcmFnRGF0
YSBkcmFnRGF0YSkKK3ZvaWQgV2ViUGFnZTo6cGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKHVp
bnQ2NF90IGFjdGlvbiwgY29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBJbnRQ
b2ludCYgZ2xvYmFsUG9zaXRpb24sIHVpbnQ2NF90IGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFz
aywgUGFzdGVib2FyZENvbnRlbnQmJiBzZWxlY3Rpb24sIHVpbnQzMl90IGZsYWdzKQogewogICAg
IGlmICghbV9wYWdlKSB7CiAgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlk
UGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKERyYWdPcGVyYXRpb25Ob25lLCBmYWxzZSwgMCkp
OwotICAgICAgICBEYXRhT2JqZWN0R3RrKiBkYXRhID0gY29uc3RfY2FzdDxEYXRhT2JqZWN0R3Rr
Kj4oZHJhZ0RhdGEucGxhdGZvcm1EYXRhKCkpOwotICAgICAgICBkYXRhLT5kZXJlZigpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCisgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoc2VsZWN0aW9uLmRh
dGFPYmplY3QucHRyKCksIGNsaWVudFBvc2l0aW9uLCBnbG9iYWxQb3NpdGlvbiwgc3RhdGljX2Nh
c3Q8RHJhZ09wZXJhdGlvbj4oZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKSwgc3RhdGljX2Nh
c3Q8RHJhZ0FwcGxpY2F0aW9uRmxhZ3M+KGZsYWdzKSk7CiAgICAgc3dpdGNoIChhY3Rpb24pIHsK
ICAgICBjYXNlIERyYWdDb250cm9sbGVyQWN0aW9uRW50ZXJlZDogewogICAgICAgICBEcmFnT3Bl
cmF0aW9uIHJlc29sdmVkRHJhZ09wZXJhdGlvbiA9IG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS5k
cmFnRW50ZXJlZChkcmFnRGF0YSk7CkBAIC0zNDI4LDExICszNDI4LDcgQEAgdm9pZCBXZWJQYWdl
OjpwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgYWN0aW9uLCBXZWJDb3JlOjpE
cmFnRGF0YSBkcmEKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICB9Ci0gICAgLy8gRHJhZ0RhdGEgZG9lcyBub3QgZGVsZXRlIGl0cyBwbGF0Zm9ybURhdGEg
c28gd2UgbmVlZCB0byBkbyB0aGF0IGhlcmUuCi0gICAgRGF0YU9iamVjdEd0ayogZGF0YSA9IGNv
bnN0X2Nhc3Q8RGF0YU9iamVjdEd0ayo+KGRyYWdEYXRhLnBsYXRmb3JtRGF0YSgpKTsKLSAgICBk
YXRhLT5kZXJlZigpOwogfQotCiAjZWxzZQogdm9pZCBXZWJQYWdlOjpwZXJmb3JtRHJhZ0NvbnRy
b2xsZXJBY3Rpb24odWludDY0X3QgYWN0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBjbGllbnRQb3Np
dGlvbiwgV2ViQ29yZTo6SW50UG9pbnQgZ2xvYmFsUG9zaXRpb24sIHVpbnQ2NF90IGRyYWdnaW5n
U291cmNlT3BlcmF0aW9uTWFzaywgY29uc3QgU3RyaW5nJiBkcmFnU3RvcmFnZU5hbWUsIHVpbnQz
Ml90IGZsYWdzLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIHNhbmRib3hFeHRlbnNp
b25IYW5kbGUsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5JiBzYW5kYm94RXh0
ZW5zaW9uc0hhbmRsZUFycmF5KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmgKaW5kZXggYTQ2NTFhYy4uYWZkMzM2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC0yMDQsNiArMjA0LDEwIEBAIHN0cnVjdCBX
ZWJQcmVmZXJlbmNlc1N0b3JlOwogY2xhc3MgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb247CiAj
ZW5kaWYKIAorI2lmIFBMQVRGT1JNKEdUSykKK3N0cnVjdCBQYXN0ZWJvYXJkQ29udGVudDsKKyNl
bmRpZgorCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKIGNsYXNzIFdlYlRvdWNoRXZlbnQ7CiAj
ZW5kaWYKQEAgLTcyOSw3ICs3MzMsNyBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQ
T1JUKQogI2lmIFBMQVRGT1JNKEdUSykKLSAgICB2b2lkIHBlcmZvcm1EcmFnQ29udHJvbGxlckFj
dGlvbih1aW50NjRfdCBhY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhKTsKKyAgICB2b2lkIHBlcmZv
cm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50NjRfdCBhY3Rpb24sIGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGdsb2JhbFBv
c2l0aW9uLCB1aW50NjRfdCBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2ssIFBhc3RlYm9hcmRD
b250ZW50JiYsIHVpbnQzMl90IGZsYWdzKTsKICNlbHNlCiAgICAgdm9pZCBwZXJmb3JtRHJhZ0Nv
bnRyb2xsZXJBY3Rpb24odWludDY0X3QgYWN0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBjbGllbnRQ
b3NpdGlvbiwgV2ViQ29yZTo6SW50UG9pbnQgZ2xvYmFsUG9zaXRpb24sIHVpbnQ2NF90IGRyYWdn
aW5nU291cmNlT3BlcmF0aW9uTWFzaywgY29uc3QgV1RGOjpTdHJpbmcmIGRyYWdTdG9yYWdlTmFt
ZSwgdWludDMyX3QgZmxhZ3MsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGNvbnN0
IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5Jik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5kZXgg
MGQyMjg4Ny4uNTExNjdhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTIzNiw3ICsyMzYsNyBAQCBtZXNzYWdl
cyAtPiBXZWJQYWdlIExlZ2FjeVJlY2VpdmVyIHsKIAogICAgICMgRHJhZyBhbmQgZHJvcC4KICNp
ZiBQTEFURk9STShHVEspICYmIEVOQUJMRShEUkFHX1NVUFBPUlQpCi0gICAgUGVyZm9ybURyYWdD
b250cm9sbGVyQWN0aW9uKHVpbnQ2NF90IGFjdGlvbiwgV2ViQ29yZTo6RHJhZ0RhdGEgZHJhZ0Rh
dGEpCisgICAgUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKHVpbnQ2NF90IGFjdGlvbiwgV2Vi
Q29yZTo6SW50UG9pbnQgY2xpZW50UG9zaXRpb24sIFdlYkNvcmU6OkludFBvaW50IGdsb2JhbFBv
c2l0aW9uLCB1aW50NjRfdCBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2ssIHN0cnVjdCBXZWJL
aXQ6OlBhc3RlYm9hcmRDb250ZW50IHNlbGVjdGlvbiwgdWludDMyX3QgZmxhZ3MpCiAjZW5kaWYK
ICNpZiAhUExBVEZPUk0oR1RLKSAmJiBFTkFCTEUoRFJBR19TVVBQT1JUKQogICAgIFBlcmZvcm1E
cmFnQ29udHJvbGxlckFjdGlvbih1aW50NjRfdCBhY3Rpb24sIFdlYkNvcmU6OkludFBvaW50IGNs
aWVudFBvc2l0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBnbG9iYWxQb3NpdGlvbiwgdWludDY0X3Qg
ZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrLCBTdHJpbmcgZHJhZ1N0b3JhZ2VOYW1lLCB1aW50
MzJfdCBmbGFncywgV2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVu
c2lvbkhhbmRsZSwgV2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBzYW5kYm94
RXh0ZW5zaW9uc0ZvclVwbG9hZCkK
</data>
<flag name="review"
          id="312573"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>