<?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>214221</bug_id>
          
          <creation_ts>2020-07-11 09:50:03 -0700</creation_ts>
          <short_desc>Simplify and improve Gradient, some other small color-related removals</short_desc>
          <delta_ts>2020-07-13 09:56:51 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=214259</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>joepeck</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>pdr</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>sam</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1670750</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-11 09:50:03 -0700</bug_when>
    <thetext>Simplify and improve Gradient, some other small color-related removals</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670759</commentid>
    <comment_count>1</comment_count>
      <attachid>404060</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-11 11:41:52 -0700</bug_when>
    <thetext>Created attachment 404060
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670781</commentid>
    <comment_count>2</comment_count>
      <attachid>404069</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-11 13:59:42 -0700</bug_when>
    <thetext>Created attachment 404069
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670783</commentid>
    <comment_count>3</comment_count>
      <attachid>404071</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-11 14:12:49 -0700</bug_when>
    <thetext>Created attachment 404071
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670794</commentid>
    <comment_count>4</comment_count>
      <attachid>404073</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-11 15:41:48 -0700</bug_when>
    <thetext>Created attachment 404073
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670796</commentid>
    <comment_count>5</comment_count>
      <attachid>404073</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-11 16:12:35 -0700</bug_when>
    <thetext>Comment on attachment 404073
Patch

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

&gt; Source/WebCore/platform/graphics/Gradient.h:107
&gt;      WEBCORE_EXPORT static Ref&lt;Gradient&gt; create(LinearData&amp;&amp;);
&gt;      WEBCORE_EXPORT static Ref&lt;Gradient&gt; create(RadialData&amp;&amp;);
&gt; -    WEBCORE_EXPORT static Ref&lt;Gradient&gt; create(ConicData&amp;&amp;);
&gt; +    WEBCORE_EXPORT static Ref&lt;Gradient&gt; create(Data&amp;&amp;);

The inconsistency here bugs me. Why do we still need the create functions taking LinearData or RadialData?

&gt; Source/WebCore/platform/graphics/Gradient.h:166
&gt;  
&gt;      mutable unsigned m_cachedHash { 0 };

Might be able save a byte or two if we re-order things so m_stopsSorted, m_spreadMethod and m_cachedHash pack next to each other.

&gt; Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp:238
&gt;  void RenderSVGResourceGradient::addStops(GradientData* gradientData, const Vector&lt;Gradient::ColorStop&gt;&amp; stops, const RenderStyle&amp; style) const
&gt;  {
&gt; +    ASSERT(gradientData);
&gt;      ASSERT(gradientData-&gt;gradient);

Not sure how far you want to go, but it looks like all the callers can prove GradientData to be non-null so this could be switched to pass by reference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670868</commentid>
    <comment_count>6</comment_count>
      <attachid>404073</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-12 09:05:45 -0700</bug_when>
    <thetext>Comment on attachment 404073
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/Gradient.h:107
&gt;&gt; +    WEBCORE_EXPORT static Ref&lt;Gradient&gt; create(Data&amp;&amp;);
&gt; 
&gt; The inconsistency here bugs me. Why do we still need the create functions taking LinearData or RadialData?

We don’t need them; for some reason I just didn’t think of removing them. I can, and should.

&gt;&gt; Source/WebCore/platform/graphics/Gradient.h:166
&gt;&gt;      mutable unsigned m_cachedHash { 0 };
&gt; 
&gt; Might be able save a byte or two if we re-order things so m_stopsSorted, m_spreadMethod and m_cachedHash pack next to each other.

Yes, right now they are in a sort of &quot;logical&quot; order rather than a packing order, since the hash isn’t part of the gradient’s state. I am not sure I want to make the change, but I really don’t object either.

&gt;&gt; Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp:238
&gt;&gt;      ASSERT(gradientData-&gt;gradient);
&gt; 
&gt; Not sure how far you want to go, but it looks like all the callers can prove GradientData to be non-null so this could be switched to pass by reference.

That’s what I had in mind when I wrote the assertion. Any time a function asserts a pointer argument is non-null, to me that says &quot;need to change the interface&quot;. But I was trying to stick to Gradient.h for this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670873</commentid>
    <comment_count>7</comment_count>
      <attachid>404073</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-12 09:48:20 -0700</bug_when>
    <thetext>Comment on attachment 404073
Patch

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

&gt;&gt;&gt; Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp:238
&gt;&gt;&gt;      ASSERT(gradientData-&gt;gradient);
&gt;&gt; 
&gt;&gt; Not sure how far you want to go, but it looks like all the callers can prove GradientData to be non-null so this could be switched to pass by reference.
&gt; 
&gt; That’s what I had in mind when I wrote the assertion. Any time a function asserts a pointer argument is non-null, to me that says &quot;need to change the interface&quot;. But I was trying to stick to Gradient.h for this patch.

I started down the rabbit hole, but pulled back. Things I ran into:

- GradientData struct uses WTF_MAKE_FAST_ALLOCATED but should use WTF_MAKE_STRUCT_FAST_ALLOCATED
- RenderSVGResourceGradient::addStops should take Gradient&amp; argument, not a GradientData*.
- RenderSVGResourceGradient::buildGradient should return a Ref&lt;Gradient&gt;, not take a GradientData* argument, allowing us to remove unnecessary null check from RenderSVGResourceGradient::applyResource.
- RenderSVGResourceGradient::applyResource should use ensure and a lambda construct the GradientData initialized rather than first constructing it and then initializing it.
- RenderSVGResourceGradient::m_gradientMap should probably contain GradientData rather than std::unique_ptr&lt;GradientData&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670874</commentid>
    <comment_count>8</comment_count>
      <attachid>404103</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-12 09:55:01 -0700</bug_when>
    <thetext>Created attachment 404103
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670879</commentid>
    <comment_count>9</comment_count>
      <attachid>404104</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-12 10:13:23 -0700</bug_when>
    <thetext>Created attachment 404104
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670880</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-12 10:28:07 -0700</bug_when>
    <thetext>Committed r264280: &lt;https://trac.webkit.org/changeset/264280&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670881</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-07-12 10:29:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/65436807&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404060</attachid>
            <date>2020-07-11 11:41:52 -0700</date>
            <delta_ts>2020-07-11 13:59:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214221-20200711114151.patch</filename>
            <type>text/plain</type>
            <size>75421</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0MjY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDE1ODkyZWUzZjJkMjFl
NzY2NzgxYmFiNzBlZTg0N2ExNWRiMGE3OC4uMTNiNzM2MDdiMTIwZTlkMjMxNjUzYjJkNmJlZDRi
YjUzOTJjZDJlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MCBAQAorMjAyMC0wNy0xMSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxpZnkgYW5kIGltcHJv
dmUgR3JhZGllbnQsIHNvbWUgb3RoZXIgc21hbGwgY29sb3ItcmVsYXRlZCByZW1vdmFscworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0MjIxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBjc3MvQ1NTR3Jh
ZGllbnRWYWx1ZS5jcHA6IFJlbW92ZWQgc29tZSB1bm5lZWRlZCBpbmNsdWRlcy4KKworICAgICAg
ICAqIGh0bWwvQ29sb3JJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3JJbnB1
dFR5cGU6OmN1cnJlbnRDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcklu
cHV0VHlwZTo6c2hvdWxkU2hvd1N1Z2dlc3Rpb25zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBodG1sL0NvbG9ySW5wdXRUeXBlLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAg
ICAqIGh0bWwvSFRNTERvY3VtZW50LmNwcDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlIG9mIEhh
c2hUb29scy5oLgorCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzR3JhZGllbnQ6OmNyZWF0ZSk6IE1vdmVkIHRoZXNlIGZ1
bmN0aW9ucyBvdXQgb2YgdGhlCisgICAgICAgIGhlYWRlciBzaW5jZSBpbmxpbmluZyBzaG91bGQg
YmUgdGhlIHNhbWUgb3IgYmV0dGVyIHdpdGggdGhlbSBoZXJlLgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzR3JhZGllbnQ6On5DYW52YXNHcmFkaWVudCk6IE1vdmVkIHRoaXMgb3V0IG9mIHRoZQor
ICAgICAgICBoZWFkZXIgc28gd2UgZG9uJ3QgbmVlZCB0byBpbmNsdWRlIEdyYWRpZW50LmggaW4g
dGhlIGhlYWRlci4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0dyYWRpZW50OjphZGRDb2xvclN0
b3ApOiBVcGRhdGVkIGZvciBjaGFuZ2UgdG8KKyAgICAgICAgR3JhZGllbnQ6OmFkZENvbG9yU3Rv
cCBhbmQgbW92ZSBDb2xvciByYXRoZXIgdGhhbiBjb3B5aW5nIGl0LgorCisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzR3JhZGllbnQuaDogUmVtb3ZlZCBpbmNsdWRlIG9mIEdyYWRpZW50Lmgu
CisgICAgICAgIE1vdmVkIHRoaW5ncyBvdXQgb2YgdGhlIGhlYWRlciB0byBtYWtlIHRoYXQgd29y
ay4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzOjpidWlsZEFycmF5Rm9yQ2FudmFzR3JhZGllbnQpOiBS
ZW1vdmVkCisgICAgICAgIHVzZSBvZiBHcmFkaWVudDo6dHlwZSBhbmQgaW5zdGVhZCB1bmlmeSB0
aGUgdHlwZSBzdHJpbmcgY29kZSB3aXRoCisgICAgICAgIHRoZSBjb2RlIHRoYXQgaW50ZXJwcmV0
cyB0aGUgZGF0YSBmb3IgdGhlIGRpZmZlcmVudCB0eXBlcy4KKworICAgICAgICAqIHBhZ2UvRnJh
bWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cmVjYWxjdWxhdGVTY3Jv
bGxiYXJPdmVybGF5U3R5bGUpOiBSZWZhY3RvcmVkCisgICAgICAgIHRvIGVsaW1pbmF0ZSB0aGUg
bXVsdGlwbGUgcmVkdW5kYW50IGNvZGUgcGF0aHMsIG90aGVyd2lzaW5nIGxlYXZpbmcKKyAgICAg
ICAgdGhlIGxvZ2ljIHVuY2hhbmdlZC4KKworICAgICAgICAqIHBsYXRmb3JtL0NvbG9yQ2hvb3Nl
ckNsaWVudC5oOiBSZW1vdmUgdW5uZWVkZWQgaW5jbHVkZXMgYW5kIHVudXNlZAorICAgICAgICBj
dXJyZW50Q29sb3IgYW5kIHNob3VsZFNob3dTdWdnZXN0aW9ucyBmdW5jdGlvbnMuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFkaWVudDo6Y3JlYXRlKTogUmVtb3ZlZCB1bm5lZWRlZCBjcmVhdGUgZnVuY3Rpb24gdGhhdAor
ICAgICAgICB0YWtlcyBhIENvbmljRGF0YSwgcmVwbGFjaW5nIGl0IHdpdGggb25lIHRoYXQgdGFr
ZXMgdGhlIHZhcmlhbnQgRGF0YS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpHcmFkaWVu
dCk6IFJlbW92ZWQgdGhlIHBsYXRmb3JtSW5pdCBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYWRpZW50Ojp+R3JhZGllbnQpOiBSZW1vdmVkIHRoZSBwbGF0b2Zvcm1EZXN0cm95IGZ1bmN0
aW9uLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnR5cGUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmFkZENvbG9yU3RvcCk6IFRha2UgYW4gcnZhbHVl
IHJlZmVyZW5jZSB0byBjdXQgZG93bgorICAgICAgICBhIGxpdHRsZSBiaXQgb24gcmVmZXJlbmNl
IGNvdW50IGNodXJuLiBSZXBsYWNlZCB0aGUgcGxhdGZvcm1EZXN0cm95CisgICAgICAgIGZ1bmN0
aW9uIHdpdGggYSBuZXcgc3RvcHNDaGFuZ2VkIGZ1bmN0aW9uLiBSZW1vdmVkIGFuIHVubmVlZGVk
IG92ZXJsb2FkCisgICAgICAgIHRoYXQgdGFrZXMgdGhlIHR3byBwYXJ0cyBvZiBhIENvbG9yU3Rv
cCBzZXBhcmF0ZWx5LgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNldFNvcnRlZENvbG9y
U3RvcHMpOiBVc2Ugc3RvcHNDaGFuZ2VkLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNv
cnRTdG9wcyBjb25zdCk6IFNpbXBsaWZ5IGEgYml0LCB1c2luZyBhIGxhbWJkYS4KKyAgICAgICAg
QWxzbyBnYXZlIHRoaXMgYSBzaG9ydGVyIG5hbWU7IGl0IHN0aWxsIG9wdGltaXplcyBieSBub3Qg
c29ydGluZyBpZgorICAgICAgICB0aGUgdmVjdG9yIGlzIGFscmVhZHkgc29ydGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhZGllbnQ6Omhhc0FscGhhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYWRpZW50OjpzZXRTcHJlYWRNZXRob2QpOiBSZW1vdmVkIHNvbWUgc2xpZ2h0
bHkgb3ZlcnplYWxvdXMKKyAgICAgICAgY29kZSBjaGVja2luZyB0aGlzIGlzbid0IHVzZWQgYWZ0
ZXIgY3JlYXRpbmcgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGdyYWRpZW50LgorICAgICAgICBEZWNp
ZGVkIG5vdCB0byBib3RoZXIgd2l0aCB0aGlzIGZvciBub3cuCisgICAgICAgIChXZWJDb3JlOjpH
cmFkaWVudDo6c2V0R3JhZGllbnRTcGFjZVRyYW5zZm9ybSk6IFR3ZWFrZWQgZm9ybWF0dGluZy4K
KyAgICAgICAgKFdlYkNvcmU6OmFkZCk6IEFkZGVkIG92ZXJsb2FkcyB0byBhZGQoSGFzaGVyJikg
c28gd2UgY2FuIHVzZSBjb21wdXRlSGFzaC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50Ojpo
YXNoIGNvbnN0KTogVXNlIGNvbXB1dGVIYXNoIGluc3RlYWQgb2YgaGFzaE1lbW9yeS4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50Lmg6IFVzZSBSZXRhaW5QdHIsIENPTVB0
ciwgYW5kIFJlZlB0ciBpbnN0ZWFkCisgICAgICAgIG9mIG1hbnVhbGx5IG1hbmFnaW5nIHRoZSBs
aWZldGltZXMgb2YgdGhlIHBsYXRmb3JtLXNwZWNpZmljIHVuZGVybHlpbmcKKyAgICAgICAgZ3Jh
ZGllbnQgb2JqZWN0cy4gQWxzbyByZW1vdmVkIHRoZSB1bmhlbHBmdWwgUGxhdGZvcm1HcmFkaWVu
dCB0eXBlLiBUaGlzCisgICAgICAgIHBhdHRlcm4sIGFsbCB0b28gY29tbW9uIGluIG91ciBwbGF0
Zm9ybSBsaWJyYXJ5LCBwcm92aWRlcyBubyB1c2VmdWwKKyAgICAgICAgYWJzdHJhY3Rpb24gaGVy
ZS4gUmVtb3ZlZCB1bm5lZWRlZCBjb25zdHJ1Y3RvcnMgZnJvbSBDb2xvclN0b3AuCisgICAgICAg
IFVwZGF0ZWQgZm9yIGNoYW5nZXMgYWJvdmUuIEFkZGVkIHBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0
aW9ucyBjcmVhdGVCcnVzaCwKKyAgICAgICAgY3JlYXRlUGF0dGVybiwgYW5kIGNyZWF0ZUNHR3Jh
ZGllbnQuIFNpbXBsaWZ5IGVuY29kaW5nIGFuZCBkZWNvZGluZyBieQorICAgICAgICB0YWtpbmcg
YWR2YW50YWdlIG9mIHRoZSBzdXBwb3J0IGZvciBlbmNvZGluZy9kZWNvZGluZyB2YXJpYW50cy4K
KyAgICAgICAgUmVtb3ZlIHRoZSBlbnVtIEdyYWRpZW50OjpUeXBlIGVudGlyZWx5LiBSZW1vdmVk
IHRoZSBpbnZhbGlkYXRlSGFzaAorICAgICAgICBmdW5jdGlvbiBiZWNhdXNlIGl0J3Mgb25seSB1
c2VkIGluIGEgZmV3IHNldHRlcnMgYW5kIHNldHRpbmcgdGhlIGhhc2gKKyAgICAgICAgdG8gMCBp
cyBhIGZpbmUgd2F5IHRvIHdyaXRlIGl0IHRoZXJlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSk6IE1vdmVkIGhlcmUgZnJvbQorICAgICAg
ICB0aGUgaGVhZGVyIHNvIHdlIGRvbid0IG5lZWQgdG8gaW5jbHVkZSBHcmFkaWVudC5oIGluIHRo
ZSBoZWFkZXIuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6fkdyYXBo
aWNzQ29udGV4dFN0YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6b3BlcmF0b3I9KTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuaDogUmVtb3ZlZCBpbmNsdWRlIG9mIEdyYWRpZW50LmguCisgICAg
ICAgIE1vdmVkIHRoaW5ncyBvdXQgb2YgdGhlIGhlYWRlciB0byBtYWtlIHRoYXQgd29yay4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWlybzo6RmlsbFNvdXJjZTo6RmlsbFNvdXJjZSk6IFVzZSBjcmVh
dGVQYXR0ZXJuIGluc3RlYWQgb2YKKyAgICAgICAgY3JlYXRlUGxhdGZvcm1HcmFkaWVudC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNhaXJvOjpTdHJva2VTb3VyY2U6OlN0cm9rZVNvdXJjZSk6IERpdHRv
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c3RvcHNDaGFuZ2VkKTogUmVuYW1lZCBmcm9t
IHBsYXRmb3JtRGVzdHJveS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpjcmVhdGVQYXR0
ZXJuKTogUmVuYW1lZCBmcm9tIGNyZWF0ZVBsYXRmb3JtR3JhZGllbnQuCisgICAgICAgIENoYW5n
ZWQgdG8gcmV0dXJuIGEgUmVmUHRyIGluc3RlYWQgb2YgYSByYXcgcG9pbnRlciB0aGUgY2FsbGVy
IG5lZWRzIHRvCisgICAgICAgIGFkb3B0IGF0IGVhY2ggY2FsbCBzaXRlLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhZGllbnQ6OmZpbGwpOiBVc2UgY3JlYXRlUGF0dGVybi4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUmVjdCk6IERpdHRvLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFkaWVudDo6c3RvcHNDaGFuZ2VkKTogUmVuYW1lZCBmcm9tIHBsYXRmb3Jt
RGVzdHJveSwgYW5kCisgICAgICAgIHNpbXBsaWZpZWQgaW1wbGVtZW50YXRpb24gbm93IHRoYXQg
d2UgdXNlIFJldGFpblB0ci4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpjcmVhdGVDR0dy
YWRpZW50KTogUmVuYW1lZCBmcm9tIHBsYXRmb3JtR3JhZGllbnQsCisgICAgICAgIGdvdCByaWQg
b2YgdGhlIHJldHVybiB2YWx1ZSwgYW5kIG1hZGUgaXQgY2FsbGVyIHJlc3BvbnNpYmlsaXR5IHRv
IG9ubHkKKyAgICAgICAgY2FsbCB0aGlzIHdoZW4gYSBncmFkZWl0biBuZWVkcyB0byBiZSBhbGxv
Y2F0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGFpbnQpOiBVcGRhdGVkIHRvIHVz
ZSB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RJdGVtcy5oOgorICAgICAgICBBZGRlZCBpbmNsdWRlIG9mIEdyYWRpZW50Lmgg
c2luY2UgdGhlIGZ1bmN0aW9uIHRlbXBsYXRlcyBpbiB0aGlzIGZpbGUKKyAgICAgICAgZW5jb2Rl
IGFuZCBkZWNvZGUgZ3JhZGllbnRzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmlj
b3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHA6CisgICAgICAgIChO
aWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdCk6IFVzZSBjcmVhdGVQYXR0
ZXJuLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9u
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6RmlsbFNvdXJjZTo6RmlsbFNvdXJj
ZSk6IFVzZSBjcmVhdGVCcnVzaAorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OlN0cm9rZVNv
dXJjZTo6U3Ryb2tlU291cmNlKTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6
c3RvcHNDaGFuZ2VkKTogUmVuYW1lZCBmcm9tIHBsYXRmb3JtRGVzdHJveSBhbmQKKyAgICAgICAg
c2ltcGxpZmllZCBpbXBsZW1lbnRhdGlvbiBub3cgdGhhdCB3ZSB1c2UgQ09NUHRyLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhZGllbnQ6OnBsYXRmb3JtR3JhZGllbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhZGllbnQ6OmNyZWF0ZVBsYXRmb3JtR3JhZGllbnRJZk5lY2Vzc2FyeSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6Y3JlYXRlQnJ1c2gpOiBSZW5h
bWVkIGZyb20gZ2VuZXJhdGVHcmFkaWVudCBhbmQKKyAgICAgICAgYWRkZWQgYSByZXR1cm4gdmFs
dWUuIFNpbXBsaWZpZWQgbm93IHRoYXQgd2UgdXNlIENPTVB0ciwgb3B0aW1pemVkCisgICAgICAg
IHRoZSBjb2RlIGEgYml0LCBhbmQgYWRkZWQgc29tZSBGSVhNRSBhYm91dCBtaXN0YWtlcyBJIG5v
dGljZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6ZmlsbCk6IFVzZSBjcmVhdGVCcnVz
aCBhbmQgbV9icnVzaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3ND
b250ZXh0SW1wbERpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRDo6ZmlsbFJlY3QpOiBVc2UgY3JlYXRlQnJ1c2guCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW06IEFkZGVkIGluY2x1ZGUgb2YgR3JhZGll
bnQuaC4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpwYWludFByb2dyZXNzQmFyKTogVXBkYXRlZCBmb3Ig
Y2hhbmdlcyB0bworICAgICAgICBhZGRDb2xvclN0b3AuIEFsc28gcmVtb3ZlIGEgbG90IG9mIHVu
bmVjZXNzYXJ5IGNvbnZlcnNpb24gZnJvbSBmbG9hdAorICAgICAgICB0byBkb3VibGUgYW5kIGJh
Y2sgdG8gZmxvYXQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
R3JhZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVu
dDo6YWRkU3RvcHMpOiBVcGRhdGUgdG8gbWFrZQorICAgICAgICBhbmQgbW92ZSBhIG5ldyBjb2xv
ciBzdG9wIGluc3RlYWQgb2YgY29weWluZyBpdCwgbW9kaWZ5aW5nIGl0IGluCisgICAgICAgIHBs
YWNlLCBhbmQgdGhlbiBjb3B5aW5nIGl0IGFnYWluLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHA6IFJlbW92ZWQgaW5jbHVkZSBvZgorICAgICAg
ICBHcmFkaWVudC5oLgorCisgICAgICAgICogc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdHcmFkaWVudEVsZW1lbnQ6OmJ1aWxkU3RvcHMpOiBVc2Ugc3Rk
OjpjbGFtcCB0byBjb252ZXJ0CisgICAgICAgIHRoZSBvZmZzZXRzIGludG8gbW9ub3RvbmljYWxs
eSBpbmNyZWFzaW5nIG9uZXMgaW4gYSBtb3JlIGRpcmVjdCB3YXksCisgICAgICAgIHVzaW5nIHZh
cmlhYmxlIG5hbWVzIGluc3RlYWQgb2YgY29tbWVudHMgdG8gY2xhcmlmeSB3aGF0IHdlIGFyZSBk
b2luZy4KKwogMjAyMC0wNy0xMSAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIFtMRkNdW0JGQ11bTWluLU1heCB3aWR0aF0gQWRkIHN1cHBvcnQgZm9yIGZsb2F0IGF2
b2lkZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKaW5kZXggMTA0MmZh
M2IzMTljNTk4ZDJiOGI4MDgyNTBkMTQ1MzE5ZTQ1N2QyNy4uOGJhOTliZDBlMTU4YjQ0MzliMmQx
NmE5NjFmZWNkYzE4M2QwNDNhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dy
YWRpZW50VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVl
LmNwcApAQCAtMzAsOCArMzAsNiBAQAogI2luY2x1ZGUgIkNTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ29sb3JCbGVu
ZGluZy5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAj
aW5jbHVkZSAiR3JhZGllbnRJbWFnZS5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgog
I2luY2x1ZGUgIlBhaXIuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJ
bnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9Db2xvcklucHV0VHlwZS5jcHAKaW5k
ZXggOTkyNjM0NGEwOWQ2ZDhhMjA1Mjk4MTAzNTgwNGM2MTUwYjVjOGQ2Yi4uOWFiMmZlZWQ5NjM2
NzI3MmFkOWEwNzE4ZjBjY2Q5NWQ4NWM5YTEwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9Db2xvcklucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9Db2xvcklu
cHV0VHlwZS5jcHAKQEAgLTI3MCwyMSArMjcwLDYgQEAgSW50UmVjdCBDb2xvcklucHV0VHlwZTo6
ZWxlbWVudFJlY3RSZWxhdGl2ZVRvUm9vdFZpZXcoKSBjb25zdAogICAgIHJldHVybiBlbGVtZW50
KCktPmRvY3VtZW50KCkudmlldygpLT5jb250ZW50c1RvUm9vdFZpZXcoZWxlbWVudCgpLT5yZW5k
ZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKTsKIH0KIAotQ29sb3IgQ29sb3JJbnB1
dFR5cGU6OmN1cnJlbnRDb2xvcigpCi17Ci0gICAgcmV0dXJuIHZhbHVlQXNDb2xvcigpOwotfQot
Ci1ib29sIENvbG9ySW5wdXRUeXBlOjpzaG91bGRTaG93U3VnZ2VzdGlvbnMoKSBjb25zdAotewot
I2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQotICAgIEFTU0VSVChlbGVtZW50KCkpOwotICAg
IHJldHVybiBlbGVtZW50KCktPmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obGlz
dEF0dHIpOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQogVmVjdG9yPENv
bG9yPiBDb2xvcklucHV0VHlwZTo6c3VnZ2VzdGVkQ29sb3JzKCkgY29uc3QKIHsKICAgICBWZWN0
b3I8Q29sb3I+IHN1Z2dlc3Rpb25zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9D
b2xvcklucHV0VHlwZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9Db2xvcklucHV0VHlwZS5oCmlu
ZGV4IDlhM2M3YjcxNzM1MTA1OWU2NGZlNDE1ZTkxODBjNDUyZTNhOWIzYzQuLmY3NGQ3NmYxYjlm
ZjUwODQyNmIyMTQ0YTFmYTVhOGJhMjQwY2U3MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvQ29sb3JJbnB1dFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5w
dXRUeXBlLmgKQEAgLTQ4LDggKzQ4LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZENob29zZUNv
bG9yKGNvbnN0IENvbG9yJikgZmluYWw7CiAgICAgdm9pZCBkaWRFbmRDaG9vc2VyKCkgZmluYWw7
CiAgICAgSW50UmVjdCBlbGVtZW50UmVjdFJlbGF0aXZlVG9Sb290VmlldygpIGNvbnN0IGZpbmFs
OwotICAgIENvbG9yIGN1cnJlbnRDb2xvcigpIGZpbmFsOwotICAgIGJvb2wgc2hvdWxkU2hvd1N1
Z2dlc3Rpb25zKCkgY29uc3QgZmluYWw7CiAgICAgVmVjdG9yPENvbG9yPiBzdWdnZXN0ZWRDb2xv
cnMoKSBjb25zdCBmaW5hbDsKICAgICBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdCBmaW5h
bDsKICAgICBib29sIGlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCopIGNvbnN0IGZp
bmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwCmluZGV4IDdmMjVjMzY4MmEzNjFl
NDdlNWY5MGU0OGI0MmVkMmIyODkyYzc5ZmMuLmVkYWNmMjRkNGEyYTRjY2Q1NmU0MjQwZTA1ODEw
NDlmODJmMzk2NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKQEAgLTc0LDcg
Kzc0LDYgQEAKICNpbmNsdWRlICJIVE1MSHRtbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSUZy
YW1lRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkhhc2hUb29s
cy5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTdHlsZVJlc29s
dmVyLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmNwcAppbmRleCBjYTc4N2MzNmM4NTFkOGYw
ZWZjZGEyN2M0ZjY1YTQ2NmFkOTE1ODMyLi43NWU0YWUxMjlmNzJjY2E2ZjRkNWJmNjY3YzUyNDc5
YjcyNzBiODhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNH
cmFkaWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGll
bnQuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJDYW52YXNCYXNlLmgiCiAjaW5j
bHVkZSAiQ2FudmFzU3R5bGUuaCIKKyNpbmNsdWRlICJHcmFkaWVudC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTQ0LDYgKzQ1LDE4IEBAIENhbnZhc0dyYWRpZW50OjpDYW52YXNHcmFk
aWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgZmxvYXQgcjAsIGNvbnN0IEZsb2F0UG9pbnQmCiB7
CiB9CiAKK1JlZjxDYW52YXNHcmFkaWVudD4gQ2FudmFzR3JhZGllbnQ6OmNyZWF0ZShjb25zdCBG
bG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIENhbnZhc0Jhc2UmIGNhbnZhc0Jh
c2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2FudmFzR3JhZGllbnQocDAsIHAxLCBj
YW52YXNCYXNlKSk7Cit9CisKK1JlZjxDYW52YXNHcmFkaWVudD4gQ2FudmFzR3JhZGllbnQ6OmNy
ZWF0ZShjb25zdCBGbG9hdFBvaW50JiBwMCwgZmxvYXQgcjAsIGNvbnN0IEZsb2F0UG9pbnQmIHAx
LCBmbG9hdCByMSwgQ2FudmFzQmFzZSYgY2FudmFzQmFzZSkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBDYW52YXNHcmFkaWVudChwMCwgcjAsIHAxLCByMSwgY2FudmFzQmFzZSkpOworfQor
CitDYW52YXNHcmFkaWVudDo6fkNhbnZhc0dyYWRpZW50KCkgPSBkZWZhdWx0OworCiBFeGNlcHRp
b25Pcjx2b2lkPiBDYW52YXNHcmFkaWVudDo6YWRkQ29sb3JTdG9wKGZsb2F0IHZhbHVlLCBjb25z
dCBTdHJpbmcmIGNvbG9yU3RyaW5nKQogewogICAgIGlmICghKHZhbHVlID49IDAgJiYgdmFsdWUg
PD0gMSkpCkBAIC01NCw3ICs2Nyw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IENhbnZhc0dyYWRpZW50
OjphZGRDb2xvclN0b3AoZmxvYXQgdmFsdWUsIGNvbnN0IFN0cmluZyYgY29sb3JTCiAgICAgaWYg
KCFjb2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJv
ciB9OwogCi0gICAgbV9ncmFkaWVudC0+YWRkQ29sb3JTdG9wKHZhbHVlLCBjb2xvcik7CisgICAg
bV9ncmFkaWVudC0+YWRkQ29sb3JTdG9wKHsgdmFsdWUsIFdURk1vdmUoY29sb3IpIH0pOwogICAg
IHJldHVybiB7IH07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc0dyYWRpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNHcmFk
aWVudC5oCmluZGV4IGMzNWZiY2UxOTQ1YTFlNjE2MWE1ZjE2ZDYxM2NjNWU1M2I4ZjdmYTIuLmEy
MTVmMTQxZWNiZWVlMzE3ODk3ZmVjNGQ0ZDYyYWIxZGYzNDU5NTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuaApAQCAtMjcsMjIgKzI3LDE4IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCi0jaW5jbHVkZSAiR3JhZGllbnQu
aCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgQ2FudmFzQmFzZTsKK2NsYXNzIEdyYWRpZW50OwogCiBjbGFzcyBDYW52YXNHcmFkaWVudCA6
IHB1YmxpYyBSZWZDb3VudGVkPENhbnZhc0dyYWRpZW50PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxDYW52YXNHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBG
bG9hdFBvaW50JiBwMSwgQ2FudmFzQmFzZSYgY2FudmFzQmFzZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IENhbnZhc0dyYWRpZW50KHAwLCBwMSwgY2FudmFzQmFzZSkpOwot
ICAgIH0KLSAgICBzdGF0aWMgUmVmPENhbnZhc0dyYWRpZW50PiBjcmVhdGUoY29uc3QgRmxvYXRQ
b2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgZmxvYXQgcjEsIENhbnZh
c0Jhc2UmIGNhbnZhc0Jhc2UpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBD
YW52YXNHcmFkaWVudChwMCwgcjAsIHAxLCByMSwgY2FudmFzQmFzZSkpOwotICAgIH0KKyAgICBz
dGF0aWMgUmVmPENhbnZhc0dyYWRpZW50PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcDAsIGNv
bnN0IEZsb2F0UG9pbnQmIHAxLCBDYW52YXNCYXNlJik7CisgICAgc3RhdGljIFJlZjxDYW52YXNH
cmFkaWVudD4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgRmxv
YXRQb2ludCYgcDEsIGZsb2F0IHIxLCBDYW52YXNCYXNlJik7CisgICAgfkNhbnZhc0dyYWRpZW50
KCk7CiAKICAgICBHcmFkaWVudCYgZ3JhZGllbnQoKSB7IHJldHVybiBtX2dyYWRpZW50OyB9CiAg
ICAgY29uc3QgR3JhZGllbnQmIGdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9ncmFkaWVudDsg
fQpAQCAtNTUsNyArNTEsNiBAQCBwcml2YXRlOgogCiAgICAgUmVmPEdyYWRpZW50PiBtX2dyYWRp
ZW50OwogICAgIENhbnZhc0Jhc2UmIG1fY2FudmFzOwotCiB9OwogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApp
bmRleCA3ZDkyNTUyNWY4NTk4ZDhjMmQ4Y2U1YTYxYjBmN2Q4YjZhYmNkNTg0Li44N2RlZWY0OTky
MWM1YjVmYTFlZWJmMmFmNjU4NTdjZTE0ZjJmNjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKQEAgLTM2LDYg
KzM2LDcgQEAKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NQYXJz
ZXIuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAiR3JhZGllbnQu
aCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2lu
Y2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcAppbmRleCBjMTAzZGVhMDgzZDA2OWE0MzNkNmFjM2U3
OGFjODI3YjBiYTE0MGIwLi41YzU3YjYwNTc0ZWNhNTcyMmQxNTQ5OTJhZmRiZGM3NTVlNjMxOTlm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcApAQCAt
MTE1OCwxOSArMTE1OCwxNyBAQCBSZWY8SlNPTjo6QXJyYXlPZjxKU09OOjpWYWx1ZT4+IEluc3Bl
Y3RvckNhbnZhczo6YnVpbGRBY3Rpb24oY29uc3QgU3RyaW5nJiBuYW1lLAogCiBSZWY8SlNPTjo6
QXJyYXlPZjxKU09OOjpWYWx1ZT4+IEluc3BlY3RvckNhbnZhczo6YnVpbGRBcnJheUZvckNhbnZh
c0dyYWRpZW50KGNvbnN0IENhbnZhc0dyYWRpZW50JiBjYW52YXNHcmFkaWVudCkKIHsKLSAgICBj
b25zdCBhdXRvJiBncmFkaWVudCA9IGNhbnZhc0dyYWRpZW50LmdyYWRpZW50KCk7Ci0gICAgCi0g
ICAgU3RyaW5nIHR5cGUgPSBncmFkaWVudC50eXBlKCkgPT0gR3JhZGllbnQ6OlR5cGU6OlJhZGlh
bCA/ICJyYWRpYWwtZ3JhZGllbnQiX3MgOiBncmFkaWVudC50eXBlKCkgPT0gR3JhZGllbnQ6OlR5
cGU6OkxpbmVhciA/ICJsaW5lYXItZ3JhZGllbnQiX3MgOiAiY29uaWMtZ3JhZGllbnQiX3M7Ci0K
KyAgICBBU0NJSUxpdGVyYWwgdHlwZSA9ICJsaW5lYXItZ3JhZGllbnQiX3M7CiAgICAgYXV0byBw
YXJhbWV0ZXJzID0gSlNPTjo6QXJyYXlPZjxmbG9hdD46OmNyZWF0ZSgpOwotICAgIFdURjo6c3dp
dGNoT24oZ3JhZGllbnQuZGF0YSgpLAotICAgICAgICBbJnBhcmFtZXRlcnNdIChjb25zdCBHcmFk
aWVudDo6TGluZWFyRGF0YSYgZGF0YSkgeworICAgIFdURjo6c3dpdGNoT24oY2FudmFzR3JhZGll
bnQuZ3JhZGllbnQoKS5kYXRhKCksCisgICAgICAgIFsmXSAoY29uc3QgR3JhZGllbnQ6OkxpbmVh
ckRhdGEmIGRhdGEpIHsKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0oZGF0YS5wb2lu
dDAueCgpKTsKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0oZGF0YS5wb2ludDAueSgp
KTsKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0oZGF0YS5wb2ludDEueCgpKTsKICAg
ICAgICAgICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0oZGF0YS5wb2ludDEueSgpKTsKICAgICAgICAg
fSwKLSAgICAgICAgWyZwYXJhbWV0ZXJzXSAoY29uc3QgR3JhZGllbnQ6OlJhZGlhbERhdGEmIGRh
dGEpIHsKKyAgICAgICAgWyZdIChjb25zdCBHcmFkaWVudDo6UmFkaWFsRGF0YSYgZGF0YSkgewor
ICAgICAgICAgICAgdHlwZSA9ICJyYWRpYWwtZ3JhZGllbnQiX3M7CiAgICAgICAgICAgICBwYXJh
bWV0ZXJzLT5hZGRJdGVtKGRhdGEucG9pbnQwLngoKSk7CiAgICAgICAgICAgICBwYXJhbWV0ZXJz
LT5hZGRJdGVtKGRhdGEucG9pbnQwLnkoKSk7CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5hZGRJ
dGVtKGRhdGEuc3RhcnRSYWRpdXMpOwpAQCAtMTE3OCw3ICsxMTc2LDggQEAgUmVmPEpTT046OkFy
cmF5T2Y8SlNPTjo6VmFsdWU+PiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkQXJyYXlGb3JDYW52YXNH
cmFkaWVudChjb24KICAgICAgICAgICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0oZGF0YS5wb2ludDEu
eSgpKTsKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0oZGF0YS5lbmRSYWRpdXMpOwog
ICAgICAgICB9LAotICAgICAgICBbJnBhcmFtZXRlcnNdIChjb25zdCBHcmFkaWVudDo6Q29uaWNE
YXRhJiBkYXRhKSB7CisgICAgICAgIFsmXSAoY29uc3QgR3JhZGllbnQ6OkNvbmljRGF0YSYgZGF0
YSkgeworICAgICAgICAgICAgdHlwZSA9ICJjb25pYy1ncmFkaWVudCJfczsKICAgICAgICAgICAg
IHBhcmFtZXRlcnMtPmFkZEl0ZW0oZGF0YS5wb2ludDAueCgpKTsKICAgICAgICAgICAgIHBhcmFt
ZXRlcnMtPmFkZEl0ZW0oZGF0YS5wb2ludDAueSgpKTsKICAgICAgICAgICAgIHBhcmFtZXRlcnMt
PmFkZEl0ZW0oZGF0YS5hbmdsZVJhZGlhbnMpOwpAQCAtMTE4Niw3ICsxMTg1LDcgQEAgUmVmPEpT
T046OkFycmF5T2Y8SlNPTjo6VmFsdWU+PiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkQXJyYXlGb3JD
YW52YXNHcmFkaWVudChjb24KICAgICApOwogCiAgICAgYXV0byBzdG9wcyA9IEpTT046OkFycmF5
T2Y8SlNPTjo6VmFsdWU+OjpjcmVhdGUoKTsKLSAgICBmb3IgKGF1dG8mIGNvbG9yU3RvcCA6IGdy
YWRpZW50LnN0b3BzKCkpIHsKKyAgICBmb3IgKGF1dG8mIGNvbG9yU3RvcCA6IGNhbnZhc0dyYWRp
ZW50LmdyYWRpZW50KCkuc3RvcHMoKSkgewogICAgICAgICBhdXRvIHN0b3AgPSBKU09OOjpBcnJh
eU9mPEpTT046OlZhbHVlPjo6Y3JlYXRlKCk7CiAgICAgICAgIHN0b3AtPmFkZEl0ZW0oY29sb3JT
dG9wLm9mZnNldCk7CiAgICAgICAgIHN0b3AtPmFkZEl0ZW0oaW5kZXhGb3JEYXRhKHNlcmlhbGl6
YXRpb25Gb3JDU1MoY29sb3JTdG9wLmNvbG9yKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3Bw
CmluZGV4IDUxMjdiNDkwZjRjNDY5MTI5ODhmZWFmOTM2NTU0NGU2ZWJkNmJmNmEuLjkyYTgwODlm
NDg2YjkwYWE2ODhhZWUzZmJhMjljY2I0NDgxMGJiNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAKQEAgLTM1MCwzMiArMzUwLDI3IEBAIHZvaWQgRnJhbWVWaWV3OjpkZXRhY2hDdXN0b21T
Y3JvbGxiYXJzKCkKIAogdm9pZCBGcmFtZVZpZXc6OnJlY2FsY3VsYXRlU2Nyb2xsYmFyT3Zlcmxh
eVN0eWxlKCkKIHsKLSAgICBTY3JvbGxiYXJPdmVybGF5U3R5bGUgb2xkT3ZlcmxheVN0eWxlID0g
c2Nyb2xsYmFyT3ZlcmxheVN0eWxlKCk7Ci0gICAgT3B0aW9uYWw8U2Nyb2xsYmFyT3ZlcmxheVN0
eWxlPiBjbGllbnRPdmVybGF5U3R5bGUgPSBmcmFtZSgpLnBhZ2UoKSA/IGZyYW1lKCkucGFnZSgp
LT5jaHJvbWUoKS5jbGllbnQoKS5wcmVmZXJyZWRTY3JvbGxiYXJPdmVybGF5U3R5bGUoKSA6IFdU
Rjo6bnVsbG9wdDsKLSAgICBpZiAoY2xpZW50T3ZlcmxheVN0eWxlKSB7Ci0gICAgICAgIGlmIChj
bGllbnRPdmVybGF5U3R5bGUudmFsdWUoKSAhPSBvbGRPdmVybGF5U3R5bGUpCi0gICAgICAgICAg
ICBzZXRTY3JvbGxiYXJPdmVybGF5U3R5bGUoY2xpZW50T3ZlcmxheVN0eWxlLnZhbHVlKCkpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgU2Nyb2xsYmFyT3ZlcmxheVN0eWxlIGNvbXB1
dGVkT3ZlcmxheVN0eWxlID0gU2Nyb2xsYmFyT3ZlcmxheVN0eWxlRGVmYXVsdDsKLQotICAgIENv
bG9yIGJhY2tncm91bmRDb2xvciA9IGRvY3VtZW50QmFja2dyb3VuZENvbG9yKCk7Ci0gICAgaWYg
KGJhY2tncm91bmRDb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgLy8gUmVkdWNlIHRoZSBiYWNr
Z3JvdW5kIGNvbG9yIGZyb20gUkdCIHRvIGEgbGlnaHRuZXNzIHZhbHVlCi0gICAgICAgIC8vIGFu
ZCBkZXRlcm1pbmUgd2hpY2ggc2Nyb2xsYmFyIHN0eWxlIHRvIHVzZSBiYXNlZCBvbiBhIGxpZ2h0
bmVzcwotICAgICAgICAvLyBoZXVyaXN0aWMuCi0gICAgICAgIGlmIChiYWNrZ3JvdW5kQ29sb3Iu
bGlnaHRuZXNzKCkgPD0gLjVmICYmIGJhY2tncm91bmRDb2xvci5pc1Zpc2libGUoKSkKLSAgICAg
ICAgICAgIGNvbXB1dGVkT3ZlcmxheVN0eWxlID0gU2Nyb2xsYmFyT3ZlcmxheVN0eWxlTGlnaHQ7
Ci0gICAgICAgIGVsc2UgaWYgKCFiYWNrZ3JvdW5kQ29sb3IuaXNWaXNpYmxlKCkgJiYgdXNlRGFy
a0FwcGVhcmFuY2UoKSkKLSAgICAgICAgICAgIGNvbXB1dGVkT3ZlcmxheVN0eWxlID0gU2Nyb2xs
YmFyT3ZlcmxheVN0eWxlTGlnaHQ7Ci0gICAgfQotCi0gICAgaWYgKG9sZE92ZXJsYXlTdHlsZSAh
PSBjb21wdXRlZE92ZXJsYXlTdHlsZSkKLSAgICAgICAgc2V0U2Nyb2xsYmFyT3ZlcmxheVN0eWxl
KGNvbXB1dGVkT3ZlcmxheVN0eWxlKTsKKyAgICBhdXRvIHN0eWxlID0gWyZdIHsKKyAgICAgICAg
aWYgKGF1dG8gcGFnZSA9IGZyYW1lKCkucGFnZSgpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBj
bGllbnRPdmVybGF5U3R5bGUgPSBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5wcmVmZXJyZWRTY3Jv
bGxiYXJPdmVybGF5U3R5bGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gKmNsaWVudE92ZXJs
YXlTdHlsZTsKKyAgICAgICAgfQorICAgICAgICBhdXRvIGJhY2tncm91bmQgPSBkb2N1bWVudEJh
Y2tncm91bmRDb2xvcigpOworICAgICAgICBpZiAoYmFja2dyb3VuZC5pc1Zpc2libGUoKSkgewor
ICAgICAgICAgICAgaWYgKGJhY2tncm91bmQubGlnaHRuZXNzKCkgPD0gLjVmKQorICAgICAgICAg
ICAgICAgIHJldHVybiBTY3JvbGxiYXJPdmVybGF5U3R5bGVMaWdodDsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGlmICh1c2VEYXJrQXBwZWFyYW5jZSgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBTY3JvbGxiYXJPdmVybGF5U3R5bGVMaWdodDsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gU2Nyb2xsYmFyT3ZlcmxheVN0eWxlRGVmYXVsdDsKKyAgICB9KCk7CisgICAgaWYgKHNj
cm9sbGJhck92ZXJsYXlTdHlsZSgpICE9IHN0eWxlKQorICAgICAgICBzZXRTY3JvbGxiYXJPdmVy
bGF5U3R5bGUoc3R5bGUpOwogfQogCiAjaWYgRU5BQkxFKERBUktfTU9ERV9DU1MpCisKIHZvaWQg
RnJhbWVWaWV3OjpyZWNhbGN1bGF0ZUJhc2VCYWNrZ3JvdW5kQ29sb3IoKQogewogICAgIGJvb2wg
dXNpbmdEYXJrQXBwZWFyYW5jZSA9IHVzZURhcmtBcHBlYXJhbmNlKCk7CkBAIC0zODgsNiArMzgz
LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnJlY2FsY3VsYXRlQmFzZUJhY2tncm91bmRDb2xvcigpCiAg
ICAgICAgIGJhY2tncm91bmRDb2xvciA9IENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCk7CiAgICAg
dXBkYXRlQmFja2dyb3VuZFJlY3Vyc2l2ZWx5KGJhY2tncm91bmRDb2xvcik7CiB9CisKICNlbmRp
ZgogCiB2b2lkIEZyYW1lVmlldzo6Y2xlYXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vQ29sb3JDaG9vc2VyQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9D
b2xvckNob29zZXJDbGllbnQuaAppbmRleCA5YjNiODk4MTYzZTI3YjBhNjk2MjQ5NWQyMjdiOWM5
YjU2OTFkYjJjLi4zMTY4ZmVlNTJmYTBmNDNkNGE0Zjk2NDVkMDYxZGI0NjY3MjM3Yjc5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db2xvckNob29zZXJDbGllbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db2xvckNob29zZXJDbGllbnQuaApAQCAtMjcsMTcg
KzI3LDE2IEBACiAgKgogICovCiAKLSNpZm5kZWYgQ29sb3JDaG9vc2VyQ2xpZW50X2gKLSNkZWZp
bmUgQ29sb3JDaG9vc2VyQ2xpZW50X2gKKyNwcmFnbWEgb25jZQogCiAjaWYgRU5BQkxFKElOUFVU
X1RZUEVfQ09MT1IpCiAKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgQ29sb3I7CitjbGFzcyBJbnRSZWN0OwogCiBjbGFzcyBDb2xvckNob29zZXJDbGllbnQg
ewogcHVibGljOgpAQCAtNDYsMTMgKzQ1LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBk
aWRDaG9vc2VDb2xvcihjb25zdCBDb2xvciYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkRW5k
Q2hvb3NlcigpID0gMDsKICAgICB2aXJ0dWFsIEludFJlY3QgZWxlbWVudFJlY3RSZWxhdGl2ZVRv
Um9vdFZpZXcoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBDb2xvciBjdXJyZW50Q29sb3IoKSA9
IDA7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZFNob3dTdWdnZXN0aW9ucygpIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIFZlY3RvcjxDb2xvcj4gc3VnZ2VzdGVkQ29sb3JzKCkgY29uc3QgPSAwOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOUFVUX1RZ
UEVfQ09MT1IpCi0KLSNlbmRpZiAvLyBDb2xvckNob29zZXJDbGllbnRfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwCmluZGV4IGJkN2Y2OGJiZjBiMDUx
NWMwNzNhMzY3NWE0ZDdhNzY1YzQzYzM4MTIuLjE2NDdlZDE5OGUxZGY0NDNjOTAzOWU5MjEzNDg3
YjBjNWE1Y2RhYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYWRpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFk
aWVudC5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgUmVmPEdyYWRpZW50PiBHcmFkaWVudDo6Y3JlYXRl
KFJhZGlhbERhdGEmJiBkYXRhKQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdyYWRpZW50KFdU
Rk1vdmUoZGF0YSkpKTsKIH0KIAotUmVmPEdyYWRpZW50PiBHcmFkaWVudDo6Y3JlYXRlKENvbmlj
RGF0YSYmIGRhdGEpCitSZWY8R3JhZGllbnQ+IEdyYWRpZW50OjpjcmVhdGUoRGF0YSYmIGRhdGEp
CiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR3JhZGllbnQoV1RGTW92ZShkYXRhKSkpOwog
fQpAQCAtNTQsNDAgKzU0LDE5IEBAIFJlZjxHcmFkaWVudD4gR3JhZGllbnQ6OmNyZWF0ZShDb25p
Y0RhdGEmJiBkYXRhKQogR3JhZGllbnQ6OkdyYWRpZW50KExpbmVhckRhdGEmJiBkYXRhKQogICAg
IDogbV9kYXRhKFdURk1vdmUoZGF0YSkpCiB7Ci0gICAgcGxhdGZvcm1Jbml0KCk7CiB9CiAKIEdy
YWRpZW50OjpHcmFkaWVudChSYWRpYWxEYXRhJiYgZGF0YSkKICAgICA6IG1fZGF0YShXVEZNb3Zl
KGRhdGEpKQogewotICAgIHBsYXRmb3JtSW5pdCgpOwogfQogICAgIAotR3JhZGllbnQ6OkdyYWRp
ZW50KENvbmljRGF0YSYmIGRhdGEpCitHcmFkaWVudDo6R3JhZGllbnQoRGF0YSYmIGRhdGEpCiAg
ICAgOiBtX2RhdGEoV1RGTW92ZShkYXRhKSkKIHsKLSAgICBwbGF0Zm9ybUluaXQoKTsKIH0KIAot
R3JhZGllbnQ6On5HcmFkaWVudCgpCi17Ci0gICAgcGxhdGZvcm1EZXN0cm95KCk7Ci19Ci0KLWF1
dG8gR3JhZGllbnQ6OnR5cGUoKSBjb25zdCAtPiBUeXBlCi17Ci0gICAgcmV0dXJuIFdURjo6c3dp
dGNoT24obV9kYXRhLAotICAgICAgICBbXSAoY29uc3QgTGluZWFyRGF0YSYpIHsKLSAgICAgICAg
ICAgIHJldHVybiBUeXBlOjpMaW5lYXI7Ci0gICAgICAgIH0sCi0gICAgICAgIFtdIChjb25zdCBS
YWRpYWxEYXRhJikgewotICAgICAgICAgICAgcmV0dXJuIFR5cGU6OlJhZGlhbDsKLSAgICAgICAg
fSwKLSAgICAgICAgW10gKGNvbnN0IENvbmljRGF0YSYpIHsKLSAgICAgICAgICAgIHJldHVybiBU
eXBlOjpDb25pYzsKLSAgICAgICAgfQotICAgICk7Ci19CitHcmFkaWVudDo6fkdyYWRpZW50KCkg
PSBkZWZhdWx0OwogCiB2b2lkIEdyYWRpZW50OjphZGp1c3RQYXJhbWV0ZXJzRm9yVGlsZWREcmF3
aW5nKEZsb2F0U2l6ZSYgc2l6ZSwgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFNpemUm
IHNwYWNpbmcpCiB7CkBAIC0xMzQsMTQ2ICsxMTMsOTAgQEAgYm9vbCBHcmFkaWVudDo6aXNaZXJv
U2l6ZSgpIGNvbnN0CiAgICAgKTsKIH0KIAotdm9pZCBHcmFkaWVudDo6YWRkQ29sb3JTdG9wKGZs
b2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIGFkZENvbG9yU3RvcCh7IG9m
ZnNldCwgY29sb3IgfSk7Ci19Ci0KLXZvaWQgR3JhZGllbnQ6OmFkZENvbG9yU3RvcChjb25zdCBH
cmFkaWVudDo6Q29sb3JTdG9wJiBzdG9wKQordm9pZCBHcmFkaWVudDo6YWRkQ29sb3JTdG9wKEdy
YWRpZW50OjpDb2xvclN0b3AmJiBzdG9wKQogewotICAgIG1fc3RvcHMuYXBwZW5kKHN0b3ApOwot
CisgICAgbV9zdG9wcy5hcHBlbmQoV1RGTW92ZShzdG9wKSk7CiAgICAgbV9zdG9wc1NvcnRlZCA9
IGZhbHNlOwotCi0gICAgcGxhdGZvcm1EZXN0cm95KCk7Ci0gICAgaW52YWxpZGF0ZUhhc2goKTsK
KyAgICBtX2NhY2hlZEhhc2ggPSAwOworICAgIHN0b3BzQ2hhbmdlZCgpOwogfQogCiB2b2lkIEdy
YWRpZW50OjpzZXRTb3J0ZWRDb2xvclN0b3BzKENvbG9yU3RvcFZlY3RvciYmIHN0b3BzKQogewog
ICAgIG1fc3RvcHMgPSBXVEZNb3ZlKHN0b3BzKTsKLQogICAgIG1fc3RvcHNTb3J0ZWQgPSB0cnVl
OwotCi0gICAgcGxhdGZvcm1EZXN0cm95KCk7Ci0gICAgaW52YWxpZGF0ZUhhc2goKTsKKyAgICBt
X2NhY2hlZEhhc2ggPSAwOworICAgIHN0b3BzQ2hhbmdlZCgpOwogfQogCi1zdGF0aWMgaW5saW5l
IGJvb2wgY29tcGFyZVN0b3BzKGNvbnN0IEdyYWRpZW50OjpDb2xvclN0b3AmIGEsIGNvbnN0IEdy
YWRpZW50OjpDb2xvclN0b3AmIGIpCi17Ci0gICAgcmV0dXJuIGEub2Zmc2V0IDwgYi5vZmZzZXQ7
Ci19Ci0KLXZvaWQgR3JhZGllbnQ6OnNvcnRTdG9wc0lmTmVjZXNzYXJ5KCkKK3ZvaWQgR3JhZGll
bnQ6OnNvcnRTdG9wcygpIGNvbnN0CiB7CiAgICAgaWYgKG1fc3RvcHNTb3J0ZWQpCiAgICAgICAg
IHJldHVybjsKLQogICAgIG1fc3RvcHNTb3J0ZWQgPSB0cnVlOwotCi0gICAgaWYgKCFtX3N0b3Bz
LnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3RkOjpzdGFibGVfc29ydChtX3N0b3Bz
LmJlZ2luKCksIG1fc3RvcHMuZW5kKCksIGNvbXBhcmVTdG9wcyk7Ci0gICAgaW52YWxpZGF0ZUhh
c2goKTsKLX0KLQotYm9vbCBHcmFkaWVudDo6aGFzQWxwaGEoKSBjb25zdAotewotICAgIGZvciAo
Y29uc3QgYXV0byYgc3RvcCA6IG1fc3RvcHMpIHsKLSAgICAgICAgaWYgKCFzdG9wLmNvbG9yLmlz
T3BhcXVlKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
ZmFsc2U7CisgICAgc3RkOjpzdGFibGVfc29ydChtX3N0b3BzLmJlZ2luKCksIG1fc3RvcHMuZW5k
KCksIFtdIChhdXRvJiBhLCBhdXRvJiBiKSB7CisgICAgICAgIHJldHVybiBhLm9mZnNldCA8IGIu
b2Zmc2V0OworICAgIH0pOwogfQogCiB2b2lkIEdyYWRpZW50OjpzZXRTcHJlYWRNZXRob2QoR3Jh
ZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kKQogewotICAgIC8vIEZJWE1FOiBTaG91bGQg
aXQgYmVjb21lIG5lY2Vzc2FyeSwgYWxsb3cgY2FsbHMgdG8gdGhpcyBtZXRob2QgYWZ0ZXIgbV9n
cmFkaWVudCBoYXMgYmVlbiBzZXQuCi0gICAgQVNTRVJUKG1fZ3JhZGllbnQgPT0gMCk7Ci0KICAg
ICBpZiAobV9zcHJlYWRNZXRob2QgPT0gc3ByZWFkTWV0aG9kKQogICAgICAgICByZXR1cm47Ci0K
ICAgICBtX3NwcmVhZE1ldGhvZCA9IHNwcmVhZE1ldGhvZDsKLQotICAgIGludmFsaWRhdGVIYXNo
KCk7CisgICAgbV9jYWNoZWRIYXNoID0gMDsKIH0KIAogdm9pZCBHcmFkaWVudDo6c2V0R3JhZGll
bnRTcGFjZVRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50U3BhY2VUcmFu
c2Zvcm1hdGlvbikKIHsKICAgICBpZiAobV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24gPT0g
Z3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uKQogICAgICAgICByZXR1cm47Ci0KICAgICBtX2dy
YWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbiA9IGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsK
KyAgICBtX2NhY2hlZEhhc2ggPSAwOworfQogCi0gICAgaW52YWxpZGF0ZUhhc2goKTsKK3N0YXRp
YyB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIC8v
IEZJWE1FOiBXZSBkb24ndCB3YW50IHRvIGhhc2ggYSBoYXNoOyBkbyBiZXR0ZXIuCisgICAgYWRk
KGhhc2hlciwgY29sb3IuaGFzaCgpKTsKIH0KIAotdW5zaWduZWQgR3JhZGllbnQ6Omhhc2goKSBj
b25zdAorc3RhdGljIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCkKIHsKLSAgICBpZiAobV9jYWNoZWRIYXNoKQotICAgICAgICByZXR1cm4gbV9jYWNoZWRI
YXNoOworICAgIGFkZChoYXNoZXIsIHBvaW50LngoKSwgcG9pbnQueSgpKTsKK30KIAotICAgIHN0
cnVjdCB7Ci0gICAgICAgIFR5cGUgdHlwZTsKLSAgICAgICAgRmxvYXRQb2ludCBwb2ludDA7Ci0g
ICAgICAgIEZsb2F0UG9pbnQgcG9pbnQxOwotICAgICAgICBmbG9hdCBzdGFydFJhZGl1czsKLSAg
ICAgICAgZmxvYXQgZW5kUmFkaXVzOwotICAgICAgICBmbG9hdCBhc3BlY3RSYXRpbzsKLSAgICAg
ICAgZmxvYXQgYW5nbGVSYWRpYW5zOwotICAgICAgICBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJl
YWRNZXRob2Q7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBncmFkaWVudFNwYWNlVHJhbnNmb3Jt
YXRpb247Ci0gICAgfSBwYXJhbWV0ZXJzOworc3RhdGljIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVy
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3sKKyAgICBhZGQoaGFzaGVyLCB0
cmFuc2Zvcm0uYSgpLCB0cmFuc2Zvcm0uYigpLCB0cmFuc2Zvcm0uYygpLCB0cmFuc2Zvcm0uZCgp
LCB0cmFuc2Zvcm0uZSgpLCB0cmFuc2Zvcm0uZigpKTsKK30KIAotICAgIC8vIFN0cmluZ0hhc2hl
ciByZXF1aXJlcyB0aGF0IHRoZSBtZW1vcnkgaXQgaGFzaGVzIGJlIGEgbXVsdGlwbGUgb2YgdHdv
IGluIHNpemUuCi0gICAgQ09NUElMRV9BU1NFUlQoIShzaXplb2YocGFyYW1ldGVycykgJSAyKSwg
R3JhZGllbnRfcGFyYW1ldGVyc19zaXplX3Nob3VsZF9iZV9tdWx0aXBsZV9vZl90d28pOwotICAg
IENPTVBJTEVfQVNTRVJUKCEoc2l6ZW9mKENvbG9yU3RvcCkgJSAyKSwgQ29sb3Jfc3RvcF9zaXpl
X3Nob3VsZF9iZV9tdWx0aXBsZV9vZl90d28pOwotICAgIAotICAgIC8vIEVuc3VyZSB0aGF0IGFu
eSBwYWRkaW5nIGluIHRoZSBzdHJ1Y3QgaXMgemVyby1maWxsZWQsIHNvIGl0IHdpbGwgbm90IGFm
ZmVjdCB0aGUgaGFzaCB2YWx1ZS4KLSAgICAvLyBGSVhNRTogVGhpcyBpcyBhc2tpbmcgZm9yIHRy
b3VibGUsIGJlY2F1c2UgaXQgaXMgYSBub250cml2aWFsIHR5cGUuCi0gICAgbWVtc2V0KHN0YXRp
Y19jYXN0PHZvaWQqPigmcGFyYW1ldGVycyksIDAsIHNpemVvZihwYXJhbWV0ZXJzKSk7Ci0gICAg
Ci0gICAgV1RGOjpzd2l0Y2hPbihtX2RhdGEsCi0gICAgICAgIFsmcGFyYW1ldGVyc10gKGNvbnN0
IExpbmVhckRhdGEmIGRhdGEpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMucG9pbnQwID0gZGF0
YS5wb2ludDA7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLnBvaW50MSA9IGRhdGEucG9pbnQxOwot
ICAgICAgICAgICAgcGFyYW1ldGVycy5zdGFydFJhZGl1cyA9IDA7Ci0gICAgICAgICAgICBwYXJh
bWV0ZXJzLmVuZFJhZGl1cyA9IDA7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmFzcGVjdFJhdGlv
ID0gMDsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuYW5nbGVSYWRpYW5zID0gMDsKLSAgICAgICAg
ICAgIHBhcmFtZXRlcnMudHlwZSA9IFR5cGU6OkxpbmVhcjsKLSAgICAgICAgfSwKLSAgICAgICAg
WyZwYXJhbWV0ZXJzXSAoY29uc3QgUmFkaWFsRGF0YSYgZGF0YSkgewotICAgICAgICAgICAgcGFy
YW1ldGVycy5wb2ludDAgPSBkYXRhLnBvaW50MDsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMucG9p
bnQxID0gZGF0YS5wb2ludDE7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLnN0YXJ0UmFkaXVzID0g
ZGF0YS5zdGFydFJhZGl1czsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZW5kUmFkaXVzID0gZGF0
YS5lbmRSYWRpdXM7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmFzcGVjdFJhdGlvID0gZGF0YS5h
c3BlY3RSYXRpbzsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuYW5nbGVSYWRpYW5zID0gMDsKLSAg
ICAgICAgICAgIHBhcmFtZXRlcnMudHlwZSA9IFR5cGU6OlJhZGlhbDsKLSAgICAgICAgfSwKLSAg
ICAgICAgWyZwYXJhbWV0ZXJzXSAoY29uc3QgQ29uaWNEYXRhJiBkYXRhKSB7Ci0gICAgICAgICAg
ICBwYXJhbWV0ZXJzLnBvaW50MCA9IGRhdGEucG9pbnQwOwotICAgICAgICAgICAgcGFyYW1ldGVy
cy5wb2ludDEgPSB7MCwgMH07Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLnN0YXJ0UmFkaXVzID0g
MDsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZW5kUmFkaXVzID0gMDsKLSAgICAgICAgICAgIHBh
cmFtZXRlcnMuYXNwZWN0UmF0aW8gPSAwOwotICAgICAgICAgICAgcGFyYW1ldGVycy5hbmdsZVJh
ZGlhbnMgPSBkYXRhLmFuZ2xlUmFkaWFuczsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMudHlwZSA9
IFR5cGU6OkNvbmljOwotICAgICAgICB9Ci0gICAgKTsKK3N0YXRpYyB2b2lkIGFkZChIYXNoZXIm
IGhhc2hlciwgY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCYgc3RvcCkKK3sKKyAgICBhZGQoaGFz
aGVyLCBzdG9wLm9mZnNldCwgc3RvcC5jb2xvcik7Cit9CiAKLSAgICBwYXJhbWV0ZXJzLnNwcmVh
ZE1ldGhvZCA9IG1fc3ByZWFkTWV0aG9kOwotICAgIHBhcmFtZXRlcnMuZ3JhZGllbnRTcGFjZVRy
YW5zZm9ybWF0aW9uID0gbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247CitzdGF0aWMgdm9p
ZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IEdyYWRpZW50OjpMaW5lYXJEYXRhJiBkYXRhKQor
eworICAgIGFkZChoYXNoZXIsIGRhdGEucG9pbnQwLCBkYXRhLnBvaW50MSk7Cit9CiAKLSAgICB1
bnNpZ25lZCBwYXJhbWV0ZXJzSGFzaCA9IFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeSgmcGFyYW1l
dGVycywgc2l6ZW9mKHBhcmFtZXRlcnMpKTsKLSAgICB1bnNpZ25lZCBzdG9wSGFzaCA9IFN0cmlu
Z0hhc2hlcjo6aGFzaE1lbW9yeShtX3N0b3BzLmRhdGEoKSwgbV9zdG9wcy5zaXplKCkgKiBzaXpl
b2YoQ29sb3JTdG9wKSk7CitzdGF0aWMgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IEdy
YWRpZW50OjpSYWRpYWxEYXRhJiBkYXRhKQoreworICAgIGFkZChoYXNoZXIsIGRhdGEucG9pbnQw
LCBkYXRhLnBvaW50MSwgZGF0YS5zdGFydFJhZGl1cywgZGF0YS5lbmRSYWRpdXMsIGRhdGEuYXNw
ZWN0UmF0aW8pOworfQogCi0gICAgbV9jYWNoZWRIYXNoID0gcGFpckludEhhc2gocGFyYW1ldGVy
c0hhc2gsIHN0b3BIYXNoKTsKK3N0YXRpYyB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3Qg
R3JhZGllbnQ6OkNvbmljRGF0YSYgZGF0YSkKK3sKKyAgICBhZGQoaGFzaGVyLCBkYXRhLnBvaW50
MCwgZGF0YS5hbmdsZVJhZGlhbnMpOworfQogCit1bnNpZ25lZCBHcmFkaWVudDo6aGFzaCgpIGNv
bnN0Cit7CisgICAgaWYgKCFtX2NhY2hlZEhhc2gpIHsKKyAgICAgICAgc29ydFN0b3BzKCk7Cisg
ICAgICAgIG1fY2FjaGVkSGFzaCA9IGNvbXB1dGVIYXNoKG1fZGF0YSwgbV9zcHJlYWRNZXRob2Qs
IG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uLCBtX3N0b3BzKTsKKyAgICB9CiAgICAgcmV0
dXJuIG1fY2FjaGVkSGFzaDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhZGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYWRpZW50LmgKaW5kZXggNmViNWQwNzlhYzdlNGZlM2EyY2Y1MTY3ZDI4NWUwMzViMGNmMTAw
Mi4uY2NkNTNhMWJlODkyYzlkNjYwNjFhY2ZlNDU3NTA3ODZkN2U2MTdhMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCkBAIC0zMSw0OCArMzEsNDQgQEAK
ICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJH
cmFwaGljc1R5cGVzLmgiCi0jaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCisjaWYgVVNFKENHKQorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNl
bmRpZgorCisjaWYgVVNFKERJUkVDVDJEKQorI2luY2x1ZGUgIkNPTVB0ci5oIgorI2VuZGlmCisK
ICNpZiBVU0UoQ0cpCiB0eXBlZGVmIHN0cnVjdCBDR0NvbnRleHQqIENHQ29udGV4dFJlZjsKIHR5
cGVkZWYgc3RydWN0IENHR3JhZGllbnQqIENHR3JhZGllbnRSZWY7Ci10eXBlZGVmIENHR3JhZGll
bnRSZWYgUGxhdGZvcm1HcmFkaWVudDsKLSNlbGlmIFVTRShESVJFQ1QyRCkKKyNlbmRpZgorCisj
aWYgVVNFKERJUkVDVDJEKQogaW50ZXJmYWNlIElEMkQxQnJ1c2g7CiBpbnRlcmZhY2UgSUQyRDFS
ZW5kZXJUYXJnZXQ7Ci10eXBlZGVmIElEMkQxQnJ1c2gqIFBsYXRmb3JtR3JhZGllbnQ7Ci0jZWxp
ZiBVU0UoQ0FJUk8pCisjZW5kaWYKKworI2lmIFVTRShDQUlSTykKIHR5cGVkZWYgc3RydWN0IF9j
YWlyb19wYXR0ZXJuIGNhaXJvX3BhdHRlcm5fdDsKLXR5cGVkZWYgY2Fpcm9fcGF0dGVybl90KiBQ
bGF0Zm9ybUdyYWRpZW50OwotI2Vsc2UKLXR5cGVkZWYgdm9pZCogUGxhdGZvcm1HcmFkaWVudDsK
ICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENvbG9yOwogY2xhc3MgRmxv
YXRSZWN0OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogCiBjbGFzcyBHcmFkaWVudCA6IHB1Ymxp
YyBSZWZDb3VudGVkPEdyYWRpZW50PiB7CiBwdWJsaWM6Ci0gICAgLy8gRklYTUU6IEV4dGVuZGVk
Q29sb3IgLSBBIGNvbG9yIHN0b3AgbmVlZHMgYSBub3Rpb24gb2YgY29sb3Igc3BhY2UuCiAgICAg
c3RydWN0IENvbG9yU3RvcCB7CiAgICAgICAgIGZsb2F0IG9mZnNldCB7IDAgfTsKICAgICAgICAg
Q29sb3IgY29sb3I7CiAKLSAgICAgICAgQ29sb3JTdG9wKCkgPSBkZWZhdWx0OwotICAgICAgICBD
b2xvclN0b3AoZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgICAgICAgICA6
IG9mZnNldChvZmZzZXQpCi0gICAgICAgICAgICAsIGNvbG9yKGNvbG9yKQotICAgICAgICB7Ci0g
ICAgICAgIH0KLQotICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7Ci0gICAgICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBP
cHRpb25hbDxDb2xvclN0b3A+IGRlY29kZShEZWNvZGVyJik7CisgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENvbG9yU3RvcD4gZGVjb2Rl
KERlY29kZXImKTsKICAgICB9OwogCiAgICAgdXNpbmcgQ29sb3JTdG9wVmVjdG9yID0gVmVjdG9y
PENvbG9yU3RvcCwgMj47CkBAIC04MSw4ICs3Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgRmxvYXRQ
b2ludCBwb2ludDA7CiAgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQxOwogCi0gICAgICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICAgICAg
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPExpbmVhckRhdGE+IGRlY29k
ZShEZWNvZGVyJik7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPExpbmVhckRhdGE+IGRlY29kZShEZWNvZGVyJik7CiAgICAgfTsKIAog
ICAgIHN0cnVjdCBSYWRpYWxEYXRhIHsKQEAgLTkyLDM3ICs4OCwzMSBAQCBwdWJsaWM6CiAgICAg
ICAgIGZsb2F0IGVuZFJhZGl1czsKICAgICAgICAgZmxvYXQgYXNwZWN0UmF0aW87IC8vIEZvciBl
bGxpcHRpY2FsIGdyYWRpZW50LCB3aWR0aCAvIGhlaWdodC4KIAotICAgICAgICB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSYWRpYWxEYXRhPiBkZWNvZGUoRGVj
b2RlciYpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IHN0YXRp
YyBPcHRpb25hbDxSYWRpYWxEYXRhPiBkZWNvZGUoRGVjb2RlciYpOwogICAgIH07Ci0gICAgCisK
ICAgICBzdHJ1Y3QgQ29uaWNEYXRhIHsKICAgICAgICAgRmxvYXRQb2ludCBwb2ludDA7CiAgICAg
ICAgIGZsb2F0IGFuZ2xlUmFkaWFuczsKIAotICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxDb25pY0RhdGE+IGRlY29kZShEZWNvZGVyJik7CisgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENv
bmljRGF0YT4gZGVjb2RlKERlY29kZXImKTsKICAgICB9OwogCiAgICAgdXNpbmcgRGF0YSA9IFZh
cmlhbnQ8TGluZWFyRGF0YSwgUmFkaWFsRGF0YSwgQ29uaWNEYXRhPjsKIAotICAgIGVudW0gY2xh
c3MgVHlwZSB7IExpbmVhciwgUmFkaWFsLCBDb25pYyB9OwotCiAgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFJlZjxHcmFkaWVudD4gY3JlYXRlKExpbmVhckRhdGEmJik7CiAgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIFJlZjxHcmFkaWVudD4gY3JlYXRlKFJhZGlhbERhdGEmJik7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFJlZjxHcmFkaWVudD4gY3JlYXRlKENvbmljRGF0YSYmKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEdyYWRpZW50PiBjcmVhdGUoRGF0YSYmKTsKIAog
ICAgIFdFQkNPUkVfRVhQT1JUIH5HcmFkaWVudCgpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgVHlw
ZSB0eXBlKCkgY29uc3Q7Ci0KLSAgICBib29sIGhhc0FscGhhKCkgY29uc3Q7CiAgICAgYm9vbCBp
c1plcm9TaXplKCkgY29uc3Q7CiAKICAgICBjb25zdCBEYXRhJiBkYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZENvbG9yU3RvcChjb25z
dCBDb2xvclN0b3AmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZENvbG9yU3RvcChmbG9h
dCwgY29uc3QgQ29sb3ImKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZENvbG9yU3RvcChD
b2xvclN0b3AmJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTb3J0ZWRDb2xvclN0b3Bz
KENvbG9yU3RvcFZlY3RvciYmKTsKIAogICAgIGNvbnN0IENvbG9yU3RvcFZlY3RvciYgc3RvcHMo
KSBjb25zdCB7IHJldHVybiBtX3N0b3BzOyB9CkBAIC0xMzAsNyArMTIwLDYgQEAgcHVibGljOgog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3ByZWFkTWV0aG9kKEdyYWRpZW50U3ByZWFkTWV0
aG9kKTsKICAgICBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2QoKSBjb25zdCB7IHJl
dHVybiBtX3NwcmVhZE1ldGhvZDsgfQogCi0gICAgLy8gQ0cgbmVlZHMgdG8gdHJhbnNmb3JtIHRo
ZSBncmFkaWVudCBhdCBkcmF3IHRpbWUuCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRHcmFk
aWVudFNwYWNlVHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRTcGFjZVRy
YW5zZm9ybWF0aW9uKTsKICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50U3BhY2VU
cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsg
fQogCkBAIC0xMzgsMzMgKzEyNywzMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGp1c3RQYXJhbWV0
ZXJzRm9yVGlsZWREcmF3aW5nKEZsb2F0U2l6ZSYsIEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZyk7CiAKICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7Ci0gICAgdm9pZCBpbnZh
bGlkYXRlSGFzaCgpIHsgbV9jYWNoZWRIYXNoID0gMDsgfQorCisjaWYgVVNFKENBSVJPKQorICAg
IFJlZlB0cjxjYWlyb19wYXR0ZXJuX3Q+IGNyZWF0ZVBhdHRlcm4oZmxvYXQgZ2xvYmFsQWxwaGEp
OworI2VuZGlmCiAKICNpZiBVU0UoQ0cpCiAgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQm
KTsKICAgICB2b2lkIHBhaW50KENHQ29udGV4dFJlZik7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0g
ICAgUGxhdGZvcm1HcmFkaWVudCBjcmVhdGVQbGF0Zm9ybUdyYWRpZW50SWZOZWNlc3NhcnkoSUQy
RDFSZW5kZXJUYXJnZXQqKTsKLSNlbGlmIFVTRShDQUlSTykKLSAgICBQbGF0Zm9ybUdyYWRpZW50
IGNyZWF0ZVBsYXRmb3JtR3JhZGllbnQoZmxvYXQgZ2xvYmFsQWxwaGEpOwogI2VuZGlmCiAKLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0g
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxHcmFkaWVudD4+
IGRlY29kZShEZWNvZGVyJik7CisjaWYgVVNFKERJUkVDVDJEKQorICAgIElEMkQxQnJ1c2gqIGNy
ZWF0ZUJydXNoKElEMkQxUmVuZGVyVGFyZ2V0Kik7CisjZW5kaWYKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEdyYWRpZW50Pj4gZGVjb2Rl
KERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBHcmFkaWVudChMaW5lYXJEYXRhJiYpOwotICAg
IEdyYWRpZW50KFJhZGlhbERhdGEmJik7Ci0gICAgR3JhZGllbnQoQ29uaWNEYXRhJiYpOwotCi0g
ICAgUGxhdGZvcm1HcmFkaWVudCBwbGF0Zm9ybUdyYWRpZW50KCk7Ci0gICAgdm9pZCBwbGF0Zm9y
bUluaXQoKSB7IG1fZ3JhZGllbnQgPSBudWxscHRyOyB9Ci0gICAgdm9pZCBwbGF0Zm9ybURlc3Ry
b3koKTsKKyAgICBleHBsaWNpdCBHcmFkaWVudChMaW5lYXJEYXRhJiYpOworICAgIGV4cGxpY2l0
IEdyYWRpZW50KFJhZGlhbERhdGEmJik7CisgICAgZXhwbGljaXQgR3JhZGllbnQoRGF0YSYmKTsK
IAotICAgIHZvaWQgc29ydFN0b3BzSWZOZWNlc3NhcnkoKTsKKyAgICB2b2lkIHNvcnRTdG9wcygp
IGNvbnN0OworICAgIHZvaWQgc3RvcHNDaGFuZ2VkKCk7CiAKLSNpZiBVU0UoRElSRUNUMkQpCi0g
ICAgdm9pZCBnZW5lcmF0ZUdyYWRpZW50KElEMkQxUmVuZGVyVGFyZ2V0Kik7CisjaWYgVVNFKENH
KQorICAgIHZvaWQgY3JlYXRlQ0dHcmFkaWVudCgpOwogI2VuZGlmCiAKICAgICBEYXRhIG1fZGF0
YTsKQEAgLTE3NiwxOCArMTY1LDIyIEBAIHByaXZhdGU6CiAKICAgICBtdXRhYmxlIHVuc2lnbmVk
IG1fY2FjaGVkSGFzaCB7IDAgfTsKIAotICAgIFBsYXRmb3JtR3JhZGllbnQgbV9ncmFkaWVudDsK
KyNpZiBVU0UoQ0cpCisgICAgUmV0YWluUHRyPENHR3JhZGllbnRSZWY+IG1fZ3JhZGllbnQ7Cisj
ZW5kaWYKKworI2lmIFVTRShESVJFQ1QyRCkKKyAgICBDT01QdHI8SUQyRDFCcnVzaD4gbV9icnVz
aDsKKyNlbmRpZgogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgR3JhZGllbnQ6
OkNvbG9yU3RvcDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBFbmNvZGVyPiB2b2lkIEdyYWRpZW50OjpDb2xvclN0b3A6OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgb2Zmc2V0OwogICAgIGVuY29kZXIgPDwg
Y29sb3I7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxHcmFkaWVudDo6
Q29sb3JTdG9wPiBHcmFkaWVudDo6Q29sb3JTdG9wOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
K3RlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IE9wdGlvbmFsPEdyYWRpZW50OjpDb2xvclN0b3A+
IEdyYWRpZW50OjpDb2xvclN0b3A6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9w
dGlvbmFsPGZsb2F0PiBvZmZzZXQ7CiAgICAgZGVjb2RlciA+PiBvZmZzZXQ7CkBAIC0yMDIsMTUg
KzE5NSwxMyBAQCBPcHRpb25hbDxHcmFkaWVudDo6Q29sb3JTdG9wPiBHcmFkaWVudDo6Q29sb3JT
dG9wOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICByZXR1cm4ge3sgKm9mZnNldCwgKmNv
bG9yIH19OwogfQogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBHcmFkaWVudDo6TGlu
ZWFyRGF0YTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBFbmNvZGVyPiB2b2lkIEdyYWRpZW50OjpMaW5lYXJEYXRhOjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IHBvaW50MDsKICAgICBlbmNvZGVyIDw8IHBv
aW50MTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPEdyYWRpZW50OjpM
aW5lYXJEYXRhPiBHcmFkaWVudDo6TGluZWFyRGF0YTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBPcHRpb25hbDxHcmFkaWVudDo6TGluZWFyRGF0
YT4gR3JhZGllbnQ6OkxpbmVhckRhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAg
IE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBvaW50MDsKICAgICBkZWNvZGVyID4+IHBvaW50MDsKQEAg
LTIyNSw4ICsyMTYsNyBAQCBPcHRpb25hbDxHcmFkaWVudDo6TGluZWFyRGF0YT4gR3JhZGllbnQ6
OkxpbmVhckRhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHJldHVybiB7eyAqcG9p
bnQwLCAqcG9pbnQxIH19OwogfQogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBHcmFk
aWVudDo6UmFkaWFsRGF0YTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBFbmNvZGVyPiB2b2lkIEdyYWRpZW50OjpSYWRpYWxEYXRhOjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IHBvaW50MDsKICAgICBlbmNv
ZGVyIDw8IHBvaW50MTsKQEAgLTIzNSw4ICsyMjUsNyBAQCB2b2lkIEdyYWRpZW50OjpSYWRpYWxE
YXRhOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVyIDw8IGFzcGVj
dFJhdGlvOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8R3JhZGllbnQ6
OlJhZGlhbERhdGE+IEdyYWRpZW50OjpSYWRpYWxEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKK3RlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IE9wdGlvbmFsPEdyYWRpZW50OjpSYWRpYWxE
YXRhPiBHcmFkaWVudDo6UmFkaWFsRGF0YTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAg
ICAgT3B0aW9uYWw8RmxvYXRQb2ludD4gcG9pbnQwOwogICAgIGRlY29kZXIgPj4gcG9pbnQwOwpA
QCAtMjY2LDE1ICsyNTUsMTMgQEAgT3B0aW9uYWw8R3JhZGllbnQ6OlJhZGlhbERhdGE+IEdyYWRp
ZW50OjpSYWRpYWxEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICByZXR1cm4ge3sg
KnBvaW50MCwgKnBvaW50MSwgKnN0YXJ0UmFkaXVzLCAqZW5kUmFkaXVzLCAqYXNwZWN0UmF0aW8g
fX07CiB9CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEdyYWRpZW50OjpDb25pY0Rh
dGE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgRW5j
b2Rlcj4gdm9pZCBHcmFkaWVudDo6Q29uaWNEYXRhOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKIHsKICAgICBlbmNvZGVyIDw8IHBvaW50MDsKICAgICBlbmNvZGVyIDw8IGFuZ2xlUmFk
aWFuczsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPEdyYWRpZW50OjpD
b25pY0RhdGE+IEdyYWRpZW50OjpDb25pY0RhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQor
dGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gT3B0aW9uYWw8R3JhZGllbnQ6OkNvbmljRGF0YT4g
R3JhZGllbnQ6OkNvbmljRGF0YTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0
aW9uYWw8RmxvYXRQb2ludD4gcG9pbnQwOwogICAgIGRlY29kZXIgPj4gcG9pbnQwOwpAQCAtMjg5
LDExNSArMjc2LDUwIEBAIE9wdGlvbmFsPEdyYWRpZW50OjpDb25pY0RhdGE+IEdyYWRpZW50OjpD
b25pY0RhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHJldHVybiB7eyAqcG9pbnQw
LCAqYW5nbGVSYWRpYW5zIH19OwogfQogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBH
cmFkaWVudDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBFbmNvZGVyPiB2b2lkIEdyYWRpZW50OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
IHsKLSAgICBhdXRvIHR5cGUgPSB0aGlzLT50eXBlKCk7Ci0gICAgZW5jb2RlciA8PCB0eXBlOwot
ICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgVHlwZTo6TGluZWFyOgotICAgICAgICBlbmNv
ZGVyIDw8IFdURjo6Z2V0PEdyYWRpZW50OjpMaW5lYXJEYXRhPihtX2RhdGEpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFR5cGU6OlJhZGlhbDoKLSAgICAgICAgZW5jb2RlciA8PCBXVEY6Omdl
dDxHcmFkaWVudDo6UmFkaWFsRGF0YT4obV9kYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBUeXBlOjpDb25pYzoKLSAgICAgICAgZW5jb2RlciA8PCBXVEY6OmdldDxHcmFkaWVudDo6Q29u
aWNEYXRhPihtX2RhdGEpOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgZW5jb2RlciA8PCBt
X2RhdGE7CiAgICAgZW5jb2RlciA8PCBtX3N0b3BzOwogICAgIGVuY29kZXIgPDwgbV9zdG9wc1Nv
cnRlZDsKICAgICBlbmNvZGVyIDw8IG1fc3ByZWFkTWV0aG9kOwogICAgIGVuY29kZXIgPDwgbV9n
cmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247CiB9CiAKLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+
Ci1PcHRpb25hbDxSZWY8R3JhZGllbnQ+PiBHcmFkaWVudDo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBPcHRpb25hbDxSZWY8R3JhZGllbnQ+PiBH
cmFkaWVudDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7Ci0gICAgT3B0aW9uYWw8R3JhZGll
bnQ6OlR5cGU+IHR5cGU7Ci0gICAgZGVjb2RlciA+PiB0eXBlOwotICAgIGlmICghdHlwZSkKKyAg
ICBPcHRpb25hbDxEYXRhPiBkYXRhOworICAgIGRlY29kZXIgPj4gZGF0YTsKKyAgICBpZiAoIWRh
dGEpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBSZWZQdHI8R3JhZGllbnQ+
IGdyYWRpZW50OwotICAgIHN3aXRjaCAoKnR5cGUpIHsKLSAgICBjYXNlIFR5cGU6OkxpbmVhcjog
ewotICAgICAgICBPcHRpb25hbDxMaW5lYXJEYXRhPiBsaW5lYXJEYXRhOwotICAgICAgICBkZWNv
ZGVyID4+IGxpbmVhckRhdGE7Ci0gICAgICAgIGlmICghbGluZWFyRGF0YSkKLSAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICAgICAgZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3Jl
YXRlKFdURk1vdmUoKmxpbmVhckRhdGEpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNh
c2UgVHlwZTo6UmFkaWFsOiB7Ci0gICAgICAgIE9wdGlvbmFsPFJhZGlhbERhdGE+IHJhZGlhbERh
dGE7Ci0gICAgICAgIGRlY29kZXIgPj4gcmFkaWFsRGF0YTsKLSAgICAgICAgaWYgKCFyYWRpYWxE
YXRhKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgICAgICBncmFkaWVu
dCA9IEdyYWRpZW50OjpjcmVhdGUoV1RGTW92ZSgqcmFkaWFsRGF0YSkpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgY2FzZSBUeXBlOjpDb25pYzogewotICAgICAgICBPcHRpb25hbDxDb25p
Y0RhdGE+IGNvbmljRGF0YTsKLSAgICAgICAgZGVjb2RlciA+PiBjb25pY0RhdGE7Ci0gICAgICAg
IGlmICghY29uaWNEYXRhKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAg
ICAgICBncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoV1RGTW92ZSgqY29uaWNEYXRhKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWdyYWRpZW50KSB7Ci0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
ICAgIH0KKyAgICBhdXRvIGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShXVEZNb3ZlKCpkYXRh
KSk7CiAKICAgICBPcHRpb25hbDxDb2xvclN0b3BWZWN0b3I+IHN0b3BzOwogICAgIGRlY29kZXIg
Pj4gc3RvcHM7CiAgICAgaWYgKCFzdG9wcykKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LQogICAgIE9wdGlvbmFsPGJvb2w+IHN0b3BzU29ydGVkOwogICAgIGRlY29kZXIgPj4gc3RvcHNT
b3J0ZWQ7CiAgICAgaWYgKCFzdG9wc1NvcnRlZC5oYXNWYWx1ZSgpKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotCi0gICAgaWYgKHN0b3BzU29ydGVkLnZhbHVlKCkpCisgICAgaWYgKCpz
dG9wc1NvcnRlZCkKICAgICAgICAgZ3JhZGllbnQtPnNldFNvcnRlZENvbG9yU3RvcHMoV1RGTW92
ZSgqc3RvcHMpKTsKICAgICBlbHNlIHsKICAgICAgICAgZm9yIChhdXRvJiBzdG9wIDogKnN0b3Bz
KQotICAgICAgICAgICAgZ3JhZGllbnQtPmFkZENvbG9yU3RvcChzdG9wKTsKKyAgICAgICAgICAg
IGdyYWRpZW50LT5hZGRDb2xvclN0b3AoV1RGTW92ZShzdG9wKSk7CiAgICAgfQogCiAgICAgR3Jh
ZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
c3ByZWFkTWV0aG9kKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQogICAgIGdyYWRp
ZW50LT5zZXRTcHJlYWRNZXRob2Qoc3ByZWFkTWV0aG9kKTsKIAogICAgIE9wdGlvbmFsPEFmZmlu
ZVRyYW5zZm9ybT4gZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOwogICAgIGRlY29kZXIgPj4g
Z3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOwogICAgIGlmICghZ3JhZGllbnRTcGFjZVRyYW5z
Zm9ybWF0aW9uKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCiAgICAgZ3JhZGllbnQt
PnNldEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oV1RGTW92ZSgqZ3JhZGllbnRTcGFjZVRyYW5zZm9y
bWF0aW9uKSk7Ci0gICAgcmV0dXJuIGdyYWRpZW50LnJlbGVhc2VOb25OdWxsKCk7CisKKyAgICBy
ZXR1cm4gV1RGTW92ZShncmFkaWVudCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
bmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6
R3JhZGllbnQ6OlR5cGU+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgIFdl
YkNvcmU6OkdyYWRpZW50OjpUeXBlLAotICAgIFdlYkNvcmU6OkdyYWRpZW50OjpUeXBlOjpMaW5l
YXIsCi0gICAgV2ViQ29yZTo6R3JhZGllbnQ6OlR5cGU6OlJhZGlhbCwKLSAgICBXZWJDb3JlOjpH
cmFkaWVudDo6VHlwZTo6Q29uaWMKLSAgICA+OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmNwcAppbmRleCAzNjM3NWQzYjdjMTIxY2U4NjU5N2FmZjdkZTdjYjEyYTQ1ZDg1Njg5Li5lNDgw
ZDA4NTRhODI4OTVlMjI3NjM1MGFhODg2MzFmMjM1YTM2YWQyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTc1LDYg
Kzc1LDI2IEBAIHByaXZhdGU6CiAgICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OmZsYWcpICYmIChtX3N0YXRlLnByb3BlcnR5ICE9IHN0YXRlLnByb3Bl
cnR5KSkgXAogICAgICAgICBjaGFuZ2VGbGFncy5hZGQoR3JhcGhpY3NDb250ZXh0U3RhdGU6OmZs
YWcpOwogCitHcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUoKQorICAg
IDogc2hvdWxkQW50aWFsaWFzKHRydWUpCisgICAgLCBzaG91bGRTbW9vdGhGb250cyh0cnVlKQor
ICAgICwgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKHRydWUpCisgICAgLCBzaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcyhmYWxzZSkKKyNpZiBVU0UoQ0cpCisgICAgLy8gQ29yZSBHcmFwaGljcyBp
bmNvcnJlY3RseSByZW5kZXJzIHNoYWRvd3Mgd2l0aCByYWRpdXMgPiA4cHggKDxyZGFyOi8vcHJv
YmxlbS84MTAzNDQyPiksCisgICAgLy8gYnV0IHdlIG5lZWQgdG8gcHJlc2VydmUgdGhpcyBidWdn
eSBiZWhhdmlvciBmb3IgY2FudmFzIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCisgICAgLCBzaGFk
b3dzVXNlTGVnYWN5UmFkaXVzKGZhbHNlKQorI2VuZGlmCisgICAgLCBkcmF3THVtaW5hbmNlTWFz
ayhmYWxzZSkKK3sKK30KKworR3JhcGhpY3NDb250ZXh0U3RhdGU6On5HcmFwaGljc0NvbnRleHRT
dGF0ZSgpID0gZGVmYXVsdDsKK0dyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpID0gZGVmYXVsdDsKK0dyYXBoaWNzQ29u
dGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKSA9
IGRlZmF1bHQ7CitHcmFwaGljc0NvbnRleHRTdGF0ZSYgR3JhcGhpY3NDb250ZXh0U3RhdGU6Om9w
ZXJhdG9yPShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpID0gZGVmYXVsdDsKK0dyYXBoaWNz
Q29udGV4dFN0YXRlJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6b3BlcmF0b3I9KEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiYpID0gZGVmYXVsdDsKKwogR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmNoYW5nZXNGcm9tU3RhdGUoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKSBjb25zdAogewogICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5nZUZsYWdzOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCA1MDM2OTY3
NGM0NWE2MmU2MWI3ODkxOTIxZWJkYmE5ODYwMzZhNWVhLi45ZGNkZGU5OThmMzQxMzQyNzcyMjY4
Njk0Yzk5OGFiZTYwYzg0YWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkRh
c2hBcnJheS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRl
LmgiCi0jaW5jbHVkZSAiR3JhZGllbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAj
aW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCkBAIC05OCw2
ICs5NywxMCBAQCBjbGFzcyBQYXRoOwogY2xhc3MgVGV4dFJ1bjsKIGNsYXNzIFRyYW5zZm9ybWF0
aW9uTWF0cml4OwogCituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworY2xhc3MgUmVjb3JkZXI7Cit9
CisKIGVudW0gY2xhc3MgVGV4dERyYXdpbmdNb2RlIDogdWludDhfdCB7CiAgICAgRmlsbCA9IDEg
PDwgMCwKICAgICBTdHJva2UgPSAxIDw8IDEsCkBAIC0xNTMsMjQgKzE1NiwxNSBAQCBPcHRpb25h
bDxEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4gRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZAogICAgIHJldHVybiB7eyAqbW9kZSwgKnNob3VsZFVzZURhcmtBcHBl
YXJhbmNlIH19OwogfQogCi1uYW1lc3BhY2UgRGlzcGxheUxpc3QgewotY2xhc3MgUmVjb3JkZXI7
Ci19Ci0KIHN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZSB7Ci0gICAgR3JhcGhpY3NDb250ZXh0
U3RhdGUoKQotICAgICAgICA6IHNob3VsZEFudGlhbGlhcyh0cnVlKQotICAgICAgICAsIHNob3Vs
ZFNtb290aEZvbnRzKHRydWUpCi0gICAgICAgICwgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
KHRydWUpCi0gICAgICAgICwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoZmFsc2UpCi0jaWYgVVNF
KENHKQotICAgICAgICAvLyBDb3JlIEdyYXBoaWNzIGluY29ycmVjdGx5IHJlbmRlcnMgc2hhZG93
cyB3aXRoIHJhZGl1cyA+IDhweCAoPHJkYXI6Ly9wcm9ibGVtLzgxMDM0NDI+KSwKLSAgICAgICAg
Ly8gYnV0IHdlIG5lZWQgdG8gcHJlc2VydmUgdGhpcyBidWdneSBiZWhhdmlvciBmb3IgY2FudmFz
IGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCi0gICAgICAgICwgc2hhZG93c1VzZUxlZ2FjeVJhZGl1
cyhmYWxzZSkKLSNlbmRpZgotICAgICAgICAsIGRyYXdMdW1pbmFuY2VNYXNrKGZhbHNlKQotICAg
IHsKLSAgICB9CisgICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0U3RhdGUoKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB+R3JhcGhpY3NDb250ZXh0U3RhdGUoKTsKKworICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7CisgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGUoR3JhcGhpY3NDb250ZXh0U3RhdGUmJik7CisKKyAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgb3BlcmF0b3I9KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7CisgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmIG9wZXJhdG9yPShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKTsKIAog
ICAgIGVudW0gQ2hhbmdlIDogdWludDMyX3QgewogICAgICAgICBTdHJva2VHcmFkaWVudENoYW5n
ZSAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDAsCkBAIC0xOTcsNyArMTkxLDcgQEAgc3RydWN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKICAgICAgICAgVXNlRGFya0FwcGVhcmFuY2VDaGFuZ2Ug
ICAgICAgICAgICAgICAgID0gMSA8PCAyMCwKICNlbmRpZgogICAgIH07Ci0gICAgdHlwZWRlZiBP
cHRpb25TZXQ8Q2hhbmdlPiBTdGF0ZUNoYW5nZUZsYWdzOworICAgIHVzaW5nIFN0YXRlQ2hhbmdl
RmxhZ3MgPSBPcHRpb25TZXQ8Q2hhbmdlPjsKIAogICAgIFJlZlB0cjxHcmFkaWVudD4gc3Ryb2tl
R3JhZGllbnQ7CiAgICAgUmVmUHRyPFBhdHRlcm4+IHN0cm9rZVBhdHRlcm47CkBAIC0zMDgsNyAr
MzAyLDcgQEAgcHVibGljOgogICAgIFBhdHRlcm4qIHN0cm9rZVBhdHRlcm4oKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCk7IH0KIAogICAgIHZvaWQgc2V0U3Ryb2tl
R3JhZGllbnQoUmVmPEdyYWRpZW50PiYmKTsKLSAgICBSZWZQdHI8R3JhZGllbnQ+IHN0cm9rZUdy
YWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VHcmFkaWVudDsgfQorICAgIEdy
YWRpZW50KiBzdHJva2VHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlR3Jh
ZGllbnQuZ2V0KCk7IH0KIAogICAgIHZvaWQgc2V0RmlsbFJ1bGUoV2luZFJ1bGUpOwogICAgIFdp
bmRSdWxlIGZpbGxSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsUnVsZTsgfQpAQCAt
MzIwLDcgKzMxNCw3IEBAIHB1YmxpYzoKICAgICBQYXR0ZXJuKiBmaWxsUGF0dGVybigpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFBhdHRlcm4uZ2V0KCk7IH0KIAogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0RmlsbEdyYWRpZW50KFJlZjxHcmFkaWVudD4mJik7Ci0gICAgUmVmUHRyPEdy
YWRpZW50PiBmaWxsR3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxHcmFkaWVu
dDsgfQorICAgIEdyYWRpZW50KiBmaWxsR3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LmZpbGxHcmFkaWVudC5nZXQoKTsgfQogCiAgICAgdm9pZCBzZXRTaGFkb3dzSWdub3JlVHJhbnNm
b3Jtcyhib29sKTsKICAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5j
cHAKaW5kZXggM2ZkNGFkZTAxNTdlOWQ0ZjliZDdkOGU0YmZlYjQ4YWZmZTE4YzhlNS4uOTY4NjE3
NzI0MTEyNjIwMjQzMWJmOTYyMmY5ODRiYzM5MjU0NjgwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3Bw
CkBAIC01NjgsOSArNTY4LDkgQEAgRmlsbFNvdXJjZTo6RmlsbFNvdXJjZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgc3RhdGUpCiAgICAgICAgIHBhdHRlcm4ucmVwZWF0WCA9IHN0YXRlLmZp
bGxQYXR0ZXJuLT5yZXBlYXRYKCk7CiAgICAgICAgIHBhdHRlcm4ucmVwZWF0WSA9IHN0YXRlLmZp
bGxQYXR0ZXJuLT5yZXBlYXRZKCk7CiAgICAgfSBlbHNlIGlmIChzdGF0ZS5maWxsR3JhZGllbnQp
IHsKLSAgICAgICAgZ3JhZGllbnQuYmFzZSA9IGFkb3B0UmVmKHN0YXRlLmZpbGxHcmFkaWVudC0+
Y3JlYXRlUGxhdGZvcm1HcmFkaWVudCgxKSk7CisgICAgICAgIGdyYWRpZW50LmJhc2UgPSBzdGF0
ZS5maWxsR3JhZGllbnQtPmNyZWF0ZVBhdHRlcm4oMSk7CiAgICAgICAgIGlmIChzdGF0ZS5hbHBo
YSAhPSAxKQotICAgICAgICAgICAgZ3JhZGllbnQuYWxwaGFBZGp1c3RlZCA9IGFkb3B0UmVmKHN0
YXRlLmZpbGxHcmFkaWVudC0+Y3JlYXRlUGxhdGZvcm1HcmFkaWVudChzdGF0ZS5hbHBoYSkpOwor
ICAgICAgICAgICAgZ3JhZGllbnQuYWxwaGFBZGp1c3RlZCA9IHN0YXRlLmZpbGxHcmFkaWVudC0+
Y3JlYXRlUGF0dGVybihzdGF0ZS5hbHBoYSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGNvbG9yID0g
c3RhdGUuZmlsbENvbG9yOwogfQpAQCAtNTgxLDkgKzU4MSw5IEBAIFN0cm9rZVNvdXJjZTo6U3Ry
b2tlU291cmNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKICAgICBpZiAoc3Rh
dGUuc3Ryb2tlUGF0dGVybikKICAgICAgICAgcGF0dGVybiA9IGFkb3B0UmVmKHN0YXRlLnN0cm9r
ZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihBZmZpbmVUcmFuc2Zvcm0oKSkpOwogICAg
IGVsc2UgaWYgKHN0YXRlLnN0cm9rZUdyYWRpZW50KSB7Ci0gICAgICAgIGdyYWRpZW50LmJhc2Ug
PSBhZG9wdFJlZihzdGF0ZS5zdHJva2VHcmFkaWVudC0+Y3JlYXRlUGxhdGZvcm1HcmFkaWVudCgx
KSk7CisgICAgICAgIGdyYWRpZW50LmJhc2UgPSBzdGF0ZS5zdHJva2VHcmFkaWVudC0+Y3JlYXRl
UGF0dGVybigxKTsKICAgICAgICAgaWYgKHN0YXRlLmFscGhhICE9IDEpCi0gICAgICAgICAgICBn
cmFkaWVudC5hbHBoYUFkanVzdGVkID0gYWRvcHRSZWYoc3RhdGUuc3Ryb2tlR3JhZGllbnQtPmNy
ZWF0ZVBsYXRmb3JtR3JhZGllbnQoc3RhdGUuYWxwaGEpKTsKKyAgICAgICAgICAgIGdyYWRpZW50
LmFscGhhQWRqdXN0ZWQgPSBzdGF0ZS5zdHJva2VHcmFkaWVudC0+Y3JlYXRlUGF0dGVybihzdGF0
ZS5hbHBoYSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGNvbG9yID0gc3RhdGUuc3Ryb2tlQ29sb3I7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFkaWVudENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYWRpZW50Q2Fpcm8uY3BwCmluZGV4IGZiMDQ2OTJiYWI0ZjBlY2IxZTYwNjRjNmU1ZmI0YjFk
ZmMxMWE0MDkuLmYwNmZiYWQzOWVmYThmOWExNjMzMGZiOWMwZmFhMzc5ZjA4ODQyNzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fp
cm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRp
ZW50Q2Fpcm8uY3BwCkBAIC0zNyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
dm9pZCBHcmFkaWVudDo6cGxhdGZvcm1EZXN0cm95KCkKK3ZvaWQgR3JhZGllbnQ6OnN0b3BzQ2hh
bmdlZCgpCiB7CiB9CiAKQEAgLTE4NSwyNSArMTg1LDI1IEBAIHN0YXRpYyBjYWlyb19wYXR0ZXJu
X3QqIGNyZWF0ZUNvbmljKGZsb2F0IHhvLCBmbG9hdCB5bywgZmxvYXQgciwgZmxvYXQgYW5nbGVS
YWRpCiAKICNlbmRpZgogCi1jYWlyb19wYXR0ZXJuX3QqIEdyYWRpZW50OjpjcmVhdGVQbGF0Zm9y
bUdyYWRpZW50KGZsb2F0IGdsb2JhbEFscGhhKQorUmVmUHRyPGNhaXJvX3BhdHRlcm5fdD4gR3Jh
ZGllbnQ6OmNyZWF0ZVBhdHRlcm4oZmxvYXQgZ2xvYmFsQWxwaGEpCiB7Ci0gICAgY2Fpcm9fcGF0
dGVybl90KiBncmFkaWVudCA9IFdURjo6c3dpdGNoT24obV9kYXRhLAotICAgICAgICBbJl0gKGNv
bnN0IExpbmVhckRhdGEmIGRhdGEpIC0+IGNhaXJvX3BhdHRlcm5fdCogewotICAgICAgICAgICAg
cmV0dXJuIGNhaXJvX3BhdHRlcm5fY3JlYXRlX2xpbmVhcihkYXRhLnBvaW50MC54KCksIGRhdGEu
cG9pbnQwLnkoKSwgZGF0YS5wb2ludDEueCgpLCBkYXRhLnBvaW50MS55KCkpOworICAgIFJlZlB0
cjxjYWlyb19wYXR0ZXJuX3Q+IGdyYWRpZW50ID0gV1RGOjpzd2l0Y2hPbihtX2RhdGEsCisgICAg
ICAgIFsmXSAoY29uc3QgTGluZWFyRGF0YSYgZGF0YSkgLT4gUmVmUHRyPGNhaXJvX3BhdHRlcm5f
dD4geworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKGNhaXJvX3BhdHRlcm5fY3JlYXRlX2xp
bmVhcihkYXRhLnBvaW50MC54KCksIGRhdGEucG9pbnQwLnkoKSwgZGF0YS5wb2ludDEueCgpLCBk
YXRhLnBvaW50MS55KCkpKTsKICAgICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBSYWRpYWxE
YXRhJiBkYXRhKSAtPiBjYWlyb19wYXR0ZXJuX3QqIHsKLSAgICAgICAgICAgIHJldHVybiBjYWly
b19wYXR0ZXJuX2NyZWF0ZV9yYWRpYWwoZGF0YS5wb2ludDAueCgpLCBkYXRhLnBvaW50MC55KCks
IGRhdGEuc3RhcnRSYWRpdXMsIGRhdGEucG9pbnQxLngoKSwgZGF0YS5wb2ludDEueSgpLCBkYXRh
LmVuZFJhZGl1cyk7CisgICAgICAgIFsmXSAoY29uc3QgUmFkaWFsRGF0YSYgZGF0YSkgLT4gUmVm
UHRyPGNhaXJvX3BhdHRlcm5fdD4geworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKGNhaXJv
X3BhdHRlcm5fY3JlYXRlX3JhZGlhbChkYXRhLnBvaW50MC54KCksIGRhdGEucG9pbnQwLnkoKSwg
ZGF0YS5zdGFydFJhZGl1cywgZGF0YS5wb2ludDEueCgpLCBkYXRhLnBvaW50MS55KCksIGRhdGEu
ZW5kUmFkaXVzKSk7CiAgICAgICAgIH0sCiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShX
UEUpCi0gICAgICAgIFsmXSAoY29uc3QgQ29uaWNEYXRhJiBkYXRhKSAgLT4gY2Fpcm9fcGF0dGVy
bl90KiB7CisgICAgICAgIFsmXSAoY29uc3QgQ29uaWNEYXRhJiBkYXRhKSAtPiBSZWZQdHI8Y2Fp
cm9fcGF0dGVybl90PiB7CiAgICAgICAgICAgICAvLyBGSVhNRTogZGF0YSBwYXNzZWQgZm9yIGEg
Q29uaWMgZ3JhZGllbnQgZG9lc24ndCBjb250YWluIGEgcmFkaXVzLiBUaGF0J3MgYXBwYXJlbnRs
eSBjb3JyZWN0IGJlY2F1c2UgdGhlIFczQyBzcGVjCiAgICAgICAgICAgICAvLyAoaHR0cHM6Ly93
d3cudzMub3JnL1RSL2Nzcy1pbWFnZXMtNC8jY29uaWMtZ3JhZGllbnRzKSBzdGF0ZXMgYSBjb25p
YyBncmFkaWVudCBpcyBvbmx5IGRlZmluZWQgYnkgaXRzIHBvc2l0aW9uIGFuZCBhbmdsZS4KICAg
ICAgICAgICAgIC8vIFRodXMsIGhlcmUgSSBnaXZlIHRoZSByYWRpdXMgYW4gZXh0cmVtZWx5IGxh
cmdlIHZhbHVlLiBUaGUgcmVzdWx0aW5nIGdyYWRpZW50IHdpbGwgYmUgbGF0ZXIgY2xpcHBlZCBi
eSBmaWxsUmVjdC4KICAgICAgICAgICAgIC8vIEFuIGFsdGVybmF0aXZlIHNvbHV0aW9uIGNvdWxk
IGJlIHRvIGNoYW5nZSB0aGUgQVBJIGFuZCBwYXNzIGEgcmVjdCdzIHdpZHRoIGFuZCBoZWlnaHQg
dG8gb3B0aW1pemUgdGhlIGNvbXB1dGF0aW9uIG9mIHRoZSByYWRpdXMuCiAgICAgICAgICAgICBj
b25zdCBmbG9hdCByYWRpdXMgPSA0MDk2OwotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNvbmlj
KGRhdGEucG9pbnQwLngoKSwgZGF0YS5wb2ludDAueSgpLCByYWRpdXMsIGRhdGEuYW5nbGVSYWRp
YW5zLCBzdG9wcygpLCBnbG9iYWxBbHBoYSk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Y3JlYXRlQ29uaWMoZGF0YS5wb2ludDAueCgpLCBkYXRhLnBvaW50MC55KCksIHJhZGl1cywgZGF0
YS5hbmdsZVJhZGlhbnMsIHN0b3BzKCksIGdsb2JhbEFscGhhKSk7CiAjZWxzZQotICAgICAgICBb
Jl0gKGNvbnN0IENvbmljRGF0YSYpICAtPiBjYWlyb19wYXR0ZXJuX3QqIHsKKyAgICAgICAgWyZd
IChjb25zdCBDb25pY0RhdGEmKSAtPiBSZWZQdHI8Y2Fpcm9fcGF0dGVybl90PiB7CiAgICAgICAg
ICAgICAvLyBGSVhNRTogaW1wbGVtZW50IGNvbmljIGdyYWRpZW50IHJlbmRlcmluZy4KICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogI2VuZGlmCkBAIC0yMTIsNDAgKzIxMiw0MCBAQCBjYWly
b19wYXR0ZXJuX3QqIEdyYWRpZW50OjpjcmVhdGVQbGF0Zm9ybUdyYWRpZW50KGZsb2F0IGdsb2Jh
bEFscGhhKQogCiAgICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpDb25pYykgewogICAgICAgICBmb3Ig
KGNvbnN0IGF1dG8mIHN0b3AgOiBzdG9wcygpKSB7Ci0gICAgICAgICAgICBhZGRDb2xvclN0b3BS
R0JBKGdyYWRpZW50LCBzdG9wLCBnbG9iYWxBbHBoYSk7CisgICAgICAgICAgICBhZGRDb2xvclN0
b3BSR0JBKGdyYWRpZW50LmdldCgpLCBzdG9wLCBnbG9iYWxBbHBoYSk7CiAgICAgICAgIH0KICAg
ICB9CiAKICAgICBzd2l0Y2ggKG1fc3ByZWFkTWV0aG9kKSB7CiAgICAgY2FzZSBHcmFkaWVudFNw
cmVhZE1ldGhvZDo6UGFkOgotICAgICAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQoZ3JhZGll
bnQsIENBSVJPX0VYVEVORF9QQUQpOworICAgICAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQo
Z3JhZGllbnQuZ2V0KCksIENBSVJPX0VYVEVORF9QQUQpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEdyYWRpZW50U3ByZWFkTWV0aG9kOjpSZWZsZWN0OgotICAgICAgICBjYWlyb19wYXR0ZXJu
X3NldF9leHRlbmQoZ3JhZGllbnQsIENBSVJPX0VYVEVORF9SRUZMRUNUKTsKKyAgICAgICAgY2Fp
cm9fcGF0dGVybl9zZXRfZXh0ZW5kKGdyYWRpZW50LmdldCgpLCBDQUlST19FWFRFTkRfUkVGTEVD
VCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR3JhZGllbnRTcHJlYWRNZXRob2Q6OlJlcGVh
dDoKLSAgICAgICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKGdyYWRpZW50LCBDQUlST19FWFRF
TkRfUkVQRUFUKTsKKyAgICAgICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKGdyYWRpZW50Lmdl
dCgpLCBDQUlST19FWFRFTkRfUkVQRUFUKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAg
Y2Fpcm9fbWF0cml4X3QgbWF0cml4ID0gdG9DYWlyb01hdHJpeChtX2dyYWRpZW50U3BhY2VUcmFu
c2Zvcm1hdGlvbik7CiAgICAgY2Fpcm9fbWF0cml4X2ludmVydCgmbWF0cml4KTsKLSAgICBjYWly
b19wYXR0ZXJuX3NldF9tYXRyaXgoZ3JhZGllbnQsICZtYXRyaXgpOworICAgIGNhaXJvX3BhdHRl
cm5fc2V0X21hdHJpeChncmFkaWVudC5nZXQoKSwgJm1hdHJpeCk7CiAKICAgICByZXR1cm4gZ3Jh
ZGllbnQ7CiB9CiAKIHZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgUmVmUHRyPGNhaXJvX3BhdHRlcm5fdD4g
cGxhdGZvcm1HcmFkaWVudCA9IGFkb3B0UmVmKGNyZWF0ZVBsYXRmb3JtR3JhZGllbnQoMS4wKSk7
Ci0gICAgaWYgKCFwbGF0Zm9ybUdyYWRpZW50KQorICAgIGF1dG8gcGF0dGVybiA9IGNyZWF0ZVBh
dHRlcm4oMS4wKTsKKyAgICBpZiAoIXBhdHRlcm4pCiAgICAgICAgIHJldHVybjsKIAogICAgIEFT
U0VSVChjb250ZXh0Lmhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBwbGF0Zm9ybUNv
bnRleHQgPSAqY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIENhaXJvOjpzYXZlKHBs
YXRmb3JtQ29udGV4dCk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0KHBsYXRmb3JtQ29udGV4dCwgcmVj
dCwgcGxhdGZvcm1HcmFkaWVudC5nZXQoKSk7CisgICAgQ2Fpcm86OmZpbGxSZWN0KHBsYXRmb3Jt
Q29udGV4dCwgcmVjdCwgcGF0dGVybi5nZXQoKSk7CiAgICAgQ2Fpcm86OnJlc3RvcmUocGxhdGZv
cm1Db250ZXh0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKaW5k
ZXggY2Q4NjVhYWEyNjAxOWZmYzc1YWVlZTkyNjIwMmNmMTEyNTk1YmM4MS4uMjk4NWRiYmY1ZTRk
M2QxZTNmMzNlNDI1N2MyNGNlYjFlNjFkMTNiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm8uY3BwCkBAIC0xNTQsMTIgKzE1NCwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
bwogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCiB7Ci0gICAgUmVmUHRyPGNhaXJvX3BhdHRl
cm5fdD4gcGxhdGZvcm1HcmFkaWVudCA9IGFkb3B0UmVmKGdyYWRpZW50LmNyZWF0ZVBsYXRmb3Jt
R3JhZGllbnQoMS4wKSk7Ci0gICAgaWYgKCFwbGF0Zm9ybUdyYWRpZW50KQorICAgIGF1dG8gcGF0
dGVybiA9IGdyYWRpZW50LmNyZWF0ZVBhdHRlcm4oMS4wKTsKKyAgICBpZiAoIXBhdHRlcm4pCiAg
ICAgICAgIHJldHVybjsKIAogICAgIENhaXJvOjpzYXZlKG1fcGxhdGZvcm1Db250ZXh0KTsKLSAg
ICBDYWlybzo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIHBsYXRmb3JtR3JhZGll
bnQuZ2V0KCkpOworICAgIENhaXJvOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwg
cGF0dGVybi5nZXQoKSk7CiAgICAgQ2Fpcm86OnJlc3RvcmUobV9wbGF0Zm9ybUNvbnRleHQpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFk
aWVudENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50
Q0cuY3BwCmluZGV4IDk1NTFlOWJiNGFmN2QyZTVkNTNmYmJlYzA2Y2NmOGUxMGM2NjBlZTQuLjgx
MDkyYjhlNzlmNTNmYmI4M2M4ZjVhNmE3NzIxMmYwNDUzNWI2NTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCkBAIC0zNSwxOCAr
MzUsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEdyYWRpZW50OjpwbGF0Zm9y
bURlc3Ryb3koKQordm9pZCBHcmFkaWVudDo6c3RvcHNDaGFuZ2VkKCkKIHsKLSAgICBDR0dyYWRp
ZW50UmVsZWFzZShtX2dyYWRpZW50KTsKICAgICBtX2dyYWRpZW50ID0gbnVsbHB0cjsKIH0KIAot
Q0dHcmFkaWVudFJlZiBHcmFkaWVudDo6cGxhdGZvcm1HcmFkaWVudCgpCit2b2lkIEdyYWRpZW50
OjpjcmVhdGVDR0dyYWRpZW50KCkKIHsKLSAgICBpZiAobV9ncmFkaWVudCkKLSAgICAgICAgcmV0
dXJuIG1fZ3JhZGllbnQ7Ci0KLSAgICBzb3J0U3RvcHNJZk5lY2Vzc2FyeSgpOworICAgIHNvcnRT
dG9wcygpOwogCiAgICAgYXV0byBjb2xvcnNBcnJheSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11
dGFibGUoMCwgbV9zdG9wcy5zaXplKCksICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKICAgICB1
bnNpZ25lZCBudW1TdG9wcyA9IG1fc3RvcHMuc2l6ZSgpOwpAQCAtODIsMTEgKzc4LDkgQEAgQ0dH
cmFkaWVudFJlZiBHcmFkaWVudDo6cGxhdGZvcm1HcmFkaWVudCgpCiAgICAgfQogCiAgICAgaWYg
KGhhc0V4dGVuZGVkQ29sb3JzKQotICAgICAgICBtX2dyYWRpZW50ID0gQ0dHcmFkaWVudENyZWF0
ZVdpdGhDb2xvcnMoZXh0ZW5kZWRTUkdCQ29sb3JTcGFjZVJlZigpLCBjb2xvcnNBcnJheS5nZXQo
KSwgbG9jYXRpb25zLmRhdGEoKSk7CisgICAgICAgIG1fZ3JhZGllbnQgPSBhZG9wdENGKENHR3Jh
ZGllbnRDcmVhdGVXaXRoQ29sb3JzKGV4dGVuZGVkU1JHQkNvbG9yU3BhY2VSZWYoKSwgY29sb3Jz
QXJyYXkuZ2V0KCksIGxvY2F0aW9ucy5kYXRhKCkpKTsKICAgICBlbHNlCi0gICAgICAgIG1fZ3Jh
ZGllbnQgPSBDR0dyYWRpZW50Q3JlYXRlV2l0aENvbG9yQ29tcG9uZW50cyhzUkdCQ29sb3JTcGFj
ZVJlZigpLCBjb2xvckNvbXBvbmVudHMuZGF0YSgpLCBsb2NhdGlvbnMuZGF0YSgpLCBudW1TdG9w
cyk7Ci0KLSAgICByZXR1cm4gbV9ncmFkaWVudDsKKyAgICAgICAgbV9ncmFkaWVudCA9IGFkb3B0
Q0YoQ0dHcmFkaWVudENyZWF0ZVdpdGhDb2xvckNvbXBvbmVudHMoc1JHQkNvbG9yU3BhY2VSZWYo
KSwgY29sb3JDb21wb25lbnRzLmRhdGEoKSwgbG9jYXRpb25zLmRhdGEoKSwgbnVtU3RvcHMpKTsK
IH0KIAogdm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTEwMyw3ICs5Nyw5IEBAIHZvaWQgR3JhZGllbnQ6OnBhaW50
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHZvaWQgR3JhZGllbnQ6OnBhaW50KENHQ29udGV4
dFJlZiBwbGF0Zm9ybUNvbnRleHQpCiB7CiAgICAgQ0dHcmFkaWVudERyYXdpbmdPcHRpb25zIGV4
dGVuZE9wdGlvbnMgPSBrQ0dHcmFkaWVudERyYXdzQmVmb3JlU3RhcnRMb2NhdGlvbiB8IGtDR0dy
YWRpZW50RHJhd3NBZnRlckVuZExvY2F0aW9uOwotICAgIENHR3JhZGllbnRSZWYgZ3JhZGllbnQg
PSBwbGF0Zm9ybUdyYWRpZW50KCk7CisKKyAgICBpZiAoIW1fZ3JhZGllbnQpCisgICAgICAgIGNy
ZWF0ZUNHR3JhZGllbnQoKTsKIAogICAgIFdURjo6c3dpdGNoT24obV9kYXRhLAogICAgICAgICBb
Jl0gKGNvbnN0IExpbmVhckRhdGEmIGRhdGEpIHsKQEAgLTE0Niw3ICsxNDIsNyBAQCB2b2lkIEdy
YWRpZW50OjpwYWludChDR0NvbnRleHRSZWYgcGxhdGZvcm1Db250ZXh0KQogICAgICAgICAgICAg
ICAgICAgICAgICAgQ0dQb2ludCBsZWZ0ID0gQ0dQb2ludE1ha2UoZmxpcCA/IHN0YXJ0ICsgd2lk
dGggOiBzdGFydCwgYm91bmRpbmdCb3gub3JpZ2luLnkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgQ0dQb2ludCByaWdodCA9IENHUG9pbnRNYWtlKGZsaXAgPyBzdGFydCA6IHN0YXJ0ICsgd2lk
dGgsIGJvdW5kaW5nQm94Lm9yaWdpbi55KTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgQ0dD
b250ZXh0RHJhd0xpbmVhckdyYWRpZW50KHBsYXRmb3JtQ29udGV4dCwgZ3JhZGllbnQsIGxlZnQs
IHJpZ2h0LCBleHRlbmRPcHRpb25zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIENHQ29udGV4
dERyYXdMaW5lYXJHcmFkaWVudChwbGF0Zm9ybUNvbnRleHQsIG1fZ3JhZGllbnQuZ2V0KCksIGxl
ZnQsIHJpZ2h0LCBleHRlbmRPcHRpb25zKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG1fc3ByZWFkTWV0aG9kID09IEdyYWRpZW50U3ByZWFkTWV0aG9kOjpSZWZsZWN0KQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZsaXAgPSAhZmxpcDsKQEAgLTE1OCw3ICsxNTQsNyBAQCB2
b2lkIEdyYWRpZW50OjpwYWludChDR0NvbnRleHRSZWYgcGxhdGZvcm1Db250ZXh0KQogICAgICAg
ICAgICAgICAgIEZBTExUSFJPVUdIOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBH
cmFkaWVudFNwcmVhZE1ldGhvZDo6UGFkOgotICAgICAgICAgICAgICAgIENHQ29udGV4dERyYXdM
aW5lYXJHcmFkaWVudChwbGF0Zm9ybUNvbnRleHQsIGdyYWRpZW50LCBkYXRhLnBvaW50MCwgZGF0
YS5wb2ludDEsIGV4dGVuZE9wdGlvbnMpOworICAgICAgICAgICAgICAgIENHQ29udGV4dERyYXdM
aW5lYXJHcmFkaWVudChwbGF0Zm9ybUNvbnRleHQsIG1fZ3JhZGllbnQuZ2V0KCksIGRhdGEucG9p
bnQwLCBkYXRhLnBvaW50MSwgZXh0ZW5kT3B0aW9ucyk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0sCiAgICAgICAgIFsmXSAoY29uc3QgUmFkaWFsRGF0YSYgZGF0YSkgewpAQCAtMTczLDcgKzE2
OSw3IEBAIHZvaWQgR3JhZGllbnQ6OnBhaW50KENHQ29udGV4dFJlZiBwbGF0Zm9ybUNvbnRleHQp
CiAgICAgICAgICAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dCwg
LWRhdGEucG9pbnQwLngoKSwgLWRhdGEucG9pbnQwLnkoKSk7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIENHQ29udGV4dERyYXdSYWRpYWxHcmFkaWVudChwbGF0Zm9ybUNvbnRleHQsIGdy
YWRpZW50LCBkYXRhLnBvaW50MCwgZGF0YS5zdGFydFJhZGl1cywgZGF0YS5wb2ludDEsIGRhdGEu
ZW5kUmFkaXVzLCBleHRlbmRPcHRpb25zKTsKKyAgICAgICAgICAgIENHQ29udGV4dERyYXdSYWRp
YWxHcmFkaWVudChwbGF0Zm9ybUNvbnRleHQsIG1fZ3JhZGllbnQuZ2V0KCksIGRhdGEucG9pbnQw
LCBkYXRhLnN0YXJ0UmFkaXVzLCBkYXRhLnBvaW50MSwgZGF0YS5lbmRSYWRpdXMsIGV4dGVuZE9w
dGlvbnMpOwogCiAgICAgICAgICAgICBpZiAobmVlZFNjYWxpbmcpCiAgICAgICAgICAgICAgICAg
Q0dDb250ZXh0UmVzdG9yZUdTdGF0ZShwbGF0Zm9ybUNvbnRleHQpOwpAQCAtMTg2LDcgKzE4Miw3
IEBAIHZvaWQgR3JhZGllbnQ6OnBhaW50KENHQ29udGV4dFJlZiBwbGF0Zm9ybUNvbnRleHQpCiAg
ICAgICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0ocGxhdGZvcm1Db250ZXh0LCBkYXRhLnBv
aW50MC54KCksIGRhdGEucG9pbnQwLnkoKSk7CiAgICAgICAgICAgICBDR0NvbnRleHRSb3RhdGVD
VE0ocGxhdGZvcm1Db250ZXh0LCAoQ0dGbG9hdCktTV9QSV8yKTsKICAgICAgICAgICAgIENHQ29u
dGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQsIC1kYXRhLnBvaW50MC54KCksIC1kYXRh
LnBvaW50MC55KCkpOwotICAgICAgICAgICAgQ0dDb250ZXh0RHJhd0NvbmljR3JhZGllbnQocGxh
dGZvcm1Db250ZXh0LCBwbGF0Zm9ybUdyYWRpZW50KCksIGRhdGEucG9pbnQwLCBkYXRhLmFuZ2xl
UmFkaWFucyk7CisgICAgICAgICAgICBDR0NvbnRleHREcmF3Q29uaWNHcmFkaWVudChwbGF0Zm9y
bUNvbnRleHQsIG1fZ3JhZGllbnQuZ2V0KCksIGRhdGEucG9pbnQwLCBkYXRhLmFuZ2xlUmFkaWFu
cyk7CiAgICAgICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKHBsYXRmb3JtQ29udGV4dCk7
CiAjZWxzZQogICAgICAgICAgICAgVU5VU0VEX1BBUkFNKGRhdGEpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRl
bXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1zLmgKaW5kZXggMjViZjJiOWI5MzU0MmUyMDkyMDkwOGUwNGFjMjZjMDA5YjNl
ZWI4YS4uY2NkMTE1MDI3NmJiNjUxYmJmMWJhNzQxNjMwZTIwOGRhYTQ1YWU3NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCkBAIC0yNywxNSArMjcsMTQgQEAKIAogI2luY2x1ZGUg
IkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKICNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgotI2lu
Y2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCiAjaW5j
bHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZm
ZXIuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1
ZGUgIlBhdHRlcm4uaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KIAogbmFtZXNwYWNlIFdU
RiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lh
L2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVj
b3JkZXIuY3BwCmluZGV4IGJkNWJjNTQyMjE2Yjk5NzZmNjY2YzQ0MDcyN2JmNjBjZWRkN2Y4OWMu
LjJmOGRhMWZiZDRkYzkwNDk0ZWU1ZmJhNzZkNzZiN2Q4YzNjOGRhMzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJv
T3BlcmF0aW9uUmVjb3JkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwCkBAIC0y
OTEsNyArMjkxLDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKICAgICAgICAgfQogICAgIH07
CiAKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgYWRvcHRSZWYoZ3Jh
ZGllbnQuY3JlYXRlUGxhdGZvcm1HcmFkaWVudCgxLjApKSkpOworICAgIGFwcGVuZChjcmVhdGVD
b21tYW5kPEZpbGxSZWN0PihyZWN0LCBncmFkaWVudC5jcmVhdGVQYXR0ZXJuKDEuMCkpKTsKIH0K
IAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3Bl
cmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuY3BwCmluZGV4IDE1
MDI0NjgxNDk0MWQ2NzczNTBlZDMyODg2NWZjODdlNzA0YmFiYzAuLjg4MzVmODhkMWJiY2QyMDNj
MzI1NjJkYTI0MTRjYmMyN2I2ZmIwZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuY3BwCkBAIC0zMDEs
NyArMzAxLDcgQEAgRmlsbFNvdXJjZTo6RmlsbFNvdXJjZShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgc3RhdGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYKICAgICAgICAgQWZmaW5lVHJhbnNm
b3JtIHVzZXJUb0Jhc2VDVE07IC8vIEZJWE1FOiBUaGlzIGlzbid0IHJlYWxseSBuZWVkZWQgb24g
V2luZG93cwogICAgICAgICBicnVzaCA9IHN0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9y
bVBhdHRlcm4oY29udGV4dCwgc3RhdGUuYWxwaGEsIHVzZXJUb0Jhc2VDVE0pOwogICAgIH0gZWxz
ZSBpZiAoc3RhdGUuZmlsbEdyYWRpZW50ICYmICFzdGF0ZS5maWxsR3JhZGllbnQtPnN0b3BzKCku
aXNFbXB0eSgpKQotICAgICAgICBicnVzaCA9IHN0YXRlLmZpbGxHcmFkaWVudC0+Y3JlYXRlUGxh
dGZvcm1HcmFkaWVudElmTmVjZXNzYXJ5KHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7
CisgICAgICAgIGJydXNoID0gc3RhdGUuZmlsbEdyYWRpZW50LT5jcmVhdGVCcnVzaChwbGF0Zm9y
bUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwogICAgIGVsc2UKICAgICAgICAgYnJ1c2ggPSBwbGF0
Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3IoY29sb3IpOwogfQpAQCAtMzE4LDcgKzMxOCw3IEBA
IFN0cm9rZVNvdXJjZTo6U3Ryb2tlU291cmNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBz
dGF0ZSwgY29uc3QgR3JhcGhpY3NDb250CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9C
YXNlQ1RNOyAvLyBGSVhNRTogVGhpcyBpc24ndCByZWFsbHkgbmVlZGVkIG9uIFdpbmRvd3MKICAg
ICAgICAgYnJ1c2ggPSBzdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4o
Y29udGV4dCwgc3RhdGUuYWxwaGEsIHVzZXJUb0Jhc2VDVE0pOwogICAgIH0gZWxzZSBpZiAoc3Rh
dGUuc3Ryb2tlR3JhZGllbnQpCi0gICAgICAgIGJydXNoID0gc3RhdGUuc3Ryb2tlR3JhZGllbnQt
PmNyZWF0ZVBsYXRmb3JtR3JhZGllbnRJZk5lY2Vzc2FyeShwbGF0Zm9ybUNvbnRleHQucmVuZGVy
VGFyZ2V0KCkpOworICAgICAgICBicnVzaCA9IHN0YXRlLnN0cm9rZUdyYWRpZW50LT5jcmVhdGVC
cnVzaChwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwogICAgIGVsc2UKICAgICAgICAg
YnJ1c2ggPSBwbGF0Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3IoY29sb3IpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0
MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGly
ZWN0MkQuY3BwCmluZGV4IDA0ZTRkNzY0OTMyZmE4OTU0ODAyOGZlMzU5ZTMzZDhiNjU2NzQ5NWQu
LjBkZmVhYjY3MmVkMjFlMWRiNWM2ZGI3OGIxYjE0ZGQ3Mzk0OWEwYjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3Qy
RC5jcHAKQEAgLTMxLDI5ICszMSwxNCBAQAogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVj
dDJELmgiCiAjaW5jbHVkZSA8ZDJkMS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0j
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCiAjZGVmaW5lIEdSQURJRU5UX0RSQVdJTkcgMwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgR3JhZGllbnQ6OnBsYXRmb3JtRGVzdHJveSgp
Cit2b2lkIEdyYWRpZW50OjpzdG9wc0NoYW5nZWQoKQogewotICAgIGlmIChtX2dyYWRpZW50KQot
ICAgICAgICBtX2dyYWRpZW50LT5SZWxlYXNlKCk7Ci0gICAgbV9ncmFkaWVudCA9IG51bGxwdHI7
Ci19Ci0KLUlEMkQxQnJ1c2gqIEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KCkKLXsKLSAgICBB
U1NFUlQobV9ncmFkaWVudCk7Ci0gICAgcmV0dXJuIG1fZ3JhZGllbnQ7Ci19Ci0KLUlEMkQxQnJ1
c2gqIEdyYWRpZW50OjpjcmVhdGVQbGF0Zm9ybUdyYWRpZW50SWZOZWNlc3NhcnkoSUQyRDFSZW5k
ZXJUYXJnZXQqIGNvbnRleHQpCi17Ci0gICAgZ2VuZXJhdGVHcmFkaWVudChjb250ZXh0KTsKLSAg
ICByZXR1cm4gbV9ncmFkaWVudDsKKyAgICBtX2JydXNoID0gbnVsbHB0cjsKIH0KIAogc3RhdGlj
IGJvb2wgY2lyY2xlSXNFbnRpcmVseUNvbnRhaW5lZChjb25zdCBGbG9hdFBvaW50JiBjZW50ZXJB
LCBmbG9hdCByYWRpdXNBLCBjb25zdCBGbG9hdFBvaW50JiBjZW50ZXJCLCBmbG9hdCByYWRpdXNC
KQpAQCAtNjUsMTUgKzUwLDE2IEBAIHN0YXRpYyBib29sIGNpcmNsZUlzRW50aXJlbHlDb250YWlu
ZWQoY29uc3QgRmxvYXRQb2ludCYgY2VudGVyQSwgZmxvYXQgcmFkaXVzQSwKICAgICByZXR1cm4g
ZGVsdGFYICogZGVsdGFYICsgZGVsdGFZICogZGVsdGFZIDwgZGVsdGFSYWRpdXMgKiBkZWx0YVJh
ZGl1cyAmJiByYWRpdXNBIDwgcmFkaXVzQjsKIH0KIAotdm9pZCBHcmFkaWVudDo6Z2VuZXJhdGVH
cmFkaWVudChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQorSUQyRDFCcnVzaCogR3Jh
ZGllbnQ6OmNyZWF0ZUJydXNoKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCiB7Ci0g
ICAgc29ydFN0b3BzSWZOZWNlc3NhcnkoKTsKKyAgICBzb3J0U3RvcHMoKTsKIAogICAgIFZlY3Rv
cjxEMkQxX0dSQURJRU5UX1NUT1A+IGdyYWRpZW50U3RvcHM7Ci0gICAgLy8gRklYTUU6IEFkZCBz
dXBwb3J0IGZvciBFeHRlbmRlZENvbG9yLgotICAgIGZvciAoYXV0byBzdG9wIDogbV9zdG9wcykg
eworICAgIGdyYWRpZW50U3RvcHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3N0b3BzLnNpemUo
KSk7CisgICAgZm9yIChhdXRvJiBzdG9wIDogbV9zdG9wcykgeworICAgICAgICAvLyBGSVhNRTog
QWRkIHN1cHBvcnQgZm9yIG5vbi1zUkdCQSBjb2xvciBzcGFjZXMuCiAgICAgICAgIGF1dG8gW3Is
IGcsIGIsIGFdIHN0b3AuY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwotICAgICAgICBncmFk
aWVudFN0b3BzLmFwcGVuZChEMkQxOjpHcmFkaWVudFN0b3Aoc3RvcC5vZmZzZXQsIEQyRDE6OkNv
bG9yRihyLCBnLCBiLCBhKSkpOworICAgICAgICBncmFkaWVudFN0b3BzLmdyYWRpZW50U3RvcHMu
dW5jaGVja2VkQXBwZW5kKEQyRDE6OkdyYWRpZW50U3RvcChzdG9wLm9mZnNldCwgRDJEMTo6Q29s
b3JGKHIsIGcsIGIsIGEpKSk7CiAgICAgfQogCiAgICAgV1RGOjpzd2l0Y2hPbihtX2RhdGEsCkBA
IC0xMjIsMTEgKzEwOCw2IEBAIHZvaWQgR3JhZGllbnQ6OmdlbmVyYXRlR3JhZGllbnQoSUQyRDFS
ZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKICAgICBIUkVTVUxUIGhyID0gcmVuZGVyVGFyZ2V0
LT5DcmVhdGVHcmFkaWVudFN0b3BDb2xsZWN0aW9uKGdyYWRpZW50U3RvcHMuZGF0YSgpLCBncmFk
aWVudFN0b3BzLnNpemUoKSwgJmdyYWRpZW50U3RvcENvbGxlY3Rpb24pOwogICAgIFJFTEVBU0Vf
QVNTRVJUKFNVQ0NFRURFRChocikpOwogCi0gICAgaWYgKG1fZ3JhZGllbnQpIHsKLSAgICAgICAg
bV9ncmFkaWVudC0+UmVsZWFzZSgpOwotICAgICAgICBtX2dyYWRpZW50ID0gbnVsbHB0cjsKLSAg
ICB9Ci0KICAgICBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKICAgICAgICAgWyZdIChjb25zdCBMaW5l
YXJEYXRhJiBkYXRhKSB7CiAgICAgICAgICAgICBJRDJEMUxpbmVhckdyYWRpZW50QnJ1c2gqIGxp
bmVhckdyYWRpZW50ID0gbnVsbHB0cjsKQEAgLTEzNSw3ICsxMTYsNyBAQCB2b2lkIEdyYWRpZW50
OjpnZW5lcmF0ZUdyYWRpZW50KElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCiAgICAg
ICAgICAgICAgICAgRDJEMTo6QnJ1c2hQcm9wZXJ0aWVzKCksIGdyYWRpZW50U3RvcENvbGxlY3Rp
b24uZ2V0KCksCiAgICAgICAgICAgICAgICAgJmxpbmVhckdyYWRpZW50KTsKICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotICAgICAgICAgICAgbV9ncmFkaWVudCA9
IGxpbmVhckdyYWRpZW50OworICAgICAgICAgICAgbV9icnVzaCA9IGFkb3B0Q09NKGxpbmVhckdy
YWRpZW50KTsKICAgICAgICAgfSwKICAgICAgICAgWyZdIChjb25zdCBSYWRpYWxEYXRhJiBkYXRh
KSB7CiAgICAgICAgICAgICBGbG9hdFNpemUgb2Zmc2V0OwpAQCAtMTU0LDE0ICsxMzUsMTUgQEAg
dm9pZCBHcmFkaWVudDo6Z2VuZXJhdGVHcmFkaWVudChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVy
VGFyZ2V0KQogICAgICAgICAgICAgICAgIEQyRDE6OkJydXNoUHJvcGVydGllcygpLCBncmFkaWVu
dFN0b3BDb2xsZWN0aW9uLmdldCgpLAogICAgICAgICAgICAgICAgICZyYWRpYWxHcmFkaWVudCk7
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAgICAg
IG1fZ3JhZGllbnQgPSByYWRpYWxHcmFkaWVudDsKKyAgICAgICAgICAgIG1fYnJ1c2ggPSBhZG9w
dENPTShyYWRpYWxHcmFkaWVudCk7CiAgICAgICAgIH0sCiAgICAgICAgIFsmXSAoY29uc3QgQ29u
aWNEYXRhJikgewogICAgICAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudCBjb25pYyBncmFkaWVu
dCByZW5kZXJpbmcuCisgICAgICAgICAgICBtX2JydXNoID0gbnVsbHB0cjsKICAgICAgICAgfQog
ICAgICk7CiAKLSAgICBoYXNoKCk7CisgICAgcmV0dXJuIG1fYnJ1c2guZ2V0KCk7CiB9CiAKIHZv
aWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCkBAIC0xNzAsMTUgKzE1MiwxNiBAQCB2b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogCiAgICAgV1RGOjpz
d2l0Y2hPbihtX2RhdGEsCiAgICAgICAgIFsmXSAoY29uc3QgTGluZWFyRGF0YSYgZGF0YSkgewot
ICAgICAgICAgICAgaWYgKCFtX2NhY2hlZEhhc2ggfHwgIW1fZ3JhZGllbnQpCi0gICAgICAgICAg
ICAgICAgZ2VuZXJhdGVHcmFkaWVudChkMmRDb250ZXh0KTsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBJZiB3ZSBoYXZlIGEgYnJ1c2gsIHdoeSBjYW4gd2UgcmUtdXNlIGl0PyBXaGF0IGd1YXJhbnRl
ZXMgaXQncyByaWdodCBmb3IgdGhpcyBjb250ZXh0PworICAgICAgICAgICAgaWYgKCFtX2JydXNo
KQorICAgICAgICAgICAgICAgIGNyZWF0ZUJydXNoKGQyZENvbnRleHQpOwogCiAjaWYgQVNTRVJU
X0VOQUJMRUQKICAgICAgICAgICAgIGQyZENvbnRleHQtPlNldFRhZ3MoR1JBRElFTlRfRFJBV0lO
RywgX19MSU5FX18pOwogI2VuZGlmCiAKICAgICAgICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQy
ZFJlY3QgPSByZWN0OwotICAgICAgICAgICAgZDJkQ29udGV4dC0+RmlsbFJlY3RhbmdsZSgmZDJk
UmVjdCwgbV9ncmFkaWVudCk7CisgICAgICAgICAgICBkMmRDb250ZXh0LT5GaWxsUmVjdGFuZ2xl
KCZkMmRSZWN0LCBtX2JydXNoLmdldCgpKTsKICAgICAgICAgfSwKICAgICAgICAgWyZdIChjb25z
dCBSYWRpYWxEYXRhJiBkYXRhKSB7CiAgICAgICAgICAgICBib29sIG5lZWRTY2FsaW5nID0gZGF0
YS5hc3BlY3RSYXRpbyAhPSAxOwpAQCAtMTk5LDE1ICsxODIsMTYgQEAgdm9pZCBHcmFkaWVudDo6
ZmlsbChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAg
ICAgICAgICAgICAgICBkMmRDb250ZXh0LT5TZXRUcmFuc2Zvcm0oY3RtKTsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgaWYgKCFtX2NhY2hlZEhhc2ggfHwgIW1fZ3JhZGllbnQpCi0gICAg
ICAgICAgICAgICAgZ2VuZXJhdGVHcmFkaWVudChkMmRDb250ZXh0KTsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBJZiB3ZSBoYXZlIGEgYnJ1c2gsIHdoeSBjYW4gd2UgcmUtdXNlIGl0PyBXaGF0IGd1
YXJhbnRlZXMgaXQncyByaWdodCBmb3IgdGhpcyBjb250ZXh0PworICAgICAgICAgICAgaWYgKCFt
X2JydXNoKQorICAgICAgICAgICAgICAgIGNyZWF0ZUJydXNoKGQyZENvbnRleHQpOwogCiAjaWYg
QVNTRVJUX0VOQUJMRUQKICAgICAgICAgICAgIGQyZENvbnRleHQtPlNldFRhZ3MoR1JBRElFTlRf
RFJBV0lORywgX19MSU5FX18pOwogI2VuZGlmCiAKICAgICAgICAgICAgIGNvbnN0IEQyRDFfUkVD
VF9GIGQyZFJlY3QgPSByZWN0OwotICAgICAgICAgICAgZDJkQ29udGV4dC0+RmlsbFJlY3Rhbmds
ZSgmZDJkUmVjdCwgbV9ncmFkaWVudCk7CisgICAgICAgICAgICBkMmRDb250ZXh0LT5GaWxsUmVj
dGFuZ2xlKCZkMmRSZWN0LCBtX2JydXNoLmdldCgpKTsKIAogICAgICAgICAgICAgaWYgKG5lZWRT
Y2FsaW5nKQogICAgICAgICAgICAgICAgIGNvbnRleHQucmVzdG9yZSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxE
aXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0SW1wbERpcmVjdDJELmNwcAppbmRleCBkYzlmNWZlNmZkNzQ3NDFhMGM1NjJjZjlj
YzdhZWUxMTcxOGY5M2NkLi5kNjQ0NWQ3MGNiMzAzN2U3MmFlMjkwNmQ2NjM2ZWZmYjQ0ODFkNzU4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0SW1wbERpcmVjdDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmNwcApAQCAtMTU1LDExICsx
NTUsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGMKIAogdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdy
YWRpZW50KQogewotICAgIENPTVB0cjxJRDJEMUJydXNoPiBwbGF0Zm9ybUdyYWRpZW50ID0gZ3Jh
ZGllbnQuY3JlYXRlUGxhdGZvcm1HcmFkaWVudElmTmVjZXNzYXJ5KG1fcGxhdGZvcm1Db250ZXh0
LnJlbmRlclRhcmdldCgpKTsKLSAgICBpZiAoIXBsYXRmb3JtR3JhZGllbnQpCisgICAgYXV0byBi
cnVzaCA9IGdyYWRpZW50LmNyZWF0ZUJydXNoKG1fcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdl
dCgpKTsKKyAgICBpZiAoIWJydXNoKQogICAgICAgICByZXR1cm47CiAKLSAgICBEaXJlY3QyRDo6
ZmlsbFJlY3RXaXRoR3JhZGllbnQobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIHBsYXRmb3JtR3Jh
ZGllbnQuZ2V0KCkpOworICAgIERpcmVjdDJEOjpmaWxsUmVjdFdpdGhHcmFkaWVudChtX3BsYXRm
b3JtQ29udGV4dCwgcmVjdCwgYnJ1c2guZ2V0KCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUg
YmxlbmRNb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9s
bEFuaW1hdG9yTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1h
dG9yTWFjLm1tCmluZGV4IDVmNjUzMDNjZWE3YjEwYTkwMzEzZTdjOTk5M2M5Nzk3ZjBiMzM5ZWQu
LjA5ZDgwNThiNWIyNTZiYzViNGM5YmE5ZDRhYjNhMWU1NWM3NGZkMWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KQEAgLTI4LDcgKzI4
LDcgQEAKIAogI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQogCi0jaW1wb3J0ICJGbG9hdFBv
aW50LmgiCisjaW1wb3J0ICJHcmFkaWVudC5oIgogI2ltcG9ydCAiR3JhcGhpY3NMYXllci5oIgog
I2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiTlNTY3JvbGxlckltcERldGFpbHMuaCIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQppbmRleCA0MjU3NWYwZTQ1
ZmVjMjJjOWFiZmY2NzUzMThhOTIxN2Y2ZGVkMmY3Li5lZTE4OWNmOTg3M2YwYzBhMDM2M2UzNmUz
NzQ0MTMwZDg0YzJhOTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
SU9TLm1tCkBAIC05MDAsNyArOTAwLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9n
cmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBQYWludEkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICBjb25zdCBpbnQgcHJvZ3Jlc3NCYXJIZWlnaHQgPSA5Owot
ICAgIGNvbnN0IGZsb2F0IHZlcnRpY2FsT2Zmc2V0ID0gKHJlY3QuaGVpZ2h0KCkgLSBwcm9ncmVz
c0JhckhlaWdodCkgLyAyLjA7CisgICAgY29uc3QgZmxvYXQgdmVydGljYWxPZmZzZXQgPSAocmVj
dC5oZWlnaHQoKSAtIHByb2dyZXNzQmFySGVpZ2h0KSAvIDIuMGY7CiAKICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIocGFpbnRJbmZvLmNvbnRleHQoKSk7CiAgICAgaWYg
KHJlY3Qud2lkdGgoKSA8IDEwIHx8IHJlY3QuaGVpZ2h0KCkgPCA5KSB7CkBAIC05MTIsMjEgKzkx
MiwyMSBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFByb2dyZXNzQmFyKGNvbnN0IFJlbmRl
ck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFBhaW50SQogICAgIC8vIDEpIERyYXcgdGhlIHByb2dy
ZXNzIGJhciB0cmFjay4KICAgICAvLyAxLjEpIERyYXcgdGhlIHdoaXRlIGJhY2tncm91bmQgd2l0
aCBncmV5IGdyYWRpZW50IGJvcmRlci4KICAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQgPSBw
YWludEluZm8uY29udGV4dCgpOwotICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDAuNjgp
OworICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDAuNjhmKTsKICAgICBjb250ZXh0LnNl
dFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKIAogICAgIGNvbnN0IGZsb2F0IHZlcnRpY2FsUmVu
ZGVyaW5nUG9zaXRpb24gPSByZWN0LnkoKSArIHZlcnRpY2FsT2Zmc2V0OwogICAgIGF1dG8gc3Ry
b2tlR3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEdyYWRpZW50OjpMaW5lYXJEYXRhIHsgRmxv
YXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiksIEZsb2F0UG9pbnQo
cmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyBwcm9ncmVzc0JhckhlaWdodCAt
IDEpIH0pOwotICAgIHN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBtYWtlU2ltcGxl
Q29sb3IoMTQxLCAxNDEsIDE0MSkpOwotICAgIHN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3Ao
MC40NSwgbWFrZVNpbXBsZUNvbG9yKDIzOCwgMjM4LCAyMzgpKTsKLSAgICBzdHJva2VHcmFkaWVu
dC0+YWRkQ29sb3JTdG9wKDAuNTUsIG1ha2VTaW1wbGVDb2xvcigyMzgsIDIzOCwgMjM4KSk7Ci0g
ICAgc3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgxLjAsIG1ha2VTaW1wbGVDb2xvcigxNDEs
IDE0MSwgMTQxKSk7CisgICAgc3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCh7IDAuMGYsIG1h
a2VTaW1wbGVDb2xvcigxNDEsIDE0MSwgMTQxKSB9KTsKKyAgICBzdHJva2VHcmFkaWVudC0+YWRk
Q29sb3JTdG9wKHsgMC40NWYsIG1ha2VTaW1wbGVDb2xvcigyMzgsIDIzOCwgMjM4KSB9KTsKKyAg
ICBzdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKHsgMC41NWYsIG1ha2VTaW1wbGVDb2xvcigy
MzgsIDIzOCwgMjM4KSB9KTsKKyAgICBzdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKHsgMS4w
ZiwgbWFrZVNpbXBsZUNvbG9yKDE0MSwgMTQxLCAxNDEpIH0pOwogICAgIGNvbnRleHQuc2V0U3Ry
b2tlR3JhZGllbnQoV1RGTW92ZShzdHJva2VHcmFkaWVudCkpOwogCiAgICAgY29udGV4dC5zZXRG
aWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKIAogICAgIFBhdGggdHJhY2tQYXRoOwotICAgIEZsb2F0
UmVjdCB0cmFja1JlY3QocmVjdC54KCkgKyAwLjI1LCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9u
ICsgMC4yNSwgcmVjdC53aWR0aCgpIC0gMC41LCBwcm9ncmVzc0JhckhlaWdodCAtIDAuNSk7Cisg
ICAgRmxvYXRSZWN0IHRyYWNrUmVjdChyZWN0LngoKSArIDAuMjVmLCB2ZXJ0aWNhbFJlbmRlcmlu
Z1Bvc2l0aW9uICsgMC4yNWYsIHJlY3Qud2lkdGgoKSAtIDAuNWYsIHByb2dyZXNzQmFySGVpZ2h0
IC0gMC41Zik7CiAgICAgRmxvYXRTaXplIHJvdW5kZWRDb3JuZXJSYWRpdXMoNSwgNCk7CiAgICAg
dHJhY2tQYXRoLmFkZFJvdW5kZWRSZWN0KHRyYWNrUmVjdCwgcm91bmRlZENvcm5lclJhZGl1cyk7
CiAgICAgY29udGV4dC5kcmF3UGF0aCh0cmFja1BhdGgpOwpAQCAtOTM2LDkgKzkzNiw5IEBAIGJv
b2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0JiBy
ZW5kZXJlciwgY29uc3QgUGFpbnRJCiAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5jbGlwUm91bmRl
ZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChib3JkZXIsIHJvdW5kZWRDb3JuZXJSYWRpdXMsIHJvdW5k
ZWRDb3JuZXJSYWRpdXMsIHJvdW5kZWRDb3JuZXJSYWRpdXMsIHJvdW5kZWRDb3JuZXJSYWRpdXMp
KTsKIAogICAgIGZsb2F0IHVwcGVyR3JhZGllbnRIZWlnaHQgPSBwcm9ncmVzc0JhckhlaWdodCAv
IDIuOwotICAgIGF1dG8gdXBwZXJHcmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoR3JhZGllbnQ6
OkxpbmVhckRhdGEgeyBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0
aW9uICsgMC41KSwgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlv
biArIHVwcGVyR3JhZGllbnRIZWlnaHQgLSAxLjUpIH0pOwotICAgIHVwcGVyR3JhZGllbnQtPmFk
ZENvbG9yU3RvcCgwLjAsIG1ha2VTaW1wbGVDb2xvcigxMzMsIDEzMywgMTMzLCAxODgpKTsKLSAg
ICB1cHBlckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMS4wLCBtYWtlU2ltcGxlQ29sb3IoMTgsIDE4
LCAxOCwgNTEpKTsKKyAgICBhdXRvIHVwcGVyR3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEdy
YWRpZW50OjpMaW5lYXJEYXRhIHsgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJp
bmdQb3NpdGlvbiArIDAuNWYpLCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmlu
Z1Bvc2l0aW9uICsgdXBwZXJHcmFkaWVudEhlaWdodCAtIDEuNSkgfSk7CisgICAgdXBwZXJHcmFk
aWVudC0+YWRkQ29sb3JTdG9wKHsgMC4wZiwgbWFrZVNpbXBsZUNvbG9yKDEzMywgMTMzLCAxMzMs
IDE4OCkgfSk7CisgICAgdXBwZXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKHsgMS4wZiwgbWFrZVNp
bXBsZUNvbG9yKDE4LCAxOCwgMTgsIDUxKSB9KTsKICAgICBjb250ZXh0LnNldEZpbGxHcmFkaWVu
dChXVEZNb3ZlKHVwcGVyR3JhZGllbnQpKTsKIAogICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRS
ZWN0KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uLCByZWN0LndpZHRoKCksIHVw
cGVyR3JhZGllbnRIZWlnaHQpKTsKQEAgLTk0NywyNyArOTQ3LDI3IEBAIGJvb2wgUmVuZGVyVGhl
bWVJT1M6OnBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29u
c3QgUGFpbnRJCiAgICAgaWYgKHJlbmRlclByb2dyZXNzLmlzRGV0ZXJtaW5hdGUoKSkgewogICAg
ICAgICAvLyAyKSBEcmF3IHRoZSBwcm9ncmVzcyBiYXIuCiAgICAgICAgIGRvdWJsZSBwb3NpdGlv
biA9IGNsYW1wVG8ocmVuZGVyUHJvZ3Jlc3MucG9zaXRpb24oKSwgMC4wLCAxLjApOwotICAgICAg
ICBkb3VibGUgYmFyV2lkdGggPSBwb3NpdGlvbiAqIHJlY3Qud2lkdGgoKTsKLSAgICAgICAgYXV0
byBiYXJHcmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoR3JhZGllbnQ6OkxpbmVhckRhdGEgeyBG
bG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgMC41KSwgRmxv
YXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIHByb2dyZXNzQmFy
SGVpZ2h0IC0gMSkgfSk7Ci0gICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBt
YWtlU2ltcGxlQ29sb3IoMTk1LCAyMTcsIDI0NykpOwotICAgICAgICBiYXJHcmFkaWVudC0+YWRk
Q29sb3JTdG9wKDAuNDUsIG1ha2VTaW1wbGVDb2xvcigxMTgsIDE2NCwgMjI4KSk7Ci0gICAgICAg
IGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC40OSwgbWFrZVNpbXBsZUNvbG9yKDExOCwgMTY0
LCAyMjgpKTsKLSAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjUxLCBtYWtlU2lt
cGxlQ29sb3IoMzYsIDExNCwgMjEwKSk7Ci0gICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0
b3AoMC41NSwgbWFrZVNpbXBsZUNvbG9yKDM2LCAxMTQsIDIxMCkpOwotICAgICAgICBiYXJHcmFk
aWVudC0+YWRkQ29sb3JTdG9wKDEuMCwgbWFrZVNpbXBsZUNvbG9yKDU3LCAxNDIsIDI0NCkpOwor
ICAgICAgICBmbG9hdCBiYXJXaWR0aCA9IHBvc2l0aW9uICogcmVjdC53aWR0aCgpOworICAgICAg
ICBhdXRvIGJhckdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShHcmFkaWVudDo6TGluZWFyRGF0
YSB7IEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyAwLjVm
KSwgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIHByb2dy
ZXNzQmFySGVpZ2h0IC0gMSkgfSk7CisgICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3Ao
eyAwLjBmLCBtYWtlU2ltcGxlQ29sb3IoMTk1LCAyMTcsIDI0NykgfSk7CisgICAgICAgIGJhckdy
YWRpZW50LT5hZGRDb2xvclN0b3AoeyAwLjQ1ZiwgbWFrZVNpbXBsZUNvbG9yKDExOCwgMTY0LCAy
MjgpIH0pOworICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKHsgMC40OWYsIG1ha2VT
aW1wbGVDb2xvcigxMTgsIDE2NCwgMjI4KSB9KTsKKyAgICAgICAgYmFyR3JhZGllbnQtPmFkZENv
bG9yU3RvcCh7IDAuNTFmLCBtYWtlU2ltcGxlQ29sb3IoMzYsIDExNCwgMjEwKSB9KTsKKyAgICAg
ICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCh7IDAuNTVmLCBtYWtlU2ltcGxlQ29sb3IoMzYs
IDExNCwgMjEwKSB9KTsKKyAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCh7IDEuMGYs
IG1ha2VTaW1wbGVDb2xvcig1NywgMTQyLCAyNDQpIH0pOwogICAgICAgICBjb250ZXh0LnNldEZp
bGxHcmFkaWVudChXVEZNb3ZlKGJhckdyYWRpZW50KSk7CiAKICAgICAgICAgYXV0byBiYXJTdHJv
a2VHcmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoR3JhZGllbnQ6OkxpbmVhckRhdGEgeyBGbG9h
dFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uKSwgRmxvYXRQb2ludChy
ZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIHByb2dyZXNzQmFySGVpZ2h0IC0g
MSkgfSk7Ci0gICAgICAgIGJhclN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBtYWtl
U2ltcGxlQ29sb3IoOTUsIDEwNywgMTgzKSk7Ci0gICAgICAgIGJhclN0cm9rZUdyYWRpZW50LT5h
ZGRDb2xvclN0b3AoMC41LCBtYWtlU2ltcGxlQ29sb3IoNjYsIDEwNiwgMTc0LCAyNDApKTsKLSAg
ICAgICAgYmFyU3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgxLjAsIG1ha2VTaW1wbGVDb2xv
cigzOCwgMTA0LCAxNjYpKTsKKyAgICAgICAgYmFyU3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3Rv
cCh7IDAuMGYsIG1ha2VTaW1wbGVDb2xvcig5NSwgMTA3LCAxODMpIH0pOworICAgICAgICBiYXJT
dHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKHsgMC41ZiwgbWFrZVNpbXBsZUNvbG9yKDY2LCAx
MDYsIDE3NCwgMjQwKSB9KTsKKyAgICAgICAgYmFyU3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3Rv
cCh7IDEuMGYsIG1ha2VTaW1wbGVDb2xvcigzOCwgMTA0LCAxNjYpIH0pOwogICAgICAgICBjb250
ZXh0LnNldFN0cm9rZUdyYWRpZW50KFdURk1vdmUoYmFyU3Ryb2tlR3JhZGllbnQpKTsKIAogICAg
ICAgICBQYXRoIGJhclBhdGg7CiAgICAgICAgIGludCBsZWZ0ID0gcmVjdC54KCk7CiAgICAgICAg
IGlmICghcmVuZGVyUHJvZ3Jlc3Muc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAg
ICAgICAgICAgICBsZWZ0ID0gcmVjdC5tYXhYKCkgLSBiYXJXaWR0aDsKLSAgICAgICAgRmxvYXRS
ZWN0IGJhclJlY3QobGVmdCArIDAuMjUsIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyAwLjI1
LCBzdGQ6Om1heChiYXJXaWR0aCAtIDAuNSwgMC4wKSwgcHJvZ3Jlc3NCYXJIZWlnaHQgLSAwLjUp
OworICAgICAgICBGbG9hdFJlY3QgYmFyUmVjdChsZWZ0ICsgMC4yNWYsIHZlcnRpY2FsUmVuZGVy
aW5nUG9zaXRpb24gKyAwLjI1Ziwgc3RkOjptYXgoYmFyV2lkdGggLSAwLjVmLCAwLjBmKSwgcHJv
Z3Jlc3NCYXJIZWlnaHQgLSAwLjVmKTsKICAgICAgICAgYmFyUGF0aC5hZGRSb3VuZGVkUmVjdChi
YXJSZWN0LCByb3VuZGVkQ29ybmVyUmFkaXVzKTsKICAgICAgICAgY29udGV4dC5kcmF3UGF0aChi
YXJQYXRoKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAppbmRleCA1NDgzNTgzYWM2YWUxYTUz
NmFiODkxYjkzYWVkNWVlNWE3N2YwOTg3Li5hMGZkM2MzY2JhMmIwMzBjNzE0NTQ4OTgxMGIxMjQ3
NTZjMmFjYTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlR3JhZGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKQEAgLTIzNCwxMiArMjM0LDEwIEBAIHZv
aWQgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxl
bWVudCYgcmVuZGVyZXIsIEdyYXBoCiAKIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6
YWRkU3RvcHMoR3JhZGllbnREYXRhKiBncmFkaWVudERhdGEsIGNvbnN0IFZlY3RvcjxHcmFkaWVu
dDo6Q29sb3JTdG9wPiYgc3RvcHMsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsK
KyAgICBBU1NFUlQoZ3JhZGllbnREYXRhKTsKICAgICBBU1NFUlQoZ3JhZGllbnREYXRhLT5ncmFk
aWVudCk7Ci0KLSAgICBmb3IgKEdyYWRpZW50OjpDb2xvclN0b3Agc3RvcCA6IHN0b3BzKSB7Ci0g
ICAgICAgIHN0b3AuY29sb3IgPSBzdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihzdG9w
LmNvbG9yKTsKLSAgICAgICAgZ3JhZGllbnREYXRhLT5ncmFkaWVudC0+YWRkQ29sb3JTdG9wKHN0
b3ApOwotICAgIH0KKyAgICBmb3IgKGF1dG8mIHN0b3AgOiBzdG9wcykKKyAgICAgICAgZ3JhZGll
bnREYXRhLT5ncmFkaWVudC0+YWRkQ29sb3JTdG9wKHsgc3RvcC5vZmZzZXQsIHN0eWxlLmNvbG9y
QnlBcHBseWluZ0NvbG9yRmlsdGVyKHN0b3AuY29sb3IpIH0pOwogfQogCiBHcmFkaWVudFNwcmVh
ZE1ldGhvZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjpwbGF0Zm9ybVNwcmVhZE1ldGhvZEZy
b21TVkdUeXBlKFNWR1NwcmVhZE1ldGhvZFR5cGUgbWV0aG9kKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQu
aAppbmRleCAxNDBjNzBlZDUzNWEwNzMwYWY0ODA4YzU3OWFhZGU5ZGI0ODk2ODQxLi5mZmI5MDBi
ZGY0ZWRlY2FiMmViOGFiMGZiNWYyNTM0YWE2ODRiNmI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaApAQCAt
MjEsNyArMjEsNiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRh
aW5lci5oIgogI2luY2x1ZGUgIlNWR0dyYWRpZW50RWxlbWVudC5oIgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcAppbmRleCAwYzYwN2Q4MzhhYTU5ODljNTFlZTliNDlm
Y2MyZTM2ZDA5NDQxYWFiLi41ODM3MDE4MDZmN2E1ZWM2ZTkzNTRlZDAxNGFhZTc1OTY5M2EzNmJk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcApAQCAtMTAyLDE4
ICsxMDIsMTEgQEAgVmVjdG9yPEdyYWRpZW50OjpDb2xvclN0b3A+IFNWR0dyYWRpZW50RWxlbWVu
dDo6YnVpbGRTdG9wcygpCiB7CiAgICAgVmVjdG9yPEdyYWRpZW50OjpDb2xvclN0b3A+IHN0b3Bz
OwogICAgIGZsb2F0IHByZXZpb3VzT2Zmc2V0ID0gMC4wZjsKLQogICAgIGZvciAoYXV0byYgc3Rv
cCA6IGNoaWxkcmVuT2ZUeXBlPFNWR1N0b3BFbGVtZW50PigqdGhpcykpIHsKLSAgICAgICAgY29u
c3QgQ29sb3ImIGNvbG9yID0gc3RvcC5zdG9wQ29sb3JJbmNsdWRpbmdPcGFjaXR5KCk7Ci0KLSAg
ICAgICAgLy8gRmlndXJlIG91dCByaWdodCBtb25vdG9uaWMgb2Zmc2V0LgotICAgICAgICBmbG9h
dCBvZmZzZXQgPSBzdG9wLm9mZnNldCgpOwotICAgICAgICBvZmZzZXQgPSBzdGQ6Om1pbihzdGQ6
Om1heChwcmV2aW91c09mZnNldCwgb2Zmc2V0KSwgMS4wZik7Ci0gICAgICAgIHByZXZpb3VzT2Zm
c2V0ID0gb2Zmc2V0OwotCi0gICAgICAgIHN0b3BzLmFwcGVuZChHcmFkaWVudDo6Q29sb3JTdG9w
KG9mZnNldCwgY29sb3IpKTsKKyAgICAgICAgYXV0byBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ09m
ZnNldCA9IHN0ZDo6Y2xhbXAoc3RvcC5vZmZzZXQoKSwgcHJldmlvdXNPZmZzZXQsIDEuMGYpOwor
ICAgICAgICBwcmV2aW91c09mZnNldCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nT2Zmc2V0Owor
ICAgICAgICBzdG9wcy5hcHBlbmQoeyBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ09mZnNldCwgc3Rv
cC5zdG9wQ29sb3JJbmNsdWRpbmdPcGFjaXR5KCkgfSk7CiAgICAgfQotCiAgICAgcmV0dXJuIHN0
b3BzOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404069</attachid>
            <date>2020-07-11 13:59:42 -0700</date>
            <delta_ts>2020-07-11 14:12:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214221-20200711135941.patch</filename>
            <type>text/plain</type>
            <size>76934</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0MjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzJhMTNkOWZiM2RmYmZi
NTAyYjc1MzNlZDY1YmEyOTMyZmZiNTc3NC4uOWVhNDIwNWE5MDllZjI3YWUyMmI5MGQwY2I3YWQz
OGUzYjU4NGRiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MyBAQAorMjAyMC0wNy0xMSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxpZnkgYW5kIGltcHJv
dmUgR3JhZGllbnQsIHNvbWUgb3RoZXIgc21hbGwgY29sb3ItcmVsYXRlZCByZW1vdmFscworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0MjIxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBjc3MvQ1NTR3Jh
ZGllbnRWYWx1ZS5jcHA6IFJlbW92ZWQgc29tZSB1bm5lZWRlZCBpbmNsdWRlcy4KKworICAgICAg
ICAqIGh0bWwvQ29sb3JJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3JJbnB1
dFR5cGU6OmN1cnJlbnRDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcklu
cHV0VHlwZTo6c2hvdWxkU2hvd1N1Z2dlc3Rpb25zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBodG1sL0NvbG9ySW5wdXRUeXBlLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAg
ICAqIGh0bWwvSFRNTERvY3VtZW50LmNwcDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlIG9mIEhh
c2hUb29scy5oLgorCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzR3JhZGllbnQ6OmNyZWF0ZSk6IE1vdmVkIHRoZXNlIGZ1
bmN0aW9ucyBvdXQgb2YgdGhlCisgICAgICAgIGhlYWRlciBzaW5jZSBpbmxpbmluZyBzaG91bGQg
YmUgdGhlIHNhbWUgb3IgYmV0dGVyIHdpdGggdGhlbSBoZXJlLgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzR3JhZGllbnQ6On5DYW52YXNHcmFkaWVudCk6IE1vdmVkIHRoaXMgb3V0IG9mIHRoZQor
ICAgICAgICBoZWFkZXIgc28gd2UgZG9uJ3QgbmVlZCB0byBpbmNsdWRlIEdyYWRpZW50LmggaW4g
dGhlIGhlYWRlci4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0dyYWRpZW50OjphZGRDb2xvclN0
b3ApOiBVcGRhdGVkIGZvciBjaGFuZ2UgdG8KKyAgICAgICAgR3JhZGllbnQ6OmFkZENvbG9yU3Rv
cCBhbmQgbW92ZSBDb2xvciByYXRoZXIgdGhhbiBjb3B5aW5nIGl0LgorCisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzR3JhZGllbnQuaDogUmVtb3ZlZCBpbmNsdWRlIG9mIEdyYWRpZW50Lmgu
CisgICAgICAgIE1vdmVkIHRoaW5ncyBvdXQgb2YgdGhlIGhlYWRlciB0byBtYWtlIHRoYXQgd29y
ay4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzOjpidWlsZEFycmF5Rm9yQ2FudmFzR3JhZGllbnQpOiBS
ZW1vdmVkCisgICAgICAgIHVzZSBvZiBHcmFkaWVudDo6dHlwZSBhbmQgaW5zdGVhZCB1bmlmeSB0
aGUgdHlwZSBzdHJpbmcgY29kZSB3aXRoCisgICAgICAgIHRoZSBjb2RlIHRoYXQgaW50ZXJwcmV0
cyB0aGUgZGF0YSBmb3IgdGhlIGRpZmZlcmVudCB0eXBlcy4KKworICAgICAgICAqIHBhZ2UvRnJh
bWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cmVjYWxjdWxhdGVTY3Jv
bGxiYXJPdmVybGF5U3R5bGUpOiBSZWZhY3RvcmVkCisgICAgICAgIHRvIGVsaW1pbmF0ZSB0aGUg
bXVsdGlwbGUgcmVkdW5kYW50IGNvZGUgcGF0aHMsIG90aGVyd2lzaW5nIGxlYXZpbmcKKyAgICAg
ICAgdGhlIGxvZ2ljIHVuY2hhbmdlZC4KKworICAgICAgICAqIHBsYXRmb3JtL0NvbG9yQ2hvb3Nl
ckNsaWVudC5oOiBSZW1vdmUgdW5uZWVkZWQgaW5jbHVkZXMgYW5kIHVudXNlZAorICAgICAgICBj
dXJyZW50Q29sb3IgYW5kIHNob3VsZFNob3dTdWdnZXN0aW9ucyBmdW5jdGlvbnMuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFkaWVudDo6Y3JlYXRlKTogUmVtb3ZlZCB1bm5lZWRlZCBjcmVhdGUgZnVuY3Rpb24gdGhhdAor
ICAgICAgICB0YWtlcyBhIENvbmljRGF0YSwgcmVwbGFjaW5nIGl0IHdpdGggb25lIHRoYXQgdGFr
ZXMgdGhlIHZhcmlhbnQgRGF0YS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpHcmFkaWVu
dCk6IFJlbW92ZWQgdGhlIHBsYXRmb3JtSW5pdCBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYWRpZW50Ojp+R3JhZGllbnQpOiBSZW1vdmVkIHRoZSBwbGF0b2Zvcm1EZXN0cm95IGZ1bmN0
aW9uLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnR5cGUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmFkZENvbG9yU3RvcCk6IFRha2UgYW4gcnZhbHVl
IHJlZmVyZW5jZSB0byBjdXQgZG93bgorICAgICAgICBhIGxpdHRsZSBiaXQgb24gcmVmZXJlbmNl
IGNvdW50IGNodXJuLiBSZXBsYWNlZCB0aGUgcGxhdGZvcm1EZXN0cm95CisgICAgICAgIGZ1bmN0
aW9uIHdpdGggYSBuZXcgc3RvcHNDaGFuZ2VkIGZ1bmN0aW9uLiBSZW1vdmVkIGFuIHVubmVlZGVk
IG92ZXJsb2FkCisgICAgICAgIHRoYXQgdGFrZXMgdGhlIHR3byBwYXJ0cyBvZiBhIENvbG9yU3Rv
cCBzZXBhcmF0ZWx5LgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNldFNvcnRlZENvbG9y
U3RvcHMpOiBVc2Ugc3RvcHNDaGFuZ2VkLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNv
cnRTdG9wcyBjb25zdCk6IFNpbXBsaWZ5IGEgYml0LCB1c2luZyBhIGxhbWJkYS4KKyAgICAgICAg
QWxzbyBnYXZlIHRoaXMgYSBzaG9ydGVyIG5hbWU7IGl0IHN0aWxsIG9wdGltaXplcyBieSBub3Qg
c29ydGluZyBpZgorICAgICAgICB0aGUgdmVjdG9yIGlzIGFscmVhZHkgc29ydGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhZGllbnQ6Omhhc0FscGhhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYWRpZW50OjpzZXRTcHJlYWRNZXRob2QpOiBSZW1vdmVkIHNvbWUgc2xpZ2h0
bHkgb3ZlcnplYWxvdXMKKyAgICAgICAgY29kZSBjaGVja2luZyB0aGlzIGlzbid0IHVzZWQgYWZ0
ZXIgY3JlYXRpbmcgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGdyYWRpZW50LgorICAgICAgICBEZWNp
ZGVkIG5vdCB0byBib3RoZXIgd2l0aCB0aGlzIGZvciBub3cuCisgICAgICAgIChXZWJDb3JlOjpH
cmFkaWVudDo6c2V0R3JhZGllbnRTcGFjZVRyYW5zZm9ybSk6IFR3ZWFrZWQgZm9ybWF0dGluZy4K
KyAgICAgICAgKFdlYkNvcmU6OmFkZCk6IEFkZGVkIG92ZXJsb2FkcyB0byBhZGQoSGFzaGVyJikg
c28gd2UgY2FuIHVzZSBjb21wdXRlSGFzaC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50Ojpo
YXNoIGNvbnN0KTogVXNlIGNvbXB1dGVIYXNoIGluc3RlYWQgb2YgaGFzaE1lbW9yeS4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50Lmg6IFVzZSBSZXRhaW5QdHIsIENPTVB0
ciwgYW5kIFJlZlB0ciBpbnN0ZWFkCisgICAgICAgIG9mIG1hbnVhbGx5IG1hbmFnaW5nIHRoZSBs
aWZldGltZXMgb2YgdGhlIHBsYXRmb3JtLXNwZWNpZmljIHVuZGVybHlpbmcKKyAgICAgICAgZ3Jh
ZGllbnQgb2JqZWN0cy4gQWxzbyByZW1vdmVkIHRoZSB1bmhlbHBmdWwgUGxhdGZvcm1HcmFkaWVu
dCB0eXBlLiBUaGlzCisgICAgICAgIHBhdHRlcm4sIGFsbCB0b28gY29tbW9uIGluIG91ciBwbGF0
Zm9ybSBsaWJyYXJ5LCBwcm92aWRlcyBubyB1c2VmdWwKKyAgICAgICAgYWJzdHJhY3Rpb24gaGVy
ZS4gUmVtb3ZlZCB1bm5lZWRlZCBjb25zdHJ1Y3RvcnMgZnJvbSBDb2xvclN0b3AuCisgICAgICAg
IFVwZGF0ZWQgZm9yIGNoYW5nZXMgYWJvdmUuIEFkZGVkIHBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0
aW9ucyBjcmVhdGVCcnVzaCwKKyAgICAgICAgY3JlYXRlUGF0dGVybiwgYW5kIGNyZWF0ZUNHR3Jh
ZGllbnQuIFNpbXBsaWZ5IGVuY29kaW5nIGFuZCBkZWNvZGluZyBieQorICAgICAgICB0YWtpbmcg
YWR2YW50YWdlIG9mIHRoZSBzdXBwb3J0IGZvciBlbmNvZGluZy9kZWNvZGluZyB2YXJpYW50cy4K
KyAgICAgICAgUmVtb3ZlIHRoZSBlbnVtIEdyYWRpZW50OjpUeXBlIGVudGlyZWx5LiBSZW1vdmVk
IHRoZSBpbnZhbGlkYXRlSGFzaAorICAgICAgICBmdW5jdGlvbiBiZWNhdXNlIGl0J3Mgb25seSB1
c2VkIGluIGEgZmV3IHNldHRlcnMgYW5kIHNldHRpbmcgdGhlIGhhc2gKKyAgICAgICAgdG8gMCBp
cyBhIGZpbmUgd2F5IHRvIHdyaXRlIGl0IHRoZXJlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSk6IE1vdmVkIGhlcmUgZnJvbQorICAgICAg
ICB0aGUgaGVhZGVyIHNvIHdlIGRvbid0IG5lZWQgdG8gaW5jbHVkZSBHcmFkaWVudC5oIGluIHRo
ZSBoZWFkZXIuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6fkdyYXBo
aWNzQ29udGV4dFN0YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6b3BlcmF0b3I9KTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuaDogUmVtb3ZlZCBpbmNsdWRlIG9mIEdyYWRpZW50LmguCisgICAg
ICAgIE1vdmVkIHRoaW5ncyBvdXQgb2YgdGhlIGhlYWRlciB0byBtYWtlIHRoYXQgd29yay4KKwor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpGaWxsU291cmNlOjpGaWxsU291cmNlKTogVXNlIGNy
ZWF0ZVBhdHRlcm4gaW5zdGVhZCBvZgorICAgICAgICBjcmVhdGVQbGF0Zm9ybUdyYWRpZW50Lgor
ICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OlN0cm9rZVNvdXJjZTo6U3Ryb2tlU291cmNlKTogRGl0
dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzdG9wc0NoYW5nZWQpOiBSZW5hbWVkIGZy
b20gcGxhdGZvcm1EZXN0cm95LgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmNyZWF0ZVBh
dHRlcm4pOiBSZW5hbWVkIGZyb20gY3JlYXRlUGxhdGZvcm1HcmFkaWVudC4KKyAgICAgICAgQ2hh
bmdlZCB0byByZXR1cm4gYSBSZWZQdHIgaW5zdGVhZCBvZiBhIHJhdyBwb2ludGVyIHRoZSBjYWxs
ZXIgbmVlZHMgdG8KKyAgICAgICAgYWRvcHQgYXQgZWFjaCBjYWxsIHNpdGUuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFkaWVudDo6ZmlsbCk6IFVzZSBjcmVhdGVQYXR0ZXJuLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0KTogRGl0dG8u
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzdG9wc0NoYW5nZWQpOiBSZW5hbWVkIGZyb20gcGxhdGZv
cm1EZXN0cm95LCBhbmQKKyAgICAgICAgc2ltcGxpZmllZCBpbXBsZW1lbnRhdGlvbiBub3cgdGhh
dCB3ZSB1c2UgUmV0YWluUHRyLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmNyZWF0ZUNH
R3JhZGllbnQpOiBSZW5hbWVkIGZyb20gcGxhdGZvcm1HcmFkaWVudCwKKyAgICAgICAgZ290IHJp
ZCBvZiB0aGUgcmV0dXJuIHZhbHVlLCBhbmQgbWFkZSBpdCBjYWxsZXIgcmVzcG9uc2liaWxpdHkg
dG8gb25seQorICAgICAgICBjYWxsIHRoaXMgd2hlbiBhIGdyYWRlaXRuIG5lZWRzIHRvIGJlIGFs
bG9jYXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpwYWludCk6IFVwZGF0ZWQgdG8g
dXNlIHRoZSBhYm92ZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmNwcDogQWRkIGluY2x1ZGUgb2YgR3JhZGllbnQuaC4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmg6CisgICAgICAg
IEFkZGVkIGluY2x1ZGUgb2YgR3JhZGllbnQuaCBzaW5jZSB0aGUgZnVuY3Rpb24gdGVtcGxhdGVz
IGluIHRoaXMgZmlsZQorICAgICAgICBlbmNvZGUgYW5kIGRlY29kZSBncmFkaWVudHMuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJh
dGlvblJlY29yZGVyLmNwcDoKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmZpbGxSZWN0KTogVXNlIGNyZWF0ZVBhdHRlcm4uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRp
cmVjdDJEOjpGaWxsU291cmNlOjpGaWxsU291cmNlKTogVXNlIGNyZWF0ZUJydXNoCisgICAgICAg
IChXZWJDb3JlOjpEaXJlY3QyRDo6U3Ryb2tlU291cmNlOjpTdHJva2VTb3VyY2UpOiBEaXR0by4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzdG9wc0NoYW5nZWQpOiBSZW5hbWVkIGZyb20g
cGxhdGZvcm1EZXN0cm95IGFuZAorICAgICAgICBzaW1wbGlmaWVkIGltcGxlbWVudGF0aW9uIG5v
dyB0aGF0IHdlIHVzZSBDT01QdHIuCisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGxhdGZv
cm1HcmFkaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6Y3JlYXRl
UGxhdGZvcm1HcmFkaWVudElmTmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYWRpZW50OjpjcmVhdGVCcnVzaCk6IFJlbmFtZWQgZnJvbSBnZW5lcmF0ZUdyYWRpZW50IGFu
ZAorICAgICAgICBhZGRlZCBhIHJldHVybiB2YWx1ZS4gU2ltcGxpZmllZCBub3cgdGhhdCB3ZSB1
c2UgQ09NUHRyLCBvcHRpbWl6ZWQKKyAgICAgICAgdGhlIGNvZGUgYSBiaXQsIGFuZCBhZGRlZCBz
b21lIEZJWE1FIGFib3V0IG1pc3Rha2VzIEkgbm90aWNlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YWRpZW50OjpmaWxsKTogVXNlIGNyZWF0ZUJydXNoIGFuZCBtX2JydXNoLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUmVjdCk6IFVz
ZSBjcmVhdGVCcnVzaC4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1h
Yy5tbTogQWRkZWQgaW5jbHVkZSBvZiBHcmFkaWVudC5oLgorCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRoZW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBh
aW50UHJvZ3Jlc3NCYXIpOiBVcGRhdGVkIGZvciBjaGFuZ2VzIHRvCisgICAgICAgIGFkZENvbG9y
U3RvcC4gQWxzbyByZW1vdmUgYSBsb3Qgb2YgdW5uZWNlc3NhcnkgY29udmVyc2lvbiBmcm9tIGZs
b2F0CisgICAgICAgIHRvIGRvdWJsZSBhbmQgYmFjayB0byBmbG9hdC4KKworICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphZGRTdG9wcyk6IFVwZGF0ZSB0byBtYWtl
CisgICAgICAgIGFuZCBtb3ZlIGEgbmV3IGNvbG9yIHN0b3AgaW5zdGVhZCBvZiBjb3B5aW5nIGl0
LCBtb2RpZnlpbmcgaXQgaW4KKyAgICAgICAgcGxhY2UsIGFuZCB0aGVuIGNvcHlpbmcgaXQgYWdh
aW4uCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNw
cDogUmVtb3ZlZCBpbmNsdWRlIG9mCisgICAgICAgIEdyYWRpZW50LmguCisKKyAgICAgICAgKiBz
dmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dyYWRpZW50
RWxlbWVudDo6YnVpbGRTdG9wcyk6IFVzZSBzdGQ6OmNsYW1wIHRvIGNvbnZlcnQKKyAgICAgICAg
dGhlIG9mZnNldHMgaW50byBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgb25lcyBpbiBhIG1vcmUg
ZGlyZWN0IHdheSwKKyAgICAgICAgdXNpbmcgdmFyaWFibGUgbmFtZXMgaW5zdGVhZCBvZiBjb21t
ZW50cyB0byBjbGFyaWZ5IHdoYXQgd2UgYXJlIGRvaW5nLgorCiAyMDIwLTA3LTExICBTaW1vbiBG
cmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI2
MDI3Nik6IE92ZXJmbG93IHNjcm9sbGluZyBsYXllcnMgbWlzcGxhY2VkIGluc2lkZSBTVkcgZm9y
ZWlnbiBvYmplY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZh
bHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAppbmRleCAx
MDQyZmEzYjMxOWM1OThkMmI4YjgwODI1MGQxNDUzMTllNDU3ZDI3Li44YmE5OWJkMGUxNThiNDQz
OWIyZDE2YTk2MWZlY2RjMTgzZDA0M2E2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTR3JhZGllbnRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50
VmFsdWUuY3BwCkBAIC0zMCw4ICszMCw2IEBACiAjaW5jbHVkZSAiQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YS5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJDb2xv
ckJsZW5kaW5nLmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0jaW5jbHVkZSAiR3JhZGllbnQu
aCIKICNpbmNsdWRlICJHcmFkaWVudEltYWdlLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxl
LmgiCiAjaW5jbHVkZSAiUGFpci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9D
b2xvcklucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmNw
cAppbmRleCA5OTI2MzQ0YTA5ZDZkOGEyMDUyOTgxMDM1ODA0YzYxNTBiNWM4ZDZiLi45YWIyZmVl
ZDk2MzY3MjcyYWQ5YTA3MThmMGNjZDk1ZDg1YzlhMTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Nv
bG9ySW5wdXRUeXBlLmNwcApAQCAtMjcwLDIxICsyNzAsNiBAQCBJbnRSZWN0IENvbG9ySW5wdXRU
eXBlOjplbGVtZW50UmVjdFJlbGF0aXZlVG9Sb290VmlldygpIGNvbnN0CiAgICAgcmV0dXJuIGVs
ZW1lbnQoKS0+ZG9jdW1lbnQoKS52aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhlbGVtZW50KCkt
PnJlbmRlcmVyKCktPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpOwogfQogCi1Db2xvciBDb2xv
cklucHV0VHlwZTo6Y3VycmVudENvbG9yKCkKLXsKLSAgICByZXR1cm4gdmFsdWVBc0NvbG9yKCk7
Ci19Ci0KLWJvb2wgQ29sb3JJbnB1dFR5cGU6OnNob3VsZFNob3dTdWdnZXN0aW9ucygpIGNvbnN0
Ci17Ci0jaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCi0gICAgQVNTRVJUKGVsZW1lbnQoKSk7
Ci0gICAgcmV0dXJuIGVsZW1lbnQoKS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihsaXN0QXR0cik7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCiBWZWN0
b3I8Q29sb3I+IENvbG9ySW5wdXRUeXBlOjpzdWdnZXN0ZWRDb2xvcnMoKSBjb25zdAogewogICAg
IFZlY3RvcjxDb2xvcj4gc3VnZ2VzdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0NvbG9ySW5wdXRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBl
LmgKaW5kZXggOWEzYzdiNzE3MzUxMDU5ZTY0ZmU0MTVlOTE4MGM0NTJlM2E5YjNjNC4uZjc0ZDc2
ZjFiOWZmNTA4NDI2YjIxNDRhMWZhNWE4YmEyNDBjZTcwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9Db2xvcklucHV0VHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ29s
b3JJbnB1dFR5cGUuaApAQCAtNDgsOCArNDgsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkQ2hv
b3NlQ29sb3IoY29uc3QgQ29sb3ImKSBmaW5hbDsKICAgICB2b2lkIGRpZEVuZENob29zZXIoKSBm
aW5hbDsKICAgICBJbnRSZWN0IGVsZW1lbnRSZWN0UmVsYXRpdmVUb1Jvb3RWaWV3KCkgY29uc3Qg
ZmluYWw7Ci0gICAgQ29sb3IgY3VycmVudENvbG9yKCkgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRT
aG93U3VnZ2VzdGlvbnMoKSBjb25zdCBmaW5hbDsKICAgICBWZWN0b3I8Q29sb3I+IHN1Z2dlc3Rl
ZENvbG9ycygpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0
IGZpbmFsOwogICAgIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29u
c3QgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKaW5kZXggN2YyNWMzNjgy
YTM2MWU0N2U1ZjkwZTQ4YjQyZWQyYjI4OTJjNzlmYy4uZWRhY2YyNGQ0YTJhNGNjZDU2ZTQyNDBl
MDU4MTA0OWY4MmYzOTY0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9j
dW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcApAQCAt
NzQsNyArNzQsNiBAQAogI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxJRnJhbWVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSGFz
aFRvb2xzLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlN0eWxl
UmVzb2x2ZXIuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwCmluZGV4IGNhNzg3YzM2Yzg1
MWQ4ZjBlZmNkYTI3YzRmNjVhNDY2YWQ5MTU4MzIuLjc1ZTRhZTEyOWY3MmNjYTZmNGQ1YmY2Njdj
NTI0NzliNzI3MGI4OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc0dyYWRpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNH
cmFkaWVudC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkNhbnZhc0Jhc2UuaCIK
ICNpbmNsdWRlICJDYW52YXNTdHlsZS5oIgorI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNDQsNiArNDUsMTggQEAgQ2FudmFzR3JhZGllbnQ6OkNhbnZh
c0dyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2lu
dCYKIHsKIH0KIAorUmVmPENhbnZhc0dyYWRpZW50PiBDYW52YXNHcmFkaWVudDo6Y3JlYXRlKGNv
bnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgQ2FudmFzQmFzZSYgY2Fu
dmFzQmFzZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDYW52YXNHcmFkaWVudChwMCwg
cDEsIGNhbnZhc0Jhc2UpKTsKK30KKworUmVmPENhbnZhc0dyYWRpZW50PiBDYW52YXNHcmFkaWVu
dDo6Y3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2lu
dCYgcDEsIGZsb2F0IHIxLCBDYW52YXNCYXNlJiBjYW52YXNCYXNlKQoreworICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IENhbnZhc0dyYWRpZW50KHAwLCByMCwgcDEsIHIxLCBjYW52YXNCYXNlKSk7
Cit9CisKK0NhbnZhc0dyYWRpZW50Ojp+Q2FudmFzR3JhZGllbnQoKSA9IGRlZmF1bHQ7CisKIEV4
Y2VwdGlvbk9yPHZvaWQ+IENhbnZhc0dyYWRpZW50OjphZGRDb2xvclN0b3AoZmxvYXQgdmFsdWUs
IGNvbnN0IFN0cmluZyYgY29sb3JTdHJpbmcpCiB7CiAgICAgaWYgKCEodmFsdWUgPj0gMCAmJiB2
YWx1ZSA8PSAxKSkKQEAgLTU0LDcgKzY3LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2FudmFzR3Jh
ZGllbnQ6OmFkZENvbG9yU3RvcChmbG9hdCB2YWx1ZSwgY29uc3QgU3RyaW5nJiBjb2xvclMKICAg
ICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRh
eEVycm9yIH07CiAKLSAgICBtX2dyYWRpZW50LT5hZGRDb2xvclN0b3AodmFsdWUsIGNvbG9yKTsK
KyAgICBtX2dyYWRpZW50LT5hZGRDb2xvclN0b3AoeyB2YWx1ZSwgV1RGTW92ZShjb2xvcikgfSk7
CiAgICAgcmV0dXJuIHsgfTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzR3JhZGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c0dyYWRpZW50LmgKaW5kZXggYzM1ZmJjZTE5NDVhMWU2MTYxYTVmMTZkNjEzY2M1ZTUzYjhmN2Zh
Mi4uYTIxNWYxNDFlY2JlZWUzMTc4OTdmZWM0ZDRkNjJhYjFkZjM0NTk1OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5oCkBAIC0yNywyMiArMjcsMTggQEAK
ICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRXhjZXB0aW9uT3IuaCIKLSNpbmNsdWRlICJHcmFk
aWVudC5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBDYW52YXNCYXNlOworY2xhc3MgR3JhZGllbnQ7CiAKIGNsYXNzIENhbnZhc0dyYWRp
ZW50IDogcHVibGljIFJlZkNvdW50ZWQ8Q2FudmFzR3JhZGllbnQ+IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPENhbnZhc0dyYWRpZW50PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcDAsIGNv
bnN0IEZsb2F0UG9pbnQmIHAxLCBDYW52YXNCYXNlJiBjYW52YXNCYXNlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2FudmFzR3JhZGllbnQocDAsIHAxLCBjYW52YXNCYXNl
KSk7Ci0gICAgfQotICAgIHN0YXRpYyBSZWY8Q2FudmFzR3JhZGllbnQ+IGNyZWF0ZShjb25zdCBG
bG9hdFBvaW50JiBwMCwgZmxvYXQgcjAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBmbG9hdCByMSwg
Q2FudmFzQmFzZSYgY2FudmFzQmFzZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IENhbnZhc0dyYWRpZW50KHAwLCByMCwgcDEsIHIxLCBjYW52YXNCYXNlKSk7Ci0gICAgfQor
ICAgIHN0YXRpYyBSZWY8Q2FudmFzR3JhZGllbnQ+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBw
MCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIENhbnZhc0Jhc2UmKTsKKyAgICBzdGF0aWMgUmVmPENh
bnZhc0dyYWRpZW50PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25z
dCBGbG9hdFBvaW50JiBwMSwgZmxvYXQgcjEsIENhbnZhc0Jhc2UmKTsKKyAgICB+Q2FudmFzR3Jh
ZGllbnQoKTsKIAogICAgIEdyYWRpZW50JiBncmFkaWVudCgpIHsgcmV0dXJuIG1fZ3JhZGllbnQ7
IH0KICAgICBjb25zdCBHcmFkaWVudCYgZ3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX2dyYWRp
ZW50OyB9CkBAIC01NSw3ICs1MSw2IEBAIHByaXZhdGU6CiAKICAgICBSZWY8R3JhZGllbnQ+IG1f
Z3JhZGllbnQ7CiAgICAgQ2FudmFzQmFzZSYgbV9jYW52YXM7Ci0KIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwCmluZGV4IDdkOTI1NTI1Zjg1OThkOGMyZDhjZTVhNjFiMGY3ZDhiNmFiY2Q1ODQuLjg3ZGVl
ZjQ5OTIxYzViNWZhMWVlYmYyYWY2NTg1N2NlMTRmMmY2OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAt
MzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNT
U1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJHcmFk
aWVudC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
CiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCmluZGV4IGMxMDNkZWEwODNkMDY5YTQzM2Q2
YWMzZTc4YWM4MjdiMGJhMTQwYjAuLjVjNTdiNjA1NzRlY2E1NzIyZDE1NDk5MmFmZGJkYzc1NWU2
MzE5OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52
YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3Bw
CkBAIC0xMTU4LDE5ICsxMTU4LDE3IEBAIFJlZjxKU09OOjpBcnJheU9mPEpTT046OlZhbHVlPj4g
SW5zcGVjdG9yQ2FudmFzOjpidWlsZEFjdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsCiAKIFJlZjxK
U09OOjpBcnJheU9mPEpTT046OlZhbHVlPj4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEFycmF5Rm9y
Q2FudmFzR3JhZGllbnQoY29uc3QgQ2FudmFzR3JhZGllbnQmIGNhbnZhc0dyYWRpZW50KQogewot
ICAgIGNvbnN0IGF1dG8mIGdyYWRpZW50ID0gY2FudmFzR3JhZGllbnQuZ3JhZGllbnQoKTsKLSAg
ICAKLSAgICBTdHJpbmcgdHlwZSA9IGdyYWRpZW50LnR5cGUoKSA9PSBHcmFkaWVudDo6VHlwZTo6
UmFkaWFsID8gInJhZGlhbC1ncmFkaWVudCJfcyA6IGdyYWRpZW50LnR5cGUoKSA9PSBHcmFkaWVu
dDo6VHlwZTo6TGluZWFyID8gImxpbmVhci1ncmFkaWVudCJfcyA6ICJjb25pYy1ncmFkaWVudCJf
czsKLQorICAgIEFTQ0lJTGl0ZXJhbCB0eXBlID0gImxpbmVhci1ncmFkaWVudCJfczsKICAgICBh
dXRvIHBhcmFtZXRlcnMgPSBKU09OOjpBcnJheU9mPGZsb2F0Pjo6Y3JlYXRlKCk7Ci0gICAgV1RG
Ojpzd2l0Y2hPbihncmFkaWVudC5kYXRhKCksCi0gICAgICAgIFsmcGFyYW1ldGVyc10gKGNvbnN0
IEdyYWRpZW50OjpMaW5lYXJEYXRhJiBkYXRhKSB7CisgICAgV1RGOjpzd2l0Y2hPbihjYW52YXNH
cmFkaWVudC5ncmFkaWVudCgpLmRhdGEoKSwKKyAgICAgICAgWyZdIChjb25zdCBHcmFkaWVudDo6
TGluZWFyRGF0YSYgZGF0YSkgewogICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRh
LnBvaW50MC54KCkpOwogICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50
MC55KCkpOwogICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50MS54KCkp
OwogICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50MS55KCkpOwogICAg
ICAgICB9LAotICAgICAgICBbJnBhcmFtZXRlcnNdIChjb25zdCBHcmFkaWVudDo6UmFkaWFsRGF0
YSYgZGF0YSkgeworICAgICAgICBbJl0gKGNvbnN0IEdyYWRpZW50OjpSYWRpYWxEYXRhJiBkYXRh
KSB7CisgICAgICAgICAgICB0eXBlID0gInJhZGlhbC1ncmFkaWVudCJfczsKICAgICAgICAgICAg
IHBhcmFtZXRlcnMtPmFkZEl0ZW0oZGF0YS5wb2ludDAueCgpKTsKICAgICAgICAgICAgIHBhcmFt
ZXRlcnMtPmFkZEl0ZW0oZGF0YS5wb2ludDAueSgpKTsKICAgICAgICAgICAgIHBhcmFtZXRlcnMt
PmFkZEl0ZW0oZGF0YS5zdGFydFJhZGl1cyk7CkBAIC0xMTc4LDcgKzExNzYsOCBAQCBSZWY8SlNP
Tjo6QXJyYXlPZjxKU09OOjpWYWx1ZT4+IEluc3BlY3RvckNhbnZhczo6YnVpbGRBcnJheUZvckNh
bnZhc0dyYWRpZW50KGNvbgogICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBv
aW50MS55KCkpOwogICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLmVuZFJhZGl1
cyk7CiAgICAgICAgIH0sCi0gICAgICAgIFsmcGFyYW1ldGVyc10gKGNvbnN0IEdyYWRpZW50OjpD
b25pY0RhdGEmIGRhdGEpIHsKKyAgICAgICAgWyZdIChjb25zdCBHcmFkaWVudDo6Q29uaWNEYXRh
JiBkYXRhKSB7CisgICAgICAgICAgICB0eXBlID0gImNvbmljLWdyYWRpZW50Il9zOwogICAgICAg
ICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50MC54KCkpOwogICAgICAgICAgICAg
cGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50MC55KCkpOwogICAgICAgICAgICAgcGFyYW1l
dGVycy0+YWRkSXRlbShkYXRhLmFuZ2xlUmFkaWFucyk7CkBAIC0xMTg2LDcgKzExODUsNyBAQCBS
ZWY8SlNPTjo6QXJyYXlPZjxKU09OOjpWYWx1ZT4+IEluc3BlY3RvckNhbnZhczo6YnVpbGRBcnJh
eUZvckNhbnZhc0dyYWRpZW50KGNvbgogICAgICk7CiAKICAgICBhdXRvIHN0b3BzID0gSlNPTjo6
QXJyYXlPZjxKU09OOjpWYWx1ZT46OmNyZWF0ZSgpOwotICAgIGZvciAoYXV0byYgY29sb3JTdG9w
IDogZ3JhZGllbnQuc3RvcHMoKSkgeworICAgIGZvciAoYXV0byYgY29sb3JTdG9wIDogY2FudmFz
R3JhZGllbnQuZ3JhZGllbnQoKS5zdG9wcygpKSB7CiAgICAgICAgIGF1dG8gc3RvcCA9IEpTT046
OkFycmF5T2Y8SlNPTjo6VmFsdWU+OjpjcmVhdGUoKTsKICAgICAgICAgc3RvcC0+YWRkSXRlbShj
b2xvclN0b3Aub2Zmc2V0KTsKICAgICAgICAgc3RvcC0+YWRkSXRlbShpbmRleEZvckRhdGEoc2Vy
aWFsaXphdGlvbkZvckNTUyhjb2xvclN0b3AuY29sb3IpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAKaW5kZXggNTEyN2I0OTBmNGM0NjkxMjk4OGZlYWY5MzY1NTQ0ZTZlYmQ2YmY2YS4uOTJh
ODA4OWY0ODZiOTBhYTY4OGFlZTNmYmEyOWNjYjQ0ODEwYmI0NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcApAQCAtMzUwLDMyICszNTAsMjcgQEAgdm9pZCBGcmFtZVZpZXc6OmRldGFjaEN1
c3RvbVNjcm9sbGJhcnMoKQogCiB2b2lkIEZyYW1lVmlldzo6cmVjYWxjdWxhdGVTY3JvbGxiYXJP
dmVybGF5U3R5bGUoKQogewotICAgIFNjcm9sbGJhck92ZXJsYXlTdHlsZSBvbGRPdmVybGF5U3R5
bGUgPSBzY3JvbGxiYXJPdmVybGF5U3R5bGUoKTsKLSAgICBPcHRpb25hbDxTY3JvbGxiYXJPdmVy
bGF5U3R5bGU+IGNsaWVudE92ZXJsYXlTdHlsZSA9IGZyYW1lKCkucGFnZSgpID8gZnJhbWUoKS5w
YWdlKCktPmNocm9tZSgpLmNsaWVudCgpLnByZWZlcnJlZFNjcm9sbGJhck92ZXJsYXlTdHlsZSgp
IDogV1RGOjpudWxsb3B0OwotICAgIGlmIChjbGllbnRPdmVybGF5U3R5bGUpIHsKLSAgICAgICAg
aWYgKGNsaWVudE92ZXJsYXlTdHlsZS52YWx1ZSgpICE9IG9sZE92ZXJsYXlTdHlsZSkKLSAgICAg
ICAgICAgIHNldFNjcm9sbGJhck92ZXJsYXlTdHlsZShjbGllbnRPdmVybGF5U3R5bGUudmFsdWUo
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTY3JvbGxiYXJPdmVybGF5U3R5bGUg
Y29tcHV0ZWRPdmVybGF5U3R5bGUgPSBTY3JvbGxiYXJPdmVybGF5U3R5bGVEZWZhdWx0OwotCi0g
ICAgQ29sb3IgYmFja2dyb3VuZENvbG9yID0gZG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IoKTsKLSAg
ICBpZiAoYmFja2dyb3VuZENvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICAvLyBSZWR1Y2UgdGhl
IGJhY2tncm91bmQgY29sb3IgZnJvbSBSR0IgdG8gYSBsaWdodG5lc3MgdmFsdWUKLSAgICAgICAg
Ly8gYW5kIGRldGVybWluZSB3aGljaCBzY3JvbGxiYXIgc3R5bGUgdG8gdXNlIGJhc2VkIG9uIGEg
bGlnaHRuZXNzCi0gICAgICAgIC8vIGhldXJpc3RpYy4KLSAgICAgICAgaWYgKGJhY2tncm91bmRD
b2xvci5saWdodG5lc3MoKSA8PSAuNWYgJiYgYmFja2dyb3VuZENvbG9yLmlzVmlzaWJsZSgpKQot
ICAgICAgICAgICAgY29tcHV0ZWRPdmVybGF5U3R5bGUgPSBTY3JvbGxiYXJPdmVybGF5U3R5bGVM
aWdodDsKLSAgICAgICAgZWxzZSBpZiAoIWJhY2tncm91bmRDb2xvci5pc1Zpc2libGUoKSAmJiB1
c2VEYXJrQXBwZWFyYW5jZSgpKQotICAgICAgICAgICAgY29tcHV0ZWRPdmVybGF5U3R5bGUgPSBT
Y3JvbGxiYXJPdmVybGF5U3R5bGVMaWdodDsKLSAgICB9Ci0KLSAgICBpZiAob2xkT3ZlcmxheVN0
eWxlICE9IGNvbXB1dGVkT3ZlcmxheVN0eWxlKQotICAgICAgICBzZXRTY3JvbGxiYXJPdmVybGF5
U3R5bGUoY29tcHV0ZWRPdmVybGF5U3R5bGUpOworICAgIGF1dG8gc3R5bGUgPSBbJl0geworICAg
ICAgICBpZiAoYXV0byBwYWdlID0gZnJhbWUoKS5wYWdlKCkpIHsKKyAgICAgICAgICAgIGlmIChh
dXRvIGNsaWVudE92ZXJsYXlTdHlsZSA9IHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLnByZWZlcnJl
ZFNjcm9sbGJhck92ZXJsYXlTdHlsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiAqY2xpZW50
T3ZlcmxheVN0eWxlOworICAgICAgICB9CisgICAgICAgIGF1dG8gYmFja2dyb3VuZCA9IGRvY3Vt
ZW50QmFja2dyb3VuZENvbG9yKCk7CisgICAgICAgIGlmIChiYWNrZ3JvdW5kLmlzVmlzaWJsZSgp
KSB7CisgICAgICAgICAgICBpZiAoYmFja2dyb3VuZC5saWdodG5lc3MoKSA8PSAuNWYpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFNjcm9sbGJhck92ZXJsYXlTdHlsZUxpZ2h0OworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgaWYgKHVzZURhcmtBcHBlYXJhbmNlKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIFNjcm9sbGJhck92ZXJsYXlTdHlsZUxpZ2h0OworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBTY3JvbGxiYXJPdmVybGF5U3R5bGVEZWZhdWx0OworICAgIH0oKTsKKyAgICBp
ZiAoc2Nyb2xsYmFyT3ZlcmxheVN0eWxlKCkgIT0gc3R5bGUpCisgICAgICAgIHNldFNjcm9sbGJh
ck92ZXJsYXlTdHlsZShzdHlsZSk7CiB9CiAKICNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykKKwog
dm9pZCBGcmFtZVZpZXc6OnJlY2FsY3VsYXRlQmFzZUJhY2tncm91bmRDb2xvcigpCiB7CiAgICAg
Ym9vbCB1c2luZ0RhcmtBcHBlYXJhbmNlID0gdXNlRGFya0FwcGVhcmFuY2UoKTsKQEAgLTM4OCw2
ICszODMsNyBAQCB2b2lkIEZyYW1lVmlldzo6cmVjYWxjdWxhdGVCYXNlQmFja2dyb3VuZENvbG9y
KCkKICAgICAgICAgYmFja2dyb3VuZENvbG9yID0gQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsK
ICAgICB1cGRhdGVCYWNrZ3JvdW5kUmVjdXJzaXZlbHkoYmFja2dyb3VuZENvbG9yKTsKIH0KKwog
I2VuZGlmCiAKIHZvaWQgRnJhbWVWaWV3OjpjbGVhcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9Db2xvckNob29zZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0NvbG9yQ2hvb3NlckNsaWVudC5oCmluZGV4IDliM2I4OTgxNjNlMjdiMGE2OTYyNDk1ZDIy
N2I5YzliNTY5MWRiMmMuLjMxNjhmZWU1MmZhMGY0M2Q0YTRmOTY0NWQwNjFkYjQ2NjcyMzdiNzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbG9yQ2hvb3NlckNsaWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbG9yQ2hvb3NlckNsaWVudC5oCkBAIC0y
NywxNyArMjcsMTYgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBDb2xvckNob29zZXJDbGllbnRfaAot
I2RlZmluZSBDb2xvckNob29zZXJDbGllbnRfaAorI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUo
SU5QVVRfVFlQRV9DT0xPUikKIAotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBDb2xvcjsKK2NsYXNzIEludFJlY3Q7CiAKIGNsYXNzIENvbG9yQ2hvb3NlckNs
aWVudCB7CiBwdWJsaWM6CkBAIC00NiwxMyArNDUsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGRpZENob29zZUNvbG9yKGNvbnN0IENvbG9yJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBk
aWRFbmRDaG9vc2VyKCkgPSAwOwogICAgIHZpcnR1YWwgSW50UmVjdCBlbGVtZW50UmVjdFJlbGF0
aXZlVG9Sb290VmlldygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIENvbG9yIGN1cnJlbnRDb2xv
cigpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2hvd1N1Z2dlc3Rpb25zKCkgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgVmVjdG9yPENvbG9yPiBzdWdnZXN0ZWRDb2xvcnMoKSBjb25zdCA9
IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5Q
VVRfVFlQRV9DT0xPUikKLQotI2VuZGlmIC8vIENvbG9yQ2hvb3NlckNsaWVudF9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAKaW5kZXggYmQ3ZjY4YmJm
MGIwNTE1YzA3M2EzNjc1YTRkN2E3NjVjNDNjMzgxMi4uMTY0N2VkMTk4ZTFkZjQ0M2M5MDM5ZTky
MTM0ODdiMGM1YTVjZGFjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhZGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYWRpZW50LmNwcApAQCAtNDYsNyArNDYsNyBAQCBSZWY8R3JhZGllbnQ+IEdyYWRpZW50Ojpj
cmVhdGUoUmFkaWFsRGF0YSYmIGRhdGEpCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR3JhZGll
bnQoV1RGTW92ZShkYXRhKSkpOwogfQogCi1SZWY8R3JhZGllbnQ+IEdyYWRpZW50OjpjcmVhdGUo
Q29uaWNEYXRhJiYgZGF0YSkKK1JlZjxHcmFkaWVudD4gR3JhZGllbnQ6OmNyZWF0ZShEYXRhJiYg
ZGF0YSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHcmFkaWVudChXVEZNb3ZlKGRhdGEp
KSk7CiB9CkBAIC01NCw0MCArNTQsMTkgQEAgUmVmPEdyYWRpZW50PiBHcmFkaWVudDo6Y3JlYXRl
KENvbmljRGF0YSYmIGRhdGEpCiBHcmFkaWVudDo6R3JhZGllbnQoTGluZWFyRGF0YSYmIGRhdGEp
CiAgICAgOiBtX2RhdGEoV1RGTW92ZShkYXRhKSkKIHsKLSAgICBwbGF0Zm9ybUluaXQoKTsKIH0K
IAogR3JhZGllbnQ6OkdyYWRpZW50KFJhZGlhbERhdGEmJiBkYXRhKQogICAgIDogbV9kYXRhKFdU
Rk1vdmUoZGF0YSkpCiB7Ci0gICAgcGxhdGZvcm1Jbml0KCk7CiB9CiAgICAgCi1HcmFkaWVudDo6
R3JhZGllbnQoQ29uaWNEYXRhJiYgZGF0YSkKK0dyYWRpZW50OjpHcmFkaWVudChEYXRhJiYgZGF0
YSkKICAgICA6IG1fZGF0YShXVEZNb3ZlKGRhdGEpKQogewotICAgIHBsYXRmb3JtSW5pdCgpOwog
fQogCi1HcmFkaWVudDo6fkdyYWRpZW50KCkKLXsKLSAgICBwbGF0Zm9ybURlc3Ryb3koKTsKLX0K
LQotYXV0byBHcmFkaWVudDo6dHlwZSgpIGNvbnN0IC0+IFR5cGUKLXsKLSAgICByZXR1cm4gV1RG
Ojpzd2l0Y2hPbihtX2RhdGEsCi0gICAgICAgIFtdIChjb25zdCBMaW5lYXJEYXRhJikgewotICAg
ICAgICAgICAgcmV0dXJuIFR5cGU6OkxpbmVhcjsKLSAgICAgICAgfSwKLSAgICAgICAgW10gKGNv
bnN0IFJhZGlhbERhdGEmKSB7Ci0gICAgICAgICAgICByZXR1cm4gVHlwZTo6UmFkaWFsOwotICAg
ICAgICB9LAotICAgICAgICBbXSAoY29uc3QgQ29uaWNEYXRhJikgewotICAgICAgICAgICAgcmV0
dXJuIFR5cGU6OkNvbmljOwotICAgICAgICB9Ci0gICAgKTsKLX0KK0dyYWRpZW50Ojp+R3JhZGll
bnQoKSA9IGRlZmF1bHQ7CiAKIHZvaWQgR3JhZGllbnQ6OmFkanVzdFBhcmFtZXRlcnNGb3JUaWxl
ZERyYXdpbmcoRmxvYXRTaXplJiBzaXplLCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZykKIHsKQEAgLTEzNCwxNDYgKzExMyw5MCBAQCBib29sIEdyYWRpZW50Ojpp
c1plcm9TaXplKCkgY29uc3QKICAgICApOwogfQogCi12b2lkIEdyYWRpZW50OjphZGRDb2xvclN0
b3AoZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgYWRkQ29sb3JTdG9w
KHsgb2Zmc2V0LCBjb2xvciB9KTsKLX0KLQotdm9pZCBHcmFkaWVudDo6YWRkQ29sb3JTdG9wKGNv
bnN0IEdyYWRpZW50OjpDb2xvclN0b3AmIHN0b3ApCit2b2lkIEdyYWRpZW50OjphZGRDb2xvclN0
b3AoR3JhZGllbnQ6OkNvbG9yU3RvcCYmIHN0b3ApCiB7Ci0gICAgbV9zdG9wcy5hcHBlbmQoc3Rv
cCk7Ci0KKyAgICBtX3N0b3BzLmFwcGVuZChXVEZNb3ZlKHN0b3ApKTsKICAgICBtX3N0b3BzU29y
dGVkID0gZmFsc2U7Ci0KLSAgICBwbGF0Zm9ybURlc3Ryb3koKTsKLSAgICBpbnZhbGlkYXRlSGFz
aCgpOworICAgIG1fY2FjaGVkSGFzaCA9IDA7CisgICAgc3RvcHNDaGFuZ2VkKCk7CiB9CiAKIHZv
aWQgR3JhZGllbnQ6OnNldFNvcnRlZENvbG9yU3RvcHMoQ29sb3JTdG9wVmVjdG9yJiYgc3RvcHMp
CiB7CiAgICAgbV9zdG9wcyA9IFdURk1vdmUoc3RvcHMpOwotCiAgICAgbV9zdG9wc1NvcnRlZCA9
IHRydWU7Ci0KLSAgICBwbGF0Zm9ybURlc3Ryb3koKTsKLSAgICBpbnZhbGlkYXRlSGFzaCgpOwor
ICAgIG1fY2FjaGVkSGFzaCA9IDA7CisgICAgc3RvcHNDaGFuZ2VkKCk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgYm9vbCBjb21wYXJlU3RvcHMoY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCYgYSwgY29u
c3QgR3JhZGllbnQ6OkNvbG9yU3RvcCYgYikKLXsKLSAgICByZXR1cm4gYS5vZmZzZXQgPCBiLm9m
ZnNldDsKLX0KLQotdm9pZCBHcmFkaWVudDo6c29ydFN0b3BzSWZOZWNlc3NhcnkoKQordm9pZCBH
cmFkaWVudDo6c29ydFN0b3BzKCkgY29uc3QKIHsKICAgICBpZiAobV9zdG9wc1NvcnRlZCkKICAg
ICAgICAgcmV0dXJuOwotCiAgICAgbV9zdG9wc1NvcnRlZCA9IHRydWU7Ci0KLSAgICBpZiAoIW1f
c3RvcHMuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGQ6OnN0YWJsZV9zb3J0KG1f
c3RvcHMuYmVnaW4oKSwgbV9zdG9wcy5lbmQoKSwgY29tcGFyZVN0b3BzKTsKLSAgICBpbnZhbGlk
YXRlSGFzaCgpOwotfQotCi1ib29sIEdyYWRpZW50OjpoYXNBbHBoYSgpIGNvbnN0Ci17Ci0gICAg
Zm9yIChjb25zdCBhdXRvJiBzdG9wIDogbV9zdG9wcykgewotICAgICAgICBpZiAoIXN0b3AuY29s
b3IuaXNPcGFxdWUoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJl
dHVybiBmYWxzZTsKKyAgICBzdGQ6OnN0YWJsZV9zb3J0KG1fc3RvcHMuYmVnaW4oKSwgbV9zdG9w
cy5lbmQoKSwgW10gKGF1dG8mIGEsIGF1dG8mIGIpIHsKKyAgICAgICAgcmV0dXJuIGEub2Zmc2V0
IDwgYi5vZmZzZXQ7CisgICAgfSk7CiB9CiAKIHZvaWQgR3JhZGllbnQ6OnNldFNwcmVhZE1ldGhv
ZChHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2QpCiB7Ci0gICAgLy8gRklYTUU6IFNo
b3VsZCBpdCBiZWNvbWUgbmVjZXNzYXJ5LCBhbGxvdyBjYWxscyB0byB0aGlzIG1ldGhvZCBhZnRl
ciBtX2dyYWRpZW50IGhhcyBiZWVuIHNldC4KLSAgICBBU1NFUlQobV9ncmFkaWVudCA9PSAwKTsK
LQogICAgIGlmIChtX3NwcmVhZE1ldGhvZCA9PSBzcHJlYWRNZXRob2QpCiAgICAgICAgIHJldHVy
bjsKLQogICAgIG1fc3ByZWFkTWV0aG9kID0gc3ByZWFkTWV0aG9kOwotCi0gICAgaW52YWxpZGF0
ZUhhc2goKTsKKyAgICBtX2NhY2hlZEhhc2ggPSAwOwogfQogCiB2b2lkIEdyYWRpZW50OjpzZXRH
cmFkaWVudFNwYWNlVHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRTcGFj
ZVRyYW5zZm9ybWF0aW9uKQogewogICAgIGlmIChtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlv
biA9PSBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24pCiAgICAgICAgIHJldHVybjsKLQogICAg
IG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uID0gZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0
aW9uOworICAgIG1fY2FjaGVkSGFzaCA9IDA7Cit9CiAKLSAgICBpbnZhbGlkYXRlSGFzaCgpOwor
c3RhdGljIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBDb2xvciYgY29sb3IpCit7Cisg
ICAgLy8gRklYTUU6IFdlIGRvbid0IHdhbnQgdG8gaGFzaCBhIGhhc2g7IGRvIGJldHRlci4KKyAg
ICBhZGQoaGFzaGVyLCBjb2xvci5oYXNoKCkpOwogfQogCi11bnNpZ25lZCBHcmFkaWVudDo6aGFz
aCgpIGNvbnN0CitzdGF0aWMgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50KQogewotICAgIGlmIChtX2NhY2hlZEhhc2gpCi0gICAgICAgIHJldHVybiBtX2Nh
Y2hlZEhhc2g7CisgICAgYWRkKGhhc2hlciwgcG9pbnQueCgpLCBwb2ludC55KCkpOworfQogCi0g
ICAgc3RydWN0IHsKLSAgICAgICAgVHlwZSB0eXBlOwotICAgICAgICBGbG9hdFBvaW50IHBvaW50
MDsKLSAgICAgICAgRmxvYXRQb2ludCBwb2ludDE7Ci0gICAgICAgIGZsb2F0IHN0YXJ0UmFkaXVz
OwotICAgICAgICBmbG9hdCBlbmRSYWRpdXM7Ci0gICAgICAgIGZsb2F0IGFzcGVjdFJhdGlvOwot
ICAgICAgICBmbG9hdCBhbmdsZVJhZGlhbnM7Ci0gICAgICAgIEdyYWRpZW50U3ByZWFkTWV0aG9k
IHNwcmVhZE1ldGhvZDsKLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGdyYWRpZW50U3BhY2VUcmFu
c2Zvcm1hdGlvbjsKLSAgICB9IHBhcmFtZXRlcnM7CitzdGF0aWMgdm9pZCBhZGQoSGFzaGVyJiBo
YXNoZXIsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQoreworICAgIGFkZChoYXNo
ZXIsIHRyYW5zZm9ybS5hKCksIHRyYW5zZm9ybS5iKCksIHRyYW5zZm9ybS5jKCksIHRyYW5zZm9y
bS5kKCksIHRyYW5zZm9ybS5lKCksIHRyYW5zZm9ybS5mKCkpOworfQogCi0gICAgLy8gU3RyaW5n
SGFzaGVyIHJlcXVpcmVzIHRoYXQgdGhlIG1lbW9yeSBpdCBoYXNoZXMgYmUgYSBtdWx0aXBsZSBv
ZiB0d28gaW4gc2l6ZS4KLSAgICBDT01QSUxFX0FTU0VSVCghKHNpemVvZihwYXJhbWV0ZXJzKSAl
IDIpLCBHcmFkaWVudF9wYXJhbWV0ZXJzX3NpemVfc2hvdWxkX2JlX211bHRpcGxlX29mX3R3byk7
Ci0gICAgQ09NUElMRV9BU1NFUlQoIShzaXplb2YoQ29sb3JTdG9wKSAlIDIpLCBDb2xvcl9zdG9w
X3NpemVfc2hvdWxkX2JlX211bHRpcGxlX29mX3R3byk7Ci0gICAgCi0gICAgLy8gRW5zdXJlIHRo
YXQgYW55IHBhZGRpbmcgaW4gdGhlIHN0cnVjdCBpcyB6ZXJvLWZpbGxlZCwgc28gaXQgd2lsbCBu
b3QgYWZmZWN0IHRoZSBoYXNoIHZhbHVlLgotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFza2luZyBm
b3IgdHJvdWJsZSwgYmVjYXVzZSBpdCBpcyBhIG5vbnRyaXZpYWwgdHlwZS4KLSAgICBtZW1zZXQo
c3RhdGljX2Nhc3Q8dm9pZCo+KCZwYXJhbWV0ZXJzKSwgMCwgc2l6ZW9mKHBhcmFtZXRlcnMpKTsK
LSAgICAKLSAgICBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKLSAgICAgICAgWyZwYXJhbWV0ZXJzXSAo
Y29uc3QgTGluZWFyRGF0YSYgZGF0YSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5wb2ludDAg
PSBkYXRhLnBvaW50MDsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMucG9pbnQxID0gZGF0YS5wb2lu
dDE7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLnN0YXJ0UmFkaXVzID0gMDsKLSAgICAgICAgICAg
IHBhcmFtZXRlcnMuZW5kUmFkaXVzID0gMDsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuYXNwZWN0
UmF0aW8gPSAwOwotICAgICAgICAgICAgcGFyYW1ldGVycy5hbmdsZVJhZGlhbnMgPSAwOwotICAg
ICAgICAgICAgcGFyYW1ldGVycy50eXBlID0gVHlwZTo6TGluZWFyOwotICAgICAgICB9LAotICAg
ICAgICBbJnBhcmFtZXRlcnNdIChjb25zdCBSYWRpYWxEYXRhJiBkYXRhKSB7Ci0gICAgICAgICAg
ICBwYXJhbWV0ZXJzLnBvaW50MCA9IGRhdGEucG9pbnQwOwotICAgICAgICAgICAgcGFyYW1ldGVy
cy5wb2ludDEgPSBkYXRhLnBvaW50MTsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuc3RhcnRSYWRp
dXMgPSBkYXRhLnN0YXJ0UmFkaXVzOwotICAgICAgICAgICAgcGFyYW1ldGVycy5lbmRSYWRpdXMg
PSBkYXRhLmVuZFJhZGl1czsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuYXNwZWN0UmF0aW8gPSBk
YXRhLmFzcGVjdFJhdGlvOwotICAgICAgICAgICAgcGFyYW1ldGVycy5hbmdsZVJhZGlhbnMgPSAw
OwotICAgICAgICAgICAgcGFyYW1ldGVycy50eXBlID0gVHlwZTo6UmFkaWFsOwotICAgICAgICB9
LAotICAgICAgICBbJnBhcmFtZXRlcnNdIChjb25zdCBDb25pY0RhdGEmIGRhdGEpIHsKLSAgICAg
ICAgICAgIHBhcmFtZXRlcnMucG9pbnQwID0gZGF0YS5wb2ludDA7Ci0gICAgICAgICAgICBwYXJh
bWV0ZXJzLnBvaW50MSA9IHswLCAwfTsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuc3RhcnRSYWRp
dXMgPSAwOwotICAgICAgICAgICAgcGFyYW1ldGVycy5lbmRSYWRpdXMgPSAwOwotICAgICAgICAg
ICAgcGFyYW1ldGVycy5hc3BlY3RSYXRpbyA9IDA7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmFu
Z2xlUmFkaWFucyA9IGRhdGEuYW5nbGVSYWRpYW5zOwotICAgICAgICAgICAgcGFyYW1ldGVycy50
eXBlID0gVHlwZTo6Q29uaWM7Ci0gICAgICAgIH0KLSAgICApOworc3RhdGljIHZvaWQgYWRkKEhh
c2hlciYgaGFzaGVyLCBjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9wJiBzdG9wKQoreworICAgIGFk
ZChoYXNoZXIsIHN0b3Aub2Zmc2V0LCBzdG9wLmNvbG9yKTsKK30KIAotICAgIHBhcmFtZXRlcnMu
c3ByZWFkTWV0aG9kID0gbV9zcHJlYWRNZXRob2Q7Ci0gICAgcGFyYW1ldGVycy5ncmFkaWVudFNw
YWNlVHJhbnNmb3JtYXRpb24gPSBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKK3N0YXRp
YyB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgR3JhZGllbnQ6OkxpbmVhckRhdGEmIGRh
dGEpCit7CisgICAgYWRkKGhhc2hlciwgZGF0YS5wb2ludDAsIGRhdGEucG9pbnQxKTsKK30KIAot
ICAgIHVuc2lnbmVkIHBhcmFtZXRlcnNIYXNoID0gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KCZw
YXJhbWV0ZXJzLCBzaXplb2YocGFyYW1ldGVycykpOwotICAgIHVuc2lnbmVkIHN0b3BIYXNoID0g
U3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KG1fc3RvcHMuZGF0YSgpLCBtX3N0b3BzLnNpemUoKSAq
IHNpemVvZihDb2xvclN0b3ApKTsKK3N0YXRpYyB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29u
c3QgR3JhZGllbnQ6OlJhZGlhbERhdGEmIGRhdGEpCit7CisgICAgYWRkKGhhc2hlciwgZGF0YS5w
b2ludDAsIGRhdGEucG9pbnQxLCBkYXRhLnN0YXJ0UmFkaXVzLCBkYXRhLmVuZFJhZGl1cywgZGF0
YS5hc3BlY3RSYXRpbyk7Cit9CiAKLSAgICBtX2NhY2hlZEhhc2ggPSBwYWlySW50SGFzaChwYXJh
bWV0ZXJzSGFzaCwgc3RvcEhhc2gpOworc3RhdGljIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBj
b25zdCBHcmFkaWVudDo6Q29uaWNEYXRhJiBkYXRhKQoreworICAgIGFkZChoYXNoZXIsIGRhdGEu
cG9pbnQwLCBkYXRhLmFuZ2xlUmFkaWFucyk7Cit9CiAKK3Vuc2lnbmVkIEdyYWRpZW50OjpoYXNo
KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fY2FjaGVkSGFzaCkgeworICAgICAgICBzb3J0U3RvcHMo
KTsKKyAgICAgICAgbV9jYWNoZWRIYXNoID0gY29tcHV0ZUhhc2gobV9kYXRhLCBtX3NwcmVhZE1l
dGhvZCwgbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24sIG1fc3RvcHMpOworICAgIH0KICAg
ICByZXR1cm4gbV9jYWNoZWRIYXNoOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhZGllbnQuaAppbmRleCA2ZWI1ZDA3OWFjN2U0ZmUzYTJjZjUxNjdkMjg1ZTAzNWIw
Y2YxMDAyLi5jY2Q1M2ExYmU4OTJjOWQ2NjA2MWFjZmU0NTc1MDc4NmQ3ZTYxN2EzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgKQEAgLTMxLDQ4ICszMSw0
NCBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgorI2VuZGlmCisKKyNpZiBVU0UoRElSRUNUMkQpCisjaW5jbHVkZSAiQ09NUHRyLmgiCisjZW5k
aWYKKwogI2lmIFVTRShDRykKIHR5cGVkZWYgc3RydWN0IENHQ29udGV4dCogQ0dDb250ZXh0UmVm
OwogdHlwZWRlZiBzdHJ1Y3QgQ0dHcmFkaWVudCogQ0dHcmFkaWVudFJlZjsKLXR5cGVkZWYgQ0dH
cmFkaWVudFJlZiBQbGF0Zm9ybUdyYWRpZW50OwotI2VsaWYgVVNFKERJUkVDVDJEKQorI2VuZGlm
CisKKyNpZiBVU0UoRElSRUNUMkQpCiBpbnRlcmZhY2UgSUQyRDFCcnVzaDsKIGludGVyZmFjZSBJ
RDJEMVJlbmRlclRhcmdldDsKLXR5cGVkZWYgSUQyRDFCcnVzaCogUGxhdGZvcm1HcmFkaWVudDsK
LSNlbGlmIFVTRShDQUlSTykKKyNlbmRpZgorCisjaWYgVVNFKENBSVJPKQogdHlwZWRlZiBzdHJ1
Y3QgX2NhaXJvX3BhdHRlcm4gY2Fpcm9fcGF0dGVybl90OwotdHlwZWRlZiBjYWlyb19wYXR0ZXJu
X3QqIFBsYXRmb3JtR3JhZGllbnQ7Ci0jZWxzZQotdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYWRp
ZW50OwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ29sb3I7CiBjbGFz
cyBGbG9hdFJlY3Q7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiAKIGNsYXNzIEdyYWRpZW50IDog
cHVibGljIFJlZkNvdW50ZWQ8R3JhZGllbnQ+IHsKIHB1YmxpYzoKLSAgICAvLyBGSVhNRTogRXh0
ZW5kZWRDb2xvciAtIEEgY29sb3Igc3RvcCBuZWVkcyBhIG5vdGlvbiBvZiBjb2xvciBzcGFjZS4K
ICAgICBzdHJ1Y3QgQ29sb3JTdG9wIHsKICAgICAgICAgZmxvYXQgb2Zmc2V0IHsgMCB9OwogICAg
ICAgICBDb2xvciBjb2xvcjsKIAotICAgICAgICBDb2xvclN0b3AoKSA9IGRlZmF1bHQ7Ci0gICAg
ICAgIENvbG9yU3RvcChmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICAgICAg
ICAgIDogb2Zmc2V0KG9mZnNldCkKLSAgICAgICAgICAgICwgY29sb3IoY29sb3IpCi0gICAgICAg
IHsKLSAgICAgICAgfQotCi0gICAgICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKLSAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPENvbG9yU3RvcD4gZGVjb2RlKERlY29kZXImKTsKKyAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29sb3JTdG9wPiBk
ZWNvZGUoRGVjb2RlciYpOwogICAgIH07CiAKICAgICB1c2luZyBDb2xvclN0b3BWZWN0b3IgPSBW
ZWN0b3I8Q29sb3JTdG9wLCAyPjsKQEAgLTgxLDggKzc3LDggQEAgcHVibGljOgogICAgICAgICBG
bG9hdFBvaW50IHBvaW50MDsKICAgICAgICAgRmxvYXRQb2ludCBwb2ludDE7CiAKLSAgICAgICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAg
ICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8TGluZWFyRGF0YT4g
ZGVjb2RlKERlY29kZXImKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNv
ZGVyPiBzdGF0aWMgT3B0aW9uYWw8TGluZWFyRGF0YT4gZGVjb2RlKERlY29kZXImKTsKICAgICB9
OwogCiAgICAgc3RydWN0IFJhZGlhbERhdGEgewpAQCAtOTIsMzcgKzg4LDMxIEBAIHB1YmxpYzoK
ICAgICAgICAgZmxvYXQgZW5kUmFkaXVzOwogICAgICAgICBmbG9hdCBhc3BlY3RSYXRpbzsgLy8g
Rm9yIGVsbGlwdGljYWwgZ3JhZGllbnQsIHdpZHRoIC8gaGVpZ2h0LgogCi0gICAgICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICAgICAg
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJhZGlhbERhdGE+IGRlY29k
ZShEZWNvZGVyJik7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPFJhZGlhbERhdGE+IGRlY29kZShEZWNvZGVyJik7CiAgICAgfTsKLSAg
ICAKKwogICAgIHN0cnVjdCBDb25pY0RhdGEgewogICAgICAgICBGbG9hdFBvaW50IHBvaW50MDsK
ICAgICAgICAgZmxvYXQgYW5nbGVSYWRpYW5zOwogCi0gICAgICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICAgICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENvbmljRGF0YT4gZGVjb2RlKERlY29kZXImKTsK
KyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgT3B0aW9u
YWw8Q29uaWNEYXRhPiBkZWNvZGUoRGVjb2RlciYpOwogICAgIH07CiAKICAgICB1c2luZyBEYXRh
ID0gVmFyaWFudDxMaW5lYXJEYXRhLCBSYWRpYWxEYXRhLCBDb25pY0RhdGE+OwogCi0gICAgZW51
bSBjbGFzcyBUeXBlIHsgTGluZWFyLCBSYWRpYWwsIENvbmljIH07Ci0KICAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgUmVmPEdyYWRpZW50PiBjcmVhdGUoTGluZWFyRGF0YSYmKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgUmVmPEdyYWRpZW50PiBjcmVhdGUoUmFkaWFsRGF0YSYmKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEdyYWRpZW50PiBjcmVhdGUoQ29uaWNEYXRhJiYp
OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8R3JhZGllbnQ+IGNyZWF0ZShEYXRhJiYp
OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgfkdyYWRpZW50KCk7CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCBUeXBlIHR5cGUoKSBjb25zdDsKLQotICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdDsKICAgICBi
b29sIGlzWmVyb1NpemUoKSBjb25zdDsKIAogICAgIGNvbnN0IERhdGEmIGRhdGEoKSBjb25zdCB7
IHJldHVybiBtX2RhdGE7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkQ29sb3JTdG9w
KGNvbnN0IENvbG9yU3RvcCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkQ29sb3JTdG9w
KGZsb2F0LCBjb25zdCBDb2xvciYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkQ29sb3JT
dG9wKENvbG9yU3RvcCYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNvcnRlZENvbG9y
U3RvcHMoQ29sb3JTdG9wVmVjdG9yJiYpOwogCiAgICAgY29uc3QgQ29sb3JTdG9wVmVjdG9yJiBz
dG9wcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcHM7IH0KQEAgLTEzMCw3ICsxMjAsNiBAQCBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTcHJlYWRNZXRob2QoR3JhZGllbnRTcHJl
YWRNZXRob2QpOwogICAgIEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3ByZWFkTWV0aG9kOyB9CiAKLSAgICAvLyBDRyBuZWVkcyB0byB0cmFuc2Zv
cm0gdGhlIGdyYWRpZW50IGF0IGRyYXcgdGltZS4KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNw
YWNlVHJhbnNmb3JtYXRpb24pOwogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRT
cGFjZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0
aW9uOyB9CiAKQEAgLTEzOCwzMyArMTI3LDMzIEBAIHB1YmxpYzoKICAgICB2b2lkIGFkanVzdFBh
cmFtZXRlcnNGb3JUaWxlZERyYXdpbmcoRmxvYXRTaXplJiwgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nKTsKIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKLSAgICB2b2lk
IGludmFsaWRhdGVIYXNoKCkgeyBtX2NhY2hlZEhhc2ggPSAwOyB9CisKKyNpZiBVU0UoQ0FJUk8p
CisgICAgUmVmUHRyPGNhaXJvX3BhdHRlcm5fdD4gY3JlYXRlUGF0dGVybihmbG9hdCBnbG9iYWxB
bHBoYSk7CisjZW5kaWYKIAogI2lmIFVTRShDRykKICAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29u
dGV4dCYpOwogICAgIHZvaWQgcGFpbnQoQ0dDb250ZXh0UmVmKTsKLSNlbGlmIFVTRShESVJFQ1Qy
RCkKLSAgICBQbGF0Zm9ybUdyYWRpZW50IGNyZWF0ZVBsYXRmb3JtR3JhZGllbnRJZk5lY2Vzc2Fy
eShJRDJEMVJlbmRlclRhcmdldCopOwotI2VsaWYgVVNFKENBSVJPKQotICAgIFBsYXRmb3JtR3Jh
ZGllbnQgY3JlYXRlUGxhdGZvcm1HcmFkaWVudChmbG9hdCBnbG9iYWxBbHBoYSk7CiAjZW5kaWYK
IAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEdyYWRp
ZW50Pj4gZGVjb2RlKERlY29kZXImKTsKKyNpZiBVU0UoRElSRUNUMkQpCisgICAgSUQyRDFCcnVz
aCogY3JlYXRlQnJ1c2goSUQyRDFSZW5kZXJUYXJnZXQqKTsKKyNlbmRpZgorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8R3JhZGllbnQ+PiBk
ZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgotICAgIEdyYWRpZW50KExpbmVhckRhdGEmJik7
Ci0gICAgR3JhZGllbnQoUmFkaWFsRGF0YSYmKTsKLSAgICBHcmFkaWVudChDb25pY0RhdGEmJik7
Ci0KLSAgICBQbGF0Zm9ybUdyYWRpZW50IHBsYXRmb3JtR3JhZGllbnQoKTsKLSAgICB2b2lkIHBs
YXRmb3JtSW5pdCgpIHsgbV9ncmFkaWVudCA9IG51bGxwdHI7IH0KLSAgICB2b2lkIHBsYXRmb3Jt
RGVzdHJveSgpOworICAgIGV4cGxpY2l0IEdyYWRpZW50KExpbmVhckRhdGEmJik7CisgICAgZXhw
bGljaXQgR3JhZGllbnQoUmFkaWFsRGF0YSYmKTsKKyAgICBleHBsaWNpdCBHcmFkaWVudChEYXRh
JiYpOwogCi0gICAgdm9pZCBzb3J0U3RvcHNJZk5lY2Vzc2FyeSgpOworICAgIHZvaWQgc29ydFN0
b3BzKCkgY29uc3Q7CisgICAgdm9pZCBzdG9wc0NoYW5nZWQoKTsKIAotI2lmIFVTRShESVJFQ1Qy
RCkKLSAgICB2b2lkIGdlbmVyYXRlR3JhZGllbnQoSUQyRDFSZW5kZXJUYXJnZXQqKTsKKyNpZiBV
U0UoQ0cpCisgICAgdm9pZCBjcmVhdGVDR0dyYWRpZW50KCk7CiAjZW5kaWYKIAogICAgIERhdGEg
bV9kYXRhOwpAQCAtMTc2LDE4ICsxNjUsMjIgQEAgcHJpdmF0ZToKIAogICAgIG11dGFibGUgdW5z
aWduZWQgbV9jYWNoZWRIYXNoIHsgMCB9OwogCi0gICAgUGxhdGZvcm1HcmFkaWVudCBtX2dyYWRp
ZW50OworI2lmIFVTRShDRykKKyAgICBSZXRhaW5QdHI8Q0dHcmFkaWVudFJlZj4gbV9ncmFkaWVu
dDsKKyNlbmRpZgorCisjaWYgVVNFKERJUkVDVDJEKQorICAgIENPTVB0cjxJRDJEMUJydXNoPiBt
X2JydXNoOworI2VuZGlmCiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBHcmFk
aWVudDo6Q29sb3JTdG9wOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3RlbXBsYXRl
PHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgR3JhZGllbnQ6OkNvbG9yU3RvcDo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBvZmZzZXQ7CiAgICAgZW5jb2Rl
ciA8PCBjb2xvcjsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPEdyYWRp
ZW50OjpDb2xvclN0b3A+IEdyYWRpZW50OjpDb2xvclN0b3A6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQordGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gT3B0aW9uYWw8R3JhZGllbnQ6OkNvbG9y
U3RvcD4gR3JhZGllbnQ6OkNvbG9yU3RvcDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAg
ICAgT3B0aW9uYWw8ZmxvYXQ+IG9mZnNldDsKICAgICBkZWNvZGVyID4+IG9mZnNldDsKQEAgLTIw
MiwxNSArMTk1LDEzIEBAIE9wdGlvbmFsPEdyYWRpZW50OjpDb2xvclN0b3A+IEdyYWRpZW50OjpD
b2xvclN0b3A6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHJldHVybiB7eyAqb2Zmc2V0
LCAqY29sb3IgfX07CiB9CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEdyYWRpZW50
OjpMaW5lYXJEYXRhOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3RlbXBsYXRlPHR5
cGVuYW1lIEVuY29kZXI+IHZvaWQgR3JhZGllbnQ6OkxpbmVhckRhdGE6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgcG9pbnQwOwogICAgIGVuY29kZXIg
PDwgcG9pbnQxOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8R3JhZGll
bnQ6OkxpbmVhckRhdGE+IEdyYWRpZW50OjpMaW5lYXJEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKK3RlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IE9wdGlvbmFsPEdyYWRpZW50OjpMaW5l
YXJEYXRhPiBHcmFkaWVudDo6TGluZWFyRGF0YTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7
CiAgICAgT3B0aW9uYWw8RmxvYXRQb2ludD4gcG9pbnQwOwogICAgIGRlY29kZXIgPj4gcG9pbnQw
OwpAQCAtMjI1LDggKzIxNiw3IEBAIE9wdGlvbmFsPEdyYWRpZW50OjpMaW5lYXJEYXRhPiBHcmFk
aWVudDo6TGluZWFyRGF0YTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgcmV0dXJuIHt7
ICpwb2ludDAsICpwb2ludDEgfX07CiB9CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lk
IEdyYWRpZW50OjpSYWRpYWxEYXRhOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3Rl
bXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgR3JhZGllbnQ6OlJhZGlhbERhdGE6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgcG9pbnQwOwogICAg
IGVuY29kZXIgPDwgcG9pbnQxOwpAQCAtMjM1LDggKzIyNSw3IEBAIHZvaWQgR3JhZGllbnQ6OlJh
ZGlhbERhdGE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwg
YXNwZWN0UmF0aW87CiB9CiAKLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxHcmFk
aWVudDo6UmFkaWFsRGF0YT4gR3JhZGllbnQ6OlJhZGlhbERhdGE6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQordGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gT3B0aW9uYWw8R3JhZGllbnQ6OlJh
ZGlhbERhdGE+IEdyYWRpZW50OjpSYWRpYWxEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
IHsKICAgICBPcHRpb25hbDxGbG9hdFBvaW50PiBwb2ludDA7CiAgICAgZGVjb2RlciA+PiBwb2lu
dDA7CkBAIC0yNjYsMTUgKzI1NSwxMyBAQCBPcHRpb25hbDxHcmFkaWVudDo6UmFkaWFsRGF0YT4g
R3JhZGllbnQ6OlJhZGlhbERhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHJldHVy
biB7eyAqcG9pbnQwLCAqcG9pbnQxLCAqc3RhcnRSYWRpdXMsICplbmRSYWRpdXMsICphc3BlY3RS
YXRpbyB9fTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgR3JhZGllbnQ6OkNv
bmljRGF0YTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBFbmNvZGVyPiB2b2lkIEdyYWRpZW50OjpDb25pY0RhdGE6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgcG9pbnQwOwogICAgIGVuY29kZXIgPDwgYW5n
bGVSYWRpYW5zOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8R3JhZGll
bnQ6OkNvbmljRGF0YT4gR3JhZGllbnQ6OkNvbmljRGF0YTo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBPcHRpb25hbDxHcmFkaWVudDo6Q29uaWNE
YXRhPiBHcmFkaWVudDo6Q29uaWNEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAg
ICBPcHRpb25hbDxGbG9hdFBvaW50PiBwb2ludDA7CiAgICAgZGVjb2RlciA+PiBwb2ludDA7CkBA
IC0yODksMTE1ICsyNzYsNTAgQEAgT3B0aW9uYWw8R3JhZGllbnQ6OkNvbmljRGF0YT4gR3JhZGll
bnQ6OkNvbmljRGF0YTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgcmV0dXJuIHt7ICpw
b2ludDAsICphbmdsZVJhZGlhbnMgfX07CiB9CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12
b2lkIEdyYWRpZW50OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3RlbXBsYXRlPHR5
cGVuYW1lIEVuY29kZXI+IHZvaWQgR3JhZGllbnQ6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAogewotICAgIGF1dG8gdHlwZSA9IHRoaXMtPnR5cGUoKTsKLSAgICBlbmNvZGVyIDw8IHR5
cGU7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBUeXBlOjpMaW5lYXI6Ci0gICAgICAg
IGVuY29kZXIgPDwgV1RGOjpnZXQ8R3JhZGllbnQ6OkxpbmVhckRhdGE+KG1fZGF0YSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgVHlwZTo6UmFkaWFsOgotICAgICAgICBlbmNvZGVyIDw8IFdU
Rjo6Z2V0PEdyYWRpZW50OjpSYWRpYWxEYXRhPihtX2RhdGEpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFR5cGU6OkNvbmljOgotICAgICAgICBlbmNvZGVyIDw8IFdURjo6Z2V0PEdyYWRpZW50
OjpDb25pY0RhdGE+KG1fZGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBlbmNvZGVy
IDw8IG1fZGF0YTsKICAgICBlbmNvZGVyIDw8IG1fc3RvcHM7CiAgICAgZW5jb2RlciA8PCBtX3N0
b3BzU29ydGVkOwogICAgIGVuY29kZXIgPDwgbV9zcHJlYWRNZXRob2Q7CiAgICAgZW5jb2RlciA8
PCBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4KLU9wdGlvbmFsPFJlZjxHcmFkaWVudD4+IEdyYWRpZW50OjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKK3RlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IE9wdGlvbmFsPFJlZjxHcmFkaWVu
dD4+IEdyYWRpZW50OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICBPcHRpb25hbDxH
cmFkaWVudDo6VHlwZT4gdHlwZTsKLSAgICBkZWNvZGVyID4+IHR5cGU7Ci0gICAgaWYgKCF0eXBl
KQorICAgIE9wdGlvbmFsPERhdGE+IGRhdGE7CisgICAgZGVjb2RlciA+PiBkYXRhOworICAgIGlm
ICghZGF0YSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIFJlZlB0cjxHcmFk
aWVudD4gZ3JhZGllbnQ7Ci0gICAgc3dpdGNoICgqdHlwZSkgewotICAgIGNhc2UgVHlwZTo6TGlu
ZWFyOiB7Ci0gICAgICAgIE9wdGlvbmFsPExpbmVhckRhdGE+IGxpbmVhckRhdGE7Ci0gICAgICAg
IGRlY29kZXIgPj4gbGluZWFyRGF0YTsKLSAgICAgICAgaWYgKCFsaW5lYXJEYXRhKQotICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgICAgICBncmFkaWVudCA9IEdyYWRpZW50
OjpjcmVhdGUoV1RGTW92ZSgqbGluZWFyRGF0YSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgY2FzZSBUeXBlOjpSYWRpYWw6IHsKLSAgICAgICAgT3B0aW9uYWw8UmFkaWFsRGF0YT4gcmFk
aWFsRGF0YTsKLSAgICAgICAgZGVjb2RlciA+PiByYWRpYWxEYXRhOwotICAgICAgICBpZiAoIXJh
ZGlhbERhdGEpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgICAgIGdy
YWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShXVEZNb3ZlKCpyYWRpYWxEYXRhKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFR5cGU6OkNvbmljOiB7Ci0gICAgICAgIE9wdGlvbmFs
PENvbmljRGF0YT4gY29uaWNEYXRhOwotICAgICAgICBkZWNvZGVyID4+IGNvbmljRGF0YTsKLSAg
ICAgICAgaWYgKCFjb25pY0RhdGEpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
Ci0gICAgICAgIGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShXVEZNb3ZlKCpjb25pY0RhdGEp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIH0KLQotICAgIGlmICghZ3JhZGllbnQpIHsK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci0gICAgfQorICAgIGF1dG8gZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKFdURk1vdmUo
KmRhdGEpKTsKIAogICAgIE9wdGlvbmFsPENvbG9yU3RvcFZlY3Rvcj4gc3RvcHM7CiAgICAgZGVj
b2RlciA+PiBzdG9wczsKICAgICBpZiAoIXN0b3BzKQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotCiAgICAgT3B0aW9uYWw8Ym9vbD4gc3RvcHNTb3J0ZWQ7CiAgICAgZGVjb2RlciA+PiBz
dG9wc1NvcnRlZDsKICAgICBpZiAoIXN0b3BzU29ydGVkLmhhc1ZhbHVlKCkpCiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBpZiAoc3RvcHNTb3J0ZWQudmFsdWUoKSkKKyAgICBp
ZiAoKnN0b3BzU29ydGVkKQogICAgICAgICBncmFkaWVudC0+c2V0U29ydGVkQ29sb3JTdG9wcyhX
VEZNb3ZlKCpzdG9wcykpOwogICAgIGVsc2UgewogICAgICAgICBmb3IgKGF1dG8mIHN0b3AgOiAq
c3RvcHMpCi0gICAgICAgICAgICBncmFkaWVudC0+YWRkQ29sb3JTdG9wKHN0b3ApOworICAgICAg
ICAgICAgZ3JhZGllbnQtPmFkZENvbG9yU3RvcChXVEZNb3ZlKHN0b3ApKTsKICAgICB9CiAKICAg
ICBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2Q7CiAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShzcHJlYWRNZXRob2QpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCiAgICAg
Z3JhZGllbnQtPnNldFNwcmVhZE1ldGhvZChzcHJlYWRNZXRob2QpOwogCiAgICAgT3B0aW9uYWw8
QWZmaW5lVHJhbnNmb3JtPiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247CiAgICAgZGVjb2Rl
ciA+PiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247CiAgICAgaWYgKCFncmFkaWVudFNwYWNl
VHJhbnNmb3JtYXRpb24pCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KICAgICBncmFk
aWVudC0+c2V0R3JhZGllbnRTcGFjZVRyYW5zZm9ybShXVEZNb3ZlKCpncmFkaWVudFNwYWNlVHJh
bnNmb3JtYXRpb24pKTsKLSAgICByZXR1cm4gZ3JhZGllbnQucmVsZWFzZU5vbk51bGwoKTsKKwor
ICAgIHJldHVybiBXVEZNb3ZlKGdyYWRpZW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJD
b3JlOjpHcmFkaWVudDo6VHlwZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0g
ICAgV2ViQ29yZTo6R3JhZGllbnQ6OlR5cGUsCi0gICAgV2ViQ29yZTo6R3JhZGllbnQ6OlR5cGU6
OkxpbmVhciwKLSAgICBXZWJDb3JlOjpHcmFkaWVudDo6VHlwZTo6UmFkaWFsLAotICAgIFdlYkNv
cmU6OkdyYWRpZW50OjpUeXBlOjpDb25pYwotICAgID47Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
VEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuY3BwCmluZGV4IDM2Mzc1ZDNiN2MxMjFjZTg2NTk3YWZmN2RlN2NiMTJhNDVkODU2ODku
LmU0ODBkMDg1NGE4Mjg5NWUyMjc2MzUwYWE4ODYzMWYyMzVhMzZhZDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAt
NzUsNiArNzUsMjYgQEAgcHJpdmF0ZToKICAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6ZmxhZykgJiYgKG1fc3RhdGUucHJvcGVydHkgIT0gc3RhdGUu
cHJvcGVydHkpKSBcCiAgICAgICAgIGNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRTdGF0
ZTo6ZmxhZyk7CiAKK0dyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSgp
CisgICAgOiBzaG91bGRBbnRpYWxpYXModHJ1ZSkKKyAgICAsIHNob3VsZFNtb290aEZvbnRzKHRy
dWUpCisgICAgLCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHModHJ1ZSkKKyAgICAsIHNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zKGZhbHNlKQorI2lmIFVTRShDRykKKyAgICAvLyBDb3JlIEdyYXBo
aWNzIGluY29ycmVjdGx5IHJlbmRlcnMgc2hhZG93cyB3aXRoIHJhZGl1cyA+IDhweCAoPHJkYXI6
Ly9wcm9ibGVtLzgxMDM0NDI+KSwKKyAgICAvLyBidXQgd2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGlz
IGJ1Z2d5IGJlaGF2aW9yIGZvciBjYW52YXMgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KKyAgICAs
IHNoYWRvd3NVc2VMZWdhY3lSYWRpdXMoZmFsc2UpCisjZW5kaWYKKyAgICAsIGRyYXdMdW1pbmFu
Y2VNYXNrKGZhbHNlKQoreworfQorCitHcmFwaGljc0NvbnRleHRTdGF0ZTo6fkdyYXBoaWNzQ29u
dGV4dFN0YXRlKCkgPSBkZWZhdWx0OworR3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJikgPSBkZWZhdWx0OworR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKEdyYXBoaWNzQ29udGV4dFN0YXRl
JiYpID0gZGVmYXVsdDsKK0dyYXBoaWNzQ29udGV4dFN0YXRlJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6b3BlcmF0b3I9KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJikgPSBkZWZhdWx0OworR3Jh
cGhpY3NDb250ZXh0U3RhdGUmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpvcGVyYXRvcj0oR3JhcGhp
Y3NDb250ZXh0U3RhdGUmJikgPSBkZWZhdWx0OworCiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Rh
dGVDaGFuZ2VGbGFncyBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6Y2hhbmdlc0Zyb21TdGF0
ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpIGNvbnN0CiB7CiAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3M7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IDUw
MzY5Njc0YzQ1YTYyZTYxYjc4OTE5MjFlYmRiYTk4NjAzNmE1ZWEuLjlkY2RkZTk5OGYzNDEzNDI3
NzIyNjg2OTRjOTk4YWJlNjBjODRhZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVk
ZSAiRGFzaEFycmF5LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9udENh
c2NhZGUuaCIKLSNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMu
aCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKQEAg
LTk4LDYgKzk3LDEwIEBAIGNsYXNzIFBhdGg7CiBjbGFzcyBUZXh0UnVuOwogY2xhc3MgVHJhbnNm
b3JtYXRpb25NYXRyaXg7CiAKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CitjbGFzcyBSZWNvcmRl
cjsKK30KKwogZW51bSBjbGFzcyBUZXh0RHJhd2luZ01vZGUgOiB1aW50OF90IHsKICAgICBGaWxs
ID0gMSA8PCAwLAogICAgIFN0cm9rZSA9IDEgPDwgMSwKQEAgLTE1MywyNCArMTU2LDE1IEBAIE9w
dGlvbmFsPERvY3VtZW50TWFya2VyTGluZVN0eWxlPiBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6
ZGVjb2RlKERlY29kZXImIGRlY29kCiAgICAgcmV0dXJuIHt7ICptb2RlLCAqc2hvdWxkVXNlRGFy
a0FwcGVhcmFuY2UgfX07CiB9CiAKLW5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7Ci1jbGFzcyBSZWNv
cmRlcjsKLX0KLQogc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKLSAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZSgpCi0gICAgICAgIDogc2hvdWxkQW50aWFsaWFzKHRydWUpCi0gICAgICAgICwg
c2hvdWxkU21vb3RoRm9udHModHJ1ZSkKLSAgICAgICAgLCBzaG91bGRTdWJwaXhlbFF1YW50aXpl
Rm9udHModHJ1ZSkKLSAgICAgICAgLCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhmYWxzZSkKLSNp
ZiBVU0UoQ0cpCi0gICAgICAgIC8vIENvcmUgR3JhcGhpY3MgaW5jb3JyZWN0bHkgcmVuZGVycyBz
aGFkb3dzIHdpdGggcmFkaXVzID4gOHB4ICg8cmRhcjovL3Byb2JsZW0vODEwMzQ0Mj4pLAotICAg
ICAgICAvLyBidXQgd2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGlzIGJ1Z2d5IGJlaGF2aW9yIGZvciBj
YW52YXMgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KLSAgICAgICAgLCBzaGFkb3dzVXNlTGVnYWN5
UmFkaXVzKGZhbHNlKQotI2VuZGlmCi0gICAgICAgICwgZHJhd0x1bWluYW5jZU1hc2soZmFsc2Up
Ci0gICAgewotICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0ZSgp
OworICAgIFdFQkNPUkVfRVhQT1JUIH5HcmFwaGljc0NvbnRleHRTdGF0ZSgpOworCisgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKKyAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKTsKKworICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlJiBvcGVyYXRvcj0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKKyAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3BlcmF0b3I9KEdyYXBoaWNzQ29udGV4dFN0YXRlJiYp
OwogCiAgICAgZW51bSBDaGFuZ2UgOiB1aW50MzJfdCB7CiAgICAgICAgIFN0cm9rZUdyYWRpZW50
Q2hhbmdlICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKQEAgLTE5Nyw3ICsxOTEsNyBAQCBz
dHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGUgewogICAgICAgICBVc2VEYXJrQXBwZWFyYW5jZUNo
YW5nZSAgICAgICAgICAgICAgICAgPSAxIDw8IDIwLAogI2VuZGlmCiAgICAgfTsKLSAgICB0eXBl
ZGVmIE9wdGlvblNldDxDaGFuZ2U+IFN0YXRlQ2hhbmdlRmxhZ3M7CisgICAgdXNpbmcgU3RhdGVD
aGFuZ2VGbGFncyA9IE9wdGlvblNldDxDaGFuZ2U+OwogCiAgICAgUmVmUHRyPEdyYWRpZW50PiBz
dHJva2VHcmFkaWVudDsKICAgICBSZWZQdHI8UGF0dGVybj4gc3Ryb2tlUGF0dGVybjsKQEAgLTMw
OCw3ICszMDIsNyBAQCBwdWJsaWM6CiAgICAgUGF0dGVybiogc3Ryb2tlUGF0dGVybigpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQoKTsgfQogCiAgICAgdm9pZCBzZXRT
dHJva2VHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYpOwotICAgIFJlZlB0cjxHcmFkaWVudD4gc3Ry
b2tlR3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZUdyYWRpZW50OyB9Cisg
ICAgR3JhZGllbnQqIHN0cm9rZUdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJv
a2VHcmFkaWVudC5nZXQoKTsgfQogCiAgICAgdm9pZCBzZXRGaWxsUnVsZShXaW5kUnVsZSk7CiAg
ICAgV2luZFJ1bGUgZmlsbFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxSdWxlOyB9
CkBAIC0zMjAsNyArMzE0LDcgQEAgcHVibGljOgogICAgIFBhdHRlcm4qIGZpbGxQYXR0ZXJuKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsUGF0dGVybi5nZXQoKTsgfQogCiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRGaWxsR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmKTsKLSAgICBSZWZQ
dHI8R3JhZGllbnQ+IGZpbGxHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEdy
YWRpZW50OyB9CisgICAgR3JhZGllbnQqIGZpbGxHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUuZmlsbEdyYWRpZW50LmdldCgpOyB9CiAKICAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKGJvb2wpOwogICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRp
b25zLmNwcAppbmRleCAzZmQ0YWRlMDE1N2U5ZDRmOWJkN2Q4ZTRiZmViNDhhZmZlMThjOGU1Li45
ZjFkMTA5ZmYwOTdkNTNiNzJhNTQyYjI0ZThjNjMxZjQwNzc4OGNmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9u
cy5jcHAKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJEcmF3RXJyb3JVbmRlcmxpbmUuaCIK
ICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNp
bmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmgiCiAjaW5jbHVkZSAiSW1h
Z2UuaCIKQEAgLTU2OCw5ICs1NjksOSBAQCBGaWxsU291cmNlOjpGaWxsU291cmNlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKICAgICAgICAgcGF0dGVybi5yZXBlYXRYID0gc3Rh
dGUuZmlsbFBhdHRlcm4tPnJlcGVhdFgoKTsKICAgICAgICAgcGF0dGVybi5yZXBlYXRZID0gc3Rh
dGUuZmlsbFBhdHRlcm4tPnJlcGVhdFkoKTsKICAgICB9IGVsc2UgaWYgKHN0YXRlLmZpbGxHcmFk
aWVudCkgewotICAgICAgICBncmFkaWVudC5iYXNlID0gYWRvcHRSZWYoc3RhdGUuZmlsbEdyYWRp
ZW50LT5jcmVhdGVQbGF0Zm9ybUdyYWRpZW50KDEpKTsKKyAgICAgICAgZ3JhZGllbnQuYmFzZSA9
IHN0YXRlLmZpbGxHcmFkaWVudC0+Y3JlYXRlUGF0dGVybigxKTsKICAgICAgICAgaWYgKHN0YXRl
LmFscGhhICE9IDEpCi0gICAgICAgICAgICBncmFkaWVudC5hbHBoYUFkanVzdGVkID0gYWRvcHRS
ZWYoc3RhdGUuZmlsbEdyYWRpZW50LT5jcmVhdGVQbGF0Zm9ybUdyYWRpZW50KHN0YXRlLmFscGhh
KSk7CisgICAgICAgICAgICBncmFkaWVudC5hbHBoYUFkanVzdGVkID0gc3RhdGUuZmlsbEdyYWRp
ZW50LT5jcmVhdGVQYXR0ZXJuKHN0YXRlLmFscGhhKTsKICAgICB9IGVsc2UKICAgICAgICAgY29s
b3IgPSBzdGF0ZS5maWxsQ29sb3I7CiB9CkBAIC01ODEsOSArNTgyLDkgQEAgU3Ryb2tlU291cmNl
OjpTdHJva2VTb3VyY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQogICAgIGlm
IChzdGF0ZS5zdHJva2VQYXR0ZXJuKQogICAgICAgICBwYXR0ZXJuID0gYWRvcHRSZWYoc3RhdGUu
c3Ryb2tlUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKEFmZmluZVRyYW5zZm9ybSgpKSk7
CiAgICAgZWxzZSBpZiAoc3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsKLSAgICAgICAgZ3JhZGllbnQu
YmFzZSA9IGFkb3B0UmVmKHN0YXRlLnN0cm9rZUdyYWRpZW50LT5jcmVhdGVQbGF0Zm9ybUdyYWRp
ZW50KDEpKTsKKyAgICAgICAgZ3JhZGllbnQuYmFzZSA9IHN0YXRlLnN0cm9rZUdyYWRpZW50LT5j
cmVhdGVQYXR0ZXJuKDEpOwogICAgICAgICBpZiAoc3RhdGUuYWxwaGEgIT0gMSkKLSAgICAgICAg
ICAgIGdyYWRpZW50LmFscGhhQWRqdXN0ZWQgPSBhZG9wdFJlZihzdGF0ZS5zdHJva2VHcmFkaWVu
dC0+Y3JlYXRlUGxhdGZvcm1HcmFkaWVudChzdGF0ZS5hbHBoYSkpOworICAgICAgICAgICAgZ3Jh
ZGllbnQuYWxwaGFBZGp1c3RlZCA9IHN0YXRlLnN0cm9rZUdyYWRpZW50LT5jcmVhdGVQYXR0ZXJu
KHN0YXRlLmFscGhhKTsKICAgICB9IGVsc2UKICAgICAgICAgY29sb3IgPSBzdGF0ZS5zdHJva2VD
b2xvcjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYWRpZW50Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKaW5kZXggZmIwNDY5MmJhYjRmMGVjYjFlNjA2NGM2ZTVm
YjRiMWRmYzExYTQwOS4uZjA2ZmJhZDM5ZWZhOGY5YTE2MzMwZmI5YzBmYWEzNzlmMDg4NDI3MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGll
bnRDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhZGllbnRDYWlyby5jcHAKQEAgLTM3LDcgKzM3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi12b2lkIEdyYWRpZW50OjpwbGF0Zm9ybURlc3Ryb3koKQordm9pZCBHcmFkaWVudDo6c3Rv
cHNDaGFuZ2VkKCkKIHsKIH0KIApAQCAtMTg1LDI1ICsxODUsMjUgQEAgc3RhdGljIGNhaXJvX3Bh
dHRlcm5fdCogY3JlYXRlQ29uaWMoZmxvYXQgeG8sIGZsb2F0IHlvLCBmbG9hdCByLCBmbG9hdCBh
bmdsZVJhZGkKIAogI2VuZGlmCiAKLWNhaXJvX3BhdHRlcm5fdCogR3JhZGllbnQ6OmNyZWF0ZVBs
YXRmb3JtR3JhZGllbnQoZmxvYXQgZ2xvYmFsQWxwaGEpCitSZWZQdHI8Y2Fpcm9fcGF0dGVybl90
PiBHcmFkaWVudDo6Y3JlYXRlUGF0dGVybihmbG9hdCBnbG9iYWxBbHBoYSkKIHsKLSAgICBjYWly
b19wYXR0ZXJuX3QqIGdyYWRpZW50ID0gV1RGOjpzd2l0Y2hPbihtX2RhdGEsCi0gICAgICAgIFsm
XSAoY29uc3QgTGluZWFyRGF0YSYgZGF0YSkgLT4gY2Fpcm9fcGF0dGVybl90KiB7Ci0gICAgICAg
ICAgICByZXR1cm4gY2Fpcm9fcGF0dGVybl9jcmVhdGVfbGluZWFyKGRhdGEucG9pbnQwLngoKSwg
ZGF0YS5wb2ludDAueSgpLCBkYXRhLnBvaW50MS54KCksIGRhdGEucG9pbnQxLnkoKSk7CisgICAg
UmVmUHRyPGNhaXJvX3BhdHRlcm5fdD4gZ3JhZGllbnQgPSBXVEY6OnN3aXRjaE9uKG1fZGF0YSwK
KyAgICAgICAgWyZdIChjb25zdCBMaW5lYXJEYXRhJiBkYXRhKSAtPiBSZWZQdHI8Y2Fpcm9fcGF0
dGVybl90PiB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoY2Fpcm9fcGF0dGVybl9jcmVh
dGVfbGluZWFyKGRhdGEucG9pbnQwLngoKSwgZGF0YS5wb2ludDAueSgpLCBkYXRhLnBvaW50MS54
KCksIGRhdGEucG9pbnQxLnkoKSkpOwogICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFJh
ZGlhbERhdGEmIGRhdGEpIC0+IGNhaXJvX3BhdHRlcm5fdCogewotICAgICAgICAgICAgcmV0dXJu
IGNhaXJvX3BhdHRlcm5fY3JlYXRlX3JhZGlhbChkYXRhLnBvaW50MC54KCksIGRhdGEucG9pbnQw
LnkoKSwgZGF0YS5zdGFydFJhZGl1cywgZGF0YS5wb2ludDEueCgpLCBkYXRhLnBvaW50MS55KCks
IGRhdGEuZW5kUmFkaXVzKTsKKyAgICAgICAgWyZdIChjb25zdCBSYWRpYWxEYXRhJiBkYXRhKSAt
PiBSZWZQdHI8Y2Fpcm9fcGF0dGVybl90PiB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Y2Fpcm9fcGF0dGVybl9jcmVhdGVfcmFkaWFsKGRhdGEucG9pbnQwLngoKSwgZGF0YS5wb2ludDAu
eSgpLCBkYXRhLnN0YXJ0UmFkaXVzLCBkYXRhLnBvaW50MS54KCksIGRhdGEucG9pbnQxLnkoKSwg
ZGF0YS5lbmRSYWRpdXMpKTsKICAgICAgICAgfSwKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRG
T1JNKFdQRSkKLSAgICAgICAgWyZdIChjb25zdCBDb25pY0RhdGEmIGRhdGEpICAtPiBjYWlyb19w
YXR0ZXJuX3QqIHsKKyAgICAgICAgWyZdIChjb25zdCBDb25pY0RhdGEmIGRhdGEpIC0+IFJlZlB0
cjxjYWlyb19wYXR0ZXJuX3Q+IHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBkYXRhIHBhc3NlZCBm
b3IgYSBDb25pYyBncmFkaWVudCBkb2Vzbid0IGNvbnRhaW4gYSByYWRpdXMuIFRoYXQncyBhcHBh
cmVudGx5IGNvcnJlY3QgYmVjYXVzZSB0aGUgVzNDIHNwZWMKICAgICAgICAgICAgIC8vIChodHRw
czovL3d3dy53My5vcmcvVFIvY3NzLWltYWdlcy00LyNjb25pYy1ncmFkaWVudHMpIHN0YXRlcyBh
IGNvbmljIGdyYWRpZW50IGlzIG9ubHkgZGVmaW5lZCBieSBpdHMgcG9zaXRpb24gYW5kIGFuZ2xl
LgogICAgICAgICAgICAgLy8gVGh1cywgaGVyZSBJIGdpdmUgdGhlIHJhZGl1cyBhbiBleHRyZW1l
bHkgbGFyZ2UgdmFsdWUuIFRoZSByZXN1bHRpbmcgZ3JhZGllbnQgd2lsbCBiZSBsYXRlciBjbGlw
cGVkIGJ5IGZpbGxSZWN0LgogICAgICAgICAgICAgLy8gQW4gYWx0ZXJuYXRpdmUgc29sdXRpb24g
Y291bGQgYmUgdG8gY2hhbmdlIHRoZSBBUEkgYW5kIHBhc3MgYSByZWN0J3Mgd2lkdGggYW5kIGhl
aWdodCB0byBvcHRpbWl6ZSB0aGUgY29tcHV0YXRpb24gb2YgdGhlIHJhZGl1cy4KICAgICAgICAg
ICAgIGNvbnN0IGZsb2F0IHJhZGl1cyA9IDQwOTY7Ci0gICAgICAgICAgICByZXR1cm4gY3JlYXRl
Q29uaWMoZGF0YS5wb2ludDAueCgpLCBkYXRhLnBvaW50MC55KCksIHJhZGl1cywgZGF0YS5hbmds
ZVJhZGlhbnMsIHN0b3BzKCksIGdsb2JhbEFscGhhKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9w
dFJlZihjcmVhdGVDb25pYyhkYXRhLnBvaW50MC54KCksIGRhdGEucG9pbnQwLnkoKSwgcmFkaXVz
LCBkYXRhLmFuZ2xlUmFkaWFucywgc3RvcHMoKSwgZ2xvYmFsQWxwaGEpKTsKICNlbHNlCi0gICAg
ICAgIFsmXSAoY29uc3QgQ29uaWNEYXRhJikgIC0+IGNhaXJvX3BhdHRlcm5fdCogeworICAgICAg
ICBbJl0gKGNvbnN0IENvbmljRGF0YSYpIC0+IFJlZlB0cjxjYWlyb19wYXR0ZXJuX3Q+IHsKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgY29uaWMgZ3JhZGllbnQgcmVuZGVyaW5nLgog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAjZW5kaWYKQEAgLTIxMiw0MCArMjEyLDQwIEBA
IGNhaXJvX3BhdHRlcm5fdCogR3JhZGllbnQ6OmNyZWF0ZVBsYXRmb3JtR3JhZGllbnQoZmxvYXQg
Z2xvYmFsQWxwaGEpCiAKICAgICBpZiAodHlwZSgpICE9IFR5cGU6OkNvbmljKSB7CiAgICAgICAg
IGZvciAoY29uc3QgYXV0byYgc3RvcCA6IHN0b3BzKCkpIHsKLSAgICAgICAgICAgIGFkZENvbG9y
U3RvcFJHQkEoZ3JhZGllbnQsIHN0b3AsIGdsb2JhbEFscGhhKTsKKyAgICAgICAgICAgIGFkZENv
bG9yU3RvcFJHQkEoZ3JhZGllbnQuZ2V0KCksIHN0b3AsIGdsb2JhbEFscGhhKTsKICAgICAgICAg
fQogICAgIH0KIAogICAgIHN3aXRjaCAobV9zcHJlYWRNZXRob2QpIHsKICAgICBjYXNlIEdyYWRp
ZW50U3ByZWFkTWV0aG9kOjpQYWQ6Ci0gICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChn
cmFkaWVudCwgQ0FJUk9fRVhURU5EX1BBRCk7CisgICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4
dGVuZChncmFkaWVudC5nZXQoKSwgQ0FJUk9fRVhURU5EX1BBRCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgR3JhZGllbnRTcHJlYWRNZXRob2Q6OlJlZmxlY3Q6Ci0gICAgICAgIGNhaXJvX3Bh
dHRlcm5fc2V0X2V4dGVuZChncmFkaWVudCwgQ0FJUk9fRVhURU5EX1JFRkxFQ1QpOworICAgICAg
ICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQoZ3JhZGllbnQuZ2V0KCksIENBSVJPX0VYVEVORF9S
RUZMRUNUKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHcmFkaWVudFNwcmVhZE1ldGhvZDo6
UmVwZWF0OgotICAgICAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQoZ3JhZGllbnQsIENBSVJP
X0VYVEVORF9SRVBFQVQpOworICAgICAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQoZ3JhZGll
bnQuZ2V0KCksIENBSVJPX0VYVEVORF9SRVBFQVQpOwogICAgICAgICBicmVhazsKICAgICB9CiAK
ICAgICBjYWlyb19tYXRyaXhfdCBtYXRyaXggPSB0b0NhaXJvTWF0cml4KG1fZ3JhZGllbnRTcGFj
ZVRyYW5zZm9ybWF0aW9uKTsKICAgICBjYWlyb19tYXRyaXhfaW52ZXJ0KCZtYXRyaXgpOwotICAg
IGNhaXJvX3BhdHRlcm5fc2V0X21hdHJpeChncmFkaWVudCwgJm1hdHJpeCk7CisgICAgY2Fpcm9f
cGF0dGVybl9zZXRfbWF0cml4KGdyYWRpZW50LmdldCgpLCAmbWF0cml4KTsKIAogICAgIHJldHVy
biBncmFkaWVudDsKIH0KIAogdm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBSZWZQdHI8Y2Fpcm9fcGF0dGVy
bl90PiBwbGF0Zm9ybUdyYWRpZW50ID0gYWRvcHRSZWYoY3JlYXRlUGxhdGZvcm1HcmFkaWVudCgx
LjApKTsKLSAgICBpZiAoIXBsYXRmb3JtR3JhZGllbnQpCisgICAgYXV0byBwYXR0ZXJuID0gY3Jl
YXRlUGF0dGVybigxLjApOworICAgIGlmICghcGF0dGVybikKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgQVNTRVJUKGNvbnRleHQuaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHBsYXRm
b3JtQ29udGV4dCA9ICpjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgQ2Fpcm86OnNh
dmUocGxhdGZvcm1Db250ZXh0KTsKLSAgICBDYWlybzo6ZmlsbFJlY3QocGxhdGZvcm1Db250ZXh0
LCByZWN0LCBwbGF0Zm9ybUdyYWRpZW50LmdldCgpKTsKKyAgICBDYWlybzo6ZmlsbFJlY3QocGxh
dGZvcm1Db250ZXh0LCByZWN0LCBwYXR0ZXJuLmdldCgpKTsKICAgICBDYWlybzo6cmVzdG9yZShw
bGF0Zm9ybUNvbnRleHQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNw
cAppbmRleCBjZDg2NWFhYTI2MDE5ZmZjNzVhZWVlOTI2MjAyY2YxMTI1OTViYzgxLi44OTEzODQz
MTBlYmU4MTgyNDM0ODQ2NjE3OTQ4MWVkMTc2MTI5YjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dEltcGxDYWlyby5jcHAKQEAgLTMzLDExICszMywxMSBAQAogI2luY2x1ZGUgIkZsb2F0Um91
bmRlZFJlY3QuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIK
KyNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZUNhaXJvLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbnRS
ZWN0LmgiCiAKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBHcmFwaGljc0NvbnRleHQ6OkdyYXBo
aWNzQ29udGV4dEltcGxGYWN0b3J5IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFj
dG9yeShQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0KQpAQCAtMTU0LDEyICsx
NTQsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG8KIAogdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRp
ZW50KQogewotICAgIFJlZlB0cjxjYWlyb19wYXR0ZXJuX3Q+IHBsYXRmb3JtR3JhZGllbnQgPSBh
ZG9wdFJlZihncmFkaWVudC5jcmVhdGVQbGF0Zm9ybUdyYWRpZW50KDEuMCkpOwotICAgIGlmICgh
cGxhdGZvcm1HcmFkaWVudCkKKyAgICBhdXRvIHBhdHRlcm4gPSBncmFkaWVudC5jcmVhdGVQYXR0
ZXJuKDEuMCk7CisgICAgaWYgKCFwYXR0ZXJuKQogICAgICAgICByZXR1cm47CiAKICAgICBDYWly
bzo6c2F2ZShtX3BsYXRmb3JtQ29udGV4dCk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZv
cm1Db250ZXh0LCByZWN0LCBwbGF0Zm9ybUdyYWRpZW50LmdldCgpKTsKKyAgICBDYWlybzo6Zmls
bFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIHBhdHRlcm4uZ2V0KCkpOwogICAgIENhaXJv
OjpyZXN0b3JlKG1fcGxhdGZvcm1Db250ZXh0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcAppbmRleCA5NTUxZTliYjRhZjdk
MmU1ZDUzZmJiZWMwNmNjZjhlMTBjNjYwZWU0Li44MTA5MmI4ZTc5ZjUzZmJiODNjOGY1YTZhNzcy
MTJmMDQ1MzViNjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFkaWVudENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFkaWVudENHLmNwcApAQCAtMzUsMTggKzM1LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotdm9pZCBHcmFkaWVudDo6cGxhdGZvcm1EZXN0cm95KCkKK3ZvaWQgR3JhZGllbnQ6
OnN0b3BzQ2hhbmdlZCgpCiB7Ci0gICAgQ0dHcmFkaWVudFJlbGVhc2UobV9ncmFkaWVudCk7CiAg
ICAgbV9ncmFkaWVudCA9IG51bGxwdHI7CiB9CiAKLUNHR3JhZGllbnRSZWYgR3JhZGllbnQ6OnBs
YXRmb3JtR3JhZGllbnQoKQordm9pZCBHcmFkaWVudDo6Y3JlYXRlQ0dHcmFkaWVudCgpCiB7Ci0g
ICAgaWYgKG1fZ3JhZGllbnQpCi0gICAgICAgIHJldHVybiBtX2dyYWRpZW50OwotCi0gICAgc29y
dFN0b3BzSWZOZWNlc3NhcnkoKTsKKyAgICBzb3J0U3RvcHMoKTsKIAogICAgIGF1dG8gY29sb3Jz
QXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKDAsIG1fc3RvcHMuc2l6ZSgpLCAm
a0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7CiAgICAgdW5zaWduZWQgbnVtU3RvcHMgPSBtX3N0b3Bz
LnNpemUoKTsKQEAgLTgyLDExICs3OCw5IEBAIENHR3JhZGllbnRSZWYgR3JhZGllbnQ6OnBsYXRm
b3JtR3JhZGllbnQoKQogICAgIH0KIAogICAgIGlmIChoYXNFeHRlbmRlZENvbG9ycykKLSAgICAg
ICAgbV9ncmFkaWVudCA9IENHR3JhZGllbnRDcmVhdGVXaXRoQ29sb3JzKGV4dGVuZGVkU1JHQkNv
bG9yU3BhY2VSZWYoKSwgY29sb3JzQXJyYXkuZ2V0KCksIGxvY2F0aW9ucy5kYXRhKCkpOworICAg
ICAgICBtX2dyYWRpZW50ID0gYWRvcHRDRihDR0dyYWRpZW50Q3JlYXRlV2l0aENvbG9ycyhleHRl
bmRlZFNSR0JDb2xvclNwYWNlUmVmKCksIGNvbG9yc0FycmF5LmdldCgpLCBsb2NhdGlvbnMuZGF0
YSgpKSk7CiAgICAgZWxzZQotICAgICAgICBtX2dyYWRpZW50ID0gQ0dHcmFkaWVudENyZWF0ZVdp
dGhDb2xvckNvbXBvbmVudHMoc1JHQkNvbG9yU3BhY2VSZWYoKSwgY29sb3JDb21wb25lbnRzLmRh
dGEoKSwgbG9jYXRpb25zLmRhdGEoKSwgbnVtU3RvcHMpOwotCi0gICAgcmV0dXJuIG1fZ3JhZGll
bnQ7CisgICAgICAgIG1fZ3JhZGllbnQgPSBhZG9wdENGKENHR3JhZGllbnRDcmVhdGVXaXRoQ29s
b3JDb21wb25lbnRzKHNSR0JDb2xvclNwYWNlUmVmKCksIGNvbG9yQ29tcG9uZW50cy5kYXRhKCks
IGxvY2F0aW9ucy5kYXRhKCksIG51bVN0b3BzKSk7CiB9CiAKIHZvaWQgR3JhZGllbnQ6OmZpbGwo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC0xMDMs
NyArOTcsOSBAQCB2b2lkIEdyYWRpZW50OjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
CiB2b2lkIEdyYWRpZW50OjpwYWludChDR0NvbnRleHRSZWYgcGxhdGZvcm1Db250ZXh0KQogewog
ICAgIENHR3JhZGllbnREcmF3aW5nT3B0aW9ucyBleHRlbmRPcHRpb25zID0ga0NHR3JhZGllbnRE
cmF3c0JlZm9yZVN0YXJ0TG9jYXRpb24gfCBrQ0dHcmFkaWVudERyYXdzQWZ0ZXJFbmRMb2NhdGlv
bjsKLSAgICBDR0dyYWRpZW50UmVmIGdyYWRpZW50ID0gcGxhdGZvcm1HcmFkaWVudCgpOworCisg
ICAgaWYgKCFtX2dyYWRpZW50KQorICAgICAgICBjcmVhdGVDR0dyYWRpZW50KCk7CiAKICAgICBX
VEY6OnN3aXRjaE9uKG1fZGF0YSwKICAgICAgICAgWyZdIChjb25zdCBMaW5lYXJEYXRhJiBkYXRh
KSB7CkBAIC0xNDYsNyArMTQyLDcgQEAgdm9pZCBHcmFkaWVudDo6cGFpbnQoQ0dDb250ZXh0UmVm
IHBsYXRmb3JtQ29udGV4dCkKICAgICAgICAgICAgICAgICAgICAgICAgIENHUG9pbnQgbGVmdCA9
IENHUG9pbnRNYWtlKGZsaXAgPyBzdGFydCArIHdpZHRoIDogc3RhcnQsIGJvdW5kaW5nQm94Lm9y
aWdpbi55KTsKICAgICAgICAgICAgICAgICAgICAgICAgIENHUG9pbnQgcmlnaHQgPSBDR1BvaW50
TWFrZShmbGlwID8gc3RhcnQgOiBzdGFydCArIHdpZHRoLCBib3VuZGluZ0JveC5vcmlnaW4ueSk7
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIENHQ29udGV4dERyYXdMaW5lYXJHcmFkaWVudChw
bGF0Zm9ybUNvbnRleHQsIGdyYWRpZW50LCBsZWZ0LCByaWdodCwgZXh0ZW5kT3B0aW9ucyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBDR0NvbnRleHREcmF3TGluZWFyR3JhZGllbnQocGxhdGZv
cm1Db250ZXh0LCBtX2dyYWRpZW50LmdldCgpLCBsZWZ0LCByaWdodCwgZXh0ZW5kT3B0aW9ucyk7
CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3NwcmVhZE1ldGhvZCA9PSBHcmFkaWVu
dFNwcmVhZE1ldGhvZDo6UmVmbGVjdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGlw
ID0gIWZsaXA7CkBAIC0xNTgsNyArMTU0LDcgQEAgdm9pZCBHcmFkaWVudDo6cGFpbnQoQ0dDb250
ZXh0UmVmIHBsYXRmb3JtQ29udGV4dCkKICAgICAgICAgICAgICAgICBGQUxMVEhST1VHSDsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgR3JhZGllbnRTcHJlYWRNZXRob2Q6OlBhZDoK
LSAgICAgICAgICAgICAgICBDR0NvbnRleHREcmF3TGluZWFyR3JhZGllbnQocGxhdGZvcm1Db250
ZXh0LCBncmFkaWVudCwgZGF0YS5wb2ludDAsIGRhdGEucG9pbnQxLCBleHRlbmRPcHRpb25zKTsK
KyAgICAgICAgICAgICAgICBDR0NvbnRleHREcmF3TGluZWFyR3JhZGllbnQocGxhdGZvcm1Db250
ZXh0LCBtX2dyYWRpZW50LmdldCgpLCBkYXRhLnBvaW50MCwgZGF0YS5wb2ludDEsIGV4dGVuZE9w
dGlvbnMpOwogICAgICAgICAgICAgfQogICAgICAgICB9LAogICAgICAgICBbJl0gKGNvbnN0IFJh
ZGlhbERhdGEmIGRhdGEpIHsKQEAgLTE3Myw3ICsxNjksNyBAQCB2b2lkIEdyYWRpZW50OjpwYWlu
dChDR0NvbnRleHRSZWYgcGxhdGZvcm1Db250ZXh0KQogICAgICAgICAgICAgICAgIENHQ29udGV4
dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQsIC1kYXRhLnBvaW50MC54KCksIC1kYXRhLnBv
aW50MC55KCkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBDR0NvbnRleHREcmF3UmFk
aWFsR3JhZGllbnQocGxhdGZvcm1Db250ZXh0LCBncmFkaWVudCwgZGF0YS5wb2ludDAsIGRhdGEu
c3RhcnRSYWRpdXMsIGRhdGEucG9pbnQxLCBkYXRhLmVuZFJhZGl1cywgZXh0ZW5kT3B0aW9ucyk7
CisgICAgICAgICAgICBDR0NvbnRleHREcmF3UmFkaWFsR3JhZGllbnQocGxhdGZvcm1Db250ZXh0
LCBtX2dyYWRpZW50LmdldCgpLCBkYXRhLnBvaW50MCwgZGF0YS5zdGFydFJhZGl1cywgZGF0YS5w
b2ludDEsIGRhdGEuZW5kUmFkaXVzLCBleHRlbmRPcHRpb25zKTsKIAogICAgICAgICAgICAgaWYg
KG5lZWRTY2FsaW5nKQogICAgICAgICAgICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUocGxh
dGZvcm1Db250ZXh0KTsKQEAgLTE4Niw3ICsxODIsNyBAQCB2b2lkIEdyYWRpZW50OjpwYWludChD
R0NvbnRleHRSZWYgcGxhdGZvcm1Db250ZXh0KQogICAgICAgICAgICAgQ0dDb250ZXh0VHJhbnNs
YXRlQ1RNKHBsYXRmb3JtQ29udGV4dCwgZGF0YS5wb2ludDAueCgpLCBkYXRhLnBvaW50MC55KCkp
OwogICAgICAgICAgICAgQ0dDb250ZXh0Um90YXRlQ1RNKHBsYXRmb3JtQ29udGV4dCwgKENHRmxv
YXQpLU1fUElfMik7CiAgICAgICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0ocGxhdGZvcm1D
b250ZXh0LCAtZGF0YS5wb2ludDAueCgpLCAtZGF0YS5wb2ludDAueSgpKTsKLSAgICAgICAgICAg
IENHQ29udGV4dERyYXdDb25pY0dyYWRpZW50KHBsYXRmb3JtQ29udGV4dCwgcGxhdGZvcm1HcmFk
aWVudCgpLCBkYXRhLnBvaW50MCwgZGF0YS5hbmdsZVJhZGlhbnMpOworICAgICAgICAgICAgQ0dD
b250ZXh0RHJhd0NvbmljR3JhZGllbnQocGxhdGZvcm1Db250ZXh0LCBtX2dyYWRpZW50LmdldCgp
LCBkYXRhLnBvaW50MCwgZGF0YS5hbmdsZVJhZGlhbnMpOwogICAgICAgICAgICAgQ0dDb250ZXh0
UmVzdG9yZUdTdGF0ZShwbGF0Zm9ybUNvbnRleHQpOwogI2Vsc2UKICAgICAgICAgICAgIFVOVVNF
RF9QQVJBTShkYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAppbmRleCBhNWU1NTFhOTgwNzgyMDQ1OGUy
OWE3MDFhMzcyYzczNjMyMzgzODcwLi5mYmRkMGEzYmM5Y2I0YTgwZGQwOWZhNDk2NTUzYTliYjAz
YmNkN2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHRDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAi
QWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3RSZWNvcmRlci5oIgogI2lu
Y2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCIKICNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIgogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1z
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtcy5oCmluZGV4IDI1YmYyYjliOTM1NDJlMjA5MjA5MDhlMDRhYzI2YzAwOWIzZWVi
OGEuLjhmMTEyZDcxOGE5MmIxNjI1MTY1ZWYzOTgyZDA3NzY2OTRhOWE1ZWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApAQCAtMjcsMTUgKzI3LDE0IEBACiAKICNpbmNsdWRlICJB
bHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3QuaCIKLSNpbmNs
dWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgogI2luY2x1
ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYWRpZW50
LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRl
ICJQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAKIG5hbWVzcGFjZSBXVEYg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9j
YWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29y
ZGVyLmNwcAppbmRleCBiZDViYzU0MjIxNmI5OTc2ZjY2NmM0NDA3MjdiZjYwY2VkZDdmODljLi4w
MGJlOGU5MWQzNTU3N2JiNDY4YjgzODgzMjU2YjdlZDk5YWZjNjgwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09w
ZXJhdGlvblJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcApAQCAtMzEs
NiArMzEsNyBAQAogCiAjaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRmxv
YXRSb3VuZGVkUmVjdC5oIgorI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKICNpbmNsdWRlICJOaWNvc2lhUGFpbnRpbmdPcGVyYXRpb25SZXBsYXlDYWlyby5o
IgogI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgpAQCAtMjkxLDcgKzI5Miw3IEBAIHZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVu
dCYgZ3JhZGllbnQpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8RmlsbFJlY3Q+KHJlY3QsIGFkb3B0UmVmKGdyYWRpZW50LmNyZWF0ZVBsYXRmb3JtR3JhZGll
bnQoMS4wKSkpKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgZ3Jh
ZGllbnQuY3JlYXRlUGF0dGVybigxLjApKSk7CiB9CiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Is
IENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVj
dDJET3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
RGlyZWN0MkRPcGVyYXRpb25zLmNwcAppbmRleCAxNTAyNDY4MTQ5NDFkNjc3MzUwZWQzMjg4NjVm
Yzg3ZTcwNGJhYmMwLi44ODM1Zjg4ZDFiYmNkMjAzYzMyNTYyZGEyNDE0Y2JjMjdiNmZiMGY4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRP
cGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
RGlyZWN0MkRPcGVyYXRpb25zLmNwcApAQCAtMzAxLDcgKzMwMSw3IEBAIEZpbGxTb3VyY2U6OkZp
bGxTb3VyY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBjb25zdCBHcmFwaGlj
c0NvbnRleHQmCiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNOyAvLyBGSVhN
RTogVGhpcyBpc24ndCByZWFsbHkgbmVlZGVkIG9uIFdpbmRvd3MKICAgICAgICAgYnJ1c2ggPSBz
dGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnRleHQsIHN0YXRlLmFs
cGhhLCB1c2VyVG9CYXNlQ1RNKTsKICAgICB9IGVsc2UgaWYgKHN0YXRlLmZpbGxHcmFkaWVudCAm
JiAhc3RhdGUuZmlsbEdyYWRpZW50LT5zdG9wcygpLmlzRW1wdHkoKSkKLSAgICAgICAgYnJ1c2gg
PSBzdGF0ZS5maWxsR3JhZGllbnQtPmNyZWF0ZVBsYXRmb3JtR3JhZGllbnRJZk5lY2Vzc2FyeShw
bGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOworICAgICAgICBicnVzaCA9IHN0YXRlLmZp
bGxHcmFkaWVudC0+Y3JlYXRlQnJ1c2gocGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsK
ICAgICBlbHNlCiAgICAgICAgIGJydXNoID0gcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENvbG9y
KGNvbG9yKTsKIH0KQEAgLTMxOCw3ICszMTgsNyBAQCBTdHJva2VTb3VyY2U6OlN0cm9rZVNvdXJj
ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEdyYXBoaWNzQ29udAog
ICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTTsgLy8gRklYTUU6IFRoaXMgaXNu
J3QgcmVhbGx5IG5lZWRlZCBvbiBXaW5kb3dzCiAgICAgICAgIGJydXNoID0gc3RhdGUuc3Ryb2tl
UGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnRleHQsIHN0YXRlLmFscGhhLCB1c2Vy
VG9CYXNlQ1RNKTsKICAgICB9IGVsc2UgaWYgKHN0YXRlLnN0cm9rZUdyYWRpZW50KQotICAgICAg
ICBicnVzaCA9IHN0YXRlLnN0cm9rZUdyYWRpZW50LT5jcmVhdGVQbGF0Zm9ybUdyYWRpZW50SWZO
ZWNlc3NhcnkocGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsKKyAgICAgICAgYnJ1c2gg
PSBzdGF0ZS5zdHJva2VHcmFkaWVudC0+Y3JlYXRlQnJ1c2gocGxhdGZvcm1Db250ZXh0LnJlbmRl
clRhcmdldCgpKTsKICAgICBlbHNlCiAgICAgICAgIGJydXNoID0gcGxhdGZvcm1Db250ZXh0LmJy
dXNoV2l0aENvbG9yKGNvbG9yKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAppbmRleCAwNGU0ZDc2NDkz
MmZhODk1NDgwMjhmZTM1OWUzM2Q4YjY1Njc0OTVkLi4wZGZlYWI2NzJlZDIxZTFkYjVjNmRiNzhi
MWIxNGRkNzM5NDlhMGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCkBAIC0zMSwyOSArMzEsMTQgQEAK
ICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgogI2luY2x1ZGUgPGQyZDEuaD4K
ICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
IAogI2RlZmluZSBHUkFESUVOVF9EUkFXSU5HIDMKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12
b2lkIEdyYWRpZW50OjpwbGF0Zm9ybURlc3Ryb3koKQordm9pZCBHcmFkaWVudDo6c3RvcHNDaGFu
Z2VkKCkKIHsKLSAgICBpZiAobV9ncmFkaWVudCkKLSAgICAgICAgbV9ncmFkaWVudC0+UmVsZWFz
ZSgpOwotICAgIG1fZ3JhZGllbnQgPSBudWxscHRyOwotfQotCi1JRDJEMUJydXNoKiBHcmFkaWVu
dDo6cGxhdGZvcm1HcmFkaWVudCgpCi17Ci0gICAgQVNTRVJUKG1fZ3JhZGllbnQpOwotICAgIHJl
dHVybiBtX2dyYWRpZW50OwotfQotCi1JRDJEMUJydXNoKiBHcmFkaWVudDo6Y3JlYXRlUGxhdGZv
cm1HcmFkaWVudElmTmVjZXNzYXJ5KElEMkQxUmVuZGVyVGFyZ2V0KiBjb250ZXh0KQotewotICAg
IGdlbmVyYXRlR3JhZGllbnQoY29udGV4dCk7Ci0gICAgcmV0dXJuIG1fZ3JhZGllbnQ7CisgICAg
bV9icnVzaCA9IG51bGxwdHI7CiB9CiAKIHN0YXRpYyBib29sIGNpcmNsZUlzRW50aXJlbHlDb250
YWluZWQoY29uc3QgRmxvYXRQb2ludCYgY2VudGVyQSwgZmxvYXQgcmFkaXVzQSwgY29uc3QgRmxv
YXRQb2ludCYgY2VudGVyQiwgZmxvYXQgcmFkaXVzQikKQEAgLTY1LDE1ICs1MCwxNiBAQCBzdGF0
aWMgYm9vbCBjaXJjbGVJc0VudGlyZWx5Q29udGFpbmVkKGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRl
ckEsIGZsb2F0IHJhZGl1c0EsCiAgICAgcmV0dXJuIGRlbHRhWCAqIGRlbHRhWCArIGRlbHRhWSAq
IGRlbHRhWSA8IGRlbHRhUmFkaXVzICogZGVsdGFSYWRpdXMgJiYgcmFkaXVzQSA8IHJhZGl1c0I7
CiB9CiAKLXZvaWQgR3JhZGllbnQ6OmdlbmVyYXRlR3JhZGllbnQoSUQyRDFSZW5kZXJUYXJnZXQq
IHJlbmRlclRhcmdldCkKK0lEMkQxQnJ1c2gqIEdyYWRpZW50OjpjcmVhdGVCcnVzaChJRDJEMVJl
bmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQogewotICAgIHNvcnRTdG9wc0lmTmVjZXNzYXJ5KCk7
CisgICAgc29ydFN0b3BzKCk7CiAKICAgICBWZWN0b3I8RDJEMV9HUkFESUVOVF9TVE9QPiBncmFk
aWVudFN0b3BzOwotICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgRXh0ZW5kZWRDb2xvci4K
LSAgICBmb3IgKGF1dG8gc3RvcCA6IG1fc3RvcHMpIHsKKyAgICBncmFkaWVudFN0b3BzLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobV9zdG9wcy5zaXplKCkpOworICAgIGZvciAoYXV0byYgc3RvcCA6
IG1fc3RvcHMpIHsKKyAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBub24tc1JHQkEg
Y29sb3Igc3BhY2VzLgogICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSBzdG9wLmNvbG9yLnRvU1JH
QkFMb3NzeTxmbG9hdD4oKTsKLSAgICAgICAgZ3JhZGllbnRTdG9wcy5hcHBlbmQoRDJEMTo6R3Jh
ZGllbnRTdG9wKHN0b3Aub2Zmc2V0LCBEMkQxOjpDb2xvckYociwgZywgYiwgYSkpKTsKKyAgICAg
ICAgZ3JhZGllbnRTdG9wcy5ncmFkaWVudFN0b3BzLnVuY2hlY2tlZEFwcGVuZChEMkQxOjpHcmFk
aWVudFN0b3Aoc3RvcC5vZmZzZXQsIEQyRDE6OkNvbG9yRihyLCBnLCBiLCBhKSkpOwogICAgIH0K
IAogICAgIFdURjo6c3dpdGNoT24obV9kYXRhLApAQCAtMTIyLDExICsxMDgsNiBAQCB2b2lkIEdy
YWRpZW50OjpnZW5lcmF0ZUdyYWRpZW50KElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQp
CiAgICAgSFJFU1VMVCBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlR3JhZGllbnRTdG9wQ29sbGVj
dGlvbihncmFkaWVudFN0b3BzLmRhdGEoKSwgZ3JhZGllbnRTdG9wcy5zaXplKCksICZncmFkaWVu
dFN0b3BDb2xsZWN0aW9uKTsKICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKIAot
ICAgIGlmIChtX2dyYWRpZW50KSB7Ci0gICAgICAgIG1fZ3JhZGllbnQtPlJlbGVhc2UoKTsKLSAg
ICAgICAgbV9ncmFkaWVudCA9IG51bGxwdHI7Ci0gICAgfQotCiAgICAgV1RGOjpzd2l0Y2hPbiht
X2RhdGEsCiAgICAgICAgIFsmXSAoY29uc3QgTGluZWFyRGF0YSYgZGF0YSkgewogICAgICAgICAg
ICAgSUQyRDFMaW5lYXJHcmFkaWVudEJydXNoKiBsaW5lYXJHcmFkaWVudCA9IG51bGxwdHI7CkBA
IC0xMzUsNyArMTE2LDcgQEAgdm9pZCBHcmFkaWVudDo6Z2VuZXJhdGVHcmFkaWVudChJRDJEMVJl
bmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQogICAgICAgICAgICAgICAgIEQyRDE6OkJydXNoUHJv
cGVydGllcygpLCBncmFkaWVudFN0b3BDb2xsZWN0aW9uLmdldCgpLAogICAgICAgICAgICAgICAg
ICZsaW5lYXJHcmFkaWVudCk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQo
aHIpKTsKLSAgICAgICAgICAgIG1fZ3JhZGllbnQgPSBsaW5lYXJHcmFkaWVudDsKKyAgICAgICAg
ICAgIG1fYnJ1c2ggPSBhZG9wdENPTShsaW5lYXJHcmFkaWVudCk7CiAgICAgICAgIH0sCiAgICAg
ICAgIFsmXSAoY29uc3QgUmFkaWFsRGF0YSYgZGF0YSkgewogICAgICAgICAgICAgRmxvYXRTaXpl
IG9mZnNldDsKQEAgLTE1NCwxNCArMTM1LDE1IEBAIHZvaWQgR3JhZGllbnQ6OmdlbmVyYXRlR3Jh
ZGllbnQoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKICAgICAgICAgICAgICAgICBE
MkQxOjpCcnVzaFByb3BlcnRpZXMoKSwgZ3JhZGllbnRTdG9wQ29sbGVjdGlvbi5nZXQoKSwKICAg
ICAgICAgICAgICAgICAmcmFkaWFsR3JhZGllbnQpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgICAgICBtX2dyYWRpZW50ID0gcmFkaWFsR3JhZGll
bnQ7CisgICAgICAgICAgICBtX2JydXNoID0gYWRvcHRDT00ocmFkaWFsR3JhZGllbnQpOwogICAg
ICAgICB9LAogICAgICAgICBbJl0gKGNvbnN0IENvbmljRGF0YSYpIHsKICAgICAgICAgICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQgY29uaWMgZ3JhZGllbnQgcmVuZGVyaW5nLgorICAgICAgICAgICAg
bV9icnVzaCA9IG51bGxwdHI7CiAgICAgICAgIH0KICAgICApOwogCi0gICAgaGFzaCgpOworICAg
IHJldHVybiBtX2JydXNoLmdldCgpOwogfQogCiB2b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMTcwLDE1ICsxNTIs
MTYgQEAgdm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKIAogICAgIFdURjo6c3dpdGNoT24obV9kYXRhLAogICAgICAgICBb
Jl0gKGNvbnN0IExpbmVhckRhdGEmIGRhdGEpIHsKLSAgICAgICAgICAgIGlmICghbV9jYWNoZWRI
YXNoIHx8ICFtX2dyYWRpZW50KQotICAgICAgICAgICAgICAgIGdlbmVyYXRlR3JhZGllbnQoZDJk
Q29udGV4dCk7CisgICAgICAgICAgICAvLyBGSVhNRTogSWYgd2UgaGF2ZSBhIGJydXNoLCB3aHkg
Y2FuIHdlIHJlLXVzZSBpdD8gV2hhdCBndWFyYW50ZWVzIGl0J3MgcmlnaHQgZm9yIHRoaXMgY29u
dGV4dD8KKyAgICAgICAgICAgIGlmICghbV9icnVzaCkKKyAgICAgICAgICAgICAgICBjcmVhdGVC
cnVzaChkMmRDb250ZXh0KTsKIAogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgICAgICAgICBkMmRD
b250ZXh0LT5TZXRUYWdzKEdSQURJRU5UX0RSQVdJTkcsIF9fTElORV9fKTsKICNlbmRpZgogCiAg
ICAgICAgICAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsKLSAgICAgICAgICAg
IGQyZENvbnRleHQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIG1fZ3JhZGllbnQpOworICAgICAg
ICAgICAgZDJkQ29udGV4dC0+RmlsbFJlY3RhbmdsZSgmZDJkUmVjdCwgbV9icnVzaC5nZXQoKSk7
CiAgICAgICAgIH0sCiAgICAgICAgIFsmXSAoY29uc3QgUmFkaWFsRGF0YSYgZGF0YSkgewogICAg
ICAgICAgICAgYm9vbCBuZWVkU2NhbGluZyA9IGRhdGEuYXNwZWN0UmF0aW8gIT0gMTsKQEAgLTE5
OSwxNSArMTgyLDE2IEBAIHZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgICAgICAgICAgZDJkQ29udGV4dC0+
U2V0VHJhbnNmb3JtKGN0bSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghbV9j
YWNoZWRIYXNoIHx8ICFtX2dyYWRpZW50KQotICAgICAgICAgICAgICAgIGdlbmVyYXRlR3JhZGll
bnQoZDJkQ29udGV4dCk7CisgICAgICAgICAgICAvLyBGSVhNRTogSWYgd2UgaGF2ZSBhIGJydXNo
LCB3aHkgY2FuIHdlIHJlLXVzZSBpdD8gV2hhdCBndWFyYW50ZWVzIGl0J3MgcmlnaHQgZm9yIHRo
aXMgY29udGV4dD8KKyAgICAgICAgICAgIGlmICghbV9icnVzaCkKKyAgICAgICAgICAgICAgICBj
cmVhdGVCcnVzaChkMmRDb250ZXh0KTsKIAogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgICAgICAg
ICBkMmRDb250ZXh0LT5TZXRUYWdzKEdSQURJRU5UX0RSQVdJTkcsIF9fTElORV9fKTsKICNlbmRp
ZgogCiAgICAgICAgICAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsKLSAgICAg
ICAgICAgIGQyZENvbnRleHQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIG1fZ3JhZGllbnQpOwor
ICAgICAgICAgICAgZDJkQ29udGV4dC0+RmlsbFJlY3RhbmdsZSgmZDJkUmVjdCwgbV9icnVzaC5n
ZXQoKSk7CiAKICAgICAgICAgICAgIGlmIChuZWVkU2NhbGluZykKICAgICAgICAgICAgICAgICBj
b250ZXh0LnJlc3RvcmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAK
aW5kZXggZGM5ZjVmZTZmZDc0NzQxYTBjNTYyY2Y5Y2M3YWVlMTE3MThmOTNjZC4uZDY0NDVkNzBj
YjMwMzdlNzJhZTI5MDZkNjYzNmVmZmI0NDgxZDc1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRC5jcHAKQEAgLTE1NSwxMSArMTU1LDExIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0SW1wbERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENv
bG9yJiBjCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKIHsKLSAgICBDT01QdHI8SUQy
RDFCcnVzaD4gcGxhdGZvcm1HcmFkaWVudCA9IGdyYWRpZW50LmNyZWF0ZVBsYXRmb3JtR3JhZGll
bnRJZk5lY2Vzc2FyeShtX3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7Ci0gICAgaWYg
KCFwbGF0Zm9ybUdyYWRpZW50KQorICAgIGF1dG8gYnJ1c2ggPSBncmFkaWVudC5jcmVhdGVCcnVz
aChtX3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7CisgICAgaWYgKCFicnVzaCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0V2l0aEdyYWRpZW50KG1fcGxh
dGZvcm1Db250ZXh0LCByZWN0LCBwbGF0Zm9ybUdyYWRpZW50LmdldCgpKTsKKyAgICBEaXJlY3Qy
RDo6ZmlsbFJlY3RXaXRoR3JhZGllbnQobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGJydXNoLmdl
dCgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRv
ciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQppbmRleCA1ZjY1MzAzY2Vh
N2IxMGE5MDMxM2U3Yzk5OTNjOTc5N2YwYjMzOWVkLi4wOWQ4MDU4YjViMjU2YmM1YjRjOWJhOWQ0
YWIzYTFlNTVjNzRmZDFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
U2Nyb2xsQW5pbWF0b3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Nj
cm9sbEFuaW1hdG9yTWFjLm1tCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoU01PT1RI
X1NDUk9MTElORykKIAotI2ltcG9ydCAiRmxvYXRQb2ludC5oIgorI2ltcG9ydCAiR3JhZGllbnQu
aCIKICNpbXBvcnQgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBv
cnQgIk5TU2Nyb2xsZXJJbXBEZXRhaWxzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVJT1MubW0KaW5kZXggNDI1NzVmMGU0NWZlYzIyYzlhYmZmNjc1MzE4YTkyMTdmNmRl
ZDJmNy4uZWUxODljZjk4NzNmMGMwYTAzNjNlMzZlMzc0NDEzMGQ4NGMyYTk3ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQpAQCAtOTAwLDcgKzkwMCw3IEBA
IGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0
JiByZW5kZXJlciwgY29uc3QgUGFpbnRJCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgY29u
c3QgaW50IHByb2dyZXNzQmFySGVpZ2h0ID0gOTsKLSAgICBjb25zdCBmbG9hdCB2ZXJ0aWNhbE9m
ZnNldCA9IChyZWN0LmhlaWdodCgpIC0gcHJvZ3Jlc3NCYXJIZWlnaHQpIC8gMi4wOworICAgIGNv
bnN0IGZsb2F0IHZlcnRpY2FsT2Zmc2V0ID0gKHJlY3QuaGVpZ2h0KCkgLSBwcm9ncmVzc0Jhckhl
aWdodCkgLyAyLjBmOwogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KHBhaW50SW5mby5jb250ZXh0KCkpOwogICAgIGlmIChyZWN0LndpZHRoKCkgPCAxMCB8fCByZWN0
LmhlaWdodCgpIDwgOSkgewpAQCAtOTEyLDIxICs5MTIsMjEgQEAgYm9vbCBSZW5kZXJUaGVtZUlP
Uzo6cGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBQ
YWludEkKICAgICAvLyAxKSBEcmF3IHRoZSBwcm9ncmVzcyBiYXIgdHJhY2suCiAgICAgLy8gMS4x
KSBEcmF3IHRoZSB3aGl0ZSBiYWNrZ3JvdW5kIHdpdGggZ3JleSBncmFkaWVudCBib3JkZXIuCiAg
ICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQoKTsKLSAgICBj
b250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygwLjY4KTsKKyAgICBjb250ZXh0LnNldFN0cm9rZVRo
aWNrbmVzcygwLjY4Zik7CiAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7
CiAKICAgICBjb25zdCBmbG9hdCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uID0gcmVjdC55KCkg
KyB2ZXJ0aWNhbE9mZnNldDsKICAgICBhdXRvIHN0cm9rZUdyYWRpZW50ID0gR3JhZGllbnQ6OmNy
ZWF0ZShHcmFkaWVudDo6TGluZWFyRGF0YSB7IEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2Fs
UmVuZGVyaW5nUG9zaXRpb24pLCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmlu
Z1Bvc2l0aW9uICsgcHJvZ3Jlc3NCYXJIZWlnaHQgLSAxKSB9KTsKLSAgICBzdHJva2VHcmFkaWVu
dC0+YWRkQ29sb3JTdG9wKDAuMCwgbWFrZVNpbXBsZUNvbG9yKDE0MSwgMTQxLCAxNDEpKTsKLSAg
ICBzdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuNDUsIG1ha2VTaW1wbGVDb2xvcigyMzgs
IDIzOCwgMjM4KSk7Ci0gICAgc3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjU1LCBtYWtl
U2ltcGxlQ29sb3IoMjM4LCAyMzgsIDIzOCkpOwotICAgIHN0cm9rZUdyYWRpZW50LT5hZGRDb2xv
clN0b3AoMS4wLCBtYWtlU2ltcGxlQ29sb3IoMTQxLCAxNDEsIDE0MSkpOworICAgIHN0cm9rZUdy
YWRpZW50LT5hZGRDb2xvclN0b3AoeyAwLjBmLCBtYWtlU2ltcGxlQ29sb3IoMTQxLCAxNDEsIDE0
MSkgfSk7CisgICAgc3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCh7IDAuNDVmLCBtYWtlU2lt
cGxlQ29sb3IoMjM4LCAyMzgsIDIzOCkgfSk7CisgICAgc3Ryb2tlR3JhZGllbnQtPmFkZENvbG9y
U3RvcCh7IDAuNTVmLCBtYWtlU2ltcGxlQ29sb3IoMjM4LCAyMzgsIDIzOCkgfSk7CisgICAgc3Ry
b2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCh7IDEuMGYsIG1ha2VTaW1wbGVDb2xvcigxNDEsIDE0
MSwgMTQxKSB9KTsKICAgICBjb250ZXh0LnNldFN0cm9rZUdyYWRpZW50KFdURk1vdmUoc3Ryb2tl
R3JhZGllbnQpKTsKIAogICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjpibGFjayk7CiAK
ICAgICBQYXRoIHRyYWNrUGF0aDsKLSAgICBGbG9hdFJlY3QgdHJhY2tSZWN0KHJlY3QueCgpICsg
MC4yNSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIDAuMjUsIHJlY3Qud2lkdGgoKSAtIDAu
NSwgcHJvZ3Jlc3NCYXJIZWlnaHQgLSAwLjUpOworICAgIEZsb2F0UmVjdCB0cmFja1JlY3QocmVj
dC54KCkgKyAwLjI1ZiwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIDAuMjVmLCByZWN0Lndp
ZHRoKCkgLSAwLjVmLCBwcm9ncmVzc0JhckhlaWdodCAtIDAuNWYpOwogICAgIEZsb2F0U2l6ZSBy
b3VuZGVkQ29ybmVyUmFkaXVzKDUsIDQpOwogICAgIHRyYWNrUGF0aC5hZGRSb3VuZGVkUmVjdCh0
cmFja1JlY3QsIHJvdW5kZWRDb3JuZXJSYWRpdXMpOwogICAgIGNvbnRleHQuZHJhd1BhdGgodHJh
Y2tQYXRoKTsKQEAgLTkzNiw5ICs5MzYsOSBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFBy
b2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFBhaW50SQogICAg
IHBhaW50SW5mby5jb250ZXh0KCkuY2xpcFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QoYm9y
ZGVyLCByb3VuZGVkQ29ybmVyUmFkaXVzLCByb3VuZGVkQ29ybmVyUmFkaXVzLCByb3VuZGVkQ29y
bmVyUmFkaXVzLCByb3VuZGVkQ29ybmVyUmFkaXVzKSk7CiAKICAgICBmbG9hdCB1cHBlckdyYWRp
ZW50SGVpZ2h0ID0gcHJvZ3Jlc3NCYXJIZWlnaHQgLyAyLjsKLSAgICBhdXRvIHVwcGVyR3JhZGll
bnQgPSBHcmFkaWVudDo6Y3JlYXRlKEdyYWRpZW50OjpMaW5lYXJEYXRhIHsgRmxvYXRQb2ludChy
ZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIDAuNSksIEZsb2F0UG9pbnQocmVj
dC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyB1cHBlckdyYWRpZW50SGVpZ2h0IC0g
MS41KSB9KTsKLSAgICB1cHBlckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBtYWtlU2ltcGxl
Q29sb3IoMTMzLCAxMzMsIDEzMywgMTg4KSk7Ci0gICAgdXBwZXJHcmFkaWVudC0+YWRkQ29sb3JT
dG9wKDEuMCwgbWFrZVNpbXBsZUNvbG9yKDE4LCAxOCwgMTgsIDUxKSk7CisgICAgYXV0byB1cHBl
ckdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShHcmFkaWVudDo6TGluZWFyRGF0YSB7IEZsb2F0
UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyAwLjVmKSwgRmxvYXRQ
b2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIHVwcGVyR3JhZGllbnRI
ZWlnaHQgLSAxLjUpIH0pOworICAgIHVwcGVyR3JhZGllbnQtPmFkZENvbG9yU3RvcCh7IDAuMGYs
IG1ha2VTaW1wbGVDb2xvcigxMzMsIDEzMywgMTMzLCAxODgpIH0pOworICAgIHVwcGVyR3JhZGll
bnQtPmFkZENvbG9yU3RvcCh7IDEuMGYsIG1ha2VTaW1wbGVDb2xvcigxOCwgMTgsIDE4LCA1MSkg
fSk7CiAgICAgY29udGV4dC5zZXRGaWxsR3JhZGllbnQoV1RGTW92ZSh1cHBlckdyYWRpZW50KSk7
CiAKICAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChyZWN0LngoKSwgdmVydGljYWxSZW5k
ZXJpbmdQb3NpdGlvbiwgcmVjdC53aWR0aCgpLCB1cHBlckdyYWRpZW50SGVpZ2h0KSk7CkBAIC05
NDcsMjcgKzk0NywyNyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFByb2dyZXNzQmFyKGNv
bnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFBhaW50SQogICAgIGlmIChyZW5kZXJQ
cm9ncmVzcy5pc0RldGVybWluYXRlKCkpIHsKICAgICAgICAgLy8gMikgRHJhdyB0aGUgcHJvZ3Jl
c3MgYmFyLgogICAgICAgICBkb3VibGUgcG9zaXRpb24gPSBjbGFtcFRvKHJlbmRlclByb2dyZXNz
LnBvc2l0aW9uKCksIDAuMCwgMS4wKTsKLSAgICAgICAgZG91YmxlIGJhcldpZHRoID0gcG9zaXRp
b24gKiByZWN0LndpZHRoKCk7Ci0gICAgICAgIGF1dG8gYmFyR3JhZGllbnQgPSBHcmFkaWVudDo6
Y3JlYXRlKEdyYWRpZW50OjpMaW5lYXJEYXRhIHsgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGlj
YWxSZW5kZXJpbmdQb3NpdGlvbiArIDAuNSksIEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2Fs
UmVuZGVyaW5nUG9zaXRpb24gKyBwcm9ncmVzc0JhckhlaWdodCAtIDEpIH0pOwotICAgICAgICBi
YXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgbWFrZVNpbXBsZUNvbG9yKDE5NSwgMjE3LCAy
NDcpKTsKLSAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjQ1LCBtYWtlU2ltcGxl
Q29sb3IoMTE4LCAxNjQsIDIyOCkpOwotICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9w
KDAuNDksIG1ha2VTaW1wbGVDb2xvcigxMTgsIDE2NCwgMjI4KSk7Ci0gICAgICAgIGJhckdyYWRp
ZW50LT5hZGRDb2xvclN0b3AoMC41MSwgbWFrZVNpbXBsZUNvbG9yKDM2LCAxMTQsIDIxMCkpOwot
ICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuNTUsIG1ha2VTaW1wbGVDb2xvcigz
NiwgMTE0LCAyMTApKTsKLSAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgxLjAsIG1h
a2VTaW1wbGVDb2xvcig1NywgMTQyLCAyNDQpKTsKKyAgICAgICAgZmxvYXQgYmFyV2lkdGggPSBw
b3NpdGlvbiAqIHJlY3Qud2lkdGgoKTsKKyAgICAgICAgYXV0byBiYXJHcmFkaWVudCA9IEdyYWRp
ZW50OjpjcmVhdGUoR3JhZGllbnQ6OkxpbmVhckRhdGEgeyBGbG9hdFBvaW50KHJlY3QueCgpLCB2
ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgMC41ZiksIEZsb2F0UG9pbnQocmVjdC54KCksIHZl
cnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyBwcm9ncmVzc0JhckhlaWdodCAtIDEpIH0pOworICAg
ICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKHsgMC4wZiwgbWFrZVNpbXBsZUNvbG9yKDE5
NSwgMjE3LCAyNDcpIH0pOworICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKHsgMC40
NWYsIG1ha2VTaW1wbGVDb2xvcigxMTgsIDE2NCwgMjI4KSB9KTsKKyAgICAgICAgYmFyR3JhZGll
bnQtPmFkZENvbG9yU3RvcCh7IDAuNDlmLCBtYWtlU2ltcGxlQ29sb3IoMTE4LCAxNjQsIDIyOCkg
fSk7CisgICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoeyAwLjUxZiwgbWFrZVNpbXBs
ZUNvbG9yKDM2LCAxMTQsIDIxMCkgfSk7CisgICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0
b3AoeyAwLjU1ZiwgbWFrZVNpbXBsZUNvbG9yKDM2LCAxMTQsIDIxMCkgfSk7CisgICAgICAgIGJh
ckdyYWRpZW50LT5hZGRDb2xvclN0b3AoeyAxLjBmLCBtYWtlU2ltcGxlQ29sb3IoNTcsIDE0Miwg
MjQ0KSB9KTsKICAgICAgICAgY29udGV4dC5zZXRGaWxsR3JhZGllbnQoV1RGTW92ZShiYXJHcmFk
aWVudCkpOwogCiAgICAgICAgIGF1dG8gYmFyU3Ryb2tlR3JhZGllbnQgPSBHcmFkaWVudDo6Y3Jl
YXRlKEdyYWRpZW50OjpMaW5lYXJEYXRhIHsgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxS
ZW5kZXJpbmdQb3NpdGlvbiksIEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5n
UG9zaXRpb24gKyBwcm9ncmVzc0JhckhlaWdodCAtIDEpIH0pOwotICAgICAgICBiYXJTdHJva2VH
cmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgbWFrZVNpbXBsZUNvbG9yKDk1LCAxMDcsIDE4Mykp
OwotICAgICAgICBiYXJTdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuNSwgbWFrZVNpbXBs
ZUNvbG9yKDY2LCAxMDYsIDE3NCwgMjQwKSk7Ci0gICAgICAgIGJhclN0cm9rZUdyYWRpZW50LT5h
ZGRDb2xvclN0b3AoMS4wLCBtYWtlU2ltcGxlQ29sb3IoMzgsIDEwNCwgMTY2KSk7CisgICAgICAg
IGJhclN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoeyAwLjBmLCBtYWtlU2ltcGxlQ29sb3Io
OTUsIDEwNywgMTgzKSB9KTsKKyAgICAgICAgYmFyU3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3Rv
cCh7IDAuNWYsIG1ha2VTaW1wbGVDb2xvcig2NiwgMTA2LCAxNzQsIDI0MCkgfSk7CisgICAgICAg
IGJhclN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoeyAxLjBmLCBtYWtlU2ltcGxlQ29sb3Io
MzgsIDEwNCwgMTY2KSB9KTsKICAgICAgICAgY29udGV4dC5zZXRTdHJva2VHcmFkaWVudChXVEZN
b3ZlKGJhclN0cm9rZUdyYWRpZW50KSk7CiAKICAgICAgICAgUGF0aCBiYXJQYXRoOwogICAgICAg
ICBpbnQgbGVmdCA9IHJlY3QueCgpOwogICAgICAgICBpZiAoIXJlbmRlclByb2dyZXNzLnN0eWxl
KCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAgICAgICAgICAgbGVmdCA9IHJlY3QubWF4
WCgpIC0gYmFyV2lkdGg7Ci0gICAgICAgIEZsb2F0UmVjdCBiYXJSZWN0KGxlZnQgKyAwLjI1LCB2
ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgMC4yNSwgc3RkOjptYXgoYmFyV2lkdGggLSAwLjUs
IDAuMCksIHByb2dyZXNzQmFySGVpZ2h0IC0gMC41KTsKKyAgICAgICAgRmxvYXRSZWN0IGJhclJl
Y3QobGVmdCArIDAuMjVmLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgMC4yNWYsIHN0ZDo6
bWF4KGJhcldpZHRoIC0gMC41ZiwgMC4wZiksIHByb2dyZXNzQmFySGVpZ2h0IC0gMC41Zik7CiAg
ICAgICAgIGJhclBhdGguYWRkUm91bmRlZFJlY3QoYmFyUmVjdCwgcm91bmRlZENvcm5lclJhZGl1
cyk7CiAgICAgICAgIGNvbnRleHQuZHJhd1BhdGgoYmFyUGF0aCk7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFk
aWVudC5jcHAKaW5kZXggNTQ4MzU4M2FjNmFlMWE1MzZhYjg5MWI5M2FlZDVlZTVhNzdmMDk4Ny4u
YTBmZDNjM2NiYTJiMDMwYzcxNDU0ODk4MTBiMTI0NzU2YzJhY2EwNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGll
bnQuY3BwCkBAIC0yMzQsMTIgKzIzNCwxMCBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlR3JhZGll
bnQ6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBHcmFwaAogCiB2
b2lkIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OmFkZFN0b3BzKEdyYWRpZW50RGF0YSogZ3Jh
ZGllbnREYXRhLCBjb25zdCBWZWN0b3I8R3JhZGllbnQ6OkNvbG9yU3RvcD4mIHN0b3BzLCBjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CisgICAgQVNTRVJUKGdyYWRpZW50RGF0YSk7
CiAgICAgQVNTRVJUKGdyYWRpZW50RGF0YS0+Z3JhZGllbnQpOwotCi0gICAgZm9yIChHcmFkaWVu
dDo6Q29sb3JTdG9wIHN0b3AgOiBzdG9wcykgewotICAgICAgICBzdG9wLmNvbG9yID0gc3R5bGUu
Y29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoc3RvcC5jb2xvcik7Ci0gICAgICAgIGdyYWRpZW50
RGF0YS0+Z3JhZGllbnQtPmFkZENvbG9yU3RvcChzdG9wKTsKLSAgICB9CisgICAgZm9yIChhdXRv
JiBzdG9wIDogc3RvcHMpCisgICAgICAgIGdyYWRpZW50RGF0YS0+Z3JhZGllbnQtPmFkZENvbG9y
U3RvcCh7IHN0b3Aub2Zmc2V0LCBzdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihzdG9w
LmNvbG9yKSB9KTsKIH0KIAogR3JhZGllbnRTcHJlYWRNZXRob2QgUmVuZGVyU1ZHUmVzb3VyY2VH
cmFkaWVudDo6cGxhdGZvcm1TcHJlYWRNZXRob2RGcm9tU1ZHVHlwZShTVkdTcHJlYWRNZXRob2RU
eXBlIG1ldGhvZCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgKaW5kZXggMTQwYzcwZWQ1MzVhMDczMGFm
NDgwOGM1NzlhYWRlOWRiNDg5Njg0MS4uZmZiOTAwYmRmNGVkZWNhYjJlYjhhYjBmYjVmMjUzNGFh
Njg0YjZiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUdyYWRpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgKQEAgLTIxLDcgKzIxLDYgQEAKIAogI3ByYWdtYSBv
bmNlCiAKLSNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIKICNpbmNsdWRlICJTVkdHcmFk
aWVudEVsZW1lbnQuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFkaWVu
dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5jcHAK
aW5kZXggMGM2MDdkODM4YWE1OTg5YzUxZWU5YjQ5ZmNjMmUzNmQwOTQ0MWFhYi4uNTgzNzAxODA2
ZjdhNWVjNmU5MzU0ZWQwMTRhYWU3NTk2OTNhMzZiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0dyYWRpZW50RWxlbWVudC5jcHAKQEAgLTEwMiwxOCArMTAyLDExIEBAIFZlY3RvcjxHcmFkaWVu
dDo6Q29sb3JTdG9wPiBTVkdHcmFkaWVudEVsZW1lbnQ6OmJ1aWxkU3RvcHMoKQogewogICAgIFZl
Y3RvcjxHcmFkaWVudDo6Q29sb3JTdG9wPiBzdG9wczsKICAgICBmbG9hdCBwcmV2aW91c09mZnNl
dCA9IDAuMGY7Ci0KICAgICBmb3IgKGF1dG8mIHN0b3AgOiBjaGlsZHJlbk9mVHlwZTxTVkdTdG9w
RWxlbWVudD4oKnRoaXMpKSB7Ci0gICAgICAgIGNvbnN0IENvbG9yJiBjb2xvciA9IHN0b3Auc3Rv
cENvbG9ySW5jbHVkaW5nT3BhY2l0eSgpOwotCi0gICAgICAgIC8vIEZpZ3VyZSBvdXQgcmlnaHQg
bW9ub3RvbmljIG9mZnNldC4KLSAgICAgICAgZmxvYXQgb2Zmc2V0ID0gc3RvcC5vZmZzZXQoKTsK
LSAgICAgICAgb2Zmc2V0ID0gc3RkOjptaW4oc3RkOjptYXgocHJldmlvdXNPZmZzZXQsIG9mZnNl
dCksIDEuMGYpOwotICAgICAgICBwcmV2aW91c09mZnNldCA9IG9mZnNldDsKLQotICAgICAgICBz
dG9wcy5hcHBlbmQoR3JhZGllbnQ6OkNvbG9yU3RvcChvZmZzZXQsIGNvbG9yKSk7CisgICAgICAg
IGF1dG8gbW9ub3RvbmljYWxseUluY3JlYXNpbmdPZmZzZXQgPSBzdGQ6OmNsYW1wKHN0b3Aub2Zm
c2V0KCksIHByZXZpb3VzT2Zmc2V0LCAxLjBmKTsKKyAgICAgICAgcHJldmlvdXNPZmZzZXQgPSBt
b25vdG9uaWNhbGx5SW5jcmVhc2luZ09mZnNldDsKKyAgICAgICAgc3RvcHMuYXBwZW5kKHsgbW9u
b3RvbmljYWxseUluY3JlYXNpbmdPZmZzZXQsIHN0b3Auc3RvcENvbG9ySW5jbHVkaW5nT3BhY2l0
eSgpIH0pOwogICAgIH0KLQogICAgIHJldHVybiBzdG9wczsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404071</attachid>
            <date>2020-07-11 14:12:49 -0700</date>
            <delta_ts>2020-07-11 15:41:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214221-20200711141248.patch</filename>
            <type>text/plain</type>
            <size>78098</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0MjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzJhMTNkOWZiM2RmYmZi
NTAyYjc1MzNlZDY1YmEyOTMyZmZiNTc3NC4uOWVhNDIwNWE5MDllZjI3YWUyMmI5MGQwY2I3YWQz
OGUzYjU4NGRiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MyBAQAorMjAyMC0wNy0xMSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxpZnkgYW5kIGltcHJv
dmUgR3JhZGllbnQsIHNvbWUgb3RoZXIgc21hbGwgY29sb3ItcmVsYXRlZCByZW1vdmFscworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0MjIxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBjc3MvQ1NTR3Jh
ZGllbnRWYWx1ZS5jcHA6IFJlbW92ZWQgc29tZSB1bm5lZWRlZCBpbmNsdWRlcy4KKworICAgICAg
ICAqIGh0bWwvQ29sb3JJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3JJbnB1
dFR5cGU6OmN1cnJlbnRDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcklu
cHV0VHlwZTo6c2hvdWxkU2hvd1N1Z2dlc3Rpb25zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBodG1sL0NvbG9ySW5wdXRUeXBlLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAg
ICAqIGh0bWwvSFRNTERvY3VtZW50LmNwcDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlIG9mIEhh
c2hUb29scy5oLgorCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzR3JhZGllbnQ6OmNyZWF0ZSk6IE1vdmVkIHRoZXNlIGZ1
bmN0aW9ucyBvdXQgb2YgdGhlCisgICAgICAgIGhlYWRlciBzaW5jZSBpbmxpbmluZyBzaG91bGQg
YmUgdGhlIHNhbWUgb3IgYmV0dGVyIHdpdGggdGhlbSBoZXJlLgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzR3JhZGllbnQ6On5DYW52YXNHcmFkaWVudCk6IE1vdmVkIHRoaXMgb3V0IG9mIHRoZQor
ICAgICAgICBoZWFkZXIgc28gd2UgZG9uJ3QgbmVlZCB0byBpbmNsdWRlIEdyYWRpZW50LmggaW4g
dGhlIGhlYWRlci4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0dyYWRpZW50OjphZGRDb2xvclN0
b3ApOiBVcGRhdGVkIGZvciBjaGFuZ2UgdG8KKyAgICAgICAgR3JhZGllbnQ6OmFkZENvbG9yU3Rv
cCBhbmQgbW92ZSBDb2xvciByYXRoZXIgdGhhbiBjb3B5aW5nIGl0LgorCisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzR3JhZGllbnQuaDogUmVtb3ZlZCBpbmNsdWRlIG9mIEdyYWRpZW50Lmgu
CisgICAgICAgIE1vdmVkIHRoaW5ncyBvdXQgb2YgdGhlIGhlYWRlciB0byBtYWtlIHRoYXQgd29y
ay4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzOjpidWlsZEFycmF5Rm9yQ2FudmFzR3JhZGllbnQpOiBS
ZW1vdmVkCisgICAgICAgIHVzZSBvZiBHcmFkaWVudDo6dHlwZSBhbmQgaW5zdGVhZCB1bmlmeSB0
aGUgdHlwZSBzdHJpbmcgY29kZSB3aXRoCisgICAgICAgIHRoZSBjb2RlIHRoYXQgaW50ZXJwcmV0
cyB0aGUgZGF0YSBmb3IgdGhlIGRpZmZlcmVudCB0eXBlcy4KKworICAgICAgICAqIHBhZ2UvRnJh
bWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cmVjYWxjdWxhdGVTY3Jv
bGxiYXJPdmVybGF5U3R5bGUpOiBSZWZhY3RvcmVkCisgICAgICAgIHRvIGVsaW1pbmF0ZSB0aGUg
bXVsdGlwbGUgcmVkdW5kYW50IGNvZGUgcGF0aHMsIG90aGVyd2lzaW5nIGxlYXZpbmcKKyAgICAg
ICAgdGhlIGxvZ2ljIHVuY2hhbmdlZC4KKworICAgICAgICAqIHBsYXRmb3JtL0NvbG9yQ2hvb3Nl
ckNsaWVudC5oOiBSZW1vdmUgdW5uZWVkZWQgaW5jbHVkZXMgYW5kIHVudXNlZAorICAgICAgICBj
dXJyZW50Q29sb3IgYW5kIHNob3VsZFNob3dTdWdnZXN0aW9ucyBmdW5jdGlvbnMuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFkaWVudDo6Y3JlYXRlKTogUmVtb3ZlZCB1bm5lZWRlZCBjcmVhdGUgZnVuY3Rpb24gdGhhdAor
ICAgICAgICB0YWtlcyBhIENvbmljRGF0YSwgcmVwbGFjaW5nIGl0IHdpdGggb25lIHRoYXQgdGFr
ZXMgdGhlIHZhcmlhbnQgRGF0YS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpHcmFkaWVu
dCk6IFJlbW92ZWQgdGhlIHBsYXRmb3JtSW5pdCBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYWRpZW50Ojp+R3JhZGllbnQpOiBSZW1vdmVkIHRoZSBwbGF0b2Zvcm1EZXN0cm95IGZ1bmN0
aW9uLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnR5cGUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmFkZENvbG9yU3RvcCk6IFRha2UgYW4gcnZhbHVl
IHJlZmVyZW5jZSB0byBjdXQgZG93bgorICAgICAgICBhIGxpdHRsZSBiaXQgb24gcmVmZXJlbmNl
IGNvdW50IGNodXJuLiBSZXBsYWNlZCB0aGUgcGxhdGZvcm1EZXN0cm95CisgICAgICAgIGZ1bmN0
aW9uIHdpdGggYSBuZXcgc3RvcHNDaGFuZ2VkIGZ1bmN0aW9uLiBSZW1vdmVkIGFuIHVubmVlZGVk
IG92ZXJsb2FkCisgICAgICAgIHRoYXQgdGFrZXMgdGhlIHR3byBwYXJ0cyBvZiBhIENvbG9yU3Rv
cCBzZXBhcmF0ZWx5LgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNldFNvcnRlZENvbG9y
U3RvcHMpOiBVc2Ugc3RvcHNDaGFuZ2VkLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNv
cnRTdG9wcyBjb25zdCk6IFNpbXBsaWZ5IGEgYml0LCB1c2luZyBhIGxhbWJkYS4KKyAgICAgICAg
QWxzbyBnYXZlIHRoaXMgYSBzaG9ydGVyIG5hbWU7IGl0IHN0aWxsIG9wdGltaXplcyBieSBub3Qg
c29ydGluZyBpZgorICAgICAgICB0aGUgdmVjdG9yIGlzIGFscmVhZHkgc29ydGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhZGllbnQ6Omhhc0FscGhhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYWRpZW50OjpzZXRTcHJlYWRNZXRob2QpOiBSZW1vdmVkIHNvbWUgc2xpZ2h0
bHkgb3ZlcnplYWxvdXMKKyAgICAgICAgY29kZSBjaGVja2luZyB0aGlzIGlzbid0IHVzZWQgYWZ0
ZXIgY3JlYXRpbmcgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGdyYWRpZW50LgorICAgICAgICBEZWNp
ZGVkIG5vdCB0byBib3RoZXIgd2l0aCB0aGlzIGZvciBub3cuCisgICAgICAgIChXZWJDb3JlOjpH
cmFkaWVudDo6c2V0R3JhZGllbnRTcGFjZVRyYW5zZm9ybSk6IFR3ZWFrZWQgZm9ybWF0dGluZy4K
KyAgICAgICAgKFdlYkNvcmU6OmFkZCk6IEFkZGVkIG92ZXJsb2FkcyB0byBhZGQoSGFzaGVyJikg
c28gd2UgY2FuIHVzZSBjb21wdXRlSGFzaC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50Ojpo
YXNoIGNvbnN0KTogVXNlIGNvbXB1dGVIYXNoIGluc3RlYWQgb2YgaGFzaE1lbW9yeS4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50Lmg6IFVzZSBSZXRhaW5QdHIsIENPTVB0
ciwgYW5kIFJlZlB0ciBpbnN0ZWFkCisgICAgICAgIG9mIG1hbnVhbGx5IG1hbmFnaW5nIHRoZSBs
aWZldGltZXMgb2YgdGhlIHBsYXRmb3JtLXNwZWNpZmljIHVuZGVybHlpbmcKKyAgICAgICAgZ3Jh
ZGllbnQgb2JqZWN0cy4gQWxzbyByZW1vdmVkIHRoZSB1bmhlbHBmdWwgUGxhdGZvcm1HcmFkaWVu
dCB0eXBlLiBUaGlzCisgICAgICAgIHBhdHRlcm4sIGFsbCB0b28gY29tbW9uIGluIG91ciBwbGF0
Zm9ybSBsaWJyYXJ5LCBwcm92aWRlcyBubyB1c2VmdWwKKyAgICAgICAgYWJzdHJhY3Rpb24gaGVy
ZS4gUmVtb3ZlZCB1bm5lZWRlZCBjb25zdHJ1Y3RvcnMgZnJvbSBDb2xvclN0b3AuCisgICAgICAg
IFVwZGF0ZWQgZm9yIGNoYW5nZXMgYWJvdmUuIEFkZGVkIHBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0
aW9ucyBjcmVhdGVCcnVzaCwKKyAgICAgICAgY3JlYXRlUGF0dGVybiwgYW5kIGNyZWF0ZUNHR3Jh
ZGllbnQuIFNpbXBsaWZ5IGVuY29kaW5nIGFuZCBkZWNvZGluZyBieQorICAgICAgICB0YWtpbmcg
YWR2YW50YWdlIG9mIHRoZSBzdXBwb3J0IGZvciBlbmNvZGluZy9kZWNvZGluZyB2YXJpYW50cy4K
KyAgICAgICAgUmVtb3ZlIHRoZSBlbnVtIEdyYWRpZW50OjpUeXBlIGVudGlyZWx5LiBSZW1vdmVk
IHRoZSBpbnZhbGlkYXRlSGFzaAorICAgICAgICBmdW5jdGlvbiBiZWNhdXNlIGl0J3Mgb25seSB1
c2VkIGluIGEgZmV3IHNldHRlcnMgYW5kIHNldHRpbmcgdGhlIGhhc2gKKyAgICAgICAgdG8gMCBp
cyBhIGZpbmUgd2F5IHRvIHdyaXRlIGl0IHRoZXJlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSk6IE1vdmVkIGhlcmUgZnJvbQorICAgICAg
ICB0aGUgaGVhZGVyIHNvIHdlIGRvbid0IG5lZWQgdG8gaW5jbHVkZSBHcmFkaWVudC5oIGluIHRo
ZSBoZWFkZXIuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6fkdyYXBo
aWNzQ29udGV4dFN0YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6b3BlcmF0b3I9KTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuaDogUmVtb3ZlZCBpbmNsdWRlIG9mIEdyYWRpZW50LmguCisgICAg
ICAgIE1vdmVkIHRoaW5ncyBvdXQgb2YgdGhlIGhlYWRlciB0byBtYWtlIHRoYXQgd29yay4KKwor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpGaWxsU291cmNlOjpGaWxsU291cmNlKTogVXNlIGNy
ZWF0ZVBhdHRlcm4gaW5zdGVhZCBvZgorICAgICAgICBjcmVhdGVQbGF0Zm9ybUdyYWRpZW50Lgor
ICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OlN0cm9rZVNvdXJjZTo6U3Ryb2tlU291cmNlKTogRGl0
dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzdG9wc0NoYW5nZWQpOiBSZW5hbWVkIGZy
b20gcGxhdGZvcm1EZXN0cm95LgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmNyZWF0ZVBh
dHRlcm4pOiBSZW5hbWVkIGZyb20gY3JlYXRlUGxhdGZvcm1HcmFkaWVudC4KKyAgICAgICAgQ2hh
bmdlZCB0byByZXR1cm4gYSBSZWZQdHIgaW5zdGVhZCBvZiBhIHJhdyBwb2ludGVyIHRoZSBjYWxs
ZXIgbmVlZHMgdG8KKyAgICAgICAgYWRvcHQgYXQgZWFjaCBjYWxsIHNpdGUuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFkaWVudDo6ZmlsbCk6IFVzZSBjcmVhdGVQYXR0ZXJuLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0KTogRGl0dG8u
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzdG9wc0NoYW5nZWQpOiBSZW5hbWVkIGZyb20gcGxhdGZv
cm1EZXN0cm95LCBhbmQKKyAgICAgICAgc2ltcGxpZmllZCBpbXBsZW1lbnRhdGlvbiBub3cgdGhh
dCB3ZSB1c2UgUmV0YWluUHRyLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmNyZWF0ZUNH
R3JhZGllbnQpOiBSZW5hbWVkIGZyb20gcGxhdGZvcm1HcmFkaWVudCwKKyAgICAgICAgZ290IHJp
ZCBvZiB0aGUgcmV0dXJuIHZhbHVlLCBhbmQgbWFkZSBpdCBjYWxsZXIgcmVzcG9uc2liaWxpdHkg
dG8gb25seQorICAgICAgICBjYWxsIHRoaXMgd2hlbiBhIGdyYWRlaXRuIG5lZWRzIHRvIGJlIGFs
bG9jYXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpwYWludCk6IFVwZGF0ZWQgdG8g
dXNlIHRoZSBhYm92ZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmNwcDogQWRkIGluY2x1ZGUgb2YgR3JhZGllbnQuaC4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmg6CisgICAgICAg
IEFkZGVkIGluY2x1ZGUgb2YgR3JhZGllbnQuaCBzaW5jZSB0aGUgZnVuY3Rpb24gdGVtcGxhdGVz
IGluIHRoaXMgZmlsZQorICAgICAgICBlbmNvZGUgYW5kIGRlY29kZSBncmFkaWVudHMuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJh
dGlvblJlY29yZGVyLmNwcDoKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmZpbGxSZWN0KTogVXNlIGNyZWF0ZVBhdHRlcm4uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRp
cmVjdDJEOjpGaWxsU291cmNlOjpGaWxsU291cmNlKTogVXNlIGNyZWF0ZUJydXNoCisgICAgICAg
IChXZWJDb3JlOjpEaXJlY3QyRDo6U3Ryb2tlU291cmNlOjpTdHJva2VTb3VyY2UpOiBEaXR0by4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzdG9wc0NoYW5nZWQpOiBSZW5hbWVkIGZyb20g
cGxhdGZvcm1EZXN0cm95IGFuZAorICAgICAgICBzaW1wbGlmaWVkIGltcGxlbWVudGF0aW9uIG5v
dyB0aGF0IHdlIHVzZSBDT01QdHIuCisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGxhdGZv
cm1HcmFkaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6Y3JlYXRl
UGxhdGZvcm1HcmFkaWVudElmTmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYWRpZW50OjpjcmVhdGVCcnVzaCk6IFJlbmFtZWQgZnJvbSBnZW5lcmF0ZUdyYWRpZW50IGFu
ZAorICAgICAgICBhZGRlZCBhIHJldHVybiB2YWx1ZS4gU2ltcGxpZmllZCBub3cgdGhhdCB3ZSB1
c2UgQ09NUHRyLCBvcHRpbWl6ZWQKKyAgICAgICAgdGhlIGNvZGUgYSBiaXQsIGFuZCBhZGRlZCBz
b21lIEZJWE1FIGFib3V0IG1pc3Rha2VzIEkgbm90aWNlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YWRpZW50OjpmaWxsKTogVXNlIGNyZWF0ZUJydXNoIGFuZCBtX2JydXNoLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUmVjdCk6IFVz
ZSBjcmVhdGVCcnVzaC4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1h
Yy5tbTogQWRkZWQgaW5jbHVkZSBvZiBHcmFkaWVudC5oLgorCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRoZW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBh
aW50UHJvZ3Jlc3NCYXIpOiBVcGRhdGVkIGZvciBjaGFuZ2VzIHRvCisgICAgICAgIGFkZENvbG9y
U3RvcC4gQWxzbyByZW1vdmUgYSBsb3Qgb2YgdW5uZWNlc3NhcnkgY29udmVyc2lvbiBmcm9tIGZs
b2F0CisgICAgICAgIHRvIGRvdWJsZSBhbmQgYmFjayB0byBmbG9hdC4KKworICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphZGRTdG9wcyk6IFVwZGF0ZSB0byBtYWtl
CisgICAgICAgIGFuZCBtb3ZlIGEgbmV3IGNvbG9yIHN0b3AgaW5zdGVhZCBvZiBjb3B5aW5nIGl0
LCBtb2RpZnlpbmcgaXQgaW4KKyAgICAgICAgcGxhY2UsIGFuZCB0aGVuIGNvcHlpbmcgaXQgYWdh
aW4uCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNw
cDogUmVtb3ZlZCBpbmNsdWRlIG9mCisgICAgICAgIEdyYWRpZW50LmguCisKKyAgICAgICAgKiBz
dmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dyYWRpZW50
RWxlbWVudDo6YnVpbGRTdG9wcyk6IFVzZSBzdGQ6OmNsYW1wIHRvIGNvbnZlcnQKKyAgICAgICAg
dGhlIG9mZnNldHMgaW50byBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgb25lcyBpbiBhIG1vcmUg
ZGlyZWN0IHdheSwKKyAgICAgICAgdXNpbmcgdmFyaWFibGUgbmFtZXMgaW5zdGVhZCBvZiBjb21t
ZW50cyB0byBjbGFyaWZ5IHdoYXQgd2UgYXJlIGRvaW5nLgorCiAyMDIwLTA3LTExICBTaW1vbiBG
cmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI2
MDI3Nik6IE92ZXJmbG93IHNjcm9sbGluZyBsYXllcnMgbWlzcGxhY2VkIGluc2lkZSBTVkcgZm9y
ZWlnbiBvYmplY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZh
bHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAppbmRleCAx
MDQyZmEzYjMxOWM1OThkMmI4YjgwODI1MGQxNDUzMTllNDU3ZDI3Li44YmE5OWJkMGUxNThiNDQz
OWIyZDE2YTk2MWZlY2RjMTgzZDA0M2E2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTR3JhZGllbnRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50
VmFsdWUuY3BwCkBAIC0zMCw4ICszMCw2IEBACiAjaW5jbHVkZSAiQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YS5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJDb2xv
ckJsZW5kaW5nLmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0jaW5jbHVkZSAiR3JhZGllbnQu
aCIKICNpbmNsdWRlICJHcmFkaWVudEltYWdlLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxl
LmgiCiAjaW5jbHVkZSAiUGFpci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9D
b2xvcklucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmNw
cAppbmRleCA5OTI2MzQ0YTA5ZDZkOGEyMDUyOTgxMDM1ODA0YzYxNTBiNWM4ZDZiLi45YWIyZmVl
ZDk2MzY3MjcyYWQ5YTA3MThmMGNjZDk1ZDg1YzlhMTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Nv
bG9ySW5wdXRUeXBlLmNwcApAQCAtMjcwLDIxICsyNzAsNiBAQCBJbnRSZWN0IENvbG9ySW5wdXRU
eXBlOjplbGVtZW50UmVjdFJlbGF0aXZlVG9Sb290VmlldygpIGNvbnN0CiAgICAgcmV0dXJuIGVs
ZW1lbnQoKS0+ZG9jdW1lbnQoKS52aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhlbGVtZW50KCkt
PnJlbmRlcmVyKCktPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpOwogfQogCi1Db2xvciBDb2xv
cklucHV0VHlwZTo6Y3VycmVudENvbG9yKCkKLXsKLSAgICByZXR1cm4gdmFsdWVBc0NvbG9yKCk7
Ci19Ci0KLWJvb2wgQ29sb3JJbnB1dFR5cGU6OnNob3VsZFNob3dTdWdnZXN0aW9ucygpIGNvbnN0
Ci17Ci0jaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCi0gICAgQVNTRVJUKGVsZW1lbnQoKSk7
Ci0gICAgcmV0dXJuIGVsZW1lbnQoKS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihsaXN0QXR0cik7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCiBWZWN0
b3I8Q29sb3I+IENvbG9ySW5wdXRUeXBlOjpzdWdnZXN0ZWRDb2xvcnMoKSBjb25zdAogewogICAg
IFZlY3RvcjxDb2xvcj4gc3VnZ2VzdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0NvbG9ySW5wdXRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBl
LmgKaW5kZXggOWEzYzdiNzE3MzUxMDU5ZTY0ZmU0MTVlOTE4MGM0NTJlM2E5YjNjNC4uZjc0ZDc2
ZjFiOWZmNTA4NDI2YjIxNDRhMWZhNWE4YmEyNDBjZTcwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9Db2xvcklucHV0VHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ29s
b3JJbnB1dFR5cGUuaApAQCAtNDgsOCArNDgsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkQ2hv
b3NlQ29sb3IoY29uc3QgQ29sb3ImKSBmaW5hbDsKICAgICB2b2lkIGRpZEVuZENob29zZXIoKSBm
aW5hbDsKICAgICBJbnRSZWN0IGVsZW1lbnRSZWN0UmVsYXRpdmVUb1Jvb3RWaWV3KCkgY29uc3Qg
ZmluYWw7Ci0gICAgQ29sb3IgY3VycmVudENvbG9yKCkgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRT
aG93U3VnZ2VzdGlvbnMoKSBjb25zdCBmaW5hbDsKICAgICBWZWN0b3I8Q29sb3I+IHN1Z2dlc3Rl
ZENvbG9ycygpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0
IGZpbmFsOwogICAgIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29u
c3QgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKaW5kZXggN2YyNWMzNjgy
YTM2MWU0N2U1ZjkwZTQ4YjQyZWQyYjI4OTJjNzlmYy4uZWRhY2YyNGQ0YTJhNGNjZDU2ZTQyNDBl
MDU4MTA0OWY4MmYzOTY0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9j
dW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcApAQCAt
NzQsNyArNzQsNiBAQAogI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxJRnJhbWVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSGFz
aFRvb2xzLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlN0eWxl
UmVzb2x2ZXIuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwCmluZGV4IGNhNzg3YzM2Yzg1
MWQ4ZjBlZmNkYTI3YzRmNjVhNDY2YWQ5MTU4MzIuLjc1ZTRhZTEyOWY3MmNjYTZmNGQ1YmY2Njdj
NTI0NzliNzI3MGI4OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc0dyYWRpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNH
cmFkaWVudC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkNhbnZhc0Jhc2UuaCIK
ICNpbmNsdWRlICJDYW52YXNTdHlsZS5oIgorI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNDQsNiArNDUsMTggQEAgQ2FudmFzR3JhZGllbnQ6OkNhbnZh
c0dyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2lu
dCYKIHsKIH0KIAorUmVmPENhbnZhc0dyYWRpZW50PiBDYW52YXNHcmFkaWVudDo6Y3JlYXRlKGNv
bnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgQ2FudmFzQmFzZSYgY2Fu
dmFzQmFzZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDYW52YXNHcmFkaWVudChwMCwg
cDEsIGNhbnZhc0Jhc2UpKTsKK30KKworUmVmPENhbnZhc0dyYWRpZW50PiBDYW52YXNHcmFkaWVu
dDo6Y3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2lu
dCYgcDEsIGZsb2F0IHIxLCBDYW52YXNCYXNlJiBjYW52YXNCYXNlKQoreworICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IENhbnZhc0dyYWRpZW50KHAwLCByMCwgcDEsIHIxLCBjYW52YXNCYXNlKSk7
Cit9CisKK0NhbnZhc0dyYWRpZW50Ojp+Q2FudmFzR3JhZGllbnQoKSA9IGRlZmF1bHQ7CisKIEV4
Y2VwdGlvbk9yPHZvaWQ+IENhbnZhc0dyYWRpZW50OjphZGRDb2xvclN0b3AoZmxvYXQgdmFsdWUs
IGNvbnN0IFN0cmluZyYgY29sb3JTdHJpbmcpCiB7CiAgICAgaWYgKCEodmFsdWUgPj0gMCAmJiB2
YWx1ZSA8PSAxKSkKQEAgLTU0LDcgKzY3LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2FudmFzR3Jh
ZGllbnQ6OmFkZENvbG9yU3RvcChmbG9hdCB2YWx1ZSwgY29uc3QgU3RyaW5nJiBjb2xvclMKICAg
ICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRh
eEVycm9yIH07CiAKLSAgICBtX2dyYWRpZW50LT5hZGRDb2xvclN0b3AodmFsdWUsIGNvbG9yKTsK
KyAgICBtX2dyYWRpZW50LT5hZGRDb2xvclN0b3AoeyB2YWx1ZSwgV1RGTW92ZShjb2xvcikgfSk7
CiAgICAgcmV0dXJuIHsgfTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzR3JhZGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c0dyYWRpZW50LmgKaW5kZXggYzM1ZmJjZTE5NDVhMWU2MTYxYTVmMTZkNjEzY2M1ZTUzYjhmN2Zh
Mi4uYTIxNWYxNDFlY2JlZWUzMTc4OTdmZWM0ZDRkNjJhYjFkZjM0NTk1OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5oCkBAIC0yNywyMiArMjcsMTggQEAK
ICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRXhjZXB0aW9uT3IuaCIKLSNpbmNsdWRlICJHcmFk
aWVudC5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBDYW52YXNCYXNlOworY2xhc3MgR3JhZGllbnQ7CiAKIGNsYXNzIENhbnZhc0dyYWRp
ZW50IDogcHVibGljIFJlZkNvdW50ZWQ8Q2FudmFzR3JhZGllbnQ+IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPENhbnZhc0dyYWRpZW50PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcDAsIGNv
bnN0IEZsb2F0UG9pbnQmIHAxLCBDYW52YXNCYXNlJiBjYW52YXNCYXNlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2FudmFzR3JhZGllbnQocDAsIHAxLCBjYW52YXNCYXNl
KSk7Ci0gICAgfQotICAgIHN0YXRpYyBSZWY8Q2FudmFzR3JhZGllbnQ+IGNyZWF0ZShjb25zdCBG
bG9hdFBvaW50JiBwMCwgZmxvYXQgcjAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBmbG9hdCByMSwg
Q2FudmFzQmFzZSYgY2FudmFzQmFzZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IENhbnZhc0dyYWRpZW50KHAwLCByMCwgcDEsIHIxLCBjYW52YXNCYXNlKSk7Ci0gICAgfQor
ICAgIHN0YXRpYyBSZWY8Q2FudmFzR3JhZGllbnQ+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBw
MCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIENhbnZhc0Jhc2UmKTsKKyAgICBzdGF0aWMgUmVmPENh
bnZhc0dyYWRpZW50PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25z
dCBGbG9hdFBvaW50JiBwMSwgZmxvYXQgcjEsIENhbnZhc0Jhc2UmKTsKKyAgICB+Q2FudmFzR3Jh
ZGllbnQoKTsKIAogICAgIEdyYWRpZW50JiBncmFkaWVudCgpIHsgcmV0dXJuIG1fZ3JhZGllbnQ7
IH0KICAgICBjb25zdCBHcmFkaWVudCYgZ3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX2dyYWRp
ZW50OyB9CkBAIC01NSw3ICs1MSw2IEBAIHByaXZhdGU6CiAKICAgICBSZWY8R3JhZGllbnQ+IG1f
Z3JhZGllbnQ7CiAgICAgQ2FudmFzQmFzZSYgbV9jYW52YXM7Ci0KIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwCmluZGV4IDdkOTI1NTI1Zjg1OThkOGMyZDhjZTVhNjFiMGY3ZDhiNmFiY2Q1ODQuLjg3ZGVl
ZjQ5OTIxYzViNWZhMWVlYmYyYWY2NTg1N2NlMTRmMmY2OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAt
MzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNT
U1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJHcmFk
aWVudC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
CiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCmluZGV4IGMxMDNkZWEwODNkMDY5YTQzM2Q2
YWMzZTc4YWM4MjdiMGJhMTQwYjAuLjVjNTdiNjA1NzRlY2E1NzIyZDE1NDk5MmFmZGJkYzc1NWU2
MzE5OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52
YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3Bw
CkBAIC0xMTU4LDE5ICsxMTU4LDE3IEBAIFJlZjxKU09OOjpBcnJheU9mPEpTT046OlZhbHVlPj4g
SW5zcGVjdG9yQ2FudmFzOjpidWlsZEFjdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsCiAKIFJlZjxK
U09OOjpBcnJheU9mPEpTT046OlZhbHVlPj4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEFycmF5Rm9y
Q2FudmFzR3JhZGllbnQoY29uc3QgQ2FudmFzR3JhZGllbnQmIGNhbnZhc0dyYWRpZW50KQogewot
ICAgIGNvbnN0IGF1dG8mIGdyYWRpZW50ID0gY2FudmFzR3JhZGllbnQuZ3JhZGllbnQoKTsKLSAg
ICAKLSAgICBTdHJpbmcgdHlwZSA9IGdyYWRpZW50LnR5cGUoKSA9PSBHcmFkaWVudDo6VHlwZTo6
UmFkaWFsID8gInJhZGlhbC1ncmFkaWVudCJfcyA6IGdyYWRpZW50LnR5cGUoKSA9PSBHcmFkaWVu
dDo6VHlwZTo6TGluZWFyID8gImxpbmVhci1ncmFkaWVudCJfcyA6ICJjb25pYy1ncmFkaWVudCJf
czsKLQorICAgIEFTQ0lJTGl0ZXJhbCB0eXBlID0gImxpbmVhci1ncmFkaWVudCJfczsKICAgICBh
dXRvIHBhcmFtZXRlcnMgPSBKU09OOjpBcnJheU9mPGZsb2F0Pjo6Y3JlYXRlKCk7Ci0gICAgV1RG
Ojpzd2l0Y2hPbihncmFkaWVudC5kYXRhKCksCi0gICAgICAgIFsmcGFyYW1ldGVyc10gKGNvbnN0
IEdyYWRpZW50OjpMaW5lYXJEYXRhJiBkYXRhKSB7CisgICAgV1RGOjpzd2l0Y2hPbihjYW52YXNH
cmFkaWVudC5ncmFkaWVudCgpLmRhdGEoKSwKKyAgICAgICAgWyZdIChjb25zdCBHcmFkaWVudDo6
TGluZWFyRGF0YSYgZGF0YSkgewogICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRh
LnBvaW50MC54KCkpOwogICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50
MC55KCkpOwogICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50MS54KCkp
OwogICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50MS55KCkpOwogICAg
ICAgICB9LAotICAgICAgICBbJnBhcmFtZXRlcnNdIChjb25zdCBHcmFkaWVudDo6UmFkaWFsRGF0
YSYgZGF0YSkgeworICAgICAgICBbJl0gKGNvbnN0IEdyYWRpZW50OjpSYWRpYWxEYXRhJiBkYXRh
KSB7CisgICAgICAgICAgICB0eXBlID0gInJhZGlhbC1ncmFkaWVudCJfczsKICAgICAgICAgICAg
IHBhcmFtZXRlcnMtPmFkZEl0ZW0oZGF0YS5wb2ludDAueCgpKTsKICAgICAgICAgICAgIHBhcmFt
ZXRlcnMtPmFkZEl0ZW0oZGF0YS5wb2ludDAueSgpKTsKICAgICAgICAgICAgIHBhcmFtZXRlcnMt
PmFkZEl0ZW0oZGF0YS5zdGFydFJhZGl1cyk7CkBAIC0xMTc4LDcgKzExNzYsOCBAQCBSZWY8SlNP
Tjo6QXJyYXlPZjxKU09OOjpWYWx1ZT4+IEluc3BlY3RvckNhbnZhczo6YnVpbGRBcnJheUZvckNh
bnZhc0dyYWRpZW50KGNvbgogICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBv
aW50MS55KCkpOwogICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLmVuZFJhZGl1
cyk7CiAgICAgICAgIH0sCi0gICAgICAgIFsmcGFyYW1ldGVyc10gKGNvbnN0IEdyYWRpZW50OjpD
b25pY0RhdGEmIGRhdGEpIHsKKyAgICAgICAgWyZdIChjb25zdCBHcmFkaWVudDo6Q29uaWNEYXRh
JiBkYXRhKSB7CisgICAgICAgICAgICB0eXBlID0gImNvbmljLWdyYWRpZW50Il9zOwogICAgICAg
ICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50MC54KCkpOwogICAgICAgICAgICAg
cGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50MC55KCkpOwogICAgICAgICAgICAgcGFyYW1l
dGVycy0+YWRkSXRlbShkYXRhLmFuZ2xlUmFkaWFucyk7CkBAIC0xMTg2LDcgKzExODUsNyBAQCBS
ZWY8SlNPTjo6QXJyYXlPZjxKU09OOjpWYWx1ZT4+IEluc3BlY3RvckNhbnZhczo6YnVpbGRBcnJh
eUZvckNhbnZhc0dyYWRpZW50KGNvbgogICAgICk7CiAKICAgICBhdXRvIHN0b3BzID0gSlNPTjo6
QXJyYXlPZjxKU09OOjpWYWx1ZT46OmNyZWF0ZSgpOwotICAgIGZvciAoYXV0byYgY29sb3JTdG9w
IDogZ3JhZGllbnQuc3RvcHMoKSkgeworICAgIGZvciAoYXV0byYgY29sb3JTdG9wIDogY2FudmFz
R3JhZGllbnQuZ3JhZGllbnQoKS5zdG9wcygpKSB7CiAgICAgICAgIGF1dG8gc3RvcCA9IEpTT046
OkFycmF5T2Y8SlNPTjo6VmFsdWU+OjpjcmVhdGUoKTsKICAgICAgICAgc3RvcC0+YWRkSXRlbShj
b2xvclN0b3Aub2Zmc2V0KTsKICAgICAgICAgc3RvcC0+YWRkSXRlbShpbmRleEZvckRhdGEoc2Vy
aWFsaXphdGlvbkZvckNTUyhjb2xvclN0b3AuY29sb3IpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAKaW5kZXggNTEyN2I0OTBmNGM0NjkxMjk4OGZlYWY5MzY1NTQ0ZTZlYmQ2YmY2YS4uOTJh
ODA4OWY0ODZiOTBhYTY4OGFlZTNmYmEyOWNjYjQ0ODEwYmI0NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcApAQCAtMzUwLDMyICszNTAsMjcgQEAgdm9pZCBGcmFtZVZpZXc6OmRldGFjaEN1
c3RvbVNjcm9sbGJhcnMoKQogCiB2b2lkIEZyYW1lVmlldzo6cmVjYWxjdWxhdGVTY3JvbGxiYXJP
dmVybGF5U3R5bGUoKQogewotICAgIFNjcm9sbGJhck92ZXJsYXlTdHlsZSBvbGRPdmVybGF5U3R5
bGUgPSBzY3JvbGxiYXJPdmVybGF5U3R5bGUoKTsKLSAgICBPcHRpb25hbDxTY3JvbGxiYXJPdmVy
bGF5U3R5bGU+IGNsaWVudE92ZXJsYXlTdHlsZSA9IGZyYW1lKCkucGFnZSgpID8gZnJhbWUoKS5w
YWdlKCktPmNocm9tZSgpLmNsaWVudCgpLnByZWZlcnJlZFNjcm9sbGJhck92ZXJsYXlTdHlsZSgp
IDogV1RGOjpudWxsb3B0OwotICAgIGlmIChjbGllbnRPdmVybGF5U3R5bGUpIHsKLSAgICAgICAg
aWYgKGNsaWVudE92ZXJsYXlTdHlsZS52YWx1ZSgpICE9IG9sZE92ZXJsYXlTdHlsZSkKLSAgICAg
ICAgICAgIHNldFNjcm9sbGJhck92ZXJsYXlTdHlsZShjbGllbnRPdmVybGF5U3R5bGUudmFsdWUo
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTY3JvbGxiYXJPdmVybGF5U3R5bGUg
Y29tcHV0ZWRPdmVybGF5U3R5bGUgPSBTY3JvbGxiYXJPdmVybGF5U3R5bGVEZWZhdWx0OwotCi0g
ICAgQ29sb3IgYmFja2dyb3VuZENvbG9yID0gZG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IoKTsKLSAg
ICBpZiAoYmFja2dyb3VuZENvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICAvLyBSZWR1Y2UgdGhl
IGJhY2tncm91bmQgY29sb3IgZnJvbSBSR0IgdG8gYSBsaWdodG5lc3MgdmFsdWUKLSAgICAgICAg
Ly8gYW5kIGRldGVybWluZSB3aGljaCBzY3JvbGxiYXIgc3R5bGUgdG8gdXNlIGJhc2VkIG9uIGEg
bGlnaHRuZXNzCi0gICAgICAgIC8vIGhldXJpc3RpYy4KLSAgICAgICAgaWYgKGJhY2tncm91bmRD
b2xvci5saWdodG5lc3MoKSA8PSAuNWYgJiYgYmFja2dyb3VuZENvbG9yLmlzVmlzaWJsZSgpKQot
ICAgICAgICAgICAgY29tcHV0ZWRPdmVybGF5U3R5bGUgPSBTY3JvbGxiYXJPdmVybGF5U3R5bGVM
aWdodDsKLSAgICAgICAgZWxzZSBpZiAoIWJhY2tncm91bmRDb2xvci5pc1Zpc2libGUoKSAmJiB1
c2VEYXJrQXBwZWFyYW5jZSgpKQotICAgICAgICAgICAgY29tcHV0ZWRPdmVybGF5U3R5bGUgPSBT
Y3JvbGxiYXJPdmVybGF5U3R5bGVMaWdodDsKLSAgICB9Ci0KLSAgICBpZiAob2xkT3ZlcmxheVN0
eWxlICE9IGNvbXB1dGVkT3ZlcmxheVN0eWxlKQotICAgICAgICBzZXRTY3JvbGxiYXJPdmVybGF5
U3R5bGUoY29tcHV0ZWRPdmVybGF5U3R5bGUpOworICAgIGF1dG8gc3R5bGUgPSBbJl0geworICAg
ICAgICBpZiAoYXV0byBwYWdlID0gZnJhbWUoKS5wYWdlKCkpIHsKKyAgICAgICAgICAgIGlmIChh
dXRvIGNsaWVudE92ZXJsYXlTdHlsZSA9IHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLnByZWZlcnJl
ZFNjcm9sbGJhck92ZXJsYXlTdHlsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiAqY2xpZW50
T3ZlcmxheVN0eWxlOworICAgICAgICB9CisgICAgICAgIGF1dG8gYmFja2dyb3VuZCA9IGRvY3Vt
ZW50QmFja2dyb3VuZENvbG9yKCk7CisgICAgICAgIGlmIChiYWNrZ3JvdW5kLmlzVmlzaWJsZSgp
KSB7CisgICAgICAgICAgICBpZiAoYmFja2dyb3VuZC5saWdodG5lc3MoKSA8PSAuNWYpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFNjcm9sbGJhck92ZXJsYXlTdHlsZUxpZ2h0OworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgaWYgKHVzZURhcmtBcHBlYXJhbmNlKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIFNjcm9sbGJhck92ZXJsYXlTdHlsZUxpZ2h0OworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBTY3JvbGxiYXJPdmVybGF5U3R5bGVEZWZhdWx0OworICAgIH0oKTsKKyAgICBp
ZiAoc2Nyb2xsYmFyT3ZlcmxheVN0eWxlKCkgIT0gc3R5bGUpCisgICAgICAgIHNldFNjcm9sbGJh
ck92ZXJsYXlTdHlsZShzdHlsZSk7CiB9CiAKICNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykKKwog
dm9pZCBGcmFtZVZpZXc6OnJlY2FsY3VsYXRlQmFzZUJhY2tncm91bmRDb2xvcigpCiB7CiAgICAg
Ym9vbCB1c2luZ0RhcmtBcHBlYXJhbmNlID0gdXNlRGFya0FwcGVhcmFuY2UoKTsKQEAgLTM4OCw2
ICszODMsNyBAQCB2b2lkIEZyYW1lVmlldzo6cmVjYWxjdWxhdGVCYXNlQmFja2dyb3VuZENvbG9y
KCkKICAgICAgICAgYmFja2dyb3VuZENvbG9yID0gQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsK
ICAgICB1cGRhdGVCYWNrZ3JvdW5kUmVjdXJzaXZlbHkoYmFja2dyb3VuZENvbG9yKTsKIH0KKwog
I2VuZGlmCiAKIHZvaWQgRnJhbWVWaWV3OjpjbGVhcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9Db2xvckNob29zZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0NvbG9yQ2hvb3NlckNsaWVudC5oCmluZGV4IDliM2I4OTgxNjNlMjdiMGE2OTYyNDk1ZDIy
N2I5YzliNTY5MWRiMmMuLjMxNjhmZWU1MmZhMGY0M2Q0YTRmOTY0NWQwNjFkYjQ2NjcyMzdiNzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbG9yQ2hvb3NlckNsaWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbG9yQ2hvb3NlckNsaWVudC5oCkBAIC0y
NywxNyArMjcsMTYgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBDb2xvckNob29zZXJDbGllbnRfaAot
I2RlZmluZSBDb2xvckNob29zZXJDbGllbnRfaAorI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUo
SU5QVVRfVFlQRV9DT0xPUikKIAotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBDb2xvcjsKK2NsYXNzIEludFJlY3Q7CiAKIGNsYXNzIENvbG9yQ2hvb3NlckNs
aWVudCB7CiBwdWJsaWM6CkBAIC00NiwxMyArNDUsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGRpZENob29zZUNvbG9yKGNvbnN0IENvbG9yJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBk
aWRFbmRDaG9vc2VyKCkgPSAwOwogICAgIHZpcnR1YWwgSW50UmVjdCBlbGVtZW50UmVjdFJlbGF0
aXZlVG9Sb290VmlldygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIENvbG9yIGN1cnJlbnRDb2xv
cigpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2hvd1N1Z2dlc3Rpb25zKCkgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgVmVjdG9yPENvbG9yPiBzdWdnZXN0ZWRDb2xvcnMoKSBjb25zdCA9
IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5Q
VVRfVFlQRV9DT0xPUikKLQotI2VuZGlmIC8vIENvbG9yQ2hvb3NlckNsaWVudF9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAKaW5kZXggYmQ3ZjY4YmJm
MGIwNTE1YzA3M2EzNjc1YTRkN2E3NjVjNDNjMzgxMi4uMTY0N2VkMTk4ZTFkZjQ0M2M5MDM5ZTky
MTM0ODdiMGM1YTVjZGFjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhZGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYWRpZW50LmNwcApAQCAtNDYsNyArNDYsNyBAQCBSZWY8R3JhZGllbnQ+IEdyYWRpZW50Ojpj
cmVhdGUoUmFkaWFsRGF0YSYmIGRhdGEpCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR3JhZGll
bnQoV1RGTW92ZShkYXRhKSkpOwogfQogCi1SZWY8R3JhZGllbnQ+IEdyYWRpZW50OjpjcmVhdGUo
Q29uaWNEYXRhJiYgZGF0YSkKK1JlZjxHcmFkaWVudD4gR3JhZGllbnQ6OmNyZWF0ZShEYXRhJiYg
ZGF0YSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHcmFkaWVudChXVEZNb3ZlKGRhdGEp
KSk7CiB9CkBAIC01NCw0MCArNTQsMTkgQEAgUmVmPEdyYWRpZW50PiBHcmFkaWVudDo6Y3JlYXRl
KENvbmljRGF0YSYmIGRhdGEpCiBHcmFkaWVudDo6R3JhZGllbnQoTGluZWFyRGF0YSYmIGRhdGEp
CiAgICAgOiBtX2RhdGEoV1RGTW92ZShkYXRhKSkKIHsKLSAgICBwbGF0Zm9ybUluaXQoKTsKIH0K
IAogR3JhZGllbnQ6OkdyYWRpZW50KFJhZGlhbERhdGEmJiBkYXRhKQogICAgIDogbV9kYXRhKFdU
Rk1vdmUoZGF0YSkpCiB7Ci0gICAgcGxhdGZvcm1Jbml0KCk7CiB9CiAgICAgCi1HcmFkaWVudDo6
R3JhZGllbnQoQ29uaWNEYXRhJiYgZGF0YSkKK0dyYWRpZW50OjpHcmFkaWVudChEYXRhJiYgZGF0
YSkKICAgICA6IG1fZGF0YShXVEZNb3ZlKGRhdGEpKQogewotICAgIHBsYXRmb3JtSW5pdCgpOwog
fQogCi1HcmFkaWVudDo6fkdyYWRpZW50KCkKLXsKLSAgICBwbGF0Zm9ybURlc3Ryb3koKTsKLX0K
LQotYXV0byBHcmFkaWVudDo6dHlwZSgpIGNvbnN0IC0+IFR5cGUKLXsKLSAgICByZXR1cm4gV1RG
Ojpzd2l0Y2hPbihtX2RhdGEsCi0gICAgICAgIFtdIChjb25zdCBMaW5lYXJEYXRhJikgewotICAg
ICAgICAgICAgcmV0dXJuIFR5cGU6OkxpbmVhcjsKLSAgICAgICAgfSwKLSAgICAgICAgW10gKGNv
bnN0IFJhZGlhbERhdGEmKSB7Ci0gICAgICAgICAgICByZXR1cm4gVHlwZTo6UmFkaWFsOwotICAg
ICAgICB9LAotICAgICAgICBbXSAoY29uc3QgQ29uaWNEYXRhJikgewotICAgICAgICAgICAgcmV0
dXJuIFR5cGU6OkNvbmljOwotICAgICAgICB9Ci0gICAgKTsKLX0KK0dyYWRpZW50Ojp+R3JhZGll
bnQoKSA9IGRlZmF1bHQ7CiAKIHZvaWQgR3JhZGllbnQ6OmFkanVzdFBhcmFtZXRlcnNGb3JUaWxl
ZERyYXdpbmcoRmxvYXRTaXplJiBzaXplLCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZykKIHsKQEAgLTEzNCwxNDYgKzExMyw5MCBAQCBib29sIEdyYWRpZW50Ojpp
c1plcm9TaXplKCkgY29uc3QKICAgICApOwogfQogCi12b2lkIEdyYWRpZW50OjphZGRDb2xvclN0
b3AoZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgYWRkQ29sb3JTdG9w
KHsgb2Zmc2V0LCBjb2xvciB9KTsKLX0KLQotdm9pZCBHcmFkaWVudDo6YWRkQ29sb3JTdG9wKGNv
bnN0IEdyYWRpZW50OjpDb2xvclN0b3AmIHN0b3ApCit2b2lkIEdyYWRpZW50OjphZGRDb2xvclN0
b3AoR3JhZGllbnQ6OkNvbG9yU3RvcCYmIHN0b3ApCiB7Ci0gICAgbV9zdG9wcy5hcHBlbmQoc3Rv
cCk7Ci0KKyAgICBtX3N0b3BzLmFwcGVuZChXVEZNb3ZlKHN0b3ApKTsKICAgICBtX3N0b3BzU29y
dGVkID0gZmFsc2U7Ci0KLSAgICBwbGF0Zm9ybURlc3Ryb3koKTsKLSAgICBpbnZhbGlkYXRlSGFz
aCgpOworICAgIG1fY2FjaGVkSGFzaCA9IDA7CisgICAgc3RvcHNDaGFuZ2VkKCk7CiB9CiAKIHZv
aWQgR3JhZGllbnQ6OnNldFNvcnRlZENvbG9yU3RvcHMoQ29sb3JTdG9wVmVjdG9yJiYgc3RvcHMp
CiB7CiAgICAgbV9zdG9wcyA9IFdURk1vdmUoc3RvcHMpOwotCiAgICAgbV9zdG9wc1NvcnRlZCA9
IHRydWU7Ci0KLSAgICBwbGF0Zm9ybURlc3Ryb3koKTsKLSAgICBpbnZhbGlkYXRlSGFzaCgpOwor
ICAgIG1fY2FjaGVkSGFzaCA9IDA7CisgICAgc3RvcHNDaGFuZ2VkKCk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgYm9vbCBjb21wYXJlU3RvcHMoY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCYgYSwgY29u
c3QgR3JhZGllbnQ6OkNvbG9yU3RvcCYgYikKLXsKLSAgICByZXR1cm4gYS5vZmZzZXQgPCBiLm9m
ZnNldDsKLX0KLQotdm9pZCBHcmFkaWVudDo6c29ydFN0b3BzSWZOZWNlc3NhcnkoKQordm9pZCBH
cmFkaWVudDo6c29ydFN0b3BzKCkgY29uc3QKIHsKICAgICBpZiAobV9zdG9wc1NvcnRlZCkKICAg
ICAgICAgcmV0dXJuOwotCiAgICAgbV9zdG9wc1NvcnRlZCA9IHRydWU7Ci0KLSAgICBpZiAoIW1f
c3RvcHMuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGQ6OnN0YWJsZV9zb3J0KG1f
c3RvcHMuYmVnaW4oKSwgbV9zdG9wcy5lbmQoKSwgY29tcGFyZVN0b3BzKTsKLSAgICBpbnZhbGlk
YXRlSGFzaCgpOwotfQotCi1ib29sIEdyYWRpZW50OjpoYXNBbHBoYSgpIGNvbnN0Ci17Ci0gICAg
Zm9yIChjb25zdCBhdXRvJiBzdG9wIDogbV9zdG9wcykgewotICAgICAgICBpZiAoIXN0b3AuY29s
b3IuaXNPcGFxdWUoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJl
dHVybiBmYWxzZTsKKyAgICBzdGQ6OnN0YWJsZV9zb3J0KG1fc3RvcHMuYmVnaW4oKSwgbV9zdG9w
cy5lbmQoKSwgW10gKGF1dG8mIGEsIGF1dG8mIGIpIHsKKyAgICAgICAgcmV0dXJuIGEub2Zmc2V0
IDwgYi5vZmZzZXQ7CisgICAgfSk7CiB9CiAKIHZvaWQgR3JhZGllbnQ6OnNldFNwcmVhZE1ldGhv
ZChHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2QpCiB7Ci0gICAgLy8gRklYTUU6IFNo
b3VsZCBpdCBiZWNvbWUgbmVjZXNzYXJ5LCBhbGxvdyBjYWxscyB0byB0aGlzIG1ldGhvZCBhZnRl
ciBtX2dyYWRpZW50IGhhcyBiZWVuIHNldC4KLSAgICBBU1NFUlQobV9ncmFkaWVudCA9PSAwKTsK
LQogICAgIGlmIChtX3NwcmVhZE1ldGhvZCA9PSBzcHJlYWRNZXRob2QpCiAgICAgICAgIHJldHVy
bjsKLQogICAgIG1fc3ByZWFkTWV0aG9kID0gc3ByZWFkTWV0aG9kOwotCi0gICAgaW52YWxpZGF0
ZUhhc2goKTsKKyAgICBtX2NhY2hlZEhhc2ggPSAwOwogfQogCiB2b2lkIEdyYWRpZW50OjpzZXRH
cmFkaWVudFNwYWNlVHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRTcGFj
ZVRyYW5zZm9ybWF0aW9uKQogewogICAgIGlmIChtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlv
biA9PSBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24pCiAgICAgICAgIHJldHVybjsKLQogICAg
IG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uID0gZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0
aW9uOworICAgIG1fY2FjaGVkSGFzaCA9IDA7Cit9CiAKLSAgICBpbnZhbGlkYXRlSGFzaCgpOwor
c3RhdGljIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBDb2xvciYgY29sb3IpCit7Cisg
ICAgLy8gRklYTUU6IFdlIGRvbid0IHdhbnQgdG8gaGFzaCBhIGhhc2g7IGRvIGJldHRlci4KKyAg
ICBhZGQoaGFzaGVyLCBjb2xvci5oYXNoKCkpOwogfQogCi11bnNpZ25lZCBHcmFkaWVudDo6aGFz
aCgpIGNvbnN0CitzdGF0aWMgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50KQogewotICAgIGlmIChtX2NhY2hlZEhhc2gpCi0gICAgICAgIHJldHVybiBtX2Nh
Y2hlZEhhc2g7CisgICAgYWRkKGhhc2hlciwgcG9pbnQueCgpLCBwb2ludC55KCkpOworfQogCi0g
ICAgc3RydWN0IHsKLSAgICAgICAgVHlwZSB0eXBlOwotICAgICAgICBGbG9hdFBvaW50IHBvaW50
MDsKLSAgICAgICAgRmxvYXRQb2ludCBwb2ludDE7Ci0gICAgICAgIGZsb2F0IHN0YXJ0UmFkaXVz
OwotICAgICAgICBmbG9hdCBlbmRSYWRpdXM7Ci0gICAgICAgIGZsb2F0IGFzcGVjdFJhdGlvOwot
ICAgICAgICBmbG9hdCBhbmdsZVJhZGlhbnM7Ci0gICAgICAgIEdyYWRpZW50U3ByZWFkTWV0aG9k
IHNwcmVhZE1ldGhvZDsKLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGdyYWRpZW50U3BhY2VUcmFu
c2Zvcm1hdGlvbjsKLSAgICB9IHBhcmFtZXRlcnM7CitzdGF0aWMgdm9pZCBhZGQoSGFzaGVyJiBo
YXNoZXIsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQoreworICAgIGFkZChoYXNo
ZXIsIHRyYW5zZm9ybS5hKCksIHRyYW5zZm9ybS5iKCksIHRyYW5zZm9ybS5jKCksIHRyYW5zZm9y
bS5kKCksIHRyYW5zZm9ybS5lKCksIHRyYW5zZm9ybS5mKCkpOworfQogCi0gICAgLy8gU3RyaW5n
SGFzaGVyIHJlcXVpcmVzIHRoYXQgdGhlIG1lbW9yeSBpdCBoYXNoZXMgYmUgYSBtdWx0aXBsZSBv
ZiB0d28gaW4gc2l6ZS4KLSAgICBDT01QSUxFX0FTU0VSVCghKHNpemVvZihwYXJhbWV0ZXJzKSAl
IDIpLCBHcmFkaWVudF9wYXJhbWV0ZXJzX3NpemVfc2hvdWxkX2JlX211bHRpcGxlX29mX3R3byk7
Ci0gICAgQ09NUElMRV9BU1NFUlQoIShzaXplb2YoQ29sb3JTdG9wKSAlIDIpLCBDb2xvcl9zdG9w
X3NpemVfc2hvdWxkX2JlX211bHRpcGxlX29mX3R3byk7Ci0gICAgCi0gICAgLy8gRW5zdXJlIHRo
YXQgYW55IHBhZGRpbmcgaW4gdGhlIHN0cnVjdCBpcyB6ZXJvLWZpbGxlZCwgc28gaXQgd2lsbCBu
b3QgYWZmZWN0IHRoZSBoYXNoIHZhbHVlLgotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFza2luZyBm
b3IgdHJvdWJsZSwgYmVjYXVzZSBpdCBpcyBhIG5vbnRyaXZpYWwgdHlwZS4KLSAgICBtZW1zZXQo
c3RhdGljX2Nhc3Q8dm9pZCo+KCZwYXJhbWV0ZXJzKSwgMCwgc2l6ZW9mKHBhcmFtZXRlcnMpKTsK
LSAgICAKLSAgICBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKLSAgICAgICAgWyZwYXJhbWV0ZXJzXSAo
Y29uc3QgTGluZWFyRGF0YSYgZGF0YSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5wb2ludDAg
PSBkYXRhLnBvaW50MDsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMucG9pbnQxID0gZGF0YS5wb2lu
dDE7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLnN0YXJ0UmFkaXVzID0gMDsKLSAgICAgICAgICAg
IHBhcmFtZXRlcnMuZW5kUmFkaXVzID0gMDsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuYXNwZWN0
UmF0aW8gPSAwOwotICAgICAgICAgICAgcGFyYW1ldGVycy5hbmdsZVJhZGlhbnMgPSAwOwotICAg
ICAgICAgICAgcGFyYW1ldGVycy50eXBlID0gVHlwZTo6TGluZWFyOwotICAgICAgICB9LAotICAg
ICAgICBbJnBhcmFtZXRlcnNdIChjb25zdCBSYWRpYWxEYXRhJiBkYXRhKSB7Ci0gICAgICAgICAg
ICBwYXJhbWV0ZXJzLnBvaW50MCA9IGRhdGEucG9pbnQwOwotICAgICAgICAgICAgcGFyYW1ldGVy
cy5wb2ludDEgPSBkYXRhLnBvaW50MTsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuc3RhcnRSYWRp
dXMgPSBkYXRhLnN0YXJ0UmFkaXVzOwotICAgICAgICAgICAgcGFyYW1ldGVycy5lbmRSYWRpdXMg
PSBkYXRhLmVuZFJhZGl1czsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuYXNwZWN0UmF0aW8gPSBk
YXRhLmFzcGVjdFJhdGlvOwotICAgICAgICAgICAgcGFyYW1ldGVycy5hbmdsZVJhZGlhbnMgPSAw
OwotICAgICAgICAgICAgcGFyYW1ldGVycy50eXBlID0gVHlwZTo6UmFkaWFsOwotICAgICAgICB9
LAotICAgICAgICBbJnBhcmFtZXRlcnNdIChjb25zdCBDb25pY0RhdGEmIGRhdGEpIHsKLSAgICAg
ICAgICAgIHBhcmFtZXRlcnMucG9pbnQwID0gZGF0YS5wb2ludDA7Ci0gICAgICAgICAgICBwYXJh
bWV0ZXJzLnBvaW50MSA9IHswLCAwfTsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuc3RhcnRSYWRp
dXMgPSAwOwotICAgICAgICAgICAgcGFyYW1ldGVycy5lbmRSYWRpdXMgPSAwOwotICAgICAgICAg
ICAgcGFyYW1ldGVycy5hc3BlY3RSYXRpbyA9IDA7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmFu
Z2xlUmFkaWFucyA9IGRhdGEuYW5nbGVSYWRpYW5zOwotICAgICAgICAgICAgcGFyYW1ldGVycy50
eXBlID0gVHlwZTo6Q29uaWM7Ci0gICAgICAgIH0KLSAgICApOworc3RhdGljIHZvaWQgYWRkKEhh
c2hlciYgaGFzaGVyLCBjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9wJiBzdG9wKQoreworICAgIGFk
ZChoYXNoZXIsIHN0b3Aub2Zmc2V0LCBzdG9wLmNvbG9yKTsKK30KIAotICAgIHBhcmFtZXRlcnMu
c3ByZWFkTWV0aG9kID0gbV9zcHJlYWRNZXRob2Q7Ci0gICAgcGFyYW1ldGVycy5ncmFkaWVudFNw
YWNlVHJhbnNmb3JtYXRpb24gPSBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKK3N0YXRp
YyB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgR3JhZGllbnQ6OkxpbmVhckRhdGEmIGRh
dGEpCit7CisgICAgYWRkKGhhc2hlciwgZGF0YS5wb2ludDAsIGRhdGEucG9pbnQxKTsKK30KIAot
ICAgIHVuc2lnbmVkIHBhcmFtZXRlcnNIYXNoID0gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KCZw
YXJhbWV0ZXJzLCBzaXplb2YocGFyYW1ldGVycykpOwotICAgIHVuc2lnbmVkIHN0b3BIYXNoID0g
U3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KG1fc3RvcHMuZGF0YSgpLCBtX3N0b3BzLnNpemUoKSAq
IHNpemVvZihDb2xvclN0b3ApKTsKK3N0YXRpYyB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29u
c3QgR3JhZGllbnQ6OlJhZGlhbERhdGEmIGRhdGEpCit7CisgICAgYWRkKGhhc2hlciwgZGF0YS5w
b2ludDAsIGRhdGEucG9pbnQxLCBkYXRhLnN0YXJ0UmFkaXVzLCBkYXRhLmVuZFJhZGl1cywgZGF0
YS5hc3BlY3RSYXRpbyk7Cit9CiAKLSAgICBtX2NhY2hlZEhhc2ggPSBwYWlySW50SGFzaChwYXJh
bWV0ZXJzSGFzaCwgc3RvcEhhc2gpOworc3RhdGljIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBj
b25zdCBHcmFkaWVudDo6Q29uaWNEYXRhJiBkYXRhKQoreworICAgIGFkZChoYXNoZXIsIGRhdGEu
cG9pbnQwLCBkYXRhLmFuZ2xlUmFkaWFucyk7Cit9CiAKK3Vuc2lnbmVkIEdyYWRpZW50OjpoYXNo
KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fY2FjaGVkSGFzaCkgeworICAgICAgICBzb3J0U3RvcHMo
KTsKKyAgICAgICAgbV9jYWNoZWRIYXNoID0gY29tcHV0ZUhhc2gobV9kYXRhLCBtX3NwcmVhZE1l
dGhvZCwgbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24sIG1fc3RvcHMpOworICAgIH0KICAg
ICByZXR1cm4gbV9jYWNoZWRIYXNoOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhZGllbnQuaAppbmRleCA2ZWI1ZDA3OWFjN2U0ZmUzYTJjZjUxNjdkMjg1ZTAzNWIw
Y2YxMDAyLi5jY2Q1M2ExYmU4OTJjOWQ2NjA2MWFjZmU0NTc1MDc4NmQ3ZTYxN2EzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgKQEAgLTMxLDQ4ICszMSw0
NCBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgorI2VuZGlmCisKKyNpZiBVU0UoRElSRUNUMkQpCisjaW5jbHVkZSAiQ09NUHRyLmgiCisjZW5k
aWYKKwogI2lmIFVTRShDRykKIHR5cGVkZWYgc3RydWN0IENHQ29udGV4dCogQ0dDb250ZXh0UmVm
OwogdHlwZWRlZiBzdHJ1Y3QgQ0dHcmFkaWVudCogQ0dHcmFkaWVudFJlZjsKLXR5cGVkZWYgQ0dH
cmFkaWVudFJlZiBQbGF0Zm9ybUdyYWRpZW50OwotI2VsaWYgVVNFKERJUkVDVDJEKQorI2VuZGlm
CisKKyNpZiBVU0UoRElSRUNUMkQpCiBpbnRlcmZhY2UgSUQyRDFCcnVzaDsKIGludGVyZmFjZSBJ
RDJEMVJlbmRlclRhcmdldDsKLXR5cGVkZWYgSUQyRDFCcnVzaCogUGxhdGZvcm1HcmFkaWVudDsK
LSNlbGlmIFVTRShDQUlSTykKKyNlbmRpZgorCisjaWYgVVNFKENBSVJPKQogdHlwZWRlZiBzdHJ1
Y3QgX2NhaXJvX3BhdHRlcm4gY2Fpcm9fcGF0dGVybl90OwotdHlwZWRlZiBjYWlyb19wYXR0ZXJu
X3QqIFBsYXRmb3JtR3JhZGllbnQ7Ci0jZWxzZQotdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYWRp
ZW50OwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ29sb3I7CiBjbGFz
cyBGbG9hdFJlY3Q7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiAKIGNsYXNzIEdyYWRpZW50IDog
cHVibGljIFJlZkNvdW50ZWQ8R3JhZGllbnQ+IHsKIHB1YmxpYzoKLSAgICAvLyBGSVhNRTogRXh0
ZW5kZWRDb2xvciAtIEEgY29sb3Igc3RvcCBuZWVkcyBhIG5vdGlvbiBvZiBjb2xvciBzcGFjZS4K
ICAgICBzdHJ1Y3QgQ29sb3JTdG9wIHsKICAgICAgICAgZmxvYXQgb2Zmc2V0IHsgMCB9OwogICAg
ICAgICBDb2xvciBjb2xvcjsKIAotICAgICAgICBDb2xvclN0b3AoKSA9IGRlZmF1bHQ7Ci0gICAg
ICAgIENvbG9yU3RvcChmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICAgICAg
ICAgIDogb2Zmc2V0KG9mZnNldCkKLSAgICAgICAgICAgICwgY29sb3IoY29sb3IpCi0gICAgICAg
IHsKLSAgICAgICAgfQotCi0gICAgICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKLSAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPENvbG9yU3RvcD4gZGVjb2RlKERlY29kZXImKTsKKyAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29sb3JTdG9wPiBk
ZWNvZGUoRGVjb2RlciYpOwogICAgIH07CiAKICAgICB1c2luZyBDb2xvclN0b3BWZWN0b3IgPSBW
ZWN0b3I8Q29sb3JTdG9wLCAyPjsKQEAgLTgxLDggKzc3LDggQEAgcHVibGljOgogICAgICAgICBG
bG9hdFBvaW50IHBvaW50MDsKICAgICAgICAgRmxvYXRQb2ludCBwb2ludDE7CiAKLSAgICAgICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAg
ICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8TGluZWFyRGF0YT4g
ZGVjb2RlKERlY29kZXImKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNv
ZGVyPiBzdGF0aWMgT3B0aW9uYWw8TGluZWFyRGF0YT4gZGVjb2RlKERlY29kZXImKTsKICAgICB9
OwogCiAgICAgc3RydWN0IFJhZGlhbERhdGEgewpAQCAtOTIsMzcgKzg4LDMxIEBAIHB1YmxpYzoK
ICAgICAgICAgZmxvYXQgZW5kUmFkaXVzOwogICAgICAgICBmbG9hdCBhc3BlY3RSYXRpbzsgLy8g
Rm9yIGVsbGlwdGljYWwgZ3JhZGllbnQsIHdpZHRoIC8gaGVpZ2h0LgogCi0gICAgICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICAgICAg
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJhZGlhbERhdGE+IGRlY29k
ZShEZWNvZGVyJik7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPFJhZGlhbERhdGE+IGRlY29kZShEZWNvZGVyJik7CiAgICAgfTsKLSAg
ICAKKwogICAgIHN0cnVjdCBDb25pY0RhdGEgewogICAgICAgICBGbG9hdFBvaW50IHBvaW50MDsK
ICAgICAgICAgZmxvYXQgYW5nbGVSYWRpYW5zOwogCi0gICAgICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICAgICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENvbmljRGF0YT4gZGVjb2RlKERlY29kZXImKTsK
KyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgT3B0aW9u
YWw8Q29uaWNEYXRhPiBkZWNvZGUoRGVjb2RlciYpOwogICAgIH07CiAKICAgICB1c2luZyBEYXRh
ID0gVmFyaWFudDxMaW5lYXJEYXRhLCBSYWRpYWxEYXRhLCBDb25pY0RhdGE+OwogCi0gICAgZW51
bSBjbGFzcyBUeXBlIHsgTGluZWFyLCBSYWRpYWwsIENvbmljIH07Ci0KICAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgUmVmPEdyYWRpZW50PiBjcmVhdGUoTGluZWFyRGF0YSYmKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgUmVmPEdyYWRpZW50PiBjcmVhdGUoUmFkaWFsRGF0YSYmKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEdyYWRpZW50PiBjcmVhdGUoQ29uaWNEYXRhJiYp
OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8R3JhZGllbnQ+IGNyZWF0ZShEYXRhJiYp
OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgfkdyYWRpZW50KCk7CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCBUeXBlIHR5cGUoKSBjb25zdDsKLQotICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdDsKICAgICBi
b29sIGlzWmVyb1NpemUoKSBjb25zdDsKIAogICAgIGNvbnN0IERhdGEmIGRhdGEoKSBjb25zdCB7
IHJldHVybiBtX2RhdGE7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkQ29sb3JTdG9w
KGNvbnN0IENvbG9yU3RvcCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkQ29sb3JTdG9w
KGZsb2F0LCBjb25zdCBDb2xvciYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkQ29sb3JT
dG9wKENvbG9yU3RvcCYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNvcnRlZENvbG9y
U3RvcHMoQ29sb3JTdG9wVmVjdG9yJiYpOwogCiAgICAgY29uc3QgQ29sb3JTdG9wVmVjdG9yJiBz
dG9wcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcHM7IH0KQEAgLTEzMCw3ICsxMjAsNiBAQCBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTcHJlYWRNZXRob2QoR3JhZGllbnRTcHJl
YWRNZXRob2QpOwogICAgIEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3ByZWFkTWV0aG9kOyB9CiAKLSAgICAvLyBDRyBuZWVkcyB0byB0cmFuc2Zv
cm0gdGhlIGdyYWRpZW50IGF0IGRyYXcgdGltZS4KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNw
YWNlVHJhbnNmb3JtYXRpb24pOwogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRT
cGFjZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0
aW9uOyB9CiAKQEAgLTEzOCwzMyArMTI3LDMzIEBAIHB1YmxpYzoKICAgICB2b2lkIGFkanVzdFBh
cmFtZXRlcnNGb3JUaWxlZERyYXdpbmcoRmxvYXRTaXplJiwgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nKTsKIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKLSAgICB2b2lk
IGludmFsaWRhdGVIYXNoKCkgeyBtX2NhY2hlZEhhc2ggPSAwOyB9CisKKyNpZiBVU0UoQ0FJUk8p
CisgICAgUmVmUHRyPGNhaXJvX3BhdHRlcm5fdD4gY3JlYXRlUGF0dGVybihmbG9hdCBnbG9iYWxB
bHBoYSk7CisjZW5kaWYKIAogI2lmIFVTRShDRykKICAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29u
dGV4dCYpOwogICAgIHZvaWQgcGFpbnQoQ0dDb250ZXh0UmVmKTsKLSNlbGlmIFVTRShESVJFQ1Qy
RCkKLSAgICBQbGF0Zm9ybUdyYWRpZW50IGNyZWF0ZVBsYXRmb3JtR3JhZGllbnRJZk5lY2Vzc2Fy
eShJRDJEMVJlbmRlclRhcmdldCopOwotI2VsaWYgVVNFKENBSVJPKQotICAgIFBsYXRmb3JtR3Jh
ZGllbnQgY3JlYXRlUGxhdGZvcm1HcmFkaWVudChmbG9hdCBnbG9iYWxBbHBoYSk7CiAjZW5kaWYK
IAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEdyYWRp
ZW50Pj4gZGVjb2RlKERlY29kZXImKTsKKyNpZiBVU0UoRElSRUNUMkQpCisgICAgSUQyRDFCcnVz
aCogY3JlYXRlQnJ1c2goSUQyRDFSZW5kZXJUYXJnZXQqKTsKKyNlbmRpZgorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8R3JhZGllbnQ+PiBk
ZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgotICAgIEdyYWRpZW50KExpbmVhckRhdGEmJik7
Ci0gICAgR3JhZGllbnQoUmFkaWFsRGF0YSYmKTsKLSAgICBHcmFkaWVudChDb25pY0RhdGEmJik7
Ci0KLSAgICBQbGF0Zm9ybUdyYWRpZW50IHBsYXRmb3JtR3JhZGllbnQoKTsKLSAgICB2b2lkIHBs
YXRmb3JtSW5pdCgpIHsgbV9ncmFkaWVudCA9IG51bGxwdHI7IH0KLSAgICB2b2lkIHBsYXRmb3Jt
RGVzdHJveSgpOworICAgIGV4cGxpY2l0IEdyYWRpZW50KExpbmVhckRhdGEmJik7CisgICAgZXhw
bGljaXQgR3JhZGllbnQoUmFkaWFsRGF0YSYmKTsKKyAgICBleHBsaWNpdCBHcmFkaWVudChEYXRh
JiYpOwogCi0gICAgdm9pZCBzb3J0U3RvcHNJZk5lY2Vzc2FyeSgpOworICAgIHZvaWQgc29ydFN0
b3BzKCkgY29uc3Q7CisgICAgdm9pZCBzdG9wc0NoYW5nZWQoKTsKIAotI2lmIFVTRShESVJFQ1Qy
RCkKLSAgICB2b2lkIGdlbmVyYXRlR3JhZGllbnQoSUQyRDFSZW5kZXJUYXJnZXQqKTsKKyNpZiBV
U0UoQ0cpCisgICAgdm9pZCBjcmVhdGVDR0dyYWRpZW50KCk7CiAjZW5kaWYKIAogICAgIERhdGEg
bV9kYXRhOwpAQCAtMTc2LDE4ICsxNjUsMjIgQEAgcHJpdmF0ZToKIAogICAgIG11dGFibGUgdW5z
aWduZWQgbV9jYWNoZWRIYXNoIHsgMCB9OwogCi0gICAgUGxhdGZvcm1HcmFkaWVudCBtX2dyYWRp
ZW50OworI2lmIFVTRShDRykKKyAgICBSZXRhaW5QdHI8Q0dHcmFkaWVudFJlZj4gbV9ncmFkaWVu
dDsKKyNlbmRpZgorCisjaWYgVVNFKERJUkVDVDJEKQorICAgIENPTVB0cjxJRDJEMUJydXNoPiBt
X2JydXNoOworI2VuZGlmCiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBHcmFk
aWVudDo6Q29sb3JTdG9wOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3RlbXBsYXRl
PHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgR3JhZGllbnQ6OkNvbG9yU3RvcDo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBvZmZzZXQ7CiAgICAgZW5jb2Rl
ciA8PCBjb2xvcjsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPEdyYWRp
ZW50OjpDb2xvclN0b3A+IEdyYWRpZW50OjpDb2xvclN0b3A6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQordGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gT3B0aW9uYWw8R3JhZGllbnQ6OkNvbG9y
U3RvcD4gR3JhZGllbnQ6OkNvbG9yU3RvcDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAg
ICAgT3B0aW9uYWw8ZmxvYXQ+IG9mZnNldDsKICAgICBkZWNvZGVyID4+IG9mZnNldDsKQEAgLTIw
MiwxNSArMTk1LDEzIEBAIE9wdGlvbmFsPEdyYWRpZW50OjpDb2xvclN0b3A+IEdyYWRpZW50OjpD
b2xvclN0b3A6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHJldHVybiB7eyAqb2Zmc2V0
LCAqY29sb3IgfX07CiB9CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEdyYWRpZW50
OjpMaW5lYXJEYXRhOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3RlbXBsYXRlPHR5
cGVuYW1lIEVuY29kZXI+IHZvaWQgR3JhZGllbnQ6OkxpbmVhckRhdGE6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgcG9pbnQwOwogICAgIGVuY29kZXIg
PDwgcG9pbnQxOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8R3JhZGll
bnQ6OkxpbmVhckRhdGE+IEdyYWRpZW50OjpMaW5lYXJEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKK3RlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IE9wdGlvbmFsPEdyYWRpZW50OjpMaW5l
YXJEYXRhPiBHcmFkaWVudDo6TGluZWFyRGF0YTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7
CiAgICAgT3B0aW9uYWw8RmxvYXRQb2ludD4gcG9pbnQwOwogICAgIGRlY29kZXIgPj4gcG9pbnQw
OwpAQCAtMjI1LDggKzIxNiw3IEBAIE9wdGlvbmFsPEdyYWRpZW50OjpMaW5lYXJEYXRhPiBHcmFk
aWVudDo6TGluZWFyRGF0YTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgcmV0dXJuIHt7
ICpwb2ludDAsICpwb2ludDEgfX07CiB9CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lk
IEdyYWRpZW50OjpSYWRpYWxEYXRhOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3Rl
bXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgR3JhZGllbnQ6OlJhZGlhbERhdGE6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgcG9pbnQwOwogICAg
IGVuY29kZXIgPDwgcG9pbnQxOwpAQCAtMjM1LDggKzIyNSw3IEBAIHZvaWQgR3JhZGllbnQ6OlJh
ZGlhbERhdGE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwg
YXNwZWN0UmF0aW87CiB9CiAKLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxHcmFk
aWVudDo6UmFkaWFsRGF0YT4gR3JhZGllbnQ6OlJhZGlhbERhdGE6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQordGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gT3B0aW9uYWw8R3JhZGllbnQ6OlJh
ZGlhbERhdGE+IEdyYWRpZW50OjpSYWRpYWxEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
IHsKICAgICBPcHRpb25hbDxGbG9hdFBvaW50PiBwb2ludDA7CiAgICAgZGVjb2RlciA+PiBwb2lu
dDA7CkBAIC0yNjYsMTUgKzI1NSwxMyBAQCBPcHRpb25hbDxHcmFkaWVudDo6UmFkaWFsRGF0YT4g
R3JhZGllbnQ6OlJhZGlhbERhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHJldHVy
biB7eyAqcG9pbnQwLCAqcG9pbnQxLCAqc3RhcnRSYWRpdXMsICplbmRSYWRpdXMsICphc3BlY3RS
YXRpbyB9fTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgR3JhZGllbnQ6OkNv
bmljRGF0YTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBFbmNvZGVyPiB2b2lkIEdyYWRpZW50OjpDb25pY0RhdGE6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgcG9pbnQwOwogICAgIGVuY29kZXIgPDwgYW5n
bGVSYWRpYW5zOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8R3JhZGll
bnQ6OkNvbmljRGF0YT4gR3JhZGllbnQ6OkNvbmljRGF0YTo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBPcHRpb25hbDxHcmFkaWVudDo6Q29uaWNE
YXRhPiBHcmFkaWVudDo6Q29uaWNEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAg
ICBPcHRpb25hbDxGbG9hdFBvaW50PiBwb2ludDA7CiAgICAgZGVjb2RlciA+PiBwb2ludDA7CkBA
IC0yODksMTE1ICsyNzYsNTAgQEAgT3B0aW9uYWw8R3JhZGllbnQ6OkNvbmljRGF0YT4gR3JhZGll
bnQ6OkNvbmljRGF0YTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgcmV0dXJuIHt7ICpw
b2ludDAsICphbmdsZVJhZGlhbnMgfX07CiB9CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12
b2lkIEdyYWRpZW50OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3RlbXBsYXRlPHR5
cGVuYW1lIEVuY29kZXI+IHZvaWQgR3JhZGllbnQ6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAogewotICAgIGF1dG8gdHlwZSA9IHRoaXMtPnR5cGUoKTsKLSAgICBlbmNvZGVyIDw8IHR5
cGU7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBUeXBlOjpMaW5lYXI6Ci0gICAgICAg
IGVuY29kZXIgPDwgV1RGOjpnZXQ8R3JhZGllbnQ6OkxpbmVhckRhdGE+KG1fZGF0YSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgVHlwZTo6UmFkaWFsOgotICAgICAgICBlbmNvZGVyIDw8IFdU
Rjo6Z2V0PEdyYWRpZW50OjpSYWRpYWxEYXRhPihtX2RhdGEpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFR5cGU6OkNvbmljOgotICAgICAgICBlbmNvZGVyIDw8IFdURjo6Z2V0PEdyYWRpZW50
OjpDb25pY0RhdGE+KG1fZGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBlbmNvZGVy
IDw8IG1fZGF0YTsKICAgICBlbmNvZGVyIDw8IG1fc3RvcHM7CiAgICAgZW5jb2RlciA8PCBtX3N0
b3BzU29ydGVkOwogICAgIGVuY29kZXIgPDwgbV9zcHJlYWRNZXRob2Q7CiAgICAgZW5jb2RlciA8
PCBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4KLU9wdGlvbmFsPFJlZjxHcmFkaWVudD4+IEdyYWRpZW50OjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKK3RlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IE9wdGlvbmFsPFJlZjxHcmFkaWVu
dD4+IEdyYWRpZW50OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICBPcHRpb25hbDxH
cmFkaWVudDo6VHlwZT4gdHlwZTsKLSAgICBkZWNvZGVyID4+IHR5cGU7Ci0gICAgaWYgKCF0eXBl
KQorICAgIE9wdGlvbmFsPERhdGE+IGRhdGE7CisgICAgZGVjb2RlciA+PiBkYXRhOworICAgIGlm
ICghZGF0YSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIFJlZlB0cjxHcmFk
aWVudD4gZ3JhZGllbnQ7Ci0gICAgc3dpdGNoICgqdHlwZSkgewotICAgIGNhc2UgVHlwZTo6TGlu
ZWFyOiB7Ci0gICAgICAgIE9wdGlvbmFsPExpbmVhckRhdGE+IGxpbmVhckRhdGE7Ci0gICAgICAg
IGRlY29kZXIgPj4gbGluZWFyRGF0YTsKLSAgICAgICAgaWYgKCFsaW5lYXJEYXRhKQotICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgICAgICBncmFkaWVudCA9IEdyYWRpZW50
OjpjcmVhdGUoV1RGTW92ZSgqbGluZWFyRGF0YSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgY2FzZSBUeXBlOjpSYWRpYWw6IHsKLSAgICAgICAgT3B0aW9uYWw8UmFkaWFsRGF0YT4gcmFk
aWFsRGF0YTsKLSAgICAgICAgZGVjb2RlciA+PiByYWRpYWxEYXRhOwotICAgICAgICBpZiAoIXJh
ZGlhbERhdGEpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgICAgIGdy
YWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShXVEZNb3ZlKCpyYWRpYWxEYXRhKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFR5cGU6OkNvbmljOiB7Ci0gICAgICAgIE9wdGlvbmFs
PENvbmljRGF0YT4gY29uaWNEYXRhOwotICAgICAgICBkZWNvZGVyID4+IGNvbmljRGF0YTsKLSAg
ICAgICAgaWYgKCFjb25pY0RhdGEpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
Ci0gICAgICAgIGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShXVEZNb3ZlKCpjb25pY0RhdGEp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIH0KLQotICAgIGlmICghZ3JhZGllbnQpIHsK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci0gICAgfQorICAgIGF1dG8gZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKFdURk1vdmUo
KmRhdGEpKTsKIAogICAgIE9wdGlvbmFsPENvbG9yU3RvcFZlY3Rvcj4gc3RvcHM7CiAgICAgZGVj
b2RlciA+PiBzdG9wczsKICAgICBpZiAoIXN0b3BzKQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotCiAgICAgT3B0aW9uYWw8Ym9vbD4gc3RvcHNTb3J0ZWQ7CiAgICAgZGVjb2RlciA+PiBz
dG9wc1NvcnRlZDsKICAgICBpZiAoIXN0b3BzU29ydGVkLmhhc1ZhbHVlKCkpCiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBpZiAoc3RvcHNTb3J0ZWQudmFsdWUoKSkKKyAgICBp
ZiAoKnN0b3BzU29ydGVkKQogICAgICAgICBncmFkaWVudC0+c2V0U29ydGVkQ29sb3JTdG9wcyhX
VEZNb3ZlKCpzdG9wcykpOwogICAgIGVsc2UgewogICAgICAgICBmb3IgKGF1dG8mIHN0b3AgOiAq
c3RvcHMpCi0gICAgICAgICAgICBncmFkaWVudC0+YWRkQ29sb3JTdG9wKHN0b3ApOworICAgICAg
ICAgICAgZ3JhZGllbnQtPmFkZENvbG9yU3RvcChXVEZNb3ZlKHN0b3ApKTsKICAgICB9CiAKICAg
ICBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2Q7CiAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShzcHJlYWRNZXRob2QpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCiAgICAg
Z3JhZGllbnQtPnNldFNwcmVhZE1ldGhvZChzcHJlYWRNZXRob2QpOwogCiAgICAgT3B0aW9uYWw8
QWZmaW5lVHJhbnNmb3JtPiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247CiAgICAgZGVjb2Rl
ciA+PiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247CiAgICAgaWYgKCFncmFkaWVudFNwYWNl
VHJhbnNmb3JtYXRpb24pCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KICAgICBncmFk
aWVudC0+c2V0R3JhZGllbnRTcGFjZVRyYW5zZm9ybShXVEZNb3ZlKCpncmFkaWVudFNwYWNlVHJh
bnNmb3JtYXRpb24pKTsKLSAgICByZXR1cm4gZ3JhZGllbnQucmVsZWFzZU5vbk51bGwoKTsKKwor
ICAgIHJldHVybiBXVEZNb3ZlKGdyYWRpZW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJD
b3JlOjpHcmFkaWVudDo6VHlwZT4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0g
ICAgV2ViQ29yZTo6R3JhZGllbnQ6OlR5cGUsCi0gICAgV2ViQ29yZTo6R3JhZGllbnQ6OlR5cGU6
OkxpbmVhciwKLSAgICBXZWJDb3JlOjpHcmFkaWVudDo6VHlwZTo6UmFkaWFsLAotICAgIFdlYkNv
cmU6OkdyYWRpZW50OjpUeXBlOjpDb25pYwotICAgID47Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
VEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuY3BwCmluZGV4IDM2Mzc1ZDNiN2MxMjFjZTg2NTk3YWZmN2RlN2NiMTJhNDVkODU2ODku
LmU0ODBkMDg1NGE4Mjg5NWUyMjc2MzUwYWE4ODYzMWYyMzVhMzZhZDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAt
NzUsNiArNzUsMjYgQEAgcHJpdmF0ZToKICAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6ZmxhZykgJiYgKG1fc3RhdGUucHJvcGVydHkgIT0gc3RhdGUu
cHJvcGVydHkpKSBcCiAgICAgICAgIGNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRTdGF0
ZTo6ZmxhZyk7CiAKK0dyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSgp
CisgICAgOiBzaG91bGRBbnRpYWxpYXModHJ1ZSkKKyAgICAsIHNob3VsZFNtb290aEZvbnRzKHRy
dWUpCisgICAgLCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHModHJ1ZSkKKyAgICAsIHNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zKGZhbHNlKQorI2lmIFVTRShDRykKKyAgICAvLyBDb3JlIEdyYXBo
aWNzIGluY29ycmVjdGx5IHJlbmRlcnMgc2hhZG93cyB3aXRoIHJhZGl1cyA+IDhweCAoPHJkYXI6
Ly9wcm9ibGVtLzgxMDM0NDI+KSwKKyAgICAvLyBidXQgd2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGlz
IGJ1Z2d5IGJlaGF2aW9yIGZvciBjYW52YXMgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KKyAgICAs
IHNoYWRvd3NVc2VMZWdhY3lSYWRpdXMoZmFsc2UpCisjZW5kaWYKKyAgICAsIGRyYXdMdW1pbmFu
Y2VNYXNrKGZhbHNlKQoreworfQorCitHcmFwaGljc0NvbnRleHRTdGF0ZTo6fkdyYXBoaWNzQ29u
dGV4dFN0YXRlKCkgPSBkZWZhdWx0OworR3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJikgPSBkZWZhdWx0OworR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKEdyYXBoaWNzQ29udGV4dFN0YXRl
JiYpID0gZGVmYXVsdDsKK0dyYXBoaWNzQ29udGV4dFN0YXRlJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6b3BlcmF0b3I9KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJikgPSBkZWZhdWx0OworR3Jh
cGhpY3NDb250ZXh0U3RhdGUmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpvcGVyYXRvcj0oR3JhcGhp
Y3NDb250ZXh0U3RhdGUmJikgPSBkZWZhdWx0OworCiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Rh
dGVDaGFuZ2VGbGFncyBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6Y2hhbmdlc0Zyb21TdGF0
ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpIGNvbnN0CiB7CiAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3M7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IDUw
MzY5Njc0YzQ1YTYyZTYxYjc4OTE5MjFlYmRiYTk4NjAzNmE1ZWEuLjlkY2RkZTk5OGYzNDEzNDI3
NzIyNjg2OTRjOTk4YWJlNjBjODRhZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVk
ZSAiRGFzaEFycmF5LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9udENh
c2NhZGUuaCIKLSNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMu
aCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKQEAg
LTk4LDYgKzk3LDEwIEBAIGNsYXNzIFBhdGg7CiBjbGFzcyBUZXh0UnVuOwogY2xhc3MgVHJhbnNm
b3JtYXRpb25NYXRyaXg7CiAKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CitjbGFzcyBSZWNvcmRl
cjsKK30KKwogZW51bSBjbGFzcyBUZXh0RHJhd2luZ01vZGUgOiB1aW50OF90IHsKICAgICBGaWxs
ID0gMSA8PCAwLAogICAgIFN0cm9rZSA9IDEgPDwgMSwKQEAgLTE1MywyNCArMTU2LDE1IEBAIE9w
dGlvbmFsPERvY3VtZW50TWFya2VyTGluZVN0eWxlPiBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6
ZGVjb2RlKERlY29kZXImIGRlY29kCiAgICAgcmV0dXJuIHt7ICptb2RlLCAqc2hvdWxkVXNlRGFy
a0FwcGVhcmFuY2UgfX07CiB9CiAKLW5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7Ci1jbGFzcyBSZWNv
cmRlcjsKLX0KLQogc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKLSAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZSgpCi0gICAgICAgIDogc2hvdWxkQW50aWFsaWFzKHRydWUpCi0gICAgICAgICwg
c2hvdWxkU21vb3RoRm9udHModHJ1ZSkKLSAgICAgICAgLCBzaG91bGRTdWJwaXhlbFF1YW50aXpl
Rm9udHModHJ1ZSkKLSAgICAgICAgLCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhmYWxzZSkKLSNp
ZiBVU0UoQ0cpCi0gICAgICAgIC8vIENvcmUgR3JhcGhpY3MgaW5jb3JyZWN0bHkgcmVuZGVycyBz
aGFkb3dzIHdpdGggcmFkaXVzID4gOHB4ICg8cmRhcjovL3Byb2JsZW0vODEwMzQ0Mj4pLAotICAg
ICAgICAvLyBidXQgd2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGlzIGJ1Z2d5IGJlaGF2aW9yIGZvciBj
YW52YXMgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KLSAgICAgICAgLCBzaGFkb3dzVXNlTGVnYWN5
UmFkaXVzKGZhbHNlKQotI2VuZGlmCi0gICAgICAgICwgZHJhd0x1bWluYW5jZU1hc2soZmFsc2Up
Ci0gICAgewotICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0ZSgp
OworICAgIFdFQkNPUkVfRVhQT1JUIH5HcmFwaGljc0NvbnRleHRTdGF0ZSgpOworCisgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKKyAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKTsKKworICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlJiBvcGVyYXRvcj0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKKyAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3BlcmF0b3I9KEdyYXBoaWNzQ29udGV4dFN0YXRlJiYp
OwogCiAgICAgZW51bSBDaGFuZ2UgOiB1aW50MzJfdCB7CiAgICAgICAgIFN0cm9rZUdyYWRpZW50
Q2hhbmdlICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKQEAgLTE5Nyw3ICsxOTEsNyBAQCBz
dHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGUgewogICAgICAgICBVc2VEYXJrQXBwZWFyYW5jZUNo
YW5nZSAgICAgICAgICAgICAgICAgPSAxIDw8IDIwLAogI2VuZGlmCiAgICAgfTsKLSAgICB0eXBl
ZGVmIE9wdGlvblNldDxDaGFuZ2U+IFN0YXRlQ2hhbmdlRmxhZ3M7CisgICAgdXNpbmcgU3RhdGVD
aGFuZ2VGbGFncyA9IE9wdGlvblNldDxDaGFuZ2U+OwogCiAgICAgUmVmUHRyPEdyYWRpZW50PiBz
dHJva2VHcmFkaWVudDsKICAgICBSZWZQdHI8UGF0dGVybj4gc3Ryb2tlUGF0dGVybjsKQEAgLTMw
OCw3ICszMDIsNyBAQCBwdWJsaWM6CiAgICAgUGF0dGVybiogc3Ryb2tlUGF0dGVybigpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQoKTsgfQogCiAgICAgdm9pZCBzZXRT
dHJva2VHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYpOwotICAgIFJlZlB0cjxHcmFkaWVudD4gc3Ry
b2tlR3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZUdyYWRpZW50OyB9Cisg
ICAgR3JhZGllbnQqIHN0cm9rZUdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJv
a2VHcmFkaWVudC5nZXQoKTsgfQogCiAgICAgdm9pZCBzZXRGaWxsUnVsZShXaW5kUnVsZSk7CiAg
ICAgV2luZFJ1bGUgZmlsbFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxSdWxlOyB9
CkBAIC0zMjAsNyArMzE0LDcgQEAgcHVibGljOgogICAgIFBhdHRlcm4qIGZpbGxQYXR0ZXJuKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsUGF0dGVybi5nZXQoKTsgfQogCiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRGaWxsR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmKTsKLSAgICBSZWZQ
dHI8R3JhZGllbnQ+IGZpbGxHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEdy
YWRpZW50OyB9CisgICAgR3JhZGllbnQqIGZpbGxHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUuZmlsbEdyYWRpZW50LmdldCgpOyB9CiAKICAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKGJvb2wpOwogICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRp
b25zLmNwcAppbmRleCAzZmQ0YWRlMDE1N2U5ZDRmOWJkN2Q4ZTRiZmViNDhhZmZlMThjOGU1Li45
ZjFkMTA5ZmYwOTdkNTNiNzJhNTQyYjI0ZThjNjMxZjQwNzc4OGNmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9u
cy5jcHAKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJEcmF3RXJyb3JVbmRlcmxpbmUuaCIK
ICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNp
bmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmgiCiAjaW5jbHVkZSAiSW1h
Z2UuaCIKQEAgLTU2OCw5ICs1NjksOSBAQCBGaWxsU291cmNlOjpGaWxsU291cmNlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKICAgICAgICAgcGF0dGVybi5yZXBlYXRYID0gc3Rh
dGUuZmlsbFBhdHRlcm4tPnJlcGVhdFgoKTsKICAgICAgICAgcGF0dGVybi5yZXBlYXRZID0gc3Rh
dGUuZmlsbFBhdHRlcm4tPnJlcGVhdFkoKTsKICAgICB9IGVsc2UgaWYgKHN0YXRlLmZpbGxHcmFk
aWVudCkgewotICAgICAgICBncmFkaWVudC5iYXNlID0gYWRvcHRSZWYoc3RhdGUuZmlsbEdyYWRp
ZW50LT5jcmVhdGVQbGF0Zm9ybUdyYWRpZW50KDEpKTsKKyAgICAgICAgZ3JhZGllbnQuYmFzZSA9
IHN0YXRlLmZpbGxHcmFkaWVudC0+Y3JlYXRlUGF0dGVybigxKTsKICAgICAgICAgaWYgKHN0YXRl
LmFscGhhICE9IDEpCi0gICAgICAgICAgICBncmFkaWVudC5hbHBoYUFkanVzdGVkID0gYWRvcHRS
ZWYoc3RhdGUuZmlsbEdyYWRpZW50LT5jcmVhdGVQbGF0Zm9ybUdyYWRpZW50KHN0YXRlLmFscGhh
KSk7CisgICAgICAgICAgICBncmFkaWVudC5hbHBoYUFkanVzdGVkID0gc3RhdGUuZmlsbEdyYWRp
ZW50LT5jcmVhdGVQYXR0ZXJuKHN0YXRlLmFscGhhKTsKICAgICB9IGVsc2UKICAgICAgICAgY29s
b3IgPSBzdGF0ZS5maWxsQ29sb3I7CiB9CkBAIC01ODEsOSArNTgyLDkgQEAgU3Ryb2tlU291cmNl
OjpTdHJva2VTb3VyY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQogICAgIGlm
IChzdGF0ZS5zdHJva2VQYXR0ZXJuKQogICAgICAgICBwYXR0ZXJuID0gYWRvcHRSZWYoc3RhdGUu
c3Ryb2tlUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKEFmZmluZVRyYW5zZm9ybSgpKSk7
CiAgICAgZWxzZSBpZiAoc3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsKLSAgICAgICAgZ3JhZGllbnQu
YmFzZSA9IGFkb3B0UmVmKHN0YXRlLnN0cm9rZUdyYWRpZW50LT5jcmVhdGVQbGF0Zm9ybUdyYWRp
ZW50KDEpKTsKKyAgICAgICAgZ3JhZGllbnQuYmFzZSA9IHN0YXRlLnN0cm9rZUdyYWRpZW50LT5j
cmVhdGVQYXR0ZXJuKDEpOwogICAgICAgICBpZiAoc3RhdGUuYWxwaGEgIT0gMSkKLSAgICAgICAg
ICAgIGdyYWRpZW50LmFscGhhQWRqdXN0ZWQgPSBhZG9wdFJlZihzdGF0ZS5zdHJva2VHcmFkaWVu
dC0+Y3JlYXRlUGxhdGZvcm1HcmFkaWVudChzdGF0ZS5hbHBoYSkpOworICAgICAgICAgICAgZ3Jh
ZGllbnQuYWxwaGFBZGp1c3RlZCA9IHN0YXRlLnN0cm9rZUdyYWRpZW50LT5jcmVhdGVQYXR0ZXJu
KHN0YXRlLmFscGhhKTsKICAgICB9IGVsc2UKICAgICAgICAgY29sb3IgPSBzdGF0ZS5zdHJva2VD
b2xvcjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYWRpZW50Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKaW5kZXggZmIwNDY5MmJhYjRmMGVjYjFlNjA2NGM2ZTVm
YjRiMWRmYzExYTQwOS4uZjUzNmM2MGUzZTgzYmI4YTE3ZTFkMGUzYzVkMzdiZWMxOTM4M2RlYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGll
bnRDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhZGllbnRDYWlyby5jcHAKQEAgLTM3LDcgKzM3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi12b2lkIEdyYWRpZW50OjpwbGF0Zm9ybURlc3Ryb3koKQordm9pZCBHcmFkaWVudDo6c3Rv
cHNDaGFuZ2VkKCkKIHsKIH0KIApAQCAtMTQ0LDcgKzE0NCw3IEBAIHN0YXRpYyBHcmFkaWVudDo6
Q29sb3JTdG9wIGludGVycG9sYXRlQ29sb3JTdG9wKEdyYWRpZW50OjpDb2xvclN0b3AgZnJvbSwg
R3JhZGllCiAgICAgZmxvYXQgYiA9IGIxICsgKGIyIC0gYjEpICogMC41ZjsKICAgICBmbG9hdCBh
ID0gYTEgKyAoYTIgLSBhMSkgKiAwLjVmOwogCi0gICAgcmV0dXJuIEdyYWRpZW50OjpDb2xvclN0
b3Aob2Zmc2V0LCBtYWtlU2ltcGxlQ29sb3IoU1JHQkEgeyByLCBnLCBiLCBhIH0pKTsKKyAgICBy
ZXR1cm4geyBvZmZzZXQsIG1ha2VTaW1wbGVDb2xvcihTUkdCQSB7IHIsIGcsIGIsIGEgfSkgfTsK
IH0KIAogc3RhdGljIGNhaXJvX3BhdHRlcm5fdCogY3JlYXRlQ29uaWMoZmxvYXQgeG8sIGZsb2F0
IHlvLCBmbG9hdCByLCBmbG9hdCBhbmdsZVJhZGlhbnMsCkBAIC0xNzAsMTAgKzE3MCwxMCBAQCBz
dGF0aWMgY2Fpcm9fcGF0dGVybl90KiBjcmVhdGVDb25pYyhmbG9hdCB4bywgZmxvYXQgeW8sIGZs
b2F0IHIsIGZsb2F0IGFuZ2xlUmFkaQogCiAgICAgLy8gQWRkIGV4dHJhIGNvbG9yIHN0b3AgYXQg
dGhlIGJlZ2lubmluZyBpZiBmaXJzdCBlbGVtZW50IG9mZnNldCBpcyBub3QgemVyby4KICAgICBp
ZiAoc3RvcHMuYXQoMCkub2Zmc2V0ID4gMCkKLSAgICAgICAgc3RvcHMuaW5zZXJ0KDAsIEdyYWRp
ZW50OjpDb2xvclN0b3AoMCwgc3RvcHMuYXQoMCkuY29sb3IpKTsKKyAgICAgICAgc3RvcHMuaW5z
ZXJ0KDAsIHsgMCwgc3RvcHMuYXQoMCkuY29sb3IgfSk7CiAgICAgLy8gQWRkIGV4dHJhIGNvbG9y
IHN0b3AgYXQgdGhlIGVuZCBpZiBsYXN0IGVsZW1lbnQgb2Zmc2V0IGlzIG5vdCB6ZXJvLgogICAg
IGlmIChzdG9wcy5hdChzdG9wcy5zaXplKCkgLSAxKS5vZmZzZXQgPCAxKQotICAgICAgICBzdG9w
cy5hcHBlbmQoR3JhZGllbnQ6OkNvbG9yU3RvcCgxLCBzdG9wcy5hdChzdG9wcy5zaXplKCkgLSAx
KS5jb2xvcikpOworICAgICAgICBzdG9wcy5hcHBlbmQoeyAxLCBzdG9wcy5hdChzdG9wcy5zaXpl
KCkgLSAxKS5jb2xvciB9KTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RvcHMuc2l6
ZSgpIC0gMTsgaSsrKSB7CiAgICAgICAgIGZyb20gPSBzdG9wcy5hdChpKSwgdG8gPSBzdG9wcy5h
dChpICsgMSk7CkBAIC0xODUsNjcgKzE4NSw3MCBAQCBzdGF0aWMgY2Fpcm9fcGF0dGVybl90KiBj
cmVhdGVDb25pYyhmbG9hdCB4bywgZmxvYXQgeW8sIGZsb2F0IHIsIGZsb2F0IGFuZ2xlUmFkaQog
CiAjZW5kaWYKIAotY2Fpcm9fcGF0dGVybl90KiBHcmFkaWVudDo6Y3JlYXRlUGxhdGZvcm1HcmFk
aWVudChmbG9hdCBnbG9iYWxBbHBoYSkKK1JlZlB0cjxjYWlyb19wYXR0ZXJuX3Q+IEdyYWRpZW50
OjpjcmVhdGVQYXR0ZXJuKGZsb2F0IGdsb2JhbEFscGhhKQogewotICAgIGNhaXJvX3BhdHRlcm5f
dCogZ3JhZGllbnQgPSBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKLSAgICAgICAgWyZdIChjb25zdCBM
aW5lYXJEYXRhJiBkYXRhKSAtPiBjYWlyb19wYXR0ZXJuX3QqIHsKLSAgICAgICAgICAgIHJldHVy
biBjYWlyb19wYXR0ZXJuX2NyZWF0ZV9saW5lYXIoZGF0YS5wb2ludDAueCgpLCBkYXRhLnBvaW50
MC55KCksIGRhdGEucG9pbnQxLngoKSwgZGF0YS5wb2ludDEueSgpKTsKKyAgICBib29sIGlzQ29u
aWMgPSBmYWxzZTsKKyAgICBSZWZQdHI8Y2Fpcm9fcGF0dGVybl90PiBncmFkaWVudCA9IFdURjo6
c3dpdGNoT24obV9kYXRhLAorICAgICAgICBbJl0gKGNvbnN0IExpbmVhckRhdGEmIGRhdGEpIC0+
IFJlZlB0cjxjYWlyb19wYXR0ZXJuX3Q+IHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihj
YWlyb19wYXR0ZXJuX2NyZWF0ZV9saW5lYXIoZGF0YS5wb2ludDAueCgpLCBkYXRhLnBvaW50MC55
KCksIGRhdGEucG9pbnQxLngoKSwgZGF0YS5wb2ludDEueSgpKSk7CiAgICAgICAgIH0sCi0gICAg
ICAgIFsmXSAoY29uc3QgUmFkaWFsRGF0YSYgZGF0YSkgLT4gY2Fpcm9fcGF0dGVybl90KiB7Ci0g
ICAgICAgICAgICByZXR1cm4gY2Fpcm9fcGF0dGVybl9jcmVhdGVfcmFkaWFsKGRhdGEucG9pbnQw
LngoKSwgZGF0YS5wb2ludDAueSgpLCBkYXRhLnN0YXJ0UmFkaXVzLCBkYXRhLnBvaW50MS54KCks
IGRhdGEucG9pbnQxLnkoKSwgZGF0YS5lbmRSYWRpdXMpOworICAgICAgICBbJl0gKGNvbnN0IFJh
ZGlhbERhdGEmIGRhdGEpIC0+IFJlZlB0cjxjYWlyb19wYXR0ZXJuX3Q+IHsKKyAgICAgICAgICAg
IHJldHVybiBhZG9wdFJlZihjYWlyb19wYXR0ZXJuX2NyZWF0ZV9yYWRpYWwoZGF0YS5wb2ludDAu
eCgpLCBkYXRhLnBvaW50MC55KCksIGRhdGEuc3RhcnRSYWRpdXMsIGRhdGEucG9pbnQxLngoKSwg
ZGF0YS5wb2ludDEueSgpLCBkYXRhLmVuZFJhZGl1cykpOwogICAgICAgICB9LAogI2lmIFBMQVRG
T1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQotICAgICAgICBbJl0gKGNvbnN0IENvbmljRGF0YSYg
ZGF0YSkgIC0+IGNhaXJvX3BhdHRlcm5fdCogeworICAgICAgICBbJl0gKGNvbnN0IENvbmljRGF0
YSYgZGF0YSkgLT4gUmVmUHRyPGNhaXJvX3BhdHRlcm5fdD4geworICAgICAgICAgICAgaXNDb25p
YyA9IHRydWU7CiAgICAgICAgICAgICAvLyBGSVhNRTogZGF0YSBwYXNzZWQgZm9yIGEgQ29uaWMg
Z3JhZGllbnQgZG9lc24ndCBjb250YWluIGEgcmFkaXVzLiBUaGF0J3MgYXBwYXJlbnRseSBjb3Jy
ZWN0IGJlY2F1c2UgdGhlIFczQyBzcGVjCiAgICAgICAgICAgICAvLyAoaHR0cHM6Ly93d3cudzMu
b3JnL1RSL2Nzcy1pbWFnZXMtNC8jY29uaWMtZ3JhZGllbnRzKSBzdGF0ZXMgYSBjb25pYyBncmFk
aWVudCBpcyBvbmx5IGRlZmluZWQgYnkgaXRzIHBvc2l0aW9uIGFuZCBhbmdsZS4KICAgICAgICAg
ICAgIC8vIFRodXMsIGhlcmUgSSBnaXZlIHRoZSByYWRpdXMgYW4gZXh0cmVtZWx5IGxhcmdlIHZh
bHVlLiBUaGUgcmVzdWx0aW5nIGdyYWRpZW50IHdpbGwgYmUgbGF0ZXIgY2xpcHBlZCBieSBmaWxs
UmVjdC4KICAgICAgICAgICAgIC8vIEFuIGFsdGVybmF0aXZlIHNvbHV0aW9uIGNvdWxkIGJlIHRv
IGNoYW5nZSB0aGUgQVBJIGFuZCBwYXNzIGEgcmVjdCdzIHdpZHRoIGFuZCBoZWlnaHQgdG8gb3B0
aW1pemUgdGhlIGNvbXB1dGF0aW9uIG9mIHRoZSByYWRpdXMuCiAgICAgICAgICAgICBjb25zdCBm
bG9hdCByYWRpdXMgPSA0MDk2OwotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNvbmljKGRhdGEu
cG9pbnQwLngoKSwgZGF0YS5wb2ludDAueSgpLCByYWRpdXMsIGRhdGEuYW5nbGVSYWRpYW5zLCBz
dG9wcygpLCBnbG9iYWxBbHBoYSk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoY3JlYXRl
Q29uaWMoZGF0YS5wb2ludDAueCgpLCBkYXRhLnBvaW50MC55KCksIHJhZGl1cywgZGF0YS5hbmds
ZVJhZGlhbnMsIHN0b3BzKCksIGdsb2JhbEFscGhhKSk7CiAjZWxzZQotICAgICAgICBbJl0gKGNv
bnN0IENvbmljRGF0YSYpICAtPiBjYWlyb19wYXR0ZXJuX3QqIHsKKyAgICAgICAgWyZdIChjb25z
dCBDb25pY0RhdGEmKSAtPiBSZWZQdHI8Y2Fpcm9fcGF0dGVybl90PiB7CiAgICAgICAgICAgICAv
LyBGSVhNRTogaW1wbGVtZW50IGNvbmljIGdyYWRpZW50IHJlbmRlcmluZy4KKyAgICAgICAgICAg
IGlzQ29uaWMgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAjZW5kaWYKICAg
ICAgICAgfQogICAgICk7CiAKLSAgICBpZiAodHlwZSgpICE9IFR5cGU6OkNvbmljKSB7CisgICAg
aWYgKCFpc0NvbmljKSB7CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgc3RvcCA6IHN0b3BzKCkp
IHsKLSAgICAgICAgICAgIGFkZENvbG9yU3RvcFJHQkEoZ3JhZGllbnQsIHN0b3AsIGdsb2JhbEFs
cGhhKTsKKyAgICAgICAgICAgIGFkZENvbG9yU3RvcFJHQkEoZ3JhZGllbnQuZ2V0KCksIHN0b3As
IGdsb2JhbEFscGhhKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHN3aXRjaCAobV9zcHJlYWRN
ZXRob2QpIHsKICAgICBjYXNlIEdyYWRpZW50U3ByZWFkTWV0aG9kOjpQYWQ6Ci0gICAgICAgIGNh
aXJvX3BhdHRlcm5fc2V0X2V4dGVuZChncmFkaWVudCwgQ0FJUk9fRVhURU5EX1BBRCk7CisgICAg
ICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChncmFkaWVudC5nZXQoKSwgQ0FJUk9fRVhURU5E
X1BBRCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR3JhZGllbnRTcHJlYWRNZXRob2Q6OlJl
ZmxlY3Q6Ci0gICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChncmFkaWVudCwgQ0FJUk9f
RVhURU5EX1JFRkxFQ1QpOworICAgICAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQoZ3JhZGll
bnQuZ2V0KCksIENBSVJPX0VYVEVORF9SRUZMRUNUKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBHcmFkaWVudFNwcmVhZE1ldGhvZDo6UmVwZWF0OgotICAgICAgICBjYWlyb19wYXR0ZXJuX3Nl
dF9leHRlbmQoZ3JhZGllbnQsIENBSVJPX0VYVEVORF9SRVBFQVQpOworICAgICAgICBjYWlyb19w
YXR0ZXJuX3NldF9leHRlbmQoZ3JhZGllbnQuZ2V0KCksIENBSVJPX0VYVEVORF9SRVBFQVQpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYWlyb19tYXRyaXhfdCBtYXRyaXggPSB0b0Nh
aXJvTWF0cml4KG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uKTsKICAgICBjYWlyb19tYXRy
aXhfaW52ZXJ0KCZtYXRyaXgpOwotICAgIGNhaXJvX3BhdHRlcm5fc2V0X21hdHJpeChncmFkaWVu
dCwgJm1hdHJpeCk7CisgICAgY2Fpcm9fcGF0dGVybl9zZXRfbWF0cml4KGdyYWRpZW50LmdldCgp
LCAmbWF0cml4KTsKIAogICAgIHJldHVybiBncmFkaWVudDsKIH0KIAogdm9pZCBHcmFkaWVudDo6
ZmlsbChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsK
LSAgICBSZWZQdHI8Y2Fpcm9fcGF0dGVybl90PiBwbGF0Zm9ybUdyYWRpZW50ID0gYWRvcHRSZWYo
Y3JlYXRlUGxhdGZvcm1HcmFkaWVudCgxLjApKTsKLSAgICBpZiAoIXBsYXRmb3JtR3JhZGllbnQp
CisgICAgYXV0byBwYXR0ZXJuID0gY3JlYXRlUGF0dGVybigxLjApOworICAgIGlmICghcGF0dGVy
bikKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKGNvbnRleHQuaGFzUGxhdGZvcm1Db250
ZXh0KCkpOwogICAgIGF1dG8mIHBsYXRmb3JtQ29udGV4dCA9ICpjb250ZXh0LnBsYXRmb3JtQ29u
dGV4dCgpOwogCiAgICAgQ2Fpcm86OnNhdmUocGxhdGZvcm1Db250ZXh0KTsKLSAgICBDYWlybzo6
ZmlsbFJlY3QocGxhdGZvcm1Db250ZXh0LCByZWN0LCBwbGF0Zm9ybUdyYWRpZW50LmdldCgpKTsK
KyAgICBDYWlybzo6ZmlsbFJlY3QocGxhdGZvcm1Db250ZXh0LCByZWN0LCBwYXR0ZXJuLmdldCgp
KTsKICAgICBDYWlybzo6cmVzdG9yZShwbGF0Zm9ybUNvbnRleHQpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAppbmRleCBjZDg2NWFhYTI2MDE5ZmZjNzVhZWVlOTI2
MjAyY2YxMTI1OTViYzgxLi44OTEzODQzMTBlYmU4MTgyNDM0ODQ2NjE3OTQ4MWVkMTc2MTI5YjY5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKQEAgLTMzLDExICszMywx
MSBAQAogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKICNpbmNsdWRlICJGb250LmgiCiAj
aW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmgiCiAjaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAKLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IEdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZv
cm1Db250ZXh0KQpAQCAtMTU0LDEyICsxNTQsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG8K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQogewotICAgIFJlZlB0cjxjYWlyb19wYXR0ZXJu
X3Q+IHBsYXRmb3JtR3JhZGllbnQgPSBhZG9wdFJlZihncmFkaWVudC5jcmVhdGVQbGF0Zm9ybUdy
YWRpZW50KDEuMCkpOwotICAgIGlmICghcGxhdGZvcm1HcmFkaWVudCkKKyAgICBhdXRvIHBhdHRl
cm4gPSBncmFkaWVudC5jcmVhdGVQYXR0ZXJuKDEuMCk7CisgICAgaWYgKCFwYXR0ZXJuKQogICAg
ICAgICByZXR1cm47CiAKICAgICBDYWlybzo6c2F2ZShtX3BsYXRmb3JtQ29udGV4dCk7Ci0gICAg
Q2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBwbGF0Zm9ybUdyYWRpZW50
LmdldCgpKTsKKyAgICBDYWlybzo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIHBh
dHRlcm4uZ2V0KCkpOwogICAgIENhaXJvOjpyZXN0b3JlKG1fcGxhdGZvcm1Db250ZXh0KTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGll
bnRDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENH
LmNwcAppbmRleCA5NTUxZTliYjRhZjdkMmU1ZDUzZmJiZWMwNmNjZjhlMTBjNjYwZWU0Li44MTA5
MmI4ZTc5ZjUzZmJiODNjOGY1YTZhNzcyMTJmMDQ1MzViNjU3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcApAQCAtMzUsMTggKzM1
LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBHcmFkaWVudDo6cGxhdGZvcm1E
ZXN0cm95KCkKK3ZvaWQgR3JhZGllbnQ6OnN0b3BzQ2hhbmdlZCgpCiB7Ci0gICAgQ0dHcmFkaWVu
dFJlbGVhc2UobV9ncmFkaWVudCk7CiAgICAgbV9ncmFkaWVudCA9IG51bGxwdHI7CiB9CiAKLUNH
R3JhZGllbnRSZWYgR3JhZGllbnQ6OnBsYXRmb3JtR3JhZGllbnQoKQordm9pZCBHcmFkaWVudDo6
Y3JlYXRlQ0dHcmFkaWVudCgpCiB7Ci0gICAgaWYgKG1fZ3JhZGllbnQpCi0gICAgICAgIHJldHVy
biBtX2dyYWRpZW50OwotCi0gICAgc29ydFN0b3BzSWZOZWNlc3NhcnkoKTsKKyAgICBzb3J0U3Rv
cHMoKTsKIAogICAgIGF1dG8gY29sb3JzQXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRh
YmxlKDAsIG1fc3RvcHMuc2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7CiAgICAgdW5z
aWduZWQgbnVtU3RvcHMgPSBtX3N0b3BzLnNpemUoKTsKQEAgLTgyLDExICs3OCw5IEBAIENHR3Jh
ZGllbnRSZWYgR3JhZGllbnQ6OnBsYXRmb3JtR3JhZGllbnQoKQogICAgIH0KIAogICAgIGlmICho
YXNFeHRlbmRlZENvbG9ycykKLSAgICAgICAgbV9ncmFkaWVudCA9IENHR3JhZGllbnRDcmVhdGVX
aXRoQ29sb3JzKGV4dGVuZGVkU1JHQkNvbG9yU3BhY2VSZWYoKSwgY29sb3JzQXJyYXkuZ2V0KCks
IGxvY2F0aW9ucy5kYXRhKCkpOworICAgICAgICBtX2dyYWRpZW50ID0gYWRvcHRDRihDR0dyYWRp
ZW50Q3JlYXRlV2l0aENvbG9ycyhleHRlbmRlZFNSR0JDb2xvclNwYWNlUmVmKCksIGNvbG9yc0Fy
cmF5LmdldCgpLCBsb2NhdGlvbnMuZGF0YSgpKSk7CiAgICAgZWxzZQotICAgICAgICBtX2dyYWRp
ZW50ID0gQ0dHcmFkaWVudENyZWF0ZVdpdGhDb2xvckNvbXBvbmVudHMoc1JHQkNvbG9yU3BhY2VS
ZWYoKSwgY29sb3JDb21wb25lbnRzLmRhdGEoKSwgbG9jYXRpb25zLmRhdGEoKSwgbnVtU3RvcHMp
OwotCi0gICAgcmV0dXJuIG1fZ3JhZGllbnQ7CisgICAgICAgIG1fZ3JhZGllbnQgPSBhZG9wdENG
KENHR3JhZGllbnRDcmVhdGVXaXRoQ29sb3JDb21wb25lbnRzKHNSR0JDb2xvclNwYWNlUmVmKCks
IGNvbG9yQ29tcG9uZW50cy5kYXRhKCksIGxvY2F0aW9ucy5kYXRhKCksIG51bVN0b3BzKSk7CiB9
CiAKIHZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCkBAIC0xMDMsNyArOTcsOSBAQCB2b2lkIEdyYWRpZW50OjpwYWludChH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB2b2lkIEdyYWRpZW50OjpwYWludChDR0NvbnRleHRS
ZWYgcGxhdGZvcm1Db250ZXh0KQogewogICAgIENHR3JhZGllbnREcmF3aW5nT3B0aW9ucyBleHRl
bmRPcHRpb25zID0ga0NHR3JhZGllbnREcmF3c0JlZm9yZVN0YXJ0TG9jYXRpb24gfCBrQ0dHcmFk
aWVudERyYXdzQWZ0ZXJFbmRMb2NhdGlvbjsKLSAgICBDR0dyYWRpZW50UmVmIGdyYWRpZW50ID0g
cGxhdGZvcm1HcmFkaWVudCgpOworCisgICAgaWYgKCFtX2dyYWRpZW50KQorICAgICAgICBjcmVh
dGVDR0dyYWRpZW50KCk7CiAKICAgICBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKICAgICAgICAgWyZd
IChjb25zdCBMaW5lYXJEYXRhJiBkYXRhKSB7CkBAIC0xNDYsNyArMTQyLDcgQEAgdm9pZCBHcmFk
aWVudDo6cGFpbnQoQ0dDb250ZXh0UmVmIHBsYXRmb3JtQ29udGV4dCkKICAgICAgICAgICAgICAg
ICAgICAgICAgIENHUG9pbnQgbGVmdCA9IENHUG9pbnRNYWtlKGZsaXAgPyBzdGFydCArIHdpZHRo
IDogc3RhcnQsIGJvdW5kaW5nQm94Lm9yaWdpbi55KTsKICAgICAgICAgICAgICAgICAgICAgICAg
IENHUG9pbnQgcmlnaHQgPSBDR1BvaW50TWFrZShmbGlwID8gc3RhcnQgOiBzdGFydCArIHdpZHRo
LCBib3VuZGluZ0JveC5vcmlnaW4ueSk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIENHQ29u
dGV4dERyYXdMaW5lYXJHcmFkaWVudChwbGF0Zm9ybUNvbnRleHQsIGdyYWRpZW50LCBsZWZ0LCBy
aWdodCwgZXh0ZW5kT3B0aW9ucyk7CisgICAgICAgICAgICAgICAgICAgICAgICBDR0NvbnRleHRE
cmF3TGluZWFyR3JhZGllbnQocGxhdGZvcm1Db250ZXh0LCBtX2dyYWRpZW50LmdldCgpLCBsZWZ0
LCByaWdodCwgZXh0ZW5kT3B0aW9ucyk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICht
X3NwcmVhZE1ldGhvZCA9PSBHcmFkaWVudFNwcmVhZE1ldGhvZDo6UmVmbGVjdCkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmbGlwID0gIWZsaXA7CkBAIC0xNTgsNyArMTU0LDcgQEAgdm9p
ZCBHcmFkaWVudDo6cGFpbnQoQ0dDb250ZXh0UmVmIHBsYXRmb3JtQ29udGV4dCkKICAgICAgICAg
ICAgICAgICBGQUxMVEhST1VHSDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgR3Jh
ZGllbnRTcHJlYWRNZXRob2Q6OlBhZDoKLSAgICAgICAgICAgICAgICBDR0NvbnRleHREcmF3TGlu
ZWFyR3JhZGllbnQocGxhdGZvcm1Db250ZXh0LCBncmFkaWVudCwgZGF0YS5wb2ludDAsIGRhdGEu
cG9pbnQxLCBleHRlbmRPcHRpb25zKTsKKyAgICAgICAgICAgICAgICBDR0NvbnRleHREcmF3TGlu
ZWFyR3JhZGllbnQocGxhdGZvcm1Db250ZXh0LCBtX2dyYWRpZW50LmdldCgpLCBkYXRhLnBvaW50
MCwgZGF0YS5wb2ludDEsIGV4dGVuZE9wdGlvbnMpOwogICAgICAgICAgICAgfQogICAgICAgICB9
LAogICAgICAgICBbJl0gKGNvbnN0IFJhZGlhbERhdGEmIGRhdGEpIHsKQEAgLTE3Myw3ICsxNjks
NyBAQCB2b2lkIEdyYWRpZW50OjpwYWludChDR0NvbnRleHRSZWYgcGxhdGZvcm1Db250ZXh0KQog
ICAgICAgICAgICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQsIC1k
YXRhLnBvaW50MC54KCksIC1kYXRhLnBvaW50MC55KCkpOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBDR0NvbnRleHREcmF3UmFkaWFsR3JhZGllbnQocGxhdGZvcm1Db250ZXh0LCBncmFk
aWVudCwgZGF0YS5wb2ludDAsIGRhdGEuc3RhcnRSYWRpdXMsIGRhdGEucG9pbnQxLCBkYXRhLmVu
ZFJhZGl1cywgZXh0ZW5kT3B0aW9ucyk7CisgICAgICAgICAgICBDR0NvbnRleHREcmF3UmFkaWFs
R3JhZGllbnQocGxhdGZvcm1Db250ZXh0LCBtX2dyYWRpZW50LmdldCgpLCBkYXRhLnBvaW50MCwg
ZGF0YS5zdGFydFJhZGl1cywgZGF0YS5wb2ludDEsIGRhdGEuZW5kUmFkaXVzLCBleHRlbmRPcHRp
b25zKTsKIAogICAgICAgICAgICAgaWYgKG5lZWRTY2FsaW5nKQogICAgICAgICAgICAgICAgIENH
Q29udGV4dFJlc3RvcmVHU3RhdGUocGxhdGZvcm1Db250ZXh0KTsKQEAgLTE4Niw3ICsxODIsNyBA
QCB2b2lkIEdyYWRpZW50OjpwYWludChDR0NvbnRleHRSZWYgcGxhdGZvcm1Db250ZXh0KQogICAg
ICAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dCwgZGF0YS5wb2lu
dDAueCgpLCBkYXRhLnBvaW50MC55KCkpOwogICAgICAgICAgICAgQ0dDb250ZXh0Um90YXRlQ1RN
KHBsYXRmb3JtQ29udGV4dCwgKENHRmxvYXQpLU1fUElfMik7CiAgICAgICAgICAgICBDR0NvbnRl
eHRUcmFuc2xhdGVDVE0ocGxhdGZvcm1Db250ZXh0LCAtZGF0YS5wb2ludDAueCgpLCAtZGF0YS5w
b2ludDAueSgpKTsKLSAgICAgICAgICAgIENHQ29udGV4dERyYXdDb25pY0dyYWRpZW50KHBsYXRm
b3JtQ29udGV4dCwgcGxhdGZvcm1HcmFkaWVudCgpLCBkYXRhLnBvaW50MCwgZGF0YS5hbmdsZVJh
ZGlhbnMpOworICAgICAgICAgICAgQ0dDb250ZXh0RHJhd0NvbmljR3JhZGllbnQocGxhdGZvcm1D
b250ZXh0LCBtX2dyYWRpZW50LmdldCgpLCBkYXRhLnBvaW50MCwgZGF0YS5hbmdsZVJhZGlhbnMp
OwogICAgICAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShwbGF0Zm9ybUNvbnRleHQpOwog
I2Vsc2UKICAgICAgICAgICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcApp
bmRleCBhNWU1NTFhOTgwNzgyMDQ1OGUyOWE3MDFhMzcyYzczNjMyMzgzODcwLi5mYmRkMGEzYmM5
Y2I0YTgwZGQwOWZhNDk2NTUzYTliYjAzYmNkN2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRGlz
cGxheUxpc3RSZWNvcmRlci5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1
ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
Q0cuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRp
b24uaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCmluZGV4IDI1YmYyYjliOTM1NDJl
MjA5MjA5MDhlMDRhYzI2YzAwOWIzZWViOGEuLjhmMTEyZDcxOGE5MmIxNjI1MTY1ZWYzOTgyZDA3
NzY2OTRhOWE1ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApAQCAtMjcsMTUg
KzI3LDE0IEBACiAKICNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCiAjaW5jbHVk
ZSAiRGlzcGxheUxpc3QuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRmxv
YXRSb3VuZGVkUmVjdC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZl
ci5oIgorI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRl
ICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVHlwZUNh
c3RzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05p
Y29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcAppbmRleCBiZDViYzU0MjIxNmI5OTc2ZjY2
NmM0NDA3MjdiZjYwY2VkZDdmODljLi4wMGJlOGU5MWQzNTU3N2JiNDY4YjgzODgzMjU2YjdlZDk5
YWZjNjgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNv
c2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJh
dGlvblJlY29yZGVyLmNwcApAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSAiQ2Fpcm9PcGVy
YXRpb25zLmgiCiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgorI2luY2x1ZGUgIkdyYWRp
ZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJOaWNvc2lhUGFpbnRp
bmdPcGVyYXRpb25SZXBsYXlDYWlyby5oIgogI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgpAQCAtMjkx
LDcgKzI5Miw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCiAgICAgICAgIH0KICAgICB9Owog
Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGFkb3B0UmVmKGdyYWRp
ZW50LmNyZWF0ZVBsYXRmb3JtR3JhZGllbnQoMS4wKSkpKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29t
bWFuZDxGaWxsUmVjdD4ocmVjdCwgZ3JhZGllbnQuY3JlYXRlUGF0dGVybigxLjApKSk7CiB9CiAK
IHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJh
dG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcAppbmRleCAxNTAy
NDY4MTQ5NDFkNjc3MzUwZWQzMjg4NjVmYzg3ZTcwNGJhYmMwLi44ODM1Zjg4ZDFiYmNkMjAzYzMy
NTYyZGEyNDE0Y2JjMjdiNmZiMGY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcApAQCAtMzAxLDcg
KzMwMSw3IEBAIEZpbGxTb3VyY2U6OkZpbGxTb3VyY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGUmIHN0YXRlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmCiAgICAgICAgIEFmZmluZVRyYW5zZm9y
bSB1c2VyVG9CYXNlQ1RNOyAvLyBGSVhNRTogVGhpcyBpc24ndCByZWFsbHkgbmVlZGVkIG9uIFdp
bmRvd3MKICAgICAgICAgYnJ1c2ggPSBzdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1Q
YXR0ZXJuKGNvbnRleHQsIHN0YXRlLmFscGhhLCB1c2VyVG9CYXNlQ1RNKTsKICAgICB9IGVsc2Ug
aWYgKHN0YXRlLmZpbGxHcmFkaWVudCAmJiAhc3RhdGUuZmlsbEdyYWRpZW50LT5zdG9wcygpLmlz
RW1wdHkoKSkKLSAgICAgICAgYnJ1c2ggPSBzdGF0ZS5maWxsR3JhZGllbnQtPmNyZWF0ZVBsYXRm
b3JtR3JhZGllbnRJZk5lY2Vzc2FyeShwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwor
ICAgICAgICBicnVzaCA9IHN0YXRlLmZpbGxHcmFkaWVudC0+Y3JlYXRlQnJ1c2gocGxhdGZvcm1D
b250ZXh0LnJlbmRlclRhcmdldCgpKTsKICAgICBlbHNlCiAgICAgICAgIGJydXNoID0gcGxhdGZv
cm1Db250ZXh0LmJydXNoV2l0aENvbG9yKGNvbG9yKTsKIH0KQEAgLTMxOCw3ICszMTgsNyBAQCBT
dHJva2VTb3VyY2U6OlN0cm9rZVNvdXJjZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3Rh
dGUsIGNvbnN0IEdyYXBoaWNzQ29udAogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFz
ZUNUTTsgLy8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG5lZWRlZCBvbiBXaW5kb3dzCiAgICAg
ICAgIGJydXNoID0gc3RhdGUuc3Ryb2tlUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNv
bnRleHQsIHN0YXRlLmFscGhhLCB1c2VyVG9CYXNlQ1RNKTsKICAgICB9IGVsc2UgaWYgKHN0YXRl
LnN0cm9rZUdyYWRpZW50KQotICAgICAgICBicnVzaCA9IHN0YXRlLnN0cm9rZUdyYWRpZW50LT5j
cmVhdGVQbGF0Zm9ybUdyYWRpZW50SWZOZWNlc3NhcnkocGxhdGZvcm1Db250ZXh0LnJlbmRlclRh
cmdldCgpKTsKKyAgICAgICAgYnJ1c2ggPSBzdGF0ZS5zdHJva2VHcmFkaWVudC0+Y3JlYXRlQnJ1
c2gocGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsKICAgICBlbHNlCiAgICAgICAgIGJy
dXNoID0gcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENvbG9yKGNvbG9yKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJE
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVj
dDJELmNwcAppbmRleCAwNGU0ZDc2NDkzMmZhODk1NDgwMjhmZTM1OWUzM2Q4YjY1Njc0OTVkLi4w
ZGZlYWI2NzJlZDIxZTFkYjVjNmRiNzhiMWIxNGRkNzM5NDlhMGIwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQu
Y3BwCkBAIC0zMSwyOSArMzEsMTQgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RC5oIgogI2luY2x1ZGUgPGQyZDEuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogI2RlZmluZSBHUkFESUVOVF9EUkFXSU5HIDMKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEdyYWRpZW50OjpwbGF0Zm9ybURlc3Ryb3koKQor
dm9pZCBHcmFkaWVudDo6c3RvcHNDaGFuZ2VkKCkKIHsKLSAgICBpZiAobV9ncmFkaWVudCkKLSAg
ICAgICAgbV9ncmFkaWVudC0+UmVsZWFzZSgpOwotICAgIG1fZ3JhZGllbnQgPSBudWxscHRyOwot
fQotCi1JRDJEMUJydXNoKiBHcmFkaWVudDo6cGxhdGZvcm1HcmFkaWVudCgpCi17Ci0gICAgQVNT
RVJUKG1fZ3JhZGllbnQpOwotICAgIHJldHVybiBtX2dyYWRpZW50OwotfQotCi1JRDJEMUJydXNo
KiBHcmFkaWVudDo6Y3JlYXRlUGxhdGZvcm1HcmFkaWVudElmTmVjZXNzYXJ5KElEMkQxUmVuZGVy
VGFyZ2V0KiBjb250ZXh0KQotewotICAgIGdlbmVyYXRlR3JhZGllbnQoY29udGV4dCk7Ci0gICAg
cmV0dXJuIG1fZ3JhZGllbnQ7CisgICAgbV9icnVzaCA9IG51bGxwdHI7CiB9CiAKIHN0YXRpYyBi
b29sIGNpcmNsZUlzRW50aXJlbHlDb250YWluZWQoY29uc3QgRmxvYXRQb2ludCYgY2VudGVyQSwg
ZmxvYXQgcmFkaXVzQSwgY29uc3QgRmxvYXRQb2ludCYgY2VudGVyQiwgZmxvYXQgcmFkaXVzQikK
QEAgLTY1LDE1ICs1MCwxNiBAQCBzdGF0aWMgYm9vbCBjaXJjbGVJc0VudGlyZWx5Q29udGFpbmVk
KGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlckEsIGZsb2F0IHJhZGl1c0EsCiAgICAgcmV0dXJuIGRl
bHRhWCAqIGRlbHRhWCArIGRlbHRhWSAqIGRlbHRhWSA8IGRlbHRhUmFkaXVzICogZGVsdGFSYWRp
dXMgJiYgcmFkaXVzQSA8IHJhZGl1c0I7CiB9CiAKLXZvaWQgR3JhZGllbnQ6OmdlbmVyYXRlR3Jh
ZGllbnQoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKK0lEMkQxQnJ1c2gqIEdyYWRp
ZW50OjpjcmVhdGVCcnVzaChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQogewotICAg
IHNvcnRTdG9wc0lmTmVjZXNzYXJ5KCk7CisgICAgc29ydFN0b3BzKCk7CiAKICAgICBWZWN0b3I8
RDJEMV9HUkFESUVOVF9TVE9QPiBncmFkaWVudFN0b3BzOwotICAgIC8vIEZJWE1FOiBBZGQgc3Vw
cG9ydCBmb3IgRXh0ZW5kZWRDb2xvci4KLSAgICBmb3IgKGF1dG8gc3RvcCA6IG1fc3RvcHMpIHsK
KyAgICBncmFkaWVudFN0b3BzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9zdG9wcy5zaXplKCkp
OworICAgIGZvciAoYXV0byYgc3RvcCA6IG1fc3RvcHMpIHsKKyAgICAgICAgLy8gRklYTUU6IEFk
ZCBzdXBwb3J0IGZvciBub24tc1JHQkEgY29sb3Igc3BhY2VzLgogICAgICAgICBhdXRvIFtyLCBn
LCBiLCBhXSBzdG9wLmNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKLSAgICAgICAgZ3JhZGll
bnRTdG9wcy5hcHBlbmQoRDJEMTo6R3JhZGllbnRTdG9wKHN0b3Aub2Zmc2V0LCBEMkQxOjpDb2xv
ckYociwgZywgYiwgYSkpKTsKKyAgICAgICAgZ3JhZGllbnRTdG9wcy5ncmFkaWVudFN0b3BzLnVu
Y2hlY2tlZEFwcGVuZChEMkQxOjpHcmFkaWVudFN0b3Aoc3RvcC5vZmZzZXQsIEQyRDE6OkNvbG9y
RihyLCBnLCBiLCBhKSkpOwogICAgIH0KIAogICAgIFdURjo6c3dpdGNoT24obV9kYXRhLApAQCAt
MTIyLDExICsxMDgsNiBAQCB2b2lkIEdyYWRpZW50OjpnZW5lcmF0ZUdyYWRpZW50KElEMkQxUmVu
ZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCiAgICAgSFJFU1VMVCBociA9IHJlbmRlclRhcmdldC0+
Q3JlYXRlR3JhZGllbnRTdG9wQ29sbGVjdGlvbihncmFkaWVudFN0b3BzLmRhdGEoKSwgZ3JhZGll
bnRTdG9wcy5zaXplKCksICZncmFkaWVudFN0b3BDb2xsZWN0aW9uKTsKICAgICBSRUxFQVNFX0FT
U0VSVChTVUNDRUVERUQoaHIpKTsKIAotICAgIGlmIChtX2dyYWRpZW50KSB7Ci0gICAgICAgIG1f
Z3JhZGllbnQtPlJlbGVhc2UoKTsKLSAgICAgICAgbV9ncmFkaWVudCA9IG51bGxwdHI7Ci0gICAg
fQotCiAgICAgV1RGOjpzd2l0Y2hPbihtX2RhdGEsCiAgICAgICAgIFsmXSAoY29uc3QgTGluZWFy
RGF0YSYgZGF0YSkgewogICAgICAgICAgICAgSUQyRDFMaW5lYXJHcmFkaWVudEJydXNoKiBsaW5l
YXJHcmFkaWVudCA9IG51bGxwdHI7CkBAIC0xMzUsNyArMTE2LDcgQEAgdm9pZCBHcmFkaWVudDo6
Z2VuZXJhdGVHcmFkaWVudChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQogICAgICAg
ICAgICAgICAgIEQyRDE6OkJydXNoUHJvcGVydGllcygpLCBncmFkaWVudFN0b3BDb2xsZWN0aW9u
LmdldCgpLAogICAgICAgICAgICAgICAgICZsaW5lYXJHcmFkaWVudCk7CiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAgICAgIG1fZ3JhZGllbnQgPSBs
aW5lYXJHcmFkaWVudDsKKyAgICAgICAgICAgIG1fYnJ1c2ggPSBhZG9wdENPTShsaW5lYXJHcmFk
aWVudCk7CiAgICAgICAgIH0sCiAgICAgICAgIFsmXSAoY29uc3QgUmFkaWFsRGF0YSYgZGF0YSkg
ewogICAgICAgICAgICAgRmxvYXRTaXplIG9mZnNldDsKQEAgLTE1NCwxNCArMTM1LDE1IEBAIHZv
aWQgR3JhZGllbnQ6OmdlbmVyYXRlR3JhZGllbnQoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRh
cmdldCkKICAgICAgICAgICAgICAgICBEMkQxOjpCcnVzaFByb3BlcnRpZXMoKSwgZ3JhZGllbnRT
dG9wQ29sbGVjdGlvbi5nZXQoKSwKICAgICAgICAgICAgICAgICAmcmFkaWFsR3JhZGllbnQpOwog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgICAgICBt
X2dyYWRpZW50ID0gcmFkaWFsR3JhZGllbnQ7CisgICAgICAgICAgICBtX2JydXNoID0gYWRvcHRD
T00ocmFkaWFsR3JhZGllbnQpOwogICAgICAgICB9LAogICAgICAgICBbJl0gKGNvbnN0IENvbmlj
RGF0YSYpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgY29uaWMgZ3JhZGllbnQg
cmVuZGVyaW5nLgorICAgICAgICAgICAgbV9icnVzaCA9IG51bGxwdHI7CiAgICAgICAgIH0KICAg
ICApOwogCi0gICAgaGFzaCgpOworICAgIHJldHVybiBtX2JydXNoLmdldCgpOwogfQogCiB2b2lk
IEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiByZWN0KQpAQCAtMTcwLDE1ICsxNTIsMTYgQEAgdm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIAogICAgIFdURjo6c3dp
dGNoT24obV9kYXRhLAogICAgICAgICBbJl0gKGNvbnN0IExpbmVhckRhdGEmIGRhdGEpIHsKLSAg
ICAgICAgICAgIGlmICghbV9jYWNoZWRIYXNoIHx8ICFtX2dyYWRpZW50KQotICAgICAgICAgICAg
ICAgIGdlbmVyYXRlR3JhZGllbnQoZDJkQ29udGV4dCk7CisgICAgICAgICAgICAvLyBGSVhNRTog
SWYgd2UgaGF2ZSBhIGJydXNoLCB3aHkgY2FuIHdlIHJlLXVzZSBpdD8gV2hhdCBndWFyYW50ZWVz
IGl0J3MgcmlnaHQgZm9yIHRoaXMgY29udGV4dD8KKyAgICAgICAgICAgIGlmICghbV9icnVzaCkK
KyAgICAgICAgICAgICAgICBjcmVhdGVCcnVzaChkMmRDb250ZXh0KTsKIAogI2lmIEFTU0VSVF9F
TkFCTEVECiAgICAgICAgICAgICBkMmRDb250ZXh0LT5TZXRUYWdzKEdSQURJRU5UX0RSQVdJTkcs
IF9fTElORV9fKTsKICNlbmRpZgogCiAgICAgICAgICAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRS
ZWN0ID0gcmVjdDsKLSAgICAgICAgICAgIGQyZENvbnRleHQtPkZpbGxSZWN0YW5nbGUoJmQyZFJl
Y3QsIG1fZ3JhZGllbnQpOworICAgICAgICAgICAgZDJkQ29udGV4dC0+RmlsbFJlY3RhbmdsZSgm
ZDJkUmVjdCwgbV9icnVzaC5nZXQoKSk7CiAgICAgICAgIH0sCiAgICAgICAgIFsmXSAoY29uc3Qg
UmFkaWFsRGF0YSYgZGF0YSkgewogICAgICAgICAgICAgYm9vbCBuZWVkU2NhbGluZyA9IGRhdGEu
YXNwZWN0UmF0aW8gIT0gMTsKQEAgLTE5OSwxNSArMTgyLDE2IEBAIHZvaWQgR3JhZGllbnQ6OmZp
bGwoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAg
ICAgICAgICAgICAgZDJkQ29udGV4dC0+U2V0VHJhbnNmb3JtKGN0bSk7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGlmICghbV9jYWNoZWRIYXNoIHx8ICFtX2dyYWRpZW50KQotICAgICAg
ICAgICAgICAgIGdlbmVyYXRlR3JhZGllbnQoZDJkQ29udGV4dCk7CisgICAgICAgICAgICAvLyBG
SVhNRTogSWYgd2UgaGF2ZSBhIGJydXNoLCB3aHkgY2FuIHdlIHJlLXVzZSBpdD8gV2hhdCBndWFy
YW50ZWVzIGl0J3MgcmlnaHQgZm9yIHRoaXMgY29udGV4dD8KKyAgICAgICAgICAgIGlmICghbV9i
cnVzaCkKKyAgICAgICAgICAgICAgICBjcmVhdGVCcnVzaChkMmRDb250ZXh0KTsKIAogI2lmIEFT
U0VSVF9FTkFCTEVECiAgICAgICAgICAgICBkMmRDb250ZXh0LT5TZXRUYWdzKEdSQURJRU5UX0RS
QVdJTkcsIF9fTElORV9fKTsKICNlbmRpZgogCiAgICAgICAgICAgICBjb25zdCBEMkQxX1JFQ1Rf
RiBkMmRSZWN0ID0gcmVjdDsKLSAgICAgICAgICAgIGQyZENvbnRleHQtPkZpbGxSZWN0YW5nbGUo
JmQyZFJlY3QsIG1fZ3JhZGllbnQpOworICAgICAgICAgICAgZDJkQ29udGV4dC0+RmlsbFJlY3Rh
bmdsZSgmZDJkUmVjdCwgbV9icnVzaC5nZXQoKSk7CiAKICAgICAgICAgICAgIGlmIChuZWVkU2Nh
bGluZykKICAgICAgICAgICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGly
ZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
Q29udGV4dEltcGxEaXJlY3QyRC5jcHAKaW5kZXggZGM5ZjVmZTZmZDc0NzQxYTBjNTYyY2Y5Y2M3
YWVlMTE3MThmOTNjZC4uZDY0NDVkNzBjYjMwMzdlNzJhZTI5MDZkNjYzNmVmZmI0NDgxZDc1OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
Q29udGV4dEltcGxEaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAKQEAgLTE1NSwxMSArMTU1
LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFk
aWVudCkKIHsKLSAgICBDT01QdHI8SUQyRDFCcnVzaD4gcGxhdGZvcm1HcmFkaWVudCA9IGdyYWRp
ZW50LmNyZWF0ZVBsYXRmb3JtR3JhZGllbnRJZk5lY2Vzc2FyeShtX3BsYXRmb3JtQ29udGV4dC5y
ZW5kZXJUYXJnZXQoKSk7Ci0gICAgaWYgKCFwbGF0Zm9ybUdyYWRpZW50KQorICAgIGF1dG8gYnJ1
c2ggPSBncmFkaWVudC5jcmVhdGVCcnVzaChtX3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQo
KSk7CisgICAgaWYgKCFicnVzaCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRGlyZWN0MkQ6OmZp
bGxSZWN0V2l0aEdyYWRpZW50KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBwbGF0Zm9ybUdyYWRp
ZW50LmdldCgpKTsKKyAgICBEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoR3JhZGllbnQobV9wbGF0Zm9y
bUNvbnRleHQsIHJlY3QsIGJydXNoLmdldCgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJs
ZW5kTW9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxB
bmltYXRvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRv
ck1hYy5tbQppbmRleCA1ZjY1MzAzY2VhN2IxMGE5MDMxM2U3Yzk5OTNjOTc5N2YwYjMzOWVkLi4w
OWQ4MDU4YjViMjU2YmM1YjRjOWJhOWQ0YWIzYTFlNTVjNzRmZDFhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCkBAIC0yOCw3ICsyOCw3
IEBACiAKICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKIAotI2ltcG9ydCAiRmxvYXRQb2lu
dC5oIgorI2ltcG9ydCAiR3JhZGllbnQuaCIKICNpbXBvcnQgIkdyYXBoaWNzTGF5ZXIuaCIKICNp
bXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIk5TU2Nyb2xsZXJJbXBEZXRhaWxzLmgiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KaW5kZXggNDI1NzVmMGU0NWZl
YzIyYzlhYmZmNjc1MzE4YTkyMTdmNmRlZDJmNy4uZWUxODljZjk4NzNmMGMwYTAzNjNlMzZlMzc0
NDEzMGQ4NGMyYTk3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlP
Uy5tbQpAQCAtOTAwLDcgKzkwMCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UHJvZ3Jl
c3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUGFpbnRJCiAgICAgICAg
IHJldHVybiB0cnVlOwogCiAgICAgY29uc3QgaW50IHByb2dyZXNzQmFySGVpZ2h0ID0gOTsKLSAg
ICBjb25zdCBmbG9hdCB2ZXJ0aWNhbE9mZnNldCA9IChyZWN0LmhlaWdodCgpIC0gcHJvZ3Jlc3NC
YXJIZWlnaHQpIC8gMi4wOworICAgIGNvbnN0IGZsb2F0IHZlcnRpY2FsT2Zmc2V0ID0gKHJlY3Qu
aGVpZ2h0KCkgLSBwcm9ncmVzc0JhckhlaWdodCkgLyAyLjBmOwogCiAgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKHBhaW50SW5mby5jb250ZXh0KCkpOwogICAgIGlmIChy
ZWN0LndpZHRoKCkgPCAxMCB8fCByZWN0LmhlaWdodCgpIDwgOSkgewpAQCAtOTEyLDIxICs5MTIs
MjEgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJP
YmplY3QmIHJlbmRlcmVyLCBjb25zdCBQYWludEkKICAgICAvLyAxKSBEcmF3IHRoZSBwcm9ncmVz
cyBiYXIgdHJhY2suCiAgICAgLy8gMS4xKSBEcmF3IHRoZSB3aGl0ZSBiYWNrZ3JvdW5kIHdpdGgg
Z3JleSBncmFkaWVudCBib3JkZXIuCiAgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0ID0gcGFp
bnRJbmZvLmNvbnRleHQoKTsKLSAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygwLjY4KTsK
KyAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygwLjY4Zik7CiAgICAgY29udGV4dC5zZXRT
dHJva2VTdHlsZShTb2xpZFN0cm9rZSk7CiAKICAgICBjb25zdCBmbG9hdCB2ZXJ0aWNhbFJlbmRl
cmluZ1Bvc2l0aW9uID0gcmVjdC55KCkgKyB2ZXJ0aWNhbE9mZnNldDsKICAgICBhdXRvIHN0cm9r
ZUdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShHcmFkaWVudDo6TGluZWFyRGF0YSB7IEZsb2F0
UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24pLCBGbG9hdFBvaW50KHJl
Y3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgcHJvZ3Jlc3NCYXJIZWlnaHQgLSAx
KSB9KTsKLSAgICBzdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgbWFrZVNpbXBsZUNv
bG9yKDE0MSwgMTQxLCAxNDEpKTsKLSAgICBzdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAu
NDUsIG1ha2VTaW1wbGVDb2xvcigyMzgsIDIzOCwgMjM4KSk7Ci0gICAgc3Ryb2tlR3JhZGllbnQt
PmFkZENvbG9yU3RvcCgwLjU1LCBtYWtlU2ltcGxlQ29sb3IoMjM4LCAyMzgsIDIzOCkpOwotICAg
IHN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMS4wLCBtYWtlU2ltcGxlQ29sb3IoMTQxLCAx
NDEsIDE0MSkpOworICAgIHN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoeyAwLjBmLCBtYWtl
U2ltcGxlQ29sb3IoMTQxLCAxNDEsIDE0MSkgfSk7CisgICAgc3Ryb2tlR3JhZGllbnQtPmFkZENv
bG9yU3RvcCh7IDAuNDVmLCBtYWtlU2ltcGxlQ29sb3IoMjM4LCAyMzgsIDIzOCkgfSk7CisgICAg
c3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCh7IDAuNTVmLCBtYWtlU2ltcGxlQ29sb3IoMjM4
LCAyMzgsIDIzOCkgfSk7CisgICAgc3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCh7IDEuMGYs
IG1ha2VTaW1wbGVDb2xvcigxNDEsIDE0MSwgMTQxKSB9KTsKICAgICBjb250ZXh0LnNldFN0cm9r
ZUdyYWRpZW50KFdURk1vdmUoc3Ryb2tlR3JhZGllbnQpKTsKIAogICAgIGNvbnRleHQuc2V0Rmls
bENvbG9yKENvbG9yOjpibGFjayk7CiAKICAgICBQYXRoIHRyYWNrUGF0aDsKLSAgICBGbG9hdFJl
Y3QgdHJhY2tSZWN0KHJlY3QueCgpICsgMC4yNSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiAr
IDAuMjUsIHJlY3Qud2lkdGgoKSAtIDAuNSwgcHJvZ3Jlc3NCYXJIZWlnaHQgLSAwLjUpOworICAg
IEZsb2F0UmVjdCB0cmFja1JlY3QocmVjdC54KCkgKyAwLjI1ZiwgdmVydGljYWxSZW5kZXJpbmdQ
b3NpdGlvbiArIDAuMjVmLCByZWN0LndpZHRoKCkgLSAwLjVmLCBwcm9ncmVzc0JhckhlaWdodCAt
IDAuNWYpOwogICAgIEZsb2F0U2l6ZSByb3VuZGVkQ29ybmVyUmFkaXVzKDUsIDQpOwogICAgIHRy
YWNrUGF0aC5hZGRSb3VuZGVkUmVjdCh0cmFja1JlY3QsIHJvdW5kZWRDb3JuZXJSYWRpdXMpOwog
ICAgIGNvbnRleHQuZHJhd1BhdGgodHJhY2tQYXRoKTsKQEAgLTkzNiw5ICs5MzYsOSBAQCBib29s
IFJlbmRlclRoZW1lSU9TOjpwYWludFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYgcmVu
ZGVyZXIsIGNvbnN0IFBhaW50SQogICAgIHBhaW50SW5mby5jb250ZXh0KCkuY2xpcFJvdW5kZWRS
ZWN0KEZsb2F0Um91bmRlZFJlY3QoYm9yZGVyLCByb3VuZGVkQ29ybmVyUmFkaXVzLCByb3VuZGVk
Q29ybmVyUmFkaXVzLCByb3VuZGVkQ29ybmVyUmFkaXVzLCByb3VuZGVkQ29ybmVyUmFkaXVzKSk7
CiAKICAgICBmbG9hdCB1cHBlckdyYWRpZW50SGVpZ2h0ID0gcHJvZ3Jlc3NCYXJIZWlnaHQgLyAy
LjsKLSAgICBhdXRvIHVwcGVyR3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEdyYWRpZW50OjpM
aW5lYXJEYXRhIHsgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlv
biArIDAuNSksIEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24g
KyB1cHBlckdyYWRpZW50SGVpZ2h0IC0gMS41KSB9KTsKLSAgICB1cHBlckdyYWRpZW50LT5hZGRD
b2xvclN0b3AoMC4wLCBtYWtlU2ltcGxlQ29sb3IoMTMzLCAxMzMsIDEzMywgMTg4KSk7Ci0gICAg
dXBwZXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDEuMCwgbWFrZVNpbXBsZUNvbG9yKDE4LCAxOCwg
MTgsIDUxKSk7CisgICAgYXV0byB1cHBlckdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShHcmFk
aWVudDo6TGluZWFyRGF0YSB7IEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5n
UG9zaXRpb24gKyAwLjVmKSwgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQ
b3NpdGlvbiArIHVwcGVyR3JhZGllbnRIZWlnaHQgLSAxLjUpIH0pOworICAgIHVwcGVyR3JhZGll
bnQtPmFkZENvbG9yU3RvcCh7IDAuMGYsIG1ha2VTaW1wbGVDb2xvcigxMzMsIDEzMywgMTMzLCAx
ODgpIH0pOworICAgIHVwcGVyR3JhZGllbnQtPmFkZENvbG9yU3RvcCh7IDEuMGYsIG1ha2VTaW1w
bGVDb2xvcigxOCwgMTgsIDE4LCA1MSkgfSk7CiAgICAgY29udGV4dC5zZXRGaWxsR3JhZGllbnQo
V1RGTW92ZSh1cHBlckdyYWRpZW50KSk7CiAKICAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVj
dChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiwgcmVjdC53aWR0aCgpLCB1cHBl
ckdyYWRpZW50SGVpZ2h0KSk7CkBAIC05NDcsMjcgKzk0NywyNyBAQCBib29sIFJlbmRlclRoZW1l
SU9TOjpwYWludFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0
IFBhaW50SQogICAgIGlmIChyZW5kZXJQcm9ncmVzcy5pc0RldGVybWluYXRlKCkpIHsKICAgICAg
ICAgLy8gMikgRHJhdyB0aGUgcHJvZ3Jlc3MgYmFyLgogICAgICAgICBkb3VibGUgcG9zaXRpb24g
PSBjbGFtcFRvKHJlbmRlclByb2dyZXNzLnBvc2l0aW9uKCksIDAuMCwgMS4wKTsKLSAgICAgICAg
ZG91YmxlIGJhcldpZHRoID0gcG9zaXRpb24gKiByZWN0LndpZHRoKCk7Ci0gICAgICAgIGF1dG8g
YmFyR3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEdyYWRpZW50OjpMaW5lYXJEYXRhIHsgRmxv
YXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIDAuNSksIEZsb2F0
UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyBwcm9ncmVzc0Jhckhl
aWdodCAtIDEpIH0pOwotICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgbWFr
ZVNpbXBsZUNvbG9yKDE5NSwgMjE3LCAyNDcpKTsKLSAgICAgICAgYmFyR3JhZGllbnQtPmFkZENv
bG9yU3RvcCgwLjQ1LCBtYWtlU2ltcGxlQ29sb3IoMTE4LCAxNjQsIDIyOCkpOwotICAgICAgICBi
YXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuNDksIG1ha2VTaW1wbGVDb2xvcigxMTgsIDE2NCwg
MjI4KSk7Ci0gICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC41MSwgbWFrZVNpbXBs
ZUNvbG9yKDM2LCAxMTQsIDIxMCkpOwotICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9w
KDAuNTUsIG1ha2VTaW1wbGVDb2xvcigzNiwgMTE0LCAyMTApKTsKLSAgICAgICAgYmFyR3JhZGll
bnQtPmFkZENvbG9yU3RvcCgxLjAsIG1ha2VTaW1wbGVDb2xvcig1NywgMTQyLCAyNDQpKTsKKyAg
ICAgICAgZmxvYXQgYmFyV2lkdGggPSBwb3NpdGlvbiAqIHJlY3Qud2lkdGgoKTsKKyAgICAgICAg
YXV0byBiYXJHcmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoR3JhZGllbnQ6OkxpbmVhckRhdGEg
eyBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgMC41Ziks
IEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyBwcm9ncmVz
c0JhckhlaWdodCAtIDEpIH0pOworICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKHsg
MC4wZiwgbWFrZVNpbXBsZUNvbG9yKDE5NSwgMjE3LCAyNDcpIH0pOworICAgICAgICBiYXJHcmFk
aWVudC0+YWRkQ29sb3JTdG9wKHsgMC40NWYsIG1ha2VTaW1wbGVDb2xvcigxMTgsIDE2NCwgMjI4
KSB9KTsKKyAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCh7IDAuNDlmLCBtYWtlU2lt
cGxlQ29sb3IoMTE4LCAxNjQsIDIyOCkgfSk7CisgICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xv
clN0b3AoeyAwLjUxZiwgbWFrZVNpbXBsZUNvbG9yKDM2LCAxMTQsIDIxMCkgfSk7CisgICAgICAg
IGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoeyAwLjU1ZiwgbWFrZVNpbXBsZUNvbG9yKDM2LCAx
MTQsIDIxMCkgfSk7CisgICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoeyAxLjBmLCBt
YWtlU2ltcGxlQ29sb3IoNTcsIDE0MiwgMjQ0KSB9KTsKICAgICAgICAgY29udGV4dC5zZXRGaWxs
R3JhZGllbnQoV1RGTW92ZShiYXJHcmFkaWVudCkpOwogCiAgICAgICAgIGF1dG8gYmFyU3Ryb2tl
R3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEdyYWRpZW50OjpMaW5lYXJEYXRhIHsgRmxvYXRQ
b2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiksIEZsb2F0UG9pbnQocmVj
dC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyBwcm9ncmVzc0JhckhlaWdodCAtIDEp
IH0pOwotICAgICAgICBiYXJTdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgbWFrZVNp
bXBsZUNvbG9yKDk1LCAxMDcsIDE4MykpOwotICAgICAgICBiYXJTdHJva2VHcmFkaWVudC0+YWRk
Q29sb3JTdG9wKDAuNSwgbWFrZVNpbXBsZUNvbG9yKDY2LCAxMDYsIDE3NCwgMjQwKSk7Ci0gICAg
ICAgIGJhclN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMS4wLCBtYWtlU2ltcGxlQ29sb3Io
MzgsIDEwNCwgMTY2KSk7CisgICAgICAgIGJhclN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3Ao
eyAwLjBmLCBtYWtlU2ltcGxlQ29sb3IoOTUsIDEwNywgMTgzKSB9KTsKKyAgICAgICAgYmFyU3Ry
b2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCh7IDAuNWYsIG1ha2VTaW1wbGVDb2xvcig2NiwgMTA2
LCAxNzQsIDI0MCkgfSk7CisgICAgICAgIGJhclN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3Ao
eyAxLjBmLCBtYWtlU2ltcGxlQ29sb3IoMzgsIDEwNCwgMTY2KSB9KTsKICAgICAgICAgY29udGV4
dC5zZXRTdHJva2VHcmFkaWVudChXVEZNb3ZlKGJhclN0cm9rZUdyYWRpZW50KSk7CiAKICAgICAg
ICAgUGF0aCBiYXJQYXRoOwogICAgICAgICBpbnQgbGVmdCA9IHJlY3QueCgpOwogICAgICAgICBp
ZiAoIXJlbmRlclByb2dyZXNzLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAg
ICAgICAgICAgbGVmdCA9IHJlY3QubWF4WCgpIC0gYmFyV2lkdGg7Ci0gICAgICAgIEZsb2F0UmVj
dCBiYXJSZWN0KGxlZnQgKyAwLjI1LCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgMC4yNSwg
c3RkOjptYXgoYmFyV2lkdGggLSAwLjUsIDAuMCksIHByb2dyZXNzQmFySGVpZ2h0IC0gMC41KTsK
KyAgICAgICAgRmxvYXRSZWN0IGJhclJlY3QobGVmdCArIDAuMjVmLCB2ZXJ0aWNhbFJlbmRlcmlu
Z1Bvc2l0aW9uICsgMC4yNWYsIHN0ZDo6bWF4KGJhcldpZHRoIC0gMC41ZiwgMC4wZiksIHByb2dy
ZXNzQmFySGVpZ2h0IC0gMC41Zik7CiAgICAgICAgIGJhclBhdGguYWRkUm91bmRlZFJlY3QoYmFy
UmVjdCwgcm91bmRlZENvcm5lclJhZGl1cyk7CiAgICAgICAgIGNvbnRleHQuZHJhd1BhdGgoYmFy
UGF0aCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKaW5kZXggNTQ4MzU4M2FjNmFlMWE1MzZh
Yjg5MWI5M2FlZDVlZTVhNzdmMDk4Ny4uYTBmZDNjM2NiYTJiMDMwYzcxNDU0ODk4MTBiMTI0NzU2
YzJhY2EwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUdyYWRpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCkBAIC0yMzQsMTIgKzIzNCwxMCBAQCB2b2lk
IFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyLCBHcmFwaAogCiB2b2lkIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OmFk
ZFN0b3BzKEdyYWRpZW50RGF0YSogZ3JhZGllbnREYXRhLCBjb25zdCBWZWN0b3I8R3JhZGllbnQ6
OkNvbG9yU3RvcD4mIHN0b3BzLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7Cisg
ICAgQVNTRVJUKGdyYWRpZW50RGF0YSk7CiAgICAgQVNTRVJUKGdyYWRpZW50RGF0YS0+Z3JhZGll
bnQpOwotCi0gICAgZm9yIChHcmFkaWVudDo6Q29sb3JTdG9wIHN0b3AgOiBzdG9wcykgewotICAg
ICAgICBzdG9wLmNvbG9yID0gc3R5bGUuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoc3RvcC5j
b2xvcik7Ci0gICAgICAgIGdyYWRpZW50RGF0YS0+Z3JhZGllbnQtPmFkZENvbG9yU3RvcChzdG9w
KTsKLSAgICB9CisgICAgZm9yIChhdXRvJiBzdG9wIDogc3RvcHMpCisgICAgICAgIGdyYWRpZW50
RGF0YS0+Z3JhZGllbnQtPmFkZENvbG9yU3RvcCh7IHN0b3Aub2Zmc2V0LCBzdHlsZS5jb2xvckJ5
QXBwbHlpbmdDb2xvckZpbHRlcihzdG9wLmNvbG9yKSB9KTsKIH0KIAogR3JhZGllbnRTcHJlYWRN
ZXRob2QgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6cGxhdGZvcm1TcHJlYWRNZXRob2RGcm9t
U1ZHVHlwZShTVkdTcHJlYWRNZXRob2RUeXBlIG1ldGhvZCkgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgK
aW5kZXggMTQwYzcwZWQ1MzVhMDczMGFmNDgwOGM1NzlhYWRlOWRiNDg5Njg0MS4uZmZiOTAwYmRm
NGVkZWNhYjJlYjhhYjBmYjVmMjUzNGFhNjg0YjZiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgKQEAgLTIx
LDcgKzIxLDYgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJHcmFkaWVudC5oIgogI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWlu
ZXIuaCIKICNpbmNsdWRlICJTVkdHcmFkaWVudEVsZW1lbnQuaCIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0dyYWRpZW50RWxlbWVudC5jcHAKaW5kZXggMGM2MDdkODM4YWE1OTg5YzUxZWU5YjQ5ZmNj
MmUzNmQwOTQ0MWFhYi4uNTgzNzAxODA2ZjdhNWVjNmU5MzU0ZWQwMTRhYWU3NTk2OTNhMzZiZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5jcHAKQEAgLTEwMiwxOCAr
MTAyLDExIEBAIFZlY3RvcjxHcmFkaWVudDo6Q29sb3JTdG9wPiBTVkdHcmFkaWVudEVsZW1lbnQ6
OmJ1aWxkU3RvcHMoKQogewogICAgIFZlY3RvcjxHcmFkaWVudDo6Q29sb3JTdG9wPiBzdG9wczsK
ICAgICBmbG9hdCBwcmV2aW91c09mZnNldCA9IDAuMGY7Ci0KICAgICBmb3IgKGF1dG8mIHN0b3Ag
OiBjaGlsZHJlbk9mVHlwZTxTVkdTdG9wRWxlbWVudD4oKnRoaXMpKSB7Ci0gICAgICAgIGNvbnN0
IENvbG9yJiBjb2xvciA9IHN0b3Auc3RvcENvbG9ySW5jbHVkaW5nT3BhY2l0eSgpOwotCi0gICAg
ICAgIC8vIEZpZ3VyZSBvdXQgcmlnaHQgbW9ub3RvbmljIG9mZnNldC4KLSAgICAgICAgZmxvYXQg
b2Zmc2V0ID0gc3RvcC5vZmZzZXQoKTsKLSAgICAgICAgb2Zmc2V0ID0gc3RkOjptaW4oc3RkOjpt
YXgocHJldmlvdXNPZmZzZXQsIG9mZnNldCksIDEuMGYpOwotICAgICAgICBwcmV2aW91c09mZnNl
dCA9IG9mZnNldDsKLQotICAgICAgICBzdG9wcy5hcHBlbmQoR3JhZGllbnQ6OkNvbG9yU3RvcChv
ZmZzZXQsIGNvbG9yKSk7CisgICAgICAgIGF1dG8gbW9ub3RvbmljYWxseUluY3JlYXNpbmdPZmZz
ZXQgPSBzdGQ6OmNsYW1wKHN0b3Aub2Zmc2V0KCksIHByZXZpb3VzT2Zmc2V0LCAxLjBmKTsKKyAg
ICAgICAgcHJldmlvdXNPZmZzZXQgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ09mZnNldDsKKyAg
ICAgICAgc3RvcHMuYXBwZW5kKHsgbW9ub3RvbmljYWxseUluY3JlYXNpbmdPZmZzZXQsIHN0b3Au
c3RvcENvbG9ySW5jbHVkaW5nT3BhY2l0eSgpIH0pOwogICAgIH0KLQogICAgIHJldHVybiBzdG9w
czsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404073</attachid>
            <date>2020-07-11 15:41:48 -0700</date>
            <delta_ts>2020-07-11 16:12:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214221-20200711154147.patch</filename>
            <type>text/plain</type>
            <size>78234</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0MjcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGY3MDdmNzU2YmQ1NzVl
NDQ5M2M1OWMwZDM0YjI2NzdhMTkzODA0ZC4uMTI5YjY2MTk5NWRlYjY1NGRkNGExNmZmY2RmZWZl
NGE4MTJlYjFkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MyBAQAorMjAyMC0wNy0xMSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxpZnkgYW5kIGltcHJv
dmUgR3JhZGllbnQsIHNvbWUgb3RoZXIgc21hbGwgY29sb3ItcmVsYXRlZCByZW1vdmFscworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0MjIxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBjc3MvQ1NTR3Jh
ZGllbnRWYWx1ZS5jcHA6IFJlbW92ZWQgc29tZSB1bm5lZWRlZCBpbmNsdWRlcy4KKworICAgICAg
ICAqIGh0bWwvQ29sb3JJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3JJbnB1
dFR5cGU6OmN1cnJlbnRDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcklu
cHV0VHlwZTo6c2hvdWxkU2hvd1N1Z2dlc3Rpb25zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBodG1sL0NvbG9ySW5wdXRUeXBlLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAg
ICAqIGh0bWwvSFRNTERvY3VtZW50LmNwcDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlIG9mIEhh
c2hUb29scy5oLgorCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzR3JhZGllbnQ6OmNyZWF0ZSk6IE1vdmVkIHRoZXNlIGZ1
bmN0aW9ucyBvdXQgb2YgdGhlCisgICAgICAgIGhlYWRlciBzaW5jZSBpbmxpbmluZyBzaG91bGQg
YmUgdGhlIHNhbWUgb3IgYmV0dGVyIHdpdGggdGhlbSBoZXJlLgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzR3JhZGllbnQ6On5DYW52YXNHcmFkaWVudCk6IE1vdmVkIHRoaXMgb3V0IG9mIHRoZQor
ICAgICAgICBoZWFkZXIgc28gd2UgZG9uJ3QgbmVlZCB0byBpbmNsdWRlIEdyYWRpZW50LmggaW4g
dGhlIGhlYWRlci4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0dyYWRpZW50OjphZGRDb2xvclN0
b3ApOiBVcGRhdGVkIGZvciBjaGFuZ2UgdG8KKyAgICAgICAgR3JhZGllbnQ6OmFkZENvbG9yU3Rv
cCBhbmQgbW92ZSBDb2xvciByYXRoZXIgdGhhbiBjb3B5aW5nIGl0LgorCisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzR3JhZGllbnQuaDogUmVtb3ZlZCBpbmNsdWRlIG9mIEdyYWRpZW50Lmgu
CisgICAgICAgIE1vdmVkIHRoaW5ncyBvdXQgb2YgdGhlIGhlYWRlciB0byBtYWtlIHRoYXQgd29y
ay4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzOjpidWlsZEFycmF5Rm9yQ2FudmFzR3JhZGllbnQpOiBS
ZW1vdmVkCisgICAgICAgIHVzZSBvZiBHcmFkaWVudDo6dHlwZSBhbmQgaW5zdGVhZCB1bmlmeSB0
aGUgdHlwZSBzdHJpbmcgY29kZSB3aXRoCisgICAgICAgIHRoZSBjb2RlIHRoYXQgaW50ZXJwcmV0
cyB0aGUgZGF0YSBmb3IgdGhlIGRpZmZlcmVudCB0eXBlcy4KKworICAgICAgICAqIHBhZ2UvRnJh
bWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cmVjYWxjdWxhdGVTY3Jv
bGxiYXJPdmVybGF5U3R5bGUpOiBSZWZhY3RvcmVkCisgICAgICAgIHRvIGVsaW1pbmF0ZSB0aGUg
bXVsdGlwbGUgcmVkdW5kYW50IGNvZGUgcGF0aHMsIG90aGVyd2lzaW5nIGxlYXZpbmcKKyAgICAg
ICAgdGhlIGxvZ2ljIHVuY2hhbmdlZC4KKworICAgICAgICAqIHBsYXRmb3JtL0NvbG9yQ2hvb3Nl
ckNsaWVudC5oOiBSZW1vdmUgdW5uZWVkZWQgaW5jbHVkZXMgYW5kIHVudXNlZAorICAgICAgICBj
dXJyZW50Q29sb3IgYW5kIHNob3VsZFNob3dTdWdnZXN0aW9ucyBmdW5jdGlvbnMuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFkaWVudDo6Y3JlYXRlKTogUmVtb3ZlZCB1bm5lZWRlZCBjcmVhdGUgZnVuY3Rpb24gdGhhdAor
ICAgICAgICB0YWtlcyBhIENvbmljRGF0YSwgcmVwbGFjaW5nIGl0IHdpdGggb25lIHRoYXQgdGFr
ZXMgdGhlIHZhcmlhbnQgRGF0YS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpHcmFkaWVu
dCk6IFJlbW92ZWQgdGhlIHBsYXRmb3JtSW5pdCBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYWRpZW50Ojp+R3JhZGllbnQpOiBSZW1vdmVkIHRoZSBwbGF0b2Zvcm1EZXN0cm95IGZ1bmN0
aW9uLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnR5cGUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmFkZENvbG9yU3RvcCk6IFRha2UgYW4gcnZhbHVl
IHJlZmVyZW5jZSB0byBjdXQgZG93bgorICAgICAgICBhIGxpdHRsZSBiaXQgb24gcmVmZXJlbmNl
IGNvdW50IGNodXJuLiBSZXBsYWNlZCB0aGUgcGxhdGZvcm1EZXN0cm95CisgICAgICAgIGZ1bmN0
aW9uIHdpdGggYSBuZXcgc3RvcHNDaGFuZ2VkIGZ1bmN0aW9uLiBSZW1vdmVkIGFuIHVubmVlZGVk
IG92ZXJsb2FkCisgICAgICAgIHRoYXQgdGFrZXMgdGhlIHR3byBwYXJ0cyBvZiBhIENvbG9yU3Rv
cCBzZXBhcmF0ZWx5LgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNldFNvcnRlZENvbG9y
U3RvcHMpOiBVc2Ugc3RvcHNDaGFuZ2VkLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNv
cnRTdG9wcyBjb25zdCk6IFNpbXBsaWZ5IGEgYml0LCB1c2luZyBhIGxhbWJkYS4KKyAgICAgICAg
QWxzbyBnYXZlIHRoaXMgYSBzaG9ydGVyIG5hbWU7IGl0IHN0aWxsIG9wdGltaXplcyBieSBub3Qg
c29ydGluZyBpZgorICAgICAgICB0aGUgdmVjdG9yIGlzIGFscmVhZHkgc29ydGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhZGllbnQ6Omhhc0FscGhhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYWRpZW50OjpzZXRTcHJlYWRNZXRob2QpOiBSZW1vdmVkIHNvbWUgc2xpZ2h0
bHkgb3ZlcnplYWxvdXMKKyAgICAgICAgY29kZSBjaGVja2luZyB0aGlzIGlzbid0IHVzZWQgYWZ0
ZXIgY3JlYXRpbmcgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGdyYWRpZW50LgorICAgICAgICBEZWNp
ZGVkIG5vdCB0byBib3RoZXIgd2l0aCB0aGlzIGZvciBub3cuCisgICAgICAgIChXZWJDb3JlOjpH
cmFkaWVudDo6c2V0R3JhZGllbnRTcGFjZVRyYW5zZm9ybSk6IFR3ZWFrZWQgZm9ybWF0dGluZy4K
KyAgICAgICAgKFdlYkNvcmU6OmFkZCk6IEFkZGVkIG92ZXJsb2FkcyB0byBhZGQoSGFzaGVyJikg
c28gd2UgY2FuIHVzZSBjb21wdXRlSGFzaC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50Ojpo
YXNoIGNvbnN0KTogVXNlIGNvbXB1dGVIYXNoIGluc3RlYWQgb2YgaGFzaE1lbW9yeS4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50Lmg6IFVzZSBSZXRhaW5QdHIsIENPTVB0
ciwgYW5kIFJlZlB0ciBpbnN0ZWFkCisgICAgICAgIG9mIG1hbnVhbGx5IG1hbmFnaW5nIHRoZSBs
aWZldGltZXMgb2YgdGhlIHBsYXRmb3JtLXNwZWNpZmljIHVuZGVybHlpbmcKKyAgICAgICAgZ3Jh
ZGllbnQgb2JqZWN0cy4gQWxzbyByZW1vdmVkIHRoZSB1bmhlbHBmdWwgUGxhdGZvcm1HcmFkaWVu
dCB0eXBlLiBUaGlzCisgICAgICAgIHBhdHRlcm4sIGFsbCB0b28gY29tbW9uIGluIG91ciBwbGF0
Zm9ybSBsaWJyYXJ5LCBwcm92aWRlcyBubyB1c2VmdWwKKyAgICAgICAgYWJzdHJhY3Rpb24gaGVy
ZS4gUmVtb3ZlZCB1bm5lZWRlZCBjb25zdHJ1Y3RvcnMgZnJvbSBDb2xvclN0b3AuCisgICAgICAg
IFVwZGF0ZWQgZm9yIGNoYW5nZXMgYWJvdmUuIEFkZGVkIHBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0
aW9ucyBjcmVhdGVCcnVzaCwKKyAgICAgICAgY3JlYXRlUGF0dGVybiwgYW5kIGNyZWF0ZUNHR3Jh
ZGllbnQuIFNpbXBsaWZ5IGVuY29kaW5nIGFuZCBkZWNvZGluZyBieQorICAgICAgICB0YWtpbmcg
YWR2YW50YWdlIG9mIHRoZSBzdXBwb3J0IGZvciBlbmNvZGluZy9kZWNvZGluZyB2YXJpYW50cy4K
KyAgICAgICAgUmVtb3ZlIHRoZSBlbnVtIEdyYWRpZW50OjpUeXBlIGVudGlyZWx5LiBSZW1vdmVk
IHRoZSBpbnZhbGlkYXRlSGFzaAorICAgICAgICBmdW5jdGlvbiBiZWNhdXNlIGl0J3Mgb25seSB1
c2VkIGluIGEgZmV3IHNldHRlcnMgYW5kIHNldHRpbmcgdGhlIGhhc2gKKyAgICAgICAgdG8gMCBp
cyBhIGZpbmUgd2F5IHRvIHdyaXRlIGl0IHRoZXJlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSk6IE1vdmVkIGhlcmUgZnJvbQorICAgICAg
ICB0aGUgaGVhZGVyIHNvIHdlIGRvbid0IG5lZWQgdG8gaW5jbHVkZSBHcmFkaWVudC5oIGluIHRo
ZSBoZWFkZXIuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6fkdyYXBo
aWNzQ29udGV4dFN0YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6b3BlcmF0b3I9KTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuaDogUmVtb3ZlZCBpbmNsdWRlIG9mIEdyYWRpZW50LmguCisgICAg
ICAgIE1vdmVkIHRoaW5ncyBvdXQgb2YgdGhlIGhlYWRlciB0byBtYWtlIHRoYXQgd29yay4KKwor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpGaWxsU291cmNlOjpGaWxsU291cmNlKTogVXNlIGNy
ZWF0ZVBhdHRlcm4gaW5zdGVhZCBvZgorICAgICAgICBjcmVhdGVQbGF0Zm9ybUdyYWRpZW50Lgor
ICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OlN0cm9rZVNvdXJjZTo6U3Ryb2tlU291cmNlKTogRGl0
dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzdG9wc0NoYW5nZWQpOiBSZW5hbWVkIGZy
b20gcGxhdGZvcm1EZXN0cm95LgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmNyZWF0ZVBh
dHRlcm4pOiBSZW5hbWVkIGZyb20gY3JlYXRlUGxhdGZvcm1HcmFkaWVudC4KKyAgICAgICAgQ2hh
bmdlZCB0byByZXR1cm4gYSBSZWZQdHIgaW5zdGVhZCBvZiBhIHJhdyBwb2ludGVyIHRoZSBjYWxs
ZXIgbmVlZHMgdG8KKyAgICAgICAgYWRvcHQgYXQgZWFjaCBjYWxsIHNpdGUuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFkaWVudDo6ZmlsbCk6IFVzZSBjcmVhdGVQYXR0ZXJuLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0KTogRGl0dG8u
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzdG9wc0NoYW5nZWQpOiBSZW5hbWVkIGZyb20gcGxhdGZv
cm1EZXN0cm95LCBhbmQKKyAgICAgICAgc2ltcGxpZmllZCBpbXBsZW1lbnRhdGlvbiBub3cgdGhh
dCB3ZSB1c2UgUmV0YWluUHRyLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmNyZWF0ZUNH
R3JhZGllbnQpOiBSZW5hbWVkIGZyb20gcGxhdGZvcm1HcmFkaWVudCwKKyAgICAgICAgZ290IHJp
ZCBvZiB0aGUgcmV0dXJuIHZhbHVlLCBhbmQgbWFkZSBpdCBjYWxsZXIgcmVzcG9uc2liaWxpdHkg
dG8gb25seQorICAgICAgICBjYWxsIHRoaXMgd2hlbiBhIGdyYWRlaXRuIG5lZWRzIHRvIGJlIGFs
bG9jYXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpwYWludCk6IFVwZGF0ZWQgdG8g
dXNlIHRoZSBhYm92ZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmNwcDogQWRkIGluY2x1ZGUgb2YgR3JhZGllbnQuaC4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmg6CisgICAgICAg
IEFkZGVkIGluY2x1ZGUgb2YgR3JhZGllbnQuaCBzaW5jZSB0aGUgZnVuY3Rpb24gdGVtcGxhdGVz
IGluIHRoaXMgZmlsZQorICAgICAgICBlbmNvZGUgYW5kIGRlY29kZSBncmFkaWVudHMuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJh
dGlvblJlY29yZGVyLmNwcDoKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmZpbGxSZWN0KTogVXNlIGNyZWF0ZVBhdHRlcm4uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRp
cmVjdDJEOjpGaWxsU291cmNlOjpGaWxsU291cmNlKTogVXNlIGNyZWF0ZUJydXNoCisgICAgICAg
IChXZWJDb3JlOjpEaXJlY3QyRDo6U3Ryb2tlU291cmNlOjpTdHJva2VTb3VyY2UpOiBEaXR0by4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzdG9wc0NoYW5nZWQpOiBSZW5hbWVkIGZyb20g
cGxhdGZvcm1EZXN0cm95IGFuZAorICAgICAgICBzaW1wbGlmaWVkIGltcGxlbWVudGF0aW9uIG5v
dyB0aGF0IHdlIHVzZSBDT01QdHIuCisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGxhdGZv
cm1HcmFkaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6Y3JlYXRl
UGxhdGZvcm1HcmFkaWVudElmTmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYWRpZW50OjpjcmVhdGVCcnVzaCk6IFJlbmFtZWQgZnJvbSBnZW5lcmF0ZUdyYWRpZW50IGFu
ZAorICAgICAgICBhZGRlZCBhIHJldHVybiB2YWx1ZS4gU2ltcGxpZmllZCBub3cgdGhhdCB3ZSB1
c2UgQ09NUHRyLCBvcHRpbWl6ZWQKKyAgICAgICAgdGhlIGNvZGUgYSBiaXQsIGFuZCBhZGRlZCBz
b21lIEZJWE1FIGFib3V0IG1pc3Rha2VzIEkgbm90aWNlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YWRpZW50OjpmaWxsKTogVXNlIGNyZWF0ZUJydXNoIGFuZCBtX2JydXNoLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUmVjdCk6IFVz
ZSBjcmVhdGVCcnVzaC4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1h
Yy5tbTogQWRkZWQgaW5jbHVkZSBvZiBHcmFkaWVudC5oLgorCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRoZW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBh
aW50UHJvZ3Jlc3NCYXIpOiBVcGRhdGVkIGZvciBjaGFuZ2VzIHRvCisgICAgICAgIGFkZENvbG9y
U3RvcC4gQWxzbyByZW1vdmUgYSBsb3Qgb2YgdW5uZWNlc3NhcnkgY29udmVyc2lvbiBmcm9tIGZs
b2F0CisgICAgICAgIHRvIGRvdWJsZSBhbmQgYmFjayB0byBmbG9hdC4KKworICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphZGRTdG9wcyk6IFVwZGF0ZSB0byBtYWtl
CisgICAgICAgIGFuZCBtb3ZlIGEgbmV3IGNvbG9yIHN0b3AgaW5zdGVhZCBvZiBjb3B5aW5nIGl0
LCBtb2RpZnlpbmcgaXQgaW4KKyAgICAgICAgcGxhY2UsIGFuZCB0aGVuIGNvcHlpbmcgaXQgYWdh
aW4uCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNw
cDogUmVtb3ZlZCBpbmNsdWRlIG9mCisgICAgICAgIEdyYWRpZW50LmguCisKKyAgICAgICAgKiBz
dmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dyYWRpZW50
RWxlbWVudDo6YnVpbGRTdG9wcyk6IFVzZSBzdGQ6OmNsYW1wIHRvIGNvbnZlcnQKKyAgICAgICAg
dGhlIG9mZnNldHMgaW50byBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgb25lcyBpbiBhIG1vcmUg
ZGlyZWN0IHdheSwKKyAgICAgICAgdXNpbmcgdmFyaWFibGUgbmFtZXMgaW5zdGVhZCBvZiBjb21t
ZW50cyB0byBjbGFyaWZ5IHdoYXQgd2UgYXJlIGRvaW5nLgorCiAyMDIwLTA3LTExICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgbGl2ZSByYW5nZXMgZnJv
bSBBY2Nlc3NpYmlsaXR5T2JqZWN0LmgsIEFjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaCwg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oLCBBWElzb2xhdGVkT2JqZWN0LmgKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAppbmRleCAxMDQyZmEzYjMxOWM1OThkMmI4Yjgw
ODI1MGQxNDUzMTllNDU3ZDI3Li44YmE5OWJkMGUxNThiNDQzOWIyZDE2YTk2MWZlY2RjMTgzZDA0
M2E2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCkBAIC0zMCw4ICsz
MCw2IEBACiAjaW5jbHVkZSAiQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5oIgogI2luY2x1ZGUg
IkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJDb2xvckJsZW5kaW5nLmgiCi0jaW5jbHVk
ZSAiRmxvYXRTaXplLmgiCi0jaW5jbHVkZSAiR3JhZGllbnQuaCIKICNpbmNsdWRlICJHcmFkaWVu
dEltYWdlLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUGFpci5o
IgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9Db2xvcklucHV0VHlwZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmNwcAppbmRleCA5OTI2MzQ0YTA5ZDZk
OGEyMDUyOTgxMDM1ODA0YzYxNTBiNWM4ZDZiLi45YWIyZmVlZDk2MzY3MjcyYWQ5YTA3MThmMGNj
ZDk1ZDg1YzlhMTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRU
eXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmNwcApAQCAt
MjcwLDIxICsyNzAsNiBAQCBJbnRSZWN0IENvbG9ySW5wdXRUeXBlOjplbGVtZW50UmVjdFJlbGF0
aXZlVG9Sb290VmlldygpIGNvbnN0CiAgICAgcmV0dXJuIGVsZW1lbnQoKS0+ZG9jdW1lbnQoKS52
aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhlbGVtZW50KCktPnJlbmRlcmVyKCktPmFic29sdXRl
Qm91bmRpbmdCb3hSZWN0KCkpOwogfQogCi1Db2xvciBDb2xvcklucHV0VHlwZTo6Y3VycmVudENv
bG9yKCkKLXsKLSAgICByZXR1cm4gdmFsdWVBc0NvbG9yKCk7Ci19Ci0KLWJvb2wgQ29sb3JJbnB1
dFR5cGU6OnNob3VsZFNob3dTdWdnZXN0aW9ucygpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKERBVEFM
SVNUX0VMRU1FTlQpCi0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQo
KS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihsaXN0QXR0cik7Ci0jZWxzZQot
ICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCiBWZWN0b3I8Q29sb3I+IENvbG9ySW5wdXRU
eXBlOjpzdWdnZXN0ZWRDb2xvcnMoKSBjb25zdAogewogICAgIFZlY3RvcjxDb2xvcj4gc3VnZ2Vz
dGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmgKaW5kZXggOWEzYzdiNzE3MzUx
MDU5ZTY0ZmU0MTVlOTE4MGM0NTJlM2E5YjNjNC4uZjc0ZDc2ZjFiOWZmNTA4NDI2YjIxNDRhMWZh
NWE4YmEyNDBjZTcwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9Db2xvcklucHV0
VHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5cGUuaApAQCAtNDgs
OCArNDgsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkQ2hvb3NlQ29sb3IoY29uc3QgQ29sb3Im
KSBmaW5hbDsKICAgICB2b2lkIGRpZEVuZENob29zZXIoKSBmaW5hbDsKICAgICBJbnRSZWN0IGVs
ZW1lbnRSZWN0UmVsYXRpdmVUb1Jvb3RWaWV3KCkgY29uc3QgZmluYWw7Ci0gICAgQ29sb3IgY3Vy
cmVudENvbG9yKCkgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRTaG93U3VnZ2VzdGlvbnMoKSBjb25z
dCBmaW5hbDsKICAgICBWZWN0b3I8Q29sb3I+IHN1Z2dlc3RlZENvbG9ycygpIGNvbnN0IGZpbmFs
OwogICAgIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgaXNL
ZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3QgZmluYWw7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxEb2N1bWVudC5jcHAKaW5kZXggN2YyNWMzNjgyYTM2MWU0N2U1ZjkwZTQ4YjQyZWQy
YjI4OTJjNzlmYy4uZWRhY2YyNGQ0YTJhNGNjZDU2ZTQyNDBlMDU4MTA0OWY4MmYzOTY0NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcApAQCAtNzQsNyArNzQsNiBAQAogI2luY2x1
ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSGFzaFRvb2xzLmgiCiAjaW5jbHVkZSAi
U2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRl
IDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzR3JhZGllbnQuY3BwCmluZGV4IGNhNzg3YzM2Yzg1MWQ4ZjBlZmNkYTI3YzRmNjVhNDY2
YWQ5MTU4MzIuLjc1ZTRhZTEyOWY3MmNjYTZmNGQ1YmY2NjdjNTI0NzliNzI3MGI4OGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5jcHAKQEAgLTI5LDYg
KzI5LDcgQEAKIAogI2luY2x1ZGUgIkNhbnZhc0Jhc2UuaCIKICNpbmNsdWRlICJDYW52YXNTdHls
ZS5oIgorI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NDQsNiArNDUsMTggQEAgQ2FudmFzR3JhZGllbnQ6OkNhbnZhc0dyYWRpZW50KGNvbnN0IEZsb2F0
UG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2ludCYKIHsKIH0KIAorUmVmPENhbnZh
c0dyYWRpZW50PiBDYW52YXNHcmFkaWVudDo6Y3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBj
b25zdCBGbG9hdFBvaW50JiBwMSwgQ2FudmFzQmFzZSYgY2FudmFzQmFzZSkKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBDYW52YXNHcmFkaWVudChwMCwgcDEsIGNhbnZhc0Jhc2UpKTsKK30K
KworUmVmPENhbnZhc0dyYWRpZW50PiBDYW52YXNHcmFkaWVudDo6Y3JlYXRlKGNvbnN0IEZsb2F0
UG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGZsb2F0IHIxLCBDYW52
YXNCYXNlJiBjYW52YXNCYXNlKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENhbnZhc0dy
YWRpZW50KHAwLCByMCwgcDEsIHIxLCBjYW52YXNCYXNlKSk7Cit9CisKK0NhbnZhc0dyYWRpZW50
Ojp+Q2FudmFzR3JhZGllbnQoKSA9IGRlZmF1bHQ7CisKIEV4Y2VwdGlvbk9yPHZvaWQ+IENhbnZh
c0dyYWRpZW50OjphZGRDb2xvclN0b3AoZmxvYXQgdmFsdWUsIGNvbnN0IFN0cmluZyYgY29sb3JT
dHJpbmcpCiB7CiAgICAgaWYgKCEodmFsdWUgPj0gMCAmJiB2YWx1ZSA8PSAxKSkKQEAgLTU0LDcg
KzY3LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2FudmFzR3JhZGllbnQ6OmFkZENvbG9yU3RvcChm
bG9hdCB2YWx1ZSwgY29uc3QgU3RyaW5nJiBjb2xvclMKICAgICBpZiAoIWNvbG9yLmlzVmFsaWQo
KSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07CiAKLSAgICBtX2dy
YWRpZW50LT5hZGRDb2xvclN0b3AodmFsdWUsIGNvbG9yKTsKKyAgICBtX2dyYWRpZW50LT5hZGRD
b2xvclN0b3AoeyB2YWx1ZSwgV1RGTW92ZShjb2xvcikgfSk7CiAgICAgcmV0dXJuIHsgfTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmgKaW5kZXggYzM1
ZmJjZTE5NDVhMWU2MTYxYTVmMTZkNjEzY2M1ZTUzYjhmN2ZhMi4uYTIxNWYxNDFlY2JlZWUzMTc4
OTdmZWM0ZDRkNjJhYjFkZjM0NTk1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzR3JhZGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNHcmFkaWVudC5oCkBAIC0yNywyMiArMjcsMTggQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiRXhjZXB0aW9uT3IuaCIKLSNpbmNsdWRlICJHcmFkaWVudC5oIgorI2luY2x1ZGUgIkZs
b2F0UG9pbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDYW52YXNCYXNlOwor
Y2xhc3MgR3JhZGllbnQ7CiAKIGNsYXNzIENhbnZhc0dyYWRpZW50IDogcHVibGljIFJlZkNvdW50
ZWQ8Q2FudmFzR3JhZGllbnQ+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENhbnZhc0dyYWRp
ZW50PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBD
YW52YXNCYXNlJiBjYW52YXNCYXNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgQ2FudmFzR3JhZGllbnQocDAsIHAxLCBjYW52YXNCYXNlKSk7Ci0gICAgfQotICAgIHN0YXRp
YyBSZWY8Q2FudmFzR3JhZGllbnQ+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBwMCwgZmxvYXQg
cjAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBmbG9hdCByMSwgQ2FudmFzQmFzZSYgY2FudmFzQmFz
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENhbnZhc0dyYWRpZW50KHAw
LCByMCwgcDEsIHIxLCBjYW52YXNCYXNlKSk7Ci0gICAgfQorICAgIHN0YXRpYyBSZWY8Q2FudmFz
R3JhZGllbnQ+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2ludCYg
cDEsIENhbnZhc0Jhc2UmKTsKKyAgICBzdGF0aWMgUmVmPENhbnZhc0dyYWRpZW50PiBjcmVhdGUo
Y29uc3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgZmxv
YXQgcjEsIENhbnZhc0Jhc2UmKTsKKyAgICB+Q2FudmFzR3JhZGllbnQoKTsKIAogICAgIEdyYWRp
ZW50JiBncmFkaWVudCgpIHsgcmV0dXJuIG1fZ3JhZGllbnQ7IH0KICAgICBjb25zdCBHcmFkaWVu
dCYgZ3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX2dyYWRpZW50OyB9CkBAIC01NSw3ICs1MSw2
IEBAIHByaXZhdGU6CiAKICAgICBSZWY8R3JhZGllbnQ+IG1fZ3JhZGllbnQ7CiAgICAgQ2FudmFz
QmFzZSYgbV9jYW52YXM7Ci0KIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4IDdkOTI1NTI1Zjg1
OThkOGMyZDhjZTVhNjFiMGY3ZDhiNmFiY2Q1ODQuLjg3ZGVlZjQ5OTIxYzViNWZhMWVlYmYyYWY2
NTg1N2NlMTRmMmY2OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1
ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUg
IkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ2FudmFzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
YW52YXMuY3BwCmluZGV4IGMxMDNkZWEwODNkMDY5YTQzM2Q2YWMzZTc4YWM4MjdiMGJhMTQwYjAu
LjVjNTdiNjA1NzRlY2E1NzIyZDE1NDk5MmFmZGJkYzc1NWU2MzE5OWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCkBAIC0xMTU4LDE5ICsxMTU4LDE3
IEBAIFJlZjxKU09OOjpBcnJheU9mPEpTT046OlZhbHVlPj4gSW5zcGVjdG9yQ2FudmFzOjpidWls
ZEFjdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsCiAKIFJlZjxKU09OOjpBcnJheU9mPEpTT046OlZh
bHVlPj4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEFycmF5Rm9yQ2FudmFzR3JhZGllbnQoY29uc3Qg
Q2FudmFzR3JhZGllbnQmIGNhbnZhc0dyYWRpZW50KQogewotICAgIGNvbnN0IGF1dG8mIGdyYWRp
ZW50ID0gY2FudmFzR3JhZGllbnQuZ3JhZGllbnQoKTsKLSAgICAKLSAgICBTdHJpbmcgdHlwZSA9
IGdyYWRpZW50LnR5cGUoKSA9PSBHcmFkaWVudDo6VHlwZTo6UmFkaWFsID8gInJhZGlhbC1ncmFk
aWVudCJfcyA6IGdyYWRpZW50LnR5cGUoKSA9PSBHcmFkaWVudDo6VHlwZTo6TGluZWFyID8gImxp
bmVhci1ncmFkaWVudCJfcyA6ICJjb25pYy1ncmFkaWVudCJfczsKLQorICAgIEFTQ0lJTGl0ZXJh
bCB0eXBlID0gImxpbmVhci1ncmFkaWVudCJfczsKICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09O
OjpBcnJheU9mPGZsb2F0Pjo6Y3JlYXRlKCk7Ci0gICAgV1RGOjpzd2l0Y2hPbihncmFkaWVudC5k
YXRhKCksCi0gICAgICAgIFsmcGFyYW1ldGVyc10gKGNvbnN0IEdyYWRpZW50OjpMaW5lYXJEYXRh
JiBkYXRhKSB7CisgICAgV1RGOjpzd2l0Y2hPbihjYW52YXNHcmFkaWVudC5ncmFkaWVudCgpLmRh
dGEoKSwKKyAgICAgICAgWyZdIChjb25zdCBHcmFkaWVudDo6TGluZWFyRGF0YSYgZGF0YSkgewog
ICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50MC54KCkpOwogICAgICAg
ICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50MC55KCkpOwogICAgICAgICAgICAg
cGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50MS54KCkpOwogICAgICAgICAgICAgcGFyYW1l
dGVycy0+YWRkSXRlbShkYXRhLnBvaW50MS55KCkpOwogICAgICAgICB9LAotICAgICAgICBbJnBh
cmFtZXRlcnNdIChjb25zdCBHcmFkaWVudDo6UmFkaWFsRGF0YSYgZGF0YSkgeworICAgICAgICBb
Jl0gKGNvbnN0IEdyYWRpZW50OjpSYWRpYWxEYXRhJiBkYXRhKSB7CisgICAgICAgICAgICB0eXBl
ID0gInJhZGlhbC1ncmFkaWVudCJfczsKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0o
ZGF0YS5wb2ludDAueCgpKTsKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0oZGF0YS5w
b2ludDAueSgpKTsKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0oZGF0YS5zdGFydFJh
ZGl1cyk7CkBAIC0xMTc4LDcgKzExNzYsOCBAQCBSZWY8SlNPTjo6QXJyYXlPZjxKU09OOjpWYWx1
ZT4+IEluc3BlY3RvckNhbnZhczo6YnVpbGRBcnJheUZvckNhbnZhc0dyYWRpZW50KGNvbgogICAg
ICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50MS55KCkpOwogICAgICAgICAg
ICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLmVuZFJhZGl1cyk7CiAgICAgICAgIH0sCi0gICAg
ICAgIFsmcGFyYW1ldGVyc10gKGNvbnN0IEdyYWRpZW50OjpDb25pY0RhdGEmIGRhdGEpIHsKKyAg
ICAgICAgWyZdIChjb25zdCBHcmFkaWVudDo6Q29uaWNEYXRhJiBkYXRhKSB7CisgICAgICAgICAg
ICB0eXBlID0gImNvbmljLWdyYWRpZW50Il9zOwogICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRk
SXRlbShkYXRhLnBvaW50MC54KCkpOwogICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShk
YXRhLnBvaW50MC55KCkpOwogICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLmFu
Z2xlUmFkaWFucyk7CkBAIC0xMTg2LDcgKzExODUsNyBAQCBSZWY8SlNPTjo6QXJyYXlPZjxKU09O
OjpWYWx1ZT4+IEluc3BlY3RvckNhbnZhczo6YnVpbGRBcnJheUZvckNhbnZhc0dyYWRpZW50KGNv
bgogICAgICk7CiAKICAgICBhdXRvIHN0b3BzID0gSlNPTjo6QXJyYXlPZjxKU09OOjpWYWx1ZT46
OmNyZWF0ZSgpOwotICAgIGZvciAoYXV0byYgY29sb3JTdG9wIDogZ3JhZGllbnQuc3RvcHMoKSkg
eworICAgIGZvciAoYXV0byYgY29sb3JTdG9wIDogY2FudmFzR3JhZGllbnQuZ3JhZGllbnQoKS5z
dG9wcygpKSB7CiAgICAgICAgIGF1dG8gc3RvcCA9IEpTT046OkFycmF5T2Y8SlNPTjo6VmFsdWU+
OjpjcmVhdGUoKTsKICAgICAgICAgc3RvcC0+YWRkSXRlbShjb2xvclN0b3Aub2Zmc2V0KTsKICAg
ICAgICAgc3RvcC0+YWRkSXRlbShpbmRleEZvckRhdGEoc2VyaWFsaXphdGlvbkZvckNTUyhjb2xv
clN0b3AuY29sb3IpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggNTEyN2I0OTBm
NGM0NjkxMjk4OGZlYWY5MzY1NTQ0ZTZlYmQ2YmY2YS4uOTJhODA4OWY0ODZiOTBhYTY4OGFlZTNm
YmEyOWNjYjQ0ODEwYmI0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtMzUwLDMy
ICszNTAsMjcgQEAgdm9pZCBGcmFtZVZpZXc6OmRldGFjaEN1c3RvbVNjcm9sbGJhcnMoKQogCiB2
b2lkIEZyYW1lVmlldzo6cmVjYWxjdWxhdGVTY3JvbGxiYXJPdmVybGF5U3R5bGUoKQogewotICAg
IFNjcm9sbGJhck92ZXJsYXlTdHlsZSBvbGRPdmVybGF5U3R5bGUgPSBzY3JvbGxiYXJPdmVybGF5
U3R5bGUoKTsKLSAgICBPcHRpb25hbDxTY3JvbGxiYXJPdmVybGF5U3R5bGU+IGNsaWVudE92ZXJs
YXlTdHlsZSA9IGZyYW1lKCkucGFnZSgpID8gZnJhbWUoKS5wYWdlKCktPmNocm9tZSgpLmNsaWVu
dCgpLnByZWZlcnJlZFNjcm9sbGJhck92ZXJsYXlTdHlsZSgpIDogV1RGOjpudWxsb3B0OwotICAg
IGlmIChjbGllbnRPdmVybGF5U3R5bGUpIHsKLSAgICAgICAgaWYgKGNsaWVudE92ZXJsYXlTdHls
ZS52YWx1ZSgpICE9IG9sZE92ZXJsYXlTdHlsZSkKLSAgICAgICAgICAgIHNldFNjcm9sbGJhck92
ZXJsYXlTdHlsZShjbGllbnRPdmVybGF5U3R5bGUudmFsdWUoKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBTY3JvbGxiYXJPdmVybGF5U3R5bGUgY29tcHV0ZWRPdmVybGF5U3R5bGUg
PSBTY3JvbGxiYXJPdmVybGF5U3R5bGVEZWZhdWx0OwotCi0gICAgQ29sb3IgYmFja2dyb3VuZENv
bG9yID0gZG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IoKTsKLSAgICBpZiAoYmFja2dyb3VuZENvbG9y
LmlzVmFsaWQoKSkgewotICAgICAgICAvLyBSZWR1Y2UgdGhlIGJhY2tncm91bmQgY29sb3IgZnJv
bSBSR0IgdG8gYSBsaWdodG5lc3MgdmFsdWUKLSAgICAgICAgLy8gYW5kIGRldGVybWluZSB3aGlj
aCBzY3JvbGxiYXIgc3R5bGUgdG8gdXNlIGJhc2VkIG9uIGEgbGlnaHRuZXNzCi0gICAgICAgIC8v
IGhldXJpc3RpYy4KLSAgICAgICAgaWYgKGJhY2tncm91bmRDb2xvci5saWdodG5lc3MoKSA8PSAu
NWYgJiYgYmFja2dyb3VuZENvbG9yLmlzVmlzaWJsZSgpKQotICAgICAgICAgICAgY29tcHV0ZWRP
dmVybGF5U3R5bGUgPSBTY3JvbGxiYXJPdmVybGF5U3R5bGVMaWdodDsKLSAgICAgICAgZWxzZSBp
ZiAoIWJhY2tncm91bmRDb2xvci5pc1Zpc2libGUoKSAmJiB1c2VEYXJrQXBwZWFyYW5jZSgpKQot
ICAgICAgICAgICAgY29tcHV0ZWRPdmVybGF5U3R5bGUgPSBTY3JvbGxiYXJPdmVybGF5U3R5bGVM
aWdodDsKLSAgICB9Ci0KLSAgICBpZiAob2xkT3ZlcmxheVN0eWxlICE9IGNvbXB1dGVkT3Zlcmxh
eVN0eWxlKQotICAgICAgICBzZXRTY3JvbGxiYXJPdmVybGF5U3R5bGUoY29tcHV0ZWRPdmVybGF5
U3R5bGUpOworICAgIGF1dG8gc3R5bGUgPSBbJl0geworICAgICAgICBpZiAoYXV0byBwYWdlID0g
ZnJhbWUoKS5wYWdlKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGNsaWVudE92ZXJsYXlTdHls
ZSA9IHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLnByZWZlcnJlZFNjcm9sbGJhck92ZXJsYXlTdHls
ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiAqY2xpZW50T3ZlcmxheVN0eWxlOworICAgICAg
ICB9CisgICAgICAgIGF1dG8gYmFja2dyb3VuZCA9IGRvY3VtZW50QmFja2dyb3VuZENvbG9yKCk7
CisgICAgICAgIGlmIChiYWNrZ3JvdW5kLmlzVmlzaWJsZSgpKSB7CisgICAgICAgICAgICBpZiAo
YmFja2dyb3VuZC5saWdodG5lc3MoKSA8PSAuNWYpCisgICAgICAgICAgICAgICAgcmV0dXJuIFNj
cm9sbGJhck92ZXJsYXlTdHlsZUxpZ2h0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
aWYgKHVzZURhcmtBcHBlYXJhbmNlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFNjcm9sbGJh
ck92ZXJsYXlTdHlsZUxpZ2h0OworICAgICAgICB9CisgICAgICAgIHJldHVybiBTY3JvbGxiYXJP
dmVybGF5U3R5bGVEZWZhdWx0OworICAgIH0oKTsKKyAgICBpZiAoc2Nyb2xsYmFyT3ZlcmxheVN0
eWxlKCkgIT0gc3R5bGUpCisgICAgICAgIHNldFNjcm9sbGJhck92ZXJsYXlTdHlsZShzdHlsZSk7
CiB9CiAKICNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykKKwogdm9pZCBGcmFtZVZpZXc6OnJlY2Fs
Y3VsYXRlQmFzZUJhY2tncm91bmRDb2xvcigpCiB7CiAgICAgYm9vbCB1c2luZ0RhcmtBcHBlYXJh
bmNlID0gdXNlRGFya0FwcGVhcmFuY2UoKTsKQEAgLTM4OCw2ICszODMsNyBAQCB2b2lkIEZyYW1l
Vmlldzo6cmVjYWxjdWxhdGVCYXNlQmFja2dyb3VuZENvbG9yKCkKICAgICAgICAgYmFja2dyb3Vu
ZENvbG9yID0gQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKICAgICB1cGRhdGVCYWNrZ3JvdW5k
UmVjdXJzaXZlbHkoYmFja2dyb3VuZENvbG9yKTsKIH0KKwogI2VuZGlmCiAKIHZvaWQgRnJhbWVW
aWV3OjpjbGVhcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db2xvckNo
b29zZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbG9yQ2hvb3NlckNsaWVu
dC5oCmluZGV4IDliM2I4OTgxNjNlMjdiMGE2OTYyNDk1ZDIyN2I5YzliNTY5MWRiMmMuLjMxNjhm
ZWU1MmZhMGY0M2Q0YTRmOTY0NWQwNjFkYjQ2NjcyMzdiNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0NvbG9yQ2hvb3NlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0NvbG9yQ2hvb3NlckNsaWVudC5oCkBAIC0yNywxNyArMjcsMTYgQEAKICAqCiAg
Ki8KIAotI2lmbmRlZiBDb2xvckNob29zZXJDbGllbnRfaAotI2RlZmluZSBDb2xvckNob29zZXJD
bGllbnRfaAorI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xPUikKIAot
I2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb2xvcjsKK2Ns
YXNzIEludFJlY3Q7CiAKIGNsYXNzIENvbG9yQ2hvb3NlckNsaWVudCB7CiBwdWJsaWM6CkBAIC00
NiwxMyArNDUsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZENob29zZUNvbG9yKGNv
bnN0IENvbG9yJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRFbmRDaG9vc2VyKCkgPSAwOwog
ICAgIHZpcnR1YWwgSW50UmVjdCBlbGVtZW50UmVjdFJlbGF0aXZlVG9Sb290VmlldygpIGNvbnN0
ID0gMDsKLSAgICB2aXJ0dWFsIENvbG9yIGN1cnJlbnRDb2xvcigpID0gMDsKLSAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkU2hvd1N1Z2dlc3Rpb25zKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgVmVj
dG9yPENvbG9yPiBzdWdnZXN0ZWRDb2xvcnMoKSBjb25zdCA9IDA7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5QVVRfVFlQRV9DT0xPUikKLQotI2Vu
ZGlmIC8vIENvbG9yQ2hvb3NlckNsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFkaWVudC5jcHAKaW5kZXggYmQ3ZjY4YmJmMGIwNTE1YzA3M2EzNjc1YTRkN2E3
NjVjNDNjMzgxMi4uMTY0N2VkMTk4ZTFkZjQ0M2M5MDM5ZTkyMTM0ODdiMGM1YTVjZGFjNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcApAQCAtNDYs
NyArNDYsNyBAQCBSZWY8R3JhZGllbnQ+IEdyYWRpZW50OjpjcmVhdGUoUmFkaWFsRGF0YSYmIGRh
dGEpCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR3JhZGllbnQoV1RGTW92ZShkYXRhKSkpOwog
fQogCi1SZWY8R3JhZGllbnQ+IEdyYWRpZW50OjpjcmVhdGUoQ29uaWNEYXRhJiYgZGF0YSkKK1Jl
ZjxHcmFkaWVudD4gR3JhZGllbnQ6OmNyZWF0ZShEYXRhJiYgZGF0YSkKIHsKICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBHcmFkaWVudChXVEZNb3ZlKGRhdGEpKSk7CiB9CkBAIC01NCw0MCArNTQs
MTkgQEAgUmVmPEdyYWRpZW50PiBHcmFkaWVudDo6Y3JlYXRlKENvbmljRGF0YSYmIGRhdGEpCiBH
cmFkaWVudDo6R3JhZGllbnQoTGluZWFyRGF0YSYmIGRhdGEpCiAgICAgOiBtX2RhdGEoV1RGTW92
ZShkYXRhKSkKIHsKLSAgICBwbGF0Zm9ybUluaXQoKTsKIH0KIAogR3JhZGllbnQ6OkdyYWRpZW50
KFJhZGlhbERhdGEmJiBkYXRhKQogICAgIDogbV9kYXRhKFdURk1vdmUoZGF0YSkpCiB7Ci0gICAg
cGxhdGZvcm1Jbml0KCk7CiB9CiAgICAgCi1HcmFkaWVudDo6R3JhZGllbnQoQ29uaWNEYXRhJiYg
ZGF0YSkKK0dyYWRpZW50OjpHcmFkaWVudChEYXRhJiYgZGF0YSkKICAgICA6IG1fZGF0YShXVEZN
b3ZlKGRhdGEpKQogewotICAgIHBsYXRmb3JtSW5pdCgpOwogfQogCi1HcmFkaWVudDo6fkdyYWRp
ZW50KCkKLXsKLSAgICBwbGF0Zm9ybURlc3Ryb3koKTsKLX0KLQotYXV0byBHcmFkaWVudDo6dHlw
ZSgpIGNvbnN0IC0+IFR5cGUKLXsKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX2RhdGEsCi0g
ICAgICAgIFtdIChjb25zdCBMaW5lYXJEYXRhJikgewotICAgICAgICAgICAgcmV0dXJuIFR5cGU6
OkxpbmVhcjsKLSAgICAgICAgfSwKLSAgICAgICAgW10gKGNvbnN0IFJhZGlhbERhdGEmKSB7Ci0g
ICAgICAgICAgICByZXR1cm4gVHlwZTo6UmFkaWFsOwotICAgICAgICB9LAotICAgICAgICBbXSAo
Y29uc3QgQ29uaWNEYXRhJikgewotICAgICAgICAgICAgcmV0dXJuIFR5cGU6OkNvbmljOwotICAg
ICAgICB9Ci0gICAgKTsKLX0KK0dyYWRpZW50Ojp+R3JhZGllbnQoKSA9IGRlZmF1bHQ7CiAKIHZv
aWQgR3JhZGllbnQ6OmFkanVzdFBhcmFtZXRlcnNGb3JUaWxlZERyYXdpbmcoRmxvYXRTaXplJiBz
aXplLCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZykKIHsKQEAg
LTEzNCwxNDYgKzExMyw5MCBAQCBib29sIEdyYWRpZW50Ojppc1plcm9TaXplKCkgY29uc3QKICAg
ICApOwogfQogCi12b2lkIEdyYWRpZW50OjphZGRDb2xvclN0b3AoZmxvYXQgb2Zmc2V0LCBjb25z
dCBDb2xvciYgY29sb3IpCi17Ci0gICAgYWRkQ29sb3JTdG9wKHsgb2Zmc2V0LCBjb2xvciB9KTsK
LX0KLQotdm9pZCBHcmFkaWVudDo6YWRkQ29sb3JTdG9wKGNvbnN0IEdyYWRpZW50OjpDb2xvclN0
b3AmIHN0b3ApCit2b2lkIEdyYWRpZW50OjphZGRDb2xvclN0b3AoR3JhZGllbnQ6OkNvbG9yU3Rv
cCYmIHN0b3ApCiB7Ci0gICAgbV9zdG9wcy5hcHBlbmQoc3RvcCk7Ci0KKyAgICBtX3N0b3BzLmFw
cGVuZChXVEZNb3ZlKHN0b3ApKTsKICAgICBtX3N0b3BzU29ydGVkID0gZmFsc2U7Ci0KLSAgICBw
bGF0Zm9ybURlc3Ryb3koKTsKLSAgICBpbnZhbGlkYXRlSGFzaCgpOworICAgIG1fY2FjaGVkSGFz
aCA9IDA7CisgICAgc3RvcHNDaGFuZ2VkKCk7CiB9CiAKIHZvaWQgR3JhZGllbnQ6OnNldFNvcnRl
ZENvbG9yU3RvcHMoQ29sb3JTdG9wVmVjdG9yJiYgc3RvcHMpCiB7CiAgICAgbV9zdG9wcyA9IFdU
Rk1vdmUoc3RvcHMpOwotCiAgICAgbV9zdG9wc1NvcnRlZCA9IHRydWU7Ci0KLSAgICBwbGF0Zm9y
bURlc3Ryb3koKTsKLSAgICBpbnZhbGlkYXRlSGFzaCgpOworICAgIG1fY2FjaGVkSGFzaCA9IDA7
CisgICAgc3RvcHNDaGFuZ2VkKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlU3Rv
cHMoY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCYgYSwgY29uc3QgR3JhZGllbnQ6OkNvbG9yU3Rv
cCYgYikKLXsKLSAgICByZXR1cm4gYS5vZmZzZXQgPCBiLm9mZnNldDsKLX0KLQotdm9pZCBHcmFk
aWVudDo6c29ydFN0b3BzSWZOZWNlc3NhcnkoKQordm9pZCBHcmFkaWVudDo6c29ydFN0b3BzKCkg
Y29uc3QKIHsKICAgICBpZiAobV9zdG9wc1NvcnRlZCkKICAgICAgICAgcmV0dXJuOwotCiAgICAg
bV9zdG9wc1NvcnRlZCA9IHRydWU7Ci0KLSAgICBpZiAoIW1fc3RvcHMuc2l6ZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBzdGQ6OnN0YWJsZV9zb3J0KG1fc3RvcHMuYmVnaW4oKSwgbV9zdG9w
cy5lbmQoKSwgY29tcGFyZVN0b3BzKTsKLSAgICBpbnZhbGlkYXRlSGFzaCgpOwotfQotCi1ib29s
IEdyYWRpZW50OjpoYXNBbHBoYSgpIGNvbnN0Ci17Ci0gICAgZm9yIChjb25zdCBhdXRvJiBzdG9w
IDogbV9zdG9wcykgewotICAgICAgICBpZiAoIXN0b3AuY29sb3IuaXNPcGFxdWUoKSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKKyAgICBzdGQ6
OnN0YWJsZV9zb3J0KG1fc3RvcHMuYmVnaW4oKSwgbV9zdG9wcy5lbmQoKSwgW10gKGF1dG8mIGEs
IGF1dG8mIGIpIHsKKyAgICAgICAgcmV0dXJuIGEub2Zmc2V0IDwgYi5vZmZzZXQ7CisgICAgfSk7
CiB9CiAKIHZvaWQgR3JhZGllbnQ6OnNldFNwcmVhZE1ldGhvZChHcmFkaWVudFNwcmVhZE1ldGhv
ZCBzcHJlYWRNZXRob2QpCiB7Ci0gICAgLy8gRklYTUU6IFNob3VsZCBpdCBiZWNvbWUgbmVjZXNz
YXJ5LCBhbGxvdyBjYWxscyB0byB0aGlzIG1ldGhvZCBhZnRlciBtX2dyYWRpZW50IGhhcyBiZWVu
IHNldC4KLSAgICBBU1NFUlQobV9ncmFkaWVudCA9PSAwKTsKLQogICAgIGlmIChtX3NwcmVhZE1l
dGhvZCA9PSBzcHJlYWRNZXRob2QpCiAgICAgICAgIHJldHVybjsKLQogICAgIG1fc3ByZWFkTWV0
aG9kID0gc3ByZWFkTWV0aG9kOwotCi0gICAgaW52YWxpZGF0ZUhhc2goKTsKKyAgICBtX2NhY2hl
ZEhhc2ggPSAwOwogfQogCiB2b2lkIEdyYWRpZW50OjpzZXRHcmFkaWVudFNwYWNlVHJhbnNmb3Jt
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uKQogewog
ICAgIGlmIChtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbiA9PSBncmFkaWVudFNwYWNlVHJh
bnNmb3JtYXRpb24pCiAgICAgICAgIHJldHVybjsKLQogICAgIG1fZ3JhZGllbnRTcGFjZVRyYW5z
Zm9ybWF0aW9uID0gZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOworICAgIG1fY2FjaGVkSGFz
aCA9IDA7Cit9CiAKLSAgICBpbnZhbGlkYXRlSGFzaCgpOworc3RhdGljIHZvaWQgYWRkKEhhc2hl
ciYgaGFzaGVyLCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgLy8gRklYTUU6IFdlIGRvbid0
IHdhbnQgdG8gaGFzaCBhIGhhc2g7IGRvIGJldHRlci4KKyAgICBhZGQoaGFzaGVyLCBjb2xvci5o
YXNoKCkpOwogfQogCi11bnNpZ25lZCBHcmFkaWVudDo6aGFzaCgpIGNvbnN0CitzdGF0aWMgdm9p
ZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQogewotICAgIGlm
IChtX2NhY2hlZEhhc2gpCi0gICAgICAgIHJldHVybiBtX2NhY2hlZEhhc2g7CisgICAgYWRkKGhh
c2hlciwgcG9pbnQueCgpLCBwb2ludC55KCkpOworfQogCi0gICAgc3RydWN0IHsKLSAgICAgICAg
VHlwZSB0eXBlOwotICAgICAgICBGbG9hdFBvaW50IHBvaW50MDsKLSAgICAgICAgRmxvYXRQb2lu
dCBwb2ludDE7Ci0gICAgICAgIGZsb2F0IHN0YXJ0UmFkaXVzOwotICAgICAgICBmbG9hdCBlbmRS
YWRpdXM7Ci0gICAgICAgIGZsb2F0IGFzcGVjdFJhdGlvOwotICAgICAgICBmbG9hdCBhbmdsZVJh
ZGlhbnM7Ci0gICAgICAgIEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZDsKLSAgICAg
ICAgQWZmaW5lVHJhbnNmb3JtIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKLSAgICB9IHBh
cmFtZXRlcnM7CitzdGF0aWMgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtKQoreworICAgIGFkZChoYXNoZXIsIHRyYW5zZm9ybS5hKCksIHRy
YW5zZm9ybS5iKCksIHRyYW5zZm9ybS5jKCksIHRyYW5zZm9ybS5kKCksIHRyYW5zZm9ybS5lKCks
IHRyYW5zZm9ybS5mKCkpOworfQogCi0gICAgLy8gU3RyaW5nSGFzaGVyIHJlcXVpcmVzIHRoYXQg
dGhlIG1lbW9yeSBpdCBoYXNoZXMgYmUgYSBtdWx0aXBsZSBvZiB0d28gaW4gc2l6ZS4KLSAgICBD
T01QSUxFX0FTU0VSVCghKHNpemVvZihwYXJhbWV0ZXJzKSAlIDIpLCBHcmFkaWVudF9wYXJhbWV0
ZXJzX3NpemVfc2hvdWxkX2JlX211bHRpcGxlX29mX3R3byk7Ci0gICAgQ09NUElMRV9BU1NFUlQo
IShzaXplb2YoQ29sb3JTdG9wKSAlIDIpLCBDb2xvcl9zdG9wX3NpemVfc2hvdWxkX2JlX211bHRp
cGxlX29mX3R3byk7Ci0gICAgCi0gICAgLy8gRW5zdXJlIHRoYXQgYW55IHBhZGRpbmcgaW4gdGhl
IHN0cnVjdCBpcyB6ZXJvLWZpbGxlZCwgc28gaXQgd2lsbCBub3QgYWZmZWN0IHRoZSBoYXNoIHZh
bHVlLgotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFza2luZyBmb3IgdHJvdWJsZSwgYmVjYXVzZSBp
dCBpcyBhIG5vbnRyaXZpYWwgdHlwZS4KLSAgICBtZW1zZXQoc3RhdGljX2Nhc3Q8dm9pZCo+KCZw
YXJhbWV0ZXJzKSwgMCwgc2l6ZW9mKHBhcmFtZXRlcnMpKTsKLSAgICAKLSAgICBXVEY6OnN3aXRj
aE9uKG1fZGF0YSwKLSAgICAgICAgWyZwYXJhbWV0ZXJzXSAoY29uc3QgTGluZWFyRGF0YSYgZGF0
YSkgewotICAgICAgICAgICAgcGFyYW1ldGVycy5wb2ludDAgPSBkYXRhLnBvaW50MDsKLSAgICAg
ICAgICAgIHBhcmFtZXRlcnMucG9pbnQxID0gZGF0YS5wb2ludDE7Ci0gICAgICAgICAgICBwYXJh
bWV0ZXJzLnN0YXJ0UmFkaXVzID0gMDsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZW5kUmFkaXVz
ID0gMDsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuYXNwZWN0UmF0aW8gPSAwOwotICAgICAgICAg
ICAgcGFyYW1ldGVycy5hbmdsZVJhZGlhbnMgPSAwOwotICAgICAgICAgICAgcGFyYW1ldGVycy50
eXBlID0gVHlwZTo6TGluZWFyOwotICAgICAgICB9LAotICAgICAgICBbJnBhcmFtZXRlcnNdIChj
b25zdCBSYWRpYWxEYXRhJiBkYXRhKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLnBvaW50MCA9
IGRhdGEucG9pbnQwOwotICAgICAgICAgICAgcGFyYW1ldGVycy5wb2ludDEgPSBkYXRhLnBvaW50
MTsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuc3RhcnRSYWRpdXMgPSBkYXRhLnN0YXJ0UmFkaXVz
OwotICAgICAgICAgICAgcGFyYW1ldGVycy5lbmRSYWRpdXMgPSBkYXRhLmVuZFJhZGl1czsKLSAg
ICAgICAgICAgIHBhcmFtZXRlcnMuYXNwZWN0UmF0aW8gPSBkYXRhLmFzcGVjdFJhdGlvOwotICAg
ICAgICAgICAgcGFyYW1ldGVycy5hbmdsZVJhZGlhbnMgPSAwOwotICAgICAgICAgICAgcGFyYW1l
dGVycy50eXBlID0gVHlwZTo6UmFkaWFsOwotICAgICAgICB9LAotICAgICAgICBbJnBhcmFtZXRl
cnNdIChjb25zdCBDb25pY0RhdGEmIGRhdGEpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMucG9p
bnQwID0gZGF0YS5wb2ludDA7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLnBvaW50MSA9IHswLCAw
fTsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuc3RhcnRSYWRpdXMgPSAwOwotICAgICAgICAgICAg
cGFyYW1ldGVycy5lbmRSYWRpdXMgPSAwOwotICAgICAgICAgICAgcGFyYW1ldGVycy5hc3BlY3RS
YXRpbyA9IDA7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmFuZ2xlUmFkaWFucyA9IGRhdGEuYW5n
bGVSYWRpYW5zOwotICAgICAgICAgICAgcGFyYW1ldGVycy50eXBlID0gVHlwZTo6Q29uaWM7Ci0g
ICAgICAgIH0KLSAgICApOworc3RhdGljIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBH
cmFkaWVudDo6Q29sb3JTdG9wJiBzdG9wKQoreworICAgIGFkZChoYXNoZXIsIHN0b3Aub2Zmc2V0
LCBzdG9wLmNvbG9yKTsKK30KIAotICAgIHBhcmFtZXRlcnMuc3ByZWFkTWV0aG9kID0gbV9zcHJl
YWRNZXRob2Q7Ci0gICAgcGFyYW1ldGVycy5ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24gPSBt
X2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKK3N0YXRpYyB2b2lkIGFkZChIYXNoZXImIGhh
c2hlciwgY29uc3QgR3JhZGllbnQ6OkxpbmVhckRhdGEmIGRhdGEpCit7CisgICAgYWRkKGhhc2hl
ciwgZGF0YS5wb2ludDAsIGRhdGEucG9pbnQxKTsKK30KIAotICAgIHVuc2lnbmVkIHBhcmFtZXRl
cnNIYXNoID0gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KCZwYXJhbWV0ZXJzLCBzaXplb2YocGFy
YW1ldGVycykpOwotICAgIHVuc2lnbmVkIHN0b3BIYXNoID0gU3RyaW5nSGFzaGVyOjpoYXNoTWVt
b3J5KG1fc3RvcHMuZGF0YSgpLCBtX3N0b3BzLnNpemUoKSAqIHNpemVvZihDb2xvclN0b3ApKTsK
K3N0YXRpYyB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgR3JhZGllbnQ6OlJhZGlhbERh
dGEmIGRhdGEpCit7CisgICAgYWRkKGhhc2hlciwgZGF0YS5wb2ludDAsIGRhdGEucG9pbnQxLCBk
YXRhLnN0YXJ0UmFkaXVzLCBkYXRhLmVuZFJhZGl1cywgZGF0YS5hc3BlY3RSYXRpbyk7Cit9CiAK
LSAgICBtX2NhY2hlZEhhc2ggPSBwYWlySW50SGFzaChwYXJhbWV0ZXJzSGFzaCwgc3RvcEhhc2gp
Oworc3RhdGljIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBHcmFkaWVudDo6Q29uaWNE
YXRhJiBkYXRhKQoreworICAgIGFkZChoYXNoZXIsIGRhdGEucG9pbnQwLCBkYXRhLmFuZ2xlUmFk
aWFucyk7Cit9CiAKK3Vuc2lnbmVkIEdyYWRpZW50OjpoYXNoKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fY2FjaGVkSGFzaCkgeworICAgICAgICBzb3J0U3RvcHMoKTsKKyAgICAgICAgbV9jYWNoZWRI
YXNoID0gY29tcHV0ZUhhc2gobV9kYXRhLCBtX3NwcmVhZE1ldGhvZCwgbV9ncmFkaWVudFNwYWNl
VHJhbnNmb3JtYXRpb24sIG1fc3RvcHMpOworICAgIH0KICAgICByZXR1cm4gbV9jYWNoZWRIYXNo
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFk
aWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAppbmRl
eCA2ZWI1ZDA3OWFjN2U0ZmUzYTJjZjUxNjdkMjg1ZTAzNWIwY2YxMDAyLi5jY2Q1M2ExYmU4OTJj
OWQ2NjA2MWFjZmU0NTc1MDc4NmQ3ZTYxN2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYWRpZW50LmgKQEAgLTMxLDQ4ICszMSw0NCBAQAogI2luY2x1ZGUgIkNvbG9y
LmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIK
LSNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CiAjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKKyNp
ZiBVU0UoQ0cpCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2VuZGlmCisKKyNpZiBVU0Uo
RElSRUNUMkQpCisjaW5jbHVkZSAiQ09NUHRyLmgiCisjZW5kaWYKKwogI2lmIFVTRShDRykKIHR5
cGVkZWYgc3RydWN0IENHQ29udGV4dCogQ0dDb250ZXh0UmVmOwogdHlwZWRlZiBzdHJ1Y3QgQ0dH
cmFkaWVudCogQ0dHcmFkaWVudFJlZjsKLXR5cGVkZWYgQ0dHcmFkaWVudFJlZiBQbGF0Zm9ybUdy
YWRpZW50OwotI2VsaWYgVVNFKERJUkVDVDJEKQorI2VuZGlmCisKKyNpZiBVU0UoRElSRUNUMkQp
CiBpbnRlcmZhY2UgSUQyRDFCcnVzaDsKIGludGVyZmFjZSBJRDJEMVJlbmRlclRhcmdldDsKLXR5
cGVkZWYgSUQyRDFCcnVzaCogUGxhdGZvcm1HcmFkaWVudDsKLSNlbGlmIFVTRShDQUlSTykKKyNl
bmRpZgorCisjaWYgVVNFKENBSVJPKQogdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3BhdHRlcm4gY2Fp
cm9fcGF0dGVybl90OwotdHlwZWRlZiBjYWlyb19wYXR0ZXJuX3QqIFBsYXRmb3JtR3JhZGllbnQ7
Ci0jZWxzZQotdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYWRpZW50OwogI2VuZGlmCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ29sb3I7CiBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBH
cmFwaGljc0NvbnRleHQ7CiAKIGNsYXNzIEdyYWRpZW50IDogcHVibGljIFJlZkNvdW50ZWQ8R3Jh
ZGllbnQ+IHsKIHB1YmxpYzoKLSAgICAvLyBGSVhNRTogRXh0ZW5kZWRDb2xvciAtIEEgY29sb3Ig
c3RvcCBuZWVkcyBhIG5vdGlvbiBvZiBjb2xvciBzcGFjZS4KICAgICBzdHJ1Y3QgQ29sb3JTdG9w
IHsKICAgICAgICAgZmxvYXQgb2Zmc2V0IHsgMCB9OwogICAgICAgICBDb2xvciBjb2xvcjsKIAot
ICAgICAgICBDb2xvclN0b3AoKSA9IGRlZmF1bHQ7Ci0gICAgICAgIENvbG9yU3RvcChmbG9hdCBv
ZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICAgICAgICAgIDogb2Zmc2V0KG9mZnNldCkK
LSAgICAgICAgICAgICwgY29sb3IoY29sb3IpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAg
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
LSAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENvbG9yU3Rv
cD4gZGVjb2RlKERlY29kZXImKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29sb3JTdG9wPiBkZWNvZGUoRGVjb2RlciYpOwogICAg
IH07CiAKICAgICB1c2luZyBDb2xvclN0b3BWZWN0b3IgPSBWZWN0b3I8Q29sb3JTdG9wLCAyPjsK
QEAgLTgxLDggKzc3LDggQEAgcHVibGljOgogICAgICAgICBGbG9hdFBvaW50IHBvaW50MDsKICAg
ICAgICAgRmxvYXRQb2ludCBwb2ludDE7CiAKLSAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8TGluZWFyRGF0YT4gZGVjb2RlKERlY29kZXImKTsKKyAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8
TGluZWFyRGF0YT4gZGVjb2RlKERlY29kZXImKTsKICAgICB9OwogCiAgICAgc3RydWN0IFJhZGlh
bERhdGEgewpAQCAtOTIsMzcgKzg4LDMxIEBAIHB1YmxpYzoKICAgICAgICAgZmxvYXQgZW5kUmFk
aXVzOwogICAgICAgICBmbG9hdCBhc3BlY3RSYXRpbzsgLy8gRm9yIGVsbGlwdGljYWwgZ3JhZGll
bnQsIHdpZHRoIC8gaGVpZ2h0LgogCi0gICAgICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIE9wdGlvbmFsPFJhZGlhbERhdGE+IGRlY29kZShEZWNvZGVyJik7CisgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
KyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJhZGlh
bERhdGE+IGRlY29kZShEZWNvZGVyJik7CiAgICAgfTsKLSAgICAKKwogICAgIHN0cnVjdCBDb25p
Y0RhdGEgewogICAgICAgICBGbG9hdFBvaW50IHBvaW50MDsKICAgICAgICAgZmxvYXQgYW5nbGVS
YWRpYW5zOwogCi0gICAgICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKLSAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9w
dGlvbmFsPENvbmljRGF0YT4gZGVjb2RlKERlY29kZXImKTsKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29uaWNEYXRhPiBkZWNvZGUo
RGVjb2RlciYpOwogICAgIH07CiAKICAgICB1c2luZyBEYXRhID0gVmFyaWFudDxMaW5lYXJEYXRh
LCBSYWRpYWxEYXRhLCBDb25pY0RhdGE+OwogCi0gICAgZW51bSBjbGFzcyBUeXBlIHsgTGluZWFy
LCBSYWRpYWwsIENvbmljIH07Ci0KICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEdyYWRp
ZW50PiBjcmVhdGUoTGluZWFyRGF0YSYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVm
PEdyYWRpZW50PiBjcmVhdGUoUmFkaWFsRGF0YSYmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgUmVmPEdyYWRpZW50PiBjcmVhdGUoQ29uaWNEYXRhJiYpOworICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBSZWY8R3JhZGllbnQ+IGNyZWF0ZShEYXRhJiYpOwogCiAgICAgV0VCQ09SRV9FWFBP
UlQgfkdyYWRpZW50KCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBUeXBlIHR5cGUoKSBjb25zdDsK
LQotICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdDsKICAgICBib29sIGlzWmVyb1NpemUoKSBjb25z
dDsKIAogICAgIGNvbnN0IERhdGEmIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkQ29sb3JTdG9wKGNvbnN0IENvbG9yU3RvcCYpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkQ29sb3JTdG9wKGZsb2F0LCBjb25zdCBDb2xvciYp
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkQ29sb3JTdG9wKENvbG9yU3RvcCYmKTsKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNvcnRlZENvbG9yU3RvcHMoQ29sb3JTdG9wVmVjdG9y
JiYpOwogCiAgICAgY29uc3QgQ29sb3JTdG9wVmVjdG9yJiBzdG9wcygpIGNvbnN0IHsgcmV0dXJu
IG1fc3RvcHM7IH0KQEAgLTEzMCw3ICsxMjAsNiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRTcHJlYWRNZXRob2QoR3JhZGllbnRTcHJlYWRNZXRob2QpOwogICAgIEdyYWRp
ZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ByZWFkTWV0
aG9kOyB9CiAKLSAgICAvLyBDRyBuZWVkcyB0byB0cmFuc2Zvcm0gdGhlIGdyYWRpZW50IGF0IGRy
YXcgdGltZS4KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEdyYWRpZW50U3BhY2VUcmFuc2Zv
cm0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24pOwog
ICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpIGNvbnN0
IHsgcmV0dXJuIG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOyB9CiAKQEAgLTEzOCwzMyAr
MTI3LDMzIEBAIHB1YmxpYzoKICAgICB2b2lkIGFkanVzdFBhcmFtZXRlcnNGb3JUaWxlZERyYXdp
bmcoRmxvYXRTaXplJiwgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nKTsKIAog
ICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKLSAgICB2b2lkIGludmFsaWRhdGVIYXNoKCkgeyBt
X2NhY2hlZEhhc2ggPSAwOyB9CisKKyNpZiBVU0UoQ0FJUk8pCisgICAgUmVmUHRyPGNhaXJvX3Bh
dHRlcm5fdD4gY3JlYXRlUGF0dGVybihmbG9hdCBnbG9iYWxBbHBoYSk7CisjZW5kaWYKIAogI2lm
IFVTRShDRykKICAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYpOwogICAgIHZvaWQgcGFp
bnQoQ0dDb250ZXh0UmVmKTsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBQbGF0Zm9ybUdyYWRp
ZW50IGNyZWF0ZVBsYXRmb3JtR3JhZGllbnRJZk5lY2Vzc2FyeShJRDJEMVJlbmRlclRhcmdldCop
OwotI2VsaWYgVVNFKENBSVJPKQotICAgIFBsYXRmb3JtR3JhZGllbnQgY3JlYXRlUGxhdGZvcm1H
cmFkaWVudChmbG9hdCBnbG9iYWxBbHBoYSk7CiAjZW5kaWYKIAotICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEdyYWRpZW50Pj4gZGVjb2RlKERlY29kZXIm
KTsKKyNpZiBVU0UoRElSRUNUMkQpCisgICAgSUQyRDFCcnVzaCogY3JlYXRlQnJ1c2goSUQyRDFS
ZW5kZXJUYXJnZXQqKTsKKyNlbmRpZgorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29k
ZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8R3JhZGllbnQ+PiBkZWNvZGUoRGVjb2RlciYpOwogCiBw
cml2YXRlOgotICAgIEdyYWRpZW50KExpbmVhckRhdGEmJik7Ci0gICAgR3JhZGllbnQoUmFkaWFs
RGF0YSYmKTsKLSAgICBHcmFkaWVudChDb25pY0RhdGEmJik7Ci0KLSAgICBQbGF0Zm9ybUdyYWRp
ZW50IHBsYXRmb3JtR3JhZGllbnQoKTsKLSAgICB2b2lkIHBsYXRmb3JtSW5pdCgpIHsgbV9ncmFk
aWVudCA9IG51bGxwdHI7IH0KLSAgICB2b2lkIHBsYXRmb3JtRGVzdHJveSgpOworICAgIGV4cGxp
Y2l0IEdyYWRpZW50KExpbmVhckRhdGEmJik7CisgICAgZXhwbGljaXQgR3JhZGllbnQoUmFkaWFs
RGF0YSYmKTsKKyAgICBleHBsaWNpdCBHcmFkaWVudChEYXRhJiYpOwogCi0gICAgdm9pZCBzb3J0
U3RvcHNJZk5lY2Vzc2FyeSgpOworICAgIHZvaWQgc29ydFN0b3BzKCkgY29uc3Q7CisgICAgdm9p
ZCBzdG9wc0NoYW5nZWQoKTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICB2b2lkIGdlbmVyYXRl
R3JhZGllbnQoSUQyRDFSZW5kZXJUYXJnZXQqKTsKKyNpZiBVU0UoQ0cpCisgICAgdm9pZCBjcmVh
dGVDR0dyYWRpZW50KCk7CiAjZW5kaWYKIAogICAgIERhdGEgbV9kYXRhOwpAQCAtMTc2LDE4ICsx
NjUsMjIgQEAgcHJpdmF0ZToKIAogICAgIG11dGFibGUgdW5zaWduZWQgbV9jYWNoZWRIYXNoIHsg
MCB9OwogCi0gICAgUGxhdGZvcm1HcmFkaWVudCBtX2dyYWRpZW50OworI2lmIFVTRShDRykKKyAg
ICBSZXRhaW5QdHI8Q0dHcmFkaWVudFJlZj4gbV9ncmFkaWVudDsKKyNlbmRpZgorCisjaWYgVVNF
KERJUkVDVDJEKQorICAgIENPTVB0cjxJRDJEMUJydXNoPiBtX2JydXNoOworI2VuZGlmCiB9Owog
Ci10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBHcmFkaWVudDo6Q29sb3JTdG9wOjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZv
aWQgR3JhZGllbnQ6OkNvbG9yU3RvcDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7
CiAgICAgZW5jb2RlciA8PCBvZmZzZXQ7CiAgICAgZW5jb2RlciA8PCBjb2xvcjsKIH0KIAotdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPEdyYWRpZW50OjpDb2xvclN0b3A+IEdyYWRp
ZW50OjpDb2xvclN0b3A6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQordGVtcGxhdGU8dHlwZW5h
bWUgRGVjb2Rlcj4gT3B0aW9uYWw8R3JhZGllbnQ6OkNvbG9yU3RvcD4gR3JhZGllbnQ6OkNvbG9y
U3RvcDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8ZmxvYXQ+IG9m
ZnNldDsKICAgICBkZWNvZGVyID4+IG9mZnNldDsKQEAgLTIwMiwxNSArMTk1LDEzIEBAIE9wdGlv
bmFsPEdyYWRpZW50OjpDb2xvclN0b3A+IEdyYWRpZW50OjpDb2xvclN0b3A6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQogICAgIHJldHVybiB7eyAqb2Zmc2V0LCAqY29sb3IgfX07CiB9CiAKLXRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEdyYWRpZW50OjpMaW5lYXJEYXRhOjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQg
R3JhZGllbnQ6OkxpbmVhckRhdGE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewog
ICAgIGVuY29kZXIgPDwgcG9pbnQwOwogICAgIGVuY29kZXIgPDwgcG9pbnQxOwogfQogCi10ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8R3JhZGllbnQ6OkxpbmVhckRhdGE+IEdyYWRp
ZW50OjpMaW5lYXJEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3RlbXBsYXRlPHR5cGVu
YW1lIERlY29kZXI+IE9wdGlvbmFsPEdyYWRpZW50OjpMaW5lYXJEYXRhPiBHcmFkaWVudDo6TGlu
ZWFyRGF0YTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8RmxvYXRQ
b2ludD4gcG9pbnQwOwogICAgIGRlY29kZXIgPj4gcG9pbnQwOwpAQCAtMjI1LDggKzIxNiw3IEBA
IE9wdGlvbmFsPEdyYWRpZW50OjpMaW5lYXJEYXRhPiBHcmFkaWVudDo6TGluZWFyRGF0YTo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgcmV0dXJuIHt7ICpwb2ludDAsICpwb2ludDEgfX07
CiB9CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEdyYWRpZW50OjpSYWRpYWxEYXRh
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29k
ZXI+IHZvaWQgR3JhZGllbnQ6OlJhZGlhbERhdGE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAogewogICAgIGVuY29kZXIgPDwgcG9pbnQwOwogICAgIGVuY29kZXIgPDwgcG9pbnQxOwpA
QCAtMjM1LDggKzIyNSw3IEBAIHZvaWQgR3JhZGllbnQ6OlJhZGlhbERhdGE6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgYXNwZWN0UmF0aW87CiB9CiAKLXRl
bXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxHcmFkaWVudDo6UmFkaWFsRGF0YT4gR3Jh
ZGllbnQ6OlJhZGlhbERhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQordGVtcGxhdGU8dHlw
ZW5hbWUgRGVjb2Rlcj4gT3B0aW9uYWw8R3JhZGllbnQ6OlJhZGlhbERhdGE+IEdyYWRpZW50OjpS
YWRpYWxEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxGbG9h
dFBvaW50PiBwb2ludDA7CiAgICAgZGVjb2RlciA+PiBwb2ludDA7CkBAIC0yNjYsMTUgKzI1NSwx
MyBAQCBPcHRpb25hbDxHcmFkaWVudDo6UmFkaWFsRGF0YT4gR3JhZGllbnQ6OlJhZGlhbERhdGE6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHJldHVybiB7eyAqcG9pbnQwLCAqcG9pbnQx
LCAqc3RhcnRSYWRpdXMsICplbmRSYWRpdXMsICphc3BlY3RSYXRpbyB9fTsKIH0KIAotdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgR3JhZGllbnQ6OkNvbmljRGF0YTo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiB2b2lkIEdyYWRp
ZW50OjpDb25pY0RhdGE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVu
Y29kZXIgPDwgcG9pbnQwOwogICAgIGVuY29kZXIgPDwgYW5nbGVSYWRpYW5zOwogfQogCi10ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8R3JhZGllbnQ6OkNvbmljRGF0YT4gR3JhZGll
bnQ6OkNvbmljRGF0YTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBEZWNvZGVyPiBPcHRpb25hbDxHcmFkaWVudDo6Q29uaWNEYXRhPiBHcmFkaWVudDo6Q29uaWNE
YXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxGbG9hdFBvaW50
PiBwb2ludDA7CiAgICAgZGVjb2RlciA+PiBwb2ludDA7CkBAIC0yODksMTE1ICsyNzYsNTAgQEAg
T3B0aW9uYWw8R3JhZGllbnQ6OkNvbmljRGF0YT4gR3JhZGllbnQ6OkNvbmljRGF0YTo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCiAgICAgcmV0dXJuIHt7ICpwb2ludDAsICphbmdsZVJhZGlhbnMg
fX07CiB9CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEdyYWRpZW50OjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQg
R3JhZGllbnQ6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAgIGF1dG8gdHlw
ZSA9IHRoaXMtPnR5cGUoKTsKLSAgICBlbmNvZGVyIDw8IHR5cGU7Ci0gICAgc3dpdGNoICh0eXBl
KSB7Ci0gICAgY2FzZSBUeXBlOjpMaW5lYXI6Ci0gICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8
R3JhZGllbnQ6OkxpbmVhckRhdGE+KG1fZGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
VHlwZTo6UmFkaWFsOgotICAgICAgICBlbmNvZGVyIDw8IFdURjo6Z2V0PEdyYWRpZW50OjpSYWRp
YWxEYXRhPihtX2RhdGEpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFR5cGU6OkNvbmljOgot
ICAgICAgICBlbmNvZGVyIDw8IFdURjo6Z2V0PEdyYWRpZW50OjpDb25pY0RhdGE+KG1fZGF0YSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBlbmNvZGVyIDw8IG1fZGF0YTsKICAgICBlbmNv
ZGVyIDw8IG1fc3RvcHM7CiAgICAgZW5jb2RlciA8PCBtX3N0b3BzU29ydGVkOwogICAgIGVuY29k
ZXIgPDwgbV9zcHJlYWRNZXRob2Q7CiAgICAgZW5jb2RlciA8PCBtX2dyYWRpZW50U3BhY2VUcmFu
c2Zvcm1hdGlvbjsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxH
cmFkaWVudD4+IEdyYWRpZW50OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3RlbXBsYXRlPHR5
cGVuYW1lIERlY29kZXI+IE9wdGlvbmFsPFJlZjxHcmFkaWVudD4+IEdyYWRpZW50OjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICBPcHRpb25hbDxHcmFkaWVudDo6VHlwZT4gdHlwZTsK
LSAgICBkZWNvZGVyID4+IHR5cGU7Ci0gICAgaWYgKCF0eXBlKQorICAgIE9wdGlvbmFsPERhdGE+
IGRhdGE7CisgICAgZGVjb2RlciA+PiBkYXRhOworICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIFJlZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQ7Ci0gICAg
c3dpdGNoICgqdHlwZSkgewotICAgIGNhc2UgVHlwZTo6TGluZWFyOiB7Ci0gICAgICAgIE9wdGlv
bmFsPExpbmVhckRhdGE+IGxpbmVhckRhdGE7Ci0gICAgICAgIGRlY29kZXIgPj4gbGluZWFyRGF0
YTsKLSAgICAgICAgaWYgKCFsaW5lYXJEYXRhKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLQotICAgICAgICBncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoV1RGTW92ZSgqbGlu
ZWFyRGF0YSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBUeXBlOjpSYWRpYWw6
IHsKLSAgICAgICAgT3B0aW9uYWw8UmFkaWFsRGF0YT4gcmFkaWFsRGF0YTsKLSAgICAgICAgZGVj
b2RlciA+PiByYWRpYWxEYXRhOwotICAgICAgICBpZiAoIXJhZGlhbERhdGEpCi0gICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgICAgIGdyYWRpZW50ID0gR3JhZGllbnQ6OmNy
ZWF0ZShXVEZNb3ZlKCpyYWRpYWxEYXRhKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBj
YXNlIFR5cGU6OkNvbmljOiB7Ci0gICAgICAgIE9wdGlvbmFsPENvbmljRGF0YT4gY29uaWNEYXRh
OwotICAgICAgICBkZWNvZGVyID4+IGNvbmljRGF0YTsKLSAgICAgICAgaWYgKCFjb25pY0RhdGEp
Ci0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgICAgIGdyYWRpZW50ID0g
R3JhZGllbnQ6OmNyZWF0ZShXVEZNb3ZlKCpjb25pY0RhdGEpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIH0KLQotICAgIGlmICghZ3JhZGllbnQpIHsKLSAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgfQorICAgIGF1dG8g
Z3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKFdURk1vdmUoKmRhdGEpKTsKIAogICAgIE9wdGlv
bmFsPENvbG9yU3RvcFZlY3Rvcj4gc3RvcHM7CiAgICAgZGVjb2RlciA+PiBzdG9wczsKICAgICBp
ZiAoIXN0b3BzKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCiAgICAgT3B0aW9uYWw8
Ym9vbD4gc3RvcHNTb3J0ZWQ7CiAgICAgZGVjb2RlciA+PiBzdG9wc1NvcnRlZDsKICAgICBpZiAo
IXN0b3BzU29ydGVkLmhhc1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0K
LSAgICBpZiAoc3RvcHNTb3J0ZWQudmFsdWUoKSkKKyAgICBpZiAoKnN0b3BzU29ydGVkKQogICAg
ICAgICBncmFkaWVudC0+c2V0U29ydGVkQ29sb3JTdG9wcyhXVEZNb3ZlKCpzdG9wcykpOwogICAg
IGVsc2UgewogICAgICAgICBmb3IgKGF1dG8mIHN0b3AgOiAqc3RvcHMpCi0gICAgICAgICAgICBn
cmFkaWVudC0+YWRkQ29sb3JTdG9wKHN0b3ApOworICAgICAgICAgICAgZ3JhZGllbnQtPmFkZENv
bG9yU3RvcChXVEZNb3ZlKHN0b3ApKTsKICAgICB9CiAKICAgICBHcmFkaWVudFNwcmVhZE1ldGhv
ZCBzcHJlYWRNZXRob2Q7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzcHJlYWRNZXRob2QpKQog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCiAgICAgZ3JhZGllbnQtPnNldFNwcmVhZE1l
dGhvZChzcHJlYWRNZXRob2QpOwogCiAgICAgT3B0aW9uYWw8QWZmaW5lVHJhbnNmb3JtPiBncmFk
aWVudFNwYWNlVHJhbnNmb3JtYXRpb247CiAgICAgZGVjb2RlciA+PiBncmFkaWVudFNwYWNlVHJh
bnNmb3JtYXRpb247CiAgICAgaWYgKCFncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24pCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KICAgICBncmFkaWVudC0+c2V0R3JhZGllbnRTcGFj
ZVRyYW5zZm9ybShXVEZNb3ZlKCpncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24pKTsKLSAgICBy
ZXR1cm4gZ3JhZGllbnQucmVsZWFzZU5vbk51bGwoKTsKKworICAgIHJldHVybiBXVEZNb3ZlKGdy
YWRpZW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi1uYW1lc3BhY2UgV1RGIHsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpHcmFkaWVudDo6VHlwZT4g
ewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0gICAgV2ViQ29yZTo6R3JhZGllbnQ6
OlR5cGUsCi0gICAgV2ViQ29yZTo6R3JhZGllbnQ6OlR5cGU6OkxpbmVhciwKLSAgICBXZWJDb3Jl
OjpHcmFkaWVudDo6VHlwZTo6UmFkaWFsLAotICAgIFdlYkNvcmU6OkdyYWRpZW50OjpUeXBlOjpD
b25pYwotICAgID47Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDM2Mzc1
ZDNiN2MxMjFjZTg2NTk3YWZmN2RlN2NiMTJhNDVkODU2ODkuLmU0ODBkMDg1NGE4Mjg5NWUyMjc2
MzUwYWE4ODYzMWYyMzVhMzZhZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtNzUsNiArNzUsMjYgQEAgcHJpdmF0
ZToKICAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
ZmxhZykgJiYgKG1fc3RhdGUucHJvcGVydHkgIT0gc3RhdGUucHJvcGVydHkpKSBcCiAgICAgICAg
IGNoYW5nZUZsYWdzLmFkZChHcmFwaGljc0NvbnRleHRTdGF0ZTo6ZmxhZyk7CiAKK0dyYXBoaWNz
Q29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSgpCisgICAgOiBzaG91bGRBbnRpYWxp
YXModHJ1ZSkKKyAgICAsIHNob3VsZFNtb290aEZvbnRzKHRydWUpCisgICAgLCBzaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHModHJ1ZSkKKyAgICAsIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGZh
bHNlKQorI2lmIFVTRShDRykKKyAgICAvLyBDb3JlIEdyYXBoaWNzIGluY29ycmVjdGx5IHJlbmRl
cnMgc2hhZG93cyB3aXRoIHJhZGl1cyA+IDhweCAoPHJkYXI6Ly9wcm9ibGVtLzgxMDM0NDI+KSwK
KyAgICAvLyBidXQgd2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGlzIGJ1Z2d5IGJlaGF2aW9yIGZvciBj
YW52YXMgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KKyAgICAsIHNoYWRvd3NVc2VMZWdhY3lSYWRp
dXMoZmFsc2UpCisjZW5kaWYKKyAgICAsIGRyYXdMdW1pbmFuY2VNYXNrKGZhbHNlKQoreworfQor
CitHcmFwaGljc0NvbnRleHRTdGF0ZTo6fkdyYXBoaWNzQ29udGV4dFN0YXRlKCkgPSBkZWZhdWx0
OworR3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJikgPSBkZWZhdWx0OworR3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBo
aWNzQ29udGV4dFN0YXRlKEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpID0gZGVmYXVsdDsKK0dyYXBo
aWNzQ29udGV4dFN0YXRlJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6b3BlcmF0b3I9KGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJikgPSBkZWZhdWx0OworR3JhcGhpY3NDb250ZXh0U3RhdGUmIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpvcGVyYXRvcj0oR3JhcGhpY3NDb250ZXh0U3RhdGUmJikgPSBk
ZWZhdWx0OworCiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBHcmFwaGlj
c0NvbnRleHRTdGF0ZUNoYW5nZTo6Y2hhbmdlc0Zyb21TdGF0ZShjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgc3RhdGUpIGNvbnN0CiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRl
Q2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IDUwMzY5Njc0YzQ1YTYyZTYxYjc4OTE5
MjFlYmRiYTk4NjAzNmE1ZWEuLjlkY2RkZTk5OGYzNDEzNDI3NzIyNjg2OTRjOTk4YWJlNjBjODRh
ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5oCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiRGFzaEFycmF5LmgiCiAjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNsdWRlICJH
cmFkaWVudC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNpbmNsdWRlICJJbWFnZS5o
IgogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKQEAgLTk4LDYgKzk3LDEwIEBAIGNsYXNz
IFBhdGg7CiBjbGFzcyBUZXh0UnVuOwogY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiAKK25h
bWVzcGFjZSBEaXNwbGF5TGlzdCB7CitjbGFzcyBSZWNvcmRlcjsKK30KKwogZW51bSBjbGFzcyBU
ZXh0RHJhd2luZ01vZGUgOiB1aW50OF90IHsKICAgICBGaWxsID0gMSA8PCAwLAogICAgIFN0cm9r
ZSA9IDEgPDwgMSwKQEAgLTE1MywyNCArMTU2LDE1IEBAIE9wdGlvbmFsPERvY3VtZW50TWFya2Vy
TGluZVN0eWxlPiBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6ZGVjb2RlKERlY29kZXImIGRlY29k
CiAgICAgcmV0dXJuIHt7ICptb2RlLCAqc2hvdWxkVXNlRGFya0FwcGVhcmFuY2UgfX07CiB9CiAK
LW5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7Ci1jbGFzcyBSZWNvcmRlcjsKLX0KLQogc3RydWN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlIHsKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSgpCi0gICAgICAg
IDogc2hvdWxkQW50aWFsaWFzKHRydWUpCi0gICAgICAgICwgc2hvdWxkU21vb3RoRm9udHModHJ1
ZSkKLSAgICAgICAgLCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHModHJ1ZSkKLSAgICAgICAg
LCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhmYWxzZSkKLSNpZiBVU0UoQ0cpCi0gICAgICAgIC8v
IENvcmUgR3JhcGhpY3MgaW5jb3JyZWN0bHkgcmVuZGVycyBzaGFkb3dzIHdpdGggcmFkaXVzID4g
OHB4ICg8cmRhcjovL3Byb2JsZW0vODEwMzQ0Mj4pLAotICAgICAgICAvLyBidXQgd2UgbmVlZCB0
byBwcmVzZXJ2ZSB0aGlzIGJ1Z2d5IGJlaGF2aW9yIGZvciBjYW52YXMgYW5kIC13ZWJraXQtYm94
LXNoYWRvdy4KLSAgICAgICAgLCBzaGFkb3dzVXNlTGVnYWN5UmFkaXVzKGZhbHNlKQotI2VuZGlm
Ci0gICAgICAgICwgZHJhd0x1bWluYW5jZU1hc2soZmFsc2UpCi0gICAgewotICAgIH0KKyAgICBX
RUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpOworICAgIFdFQkNPUkVfRVhQT1JU
IH5HcmFwaGljc0NvbnRleHRTdGF0ZSgpOworCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZShHcmFw
aGljc0NvbnRleHRTdGF0ZSYmKTsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcGVyYXRv
cj0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgb3BlcmF0b3I9KEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpOwogCiAgICAgZW51bSBDaGFuZ2Ug
OiB1aW50MzJfdCB7CiAgICAgICAgIFN0cm9rZUdyYWRpZW50Q2hhbmdlICAgICAgICAgICAgICAg
ICAgICA9IDEgPDwgMCwKQEAgLTE5Nyw3ICsxOTEsNyBAQCBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUgewogICAgICAgICBVc2VEYXJrQXBwZWFyYW5jZUNoYW5nZSAgICAgICAgICAgICAgICAg
PSAxIDw8IDIwLAogI2VuZGlmCiAgICAgfTsKLSAgICB0eXBlZGVmIE9wdGlvblNldDxDaGFuZ2U+
IFN0YXRlQ2hhbmdlRmxhZ3M7CisgICAgdXNpbmcgU3RhdGVDaGFuZ2VGbGFncyA9IE9wdGlvblNl
dDxDaGFuZ2U+OwogCiAgICAgUmVmUHRyPEdyYWRpZW50PiBzdHJva2VHcmFkaWVudDsKICAgICBS
ZWZQdHI8UGF0dGVybj4gc3Ryb2tlUGF0dGVybjsKQEAgLTMwOCw3ICszMDIsNyBAQCBwdWJsaWM6
CiAgICAgUGF0dGVybiogc3Ryb2tlUGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ry
b2tlUGF0dGVybi5nZXQoKTsgfQogCiAgICAgdm9pZCBzZXRTdHJva2VHcmFkaWVudChSZWY8R3Jh
ZGllbnQ+JiYpOwotICAgIFJlZlB0cjxHcmFkaWVudD4gc3Ryb2tlR3JhZGllbnQoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlLnN0cm9rZUdyYWRpZW50OyB9CisgICAgR3JhZGllbnQqIHN0cm9rZUdy
YWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VHcmFkaWVudC5nZXQoKTsgfQog
CiAgICAgdm9pZCBzZXRGaWxsUnVsZShXaW5kUnVsZSk7CiAgICAgV2luZFJ1bGUgZmlsbFJ1bGUo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxSdWxlOyB9CkBAIC0zMjAsNyArMzE0LDcgQEAg
cHVibGljOgogICAgIFBhdHRlcm4qIGZpbGxQYXR0ZXJuKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5maWxsUGF0dGVybi5nZXQoKTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGaWxs
R3JhZGllbnQoUmVmPEdyYWRpZW50PiYmKTsKLSAgICBSZWZQdHI8R3JhZGllbnQ+IGZpbGxHcmFk
aWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEdyYWRpZW50OyB9CisgICAgR3JhZGll
bnQqIGZpbGxHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEdyYWRpZW50Lmdl
dCgpOyB9CiAKICAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wpOwogICAg
IGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAppbmRleCAzZmQ0YWRl
MDE1N2U5ZDRmOWJkN2Q4ZTRiZmViNDhhZmZlMThjOGU1Li45ZjFkMTA5ZmYwOTdkNTNiNzJhNTQy
YjI0ZThjNjMxZjQwNzc4OGNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKQEAgLTQwLDYgKzQwLDcg
QEAKICNpbmNsdWRlICJEcmF3RXJyb3JVbmRlcmxpbmUuaCIKICNpbmNsdWRlICJGbG9hdENvbnZl
cnNpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFkaWVudC5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZUNhaXJvLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKQEAgLTU2OCw5ICs1Njks
OSBAQCBGaWxsU291cmNlOjpGaWxsU291cmNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBz
dGF0ZSkKICAgICAgICAgcGF0dGVybi5yZXBlYXRYID0gc3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVh
dFgoKTsKICAgICAgICAgcGF0dGVybi5yZXBlYXRZID0gc3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVh
dFkoKTsKICAgICB9IGVsc2UgaWYgKHN0YXRlLmZpbGxHcmFkaWVudCkgewotICAgICAgICBncmFk
aWVudC5iYXNlID0gYWRvcHRSZWYoc3RhdGUuZmlsbEdyYWRpZW50LT5jcmVhdGVQbGF0Zm9ybUdy
YWRpZW50KDEpKTsKKyAgICAgICAgZ3JhZGllbnQuYmFzZSA9IHN0YXRlLmZpbGxHcmFkaWVudC0+
Y3JlYXRlUGF0dGVybigxKTsKICAgICAgICAgaWYgKHN0YXRlLmFscGhhICE9IDEpCi0gICAgICAg
ICAgICBncmFkaWVudC5hbHBoYUFkanVzdGVkID0gYWRvcHRSZWYoc3RhdGUuZmlsbEdyYWRpZW50
LT5jcmVhdGVQbGF0Zm9ybUdyYWRpZW50KHN0YXRlLmFscGhhKSk7CisgICAgICAgICAgICBncmFk
aWVudC5hbHBoYUFkanVzdGVkID0gc3RhdGUuZmlsbEdyYWRpZW50LT5jcmVhdGVQYXR0ZXJuKHN0
YXRlLmFscGhhKTsKICAgICB9IGVsc2UKICAgICAgICAgY29sb3IgPSBzdGF0ZS5maWxsQ29sb3I7
CiB9CkBAIC01ODEsOSArNTgyLDkgQEAgU3Ryb2tlU291cmNlOjpTdHJva2VTb3VyY2UoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQogICAgIGlmIChzdGF0ZS5zdHJva2VQYXR0ZXJu
KQogICAgICAgICBwYXR0ZXJuID0gYWRvcHRSZWYoc3RhdGUuc3Ryb2tlUGF0dGVybi0+Y3JlYXRl
UGxhdGZvcm1QYXR0ZXJuKEFmZmluZVRyYW5zZm9ybSgpKSk7CiAgICAgZWxzZSBpZiAoc3RhdGUu
c3Ryb2tlR3JhZGllbnQpIHsKLSAgICAgICAgZ3JhZGllbnQuYmFzZSA9IGFkb3B0UmVmKHN0YXRl
LnN0cm9rZUdyYWRpZW50LT5jcmVhdGVQbGF0Zm9ybUdyYWRpZW50KDEpKTsKKyAgICAgICAgZ3Jh
ZGllbnQuYmFzZSA9IHN0YXRlLnN0cm9rZUdyYWRpZW50LT5jcmVhdGVQYXR0ZXJuKDEpOwogICAg
ICAgICBpZiAoc3RhdGUuYWxwaGEgIT0gMSkKLSAgICAgICAgICAgIGdyYWRpZW50LmFscGhhQWRq
dXN0ZWQgPSBhZG9wdFJlZihzdGF0ZS5zdHJva2VHcmFkaWVudC0+Y3JlYXRlUGxhdGZvcm1HcmFk
aWVudChzdGF0ZS5hbHBoYSkpOworICAgICAgICAgICAgZ3JhZGllbnQuYWxwaGFBZGp1c3RlZCA9
IHN0YXRlLnN0cm9rZUdyYWRpZW50LT5jcmVhdGVQYXR0ZXJuKHN0YXRlLmFscGhhKTsKICAgICB9
IGVsc2UKICAgICAgICAgY29sb3IgPSBzdGF0ZS5zdHJva2VDb2xvcjsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5j
cHAKaW5kZXggZmIwNDY5MmJhYjRmMGVjYjFlNjA2NGM2ZTVmYjRiMWRmYzExYTQwOS4uMTM3NDAw
Yjc5MmYwNjgyMTE2MmMwZmIzNzcxZDJlNjM3NTcxM2QwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKQEAg
LTM3LDcgKzM3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEdyYWRpZW50Ojpw
bGF0Zm9ybURlc3Ryb3koKQordm9pZCBHcmFkaWVudDo6c3RvcHNDaGFuZ2VkKCkKIHsKIH0KIApA
QCAtMTQ0LDcgKzE0NCw3IEBAIHN0YXRpYyBHcmFkaWVudDo6Q29sb3JTdG9wIGludGVycG9sYXRl
Q29sb3JTdG9wKEdyYWRpZW50OjpDb2xvclN0b3AgZnJvbSwgR3JhZGllCiAgICAgZmxvYXQgYiA9
IGIxICsgKGIyIC0gYjEpICogMC41ZjsKICAgICBmbG9hdCBhID0gYTEgKyAoYTIgLSBhMSkgKiAw
LjVmOwogCi0gICAgcmV0dXJuIEdyYWRpZW50OjpDb2xvclN0b3Aob2Zmc2V0LCBtYWtlU2ltcGxl
Q29sb3IoU1JHQkEgeyByLCBnLCBiLCBhIH0pKTsKKyAgICByZXR1cm4geyBvZmZzZXQsIG1ha2VT
aW1wbGVDb2xvcihTUkdCQSB7IHIsIGcsIGIsIGEgfSkgfTsKIH0KIAogc3RhdGljIGNhaXJvX3Bh
dHRlcm5fdCogY3JlYXRlQ29uaWMoZmxvYXQgeG8sIGZsb2F0IHlvLCBmbG9hdCByLCBmbG9hdCBh
bmdsZVJhZGlhbnMsCkBAIC0xNjksMTEgKzE2OSwxMSBAQCBzdGF0aWMgY2Fpcm9fcGF0dGVybl90
KiBjcmVhdGVDb25pYyhmbG9hdCB4bywgZmxvYXQgeW8sIGZsb2F0IHIsIGZsb2F0IGFuZ2xlUmFk
aQogICAgIH0KIAogICAgIC8vIEFkZCBleHRyYSBjb2xvciBzdG9wIGF0IHRoZSBiZWdpbm5pbmcg
aWYgZmlyc3QgZWxlbWVudCBvZmZzZXQgaXMgbm90IHplcm8uCi0gICAgaWYgKHN0b3BzLmF0KDAp
Lm9mZnNldCA+IDApCi0gICAgICAgIHN0b3BzLmluc2VydCgwLCBHcmFkaWVudDo6Q29sb3JTdG9w
KDAsIHN0b3BzLmF0KDApLmNvbG9yKSk7CisgICAgaWYgKHN0b3BzLmF0KDApLm9mZnNldCA+IDAu
MGYpCisgICAgICAgIHN0b3BzLmluc2VydCgwLCB7IDAuMGYsIHN0b3BzLmF0KDApLmNvbG9yIH0p
OwogICAgIC8vIEFkZCBleHRyYSBjb2xvciBzdG9wIGF0IHRoZSBlbmQgaWYgbGFzdCBlbGVtZW50
IG9mZnNldCBpcyBub3QgemVyby4KLSAgICBpZiAoc3RvcHMuYXQoc3RvcHMuc2l6ZSgpIC0gMSku
b2Zmc2V0IDwgMSkKLSAgICAgICAgc3RvcHMuYXBwZW5kKEdyYWRpZW50OjpDb2xvclN0b3AoMSwg
c3RvcHMuYXQoc3RvcHMuc2l6ZSgpIC0gMSkuY29sb3IpKTsKKyAgICBpZiAoc3RvcHMuYXQoc3Rv
cHMuc2l6ZSgpIC0gMSkub2Zmc2V0IDwgMS4wZikKKyAgICAgICAgc3RvcHMuYXBwZW5kKHsgMS4w
Ziwgc3RvcHMuYXQoc3RvcHMuc2l6ZSgpIC0gMSkuY29sb3IgfSk7CiAKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHN0b3BzLnNpemUoKSAtIDE7IGkrKykgewogICAgICAgICBmcm9tID0gc3Rv
cHMuYXQoaSksIHRvID0gc3RvcHMuYXQoaSArIDEpOwpAQCAtMTg1LDY3ICsxODUsNzAgQEAgc3Rh
dGljIGNhaXJvX3BhdHRlcm5fdCogY3JlYXRlQ29uaWMoZmxvYXQgeG8sIGZsb2F0IHlvLCBmbG9h
dCByLCBmbG9hdCBhbmdsZVJhZGkKIAogI2VuZGlmCiAKLWNhaXJvX3BhdHRlcm5fdCogR3JhZGll
bnQ6OmNyZWF0ZVBsYXRmb3JtR3JhZGllbnQoZmxvYXQgZ2xvYmFsQWxwaGEpCitSZWZQdHI8Y2Fp
cm9fcGF0dGVybl90PiBHcmFkaWVudDo6Y3JlYXRlUGF0dGVybihmbG9hdCBnbG9iYWxBbHBoYSkK
IHsKLSAgICBjYWlyb19wYXR0ZXJuX3QqIGdyYWRpZW50ID0gV1RGOjpzd2l0Y2hPbihtX2RhdGEs
Ci0gICAgICAgIFsmXSAoY29uc3QgTGluZWFyRGF0YSYgZGF0YSkgLT4gY2Fpcm9fcGF0dGVybl90
KiB7Ci0gICAgICAgICAgICByZXR1cm4gY2Fpcm9fcGF0dGVybl9jcmVhdGVfbGluZWFyKGRhdGEu
cG9pbnQwLngoKSwgZGF0YS5wb2ludDAueSgpLCBkYXRhLnBvaW50MS54KCksIGRhdGEucG9pbnQx
LnkoKSk7CisgICAgYm9vbCBpc0NvbmljID0gZmFsc2U7CisgICAgUmVmUHRyPGNhaXJvX3BhdHRl
cm5fdD4gZ3JhZGllbnQgPSBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKKyAgICAgICAgWyZdIChjb25z
dCBMaW5lYXJEYXRhJiBkYXRhKSAtPiBSZWZQdHI8Y2Fpcm9fcGF0dGVybl90PiB7CisgICAgICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoY2Fpcm9fcGF0dGVybl9jcmVhdGVfbGluZWFyKGRhdGEucG9p
bnQwLngoKSwgZGF0YS5wb2ludDAueSgpLCBkYXRhLnBvaW50MS54KCksIGRhdGEucG9pbnQxLnko
KSkpOwogICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFJhZGlhbERhdGEmIGRhdGEpIC0+
IGNhaXJvX3BhdHRlcm5fdCogewotICAgICAgICAgICAgcmV0dXJuIGNhaXJvX3BhdHRlcm5fY3Jl
YXRlX3JhZGlhbChkYXRhLnBvaW50MC54KCksIGRhdGEucG9pbnQwLnkoKSwgZGF0YS5zdGFydFJh
ZGl1cywgZGF0YS5wb2ludDEueCgpLCBkYXRhLnBvaW50MS55KCksIGRhdGEuZW5kUmFkaXVzKTsK
KyAgICAgICAgWyZdIChjb25zdCBSYWRpYWxEYXRhJiBkYXRhKSAtPiBSZWZQdHI8Y2Fpcm9fcGF0
dGVybl90PiB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoY2Fpcm9fcGF0dGVybl9jcmVh
dGVfcmFkaWFsKGRhdGEucG9pbnQwLngoKSwgZGF0YS5wb2ludDAueSgpLCBkYXRhLnN0YXJ0UmFk
aXVzLCBkYXRhLnBvaW50MS54KCksIGRhdGEucG9pbnQxLnkoKSwgZGF0YS5lbmRSYWRpdXMpKTsK
ICAgICAgICAgfSwKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKLSAgICAgICAg
WyZdIChjb25zdCBDb25pY0RhdGEmIGRhdGEpICAtPiBjYWlyb19wYXR0ZXJuX3QqIHsKKyAgICAg
ICAgWyZdIChjb25zdCBDb25pY0RhdGEmIGRhdGEpIC0+IFJlZlB0cjxjYWlyb19wYXR0ZXJuX3Q+
IHsKKyAgICAgICAgICAgIGlzQ29uaWMgPSB0cnVlOwogICAgICAgICAgICAgLy8gRklYTUU6IGRh
dGEgcGFzc2VkIGZvciBhIENvbmljIGdyYWRpZW50IGRvZXNuJ3QgY29udGFpbiBhIHJhZGl1cy4g
VGhhdCdzIGFwcGFyZW50bHkgY29ycmVjdCBiZWNhdXNlIHRoZSBXM0Mgc3BlYwogICAgICAgICAg
ICAgLy8gKGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtaW1hZ2VzLTQvI2NvbmljLWdyYWRpZW50
cykgc3RhdGVzIGEgY29uaWMgZ3JhZGllbnQgaXMgb25seSBkZWZpbmVkIGJ5IGl0cyBwb3NpdGlv
biBhbmQgYW5nbGUuCiAgICAgICAgICAgICAvLyBUaHVzLCBoZXJlIEkgZ2l2ZSB0aGUgcmFkaXVz
IGFuIGV4dHJlbWVseSBsYXJnZSB2YWx1ZS4gVGhlIHJlc3VsdGluZyBncmFkaWVudCB3aWxsIGJl
IGxhdGVyIGNsaXBwZWQgYnkgZmlsbFJlY3QuCiAgICAgICAgICAgICAvLyBBbiBhbHRlcm5hdGl2
ZSBzb2x1dGlvbiBjb3VsZCBiZSB0byBjaGFuZ2UgdGhlIEFQSSBhbmQgcGFzcyBhIHJlY3QncyB3
aWR0aCBhbmQgaGVpZ2h0IHRvIG9wdGltaXplIHRoZSBjb21wdXRhdGlvbiBvZiB0aGUgcmFkaXVz
LgogICAgICAgICAgICAgY29uc3QgZmxvYXQgcmFkaXVzID0gNDA5NjsKLSAgICAgICAgICAgIHJl
dHVybiBjcmVhdGVDb25pYyhkYXRhLnBvaW50MC54KCksIGRhdGEucG9pbnQwLnkoKSwgcmFkaXVz
LCBkYXRhLmFuZ2xlUmFkaWFucywgc3RvcHMoKSwgZ2xvYmFsQWxwaGEpOworICAgICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKGNyZWF0ZUNvbmljKGRhdGEucG9pbnQwLngoKSwgZGF0YS5wb2ludDAu
eSgpLCByYWRpdXMsIGRhdGEuYW5nbGVSYWRpYW5zLCBzdG9wcygpLCBnbG9iYWxBbHBoYSkpOwog
I2Vsc2UKLSAgICAgICAgWyZdIChjb25zdCBDb25pY0RhdGEmKSAgLT4gY2Fpcm9fcGF0dGVybl90
KiB7CisgICAgICAgIFsmXSAoY29uc3QgQ29uaWNEYXRhJikgLT4gUmVmUHRyPGNhaXJvX3BhdHRl
cm5fdD4gewogICAgICAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudCBjb25pYyBncmFkaWVudCBy
ZW5kZXJpbmcuCisgICAgICAgICAgICBpc0NvbmljID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogI2VuZGlmCiAgICAgICAgIH0KICAgICApOwogCi0gICAgaWYgKHR5cGUoKSAh
PSBUeXBlOjpDb25pYykgeworICAgIGlmICghaXNDb25pYykgewogICAgICAgICBmb3IgKGNvbnN0
IGF1dG8mIHN0b3AgOiBzdG9wcygpKSB7Ci0gICAgICAgICAgICBhZGRDb2xvclN0b3BSR0JBKGdy
YWRpZW50LCBzdG9wLCBnbG9iYWxBbHBoYSk7CisgICAgICAgICAgICBhZGRDb2xvclN0b3BSR0JB
KGdyYWRpZW50LmdldCgpLCBzdG9wLCBnbG9iYWxBbHBoYSk7CiAgICAgICAgIH0KICAgICB9CiAK
ICAgICBzd2l0Y2ggKG1fc3ByZWFkTWV0aG9kKSB7CiAgICAgY2FzZSBHcmFkaWVudFNwcmVhZE1l
dGhvZDo6UGFkOgotICAgICAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQoZ3JhZGllbnQsIENB
SVJPX0VYVEVORF9QQUQpOworICAgICAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQoZ3JhZGll
bnQuZ2V0KCksIENBSVJPX0VYVEVORF9QQUQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdy
YWRpZW50U3ByZWFkTWV0aG9kOjpSZWZsZWN0OgotICAgICAgICBjYWlyb19wYXR0ZXJuX3NldF9l
eHRlbmQoZ3JhZGllbnQsIENBSVJPX0VYVEVORF9SRUZMRUNUKTsKKyAgICAgICAgY2Fpcm9fcGF0
dGVybl9zZXRfZXh0ZW5kKGdyYWRpZW50LmdldCgpLCBDQUlST19FWFRFTkRfUkVGTEVDVCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgR3JhZGllbnRTcHJlYWRNZXRob2Q6OlJlcGVhdDoKLSAg
ICAgICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKGdyYWRpZW50LCBDQUlST19FWFRFTkRfUkVQ
RUFUKTsKKyAgICAgICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKGdyYWRpZW50LmdldCgpLCBD
QUlST19FWFRFTkRfUkVQRUFUKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2Fpcm9f
bWF0cml4X3QgbWF0cml4ID0gdG9DYWlyb01hdHJpeChtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1h
dGlvbik7CiAgICAgY2Fpcm9fbWF0cml4X2ludmVydCgmbWF0cml4KTsKLSAgICBjYWlyb19wYXR0
ZXJuX3NldF9tYXRyaXgoZ3JhZGllbnQsICZtYXRyaXgpOworICAgIGNhaXJvX3BhdHRlcm5fc2V0
X21hdHJpeChncmFkaWVudC5nZXQoKSwgJm1hdHJpeCk7CiAKICAgICByZXR1cm4gZ3JhZGllbnQ7
CiB9CiAKIHZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgUmVmUHRyPGNhaXJvX3BhdHRlcm5fdD4gcGxhdGZv
cm1HcmFkaWVudCA9IGFkb3B0UmVmKGNyZWF0ZVBsYXRmb3JtR3JhZGllbnQoMS4wKSk7Ci0gICAg
aWYgKCFwbGF0Zm9ybUdyYWRpZW50KQorICAgIGF1dG8gcGF0dGVybiA9IGNyZWF0ZVBhdHRlcm4o
MS4wKTsKKyAgICBpZiAoIXBhdHRlcm4pCiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChj
b250ZXh0Lmhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBwbGF0Zm9ybUNvbnRleHQg
PSAqY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIENhaXJvOjpzYXZlKHBsYXRmb3Jt
Q29udGV4dCk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0KHBsYXRmb3JtQ29udGV4dCwgcmVjdCwgcGxh
dGZvcm1HcmFkaWVudC5nZXQoKSk7CisgICAgQ2Fpcm86OmZpbGxSZWN0KHBsYXRmb3JtQ29udGV4
dCwgcmVjdCwgcGF0dGVybi5nZXQoKSk7CiAgICAgQ2Fpcm86OnJlc3RvcmUocGxhdGZvcm1Db250
ZXh0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKaW5kZXggY2Q4
NjVhYWEyNjAxOWZmYzc1YWVlZTkyNjIwMmNmMTEyNTk1YmM4MS4uODkxMzg0MzEwZWJlODE4MjQz
NDg0NjYxNzk0ODFlZDE3NjEyOWI2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm8uY3BwCkBAIC0zMywxMSArMzMsMTEgQEAKICNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0Lmgi
CiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAi
R3JhZGllbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWly
by5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogCi0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJ
bXBsRmFjdG9yeSBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkoUGxhdGZv
cm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCkKQEAgLTE1NCwxMiArMTU0LDEyIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKIHsKLSAg
ICBSZWZQdHI8Y2Fpcm9fcGF0dGVybl90PiBwbGF0Zm9ybUdyYWRpZW50ID0gYWRvcHRSZWYoZ3Jh
ZGllbnQuY3JlYXRlUGxhdGZvcm1HcmFkaWVudCgxLjApKTsKLSAgICBpZiAoIXBsYXRmb3JtR3Jh
ZGllbnQpCisgICAgYXV0byBwYXR0ZXJuID0gZ3JhZGllbnQuY3JlYXRlUGF0dGVybigxLjApOwor
ICAgIGlmICghcGF0dGVybikKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ2Fpcm86OnNhdmUobV9w
bGF0Zm9ybUNvbnRleHQpOwotICAgIENhaXJvOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwg
cmVjdCwgcGxhdGZvcm1HcmFkaWVudC5nZXQoKSk7CisgICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxh
dGZvcm1Db250ZXh0LCByZWN0LCBwYXR0ZXJuLmdldCgpKTsKICAgICBDYWlybzo6cmVzdG9yZSht
X3BsYXRmb3JtQ29udGV4dCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKaW5kZXggOTU1MWU5YmI0YWY3ZDJlNWQ1M2ZiYmVj
MDZjY2Y4ZTEwYzY2MGVlNC4uODEwOTJiOGU3OWY1M2ZiYjgzYzhmNWE2YTc3MjEyZjA0NTM1YjY1
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGll
bnRDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGll
bnRDRy5jcHAKQEAgLTM1LDE4ICszNSwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZv
aWQgR3JhZGllbnQ6OnBsYXRmb3JtRGVzdHJveSgpCit2b2lkIEdyYWRpZW50OjpzdG9wc0NoYW5n
ZWQoKQogewotICAgIENHR3JhZGllbnRSZWxlYXNlKG1fZ3JhZGllbnQpOwogICAgIG1fZ3JhZGll
bnQgPSBudWxscHRyOwogfQogCi1DR0dyYWRpZW50UmVmIEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRp
ZW50KCkKK3ZvaWQgR3JhZGllbnQ6OmNyZWF0ZUNHR3JhZGllbnQoKQogewotICAgIGlmIChtX2dy
YWRpZW50KQotICAgICAgICByZXR1cm4gbV9ncmFkaWVudDsKLQotICAgIHNvcnRTdG9wc0lmTmVj
ZXNzYXJ5KCk7CisgICAgc29ydFN0b3BzKCk7CiAKICAgICBhdXRvIGNvbG9yc0FycmF5ID0gYWRv
cHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZSgwLCBtX3N0b3BzLnNpemUoKSwgJmtDRlR5cGVBcnJh
eUNhbGxCYWNrcykpOwogICAgIHVuc2lnbmVkIG51bVN0b3BzID0gbV9zdG9wcy5zaXplKCk7CkBA
IC04MiwxMSArNzgsOSBAQCBDR0dyYWRpZW50UmVmIEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50
KCkKICAgICB9CiAKICAgICBpZiAoaGFzRXh0ZW5kZWRDb2xvcnMpCi0gICAgICAgIG1fZ3JhZGll
bnQgPSBDR0dyYWRpZW50Q3JlYXRlV2l0aENvbG9ycyhleHRlbmRlZFNSR0JDb2xvclNwYWNlUmVm
KCksIGNvbG9yc0FycmF5LmdldCgpLCBsb2NhdGlvbnMuZGF0YSgpKTsKKyAgICAgICAgbV9ncmFk
aWVudCA9IGFkb3B0Q0YoQ0dHcmFkaWVudENyZWF0ZVdpdGhDb2xvcnMoZXh0ZW5kZWRTUkdCQ29s
b3JTcGFjZVJlZigpLCBjb2xvcnNBcnJheS5nZXQoKSwgbG9jYXRpb25zLmRhdGEoKSkpOwogICAg
IGVsc2UKLSAgICAgICAgbV9ncmFkaWVudCA9IENHR3JhZGllbnRDcmVhdGVXaXRoQ29sb3JDb21w
b25lbnRzKHNSR0JDb2xvclNwYWNlUmVmKCksIGNvbG9yQ29tcG9uZW50cy5kYXRhKCksIGxvY2F0
aW9ucy5kYXRhKCksIG51bVN0b3BzKTsKLQotICAgIHJldHVybiBtX2dyYWRpZW50OworICAgICAg
ICBtX2dyYWRpZW50ID0gYWRvcHRDRihDR0dyYWRpZW50Q3JlYXRlV2l0aENvbG9yQ29tcG9uZW50
cyhzUkdCQ29sb3JTcGFjZVJlZigpLCBjb2xvckNvbXBvbmVudHMuZGF0YSgpLCBsb2NhdGlvbnMu
ZGF0YSgpLCBudW1TdG9wcykpOwogfQogCiB2b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMTAzLDcgKzk3LDkgQEAg
dm9pZCBHcmFkaWVudDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogdm9pZCBHcmFk
aWVudDo6cGFpbnQoQ0dDb250ZXh0UmVmIHBsYXRmb3JtQ29udGV4dCkKIHsKICAgICBDR0dyYWRp
ZW50RHJhd2luZ09wdGlvbnMgZXh0ZW5kT3B0aW9ucyA9IGtDR0dyYWRpZW50RHJhd3NCZWZvcmVT
dGFydExvY2F0aW9uIHwga0NHR3JhZGllbnREcmF3c0FmdGVyRW5kTG9jYXRpb247Ci0gICAgQ0dH
cmFkaWVudFJlZiBncmFkaWVudCA9IHBsYXRmb3JtR3JhZGllbnQoKTsKKworICAgIGlmICghbV9n
cmFkaWVudCkKKyAgICAgICAgY3JlYXRlQ0dHcmFkaWVudCgpOwogCiAgICAgV1RGOjpzd2l0Y2hP
bihtX2RhdGEsCiAgICAgICAgIFsmXSAoY29uc3QgTGluZWFyRGF0YSYgZGF0YSkgewpAQCAtMTQ2
LDcgKzE0Miw3IEBAIHZvaWQgR3JhZGllbnQ6OnBhaW50KENHQ29udGV4dFJlZiBwbGF0Zm9ybUNv
bnRleHQpCiAgICAgICAgICAgICAgICAgICAgICAgICBDR1BvaW50IGxlZnQgPSBDR1BvaW50TWFr
ZShmbGlwID8gc3RhcnQgKyB3aWR0aCA6IHN0YXJ0LCBib3VuZGluZ0JveC5vcmlnaW4ueSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBDR1BvaW50IHJpZ2h0ID0gQ0dQb2ludE1ha2UoZmxpcCA/
IHN0YXJ0IDogc3RhcnQgKyB3aWR0aCwgYm91bmRpbmdCb3gub3JpZ2luLnkpOwogCi0gICAgICAg
ICAgICAgICAgICAgICAgICBDR0NvbnRleHREcmF3TGluZWFyR3JhZGllbnQocGxhdGZvcm1Db250
ZXh0LCBncmFkaWVudCwgbGVmdCwgcmlnaHQsIGV4dGVuZE9wdGlvbnMpOworICAgICAgICAgICAg
ICAgICAgICAgICAgQ0dDb250ZXh0RHJhd0xpbmVhckdyYWRpZW50KHBsYXRmb3JtQ29udGV4dCwg
bV9ncmFkaWVudC5nZXQoKSwgbGVmdCwgcmlnaHQsIGV4dGVuZE9wdGlvbnMpOwogCiAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobV9zcHJlYWRNZXRob2QgPT0gR3JhZGllbnRTcHJlYWRNZXRo
b2Q6OlJlZmxlY3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxpcCA9ICFmbGlwOwpA
QCAtMTU4LDcgKzE1NCw3IEBAIHZvaWQgR3JhZGllbnQ6OnBhaW50KENHQ29udGV4dFJlZiBwbGF0
Zm9ybUNvbnRleHQpCiAgICAgICAgICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBjYXNlIEdyYWRpZW50U3ByZWFkTWV0aG9kOjpQYWQ6Ci0gICAgICAgICAg
ICAgICAgQ0dDb250ZXh0RHJhd0xpbmVhckdyYWRpZW50KHBsYXRmb3JtQ29udGV4dCwgZ3JhZGll
bnQsIGRhdGEucG9pbnQwLCBkYXRhLnBvaW50MSwgZXh0ZW5kT3B0aW9ucyk7CisgICAgICAgICAg
ICAgICAgQ0dDb250ZXh0RHJhd0xpbmVhckdyYWRpZW50KHBsYXRmb3JtQ29udGV4dCwgbV9ncmFk
aWVudC5nZXQoKSwgZGF0YS5wb2ludDAsIGRhdGEucG9pbnQxLCBleHRlbmRPcHRpb25zKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfSwKICAgICAgICAgWyZdIChjb25zdCBSYWRpYWxEYXRhJiBk
YXRhKSB7CkBAIC0xNzMsNyArMTY5LDcgQEAgdm9pZCBHcmFkaWVudDo6cGFpbnQoQ0dDb250ZXh0
UmVmIHBsYXRmb3JtQ29udGV4dCkKICAgICAgICAgICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVD
VE0ocGxhdGZvcm1Db250ZXh0LCAtZGF0YS5wb2ludDAueCgpLCAtZGF0YS5wb2ludDAueSgpKTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgQ0dDb250ZXh0RHJhd1JhZGlhbEdyYWRpZW50
KHBsYXRmb3JtQ29udGV4dCwgZ3JhZGllbnQsIGRhdGEucG9pbnQwLCBkYXRhLnN0YXJ0UmFkaXVz
LCBkYXRhLnBvaW50MSwgZGF0YS5lbmRSYWRpdXMsIGV4dGVuZE9wdGlvbnMpOworICAgICAgICAg
ICAgQ0dDb250ZXh0RHJhd1JhZGlhbEdyYWRpZW50KHBsYXRmb3JtQ29udGV4dCwgbV9ncmFkaWVu
dC5nZXQoKSwgZGF0YS5wb2ludDAsIGRhdGEuc3RhcnRSYWRpdXMsIGRhdGEucG9pbnQxLCBkYXRh
LmVuZFJhZGl1cywgZXh0ZW5kT3B0aW9ucyk7CiAKICAgICAgICAgICAgIGlmIChuZWVkU2NhbGlu
ZykKICAgICAgICAgICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKHBsYXRmb3JtQ29udGV4
dCk7CkBAIC0xODYsNyArMTgyLDcgQEAgdm9pZCBHcmFkaWVudDo6cGFpbnQoQ0dDb250ZXh0UmVm
IHBsYXRmb3JtQ29udGV4dCkKICAgICAgICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0
Zm9ybUNvbnRleHQsIGRhdGEucG9pbnQwLngoKSwgZGF0YS5wb2ludDAueSgpKTsKICAgICAgICAg
ICAgIENHQ29udGV4dFJvdGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQsIChDR0Zsb2F0KS1NX1BJXzIp
OwogICAgICAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dCwgLWRh
dGEucG9pbnQwLngoKSwgLWRhdGEucG9pbnQwLnkoKSk7Ci0gICAgICAgICAgICBDR0NvbnRleHRE
cmF3Q29uaWNHcmFkaWVudChwbGF0Zm9ybUNvbnRleHQsIHBsYXRmb3JtR3JhZGllbnQoKSwgZGF0
YS5wb2ludDAsIGRhdGEuYW5nbGVSYWRpYW5zKTsKKyAgICAgICAgICAgIENHQ29udGV4dERyYXdD
b25pY0dyYWRpZW50KHBsYXRmb3JtQ29udGV4dCwgbV9ncmFkaWVudC5nZXQoKSwgZGF0YS5wb2lu
dDAsIGRhdGEuYW5nbGVSYWRpYW5zKTsKICAgICAgICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3Rh
dGUocGxhdGZvcm1Db250ZXh0KTsKICNlbHNlCiAgICAgICAgICAgICBVTlVTRURfUEFSQU0oZGF0
YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHRDRy5jcHAKaW5kZXggYTVlNTUxYTk4MDc4MjA0NThlMjlhNzAxYTM3MmM3
MzYzMjM4Mzg3MC4uZmJkZDBhM2JjOWNiNGE4MGRkMDlmYTQ5NjU1M2E5YmIwM2JjZDdiMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVjb3JkZXIuaCIKICNpbmNsdWRlICJGbG9h
dENvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNp
bmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMu
aAppbmRleCAyNWJmMmI5YjkzNTQyZTIwOTIwOTA4ZTA0YWMyNmMwMDliM2VlYjhhLi44ZjExMmQ3
MThhOTJiMTYyNTE2NWVmMzk4MmQwNzc2Njk0YTlhNWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmgKQEAgLTI3LDE1ICsyNywxNCBAQAogCiAjaW5jbHVkZSAiQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbi5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0LmgiCi0jaW5jbHVkZSAiRmxvYXRQ
b2ludC5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKICNpbmNsdWRlICJGb250Lmgi
CiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1
ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiUGF0dGVybi5o
IgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CiAjaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3Np
YUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAKaW5k
ZXggYmQ1YmM1NDIyMTZiOTk3NmY2NjZjNDQwNzI3YmY2MGNlZGQ3Zjg5Yy4uMDBiZThlOTFkMzU1
NzdiYjQ2OGI4Mzg4MzI1NmI3ZWQ5OWFmYzY4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9j
YWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAKQEAgLTMxLDYgKzMxLDcgQEAK
IAogI2luY2x1ZGUgIkNhaXJvT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJl
Y3QuaCIKKyNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAj
aW5jbHVkZSAiTmljb3NpYVBhaW50aW5nT3BlcmF0aW9uUmVwbGF5Q2Fpcm8uaCIKICNpbmNsdWRl
IDx0eXBlX3RyYWl0cz4KQEAgLTI5MSw3ICsyOTIsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50
KQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0
PihyZWN0LCBhZG9wdFJlZihncmFkaWVudC5jcmVhdGVQbGF0Zm9ybUdyYWRpZW50KDEuMCkpKSk7
CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGdyYWRpZW50LmNyZWF0
ZVBhdHRlcm4oMS4wKSkpOwogfQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVP
cGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlv
bnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3Bl
cmF0aW9ucy5jcHAKaW5kZXggMTUwMjQ2ODE0OTQxZDY3NzM1MGVkMzI4ODY1ZmM4N2U3MDRiYWJj
MC4uODgzNWY4OGQxYmJjZDIwM2MzMjU2MmRhMjQxNGNiYzI3YjZmYjBmOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3Bl
cmF0aW9ucy5jcHAKQEAgLTMwMSw3ICszMDEsNyBAQCBGaWxsU291cmNlOjpGaWxsU291cmNlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jgog
ICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTTsgLy8gRklYTUU6IFRoaXMgaXNu
J3QgcmVhbGx5IG5lZWRlZCBvbiBXaW5kb3dzCiAgICAgICAgIGJydXNoID0gc3RhdGUuZmlsbFBh
dHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb250ZXh0LCBzdGF0ZS5hbHBoYSwgdXNlclRv
QmFzZUNUTSk7CiAgICAgfSBlbHNlIGlmIChzdGF0ZS5maWxsR3JhZGllbnQgJiYgIXN0YXRlLmZp
bGxHcmFkaWVudC0+c3RvcHMoKS5pc0VtcHR5KCkpCi0gICAgICAgIGJydXNoID0gc3RhdGUuZmls
bEdyYWRpZW50LT5jcmVhdGVQbGF0Zm9ybUdyYWRpZW50SWZOZWNlc3NhcnkocGxhdGZvcm1Db250
ZXh0LnJlbmRlclRhcmdldCgpKTsKKyAgICAgICAgYnJ1c2ggPSBzdGF0ZS5maWxsR3JhZGllbnQt
PmNyZWF0ZUJydXNoKHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7CiAgICAgZWxzZQog
ICAgICAgICBicnVzaCA9IHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihjb2xvcik7CiB9
CkBAIC0zMTgsNyArMzE4LDcgQEAgU3Ryb2tlU291cmNlOjpTdHJva2VTb3VyY2UoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBjb25zdCBHcmFwaGljc0NvbnQKICAgICAgICAgQWZm
aW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE07IC8vIEZJWE1FOiBUaGlzIGlzbid0IHJlYWxseSBu
ZWVkZWQgb24gV2luZG93cwogICAgICAgICBicnVzaCA9IHN0YXRlLnN0cm9rZVBhdHRlcm4tPmNy
ZWF0ZVBsYXRmb3JtUGF0dGVybihjb250ZXh0LCBzdGF0ZS5hbHBoYSwgdXNlclRvQmFzZUNUTSk7
CiAgICAgfSBlbHNlIGlmIChzdGF0ZS5zdHJva2VHcmFkaWVudCkKLSAgICAgICAgYnJ1c2ggPSBz
dGF0ZS5zdHJva2VHcmFkaWVudC0+Y3JlYXRlUGxhdGZvcm1HcmFkaWVudElmTmVjZXNzYXJ5KHBs
YXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7CisgICAgICAgIGJydXNoID0gc3RhdGUuc3Ry
b2tlR3JhZGllbnQtPmNyZWF0ZUJydXNoKHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7
CiAgICAgZWxzZQogICAgICAgICBicnVzaCA9IHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xv
cihjb2xvcik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKaW5kZXggMDRlNGQ3NjQ5MzJmYTg5NTQ4MDI4
ZmUzNTllMzNkOGI2NTY3NDk1ZC4uMGRmZWFiNjcyZWQyMWUxZGI1YzZkYjc4YjFiMTRkZDczOTQ5
YTBiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YWRpZW50RGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFkaWVudERpcmVjdDJELmNwcApAQCAtMzEsMjkgKzMxLDE0IEBACiAjaW5jbHVkZSAi
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKICNpbmNsdWRlIDxkMmQxLmg+CiAjaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKICNkZWZpbmUg
R1JBRElFTlRfRFJBV0lORyAzCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBHcmFkaWVu
dDo6cGxhdGZvcm1EZXN0cm95KCkKK3ZvaWQgR3JhZGllbnQ6OnN0b3BzQ2hhbmdlZCgpCiB7Ci0g
ICAgaWYgKG1fZ3JhZGllbnQpCi0gICAgICAgIG1fZ3JhZGllbnQtPlJlbGVhc2UoKTsKLSAgICBt
X2dyYWRpZW50ID0gbnVsbHB0cjsKLX0KLQotSUQyRDFCcnVzaCogR3JhZGllbnQ6OnBsYXRmb3Jt
R3JhZGllbnQoKQotewotICAgIEFTU0VSVChtX2dyYWRpZW50KTsKLSAgICByZXR1cm4gbV9ncmFk
aWVudDsKLX0KLQotSUQyRDFCcnVzaCogR3JhZGllbnQ6OmNyZWF0ZVBsYXRmb3JtR3JhZGllbnRJ
Zk5lY2Vzc2FyeShJRDJEMVJlbmRlclRhcmdldCogY29udGV4dCkKLXsKLSAgICBnZW5lcmF0ZUdy
YWRpZW50KGNvbnRleHQpOwotICAgIHJldHVybiBtX2dyYWRpZW50OworICAgIG1fYnJ1c2ggPSBu
dWxscHRyOwogfQogCiBzdGF0aWMgYm9vbCBjaXJjbGVJc0VudGlyZWx5Q29udGFpbmVkKGNvbnN0
IEZsb2F0UG9pbnQmIGNlbnRlckEsIGZsb2F0IHJhZGl1c0EsIGNvbnN0IEZsb2F0UG9pbnQmIGNl
bnRlckIsIGZsb2F0IHJhZGl1c0IpCkBAIC02NSwxNSArNTAsMTYgQEAgc3RhdGljIGJvb2wgY2ly
Y2xlSXNFbnRpcmVseUNvbnRhaW5lZChjb25zdCBGbG9hdFBvaW50JiBjZW50ZXJBLCBmbG9hdCBy
YWRpdXNBLAogICAgIHJldHVybiBkZWx0YVggKiBkZWx0YVggKyBkZWx0YVkgKiBkZWx0YVkgPCBk
ZWx0YVJhZGl1cyAqIGRlbHRhUmFkaXVzICYmIHJhZGl1c0EgPCByYWRpdXNCOwogfQogCi12b2lk
IEdyYWRpZW50OjpnZW5lcmF0ZUdyYWRpZW50KElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJn
ZXQpCitJRDJEMUJydXNoKiBHcmFkaWVudDo6Y3JlYXRlQnJ1c2goSUQyRDFSZW5kZXJUYXJnZXQq
IHJlbmRlclRhcmdldCkKIHsKLSAgICBzb3J0U3RvcHNJZk5lY2Vzc2FyeSgpOworICAgIHNvcnRT
dG9wcygpOwogCiAgICAgVmVjdG9yPEQyRDFfR1JBRElFTlRfU1RPUD4gZ3JhZGllbnRTdG9wczsK
LSAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIEV4dGVuZGVkQ29sb3IuCi0gICAgZm9yIChh
dXRvIHN0b3AgOiBtX3N0b3BzKSB7CisgICAgZ3JhZGllbnRTdG9wcy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG1fc3RvcHMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIHN0b3AgOiBtX3N0b3BzKSB7
CisgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igbm9uLXNSR0JBIGNvbG9yIHNwYWNl
cy4KICAgICAgICAgYXV0byBbciwgZywgYiwgYV0gc3RvcC5jb2xvci50b1NSR0JBTG9zc3k8Zmxv
YXQ+KCk7Ci0gICAgICAgIGdyYWRpZW50U3RvcHMuYXBwZW5kKEQyRDE6OkdyYWRpZW50U3RvcChz
dG9wLm9mZnNldCwgRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEpKSk7CisgICAgICAgIGdyYWRpZW50
U3RvcHMuZ3JhZGllbnRTdG9wcy51bmNoZWNrZWRBcHBlbmQoRDJEMTo6R3JhZGllbnRTdG9wKHN0
b3Aub2Zmc2V0LCBEMkQxOjpDb2xvckYociwgZywgYiwgYSkpKTsKICAgICB9CiAKICAgICBXVEY6
OnN3aXRjaE9uKG1fZGF0YSwKQEAgLTEyMiwxMSArMTA4LDYgQEAgdm9pZCBHcmFkaWVudDo6Z2Vu
ZXJhdGVHcmFkaWVudChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQogICAgIEhSRVNV
TFQgaHIgPSByZW5kZXJUYXJnZXQtPkNyZWF0ZUdyYWRpZW50U3RvcENvbGxlY3Rpb24oZ3JhZGll
bnRTdG9wcy5kYXRhKCksIGdyYWRpZW50U3RvcHMuc2l6ZSgpLCAmZ3JhZGllbnRTdG9wQ29sbGVj
dGlvbik7CiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAKLSAgICBpZiAobV9n
cmFkaWVudCkgewotICAgICAgICBtX2dyYWRpZW50LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1fZ3Jh
ZGllbnQgPSBudWxscHRyOwotICAgIH0KLQogICAgIFdURjo6c3dpdGNoT24obV9kYXRhLAogICAg
ICAgICBbJl0gKGNvbnN0IExpbmVhckRhdGEmIGRhdGEpIHsKICAgICAgICAgICAgIElEMkQxTGlu
ZWFyR3JhZGllbnRCcnVzaCogbGluZWFyR3JhZGllbnQgPSBudWxscHRyOwpAQCAtMTM1LDcgKzEx
Niw3IEBAIHZvaWQgR3JhZGllbnQ6OmdlbmVyYXRlR3JhZGllbnQoSUQyRDFSZW5kZXJUYXJnZXQq
IHJlbmRlclRhcmdldCkKICAgICAgICAgICAgICAgICBEMkQxOjpCcnVzaFByb3BlcnRpZXMoKSwg
Z3JhZGllbnRTdG9wQ29sbGVjdGlvbi5nZXQoKSwKICAgICAgICAgICAgICAgICAmbGluZWFyR3Jh
ZGllbnQpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAg
ICAgICAgICBtX2dyYWRpZW50ID0gbGluZWFyR3JhZGllbnQ7CisgICAgICAgICAgICBtX2JydXNo
ID0gYWRvcHRDT00obGluZWFyR3JhZGllbnQpOwogICAgICAgICB9LAogICAgICAgICBbJl0gKGNv
bnN0IFJhZGlhbERhdGEmIGRhdGEpIHsKICAgICAgICAgICAgIEZsb2F0U2l6ZSBvZmZzZXQ7CkBA
IC0xNTQsMTQgKzEzNSwxNSBAQCB2b2lkIEdyYWRpZW50OjpnZW5lcmF0ZUdyYWRpZW50KElEMkQx
UmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCiAgICAgICAgICAgICAgICAgRDJEMTo6QnJ1c2hQ
cm9wZXJ0aWVzKCksIGdyYWRpZW50U3RvcENvbGxlY3Rpb24uZ2V0KCksCiAgICAgICAgICAgICAg
ICAgJnJhZGlhbEdyYWRpZW50KTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURF
RChocikpOwotICAgICAgICAgICAgbV9ncmFkaWVudCA9IHJhZGlhbEdyYWRpZW50OworICAgICAg
ICAgICAgbV9icnVzaCA9IGFkb3B0Q09NKHJhZGlhbEdyYWRpZW50KTsKICAgICAgICAgfSwKICAg
ICAgICAgWyZdIChjb25zdCBDb25pY0RhdGEmKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogaW1w
bGVtZW50IGNvbmljIGdyYWRpZW50IHJlbmRlcmluZy4KKyAgICAgICAgICAgIG1fYnJ1c2ggPSBu
dWxscHRyOwogICAgICAgICB9CiAgICAgKTsKIAotICAgIGhhc2goKTsKKyAgICByZXR1cm4gbV9i
cnVzaC5nZXQoKTsKIH0KIAogdm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTE3MCwxNSArMTUyLDE2IEBAIHZvaWQg
R3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCiAKICAgICBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKICAgICAgICAgWyZdIChjb25zdCBM
aW5lYXJEYXRhJiBkYXRhKSB7Ci0gICAgICAgICAgICBpZiAoIW1fY2FjaGVkSGFzaCB8fCAhbV9n
cmFkaWVudCkKLSAgICAgICAgICAgICAgICBnZW5lcmF0ZUdyYWRpZW50KGQyZENvbnRleHQpOwor
ICAgICAgICAgICAgLy8gRklYTUU6IElmIHdlIGhhdmUgYSBicnVzaCwgd2h5IGNhbiB3ZSByZS11
c2UgaXQ/IFdoYXQgZ3VhcmFudGVlcyBpdCdzIHJpZ2h0IGZvciB0aGlzIGNvbnRleHQ/CisgICAg
ICAgICAgICBpZiAoIW1fYnJ1c2gpCisgICAgICAgICAgICAgICAgY3JlYXRlQnJ1c2goZDJkQ29u
dGV4dCk7CiAKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgICAgICAgICAgZDJkQ29udGV4dC0+U2V0
VGFncyhHUkFESUVOVF9EUkFXSU5HLCBfX0xJTkVfXyk7CiAjZW5kaWYKIAogICAgICAgICAgICAg
Y29uc3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7Ci0gICAgICAgICAgICBkMmRDb250ZXh0
LT5GaWxsUmVjdGFuZ2xlKCZkMmRSZWN0LCBtX2dyYWRpZW50KTsKKyAgICAgICAgICAgIGQyZENv
bnRleHQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIG1fYnJ1c2guZ2V0KCkpOwogICAgICAgICB9
LAogICAgICAgICBbJl0gKGNvbnN0IFJhZGlhbERhdGEmIGRhdGEpIHsKICAgICAgICAgICAgIGJv
b2wgbmVlZFNjYWxpbmcgPSBkYXRhLmFzcGVjdFJhdGlvICE9IDE7CkBAIC0xOTksMTUgKzE4Miwx
NiBAQCB2b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQogICAgICAgICAgICAgICAgIGQyZENvbnRleHQtPlNldFRyYW5zZm9y
bShjdG0pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIW1fY2FjaGVkSGFzaCB8
fCAhbV9ncmFkaWVudCkKLSAgICAgICAgICAgICAgICBnZW5lcmF0ZUdyYWRpZW50KGQyZENvbnRl
eHQpOworICAgICAgICAgICAgLy8gRklYTUU6IElmIHdlIGhhdmUgYSBicnVzaCwgd2h5IGNhbiB3
ZSByZS11c2UgaXQ/IFdoYXQgZ3VhcmFudGVlcyBpdCdzIHJpZ2h0IGZvciB0aGlzIGNvbnRleHQ/
CisgICAgICAgICAgICBpZiAoIW1fYnJ1c2gpCisgICAgICAgICAgICAgICAgY3JlYXRlQnJ1c2go
ZDJkQ29udGV4dCk7CiAKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgICAgICAgICAgZDJkQ29udGV4
dC0+U2V0VGFncyhHUkFESUVOVF9EUkFXSU5HLCBfX0xJTkVfXyk7CiAjZW5kaWYKIAogICAgICAg
ICAgICAgY29uc3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7Ci0gICAgICAgICAgICBkMmRD
b250ZXh0LT5GaWxsUmVjdGFuZ2xlKCZkMmRSZWN0LCBtX2dyYWRpZW50KTsKKyAgICAgICAgICAg
IGQyZENvbnRleHQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIG1fYnJ1c2guZ2V0KCkpOwogCiAg
ICAgICAgICAgICBpZiAobmVlZFNjYWxpbmcpCiAgICAgICAgICAgICAgICAgY29udGV4dC5yZXN0
b3JlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuY3BwCmluZGV4IGRjOWY1
ZmU2ZmQ3NDc0MWEwYzU2MmNmOWNjN2FlZTExNzE4ZjkzY2QuLmQ2NDQ1ZDcwY2IzMDM3ZTcyYWUy
OTA2ZDY2MzZlZmZiNDQ4MWQ3NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0
MkQuY3BwCkBAIC0xNTUsMTEgKzE1NSwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJl
Y3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgYwogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCiB7Ci0gICAgQ09NUHRyPElEMkQxQnJ1c2g+IHBs
YXRmb3JtR3JhZGllbnQgPSBncmFkaWVudC5jcmVhdGVQbGF0Zm9ybUdyYWRpZW50SWZOZWNlc3Nh
cnkobV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotICAgIGlmICghcGxhdGZvcm1H
cmFkaWVudCkKKyAgICBhdXRvIGJydXNoID0gZ3JhZGllbnQuY3JlYXRlQnJ1c2gobV9wbGF0Zm9y
bUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOworICAgIGlmICghYnJ1c2gpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIERpcmVjdDJEOjpmaWxsUmVjdFdpdGhHcmFkaWVudChtX3BsYXRmb3JtQ29udGV4
dCwgcmVjdCwgcGxhdGZvcm1HcmFkaWVudC5nZXQoKSk7CisgICAgRGlyZWN0MkQ6OmZpbGxSZWN0
V2l0aEdyYWRpZW50KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBicnVzaC5nZXQoKSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRl
T3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KaW5kZXggNWY2NTMwM2NlYTdiMTBhOTAzMTNl
N2M5OTkzYzk3OTdmMGIzMzllZC4uMDlkODA1OGI1YjI1NmJjNWI0YzliYTlkNGFiM2ExZTU1Yzc0
ZmQxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1h
dG9yTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRv
ck1hYy5tbQpAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcp
CiAKLSNpbXBvcnQgIkZsb2F0UG9pbnQuaCIKKyNpbXBvcnQgIkdyYWRpZW50LmgiCiAjaW1wb3J0
ICJHcmFwaGljc0xheWVyLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJOU1Njcm9s
bGVySW1wRGV0YWlscy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9T
Lm1tCmluZGV4IDQyNTc1ZjBlNDVmZWMyMmM5YWJmZjY3NTMxOGE5MjE3ZjZkZWQyZjcuLmVlMTg5
Y2Y5ODczZjBjMGEwMzYzZTM2ZTM3NDQxMzBkODRjMmE5N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KQEAgLTkwMCw3ICs5MDAsNyBAQCBib29sIFJlbmRl
clRoZW1lSU9TOjpwYWludFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIs
IGNvbnN0IFBhaW50SQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNvbnN0IGludCBwcm9n
cmVzc0JhckhlaWdodCA9IDk7Ci0gICAgY29uc3QgZmxvYXQgdmVydGljYWxPZmZzZXQgPSAocmVj
dC5oZWlnaHQoKSAtIHByb2dyZXNzQmFySGVpZ2h0KSAvIDIuMDsKKyAgICBjb25zdCBmbG9hdCB2
ZXJ0aWNhbE9mZnNldCA9IChyZWN0LmhlaWdodCgpIC0gcHJvZ3Jlc3NCYXJIZWlnaHQpIC8gMi4w
ZjsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihwYWludEluZm8u
Y29udGV4dCgpKTsKICAgICBpZiAocmVjdC53aWR0aCgpIDwgMTAgfHwgcmVjdC5oZWlnaHQoKSA8
IDkpIHsKQEAgLTkxMiwyMSArOTEyLDIxIEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UHJv
Z3Jlc3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUGFpbnRJCiAgICAg
Ly8gMSkgRHJhdyB0aGUgcHJvZ3Jlc3MgYmFyIHRyYWNrLgogICAgIC8vIDEuMSkgRHJhdyB0aGUg
d2hpdGUgYmFja2dyb3VuZCB3aXRoIGdyZXkgZ3JhZGllbnQgYm9yZGVyLgogICAgIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0KCk7Ci0gICAgY29udGV4dC5zZXRT
dHJva2VUaGlja25lc3MoMC42OCk7CisgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoMC42
OGYpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwogCiAgICAgY29u
c3QgZmxvYXQgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiA9IHJlY3QueSgpICsgdmVydGljYWxP
ZmZzZXQ7CiAgICAgYXV0byBzdHJva2VHcmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoR3JhZGll
bnQ6OkxpbmVhckRhdGEgeyBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bv
c2l0aW9uKSwgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiAr
IHByb2dyZXNzQmFySGVpZ2h0IC0gMSkgfSk7Ci0gICAgc3Ryb2tlR3JhZGllbnQtPmFkZENvbG9y
U3RvcCgwLjAsIG1ha2VTaW1wbGVDb2xvcigxNDEsIDE0MSwgMTQxKSk7Ci0gICAgc3Ryb2tlR3Jh
ZGllbnQtPmFkZENvbG9yU3RvcCgwLjQ1LCBtYWtlU2ltcGxlQ29sb3IoMjM4LCAyMzgsIDIzOCkp
OwotICAgIHN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC41NSwgbWFrZVNpbXBsZUNvbG9y
KDIzOCwgMjM4LCAyMzgpKTsKLSAgICBzdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDEuMCwg
bWFrZVNpbXBsZUNvbG9yKDE0MSwgMTQxLCAxNDEpKTsKKyAgICBzdHJva2VHcmFkaWVudC0+YWRk
Q29sb3JTdG9wKHsgMC4wZiwgbWFrZVNpbXBsZUNvbG9yKDE0MSwgMTQxLCAxNDEpIH0pOworICAg
IHN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoeyAwLjQ1ZiwgbWFrZVNpbXBsZUNvbG9yKDIz
OCwgMjM4LCAyMzgpIH0pOworICAgIHN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoeyAwLjU1
ZiwgbWFrZVNpbXBsZUNvbG9yKDIzOCwgMjM4LCAyMzgpIH0pOworICAgIHN0cm9rZUdyYWRpZW50
LT5hZGRDb2xvclN0b3AoeyAxLjBmLCBtYWtlU2ltcGxlQ29sb3IoMTQxLCAxNDEsIDE0MSkgfSk7
CiAgICAgY29udGV4dC5zZXRTdHJva2VHcmFkaWVudChXVEZNb3ZlKHN0cm9rZUdyYWRpZW50KSk7
CiAKICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2spOwogCiAgICAgUGF0aCB0
cmFja1BhdGg7Ci0gICAgRmxvYXRSZWN0IHRyYWNrUmVjdChyZWN0LngoKSArIDAuMjUsIHZlcnRp
Y2FsUmVuZGVyaW5nUG9zaXRpb24gKyAwLjI1LCByZWN0LndpZHRoKCkgLSAwLjUsIHByb2dyZXNz
QmFySGVpZ2h0IC0gMC41KTsKKyAgICBGbG9hdFJlY3QgdHJhY2tSZWN0KHJlY3QueCgpICsgMC4y
NWYsIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyAwLjI1ZiwgcmVjdC53aWR0aCgpIC0gMC41
ZiwgcHJvZ3Jlc3NCYXJIZWlnaHQgLSAwLjVmKTsKICAgICBGbG9hdFNpemUgcm91bmRlZENvcm5l
clJhZGl1cyg1LCA0KTsKICAgICB0cmFja1BhdGguYWRkUm91bmRlZFJlY3QodHJhY2tSZWN0LCBy
b3VuZGVkQ29ybmVyUmFkaXVzKTsKICAgICBjb250ZXh0LmRyYXdQYXRoKHRyYWNrUGF0aCk7CkBA
IC05MzYsOSArOTM2LDkgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0Jhcihj
b25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBQYWludEkKICAgICBwYWludEluZm8u
Y29udGV4dCgpLmNsaXBSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KGJvcmRlciwgcm91bmRl
ZENvcm5lclJhZGl1cywgcm91bmRlZENvcm5lclJhZGl1cywgcm91bmRlZENvcm5lclJhZGl1cywg
cm91bmRlZENvcm5lclJhZGl1cykpOwogCiAgICAgZmxvYXQgdXBwZXJHcmFkaWVudEhlaWdodCA9
IHByb2dyZXNzQmFySGVpZ2h0IC8gMi47Ci0gICAgYXV0byB1cHBlckdyYWRpZW50ID0gR3JhZGll
bnQ6OmNyZWF0ZShHcmFkaWVudDo6TGluZWFyRGF0YSB7IEZsb2F0UG9pbnQocmVjdC54KCksIHZl
cnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyAwLjUpLCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0
aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgdXBwZXJHcmFkaWVudEhlaWdodCAtIDEuNSkgfSk7Ci0g
ICAgdXBwZXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgbWFrZVNpbXBsZUNvbG9yKDEzMywg
MTMzLCAxMzMsIDE4OCkpOwotICAgIHVwcGVyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgxLjAsIG1h
a2VTaW1wbGVDb2xvcigxOCwgMTgsIDE4LCA1MSkpOworICAgIGF1dG8gdXBwZXJHcmFkaWVudCA9
IEdyYWRpZW50OjpjcmVhdGUoR3JhZGllbnQ6OkxpbmVhckRhdGEgeyBGbG9hdFBvaW50KHJlY3Qu
eCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgMC41ZiksIEZsb2F0UG9pbnQocmVjdC54
KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyB1cHBlckdyYWRpZW50SGVpZ2h0IC0gMS41
KSB9KTsKKyAgICB1cHBlckdyYWRpZW50LT5hZGRDb2xvclN0b3AoeyAwLjBmLCBtYWtlU2ltcGxl
Q29sb3IoMTMzLCAxMzMsIDEzMywgMTg4KSB9KTsKKyAgICB1cHBlckdyYWRpZW50LT5hZGRDb2xv
clN0b3AoeyAxLjBmLCBtYWtlU2ltcGxlQ29sb3IoMTgsIDE4LCAxOCwgNTEpIH0pOwogICAgIGNv
bnRleHQuc2V0RmlsbEdyYWRpZW50KFdURk1vdmUodXBwZXJHcmFkaWVudCkpOwogCiAgICAgY29u
dGV4dC5maWxsUmVjdChGbG9hdFJlY3QocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRp
b24sIHJlY3Qud2lkdGgoKSwgdXBwZXJHcmFkaWVudEhlaWdodCkpOwpAQCAtOTQ3LDI3ICs5NDcs
MjcgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJP
YmplY3QmIHJlbmRlcmVyLCBjb25zdCBQYWludEkKICAgICBpZiAocmVuZGVyUHJvZ3Jlc3MuaXNE
ZXRlcm1pbmF0ZSgpKSB7CiAgICAgICAgIC8vIDIpIERyYXcgdGhlIHByb2dyZXNzIGJhci4KICAg
ICAgICAgZG91YmxlIHBvc2l0aW9uID0gY2xhbXBUbyhyZW5kZXJQcm9ncmVzcy5wb3NpdGlvbigp
LCAwLjAsIDEuMCk7Ci0gICAgICAgIGRvdWJsZSBiYXJXaWR0aCA9IHBvc2l0aW9uICogcmVjdC53
aWR0aCgpOwotICAgICAgICBhdXRvIGJhckdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShHcmFk
aWVudDo6TGluZWFyRGF0YSB7IEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5n
UG9zaXRpb24gKyAwLjUpLCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bv
c2l0aW9uICsgcHJvZ3Jlc3NCYXJIZWlnaHQgLSAxKSB9KTsKLSAgICAgICAgYmFyR3JhZGllbnQt
PmFkZENvbG9yU3RvcCgwLjAsIG1ha2VTaW1wbGVDb2xvcigxOTUsIDIxNywgMjQ3KSk7Ci0gICAg
ICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC40NSwgbWFrZVNpbXBsZUNvbG9yKDExOCwg
MTY0LCAyMjgpKTsKLSAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjQ5LCBtYWtl
U2ltcGxlQ29sb3IoMTE4LCAxNjQsIDIyOCkpOwotICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29s
b3JTdG9wKDAuNTEsIG1ha2VTaW1wbGVDb2xvcigzNiwgMTE0LCAyMTApKTsKLSAgICAgICAgYmFy
R3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjU1LCBtYWtlU2ltcGxlQ29sb3IoMzYsIDExNCwgMjEw
KSk7Ci0gICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMS4wLCBtYWtlU2ltcGxlQ29s
b3IoNTcsIDE0MiwgMjQ0KSk7CisgICAgICAgIGZsb2F0IGJhcldpZHRoID0gcG9zaXRpb24gKiBy
ZWN0LndpZHRoKCk7CisgICAgICAgIGF1dG8gYmFyR3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRl
KEdyYWRpZW50OjpMaW5lYXJEYXRhIHsgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5k
ZXJpbmdQb3NpdGlvbiArIDAuNWYpLCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRl
cmluZ1Bvc2l0aW9uICsgcHJvZ3Jlc3NCYXJIZWlnaHQgLSAxKSB9KTsKKyAgICAgICAgYmFyR3Jh
ZGllbnQtPmFkZENvbG9yU3RvcCh7IDAuMGYsIG1ha2VTaW1wbGVDb2xvcigxOTUsIDIxNywgMjQ3
KSB9KTsKKyAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCh7IDAuNDVmLCBtYWtlU2lt
cGxlQ29sb3IoMTE4LCAxNjQsIDIyOCkgfSk7CisgICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xv
clN0b3AoeyAwLjQ5ZiwgbWFrZVNpbXBsZUNvbG9yKDExOCwgMTY0LCAyMjgpIH0pOworICAgICAg
ICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKHsgMC41MWYsIG1ha2VTaW1wbGVDb2xvcigzNiwg
MTE0LCAyMTApIH0pOworICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKHsgMC41NWYs
IG1ha2VTaW1wbGVDb2xvcigzNiwgMTE0LCAyMTApIH0pOworICAgICAgICBiYXJHcmFkaWVudC0+
YWRkQ29sb3JTdG9wKHsgMS4wZiwgbWFrZVNpbXBsZUNvbG9yKDU3LCAxNDIsIDI0NCkgfSk7CiAg
ICAgICAgIGNvbnRleHQuc2V0RmlsbEdyYWRpZW50KFdURk1vdmUoYmFyR3JhZGllbnQpKTsKIAog
ICAgICAgICBhdXRvIGJhclN0cm9rZUdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShHcmFkaWVu
dDo6TGluZWFyRGF0YSB7IEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9z
aXRpb24pLCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsg
cHJvZ3Jlc3NCYXJIZWlnaHQgLSAxKSB9KTsKLSAgICAgICAgYmFyU3Ryb2tlR3JhZGllbnQtPmFk
ZENvbG9yU3RvcCgwLjAsIG1ha2VTaW1wbGVDb2xvcig5NSwgMTA3LCAxODMpKTsKLSAgICAgICAg
YmFyU3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjUsIG1ha2VTaW1wbGVDb2xvcig2Niwg
MTA2LCAxNzQsIDI0MCkpOwotICAgICAgICBiYXJTdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9w
KDEuMCwgbWFrZVNpbXBsZUNvbG9yKDM4LCAxMDQsIDE2NikpOworICAgICAgICBiYXJTdHJva2VH
cmFkaWVudC0+YWRkQ29sb3JTdG9wKHsgMC4wZiwgbWFrZVNpbXBsZUNvbG9yKDk1LCAxMDcsIDE4
MykgfSk7CisgICAgICAgIGJhclN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoeyAwLjVmLCBt
YWtlU2ltcGxlQ29sb3IoNjYsIDEwNiwgMTc0LCAyNDApIH0pOworICAgICAgICBiYXJTdHJva2VH
cmFkaWVudC0+YWRkQ29sb3JTdG9wKHsgMS4wZiwgbWFrZVNpbXBsZUNvbG9yKDM4LCAxMDQsIDE2
NikgfSk7CiAgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlR3JhZGllbnQoV1RGTW92ZShiYXJTdHJv
a2VHcmFkaWVudCkpOwogCiAgICAgICAgIFBhdGggYmFyUGF0aDsKICAgICAgICAgaW50IGxlZnQg
PSByZWN0LngoKTsKICAgICAgICAgaWYgKCFyZW5kZXJQcm9ncmVzcy5zdHlsZSgpLmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgICAgIGxlZnQgPSByZWN0Lm1heFgoKSAtIGJhcldp
ZHRoOwotICAgICAgICBGbG9hdFJlY3QgYmFyUmVjdChsZWZ0ICsgMC4yNSwgdmVydGljYWxSZW5k
ZXJpbmdQb3NpdGlvbiArIDAuMjUsIHN0ZDo6bWF4KGJhcldpZHRoIC0gMC41LCAwLjApLCBwcm9n
cmVzc0JhckhlaWdodCAtIDAuNSk7CisgICAgICAgIEZsb2F0UmVjdCBiYXJSZWN0KGxlZnQgKyAw
LjI1ZiwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIDAuMjVmLCBzdGQ6Om1heChiYXJXaWR0
aCAtIDAuNWYsIDAuMGYpLCBwcm9ncmVzc0JhckhlaWdodCAtIDAuNWYpOwogICAgICAgICBiYXJQ
YXRoLmFkZFJvdW5kZWRSZWN0KGJhclJlY3QsIHJvdW5kZWRDb3JuZXJSYWRpdXMpOwogICAgICAg
ICBjb250ZXh0LmRyYXdQYXRoKGJhclBhdGgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCmlu
ZGV4IDU0ODM1ODNhYzZhZTFhNTM2YWI4OTFiOTNhZWQ1ZWU1YTc3ZjA5ODcuLmEwZmQzYzNjYmEy
YjAzMGM3MTQ1NDg5ODEwYjEyNDc1NmMyYWNhMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcApAQCAt
MjM0LDEyICsyMzQsMTAgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBw
bHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgR3JhcGgKIAogdm9pZCBSZW5kZXJT
VkdSZXNvdXJjZUdyYWRpZW50OjphZGRTdG9wcyhHcmFkaWVudERhdGEqIGdyYWRpZW50RGF0YSwg
Y29uc3QgVmVjdG9yPEdyYWRpZW50OjpDb2xvclN0b3A+JiBzdG9wcywgY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlKSBjb25zdAogeworICAgIEFTU0VSVChncmFkaWVudERhdGEpOwogICAgIEFTU0VS
VChncmFkaWVudERhdGEtPmdyYWRpZW50KTsKLQotICAgIGZvciAoR3JhZGllbnQ6OkNvbG9yU3Rv
cCBzdG9wIDogc3RvcHMpIHsKLSAgICAgICAgc3RvcC5jb2xvciA9IHN0eWxlLmNvbG9yQnlBcHBs
eWluZ0NvbG9yRmlsdGVyKHN0b3AuY29sb3IpOwotICAgICAgICBncmFkaWVudERhdGEtPmdyYWRp
ZW50LT5hZGRDb2xvclN0b3Aoc3RvcCk7Ci0gICAgfQorICAgIGZvciAoYXV0byYgc3RvcCA6IHN0
b3BzKQorICAgICAgICBncmFkaWVudERhdGEtPmdyYWRpZW50LT5hZGRDb2xvclN0b3AoeyBzdG9w
Lm9mZnNldCwgc3R5bGUuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoc3RvcC5jb2xvcikgfSk7
CiB9CiAKIEdyYWRpZW50U3ByZWFkTWV0aG9kIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OnBs
YXRmb3JtU3ByZWFkTWV0aG9kRnJvbVNWR1R5cGUoU1ZHU3ByZWFkTWV0aG9kVHlwZSBtZXRob2Qp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlR3JhZGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VHcmFkaWVudC5oCmluZGV4IDE0MGM3MGVkNTM1YTA3MzBhZjQ4MDhjNTc5YWFk
ZTlkYjQ4OTY4NDEuLmZmYjkwMGJkZjRlZGVjYWIyZWI4YWIwZmI1ZjI1MzRhYTY4NGI2YjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VH
cmFkaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VHcmFkaWVudC5oCkBAIC0yMSw3ICsyMSw2IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5j
bHVkZSAiR3JhZGllbnQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlJl
bmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiU1ZHR3JhZGllbnRFbGVtZW50
LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCmluZGV4IDBjNjA3
ZDgzOGFhNTk4OWM1MWVlOWI0OWZjYzJlMzZkMDk0NDFhYWIuLjU4MzcwMTgwNmY3YTVlYzZlOTM1
NGVkMDE0YWFlNzU5NjkzYTM2YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdH
cmFkaWVudEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFkaWVudEVs
ZW1lbnQuY3BwCkBAIC0xMDIsMTggKzEwMiwxMSBAQCBWZWN0b3I8R3JhZGllbnQ6OkNvbG9yU3Rv
cD4gU1ZHR3JhZGllbnRFbGVtZW50OjpidWlsZFN0b3BzKCkKIHsKICAgICBWZWN0b3I8R3JhZGll
bnQ6OkNvbG9yU3RvcD4gc3RvcHM7CiAgICAgZmxvYXQgcHJldmlvdXNPZmZzZXQgPSAwLjBmOwot
CiAgICAgZm9yIChhdXRvJiBzdG9wIDogY2hpbGRyZW5PZlR5cGU8U1ZHU3RvcEVsZW1lbnQ+KCp0
aGlzKSkgewotICAgICAgICBjb25zdCBDb2xvciYgY29sb3IgPSBzdG9wLnN0b3BDb2xvckluY2x1
ZGluZ09wYWNpdHkoKTsKLQotICAgICAgICAvLyBGaWd1cmUgb3V0IHJpZ2h0IG1vbm90b25pYyBv
ZmZzZXQuCi0gICAgICAgIGZsb2F0IG9mZnNldCA9IHN0b3Aub2Zmc2V0KCk7Ci0gICAgICAgIG9m
ZnNldCA9IHN0ZDo6bWluKHN0ZDo6bWF4KHByZXZpb3VzT2Zmc2V0LCBvZmZzZXQpLCAxLjBmKTsK
LSAgICAgICAgcHJldmlvdXNPZmZzZXQgPSBvZmZzZXQ7Ci0KLSAgICAgICAgc3RvcHMuYXBwZW5k
KEdyYWRpZW50OjpDb2xvclN0b3Aob2Zmc2V0LCBjb2xvcikpOworICAgICAgICBhdXRvIG1vbm90
b25pY2FsbHlJbmNyZWFzaW5nT2Zmc2V0ID0gc3RkOjpjbGFtcChzdG9wLm9mZnNldCgpLCBwcmV2
aW91c09mZnNldCwgMS4wZik7CisgICAgICAgIHByZXZpb3VzT2Zmc2V0ID0gbW9ub3RvbmljYWxs
eUluY3JlYXNpbmdPZmZzZXQ7CisgICAgICAgIHN0b3BzLmFwcGVuZCh7IG1vbm90b25pY2FsbHlJ
bmNyZWFzaW5nT2Zmc2V0LCBzdG9wLnN0b3BDb2xvckluY2x1ZGluZ09wYWNpdHkoKSB9KTsKICAg
ICB9Ci0KICAgICByZXR1cm4gc3RvcHM7CiB9CiAK
</data>
<flag name="review"
          id="419465"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404103</attachid>
            <date>2020-07-12 09:55:01 -0700</date>
            <delta_ts>2020-07-12 10:13:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214221-20200712095500.patch</filename>
            <type>text/plain</type>
            <size>80936</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0Mjc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWM5YTNjODU1NzFhYWZk
ZjViNGYwMzhjZGU1ZjA0MGZlNTk0ZGU0YS4uNTMxNDQ5NzM5ZWE2MWMyOTQ1ODIyODY5MzUxMGYy
YWQ4OTE0MDAyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MiBAQAorMjAyMC0wNy0xMiAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxpZnkgYW5kIGltcHJv
dmUgR3JhZGllbnQsIHNvbWUgb3RoZXIgc21hbGwgY29sb3ItcmVsYXRlZCByZW1vdmFscworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0MjIxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KKworICAgICAgICAqIGNzcy9DU1NHcmFkaWVu
dFZhbHVlLmNwcDogUmVtb3ZlZCBzb21lIHVubmVlZGVkIGluY2x1ZGVzLgorCisgICAgICAgICog
aHRtbC9Db2xvcklucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcklucHV0VHlw
ZTo6Y3VycmVudENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9ySW5wdXRU
eXBlOjpzaG91bGRTaG93U3VnZ2VzdGlvbnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGh0
bWwvQ29sb3JJbnB1dFR5cGUuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAgICAgICog
aHRtbC9IVE1MRG9jdW1lbnQuY3BwOiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGUgb2YgSGFzaFRv
b2xzLmguCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNHcmFkaWVudDo6Y3JlYXRlKTogTW92ZWQgdGhlc2UgZnVuY3Rp
b25zIG91dCBvZiB0aGUKKyAgICAgICAgaGVhZGVyIHNpbmNlIGlubGluaW5nIHNob3VsZCBiZSB0
aGUgc2FtZSBvciBiZXR0ZXIgd2l0aCB0aGVtIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNHcmFkaWVudDo6fkNhbnZhc0dyYWRpZW50KTogTW92ZWQgdGhpcyBvdXQgb2YgdGhlCisgICAg
ICAgIGhlYWRlciBzbyB3ZSBkb24ndCBuZWVkIHRvIGluY2x1ZGUgR3JhZGllbnQuaCBpbiB0aGUg
aGVhZGVyLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzR3JhZGllbnQ6OmFkZENvbG9yU3RvcCk6
IFVwZGF0ZWQgZm9yIGNoYW5nZSB0bworICAgICAgICBHcmFkaWVudDo6YWRkQ29sb3JTdG9wIGFu
ZCBtb3ZlIENvbG9yIHJhdGhlciB0aGFuIGNvcHlpbmcgaXQuCisKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9DYW52YXNHcmFkaWVudC5oOiBSZW1vdmVkIGluY2x1ZGUgb2YgR3JhZGllbnQuaC4KKyAg
ICAgICAgTW92ZWQgdGhpbmdzIG91dCBvZiB0aGUgaGVhZGVyIHRvIG1ha2UgdGhhdCB3b3JrLgor
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDYW52YXM6OmJ1aWxkQXJyYXlGb3JDYW52YXNHcmFkaWVudCk6IFJlbW92
ZWQKKyAgICAgICAgdXNlIG9mIEdyYWRpZW50Ojp0eXBlIGFuZCBpbnN0ZWFkIHVuaWZ5IHRoZSB0
eXBlIHN0cmluZyBjb2RlIHdpdGgKKyAgICAgICAgdGhlIGNvZGUgdGhhdCBpbnRlcnByZXRzIHRo
ZSBkYXRhIGZvciB0aGUgZGlmZmVyZW50IHR5cGVzLgorCisgICAgICAgICogcGFnZS9GcmFtZVZp
ZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpyZWNhbGN1bGF0ZVNjcm9sbGJh
ck92ZXJsYXlTdHlsZSk6IFJlZmFjdG9yZWQKKyAgICAgICAgdG8gZWxpbWluYXRlIHRoZSBtdWx0
aXBsZSByZWR1bmRhbnQgY29kZSBwYXRocywgb3RoZXJ3aXNpbmcgbGVhdmluZworICAgICAgICB0
aGUgbG9naWMgdW5jaGFuZ2VkLgorCisgICAgICAgICogcGxhdGZvcm0vQ29sb3JDaG9vc2VyQ2xp
ZW50Lmg6IFJlbW92ZSB1bm5lZWRlZCBpbmNsdWRlcyBhbmQgdW51c2VkCisgICAgICAgIGN1cnJl
bnRDb2xvciBhbmQgc2hvdWxkU2hvd1N1Z2dlc3Rpb25zIGZ1bmN0aW9ucy4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRp
ZW50OjpjcmVhdGUpOiBSZXBsYWNlZCBjcmVhdGUgZnVuY3Rpb25zIHRoYXQgdGFrZQorICAgICAg
ICB0eXBlLXNwZWNpZmljIGRhdGEgc3RydWN0dXJlIHdpdGggb25lIHRoYXQgdGFrZXMgdGhlIHZh
cmlhbnQgRGF0YS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpHcmFkaWVudCk6IERpdHRv
LiBBbHNvIHJlbW92ZWQgcGxhdGZvcm1Jbml0LgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6
On5HcmFkaWVudCk6IFJlbW92ZWQgcGxhdGZvcm1EZXN0cm95LgorICAgICAgICAoV2ViQ29yZTo6
R3JhZGllbnQ6OnR5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGll
bnQ6OmFkZENvbG9yU3RvcCk6IFRha2UgYW4gcnZhbHVlIHJlZmVyZW5jZSB0byBjdXQgZG93bgor
ICAgICAgICBhIGxpdHRsZSBiaXQgb24gcmVmZXJlbmNlIGNvdW50IGNodXJuLiBSZXBsYWNlZCB0
aGUgcGxhdGZvcm1EZXN0cm95CisgICAgICAgIGZ1bmN0aW9uIHdpdGggYSBuZXcgc3RvcHNDaGFu
Z2VkIGZ1bmN0aW9uLiBSZW1vdmVkIGFuIHVubmVlZGVkIG92ZXJsb2FkCisgICAgICAgIHRoYXQg
dGFrZXMgdGhlIHR3byBwYXJ0cyBvZiBhIENvbG9yU3RvcCBzZXBhcmF0ZWx5LgorICAgICAgICAo
V2ViQ29yZTo6R3JhZGllbnQ6OnNldFNvcnRlZENvbG9yU3RvcHMpOiBVc2Ugc3RvcHNDaGFuZ2Vk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNvcnRTdG9wcyBjb25zdCk6IFNpbXBsaWZ5
IGEgYml0LCB1c2luZyBhIGxhbWJkYS4KKyAgICAgICAgQWxzbyBnYXZlIHRoaXMgYSBzaG9ydGVy
IG5hbWU7IGl0IHN0aWxsIG9wdGltaXplcyBieSBub3Qgc29ydGluZyBpZgorICAgICAgICB0aGUg
dmVjdG9yIGlzIGFscmVhZHkgc29ydGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6Omhh
c0FscGhhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzZXRT
cHJlYWRNZXRob2QpOiBSZW1vdmVkIHNvbWUgc2xpZ2h0bHkgb3ZlcnplYWxvdXMKKyAgICAgICAg
Y29kZSBjaGVja2luZyB0aGlzIGlzbid0IHVzZWQgYWZ0ZXIgY3JlYXRpbmcgdGhlIHBsYXRmb3Jt
LXNwZWNpZmljIGdyYWRpZW50LgorICAgICAgICBEZWNpZGVkIG5vdCB0byBib3RoZXIgd2l0aCB0
aGlzIGZvciBub3cuCisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c2V0R3JhZGllbnRTcGFj
ZVRyYW5zZm9ybSk6IFR3ZWFrZWQgZm9ybWF0dGluZy4KKyAgICAgICAgKFdlYkNvcmU6OmFkZCk6
IEFkZGVkIG92ZXJsb2FkcyB0byBhZGQoSGFzaGVyJikgc28gd2UgY2FuIHVzZSBjb21wdXRlSGFz
aC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpoYXNoIGNvbnN0KTogVXNlIGNvbXB1dGVI
YXNoIGluc3RlYWQgb2YgaGFzaE1lbW9yeS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYWRpZW50Lmg6IFVzZSBSZXRhaW5QdHIsIENPTVB0ciwgYW5kIFJlZlB0ciBpbnN0ZWFkCisg
ICAgICAgIG9mIG1hbnVhbGx5IG1hbmFnaW5nIHRoZSBsaWZldGltZXMgb2YgdGhlIHBsYXRmb3Jt
LXNwZWNpZmljIHVuZGVybHlpbmcKKyAgICAgICAgZ3JhZGllbnQgb2JqZWN0cy4gQWxzbyByZW1v
dmVkIHRoZSB1bmhlbHBmdWwgUGxhdGZvcm1HcmFkaWVudCB0eXBlLiBUaGlzCisgICAgICAgIHBh
dHRlcm4sIGFsbCB0b28gY29tbW9uIGluIG91ciBwbGF0Zm9ybSBsaWJyYXJ5LCBwcm92aWRlcyBu
byB1c2VmdWwKKyAgICAgICAgYWJzdHJhY3Rpb24gaGVyZS4gUmVtb3ZlZCB1bm5lZWRlZCBjb25z
dHJ1Y3RvcnMgZnJvbSBDb2xvclN0b3AuCisgICAgICAgIFVwZGF0ZWQgZm9yIGNoYW5nZXMgYWJv
dmUuIEFkZGVkIHBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9ucyBjcmVhdGVCcnVzaCwKKyAgICAg
ICAgY3JlYXRlUGF0dGVybiwgYW5kIGNyZWF0ZUNHR3JhZGllbnQuIFNpbXBsaWZ5IGVuY29kaW5n
IGFuZCBkZWNvZGluZyBieQorICAgICAgICB0YWtpbmcgYWR2YW50YWdlIG9mIHRoZSBzdXBwb3J0
IGZvciBlbmNvZGluZy9kZWNvZGluZyB2YXJpYW50cy4KKyAgICAgICAgUmVtb3ZlIHRoZSBlbnVt
IEdyYWRpZW50OjpUeXBlIGVudGlyZWx5LiBSZW1vdmVkIHRoZSBpbnZhbGlkYXRlSGFzaAorICAg
ICAgICBmdW5jdGlvbiBiZWNhdXNlIGl0J3Mgb25seSB1c2VkIGluIGEgZmV3IHNldHRlcnMgYW5k
IHNldHRpbmcgdGhlIGhhc2gKKyAgICAgICAgdG8gMCBpcyBhIGZpbmUgd2F5IHRvIHdyaXRlIGl0
IHRoZXJlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZSk6IE1vdmVkIGhlcmUgZnJvbQorICAgICAgICB0aGUgaGVhZGVyIHNvIHdlIGRvbid0
IG5lZWQgdG8gaW5jbHVkZSBHcmFkaWVudC5oIGluIHRoZSBoZWFkZXIuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6fkdyYXBoaWNzQ29udGV4dFN0YXRlKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6b3BlcmF0b3I9KTogRGl0
dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDogUmVt
b3ZlZCBpbmNsdWRlIG9mIEdyYWRpZW50LmguCisgICAgICAgIE1vdmVkIHRoaW5ncyBvdXQgb2Yg
dGhlIGhlYWRlciB0byBtYWtlIHRoYXQgd29yay4KKworCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJv
OjpGaWxsU291cmNlOjpGaWxsU291cmNlKTogVXNlIGNyZWF0ZVBhdHRlcm4gaW5zdGVhZCBvZgor
ICAgICAgICBjcmVhdGVQbGF0Zm9ybUdyYWRpZW50LgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86
OlN0cm9rZVNvdXJjZTo6U3Ryb2tlU291cmNlKTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YWRpZW50OjpjcmVhdGVQYXR0ZXJuKToKKworCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFkaWVudENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50Ojpz
dG9wc0NoYW5nZWQpOiBSZW5hbWVkIGZyb20gcGxhdGZvcm1EZXN0cm95LgorICAgICAgICAoV2Vi
Q29yZTo6aW50ZXJwb2xhdGVDb2xvclN0b3ApOiBSZXdyb3RlIHRvIHVzZSBleGlzdGluZyBibGVu
ZCBmdW5jdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDb25pYyk6IENoYW5nZWQgcmV0
dXJuIHR5cGUgdG8gUmVmUHRyLiBUd2Vha2VkIHRvIG1hdGNoCisgICAgICAgIFdlYktpdCBjb2Rp
bmcgc3R5bGUgYSBiaXQgYmV0dGVyLCB1c2UgYXV0bywgdXNlIFZlY3Rvcjo6Zmlyc3QvbGFzdCwg
YW5kCisgICAgICAgIHVwZGF0ZWQgZm9yIHJlbW92YWwgb2YgdGhlIEdyYWRpZW50OjpDb2xvclN0
b3AgY29uc3RydWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6Y3JlYXRlUGF0dGVy
bik6IFJlbmFtZWQgZnJvbSBjcmVhdGVQbGF0Zm9ybUdyYWRpZW50LgorICAgICAgICBDaGFuZ2Vk
IHRvIHJldHVybiBhIFJlZlB0ciBpbnN0ZWFkIG9mIGEgcmF3IHBvaW50ZXIgdGhlIGNhbGxlciBu
ZWVkcyB0bworICAgICAgICBhZG9wdCBhdCBlYWNoIGNhbGwgc2l0ZS4gUmVmYWN0b3JlZCBzbyBp
dCBubyBsb25nZXIgdXNlcyBHcmFkaWVudDo6dHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRp
ZW50OjpmaWxsKTogVXNlIGNyZWF0ZVBhdHRlcm4uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJlY3QpOiBEaXR0by4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhZGllbnQ6OnN0b3BzQ2hhbmdlZCk6IFJlbmFtZWQgZnJvbSBwbGF0Zm9ybURlc3Ryb3ksIGFu
ZAorICAgICAgICBzaW1wbGlmaWVkIGltcGxlbWVudGF0aW9uIG5vdyB0aGF0IHdlIHVzZSBSZXRh
aW5QdHIuCisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6Y3JlYXRlQ0dHcmFkaWVudCk6IFJl
bmFtZWQgZnJvbSBwbGF0Zm9ybUdyYWRpZW50LAorICAgICAgICBnb3QgcmlkIG9mIHRoZSByZXR1
cm4gdmFsdWUsIGFuZCBtYWRlIGl0IGNhbGxlciByZXNwb25zaWJpbGl0eSB0byBvbmx5CisgICAg
ICAgIGNhbGwgdGhpcyB3aGVuIGEgZ3JhZGVpdG4gbmVlZHMgdG8gYmUgYWxsb2NhdGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnBhaW50KTogVXBkYXRlZCB0byB1c2UgdGhlIGFib3Zl
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3Bw
OiBBZGQgaW5jbHVkZSBvZiBHcmFkaWVudC5oLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDoKKyAgICAgICAgQWRkZWQgaW5jbHVk
ZSBvZiBHcmFkaWVudC5oIHNpbmNlIHRoZSBmdW5jdGlvbiB0ZW1wbGF0ZXMgaW4gdGhpcyBmaWxl
CisgICAgICAgIGVuY29kZSBhbmQgZGVjb2RlIGdyYWRpZW50cy4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIu
Y3BwOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3Qp
OiBVc2UgY3JlYXRlUGF0dGVybi4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9E
aXJlY3QyRE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OkZpbGxT
b3VyY2U6OkZpbGxTb3VyY2UpOiBVc2UgY3JlYXRlQnJ1c2gKKyAgICAgICAgKFdlYkNvcmU6OkRp
cmVjdDJEOjpTdHJva2VTb3VyY2U6OlN0cm9rZVNvdXJjZSk6IERpdHRvLgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhZGllbnQ6OnN0b3BzQ2hhbmdlZCk6IFJlbmFtZWQgZnJvbSBwbGF0Zm9ybURlc3Ry
b3kgYW5kCisgICAgICAgIHNpbXBsaWZpZWQgaW1wbGVtZW50YXRpb24gbm93IHRoYXQgd2UgdXNl
IENPTVB0ci4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpjcmVhdGVQbGF0Zm9ybUdyYWRp
ZW50SWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmNy
ZWF0ZUJydXNoKTogUmVuYW1lZCBmcm9tIGdlbmVyYXRlR3JhZGllbnQgYW5kCisgICAgICAgIGFk
ZGVkIGEgcmV0dXJuIHZhbHVlLiBTaW1wbGlmaWVkIG5vdyB0aGF0IHdlIHVzZSBDT01QdHIsIG9w
dGltaXplZAorICAgICAgICB0aGUgY29kZSBhIGJpdCwgYW5kIGFkZGVkIHNvbWUgRklYTUUgYWJv
dXQgbWlzdGFrZXMgSSBub3RpY2VkLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmZpbGwp
OiBVc2UgY3JlYXRlQnJ1c2ggYW5kIG1fYnJ1c2guCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxSZWN0KTogVXNlIGNyZWF0ZUJydXNo
LgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tOiBBZGRlZCBp
bmNsdWRlIG9mIEdyYWRpZW50LmguCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJ
T1MubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0Jh
cik6IFVwZGF0ZWQgZm9yIGNoYW5nZXMgdG8KKyAgICAgICAgYWRkQ29sb3JTdG9wLiBBbHNvIHJl
bW92ZSBhIGxvdCBvZiB1bm5lY2Vzc2FyeSBjb252ZXJzaW9uIGZyb20gZmxvYXQKKyAgICAgICAg
dG8gZG91YmxlIGFuZCBiYWNrIHRvIGZsb2F0LgorCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1Jlc291cmNlR3JhZGllbnQ6OmFkZFN0b3BzKTogVXBkYXRlIHRvIG1ha2UKKyAgICAgICAgYW5k
IG1vdmUgYSBuZXcgY29sb3Igc3RvcCBpbnN0ZWFkIG9mIGNvcHlpbmcgaXQsIG1vZGlmeWluZyBp
dCBpbgorICAgICAgICBwbGFjZSwgYW5kIHRoZW4gY29weWluZyBpdCBhZ2Fpbi4KKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwOiBSZW1vdmVkIGlu
Y2x1ZGUgb2YKKyAgICAgICAgR3JhZGllbnQuaC4KKworICAgICAgICAqIHN2Zy9TVkdHcmFkaWVu
dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHR3JhZGllbnRFbGVtZW50OjpidWls
ZFN0b3BzKTogVXNlIHN0ZDo6Y2xhbXAgdG8gY29udmVydAorICAgICAgICB0aGUgb2Zmc2V0cyBp
bnRvIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBvbmVzIGluIGEgbW9yZSBkaXJlY3Qgd2F5LAor
ICAgICAgICB1c2luZyB2YXJpYWJsZSBuYW1lcyBpbnN0ZWFkIG9mIGNvbW1lbnRzIHRvIGNsYXJp
Znkgd2hhdCB3ZSBhcmUgZG9pbmcuCisKIDIwMjAtMDctMTIgIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggR1RLIGRlYmlhbiBidWls
ZHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAppbmRleCAxMDQyZmEzYjMx
OWM1OThkMmI4YjgwODI1MGQxNDUzMTllNDU3ZDI3Li44YmE5OWJkMGUxNThiNDQzOWIyZDE2YTk2
MWZlY2RjMTgzZDA0M2E2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGll
bnRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3Bw
CkBAIC0zMCw4ICszMCw2IEBACiAjaW5jbHVkZSAiQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5o
IgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJDb2xvckJsZW5kaW5n
LmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0jaW5jbHVkZSAiR3JhZGllbnQuaCIKICNpbmNs
dWRlICJHcmFkaWVudEltYWdlLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5j
bHVkZSAiUGFpci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9Db2xvcklucHV0
VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmNwcAppbmRleCA5
OTI2MzQ0YTA5ZDZkOGEyMDUyOTgxMDM1ODA0YzYxNTBiNWM4ZDZiLi45YWIyZmVlZDk2MzY3Mjcy
YWQ5YTA3MThmMGNjZDk1ZDg1YzlhMTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0NvbG9ySW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRU
eXBlLmNwcApAQCAtMjcwLDIxICsyNzAsNiBAQCBJbnRSZWN0IENvbG9ySW5wdXRUeXBlOjplbGVt
ZW50UmVjdFJlbGF0aXZlVG9Sb290VmlldygpIGNvbnN0CiAgICAgcmV0dXJuIGVsZW1lbnQoKS0+
ZG9jdW1lbnQoKS52aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhlbGVtZW50KCktPnJlbmRlcmVy
KCktPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpOwogfQogCi1Db2xvciBDb2xvcklucHV0VHlw
ZTo6Y3VycmVudENvbG9yKCkKLXsKLSAgICByZXR1cm4gdmFsdWVBc0NvbG9yKCk7Ci19Ci0KLWJv
b2wgQ29sb3JJbnB1dFR5cGU6OnNob3VsZFNob3dTdWdnZXN0aW9ucygpIGNvbnN0Ci17Ci0jaWYg
RU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCi0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgcmV0
dXJuIGVsZW1lbnQoKS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihsaXN0QXR0
cik7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCiBWZWN0b3I8Q29sb3I+
IENvbG9ySW5wdXRUeXBlOjpzdWdnZXN0ZWRDb2xvcnMoKSBjb25zdAogewogICAgIFZlY3RvcjxD
b2xvcj4gc3VnZ2VzdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9y
SW5wdXRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmgKaW5kZXgg
OWEzYzdiNzE3MzUxMDU5ZTY0ZmU0MTVlOTE4MGM0NTJlM2E5YjNjNC4uZjc0ZDc2ZjFiOWZmNTA4
NDI2YjIxNDRhMWZhNWE4YmEyNDBjZTcwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9Db2xvcklucHV0VHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5
cGUuaApAQCAtNDgsOCArNDgsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkQ2hvb3NlQ29sb3Io
Y29uc3QgQ29sb3ImKSBmaW5hbDsKICAgICB2b2lkIGRpZEVuZENob29zZXIoKSBmaW5hbDsKICAg
ICBJbnRSZWN0IGVsZW1lbnRSZWN0UmVsYXRpdmVUb1Jvb3RWaWV3KCkgY29uc3QgZmluYWw7Ci0g
ICAgQ29sb3IgY3VycmVudENvbG9yKCkgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRTaG93U3VnZ2Vz
dGlvbnMoKSBjb25zdCBmaW5hbDsKICAgICBWZWN0b3I8Q29sb3I+IHN1Z2dlc3RlZENvbG9ycygp
IGNvbnN0IGZpbmFsOwogICAgIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0IGZpbmFsOwog
ICAgIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3QgZmluYWw7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKaW5kZXggN2YyNWMzNjgyYTM2MWU0N2U1
ZjkwZTQ4YjQyZWQyYjI4OTJjNzlmYy4uZWRhY2YyNGQ0YTJhNGNjZDU2ZTQyNDBlMDU4MTA0OWY4
MmYzOTY0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcApAQCAtNzQsNyArNzQs
NiBAQAogI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJRnJhbWVF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSGFzaFRvb2xzLmgi
CiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIu
aCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwCmluZGV4IGNhNzg3YzM2Yzg1MWQ4ZjBlZmNk
YTI3YzRmNjVhNDY2YWQ5MTU4MzIuLjc1ZTRhZTEyOWY3MmNjYTZmNGQ1YmY2NjdjNTI0NzliNzI3
MGI4OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRp
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5j
cHAKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkNhbnZhc0Jhc2UuaCIKICNpbmNsdWRl
ICJDYW52YXNTdHlsZS5oIgorI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNDQsNiArNDUsMTggQEAgQ2FudmFzR3JhZGllbnQ6OkNhbnZhc0dyYWRpZW50
KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2ludCYKIHsKIH0K
IAorUmVmPENhbnZhc0dyYWRpZW50PiBDYW52YXNHcmFkaWVudDo6Y3JlYXRlKGNvbnN0IEZsb2F0
UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgQ2FudmFzQmFzZSYgY2FudmFzQmFzZSkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDYW52YXNHcmFkaWVudChwMCwgcDEsIGNhbnZh
c0Jhc2UpKTsKK30KKworUmVmPENhbnZhc0dyYWRpZW50PiBDYW52YXNHcmFkaWVudDo6Y3JlYXRl
KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGZs
b2F0IHIxLCBDYW52YXNCYXNlJiBjYW52YXNCYXNlKQoreworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IENhbnZhc0dyYWRpZW50KHAwLCByMCwgcDEsIHIxLCBjYW52YXNCYXNlKSk7Cit9CisKK0Nh
bnZhc0dyYWRpZW50Ojp+Q2FudmFzR3JhZGllbnQoKSA9IGRlZmF1bHQ7CisKIEV4Y2VwdGlvbk9y
PHZvaWQ+IENhbnZhc0dyYWRpZW50OjphZGRDb2xvclN0b3AoZmxvYXQgdmFsdWUsIGNvbnN0IFN0
cmluZyYgY29sb3JTdHJpbmcpCiB7CiAgICAgaWYgKCEodmFsdWUgPj0gMCAmJiB2YWx1ZSA8PSAx
KSkKQEAgLTU0LDcgKzY3LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2FudmFzR3JhZGllbnQ6OmFk
ZENvbG9yU3RvcChmbG9hdCB2YWx1ZSwgY29uc3QgU3RyaW5nJiBjb2xvclMKICAgICBpZiAoIWNv
bG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07
CiAKLSAgICBtX2dyYWRpZW50LT5hZGRDb2xvclN0b3AodmFsdWUsIGNvbG9yKTsKKyAgICBtX2dy
YWRpZW50LT5hZGRDb2xvclN0b3AoeyB2YWx1ZSwgV1RGTW92ZShjb2xvcikgfSk7CiAgICAgcmV0
dXJuIHsgfTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzR3JhZGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50
LmgKaW5kZXggYzM1ZmJjZTE5NDVhMWU2MTYxYTVmMTZkNjEzY2M1ZTUzYjhmN2ZhMi4uYTIxNWYx
NDFlY2JlZWUzMTc4OTdmZWM0ZDRkNjJhYjFkZjM0NTk1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5oCkBAIC0yNywyMiArMjcsMTggQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiRXhjZXB0aW9uT3IuaCIKLSNpbmNsdWRlICJHcmFkaWVudC5oIgor
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBD
YW52YXNCYXNlOworY2xhc3MgR3JhZGllbnQ7CiAKIGNsYXNzIENhbnZhc0dyYWRpZW50IDogcHVi
bGljIFJlZkNvdW50ZWQ8Q2FudmFzR3JhZGllbnQ+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PENhbnZhc0dyYWRpZW50PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0
UG9pbnQmIHAxLCBDYW52YXNCYXNlJiBjYW52YXNCYXNlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgQ2FudmFzR3JhZGllbnQocDAsIHAxLCBjYW52YXNCYXNlKSk7Ci0gICAg
fQotICAgIHN0YXRpYyBSZWY8Q2FudmFzR3JhZGllbnQ+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50
JiBwMCwgZmxvYXQgcjAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBmbG9hdCByMSwgQ2FudmFzQmFz
ZSYgY2FudmFzQmFzZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENhbnZh
c0dyYWRpZW50KHAwLCByMCwgcDEsIHIxLCBjYW52YXNCYXNlKSk7Ci0gICAgfQorICAgIHN0YXRp
YyBSZWY8Q2FudmFzR3JhZGllbnQ+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3Qg
RmxvYXRQb2ludCYgcDEsIENhbnZhc0Jhc2UmKTsKKyAgICBzdGF0aWMgUmVmPENhbnZhc0dyYWRp
ZW50PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9hdFBv
aW50JiBwMSwgZmxvYXQgcjEsIENhbnZhc0Jhc2UmKTsKKyAgICB+Q2FudmFzR3JhZGllbnQoKTsK
IAogICAgIEdyYWRpZW50JiBncmFkaWVudCgpIHsgcmV0dXJuIG1fZ3JhZGllbnQ7IH0KICAgICBj
b25zdCBHcmFkaWVudCYgZ3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX2dyYWRpZW50OyB9CkBA
IC01NSw3ICs1MSw2IEBAIHByaXZhdGU6CiAKICAgICBSZWY8R3JhZGllbnQ+IG1fZ3JhZGllbnQ7
CiAgICAgQ2FudmFzQmFzZSYgbV9jYW52YXM7Ci0KIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4
IDdkOTI1NTI1Zjg1OThkOGMyZDhjZTVhNjFiMGY3ZDhiNmFiY2Q1ODQuLjg3ZGVlZjQ5OTIxYzVi
NWZhMWVlYmYyYWY2NTg1N2NlMTRmMmY2OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAtMzYsNiArMzYs
NyBAQAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1BhcnNlci5o
IgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJHcmFkaWVudC5oIgog
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDYW52YXMuY3BwCmluZGV4IGMxMDNkZWEwODNkMDY5YTQzM2Q2YWMzZTc4YWM4
MjdiMGJhMTQwYjAuLjVjNTdiNjA1NzRlY2E1NzIyZDE1NDk5MmFmZGJkYzc1NWU2MzE5OWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCkBAIC0xMTU4
LDE5ICsxMTU4LDE3IEBAIFJlZjxKU09OOjpBcnJheU9mPEpTT046OlZhbHVlPj4gSW5zcGVjdG9y
Q2FudmFzOjpidWlsZEFjdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsCiAKIFJlZjxKU09OOjpBcnJh
eU9mPEpTT046OlZhbHVlPj4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEFycmF5Rm9yQ2FudmFzR3Jh
ZGllbnQoY29uc3QgQ2FudmFzR3JhZGllbnQmIGNhbnZhc0dyYWRpZW50KQogewotICAgIGNvbnN0
IGF1dG8mIGdyYWRpZW50ID0gY2FudmFzR3JhZGllbnQuZ3JhZGllbnQoKTsKLSAgICAKLSAgICBT
dHJpbmcgdHlwZSA9IGdyYWRpZW50LnR5cGUoKSA9PSBHcmFkaWVudDo6VHlwZTo6UmFkaWFsID8g
InJhZGlhbC1ncmFkaWVudCJfcyA6IGdyYWRpZW50LnR5cGUoKSA9PSBHcmFkaWVudDo6VHlwZTo6
TGluZWFyID8gImxpbmVhci1ncmFkaWVudCJfcyA6ICJjb25pYy1ncmFkaWVudCJfczsKLQorICAg
IEFTQ0lJTGl0ZXJhbCB0eXBlID0gImxpbmVhci1ncmFkaWVudCJfczsKICAgICBhdXRvIHBhcmFt
ZXRlcnMgPSBKU09OOjpBcnJheU9mPGZsb2F0Pjo6Y3JlYXRlKCk7Ci0gICAgV1RGOjpzd2l0Y2hP
bihncmFkaWVudC5kYXRhKCksCi0gICAgICAgIFsmcGFyYW1ldGVyc10gKGNvbnN0IEdyYWRpZW50
OjpMaW5lYXJEYXRhJiBkYXRhKSB7CisgICAgV1RGOjpzd2l0Y2hPbihjYW52YXNHcmFkaWVudC5n
cmFkaWVudCgpLmRhdGEoKSwKKyAgICAgICAgWyZdIChjb25zdCBHcmFkaWVudDo6TGluZWFyRGF0
YSYgZGF0YSkgewogICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50MC54
KCkpOwogICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50MC55KCkpOwog
ICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50MS54KCkpOwogICAgICAg
ICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50MS55KCkpOwogICAgICAgICB9LAot
ICAgICAgICBbJnBhcmFtZXRlcnNdIChjb25zdCBHcmFkaWVudDo6UmFkaWFsRGF0YSYgZGF0YSkg
eworICAgICAgICBbJl0gKGNvbnN0IEdyYWRpZW50OjpSYWRpYWxEYXRhJiBkYXRhKSB7CisgICAg
ICAgICAgICB0eXBlID0gInJhZGlhbC1ncmFkaWVudCJfczsKICAgICAgICAgICAgIHBhcmFtZXRl
cnMtPmFkZEl0ZW0oZGF0YS5wb2ludDAueCgpKTsKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPmFk
ZEl0ZW0oZGF0YS5wb2ludDAueSgpKTsKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0o
ZGF0YS5zdGFydFJhZGl1cyk7CkBAIC0xMTc4LDcgKzExNzYsOCBAQCBSZWY8SlNPTjo6QXJyYXlP
ZjxKU09OOjpWYWx1ZT4+IEluc3BlY3RvckNhbnZhczo6YnVpbGRBcnJheUZvckNhbnZhc0dyYWRp
ZW50KGNvbgogICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50MS55KCkp
OwogICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLmVuZFJhZGl1cyk7CiAgICAg
ICAgIH0sCi0gICAgICAgIFsmcGFyYW1ldGVyc10gKGNvbnN0IEdyYWRpZW50OjpDb25pY0RhdGEm
IGRhdGEpIHsKKyAgICAgICAgWyZdIChjb25zdCBHcmFkaWVudDo6Q29uaWNEYXRhJiBkYXRhKSB7
CisgICAgICAgICAgICB0eXBlID0gImNvbmljLWdyYWRpZW50Il9zOwogICAgICAgICAgICAgcGFy
YW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50MC54KCkpOwogICAgICAgICAgICAgcGFyYW1ldGVy
cy0+YWRkSXRlbShkYXRhLnBvaW50MC55KCkpOwogICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRk
SXRlbShkYXRhLmFuZ2xlUmFkaWFucyk7CkBAIC0xMTg2LDcgKzExODUsNyBAQCBSZWY8SlNPTjo6
QXJyYXlPZjxKU09OOjpWYWx1ZT4+IEluc3BlY3RvckNhbnZhczo6YnVpbGRBcnJheUZvckNhbnZh
c0dyYWRpZW50KGNvbgogICAgICk7CiAKICAgICBhdXRvIHN0b3BzID0gSlNPTjo6QXJyYXlPZjxK
U09OOjpWYWx1ZT46OmNyZWF0ZSgpOwotICAgIGZvciAoYXV0byYgY29sb3JTdG9wIDogZ3JhZGll
bnQuc3RvcHMoKSkgeworICAgIGZvciAoYXV0byYgY29sb3JTdG9wIDogY2FudmFzR3JhZGllbnQu
Z3JhZGllbnQoKS5zdG9wcygpKSB7CiAgICAgICAgIGF1dG8gc3RvcCA9IEpTT046OkFycmF5T2Y8
SlNPTjo6VmFsdWU+OjpjcmVhdGUoKTsKICAgICAgICAgc3RvcC0+YWRkSXRlbShjb2xvclN0b3Au
b2Zmc2V0KTsKICAgICAgICAgc3RvcC0+YWRkSXRlbShpbmRleEZvckRhdGEoc2VyaWFsaXphdGlv
bkZvckNTUyhjb2xvclN0b3AuY29sb3IpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5k
ZXggNTEyN2I0OTBmNGM0NjkxMjk4OGZlYWY5MzY1NTQ0ZTZlYmQ2YmY2YS4uOTJhODA4OWY0ODZi
OTBhYTY4OGFlZTNmYmEyOWNjYjQ0ODEwYmI0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cApAQCAtMzUwLDMyICszNTAsMjcgQEAgdm9pZCBGcmFtZVZpZXc6OmRldGFjaEN1c3RvbVNjcm9s
bGJhcnMoKQogCiB2b2lkIEZyYW1lVmlldzo6cmVjYWxjdWxhdGVTY3JvbGxiYXJPdmVybGF5U3R5
bGUoKQogewotICAgIFNjcm9sbGJhck92ZXJsYXlTdHlsZSBvbGRPdmVybGF5U3R5bGUgPSBzY3Jv
bGxiYXJPdmVybGF5U3R5bGUoKTsKLSAgICBPcHRpb25hbDxTY3JvbGxiYXJPdmVybGF5U3R5bGU+
IGNsaWVudE92ZXJsYXlTdHlsZSA9IGZyYW1lKCkucGFnZSgpID8gZnJhbWUoKS5wYWdlKCktPmNo
cm9tZSgpLmNsaWVudCgpLnByZWZlcnJlZFNjcm9sbGJhck92ZXJsYXlTdHlsZSgpIDogV1RGOjpu
dWxsb3B0OwotICAgIGlmIChjbGllbnRPdmVybGF5U3R5bGUpIHsKLSAgICAgICAgaWYgKGNsaWVu
dE92ZXJsYXlTdHlsZS52YWx1ZSgpICE9IG9sZE92ZXJsYXlTdHlsZSkKLSAgICAgICAgICAgIHNl
dFNjcm9sbGJhck92ZXJsYXlTdHlsZShjbGllbnRPdmVybGF5U3R5bGUudmFsdWUoKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTY3JvbGxiYXJPdmVybGF5U3R5bGUgY29tcHV0ZWRP
dmVybGF5U3R5bGUgPSBTY3JvbGxiYXJPdmVybGF5U3R5bGVEZWZhdWx0OwotCi0gICAgQ29sb3Ig
YmFja2dyb3VuZENvbG9yID0gZG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IoKTsKLSAgICBpZiAoYmFj
a2dyb3VuZENvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICAvLyBSZWR1Y2UgdGhlIGJhY2tncm91
bmQgY29sb3IgZnJvbSBSR0IgdG8gYSBsaWdodG5lc3MgdmFsdWUKLSAgICAgICAgLy8gYW5kIGRl
dGVybWluZSB3aGljaCBzY3JvbGxiYXIgc3R5bGUgdG8gdXNlIGJhc2VkIG9uIGEgbGlnaHRuZXNz
Ci0gICAgICAgIC8vIGhldXJpc3RpYy4KLSAgICAgICAgaWYgKGJhY2tncm91bmRDb2xvci5saWdo
dG5lc3MoKSA8PSAuNWYgJiYgYmFja2dyb3VuZENvbG9yLmlzVmlzaWJsZSgpKQotICAgICAgICAg
ICAgY29tcHV0ZWRPdmVybGF5U3R5bGUgPSBTY3JvbGxiYXJPdmVybGF5U3R5bGVMaWdodDsKLSAg
ICAgICAgZWxzZSBpZiAoIWJhY2tncm91bmRDb2xvci5pc1Zpc2libGUoKSAmJiB1c2VEYXJrQXBw
ZWFyYW5jZSgpKQotICAgICAgICAgICAgY29tcHV0ZWRPdmVybGF5U3R5bGUgPSBTY3JvbGxiYXJP
dmVybGF5U3R5bGVMaWdodDsKLSAgICB9Ci0KLSAgICBpZiAob2xkT3ZlcmxheVN0eWxlICE9IGNv
bXB1dGVkT3ZlcmxheVN0eWxlKQotICAgICAgICBzZXRTY3JvbGxiYXJPdmVybGF5U3R5bGUoY29t
cHV0ZWRPdmVybGF5U3R5bGUpOworICAgIGF1dG8gc3R5bGUgPSBbJl0geworICAgICAgICBpZiAo
YXV0byBwYWdlID0gZnJhbWUoKS5wYWdlKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGNsaWVu
dE92ZXJsYXlTdHlsZSA9IHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLnByZWZlcnJlZFNjcm9sbGJh
ck92ZXJsYXlTdHlsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiAqY2xpZW50T3ZlcmxheVN0
eWxlOworICAgICAgICB9CisgICAgICAgIGF1dG8gYmFja2dyb3VuZCA9IGRvY3VtZW50QmFja2dy
b3VuZENvbG9yKCk7CisgICAgICAgIGlmIChiYWNrZ3JvdW5kLmlzVmlzaWJsZSgpKSB7CisgICAg
ICAgICAgICBpZiAoYmFja2dyb3VuZC5saWdodG5lc3MoKSA8PSAuNWYpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIFNjcm9sbGJhck92ZXJsYXlTdHlsZUxpZ2h0OworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaWYgKHVzZURhcmtBcHBlYXJhbmNlKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIFNjcm9sbGJhck92ZXJsYXlTdHlsZUxpZ2h0OworICAgICAgICB9CisgICAgICAgIHJldHVy
biBTY3JvbGxiYXJPdmVybGF5U3R5bGVEZWZhdWx0OworICAgIH0oKTsKKyAgICBpZiAoc2Nyb2xs
YmFyT3ZlcmxheVN0eWxlKCkgIT0gc3R5bGUpCisgICAgICAgIHNldFNjcm9sbGJhck92ZXJsYXlT
dHlsZShzdHlsZSk7CiB9CiAKICNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykKKwogdm9pZCBGcmFt
ZVZpZXc6OnJlY2FsY3VsYXRlQmFzZUJhY2tncm91bmRDb2xvcigpCiB7CiAgICAgYm9vbCB1c2lu
Z0RhcmtBcHBlYXJhbmNlID0gdXNlRGFya0FwcGVhcmFuY2UoKTsKQEAgLTM4OCw2ICszODMsNyBA
QCB2b2lkIEZyYW1lVmlldzo6cmVjYWxjdWxhdGVCYXNlQmFja2dyb3VuZENvbG9yKCkKICAgICAg
ICAgYmFja2dyb3VuZENvbG9yID0gQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKICAgICB1cGRh
dGVCYWNrZ3JvdW5kUmVjdXJzaXZlbHkoYmFja2dyb3VuZENvbG9yKTsKIH0KKwogI2VuZGlmCiAK
IHZvaWQgRnJhbWVWaWV3OjpjbGVhcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Db2xvckNob29zZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbG9y
Q2hvb3NlckNsaWVudC5oCmluZGV4IDliM2I4OTgxNjNlMjdiMGE2OTYyNDk1ZDIyN2I5YzliNTY5
MWRiMmMuLjMxNjhmZWU1MmZhMGY0M2Q0YTRmOTY0NWQwNjFkYjQ2NjcyMzdiNzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbG9yQ2hvb3NlckNsaWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbG9yQ2hvb3NlckNsaWVudC5oCkBAIC0yNywxNyArMjcs
MTYgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBDb2xvckNob29zZXJDbGllbnRfaAotI2RlZmluZSBD
b2xvckNob29zZXJDbGllbnRfaAorI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoSU5QVVRfVFlQ
RV9DT0xPUikKIAotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBDb2xvcjsKK2NsYXNzIEludFJlY3Q7CiAKIGNsYXNzIENvbG9yQ2hvb3NlckNsaWVudCB7CiBw
dWJsaWM6CkBAIC00NiwxMyArNDUsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZENo
b29zZUNvbG9yKGNvbnN0IENvbG9yJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRFbmRDaG9v
c2VyKCkgPSAwOwogICAgIHZpcnR1YWwgSW50UmVjdCBlbGVtZW50UmVjdFJlbGF0aXZlVG9Sb290
VmlldygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIENvbG9yIGN1cnJlbnRDb2xvcigpID0gMDsK
LSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2hvd1N1Z2dlc3Rpb25zKCkgY29uc3QgPSAwOwogICAg
IHZpcnR1YWwgVmVjdG9yPENvbG9yPiBzdWdnZXN0ZWRDb2xvcnMoKSBjb25zdCA9IDA7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5QVVRfVFlQRV9D
T0xPUikKLQotI2VuZGlmIC8vIENvbG9yQ2hvb3NlckNsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAKaW5kZXggYmQ3ZjY4YmJmMGIwNTE1YzA3
M2EzNjc1YTRkN2E3NjVjNDNjMzgxMi4uZTE3MGY5NmExYjZlZjUzNWJjNWE4MjNjYTExZDdhNzUw
NDIxZWZjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
ZGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50
LmNwcApAQCAtMzYsNTggKzM2LDE3IEBAIHVzaW5nIFdURjo6cGFpckludEhhc2g7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotUmVmPEdyYWRpZW50PiBHcmFkaWVudDo6Y3JlYXRlKExpbmVhckRh
dGEmJiBkYXRhKQorUmVmPEdyYWRpZW50PiBHcmFkaWVudDo6Y3JlYXRlKERhdGEmJiBkYXRhKQog
ewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdyYWRpZW50KFdURk1vdmUoZGF0YSkpKTsKIH0K
IAotUmVmPEdyYWRpZW50PiBHcmFkaWVudDo6Y3JlYXRlKFJhZGlhbERhdGEmJiBkYXRhKQotewot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdyYWRpZW50KFdURk1vdmUoZGF0YSkpKTsKLX0KLQot
UmVmPEdyYWRpZW50PiBHcmFkaWVudDo6Y3JlYXRlKENvbmljRGF0YSYmIGRhdGEpCi17Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgR3JhZGllbnQoV1RGTW92ZShkYXRhKSkpOwotfQotCi1HcmFk
aWVudDo6R3JhZGllbnQoTGluZWFyRGF0YSYmIGRhdGEpCitHcmFkaWVudDo6R3JhZGllbnQoRGF0
YSYmIGRhdGEpCiAgICAgOiBtX2RhdGEoV1RGTW92ZShkYXRhKSkKIHsKLSAgICBwbGF0Zm9ybUlu
aXQoKTsKIH0KIAotR3JhZGllbnQ6OkdyYWRpZW50KFJhZGlhbERhdGEmJiBkYXRhKQotICAgIDog
bV9kYXRhKFdURk1vdmUoZGF0YSkpCi17Ci0gICAgcGxhdGZvcm1Jbml0KCk7Ci19Ci0gICAgCi1H
cmFkaWVudDo6R3JhZGllbnQoQ29uaWNEYXRhJiYgZGF0YSkKLSAgICA6IG1fZGF0YShXVEZNb3Zl
KGRhdGEpKQotewotICAgIHBsYXRmb3JtSW5pdCgpOwotfQotCi1HcmFkaWVudDo6fkdyYWRpZW50
KCkKLXsKLSAgICBwbGF0Zm9ybURlc3Ryb3koKTsKLX0KLQotYXV0byBHcmFkaWVudDo6dHlwZSgp
IGNvbnN0IC0+IFR5cGUKLXsKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX2RhdGEsCi0gICAg
ICAgIFtdIChjb25zdCBMaW5lYXJEYXRhJikgewotICAgICAgICAgICAgcmV0dXJuIFR5cGU6Okxp
bmVhcjsKLSAgICAgICAgfSwKLSAgICAgICAgW10gKGNvbnN0IFJhZGlhbERhdGEmKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gVHlwZTo6UmFkaWFsOwotICAgICAgICB9LAotICAgICAgICBbXSAoY29u
c3QgQ29uaWNEYXRhJikgewotICAgICAgICAgICAgcmV0dXJuIFR5cGU6OkNvbmljOwotICAgICAg
ICB9Ci0gICAgKTsKLX0KK0dyYWRpZW50Ojp+R3JhZGllbnQoKSA9IGRlZmF1bHQ7CiAKIHZvaWQg
R3JhZGllbnQ6OmFkanVzdFBhcmFtZXRlcnNGb3JUaWxlZERyYXdpbmcoRmxvYXRTaXplJiBzaXpl
LCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZykKIHsKQEAgLTEz
NCwxNDYgKzkzLDkyIEBAIGJvb2wgR3JhZGllbnQ6OmlzWmVyb1NpemUoKSBjb25zdAogICAgICk7
CiB9CiAKLXZvaWQgR3JhZGllbnQ6OmFkZENvbG9yU3RvcChmbG9hdCBvZmZzZXQsIGNvbnN0IENv
bG9yJiBjb2xvcikKLXsKLSAgICBhZGRDb2xvclN0b3AoeyBvZmZzZXQsIGNvbG9yIH0pOwotfQot
Ci12b2lkIEdyYWRpZW50OjphZGRDb2xvclN0b3AoY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCYg
c3RvcCkKK3ZvaWQgR3JhZGllbnQ6OmFkZENvbG9yU3RvcChHcmFkaWVudDo6Q29sb3JTdG9wJiYg
c3RvcCkKIHsKLSAgICBtX3N0b3BzLmFwcGVuZChzdG9wKTsKLQorICAgIG1fc3RvcHMuYXBwZW5k
KFdURk1vdmUoc3RvcCkpOwogICAgIG1fc3RvcHNTb3J0ZWQgPSBmYWxzZTsKLQotICAgIHBsYXRm
b3JtRGVzdHJveSgpOwotICAgIGludmFsaWRhdGVIYXNoKCk7CisgICAgbV9jYWNoZWRIYXNoID0g
MDsKKyAgICBzdG9wc0NoYW5nZWQoKTsKIH0KIAogdm9pZCBHcmFkaWVudDo6c2V0U29ydGVkQ29s
b3JTdG9wcyhDb2xvclN0b3BWZWN0b3ImJiBzdG9wcykKIHsKICAgICBtX3N0b3BzID0gV1RGTW92
ZShzdG9wcyk7Ci0KICAgICBtX3N0b3BzU29ydGVkID0gdHJ1ZTsKLQotICAgIHBsYXRmb3JtRGVz
dHJveSgpOwotICAgIGludmFsaWRhdGVIYXNoKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBj
b21wYXJlU3RvcHMoY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCYgYSwgY29uc3QgR3JhZGllbnQ6
OkNvbG9yU3RvcCYgYikKLXsKLSAgICByZXR1cm4gYS5vZmZzZXQgPCBiLm9mZnNldDsKKyAgICBt
X2NhY2hlZEhhc2ggPSAwOworICAgIHN0b3BzQ2hhbmdlZCgpOwogfQogCi12b2lkIEdyYWRpZW50
Ojpzb3J0U3RvcHNJZk5lY2Vzc2FyeSgpCit2b2lkIEdyYWRpZW50Ojpzb3J0U3RvcHMoKSBjb25z
dAogewogICAgIGlmIChtX3N0b3BzU29ydGVkKQogICAgICAgICByZXR1cm47Ci0KICAgICBtX3N0
b3BzU29ydGVkID0gdHJ1ZTsKLQotICAgIGlmICghbV9zdG9wcy5zaXplKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHN0ZDo6c3RhYmxlX3NvcnQobV9zdG9wcy5iZWdpbigpLCBtX3N0b3BzLmVu
ZCgpLCBjb21wYXJlU3RvcHMpOwotICAgIGludmFsaWRhdGVIYXNoKCk7Ci19Ci0KLWJvb2wgR3Jh
ZGllbnQ6Omhhc0FscGhhKCkgY29uc3QKLXsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHN0b3AgOiBt
X3N0b3BzKSB7Ci0gICAgICAgIGlmICghc3RvcC5jb2xvci5pc09wYXF1ZSgpKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHN0ZDo6c3Rh
YmxlX3NvcnQobV9zdG9wcy5iZWdpbigpLCBtX3N0b3BzLmVuZCgpLCBbXSAoYXV0byYgYSwgYXV0
byYgYikgeworICAgICAgICByZXR1cm4gYS5vZmZzZXQgPCBiLm9mZnNldDsKKyAgICB9KTsKIH0K
IAogdm9pZCBHcmFkaWVudDo6c2V0U3ByZWFkTWV0aG9kKEdyYWRpZW50U3ByZWFkTWV0aG9kIHNw
cmVhZE1ldGhvZCkKIHsKLSAgICAvLyBGSVhNRTogU2hvdWxkIGl0IGJlY29tZSBuZWNlc3Nhcnks
IGFsbG93IGNhbGxzIHRvIHRoaXMgbWV0aG9kIGFmdGVyIG1fZ3JhZGllbnQgaGFzIGJlZW4gc2V0
LgotICAgIEFTU0VSVChtX2dyYWRpZW50ID09IDApOwotCiAgICAgaWYgKG1fc3ByZWFkTWV0aG9k
ID09IHNwcmVhZE1ldGhvZCkKICAgICAgICAgcmV0dXJuOwotCiAgICAgbV9zcHJlYWRNZXRob2Qg
PSBzcHJlYWRNZXRob2Q7Ci0KLSAgICBpbnZhbGlkYXRlSGFzaCgpOworICAgIG1fY2FjaGVkSGFz
aCA9IDA7CiB9CiAKIHZvaWQgR3JhZGllbnQ6OnNldEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24pCiB7CiAgICAg
aWYgKG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uID09IGdyYWRpZW50U3BhY2VUcmFuc2Zv
cm1hdGlvbikKICAgICAgICAgcmV0dXJuOwotCiAgICAgbV9ncmFkaWVudFNwYWNlVHJhbnNmb3Jt
YXRpb24gPSBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247CisgICAgbV9jYWNoZWRIYXNoID0g
MDsKK30KIAotICAgIGludmFsaWRhdGVIYXNoKCk7CisvLyBGSVhNRTogSW5zdGVhZCBvZiB0aGVz
ZSBhZGQoSGFzaGVyKSBmdW5jdGlvbnMsIGNvbnNpZGVyIHVzaW5nIGVuY29kZSBmdW5jdGlvbnMg
dG8gY29tcHV0ZSB0aGUgaGFzaC4KKworc3RhdGljIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBj
b25zdCBDb2xvciYgY29sb3IpCit7CisgICAgLy8gRklYTUU6IFdlIGRvbid0IHdhbnQgdG8gaGFz
aCBhIGhhc2g7IGRvIGJldHRlci4KKyAgICBhZGQoaGFzaGVyLCBjb2xvci5oYXNoKCkpOwogfQog
Ci11bnNpZ25lZCBHcmFkaWVudDo6aGFzaCgpIGNvbnN0CitzdGF0aWMgdm9pZCBhZGQoSGFzaGVy
JiBoYXNoZXIsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQogewotICAgIGlmIChtX2NhY2hlZEhh
c2gpCi0gICAgICAgIHJldHVybiBtX2NhY2hlZEhhc2g7CisgICAgYWRkKGhhc2hlciwgcG9pbnQu
eCgpLCBwb2ludC55KCkpOworfQogCi0gICAgc3RydWN0IHsKLSAgICAgICAgVHlwZSB0eXBlOwot
ICAgICAgICBGbG9hdFBvaW50IHBvaW50MDsKLSAgICAgICAgRmxvYXRQb2ludCBwb2ludDE7Ci0g
ICAgICAgIGZsb2F0IHN0YXJ0UmFkaXVzOwotICAgICAgICBmbG9hdCBlbmRSYWRpdXM7Ci0gICAg
ICAgIGZsb2F0IGFzcGVjdFJhdGlvOwotICAgICAgICBmbG9hdCBhbmdsZVJhZGlhbnM7Ci0gICAg
ICAgIEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZDsKLSAgICAgICAgQWZmaW5lVHJh
bnNmb3JtIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKLSAgICB9IHBhcmFtZXRlcnM7Citz
dGF0aWMgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtKQoreworICAgIGFkZChoYXNoZXIsIHRyYW5zZm9ybS5hKCksIHRyYW5zZm9ybS5iKCks
IHRyYW5zZm9ybS5jKCksIHRyYW5zZm9ybS5kKCksIHRyYW5zZm9ybS5lKCksIHRyYW5zZm9ybS5m
KCkpOworfQogCi0gICAgLy8gU3RyaW5nSGFzaGVyIHJlcXVpcmVzIHRoYXQgdGhlIG1lbW9yeSBp
dCBoYXNoZXMgYmUgYSBtdWx0aXBsZSBvZiB0d28gaW4gc2l6ZS4KLSAgICBDT01QSUxFX0FTU0VS
VCghKHNpemVvZihwYXJhbWV0ZXJzKSAlIDIpLCBHcmFkaWVudF9wYXJhbWV0ZXJzX3NpemVfc2hv
dWxkX2JlX211bHRpcGxlX29mX3R3byk7Ci0gICAgQ09NUElMRV9BU1NFUlQoIShzaXplb2YoQ29s
b3JTdG9wKSAlIDIpLCBDb2xvcl9zdG9wX3NpemVfc2hvdWxkX2JlX211bHRpcGxlX29mX3R3byk7
Ci0gICAgCi0gICAgLy8gRW5zdXJlIHRoYXQgYW55IHBhZGRpbmcgaW4gdGhlIHN0cnVjdCBpcyB6
ZXJvLWZpbGxlZCwgc28gaXQgd2lsbCBub3QgYWZmZWN0IHRoZSBoYXNoIHZhbHVlLgotICAgIC8v
IEZJWE1FOiBUaGlzIGlzIGFza2luZyBmb3IgdHJvdWJsZSwgYmVjYXVzZSBpdCBpcyBhIG5vbnRy
aXZpYWwgdHlwZS4KLSAgICBtZW1zZXQoc3RhdGljX2Nhc3Q8dm9pZCo+KCZwYXJhbWV0ZXJzKSwg
MCwgc2l6ZW9mKHBhcmFtZXRlcnMpKTsKLSAgICAKLSAgICBXVEY6OnN3aXRjaE9uKG1fZGF0YSwK
LSAgICAgICAgWyZwYXJhbWV0ZXJzXSAoY29uc3QgTGluZWFyRGF0YSYgZGF0YSkgewotICAgICAg
ICAgICAgcGFyYW1ldGVycy5wb2ludDAgPSBkYXRhLnBvaW50MDsKLSAgICAgICAgICAgIHBhcmFt
ZXRlcnMucG9pbnQxID0gZGF0YS5wb2ludDE7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLnN0YXJ0
UmFkaXVzID0gMDsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZW5kUmFkaXVzID0gMDsKLSAgICAg
ICAgICAgIHBhcmFtZXRlcnMuYXNwZWN0UmF0aW8gPSAwOwotICAgICAgICAgICAgcGFyYW1ldGVy
cy5hbmdsZVJhZGlhbnMgPSAwOwotICAgICAgICAgICAgcGFyYW1ldGVycy50eXBlID0gVHlwZTo6
TGluZWFyOwotICAgICAgICB9LAotICAgICAgICBbJnBhcmFtZXRlcnNdIChjb25zdCBSYWRpYWxE
YXRhJiBkYXRhKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLnBvaW50MCA9IGRhdGEucG9pbnQw
OwotICAgICAgICAgICAgcGFyYW1ldGVycy5wb2ludDEgPSBkYXRhLnBvaW50MTsKLSAgICAgICAg
ICAgIHBhcmFtZXRlcnMuc3RhcnRSYWRpdXMgPSBkYXRhLnN0YXJ0UmFkaXVzOwotICAgICAgICAg
ICAgcGFyYW1ldGVycy5lbmRSYWRpdXMgPSBkYXRhLmVuZFJhZGl1czsKLSAgICAgICAgICAgIHBh
cmFtZXRlcnMuYXNwZWN0UmF0aW8gPSBkYXRhLmFzcGVjdFJhdGlvOwotICAgICAgICAgICAgcGFy
YW1ldGVycy5hbmdsZVJhZGlhbnMgPSAwOwotICAgICAgICAgICAgcGFyYW1ldGVycy50eXBlID0g
VHlwZTo6UmFkaWFsOwotICAgICAgICB9LAotICAgICAgICBbJnBhcmFtZXRlcnNdIChjb25zdCBD
b25pY0RhdGEmIGRhdGEpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMucG9pbnQwID0gZGF0YS5w
b2ludDA7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLnBvaW50MSA9IHswLCAwfTsKLSAgICAgICAg
ICAgIHBhcmFtZXRlcnMuc3RhcnRSYWRpdXMgPSAwOwotICAgICAgICAgICAgcGFyYW1ldGVycy5l
bmRSYWRpdXMgPSAwOwotICAgICAgICAgICAgcGFyYW1ldGVycy5hc3BlY3RSYXRpbyA9IDA7Ci0g
ICAgICAgICAgICBwYXJhbWV0ZXJzLmFuZ2xlUmFkaWFucyA9IGRhdGEuYW5nbGVSYWRpYW5zOwot
ICAgICAgICAgICAgcGFyYW1ldGVycy50eXBlID0gVHlwZTo6Q29uaWM7Ci0gICAgICAgIH0KLSAg
ICApOworc3RhdGljIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBHcmFkaWVudDo6Q29s
b3JTdG9wJiBzdG9wKQoreworICAgIGFkZChoYXNoZXIsIHN0b3Aub2Zmc2V0LCBzdG9wLmNvbG9y
KTsKK30KIAotICAgIHBhcmFtZXRlcnMuc3ByZWFkTWV0aG9kID0gbV9zcHJlYWRNZXRob2Q7Ci0g
ICAgcGFyYW1ldGVycy5ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24gPSBtX2dyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm1hdGlvbjsKK3N0YXRpYyB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3Qg
R3JhZGllbnQ6OkxpbmVhckRhdGEmIGRhdGEpCit7CisgICAgYWRkKGhhc2hlciwgZGF0YS5wb2lu
dDAsIGRhdGEucG9pbnQxKTsKK30KIAotICAgIHVuc2lnbmVkIHBhcmFtZXRlcnNIYXNoID0gU3Ry
aW5nSGFzaGVyOjpoYXNoTWVtb3J5KCZwYXJhbWV0ZXJzLCBzaXplb2YocGFyYW1ldGVycykpOwot
ICAgIHVuc2lnbmVkIHN0b3BIYXNoID0gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KG1fc3RvcHMu
ZGF0YSgpLCBtX3N0b3BzLnNpemUoKSAqIHNpemVvZihDb2xvclN0b3ApKTsKK3N0YXRpYyB2b2lk
IGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgR3JhZGllbnQ6OlJhZGlhbERhdGEmIGRhdGEpCit7
CisgICAgYWRkKGhhc2hlciwgZGF0YS5wb2ludDAsIGRhdGEucG9pbnQxLCBkYXRhLnN0YXJ0UmFk
aXVzLCBkYXRhLmVuZFJhZGl1cywgZGF0YS5hc3BlY3RSYXRpbyk7Cit9CiAKLSAgICBtX2NhY2hl
ZEhhc2ggPSBwYWlySW50SGFzaChwYXJhbWV0ZXJzSGFzaCwgc3RvcEhhc2gpOworc3RhdGljIHZv
aWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBHcmFkaWVudDo6Q29uaWNEYXRhJiBkYXRhKQor
eworICAgIGFkZChoYXNoZXIsIGRhdGEucG9pbnQwLCBkYXRhLmFuZ2xlUmFkaWFucyk7Cit9CiAK
K3Vuc2lnbmVkIEdyYWRpZW50OjpoYXNoKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fY2FjaGVkSGFz
aCkgeworICAgICAgICBzb3J0U3RvcHMoKTsKKyAgICAgICAgbV9jYWNoZWRIYXNoID0gY29tcHV0
ZUhhc2gobV9kYXRhLCBtX3NwcmVhZE1ldGhvZCwgbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRp
b24sIG1fc3RvcHMpOworICAgIH0KICAgICByZXR1cm4gbV9jYWNoZWRIYXNoOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAppbmRleCA2ZWI1ZDA3OWFj
N2U0ZmUzYTJjZjUxNjdkMjg1ZTAzNWIwY2YxMDAyLi4yOTg2YzFhYzIxMjk0NzczMDBlMzVkY2Qx
NjFjNzAxZDIyNWU4ZjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFkaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YWRpZW50LmgKQEAgLTMxLDQ4ICszMSw0NCBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVk
ZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlIDx3
dGYvRW51bVRyYWl0cy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8
d3RmL1ZhcmlhbnQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKKyNpZiBVU0UoQ0cpCisj
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2VuZGlmCisKKyNpZiBVU0UoRElSRUNUMkQpCisj
aW5jbHVkZSAiQ09NUHRyLmgiCisjZW5kaWYKKwogI2lmIFVTRShDRykKIHR5cGVkZWYgc3RydWN0
IENHQ29udGV4dCogQ0dDb250ZXh0UmVmOwogdHlwZWRlZiBzdHJ1Y3QgQ0dHcmFkaWVudCogQ0dH
cmFkaWVudFJlZjsKLXR5cGVkZWYgQ0dHcmFkaWVudFJlZiBQbGF0Zm9ybUdyYWRpZW50OwotI2Vs
aWYgVVNFKERJUkVDVDJEKQorI2VuZGlmCisKKyNpZiBVU0UoRElSRUNUMkQpCiBpbnRlcmZhY2Ug
SUQyRDFCcnVzaDsKIGludGVyZmFjZSBJRDJEMVJlbmRlclRhcmdldDsKLXR5cGVkZWYgSUQyRDFC
cnVzaCogUGxhdGZvcm1HcmFkaWVudDsKLSNlbGlmIFVTRShDQUlSTykKKyNlbmRpZgorCisjaWYg
VVNFKENBSVJPKQogdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3BhdHRlcm4gY2Fpcm9fcGF0dGVybl90
OwotdHlwZWRlZiBjYWlyb19wYXR0ZXJuX3QqIFBsYXRmb3JtR3JhZGllbnQ7Ci0jZWxzZQotdHlw
ZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYWRpZW50OwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgQ29sb3I7CiBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBHcmFwaGljc0NvbnRl
eHQ7CiAKIGNsYXNzIEdyYWRpZW50IDogcHVibGljIFJlZkNvdW50ZWQ8R3JhZGllbnQ+IHsKIHB1
YmxpYzoKLSAgICAvLyBGSVhNRTogRXh0ZW5kZWRDb2xvciAtIEEgY29sb3Igc3RvcCBuZWVkcyBh
IG5vdGlvbiBvZiBjb2xvciBzcGFjZS4KICAgICBzdHJ1Y3QgQ29sb3JTdG9wIHsKICAgICAgICAg
ZmxvYXQgb2Zmc2V0IHsgMCB9OwogICAgICAgICBDb2xvciBjb2xvcjsKIAotICAgICAgICBDb2xv
clN0b3AoKSA9IGRlZmF1bHQ7Ci0gICAgICAgIENvbG9yU3RvcChmbG9hdCBvZmZzZXQsIGNvbnN0
IENvbG9yJiBjb2xvcikKLSAgICAgICAgICAgIDogb2Zmc2V0KG9mZnNldCkKLSAgICAgICAgICAg
ICwgY29sb3IoY29sb3IpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICAgICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENvbG9yU3RvcD4gZGVjb2RlKERl
Y29kZXImKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0
aWMgT3B0aW9uYWw8Q29sb3JTdG9wPiBkZWNvZGUoRGVjb2RlciYpOwogICAgIH07CiAKICAgICB1
c2luZyBDb2xvclN0b3BWZWN0b3IgPSBWZWN0b3I8Q29sb3JTdG9wLCAyPjsKQEAgLTgxLDggKzc3
LDggQEAgcHVibGljOgogICAgICAgICBGbG9hdFBvaW50IHBvaW50MDsKICAgICAgICAgRmxvYXRQ
b2ludCBwb2ludDE7CiAKLSAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OwotICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0
aWMgT3B0aW9uYWw8TGluZWFyRGF0YT4gZGVjb2RlKERlY29kZXImKTsKKyAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8TGluZWFyRGF0YT4g
ZGVjb2RlKERlY29kZXImKTsKICAgICB9OwogCiAgICAgc3RydWN0IFJhZGlhbERhdGEgewpAQCAt
OTIsMzcgKzg4LDI5IEBAIHB1YmxpYzoKICAgICAgICAgZmxvYXQgZW5kUmFkaXVzOwogICAgICAg
ICBmbG9hdCBhc3BlY3RSYXRpbzsgLy8gRm9yIGVsbGlwdGljYWwgZ3JhZGllbnQsIHdpZHRoIC8g
aGVpZ2h0LgogCi0gICAgICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKLSAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9w
dGlvbmFsPFJhZGlhbERhdGE+IGRlY29kZShEZWNvZGVyJik7CisgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJhZGlhbERhdGE+IGRlY29k
ZShEZWNvZGVyJik7CiAgICAgfTsKLSAgICAKKwogICAgIHN0cnVjdCBDb25pY0RhdGEgewogICAg
ICAgICBGbG9hdFBvaW50IHBvaW50MDsKICAgICAgICAgZmxvYXQgYW5nbGVSYWRpYW5zOwogCi0g
ICAgICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENvbmlj
RGF0YT4gZGVjb2RlKERlY29kZXImKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29uaWNEYXRhPiBkZWNvZGUoRGVjb2RlciYpOwog
ICAgIH07CiAKICAgICB1c2luZyBEYXRhID0gVmFyaWFudDxMaW5lYXJEYXRhLCBSYWRpYWxEYXRh
LCBDb25pY0RhdGE+OwogCi0gICAgZW51bSBjbGFzcyBUeXBlIHsgTGluZWFyLCBSYWRpYWwsIENv
bmljIH07Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEdyYWRpZW50PiBjcmVhdGUo
TGluZWFyRGF0YSYmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEdyYWRpZW50PiBj
cmVhdGUoUmFkaWFsRGF0YSYmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEdyYWRp
ZW50PiBjcmVhdGUoQ29uaWNEYXRhJiYpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8
R3JhZGllbnQ+IGNyZWF0ZShEYXRhJiYpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgfkdyYWRpZW50
KCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBUeXBlIHR5cGUoKSBjb25zdDsKLQotICAgIGJvb2wg
aGFzQWxwaGEoKSBjb25zdDsKICAgICBib29sIGlzWmVyb1NpemUoKSBjb25zdDsKIAogICAgIGNv
bnN0IERhdGEmIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYWRkQ29sb3JTdG9wKGNvbnN0IENvbG9yU3RvcCYpOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYWRkQ29sb3JTdG9wKGZsb2F0LCBjb25zdCBDb2xvciYpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgYWRkQ29sb3JTdG9wKENvbG9yU3RvcCYmKTsKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldFNvcnRlZENvbG9yU3RvcHMoQ29sb3JTdG9wVmVjdG9yJiYpOwogCiAgICAg
Y29uc3QgQ29sb3JTdG9wVmVjdG9yJiBzdG9wcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcHM7IH0K
QEAgLTEzMCw3ICsxMTgsNiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRT
cHJlYWRNZXRob2QoR3JhZGllbnRTcHJlYWRNZXRob2QpOwogICAgIEdyYWRpZW50U3ByZWFkTWV0
aG9kIHNwcmVhZE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ByZWFkTWV0aG9kOyB9CiAKLSAg
ICAvLyBDRyBuZWVkcyB0byB0cmFuc2Zvcm0gdGhlIGdyYWRpZW50IGF0IGRyYXcgdGltZS4KICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24pOwogICAgIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1f
Z3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOyB9CiAKQEAgLTEzOCw1NiArMTI1LDU2IEBAIHB1
YmxpYzoKICAgICB2b2lkIGFkanVzdFBhcmFtZXRlcnNGb3JUaWxlZERyYXdpbmcoRmxvYXRTaXpl
JiwgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nKTsKIAogICAgIHVuc2lnbmVk
IGhhc2goKSBjb25zdDsKLSAgICB2b2lkIGludmFsaWRhdGVIYXNoKCkgeyBtX2NhY2hlZEhhc2gg
PSAwOyB9CisKKyNpZiBVU0UoQ0FJUk8pCisgICAgUmVmUHRyPGNhaXJvX3BhdHRlcm5fdD4gY3Jl
YXRlUGF0dGVybihmbG9hdCBnbG9iYWxBbHBoYSk7CisjZW5kaWYKIAogI2lmIFVTRShDRykKICAg
ICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYpOwogICAgIHZvaWQgcGFpbnQoQ0dDb250ZXh0
UmVmKTsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBQbGF0Zm9ybUdyYWRpZW50IGNyZWF0ZVBs
YXRmb3JtR3JhZGllbnRJZk5lY2Vzc2FyeShJRDJEMVJlbmRlclRhcmdldCopOwotI2VsaWYgVVNF
KENBSVJPKQotICAgIFBsYXRmb3JtR3JhZGllbnQgY3JlYXRlUGxhdGZvcm1HcmFkaWVudChmbG9h
dCBnbG9iYWxBbHBoYSk7CiAjZW5kaWYKIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgT3B0aW9uYWw8UmVmPEdyYWRpZW50Pj4gZGVjb2RlKERlY29kZXImKTsKKyNpZiBVU0Uo
RElSRUNUMkQpCisgICAgSUQyRDFCcnVzaCogY3JlYXRlQnJ1c2goSUQyRDFSZW5kZXJUYXJnZXQq
KTsKKyNlbmRpZgorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IHN0YXRpYyBP
cHRpb25hbDxSZWY8R3JhZGllbnQ+PiBkZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgotICAg
IEdyYWRpZW50KExpbmVhckRhdGEmJik7Ci0gICAgR3JhZGllbnQoUmFkaWFsRGF0YSYmKTsKLSAg
ICBHcmFkaWVudChDb25pY0RhdGEmJik7Ci0KLSAgICBQbGF0Zm9ybUdyYWRpZW50IHBsYXRmb3Jt
R3JhZGllbnQoKTsKLSAgICB2b2lkIHBsYXRmb3JtSW5pdCgpIHsgbV9ncmFkaWVudCA9IG51bGxw
dHI7IH0KLSAgICB2b2lkIHBsYXRmb3JtRGVzdHJveSgpOworICAgIGV4cGxpY2l0IEdyYWRpZW50
KERhdGEmJik7CiAKLSAgICB2b2lkIHNvcnRTdG9wc0lmTmVjZXNzYXJ5KCk7CisgICAgdm9pZCBz
b3J0U3RvcHMoKSBjb25zdDsKKyAgICB2b2lkIHN0b3BzQ2hhbmdlZCgpOwogCi0jaWYgVVNFKERJ
UkVDVDJEKQotICAgIHZvaWQgZ2VuZXJhdGVHcmFkaWVudChJRDJEMVJlbmRlclRhcmdldCopOwor
I2lmIFVTRShDRykKKyAgICB2b2lkIGNyZWF0ZUNHR3JhZGllbnQoKTsKICNlbmRpZgogCiAgICAg
RGF0YSBtX2RhdGE7Ci0KICAgICBtdXRhYmxlIENvbG9yU3RvcFZlY3RvciBtX3N0b3BzOwogICAg
IG11dGFibGUgYm9vbCBtX3N0b3BzU29ydGVkIHsgZmFsc2UgfTsKICAgICBHcmFkaWVudFNwcmVh
ZE1ldGhvZCBtX3NwcmVhZE1ldGhvZCB7IEdyYWRpZW50U3ByZWFkTWV0aG9kOjpQYWQgfTsKKyAg
ICBtdXRhYmxlIHVuc2lnbmVkIG1fY2FjaGVkSGFzaCB7IDAgfTsKICAgICBBZmZpbmVUcmFuc2Zv
cm0gbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247CiAKLSAgICBtdXRhYmxlIHVuc2lnbmVk
IG1fY2FjaGVkSGFzaCB7IDAgfTsKKyNpZiBVU0UoQ0cpCisgICAgUmV0YWluUHRyPENHR3JhZGll
bnRSZWY+IG1fZ3JhZGllbnQ7CisjZW5kaWYKIAotICAgIFBsYXRmb3JtR3JhZGllbnQgbV9ncmFk
aWVudDsKKyNpZiBVU0UoRElSRUNUMkQpCisgICAgQ09NUHRyPElEMkQxQnJ1c2g+IG1fYnJ1c2g7
CisjZW5kaWYKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEdyYWRpZW50OjpD
b2xvclN0b3A6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAordGVtcGxhdGU8dHlwZW5h
bWUgRW5jb2Rlcj4gdm9pZCBHcmFkaWVudDo6Q29sb3JTdG9wOjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IG9mZnNldDsKICAgICBlbmNvZGVyIDw8IGNv
bG9yOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8R3JhZGllbnQ6OkNv
bG9yU3RvcD4gR3JhZGllbnQ6OkNvbG9yU3RvcDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBPcHRpb25hbDxHcmFkaWVudDo6Q29sb3JTdG9wPiBH
cmFkaWVudDo6Q29sb3JTdG9wOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRp
b25hbDxmbG9hdD4gb2Zmc2V0OwogICAgIGRlY29kZXIgPj4gb2Zmc2V0OwpAQCAtMjAyLDE1ICsx
ODksMTMgQEAgT3B0aW9uYWw8R3JhZGllbnQ6OkNvbG9yU3RvcD4gR3JhZGllbnQ6OkNvbG9yU3Rv
cDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgcmV0dXJuIHt7ICpvZmZzZXQsICpjb2xv
ciB9fTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgR3JhZGllbnQ6OkxpbmVh
ckRhdGE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUg
RW5jb2Rlcj4gdm9pZCBHcmFkaWVudDo6TGluZWFyRGF0YTo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBwb2ludDA7CiAgICAgZW5jb2RlciA8PCBwb2lu
dDE7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxHcmFkaWVudDo6TGlu
ZWFyRGF0YT4gR3JhZGllbnQ6OkxpbmVhckRhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQor
dGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gT3B0aW9uYWw8R3JhZGllbnQ6OkxpbmVhckRhdGE+
IEdyYWRpZW50OjpMaW5lYXJEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBP
cHRpb25hbDxGbG9hdFBvaW50PiBwb2ludDA7CiAgICAgZGVjb2RlciA+PiBwb2ludDA7CkBAIC0y
MjUsOCArMjEwLDcgQEAgT3B0aW9uYWw8R3JhZGllbnQ6OkxpbmVhckRhdGE+IEdyYWRpZW50OjpM
aW5lYXJEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICByZXR1cm4ge3sgKnBvaW50
MCwgKnBvaW50MSB9fTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgR3JhZGll
bnQ6OlJhZGlhbERhdGE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAordGVtcGxhdGU8
dHlwZW5hbWUgRW5jb2Rlcj4gdm9pZCBHcmFkaWVudDo6UmFkaWFsRGF0YTo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBwb2ludDA7CiAgICAgZW5jb2Rl
ciA8PCBwb2ludDE7CkBAIC0yMzUsOCArMjE5LDcgQEAgdm9pZCBHcmFkaWVudDo6UmFkaWFsRGF0
YTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCBhc3BlY3RS
YXRpbzsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPEdyYWRpZW50OjpS
YWRpYWxEYXRhPiBHcmFkaWVudDo6UmFkaWFsRGF0YTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBPcHRpb25hbDxHcmFkaWVudDo6UmFkaWFsRGF0
YT4gR3JhZGllbnQ6OlJhZGlhbERhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAg
IE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBvaW50MDsKICAgICBkZWNvZGVyID4+IHBvaW50MDsKQEAg
LTI2NiwxNSArMjQ5LDEzIEBAIE9wdGlvbmFsPEdyYWRpZW50OjpSYWRpYWxEYXRhPiBHcmFkaWVu
dDo6UmFkaWFsRGF0YTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgcmV0dXJuIHt7ICpw
b2ludDAsICpwb2ludDEsICpzdGFydFJhZGl1cywgKmVuZFJhZGl1cywgKmFzcGVjdFJhdGlvIH19
OwogfQogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBHcmFkaWVudDo6Q29uaWNEYXRh
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29k
ZXI+IHZvaWQgR3JhZGllbnQ6OkNvbmljRGF0YTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNv
bnN0CiB7CiAgICAgZW5jb2RlciA8PCBwb2ludDA7CiAgICAgZW5jb2RlciA8PCBhbmdsZVJhZGlh
bnM7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxHcmFkaWVudDo6Q29u
aWNEYXRhPiBHcmFkaWVudDo6Q29uaWNEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IE9wdGlvbmFsPEdyYWRpZW50OjpDb25pY0RhdGE+IEdy
YWRpZW50OjpDb25pY0RhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlv
bmFsPEZsb2F0UG9pbnQ+IHBvaW50MDsKICAgICBkZWNvZGVyID4+IHBvaW50MDsKQEAgLTI4OSwx
MTUgKzI3MCw1MCBAQCBPcHRpb25hbDxHcmFkaWVudDo6Q29uaWNEYXRhPiBHcmFkaWVudDo6Q29u
aWNEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICByZXR1cm4ge3sgKnBvaW50MCwg
KmFuZ2xlUmFkaWFucyB9fTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgR3Jh
ZGllbnQ6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUg
RW5jb2Rlcj4gdm9pZCBHcmFkaWVudDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7
Ci0gICAgYXV0byB0eXBlID0gdGhpcy0+dHlwZSgpOwotICAgIGVuY29kZXIgPDwgdHlwZTsKLSAg
ICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIFR5cGU6OkxpbmVhcjoKLSAgICAgICAgZW5jb2Rl
ciA8PCBXVEY6OmdldDxHcmFkaWVudDo6TGluZWFyRGF0YT4obV9kYXRhKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBUeXBlOjpSYWRpYWw6Ci0gICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8
R3JhZGllbnQ6OlJhZGlhbERhdGE+KG1fZGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
VHlwZTo6Q29uaWM6Ci0gICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8R3JhZGllbnQ6OkNvbmlj
RGF0YT4obV9kYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIGVuY29kZXIgPDwgbV9k
YXRhOwogICAgIGVuY29kZXIgPDwgbV9zdG9wczsKICAgICBlbmNvZGVyIDw8IG1fc3RvcHNTb3J0
ZWQ7CiAgICAgZW5jb2RlciA8PCBtX3NwcmVhZE1ldGhvZDsKICAgICBlbmNvZGVyIDw8IG1fZ3Jh
ZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgot
T3B0aW9uYWw8UmVmPEdyYWRpZW50Pj4gR3JhZGllbnQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQordGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gT3B0aW9uYWw8UmVmPEdyYWRpZW50Pj4gR3Jh
ZGllbnQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewotICAgIE9wdGlvbmFsPEdyYWRpZW50
OjpUeXBlPiB0eXBlOwotICAgIGRlY29kZXIgPj4gdHlwZTsKLSAgICBpZiAoIXR5cGUpCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50
OwotICAgIHN3aXRjaCAoKnR5cGUpIHsKLSAgICBjYXNlIFR5cGU6OkxpbmVhcjogewotICAgICAg
ICBPcHRpb25hbDxMaW5lYXJEYXRhPiBsaW5lYXJEYXRhOwotICAgICAgICBkZWNvZGVyID4+IGxp
bmVhckRhdGE7Ci0gICAgICAgIGlmICghbGluZWFyRGF0YSkKLSAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0KLSAgICAgICAgZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKFdURk1v
dmUoKmxpbmVhckRhdGEpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVHlwZTo6
UmFkaWFsOiB7Ci0gICAgICAgIE9wdGlvbmFsPFJhZGlhbERhdGE+IHJhZGlhbERhdGE7Ci0gICAg
ICAgIGRlY29kZXIgPj4gcmFkaWFsRGF0YTsKLSAgICAgICAgaWYgKCFyYWRpYWxEYXRhKQotICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgICAgICBncmFkaWVudCA9IEdyYWRp
ZW50OjpjcmVhdGUoV1RGTW92ZSgqcmFkaWFsRGF0YSkpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgY2FzZSBUeXBlOjpDb25pYzogewotICAgICAgICBPcHRpb25hbDxDb25pY0RhdGE+IGNv
bmljRGF0YTsKLSAgICAgICAgZGVjb2RlciA+PiBjb25pY0RhdGE7Ci0gICAgICAgIGlmICghY29u
aWNEYXRhKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgICAgICBncmFk
aWVudCA9IEdyYWRpZW50OjpjcmVhdGUoV1RGTW92ZSgqY29uaWNEYXRhKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWdyYWRpZW50KSB7Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIE9wdGlvbmFsPERhdGE+IGRhdGE7CisgICAgZGVjb2RlciA+
PiBkYXRhOworICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAg
ICB9CisgICAgYXV0byBncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoV1RGTW92ZSgqZGF0YSkp
OwogCiAgICAgT3B0aW9uYWw8Q29sb3JTdG9wVmVjdG9yPiBzdG9wczsKICAgICBkZWNvZGVyID4+
IHN0b3BzOwogICAgIGlmICghc3RvcHMpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0K
ICAgICBPcHRpb25hbDxib29sPiBzdG9wc1NvcnRlZDsKICAgICBkZWNvZGVyID4+IHN0b3BzU29y
dGVkOwogICAgIGlmICghc3RvcHNTb3J0ZWQuaGFzVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLQotICAgIGlmIChzdG9wc1NvcnRlZC52YWx1ZSgpKQorICAgIGlmICgqc3Rv
cHNTb3J0ZWQpCiAgICAgICAgIGdyYWRpZW50LT5zZXRTb3J0ZWRDb2xvclN0b3BzKFdURk1vdmUo
KnN0b3BzKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIGZvciAoYXV0byYgc3RvcCA6ICpzdG9wcykK
LSAgICAgICAgICAgIGdyYWRpZW50LT5hZGRDb2xvclN0b3Aoc3RvcCk7CisgICAgICAgICAgICBn
cmFkaWVudC0+YWRkQ29sb3JTdG9wKFdURk1vdmUoc3RvcCkpOwogICAgIH0KIAogICAgIEdyYWRp
ZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZDsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNw
cmVhZE1ldGhvZCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KICAgICBncmFkaWVu
dC0+c2V0U3ByZWFkTWV0aG9kKHNwcmVhZE1ldGhvZCk7CiAKICAgICBPcHRpb25hbDxBZmZpbmVU
cmFuc2Zvcm0+IGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKICAgICBkZWNvZGVyID4+IGdy
YWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKICAgICBpZiAoIWdyYWRpZW50U3BhY2VUcmFuc2Zv
cm1hdGlvbikKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQogICAgIGdyYWRpZW50LT5z
ZXRHcmFkaWVudFNwYWNlVHJhbnNmb3JtKFdURk1vdmUoKmdyYWRpZW50U3BhY2VUcmFuc2Zvcm1h
dGlvbikpOwotICAgIHJldHVybiBncmFkaWVudC5yZWxlYXNlTm9uTnVsbCgpOworCisgICAgcmV0
dXJuIFdURk1vdmUoZ3JhZGllbnQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLW5h
bWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6Okdy
YWRpZW50OjpUeXBlPiB7Ci0gICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKLSAgICBXZWJD
b3JlOjpHcmFkaWVudDo6VHlwZSwKLSAgICBXZWJDb3JlOjpHcmFkaWVudDo6VHlwZTo6TGluZWFy
LAotICAgIFdlYkNvcmU6OkdyYWRpZW50OjpUeXBlOjpSYWRpYWwsCi0gICAgV2ViQ29yZTo6R3Jh
ZGllbnQ6OlR5cGU6OkNvbmljCi0gICAgPjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5j
cHAKaW5kZXggMzYzNzVkM2I3YzEyMWNlODY1OTdhZmY3ZGU3Y2IxMmE0NWQ4NTY4OS4uZTQ4MGQw
ODU0YTgyODk1ZTIyNzYzNTBhYTg4NjMxZjIzNWEzNmFkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC03NSw2ICs3
NSwyNiBAQCBwcml2YXRlOgogICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpmbGFnKSAmJiAobV9zdGF0ZS5wcm9wZXJ0eSAhPSBzdGF0ZS5wcm9wZXJ0
eSkpIFwKICAgICAgICAgY2hhbmdlRmxhZ3MuYWRkKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpmbGFn
KTsKIAorR3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKCkKKyAgICA6
IHNob3VsZEFudGlhbGlhcyh0cnVlKQorICAgICwgc2hvdWxkU21vb3RoRm9udHModHJ1ZSkKKyAg
ICAsIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyh0cnVlKQorICAgICwgc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMoZmFsc2UpCisjaWYgVVNFKENHKQorICAgIC8vIENvcmUgR3JhcGhpY3MgaW5j
b3JyZWN0bHkgcmVuZGVycyBzaGFkb3dzIHdpdGggcmFkaXVzID4gOHB4ICg8cmRhcjovL3Byb2Js
ZW0vODEwMzQ0Mj4pLAorICAgIC8vIGJ1dCB3ZSBuZWVkIHRvIHByZXNlcnZlIHRoaXMgYnVnZ3kg
YmVoYXZpb3IgZm9yIGNhbnZhcyBhbmQgLXdlYmtpdC1ib3gtc2hhZG93LgorICAgICwgc2hhZG93
c1VzZUxlZ2FjeVJhZGl1cyhmYWxzZSkKKyNlbmRpZgorICAgICwgZHJhd0x1bWluYW5jZU1hc2so
ZmFsc2UpCit7Cit9CisKK0dyYXBoaWNzQ29udGV4dFN0YXRlOjp+R3JhcGhpY3NDb250ZXh0U3Rh
dGUoKSA9IGRlZmF1bHQ7CitHcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKSA9IGRlZmF1bHQ7CitHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUoR3JhcGhpY3NDb250ZXh0U3RhdGUmJikgPSBk
ZWZhdWx0OworR3JhcGhpY3NDb250ZXh0U3RhdGUmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpvcGVy
YXRvcj0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKSA9IGRlZmF1bHQ7CitHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgR3JhcGhpY3NDb250ZXh0U3RhdGU6Om9wZXJhdG9yPShHcmFwaGljc0NvbnRl
eHRTdGF0ZSYmKSA9IGRlZmF1bHQ7CisKIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5n
ZUZsYWdzIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpjaGFuZ2VzRnJvbVN0YXRlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFnczsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggNTAzNjk2NzRj
NDVhNjJlNjFiNzg5MTkyMWViZGJhOTg2MDM2YTVlYS4uOWRjZGRlOTk4ZjM0MTM0Mjc3MjI2ODY5
NGM5OThhYmU2MGM4NGFkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJEYXNo
QXJyYXkuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5o
IgotI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2lu
Y2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgpAQCAtOTgsNiAr
OTcsMTAgQEAgY2xhc3MgUGF0aDsKIGNsYXNzIFRleHRSdW47CiBjbGFzcyBUcmFuc2Zvcm1hdGlv
bk1hdHJpeDsKIAorbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKK2NsYXNzIFJlY29yZGVyOworfQor
CiBlbnVtIGNsYXNzIFRleHREcmF3aW5nTW9kZSA6IHVpbnQ4X3QgewogICAgIEZpbGwgPSAxIDw8
IDAsCiAgICAgU3Ryb2tlID0gMSA8PCAxLApAQCAtMTUzLDI0ICsxNTYsMTUgQEAgT3B0aW9uYWw8
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpkZWNvZGUo
RGVjb2RlciYgZGVjb2QKICAgICByZXR1cm4ge3sgKm1vZGUsICpzaG91bGRVc2VEYXJrQXBwZWFy
YW5jZSB9fTsKIH0KIAotbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKLWNsYXNzIFJlY29yZGVyOwot
fQotCiBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGUgewotICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlKCkKLSAgICAgICAgOiBzaG91bGRBbnRpYWxpYXModHJ1ZSkKLSAgICAgICAgLCBzaG91bGRT
bW9vdGhGb250cyh0cnVlKQotICAgICAgICAsIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyh0
cnVlKQotICAgICAgICAsIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGZhbHNlKQotI2lmIFVTRShD
RykKLSAgICAgICAgLy8gQ29yZSBHcmFwaGljcyBpbmNvcnJlY3RseSByZW5kZXJzIHNoYWRvd3Mg
d2l0aCByYWRpdXMgPiA4cHggKDxyZGFyOi8vcHJvYmxlbS84MTAzNDQyPiksCi0gICAgICAgIC8v
IGJ1dCB3ZSBuZWVkIHRvIHByZXNlcnZlIHRoaXMgYnVnZ3kgYmVoYXZpb3IgZm9yIGNhbnZhcyBh
bmQgLXdlYmtpdC1ib3gtc2hhZG93LgotICAgICAgICAsIHNoYWRvd3NVc2VMZWdhY3lSYWRpdXMo
ZmFsc2UpCi0jZW5kaWYKLSAgICAgICAgLCBkcmF3THVtaW5hbmNlTWFzayhmYWxzZSkKLSAgICB7
Ci0gICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlKCk7CisgICAg
V0VCQ09SRV9FWFBPUlQgfkdyYXBoaWNzQ29udGV4dFN0YXRlKCk7CisKKyAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOworICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlKEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpOworCisgICAgR3JhcGhpY3NDb250ZXh0
U3RhdGUmIG9wZXJhdG9yPShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOworICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBvcGVyYXRvcj0oR3JhcGhpY3NDb250ZXh0U3RhdGUmJik7CiAKICAg
ICBlbnVtIENoYW5nZSA6IHVpbnQzMl90IHsKICAgICAgICAgU3Ryb2tlR3JhZGllbnRDaGFuZ2Ug
ICAgICAgICAgICAgICAgICAgID0gMSA8PCAwLApAQCAtMTk3LDcgKzE5MSw3IEBAIHN0cnVjdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSB7CiAgICAgICAgIFVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlICAg
ICAgICAgICAgICAgICA9IDEgPDwgMjAsCiAjZW5kaWYKICAgICB9OwotICAgIHR5cGVkZWYgT3B0
aW9uU2V0PENoYW5nZT4gU3RhdGVDaGFuZ2VGbGFnczsKKyAgICB1c2luZyBTdGF0ZUNoYW5nZUZs
YWdzID0gT3B0aW9uU2V0PENoYW5nZT47CiAKICAgICBSZWZQdHI8R3JhZGllbnQ+IHN0cm9rZUdy
YWRpZW50OwogICAgIFJlZlB0cjxQYXR0ZXJuPiBzdHJva2VQYXR0ZXJuOwpAQCAtMzA4LDcgKzMw
Miw3IEBAIHB1YmxpYzoKICAgICBQYXR0ZXJuKiBzdHJva2VQYXR0ZXJuKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpOyB9CiAKICAgICB2b2lkIHNldFN0cm9rZUdy
YWRpZW50KFJlZjxHcmFkaWVudD4mJik7Ci0gICAgUmVmUHRyPEdyYWRpZW50PiBzdHJva2VHcmFk
aWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQ7IH0KKyAgICBHcmFk
aWVudCogc3Ryb2tlR3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZUdyYWRp
ZW50LmdldCgpOyB9CiAKICAgICB2b2lkIHNldEZpbGxSdWxlKFdpbmRSdWxlKTsKICAgICBXaW5k
UnVsZSBmaWxsUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFJ1bGU7IH0KQEAgLTMy
MCw3ICszMTQsNyBAQCBwdWJsaWM6CiAgICAgUGF0dGVybiogZmlsbFBhdHRlcm4oKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlLmZpbGxQYXR0ZXJuLmdldCgpOyB9CiAKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldEZpbGxHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYpOwotICAgIFJlZlB0cjxHcmFk
aWVudD4gZmlsbEdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsR3JhZGllbnQ7
IH0KKyAgICBHcmFkaWVudCogZmlsbEdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5m
aWxsR3JhZGllbnQuZ2V0KCk7IH0KIAogICAgIHZvaWQgc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMoYm9vbCk7CiAgICAgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3Bw
CmluZGV4IDNmZDRhZGUwMTU3ZTlkNGY5YmQ3ZDhlNGJmZWI0OGFmZmUxOGM4ZTUuLjlmMWQxMDlm
ZjA5N2Q1M2I3MmE1NDJiMjRlOGM2MzFmNDA3Nzg4Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcApA
QCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkRyYXdFcnJvclVuZGVybGluZS5oIgogI2luY2x1
ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
IkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ2Fpcm8uaCIKICNpbmNsdWRlICJJbWFnZS5oIgpA
QCAtNTY4LDkgKzU2OSw5IEBAIEZpbGxTb3VyY2U6OkZpbGxTb3VyY2UoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmIHN0YXRlKQogICAgICAgICBwYXR0ZXJuLnJlcGVhdFggPSBzdGF0ZS5maWxs
UGF0dGVybi0+cmVwZWF0WCgpOwogICAgICAgICBwYXR0ZXJuLnJlcGVhdFkgPSBzdGF0ZS5maWxs
UGF0dGVybi0+cmVwZWF0WSgpOwogICAgIH0gZWxzZSBpZiAoc3RhdGUuZmlsbEdyYWRpZW50KSB7
Ci0gICAgICAgIGdyYWRpZW50LmJhc2UgPSBhZG9wdFJlZihzdGF0ZS5maWxsR3JhZGllbnQtPmNy
ZWF0ZVBsYXRmb3JtR3JhZGllbnQoMSkpOworICAgICAgICBncmFkaWVudC5iYXNlID0gc3RhdGUu
ZmlsbEdyYWRpZW50LT5jcmVhdGVQYXR0ZXJuKDEpOwogICAgICAgICBpZiAoc3RhdGUuYWxwaGEg
IT0gMSkKLSAgICAgICAgICAgIGdyYWRpZW50LmFscGhhQWRqdXN0ZWQgPSBhZG9wdFJlZihzdGF0
ZS5maWxsR3JhZGllbnQtPmNyZWF0ZVBsYXRmb3JtR3JhZGllbnQoc3RhdGUuYWxwaGEpKTsKKyAg
ICAgICAgICAgIGdyYWRpZW50LmFscGhhQWRqdXN0ZWQgPSBzdGF0ZS5maWxsR3JhZGllbnQtPmNy
ZWF0ZVBhdHRlcm4oc3RhdGUuYWxwaGEpOwogICAgIH0gZWxzZQogICAgICAgICBjb2xvciA9IHN0
YXRlLmZpbGxDb2xvcjsKIH0KQEAgLTU4MSw5ICs1ODIsOSBAQCBTdHJva2VTb3VyY2U6OlN0cm9r
ZVNvdXJjZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCiAgICAgaWYgKHN0YXRl
LnN0cm9rZVBhdHRlcm4pCiAgICAgICAgIHBhdHRlcm4gPSBhZG9wdFJlZihzdGF0ZS5zdHJva2VQ
YXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oQWZmaW5lVHJhbnNmb3JtKCkpKTsKICAgICBl
bHNlIGlmIChzdGF0ZS5zdHJva2VHcmFkaWVudCkgewotICAgICAgICBncmFkaWVudC5iYXNlID0g
YWRvcHRSZWYoc3RhdGUuc3Ryb2tlR3JhZGllbnQtPmNyZWF0ZVBsYXRmb3JtR3JhZGllbnQoMSkp
OworICAgICAgICBncmFkaWVudC5iYXNlID0gc3RhdGUuc3Ryb2tlR3JhZGllbnQtPmNyZWF0ZVBh
dHRlcm4oMSk7CiAgICAgICAgIGlmIChzdGF0ZS5hbHBoYSAhPSAxKQotICAgICAgICAgICAgZ3Jh
ZGllbnQuYWxwaGFBZGp1c3RlZCA9IGFkb3B0UmVmKHN0YXRlLnN0cm9rZUdyYWRpZW50LT5jcmVh
dGVQbGF0Zm9ybUdyYWRpZW50KHN0YXRlLmFscGhhKSk7CisgICAgICAgICAgICBncmFkaWVudC5h
bHBoYUFkanVzdGVkID0gc3RhdGUuc3Ryb2tlR3JhZGllbnQtPmNyZWF0ZVBhdHRlcm4oc3RhdGUu
YWxwaGEpOwogICAgIH0gZWxzZQogICAgICAgICBjb2xvciA9IHN0YXRlLnN0cm9rZUNvbG9yOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
ZGllbnRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFkaWVudENhaXJvLmNwcAppbmRleCA1ZTZmZTFkZDliMWEwNjY5NjYwMTIyNzU0ZGNhZTE3NmU2
OTZhY2JmLi4xZjNhMzRhYzNkMTEwMWM2ZTUxOTc1YmU1M2ZmNDE2YmYwNjlkYzE0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJv
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVu
dENhaXJvLmNwcApAQCAtMzAsMTUgKzMwLDE3IEBACiAKICNpZiBVU0UoQ0FJUk8pCiAKKyNpbmNs
dWRlICJBbmltYXRpb25VdGlsaXRpZXMuaCIKICNpbmNsdWRlICJDYWlyb09wZXJhdGlvbnMuaCIK
ICNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIkNvbG9yQmxlbmRpbmcuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRD
YWlyby5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotdm9pZCBHcmFkaWVudDo6cGxhdGZvcm1EZXN0cm95KCkKK3ZvaWQgR3JhZGllbnQ6OnN0
b3BzQ2hhbmdlZCgpCiB7CiB9CiAKQEAgLTEzMiw2NiArMTM0LDU1IEBAIHN0YXRpYyB2b2lkIGFk
ZENvbmljU2VjdG9yKGNhaXJvX3BhdHRlcm5fdCAqZ3JhZGllbnQsIGZsb2F0IGN4LCBmbG9hdCBj
eSwgZmxvYXQKICAgICBjYWlyb19tZXNoX3BhdHRlcm5fZW5kX3BhdGNoKGdyYWRpZW50KTsKIH0K
IAotc3RhdGljIEdyYWRpZW50OjpDb2xvclN0b3AgaW50ZXJwb2xhdGVDb2xvclN0b3AoR3JhZGll
bnQ6OkNvbG9yU3RvcCBmcm9tLCBHcmFkaWVudDo6Q29sb3JTdG9wIHRvKQorc3RhdGljIEdyYWRp
ZW50OjpDb2xvclN0b3AgaW50ZXJwb2xhdGVDb2xvclN0b3AoY29uc3QgR3JhZGllbnQ6OkNvbG9y
U3RvcCYgZnJvbSwgY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCYgdG8pCiB7Ci0gICAgYXV0byBb
cjEsIGcxLCBiMSwgYTFdID0gZnJvbS5jb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7Ci0gICAg
YXV0byBbcjIsIGcyLCBiMiwgYTJdID0gdG8uY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwot
Ci0gICAgZmxvYXQgb2Zmc2V0ID0gZnJvbS5vZmZzZXQgKyAodG8ub2Zmc2V0IC0gZnJvbS5vZmZz
ZXQpICogMC41ZjsKLSAgICBmbG9hdCByID0gcjEgKyAocjIgLSByMSkgKiAwLjVmOwotICAgIGZs
b2F0IGcgPSBnMSArIChnMiAtIGcxKSAqIDAuNWY7Ci0gICAgZmxvYXQgYiA9IGIxICsgKGIyIC0g
YjEpICogMC41ZjsKLSAgICBmbG9hdCBhID0gYTEgKyAoYTIgLSBhMSkgKiAwLjVmOwotCi0gICAg
cmV0dXJuIEdyYWRpZW50OjpDb2xvclN0b3Aob2Zmc2V0LCBtYWtlU2ltcGxlQ29sb3IoU1JHQkEg
eyByLCBnLCBiLCBhIH0pKTsKKyAgICByZXR1cm4geyBibGVuZChmcm9tLm9mZnNldCwgdG8ub2Zm
c2V0LCAwLjUpLCBibGVuZChmcm9tLmNvbG9yLCB0by5jb2xvciwgMC41KSB9OwogfQogCi1zdGF0
aWMgY2Fpcm9fcGF0dGVybl90KiBjcmVhdGVDb25pYyhmbG9hdCB4bywgZmxvYXQgeW8sIGZsb2F0
IHIsIGZsb2F0IGFuZ2xlUmFkaWFucywKK3N0YXRpYyBSZWZQdHI8Y2Fpcm9fcGF0dGVybl90PiBj
cmVhdGVDb25pYyhmbG9hdCB4bywgZmxvYXQgeW8sIGZsb2F0IHIsIGZsb2F0IGFuZ2xlUmFkaWFu
cywKICAgICBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIHN0b3BzLCBmbG9hdCBnbG9iYWxBbHBo
YSkKIHsKLSAgICBjYWlyb19wYXR0ZXJuX3QqIGdyYWRpZW50ID0gY2Fpcm9fcGF0dGVybl9jcmVh
dGVfbWVzaCgpOwotICAgIEdyYWRpZW50OjpDb2xvclN0b3AgZnJvbSwgdG87Ci0KLSAgICAvKiBJ
dCdzIG5vdCBwb3NzaWJsZSB0byBwYWludCBhbiBlbnRpcmUgY2lyY2xlIHdpdGggYSBzaW5nbGUg
QmV6aWVyIGN1cnZlLgotICAgICAqIFRvIGhhdmUgYSBnb29kIGFwcHJveGltYXRpb24gdG8gYSBj
aXJjbGUgaXQncyBuZWNlc3NhcnkgdG8gdXNlIGF0IGxlYXN0Ci0gICAgICogZm91ciBCZXppZXIg
Y3VydmVzLiBTbyB0aHJlZSBhZGRpdGlvbmFsIHN0b3BzIHdpdGggaW50ZXJwb2xhdGVkIGNvbG9y
cwotICAgICAqIGFyZSBhZGRlZCB0byBmb3JjZSBwYWludGluZyBvZiBmb3VyIEJlemllciBjdXJ2
ZXMuICovCisgICAgLy8gSXQncyBub3QgcG9zc2libGUgdG8gcGFpbnQgYW4gZW50aXJlIGNpcmNs
ZSB3aXRoIGEgc2luZ2xlIEJlemllciBjdXJ2ZS4KKyAgICAvLyBUbyBoYXZlIGEgZ29vZCBhcHBy
b3hpbWF0aW9uIHRvIGEgY2lyY2xlIGl0J3MgbmVjZXNzYXJ5IHRvIHVzZSBhdCBsZWFzdAorICAg
IC8vIGZvdXIgQmV6aWVyIGN1cnZlcy4gU28gdGhyZWUgYWRkaXRpb25hbCBzdG9wcyB3aXRoIGlu
dGVycG9sYXRlZCBjb2xvcnMKKyAgICAvLyBhcmUgYWRkZWQgdG8gZm9yY2UgcGFpbnRpbmcgb2Yg
Zm91ciBCZXppZXIgY3VydmVzLgogICAgIGlmIChzdG9wcy5zaXplKCkgPT0gMikgewotICAgICAg
ICBHcmFkaWVudDo6Q29sb3JTdG9wIGZpcnN0ID0gc3RvcHMuYXQoMCk7Ci0gICAgICAgIEdyYWRp
ZW50OjpDb2xvclN0b3AgbGFzdCA9IHN0b3BzLmF0KDEpOwotICAgICAgICBHcmFkaWVudDo6Q29s
b3JTdG9wIHRoaXJkID0gaW50ZXJwb2xhdGVDb2xvclN0b3AoZmlyc3QsIGxhc3QpOwotICAgICAg
ICBHcmFkaWVudDo6Q29sb3JTdG9wIHNlY29uZCA9IGludGVycG9sYXRlQ29sb3JTdG9wKGZpcnN0
LCB0aGlyZCk7Ci0gICAgICAgIEdyYWRpZW50OjpDb2xvclN0b3AgZm91cnRoID0gaW50ZXJwb2xh
dGVDb2xvclN0b3AodGhpcmQsIGxhc3QpOwotICAgICAgICBzdG9wcy5pbnNlcnQoMSwgZm91cnRo
KTsKLSAgICAgICAgc3RvcHMuaW5zZXJ0KDEsIHRoaXJkKTsKLSAgICAgICAgc3RvcHMuaW5zZXJ0
KDEsIHNlY29uZCk7CisgICAgICAgIGF1dG8gdGhpcmQgPSBpbnRlcnBvbGF0ZUNvbG9yU3RvcChz
dG9wcy5maXJzdCgpLCBzdG9wcy5sYXN0KCkpOworICAgICAgICBhdXRvIHNlY29uZCA9IGludGVy
cG9sYXRlQ29sb3JTdG9wKHN0b3BzLmZpcnN0KCksIHRoaXJkKTsKKyAgICAgICAgYXV0byBmb3Vy
dGggPSBpbnRlcnBvbGF0ZUNvbG9yU3RvcCh0aGlyZCwgc3RvcHMubGFzdCgpKTsKKyAgICAgICAg
c3RvcHMuaW5zZXJ0KDEsIFdURk1vdmUoZm91cnRoKSk7CisgICAgICAgIHN0b3BzLmluc2VydCgx
LCBXVEZNb3ZlKHRoaXJkKSk7CisgICAgICAgIHN0b3BzLmluc2VydCgxLCBXVEZNb3ZlKHNlY29u
ZCkpOwogICAgIH0KIAotICAgIC8vIEFkZCBleHRyYSBjb2xvciBzdG9wIGF0IHRoZSBiZWdpbm5p
bmcgaWYgZmlyc3QgZWxlbWVudCBvZmZzZXQgaXMgbm90IHplcm8uCi0gICAgaWYgKHN0b3BzLmF0
KDApLm9mZnNldCA+IDApCi0gICAgICAgIHN0b3BzLmluc2VydCgwLCBHcmFkaWVudDo6Q29sb3JT
dG9wKDAsIHN0b3BzLmF0KDApLmNvbG9yKSk7Ci0gICAgLy8gQWRkIGV4dHJhIGNvbG9yIHN0b3Ag
YXQgdGhlIGVuZCBpZiBsYXN0IGVsZW1lbnQgb2Zmc2V0IGlzIG5vdCB6ZXJvLgotICAgIGlmIChz
dG9wcy5hdChzdG9wcy5zaXplKCkgLSAxKS5vZmZzZXQgPCAxKQotICAgICAgICBzdG9wcy5hcHBl
bmQoR3JhZGllbnQ6OkNvbG9yU3RvcCgxLCBzdG9wcy5hdChzdG9wcy5zaXplKCkgLSAxKS5jb2xv
cikpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdG9wcy5zaXplKCkgLSAxOyBpKysp
IHsKLSAgICAgICAgZnJvbSA9IHN0b3BzLmF0KGkpLCB0byA9IHN0b3BzLmF0KGkgKyAxKTsKLSAg
ICAgICAgYWRkQ29uaWNTZWN0b3IoZ3JhZGllbnQsIHhvLCB5bywgciwgYW5nbGVSYWRpYW5zLCBm
cm9tLCB0bywgZ2xvYmFsQWxwaGEpOwotICAgIH0KKyAgICBpZiAoc3RvcHMuZmlyc3QoKS5vZmZz
ZXQgPiAwLjBmKQorICAgICAgICBzdG9wcy5pbnNlcnQoMCwgR3JhZGllbnQ6OkNvbG9yU3RvcCB7
IDAuMGYsIHN0b3BzLmZpcnN0KCkuY29sb3IgfSk7CisgICAgaWYgKHN0b3BzLmxhc3QoKS5vZmZz
ZXQgPCAxLjBmKQorICAgICAgICBzdG9wcy5hcHBlbmQoeyAxLjBmLCBzdG9wcy5sYXN0KCkuY29s
b3IgfSk7CiAKKyAgICBhdXRvIGdyYWRpZW50ID0gYWRvcHRSZWYoY2Fpcm9fcGF0dGVybl9jcmVh
dGVfbWVzaCgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0b3BzLnNpemUoKSAtIDE7
IGkrKykKKyAgICAgICAgYWRkQ29uaWNTZWN0b3IoZ3JhZGllbnQuZ2V0KCksIHhvLCB5bywgciwg
YW5nbGVSYWRpYW5zLCBzdG9wc1tpXSwgc3RvcHNbaSArIDFdLCBnbG9iYWxBbHBoYSk7CiAgICAg
cmV0dXJuIGdyYWRpZW50OwogfQogCi1jYWlyb19wYXR0ZXJuX3QqIEdyYWRpZW50OjpjcmVhdGVQ
bGF0Zm9ybUdyYWRpZW50KGZsb2F0IGdsb2JhbEFscGhhKQorUmVmUHRyPGNhaXJvX3BhdHRlcm5f
dD4gR3JhZGllbnQ6OmNyZWF0ZVBhdHRlcm4oZmxvYXQgZ2xvYmFsQWxwaGEpCiB7Ci0gICAgY2Fp
cm9fcGF0dGVybl90KiBncmFkaWVudCA9IFdURjo6c3dpdGNoT24obV9kYXRhLAotICAgICAgICBb
Jl0gKGNvbnN0IExpbmVhckRhdGEmIGRhdGEpIC0+IGNhaXJvX3BhdHRlcm5fdCogewotICAgICAg
ICAgICAgcmV0dXJuIGNhaXJvX3BhdHRlcm5fY3JlYXRlX2xpbmVhcihkYXRhLnBvaW50MC54KCks
IGRhdGEucG9pbnQwLnkoKSwgZGF0YS5wb2ludDEueCgpLCBkYXRhLnBvaW50MS55KCkpOworICAg
IGF1dG8gZ3JhZGllbnQgPSBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKKyAgICAgICAgWyZdIChjb25z
dCBMaW5lYXJEYXRhJiBkYXRhKSB7CisgICAgICAgICAgICBhdXRvIGdyYWRpZW50ID0gYWRvcHRS
ZWYoY2Fpcm9fcGF0dGVybl9jcmVhdGVfbGluZWFyKGRhdGEucG9pbnQwLngoKSwgZGF0YS5wb2lu
dDAueSgpLCBkYXRhLnBvaW50MS54KCksIGRhdGEucG9pbnQxLnkoKSkpOworICAgICAgICAgICAg
Zm9yIChhdXRvJiBzdG9wIDogc3RvcHMoKSkKKyAgICAgICAgICAgICAgICBhZGRDb2xvclN0b3BS
R0JBKGdyYWRpZW50LmdldCgpLCBzdG9wLCBnbG9iYWxBbHBoYSk7CisgICAgICAgICAgICByZXR1
cm4gZ3JhZGllbnQ7CiAgICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29uc3QgUmFkaWFsRGF0YSYg
ZGF0YSkgLT4gY2Fpcm9fcGF0dGVybl90KiB7Ci0gICAgICAgICAgICByZXR1cm4gY2Fpcm9fcGF0
dGVybl9jcmVhdGVfcmFkaWFsKGRhdGEucG9pbnQwLngoKSwgZGF0YS5wb2ludDAueSgpLCBkYXRh
LnN0YXJ0UmFkaXVzLCBkYXRhLnBvaW50MS54KCksIGRhdGEucG9pbnQxLnkoKSwgZGF0YS5lbmRS
YWRpdXMpOworICAgICAgICBbJl0gKGNvbnN0IFJhZGlhbERhdGEmIGRhdGEpIHsKKyAgICAgICAg
ICAgIGF1dG8gZ3JhZGllbnQgPSBhZG9wdFJlZihjYWlyb19wYXR0ZXJuX2NyZWF0ZV9yYWRpYWwo
ZGF0YS5wb2ludDAueCgpLCBkYXRhLnBvaW50MC55KCksIGRhdGEuc3RhcnRSYWRpdXMsIGRhdGEu
cG9pbnQxLngoKSwgZGF0YS5wb2ludDEueSgpLCBkYXRhLmVuZFJhZGl1cykpOworICAgICAgICAg
ICAgZm9yIChhdXRvJiBzdG9wIDogc3RvcHMoKSkKKyAgICAgICAgICAgICAgICBhZGRDb2xvclN0
b3BSR0JBKGdyYWRpZW50LmdldCgpLCBzdG9wLCBnbG9iYWxBbHBoYSk7CisgICAgICAgICAgICBy
ZXR1cm4gZ3JhZGllbnQ7CiAgICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29uc3QgQ29uaWNEYXRh
JiBkYXRhKSAgLT4gY2Fpcm9fcGF0dGVybl90KiB7CisgICAgICAgIFsmXSAoY29uc3QgQ29uaWNE
YXRhJiBkYXRhKSB7CisgICAgICAgICAgICBpc0NvbmljID0gdHJ1ZTsKICAgICAgICAgICAgIC8v
IEZJWE1FOiBkYXRhIHBhc3NlZCBmb3IgYSBDb25pYyBncmFkaWVudCBkb2Vzbid0IGNvbnRhaW4g
YSByYWRpdXMuIFRoYXQncyBhcHBhcmVudGx5IGNvcnJlY3QgYmVjYXVzZSB0aGUgVzNDIHNwZWMK
ICAgICAgICAgICAgIC8vIChodHRwczovL3d3dy53My5vcmcvVFIvY3NzLWltYWdlcy00LyNjb25p
Yy1ncmFkaWVudHMpIHN0YXRlcyBhIGNvbmljIGdyYWRpZW50IGlzIG9ubHkgZGVmaW5lZCBieSBp
dHMgcG9zaXRpb24gYW5kIGFuZ2xlLgogICAgICAgICAgICAgLy8gVGh1cywgaGVyZSBJIGdpdmUg
dGhlIHJhZGl1cyBhbiBleHRyZW1lbHkgbGFyZ2UgdmFsdWUuIFRoZSByZXN1bHRpbmcgZ3JhZGll
bnQgd2lsbCBiZSBsYXRlciBjbGlwcGVkIGJ5IGZpbGxSZWN0LgpAQCAtMjAxLDQyICsxOTIsMzYg
QEAgY2Fpcm9fcGF0dGVybl90KiBHcmFkaWVudDo6Y3JlYXRlUGxhdGZvcm1HcmFkaWVudChmbG9h
dCBnbG9iYWxBbHBoYSkKICAgICAgICAgfQogICAgICk7CiAKLSAgICBpZiAodHlwZSgpICE9IFR5
cGU6OkNvbmljKSB7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgc3RvcCA6IHN0b3BzKCkpIHsK
LSAgICAgICAgICAgIGFkZENvbG9yU3RvcFJHQkEoZ3JhZGllbnQsIHN0b3AsIGdsb2JhbEFscGhh
KTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIHN3aXRjaCAobV9zcHJlYWRNZXRob2QpIHsKICAg
ICBjYXNlIEdyYWRpZW50U3ByZWFkTWV0aG9kOjpQYWQ6Ci0gICAgICAgIGNhaXJvX3BhdHRlcm5f
c2V0X2V4dGVuZChncmFkaWVudCwgQ0FJUk9fRVhURU5EX1BBRCk7CisgICAgICAgIGNhaXJvX3Bh
dHRlcm5fc2V0X2V4dGVuZChncmFkaWVudC5nZXQoKSwgQ0FJUk9fRVhURU5EX1BBRCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgR3JhZGllbnRTcHJlYWRNZXRob2Q6OlJlZmxlY3Q6Ci0gICAg
ICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZChncmFkaWVudCwgQ0FJUk9fRVhURU5EX1JFRkxF
Q1QpOworICAgICAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQoZ3JhZGllbnQuZ2V0KCksIENB
SVJPX0VYVEVORF9SRUZMRUNUKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHcmFkaWVudFNw
cmVhZE1ldGhvZDo6UmVwZWF0OgotICAgICAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQoZ3Jh
ZGllbnQsIENBSVJPX0VYVEVORF9SRVBFQVQpOworICAgICAgICBjYWlyb19wYXR0ZXJuX3NldF9l
eHRlbmQoZ3JhZGllbnQuZ2V0KCksIENBSVJPX0VYVEVORF9SRVBFQVQpOwogICAgICAgICBicmVh
azsKICAgICB9CiAKICAgICBjYWlyb19tYXRyaXhfdCBtYXRyaXggPSB0b0NhaXJvTWF0cml4KG1f
Z3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uKTsKICAgICBjYWlyb19tYXRyaXhfaW52ZXJ0KCZt
YXRyaXgpOwotICAgIGNhaXJvX3BhdHRlcm5fc2V0X21hdHJpeChncmFkaWVudCwgJm1hdHJpeCk7
CisgICAgY2Fpcm9fcGF0dGVybl9zZXRfbWF0cml4KGdyYWRpZW50LmdldCgpLCAmbWF0cml4KTsK
IAogICAgIHJldHVybiBncmFkaWVudDsKIH0KIAogdm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBSZWZQdHI8
Y2Fpcm9fcGF0dGVybl90PiBwbGF0Zm9ybUdyYWRpZW50ID0gYWRvcHRSZWYoY3JlYXRlUGxhdGZv
cm1HcmFkaWVudCgxLjApKTsKLSAgICBpZiAoIXBsYXRmb3JtR3JhZGllbnQpCisgICAgYXV0byBw
YXR0ZXJuID0gY3JlYXRlUGF0dGVybigxLjApOworICAgIGlmICghcGF0dGVybikKICAgICAgICAg
cmV0dXJuOwogCiAgICAgQVNTRVJUKGNvbnRleHQuaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAg
IGF1dG8mIHBsYXRmb3JtQ29udGV4dCA9ICpjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwogCiAg
ICAgQ2Fpcm86OnNhdmUocGxhdGZvcm1Db250ZXh0KTsKLSAgICBDYWlybzo6ZmlsbFJlY3QocGxh
dGZvcm1Db250ZXh0LCByZWN0LCBwbGF0Zm9ybUdyYWRpZW50LmdldCgpKTsKKyAgICBDYWlybzo6
ZmlsbFJlY3QocGxhdGZvcm1Db250ZXh0LCByZWN0LCBwYXR0ZXJuLmdldCgpKTsKICAgICBDYWly
bzo6cmVzdG9yZShwbGF0Zm9ybUNvbnRleHQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvLmNwcAppbmRleCBjZDg2NWFhYTI2MDE5ZmZjNzVhZWVlOTI2MjAyY2YxMTI1OTVi
YzgxLi44OTEzODQzMTBlYmU4MTgyNDM0ODQ2NjE3OTQ4MWVkMTc2MTI5YjY5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKQEAgLTMzLDExICszMywxMSBAQAogI2luY2x1
ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR2x5
cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNp
bmNsdWRlICJJbnRSZWN0LmgiCiAKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBHcmFwaGljc0Nv
bnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6Y3JlYXRlRmFjdG9yeShQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0KQpA
QCAtMTU0LDEyICsxNTQsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG8KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3Jh
ZGllbnQmIGdyYWRpZW50KQogewotICAgIFJlZlB0cjxjYWlyb19wYXR0ZXJuX3Q+IHBsYXRmb3Jt
R3JhZGllbnQgPSBhZG9wdFJlZihncmFkaWVudC5jcmVhdGVQbGF0Zm9ybUdyYWRpZW50KDEuMCkp
OwotICAgIGlmICghcGxhdGZvcm1HcmFkaWVudCkKKyAgICBhdXRvIHBhdHRlcm4gPSBncmFkaWVu
dC5jcmVhdGVQYXR0ZXJuKDEuMCk7CisgICAgaWYgKCFwYXR0ZXJuKQogICAgICAgICByZXR1cm47
CiAKICAgICBDYWlybzo6c2F2ZShtX3BsYXRmb3JtQ29udGV4dCk7Ci0gICAgQ2Fpcm86OmZpbGxS
ZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBwbGF0Zm9ybUdyYWRpZW50LmdldCgpKTsKKyAg
ICBDYWlybzo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIHBhdHRlcm4uZ2V0KCkp
OwogICAgIENhaXJvOjpyZXN0b3JlKG1fcGxhdGZvcm1Db250ZXh0KTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcAppbmRleCA5
NTUxZTliYjRhZjdkMmU1ZDUzZmJiZWMwNmNjZjhlMTBjNjYwZWU0Li44MTA5MmI4ZTc5ZjUzZmJi
ODNjOGY1YTZhNzcyMTJmMDQ1MzViNjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcApAQCAtMzUsMTggKzM1LDE0IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBHcmFkaWVudDo6cGxhdGZvcm1EZXN0cm95KCkKK3Zv
aWQgR3JhZGllbnQ6OnN0b3BzQ2hhbmdlZCgpCiB7Ci0gICAgQ0dHcmFkaWVudFJlbGVhc2UobV9n
cmFkaWVudCk7CiAgICAgbV9ncmFkaWVudCA9IG51bGxwdHI7CiB9CiAKLUNHR3JhZGllbnRSZWYg
R3JhZGllbnQ6OnBsYXRmb3JtR3JhZGllbnQoKQordm9pZCBHcmFkaWVudDo6Y3JlYXRlQ0dHcmFk
aWVudCgpCiB7Ci0gICAgaWYgKG1fZ3JhZGllbnQpCi0gICAgICAgIHJldHVybiBtX2dyYWRpZW50
OwotCi0gICAgc29ydFN0b3BzSWZOZWNlc3NhcnkoKTsKKyAgICBzb3J0U3RvcHMoKTsKIAogICAg
IGF1dG8gY29sb3JzQXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKDAsIG1fc3Rv
cHMuc2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7CiAgICAgdW5zaWduZWQgbnVtU3Rv
cHMgPSBtX3N0b3BzLnNpemUoKTsKQEAgLTgyLDExICs3OCw5IEBAIENHR3JhZGllbnRSZWYgR3Jh
ZGllbnQ6OnBsYXRmb3JtR3JhZGllbnQoKQogICAgIH0KIAogICAgIGlmIChoYXNFeHRlbmRlZENv
bG9ycykKLSAgICAgICAgbV9ncmFkaWVudCA9IENHR3JhZGllbnRDcmVhdGVXaXRoQ29sb3JzKGV4
dGVuZGVkU1JHQkNvbG9yU3BhY2VSZWYoKSwgY29sb3JzQXJyYXkuZ2V0KCksIGxvY2F0aW9ucy5k
YXRhKCkpOworICAgICAgICBtX2dyYWRpZW50ID0gYWRvcHRDRihDR0dyYWRpZW50Q3JlYXRlV2l0
aENvbG9ycyhleHRlbmRlZFNSR0JDb2xvclNwYWNlUmVmKCksIGNvbG9yc0FycmF5LmdldCgpLCBs
b2NhdGlvbnMuZGF0YSgpKSk7CiAgICAgZWxzZQotICAgICAgICBtX2dyYWRpZW50ID0gQ0dHcmFk
aWVudENyZWF0ZVdpdGhDb2xvckNvbXBvbmVudHMoc1JHQkNvbG9yU3BhY2VSZWYoKSwgY29sb3JD
b21wb25lbnRzLmRhdGEoKSwgbG9jYXRpb25zLmRhdGEoKSwgbnVtU3RvcHMpOwotCi0gICAgcmV0
dXJuIG1fZ3JhZGllbnQ7CisgICAgICAgIG1fZ3JhZGllbnQgPSBhZG9wdENGKENHR3JhZGllbnRD
cmVhdGVXaXRoQ29sb3JDb21wb25lbnRzKHNSR0JDb2xvclNwYWNlUmVmKCksIGNvbG9yQ29tcG9u
ZW50cy5kYXRhKCksIGxvY2F0aW9ucy5kYXRhKCksIG51bVN0b3BzKSk7CiB9CiAKIHZvaWQgR3Jh
ZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCkBAIC0xMDMsNyArOTcsOSBAQCB2b2lkIEdyYWRpZW50OjpwYWludChHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpCiB2b2lkIEdyYWRpZW50OjpwYWludChDR0NvbnRleHRSZWYgcGxhdGZvcm1D
b250ZXh0KQogewogICAgIENHR3JhZGllbnREcmF3aW5nT3B0aW9ucyBleHRlbmRPcHRpb25zID0g
a0NHR3JhZGllbnREcmF3c0JlZm9yZVN0YXJ0TG9jYXRpb24gfCBrQ0dHcmFkaWVudERyYXdzQWZ0
ZXJFbmRMb2NhdGlvbjsKLSAgICBDR0dyYWRpZW50UmVmIGdyYWRpZW50ID0gcGxhdGZvcm1HcmFk
aWVudCgpOworCisgICAgaWYgKCFtX2dyYWRpZW50KQorICAgICAgICBjcmVhdGVDR0dyYWRpZW50
KCk7CiAKICAgICBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKICAgICAgICAgWyZdIChjb25zdCBMaW5l
YXJEYXRhJiBkYXRhKSB7CkBAIC0xNDYsNyArMTQyLDcgQEAgdm9pZCBHcmFkaWVudDo6cGFpbnQo
Q0dDb250ZXh0UmVmIHBsYXRmb3JtQ29udGV4dCkKICAgICAgICAgICAgICAgICAgICAgICAgIENH
UG9pbnQgbGVmdCA9IENHUG9pbnRNYWtlKGZsaXAgPyBzdGFydCArIHdpZHRoIDogc3RhcnQsIGJv
dW5kaW5nQm94Lm9yaWdpbi55KTsKICAgICAgICAgICAgICAgICAgICAgICAgIENHUG9pbnQgcmln
aHQgPSBDR1BvaW50TWFrZShmbGlwID8gc3RhcnQgOiBzdGFydCArIHdpZHRoLCBib3VuZGluZ0Jv
eC5vcmlnaW4ueSk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIENHQ29udGV4dERyYXdMaW5l
YXJHcmFkaWVudChwbGF0Zm9ybUNvbnRleHQsIGdyYWRpZW50LCBsZWZ0LCByaWdodCwgZXh0ZW5k
T3B0aW9ucyk7CisgICAgICAgICAgICAgICAgICAgICAgICBDR0NvbnRleHREcmF3TGluZWFyR3Jh
ZGllbnQocGxhdGZvcm1Db250ZXh0LCBtX2dyYWRpZW50LmdldCgpLCBsZWZ0LCByaWdodCwgZXh0
ZW5kT3B0aW9ucyk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX3NwcmVhZE1ldGhv
ZCA9PSBHcmFkaWVudFNwcmVhZE1ldGhvZDo6UmVmbGVjdCkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmbGlwID0gIWZsaXA7CkBAIC0xNTgsNyArMTU0LDcgQEAgdm9pZCBHcmFkaWVudDo6
cGFpbnQoQ0dDb250ZXh0UmVmIHBsYXRmb3JtQ29udGV4dCkKICAgICAgICAgICAgICAgICBGQUxM
VEhST1VHSDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgR3JhZGllbnRTcHJlYWRN
ZXRob2Q6OlBhZDoKLSAgICAgICAgICAgICAgICBDR0NvbnRleHREcmF3TGluZWFyR3JhZGllbnQo
cGxhdGZvcm1Db250ZXh0LCBncmFkaWVudCwgZGF0YS5wb2ludDAsIGRhdGEucG9pbnQxLCBleHRl
bmRPcHRpb25zKTsKKyAgICAgICAgICAgICAgICBDR0NvbnRleHREcmF3TGluZWFyR3JhZGllbnQo
cGxhdGZvcm1Db250ZXh0LCBtX2dyYWRpZW50LmdldCgpLCBkYXRhLnBvaW50MCwgZGF0YS5wb2lu
dDEsIGV4dGVuZE9wdGlvbnMpOwogICAgICAgICAgICAgfQogICAgICAgICB9LAogICAgICAgICBb
Jl0gKGNvbnN0IFJhZGlhbERhdGEmIGRhdGEpIHsKQEAgLTE3Myw3ICsxNjksNyBAQCB2b2lkIEdy
YWRpZW50OjpwYWludChDR0NvbnRleHRSZWYgcGxhdGZvcm1Db250ZXh0KQogICAgICAgICAgICAg
ICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQsIC1kYXRhLnBvaW50MC54
KCksIC1kYXRhLnBvaW50MC55KCkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBDR0Nv
bnRleHREcmF3UmFkaWFsR3JhZGllbnQocGxhdGZvcm1Db250ZXh0LCBncmFkaWVudCwgZGF0YS5w
b2ludDAsIGRhdGEuc3RhcnRSYWRpdXMsIGRhdGEucG9pbnQxLCBkYXRhLmVuZFJhZGl1cywgZXh0
ZW5kT3B0aW9ucyk7CisgICAgICAgICAgICBDR0NvbnRleHREcmF3UmFkaWFsR3JhZGllbnQocGxh
dGZvcm1Db250ZXh0LCBtX2dyYWRpZW50LmdldCgpLCBkYXRhLnBvaW50MCwgZGF0YS5zdGFydFJh
ZGl1cywgZGF0YS5wb2ludDEsIGRhdGEuZW5kUmFkaXVzLCBleHRlbmRPcHRpb25zKTsKIAogICAg
ICAgICAgICAgaWYgKG5lZWRTY2FsaW5nKQogICAgICAgICAgICAgICAgIENHQ29udGV4dFJlc3Rv
cmVHU3RhdGUocGxhdGZvcm1Db250ZXh0KTsKQEAgLTE4Niw3ICsxODIsNyBAQCB2b2lkIEdyYWRp
ZW50OjpwYWludChDR0NvbnRleHRSZWYgcGxhdGZvcm1Db250ZXh0KQogICAgICAgICAgICAgQ0dD
b250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dCwgZGF0YS5wb2ludDAueCgpLCBkYXRh
LnBvaW50MC55KCkpOwogICAgICAgICAgICAgQ0dDb250ZXh0Um90YXRlQ1RNKHBsYXRmb3JtQ29u
dGV4dCwgKENHRmxvYXQpLU1fUElfMik7CiAgICAgICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVD
VE0ocGxhdGZvcm1Db250ZXh0LCAtZGF0YS5wb2ludDAueCgpLCAtZGF0YS5wb2ludDAueSgpKTsK
LSAgICAgICAgICAgIENHQ29udGV4dERyYXdDb25pY0dyYWRpZW50KHBsYXRmb3JtQ29udGV4dCwg
cGxhdGZvcm1HcmFkaWVudCgpLCBkYXRhLnBvaW50MCwgZGF0YS5hbmdsZVJhZGlhbnMpOworICAg
ICAgICAgICAgQ0dDb250ZXh0RHJhd0NvbmljR3JhZGllbnQocGxhdGZvcm1Db250ZXh0LCBtX2dy
YWRpZW50LmdldCgpLCBkYXRhLnBvaW50MCwgZGF0YS5hbmdsZVJhZGlhbnMpOwogICAgICAgICAg
ICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShwbGF0Zm9ybUNvbnRleHQpOwogI2Vsc2UKICAgICAg
ICAgICAgIFVOVVNFRF9QQVJBTShkYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAppbmRleCBhNWU1NTFh
OTgwNzgyMDQ1OGUyOWE3MDFhMzcyYzczNjMyMzgzODcwLi5mYmRkMGEzYmM5Y2I0YTgwZGQwOWZh
NDk2NTUzYTliYjAzYmNkN2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3RSZWNv
cmRlci5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIkdyYWRpZW50
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCmluZGV4IDI1YmYyYjliOTM1NDJlMjA5MjA5MDhlMDRh
YzI2YzAwOWIzZWViOGEuLjhmMTEyZDcxOGE5MmIxNjI1MTY1ZWYzOTgyZDA3NzY2OTRhOWE1ZWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdEl0ZW1zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApAQCAtMjcsMTUgKzI3LDE0IEBACiAK
ICNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxp
c3QuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVj
dC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1
ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbWFnZURhdGEu
aCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAKIG5h
bWVzcGFjZSBXVEYgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09w
ZXJhdGlvblJlY29yZGVyLmNwcAppbmRleCBiZDViYzU0MjIxNmI5OTc2ZjY2NmM0NDA3MjdiZjYw
Y2VkZDdmODljLi4wMGJlOGU5MWQzNTU3N2JiNDY4YjgzODgzMjU2YjdlZDk5YWZjNjgwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05p
Y29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVy
LmNwcApAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCiAj
aW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgorI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJOaWNvc2lhUGFpbnRpbmdPcGVyYXRpb25S
ZXBsYXlDYWlyby5oIgogI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgpAQCAtMjkxLDcgKzI5Miw3IEBA
IHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXBwZW5k
KGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGFkb3B0UmVmKGdyYWRpZW50LmNyZWF0ZVBs
YXRmb3JtR3JhZGllbnQoMS4wKSkpKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVj
dD4ocmVjdCwgZ3JhZGllbnQuY3JlYXRlUGF0dGVybigxLjApKSk7CiB9CiAKIHZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1v
ZGUgYmxlbmRNb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcAppbmRleCAxNTAyNDY4MTQ5NDFkNjc3
MzUwZWQzMjg4NjVmYzg3ZTcwNGJhYmMwLi44ODM1Zjg4ZDFiYmNkMjAzYzMyNTYyZGEyNDE0Y2Jj
MjdiNmZiMGY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcApAQCAtMzAxLDcgKzMwMSw3IEBAIEZp
bGxTb3VyY2U6OkZpbGxTb3VyY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBj
b25zdCBHcmFwaGljc0NvbnRleHQmCiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNl
Q1RNOyAvLyBGSVhNRTogVGhpcyBpc24ndCByZWFsbHkgbmVlZGVkIG9uIFdpbmRvd3MKICAgICAg
ICAgYnJ1c2ggPSBzdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnRl
eHQsIHN0YXRlLmFscGhhLCB1c2VyVG9CYXNlQ1RNKTsKICAgICB9IGVsc2UgaWYgKHN0YXRlLmZp
bGxHcmFkaWVudCAmJiAhc3RhdGUuZmlsbEdyYWRpZW50LT5zdG9wcygpLmlzRW1wdHkoKSkKLSAg
ICAgICAgYnJ1c2ggPSBzdGF0ZS5maWxsR3JhZGllbnQtPmNyZWF0ZVBsYXRmb3JtR3JhZGllbnRJ
Zk5lY2Vzc2FyeShwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOworICAgICAgICBicnVz
aCA9IHN0YXRlLmZpbGxHcmFkaWVudC0+Y3JlYXRlQnJ1c2gocGxhdGZvcm1Db250ZXh0LnJlbmRl
clRhcmdldCgpKTsKICAgICBlbHNlCiAgICAgICAgIGJydXNoID0gcGxhdGZvcm1Db250ZXh0LmJy
dXNoV2l0aENvbG9yKGNvbG9yKTsKIH0KQEAgLTMxOCw3ICszMTgsNyBAQCBTdHJva2VTb3VyY2U6
OlN0cm9rZVNvdXJjZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEdy
YXBoaWNzQ29udAogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTTsgLy8gRklY
TUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG5lZWRlZCBvbiBXaW5kb3dzCiAgICAgICAgIGJydXNoID0g
c3RhdGUuc3Ryb2tlUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnRleHQsIHN0YXRl
LmFscGhhLCB1c2VyVG9CYXNlQ1RNKTsKICAgICB9IGVsc2UgaWYgKHN0YXRlLnN0cm9rZUdyYWRp
ZW50KQotICAgICAgICBicnVzaCA9IHN0YXRlLnN0cm9rZUdyYWRpZW50LT5jcmVhdGVQbGF0Zm9y
bUdyYWRpZW50SWZOZWNlc3NhcnkocGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsKKyAg
ICAgICAgYnJ1c2ggPSBzdGF0ZS5zdHJva2VHcmFkaWVudC0+Y3JlYXRlQnJ1c2gocGxhdGZvcm1D
b250ZXh0LnJlbmRlclRhcmdldCgpKTsKICAgICBlbHNlCiAgICAgICAgIGJydXNoID0gcGxhdGZv
cm1Db250ZXh0LmJydXNoV2l0aENvbG9yKGNvbG9yKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAppbmRl
eCAwNGU0ZDc2NDkzMmZhODk1NDgwMjhmZTM1OWUzM2Q4YjY1Njc0OTVkLi4wZGZlYWI2NzJlZDIx
ZTFkYjVjNmRiNzhiMWIxNGRkNzM5NDlhMGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCkBAIC0zMSwy
OSArMzEsMTQgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgogI2luY2x1
ZGUgPGQyZDEuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KIAogI2RlZmluZSBHUkFESUVOVF9EUkFXSU5HIDMKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi12b2lkIEdyYWRpZW50OjpwbGF0Zm9ybURlc3Ryb3koKQordm9pZCBHcmFkaWVu
dDo6c3RvcHNDaGFuZ2VkKCkKIHsKLSAgICBpZiAobV9ncmFkaWVudCkKLSAgICAgICAgbV9ncmFk
aWVudC0+UmVsZWFzZSgpOwotICAgIG1fZ3JhZGllbnQgPSBudWxscHRyOwotfQotCi1JRDJEMUJy
dXNoKiBHcmFkaWVudDo6cGxhdGZvcm1HcmFkaWVudCgpCi17Ci0gICAgQVNTRVJUKG1fZ3JhZGll
bnQpOwotICAgIHJldHVybiBtX2dyYWRpZW50OwotfQotCi1JRDJEMUJydXNoKiBHcmFkaWVudDo6
Y3JlYXRlUGxhdGZvcm1HcmFkaWVudElmTmVjZXNzYXJ5KElEMkQxUmVuZGVyVGFyZ2V0KiBjb250
ZXh0KQotewotICAgIGdlbmVyYXRlR3JhZGllbnQoY29udGV4dCk7Ci0gICAgcmV0dXJuIG1fZ3Jh
ZGllbnQ7CisgICAgbV9icnVzaCA9IG51bGxwdHI7CiB9CiAKIHN0YXRpYyBib29sIGNpcmNsZUlz
RW50aXJlbHlDb250YWluZWQoY29uc3QgRmxvYXRQb2ludCYgY2VudGVyQSwgZmxvYXQgcmFkaXVz
QSwgY29uc3QgRmxvYXRQb2ludCYgY2VudGVyQiwgZmxvYXQgcmFkaXVzQikKQEAgLTY1LDE1ICs1
MCwxNiBAQCBzdGF0aWMgYm9vbCBjaXJjbGVJc0VudGlyZWx5Q29udGFpbmVkKGNvbnN0IEZsb2F0
UG9pbnQmIGNlbnRlckEsIGZsb2F0IHJhZGl1c0EsCiAgICAgcmV0dXJuIGRlbHRhWCAqIGRlbHRh
WCArIGRlbHRhWSAqIGRlbHRhWSA8IGRlbHRhUmFkaXVzICogZGVsdGFSYWRpdXMgJiYgcmFkaXVz
QSA8IHJhZGl1c0I7CiB9CiAKLXZvaWQgR3JhZGllbnQ6OmdlbmVyYXRlR3JhZGllbnQoSUQyRDFS
ZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKK0lEMkQxQnJ1c2gqIEdyYWRpZW50OjpjcmVhdGVC
cnVzaChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQogewotICAgIHNvcnRTdG9wc0lm
TmVjZXNzYXJ5KCk7CisgICAgc29ydFN0b3BzKCk7CiAKICAgICBWZWN0b3I8RDJEMV9HUkFESUVO
VF9TVE9QPiBncmFkaWVudFN0b3BzOwotICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgRXh0
ZW5kZWRDb2xvci4KLSAgICBmb3IgKGF1dG8gc3RvcCA6IG1fc3RvcHMpIHsKKyAgICBncmFkaWVu
dFN0b3BzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9zdG9wcy5zaXplKCkpOworICAgIGZvciAo
YXV0byYgc3RvcCA6IG1fc3RvcHMpIHsKKyAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZv
ciBub24tc1JHQkEgY29sb3Igc3BhY2VzLgogICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSBzdG9w
LmNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKLSAgICAgICAgZ3JhZGllbnRTdG9wcy5hcHBl
bmQoRDJEMTo6R3JhZGllbnRTdG9wKHN0b3Aub2Zmc2V0LCBEMkQxOjpDb2xvckYociwgZywgYiwg
YSkpKTsKKyAgICAgICAgZ3JhZGllbnRTdG9wcy5ncmFkaWVudFN0b3BzLnVuY2hlY2tlZEFwcGVu
ZChEMkQxOjpHcmFkaWVudFN0b3Aoc3RvcC5vZmZzZXQsIEQyRDE6OkNvbG9yRihyLCBnLCBiLCBh
KSkpOwogICAgIH0KIAogICAgIFdURjo6c3dpdGNoT24obV9kYXRhLApAQCAtMTIyLDExICsxMDgs
NiBAQCB2b2lkIEdyYWRpZW50OjpnZW5lcmF0ZUdyYWRpZW50KElEMkQxUmVuZGVyVGFyZ2V0KiBy
ZW5kZXJUYXJnZXQpCiAgICAgSFJFU1VMVCBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlR3JhZGll
bnRTdG9wQ29sbGVjdGlvbihncmFkaWVudFN0b3BzLmRhdGEoKSwgZ3JhZGllbnRTdG9wcy5zaXpl
KCksICZncmFkaWVudFN0b3BDb2xsZWN0aW9uKTsKICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVE
RUQoaHIpKTsKIAotICAgIGlmIChtX2dyYWRpZW50KSB7Ci0gICAgICAgIG1fZ3JhZGllbnQtPlJl
bGVhc2UoKTsKLSAgICAgICAgbV9ncmFkaWVudCA9IG51bGxwdHI7Ci0gICAgfQotCiAgICAgV1RG
Ojpzd2l0Y2hPbihtX2RhdGEsCiAgICAgICAgIFsmXSAoY29uc3QgTGluZWFyRGF0YSYgZGF0YSkg
ewogICAgICAgICAgICAgSUQyRDFMaW5lYXJHcmFkaWVudEJydXNoKiBsaW5lYXJHcmFkaWVudCA9
IG51bGxwdHI7CkBAIC0xMzUsNyArMTE2LDcgQEAgdm9pZCBHcmFkaWVudDo6Z2VuZXJhdGVHcmFk
aWVudChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQogICAgICAgICAgICAgICAgIEQy
RDE6OkJydXNoUHJvcGVydGllcygpLCBncmFkaWVudFN0b3BDb2xsZWN0aW9uLmdldCgpLAogICAg
ICAgICAgICAgICAgICZsaW5lYXJHcmFkaWVudCk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChTVUNDRUVERUQoaHIpKTsKLSAgICAgICAgICAgIG1fZ3JhZGllbnQgPSBsaW5lYXJHcmFkaWVu
dDsKKyAgICAgICAgICAgIG1fYnJ1c2ggPSBhZG9wdENPTShsaW5lYXJHcmFkaWVudCk7CiAgICAg
ICAgIH0sCiAgICAgICAgIFsmXSAoY29uc3QgUmFkaWFsRGF0YSYgZGF0YSkgewogICAgICAgICAg
ICAgRmxvYXRTaXplIG9mZnNldDsKQEAgLTE1NCwxNCArMTM1LDE1IEBAIHZvaWQgR3JhZGllbnQ6
OmdlbmVyYXRlR3JhZGllbnQoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKICAgICAg
ICAgICAgICAgICBEMkQxOjpCcnVzaFByb3BlcnRpZXMoKSwgZ3JhZGllbnRTdG9wQ29sbGVjdGlv
bi5nZXQoKSwKICAgICAgICAgICAgICAgICAmcmFkaWFsR3JhZGllbnQpOwogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgICAgICBtX2dyYWRpZW50ID0g
cmFkaWFsR3JhZGllbnQ7CisgICAgICAgICAgICBtX2JydXNoID0gYWRvcHRDT00ocmFkaWFsR3Jh
ZGllbnQpOwogICAgICAgICB9LAogICAgICAgICBbJl0gKGNvbnN0IENvbmljRGF0YSYpIHsKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgY29uaWMgZ3JhZGllbnQgcmVuZGVyaW5nLgor
ICAgICAgICAgICAgbV9icnVzaCA9IG51bGxwdHI7CiAgICAgICAgIH0KICAgICApOwogCi0gICAg
aGFzaCgpOworICAgIHJldHVybiBtX2JydXNoLmdldCgpOwogfQogCiB2b2lkIEdyYWRpZW50Ojpm
aWxsKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAt
MTcwLDE1ICsxNTIsMTYgQEAgdm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIAogICAgIFdURjo6c3dpdGNoT24obV9kYXRh
LAogICAgICAgICBbJl0gKGNvbnN0IExpbmVhckRhdGEmIGRhdGEpIHsKLSAgICAgICAgICAgIGlm
ICghbV9jYWNoZWRIYXNoIHx8ICFtX2dyYWRpZW50KQotICAgICAgICAgICAgICAgIGdlbmVyYXRl
R3JhZGllbnQoZDJkQ29udGV4dCk7CisgICAgICAgICAgICAvLyBGSVhNRTogSWYgd2UgaGF2ZSBh
IGJydXNoLCB3aHkgY2FuIHdlIHJlLXVzZSBpdD8gV2hhdCBndWFyYW50ZWVzIGl0J3MgcmlnaHQg
Zm9yIHRoaXMgY29udGV4dD8KKyAgICAgICAgICAgIGlmICghbV9icnVzaCkKKyAgICAgICAgICAg
ICAgICBjcmVhdGVCcnVzaChkMmRDb250ZXh0KTsKIAogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAg
ICAgICAgICBkMmRDb250ZXh0LT5TZXRUYWdzKEdSQURJRU5UX0RSQVdJTkcsIF9fTElORV9fKTsK
ICNlbmRpZgogCiAgICAgICAgICAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsK
LSAgICAgICAgICAgIGQyZENvbnRleHQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIG1fZ3JhZGll
bnQpOworICAgICAgICAgICAgZDJkQ29udGV4dC0+RmlsbFJlY3RhbmdsZSgmZDJkUmVjdCwgbV9i
cnVzaC5nZXQoKSk7CiAgICAgICAgIH0sCiAgICAgICAgIFsmXSAoY29uc3QgUmFkaWFsRGF0YSYg
ZGF0YSkgewogICAgICAgICAgICAgYm9vbCBuZWVkU2NhbGluZyA9IGRhdGEuYXNwZWN0UmF0aW8g
IT0gMTsKQEAgLTE5OSwxNSArMTgyLDE2IEBAIHZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgICAgICAgICAg
ZDJkQ29udGV4dC0+U2V0VHJhbnNmb3JtKGN0bSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGlmICghbV9jYWNoZWRIYXNoIHx8ICFtX2dyYWRpZW50KQotICAgICAgICAgICAgICAgIGdl
bmVyYXRlR3JhZGllbnQoZDJkQ29udGV4dCk7CisgICAgICAgICAgICAvLyBGSVhNRTogSWYgd2Ug
aGF2ZSBhIGJydXNoLCB3aHkgY2FuIHdlIHJlLXVzZSBpdD8gV2hhdCBndWFyYW50ZWVzIGl0J3Mg
cmlnaHQgZm9yIHRoaXMgY29udGV4dD8KKyAgICAgICAgICAgIGlmICghbV9icnVzaCkKKyAgICAg
ICAgICAgICAgICBjcmVhdGVCcnVzaChkMmRDb250ZXh0KTsKIAogI2lmIEFTU0VSVF9FTkFCTEVE
CiAgICAgICAgICAgICBkMmRDb250ZXh0LT5TZXRUYWdzKEdSQURJRU5UX0RSQVdJTkcsIF9fTElO
RV9fKTsKICNlbmRpZgogCiAgICAgICAgICAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0g
cmVjdDsKLSAgICAgICAgICAgIGQyZENvbnRleHQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIG1f
Z3JhZGllbnQpOworICAgICAgICAgICAgZDJkQ29udGV4dC0+RmlsbFJlY3RhbmdsZSgmZDJkUmVj
dCwgbV9icnVzaC5nZXQoKSk7CiAKICAgICAgICAgICAgIGlmIChuZWVkU2NhbGluZykKICAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxE
aXJlY3QyRC5jcHAKaW5kZXggZGM5ZjVmZTZmZDc0NzQxYTBjNTYyY2Y5Y2M3YWVlMTE3MThmOTNj
ZC4uZDY0NDVkNzBjYjMwMzdlNzJhZTI5MDZkNjYzNmVmZmI0NDgxZDc1OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxE
aXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAKQEAgLTE1NSwxMSArMTU1LDExIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKIHsKLSAg
ICBDT01QdHI8SUQyRDFCcnVzaD4gcGxhdGZvcm1HcmFkaWVudCA9IGdyYWRpZW50LmNyZWF0ZVBs
YXRmb3JtR3JhZGllbnRJZk5lY2Vzc2FyeShtX3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQo
KSk7Ci0gICAgaWYgKCFwbGF0Zm9ybUdyYWRpZW50KQorICAgIGF1dG8gYnJ1c2ggPSBncmFkaWVu
dC5jcmVhdGVCcnVzaChtX3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7CisgICAgaWYg
KCFicnVzaCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0V2l0aEdy
YWRpZW50KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBwbGF0Zm9ybUdyYWRpZW50LmdldCgpKTsK
KyAgICBEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoR3JhZGllbnQobV9wbGF0Zm9ybUNvbnRleHQsIHJl
Y3QsIGJydXNoLmdldCgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6
OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21w
b3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQppbmRl
eCA1ZjY1MzAzY2VhN2IxMGE5MDMxM2U3Yzk5OTNjOTc5N2YwYjMzOWVkLi4wOWQ4MDU4YjViMjU2
YmM1YjRjOWJhOWQ0YWIzYTFlNTVjNzRmZDFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBF
TkFCTEUoU01PT1RIX1NDUk9MTElORykKIAotI2ltcG9ydCAiRmxvYXRQb2ludC5oIgorI2ltcG9y
dCAiR3JhZGllbnQuaCIKICNpbXBvcnQgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbXBvcnQgIkxvZ2dp
bmcuaCIKICNpbXBvcnQgIk5TU2Nyb2xsZXJJbXBEZXRhaWxzLmgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KaW5kZXggNDI1NzVmMGU0NWZlYzIyYzlhYmZmNjc1
MzE4YTkyMTdmNmRlZDJmNy4uZWUxODljZjk4NzNmMGMwYTAzNjNlMzZlMzc0NDEzMGQ4NGMyYTk3
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQpAQCAtOTAw
LDcgKzkwMCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UHJvZ3Jlc3NCYXIoY29uc3Qg
UmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUGFpbnRJCiAgICAgICAgIHJldHVybiB0cnVl
OwogCiAgICAgY29uc3QgaW50IHByb2dyZXNzQmFySGVpZ2h0ID0gOTsKLSAgICBjb25zdCBmbG9h
dCB2ZXJ0aWNhbE9mZnNldCA9IChyZWN0LmhlaWdodCgpIC0gcHJvZ3Jlc3NCYXJIZWlnaHQpIC8g
Mi4wOworICAgIGNvbnN0IGZsb2F0IHZlcnRpY2FsT2Zmc2V0ID0gKHJlY3QuaGVpZ2h0KCkgLSBw
cm9ncmVzc0JhckhlaWdodCkgLyAyLjBmOwogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzdGF0ZVNhdmVyKHBhaW50SW5mby5jb250ZXh0KCkpOwogICAgIGlmIChyZWN0LndpZHRoKCkg
PCAxMCB8fCByZWN0LmhlaWdodCgpIDwgOSkgewpAQCAtOTEyLDIxICs5MTIsMjEgQEAgYm9vbCBS
ZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRl
cmVyLCBjb25zdCBQYWludEkKICAgICAvLyAxKSBEcmF3IHRoZSBwcm9ncmVzcyBiYXIgdHJhY2su
CiAgICAgLy8gMS4xKSBEcmF3IHRoZSB3aGl0ZSBiYWNrZ3JvdW5kIHdpdGggZ3JleSBncmFkaWVu
dCBib3JkZXIuCiAgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRl
eHQoKTsKLSAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygwLjY4KTsKKyAgICBjb250ZXh0
LnNldFN0cm9rZVRoaWNrbmVzcygwLjY4Zik7CiAgICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShT
b2xpZFN0cm9rZSk7CiAKICAgICBjb25zdCBmbG9hdCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9u
ID0gcmVjdC55KCkgKyB2ZXJ0aWNhbE9mZnNldDsKICAgICBhdXRvIHN0cm9rZUdyYWRpZW50ID0g
R3JhZGllbnQ6OmNyZWF0ZShHcmFkaWVudDo6TGluZWFyRGF0YSB7IEZsb2F0UG9pbnQocmVjdC54
KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24pLCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0
aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgcHJvZ3Jlc3NCYXJIZWlnaHQgLSAxKSB9KTsKLSAgICBz
dHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgbWFrZVNpbXBsZUNvbG9yKDE0MSwgMTQx
LCAxNDEpKTsKLSAgICBzdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuNDUsIG1ha2VTaW1w
bGVDb2xvcigyMzgsIDIzOCwgMjM4KSk7Ci0gICAgc3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3Rv
cCgwLjU1LCBtYWtlU2ltcGxlQ29sb3IoMjM4LCAyMzgsIDIzOCkpOwotICAgIHN0cm9rZUdyYWRp
ZW50LT5hZGRDb2xvclN0b3AoMS4wLCBtYWtlU2ltcGxlQ29sb3IoMTQxLCAxNDEsIDE0MSkpOwor
ICAgIHN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoeyAwLjBmLCBtYWtlU2ltcGxlQ29sb3Io
MTQxLCAxNDEsIDE0MSkgfSk7CisgICAgc3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCh7IDAu
NDVmLCBtYWtlU2ltcGxlQ29sb3IoMjM4LCAyMzgsIDIzOCkgfSk7CisgICAgc3Ryb2tlR3JhZGll
bnQtPmFkZENvbG9yU3RvcCh7IDAuNTVmLCBtYWtlU2ltcGxlQ29sb3IoMjM4LCAyMzgsIDIzOCkg
fSk7CisgICAgc3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCh7IDEuMGYsIG1ha2VTaW1wbGVD
b2xvcigxNDEsIDE0MSwgMTQxKSB9KTsKICAgICBjb250ZXh0LnNldFN0cm9rZUdyYWRpZW50KFdU
Rk1vdmUoc3Ryb2tlR3JhZGllbnQpKTsKIAogICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9y
OjpibGFjayk7CiAKICAgICBQYXRoIHRyYWNrUGF0aDsKLSAgICBGbG9hdFJlY3QgdHJhY2tSZWN0
KHJlY3QueCgpICsgMC4yNSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIDAuMjUsIHJlY3Qu
d2lkdGgoKSAtIDAuNSwgcHJvZ3Jlc3NCYXJIZWlnaHQgLSAwLjUpOworICAgIEZsb2F0UmVjdCB0
cmFja1JlY3QocmVjdC54KCkgKyAwLjI1ZiwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIDAu
MjVmLCByZWN0LndpZHRoKCkgLSAwLjVmLCBwcm9ncmVzc0JhckhlaWdodCAtIDAuNWYpOwogICAg
IEZsb2F0U2l6ZSByb3VuZGVkQ29ybmVyUmFkaXVzKDUsIDQpOwogICAgIHRyYWNrUGF0aC5hZGRS
b3VuZGVkUmVjdCh0cmFja1JlY3QsIHJvdW5kZWRDb3JuZXJSYWRpdXMpOwogICAgIGNvbnRleHQu
ZHJhd1BhdGgodHJhY2tQYXRoKTsKQEAgLTkzNiw5ICs5MzYsOSBAQCBib29sIFJlbmRlclRoZW1l
SU9TOjpwYWludFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0
IFBhaW50SQogICAgIHBhaW50SW5mby5jb250ZXh0KCkuY2xpcFJvdW5kZWRSZWN0KEZsb2F0Um91
bmRlZFJlY3QoYm9yZGVyLCByb3VuZGVkQ29ybmVyUmFkaXVzLCByb3VuZGVkQ29ybmVyUmFkaXVz
LCByb3VuZGVkQ29ybmVyUmFkaXVzLCByb3VuZGVkQ29ybmVyUmFkaXVzKSk7CiAKICAgICBmbG9h
dCB1cHBlckdyYWRpZW50SGVpZ2h0ID0gcHJvZ3Jlc3NCYXJIZWlnaHQgLyAyLjsKLSAgICBhdXRv
IHVwcGVyR3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEdyYWRpZW50OjpMaW5lYXJEYXRhIHsg
RmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIDAuNSksIEZs
b2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyB1cHBlckdyYWRp
ZW50SGVpZ2h0IC0gMS41KSB9KTsKLSAgICB1cHBlckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4w
LCBtYWtlU2ltcGxlQ29sb3IoMTMzLCAxMzMsIDEzMywgMTg4KSk7Ci0gICAgdXBwZXJHcmFkaWVu
dC0+YWRkQ29sb3JTdG9wKDEuMCwgbWFrZVNpbXBsZUNvbG9yKDE4LCAxOCwgMTgsIDUxKSk7Cisg
ICAgYXV0byB1cHBlckdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShHcmFkaWVudDo6TGluZWFy
RGF0YSB7IEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyAw
LjVmKSwgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIHVw
cGVyR3JhZGllbnRIZWlnaHQgLSAxLjUpIH0pOworICAgIHVwcGVyR3JhZGllbnQtPmFkZENvbG9y
U3RvcCh7IDAuMGYsIG1ha2VTaW1wbGVDb2xvcigxMzMsIDEzMywgMTMzLCAxODgpIH0pOworICAg
IHVwcGVyR3JhZGllbnQtPmFkZENvbG9yU3RvcCh7IDEuMGYsIG1ha2VTaW1wbGVDb2xvcigxOCwg
MTgsIDE4LCA1MSkgfSk7CiAgICAgY29udGV4dC5zZXRGaWxsR3JhZGllbnQoV1RGTW92ZSh1cHBl
ckdyYWRpZW50KSk7CiAKICAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChyZWN0LngoKSwg
dmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiwgcmVjdC53aWR0aCgpLCB1cHBlckdyYWRpZW50SGVp
Z2h0KSk7CkBAIC05NDcsMjcgKzk0NywyNyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFBy
b2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFBhaW50SQogICAg
IGlmIChyZW5kZXJQcm9ncmVzcy5pc0RldGVybWluYXRlKCkpIHsKICAgICAgICAgLy8gMikgRHJh
dyB0aGUgcHJvZ3Jlc3MgYmFyLgogICAgICAgICBkb3VibGUgcG9zaXRpb24gPSBjbGFtcFRvKHJl
bmRlclByb2dyZXNzLnBvc2l0aW9uKCksIDAuMCwgMS4wKTsKLSAgICAgICAgZG91YmxlIGJhcldp
ZHRoID0gcG9zaXRpb24gKiByZWN0LndpZHRoKCk7Ci0gICAgICAgIGF1dG8gYmFyR3JhZGllbnQg
PSBHcmFkaWVudDo6Y3JlYXRlKEdyYWRpZW50OjpMaW5lYXJEYXRhIHsgRmxvYXRQb2ludChyZWN0
LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIDAuNSksIEZsb2F0UG9pbnQocmVjdC54
KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyBwcm9ncmVzc0JhckhlaWdodCAtIDEpIH0p
OwotICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgbWFrZVNpbXBsZUNvbG9y
KDE5NSwgMjE3LCAyNDcpKTsKLSAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjQ1
LCBtYWtlU2ltcGxlQ29sb3IoMTE4LCAxNjQsIDIyOCkpOwotICAgICAgICBiYXJHcmFkaWVudC0+
YWRkQ29sb3JTdG9wKDAuNDksIG1ha2VTaW1wbGVDb2xvcigxMTgsIDE2NCwgMjI4KSk7Ci0gICAg
ICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC41MSwgbWFrZVNpbXBsZUNvbG9yKDM2LCAx
MTQsIDIxMCkpOwotICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuNTUsIG1ha2VT
aW1wbGVDb2xvcigzNiwgMTE0LCAyMTApKTsKLSAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9y
U3RvcCgxLjAsIG1ha2VTaW1wbGVDb2xvcig1NywgMTQyLCAyNDQpKTsKKyAgICAgICAgZmxvYXQg
YmFyV2lkdGggPSBwb3NpdGlvbiAqIHJlY3Qud2lkdGgoKTsKKyAgICAgICAgYXV0byBiYXJHcmFk
aWVudCA9IEdyYWRpZW50OjpjcmVhdGUoR3JhZGllbnQ6OkxpbmVhckRhdGEgeyBGbG9hdFBvaW50
KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgMC41ZiksIEZsb2F0UG9pbnQo
cmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyBwcm9ncmVzc0JhckhlaWdodCAt
IDEpIH0pOworICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKHsgMC4wZiwgbWFrZVNp
bXBsZUNvbG9yKDE5NSwgMjE3LCAyNDcpIH0pOworICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29s
b3JTdG9wKHsgMC40NWYsIG1ha2VTaW1wbGVDb2xvcigxMTgsIDE2NCwgMjI4KSB9KTsKKyAgICAg
ICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCh7IDAuNDlmLCBtYWtlU2ltcGxlQ29sb3IoMTE4
LCAxNjQsIDIyOCkgfSk7CisgICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoeyAwLjUx
ZiwgbWFrZVNpbXBsZUNvbG9yKDM2LCAxMTQsIDIxMCkgfSk7CisgICAgICAgIGJhckdyYWRpZW50
LT5hZGRDb2xvclN0b3AoeyAwLjU1ZiwgbWFrZVNpbXBsZUNvbG9yKDM2LCAxMTQsIDIxMCkgfSk7
CisgICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoeyAxLjBmLCBtYWtlU2ltcGxlQ29s
b3IoNTcsIDE0MiwgMjQ0KSB9KTsKICAgICAgICAgY29udGV4dC5zZXRGaWxsR3JhZGllbnQoV1RG
TW92ZShiYXJHcmFkaWVudCkpOwogCiAgICAgICAgIGF1dG8gYmFyU3Ryb2tlR3JhZGllbnQgPSBH
cmFkaWVudDo6Y3JlYXRlKEdyYWRpZW50OjpMaW5lYXJEYXRhIHsgRmxvYXRQb2ludChyZWN0Lngo
KSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiksIEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRp
Y2FsUmVuZGVyaW5nUG9zaXRpb24gKyBwcm9ncmVzc0JhckhlaWdodCAtIDEpIH0pOwotICAgICAg
ICBiYXJTdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgbWFrZVNpbXBsZUNvbG9yKDk1
LCAxMDcsIDE4MykpOwotICAgICAgICBiYXJTdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAu
NSwgbWFrZVNpbXBsZUNvbG9yKDY2LCAxMDYsIDE3NCwgMjQwKSk7Ci0gICAgICAgIGJhclN0cm9r
ZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMS4wLCBtYWtlU2ltcGxlQ29sb3IoMzgsIDEwNCwgMTY2
KSk7CisgICAgICAgIGJhclN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoeyAwLjBmLCBtYWtl
U2ltcGxlQ29sb3IoOTUsIDEwNywgMTgzKSB9KTsKKyAgICAgICAgYmFyU3Ryb2tlR3JhZGllbnQt
PmFkZENvbG9yU3RvcCh7IDAuNWYsIG1ha2VTaW1wbGVDb2xvcig2NiwgMTA2LCAxNzQsIDI0MCkg
fSk7CisgICAgICAgIGJhclN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoeyAxLjBmLCBtYWtl
U2ltcGxlQ29sb3IoMzgsIDEwNCwgMTY2KSB9KTsKICAgICAgICAgY29udGV4dC5zZXRTdHJva2VH
cmFkaWVudChXVEZNb3ZlKGJhclN0cm9rZUdyYWRpZW50KSk7CiAKICAgICAgICAgUGF0aCBiYXJQ
YXRoOwogICAgICAgICBpbnQgbGVmdCA9IHJlY3QueCgpOwogICAgICAgICBpZiAoIXJlbmRlclBy
b2dyZXNzLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAgICAgICAgICAgbGVm
dCA9IHJlY3QubWF4WCgpIC0gYmFyV2lkdGg7Ci0gICAgICAgIEZsb2F0UmVjdCBiYXJSZWN0KGxl
ZnQgKyAwLjI1LCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgMC4yNSwgc3RkOjptYXgoYmFy
V2lkdGggLSAwLjUsIDAuMCksIHByb2dyZXNzQmFySGVpZ2h0IC0gMC41KTsKKyAgICAgICAgRmxv
YXRSZWN0IGJhclJlY3QobGVmdCArIDAuMjVmLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsg
MC4yNWYsIHN0ZDo6bWF4KGJhcldpZHRoIC0gMC41ZiwgMC4wZiksIHByb2dyZXNzQmFySGVpZ2h0
IC0gMC41Zik7CiAgICAgICAgIGJhclBhdGguYWRkUm91bmRlZFJlY3QoYmFyUmVjdCwgcm91bmRl
ZENvcm5lclJhZGl1cyk7CiAgICAgICAgIGNvbnRleHQuZHJhd1BhdGgoYmFyUGF0aCk7CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUdyYWRpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VHcmFkaWVudC5jcHAKaW5kZXggNTQ4MzU4M2FjNmFlMWE1MzZhYjg5MWI5M2FlZDVl
ZTVhNzdmMDk4Ny4uYTBmZDNjM2NiYTJiMDMwYzcxNDU0ODk4MTBiMTI0NzU2YzJhY2EwNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdy
YWRpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlR3JhZGllbnQuY3BwCkBAIC0yMzQsMTIgKzIzNCwxMCBAQCB2b2lkIFJlbmRlclNWR1Jl
c291cmNlR3JhZGllbnQ6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVy
LCBHcmFwaAogCiB2b2lkIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OmFkZFN0b3BzKEdyYWRp
ZW50RGF0YSogZ3JhZGllbnREYXRhLCBjb25zdCBWZWN0b3I8R3JhZGllbnQ6OkNvbG9yU3RvcD4m
IHN0b3BzLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CisgICAgQVNTRVJUKGdy
YWRpZW50RGF0YSk7CiAgICAgQVNTRVJUKGdyYWRpZW50RGF0YS0+Z3JhZGllbnQpOwotCi0gICAg
Zm9yIChHcmFkaWVudDo6Q29sb3JTdG9wIHN0b3AgOiBzdG9wcykgewotICAgICAgICBzdG9wLmNv
bG9yID0gc3R5bGUuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoc3RvcC5jb2xvcik7Ci0gICAg
ICAgIGdyYWRpZW50RGF0YS0+Z3JhZGllbnQtPmFkZENvbG9yU3RvcChzdG9wKTsKLSAgICB9Cisg
ICAgZm9yIChhdXRvJiBzdG9wIDogc3RvcHMpCisgICAgICAgIGdyYWRpZW50RGF0YS0+Z3JhZGll
bnQtPmFkZENvbG9yU3RvcCh7IHN0b3Aub2Zmc2V0LCBzdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xv
ckZpbHRlcihzdG9wLmNvbG9yKSB9KTsKIH0KIAogR3JhZGllbnRTcHJlYWRNZXRob2QgUmVuZGVy
U1ZHUmVzb3VyY2VHcmFkaWVudDo6cGxhdGZvcm1TcHJlYWRNZXRob2RGcm9tU1ZHVHlwZShTVkdT
cHJlYWRNZXRob2RUeXBlIG1ldGhvZCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgKaW5kZXggMTQwYzcw
ZWQ1MzVhMDczMGFmNDgwOGM1NzlhYWRlOWRiNDg5Njg0MS4uZmZiOTAwYmRmNGVkZWNhYjJlYjhh
YjBmYjVmMjUzNGFhNjg0YjZiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmgKQEAgLTIxLDcgKzIxLDYgQEAK
IAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkltYWdl
QnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIKICNpbmNs
dWRlICJTVkdHcmFkaWVudEVsZW1lbnQuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYWRpZW50
RWxlbWVudC5jcHAKaW5kZXggMGM2MDdkODM4YWE1OTg5YzUxZWU5YjQ5ZmNjMmUzNmQwOTQ0MWFh
Yi4uNTgzNzAxODA2ZjdhNWVjNmU5MzU0ZWQwMTRhYWU3NTk2OTNhMzZiZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5jcHAKQEAgLTEwMiwxOCArMTAyLDExIEBAIFZl
Y3RvcjxHcmFkaWVudDo6Q29sb3JTdG9wPiBTVkdHcmFkaWVudEVsZW1lbnQ6OmJ1aWxkU3RvcHMo
KQogewogICAgIFZlY3RvcjxHcmFkaWVudDo6Q29sb3JTdG9wPiBzdG9wczsKICAgICBmbG9hdCBw
cmV2aW91c09mZnNldCA9IDAuMGY7Ci0KICAgICBmb3IgKGF1dG8mIHN0b3AgOiBjaGlsZHJlbk9m
VHlwZTxTVkdTdG9wRWxlbWVudD4oKnRoaXMpKSB7Ci0gICAgICAgIGNvbnN0IENvbG9yJiBjb2xv
ciA9IHN0b3Auc3RvcENvbG9ySW5jbHVkaW5nT3BhY2l0eSgpOwotCi0gICAgICAgIC8vIEZpZ3Vy
ZSBvdXQgcmlnaHQgbW9ub3RvbmljIG9mZnNldC4KLSAgICAgICAgZmxvYXQgb2Zmc2V0ID0gc3Rv
cC5vZmZzZXQoKTsKLSAgICAgICAgb2Zmc2V0ID0gc3RkOjptaW4oc3RkOjptYXgocHJldmlvdXNP
ZmZzZXQsIG9mZnNldCksIDEuMGYpOwotICAgICAgICBwcmV2aW91c09mZnNldCA9IG9mZnNldDsK
LQotICAgICAgICBzdG9wcy5hcHBlbmQoR3JhZGllbnQ6OkNvbG9yU3RvcChvZmZzZXQsIGNvbG9y
KSk7CisgICAgICAgIGF1dG8gbW9ub3RvbmljYWxseUluY3JlYXNpbmdPZmZzZXQgPSBzdGQ6OmNs
YW1wKHN0b3Aub2Zmc2V0KCksIHByZXZpb3VzT2Zmc2V0LCAxLjBmKTsKKyAgICAgICAgcHJldmlv
dXNPZmZzZXQgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ09mZnNldDsKKyAgICAgICAgc3RvcHMu
YXBwZW5kKHsgbW9ub3RvbmljYWxseUluY3JlYXNpbmdPZmZzZXQsIHN0b3Auc3RvcENvbG9ySW5j
bHVkaW5nT3BhY2l0eSgpIH0pOwogICAgIH0KLQogICAgIHJldHVybiBzdG9wczsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404104</attachid>
            <date>2020-07-12 10:13:23 -0700</date>
            <delta_ts>2020-07-12 10:13:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214221-20200712101322.patch</filename>
            <type>text/plain</type>
            <size>80907</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0Mjc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWM5YTNjODU1NzFhYWZk
ZjViNGYwMzhjZGU1ZjA0MGZlNTk0ZGU0YS4uNTMxNDQ5NzM5ZWE2MWMyOTQ1ODIyODY5MzUxMGYy
YWQ4OTE0MDAyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MiBAQAorMjAyMC0wNy0xMiAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxpZnkgYW5kIGltcHJv
dmUgR3JhZGllbnQsIHNvbWUgb3RoZXIgc21hbGwgY29sb3ItcmVsYXRlZCByZW1vdmFscworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0MjIxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KKworICAgICAgICAqIGNzcy9DU1NHcmFkaWVu
dFZhbHVlLmNwcDogUmVtb3ZlZCBzb21lIHVubmVlZGVkIGluY2x1ZGVzLgorCisgICAgICAgICog
aHRtbC9Db2xvcklucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcklucHV0VHlw
ZTo6Y3VycmVudENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9ySW5wdXRU
eXBlOjpzaG91bGRTaG93U3VnZ2VzdGlvbnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGh0
bWwvQ29sb3JJbnB1dFR5cGUuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAgICAgICog
aHRtbC9IVE1MRG9jdW1lbnQuY3BwOiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGUgb2YgSGFzaFRv
b2xzLmguCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNHcmFkaWVudDo6Y3JlYXRlKTogTW92ZWQgdGhlc2UgZnVuY3Rp
b25zIG91dCBvZiB0aGUKKyAgICAgICAgaGVhZGVyIHNpbmNlIGlubGluaW5nIHNob3VsZCBiZSB0
aGUgc2FtZSBvciBiZXR0ZXIgd2l0aCB0aGVtIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNHcmFkaWVudDo6fkNhbnZhc0dyYWRpZW50KTogTW92ZWQgdGhpcyBvdXQgb2YgdGhlCisgICAg
ICAgIGhlYWRlciBzbyB3ZSBkb24ndCBuZWVkIHRvIGluY2x1ZGUgR3JhZGllbnQuaCBpbiB0aGUg
aGVhZGVyLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzR3JhZGllbnQ6OmFkZENvbG9yU3RvcCk6
IFVwZGF0ZWQgZm9yIGNoYW5nZSB0bworICAgICAgICBHcmFkaWVudDo6YWRkQ29sb3JTdG9wIGFu
ZCBtb3ZlIENvbG9yIHJhdGhlciB0aGFuIGNvcHlpbmcgaXQuCisKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9DYW52YXNHcmFkaWVudC5oOiBSZW1vdmVkIGluY2x1ZGUgb2YgR3JhZGllbnQuaC4KKyAg
ICAgICAgTW92ZWQgdGhpbmdzIG91dCBvZiB0aGUgaGVhZGVyIHRvIG1ha2UgdGhhdCB3b3JrLgor
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDYW52YXM6OmJ1aWxkQXJyYXlGb3JDYW52YXNHcmFkaWVudCk6IFJlbW92
ZWQKKyAgICAgICAgdXNlIG9mIEdyYWRpZW50Ojp0eXBlIGFuZCBpbnN0ZWFkIHVuaWZ5IHRoZSB0
eXBlIHN0cmluZyBjb2RlIHdpdGgKKyAgICAgICAgdGhlIGNvZGUgdGhhdCBpbnRlcnByZXRzIHRo
ZSBkYXRhIGZvciB0aGUgZGlmZmVyZW50IHR5cGVzLgorCisgICAgICAgICogcGFnZS9GcmFtZVZp
ZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpyZWNhbGN1bGF0ZVNjcm9sbGJh
ck92ZXJsYXlTdHlsZSk6IFJlZmFjdG9yZWQKKyAgICAgICAgdG8gZWxpbWluYXRlIHRoZSBtdWx0
aXBsZSByZWR1bmRhbnQgY29kZSBwYXRocywgb3RoZXJ3aXNpbmcgbGVhdmluZworICAgICAgICB0
aGUgbG9naWMgdW5jaGFuZ2VkLgorCisgICAgICAgICogcGxhdGZvcm0vQ29sb3JDaG9vc2VyQ2xp
ZW50Lmg6IFJlbW92ZSB1bm5lZWRlZCBpbmNsdWRlcyBhbmQgdW51c2VkCisgICAgICAgIGN1cnJl
bnRDb2xvciBhbmQgc2hvdWxkU2hvd1N1Z2dlc3Rpb25zIGZ1bmN0aW9ucy4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRp
ZW50OjpjcmVhdGUpOiBSZXBsYWNlZCBjcmVhdGUgZnVuY3Rpb25zIHRoYXQgdGFrZQorICAgICAg
ICB0eXBlLXNwZWNpZmljIGRhdGEgc3RydWN0dXJlIHdpdGggb25lIHRoYXQgdGFrZXMgdGhlIHZh
cmlhbnQgRGF0YS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpHcmFkaWVudCk6IERpdHRv
LiBBbHNvIHJlbW92ZWQgcGxhdGZvcm1Jbml0LgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6
On5HcmFkaWVudCk6IFJlbW92ZWQgcGxhdGZvcm1EZXN0cm95LgorICAgICAgICAoV2ViQ29yZTo6
R3JhZGllbnQ6OnR5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGll
bnQ6OmFkZENvbG9yU3RvcCk6IFRha2UgYW4gcnZhbHVlIHJlZmVyZW5jZSB0byBjdXQgZG93bgor
ICAgICAgICBhIGxpdHRsZSBiaXQgb24gcmVmZXJlbmNlIGNvdW50IGNodXJuLiBSZXBsYWNlZCB0
aGUgcGxhdGZvcm1EZXN0cm95CisgICAgICAgIGZ1bmN0aW9uIHdpdGggYSBuZXcgc3RvcHNDaGFu
Z2VkIGZ1bmN0aW9uLiBSZW1vdmVkIGFuIHVubmVlZGVkIG92ZXJsb2FkCisgICAgICAgIHRoYXQg
dGFrZXMgdGhlIHR3byBwYXJ0cyBvZiBhIENvbG9yU3RvcCBzZXBhcmF0ZWx5LgorICAgICAgICAo
V2ViQ29yZTo6R3JhZGllbnQ6OnNldFNvcnRlZENvbG9yU3RvcHMpOiBVc2Ugc3RvcHNDaGFuZ2Vk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnNvcnRTdG9wcyBjb25zdCk6IFNpbXBsaWZ5
IGEgYml0LCB1c2luZyBhIGxhbWJkYS4KKyAgICAgICAgQWxzbyBnYXZlIHRoaXMgYSBzaG9ydGVy
IG5hbWU7IGl0IHN0aWxsIG9wdGltaXplcyBieSBub3Qgc29ydGluZyBpZgorICAgICAgICB0aGUg
dmVjdG9yIGlzIGFscmVhZHkgc29ydGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6Omhh
c0FscGhhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzZXRT
cHJlYWRNZXRob2QpOiBSZW1vdmVkIHNvbWUgc2xpZ2h0bHkgb3ZlcnplYWxvdXMKKyAgICAgICAg
Y29kZSBjaGVja2luZyB0aGlzIGlzbid0IHVzZWQgYWZ0ZXIgY3JlYXRpbmcgdGhlIHBsYXRmb3Jt
LXNwZWNpZmljIGdyYWRpZW50LgorICAgICAgICBEZWNpZGVkIG5vdCB0byBib3RoZXIgd2l0aCB0
aGlzIGZvciBub3cuCisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c2V0R3JhZGllbnRTcGFj
ZVRyYW5zZm9ybSk6IFR3ZWFrZWQgZm9ybWF0dGluZy4KKyAgICAgICAgKFdlYkNvcmU6OmFkZCk6
IEFkZGVkIG92ZXJsb2FkcyB0byBhZGQoSGFzaGVyJikgc28gd2UgY2FuIHVzZSBjb21wdXRlSGFz
aC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpoYXNoIGNvbnN0KTogVXNlIGNvbXB1dGVI
YXNoIGluc3RlYWQgb2YgaGFzaE1lbW9yeS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYWRpZW50Lmg6IFVzZSBSZXRhaW5QdHIsIENPTVB0ciwgYW5kIFJlZlB0ciBpbnN0ZWFkCisg
ICAgICAgIG9mIG1hbnVhbGx5IG1hbmFnaW5nIHRoZSBsaWZldGltZXMgb2YgdGhlIHBsYXRmb3Jt
LXNwZWNpZmljIHVuZGVybHlpbmcKKyAgICAgICAgZ3JhZGllbnQgb2JqZWN0cy4gQWxzbyByZW1v
dmVkIHRoZSB1bmhlbHBmdWwgUGxhdGZvcm1HcmFkaWVudCB0eXBlLiBUaGlzCisgICAgICAgIHBh
dHRlcm4sIGFsbCB0b28gY29tbW9uIGluIG91ciBwbGF0Zm9ybSBsaWJyYXJ5LCBwcm92aWRlcyBu
byB1c2VmdWwKKyAgICAgICAgYWJzdHJhY3Rpb24gaGVyZS4gUmVtb3ZlZCB1bm5lZWRlZCBjb25z
dHJ1Y3RvcnMgZnJvbSBDb2xvclN0b3AuCisgICAgICAgIFVwZGF0ZWQgZm9yIGNoYW5nZXMgYWJv
dmUuIEFkZGVkIHBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9ucyBjcmVhdGVCcnVzaCwKKyAgICAg
ICAgY3JlYXRlUGF0dGVybiwgYW5kIGNyZWF0ZUNHR3JhZGllbnQuIFNpbXBsaWZ5IGVuY29kaW5n
IGFuZCBkZWNvZGluZyBieQorICAgICAgICB0YWtpbmcgYWR2YW50YWdlIG9mIHRoZSBzdXBwb3J0
IGZvciBlbmNvZGluZy9kZWNvZGluZyB2YXJpYW50cy4KKyAgICAgICAgUmVtb3ZlIHRoZSBlbnVt
IEdyYWRpZW50OjpUeXBlIGVudGlyZWx5LiBSZW1vdmVkIHRoZSBpbnZhbGlkYXRlSGFzaAorICAg
ICAgICBmdW5jdGlvbiBiZWNhdXNlIGl0J3Mgb25seSB1c2VkIGluIGEgZmV3IHNldHRlcnMgYW5k
IHNldHRpbmcgdGhlIGhhc2gKKyAgICAgICAgdG8gMCBpcyBhIGZpbmUgd2F5IHRvIHdyaXRlIGl0
IHRoZXJlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRl
eHRTdGF0ZSk6IE1vdmVkIGhlcmUgZnJvbQorICAgICAgICB0aGUgaGVhZGVyIHNvIHdlIGRvbid0
IG5lZWQgdG8gaW5jbHVkZSBHcmFkaWVudC5oIGluIHRoZSBoZWFkZXIuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6fkdyYXBoaWNzQ29udGV4dFN0YXRlKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6b3BlcmF0b3I9KTogRGl0
dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDogUmVt
b3ZlZCBpbmNsdWRlIG9mIEdyYWRpZW50LmguCisgICAgICAgIE1vdmVkIHRoaW5ncyBvdXQgb2Yg
dGhlIGhlYWRlciB0byBtYWtlIHRoYXQgd29yay4KKworCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJv
OjpGaWxsU291cmNlOjpGaWxsU291cmNlKTogVXNlIGNyZWF0ZVBhdHRlcm4gaW5zdGVhZCBvZgor
ICAgICAgICBjcmVhdGVQbGF0Zm9ybUdyYWRpZW50LgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86
OlN0cm9rZVNvdXJjZTo6U3Ryb2tlU291cmNlKTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YWRpZW50OjpjcmVhdGVQYXR0ZXJuKToKKworCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFkaWVudENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50Ojpz
dG9wc0NoYW5nZWQpOiBSZW5hbWVkIGZyb20gcGxhdGZvcm1EZXN0cm95LgorICAgICAgICAoV2Vi
Q29yZTo6aW50ZXJwb2xhdGVDb2xvclN0b3ApOiBSZXdyb3RlIHRvIHVzZSBleGlzdGluZyBibGVu
ZCBmdW5jdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDb25pYyk6IENoYW5nZWQgcmV0
dXJuIHR5cGUgdG8gUmVmUHRyLiBUd2Vha2VkIHRvIG1hdGNoCisgICAgICAgIFdlYktpdCBjb2Rp
bmcgc3R5bGUgYSBiaXQgYmV0dGVyLCB1c2UgYXV0bywgdXNlIFZlY3Rvcjo6Zmlyc3QvbGFzdCwg
YW5kCisgICAgICAgIHVwZGF0ZWQgZm9yIHJlbW92YWwgb2YgdGhlIEdyYWRpZW50OjpDb2xvclN0
b3AgY29uc3RydWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6Y3JlYXRlUGF0dGVy
bik6IFJlbmFtZWQgZnJvbSBjcmVhdGVQbGF0Zm9ybUdyYWRpZW50LgorICAgICAgICBDaGFuZ2Vk
IHRvIHJldHVybiBhIFJlZlB0ciBpbnN0ZWFkIG9mIGEgcmF3IHBvaW50ZXIgdGhlIGNhbGxlciBu
ZWVkcyB0bworICAgICAgICBhZG9wdCBhdCBlYWNoIGNhbGwgc2l0ZS4gUmVmYWN0b3JlZCBzbyBp
dCBubyBsb25nZXIgdXNlcyBHcmFkaWVudDo6dHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRp
ZW50OjpmaWxsKTogVXNlIGNyZWF0ZVBhdHRlcm4uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJlY3QpOiBEaXR0by4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhZGllbnQ6OnN0b3BzQ2hhbmdlZCk6IFJlbmFtZWQgZnJvbSBwbGF0Zm9ybURlc3Ryb3ksIGFu
ZAorICAgICAgICBzaW1wbGlmaWVkIGltcGxlbWVudGF0aW9uIG5vdyB0aGF0IHdlIHVzZSBSZXRh
aW5QdHIuCisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6Y3JlYXRlQ0dHcmFkaWVudCk6IFJl
bmFtZWQgZnJvbSBwbGF0Zm9ybUdyYWRpZW50LAorICAgICAgICBnb3QgcmlkIG9mIHRoZSByZXR1
cm4gdmFsdWUsIGFuZCBtYWRlIGl0IGNhbGxlciByZXNwb25zaWJpbGl0eSB0byBvbmx5CisgICAg
ICAgIGNhbGwgdGhpcyB3aGVuIGEgZ3JhZGVpdG4gbmVlZHMgdG8gYmUgYWxsb2NhdGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnBhaW50KTogVXBkYXRlZCB0byB1c2UgdGhlIGFib3Zl
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3Bw
OiBBZGQgaW5jbHVkZSBvZiBHcmFkaWVudC5oLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDoKKyAgICAgICAgQWRkZWQgaW5jbHVk
ZSBvZiBHcmFkaWVudC5oIHNpbmNlIHRoZSBmdW5jdGlvbiB0ZW1wbGF0ZXMgaW4gdGhpcyBmaWxl
CisgICAgICAgIGVuY29kZSBhbmQgZGVjb2RlIGdyYWRpZW50cy4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIu
Y3BwOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3Qp
OiBVc2UgY3JlYXRlUGF0dGVybi4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9E
aXJlY3QyRE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OkZpbGxT
b3VyY2U6OkZpbGxTb3VyY2UpOiBVc2UgY3JlYXRlQnJ1c2gKKyAgICAgICAgKFdlYkNvcmU6OkRp
cmVjdDJEOjpTdHJva2VTb3VyY2U6OlN0cm9rZVNvdXJjZSk6IERpdHRvLgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhZGllbnQ6OnN0b3BzQ2hhbmdlZCk6IFJlbmFtZWQgZnJvbSBwbGF0Zm9ybURlc3Ry
b3kgYW5kCisgICAgICAgIHNpbXBsaWZpZWQgaW1wbGVtZW50YXRpb24gbm93IHRoYXQgd2UgdXNl
IENPTVB0ci4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpjcmVhdGVQbGF0Zm9ybUdyYWRp
ZW50SWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmNy
ZWF0ZUJydXNoKTogUmVuYW1lZCBmcm9tIGdlbmVyYXRlR3JhZGllbnQgYW5kCisgICAgICAgIGFk
ZGVkIGEgcmV0dXJuIHZhbHVlLiBTaW1wbGlmaWVkIG5vdyB0aGF0IHdlIHVzZSBDT01QdHIsIG9w
dGltaXplZAorICAgICAgICB0aGUgY29kZSBhIGJpdCwgYW5kIGFkZGVkIHNvbWUgRklYTUUgYWJv
dXQgbWlzdGFrZXMgSSBub3RpY2VkLgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmZpbGwp
OiBVc2UgY3JlYXRlQnJ1c2ggYW5kIG1fYnJ1c2guCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxSZWN0KTogVXNlIGNyZWF0ZUJydXNo
LgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tOiBBZGRlZCBp
bmNsdWRlIG9mIEdyYWRpZW50LmguCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJ
T1MubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0Jh
cik6IFVwZGF0ZWQgZm9yIGNoYW5nZXMgdG8KKyAgICAgICAgYWRkQ29sb3JTdG9wLiBBbHNvIHJl
bW92ZSBhIGxvdCBvZiB1bm5lY2Vzc2FyeSBjb252ZXJzaW9uIGZyb20gZmxvYXQKKyAgICAgICAg
dG8gZG91YmxlIGFuZCBiYWNrIHRvIGZsb2F0LgorCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1Jlc291cmNlR3JhZGllbnQ6OmFkZFN0b3BzKTogVXBkYXRlIHRvIG1ha2UKKyAgICAgICAgYW5k
IG1vdmUgYSBuZXcgY29sb3Igc3RvcCBpbnN0ZWFkIG9mIGNvcHlpbmcgaXQsIG1vZGlmeWluZyBp
dCBpbgorICAgICAgICBwbGFjZSwgYW5kIHRoZW4gY29weWluZyBpdCBhZ2Fpbi4KKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwOiBSZW1vdmVkIGlu
Y2x1ZGUgb2YKKyAgICAgICAgR3JhZGllbnQuaC4KKworICAgICAgICAqIHN2Zy9TVkdHcmFkaWVu
dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHR3JhZGllbnRFbGVtZW50OjpidWls
ZFN0b3BzKTogVXNlIHN0ZDo6Y2xhbXAgdG8gY29udmVydAorICAgICAgICB0aGUgb2Zmc2V0cyBp
bnRvIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBvbmVzIGluIGEgbW9yZSBkaXJlY3Qgd2F5LAor
ICAgICAgICB1c2luZyB2YXJpYWJsZSBuYW1lcyBpbnN0ZWFkIG9mIGNvbW1lbnRzIHRvIGNsYXJp
Znkgd2hhdCB3ZSBhcmUgZG9pbmcuCisKIDIwMjAtMDctMTIgIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggR1RLIGRlYmlhbiBidWls
ZHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAppbmRleCAxMDQyZmEzYjMx
OWM1OThkMmI4YjgwODI1MGQxNDUzMTllNDU3ZDI3Li44YmE5OWJkMGUxNThiNDQzOWIyZDE2YTk2
MWZlY2RjMTgzZDA0M2E2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGll
bnRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3Bw
CkBAIC0zMCw4ICszMCw2IEBACiAjaW5jbHVkZSAiQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5o
IgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJDb2xvckJsZW5kaW5n
LmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0jaW5jbHVkZSAiR3JhZGllbnQuaCIKICNpbmNs
dWRlICJHcmFkaWVudEltYWdlLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5j
bHVkZSAiUGFpci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9Db2xvcklucHV0
VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmNwcAppbmRleCA5
OTI2MzQ0YTA5ZDZkOGEyMDUyOTgxMDM1ODA0YzYxNTBiNWM4ZDZiLi45YWIyZmVlZDk2MzY3Mjcy
YWQ5YTA3MThmMGNjZDk1ZDg1YzlhMTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0NvbG9ySW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRU
eXBlLmNwcApAQCAtMjcwLDIxICsyNzAsNiBAQCBJbnRSZWN0IENvbG9ySW5wdXRUeXBlOjplbGVt
ZW50UmVjdFJlbGF0aXZlVG9Sb290VmlldygpIGNvbnN0CiAgICAgcmV0dXJuIGVsZW1lbnQoKS0+
ZG9jdW1lbnQoKS52aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhlbGVtZW50KCktPnJlbmRlcmVy
KCktPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpOwogfQogCi1Db2xvciBDb2xvcklucHV0VHlw
ZTo6Y3VycmVudENvbG9yKCkKLXsKLSAgICByZXR1cm4gdmFsdWVBc0NvbG9yKCk7Ci19Ci0KLWJv
b2wgQ29sb3JJbnB1dFR5cGU6OnNob3VsZFNob3dTdWdnZXN0aW9ucygpIGNvbnN0Ci17Ci0jaWYg
RU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCi0gICAgQVNTRVJUKGVsZW1lbnQoKSk7Ci0gICAgcmV0
dXJuIGVsZW1lbnQoKS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihsaXN0QXR0
cik7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCiBWZWN0b3I8Q29sb3I+
IENvbG9ySW5wdXRUeXBlOjpzdWdnZXN0ZWRDb2xvcnMoKSBjb25zdAogewogICAgIFZlY3RvcjxD
b2xvcj4gc3VnZ2VzdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9y
SW5wdXRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0NvbG9ySW5wdXRUeXBlLmgKaW5kZXgg
OWEzYzdiNzE3MzUxMDU5ZTY0ZmU0MTVlOTE4MGM0NTJlM2E5YjNjNC4uZjc0ZDc2ZjFiOWZmNTA4
NDI2YjIxNDRhMWZhNWE4YmEyNDBjZTcwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9Db2xvcklucHV0VHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ29sb3JJbnB1dFR5
cGUuaApAQCAtNDgsOCArNDgsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkQ2hvb3NlQ29sb3Io
Y29uc3QgQ29sb3ImKSBmaW5hbDsKICAgICB2b2lkIGRpZEVuZENob29zZXIoKSBmaW5hbDsKICAg
ICBJbnRSZWN0IGVsZW1lbnRSZWN0UmVsYXRpdmVUb1Jvb3RWaWV3KCkgY29uc3QgZmluYWw7Ci0g
ICAgQ29sb3IgY3VycmVudENvbG9yKCkgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRTaG93U3VnZ2Vz
dGlvbnMoKSBjb25zdCBmaW5hbDsKICAgICBWZWN0b3I8Q29sb3I+IHN1Z2dlc3RlZENvbG9ycygp
IGNvbnN0IGZpbmFsOwogICAgIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0IGZpbmFsOwog
ICAgIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3QgZmluYWw7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKaW5kZXggN2YyNWMzNjgyYTM2MWU0N2U1
ZjkwZTQ4YjQyZWQyYjI4OTJjNzlmYy4uZWRhY2YyNGQ0YTJhNGNjZDU2ZTQyNDBlMDU4MTA0OWY4
MmYzOTY0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcApAQCAtNzQsNyArNzQs
NiBAQAogI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJRnJhbWVF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSGFzaFRvb2xzLmgi
CiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIu
aCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwCmluZGV4IGNhNzg3YzM2Yzg1MWQ4ZjBlZmNk
YTI3YzRmNjVhNDY2YWQ5MTU4MzIuLjc1ZTRhZTEyOWY3MmNjYTZmNGQ1YmY2NjdjNTI0NzliNzI3
MGI4OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRp
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5j
cHAKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkNhbnZhc0Jhc2UuaCIKICNpbmNsdWRl
ICJDYW52YXNTdHlsZS5oIgorI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNDQsNiArNDUsMTggQEAgQ2FudmFzR3JhZGllbnQ6OkNhbnZhc0dyYWRpZW50
KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2ludCYKIHsKIH0K
IAorUmVmPENhbnZhc0dyYWRpZW50PiBDYW52YXNHcmFkaWVudDo6Y3JlYXRlKGNvbnN0IEZsb2F0
UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgQ2FudmFzQmFzZSYgY2FudmFzQmFzZSkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDYW52YXNHcmFkaWVudChwMCwgcDEsIGNhbnZh
c0Jhc2UpKTsKK30KKworUmVmPENhbnZhc0dyYWRpZW50PiBDYW52YXNHcmFkaWVudDo6Y3JlYXRl
KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGZs
b2F0IHIxLCBDYW52YXNCYXNlJiBjYW52YXNCYXNlKQoreworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IENhbnZhc0dyYWRpZW50KHAwLCByMCwgcDEsIHIxLCBjYW52YXNCYXNlKSk7Cit9CisKK0Nh
bnZhc0dyYWRpZW50Ojp+Q2FudmFzR3JhZGllbnQoKSA9IGRlZmF1bHQ7CisKIEV4Y2VwdGlvbk9y
PHZvaWQ+IENhbnZhc0dyYWRpZW50OjphZGRDb2xvclN0b3AoZmxvYXQgdmFsdWUsIGNvbnN0IFN0
cmluZyYgY29sb3JTdHJpbmcpCiB7CiAgICAgaWYgKCEodmFsdWUgPj0gMCAmJiB2YWx1ZSA8PSAx
KSkKQEAgLTU0LDcgKzY3LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQ2FudmFzR3JhZGllbnQ6OmFk
ZENvbG9yU3RvcChmbG9hdCB2YWx1ZSwgY29uc3QgU3RyaW5nJiBjb2xvclMKICAgICBpZiAoIWNv
bG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yIH07
CiAKLSAgICBtX2dyYWRpZW50LT5hZGRDb2xvclN0b3AodmFsdWUsIGNvbG9yKTsKKyAgICBtX2dy
YWRpZW50LT5hZGRDb2xvclN0b3AoeyB2YWx1ZSwgV1RGTW92ZShjb2xvcikgfSk7CiAgICAgcmV0
dXJuIHsgfTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzR3JhZGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50
LmgKaW5kZXggYzM1ZmJjZTE5NDVhMWU2MTYxYTVmMTZkNjEzY2M1ZTUzYjhmN2ZhMi4uYTIxNWYx
NDFlY2JlZWUzMTc4OTdmZWM0ZDRkNjJhYjFkZjM0NTk1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5oCkBAIC0yNywyMiArMjcsMTggQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiRXhjZXB0aW9uT3IuaCIKLSNpbmNsdWRlICJHcmFkaWVudC5oIgor
I2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBD
YW52YXNCYXNlOworY2xhc3MgR3JhZGllbnQ7CiAKIGNsYXNzIENhbnZhc0dyYWRpZW50IDogcHVi
bGljIFJlZkNvdW50ZWQ8Q2FudmFzR3JhZGllbnQ+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PENhbnZhc0dyYWRpZW50PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0
UG9pbnQmIHAxLCBDYW52YXNCYXNlJiBjYW52YXNCYXNlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgQ2FudmFzR3JhZGllbnQocDAsIHAxLCBjYW52YXNCYXNlKSk7Ci0gICAg
fQotICAgIHN0YXRpYyBSZWY8Q2FudmFzR3JhZGllbnQ+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50
JiBwMCwgZmxvYXQgcjAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBmbG9hdCByMSwgQ2FudmFzQmFz
ZSYgY2FudmFzQmFzZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENhbnZh
c0dyYWRpZW50KHAwLCByMCwgcDEsIHIxLCBjYW52YXNCYXNlKSk7Ci0gICAgfQorICAgIHN0YXRp
YyBSZWY8Q2FudmFzR3JhZGllbnQ+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3Qg
RmxvYXRQb2ludCYgcDEsIENhbnZhc0Jhc2UmKTsKKyAgICBzdGF0aWMgUmVmPENhbnZhc0dyYWRp
ZW50PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9hdFBv
aW50JiBwMSwgZmxvYXQgcjEsIENhbnZhc0Jhc2UmKTsKKyAgICB+Q2FudmFzR3JhZGllbnQoKTsK
IAogICAgIEdyYWRpZW50JiBncmFkaWVudCgpIHsgcmV0dXJuIG1fZ3JhZGllbnQ7IH0KICAgICBj
b25zdCBHcmFkaWVudCYgZ3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX2dyYWRpZW50OyB9CkBA
IC01NSw3ICs1MSw2IEBAIHByaXZhdGU6CiAKICAgICBSZWY8R3JhZGllbnQ+IG1fZ3JhZGllbnQ7
CiAgICAgQ2FudmFzQmFzZSYgbV9jYW52YXM7Ci0KIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4
IDdkOTI1NTI1Zjg1OThkOGMyZDhjZTVhNjFiMGY3ZDhiNmFiY2Q1ODQuLjg3ZGVlZjQ5OTIxYzVi
NWZhMWVlYmYyYWY2NTg1N2NlMTRmMmY2OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAtMzYsNiArMzYs
NyBAQAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1BhcnNlci5o
IgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJHcmFkaWVudC5oIgog
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDYW52YXMuY3BwCmluZGV4IGMxMDNkZWEwODNkMDY5YTQzM2Q2YWMzZTc4YWM4
MjdiMGJhMTQwYjAuLjVjNTdiNjA1NzRlY2E1NzIyZDE1NDk5MmFmZGJkYzc1NWU2MzE5OWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCkBAIC0xMTU4
LDE5ICsxMTU4LDE3IEBAIFJlZjxKU09OOjpBcnJheU9mPEpTT046OlZhbHVlPj4gSW5zcGVjdG9y
Q2FudmFzOjpidWlsZEFjdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsCiAKIFJlZjxKU09OOjpBcnJh
eU9mPEpTT046OlZhbHVlPj4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEFycmF5Rm9yQ2FudmFzR3Jh
ZGllbnQoY29uc3QgQ2FudmFzR3JhZGllbnQmIGNhbnZhc0dyYWRpZW50KQogewotICAgIGNvbnN0
IGF1dG8mIGdyYWRpZW50ID0gY2FudmFzR3JhZGllbnQuZ3JhZGllbnQoKTsKLSAgICAKLSAgICBT
dHJpbmcgdHlwZSA9IGdyYWRpZW50LnR5cGUoKSA9PSBHcmFkaWVudDo6VHlwZTo6UmFkaWFsID8g
InJhZGlhbC1ncmFkaWVudCJfcyA6IGdyYWRpZW50LnR5cGUoKSA9PSBHcmFkaWVudDo6VHlwZTo6
TGluZWFyID8gImxpbmVhci1ncmFkaWVudCJfcyA6ICJjb25pYy1ncmFkaWVudCJfczsKLQorICAg
IEFTQ0lJTGl0ZXJhbCB0eXBlID0gImxpbmVhci1ncmFkaWVudCJfczsKICAgICBhdXRvIHBhcmFt
ZXRlcnMgPSBKU09OOjpBcnJheU9mPGZsb2F0Pjo6Y3JlYXRlKCk7Ci0gICAgV1RGOjpzd2l0Y2hP
bihncmFkaWVudC5kYXRhKCksCi0gICAgICAgIFsmcGFyYW1ldGVyc10gKGNvbnN0IEdyYWRpZW50
OjpMaW5lYXJEYXRhJiBkYXRhKSB7CisgICAgV1RGOjpzd2l0Y2hPbihjYW52YXNHcmFkaWVudC5n
cmFkaWVudCgpLmRhdGEoKSwKKyAgICAgICAgWyZdIChjb25zdCBHcmFkaWVudDo6TGluZWFyRGF0
YSYgZGF0YSkgewogICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50MC54
KCkpOwogICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50MC55KCkpOwog
ICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50MS54KCkpOwogICAgICAg
ICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50MS55KCkpOwogICAgICAgICB9LAot
ICAgICAgICBbJnBhcmFtZXRlcnNdIChjb25zdCBHcmFkaWVudDo6UmFkaWFsRGF0YSYgZGF0YSkg
eworICAgICAgICBbJl0gKGNvbnN0IEdyYWRpZW50OjpSYWRpYWxEYXRhJiBkYXRhKSB7CisgICAg
ICAgICAgICB0eXBlID0gInJhZGlhbC1ncmFkaWVudCJfczsKICAgICAgICAgICAgIHBhcmFtZXRl
cnMtPmFkZEl0ZW0oZGF0YS5wb2ludDAueCgpKTsKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPmFk
ZEl0ZW0oZGF0YS5wb2ludDAueSgpKTsKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0o
ZGF0YS5zdGFydFJhZGl1cyk7CkBAIC0xMTc4LDcgKzExNzYsOCBAQCBSZWY8SlNPTjo6QXJyYXlP
ZjxKU09OOjpWYWx1ZT4+IEluc3BlY3RvckNhbnZhczo6YnVpbGRBcnJheUZvckNhbnZhc0dyYWRp
ZW50KGNvbgogICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50MS55KCkp
OwogICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRkSXRlbShkYXRhLmVuZFJhZGl1cyk7CiAgICAg
ICAgIH0sCi0gICAgICAgIFsmcGFyYW1ldGVyc10gKGNvbnN0IEdyYWRpZW50OjpDb25pY0RhdGEm
IGRhdGEpIHsKKyAgICAgICAgWyZdIChjb25zdCBHcmFkaWVudDo6Q29uaWNEYXRhJiBkYXRhKSB7
CisgICAgICAgICAgICB0eXBlID0gImNvbmljLWdyYWRpZW50Il9zOwogICAgICAgICAgICAgcGFy
YW1ldGVycy0+YWRkSXRlbShkYXRhLnBvaW50MC54KCkpOwogICAgICAgICAgICAgcGFyYW1ldGVy
cy0+YWRkSXRlbShkYXRhLnBvaW50MC55KCkpOwogICAgICAgICAgICAgcGFyYW1ldGVycy0+YWRk
SXRlbShkYXRhLmFuZ2xlUmFkaWFucyk7CkBAIC0xMTg2LDcgKzExODUsNyBAQCBSZWY8SlNPTjo6
QXJyYXlPZjxKU09OOjpWYWx1ZT4+IEluc3BlY3RvckNhbnZhczo6YnVpbGRBcnJheUZvckNhbnZh
c0dyYWRpZW50KGNvbgogICAgICk7CiAKICAgICBhdXRvIHN0b3BzID0gSlNPTjo6QXJyYXlPZjxK
U09OOjpWYWx1ZT46OmNyZWF0ZSgpOwotICAgIGZvciAoYXV0byYgY29sb3JTdG9wIDogZ3JhZGll
bnQuc3RvcHMoKSkgeworICAgIGZvciAoYXV0byYgY29sb3JTdG9wIDogY2FudmFzR3JhZGllbnQu
Z3JhZGllbnQoKS5zdG9wcygpKSB7CiAgICAgICAgIGF1dG8gc3RvcCA9IEpTT046OkFycmF5T2Y8
SlNPTjo6VmFsdWU+OjpjcmVhdGUoKTsKICAgICAgICAgc3RvcC0+YWRkSXRlbShjb2xvclN0b3Au
b2Zmc2V0KTsKICAgICAgICAgc3RvcC0+YWRkSXRlbShpbmRleEZvckRhdGEoc2VyaWFsaXphdGlv
bkZvckNTUyhjb2xvclN0b3AuY29sb3IpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5k
ZXggNTEyN2I0OTBmNGM0NjkxMjk4OGZlYWY5MzY1NTQ0ZTZlYmQ2YmY2YS4uOTJhODA4OWY0ODZi
OTBhYTY4OGFlZTNmYmEyOWNjYjQ0ODEwYmI0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cApAQCAtMzUwLDMyICszNTAsMjcgQEAgdm9pZCBGcmFtZVZpZXc6OmRldGFjaEN1c3RvbVNjcm9s
bGJhcnMoKQogCiB2b2lkIEZyYW1lVmlldzo6cmVjYWxjdWxhdGVTY3JvbGxiYXJPdmVybGF5U3R5
bGUoKQogewotICAgIFNjcm9sbGJhck92ZXJsYXlTdHlsZSBvbGRPdmVybGF5U3R5bGUgPSBzY3Jv
bGxiYXJPdmVybGF5U3R5bGUoKTsKLSAgICBPcHRpb25hbDxTY3JvbGxiYXJPdmVybGF5U3R5bGU+
IGNsaWVudE92ZXJsYXlTdHlsZSA9IGZyYW1lKCkucGFnZSgpID8gZnJhbWUoKS5wYWdlKCktPmNo
cm9tZSgpLmNsaWVudCgpLnByZWZlcnJlZFNjcm9sbGJhck92ZXJsYXlTdHlsZSgpIDogV1RGOjpu
dWxsb3B0OwotICAgIGlmIChjbGllbnRPdmVybGF5U3R5bGUpIHsKLSAgICAgICAgaWYgKGNsaWVu
dE92ZXJsYXlTdHlsZS52YWx1ZSgpICE9IG9sZE92ZXJsYXlTdHlsZSkKLSAgICAgICAgICAgIHNl
dFNjcm9sbGJhck92ZXJsYXlTdHlsZShjbGllbnRPdmVybGF5U3R5bGUudmFsdWUoKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTY3JvbGxiYXJPdmVybGF5U3R5bGUgY29tcHV0ZWRP
dmVybGF5U3R5bGUgPSBTY3JvbGxiYXJPdmVybGF5U3R5bGVEZWZhdWx0OwotCi0gICAgQ29sb3Ig
YmFja2dyb3VuZENvbG9yID0gZG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IoKTsKLSAgICBpZiAoYmFj
a2dyb3VuZENvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICAvLyBSZWR1Y2UgdGhlIGJhY2tncm91
bmQgY29sb3IgZnJvbSBSR0IgdG8gYSBsaWdodG5lc3MgdmFsdWUKLSAgICAgICAgLy8gYW5kIGRl
dGVybWluZSB3aGljaCBzY3JvbGxiYXIgc3R5bGUgdG8gdXNlIGJhc2VkIG9uIGEgbGlnaHRuZXNz
Ci0gICAgICAgIC8vIGhldXJpc3RpYy4KLSAgICAgICAgaWYgKGJhY2tncm91bmRDb2xvci5saWdo
dG5lc3MoKSA8PSAuNWYgJiYgYmFja2dyb3VuZENvbG9yLmlzVmlzaWJsZSgpKQotICAgICAgICAg
ICAgY29tcHV0ZWRPdmVybGF5U3R5bGUgPSBTY3JvbGxiYXJPdmVybGF5U3R5bGVMaWdodDsKLSAg
ICAgICAgZWxzZSBpZiAoIWJhY2tncm91bmRDb2xvci5pc1Zpc2libGUoKSAmJiB1c2VEYXJrQXBw
ZWFyYW5jZSgpKQotICAgICAgICAgICAgY29tcHV0ZWRPdmVybGF5U3R5bGUgPSBTY3JvbGxiYXJP
dmVybGF5U3R5bGVMaWdodDsKLSAgICB9Ci0KLSAgICBpZiAob2xkT3ZlcmxheVN0eWxlICE9IGNv
bXB1dGVkT3ZlcmxheVN0eWxlKQotICAgICAgICBzZXRTY3JvbGxiYXJPdmVybGF5U3R5bGUoY29t
cHV0ZWRPdmVybGF5U3R5bGUpOworICAgIGF1dG8gc3R5bGUgPSBbJl0geworICAgICAgICBpZiAo
YXV0byBwYWdlID0gZnJhbWUoKS5wYWdlKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGNsaWVu
dE92ZXJsYXlTdHlsZSA9IHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLnByZWZlcnJlZFNjcm9sbGJh
ck92ZXJsYXlTdHlsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiAqY2xpZW50T3ZlcmxheVN0
eWxlOworICAgICAgICB9CisgICAgICAgIGF1dG8gYmFja2dyb3VuZCA9IGRvY3VtZW50QmFja2dy
b3VuZENvbG9yKCk7CisgICAgICAgIGlmIChiYWNrZ3JvdW5kLmlzVmlzaWJsZSgpKSB7CisgICAg
ICAgICAgICBpZiAoYmFja2dyb3VuZC5saWdodG5lc3MoKSA8PSAuNWYpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIFNjcm9sbGJhck92ZXJsYXlTdHlsZUxpZ2h0OworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaWYgKHVzZURhcmtBcHBlYXJhbmNlKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIFNjcm9sbGJhck92ZXJsYXlTdHlsZUxpZ2h0OworICAgICAgICB9CisgICAgICAgIHJldHVy
biBTY3JvbGxiYXJPdmVybGF5U3R5bGVEZWZhdWx0OworICAgIH0oKTsKKyAgICBpZiAoc2Nyb2xs
YmFyT3ZlcmxheVN0eWxlKCkgIT0gc3R5bGUpCisgICAgICAgIHNldFNjcm9sbGJhck92ZXJsYXlT
dHlsZShzdHlsZSk7CiB9CiAKICNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykKKwogdm9pZCBGcmFt
ZVZpZXc6OnJlY2FsY3VsYXRlQmFzZUJhY2tncm91bmRDb2xvcigpCiB7CiAgICAgYm9vbCB1c2lu
Z0RhcmtBcHBlYXJhbmNlID0gdXNlRGFya0FwcGVhcmFuY2UoKTsKQEAgLTM4OCw2ICszODMsNyBA
QCB2b2lkIEZyYW1lVmlldzo6cmVjYWxjdWxhdGVCYXNlQmFja2dyb3VuZENvbG9yKCkKICAgICAg
ICAgYmFja2dyb3VuZENvbG9yID0gQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKICAgICB1cGRh
dGVCYWNrZ3JvdW5kUmVjdXJzaXZlbHkoYmFja2dyb3VuZENvbG9yKTsKIH0KKwogI2VuZGlmCiAK
IHZvaWQgRnJhbWVWaWV3OjpjbGVhcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Db2xvckNob29zZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbG9y
Q2hvb3NlckNsaWVudC5oCmluZGV4IDliM2I4OTgxNjNlMjdiMGE2OTYyNDk1ZDIyN2I5YzliNTY5
MWRiMmMuLjMxNjhmZWU1MmZhMGY0M2Q0YTRmOTY0NWQwNjFkYjQ2NjcyMzdiNzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbG9yQ2hvb3NlckNsaWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbG9yQ2hvb3NlckNsaWVudC5oCkBAIC0yNywxNyArMjcs
MTYgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBDb2xvckNob29zZXJDbGllbnRfaAotI2RlZmluZSBD
b2xvckNob29zZXJDbGllbnRfaAorI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoSU5QVVRfVFlQ
RV9DT0xPUikKIAotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBDb2xvcjsKK2NsYXNzIEludFJlY3Q7CiAKIGNsYXNzIENvbG9yQ2hvb3NlckNsaWVudCB7CiBw
dWJsaWM6CkBAIC00NiwxMyArNDUsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZENo
b29zZUNvbG9yKGNvbnN0IENvbG9yJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRFbmRDaG9v
c2VyKCkgPSAwOwogICAgIHZpcnR1YWwgSW50UmVjdCBlbGVtZW50UmVjdFJlbGF0aXZlVG9Sb290
VmlldygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIENvbG9yIGN1cnJlbnRDb2xvcigpID0gMDsK
LSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2hvd1N1Z2dlc3Rpb25zKCkgY29uc3QgPSAwOwogICAg
IHZpcnR1YWwgVmVjdG9yPENvbG9yPiBzdWdnZXN0ZWRDb2xvcnMoKSBjb25zdCA9IDA7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5QVVRfVFlQRV9D
T0xPUikKLQotI2VuZGlmIC8vIENvbG9yQ2hvb3NlckNsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAKaW5kZXggYmQ3ZjY4YmJmMGIwNTE1YzA3
M2EzNjc1YTRkN2E3NjVjNDNjMzgxMi4uZTE3MGY5NmExYjZlZjUzNWJjNWE4MjNjYTExZDdhNzUw
NDIxZWZjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
ZGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50
LmNwcApAQCAtMzYsNTggKzM2LDE3IEBAIHVzaW5nIFdURjo6cGFpckludEhhc2g7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotUmVmPEdyYWRpZW50PiBHcmFkaWVudDo6Y3JlYXRlKExpbmVhckRh
dGEmJiBkYXRhKQorUmVmPEdyYWRpZW50PiBHcmFkaWVudDo6Y3JlYXRlKERhdGEmJiBkYXRhKQog
ewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdyYWRpZW50KFdURk1vdmUoZGF0YSkpKTsKIH0K
IAotUmVmPEdyYWRpZW50PiBHcmFkaWVudDo6Y3JlYXRlKFJhZGlhbERhdGEmJiBkYXRhKQotewot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdyYWRpZW50KFdURk1vdmUoZGF0YSkpKTsKLX0KLQot
UmVmPEdyYWRpZW50PiBHcmFkaWVudDo6Y3JlYXRlKENvbmljRGF0YSYmIGRhdGEpCi17Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgR3JhZGllbnQoV1RGTW92ZShkYXRhKSkpOwotfQotCi1HcmFk
aWVudDo6R3JhZGllbnQoTGluZWFyRGF0YSYmIGRhdGEpCitHcmFkaWVudDo6R3JhZGllbnQoRGF0
YSYmIGRhdGEpCiAgICAgOiBtX2RhdGEoV1RGTW92ZShkYXRhKSkKIHsKLSAgICBwbGF0Zm9ybUlu
aXQoKTsKIH0KIAotR3JhZGllbnQ6OkdyYWRpZW50KFJhZGlhbERhdGEmJiBkYXRhKQotICAgIDog
bV9kYXRhKFdURk1vdmUoZGF0YSkpCi17Ci0gICAgcGxhdGZvcm1Jbml0KCk7Ci19Ci0gICAgCi1H
cmFkaWVudDo6R3JhZGllbnQoQ29uaWNEYXRhJiYgZGF0YSkKLSAgICA6IG1fZGF0YShXVEZNb3Zl
KGRhdGEpKQotewotICAgIHBsYXRmb3JtSW5pdCgpOwotfQotCi1HcmFkaWVudDo6fkdyYWRpZW50
KCkKLXsKLSAgICBwbGF0Zm9ybURlc3Ryb3koKTsKLX0KLQotYXV0byBHcmFkaWVudDo6dHlwZSgp
IGNvbnN0IC0+IFR5cGUKLXsKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX2RhdGEsCi0gICAg
ICAgIFtdIChjb25zdCBMaW5lYXJEYXRhJikgewotICAgICAgICAgICAgcmV0dXJuIFR5cGU6Okxp
bmVhcjsKLSAgICAgICAgfSwKLSAgICAgICAgW10gKGNvbnN0IFJhZGlhbERhdGEmKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gVHlwZTo6UmFkaWFsOwotICAgICAgICB9LAotICAgICAgICBbXSAoY29u
c3QgQ29uaWNEYXRhJikgewotICAgICAgICAgICAgcmV0dXJuIFR5cGU6OkNvbmljOwotICAgICAg
ICB9Ci0gICAgKTsKLX0KK0dyYWRpZW50Ojp+R3JhZGllbnQoKSA9IGRlZmF1bHQ7CiAKIHZvaWQg
R3JhZGllbnQ6OmFkanVzdFBhcmFtZXRlcnNGb3JUaWxlZERyYXdpbmcoRmxvYXRTaXplJiBzaXpl
LCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZykKIHsKQEAgLTEz
NCwxNDYgKzkzLDkyIEBAIGJvb2wgR3JhZGllbnQ6OmlzWmVyb1NpemUoKSBjb25zdAogICAgICk7
CiB9CiAKLXZvaWQgR3JhZGllbnQ6OmFkZENvbG9yU3RvcChmbG9hdCBvZmZzZXQsIGNvbnN0IENv
bG9yJiBjb2xvcikKLXsKLSAgICBhZGRDb2xvclN0b3AoeyBvZmZzZXQsIGNvbG9yIH0pOwotfQot
Ci12b2lkIEdyYWRpZW50OjphZGRDb2xvclN0b3AoY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCYg
c3RvcCkKK3ZvaWQgR3JhZGllbnQ6OmFkZENvbG9yU3RvcChHcmFkaWVudDo6Q29sb3JTdG9wJiYg
c3RvcCkKIHsKLSAgICBtX3N0b3BzLmFwcGVuZChzdG9wKTsKLQorICAgIG1fc3RvcHMuYXBwZW5k
KFdURk1vdmUoc3RvcCkpOwogICAgIG1fc3RvcHNTb3J0ZWQgPSBmYWxzZTsKLQotICAgIHBsYXRm
b3JtRGVzdHJveSgpOwotICAgIGludmFsaWRhdGVIYXNoKCk7CisgICAgbV9jYWNoZWRIYXNoID0g
MDsKKyAgICBzdG9wc0NoYW5nZWQoKTsKIH0KIAogdm9pZCBHcmFkaWVudDo6c2V0U29ydGVkQ29s
b3JTdG9wcyhDb2xvclN0b3BWZWN0b3ImJiBzdG9wcykKIHsKICAgICBtX3N0b3BzID0gV1RGTW92
ZShzdG9wcyk7Ci0KICAgICBtX3N0b3BzU29ydGVkID0gdHJ1ZTsKLQotICAgIHBsYXRmb3JtRGVz
dHJveSgpOwotICAgIGludmFsaWRhdGVIYXNoKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBj
b21wYXJlU3RvcHMoY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCYgYSwgY29uc3QgR3JhZGllbnQ6
OkNvbG9yU3RvcCYgYikKLXsKLSAgICByZXR1cm4gYS5vZmZzZXQgPCBiLm9mZnNldDsKKyAgICBt
X2NhY2hlZEhhc2ggPSAwOworICAgIHN0b3BzQ2hhbmdlZCgpOwogfQogCi12b2lkIEdyYWRpZW50
Ojpzb3J0U3RvcHNJZk5lY2Vzc2FyeSgpCit2b2lkIEdyYWRpZW50Ojpzb3J0U3RvcHMoKSBjb25z
dAogewogICAgIGlmIChtX3N0b3BzU29ydGVkKQogICAgICAgICByZXR1cm47Ci0KICAgICBtX3N0
b3BzU29ydGVkID0gdHJ1ZTsKLQotICAgIGlmICghbV9zdG9wcy5zaXplKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHN0ZDo6c3RhYmxlX3NvcnQobV9zdG9wcy5iZWdpbigpLCBtX3N0b3BzLmVu
ZCgpLCBjb21wYXJlU3RvcHMpOwotICAgIGludmFsaWRhdGVIYXNoKCk7Ci19Ci0KLWJvb2wgR3Jh
ZGllbnQ6Omhhc0FscGhhKCkgY29uc3QKLXsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHN0b3AgOiBt
X3N0b3BzKSB7Ci0gICAgICAgIGlmICghc3RvcC5jb2xvci5pc09wYXF1ZSgpKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHN0ZDo6c3Rh
YmxlX3NvcnQobV9zdG9wcy5iZWdpbigpLCBtX3N0b3BzLmVuZCgpLCBbXSAoYXV0byYgYSwgYXV0
byYgYikgeworICAgICAgICByZXR1cm4gYS5vZmZzZXQgPCBiLm9mZnNldDsKKyAgICB9KTsKIH0K
IAogdm9pZCBHcmFkaWVudDo6c2V0U3ByZWFkTWV0aG9kKEdyYWRpZW50U3ByZWFkTWV0aG9kIHNw
cmVhZE1ldGhvZCkKIHsKLSAgICAvLyBGSVhNRTogU2hvdWxkIGl0IGJlY29tZSBuZWNlc3Nhcnks
IGFsbG93IGNhbGxzIHRvIHRoaXMgbWV0aG9kIGFmdGVyIG1fZ3JhZGllbnQgaGFzIGJlZW4gc2V0
LgotICAgIEFTU0VSVChtX2dyYWRpZW50ID09IDApOwotCiAgICAgaWYgKG1fc3ByZWFkTWV0aG9k
ID09IHNwcmVhZE1ldGhvZCkKICAgICAgICAgcmV0dXJuOwotCiAgICAgbV9zcHJlYWRNZXRob2Qg
PSBzcHJlYWRNZXRob2Q7Ci0KLSAgICBpbnZhbGlkYXRlSGFzaCgpOworICAgIG1fY2FjaGVkSGFz
aCA9IDA7CiB9CiAKIHZvaWQgR3JhZGllbnQ6OnNldEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24pCiB7CiAgICAg
aWYgKG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uID09IGdyYWRpZW50U3BhY2VUcmFuc2Zv
cm1hdGlvbikKICAgICAgICAgcmV0dXJuOwotCiAgICAgbV9ncmFkaWVudFNwYWNlVHJhbnNmb3Jt
YXRpb24gPSBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247CisgICAgbV9jYWNoZWRIYXNoID0g
MDsKK30KIAotICAgIGludmFsaWRhdGVIYXNoKCk7CisvLyBGSVhNRTogSW5zdGVhZCBvZiB0aGVz
ZSBhZGQoSGFzaGVyKSBmdW5jdGlvbnMsIGNvbnNpZGVyIHVzaW5nIGVuY29kZSBmdW5jdGlvbnMg
dG8gY29tcHV0ZSB0aGUgaGFzaC4KKworc3RhdGljIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBj
b25zdCBDb2xvciYgY29sb3IpCit7CisgICAgLy8gRklYTUU6IFdlIGRvbid0IHdhbnQgdG8gaGFz
aCBhIGhhc2g7IGRvIGJldHRlci4KKyAgICBhZGQoaGFzaGVyLCBjb2xvci5oYXNoKCkpOwogfQog
Ci11bnNpZ25lZCBHcmFkaWVudDo6aGFzaCgpIGNvbnN0CitzdGF0aWMgdm9pZCBhZGQoSGFzaGVy
JiBoYXNoZXIsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQogewotICAgIGlmIChtX2NhY2hlZEhh
c2gpCi0gICAgICAgIHJldHVybiBtX2NhY2hlZEhhc2g7CisgICAgYWRkKGhhc2hlciwgcG9pbnQu
eCgpLCBwb2ludC55KCkpOworfQogCi0gICAgc3RydWN0IHsKLSAgICAgICAgVHlwZSB0eXBlOwot
ICAgICAgICBGbG9hdFBvaW50IHBvaW50MDsKLSAgICAgICAgRmxvYXRQb2ludCBwb2ludDE7Ci0g
ICAgICAgIGZsb2F0IHN0YXJ0UmFkaXVzOwotICAgICAgICBmbG9hdCBlbmRSYWRpdXM7Ci0gICAg
ICAgIGZsb2F0IGFzcGVjdFJhdGlvOwotICAgICAgICBmbG9hdCBhbmdsZVJhZGlhbnM7Ci0gICAg
ICAgIEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZDsKLSAgICAgICAgQWZmaW5lVHJh
bnNmb3JtIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKLSAgICB9IHBhcmFtZXRlcnM7Citz
dGF0aWMgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtKQoreworICAgIGFkZChoYXNoZXIsIHRyYW5zZm9ybS5hKCksIHRyYW5zZm9ybS5iKCks
IHRyYW5zZm9ybS5jKCksIHRyYW5zZm9ybS5kKCksIHRyYW5zZm9ybS5lKCksIHRyYW5zZm9ybS5m
KCkpOworfQogCi0gICAgLy8gU3RyaW5nSGFzaGVyIHJlcXVpcmVzIHRoYXQgdGhlIG1lbW9yeSBp
dCBoYXNoZXMgYmUgYSBtdWx0aXBsZSBvZiB0d28gaW4gc2l6ZS4KLSAgICBDT01QSUxFX0FTU0VS
VCghKHNpemVvZihwYXJhbWV0ZXJzKSAlIDIpLCBHcmFkaWVudF9wYXJhbWV0ZXJzX3NpemVfc2hv
dWxkX2JlX211bHRpcGxlX29mX3R3byk7Ci0gICAgQ09NUElMRV9BU1NFUlQoIShzaXplb2YoQ29s
b3JTdG9wKSAlIDIpLCBDb2xvcl9zdG9wX3NpemVfc2hvdWxkX2JlX211bHRpcGxlX29mX3R3byk7
Ci0gICAgCi0gICAgLy8gRW5zdXJlIHRoYXQgYW55IHBhZGRpbmcgaW4gdGhlIHN0cnVjdCBpcyB6
ZXJvLWZpbGxlZCwgc28gaXQgd2lsbCBub3QgYWZmZWN0IHRoZSBoYXNoIHZhbHVlLgotICAgIC8v
IEZJWE1FOiBUaGlzIGlzIGFza2luZyBmb3IgdHJvdWJsZSwgYmVjYXVzZSBpdCBpcyBhIG5vbnRy
aXZpYWwgdHlwZS4KLSAgICBtZW1zZXQoc3RhdGljX2Nhc3Q8dm9pZCo+KCZwYXJhbWV0ZXJzKSwg
MCwgc2l6ZW9mKHBhcmFtZXRlcnMpKTsKLSAgICAKLSAgICBXVEY6OnN3aXRjaE9uKG1fZGF0YSwK
LSAgICAgICAgWyZwYXJhbWV0ZXJzXSAoY29uc3QgTGluZWFyRGF0YSYgZGF0YSkgewotICAgICAg
ICAgICAgcGFyYW1ldGVycy5wb2ludDAgPSBkYXRhLnBvaW50MDsKLSAgICAgICAgICAgIHBhcmFt
ZXRlcnMucG9pbnQxID0gZGF0YS5wb2ludDE7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLnN0YXJ0
UmFkaXVzID0gMDsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZW5kUmFkaXVzID0gMDsKLSAgICAg
ICAgICAgIHBhcmFtZXRlcnMuYXNwZWN0UmF0aW8gPSAwOwotICAgICAgICAgICAgcGFyYW1ldGVy
cy5hbmdsZVJhZGlhbnMgPSAwOwotICAgICAgICAgICAgcGFyYW1ldGVycy50eXBlID0gVHlwZTo6
TGluZWFyOwotICAgICAgICB9LAotICAgICAgICBbJnBhcmFtZXRlcnNdIChjb25zdCBSYWRpYWxE
YXRhJiBkYXRhKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLnBvaW50MCA9IGRhdGEucG9pbnQw
OwotICAgICAgICAgICAgcGFyYW1ldGVycy5wb2ludDEgPSBkYXRhLnBvaW50MTsKLSAgICAgICAg
ICAgIHBhcmFtZXRlcnMuc3RhcnRSYWRpdXMgPSBkYXRhLnN0YXJ0UmFkaXVzOwotICAgICAgICAg
ICAgcGFyYW1ldGVycy5lbmRSYWRpdXMgPSBkYXRhLmVuZFJhZGl1czsKLSAgICAgICAgICAgIHBh
cmFtZXRlcnMuYXNwZWN0UmF0aW8gPSBkYXRhLmFzcGVjdFJhdGlvOwotICAgICAgICAgICAgcGFy
YW1ldGVycy5hbmdsZVJhZGlhbnMgPSAwOwotICAgICAgICAgICAgcGFyYW1ldGVycy50eXBlID0g
VHlwZTo6UmFkaWFsOwotICAgICAgICB9LAotICAgICAgICBbJnBhcmFtZXRlcnNdIChjb25zdCBD
b25pY0RhdGEmIGRhdGEpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMucG9pbnQwID0gZGF0YS5w
b2ludDA7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLnBvaW50MSA9IHswLCAwfTsKLSAgICAgICAg
ICAgIHBhcmFtZXRlcnMuc3RhcnRSYWRpdXMgPSAwOwotICAgICAgICAgICAgcGFyYW1ldGVycy5l
bmRSYWRpdXMgPSAwOwotICAgICAgICAgICAgcGFyYW1ldGVycy5hc3BlY3RSYXRpbyA9IDA7Ci0g
ICAgICAgICAgICBwYXJhbWV0ZXJzLmFuZ2xlUmFkaWFucyA9IGRhdGEuYW5nbGVSYWRpYW5zOwot
ICAgICAgICAgICAgcGFyYW1ldGVycy50eXBlID0gVHlwZTo6Q29uaWM7Ci0gICAgICAgIH0KLSAg
ICApOworc3RhdGljIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBHcmFkaWVudDo6Q29s
b3JTdG9wJiBzdG9wKQoreworICAgIGFkZChoYXNoZXIsIHN0b3Aub2Zmc2V0LCBzdG9wLmNvbG9y
KTsKK30KIAotICAgIHBhcmFtZXRlcnMuc3ByZWFkTWV0aG9kID0gbV9zcHJlYWRNZXRob2Q7Ci0g
ICAgcGFyYW1ldGVycy5ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24gPSBtX2dyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm1hdGlvbjsKK3N0YXRpYyB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3Qg
R3JhZGllbnQ6OkxpbmVhckRhdGEmIGRhdGEpCit7CisgICAgYWRkKGhhc2hlciwgZGF0YS5wb2lu
dDAsIGRhdGEucG9pbnQxKTsKK30KIAotICAgIHVuc2lnbmVkIHBhcmFtZXRlcnNIYXNoID0gU3Ry
aW5nSGFzaGVyOjpoYXNoTWVtb3J5KCZwYXJhbWV0ZXJzLCBzaXplb2YocGFyYW1ldGVycykpOwot
ICAgIHVuc2lnbmVkIHN0b3BIYXNoID0gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5KG1fc3RvcHMu
ZGF0YSgpLCBtX3N0b3BzLnNpemUoKSAqIHNpemVvZihDb2xvclN0b3ApKTsKK3N0YXRpYyB2b2lk
IGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgR3JhZGllbnQ6OlJhZGlhbERhdGEmIGRhdGEpCit7
CisgICAgYWRkKGhhc2hlciwgZGF0YS5wb2ludDAsIGRhdGEucG9pbnQxLCBkYXRhLnN0YXJ0UmFk
aXVzLCBkYXRhLmVuZFJhZGl1cywgZGF0YS5hc3BlY3RSYXRpbyk7Cit9CiAKLSAgICBtX2NhY2hl
ZEhhc2ggPSBwYWlySW50SGFzaChwYXJhbWV0ZXJzSGFzaCwgc3RvcEhhc2gpOworc3RhdGljIHZv
aWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBHcmFkaWVudDo6Q29uaWNEYXRhJiBkYXRhKQor
eworICAgIGFkZChoYXNoZXIsIGRhdGEucG9pbnQwLCBkYXRhLmFuZ2xlUmFkaWFucyk7Cit9CiAK
K3Vuc2lnbmVkIEdyYWRpZW50OjpoYXNoKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fY2FjaGVkSGFz
aCkgeworICAgICAgICBzb3J0U3RvcHMoKTsKKyAgICAgICAgbV9jYWNoZWRIYXNoID0gY29tcHV0
ZUhhc2gobV9kYXRhLCBtX3NwcmVhZE1ldGhvZCwgbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRp
b24sIG1fc3RvcHMpOworICAgIH0KICAgICByZXR1cm4gbV9jYWNoZWRIYXNoOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAppbmRleCA2ZWI1ZDA3OWFj
N2U0ZmUzYTJjZjUxNjdkMjg1ZTAzNWIwY2YxMDAyLi4yOTg2YzFhYzIxMjk0NzczMDBlMzVkY2Qx
NjFjNzAxZDIyNWU4ZjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFkaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YWRpZW50LmgKQEAgLTMxLDQ4ICszMSw0NCBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVk
ZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlIDx3
dGYvRW51bVRyYWl0cy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8
d3RmL1ZhcmlhbnQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKKyNpZiBVU0UoQ0cpCisj
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2VuZGlmCisKKyNpZiBVU0UoRElSRUNUMkQpCisj
aW5jbHVkZSAiQ09NUHRyLmgiCisjZW5kaWYKKwogI2lmIFVTRShDRykKIHR5cGVkZWYgc3RydWN0
IENHQ29udGV4dCogQ0dDb250ZXh0UmVmOwogdHlwZWRlZiBzdHJ1Y3QgQ0dHcmFkaWVudCogQ0dH
cmFkaWVudFJlZjsKLXR5cGVkZWYgQ0dHcmFkaWVudFJlZiBQbGF0Zm9ybUdyYWRpZW50OwotI2Vs
aWYgVVNFKERJUkVDVDJEKQorI2VuZGlmCisKKyNpZiBVU0UoRElSRUNUMkQpCiBpbnRlcmZhY2Ug
SUQyRDFCcnVzaDsKIGludGVyZmFjZSBJRDJEMVJlbmRlclRhcmdldDsKLXR5cGVkZWYgSUQyRDFC
cnVzaCogUGxhdGZvcm1HcmFkaWVudDsKLSNlbGlmIFVTRShDQUlSTykKKyNlbmRpZgorCisjaWYg
VVNFKENBSVJPKQogdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3BhdHRlcm4gY2Fpcm9fcGF0dGVybl90
OwotdHlwZWRlZiBjYWlyb19wYXR0ZXJuX3QqIFBsYXRmb3JtR3JhZGllbnQ7Ci0jZWxzZQotdHlw
ZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYWRpZW50OwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgQ29sb3I7CiBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBHcmFwaGljc0NvbnRl
eHQ7CiAKIGNsYXNzIEdyYWRpZW50IDogcHVibGljIFJlZkNvdW50ZWQ8R3JhZGllbnQ+IHsKIHB1
YmxpYzoKLSAgICAvLyBGSVhNRTogRXh0ZW5kZWRDb2xvciAtIEEgY29sb3Igc3RvcCBuZWVkcyBh
IG5vdGlvbiBvZiBjb2xvciBzcGFjZS4KICAgICBzdHJ1Y3QgQ29sb3JTdG9wIHsKICAgICAgICAg
ZmxvYXQgb2Zmc2V0IHsgMCB9OwogICAgICAgICBDb2xvciBjb2xvcjsKIAotICAgICAgICBDb2xv
clN0b3AoKSA9IGRlZmF1bHQ7Ci0gICAgICAgIENvbG9yU3RvcChmbG9hdCBvZmZzZXQsIGNvbnN0
IENvbG9yJiBjb2xvcikKLSAgICAgICAgICAgIDogb2Zmc2V0KG9mZnNldCkKLSAgICAgICAgICAg
ICwgY29sb3IoY29sb3IpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICAgICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENvbG9yU3RvcD4gZGVjb2RlKERl
Y29kZXImKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0
aWMgT3B0aW9uYWw8Q29sb3JTdG9wPiBkZWNvZGUoRGVjb2RlciYpOwogICAgIH07CiAKICAgICB1
c2luZyBDb2xvclN0b3BWZWN0b3IgPSBWZWN0b3I8Q29sb3JTdG9wLCAyPjsKQEAgLTgxLDggKzc3
LDggQEAgcHVibGljOgogICAgICAgICBGbG9hdFBvaW50IHBvaW50MDsKICAgICAgICAgRmxvYXRQ
b2ludCBwb2ludDE7CiAKLSAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OwotICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0
aWMgT3B0aW9uYWw8TGluZWFyRGF0YT4gZGVjb2RlKERlY29kZXImKTsKKyAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8TGluZWFyRGF0YT4g
ZGVjb2RlKERlY29kZXImKTsKICAgICB9OwogCiAgICAgc3RydWN0IFJhZGlhbERhdGEgewpAQCAt
OTIsMzcgKzg4LDI5IEBAIHB1YmxpYzoKICAgICAgICAgZmxvYXQgZW5kUmFkaXVzOwogICAgICAg
ICBmbG9hdCBhc3BlY3RSYXRpbzsgLy8gRm9yIGVsbGlwdGljYWwgZ3JhZGllbnQsIHdpZHRoIC8g
aGVpZ2h0LgogCi0gICAgICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKLSAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9w
dGlvbmFsPFJhZGlhbERhdGE+IGRlY29kZShEZWNvZGVyJik7CisgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJhZGlhbERhdGE+IGRlY29k
ZShEZWNvZGVyJik7CiAgICAgfTsKLSAgICAKKwogICAgIHN0cnVjdCBDb25pY0RhdGEgewogICAg
ICAgICBGbG9hdFBvaW50IHBvaW50MDsKICAgICAgICAgZmxvYXQgYW5nbGVSYWRpYW5zOwogCi0g
ICAgICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENvbmlj
RGF0YT4gZGVjb2RlKERlY29kZXImKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29uaWNEYXRhPiBkZWNvZGUoRGVjb2RlciYpOwog
ICAgIH07CiAKICAgICB1c2luZyBEYXRhID0gVmFyaWFudDxMaW5lYXJEYXRhLCBSYWRpYWxEYXRh
LCBDb25pY0RhdGE+OwogCi0gICAgZW51bSBjbGFzcyBUeXBlIHsgTGluZWFyLCBSYWRpYWwsIENv
bmljIH07Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEdyYWRpZW50PiBjcmVhdGUo
TGluZWFyRGF0YSYmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEdyYWRpZW50PiBj
cmVhdGUoUmFkaWFsRGF0YSYmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEdyYWRp
ZW50PiBjcmVhdGUoQ29uaWNEYXRhJiYpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8
R3JhZGllbnQ+IGNyZWF0ZShEYXRhJiYpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgfkdyYWRpZW50
KCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBUeXBlIHR5cGUoKSBjb25zdDsKLQotICAgIGJvb2wg
aGFzQWxwaGEoKSBjb25zdDsKICAgICBib29sIGlzWmVyb1NpemUoKSBjb25zdDsKIAogICAgIGNv
bnN0IERhdGEmIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYWRkQ29sb3JTdG9wKGNvbnN0IENvbG9yU3RvcCYpOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYWRkQ29sb3JTdG9wKGZsb2F0LCBjb25zdCBDb2xvciYpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgYWRkQ29sb3JTdG9wKENvbG9yU3RvcCYmKTsKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldFNvcnRlZENvbG9yU3RvcHMoQ29sb3JTdG9wVmVjdG9yJiYpOwogCiAgICAg
Y29uc3QgQ29sb3JTdG9wVmVjdG9yJiBzdG9wcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcHM7IH0K
QEAgLTEzMCw3ICsxMTgsNiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRT
cHJlYWRNZXRob2QoR3JhZGllbnRTcHJlYWRNZXRob2QpOwogICAgIEdyYWRpZW50U3ByZWFkTWV0
aG9kIHNwcmVhZE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ByZWFkTWV0aG9kOyB9CiAKLSAg
ICAvLyBDRyBuZWVkcyB0byB0cmFuc2Zvcm0gdGhlIGdyYWRpZW50IGF0IGRyYXcgdGltZS4KICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24pOwogICAgIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1f
Z3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOyB9CiAKQEAgLTEzOCw1NiArMTI1LDU2IEBAIHB1
YmxpYzoKICAgICB2b2lkIGFkanVzdFBhcmFtZXRlcnNGb3JUaWxlZERyYXdpbmcoRmxvYXRTaXpl
JiwgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nKTsKIAogICAgIHVuc2lnbmVk
IGhhc2goKSBjb25zdDsKLSAgICB2b2lkIGludmFsaWRhdGVIYXNoKCkgeyBtX2NhY2hlZEhhc2gg
PSAwOyB9CisKKyNpZiBVU0UoQ0FJUk8pCisgICAgUmVmUHRyPGNhaXJvX3BhdHRlcm5fdD4gY3Jl
YXRlUGF0dGVybihmbG9hdCBnbG9iYWxBbHBoYSk7CisjZW5kaWYKIAogI2lmIFVTRShDRykKICAg
ICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYpOwogICAgIHZvaWQgcGFpbnQoQ0dDb250ZXh0
UmVmKTsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBQbGF0Zm9ybUdyYWRpZW50IGNyZWF0ZVBs
YXRmb3JtR3JhZGllbnRJZk5lY2Vzc2FyeShJRDJEMVJlbmRlclRhcmdldCopOwotI2VsaWYgVVNF
KENBSVJPKQotICAgIFBsYXRmb3JtR3JhZGllbnQgY3JlYXRlUGxhdGZvcm1HcmFkaWVudChmbG9h
dCBnbG9iYWxBbHBoYSk7CiAjZW5kaWYKIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgT3B0aW9uYWw8UmVmPEdyYWRpZW50Pj4gZGVjb2RlKERlY29kZXImKTsKKyNpZiBVU0Uo
RElSRUNUMkQpCisgICAgSUQyRDFCcnVzaCogY3JlYXRlQnJ1c2goSUQyRDFSZW5kZXJUYXJnZXQq
KTsKKyNlbmRpZgorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IHN0YXRpYyBP
cHRpb25hbDxSZWY8R3JhZGllbnQ+PiBkZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgotICAg
IEdyYWRpZW50KExpbmVhckRhdGEmJik7Ci0gICAgR3JhZGllbnQoUmFkaWFsRGF0YSYmKTsKLSAg
ICBHcmFkaWVudChDb25pY0RhdGEmJik7Ci0KLSAgICBQbGF0Zm9ybUdyYWRpZW50IHBsYXRmb3Jt
R3JhZGllbnQoKTsKLSAgICB2b2lkIHBsYXRmb3JtSW5pdCgpIHsgbV9ncmFkaWVudCA9IG51bGxw
dHI7IH0KLSAgICB2b2lkIHBsYXRmb3JtRGVzdHJveSgpOworICAgIGV4cGxpY2l0IEdyYWRpZW50
KERhdGEmJik7CiAKLSAgICB2b2lkIHNvcnRTdG9wc0lmTmVjZXNzYXJ5KCk7CisgICAgdm9pZCBz
b3J0U3RvcHMoKSBjb25zdDsKKyAgICB2b2lkIHN0b3BzQ2hhbmdlZCgpOwogCi0jaWYgVVNFKERJ
UkVDVDJEKQotICAgIHZvaWQgZ2VuZXJhdGVHcmFkaWVudChJRDJEMVJlbmRlclRhcmdldCopOwor
I2lmIFVTRShDRykKKyAgICB2b2lkIGNyZWF0ZUNHR3JhZGllbnQoKTsKICNlbmRpZgogCiAgICAg
RGF0YSBtX2RhdGE7Ci0KICAgICBtdXRhYmxlIENvbG9yU3RvcFZlY3RvciBtX3N0b3BzOwogICAg
IG11dGFibGUgYm9vbCBtX3N0b3BzU29ydGVkIHsgZmFsc2UgfTsKICAgICBHcmFkaWVudFNwcmVh
ZE1ldGhvZCBtX3NwcmVhZE1ldGhvZCB7IEdyYWRpZW50U3ByZWFkTWV0aG9kOjpQYWQgfTsKKyAg
ICBtdXRhYmxlIHVuc2lnbmVkIG1fY2FjaGVkSGFzaCB7IDAgfTsKICAgICBBZmZpbmVUcmFuc2Zv
cm0gbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247CiAKLSAgICBtdXRhYmxlIHVuc2lnbmVk
IG1fY2FjaGVkSGFzaCB7IDAgfTsKKyNpZiBVU0UoQ0cpCisgICAgUmV0YWluUHRyPENHR3JhZGll
bnRSZWY+IG1fZ3JhZGllbnQ7CisjZW5kaWYKIAotICAgIFBsYXRmb3JtR3JhZGllbnQgbV9ncmFk
aWVudDsKKyNpZiBVU0UoRElSRUNUMkQpCisgICAgQ09NUHRyPElEMkQxQnJ1c2g+IG1fYnJ1c2g7
CisjZW5kaWYKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEdyYWRpZW50OjpD
b2xvclN0b3A6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAordGVtcGxhdGU8dHlwZW5h
bWUgRW5jb2Rlcj4gdm9pZCBHcmFkaWVudDo6Q29sb3JTdG9wOjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IG9mZnNldDsKICAgICBlbmNvZGVyIDw8IGNv
bG9yOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8R3JhZGllbnQ6OkNv
bG9yU3RvcD4gR3JhZGllbnQ6OkNvbG9yU3RvcDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBPcHRpb25hbDxHcmFkaWVudDo6Q29sb3JTdG9wPiBH
cmFkaWVudDo6Q29sb3JTdG9wOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRp
b25hbDxmbG9hdD4gb2Zmc2V0OwogICAgIGRlY29kZXIgPj4gb2Zmc2V0OwpAQCAtMjAyLDE1ICsx
ODksMTMgQEAgT3B0aW9uYWw8R3JhZGllbnQ6OkNvbG9yU3RvcD4gR3JhZGllbnQ6OkNvbG9yU3Rv
cDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgcmV0dXJuIHt7ICpvZmZzZXQsICpjb2xv
ciB9fTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgR3JhZGllbnQ6OkxpbmVh
ckRhdGE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUg
RW5jb2Rlcj4gdm9pZCBHcmFkaWVudDo6TGluZWFyRGF0YTo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBwb2ludDA7CiAgICAgZW5jb2RlciA8PCBwb2lu
dDE7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxHcmFkaWVudDo6TGlu
ZWFyRGF0YT4gR3JhZGllbnQ6OkxpbmVhckRhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQor
dGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gT3B0aW9uYWw8R3JhZGllbnQ6OkxpbmVhckRhdGE+
IEdyYWRpZW50OjpMaW5lYXJEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBP
cHRpb25hbDxGbG9hdFBvaW50PiBwb2ludDA7CiAgICAgZGVjb2RlciA+PiBwb2ludDA7CkBAIC0y
MjUsOCArMjEwLDcgQEAgT3B0aW9uYWw8R3JhZGllbnQ6OkxpbmVhckRhdGE+IEdyYWRpZW50OjpM
aW5lYXJEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICByZXR1cm4ge3sgKnBvaW50
MCwgKnBvaW50MSB9fTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgR3JhZGll
bnQ6OlJhZGlhbERhdGE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAordGVtcGxhdGU8
dHlwZW5hbWUgRW5jb2Rlcj4gdm9pZCBHcmFkaWVudDo6UmFkaWFsRGF0YTo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBwb2ludDA7CiAgICAgZW5jb2Rl
ciA8PCBwb2ludDE7CkBAIC0yMzUsOCArMjE5LDcgQEAgdm9pZCBHcmFkaWVudDo6UmFkaWFsRGF0
YTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCBhc3BlY3RS
YXRpbzsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPEdyYWRpZW50OjpS
YWRpYWxEYXRhPiBHcmFkaWVudDo6UmFkaWFsRGF0YTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBPcHRpb25hbDxHcmFkaWVudDo6UmFkaWFsRGF0
YT4gR3JhZGllbnQ6OlJhZGlhbERhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAg
IE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBvaW50MDsKICAgICBkZWNvZGVyID4+IHBvaW50MDsKQEAg
LTI2NiwxNSArMjQ5LDEzIEBAIE9wdGlvbmFsPEdyYWRpZW50OjpSYWRpYWxEYXRhPiBHcmFkaWVu
dDo6UmFkaWFsRGF0YTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgcmV0dXJuIHt7ICpw
b2ludDAsICpwb2ludDEsICpzdGFydFJhZGl1cywgKmVuZFJhZGl1cywgKmFzcGVjdFJhdGlvIH19
OwogfQogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBHcmFkaWVudDo6Q29uaWNEYXRh
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIEVuY29k
ZXI+IHZvaWQgR3JhZGllbnQ6OkNvbmljRGF0YTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNv
bnN0CiB7CiAgICAgZW5jb2RlciA8PCBwb2ludDA7CiAgICAgZW5jb2RlciA8PCBhbmdsZVJhZGlh
bnM7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxHcmFkaWVudDo6Q29u
aWNEYXRhPiBHcmFkaWVudDo6Q29uaWNEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3Rl
bXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IE9wdGlvbmFsPEdyYWRpZW50OjpDb25pY0RhdGE+IEdy
YWRpZW50OjpDb25pY0RhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlv
bmFsPEZsb2F0UG9pbnQ+IHBvaW50MDsKICAgICBkZWNvZGVyID4+IHBvaW50MDsKQEAgLTI4OSwx
MTUgKzI3MCw1MCBAQCBPcHRpb25hbDxHcmFkaWVudDo6Q29uaWNEYXRhPiBHcmFkaWVudDo6Q29u
aWNEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICByZXR1cm4ge3sgKnBvaW50MCwg
KmFuZ2xlUmFkaWFucyB9fTsKIH0KIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgR3Jh
ZGllbnQ6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUg
RW5jb2Rlcj4gdm9pZCBHcmFkaWVudDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7
Ci0gICAgYXV0byB0eXBlID0gdGhpcy0+dHlwZSgpOwotICAgIGVuY29kZXIgPDwgdHlwZTsKLSAg
ICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIFR5cGU6OkxpbmVhcjoKLSAgICAgICAgZW5jb2Rl
ciA8PCBXVEY6OmdldDxHcmFkaWVudDo6TGluZWFyRGF0YT4obV9kYXRhKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBUeXBlOjpSYWRpYWw6Ci0gICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8
R3JhZGllbnQ6OlJhZGlhbERhdGE+KG1fZGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
VHlwZTo6Q29uaWM6Ci0gICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8R3JhZGllbnQ6OkNvbmlj
RGF0YT4obV9kYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIGVuY29kZXIgPDwgbV9k
YXRhOwogICAgIGVuY29kZXIgPDwgbV9zdG9wczsKICAgICBlbmNvZGVyIDw8IG1fc3RvcHNTb3J0
ZWQ7CiAgICAgZW5jb2RlciA8PCBtX3NwcmVhZE1ldGhvZDsKICAgICBlbmNvZGVyIDw8IG1fZ3Jh
ZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOwogfQogCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgot
T3B0aW9uYWw8UmVmPEdyYWRpZW50Pj4gR3JhZGllbnQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQordGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gT3B0aW9uYWw8UmVmPEdyYWRpZW50Pj4gR3Jh
ZGllbnQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewotICAgIE9wdGlvbmFsPEdyYWRpZW50
OjpUeXBlPiB0eXBlOwotICAgIGRlY29kZXIgPj4gdHlwZTsKLSAgICBpZiAoIXR5cGUpCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50
OwotICAgIHN3aXRjaCAoKnR5cGUpIHsKLSAgICBjYXNlIFR5cGU6OkxpbmVhcjogewotICAgICAg
ICBPcHRpb25hbDxMaW5lYXJEYXRhPiBsaW5lYXJEYXRhOwotICAgICAgICBkZWNvZGVyID4+IGxp
bmVhckRhdGE7Ci0gICAgICAgIGlmICghbGluZWFyRGF0YSkKLSAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0KLSAgICAgICAgZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKFdURk1v
dmUoKmxpbmVhckRhdGEpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVHlwZTo6
UmFkaWFsOiB7Ci0gICAgICAgIE9wdGlvbmFsPFJhZGlhbERhdGE+IHJhZGlhbERhdGE7Ci0gICAg
ICAgIGRlY29kZXIgPj4gcmFkaWFsRGF0YTsKLSAgICAgICAgaWYgKCFyYWRpYWxEYXRhKQotICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgICAgICBncmFkaWVudCA9IEdyYWRp
ZW50OjpjcmVhdGUoV1RGTW92ZSgqcmFkaWFsRGF0YSkpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgY2FzZSBUeXBlOjpDb25pYzogewotICAgICAgICBPcHRpb25hbDxDb25pY0RhdGE+IGNv
bmljRGF0YTsKLSAgICAgICAgZGVjb2RlciA+PiBjb25pY0RhdGE7Ci0gICAgICAgIGlmICghY29u
aWNEYXRhKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgICAgICBncmFk
aWVudCA9IEdyYWRpZW50OjpjcmVhdGUoV1RGTW92ZSgqY29uaWNEYXRhKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWdyYWRpZW50KSB7Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIE9wdGlvbmFsPERhdGE+IGRhdGE7CisgICAgZGVjb2RlciA+
PiBkYXRhOworICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAg
ICB9CisgICAgYXV0byBncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoV1RGTW92ZSgqZGF0YSkp
OwogCiAgICAgT3B0aW9uYWw8Q29sb3JTdG9wVmVjdG9yPiBzdG9wczsKICAgICBkZWNvZGVyID4+
IHN0b3BzOwogICAgIGlmICghc3RvcHMpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0K
ICAgICBPcHRpb25hbDxib29sPiBzdG9wc1NvcnRlZDsKICAgICBkZWNvZGVyID4+IHN0b3BzU29y
dGVkOwogICAgIGlmICghc3RvcHNTb3J0ZWQuaGFzVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLQotICAgIGlmIChzdG9wc1NvcnRlZC52YWx1ZSgpKQorICAgIGlmICgqc3Rv
cHNTb3J0ZWQpCiAgICAgICAgIGdyYWRpZW50LT5zZXRTb3J0ZWRDb2xvclN0b3BzKFdURk1vdmUo
KnN0b3BzKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIGZvciAoYXV0byYgc3RvcCA6ICpzdG9wcykK
LSAgICAgICAgICAgIGdyYWRpZW50LT5hZGRDb2xvclN0b3Aoc3RvcCk7CisgICAgICAgICAgICBn
cmFkaWVudC0+YWRkQ29sb3JTdG9wKFdURk1vdmUoc3RvcCkpOwogICAgIH0KIAogICAgIEdyYWRp
ZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZDsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNw
cmVhZE1ldGhvZCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KICAgICBncmFkaWVu
dC0+c2V0U3ByZWFkTWV0aG9kKHNwcmVhZE1ldGhvZCk7CiAKICAgICBPcHRpb25hbDxBZmZpbmVU
cmFuc2Zvcm0+IGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKICAgICBkZWNvZGVyID4+IGdy
YWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKICAgICBpZiAoIWdyYWRpZW50U3BhY2VUcmFuc2Zv
cm1hdGlvbikKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQogICAgIGdyYWRpZW50LT5z
ZXRHcmFkaWVudFNwYWNlVHJhbnNmb3JtKFdURk1vdmUoKmdyYWRpZW50U3BhY2VUcmFuc2Zvcm1h
dGlvbikpOwotICAgIHJldHVybiBncmFkaWVudC5yZWxlYXNlTm9uTnVsbCgpOworCisgICAgcmV0
dXJuIFdURk1vdmUoZ3JhZGllbnQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLW5h
bWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6Okdy
YWRpZW50OjpUeXBlPiB7Ci0gICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKLSAgICBXZWJD
b3JlOjpHcmFkaWVudDo6VHlwZSwKLSAgICBXZWJDb3JlOjpHcmFkaWVudDo6VHlwZTo6TGluZWFy
LAotICAgIFdlYkNvcmU6OkdyYWRpZW50OjpUeXBlOjpSYWRpYWwsCi0gICAgV2ViQ29yZTo6R3Jh
ZGllbnQ6OlR5cGU6OkNvbmljCi0gICAgPjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5j
cHAKaW5kZXggMzYzNzVkM2I3YzEyMWNlODY1OTdhZmY3ZGU3Y2IxMmE0NWQ4NTY4OS4uZTQ4MGQw
ODU0YTgyODk1ZTIyNzYzNTBhYTg4NjMxZjIzNWEzNmFkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC03NSw2ICs3
NSwyNiBAQCBwcml2YXRlOgogICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpmbGFnKSAmJiAobV9zdGF0ZS5wcm9wZXJ0eSAhPSBzdGF0ZS5wcm9wZXJ0
eSkpIFwKICAgICAgICAgY2hhbmdlRmxhZ3MuYWRkKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpmbGFn
KTsKIAorR3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKCkKKyAgICA6
IHNob3VsZEFudGlhbGlhcyh0cnVlKQorICAgICwgc2hvdWxkU21vb3RoRm9udHModHJ1ZSkKKyAg
ICAsIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyh0cnVlKQorICAgICwgc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMoZmFsc2UpCisjaWYgVVNFKENHKQorICAgIC8vIENvcmUgR3JhcGhpY3MgaW5j
b3JyZWN0bHkgcmVuZGVycyBzaGFkb3dzIHdpdGggcmFkaXVzID4gOHB4ICg8cmRhcjovL3Byb2Js
ZW0vODEwMzQ0Mj4pLAorICAgIC8vIGJ1dCB3ZSBuZWVkIHRvIHByZXNlcnZlIHRoaXMgYnVnZ3kg
YmVoYXZpb3IgZm9yIGNhbnZhcyBhbmQgLXdlYmtpdC1ib3gtc2hhZG93LgorICAgICwgc2hhZG93
c1VzZUxlZ2FjeVJhZGl1cyhmYWxzZSkKKyNlbmRpZgorICAgICwgZHJhd0x1bWluYW5jZU1hc2so
ZmFsc2UpCit7Cit9CisKK0dyYXBoaWNzQ29udGV4dFN0YXRlOjp+R3JhcGhpY3NDb250ZXh0U3Rh
dGUoKSA9IGRlZmF1bHQ7CitHcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKSA9IGRlZmF1bHQ7CitHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUoR3JhcGhpY3NDb250ZXh0U3RhdGUmJikgPSBk
ZWZhdWx0OworR3JhcGhpY3NDb250ZXh0U3RhdGUmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpvcGVy
YXRvcj0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKSA9IGRlZmF1bHQ7CitHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgR3JhcGhpY3NDb250ZXh0U3RhdGU6Om9wZXJhdG9yPShHcmFwaGljc0NvbnRl
eHRTdGF0ZSYmKSA9IGRlZmF1bHQ7CisKIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5n
ZUZsYWdzIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpjaGFuZ2VzRnJvbVN0YXRlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkgY29uc3QKIHsKICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFnczsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggNTAzNjk2NzRj
NDVhNjJlNjFiNzg5MTkyMWViZGJhOTg2MDM2YTVlYS4uOWRjZGRlOTk4ZjM0MTM0Mjc3MjI2ODY5
NGM5OThhYmU2MGM4NGFkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJEYXNo
QXJyYXkuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5o
IgotI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2lu
Y2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgpAQCAtOTgsNiAr
OTcsMTAgQEAgY2xhc3MgUGF0aDsKIGNsYXNzIFRleHRSdW47CiBjbGFzcyBUcmFuc2Zvcm1hdGlv
bk1hdHJpeDsKIAorbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKK2NsYXNzIFJlY29yZGVyOworfQor
CiBlbnVtIGNsYXNzIFRleHREcmF3aW5nTW9kZSA6IHVpbnQ4X3QgewogICAgIEZpbGwgPSAxIDw8
IDAsCiAgICAgU3Ryb2tlID0gMSA8PCAxLApAQCAtMTUzLDI0ICsxNTYsMTUgQEAgT3B0aW9uYWw8
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpkZWNvZGUo
RGVjb2RlciYgZGVjb2QKICAgICByZXR1cm4ge3sgKm1vZGUsICpzaG91bGRVc2VEYXJrQXBwZWFy
YW5jZSB9fTsKIH0KIAotbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKLWNsYXNzIFJlY29yZGVyOwot
fQotCiBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGUgewotICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlKCkKLSAgICAgICAgOiBzaG91bGRBbnRpYWxpYXModHJ1ZSkKLSAgICAgICAgLCBzaG91bGRT
bW9vdGhGb250cyh0cnVlKQotICAgICAgICAsIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyh0
cnVlKQotICAgICAgICAsIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGZhbHNlKQotI2lmIFVTRShD
RykKLSAgICAgICAgLy8gQ29yZSBHcmFwaGljcyBpbmNvcnJlY3RseSByZW5kZXJzIHNoYWRvd3Mg
d2l0aCByYWRpdXMgPiA4cHggKDxyZGFyOi8vcHJvYmxlbS84MTAzNDQyPiksCi0gICAgICAgIC8v
IGJ1dCB3ZSBuZWVkIHRvIHByZXNlcnZlIHRoaXMgYnVnZ3kgYmVoYXZpb3IgZm9yIGNhbnZhcyBh
bmQgLXdlYmtpdC1ib3gtc2hhZG93LgotICAgICAgICAsIHNoYWRvd3NVc2VMZWdhY3lSYWRpdXMo
ZmFsc2UpCi0jZW5kaWYKLSAgICAgICAgLCBkcmF3THVtaW5hbmNlTWFzayhmYWxzZSkKLSAgICB7
Ci0gICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlKCk7CisgICAg
V0VCQ09SRV9FWFBPUlQgfkdyYXBoaWNzQ29udGV4dFN0YXRlKCk7CisKKyAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOworICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlKEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpOworCisgICAgR3JhcGhpY3NDb250ZXh0
U3RhdGUmIG9wZXJhdG9yPShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOworICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBvcGVyYXRvcj0oR3JhcGhpY3NDb250ZXh0U3RhdGUmJik7CiAKICAg
ICBlbnVtIENoYW5nZSA6IHVpbnQzMl90IHsKICAgICAgICAgU3Ryb2tlR3JhZGllbnRDaGFuZ2Ug
ICAgICAgICAgICAgICAgICAgID0gMSA8PCAwLApAQCAtMTk3LDcgKzE5MSw3IEBAIHN0cnVjdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSB7CiAgICAgICAgIFVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlICAg
ICAgICAgICAgICAgICA9IDEgPDwgMjAsCiAjZW5kaWYKICAgICB9OwotICAgIHR5cGVkZWYgT3B0
aW9uU2V0PENoYW5nZT4gU3RhdGVDaGFuZ2VGbGFnczsKKyAgICB1c2luZyBTdGF0ZUNoYW5nZUZs
YWdzID0gT3B0aW9uU2V0PENoYW5nZT47CiAKICAgICBSZWZQdHI8R3JhZGllbnQ+IHN0cm9rZUdy
YWRpZW50OwogICAgIFJlZlB0cjxQYXR0ZXJuPiBzdHJva2VQYXR0ZXJuOwpAQCAtMzA4LDcgKzMw
Miw3IEBAIHB1YmxpYzoKICAgICBQYXR0ZXJuKiBzdHJva2VQYXR0ZXJuKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpOyB9CiAKICAgICB2b2lkIHNldFN0cm9rZUdy
YWRpZW50KFJlZjxHcmFkaWVudD4mJik7Ci0gICAgUmVmUHRyPEdyYWRpZW50PiBzdHJva2VHcmFk
aWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQ7IH0KKyAgICBHcmFk
aWVudCogc3Ryb2tlR3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZUdyYWRp
ZW50LmdldCgpOyB9CiAKICAgICB2b2lkIHNldEZpbGxSdWxlKFdpbmRSdWxlKTsKICAgICBXaW5k
UnVsZSBmaWxsUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFJ1bGU7IH0KQEAgLTMy
MCw3ICszMTQsNyBAQCBwdWJsaWM6CiAgICAgUGF0dGVybiogZmlsbFBhdHRlcm4oKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlLmZpbGxQYXR0ZXJuLmdldCgpOyB9CiAKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldEZpbGxHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYpOwotICAgIFJlZlB0cjxHcmFk
aWVudD4gZmlsbEdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsR3JhZGllbnQ7
IH0KKyAgICBHcmFkaWVudCogZmlsbEdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5m
aWxsR3JhZGllbnQuZ2V0KCk7IH0KIAogICAgIHZvaWQgc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMoYm9vbCk7CiAgICAgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3Bw
CmluZGV4IDNmZDRhZGUwMTU3ZTlkNGY5YmQ3ZDhlNGJmZWI0OGFmZmUxOGM4ZTUuLjlmMWQxMDlm
ZjA5N2Q1M2I3MmE1NDJiMjRlOGM2MzFmNDA3Nzg4Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcApA
QCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkRyYXdFcnJvclVuZGVybGluZS5oIgogI2luY2x1
ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
IkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ2Fpcm8uaCIKICNpbmNsdWRlICJJbWFnZS5oIgpA
QCAtNTY4LDkgKzU2OSw5IEBAIEZpbGxTb3VyY2U6OkZpbGxTb3VyY2UoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmIHN0YXRlKQogICAgICAgICBwYXR0ZXJuLnJlcGVhdFggPSBzdGF0ZS5maWxs
UGF0dGVybi0+cmVwZWF0WCgpOwogICAgICAgICBwYXR0ZXJuLnJlcGVhdFkgPSBzdGF0ZS5maWxs
UGF0dGVybi0+cmVwZWF0WSgpOwogICAgIH0gZWxzZSBpZiAoc3RhdGUuZmlsbEdyYWRpZW50KSB7
Ci0gICAgICAgIGdyYWRpZW50LmJhc2UgPSBhZG9wdFJlZihzdGF0ZS5maWxsR3JhZGllbnQtPmNy
ZWF0ZVBsYXRmb3JtR3JhZGllbnQoMSkpOworICAgICAgICBncmFkaWVudC5iYXNlID0gc3RhdGUu
ZmlsbEdyYWRpZW50LT5jcmVhdGVQYXR0ZXJuKDEpOwogICAgICAgICBpZiAoc3RhdGUuYWxwaGEg
IT0gMSkKLSAgICAgICAgICAgIGdyYWRpZW50LmFscGhhQWRqdXN0ZWQgPSBhZG9wdFJlZihzdGF0
ZS5maWxsR3JhZGllbnQtPmNyZWF0ZVBsYXRmb3JtR3JhZGllbnQoc3RhdGUuYWxwaGEpKTsKKyAg
ICAgICAgICAgIGdyYWRpZW50LmFscGhhQWRqdXN0ZWQgPSBzdGF0ZS5maWxsR3JhZGllbnQtPmNy
ZWF0ZVBhdHRlcm4oc3RhdGUuYWxwaGEpOwogICAgIH0gZWxzZQogICAgICAgICBjb2xvciA9IHN0
YXRlLmZpbGxDb2xvcjsKIH0KQEAgLTU4MSw5ICs1ODIsOSBAQCBTdHJva2VTb3VyY2U6OlN0cm9r
ZVNvdXJjZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCiAgICAgaWYgKHN0YXRl
LnN0cm9rZVBhdHRlcm4pCiAgICAgICAgIHBhdHRlcm4gPSBhZG9wdFJlZihzdGF0ZS5zdHJva2VQ
YXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oQWZmaW5lVHJhbnNmb3JtKCkpKTsKICAgICBl
bHNlIGlmIChzdGF0ZS5zdHJva2VHcmFkaWVudCkgewotICAgICAgICBncmFkaWVudC5iYXNlID0g
YWRvcHRSZWYoc3RhdGUuc3Ryb2tlR3JhZGllbnQtPmNyZWF0ZVBsYXRmb3JtR3JhZGllbnQoMSkp
OworICAgICAgICBncmFkaWVudC5iYXNlID0gc3RhdGUuc3Ryb2tlR3JhZGllbnQtPmNyZWF0ZVBh
dHRlcm4oMSk7CiAgICAgICAgIGlmIChzdGF0ZS5hbHBoYSAhPSAxKQotICAgICAgICAgICAgZ3Jh
ZGllbnQuYWxwaGFBZGp1c3RlZCA9IGFkb3B0UmVmKHN0YXRlLnN0cm9rZUdyYWRpZW50LT5jcmVh
dGVQbGF0Zm9ybUdyYWRpZW50KHN0YXRlLmFscGhhKSk7CisgICAgICAgICAgICBncmFkaWVudC5h
bHBoYUFkanVzdGVkID0gc3RhdGUuc3Ryb2tlR3JhZGllbnQtPmNyZWF0ZVBhdHRlcm4oc3RhdGUu
YWxwaGEpOwogICAgIH0gZWxzZQogICAgICAgICBjb2xvciA9IHN0YXRlLnN0cm9rZUNvbG9yOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
ZGllbnRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFkaWVudENhaXJvLmNwcAppbmRleCA1ZTZmZTFkZDliMWEwNjY5NjYwMTIyNzU0ZGNhZTE3NmU2
OTZhY2JmLi4xNzYwOGRhYzAzN2IxZGE4ZTJhMzNkNGYzZTI5ZGVjYjc2MDczZmQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJv
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVu
dENhaXJvLmNwcApAQCAtMzAsMTUgKzMwLDE3IEBACiAKICNpZiBVU0UoQ0FJUk8pCiAKKyNpbmNs
dWRlICJBbmltYXRpb25VdGlsaXRpZXMuaCIKICNpbmNsdWRlICJDYWlyb09wZXJhdGlvbnMuaCIK
ICNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIkNvbG9yQmxlbmRpbmcuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRD
YWlyby5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotdm9pZCBHcmFkaWVudDo6cGxhdGZvcm1EZXN0cm95KCkKK3ZvaWQgR3JhZGllbnQ6OnN0
b3BzQ2hhbmdlZCgpCiB7CiB9CiAKQEAgLTEzMiw2NiArMTM0LDU0IEBAIHN0YXRpYyB2b2lkIGFk
ZENvbmljU2VjdG9yKGNhaXJvX3BhdHRlcm5fdCAqZ3JhZGllbnQsIGZsb2F0IGN4LCBmbG9hdCBj
eSwgZmxvYXQKICAgICBjYWlyb19tZXNoX3BhdHRlcm5fZW5kX3BhdGNoKGdyYWRpZW50KTsKIH0K
IAotc3RhdGljIEdyYWRpZW50OjpDb2xvclN0b3AgaW50ZXJwb2xhdGVDb2xvclN0b3AoR3JhZGll
bnQ6OkNvbG9yU3RvcCBmcm9tLCBHcmFkaWVudDo6Q29sb3JTdG9wIHRvKQorc3RhdGljIEdyYWRp
ZW50OjpDb2xvclN0b3AgaW50ZXJwb2xhdGVDb2xvclN0b3AoY29uc3QgR3JhZGllbnQ6OkNvbG9y
U3RvcCYgZnJvbSwgY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcCYgdG8pCiB7Ci0gICAgYXV0byBb
cjEsIGcxLCBiMSwgYTFdID0gZnJvbS5jb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7Ci0gICAg
YXV0byBbcjIsIGcyLCBiMiwgYTJdID0gdG8uY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwot
Ci0gICAgZmxvYXQgb2Zmc2V0ID0gZnJvbS5vZmZzZXQgKyAodG8ub2Zmc2V0IC0gZnJvbS5vZmZz
ZXQpICogMC41ZjsKLSAgICBmbG9hdCByID0gcjEgKyAocjIgLSByMSkgKiAwLjVmOwotICAgIGZs
b2F0IGcgPSBnMSArIChnMiAtIGcxKSAqIDAuNWY7Ci0gICAgZmxvYXQgYiA9IGIxICsgKGIyIC0g
YjEpICogMC41ZjsKLSAgICBmbG9hdCBhID0gYTEgKyAoYTIgLSBhMSkgKiAwLjVmOwotCi0gICAg
cmV0dXJuIEdyYWRpZW50OjpDb2xvclN0b3Aob2Zmc2V0LCBtYWtlU2ltcGxlQ29sb3IoU1JHQkEg
eyByLCBnLCBiLCBhIH0pKTsKKyAgICByZXR1cm4geyBibGVuZChmcm9tLm9mZnNldCwgdG8ub2Zm
c2V0LCAwLjUpLCBibGVuZChmcm9tLmNvbG9yLCB0by5jb2xvciwgMC41KSB9OwogfQogCi1zdGF0
aWMgY2Fpcm9fcGF0dGVybl90KiBjcmVhdGVDb25pYyhmbG9hdCB4bywgZmxvYXQgeW8sIGZsb2F0
IHIsIGZsb2F0IGFuZ2xlUmFkaWFucywKK3N0YXRpYyBSZWZQdHI8Y2Fpcm9fcGF0dGVybl90PiBj
cmVhdGVDb25pYyhmbG9hdCB4bywgZmxvYXQgeW8sIGZsb2F0IHIsIGZsb2F0IGFuZ2xlUmFkaWFu
cywKICAgICBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yIHN0b3BzLCBmbG9hdCBnbG9iYWxBbHBo
YSkKIHsKLSAgICBjYWlyb19wYXR0ZXJuX3QqIGdyYWRpZW50ID0gY2Fpcm9fcGF0dGVybl9jcmVh
dGVfbWVzaCgpOwotICAgIEdyYWRpZW50OjpDb2xvclN0b3AgZnJvbSwgdG87Ci0KLSAgICAvKiBJ
dCdzIG5vdCBwb3NzaWJsZSB0byBwYWludCBhbiBlbnRpcmUgY2lyY2xlIHdpdGggYSBzaW5nbGUg
QmV6aWVyIGN1cnZlLgotICAgICAqIFRvIGhhdmUgYSBnb29kIGFwcHJveGltYXRpb24gdG8gYSBj
aXJjbGUgaXQncyBuZWNlc3NhcnkgdG8gdXNlIGF0IGxlYXN0Ci0gICAgICogZm91ciBCZXppZXIg
Y3VydmVzLiBTbyB0aHJlZSBhZGRpdGlvbmFsIHN0b3BzIHdpdGggaW50ZXJwb2xhdGVkIGNvbG9y
cwotICAgICAqIGFyZSBhZGRlZCB0byBmb3JjZSBwYWludGluZyBvZiBmb3VyIEJlemllciBjdXJ2
ZXMuICovCisgICAgLy8gSXQncyBub3QgcG9zc2libGUgdG8gcGFpbnQgYW4gZW50aXJlIGNpcmNs
ZSB3aXRoIGEgc2luZ2xlIEJlemllciBjdXJ2ZS4KKyAgICAvLyBUbyBoYXZlIGEgZ29vZCBhcHBy
b3hpbWF0aW9uIHRvIGEgY2lyY2xlIGl0J3MgbmVjZXNzYXJ5IHRvIHVzZSBhdCBsZWFzdAorICAg
IC8vIGZvdXIgQmV6aWVyIGN1cnZlcy4gU28gdGhyZWUgYWRkaXRpb25hbCBzdG9wcyB3aXRoIGlu
dGVycG9sYXRlZCBjb2xvcnMKKyAgICAvLyBhcmUgYWRkZWQgdG8gZm9yY2UgcGFpbnRpbmcgb2Yg
Zm91ciBCZXppZXIgY3VydmVzLgogICAgIGlmIChzdG9wcy5zaXplKCkgPT0gMikgewotICAgICAg
ICBHcmFkaWVudDo6Q29sb3JTdG9wIGZpcnN0ID0gc3RvcHMuYXQoMCk7Ci0gICAgICAgIEdyYWRp
ZW50OjpDb2xvclN0b3AgbGFzdCA9IHN0b3BzLmF0KDEpOwotICAgICAgICBHcmFkaWVudDo6Q29s
b3JTdG9wIHRoaXJkID0gaW50ZXJwb2xhdGVDb2xvclN0b3AoZmlyc3QsIGxhc3QpOwotICAgICAg
ICBHcmFkaWVudDo6Q29sb3JTdG9wIHNlY29uZCA9IGludGVycG9sYXRlQ29sb3JTdG9wKGZpcnN0
LCB0aGlyZCk7Ci0gICAgICAgIEdyYWRpZW50OjpDb2xvclN0b3AgZm91cnRoID0gaW50ZXJwb2xh
dGVDb2xvclN0b3AodGhpcmQsIGxhc3QpOwotICAgICAgICBzdG9wcy5pbnNlcnQoMSwgZm91cnRo
KTsKLSAgICAgICAgc3RvcHMuaW5zZXJ0KDEsIHRoaXJkKTsKLSAgICAgICAgc3RvcHMuaW5zZXJ0
KDEsIHNlY29uZCk7CisgICAgICAgIGF1dG8gdGhpcmQgPSBpbnRlcnBvbGF0ZUNvbG9yU3RvcChz
dG9wcy5maXJzdCgpLCBzdG9wcy5sYXN0KCkpOworICAgICAgICBhdXRvIHNlY29uZCA9IGludGVy
cG9sYXRlQ29sb3JTdG9wKHN0b3BzLmZpcnN0KCksIHRoaXJkKTsKKyAgICAgICAgYXV0byBmb3Vy
dGggPSBpbnRlcnBvbGF0ZUNvbG9yU3RvcCh0aGlyZCwgc3RvcHMubGFzdCgpKTsKKyAgICAgICAg
c3RvcHMuaW5zZXJ0KDEsIFdURk1vdmUoZm91cnRoKSk7CisgICAgICAgIHN0b3BzLmluc2VydCgx
LCBXVEZNb3ZlKHRoaXJkKSk7CisgICAgICAgIHN0b3BzLmluc2VydCgxLCBXVEZNb3ZlKHNlY29u
ZCkpOwogICAgIH0KIAotICAgIC8vIEFkZCBleHRyYSBjb2xvciBzdG9wIGF0IHRoZSBiZWdpbm5p
bmcgaWYgZmlyc3QgZWxlbWVudCBvZmZzZXQgaXMgbm90IHplcm8uCi0gICAgaWYgKHN0b3BzLmF0
KDApLm9mZnNldCA+IDApCi0gICAgICAgIHN0b3BzLmluc2VydCgwLCBHcmFkaWVudDo6Q29sb3JT
dG9wKDAsIHN0b3BzLmF0KDApLmNvbG9yKSk7Ci0gICAgLy8gQWRkIGV4dHJhIGNvbG9yIHN0b3Ag
YXQgdGhlIGVuZCBpZiBsYXN0IGVsZW1lbnQgb2Zmc2V0IGlzIG5vdCB6ZXJvLgotICAgIGlmIChz
dG9wcy5hdChzdG9wcy5zaXplKCkgLSAxKS5vZmZzZXQgPCAxKQotICAgICAgICBzdG9wcy5hcHBl
bmQoR3JhZGllbnQ6OkNvbG9yU3RvcCgxLCBzdG9wcy5hdChzdG9wcy5zaXplKCkgLSAxKS5jb2xv
cikpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdG9wcy5zaXplKCkgLSAxOyBpKysp
IHsKLSAgICAgICAgZnJvbSA9IHN0b3BzLmF0KGkpLCB0byA9IHN0b3BzLmF0KGkgKyAxKTsKLSAg
ICAgICAgYWRkQ29uaWNTZWN0b3IoZ3JhZGllbnQsIHhvLCB5bywgciwgYW5nbGVSYWRpYW5zLCBm
cm9tLCB0bywgZ2xvYmFsQWxwaGEpOwotICAgIH0KKyAgICBpZiAoc3RvcHMuZmlyc3QoKS5vZmZz
ZXQgPiAwLjBmKQorICAgICAgICBzdG9wcy5pbnNlcnQoMCwgR3JhZGllbnQ6OkNvbG9yU3RvcCB7
IDAuMGYsIHN0b3BzLmZpcnN0KCkuY29sb3IgfSk7CisgICAgaWYgKHN0b3BzLmxhc3QoKS5vZmZz
ZXQgPCAxLjBmKQorICAgICAgICBzdG9wcy5hcHBlbmQoeyAxLjBmLCBzdG9wcy5sYXN0KCkuY29s
b3IgfSk7CiAKKyAgICBhdXRvIGdyYWRpZW50ID0gYWRvcHRSZWYoY2Fpcm9fcGF0dGVybl9jcmVh
dGVfbWVzaCgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0b3BzLnNpemUoKSAtIDE7
IGkrKykKKyAgICAgICAgYWRkQ29uaWNTZWN0b3IoZ3JhZGllbnQuZ2V0KCksIHhvLCB5bywgciwg
YW5nbGVSYWRpYW5zLCBzdG9wc1tpXSwgc3RvcHNbaSArIDFdLCBnbG9iYWxBbHBoYSk7CiAgICAg
cmV0dXJuIGdyYWRpZW50OwogfQogCi1jYWlyb19wYXR0ZXJuX3QqIEdyYWRpZW50OjpjcmVhdGVQ
bGF0Zm9ybUdyYWRpZW50KGZsb2F0IGdsb2JhbEFscGhhKQorUmVmUHRyPGNhaXJvX3BhdHRlcm5f
dD4gR3JhZGllbnQ6OmNyZWF0ZVBhdHRlcm4oZmxvYXQgZ2xvYmFsQWxwaGEpCiB7Ci0gICAgY2Fp
cm9fcGF0dGVybl90KiBncmFkaWVudCA9IFdURjo6c3dpdGNoT24obV9kYXRhLAotICAgICAgICBb
Jl0gKGNvbnN0IExpbmVhckRhdGEmIGRhdGEpIC0+IGNhaXJvX3BhdHRlcm5fdCogewotICAgICAg
ICAgICAgcmV0dXJuIGNhaXJvX3BhdHRlcm5fY3JlYXRlX2xpbmVhcihkYXRhLnBvaW50MC54KCks
IGRhdGEucG9pbnQwLnkoKSwgZGF0YS5wb2ludDEueCgpLCBkYXRhLnBvaW50MS55KCkpOworICAg
IGF1dG8gZ3JhZGllbnQgPSBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKKyAgICAgICAgWyZdIChjb25z
dCBMaW5lYXJEYXRhJiBkYXRhKSB7CisgICAgICAgICAgICBhdXRvIGdyYWRpZW50ID0gYWRvcHRS
ZWYoY2Fpcm9fcGF0dGVybl9jcmVhdGVfbGluZWFyKGRhdGEucG9pbnQwLngoKSwgZGF0YS5wb2lu
dDAueSgpLCBkYXRhLnBvaW50MS54KCksIGRhdGEucG9pbnQxLnkoKSkpOworICAgICAgICAgICAg
Zm9yIChhdXRvJiBzdG9wIDogc3RvcHMoKSkKKyAgICAgICAgICAgICAgICBhZGRDb2xvclN0b3BS
R0JBKGdyYWRpZW50LmdldCgpLCBzdG9wLCBnbG9iYWxBbHBoYSk7CisgICAgICAgICAgICByZXR1
cm4gZ3JhZGllbnQ7CiAgICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29uc3QgUmFkaWFsRGF0YSYg
ZGF0YSkgLT4gY2Fpcm9fcGF0dGVybl90KiB7Ci0gICAgICAgICAgICByZXR1cm4gY2Fpcm9fcGF0
dGVybl9jcmVhdGVfcmFkaWFsKGRhdGEucG9pbnQwLngoKSwgZGF0YS5wb2ludDAueSgpLCBkYXRh
LnN0YXJ0UmFkaXVzLCBkYXRhLnBvaW50MS54KCksIGRhdGEucG9pbnQxLnkoKSwgZGF0YS5lbmRS
YWRpdXMpOworICAgICAgICBbJl0gKGNvbnN0IFJhZGlhbERhdGEmIGRhdGEpIHsKKyAgICAgICAg
ICAgIGF1dG8gZ3JhZGllbnQgPSBhZG9wdFJlZihjYWlyb19wYXR0ZXJuX2NyZWF0ZV9yYWRpYWwo
ZGF0YS5wb2ludDAueCgpLCBkYXRhLnBvaW50MC55KCksIGRhdGEuc3RhcnRSYWRpdXMsIGRhdGEu
cG9pbnQxLngoKSwgZGF0YS5wb2ludDEueSgpLCBkYXRhLmVuZFJhZGl1cykpOworICAgICAgICAg
ICAgZm9yIChhdXRvJiBzdG9wIDogc3RvcHMoKSkKKyAgICAgICAgICAgICAgICBhZGRDb2xvclN0
b3BSR0JBKGdyYWRpZW50LmdldCgpLCBzdG9wLCBnbG9iYWxBbHBoYSk7CisgICAgICAgICAgICBy
ZXR1cm4gZ3JhZGllbnQ7CiAgICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29uc3QgQ29uaWNEYXRh
JiBkYXRhKSAgLT4gY2Fpcm9fcGF0dGVybl90KiB7CisgICAgICAgIFsmXSAoY29uc3QgQ29uaWNE
YXRhJiBkYXRhKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogZGF0YSBwYXNzZWQgZm9yIGEgQ29u
aWMgZ3JhZGllbnQgZG9lc24ndCBjb250YWluIGEgcmFkaXVzLiBUaGF0J3MgYXBwYXJlbnRseSBj
b3JyZWN0IGJlY2F1c2UgdGhlIFczQyBzcGVjCiAgICAgICAgICAgICAvLyAoaHR0cHM6Ly93d3cu
dzMub3JnL1RSL2Nzcy1pbWFnZXMtNC8jY29uaWMtZ3JhZGllbnRzKSBzdGF0ZXMgYSBjb25pYyBn
cmFkaWVudCBpcyBvbmx5IGRlZmluZWQgYnkgaXRzIHBvc2l0aW9uIGFuZCBhbmdsZS4KICAgICAg
ICAgICAgIC8vIFRodXMsIGhlcmUgSSBnaXZlIHRoZSByYWRpdXMgYW4gZXh0cmVtZWx5IGxhcmdl
IHZhbHVlLiBUaGUgcmVzdWx0aW5nIGdyYWRpZW50IHdpbGwgYmUgbGF0ZXIgY2xpcHBlZCBieSBm
aWxsUmVjdC4KQEAgLTIwMSw0MiArMTkxLDM2IEBAIGNhaXJvX3BhdHRlcm5fdCogR3JhZGllbnQ6
OmNyZWF0ZVBsYXRmb3JtR3JhZGllbnQoZmxvYXQgZ2xvYmFsQWxwaGEpCiAgICAgICAgIH0KICAg
ICApOwogCi0gICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpDb25pYykgewotICAgICAgICBmb3IgKGNv
bnN0IGF1dG8mIHN0b3AgOiBzdG9wcygpKSB7Ci0gICAgICAgICAgICBhZGRDb2xvclN0b3BSR0JB
KGdyYWRpZW50LCBzdG9wLCBnbG9iYWxBbHBoYSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBz
d2l0Y2ggKG1fc3ByZWFkTWV0aG9kKSB7CiAgICAgY2FzZSBHcmFkaWVudFNwcmVhZE1ldGhvZDo6
UGFkOgotICAgICAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQoZ3JhZGllbnQsIENBSVJPX0VY
VEVORF9QQUQpOworICAgICAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQoZ3JhZGllbnQuZ2V0
KCksIENBSVJPX0VYVEVORF9QQUQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdyYWRpZW50
U3ByZWFkTWV0aG9kOjpSZWZsZWN0OgotICAgICAgICBjYWlyb19wYXR0ZXJuX3NldF9leHRlbmQo
Z3JhZGllbnQsIENBSVJPX0VYVEVORF9SRUZMRUNUKTsKKyAgICAgICAgY2Fpcm9fcGF0dGVybl9z
ZXRfZXh0ZW5kKGdyYWRpZW50LmdldCgpLCBDQUlST19FWFRFTkRfUkVGTEVDVCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgR3JhZGllbnRTcHJlYWRNZXRob2Q6OlJlcGVhdDoKLSAgICAgICAg
Y2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKGdyYWRpZW50LCBDQUlST19FWFRFTkRfUkVQRUFUKTsK
KyAgICAgICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKGdyYWRpZW50LmdldCgpLCBDQUlST19F
WFRFTkRfUkVQRUFUKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2Fpcm9fbWF0cml4
X3QgbWF0cml4ID0gdG9DYWlyb01hdHJpeChtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbik7
CiAgICAgY2Fpcm9fbWF0cml4X2ludmVydCgmbWF0cml4KTsKLSAgICBjYWlyb19wYXR0ZXJuX3Nl
dF9tYXRyaXgoZ3JhZGllbnQsICZtYXRyaXgpOworICAgIGNhaXJvX3BhdHRlcm5fc2V0X21hdHJp
eChncmFkaWVudC5nZXQoKSwgJm1hdHJpeCk7CiAKICAgICByZXR1cm4gZ3JhZGllbnQ7CiB9CiAK
IHZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCiB7Ci0gICAgUmVmUHRyPGNhaXJvX3BhdHRlcm5fdD4gcGxhdGZvcm1HcmFk
aWVudCA9IGFkb3B0UmVmKGNyZWF0ZVBsYXRmb3JtR3JhZGllbnQoMS4wKSk7Ci0gICAgaWYgKCFw
bGF0Zm9ybUdyYWRpZW50KQorICAgIGF1dG8gcGF0dGVybiA9IGNyZWF0ZVBhdHRlcm4oMS4wKTsK
KyAgICBpZiAoIXBhdHRlcm4pCiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChjb250ZXh0
Lmhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBwbGF0Zm9ybUNvbnRleHQgPSAqY29u
dGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIENhaXJvOjpzYXZlKHBsYXRmb3JtQ29udGV4
dCk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0KHBsYXRmb3JtQ29udGV4dCwgcmVjdCwgcGxhdGZvcm1H
cmFkaWVudC5nZXQoKSk7CisgICAgQ2Fpcm86OmZpbGxSZWN0KHBsYXRmb3JtQ29udGV4dCwgcmVj
dCwgcGF0dGVybi5nZXQoKSk7CiAgICAgQ2Fpcm86OnJlc3RvcmUocGxhdGZvcm1Db250ZXh0KTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKaW5kZXggY2Q4NjVhYWEy
NjAxOWZmYzc1YWVlZTkyNjIwMmNmMTEyNTk1YmM4MS4uODkxMzg0MzEwZWJlODE4MjQzNDg0NjYx
Nzk0ODFlZDE3NjEyOWI2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3Bw
CkBAIC0zMywxMSArMzMsMTEgQEAKICNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCiAjaW5j
bHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR3JhZGll
bnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oIgog
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogCi0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFj
dG9yeSBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkoUGxhdGZvcm1Db250
ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCkKQEAgLTE1NCwxMiArMTU0LDEyIEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKIHsKLSAgICBSZWZQ
dHI8Y2Fpcm9fcGF0dGVybl90PiBwbGF0Zm9ybUdyYWRpZW50ID0gYWRvcHRSZWYoZ3JhZGllbnQu
Y3JlYXRlUGxhdGZvcm1HcmFkaWVudCgxLjApKTsKLSAgICBpZiAoIXBsYXRmb3JtR3JhZGllbnQp
CisgICAgYXV0byBwYXR0ZXJuID0gZ3JhZGllbnQuY3JlYXRlUGF0dGVybigxLjApOworICAgIGlm
ICghcGF0dGVybikKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ2Fpcm86OnNhdmUobV9wbGF0Zm9y
bUNvbnRleHQpOwotICAgIENhaXJvOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwg
cGxhdGZvcm1HcmFkaWVudC5nZXQoKSk7CisgICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1D
b250ZXh0LCByZWN0LCBwYXR0ZXJuLmdldCgpKTsKICAgICBDYWlybzo6cmVzdG9yZShtX3BsYXRm
b3JtQ29udGV4dCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvR3JhZGllbnRDRy5jcHAKaW5kZXggOTU1MWU5YmI0YWY3ZDJlNWQ1M2ZiYmVjMDZjY2Y4
ZTEwYzY2MGVlNC4uODEwOTJiOGU3OWY1M2ZiYjgzYzhmNWE2YTc3MjEyZjA0NTM1YjY1NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5j
cHAKQEAgLTM1LDE4ICszNSwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgR3Jh
ZGllbnQ6OnBsYXRmb3JtRGVzdHJveSgpCit2b2lkIEdyYWRpZW50OjpzdG9wc0NoYW5nZWQoKQog
ewotICAgIENHR3JhZGllbnRSZWxlYXNlKG1fZ3JhZGllbnQpOwogICAgIG1fZ3JhZGllbnQgPSBu
dWxscHRyOwogfQogCi1DR0dyYWRpZW50UmVmIEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KCkK
K3ZvaWQgR3JhZGllbnQ6OmNyZWF0ZUNHR3JhZGllbnQoKQogewotICAgIGlmIChtX2dyYWRpZW50
KQotICAgICAgICByZXR1cm4gbV9ncmFkaWVudDsKLQotICAgIHNvcnRTdG9wc0lmTmVjZXNzYXJ5
KCk7CisgICAgc29ydFN0b3BzKCk7CiAKICAgICBhdXRvIGNvbG9yc0FycmF5ID0gYWRvcHRDRihD
RkFycmF5Q3JlYXRlTXV0YWJsZSgwLCBtX3N0b3BzLnNpemUoKSwgJmtDRlR5cGVBcnJheUNhbGxC
YWNrcykpOwogICAgIHVuc2lnbmVkIG51bVN0b3BzID0gbV9zdG9wcy5zaXplKCk7CkBAIC04Miwx
MSArNzgsOSBAQCBDR0dyYWRpZW50UmVmIEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KCkKICAg
ICB9CiAKICAgICBpZiAoaGFzRXh0ZW5kZWRDb2xvcnMpCi0gICAgICAgIG1fZ3JhZGllbnQgPSBD
R0dyYWRpZW50Q3JlYXRlV2l0aENvbG9ycyhleHRlbmRlZFNSR0JDb2xvclNwYWNlUmVmKCksIGNv
bG9yc0FycmF5LmdldCgpLCBsb2NhdGlvbnMuZGF0YSgpKTsKKyAgICAgICAgbV9ncmFkaWVudCA9
IGFkb3B0Q0YoQ0dHcmFkaWVudENyZWF0ZVdpdGhDb2xvcnMoZXh0ZW5kZWRTUkdCQ29sb3JTcGFj
ZVJlZigpLCBjb2xvcnNBcnJheS5nZXQoKSwgbG9jYXRpb25zLmRhdGEoKSkpOwogICAgIGVsc2UK
LSAgICAgICAgbV9ncmFkaWVudCA9IENHR3JhZGllbnRDcmVhdGVXaXRoQ29sb3JDb21wb25lbnRz
KHNSR0JDb2xvclNwYWNlUmVmKCksIGNvbG9yQ29tcG9uZW50cy5kYXRhKCksIGxvY2F0aW9ucy5k
YXRhKCksIG51bVN0b3BzKTsKLQotICAgIHJldHVybiBtX2dyYWRpZW50OworICAgICAgICBtX2dy
YWRpZW50ID0gYWRvcHRDRihDR0dyYWRpZW50Q3JlYXRlV2l0aENvbG9yQ29tcG9uZW50cyhzUkdC
Q29sb3JTcGFjZVJlZigpLCBjb2xvckNvbXBvbmVudHMuZGF0YSgpLCBsb2NhdGlvbnMuZGF0YSgp
LCBudW1TdG9wcykpOwogfQogCiB2b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMTAzLDcgKzk3LDkgQEAgdm9pZCBH
cmFkaWVudDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogdm9pZCBHcmFkaWVudDo6
cGFpbnQoQ0dDb250ZXh0UmVmIHBsYXRmb3JtQ29udGV4dCkKIHsKICAgICBDR0dyYWRpZW50RHJh
d2luZ09wdGlvbnMgZXh0ZW5kT3B0aW9ucyA9IGtDR0dyYWRpZW50RHJhd3NCZWZvcmVTdGFydExv
Y2F0aW9uIHwga0NHR3JhZGllbnREcmF3c0FmdGVyRW5kTG9jYXRpb247Ci0gICAgQ0dHcmFkaWVu
dFJlZiBncmFkaWVudCA9IHBsYXRmb3JtR3JhZGllbnQoKTsKKworICAgIGlmICghbV9ncmFkaWVu
dCkKKyAgICAgICAgY3JlYXRlQ0dHcmFkaWVudCgpOwogCiAgICAgV1RGOjpzd2l0Y2hPbihtX2Rh
dGEsCiAgICAgICAgIFsmXSAoY29uc3QgTGluZWFyRGF0YSYgZGF0YSkgewpAQCAtMTQ2LDcgKzE0
Miw3IEBAIHZvaWQgR3JhZGllbnQ6OnBhaW50KENHQ29udGV4dFJlZiBwbGF0Zm9ybUNvbnRleHQp
CiAgICAgICAgICAgICAgICAgICAgICAgICBDR1BvaW50IGxlZnQgPSBDR1BvaW50TWFrZShmbGlw
ID8gc3RhcnQgKyB3aWR0aCA6IHN0YXJ0LCBib3VuZGluZ0JveC5vcmlnaW4ueSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBDR1BvaW50IHJpZ2h0ID0gQ0dQb2ludE1ha2UoZmxpcCA/IHN0YXJ0
IDogc3RhcnQgKyB3aWR0aCwgYm91bmRpbmdCb3gub3JpZ2luLnkpOwogCi0gICAgICAgICAgICAg
ICAgICAgICAgICBDR0NvbnRleHREcmF3TGluZWFyR3JhZGllbnQocGxhdGZvcm1Db250ZXh0LCBn
cmFkaWVudCwgbGVmdCwgcmlnaHQsIGV4dGVuZE9wdGlvbnMpOworICAgICAgICAgICAgICAgICAg
ICAgICAgQ0dDb250ZXh0RHJhd0xpbmVhckdyYWRpZW50KHBsYXRmb3JtQ29udGV4dCwgbV9ncmFk
aWVudC5nZXQoKSwgbGVmdCwgcmlnaHQsIGV4dGVuZE9wdGlvbnMpOwogCiAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobV9zcHJlYWRNZXRob2QgPT0gR3JhZGllbnRTcHJlYWRNZXRob2Q6OlJl
ZmxlY3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxpcCA9ICFmbGlwOwpAQCAtMTU4
LDcgKzE1NCw3IEBAIHZvaWQgR3JhZGllbnQ6OnBhaW50KENHQ29udGV4dFJlZiBwbGF0Zm9ybUNv
bnRleHQpCiAgICAgICAgICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBjYXNlIEdyYWRpZW50U3ByZWFkTWV0aG9kOjpQYWQ6Ci0gICAgICAgICAgICAgICAg
Q0dDb250ZXh0RHJhd0xpbmVhckdyYWRpZW50KHBsYXRmb3JtQ29udGV4dCwgZ3JhZGllbnQsIGRh
dGEucG9pbnQwLCBkYXRhLnBvaW50MSwgZXh0ZW5kT3B0aW9ucyk7CisgICAgICAgICAgICAgICAg
Q0dDb250ZXh0RHJhd0xpbmVhckdyYWRpZW50KHBsYXRmb3JtQ29udGV4dCwgbV9ncmFkaWVudC5n
ZXQoKSwgZGF0YS5wb2ludDAsIGRhdGEucG9pbnQxLCBleHRlbmRPcHRpb25zKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfSwKICAgICAgICAgWyZdIChjb25zdCBSYWRpYWxEYXRhJiBkYXRhKSB7
CkBAIC0xNzMsNyArMTY5LDcgQEAgdm9pZCBHcmFkaWVudDo6cGFpbnQoQ0dDb250ZXh0UmVmIHBs
YXRmb3JtQ29udGV4dCkKICAgICAgICAgICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0ocGxh
dGZvcm1Db250ZXh0LCAtZGF0YS5wb2ludDAueCgpLCAtZGF0YS5wb2ludDAueSgpKTsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgQ0dDb250ZXh0RHJhd1JhZGlhbEdyYWRpZW50KHBsYXRm
b3JtQ29udGV4dCwgZ3JhZGllbnQsIGRhdGEucG9pbnQwLCBkYXRhLnN0YXJ0UmFkaXVzLCBkYXRh
LnBvaW50MSwgZGF0YS5lbmRSYWRpdXMsIGV4dGVuZE9wdGlvbnMpOworICAgICAgICAgICAgQ0dD
b250ZXh0RHJhd1JhZGlhbEdyYWRpZW50KHBsYXRmb3JtQ29udGV4dCwgbV9ncmFkaWVudC5nZXQo
KSwgZGF0YS5wb2ludDAsIGRhdGEuc3RhcnRSYWRpdXMsIGRhdGEucG9pbnQxLCBkYXRhLmVuZFJh
ZGl1cywgZXh0ZW5kT3B0aW9ucyk7CiAKICAgICAgICAgICAgIGlmIChuZWVkU2NhbGluZykKICAg
ICAgICAgICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKHBsYXRmb3JtQ29udGV4dCk7CkBA
IC0xODYsNyArMTgyLDcgQEAgdm9pZCBHcmFkaWVudDo6cGFpbnQoQ0dDb250ZXh0UmVmIHBsYXRm
b3JtQ29udGV4dCkKICAgICAgICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNv
bnRleHQsIGRhdGEucG9pbnQwLngoKSwgZGF0YS5wb2ludDAueSgpKTsKICAgICAgICAgICAgIENH
Q29udGV4dFJvdGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQsIChDR0Zsb2F0KS1NX1BJXzIpOwogICAg
ICAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dCwgLWRhdGEucG9p
bnQwLngoKSwgLWRhdGEucG9pbnQwLnkoKSk7Ci0gICAgICAgICAgICBDR0NvbnRleHREcmF3Q29u
aWNHcmFkaWVudChwbGF0Zm9ybUNvbnRleHQsIHBsYXRmb3JtR3JhZGllbnQoKSwgZGF0YS5wb2lu
dDAsIGRhdGEuYW5nbGVSYWRpYW5zKTsKKyAgICAgICAgICAgIENHQ29udGV4dERyYXdDb25pY0dy
YWRpZW50KHBsYXRmb3JtQ29udGV4dCwgbV9ncmFkaWVudC5nZXQoKSwgZGF0YS5wb2ludDAsIGRh
dGEuYW5nbGVSYWRpYW5zKTsKICAgICAgICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUocGxh
dGZvcm1Db250ZXh0KTsKICNlbHNlCiAgICAgICAgICAgICBVTlVTRURfUEFSQU0oZGF0YSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHAKaW5kZXggYTVlNTUxYTk4MDc4MjA0NThlMjlhNzAxYTM3MmM3MzYzMjM4
Mzg3MC4uZmJkZDBhM2JjOWNiNGE4MGRkMDlmYTQ5NjU1M2E5YmIwM2JjZDdiMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29u
dGV4dENHLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5o
IgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVjb3JkZXIuaCIKICNpbmNsdWRlICJGbG9hdENvbnZl
cnNpb24uaCIKKyNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZUNHLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRl
ICJJbWFnZU9yaWVudGF0aW9uLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAppbmRl
eCAyNWJmMmI5YjkzNTQyZTIwOTIwOTA4ZTA0YWMyNmMwMDliM2VlYjhhLi44ZjExMmQ3MThhOTJi
MTYyNTE2NWVmMzk4MmQwNzc2Njk0YTlhNWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1zLmgKQEAgLTI3LDE1ICsyNywxNCBAQAogCiAjaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbi5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0LmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5o
IgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5j
bHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIklt
YWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgogI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5j
bHVkZSA8d3RmL1R5cGVDYXN0cy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJv
T3BlcmF0aW9uUmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAKaW5kZXggYmQ1
YmM1NDIyMTZiOTk3NmY2NjZjNDQwNzI3YmY2MGNlZGQ3Zjg5Yy4uMDBiZThlOTFkMzU1NzdiYjQ2
OGI4Mzg4MzI1NmI3ZWQ5OWFmYzY4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9O
aWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2lu
Y2x1ZGUgIkNhaXJvT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIK
KyNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVk
ZSAiTmljb3NpYVBhaW50aW5nT3BlcmF0aW9uUmVwbGF5Q2Fpcm8uaCIKICNpbmNsdWRlIDx0eXBl
X3RyYWl0cz4KQEAgLTI5MSw3ICsyOTIsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQogICAg
ICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0PihyZWN0
LCBhZG9wdFJlZihncmFkaWVudC5jcmVhdGVQbGF0Zm9ybUdyYWRpZW50KDEuMCkpKSk7CisgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGdyYWRpZW50LmNyZWF0ZVBhdHRl
cm4oMS4wKSkpOwogfQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRv
ciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9u
cy5jcHAKaW5kZXggMTUwMjQ2ODE0OTQxZDY3NzM1MGVkMzI4ODY1ZmM4N2U3MDRiYWJjMC4uODgz
NWY4OGQxYmJjZDIwM2MzMjU2MmRhMjQxNGNiYzI3YjZmYjBmOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9u
cy5jcHAKQEAgLTMwMSw3ICszMDEsNyBAQCBGaWxsU291cmNlOjpGaWxsU291cmNlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JgogICAgICAg
ICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTTsgLy8gRklYTUU6IFRoaXMgaXNuJ3QgcmVh
bGx5IG5lZWRlZCBvbiBXaW5kb3dzCiAgICAgICAgIGJydXNoID0gc3RhdGUuZmlsbFBhdHRlcm4t
PmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb250ZXh0LCBzdGF0ZS5hbHBoYSwgdXNlclRvQmFzZUNU
TSk7CiAgICAgfSBlbHNlIGlmIChzdGF0ZS5maWxsR3JhZGllbnQgJiYgIXN0YXRlLmZpbGxHcmFk
aWVudC0+c3RvcHMoKS5pc0VtcHR5KCkpCi0gICAgICAgIGJydXNoID0gc3RhdGUuZmlsbEdyYWRp
ZW50LT5jcmVhdGVQbGF0Zm9ybUdyYWRpZW50SWZOZWNlc3NhcnkocGxhdGZvcm1Db250ZXh0LnJl
bmRlclRhcmdldCgpKTsKKyAgICAgICAgYnJ1c2ggPSBzdGF0ZS5maWxsR3JhZGllbnQtPmNyZWF0
ZUJydXNoKHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7CiAgICAgZWxzZQogICAgICAg
ICBicnVzaCA9IHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihjb2xvcik7CiB9CkBAIC0z
MTgsNyArMzE4LDcgQEAgU3Ryb2tlU291cmNlOjpTdHJva2VTb3VyY2UoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmIHN0YXRlLCBjb25zdCBHcmFwaGljc0NvbnQKICAgICAgICAgQWZmaW5lVHJh
bnNmb3JtIHVzZXJUb0Jhc2VDVE07IC8vIEZJWE1FOiBUaGlzIGlzbid0IHJlYWxseSBuZWVkZWQg
b24gV2luZG93cwogICAgICAgICBicnVzaCA9IHN0YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBs
YXRmb3JtUGF0dGVybihjb250ZXh0LCBzdGF0ZS5hbHBoYSwgdXNlclRvQmFzZUNUTSk7CiAgICAg
fSBlbHNlIGlmIChzdGF0ZS5zdHJva2VHcmFkaWVudCkKLSAgICAgICAgYnJ1c2ggPSBzdGF0ZS5z
dHJva2VHcmFkaWVudC0+Y3JlYXRlUGxhdGZvcm1HcmFkaWVudElmTmVjZXNzYXJ5KHBsYXRmb3Jt
Q29udGV4dC5yZW5kZXJUYXJnZXQoKSk7CisgICAgICAgIGJydXNoID0gc3RhdGUuc3Ryb2tlR3Jh
ZGllbnQtPmNyZWF0ZUJydXNoKHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7CiAgICAg
ZWxzZQogICAgICAgICBicnVzaCA9IHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihjb2xv
cik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhZGllbnREaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKaW5kZXggMDRlNGQ3NjQ5MzJmYTg5NTQ4MDI4ZmUzNTll
MzNkOGI2NTY3NDk1ZC4uMGRmZWFiNjcyZWQyMWUxZGI1YzZkYjc4YjFiMTRkZDczOTQ5YTBiMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50
RGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFkaWVudERpcmVjdDJELmNwcApAQCAtMzEsMjkgKzMxLDE0IEBACiAjaW5jbHVkZSAiUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQuaCIKICNpbmNsdWRlIDxkMmQxLmg+CiAjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKICNkZWZpbmUgR1JBRElF
TlRfRFJBV0lORyAzCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBHcmFkaWVudDo6cGxh
dGZvcm1EZXN0cm95KCkKK3ZvaWQgR3JhZGllbnQ6OnN0b3BzQ2hhbmdlZCgpCiB7Ci0gICAgaWYg
KG1fZ3JhZGllbnQpCi0gICAgICAgIG1fZ3JhZGllbnQtPlJlbGVhc2UoKTsKLSAgICBtX2dyYWRp
ZW50ID0gbnVsbHB0cjsKLX0KLQotSUQyRDFCcnVzaCogR3JhZGllbnQ6OnBsYXRmb3JtR3JhZGll
bnQoKQotewotICAgIEFTU0VSVChtX2dyYWRpZW50KTsKLSAgICByZXR1cm4gbV9ncmFkaWVudDsK
LX0KLQotSUQyRDFCcnVzaCogR3JhZGllbnQ6OmNyZWF0ZVBsYXRmb3JtR3JhZGllbnRJZk5lY2Vz
c2FyeShJRDJEMVJlbmRlclRhcmdldCogY29udGV4dCkKLXsKLSAgICBnZW5lcmF0ZUdyYWRpZW50
KGNvbnRleHQpOwotICAgIHJldHVybiBtX2dyYWRpZW50OworICAgIG1fYnJ1c2ggPSBudWxscHRy
OwogfQogCiBzdGF0aWMgYm9vbCBjaXJjbGVJc0VudGlyZWx5Q29udGFpbmVkKGNvbnN0IEZsb2F0
UG9pbnQmIGNlbnRlckEsIGZsb2F0IHJhZGl1c0EsIGNvbnN0IEZsb2F0UG9pbnQmIGNlbnRlckIs
IGZsb2F0IHJhZGl1c0IpCkBAIC02NSwxNSArNTAsMTYgQEAgc3RhdGljIGJvb2wgY2lyY2xlSXNF
bnRpcmVseUNvbnRhaW5lZChjb25zdCBGbG9hdFBvaW50JiBjZW50ZXJBLCBmbG9hdCByYWRpdXNB
LAogICAgIHJldHVybiBkZWx0YVggKiBkZWx0YVggKyBkZWx0YVkgKiBkZWx0YVkgPCBkZWx0YVJh
ZGl1cyAqIGRlbHRhUmFkaXVzICYmIHJhZGl1c0EgPCByYWRpdXNCOwogfQogCi12b2lkIEdyYWRp
ZW50OjpnZW5lcmF0ZUdyYWRpZW50KElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCitJ
RDJEMUJydXNoKiBHcmFkaWVudDo6Y3JlYXRlQnJ1c2goSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRl
clRhcmdldCkKIHsKLSAgICBzb3J0U3RvcHNJZk5lY2Vzc2FyeSgpOworICAgIHNvcnRTdG9wcygp
OwogCiAgICAgVmVjdG9yPEQyRDFfR1JBRElFTlRfU1RPUD4gZ3JhZGllbnRTdG9wczsKLSAgICAv
LyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIEV4dGVuZGVkQ29sb3IuCi0gICAgZm9yIChhdXRvIHN0
b3AgOiBtX3N0b3BzKSB7CisgICAgZ3JhZGllbnRTdG9wcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KG1fc3RvcHMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIHN0b3AgOiBtX3N0b3BzKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igbm9uLXNSR0JBIGNvbG9yIHNwYWNlcy4KICAg
ICAgICAgYXV0byBbciwgZywgYiwgYV0gc3RvcC5jb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7
Ci0gICAgICAgIGdyYWRpZW50U3RvcHMuYXBwZW5kKEQyRDE6OkdyYWRpZW50U3RvcChzdG9wLm9m
ZnNldCwgRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEpKSk7CisgICAgICAgIGdyYWRpZW50U3RvcHMu
Z3JhZGllbnRTdG9wcy51bmNoZWNrZWRBcHBlbmQoRDJEMTo6R3JhZGllbnRTdG9wKHN0b3Aub2Zm
c2V0LCBEMkQxOjpDb2xvckYociwgZywgYiwgYSkpKTsKICAgICB9CiAKICAgICBXVEY6OnN3aXRj
aE9uKG1fZGF0YSwKQEAgLTEyMiwxMSArMTA4LDYgQEAgdm9pZCBHcmFkaWVudDo6Z2VuZXJhdGVH
cmFkaWVudChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQogICAgIEhSRVNVTFQgaHIg
PSByZW5kZXJUYXJnZXQtPkNyZWF0ZUdyYWRpZW50U3RvcENvbGxlY3Rpb24oZ3JhZGllbnRTdG9w
cy5kYXRhKCksIGdyYWRpZW50U3RvcHMuc2l6ZSgpLCAmZ3JhZGllbnRTdG9wQ29sbGVjdGlvbik7
CiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAKLSAgICBpZiAobV9ncmFkaWVu
dCkgewotICAgICAgICBtX2dyYWRpZW50LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1fZ3JhZGllbnQg
PSBudWxscHRyOwotICAgIH0KLQogICAgIFdURjo6c3dpdGNoT24obV9kYXRhLAogICAgICAgICBb
Jl0gKGNvbnN0IExpbmVhckRhdGEmIGRhdGEpIHsKICAgICAgICAgICAgIElEMkQxTGluZWFyR3Jh
ZGllbnRCcnVzaCogbGluZWFyR3JhZGllbnQgPSBudWxscHRyOwpAQCAtMTM1LDcgKzExNiw3IEBA
IHZvaWQgR3JhZGllbnQ6OmdlbmVyYXRlR3JhZGllbnQoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRl
clRhcmdldCkKICAgICAgICAgICAgICAgICBEMkQxOjpCcnVzaFByb3BlcnRpZXMoKSwgZ3JhZGll
bnRTdG9wQ29sbGVjdGlvbi5nZXQoKSwKICAgICAgICAgICAgICAgICAmbGluZWFyR3JhZGllbnQp
OwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgICAgICAg
ICBtX2dyYWRpZW50ID0gbGluZWFyR3JhZGllbnQ7CisgICAgICAgICAgICBtX2JydXNoID0gYWRv
cHRDT00obGluZWFyR3JhZGllbnQpOwogICAgICAgICB9LAogICAgICAgICBbJl0gKGNvbnN0IFJh
ZGlhbERhdGEmIGRhdGEpIHsKICAgICAgICAgICAgIEZsb2F0U2l6ZSBvZmZzZXQ7CkBAIC0xNTQs
MTQgKzEzNSwxNSBAQCB2b2lkIEdyYWRpZW50OjpnZW5lcmF0ZUdyYWRpZW50KElEMkQxUmVuZGVy
VGFyZ2V0KiByZW5kZXJUYXJnZXQpCiAgICAgICAgICAgICAgICAgRDJEMTo6QnJ1c2hQcm9wZXJ0
aWVzKCksIGdyYWRpZW50U3RvcENvbGxlY3Rpb24uZ2V0KCksCiAgICAgICAgICAgICAgICAgJnJh
ZGlhbEdyYWRpZW50KTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikp
OwotICAgICAgICAgICAgbV9ncmFkaWVudCA9IHJhZGlhbEdyYWRpZW50OworICAgICAgICAgICAg
bV9icnVzaCA9IGFkb3B0Q09NKHJhZGlhbEdyYWRpZW50KTsKICAgICAgICAgfSwKICAgICAgICAg
WyZdIChjb25zdCBDb25pY0RhdGEmKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50
IGNvbmljIGdyYWRpZW50IHJlbmRlcmluZy4KKyAgICAgICAgICAgIG1fYnJ1c2ggPSBudWxscHRy
OwogICAgICAgICB9CiAgICAgKTsKIAotICAgIGhhc2goKTsKKyAgICByZXR1cm4gbV9icnVzaC5n
ZXQoKTsKIH0KIAogdm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTE3MCwxNSArMTUyLDE2IEBAIHZvaWQgR3JhZGll
bnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CiAKICAgICBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKICAgICAgICAgWyZdIChjb25zdCBMaW5lYXJE
YXRhJiBkYXRhKSB7Ci0gICAgICAgICAgICBpZiAoIW1fY2FjaGVkSGFzaCB8fCAhbV9ncmFkaWVu
dCkKLSAgICAgICAgICAgICAgICBnZW5lcmF0ZUdyYWRpZW50KGQyZENvbnRleHQpOworICAgICAg
ICAgICAgLy8gRklYTUU6IElmIHdlIGhhdmUgYSBicnVzaCwgd2h5IGNhbiB3ZSByZS11c2UgaXQ/
IFdoYXQgZ3VhcmFudGVlcyBpdCdzIHJpZ2h0IGZvciB0aGlzIGNvbnRleHQ/CisgICAgICAgICAg
ICBpZiAoIW1fYnJ1c2gpCisgICAgICAgICAgICAgICAgY3JlYXRlQnJ1c2goZDJkQ29udGV4dCk7
CiAKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgICAgICAgICAgZDJkQ29udGV4dC0+U2V0VGFncyhH
UkFESUVOVF9EUkFXSU5HLCBfX0xJTkVfXyk7CiAjZW5kaWYKIAogICAgICAgICAgICAgY29uc3Qg
RDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7Ci0gICAgICAgICAgICBkMmRDb250ZXh0LT5GaWxs
UmVjdGFuZ2xlKCZkMmRSZWN0LCBtX2dyYWRpZW50KTsKKyAgICAgICAgICAgIGQyZENvbnRleHQt
PkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIG1fYnJ1c2guZ2V0KCkpOwogICAgICAgICB9LAogICAg
ICAgICBbJl0gKGNvbnN0IFJhZGlhbERhdGEmIGRhdGEpIHsKICAgICAgICAgICAgIGJvb2wgbmVl
ZFNjYWxpbmcgPSBkYXRhLmFzcGVjdFJhdGlvICE9IDE7CkBAIC0xOTksMTUgKzE4MiwxNiBAQCB2
b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogICAgICAgICAgICAgICAgIGQyZENvbnRleHQtPlNldFRyYW5zZm9ybShjdG0p
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIW1fY2FjaGVkSGFzaCB8fCAhbV9n
cmFkaWVudCkKLSAgICAgICAgICAgICAgICBnZW5lcmF0ZUdyYWRpZW50KGQyZENvbnRleHQpOwor
ICAgICAgICAgICAgLy8gRklYTUU6IElmIHdlIGhhdmUgYSBicnVzaCwgd2h5IGNhbiB3ZSByZS11
c2UgaXQ/IFdoYXQgZ3VhcmFudGVlcyBpdCdzIHJpZ2h0IGZvciB0aGlzIGNvbnRleHQ/CisgICAg
ICAgICAgICBpZiAoIW1fYnJ1c2gpCisgICAgICAgICAgICAgICAgY3JlYXRlQnJ1c2goZDJkQ29u
dGV4dCk7CiAKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgICAgICAgICAgZDJkQ29udGV4dC0+U2V0
VGFncyhHUkFESUVOVF9EUkFXSU5HLCBfX0xJTkVfXyk7CiAjZW5kaWYKIAogICAgICAgICAgICAg
Y29uc3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7Ci0gICAgICAgICAgICBkMmRDb250ZXh0
LT5GaWxsUmVjdGFuZ2xlKCZkMmRSZWN0LCBtX2dyYWRpZW50KTsKKyAgICAgICAgICAgIGQyZENv
bnRleHQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIG1fYnJ1c2guZ2V0KCkpOwogCiAgICAgICAg
ICAgICBpZiAobmVlZFNjYWxpbmcpCiAgICAgICAgICAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0SW1wbERpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuY3BwCmluZGV4IGRjOWY1ZmU2ZmQ3
NDc0MWEwYzU2MmNmOWNjN2FlZTExNzE4ZjkzY2QuLmQ2NDQ1ZDcwY2IzMDM3ZTcyYWUyOTA2ZDY2
MzZlZmZiNDQ4MWQ3NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuY3Bw
CkBAIC0xNTUsMTEgKzE1NSwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgYwogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBHcmFkaWVudCYgZ3JhZGllbnQpCiB7Ci0gICAgQ09NUHRyPElEMkQxQnJ1c2g+IHBsYXRmb3Jt
R3JhZGllbnQgPSBncmFkaWVudC5jcmVhdGVQbGF0Zm9ybUdyYWRpZW50SWZOZWNlc3NhcnkobV9w
bGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotICAgIGlmICghcGxhdGZvcm1HcmFkaWVu
dCkKKyAgICBhdXRvIGJydXNoID0gZ3JhZGllbnQuY3JlYXRlQnJ1c2gobV9wbGF0Zm9ybUNvbnRl
eHQucmVuZGVyVGFyZ2V0KCkpOworICAgIGlmICghYnJ1c2gpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIERpcmVjdDJEOjpmaWxsUmVjdFdpdGhHcmFkaWVudChtX3BsYXRmb3JtQ29udGV4dCwgcmVj
dCwgcGxhdGZvcm1HcmFkaWVudC5nZXQoKSk7CisgICAgRGlyZWN0MkQ6OmZpbGxSZWN0V2l0aEdy
YWRpZW50KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBicnVzaC5nZXQoKSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0
b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KaW5kZXggNWY2NTMwM2NlYTdiMTBhOTAzMTNlN2M5OTkz
Yzk3OTdmMGIzMzllZC4uMDlkODA1OGI1YjI1NmJjNWI0YzliYTlkNGFiM2ExZTU1Yzc0ZmQxYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFj
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5t
bQpAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiAKLSNp
bXBvcnQgIkZsb2F0UG9pbnQuaCIKKyNpbXBvcnQgIkdyYWRpZW50LmgiCiAjaW1wb3J0ICJHcmFw
aGljc0xheWVyLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJOU1Njcm9sbGVySW1w
RGV0YWlscy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCmlu
ZGV4IDQyNTc1ZjBlNDVmZWMyMmM5YWJmZjY3NTMxOGE5MjE3ZjZkZWQyZjcuLmVlMTg5Y2Y5ODcz
ZjBjMGEwMzYzZTM2ZTM3NDQxMzBkODRjMmE5N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVJT1MubW0KQEAgLTkwMCw3ICs5MDAsNyBAQCBib29sIFJlbmRlclRoZW1l
SU9TOjpwYWludFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0
IFBhaW50SQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNvbnN0IGludCBwcm9ncmVzc0Jh
ckhlaWdodCA9IDk7Ci0gICAgY29uc3QgZmxvYXQgdmVydGljYWxPZmZzZXQgPSAocmVjdC5oZWln
aHQoKSAtIHByb2dyZXNzQmFySGVpZ2h0KSAvIDIuMDsKKyAgICBjb25zdCBmbG9hdCB2ZXJ0aWNh
bE9mZnNldCA9IChyZWN0LmhlaWdodCgpIC0gcHJvZ3Jlc3NCYXJIZWlnaHQpIC8gMi4wZjsKIAog
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihwYWludEluZm8uY29udGV4
dCgpKTsKICAgICBpZiAocmVjdC53aWR0aCgpIDwgMTAgfHwgcmVjdC5oZWlnaHQoKSA8IDkpIHsK
QEAgLTkxMiwyMSArOTEyLDIxIEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UHJvZ3Jlc3NC
YXIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUGFpbnRJCiAgICAgLy8gMSkg
RHJhdyB0aGUgcHJvZ3Jlc3MgYmFyIHRyYWNrLgogICAgIC8vIDEuMSkgRHJhdyB0aGUgd2hpdGUg
YmFja2dyb3VuZCB3aXRoIGdyZXkgZ3JhZGllbnQgYm9yZGVyLgogICAgIEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0KCk7Ci0gICAgY29udGV4dC5zZXRTdHJva2VU
aGlja25lc3MoMC42OCk7CisgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoMC42OGYpOwog
ICAgIGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwogCiAgICAgY29uc3QgZmxv
YXQgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiA9IHJlY3QueSgpICsgdmVydGljYWxPZmZzZXQ7
CiAgICAgYXV0byBzdHJva2VHcmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoR3JhZGllbnQ6Okxp
bmVhckRhdGEgeyBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9u
KSwgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIHByb2dy
ZXNzQmFySGVpZ2h0IC0gMSkgfSk7Ci0gICAgc3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgw
LjAsIG1ha2VTaW1wbGVDb2xvcigxNDEsIDE0MSwgMTQxKSk7Ci0gICAgc3Ryb2tlR3JhZGllbnQt
PmFkZENvbG9yU3RvcCgwLjQ1LCBtYWtlU2ltcGxlQ29sb3IoMjM4LCAyMzgsIDIzOCkpOwotICAg
IHN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC41NSwgbWFrZVNpbXBsZUNvbG9yKDIzOCwg
MjM4LCAyMzgpKTsKLSAgICBzdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDEuMCwgbWFrZVNp
bXBsZUNvbG9yKDE0MSwgMTQxLCAxNDEpKTsKKyAgICBzdHJva2VHcmFkaWVudC0+YWRkQ29sb3JT
dG9wKHsgMC4wZiwgbWFrZVNpbXBsZUNvbG9yKDE0MSwgMTQxLCAxNDEpIH0pOworICAgIHN0cm9r
ZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoeyAwLjQ1ZiwgbWFrZVNpbXBsZUNvbG9yKDIzOCwgMjM4
LCAyMzgpIH0pOworICAgIHN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoeyAwLjU1ZiwgbWFr
ZVNpbXBsZUNvbG9yKDIzOCwgMjM4LCAyMzgpIH0pOworICAgIHN0cm9rZUdyYWRpZW50LT5hZGRD
b2xvclN0b3AoeyAxLjBmLCBtYWtlU2ltcGxlQ29sb3IoMTQxLCAxNDEsIDE0MSkgfSk7CiAgICAg
Y29udGV4dC5zZXRTdHJva2VHcmFkaWVudChXVEZNb3ZlKHN0cm9rZUdyYWRpZW50KSk7CiAKICAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2spOwogCiAgICAgUGF0aCB0cmFja1Bh
dGg7Ci0gICAgRmxvYXRSZWN0IHRyYWNrUmVjdChyZWN0LngoKSArIDAuMjUsIHZlcnRpY2FsUmVu
ZGVyaW5nUG9zaXRpb24gKyAwLjI1LCByZWN0LndpZHRoKCkgLSAwLjUsIHByb2dyZXNzQmFySGVp
Z2h0IC0gMC41KTsKKyAgICBGbG9hdFJlY3QgdHJhY2tSZWN0KHJlY3QueCgpICsgMC4yNWYsIHZl
cnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyAwLjI1ZiwgcmVjdC53aWR0aCgpIC0gMC41ZiwgcHJv
Z3Jlc3NCYXJIZWlnaHQgLSAwLjVmKTsKICAgICBGbG9hdFNpemUgcm91bmRlZENvcm5lclJhZGl1
cyg1LCA0KTsKICAgICB0cmFja1BhdGguYWRkUm91bmRlZFJlY3QodHJhY2tSZWN0LCByb3VuZGVk
Q29ybmVyUmFkaXVzKTsKICAgICBjb250ZXh0LmRyYXdQYXRoKHRyYWNrUGF0aCk7CkBAIC05MzYs
OSArOTM2LDkgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0Jhcihjb25zdCBS
ZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBQYWludEkKICAgICBwYWludEluZm8uY29udGV4
dCgpLmNsaXBSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KGJvcmRlciwgcm91bmRlZENvcm5l
clJhZGl1cywgcm91bmRlZENvcm5lclJhZGl1cywgcm91bmRlZENvcm5lclJhZGl1cywgcm91bmRl
ZENvcm5lclJhZGl1cykpOwogCiAgICAgZmxvYXQgdXBwZXJHcmFkaWVudEhlaWdodCA9IHByb2dy
ZXNzQmFySGVpZ2h0IC8gMi47Ci0gICAgYXV0byB1cHBlckdyYWRpZW50ID0gR3JhZGllbnQ6OmNy
ZWF0ZShHcmFkaWVudDo6TGluZWFyRGF0YSB7IEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2Fs
UmVuZGVyaW5nUG9zaXRpb24gKyAwLjUpLCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJl
bmRlcmluZ1Bvc2l0aW9uICsgdXBwZXJHcmFkaWVudEhlaWdodCAtIDEuNSkgfSk7Ci0gICAgdXBw
ZXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgbWFrZVNpbXBsZUNvbG9yKDEzMywgMTMzLCAx
MzMsIDE4OCkpOwotICAgIHVwcGVyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgxLjAsIG1ha2VTaW1w
bGVDb2xvcigxOCwgMTgsIDE4LCA1MSkpOworICAgIGF1dG8gdXBwZXJHcmFkaWVudCA9IEdyYWRp
ZW50OjpjcmVhdGUoR3JhZGllbnQ6OkxpbmVhckRhdGEgeyBGbG9hdFBvaW50KHJlY3QueCgpLCB2
ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgMC41ZiksIEZsb2F0UG9pbnQocmVjdC54KCksIHZl
cnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyB1cHBlckdyYWRpZW50SGVpZ2h0IC0gMS41KSB9KTsK
KyAgICB1cHBlckdyYWRpZW50LT5hZGRDb2xvclN0b3AoeyAwLjBmLCBtYWtlU2ltcGxlQ29sb3Io
MTMzLCAxMzMsIDEzMywgMTg4KSB9KTsKKyAgICB1cHBlckdyYWRpZW50LT5hZGRDb2xvclN0b3Ao
eyAxLjBmLCBtYWtlU2ltcGxlQ29sb3IoMTgsIDE4LCAxOCwgNTEpIH0pOwogICAgIGNvbnRleHQu
c2V0RmlsbEdyYWRpZW50KFdURk1vdmUodXBwZXJHcmFkaWVudCkpOwogCiAgICAgY29udGV4dC5m
aWxsUmVjdChGbG9hdFJlY3QocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24sIHJl
Y3Qud2lkdGgoKSwgdXBwZXJHcmFkaWVudEhlaWdodCkpOwpAQCAtOTQ3LDI3ICs5NDcsMjcgQEAg
Ym9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3Qm
IHJlbmRlcmVyLCBjb25zdCBQYWludEkKICAgICBpZiAocmVuZGVyUHJvZ3Jlc3MuaXNEZXRlcm1p
bmF0ZSgpKSB7CiAgICAgICAgIC8vIDIpIERyYXcgdGhlIHByb2dyZXNzIGJhci4KICAgICAgICAg
ZG91YmxlIHBvc2l0aW9uID0gY2xhbXBUbyhyZW5kZXJQcm9ncmVzcy5wb3NpdGlvbigpLCAwLjAs
IDEuMCk7Ci0gICAgICAgIGRvdWJsZSBiYXJXaWR0aCA9IHBvc2l0aW9uICogcmVjdC53aWR0aCgp
OwotICAgICAgICBhdXRvIGJhckdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShHcmFkaWVudDo6
TGluZWFyRGF0YSB7IEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRp
b24gKyAwLjUpLCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9u
ICsgcHJvZ3Jlc3NCYXJIZWlnaHQgLSAxKSB9KTsKLSAgICAgICAgYmFyR3JhZGllbnQtPmFkZENv
bG9yU3RvcCgwLjAsIG1ha2VTaW1wbGVDb2xvcigxOTUsIDIxNywgMjQ3KSk7Ci0gICAgICAgIGJh
ckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC40NSwgbWFrZVNpbXBsZUNvbG9yKDExOCwgMTY0LCAy
MjgpKTsKLSAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjQ5LCBtYWtlU2ltcGxl
Q29sb3IoMTE4LCAxNjQsIDIyOCkpOwotICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9w
KDAuNTEsIG1ha2VTaW1wbGVDb2xvcigzNiwgMTE0LCAyMTApKTsKLSAgICAgICAgYmFyR3JhZGll
bnQtPmFkZENvbG9yU3RvcCgwLjU1LCBtYWtlU2ltcGxlQ29sb3IoMzYsIDExNCwgMjEwKSk7Ci0g
ICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMS4wLCBtYWtlU2ltcGxlQ29sb3IoNTcs
IDE0MiwgMjQ0KSk7CisgICAgICAgIGZsb2F0IGJhcldpZHRoID0gcG9zaXRpb24gKiByZWN0Lndp
ZHRoKCk7CisgICAgICAgIGF1dG8gYmFyR3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEdyYWRp
ZW50OjpMaW5lYXJEYXRhIHsgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQ
b3NpdGlvbiArIDAuNWYpLCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bv
c2l0aW9uICsgcHJvZ3Jlc3NCYXJIZWlnaHQgLSAxKSB9KTsKKyAgICAgICAgYmFyR3JhZGllbnQt
PmFkZENvbG9yU3RvcCh7IDAuMGYsIG1ha2VTaW1wbGVDb2xvcigxOTUsIDIxNywgMjQ3KSB9KTsK
KyAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCh7IDAuNDVmLCBtYWtlU2ltcGxlQ29s
b3IoMTE4LCAxNjQsIDIyOCkgfSk7CisgICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3Ao
eyAwLjQ5ZiwgbWFrZVNpbXBsZUNvbG9yKDExOCwgMTY0LCAyMjgpIH0pOworICAgICAgICBiYXJH
cmFkaWVudC0+YWRkQ29sb3JTdG9wKHsgMC41MWYsIG1ha2VTaW1wbGVDb2xvcigzNiwgMTE0LCAy
MTApIH0pOworICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKHsgMC41NWYsIG1ha2VT
aW1wbGVDb2xvcigzNiwgMTE0LCAyMTApIH0pOworICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29s
b3JTdG9wKHsgMS4wZiwgbWFrZVNpbXBsZUNvbG9yKDU3LCAxNDIsIDI0NCkgfSk7CiAgICAgICAg
IGNvbnRleHQuc2V0RmlsbEdyYWRpZW50KFdURk1vdmUoYmFyR3JhZGllbnQpKTsKIAogICAgICAg
ICBhdXRvIGJhclN0cm9rZUdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShHcmFkaWVudDo6TGlu
ZWFyRGF0YSB7IEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24p
LCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgcHJvZ3Jl
c3NCYXJIZWlnaHQgLSAxKSB9KTsKLSAgICAgICAgYmFyU3Ryb2tlR3JhZGllbnQtPmFkZENvbG9y
U3RvcCgwLjAsIG1ha2VTaW1wbGVDb2xvcig5NSwgMTA3LCAxODMpKTsKLSAgICAgICAgYmFyU3Ry
b2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjUsIG1ha2VTaW1wbGVDb2xvcig2NiwgMTA2LCAx
NzQsIDI0MCkpOwotICAgICAgICBiYXJTdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDEuMCwg
bWFrZVNpbXBsZUNvbG9yKDM4LCAxMDQsIDE2NikpOworICAgICAgICBiYXJTdHJva2VHcmFkaWVu
dC0+YWRkQ29sb3JTdG9wKHsgMC4wZiwgbWFrZVNpbXBsZUNvbG9yKDk1LCAxMDcsIDE4MykgfSk7
CisgICAgICAgIGJhclN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoeyAwLjVmLCBtYWtlU2lt
cGxlQ29sb3IoNjYsIDEwNiwgMTc0LCAyNDApIH0pOworICAgICAgICBiYXJTdHJva2VHcmFkaWVu
dC0+YWRkQ29sb3JTdG9wKHsgMS4wZiwgbWFrZVNpbXBsZUNvbG9yKDM4LCAxMDQsIDE2NikgfSk7
CiAgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlR3JhZGllbnQoV1RGTW92ZShiYXJTdHJva2VHcmFk
aWVudCkpOwogCiAgICAgICAgIFBhdGggYmFyUGF0aDsKICAgICAgICAgaW50IGxlZnQgPSByZWN0
LngoKTsKICAgICAgICAgaWYgKCFyZW5kZXJQcm9ncmVzcy5zdHlsZSgpLmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSkKICAgICAgICAgICAgIGxlZnQgPSByZWN0Lm1heFgoKSAtIGJhcldpZHRoOwot
ICAgICAgICBGbG9hdFJlY3QgYmFyUmVjdChsZWZ0ICsgMC4yNSwgdmVydGljYWxSZW5kZXJpbmdQ
b3NpdGlvbiArIDAuMjUsIHN0ZDo6bWF4KGJhcldpZHRoIC0gMC41LCAwLjApLCBwcm9ncmVzc0Jh
ckhlaWdodCAtIDAuNSk7CisgICAgICAgIEZsb2F0UmVjdCBiYXJSZWN0KGxlZnQgKyAwLjI1Ziwg
dmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIDAuMjVmLCBzdGQ6Om1heChiYXJXaWR0aCAtIDAu
NWYsIDAuMGYpLCBwcm9ncmVzc0JhckhlaWdodCAtIDAuNWYpOwogICAgICAgICBiYXJQYXRoLmFk
ZFJvdW5kZWRSZWN0KGJhclJlY3QsIHJvdW5kZWRDb3JuZXJSYWRpdXMpOwogICAgICAgICBjb250
ZXh0LmRyYXdQYXRoKGJhclBhdGgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCmluZGV4IDU0
ODM1ODNhYzZhZTFhNTM2YWI4OTFiOTNhZWQ1ZWU1YTc3ZjA5ODcuLmEwZmQzYzNjYmEyYjAzMGM3
MTQ1NDg5ODEwYjEyNDc1NmMyYWNhMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcApAQCAtMjM0LDEy
ICsyMzQsMTAgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0QXBwbHlSZXNv
dXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgR3JhcGgKIAogdm9pZCBSZW5kZXJTVkdSZXNv
dXJjZUdyYWRpZW50OjphZGRTdG9wcyhHcmFkaWVudERhdGEqIGdyYWRpZW50RGF0YSwgY29uc3Qg
VmVjdG9yPEdyYWRpZW50OjpDb2xvclN0b3A+JiBzdG9wcywgY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlKSBjb25zdAogeworICAgIEFTU0VSVChncmFkaWVudERhdGEpOwogICAgIEFTU0VSVChncmFk
aWVudERhdGEtPmdyYWRpZW50KTsKLQotICAgIGZvciAoR3JhZGllbnQ6OkNvbG9yU3RvcCBzdG9w
IDogc3RvcHMpIHsKLSAgICAgICAgc3RvcC5jb2xvciA9IHN0eWxlLmNvbG9yQnlBcHBseWluZ0Nv
bG9yRmlsdGVyKHN0b3AuY29sb3IpOwotICAgICAgICBncmFkaWVudERhdGEtPmdyYWRpZW50LT5h
ZGRDb2xvclN0b3Aoc3RvcCk7Ci0gICAgfQorICAgIGZvciAoYXV0byYgc3RvcCA6IHN0b3BzKQor
ICAgICAgICBncmFkaWVudERhdGEtPmdyYWRpZW50LT5hZGRDb2xvclN0b3AoeyBzdG9wLm9mZnNl
dCwgc3R5bGUuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoc3RvcC5jb2xvcikgfSk7CiB9CiAK
IEdyYWRpZW50U3ByZWFkTWV0aG9kIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OnBsYXRmb3Jt
U3ByZWFkTWV0aG9kRnJvbVNWR1R5cGUoU1ZHU3ByZWFkTWV0aG9kVHlwZSBtZXRob2QpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlR3JhZGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VHcmFkaWVudC5oCmluZGV4IDE0MGM3MGVkNTM1YTA3MzBhZjQ4MDhjNTc5YWFkZTlkYjQ4
OTY4NDEuLmZmYjkwMGJkZjRlZGVjYWIyZWI4YWIwZmI1ZjI1MzRhYTY4NGI2YjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VH
cmFkaWVudC5oCkBAIC0yMSw3ICsyMSw2IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAi
R3JhZGllbnQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlJlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiU1ZHR3JhZGllbnRFbGVtZW50LmgiCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCmluZGV4IDBjNjA3ZDgzOGFh
NTk4OWM1MWVlOWI0OWZjYzJlMzZkMDk0NDFhYWIuLjU4MzcwMTgwNmY3YTVlYzZlOTM1NGVkMDE0
YWFlNzU5NjkzYTM2YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFkaWVu
dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQu
Y3BwCkBAIC0xMDIsMTggKzEwMiwxMSBAQCBWZWN0b3I8R3JhZGllbnQ6OkNvbG9yU3RvcD4gU1ZH
R3JhZGllbnRFbGVtZW50OjpidWlsZFN0b3BzKCkKIHsKICAgICBWZWN0b3I8R3JhZGllbnQ6OkNv
bG9yU3RvcD4gc3RvcHM7CiAgICAgZmxvYXQgcHJldmlvdXNPZmZzZXQgPSAwLjBmOwotCiAgICAg
Zm9yIChhdXRvJiBzdG9wIDogY2hpbGRyZW5PZlR5cGU8U1ZHU3RvcEVsZW1lbnQ+KCp0aGlzKSkg
ewotICAgICAgICBjb25zdCBDb2xvciYgY29sb3IgPSBzdG9wLnN0b3BDb2xvckluY2x1ZGluZ09w
YWNpdHkoKTsKLQotICAgICAgICAvLyBGaWd1cmUgb3V0IHJpZ2h0IG1vbm90b25pYyBvZmZzZXQu
Ci0gICAgICAgIGZsb2F0IG9mZnNldCA9IHN0b3Aub2Zmc2V0KCk7Ci0gICAgICAgIG9mZnNldCA9
IHN0ZDo6bWluKHN0ZDo6bWF4KHByZXZpb3VzT2Zmc2V0LCBvZmZzZXQpLCAxLjBmKTsKLSAgICAg
ICAgcHJldmlvdXNPZmZzZXQgPSBvZmZzZXQ7Ci0KLSAgICAgICAgc3RvcHMuYXBwZW5kKEdyYWRp
ZW50OjpDb2xvclN0b3Aob2Zmc2V0LCBjb2xvcikpOworICAgICAgICBhdXRvIG1vbm90b25pY2Fs
bHlJbmNyZWFzaW5nT2Zmc2V0ID0gc3RkOjpjbGFtcChzdG9wLm9mZnNldCgpLCBwcmV2aW91c09m
ZnNldCwgMS4wZik7CisgICAgICAgIHByZXZpb3VzT2Zmc2V0ID0gbW9ub3RvbmljYWxseUluY3Jl
YXNpbmdPZmZzZXQ7CisgICAgICAgIHN0b3BzLmFwcGVuZCh7IG1vbm90b25pY2FsbHlJbmNyZWFz
aW5nT2Zmc2V0LCBzdG9wLnN0b3BDb2xvckluY2x1ZGluZ09wYWNpdHkoKSB9KTsKICAgICB9Ci0K
ICAgICByZXR1cm4gc3RvcHM7CiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>