<?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>233613</bug_id>
          
          <creation_ts>2021-11-29 18:56:44 -0800</creation_ts>
          <short_desc>[GPU Process] [Filters 15/23] Calculate the result image rectangle of the FilterEffect in filter coordinates</short_desc>
          <delta_ts>2022-04-28 19:49:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>231253</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>heycam</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>lmoura</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>pdr</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>1818576</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-29 18:56:44 -0800</bug_when>
    <thetext>The FilterEffect lengths (like the stdDeviation of FEGaussianBlur) are in filter coordinates. Using the filter coordinates will simplify the image rectangle calculations. Only when creating the FilterImage we can convert the image rectangle from filter coordinates to user space coordinates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818588</commentid>
    <comment_count>1</comment_count>
      <attachid>445375</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-29 20:29:01 -0800</bug_when>
    <thetext>Created attachment 445375
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818591</commentid>
    <comment_count>2</comment_count>
      <attachid>445376</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-29 20:47:37 -0800</bug_when>
    <thetext>Created attachment 445376
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818605</commentid>
    <comment_count>3</comment_count>
      <attachid>445376</attachid>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-11-29 22:26:47 -0800</bug_when>
    <thetext>Comment on attachment 445376
Patch

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

&gt; Source/WebCore/platform/graphics/GraphicsContext.cpp:646
&gt; +    scale({ 1 / filter.filterScale().width(), 1 / filter.filterScale().height() });
&gt;      drawImageBuffer(*imageBuffer, result-&gt;absoluteImageRect());
&gt; +    scale(filter.filterScale());

I meant to mention this in a previous patch too, but I think I forgot. There&apos;s always risk with applying a transform and then its inverse later that there is sufficient loss of precision that you don&apos;t end up with the original CTM. Not sure if it&apos;s a practical issue but something to consider?

&gt; Source/WebCore/platform/graphics/filters/FEComposite.cpp:95
&gt;          // For In and Atop the first effect just influences the result of
&gt;          // the second effect. So just use the absolute paint rect of the second effect here.

Update this comment so it no longer talks about the &quot;absolute paint rect&quot;.

&gt; Source/WebCore/platform/graphics/filters/FEComposite.cpp:99
&gt;          // Arithmetic may influnce the compele filter primitive region. So we can&apos;t

Pre-existing: &quot;complete&quot; (or &quot;entire&quot; would sound better)

&gt; Source/WebCore/platform/graphics/filters/FEDropShadow.cpp:60
&gt;      // We take the half kernel size and multiply it with three, because we run box blur three times.
&gt; -    absolutePaintRect.inflateX(3 * kernelSize.width() * 0.5f);
&gt; -    absolutePaintRect.inflateY(3 * kernelSize.height() * 0.5f);
&gt; +    imageRect.inflateX(3 * kernelSize.width() * 0.5f);
&gt; +    imageRect.inflateY(3 * kernelSize.height() * 0.5f);
&gt;  

Pre-existing, but why don&apos;t we inflate imageRectWithOffset instead of the final imageRect value?

&gt; Source/WebCore/platform/graphics/filters/Filter.cpp:77
&gt; +FloatRect Filter::clipToMaxEffectRect(const FloatRect&amp; imageRect, const FloatRect&amp; primitiveSubregion) const
&gt; +{
&gt; +    auto maxEffectRect = this-&gt;maxEffectRect(primitiveSubregion);
&gt; +    return m_clipOperation == ClipOperation::Intersect ? intersection(imageRect, maxEffectRect) : unionRect(imageRect, maxEffectRect);
&gt; +}

Seems weird to me that the function is called &quot;clipToMaxEffectRect&quot; but m_clipOperation causes it to either clip or to unite. But I don&apos;t have a better name suggestion right now.

&gt; Source/WebCore/rendering/RenderLayerFilters.cpp:135
&gt; +    auto logicalSize = filter.sourceImageRect().size() * filter.filterScale();

Use scaledByFilterScale maybe? Size is the easy one to write out instead of calling the function, but may as well consistently use it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818606</commentid>
    <comment_count>4</comment_count>
      <attachid>445376</attachid>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-11-29 22:28:23 -0800</bug_when>
    <thetext>Comment on attachment 445376
Patch

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

&gt; Source/WebCore/platform/graphics/filters/SpotLightSource.cpp:44
&gt;  static const float antiAliasTreshold = 0.016f;

Pre-existing: &quot;antialiasThreshold&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818629</commentid>
    <comment_count>5</comment_count>
      <attachid>445376</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-30 00:20:35 -0800</bug_when>
    <thetext>Comment on attachment 445376
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/GraphicsContext.cpp:646
&gt;&gt; +    scale(filter.filterScale());
&gt; 
&gt; I meant to mention this in a previous patch too, but I think I forgot. There&apos;s always risk with applying a transform and then its inverse later that there is sufficient loss of precision that you don&apos;t end up with the original CTM. Not sure if it&apos;s a practical issue but something to consider?

Using save()/restore() or using GraphicsContextStateSaver is expensive. In the old code we were creating an AffineTransform and we were applying its inverse before drawing and applying it after drawing. So I think scaling with the reciprocal of filter.filterScale() is more accurate than applying the inverse of AffineTransform. But I will think about it.

&gt;&gt; Source/WebCore/platform/graphics/filters/FEComposite.cpp:95
&gt;&gt;          // the second effect. So just use the absolute paint rect of the second effect here.
&gt; 
&gt; Update this comment so it no longer talks about the &quot;absolute paint rect&quot;.

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/filters/FEComposite.cpp:99
&gt;&gt;          // Arithmetic may influnce the compele filter primitive region. So we can&apos;t
&gt; 
&gt; Pre-existing: &quot;complete&quot; (or &quot;entire&quot; would sound better)

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/filters/FEDropShadow.cpp:60
&gt;&gt;  
&gt; 
&gt; Pre-existing, but why don&apos;t we inflate imageRectWithOffset instead of the final imageRect value?

Because the final imageRect will be different if { m_dx, m_dy } are negative. Suppose 

inputs[0]-&gt;imageRect() = { 30, 30, 100, 100 }
{ m_dx, m_dy } = { -10, -10 }
{ m_stdX, m_stdY } = { 10, 10 } =&gt; kernelSize = { 10, 10 }

Current calculations are:

imageRect =  { 30, 30, 100, 100 }
imageRectWithOffset = { 20, 20, 100, 100 } // after imageRectWithOffset.move({ -10, -10 })
imageRect = { 20, 20, 110, 110 }. // after imageRect.unite({ 20, 20, 100, 100 })
imageRect = { 5, 5, 140, 140 }. // after imageRect.inflate({15, 15})

Calculations with your suggestion are:

imageRect =  { 30, 30, 100, 100 }
imageRectWithOffset = { 20, 20, 100, 100 } // after imageRectWithOffset.move({ -10, -10 })
imageRectWithOffset = { 5, 5, 130, 130 }. // after imageRect.inflate({15, 15})
imageRect = { 5, 5, 130, 130 }. // after imageRect.unite({ 5, 5, 130, 130 })

&gt;&gt; Source/WebCore/platform/graphics/filters/SpotLightSource.cpp:44
&gt;&gt;  static const float antiAliasTreshold = 0.016f;
&gt; 
&gt; Pre-existing: &quot;antialiasThreshold&quot;

Fixed.

&gt;&gt; Source/WebCore/rendering/RenderLayerFilters.cpp:135
&gt;&gt; +    auto logicalSize = filter.sourceImageRect().size() * filter.filterScale();
&gt; 
&gt; Use scaledByFilterScale maybe? Size is the easy one to write out instead of calling the function, but may as well consistently use it.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818630</commentid>
    <comment_count>6</comment_count>
      <attachid>445390</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-30 00:20:53 -0800</bug_when>
    <thetext>Created attachment 445390
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818642</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-11-30 01:19:23 -0800</bug_when>
    <thetext>Committed r286287 (244646@main): &lt;https://commits.webkit.org/244646@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 445390.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818643</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-11-30 01:20:21 -0800</bug_when>
    <thetext>&lt;rdar://problem/85855673&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1818929</commentid>
    <comment_count>9</comment_count>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-11-30 13:58:00 -0800</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #5)
&gt; &gt;&gt; Source/WebCore/platform/graphics/filters/FEDropShadow.cpp:60
&gt; &gt;&gt;  
&gt; &gt; 
&gt; &gt; Pre-existing, but why don&apos;t we inflate imageRectWithOffset instead of the final imageRect value?
&gt; 
&gt; Because the final imageRect will be different if { m_dx, m_dy } are
&gt; negative. Suppose 
&gt; 
&gt; inputs[0]-&gt;imageRect() = { 30, 30, 100, 100 }
&gt; { m_dx, m_dy } = { -10, -10 }
&gt; { m_stdX, m_stdY } = { 10, 10 } =&gt; kernelSize = { 10, 10 }
&gt; 
&gt; Current calculations are:
&gt; 
&gt; imageRect =  { 30, 30, 100, 100 }
&gt; imageRectWithOffset = { 20, 20, 100, 100 } // after
&gt; imageRectWithOffset.move({ -10, -10 })
&gt; imageRect = { 20, 20, 110, 110 }. // after imageRect.unite({ 20, 20, 100,
&gt; 100 })
&gt; imageRect = { 5, 5, 140, 140 }. // after imageRect.inflate({15, 15})
&gt; 
&gt; Calculations with your suggestion are:
&gt; 
&gt; imageRect =  { 30, 30, 100, 100 }
&gt; imageRectWithOffset = { 20, 20, 100, 100 } // after
&gt; imageRectWithOffset.move({ -10, -10 })
&gt; imageRectWithOffset = { 5, 5, 130, 130 }. // after imageRect.inflate({15,
&gt; 15})
&gt; imageRect = { 5, 5, 130, 130 }. // after imageRect.unite({ 5, 5, 130, 130 })

But isn&apos;t that fine?  The rendered result of using the filter is a blurred shadow covering { 5, 5, 130, 130 } with the unblurred input covering { 30, 30, 100, 100 } composited on top.  The image rect doesn&apos;t need to cover the extra space down to (140, 140).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1865325</commentid>
    <comment_count>10</comment_count>
    <who name="Arcady Goldmints-Orlov">crzwdjk</who>
    <bug_when>2022-04-28 19:49:44 -0700</bug_when>
    <thetext>*** Bug 233611 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445375</attachid>
            <date>2021-11-29 20:29:01 -0800</date>
            <delta_ts>2021-11-29 20:58:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233613-20211129202900.patch</filename>
            <type>text/plain</type>
            <size>100479</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MjAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGM0OGYyNGZhZjAzZTQx
NDE2Njg0N2FkODQ1Y2ZhYWE0NDdmNzAyMS4uMWIwMzFjZTZmYmVkZmI0MjkxZjE1MDhiMDlhMzBj
ZjU4ODYwZmI2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5MCBAQAorMjAyMS0xMS0yOSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IENhbGN1bGF0ZSB0aGUgcmVzdWx0IGltYWdlIHJlY3RhbmdsZSBvZiB0aGUgRmlsdGVyRWZmZWN0
IGluIGZpbHRlciBjb29yZGluYXRlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjMzNjEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW4gdGhpcyBwYXRjaDoKKworICAgICAgICAxLiBkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCgpIGZ1bmN0aW9ucyBhcmUgZGVsZXRlZCBhbmQgcmVwbGFjZWQgYnkKKyAg
ICAgICAgICAgY2FsY3VsYXRlSW1hZ2VSZWN0KCkuIFRoZSBuZXcgZnVuY3Rpb24gcmV0dXJucyB0
aGUgaW1hZ2UgcmVjdGFuZ2xlCisgICAgICAgICAgIGluIGZpbHRlciBjb29yZGluYXRlcy4gQm90
aCB0aGUgaW1hZ2UgcmVjdGFuZ2xlIGluIGZpbHRlciBjb29yZGluYXRlcworICAgICAgICAgICBh
bmQgaW4gdXNlciBzcGFjZSBjb29yZGluYXRlcyB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgcmVzdWx0
IEZpbHRlckltYWdlLgorCisgICAgICAgIDIuIEZpbHRlckNvbnN1bWVyIGlzIHJlcGxhY2VkIGJ5
IEZpbHRlcjo6Q2xpcE9wZXJhdGlvbiBhbmQgaXQgaXMgc3RvcmVkCisgICAgICAgICAgIGluIEZp
bHRlci4gU28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgRmlsdGVyRWZmZWN0OjptX2NsaXBzVG9Cb3Vu
ZHMuCisKKyAgICAgICAgMy4gcmVzdWx0SXNBbHBoYUltYWdlKCkgd2lsbCB0YWtlIGEgVmVjdG9y
IG9mIEZpbHRlckltYWdlcyBpbnN0ZWFkIG9mIAorICAgICAgICAgICByZWx5aW5nIG9uIHRoZSBp
bnB1dCBlZmZlY3RzLiBUaGlzIGlzIGEgc3RlcCB0b3dhcmRzIHJlbW92aW5nIHRoZSBpbnB1dAor
ICAgICAgICAgICBlZmZlY3RzIGZyb20gdGhlIEZpbHRlckVmZmVjdC4KKworICAgICAgICA0LiBN
b3ZlIHRoZSBtYXhFZmZlY3RSZWN0KCkgY2FsY3VsYXRpb24gdG8gRmlsdGVyIGFuZCBtYWtlIGl0
IGFsc28gaW4KKyAgICAgICAgICAgZmlsdGVyIGNvb3JkaW5hdGVzLgorCisgICAgICAgIDUuIE1h
a2UgRmlsdGVyOjpzY2FsZWRCeUZpbHRlclNjYWxlKCkganVzdCBzY2FsZXMgYSBGbG9hdFNpemUu
IEFkZCBvdGhlcgorICAgICAgICAgICBvdmVycmlkZSBtZXRob2RzIHRvIHNjYWxlIHRoZSBGbG9h
dFBvaW50IGFuZCBGbG9hdFJlY3QuIE1vdmUgcmVzb2x2aW5nCisgICAgICAgICAgIHRoZSByZWxh
dGl2ZSBsZW5ndGggdG8gdGhlIGJvdW5kaW5nIGJveCBpbiBhIHNlcGFyYXRlIGZ1bmN0aW9uIAor
ICAgICAgICAgICBGaWx0ZXI6OnJlc29sdmVkU2l6ZSgpIHdoaWNoIGhhcyB0byBiZSBjYWxsZWQg
ZXhwbGljaXRseSBiZWZvcmUgY2FsbGluZworICAgICAgICAgICBzY2FsZWRCeUZpbHRlclNjYWxl
KCkuCisKKyAgICAgICAgNi4gUmVtb3ZlIEZpbHRlckVmZmVjdDo6bWFwUG9pbnRGcm9tVXNlclNw
YWNlVG9CdWZmZXIoKSBhbmQgcmVwbGFjZSBpdCBieQorICAgICAgICAgICBhIGNhbGwgdG8gRmls
dGVyOjpzY2FsZWRCeUZpbHRlclNjYWxlKCkgZm9sbG93ZWQgYnkgYSBjYWxsIHRvCisgICAgICAg
ICAgIEZpbHRlckltYWdlOjptYXBwZWRBYnNvbHV0ZVBvaW50KCkgc2luY2UgdGhpcyBpcyB3aGF0
IGl0IGFjdHVhbGx5IGRvZXMuCisKKyAgICAgICAgNy4gVGhlIFNWR0ZpbHRlciBhbmQgQ1NTRmls
dGVyIHdpbGwgcGFzcyB0aGUgc291cmNlSW1hZ2VSZWN0IGluIGZpbHRlcgorICAgICAgICAgICBj
b29yZGluYXRlcy4gV2hlbiBjcmVhdGluZyB0aGUgc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVj
dCBoYXMgdG8gYmUKKyAgICAgICAgICAgc2NhbGVkIGJ5IGNhbGxpbmcgRmlsdGVyOjpzY2FsZWRC
eUZpbHRlclNjYWxlKCkuCisKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIpOgorICAgICAgICBT
Y2FsZSB0aGUgY29udGV4dCBkb3duIGJlZm9yZSBkcmF3aW5nIHRoZSByZXN1bHQgSW1hZ2VCdWZm
ZXIgYW5kIHJlc3RvcmUKKyAgICAgICAgdGhlIGNvbnRleHQgYmFjayBhZnRlciB0aGUgZHJhd2lu
Zy4gUmVtb3ZlIHRoZSByZXBlYXRlZCBjb2RlIGZyb20gCisgICAgICAgIFJlbmRlckxheWVyRmls
dGVyczo6YXBwbHlGaWx0ZXJFZmZlY3QoKSBhbmQgCisgICAgICAgIFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSgpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlz
dGFudExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbG9yTWF0cml4OjpyZXN1bHRJc0FscGhhSW1hZ2UgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvc2l0ZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXgu
aDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNl
bWVudE1hcDo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVE
cm9wU2hhZG93OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RkVEcm9wU2hhZG93OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVGbG9vZDo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3Np
YW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3Np
YW5CbHVyOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVH
YXVzc2lhbkJsdXI6OnJlc3VsdElzQWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RkVMaWdodGluZzo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAgKCk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xv
Z3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpjYWxjdWxhdGVJbWFnZVJl
Y3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpyZXN1bHRJc0FscGhh
SW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1vcnBob2xvZ3kuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpjYWxjdWxhdGVJ
bWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnJlc3VsdElzQWxw
aGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVPZmZzZXQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmNhbGN1bGF0ZUltYWdlUmVjdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OnJlc3VsdElzQWxwaGFJbWFnZSBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaDoKKyAgICAg
ICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1
cmJ1bGVuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpjYWxjdWxhdGVJ
bWFnZVJlY3QgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
dXJidWxlbmNlLmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6Rmls
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2NhbGVkQnlGaWx0ZXJTY2FsZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6Om1heEVmZmVjdFJlY3QgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyOjpjbGlwVG9NYXhFZmZlY3RSZWN0IGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyOjpjbGlwT3BlcmF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
cjo6cmVzb2x2ZWRTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2NhbGVk
QnlGaWx0ZXJTY2FsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsaXBBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om1hcFBvaW50RnJvbVVzZXJTcGFjZVRv
QnVmZmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXN1
bHRJc0FscGhhSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojph
YnNvbHV0ZVBhaW50UmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OnNldEFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6c2V0VW5jbGlwcGVkQWJzb2x1dGVTdWJyZWdpb24pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGlwc1RvQm91bmRzIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0Q2xpcHNUb0JvdW5k
cyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJ
bWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpGaWx0ZXJJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJJbWFnZTo6bWF4RWZmZWN0UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJJbWFnZTo6bWFwcGVkQWJzb2x1dGVQb2ludCBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVySW1hZ2U6OmltYWdlUmVjdCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9MaWdodFNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvUG9pbnRMaWdodFNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb2ludExpZ2h0U291
cmNlOjppbml0UGFpbnRpbmdEYXRhIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhh
OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxw
aGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUdyYXBoaWM6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1l
bnRNYXBTb2Z0d2FyZUFwcGxpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1l
bnRNYXBTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5IGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGln
aHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1Nv
ZnR3YXJlQXBwbGllcjo6c2V0UGl4ZWxJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhv
bG9neVNvZnR3YXJlQXBwbGllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lT
b2Z0d2FyZUFwcGxpZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmVBcHBsaWVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZFT2Zmc2V0U29mdHdhcmVBcHBsaWVyOjphcHBseSBjb25zdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OkNTU0ZpbHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVCbHVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZVNWR0ZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmJ1aWxkRmlsdGVyRnVu
Y3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldHVwTGFzdEVmZmVjdFByb3BlcnRpZXMpOiBEZWxldGVk
LgorICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmls
dGVyczo6YnVpbGRGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJz
OjphbGxvY2F0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZp
bHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
RmlsdGVyczo6YXBwbHlGaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmNh
bGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVJbWFnZS5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OlNWR0ZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGaWx0ZXI6OnJlc29sdmVkU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXI6OnNjYWxlZEJ5RmlsdGVyU2NhbGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oOgorCiAyMDIxLTExLTI4ICBTYWlkIEFib3UtSGFs
bGF3YSAgPHNhaWRAYXBwbGUuY29tPgogCiAgICAgICAgIFtHUFUgUHJvY2Vzc10gQXBwbHkgdGhl
IGZpbHRlciB0byBhbiBJbWFnZUJ1ZmZlciB0aHJvdWdoIEdyYXBoaWNzQ29udGV4dCBhbmQgSW1h
Z2VCdWZmZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZh
bHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAppbmRl
eCAxNDVkZDlkN2MzZjBmNzhkODZlOWY0OTg1NzE3ODQ5M2FkMTk4MGIxLi4yNjhmNDhjMzE0Yzcz
YzVjZDI4ZDVjNjVjNWE2M2FmNDI3ODA1NGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zp
bHRlckltYWdlVmFsdWUuY3BwCkBAIC0xMjcsNyArMTI3LDcgQEAgUmVmUHRyPEltYWdlPiBDU1NG
aWx0ZXJJbWFnZVZhbHVlOjppbWFnZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmxv
YXRTaXoKICAgICBhdXRvIGNzc0ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKG1fZmlsdGVyT3Bl
cmF0aW9ucywgcmVuZGVyaW5nTW9kZSk7CiAKICAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUltYWdl
UmVjdChzb3VyY2VJbWFnZVJlY3QpOwotICAgIGlmICghY3NzRmlsdGVyLT5idWlsZEZpbHRlckZ1
bmN0aW9ucyhyZW5kZXJlciwgbV9maWx0ZXJPcGVyYXRpb25zLCBGaWx0ZXJDb25zdW1lcjo6Rmls
dGVyRnVuY3Rpb24pKQorICAgIGlmICghY3NzRmlsdGVyLT5idWlsZEZpbHRlckZ1bmN0aW9ucyhy
ZW5kZXJlciwgbV9maWx0ZXJPcGVyYXRpb25zKSkKICAgICAgICAgcmV0dXJuICZJbWFnZTo6bnVs
bEltYWdlKCk7CiAKICAgICBpZiAoYXV0byBpbWFnZSA9IHNvdXJjZUltYWdlLT5maWx0ZXJlZElt
YWdlKCpjc3NGaWx0ZXIpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggODAxODY5NmQ0Njk1ZWU4YTBiYjU2OTk1ODk2
MDMxZWE5MGVjNTJmNy4uZTM3YjcxNTU3MTQwNjBiZmViN2FkYjAxODlmYWJlZGY3OWYxNjgxNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuY3BwCkBAIC02NDEsNyArNjQxLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdG
aWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgRmlsdGVyJgogICAg
IGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAorICAgIHNjYWxlKHsgMSAvIGZp
bHRlci5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS5oZWln
aHQoKSB9KTsKICAgICBkcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCByZXN1bHQtPmFic29s
dXRlSW1hZ2VSZWN0KCkpOworICAgIHNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwCmluZGV4IDg5NDdhOTg2MGU0
NmIxMWM1OGUyNzc1MzYyNTZmZGI5ZDUxZDE1NDYuLjBiNWJiYzRlYmE1NzY4Y2NmYTkyYzhiMjA5
NmE3Y2IzZDk5YjhkMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHAKQEAgLTM1LDcg
KzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIERpc3RhbnRMaWdodFNvdXJj
ZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmIHBh
aW50aW5nRGF0YSkgY29uc3QKK3ZvaWQgRGlzdGFudExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdE
YXRhKGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlJiwgUGFpbnRpbmdEYXRhJiBwYWlu
dGluZ0RhdGEpIGNvbnN0CiB7CiAgICAgZmxvYXQgYXppbXV0aCA9IGRlZzJyYWQobV9hemltdXRo
KTsKICAgICBmbG9hdCBlbGV2YXRpb24gPSBkZWcycmFkKG1fZWxldmF0aW9uKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0
U291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3Rh
bnRMaWdodFNvdXJjZS5oCmluZGV4IDMwMTkyYjBlZjBjZDFiZjQwM2Q0MjMzOGNlNDA4NzcxOGQ3
NTE3MDcuLmJlZGE1MDVmMjgyOTkzYThlY2U5OTk0ODIzNWRlMjJmYjA1YzZmOTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0
U291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9E
aXN0YW50TGlnaHRTb3VyY2UuaApAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBz
ZXRBemltdXRoKGZsb2F0KSBvdmVycmlkZTsKICAgICBib29sIHNldEVsZXZhdGlvbihmbG9hdCkg
b3ZlcnJpZGU7CiAKLSAgICB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0
JiwgUGFpbnRpbmdEYXRhJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBpbml0UGFpbnRpbmdE
YXRhKGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlJiByZXN1bHQsIFBhaW50aW5nRGF0
YSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIENvbXB1dGVkTGlnaHRpbmdEYXRhIGNvbXB1dGVQaXhl
bExpZ2h0aW5nRGF0YShjb25zdCBQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHop
IGNvbnN0IGZpbmFsOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAK
aW5kZXggMjAxOTEzYTMzNTE5YzA1NDUwZDdjZWVlYjUxOWU0ZjA2MWViMjYwZS4uOTU2MWJkOWI1
ZjhlMWVmODIyMDVhNzM2NjhiMGM0MzAyNDYyNDZkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCkBA
IC0xMDUsNyArMTA1LDcgQEAgYm9vbCBGRUNvbG9yTWF0cml4OjpzdXBwb3J0c0NvcmVJbWFnZVJl
bmRlcmluZygpIGNvbnN0CiB9CiAjZW5kaWYKIAotYm9vbCBGRUNvbG9yTWF0cml4OjpyZXN1bHRJ
c0FscGhhSW1hZ2UoKSBjb25zdAorYm9vbCBGRUNvbG9yTWF0cml4OjpyZXN1bHRJc0FscGhhSW1h
Z2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImKSBjb25zdAogewogICAgIHJldHVybiBtX3R5cGUg
PT0gRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5o
CmluZGV4IDNkMDcwNGU3ZjlhOWI4NjViMmQxNGViMThlOGE4NGM5ZDVmNzJhZTAuLmE0MzEyNWI1
MzE1NjJjNjNhOTUyODQ3YzhmOTA0NDljOTRmN2U4NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCkBAIC01
Niw3ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmlu
ZygpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAgICAgCi0gICAgYm9vbCByZXN1bHRJc0FscGhh
SW1hZ2UoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIHJlc3VsdElzQWxwaGFJbWFnZShjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHN0ZDo6
dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RBcHBsaWVyPiBjcmVhdGVBcHBsaWVyKGNvbnN0IEZpbHRl
ciYpIGNvbnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IDBlNzczYzA1NWY1MThi
M2NlNmIyYWJiZTEzMDUxMmJhODljZWY2MjcuLjY1YjU3Y2U2OTFiZDE2ZjJmYjU0MTY4OTM3ZjNl
NTJjODI2ZjI4OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC04NSwyNSArODUsMjMgQEAgYm9vbCBG
RUNvbXBvc2l0ZTo6c2V0SzQoZmxvYXQgazQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
RkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmls
dGVyKQorRmxvYXRSZWN0IEZFQ29tcG9zaXRlOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmls
dGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZsb2F0
UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewogICAgIHN3aXRjaCAobV90eXBlKSB7
CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjoKICAgICBjYXNlIEZFQ09NUE9TSVRF
X09QRVJBVE9SX0FUT1A6CiAgICAgICAgIC8vIEZvciBJbiBhbmQgQXRvcCB0aGUgZmlyc3QgZWZm
ZWN0IGp1c3QgaW5mbHVlbmNlcyB0aGUgcmVzdWx0IG9mCiAgICAgICAgIC8vIHRoZSBzZWNvbmQg
ZWZmZWN0LiBTbyBqdXN0IHVzZSB0aGUgYWJzb2x1dGUgcGFpbnQgcmVjdCBvZiB0aGUgc2Vjb25k
IGVmZmVjdCBoZXJlLgotICAgICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVjdCgx
KS0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgp
OwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmaWx0ZXIuY2xpcFRvTWF4RWZmZWN0
UmVjdChpbnB1dHNbMV0tPmltYWdlUmVjdCgpLCBwcmltaXRpdmVTdWJyZWdpb24pOworCiAgICAg
Y2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOgogICAgICAgICAvLyBBcml0aG1l
dGljIG1heSBpbmZsdW5jZSB0aGUgY29tcGVsZSBmaWx0ZXIgcHJpbWl0aXZlIHJlZ2lvbi4gU28g
d2UgY2FuJ3QKICAgICAgICAgLy8gb3B0aW1pemUgdGhlIHBhaW50IHJlZ2lvbiBoZXJlLgotICAg
ICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3Qo
KSkpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmaWx0ZXIubWF4RWZmZWN0UmVj
dChwcmltaXRpdmVTdWJyZWdpb24pOworCiAgICAgZGVmYXVsdDoKICAgICAgICAgLy8gVGFrZSB0
aGUgdW5pb24gb2YgYm90aCBpbnB1dCBlZmZlY3RzLgotICAgICAgICBGaWx0ZXJFZmZlY3Q6OmRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KGZpbHRlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGZpbHRlciwgaW5wdXRz
LCBwcmltaXRpdmVTdWJyZWdpb24pOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCmluZGV4IGIwZTgy
NmY5MzE1OTdhNGEyOTUwNjlkODMwYTk4NjM1MDk3ZDMzY2EuLjUzYWUwZDZhMjY0ZTIwYWY2NjU4
Y2ZlYWY5OGE3NDcyZDZjOGZmZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKQEAgLTYwLDcgKzYwLDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBGRUNvbXBvc2l0ZShjb25zdCBDb21wb3NpdGVPcGVyYXRpb25U
eXBlJiwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOwogCi0gICAgdm9p
ZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAg
ICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRl
ckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9u
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIGJvb2wgbWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBs
aWVkUGl4ZWxzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV90eXBlID09IEZFQ09NUE9TSVRF
X09QRVJBVE9SX0FSSVRITUVUSUM7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKaW5kZXgg
ZjI2NTlkMzZlNTViYjIyZDY0ZmY1Yzg0MDZlYTZmYjRjZTgwOGVlMi4uY2ViYmM0MGQ2MjZkN2Ux
ZGJiYTA1ODYxNmEwMGIzN2YyMzE3YWY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCkBA
IC0xMTMsNiArMTEzLDExIEBAIGJvb2wgRkVDb252b2x2ZU1hdHJpeDo6c2V0UHJlc2VydmVBbHBo
YShib29sIHByZXNlcnZlQWxwaGEpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK0Zsb2F0UmVjdCBG
RUNvbnZvbHZlTWF0cml4OjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIs
IGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJy
ZWdpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuIGZpbHRlci5tYXhFZmZlY3RSZWN0KHByaW1pdGl2
ZVN1YnJlZ2lvbik7Cit9CisKIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RBcHBsaWVyPiBG
RUNvbnZvbHZlTWF0cml4OjpjcmVhdGVBcHBsaWVyKGNvbnN0IEZpbHRlciYpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIEZpbHRlckVmZmVjdEFwcGxpZXI6OmNyZWF0ZTxGRUNvbnZvbHZlTWF0cml4U29m
dHdhcmVBcHBsaWVyPigqdGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCmluZGV4IGViYjAwNmRh
OGNkMGNlYWNhMjJjNDZiZmViYWM4NjI3MzkzNDE4NWEuLmUxYTE5Y2NmNGM0MzAzNzk0M2EzNWQ4
ZjE0YzE3NjU1YTViZWViZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCkBAIC02Nyw3ICs2Nyw3
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRkVDb252b2x2ZU1hdHJpeChjb25zdCBJbnRTaXpl
JiBrZXJuZWxTaXplLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYg
dGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRM
ZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0
cml4KTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVy
Jikgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVm
ZmVjdFJlY3QoKSkpOyB9CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBG
aWx0ZXImLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGbG9hdFJlY3Qm
IHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8RmlsdGVyRWZmZWN0QXBwbGllcj4gY3JlYXRlQXBwbGllcihjb25zdCBGaWx0ZXImKSBjb25z
dCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAppbmRleCA3ODk5N2EwMzY3
MzA4YmY1YzljMDlhMDUwMTA2YjU2NGQyMDM4NDA3Li40MTAxOGQwODRlYWE0OTJlZTc4NTkzZmQx
MDIxY2ExOTM5M2Q4NjAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcApAQCAtODMsNiAr
ODMsMTEgQEAgdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFj
ZShGaWx0ZXJFZmZlY3QqIGluLCBjb25zdCBpbnQgaW4KICAgICAgICAgaW4tPnRyYW5zZm9ybVJl
c3VsdENvbG9yU3BhY2Uob3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKIH0KIAorRmxvYXRSZWN0IEZF
RGlzcGxhY2VtZW50TWFwOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIs
IGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJy
ZWdpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuIGZpbHRlci5tYXhFZmZlY3RSZWN0KHByaW1pdGl2
ZVN1YnJlZ2lvbik7Cit9CisKIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RBcHBsaWVyPiBG
RURpc3BsYWNlbWVudE1hcDo6Y3JlYXRlQXBwbGllcihjb25zdCBGaWx0ZXImKSBjb25zdAogewog
ICAgIHJldHVybiBGaWx0ZXJFZmZlY3RBcHBsaWVyOjpjcmVhdGU8RkVEaXNwbGFjZW1lbnRNYXBT
b2Z0d2FyZUFwcGxpZXI+KCp0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAppbmRleCBjZWM2
YjMyMjM4YzkyYjg0NWJkMjgwMjA2NjcyZmVhZTllYWMyYjdhLi41M2IwOWQ0ZDY2OGM3ZTIzYTMw
MmQxZDMyZGYyYzhlODg4MTUxOWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCkBAIC01NCw3
ICs1NCw3IEBAIHByaXZhdGU6CiAgICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiByZXN1
bHRDb2xvclNwYWNlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCB0cmFuc2Zvcm1SZXN1bHRD
b2xvclNwYWNlKEZpbHRlckVmZmVjdCosIGNvbnN0IGludCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lk
IGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0
QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQor
ICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmls
dGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdp
b24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdEFw
cGxpZXI+IGNyZWF0ZUFwcGxpZXIoY29uc3QgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9w
U2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
cm9wU2hhZG93LmNwcAppbmRleCAxOGQ4YzMyNmQxOTZlZjkyYTMwYjIwYjI1NjlkZTA5NWRmNzQ2
ZDk3Li43ZjA1NzliNmQ2ZmI1YmQ0YTdkYWZkMGJjZWU4MWFjMjcxNjRiYmM0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BT
aGFkb3cuY3BwCkBAIC00NSwyNSArNDUsMjAgQEAgRkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3co
ZmxvYXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25zdCBDb2wKIHsK
IH0KIAotdm9pZCBGRURyb3BTaGFkb3c6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0
IEZpbHRlciYgZmlsdGVyKQorRmxvYXRSZWN0IEZFRHJvcFNoYWRvdzo6Y2FsY3VsYXRlSW1hZ2VS
ZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRz
LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBGbG9h
dFJlY3QgYWJzb2x1dGVQYWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJl
Y3QoKTsKLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVPZmZzZXRQYWludFJlY3QoYWJzb2x1dGVQYWlu
dFJlY3QpOwotICAgIGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0Lm1vdmUoZmlsdGVyLnNjYWxlZEJ5
RmlsdGVyU2NhbGUoeyBtX2R4LCBtX2R5IH0pKTsKLSAgICBhYnNvbHV0ZVBhaW50UmVjdC51bml0
ZShhYnNvbHV0ZU9mZnNldFBhaW50UmVjdCk7CisgICAgYXV0byBpbWFnZVJlY3QgPSBpbnB1dHNb
MF0tPmltYWdlUmVjdCgpOworICAgIGF1dG8gaW1hZ2VSZWN0V2l0aE9mZnNldChpbWFnZVJlY3Qp
OworICAgIGltYWdlUmVjdFdpdGhPZmZzZXQubW92ZShmaWx0ZXIucmVzb2x2ZWRTaXplKHsgbV9k
eCwgbV9keSB9KSk7CisgICAgaW1hZ2VSZWN0LnVuaXRlKGltYWdlUmVjdFdpdGhPZmZzZXQpOwog
Ci0gICAgSW50U2l6ZSBrZXJuZWxTaXplID0gRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5l
bFNpemUoZmlsdGVyLCB7IG1fc3RkWCwgbV9zdGRZIH0pOworICAgIGF1dG8ga2VybmVsU2l6ZSA9
IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoZmlsdGVyLnJlc29s
dmVkU2l6ZSh7IG1fc3RkWCwgbV9zdGRZIH0pKTsKIAogICAgIC8vIFdlIHRha2UgdGhlIGhhbGYg
a2VybmVsIHNpemUgYW5kIG11bHRpcGx5IGl0IHdpdGggdGhyZWUsIGJlY2F1c2Ugd2UgcnVuIGJv
eCBibHVyIHRocmVlIHRpbWVzLgotICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVYKDMgKiBr
ZXJuZWxTaXplLndpZHRoKCkgKiAwLjVmKTsKLSAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRl
WSgzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAqIDAuNWYpOworICAgIGltYWdlUmVjdC5pbmZsYXRl
WCgzICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7CisgICAgaW1hZ2VSZWN0LmluZmxhdGVZ
KDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICogMC41Zik7CiAKLSAgICBpZiAoY2xpcHNUb0JvdW5k
cygpKQotICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgp
KTsKLSAgICBlbHNlCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJl
Y3QoKSk7Ci0KLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29s
dXRlUGFpbnRSZWN0KSk7CisgICAgcmV0dXJuIGZpbHRlci5jbGlwVG9NYXhFZmZlY3RSZWN0KGlt
YWdlUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAogSW50T3V0c2V0cyBGRURyb3BTaGFk
b3c6Om91dHNldHMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKaW5kZXggNzFmMzBiYmE0ODc3NmY3ZGI0
NmJlMjk3ZDIyMTM4YzQ0ZDE5ODNlNi4uNThmNmU3OTZjNzkzOTE2YTExNmQyNDZhNDE1NTQ4ZmU0
NjZkMDczYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURyb3BTaGFkb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgRkVEcm9wU2hhZG93KGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBm
bG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KTsK
IAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3Zl
cnJpZGU7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImLCBj
b25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2
ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBj
b25zdCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKaW5kZXggZDRlZDJkNWUyYWZkMmY2ZjBiY2Q3MTZmMTg0
ZGE1ZmZmYjE3NWZmYy4uNDQzOWEyZTFlNTdiZDk4YmQyYWQ0OGM2ZjY0ZDZkYTU5ODNjMDIwYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZs
b29kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Rmxvb2QuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRlICJDb2xvclNlcmlhbGl6YXRp
b24uaCIKICNpbmNsdWRlICJGRUZsb29kU29mdHdhcmVBcHBsaWVyLmgiCisjaW5jbHVkZSAiRmls
dGVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC01OCw2ICs1OSwxMSBAQCBib29sIEZFRmxvb2Q6OnNldEZsb29kT3BhY2l0eShm
bG9hdCBmbG9vZE9wYWNpdHkpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK0Zsb2F0UmVjdCBGRUZs
b29kOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRl
ckltYWdlVmVjdG9yJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0
Cit7CisgICAgcmV0dXJuIGZpbHRlci5tYXhFZmZlY3RSZWN0KHByaW1pdGl2ZVN1YnJlZ2lvbik7
Cit9CisKIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RBcHBsaWVyPiBGRUZsb29kOjpjcmVh
dGVBcHBsaWVyKGNvbnN0IEZpbHRlciYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEZpbHRlckVmZmVj
dEFwcGxpZXI6OmNyZWF0ZTxGRUZsb29kU29mdHdhcmVBcHBsaWVyPigqdGhpcyk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCmluZGV4
IGQ1ZjQ0ZWE5ZDI3ODMwZmZiMzNmNjk2OGM3OGE1NzE5MDlhMDk2ZjUuLjhmYzFkOTdhODMyMTY2
MDI5ZmJlZjk5MjVjMmU1ZjdhYzY3MTI4NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oCkBAIC00Niw3ICs0Niw3IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgRkVGbG9vZChjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQg
Zmxvb2RPcGFjaXR5KTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29u
c3QgRmlsdGVyJikgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRS
ZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVj
dChjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBG
bG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4gY3JlYXRlQXBwbGllcihjb25zdCBGaWx0
ZXImKSBjb25zdCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAppbmRleCA2Y2U2ZmY3
ZTdlY2Y4NDk1NDVlYTg5Zjk3MmNjYmY3MTYwOWU2NWY5Li4xNmVhMjJkOGE0OTI5ZTIwNTRkNDZk
Y2MyZGYyNWE0NmJiNjc2MTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcApAQCAtOTEsNiArOTEs
NyBAQCBJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUo
RmxvYXRTaXplIHN0ZERldmlhdGlvbikKIAogSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3Vs
YXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXImIGZpbHRlciwgRmxvYXRTaXplIHN0ZERldmlhdGlv
bikKIHsKKyAgICBzdGREZXZpYXRpb24gPSBmaWx0ZXIucmVzb2x2ZWRTaXplKHN0ZERldmlhdGlv
bik7CiAgICAgcmV0dXJuIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShmaWx0ZXIuc2NhbGVk
QnlGaWx0ZXJTY2FsZShzdGREZXZpYXRpb24pKTsKIH0KIApAQCAtMTAyLDI3ICsxMDMsMjEgQEAg
SW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZShGbG9hdFNpemUgc3Rk
RGV2aWF0aW9uKQogICAgIHJldHVybiB7IDMgKiBrZXJuZWxTaXplLndpZHRoKCkgLyAyLCAzICog
a2VybmVsU2l6ZS5oZWlnaHQoKSAvIDIgfTsKIH0KIAotdm9pZCBGRUdhdXNzaWFuQmx1cjo6ZGV0
ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCitGbG9hdFJlY3Qg
RkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwg
Y29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRp
dmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2FsY3VsYXRl
S2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0ZFkgfSk7CisgICAgYXV0byBpbWFnZVJl
Y3QgPSBpbnB1dHNbMF0tPmltYWdlUmVjdCgpOwogCi0gICAgRmxvYXRSZWN0IGFic29sdXRlUGFp
bnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7CiAgICAgLy8gRWRn
ZSBtb2RlcyBvdGhlciB0aGFuICdub25lJyBkbyBub3QgaW5mbGF0ZSB0aGUgYWZmZWN0ZWQgcGFp
bnQgcmVjdC4KLSAgICBpZiAobV9lZGdlTW9kZSAhPSBFZGdlTW9kZVR5cGU6Ok5vbmUpIHsKLSAg
ICAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVBhaW50
UmVjdCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2VkZ2VNb2RlICE9IEVk
Z2VNb2RlVHlwZTo6Tm9uZSkKKyAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoaW1hZ2VS
ZWN0KTsKIAotICAgIC8vIFdlIHRha2UgdGhlIGhhbGYga2VybmVsIHNpemUgYW5kIG11bHRpcGx5
IGl0IHdpdGggdGhyZWUsIGJlY2F1c2Ugd2UgcnVuIGJveCBibHVyIHRocmVlIHRpbWVzLgotICAg
IGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVYKDMgKiBrZXJuZWxTaXplLndpZHRoKCkgKiAwLjVm
KTsKLSAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRlWSgzICoga2VybmVsU2l6ZS5oZWlnaHQo
KSAqIDAuNWYpOworICAgIGF1dG8ga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVs
U2l6ZShmaWx0ZXIucmVzb2x2ZWRTaXplKHsgbV9zdGRYLCBtX3N0ZFkgfSkpOwogCi0gICAgaWYg
KGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgYWJzb2x1dGVQYWludFJlY3QuaW50ZXJzZWN0KG1h
eEVmZmVjdFJlY3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC51bml0
ZShtYXhFZmZlY3RSZWN0KCkpOworICAgIC8vIFdlIHRha2UgdGhlIGhhbGYga2VybmVsIHNpemUg
YW5kIG11bHRpcGx5IGl0IHdpdGggdGhyZWUsIGJlY2F1c2Ugd2UgcnVuIGJveCBibHVyIHRocmVl
IHRpbWVzLgorICAgIGltYWdlUmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgpICog
MC41Zik7CisgICAgaW1hZ2VSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICog
MC41Zik7CiAKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29s
dXRlUGFpbnRSZWN0KSk7CisgICAgcmV0dXJuIGZpbHRlci5jbGlwVG9NYXhFZmZlY3RSZWN0KGlt
YWdlUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAogSW50T3V0c2V0cyBGRUdhdXNzaWFu
Qmx1cjo6b3V0c2V0cygpIGNvbnN0CkBAIC0xMzEsOSArMTI2LDkgQEAgSW50T3V0c2V0cyBGRUdh
dXNzaWFuQmx1cjo6b3V0c2V0cygpIGNvbnN0CiAgICAgcmV0dXJuIHsgb3V0c2V0U2l6ZS5oZWln
aHQoKSwgb3V0c2V0U2l6ZS53aWR0aCgpLCBvdXRzZXRTaXplLmhlaWdodCgpLCBvdXRzZXRTaXpl
LndpZHRoKCkgfTsKIH0KIAotYm9vbCBGRUdhdXNzaWFuQmx1cjo6cmVzdWx0SXNBbHBoYUltYWdl
KCkgY29uc3QKK2Jvb2wgRkVHYXVzc2lhbkJsdXI6OnJlc3VsdElzQWxwaGFJbWFnZShjb25zdCBG
aWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzKSBjb25zdAogewotICAgIHJldHVybiBpbnB1dEVmZmVj
dCgwKS0+cmVzdWx0SXNBbHBoYUltYWdlKCk7CisgICAgcmV0dXJuIGlucHV0c1swXS0+aXNBbHBo
YUltYWdlKCk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RBcHBsaWVyPiBGRUdh
dXNzaWFuQmx1cjo6Y3JlYXRlQXBwbGllcihjb25zdCBGaWx0ZXImKSBjb25zdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFu
Qmx1ci5oCmluZGV4IDIyOWY0ZjM5NDZlYTRkOWI0NjU2MmUxODQ1NGNjODc1Mzg2NTBlYWMuLjg3
MTg1M2RmNDkxMjA0NDc4OThjOGJiNTI1ZmI0MDRkZmQ1ZjMxNTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVy
LmgKQEAgLTQ3LDExICs0NywxMSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEZFR2F1c3NpYW5C
bHVyKGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSk7CiAKLSAgICB2b2lkIGRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOworICAgIEZsb2F0UmVj
dCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVySW1hZ2VWZWN0
b3ImIGlucHV0cywgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92
ZXJyaWRlOwogCiAgICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAg
ICBib29sIHJlc3VsdElzQWxwaGFJbWFnZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgcmVz
dWx0SXNBbHBoYUltYWdlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0IG92
ZXJyaWRlOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdEFwcGxpZXI+IGNyZWF0
ZUFwcGxpZXIoY29uc3QgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmlu
ZGV4IDZiMDY2YjNiYTBjNWNmZmIwZTQ1MjIzYjAzMmViMzhjMWY5MzQ1OGEuLjVlMzg2OGZhMmJh
MmJkZDlhMTE5MWUxOWM4YTI1NTVkNTQxZmFhODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApAQCAtODEsNiAr
ODEsMTEgQEAgYm9vbCBGRUxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWShmbG9hdCBrZXJu
ZWxVbml0TGVuZ3RoWSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorRmxvYXRSZWN0IEZFTGlnaHRp
bmc6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVy
SW1hZ2VWZWN0b3ImLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QK
K3sKKyAgICByZXR1cm4gZmlsdGVyLm1heEVmZmVjdFJlY3QocHJpbWl0aXZlU3VicmVnaW9uKTsK
K30KKwogc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdEFwcGxpZXI+IEZFTGlnaHRpbmc6OmNy
ZWF0ZUFwcGxpZXIoY29uc3QgRmlsdGVyJikgY29uc3QKIHsKICAgICByZXR1cm4gRmlsdGVyRWZm
ZWN0QXBwbGllcjo6Y3JlYXRlPEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI+KCp0aGlzKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdo
dGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0
aW5nLmgKaW5kZXggOWQ3ZDZhZTI1NmM5NmJlZjZmZGZjYjZjMDdiNWIxYzA0OGIyZjlhYS4uZGUw
YjM4NmExMWM3MTU4YzUzOGJjYjRhODAyYzdjOGNmMGI1Njg3MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgKQEAgLTU4
LDcgKzU4LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIEZFTGlnaHRpbmcoVHlwZSwgY29u
c3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVz
ZUNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50
LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxM
aWdodFNvdXJjZT4mJik7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNv
bnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50
UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJl
Y3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3Qg
RmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdEFwcGxpZXI+IGNyZWF0ZUFwcGxpZXIoY29uc3QgRmls
dGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAppbmRleCBmMWY0ZGRkNjk5
ZmIxZjlmN2E1N2U3Y2Y0NGJiMDcyZGJlNDlkYzQ1Li4yNTk2OWI4MTlhYjYyNzE0ZmIwYmY3MDI5
NDY0YTg3NmE3NDZmZTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCkBAIC02OCwyMCArNjgsMTYgQEAg
Ym9vbCBGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1koZmxvYXQgcmFkaXVzWSkKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBGRU1vcnBob2xvZ3k6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KGNvbnN0IEZpbHRlciYgZmlsdGVyKQorRmxvYXRSZWN0IEZFTW9ycGhvbG9neTo6Y2FsY3VsYXRl
SW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYg
aW5wdXRzLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAg
ICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0
KCk7Ci0gICAgcGFpbnRSZWN0LmluZmxhdGUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBt
X3JhZGl1c1gsIG1fcmFkaXVzWSB9KSk7Ci0gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAg
ICAgcGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAg
ICAgcGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgc2V0QWJzb2x1dGVQYWlu
dFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKKyAgICBhdXRvIGltYWdlUmVjdCA9
IGlucHV0c1swXS0+aW1hZ2VSZWN0KCk7CisgICAgaW1hZ2VSZWN0LmluZmxhdGUoZmlsdGVyLnJl
c29sdmVkU2l6ZSh7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKKyAgICByZXR1cm4gZmlsdGVy
LmNsaXBUb01heEVmZmVjdFJlY3QoaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQog
Ci1ib29sIEZFTW9ycGhvbG9neTo6cmVzdWx0SXNBbHBoYUltYWdlKCkgY29uc3QKK2Jvb2wgRkVN
b3JwaG9sb2d5OjpyZXN1bHRJc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlu
cHV0cykgY29uc3QKIHsKLSAgICByZXR1cm4gaW5wdXRFZmZlY3QoMCktPnJlc3VsdElzQWxwaGFJ
bWFnZSgpOworICAgIHJldHVybiBpbnB1dHNbMF0tPmlzQWxwaGFJbWFnZSgpOwogfQogCiBzdGQ6
OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4gRkVNb3JwaG9sb2d5OjpjcmVhdGVBcHBs
aWVyKGNvbnN0IEZpbHRlciYpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAppbmRleCBlNTQ4NDgwN2I3NDcz
NzNhMWFlMzE4N2NmZjVjZGUwZjdjYzdlY2RkLi4yMmExNTIxMWRmYTE2ZmJkMjBmOGEwYzEwM2Jm
YjA3M2Y4MjE0MGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKQEAgLTQ4LDkgKzQ4LDkgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBGRU1vcnBob2xvZ3koTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxvYXQg
cmFkaXVzWCwgZmxvYXQgcmFkaXVzWSk7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJ
bWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywg
Y29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0g
ICAgYm9vbCByZXN1bHRJc0FscGhhSW1hZ2UoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIHJl
c3VsdElzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzKSBjb25zdCBv
dmVycmlkZTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RBcHBsaWVyPiBjcmVh
dGVBcHBsaWVyKGNvbnN0IEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCmluZGV4
IDA0NDkwYjM1NjEzYmZiNzAxYjJmMGNkNGRkYmFkYzRmM2Q0YjgyN2EuLjlmMWMyNzk3MTkyOGYy
MzI4YmQxODA2NTRkZDJlYTcxZDNhMmZjZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCkBAIC01MywyMCArNTMsMTYg
QEAgdm9pZCBGRU9mZnNldDo6c2V0RHkoZmxvYXQgZHkpCiAgICAgbV9keSA9IGR5OwogfQogCi12
b2lkIEZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZp
bHRlcikKK0Zsb2F0UmVjdCBGRU9mZnNldDo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRl
ciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGbG9hdFJl
Y3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0
ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgcGFpbnRSZWN0Lm1v
dmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX2R4LCBtX2R5IH0pKTsKLSAgICBpZiAo
Y2xpcHNUb0JvdW5kcygpKQotICAgICAgICBwYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJl
Y3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBwYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgp
KTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkp
OworICAgIGF1dG8gaW1hZ2VSZWN0ID0gaW5wdXRzWzBdLT5pbWFnZVJlY3QoKTsKKyAgICBpbWFn
ZVJlY3QubW92ZShmaWx0ZXIucmVzb2x2ZWRTaXplKHsgbV9keCwgbV9keSB9KSk7CisgICAgcmV0
dXJuIGZpbHRlci5jbGlwVG9NYXhFZmZlY3RSZWN0KGltYWdlUmVjdCwgcHJpbWl0aXZlU3VicmVn
aW9uKTsKIH0KIAotYm9vbCBGRU9mZnNldDo6cmVzdWx0SXNBbHBoYUltYWdlKCkgY29uc3QKK2Jv
b2wgRkVPZmZzZXQ6OnJlc3VsdElzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYg
aW5wdXRzKSBjb25zdAogewotICAgIHJldHVybiBpbnB1dEVmZmVjdCgwKS0+cmVzdWx0SXNBbHBo
YUltYWdlKCk7CisgICAgcmV0dXJuIGlucHV0c1swXS0+aXNBbHBoYUltYWdlKCk7CiB9CiAKIHN0
ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RBcHBsaWVyPiBGRU9mZnNldDo6Y3JlYXRlQXBwbGll
cihjb25zdCBGaWx0ZXImKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCmluZGV4IDNjMmRhYWYzM2ZmZGJlODYxZjI5MDRj
ZjIwMjIzNWQ0M2U4MWRjZmYuLjEwZWIzM2M5NGY5OGI3ZGNhMzY3NTFjNmY4OGYxNjk4MTY1OTkw
ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVPZmZzZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFT2Zmc2V0LmgKQEAgLTM5LDkgKzM5LDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRU9m
ZnNldChmbG9hdCBkeCwgZmxvYXQgZHkpOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRl
SW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMs
IGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAot
ICAgIGJvb2wgcmVzdWx0SXNBbHBoYUltYWdlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBy
ZXN1bHRJc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykgY29uc3Qg
b3ZlcnJpZGU7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4gY3Jl
YXRlQXBwbGllcihjb25zdCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCmluZGV4IDJh
ZDk3YjMyN2JkOWVjMTJkNTc3NWU4NmYzOWUwMjc0YmYzZTQ3MzguLjBjYWFkZWQyNmZjZjE2NzYz
ZTFhOTFiNjU2ZjY0M2FmYWZhZDEzZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKQEAgLTM3LDkgKzM3LDE0IEBAIEZFVGls
ZTo6RkVUaWxlKCkKIHsKIH0KIAotYm9vbCBGRVRpbGU6OnJlc3VsdElzQWxwaGFJbWFnZSgpIGNv
bnN0CitGbG9hdFJlY3QgRkVUaWxlOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBm
aWx0ZXIsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRp
dmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlucHV0RWZmZWN0KDApLT5yZXN1bHRJ
c0FscGhhSW1hZ2UoKTsKKyAgICByZXR1cm4gZmlsdGVyLm1heEVmZmVjdFJlY3QocHJpbWl0aXZl
U3VicmVnaW9uKTsKK30KKworYm9vbCBGRVRpbGU6OnJlc3VsdElzQWxwaGFJbWFnZShjb25zdCBG
aWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzKSBjb25zdAoreworICAgIHJldHVybiBpbnB1dHNbMF0t
PmlzQWxwaGFJbWFnZSgpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGll
cj4gRkVUaWxlOjpjcmVhdGVBcHBsaWVyKGNvbnN0IEZpbHRlciYpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaAppbmRleCAyZWUz
NzMxMjhmY2E0ZjU2MTRmZTNhZWQ4NDJmN2I3YTk4NTkzYjRmLi5mYjI2NTNhZjgyM2U3M2VmYTJh
YTk1NjhkNmI2NTE4Y2ZmNmM5MDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKQEAgLTMzLDkgKzMzLDkgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBGRVRpbGUoKTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3Np
bmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUlt
YWdlUmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBj
b25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAg
ICBib29sIHJlc3VsdElzQWxwaGFJbWFnZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgcmVz
dWx0SXNBbHBoYUltYWdlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0IG92
ZXJyaWRlOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdEFwcGxpZXI+IGNyZWF0
ZUFwcGxpZXIoY29uc3QgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNw
cAppbmRleCBhYzZhNDQ5ZmVjYWZiNzhhMDQyM2RmMTdjYjQzNWY0NGQxNGU1OWMzLi40YjQzZmU5
NGZkMzA3NTA5Nzg1OGZlYzZlMjlkNjE1NWRjNzQ5OWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCkBA
IC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiRkVUdXJidWxlbmNlLmgiCiAKICNpbmNsdWRlICJG
RVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTk1
LDYgKzk2LDExIEBAIGJvb2wgRkVUdXJidWxlbmNlOjpzZXRTdGl0Y2hUaWxlcyhib29sIHN0aXRj
aCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorRmxvYXRSZWN0IEZFVHVyYnVsZW5jZTo6Y2FsY3Vs
YXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3Rv
ciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAoreworICAgIHJl
dHVybiBmaWx0ZXIubWF4RWZmZWN0UmVjdChwcmltaXRpdmVTdWJyZWdpb24pOworfQorCiBzdGQ6
OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4gRkVUdXJidWxlbmNlOjpjcmVhdGVBcHBs
aWVyKGNvbnN0IEZpbHRlciYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEZpbHRlckVmZmVjdEFwcGxp
ZXI6OmNyZWF0ZTxGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI+KCp0aGlzKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5j
ZS5oCmluZGV4IDVmZmFkZGVjMjFiMWVmYjg3NGY5YjYyNjI4OWFlZmNjNDczOWRlNGUuLjE3NWZm
Zjc0MjgyNmZjYWMyMmNkZjNiODM2ZDJjOWI5NzA4MDEwOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaApAQCAt
NjAsNyArNjAsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEZFVHVyYnVsZW5jZShUdXJidWxl
bmNlVHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQg
bnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcyk7CiAKLSAgICB2b2lkIGRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJz
b2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAg
IEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVy
SW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24p
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdEFwcGxp
ZXI+IGNyZWF0ZUFwcGxpZXIoY29uc3QgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNwcApp
bmRleCAwZWUxMmNiZDY4ODZlNzFmM2FmODgwZWUyZDQzN2UxMDgyMzA3Mjg5Li44M2NmYjE2ZmZh
NWMxZWQzZjA0NWU3Y2M3NDY5MjM5YTVkMzAyMzg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwCkBAIC0zMCwyMiArMzAsNTIg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GaWx0ZXI6OkZpbHRlcihGaWx0ZXI6OlR5cGUg
ZmlsdGVyVHlwZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBGbG9hdFNpemUm
IGZpbHRlclNjYWxlKQorRmlsdGVyOjpGaWx0ZXIoRmlsdGVyOjpUeXBlIGZpbHRlclR5cGUsIFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwg
Q2xpcE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9uKQogICAgIDogRmlsdGVyRnVuY3Rpb24oZmlsdGVy
VHlwZSkKICAgICAsIG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQogICAgICwgbV9maWx0
ZXJTY2FsZShmaWx0ZXJTY2FsZSkKKyAgICAsIG1fY2xpcE9wZXJhdGlvbihjbGlwT3BlcmF0aW9u
KQogewogfQogCi1GaWx0ZXI6OkZpbHRlcihGaWx0ZXI6OlR5cGUgZmlsdGVyVHlwZSwgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdp
b24pCitGaWx0ZXI6OkZpbHRlcihGaWx0ZXI6OlR5cGUgZmlsdGVyVHlwZSwgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIENs
aXBPcGVyYXRpb24gY2xpcE9wZXJhdGlvbikKICAgICA6IEZpbHRlckZ1bmN0aW9uKGZpbHRlclR5
cGUpCiAgICAgLCBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSkKICAgICAsIG1fZmlsdGVy
U2NhbGUoZmlsdGVyU2NhbGUpCiAgICAgLCBtX3NvdXJjZUltYWdlUmVjdChzb3VyY2VJbWFnZVJl
Y3QpCiAgICAgLCBtX2ZpbHRlclJlZ2lvbihmaWx0ZXJSZWdpb24pCisgICAgLCBtX2NsaXBPcGVy
YXRpb24oY2xpcE9wZXJhdGlvbikKIHsKIH0KIAorRmxvYXRQb2ludCBGaWx0ZXI6OnNjYWxlZEJ5
RmlsdGVyU2NhbGUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHBvaW50LnNjYWxlZChtX2ZpbHRlclNjYWxlLndpZHRoKCksIG1fZmlsdGVyU2NhbGUuaGVpZ2h0
KCkpOworfQorCitGbG9hdFNpemUgRmlsdGVyOjpzY2FsZWRCeUZpbHRlclNjYWxlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gc2l6ZSAqIG1fZmlsdGVyU2NhbGU7
Cit9CisKK0Zsb2F0UmVjdCBGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyU2NhbGUoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KSBjb25zdAoreworICAgIGF1dG8gc2NhbGVkUmVjdCA9IHJlY3Q7CisgICAgc2Nh
bGVkUmVjdC5zY2FsZShtX2ZpbHRlclNjYWxlKTsKKyAgICByZXR1cm4gc2NhbGVkUmVjdDsKK30K
KworRmxvYXRSZWN0IEZpbHRlcjo6bWF4RWZmZWN0UmVjdChjb25zdCBGbG9hdFJlY3QmIHByaW1p
dGl2ZVN1YnJlZ2lvbikgY29uc3QKK3sKKyAgICByZXR1cm4gaW50ZXJzZWN0aW9uKHByaW1pdGl2
ZVN1YnJlZ2lvbiwgbV9maWx0ZXJSZWdpb24pOworfQorCitGbG9hdFJlY3QgRmlsdGVyOjpjbGlw
VG9NYXhFZmZlY3RSZWN0KGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKK3sKKyAgICBhdXRvIG1heEVmZmVjdFJlY3Qg
PSB0aGlzLT5tYXhFZmZlY3RSZWN0KHByaW1pdGl2ZVN1YnJlZ2lvbik7CisgICAgcmV0dXJuIG1f
Y2xpcE9wZXJhdGlvbiA9PSBDbGlwT3BlcmF0aW9uOjpJbnRlcnNlY3QgPyBpbnRlcnNlY3Rpb24o
aW1hZ2VSZWN0LCBtYXhFZmZlY3RSZWN0KSA6IHVuaW9uUmVjdChpbWFnZVJlY3QsIG1heEVmZmVj
dFJlY3QpOworfQorCiBSZWZQdHI8RmlsdGVySW1hZ2U+IEZpbHRlcjo6YXBwbHkoSW1hZ2VCdWZm
ZXIqIHNvdXJjZUltYWdlKQogewogICAgIHNldFNvdXJjZUltYWdlKHNvdXJjZUltYWdlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCmlu
ZGV4IGJjOWI5NGQ2NTM5ODlkZWFhYzNmNjQyZjFmMzc0YTc1YzVmN2QzNjIuLjFjZGUzOTM0YjU3
MzQ1YzMwMGM1NGU1YjhlMjdjODdlN2RkYmQxNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaApAQCAtMzUsNiArMzUsOCBAQCBjbGFz
cyBGaWx0ZXIgOiBwdWJsaWMgRmlsdGVyRnVuY3Rpb24gewogICAgIHVzaW5nIEZpbHRlckZ1bmN0
aW9uOjphcHBseTsKIAogcHVibGljOgorICAgIGVudW0gY2xhc3MgQ2xpcE9wZXJhdGlvbiB7IElu
dGVyc2VjdCwgVW5pdGUgfTsKKwogICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nTW9kZTsgfQogICAgIHZvaWQgc2V0UmVuZGVyaW5nTW9k
ZShSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpIHsgbV9yZW5kZXJpbmdNb2RlID0gcmVuZGVy
aW5nTW9kZTsgfQogICAgIApAQCAtNTAsMTQgKzUyLDIzIEBAIHB1YmxpYzoKICAgICBJbWFnZUJ1
ZmZlciogc291cmNlSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUltYWdlLmdldCgpOyB9
CiAgICAgdm9pZCBzZXRTb3VyY2VJbWFnZShSZWZQdHI8SW1hZ2VCdWZmZXI+JiYgc291cmNlSW1h
Z2UpIHsgbV9zb3VyY2VJbWFnZSA9IFdURk1vdmUoc291cmNlSW1hZ2UpOyB9CiAKLSAgICB2aXJ0
dWFsIEZsb2F0U2l6ZSBzY2FsZWRCeUZpbHRlclNjYWxlKEZsb2F0U2l6ZSBzaXplKSBjb25zdCB7
IHJldHVybiBzaXplICogbV9maWx0ZXJTY2FsZTsgfQorICAgIENsaXBPcGVyYXRpb24gY2xpcE9w
ZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcE9wZXJhdGlvbjsgfQorCisgICAgdmlydHVh
bCBGbG9hdFNpemUgcmVzb2x2ZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgY29uc3QgeyBy
ZXR1cm4gc2l6ZTsgfQorCisgICAgRmxvYXRQb2ludCBzY2FsZWRCeUZpbHRlclNjYWxlKGNvbnN0
IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICBGbG9hdFNpemUgc2NhbGVkQnlGaWx0ZXJTY2FsZShj
b25zdCBGbG9hdFNpemUmKSBjb25zdDsKKyAgICBGbG9hdFJlY3Qgc2NhbGVkQnlGaWx0ZXJTY2Fs
ZShjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKworICAgIEZsb2F0UmVjdCBtYXhFZmZlY3RSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdDsKKyAgICBGbG9hdFJl
Y3QgY2xpcFRvTWF4RWZmZWN0UmVjdChjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0OwogCiAgICAgdmlydHVhbCBSZWZQ
dHI8RmlsdGVySW1hZ2U+IGFwcGx5KCkgPSAwOwogICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxG
aWx0ZXJJbWFnZT4gYXBwbHkoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKTsKIAogcHJvdGVjdGVk
OgotICAgIEZpbHRlcihGaWx0ZXI6OlR5cGUsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEZsb2F0U2l6
ZSYgZmlsdGVyU2NhbGUpOwotICAgIEZpbHRlcihGaWx0ZXI6OlR5cGUsIFJlbmRlcmluZ01vZGUs
IGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1h
Z2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbik7CisgICAgRmlsdGVyKEZpbHRl
cjo6VHlwZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgQ2xp
cE9wZXJhdGlvbiA9IENsaXBPcGVyYXRpb246OkludGVyc2VjdCk7CisgICAgRmlsdGVyKEZpbHRl
cjo6VHlwZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVn
aW9uLCBDbGlwT3BlcmF0aW9uID0gQ2xpcE9wZXJhdGlvbjo6SW50ZXJzZWN0KTsKIAogcHJpdmF0
ZToKICAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKQEAgLTY3LDYgKzc4LDggQEAg
cHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247CiAKICAgICBSZWZQdHI8SW1h
Z2VCdWZmZXI+IG1fc291cmNlSW1hZ2U7CisKKyAgICBDbGlwT3BlcmF0aW9uIG1fY2xpcE9wZXJh
dGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRl
eCAwOGQ4ZDM2YzA3MDkyMGFmMzkyMjFlMzBhMTE1NjQ2NWY1ZTI4YTJlLi5lM2Q5NGY5ODlkZDM0
MTg2NmUzMGZmYzIxZjhmYjI1MTMwNWYwN2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0zNCwy
OCArMzQsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEZpbHRlckVmZmVjdDo6
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikKK0Zsb2F0UmVjdCBGaWx0
ZXJFZmZlY3Q6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3Qg
RmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJy
ZWdpb24pIGNvbnN0CiB7Ci0gICAgbV9hYnNvbHV0ZVBhaW50UmVjdCA9IEludFJlY3QoKTsKLSAg
ICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1faW5wdXRFZmZlY3RzKQotICAgICAgICBtX2Fic29sdXRl
UGFpbnRSZWN0LnVuaXRlKGVmZmVjdC0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgY2xpcEFi
c29sdXRlUGFpbnRSZWN0KCk7Ci19Ci0KLXZvaWQgRmlsdGVyRWZmZWN0OjpjbGlwQWJzb2x1dGVQ
YWludFJlY3QoKQotewotICAgIC8vIEZpbHRlcnMgaW4gU1ZHIGNsaXAgdG8gcHJpbWl0aXZlIHN1
YnJlZ2lvbiwgd2hpbGUgQ1NTIGRvZXNuJ3QuCi0gICAgaWYgKG1fY2xpcHNUb0JvdW5kcykKLSAg
ICAgICAgbV9hYnNvbHV0ZVBhaW50UmVjdC5pbnRlcnNlY3QoZW5jbG9zaW5nSW50UmVjdChtX21h
eEVmZmVjdFJlY3QpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYWJzb2x1dGVQYWludFJlY3QudW5p
dGUoZW5jbG9zaW5nSW50UmVjdChtX21heEVmZmVjdFJlY3QpKTsKLX0KLQotRmxvYXRQb2ludCBG
aWx0ZXJFZmZlY3Q6Om1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKEZsb2F0UG9pbnQgdXNl
clNwYWNlUG9pbnQpIGNvbnN0Ci17Ci0gICAgRmxvYXRQb2ludCBhYnNvbHV0ZVBvaW50ID0gbWFw
UG9pbnQodXNlclNwYWNlUG9pbnQsIG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uLCBtX2Fic29s
dXRlVW5jbGlwcGVkU3VicmVnaW9uKTsKLSAgICBhYnNvbHV0ZVBvaW50Lm1vdmVCeSgtbV9hYnNv
bHV0ZVBhaW50UmVjdC5sb2NhdGlvbigpKTsKLSAgICByZXR1cm4gYWJzb2x1dGVQb2ludDsKKyAg
ICBGbG9hdFJlY3QgaW1hZ2VSZWN0OworICAgIGZvciAoYXV0byYgaW5wdXQgOiBpbnB1dHMpCisg
ICAgICAgIGltYWdlUmVjdC51bml0ZShpbnB1dC0+aW1hZ2VSZWN0KCkpOworICAgIHJldHVybiBm
aWx0ZXIuY2xpcFRvTWF4RWZmZWN0UmVjdChpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7
CiB9CiAKIEZsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1
YnJlZ2lvbihjb25zdCBGaWx0ZXImIGZpbHRlcikKQEAgLTg5LDggKzczLDYgQEAgRmxvYXRSZWN0
IEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZp
bHRlciYgZmlsdGVyKQogCiAgICAgYXV0byBhYnNvbHV0ZVN1YnJlZ2lvbiA9IHN1YnJlZ2lvbjsK
ICAgICBhYnNvbHV0ZVN1YnJlZ2lvbi5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAg
Ly8gU2F2ZSB0aGlzIGJlZm9yZSBjbGlwcGluZyBzbyB3ZSBjYW4gdXNlIGl0IHRvIG1hcCBsaWdo
dGluZyBwb2ludHMgZnJvbSB1c2VyIHNwYWNlIHRvIGJ1ZmZlciBjb29yZGluYXRlcy4KLSAgICBz
ZXRVbmNsaXBwZWRBYnNvbHV0ZVN1YnJlZ2lvbihhYnNvbHV0ZVN1YnJlZ2lvbik7CiAKICAgICAv
LyBDbGlwIGV2ZXJ5IGZpbHRlciBlZmZlY3QgdG8gdGhlIGZpbHRlciByZWdpb24uCiAgICAgYXV0
byBhYnNvbHV0ZVNjYWxlZEZpbHRlclJlZ2lvbiA9IGZpbHRlci5maWx0ZXJSZWdpb24oKTsKQEAg
LTEyMSwyNiArMTAzLDIyIEBAIGJvb2wgRmlsdGVyRWZmZWN0OjphcHBseShjb25zdCBGaWx0ZXIm
IGZpbHRlcikKICAgICAgICAgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShpbiwgaSk7CiAgICAg
fQogCi0gICAgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoZmlsdGVyKTsKLQotICAgIExPR19X
SVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0KLSAgICAgICAgPDwgIkZpbHRlckVmZmVjdCAiIDw8
IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGFwcGx5KCk6IgotICAgICAgICA8PCAi
XG4gIGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiAiIDw8IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uCi0gICAgICAgIDw8ICJcbiAgZWZmZWN0Qm91bmRhcmllcyAiIDw8IG1fZWZmZWN0Qm91bmRh
cmllcwotICAgICAgICA8PCAiXG4gIGFic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uICIgPDwgbV9h
YnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbgotICAgICAgICA8PCAiXG4gIGFic29sdXRlUGFpbnRS
ZWN0ICIgPDwgbV9hYnNvbHV0ZVBhaW50UmVjdAotICAgICAgICA8PCAiXG4gIG1heEVmZmVjdFJl
Y3QgIiA8PCBtX21heEVmZmVjdFJlY3QKLSAgICAgICAgPDwgIlxuICBmaWx0ZXIgc2NhbGUgIiA8
PCBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVjdC5p
c0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKG1fYWJzb2x1dGVQYWlu
dFJlY3Quc2l6ZSgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgaWYgKCFtYXlQcm9k
dWNlSW52YWxpZFByZW11bHRpcGxpZWRQaXhlbHMoKSkgewogICAgICAgICBmb3IgKGF1dG8mIGlu
IDogbV9pbnB1dEVmZmVjdHMpCiAgICAgICAgICAgICBpbi0+Y29ycmVjdFByZW11bHRpcGxpZWRS
ZXN1bHRJZk5lZWRlZCgpOwogICAgIH0KIAotICAgIG1fZmlsdGVySW1hZ2UgPSBGaWx0ZXJJbWFn
ZTo6Y3JlYXRlKG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uLCBtX2Fic29sdXRlUGFpbnRSZWN0
LCByZXN1bHRJc0FscGhhSW1hZ2UoKSwgZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgcmVzdWx0Q29s
b3JTcGFjZSgpKTsKKyAgICBhdXRvIGlucHV0RmlsdGVySW1hZ2VzID0gdGhpcy0+aW5wdXRGaWx0
ZXJJbWFnZXMoKTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IGNhbGN1bGF0ZUltYWdlUmVjdChmaWx0
ZXIsIGlucHV0RmlsdGVySW1hZ2VzLCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik7CisgICAg
YXV0byBhYnNvbHV0ZUltYWdlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoZmlsdGVyLnNjYWxlZEJ5
RmlsdGVyU2NhbGUoaW1hZ2VSZWN0KSk7CisKKyAgICBpZiAoYWJzb2x1dGVJbWFnZVJlY3QuaXNF
bXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhhYnNvbHV0ZUltYWdlUmVj
dC5zaXplKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgYXV0byBpc0FscGhh
SW1hZ2UgPSByZXN1bHRJc0FscGhhSW1hZ2UoaW5wdXRGaWx0ZXJJbWFnZXMpOworICAgIGF1dG8g
aW1hZ2VDb2xvclNwYWNlID0gcmVzdWx0Q29sb3JTcGFjZSgpOworCisgICAgbV9maWx0ZXJJbWFn
ZSA9IEZpbHRlckltYWdlOjpjcmVhdGUobV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24sIGltYWdl
UmVjdCwgYWJzb2x1dGVJbWFnZVJlY3QsIGlzQWxwaGFJbWFnZSwgZmlsdGVyLnJlbmRlcmluZ01v
ZGUoKSwgaW1hZ2VDb2xvclNwYWNlKTsKICAgICBpZiAoIW1fZmlsdGVySW1hZ2UpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApAQCAtMTQ4LDcgKzEyNiwxNSBAQCBib29sIEZpbHRlckVmZmVjdDo6
YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgaWYgKCFhcHBsaWVyKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gYXBwbGllci0+YXBwbHkoZmlsdGVyLCBpbnB1dEZp
bHRlckltYWdlcygpLCAqbV9maWx0ZXJJbWFnZSk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRl
cnMsIHN0cmVhbQorICAgICAgICA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8
ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHkoKToiCisgICAgICAgIDw8ICJcbiAgZmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uICIgPDwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24KKyAgICAgICAgPDwg
IlxuICBlZmZlY3RCb3VuZGFyaWVzICIgPDwgbV9lZmZlY3RCb3VuZGFyaWVzCisgICAgICAgIDw8
ICJcbiAgYWJzb2x1dGVQYWludFJlY3QgIiA8PCBhYnNvbHV0ZUltYWdlUmVjdAorICAgICAgICA8
PCAiXG4gIG1heEVmZmVjdFJlY3QgIiA8PCBtX21heEVmZmVjdFJlY3QKKyAgICAgICAgPDwgIlxu
ICBmaWx0ZXIgc2NhbGUgIiA8PCBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CisKKyAgICByZXR1cm4g
YXBwbGllci0+YXBwbHkoZmlsdGVyLCBpbnB1dEZpbHRlckltYWdlcywgKm1fZmlsdGVySW1hZ2Up
OwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHQoKQpAQCAtMTk2LDcgKzE4Miw2
IEBAIFRleHRTdHJlYW0mIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UCiAgICAgCiAgICAgaWYgKHJlcHJlc2VudGF0aW9u
VHlwZSA9PSBSZXByZXNlbnRhdGlvblR5cGU6OkRlYnVnZ2luZykgewogICAgICAgICBUZXh0U3Ry
ZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0
eSgiYWxwaGEgaW1hZ2UiLCByZXN1bHRJc0FscGhhSW1hZ2UoKSk7CiAgICAgICAgIHRzLmR1bXBQ
cm9wZXJ0eSgib3BlcmF0aW5nIGNvbG9yc3BhY2UiLCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwog
ICAgICAgICB0cy5kdW1wUHJvcGVydHkoInJlc3VsdCBjb2xvcnNwYWNlIiwgcmVzdWx0Q29sb3JT
cGFjZSgpKTsKICAgICAgICAgdHMgPDwgIlxuIiA8PCBpbmRlbnQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAppbmRl
eCBlMmJkMWU4M2U5YzAxYTJhYTdlYTRiZTIyMWI2NjEyZDhjODBkNjM5Li5lODNhNDQ5ZTViNTFm
MTQyMmZmMWFmZGFkYzExMGVmNmY5OTA2ZDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKQEAgLTU4LDkgKzU4
LDYgQEAgcHVibGljOgogICAgIC8vIFJlY3Vyc2VzIG9uIGlucHV0cy4KICAgICBGbG9hdFJlY3Qg
ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlciYpOwogCi0gICAg
SW50UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVQYWlu
dFJlY3Q7IH0KLSAgICB2b2lkIHNldEFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEludFJlY3QmIGFi
c29sdXRlUGFpbnRSZWN0KSB7IG1fYWJzb2x1dGVQYWludFJlY3QgPSBhYnNvbHV0ZVBhaW50UmVj
dDsgfQotCiAgICAgRmxvYXRSZWN0IG1heEVmZmVjdFJlY3QoKSBjb25zdCB7IHJldHVybiBtX21h
eEVmZmVjdFJlY3Q7IH0KICAgICB2b2lkIHNldE1heEVmZmVjdFJlY3QoY29uc3QgRmxvYXRSZWN0
JiBtYXhFZmZlY3RSZWN0KSB7IG1fbWF4RWZmZWN0UmVjdCA9IG1heEVmZmVjdFJlY3Q7IH0KIApA
QCAtNzEsOCArNjgsNiBAQCBwdWJsaWM6CiAgICAgLy8gT25seSB0aGUgYXJpdGhtZXRpYyBjb21w
b3NpdGUgZmlsdGVyIGV2ZXIgbmVlZHMgdG8gcGVyZm9ybSBjb3JyZWN0aW9uLgogICAgIHZpcnR1
YWwgdm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKSB7IH0KIAotICAgIHZpcnR1YWwg
dm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKTsKLQogICAgIGVu
dW0gY2xhc3MgUmVwcmVzZW50YXRpb25UeXBlIHsgVGVzdE91dHB1dCwgRGVidWdnaW5nIH07CiAg
ICAgdmlydHVhbCBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpU
ZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlID0gUmVwcmVzZW50YXRpb25UeXBlOjpUZXN0
T3V0cHV0KSBjb25zdDsKIApAQCAtOTYsMTggKzkxLDEzIEBAIHB1YmxpYzoKICAgICBGbG9hdFJl
Y3QgZWZmZWN0Qm91bmRhcmllcygpIGNvbnN0IHsgcmV0dXJuIG1fZWZmZWN0Qm91bmRhcmllczsg
fQogICAgIHZvaWQgc2V0RWZmZWN0Qm91bmRhcmllcyhjb25zdCBGbG9hdFJlY3QmIGVmZmVjdEJv
dW5kYXJpZXMpIHsgbV9lZmZlY3RCb3VuZGFyaWVzID0gZWZmZWN0Qm91bmRhcmllczsgfQogICAg
IAotICAgIHZvaWQgc2V0VW5jbGlwcGVkQWJzb2x1dGVTdWJyZWdpb24oY29uc3QgRmxvYXRSZWN0
JiByKSB7IG1fYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24gPSByOyB9Ci0gICAgCi0gICAgRmxv
YXRQb2ludCBtYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihGbG9hdFBvaW50KSBjb25zdDsK
LSAgICAKLSAgICBib29sIGNsaXBzVG9Cb3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2NsaXBzVG9C
b3VuZHM7IH0KLSAgICB2b2lkIHNldENsaXBzVG9Cb3VuZHMoYm9vbCB2YWx1ZSkgeyBtX2NsaXBz
VG9Cb3VuZHMgPSB2YWx1ZTsgfQorICAgIHZpcnR1YWwgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdl
UmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25z
dCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Q7CiAKICAgICBjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBt
X29wZXJhdGluZ0NvbG9yU3BhY2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0T3BlcmF0aW5nQ29s
b3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpIHsgbV9vcGVy
YXRpbmdDb2xvclNwYWNlID0gY29sb3JTcGFjZTsgfQogCiAgICAgLy8gU29saWQgYmxhY2sgaW1h
Z2Ugd2l0aCBkaWZmZXJlbnQgYWxwaGEgdmFsdWVzLgotICAgIHZpcnR1YWwgYm9vbCByZXN1bHRJ
c0FscGhhSW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBy
ZXN1bHRJc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiByZXN1
bHRDb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNwYWNlOyB9CiAK
ICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3Qq
IGluLCBjb25zdCBpbnQpIHsgaW4tPnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UobV9vcGVyYXRp
bmdDb2xvclNwYWNlKTsgfQpAQCAtMTIwLDE1ICsxMTAsMTEgQEAgcHJvdGVjdGVkOgogICAgIAog
ICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdEFwcGxpZXI+IGNyZWF0ZUFw
cGxpZXIoY29uc3QgRmlsdGVyJikgY29uc3QgPSAwOwogCi0gICAgdm9pZCBjbGlwQWJzb2x1dGVQ
YWludFJlY3QoKTsKLQogcHJpdmF0ZToKICAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9pbnB1dEVm
ZmVjdHM7CiAKICAgICBSZWZQdHI8RmlsdGVySW1hZ2U+IG1fZmlsdGVySW1hZ2U7CiAKLSAgICBJ
bnRSZWN0IG1fYWJzb2x1dGVQYWludFJlY3Q7Ci0gICAgCiAgICAgLy8gVGhlIG1heGltdW0gc2l6
ZSBvZiBhIGZpbHRlciBwcmltaXRpdmUuIEluIFNWRyB0aGlzIGlzIHRoZSBwcmltaXRpdmUgc3Vi
cmVnaW9uIGluIGFic29sdXRlIGNvb3JkaW5hdGUgc3BhY2UuCiAgICAgLy8gVGhlIGFic29sdXRl
IHBhaW50IHJlY3Qgc2hvdWxkIG5ldmVyIGJlIGJpZ2dlciB0aGFuIG1fbWF4RWZmZWN0UmVjdC4K
ICAgICBGbG9hdFJlY3QgbV9tYXhFZmZlY3RSZWN0OwpAQCAtMTQxLDE3ICsxMjcsMTEgQEAgcHJp
dmF0ZToKICAgICAvLyBmaWx0ZXIgcHJpbWl0aXZlIG9uIGEgbGF0ZXIgc3RlcC4KICAgICBGbG9h
dFJlY3QgbV9lZmZlY3RCb3VuZGFyaWVzOwogICAgIAotICAgIC8vIGZpbHRlclByaW1pdGl2ZVN1
YnJlZ2lvbiBtYXBwZWQgdG8gYWJzb2x1dGUgY29vcmRpbmF0ZXMgYmVmb3JlIGNsaXBwaW5nLgot
ICAgIEZsb2F0UmVjdCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uOwotCiAgICAgYm9vbCBt
X2hhc1ggeyBmYWxzZSB9OwogICAgIGJvb2wgbV9oYXNZIHsgZmFsc2UgfTsKICAgICBib29sIG1f
aGFzV2lkdGggeyBmYWxzZSB9OwogICAgIGJvb2wgbV9oYXNIZWlnaHQgeyBmYWxzZSB9OwogCi0g
ICAgLy8gU2hvdWxkIHRoZSBlZmZlY3QgY2xpcCB0byBpdHMgcHJpbWl0aXZlIHJlZ2lvbiwgb3Ig
ZXhwYW5kIHRvIHVzZSB0aGUgY29tYmluZWQgcmVnaW9uIG9mIGl0cyBpbnB1dHMuCi0gICAgYm9v
bCBtX2NsaXBzVG9Cb3VuZHMgeyB0cnVlIH07Ci0KICAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2Ug
bV9vcGVyYXRpbmdDb2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkgfTsK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVySW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJJbWFnZS5jcHAKaW5kZXggM2E0ZmU5MDUzZDZkNzA1OTA2MDFhNzhjNTAyZjdi
ZGQxMTQ1ZmE5YS4uOTU4NGZhNjllZTBlZDJlZGU2NWFmZjliOWY5OTM1YmQ5NWZiNDgzMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJ
bWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJJbWFnZS5jcHAKQEAgLTM4LDE0ICszOCwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVJlZlB0cjxGaWx0ZXJJbWFnZT4gRmlsdGVySW1hZ2U6OmNyZWF0ZShjb25zdCBGbG9hdFJl
Y3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFnZVJlY3Qs
IGJvb2wgaXNBbHBoYUltYWdlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKK1JlZlB0cjxGaWx0ZXJJbWFnZT4gRmls
dGVySW1hZ2U6OmNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29u
c3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEludFJlY3QmIGFic29sdXRlSW1hZ2VSZWN0
LCBib29sIGlzQWxwaGFJbWFnZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCiB7CiAgICAgQVNTRVJUKCFJbWFnZUJ1
ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpKSk7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBGaWx0ZXJJbWFnZShwcmltaXRpdmVTdWJyZWdpb24sIGFic29s
dXRlSW1hZ2VSZWN0LCBpc0FscGhhSW1hZ2UsIHJlbmRlcmluZ01vZGUsIGNvbG9yU3BhY2UpKTsK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbHRlckltYWdlKHByaW1pdGl2ZVN1YnJlZ2lvbiwg
aW1hZ2VSZWN0LCBhYnNvbHV0ZUltYWdlUmVjdCwgaXNBbHBoYUltYWdlLCByZW5kZXJpbmdNb2Rl
LCBjb2xvclNwYWNlKSk7CiB9CiAKLUZpbHRlckltYWdlOjpGaWx0ZXJJbWFnZShjb25zdCBGbG9h
dFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFnZVJl
Y3QsIGJvb2wgaXNBbHBoYUltYWdlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKK0ZpbHRlckltYWdlOjpGaWx0ZXJJ
bWFnZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0
JiBpbWFnZVJlY3QsIGNvbnN0IEludFJlY3QmIGFic29sdXRlSW1hZ2VSZWN0LCBib29sIGlzQWxw
aGFJbWFnZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmIGNvbG9yU3BhY2UpCiAgICAgOiBtX3ByaW1pdGl2ZVN1YnJlZ2lvbihwcmltaXRp
dmVTdWJyZWdpb24pCisgICAgLCBtX2ltYWdlUmVjdChpbWFnZVJlY3QpCiAgICAgLCBtX2Fic29s
dXRlSW1hZ2VSZWN0KGFic29sdXRlSW1hZ2VSZWN0KQogICAgICwgbV9pc0FscGhhSW1hZ2UoaXNB
bHBoYUltYWdlKQogICAgICwgbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCkBAIC01NSw3
ICs1Niw3IEBAIEZpbHRlckltYWdlOjpGaWx0ZXJJbWFnZShjb25zdCBGbG9hdFJlY3QmIHByaW1p
dGl2ZVN1YnJlZ2lvbiwgY29uc3QgSW50UmVjdCYgYWJzCiAKIEZsb2F0UmVjdCBGaWx0ZXJJbWFn
ZTo6bWF4RWZmZWN0UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICByZXR1
cm4gaW50ZXJzZWN0aW9uKG1fcHJpbWl0aXZlU3VicmVnaW9uLCBmaWx0ZXIuZmlsdGVyUmVnaW9u
KCkpOworICAgIHJldHVybiBmaWx0ZXIubWF4RWZmZWN0UmVjdChtX3ByaW1pdGl2ZVN1YnJlZ2lv
bik7CiB9CiAKIEludFJlY3QgRmlsdGVySW1hZ2U6OmFic29sdXRlSW1hZ2VSZWN0UmVsYXRpdmVU
byhjb25zdCBGaWx0ZXJJbWFnZSYgb3JpZ2luKSBjb25zdApAQCAtNjMsNiArNjQsMTEgQEAgSW50
UmVjdCBGaWx0ZXJJbWFnZTo6YWJzb2x1dGVJbWFnZVJlY3RSZWxhdGl2ZVRvKGNvbnN0IEZpbHRl
ckltYWdlJiBvcmlnaW4pIGNvbnMKICAgICByZXR1cm4gbV9hYnNvbHV0ZUltYWdlUmVjdCAtIG9y
aWdpbi5hYnNvbHV0ZUltYWdlUmVjdCgpLmxvY2F0aW9uKCk7CiB9CiAKK0Zsb2F0UG9pbnQgRmls
dGVySW1hZ2U6Om1hcHBlZEFic29sdXRlUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNv
bnN0Cit7CisgICAgcmV0dXJuIEZsb2F0UG9pbnQocG9pbnQgLSBtX2Fic29sdXRlSW1hZ2VSZWN0
LmxvY2F0aW9uKCkpOworfQorCiBJbWFnZUJ1ZmZlciogRmlsdGVySW1hZ2U6OmltYWdlQnVmZmVy
KCkKIHsKICNpZiBVU0UoQ09SRV9JTUFHRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuaAppbmRleCBjYWE5NWVjMjQ1OTUw
MTU5NWU4NWJhMjE2YTZmNDhlZDc4NTRjNDEwLi41Y2NkZDQ0YjA1OTE0OGYzOTE2MDk3NDE5Nzlj
NTQwMWI5ZGI4ZjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oCkBAIC00NCwxMyArNDQsMTcgQEAgY2xhc3MgSW1h
Z2VCdWZmZXI7CiAKIGNsYXNzIEZpbHRlckltYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVy
SW1hZ2U+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPEZpbHRlckltYWdlPiBjcmVhdGUo
Y29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEludFJlY3QmIGFic29s
dXRlSW1hZ2VSZWN0LCBib29sIGlzQWxwaGFJbWFnZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJik7CisgICAgc3RhdGljIFJlZlB0cjxGaWx0ZXJJbWFnZT4gY3Jl
YXRlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3Qm
IGltYWdlUmVjdCwgY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFnZVJlY3QsIGJvb2wgaXNBbHBo
YUltYWdlLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKIAor
ICAgIC8vIFRoZSByZXR1cm4gdmFsdWVzIGFyZSBpbiBmaWx0ZXIgY29vcmRpbmF0ZXMuCiAgICAg
RmxvYXRSZWN0IHByaW1pdGl2ZVN1YnJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWl0aXZl
U3VicmVnaW9uOyB9CiAgICAgRmxvYXRSZWN0IG1heEVmZmVjdFJlY3QoY29uc3QgRmlsdGVyJikg
Y29uc3Q7CisgICAgRmxvYXRSZWN0IGltYWdlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VS
ZWN0OyB9CiAKKyAgICAvLyBUaGUgcmV0dXJuIHZhbHVlcyBhcmUgaW4gdXNlci1zcGFjZSBjb29y
ZGluYXRlcy4KICAgICBJbnRSZWN0IGFic29sdXRlSW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9hYnNvbHV0ZUltYWdlUmVjdDsgfQogICAgIEludFJlY3QgYWJzb2x1dGVJbWFnZVJlY3RSZWxh
dGl2ZVRvKGNvbnN0IEZpbHRlckltYWdlJiBvcmlnaW4pIGNvbnN0OworICAgIEZsb2F0UG9pbnQg
bWFwcGVkQWJzb2x1dGVQb2ludChjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CiAKICAgICBib29s
IGlzQWxwaGFJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNBbHBoYUltYWdlOyB9CiAgICAgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdNb2Rl
OyB9CkBAIC03MSw3ICs3NSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIEZp
bHRlckltYWdlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBJbnRS
ZWN0JiBhYnNvbHV0ZUltYWdlUmVjdCwgYm9vbCBpc0FscGhhSW1hZ2UsIFJlbmRlcmluZ01vZGUs
IGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOworICAgIEZpbHRlckltYWdlKGNvbnN0IEZs
b2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwg
Y29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFnZVJlY3QsIGJvb2wgaXNBbHBoYUltYWdlLCBSZW5k
ZXJpbmdNb2RlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKIAogICAgIHN0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+JiBwaXhlbEJ1ZmZlclNsb3QoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bik7CiAKQEAgLTg0LDYgKzg4LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHJlcXVpcmVzUGl4ZWxC
dWZmZXJDb2xvclNwYWNlQ29udmVyc2lvbihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JT
cGFjZT4pIGNvbnN0OwogCiAgICAgRmxvYXRSZWN0IG1fcHJpbWl0aXZlU3VicmVnaW9uOworICAg
IEZsb2F0UmVjdCBtX2ltYWdlUmVjdDsKICAgICBJbnRSZWN0IG1fYWJzb2x1dGVJbWFnZVJlY3Q7
CiAKICAgICBib29sIG1faXNBbHBoYUltYWdlIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaAppbmRleCA4
ZGI4ZTU2NTk3YmFiZWM4Njg2MTY4M2ZmOGUwNTgyODhjNzEyNmY4Li41ZWQyN2FiMmVlMGY3Mzc3
N2Y3YmViYThkZTdlN2JjODI5N2Q3N2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oCkBAIC00LDYgKzQsNyBAQAog
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0zOCw3ICszOSw4IEBAIGVudW0gTGlnaHRUeXBlIHsKICAgICBMU19T
UE9UCiB9OwogCi1jbGFzcyBGaWx0ZXJFZmZlY3Q7CitjbGFzcyBGaWx0ZXI7CitjbGFzcyBGaWx0
ZXJJbWFnZTsKIAogY2xhc3MgTGlnaHRTb3VyY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxMaWdodFNv
dXJjZT4gewogcHVibGljOgpAQCAtNjUsNyArNjcsNyBAQCBwdWJsaWM6CiAgICAgTGlnaHRUeXBl
IHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICB2aXJ0dWFsIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBjb25zdCA9IDA7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3Qm
LCBQYWludGluZ0RhdGEmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGluaXRQYWludGlu
Z0RhdGEoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVySW1hZ2UmIHJlc3VsdCwgUGFpbnRpbmdE
YXRhJikgY29uc3QgPSAwOwogICAgIC8vIHogaXMgYSBmbG9hdCBudW1iZXIsIHNpbmNlIGl0IGlz
IHRoZSBhbHBoYSB2YWx1ZSBzY2FsZWQgYnkgYSB1c2VyCiAgICAgLy8gc3BlY2lmaWVkICJzdXJm
YWNlU2NhbGUiIGNvbnN0YW50LCB3aGljaCB0eXBlIGlzIDxudW1iZXI+IGluIHRoZSBTVkcgc3Rh
bmRhcmQuCiAgICAgLy8geCBhbmQgeSBhcmUgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBGaWx0
ZXJFZmZlY3QncyBidWZmZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAppbmRleCBjMmQ4NzQ5
M2IyOGRlMzg2MTNlM2UyMDI4NGZmZTJmZjQyNWZlZTJkLi4wZTZjMmNiMTFiODMyYTQxNmQyZDIy
MzViYTUwNGZhMzM3OTMxODEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKQEAgLTUsNiAr
NSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdl
YmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAq
IENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDE3ICszMiwyMCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlBvaW50TGlnaHRTb3VyY2UuaCIKIAotI2luY2x1ZGUgIkZp
bHRlckVmZmVjdC5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdl
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXZvaWQgUG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0
ZXJFZmZlY3QmIGZpbHRlckVmZmVjdCwgUGFpbnRpbmdEYXRhJikgY29uc3QKK3ZvaWQgUG9pbnRM
aWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3Qg
RmlsdGVySW1hZ2UmIHJlc3VsdCwgUGFpbnRpbmdEYXRhJikgY29uc3QKIHsKLSAgICBtX2J1ZmZl
clBvc2l0aW9uLnNldFhZKGZpbHRlckVmZmVjdC5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZl
cihtX3VzZXJTcGFjZVBvc2l0aW9uLnh5KCkpKTsKKyAgICBhdXRvIGFic29sdXRlUG9zaXRpb24g
PSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZShtX3VzZXJTcGFjZVBvc2l0aW9uLnh5KCkpOwor
ICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0WFkocmVzdWx0Lm1hcHBlZEFic29sdXRlUG9pbnQoYWJz
b2x1dGVQb3NpdGlvbikpOworCiAgICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0
IGZyb20gbV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4KLSAgICBG
bG9hdFBvaW50IG1hcHBlZFogPSBmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9C
dWZmZXIoeyBtX3VzZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRpb24ueigp
LCBtX3VzZXJTcGFjZVBvc2l0aW9uLnkoKSB9KTsKLSAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoo
bWFwcGVkWi54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7CisgICAgYXV0byBhYnNvbHV0ZU1h
cHBlZFogPSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZShGbG9hdFBvaW50IHsgbV91c2VyU3Bh
Y2VQb3NpdGlvbi54KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3Np
dGlvbi55KCkgfSk7CisgICAgbV9idWZmZXJQb3NpdGlvbi5zZXRaKHJlc3VsdC5tYXBwZWRBYnNv
bHV0ZVBvaW50KGFic29sdXRlTWFwcGVkWikueCgpIC0gbV9idWZmZXJQb3NpdGlvbi54KCkpOwog
fQogCiBMaWdodFNvdXJjZTo6Q29tcHV0ZWRMaWdodGluZ0RhdGEgUG9pbnRMaWdodFNvdXJjZTo6
Y29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRh
LCBpbnQgeCwgaW50IHksIGZsb2F0IHopIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCmluZGV4
IDQyYzNkYzYxNzg4NTIyZWM3ODdjYWVlMmFjMzRhOGUzMmY5ZGJkNGUuLjIzNTU5MTM4Yjg4NGIz
ZmU3MjBiN2RjOGYwMTc3YWM1ZjljZDJlOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCkBAIC0z
LDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zOSw3ICs0
MCw3IEBAIHB1YmxpYzoKICAgICBib29sIHNldFkoZmxvYXQpIG92ZXJyaWRlOwogICAgIGJvb2wg
c2V0WihmbG9hdCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3Qg
RmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBp
bml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlJiByZXN1bHQs
IFBhaW50aW5nRGF0YSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIENvbXB1dGVkTGlnaHRpbmdEYXRh
IGNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShjb25zdCBQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50
IHksIGZsb2F0IHopIGNvbnN0IGZpbmFsOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBo
YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmNwcAppbmRleCA4NGY2N2NmNjgxNGE0YTgxOGY2NDY3YzQ0ZmQ0MDU3NTFjYzEyODBjLi42
MjA1MTQ2M2M3MWY1M2ZkODM4MTJhNzdhMmYyYjhhNDhiZWEyYjNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNw
cApAQCAtMzksMTAgKzM5LDkgQEAgU291cmNlQWxwaGE6OlNvdXJjZUFscGhhKEZpbHRlckVmZmVj
dCYgc291cmNlRWZmZWN0KQogICAgIGlucHV0RWZmZWN0cygpLmFwcGVuZCgmc291cmNlRWZmZWN0
KTsKIH0KIAotdm9pZCBTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29u
c3QgRmlsdGVyJiBmaWx0ZXIpCitGbG9hdFJlY3QgU291cmNlQWxwaGE6OmNhbGN1bGF0ZUltYWdl
UmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25z
dCBGbG9hdFJlY3QmKSBjb25zdAogewotICAgIGlucHV0RWZmZWN0KDApLT5kZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdChmaWx0ZXIpOwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGlucHV0RWZm
ZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICByZXR1cm4gaW5wdXRzWzBdLT5pbWFn
ZVJlY3QoKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdEFwcGxpZXI+IFNvdXJj
ZUFscGhhOjpjcmVhdGVBcHBsaWVyKGNvbnN0IEZpbHRlciYpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgKaW5k
ZXggOTNhMjQzOWUyODIyNjVhZjJmZTFiMGY1OTVlNzg5ZDBkMDg0MjY0My4uMTA1NjE2N2UzY2Y5
YWE2NDY2YzUzNzgzZDk0Mzk2NWVhMmMwZTFmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaApAQCAtMzMsNyArMzMs
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFNvdXJjZUFscGhhKEZpbHRlckVm
ZmVjdCYpOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0
ZXImKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZp
bHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZsb2F0UmVjdCYg
cHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxGaWx0ZXJFZmZlY3RBcHBsaWVyPiBjcmVhdGVBcHBsaWVyKGNvbnN0IEZpbHRlciYpIGNvbnN0
IG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAppbmRleCBhOGU3MTY2OTllNTM4ZWQ3OWI5
ZWE0YWY2YTNmZmFhYWNiZTBjMmI0Li44ODZiNzcyYWFkYjAyNmFkMjFkOWFiNWUzN2M1OGY3Zjg5
NGJiZWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKQEAgLTQxLDEwICs0MSw5IEBAIFNvdXJjZUdy
YXBoaWM6OlNvdXJjZUdyYXBoaWMoKQogewogfQogCi12b2lkIFNvdXJjZUdyYXBoaWM6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQorRmxvYXRSZWN0IFNv
dXJjZUdyYXBoaWM6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29u
c3QgRmlsdGVySW1hZ2VWZWN0b3ImLCBjb25zdCBGbG9hdFJlY3QmKSBjb25zdAogewotICAgIEZs
b2F0UmVjdCBwYWludFJlY3QgPSBmaWx0ZXIuc291cmNlSW1hZ2VSZWN0KCk7Ci0gICAgc2V0QWJz
b2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKKyAgICByZXR1cm4g
ZmlsdGVyLnNvdXJjZUltYWdlUmVjdCgpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZm
ZWN0QXBwbGllcj4gU291cmNlR3JhcGhpYzo6Y3JlYXRlQXBwbGllcihjb25zdCBGaWx0ZXImIGZp
bHRlcikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKaW5kZXggMDM3NDhhMTc2MDRmZDFlZWEwOGU4YzAx
OTBhNmJmNWJlMjdmZTI5ZS4uYTczOGE3ZDAyNmQ4OGZkZDQ4MWZmYTkwNzMwYWJmZTI1YTVjNjY3
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VHcmFwaGljLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VHcmFwaGljLmgKQEAgLTM4LDcgKzM4LDcgQEAgcHJpdmF0ZToKICAgICBib29s
IHN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1
ZTsgfQogI2VuZGlmCiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0
IEZpbHRlciYpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29u
c3QgRmlsdGVyJiwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmxvYXRS
ZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgc3RkOjp1bmlx
dWVfcHRyPEZpbHRlckVmZmVjdEFwcGxpZXI+IGNyZWF0ZUFwcGxpZXIoY29uc3QgRmlsdGVyJikg
Y29uc3Qgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcAppbmRleCBlN2M3YzA0ZWRl
ZWQ4NzJlNzlhMjIzYmRhZDg2YTkxZWQzM2YwMjJhLi4yMjRlNjMyZjg2ODg4YTJlMzQzNDhlOTdh
MTk5OWE4MzY1YWM5Zjk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCkBAIC02LDYgKzYsNyBA
QAogICogQ29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQu
b3JnPgogICogQ29weXJpZ2h0IChDKSAyMDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhvZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw3ICszMyw4IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiU3BvdExpZ2h0U291cmNlLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXJFZmZl
Y3QuaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFnZS5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
NDEsMTIgKzQzLDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIGFjY29yZGluZyB0byB0aGUg
U1ZHIDEuMSBTRSBsaWdodCByZWdyZXNzaW9uIHRlc3RzCiBzdGF0aWMgY29uc3QgZmxvYXQgYW50
aUFsaWFzVHJlc2hvbGQgPSAwLjAxNmY7CiAKLXZvaWQgU3BvdExpZ2h0U291cmNlOjppbml0UGFp
bnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSkgY29uc3QKK3ZvaWQgU3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdE
YXRhKGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWFnZSYgcmVzdWx0LCBQYWlu
dGluZ0RhdGEmIHBhaW50aW5nRGF0YSkgY29uc3QKIHsKLSAgICBtX2J1ZmZlclBvc2l0aW9uLnNl
dFhZKGZpbHRlckVmZmVjdC5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihtX3VzZXJTcGFj
ZVBvc2l0aW9uLnh5KCkpKTsKKyAgICBhdXRvIGFic29sdXRlUG9zaXRpb24gPSBmaWx0ZXIuc2Nh
bGVkQnlGaWx0ZXJTY2FsZShtX3VzZXJTcGFjZVBvc2l0aW9uLnh5KCkpOworICAgIG1fYnVmZmVy
UG9zaXRpb24uc2V0WFkocmVzdWx0Lm1hcHBlZEFic29sdXRlUG9pbnQoYWJzb2x1dGVQb3NpdGlv
bikpOworCiAgICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20gbV91c2Vy
U3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4KLSAgICBGbG9hdFBvaW50IG1h
cHBlZFogPSBmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoeyBtX3Vz
ZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRpb24ueigpLCBtX3VzZXJTcGFj
ZVBvc2l0aW9uLnkoKSB9KTsKLSAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkg
LSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7CisgICAgYXV0byBhYnNvbHV0ZU1hcHBlZFogPSBmaWx0
ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZShGbG9hdFBvaW50IHsgbV91c2VyU3BhY2VQb3NpdGlvbi54
KCkgKyBtX3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3NpdGlvbi55KCkgfSk7
CisgICAgbV9idWZmZXJQb3NpdGlvbi5zZXRaKHJlc3VsdC5tYXBwZWRBYnNvbHV0ZVBvaW50KGFi
c29sdXRlTWFwcGVkWikueCgpIC0gbV9idWZmZXJQb3NpdGlvbi54KCkpOwogICAgIAogICAgIHBh
aW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0b3IgPSBtX3VzZXJTcGFjZVBvaW50c0F0IC0gbV91c2Vy
U3BhY2VQb3NpdGlvbjsKICAgICBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9yLm5vcm1hbGl6
ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9TcG90TGlnaHRTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU3BvdExpZ2h0U291cmNlLmgKaW5kZXggMmVkZDkzMDk5ZDk3MjgyYjA2ZDdjMTllNzcy
N2Q3NWQ2NDJlOWM1Mi4uZWJjNjM0OTdiYzE5MDdkY2ZmMjdiMTgwYTY0Y2EyZGIzMDYyNjg0ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90
TGlnaHRTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1Nwb3RMaWdodFNvdXJjZS5oCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC01MCw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICBib29sIHNldFNw
ZWN1bGFyRXhwb25lbnQoZmxvYXQpIG92ZXJyaWRlOwogICAgIGJvb2wgc2V0TGltaXRpbmdDb25l
QW5nbGUoZmxvYXQpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0
IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQg
aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJJbWFnZSYgcmVzdWx0
LCBQYWludGluZ0RhdGEmKSBjb25zdCBvdmVycmlkZTsKICAgICBDb21wdXRlZExpZ2h0aW5nRGF0
YSBjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHgsIGlu
dCB5LCBmbG9hdCB6KSBjb25zdCBmaW5hbDsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3YXJl
QXBwbGllci5jcHAKaW5kZXggYWUwMjZlM2ZiZTU0OGU5MGYzNzJkNGMzOTY0MTk3ODJkMjNjNWI5
Yy4uMTIxNjRlMzc4YzI5YTIzZmIwOWI3NTU5ZDc4ZmUxYzQyYWUwNTM1NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3Bs
YWNlbWVudE1hcFNvZnR3YXJlQXBwbGllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBw
bGllci5jcHAKQEAgLTc1LDEyICs3NSwxMyBAQCBib29sIEZFRGlzcGxhY2VtZW50TWFwU29mdHdh
cmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySQogICAg
IEFTU0VSVChpbnB1dFBpeGVsQXJyYXkubGVuZ3RoKCkgPT0gZGlzcGxhY2VtZW50UGl4ZWxBcnJh
eS5sZW5ndGgoKSk7CiAKICAgICBhdXRvIHBhaW50U2l6ZSA9IHJlc3VsdC5hYnNvbHV0ZUltYWdl
UmVjdCgpLnNpemUoKTsKLSAgICBhdXRvIHNjYWxlID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2Nh
bGUoeyBtX2VmZmVjdC5zY2FsZSgpLCBtX2VmZmVjdC5zY2FsZSgpIH0pOworICAgIGF1dG8gc2Nh
bGUgPSBmaWx0ZXIucmVzb2x2ZWRTaXplKHsgbV9lZmZlY3Quc2NhbGUoKSwgbV9lZmZlY3Quc2Nh
bGUoKSB9KTsKKyAgICBhdXRvIGFic29sdXRlU2NhbGUgPSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJT
Y2FsZShzY2FsZSk7CiAKLSAgICBmbG9hdCBzY2FsZUZvckNvbG9yWCA9IHNjYWxlLndpZHRoKCkg
LyAyNTUuMDsKLSAgICBmbG9hdCBzY2FsZUZvckNvbG9yWSA9IHNjYWxlLmhlaWdodCgpIC8gMjU1
LjA7Ci0gICAgZmxvYXQgc2NhbGVkT2Zmc2V0WCA9IDAuNSAtIHNjYWxlLndpZHRoKCkgKiAwLjU7
Ci0gICAgZmxvYXQgc2NhbGVkT2Zmc2V0WSA9IDAuNSAtIHNjYWxlLmhlaWdodCgpICogMC41Owor
ICAgIGZsb2F0IHNjYWxlRm9yQ29sb3JYID0gYWJzb2x1dGVTY2FsZS53aWR0aCgpIC8gMjU1LjA7
CisgICAgZmxvYXQgc2NhbGVGb3JDb2xvclkgPSBhYnNvbHV0ZVNjYWxlLmhlaWdodCgpIC8gMjU1
LjA7CisgICAgZmxvYXQgc2NhbGVkT2Zmc2V0WCA9IDAuNSAtIGFic29sdXRlU2NhbGUud2lkdGgo
KSAqIDAuNTsKKyAgICBmbG9hdCBzY2FsZWRPZmZzZXRZID0gMC41IC0gYWJzb2x1dGVTY2FsZS5o
ZWlnaHQoKSAqIDAuNTsKICAgICAKICAgICBpbnQgZGlzcGxhY2VtZW50Q2hhbm5lbFggPSB4Q2hh
bm5lbEluZGV4KCk7CiAgICAgaW50IGRpc3BsYWNlbWVudENoYW5uZWxZID0geUNoYW5uZWxJbmRl
eCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2Fy
ZUFwcGxpZXIuY3BwCmluZGV4IDQxMWViNDhkMGEzOGEwMjM4NWZlODRlZmNkN2FkNTg3NTRkOTlm
MTIuLjQ0N2M4OTVkMTk4NDA1NzM4NzI5M2M5N2Q2MDE4ZjRmNGIwNzM2MzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9w
U2hhZG93U29mdHdhcmVBcHBsaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllci5jcHAK
QEAgLTM4LDEyICszOCwxNSBAQCBib29sIEZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllcjo6YXBw
bHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYWdlVgogICAgIGlmICghcmVz
dWx0SW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEZsb2F0U2l6ZSBibHVyUmFk
aXVzID0gMiAqIGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9lZmZlY3Quc3RkRGV2aWF0
aW9uWCgpLCBtX2VmZmVjdC5zdGREZXZpYXRpb25ZKCkgfSk7Ci0gICAgRmxvYXRTaXplIG9mZnNl
dCA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9lZmZlY3QuZHgoKSwgbV9lZmZlY3Qu
ZHkoKSB9KTsKKyAgICBhdXRvIHN0ZERldmlhdGlvbiA9IGZpbHRlci5yZXNvbHZlZFNpemUoeyBt
X2VmZmVjdC5zdGREZXZpYXRpb25YKCksIG1fZWZmZWN0LnN0ZERldmlhdGlvblkoKSB9KTsKKyAg
ICBhdXRvIGJsdXJSYWRpdXMgPSAyICogZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoc3RkRGV2
aWF0aW9uKTsKKyAgICAKKyAgICBhdXRvIG9mZnNldCA9IGZpbHRlci5yZXNvbHZlZFNpemUoeyBt
X2VmZmVjdC5keCgpLCBtX2VmZmVjdC5keSgpIH0pOworICAgIGF1dG8gYWJzb2x1dGVPZmZzZXQg
PSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZShvZmZzZXQpOwogCiAgICAgRmxvYXRSZWN0IGlu
cHV0SW1hZ2VSZWN0ID0gaW5wdXQuYWJzb2x1dGVJbWFnZVJlY3RSZWxhdGl2ZVRvKHJlc3VsdCk7
CiAgICAgRmxvYXRSZWN0IGlucHV0SW1hZ2VSZWN0V2l0aE9mZnNldChpbnB1dEltYWdlUmVjdCk7
Ci0gICAgaW5wdXRJbWFnZVJlY3RXaXRoT2Zmc2V0Lm1vdmUob2Zmc2V0KTsKKyAgICBpbnB1dElt
YWdlUmVjdFdpdGhPZmZzZXQubW92ZShhYnNvbHV0ZU9mZnNldCk7CiAKICAgICBhdXRvIGlucHV0
SW1hZ2UgPSBpbnB1dC5pbWFnZUJ1ZmZlcigpOwogICAgIGlmICghaW5wdXRJbWFnZSkKQEAgLTU0
LDcgKzU3LDcgQEAgYm9vbCBGRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0
IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWFnZVYKICAgICByZXN1bHRDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW5wdXRJbWFnZSwgaW5wdXRJbWFnZVJlY3RXaXRoT2Zmc2V0KTsKICAg
ICByZXN1bHRDb250ZXh0LnNldEFscGhhKDEpOwogCi0gICAgU2hhZG93Qmx1ciBjb250ZXh0U2hh
ZG93KGJsdXJSYWRpdXMsIG9mZnNldCwgbV9lZmZlY3Quc2hhZG93Q29sb3IoKSk7CisgICAgU2hh
ZG93Qmx1ciBjb250ZXh0U2hhZG93KGJsdXJSYWRpdXMsIGFic29sdXRlT2Zmc2V0LCBtX2VmZmVj
dC5zaGFkb3dDb2xvcigpKTsKIAogICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgcmVz
dWx0LmNvbG9yU3BhY2UoKSB9OwogICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCBy
ZXN1bHRJbWFnZS0+dHJ1bmNhdGVkTG9naWNhbFNpemUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0
d2FyZUFwcGxpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmNwcAppbmRleCBjZTBhY2I4MTE3
N2FjMzc5NzRkZTM0ZDRkYTc3MWJhZTU5M2RjNDMzLi43MGY1MzQwNWEyNTY1ZTEzOTI2NzcyYjEz
OWIxOTgzM2NhMjhhOWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdo
dGluZ1NvZnR3YXJlQXBwbGllci5jcHAKQEAgLTE4Nyw3ICsxODcsNyBAQCB2b2lkIEZFTGlnaHRp
bmdTb2Z0d2FyZUFwcGxpZXI6OnNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGln
aHRpbmdEYXRhJgogICAgIGZsb2F0IGxpZ2h0U3RyZW5ndGg7CiAgICAgaWYgKG5vcm1hbDJEVmVj
dG9yLmlzWmVybygpKSB7CiAgICAgICAgIC8vIE5vcm1hbCB2ZWN0b3IgaXMgKDAsIDAsIDEpLiBU
aGlzIGlzIGEgcXVpdGUgZnJlcXVlbnQgY2FzZS4KLSAgICAgICAgaWYgKGRhdGEuZWZmZWN0LT5m
aWx0ZXJUeXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZykKKyAg
ICAgICAgaWYgKGRhdGEuZmlsdGVyVHlwZSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVz
ZUxpZ2h0aW5nKQogICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuZGlmZnVzZUNvbnN0
YW50ICogbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnooKSAvIGxpZ2h0aW5nRGF0YS5saWdodFZl
Y3Rvckxlbmd0aDsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBGbG9hdFBvaW50M0QgaGFs
ZndheVZlY3RvciA9IHsKQEAgLTIwOSw3ICsyMDksNyBAQCB2b2lkIEZFTGlnaHRpbmdTb2Z0d2Fy
ZUFwcGxpZXI6OnNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRh
JgogICAgICAgICB9OwogICAgICAgICBmbG9hdCBub3JtYWxWZWN0b3JMZW5ndGggPSBub3JtYWxW
ZWN0b3IubGVuZ3RoKCk7CiAKLSAgICAgICAgaWYgKGRhdGEuZWZmZWN0LT5maWx0ZXJUeXBlKCkg
PT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZykKKyAgICAgICAgaWYgKGRh
dGEuZmlsdGVyVHlwZSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKQog
ICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuZGlmZnVzZUNvbnN0YW50ICogKG5vcm1h
bFZlY3RvciAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3Ro
ICogbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoKTsKICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICBGbG9hdFBvaW50M0QgaGFsZndheVZlY3RvciA9IHsKQEAgLTMyOSw3ICszMjksNyBA
QCB2b2lkIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0oY29uc3QgTGln
aHRpbmdEYXRhJiBkYXRhKQogICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gZGF0YS5saWdodGluZ0Nv
bG9yLnRvQ29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKCpkYXRhLm9wZXJhdGluZ0NvbG9yU3Bh
Y2UpOwogICAgIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yID0g
RmxvYXRQb2ludDNEKHIsIGcsIGIpOwogCi0gICAgZGF0YS5saWdodFNvdXJjZS0+aW5pdFBhaW50
aW5nRGF0YSgqZGF0YS5lZmZlY3QsIHBhaW50aW5nRGF0YSk7CisgICAgZGF0YS5saWdodFNvdXJj
ZS0+aW5pdFBhaW50aW5nRGF0YSgqZGF0YS5maWx0ZXIsICpkYXRhLnJlc3VsdCwgcGFpbnRpbmdE
YXRhKTsKIAogICAgIC8vIFRvcCBsZWZ0LgogICAgIGludCBvZmZzZXQgPSAwOwpAQCAtMzc3LDcg
KzM3Nyw3IEBAIHZvaWQgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShj
b25zdCBMaWdodGluZ0RhdGEmIGRhdGEpCiAgICAgfQogCiAgICAgaW50IGxhc3RQaXhlbCA9IGRh
dGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKiBkYXRhLmhlaWdodDsKLSAgICBpZiAoZGF0
YS5lZmZlY3QtPmZpbHRlclR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxp
Z2h0aW5nKSB7CisgICAgaWYgKGRhdGEuZmlsdGVyVHlwZSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OkZFRGlmZnVzZUxpZ2h0aW5nKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSBjQWxwaGFDaGFubmVs
T2Zmc2V0OyBpIDwgbGFzdFBpeGVsOyBpICs9IGNQaXhlbFNpemUpCiAgICAgICAgICAgICBkYXRh
LnBpeGVscy0+c2V0KGksIGNPcGFxdWVBbHBoYSk7CiAgICAgfSBlbHNlIHsKQEAgLTM5MSw3ICsz
OTEsNyBAQCB2b2lkIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0oY29u
c3QgTGlnaHRpbmdEYXRhJiBkYXRhKQogICAgIH0KIH0KIAotYm9vbCBGRUxpZ2h0aW5nU29mdHdh
cmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYg
aW5wdXRzLCBGaWx0ZXJJbWFnZSYgcmVzdWx0KSBjb25zdAorYm9vbCBGRUxpZ2h0aW5nU29mdHdh
cmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VW
ZWN0b3ImIGlucHV0cywgRmlsdGVySW1hZ2UmIHJlc3VsdCkgY29uc3QKIHsKICAgICBhdXRvJiBp
bnB1dCA9IGlucHV0c1swXS5nZXQoKTsKIApAQCAtNDE3LDcgKzQxNyw5IEBAIGJvb2wgRkVMaWdo
dGluZ1NvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVySW1h
Z2VWZWN0b3ImIGluCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgTGlnaHRpbmdEYXRhIGRh
dGE7Ci0gICAgZGF0YS5lZmZlY3QgPSAmbV9lZmZlY3Q7CisgICAgZGF0YS5maWx0ZXIgPSAmZmls
dGVyOworICAgIGRhdGEucmVzdWx0ID0gJnJlc3VsdDsKKyAgICBkYXRhLmZpbHRlclR5cGUgPSBt
X2VmZmVjdC5maWx0ZXJUeXBlKCk7CiAgICAgZGF0YS5saWdodGluZ0NvbG9yID0gbV9lZmZlY3Qu
bGlnaHRpbmdDb2xvcigpOwogICAgIGRhdGEuc3VyZmFjZVNjYWxlID0gbV9lZmZlY3Quc3VyZmFj
ZVNjYWxlKCkgLyAyNTUuMGY7CiAgICAgZGF0YS5kaWZmdXNlQ29uc3RhbnQgPSBtX2VmZmVjdC5k
aWZmdXNlQ29uc3RhbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5n
U29mdHdhcmVBcHBsaWVyLmgKaW5kZXggMGI0OGE5MzNkODYwYzRkNjNiNzBjMjBiZGM2ZmEyNDk1
NTQ1YjdlMC4uZjQ0OWQzZTc5ZjM4ZmFjOGU0MjQ0OWZhOGQ0MmNiNzQ4N2EwYzgxMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmgKQEAg
LTkzLDcgKzkzLDkgQEAgcHJpdmF0ZToKIAogICAgIHN0cnVjdCBMaWdodGluZ0RhdGEgewogICAg
ICAgICAvLyBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBvbmx5IHJlYWQtb25seSAoU01QIHNhZmUp
IGRhdGEKLSAgICAgICAgY29uc3QgRkVMaWdodGluZyogZWZmZWN0OworICAgICAgICBjb25zdCBG
aWx0ZXIqIGZpbHRlcjsKKyAgICAgICAgY29uc3QgRmlsdGVySW1hZ2UqIHJlc3VsdDsKKyAgICAg
ICAgRmlsdGVyRWZmZWN0OjpUeXBlIGZpbHRlclR5cGU7CiAgICAgICAgIENvbG9yIGxpZ2h0aW5n
Q29sb3I7CiAgICAgICAgIGZsb2F0IHN1cmZhY2VTY2FsZTsKICAgICAgICAgZmxvYXQgZGlmZnVz
ZUNvbnN0YW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lT
b2Z0d2FyZUFwcGxpZXIuY3BwCmluZGV4IDA5MTFjYzAwNGMxYzM5ODRiODBlYTgxNzdlODY3YTY1
YmI4YzcyMDQuLjI5YzE1YjI4MDhiMzA4NzgxMjgxNmY0MTNkNWQ0Y2YwYmU5ZmJmMWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGll
ci5jcHAKQEAgLTE0OSwyMyArMTQ5LDI0IEBAIGJvb2wgRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBs
aWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWCiAgICAg
aWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBhdXRvIGlzRGVnZW5lcmF0ZSA9IFtdKGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSkgLT4gYm9v
bCB7Ci0gICAgICAgIHJldHVybiByYWRpdXNYIDwgMCB8fCByYWRpdXNZIDwgMCB8fCAoIXJhZGl1
c1ggJiYgIXJhZGl1c1kpOworICAgIGF1dG8gaXNEZWdlbmVyYXRlID0gW10oY29uc3QgSW50U2l6
ZSYgYWJzb2x1dGVSYWRpdXMpIC0+IGJvb2wgeworICAgICAgICByZXR1cm4gYWJzb2x1dGVSYWRp
dXMud2lkdGgoKSA8IDAgfHwgYWJzb2x1dGVSYWRpdXMuaGVpZ2h0KCkgPCAwIHx8IGFic29sdXRl
UmFkaXVzLmlzWmVybygpOwogICAgIH07CiAKICAgICBhdXRvIGVmZmVjdERyYXdpbmdSZWN0ID0g
cmVzdWx0LmFic29sdXRlSW1hZ2VSZWN0UmVsYXRpdmVUbyhpbnB1dCk7Ci0gICAgYXV0byByYWRp
dXMgPSBmbG9vcmVkSW50U2l6ZShGbG9hdFNpemUobV9lZmZlY3QucmFkaXVzWCgpLCBtX2VmZmVj
dC5yYWRpdXNZKCkpKTsKIAotICAgIGlmIChpc0RlZ2VuZXJhdGUocmFkaXVzLndpZHRoKCksIHJh
ZGl1cy5oZWlnaHQoKSkpIHsKKyAgICBhdXRvIHJhZGl1cyA9IGZpbHRlci5yZXNvbHZlZFNpemUo
eyBtX2VmZmVjdC5yYWRpdXNYKCksIG1fZWZmZWN0LnJhZGl1c1koKSB9KTsKKyAgICBhdXRvIGFi
c29sdXRlUmFkaXVzID0gZmxvb3JlZEludFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUo
cmFkaXVzKSk7CisKKyAgICBpZiAoaXNEZWdlbmVyYXRlKGFic29sdXRlUmFkaXVzKSkgewogICAg
ICAgICBpbnB1dC5jb3B5UGl4ZWxCdWZmZXIoKmRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGVmZmVj
dERyYXdpbmdSZWN0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgcmFkaXVz
ID0gZmxvb3JlZEludFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX2VmZmVjdC5y
YWRpdXNYKCksIG1fZWZmZWN0LnJhZGl1c1koKSB9KSk7Ci0gICAgaW50IHJhZGl1c1ggPSBzdGQ6
Om1pbihlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpIC0gMSwgcmFkaXVzLndpZHRoKCkpOwotICAg
IGludCByYWRpdXNZID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgLSAxLCBy
YWRpdXMuaGVpZ2h0KCkpOworICAgIGludCByYWRpdXNYID0gc3RkOjptaW4oZWZmZWN0RHJhd2lu
Z1JlY3Qud2lkdGgoKSAtIDEsIGFic29sdXRlUmFkaXVzLndpZHRoKCkpOworICAgIGludCByYWRp
dXNZID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgLSAxLCBhYnNvbHV0ZVJh
ZGl1cy5oZWlnaHQoKSk7CiAKLSAgICBpZiAoaXNEZWdlbmVyYXRlKHJhZGl1c1gsIHJhZGl1c1kp
KSB7CisgICAgaWYgKGlzRGVnZW5lcmF0ZSh7IHJhZGl1c1gsIHJhZGl1c1kgfSkpIHsKICAgICAg
ICAgaW5wdXQuY29weVBpeGVsQnVmZmVyKCpkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBlZmZlY3RE
cmF3aW5nUmVjdCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRT
b2Z0d2FyZUFwcGxpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9GRU9mZnNldFNvZnR3YXJlQXBwbGllci5jcHAKaW5kZXggY2YyZGNlZDQ5
N2Q2ODI5ODFhOGE0MmI4YzdlZTg2ZTIwMDUyNjU1MC4uMWZiZGZlMGEzYjc0ZWU5YWFhMDU3Y2Jh
OWY0YmRiMGNmMmNmOGIxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU9mZnNldFNvZnR3YXJlQXBwbGllci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU9mZnNl
dFNvZnR3YXJlQXBwbGllci5jcHAKQEAgLTQyLDcgKzQyLDExIEBAIGJvb2wgRkVPZmZzZXRTb2Z0
d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWFn
ZVZlY3RvCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEZsb2F0UmVjdCBpbnB1dEltYWdl
UmVjdCA9IGlucHV0LmFic29sdXRlSW1hZ2VSZWN0UmVsYXRpdmVUbyhyZXN1bHQpOwotICAgIGlu
cHV0SW1hZ2VSZWN0Lm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX2VmZmVjdC5k
eCgpLCBtX2VmZmVjdC5keSgpIH0pKTsKKworICAgIGF1dG8gb2Zmc2V0ID0gZmlsdGVyLnJlc29s
dmVkU2l6ZSh7IG1fZWZmZWN0LmR4KCksIG1fZWZmZWN0LmR5KCkgfSk7CisgICAgYXV0byBhYnNv
bHV0ZU9mZnNldCA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKG9mZnNldCk7CisKKyAgICBp
bnB1dEltYWdlUmVjdC5tb3ZlKGFic29sdXRlT2Zmc2V0KTsKIAogICAgIHJlc3VsdEltYWdlLT5j
b250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBpbnB1dEltYWdlUmVjdCk7CiAg
ICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NT
RmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCmluZGV4
IGRkZjAxNDM0Yzk5ZjFlYzY5Y2MzZjAzNjc2ODA4YzZkOTMyMTIxYjEuLmE3OTY5MzI4ZDY1OGY5
M2E0NTIzM2I2MWNlY2YwZjIxZmY5MzhkZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9DU1NGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NG
aWx0ZXIuY3BwCkBAIC00OSwyNSArNDksMjUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1S
ZWZQdHI8Q1NTRmlsdGVyPiBDU1NGaWx0ZXI6OmNyZWF0ZShjb25zdCBGaWx0ZXJPcGVyYXRpb25z
JiBvcGVyYXRpb25zLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHNjYWxlRmFj
dG9yKQorUmVmUHRyPENTU0ZpbHRlcj4gQ1NTRmlsdGVyOjpjcmVhdGUoY29uc3QgRmlsdGVyT3Bl
cmF0aW9ucyYgb3BlcmF0aW9ucywgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCBz
Y2FsZUZhY3RvciwgQ2xpcE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9uKQogewogICAgIGJvb2wgaGFz
RmlsdGVyVGhhdE1vdmVzUGl4ZWxzID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhl
bHMoKTsKICAgICBib29sIGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5
T3JpZ2luID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1
cml0eU9yaWdpbigpOwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTRmlsdGVyKHJlbmRl
cmluZ01vZGUsIHNjYWxlRmFjdG9yLCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMsIGhhc0ZpbHRl
clRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKSk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgQ1NTRmlsdGVyKHJlbmRlcmluZ01vZGUsIHNjYWxlRmFjdG9yLCBjbGlwT3Bl
cmF0aW9uLCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMsIGhhc0ZpbHRlclRoYXRTaG91bGRCZVJl
c3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKSk7CiB9CiAKLUNTU0ZpbHRlcjo6Q1NTRmlsdGVyKFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgc2NhbGVGYWN0b3IsIGJvb2wgaGFzRmls
dGVyVGhhdE1vdmVzUGl4ZWxzLCBib29sIGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRC
eVNlY3VyaXR5T3JpZ2luKQotICAgIDogRmlsdGVyKEZpbHRlcjo6VHlwZTo6Q1NTRmlsdGVyLCBy
ZW5kZXJpbmdNb2RlLCBGbG9hdFNpemUgeyBzY2FsZUZhY3Rvciwgc2NhbGVGYWN0b3IgfSkKK0NT
U0ZpbHRlcjo6Q1NTRmlsdGVyKFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgc2Nh
bGVGYWN0b3IsIENsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlvbiwgYm9vbCBoYXNGaWx0ZXJUaGF0
TW92ZXNQaXhlbHMsIGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJp
dHlPcmlnaW4pCisgICAgOiBGaWx0ZXIoRmlsdGVyOjpUeXBlOjpDU1NGaWx0ZXIsIHJlbmRlcmlu
Z01vZGUsIEZsb2F0U2l6ZSB7IHNjYWxlRmFjdG9yLCBzY2FsZUZhY3RvciB9LCBjbGlwT3BlcmF0
aW9uKQogICAgICwgbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoaGFzRmlsdGVyVGhhdE1vdmVz
UGl4ZWxzKQogICAgICwgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0
eU9yaWdpbihoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbikK
IHsKIH0KIAotc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUJsdXJFZmZlY3QoY29u
c3QgQmx1ckZpbHRlck9wZXJhdGlvbiYgYmx1ck9wZXJhdGlvbiwgRmlsdGVyQ29uc3VtZXIgY29u
c3VtZXIpCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlQmx1ckVmZmVjdChjb25z
dCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyT3BlcmF0aW9uLCBGaWx0ZXI6OkNsaXBPcGVyYXRp
b24gY2xpcE9wZXJhdGlvbikKIHsKICAgICBmbG9hdCBzdGREZXZpYXRpb24gPSBmbG9hdFZhbHVl
Rm9yTGVuZ3RoKGJsdXJPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIDApOwotICAgIHJldHVybiBG
RUdhdXNzaWFuQmx1cjo6Y3JlYXRlKHN0ZERldmlhdGlvbiwgc3RkRGV2aWF0aW9uLCBjb25zdW1l
ciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkgPyBFZGdlTW9kZVR5cGU6Ok5vbmUg
OiBFZGdlTW9kZVR5cGU6OkR1cGxpY2F0ZSk7CisgICAgcmV0dXJuIEZFR2F1c3NpYW5CbHVyOjpj
cmVhdGUoc3RkRGV2aWF0aW9uLCBzdGREZXZpYXRpb24sIGNsaXBPcGVyYXRpb24gPT0gRmlsdGVy
OjpDbGlwT3BlcmF0aW9uOjpVbml0ZSA/IEVkZ2VNb2RlVHlwZTo6Tm9uZSA6IEVkZ2VNb2RlVHlw
ZTo6RHVwbGljYXRlKTsKIH0KIAogc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUJy
aWdodG5lc3NFZmZlY3QoY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
biYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24pCkBAIC0yMjEsMTggKzIyMSwxMCBAQCBzdGF0
aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlU1ZHRmlsdGVyKENTU0ZpbHRlciYgZmlsdGVyLCBj
b25zdCBSZWZlcmVuY2VGaWx0ZQogICAgIH0KIAogICAgIFNWR0ZpbHRlckJ1aWxkZXIgYnVpbGRl
cjsKLSAgICByZXR1cm4gU1ZHRmlsdGVyOjpjcmVhdGUoKmZpbHRlckVsZW1lbnQsIGJ1aWxkZXIs
IGZpbHRlci5yZW5kZXJpbmdNb2RlKCksIGZpbHRlci5maWx0ZXJTY2FsZSgpLCBmaWx0ZXIuc291
cmNlSW1hZ2VSZWN0KCksIGZpbHRlci5maWx0ZXJSZWdpb24oKSwgcHJldmlvdXNFZmZlY3QpOwor
ICAgIHJldHVybiBTVkdGaWx0ZXI6OmNyZWF0ZSgqZmlsdGVyRWxlbWVudCwgYnVpbGRlciwgZmls
dGVyLnJlbmRlcmluZ01vZGUoKSwgZmlsdGVyLmZpbHRlclNjYWxlKCksIGZpbHRlci5zb3VyY2VJ
bWFnZVJlY3QoKSwgZmlsdGVyLmZpbHRlclJlZ2lvbigpLCBmaWx0ZXIuY2xpcE9wZXJhdGlvbigp
LCBwcmV2aW91c0VmZmVjdCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldHVwTGFzdEVmZmVjdFByb3Bl
cnRpZXMoRmlsdGVyRWZmZWN0JiBlZmZlY3QsIEZpbHRlckNvbnN1bWVyIGNvbnN1bWVyKQotewot
ICAgIC8vIFVubGlrZSBTVkcgRmlsdGVycyBhbmQgQ1NTRmlsdGVySW1hZ2VzLCBmaWx0ZXIgZnVu
Y3Rpb25zIG9uIHRoZSBmaWx0ZXIKLSAgICAvLyBwcm9wZXJ0eSBhcHBsaWVkIGhlcmUgc2hvdWxk
IG5vdCBjbGlwIHRvIHRoZWlyIHByaW1pdGl2ZSBzdWJyZWdpb25zLgotICAgIGVmZmVjdC5zZXRD
bGlwc1RvQm91bmRzKGNvbnN1bWVyID09IEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJGdW5jdGlvbik7
Ci0gICAgZWZmZWN0LnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCkpOwotfQotCi1ib29sIENTU0ZpbHRlcjo6YnVpbGRGaWx0ZXJGdW5jdGlvbnMoUmVu
ZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG9wZXJhdGlvbnMs
IEZpbHRlckNvbnN1bWVyIGNvbnN1bWVyKQorYm9vbCBDU1NGaWx0ZXI6OmJ1aWxkRmlsdGVyRnVu
Y3Rpb25zKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBv
cGVyYXRpb25zKQogewogICAgIG1fZnVuY3Rpb25zLmNsZWFyKCk7CiAgICAgbV9vdXRzZXRzID0g
eyB9OwpAQCAtMjQ5LDcgKzI0MSw3IEBAIGJvb2wgQ1NTRmlsdGVyOjpidWlsZEZpbHRlckZ1bmN0
aW9ucyhSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0CiAgICAgICAg
ICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKLSAgICAg
ICAgICAgIGVmZmVjdCA9IGNyZWF0ZUJsdXJFZmZlY3QoZG93bmNhc3Q8Qmx1ckZpbHRlck9wZXJh
dGlvbj4oKm9wZXJhdGlvbiksIGNvbnN1bWVyKTsKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0
ZUJsdXJFZmZlY3QoZG93bmNhc3Q8Qmx1ckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbiksIGNs
aXBPcGVyYXRpb24oKSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKQEAgLTMwNCwxNCArMjk2LDE0IEBAIGJvb2wgQ1NTRmls
dGVyOjpidWlsZEZpbHRlckZ1bmN0aW9ucyhSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3Qg
RmlsdGVyT3BlcmF0CiAgICAgICAgIAogICAgICAgICBpZiAoZmlsdGVyKSB7CiAgICAgICAgICAg
ICBlZmZlY3QgPSBmaWx0ZXItPmxhc3RFZmZlY3QoKTsKLSAgICAgICAgICAgIHNldHVwTGFzdEVm
ZmVjdFByb3BlcnRpZXMoKmVmZmVjdCwgY29uc3VtZXIpOworICAgICAgICAgICAgZWZmZWN0LT5z
ZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKICAg
ICAgICAgICAgIG1fZnVuY3Rpb25zLmFwcGVuZChmaWx0ZXIucmVsZWFzZU5vbk51bGwoKSk7CiAg
ICAgICAgICAgICBwcmV2aW91c0VmZmVjdCA9IFdURk1vdmUoZWZmZWN0KTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGVmZmVjdCkgewotICAgICAgICAg
ICAgc2V0dXBMYXN0RWZmZWN0UHJvcGVydGllcygqZWZmZWN0LCBjb25zdW1lcik7CisgICAgICAg
ICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCKCkpOwogICAgICAgICAgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92
ZShwcmV2aW91c0VmZmVjdCkgfTsKICAgICAgICAgICAgIG1fZnVuY3Rpb25zLmFwcGVuZCh7ICpl
ZmZlY3QgfSk7CiAgICAgICAgICAgICBwcmV2aW91c0VmZmVjdCA9IFdURk1vdmUoZWZmZWN0KTsK
QEAgLTQxMSwxNiArNDAzLDEzIEBAIExheW91dFJlY3QgQ1NTRmlsdGVyOjpjb21wdXRlU291cmNl
SW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGNvbnN0IExheW91dFJlY3QmIGZpbHRlCiAKIHZvaWQgQ1NT
RmlsdGVyOjpzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJl
Y3QpCiB7Ci0gICAgYXV0byBzY2FsZWRTb3VyY2VJbWFnZVJlY3QgPSBzb3VyY2VJbWFnZVJlY3Q7
Ci0gICAgc2NhbGVkU291cmNlSW1hZ2VSZWN0LnNjYWxlKGZpbHRlclNjYWxlKCkpOwotCiAgICAg
RmlsdGVyOjpzZXRGaWx0ZXJSZWdpb24oc291cmNlSW1hZ2VSZWN0KTsKLSAgICBGaWx0ZXI6OnNl
dFNvdXJjZUltYWdlUmVjdChzY2FsZWRTb3VyY2VJbWFnZVJlY3QpOworICAgIEZpbHRlcjo6c2V0
U291cmNlSW1hZ2VSZWN0KHNvdXJjZUltYWdlUmVjdCk7CiAKICAgICBmb3IgKGF1dG8mIGZ1bmN0
aW9uIDogbV9mdW5jdGlvbnMpIHsKICAgICAgICAgaWYgKGZ1bmN0aW9uLT5pc1NWR0ZpbHRlcigp
KSB7CiAgICAgICAgICAgICBkb3duY2FzdDxTVkdGaWx0ZXI+KGZ1bmN0aW9uLnB0cigpKS0+c2V0
RmlsdGVyUmVnaW9uKHNvdXJjZUltYWdlUmVjdCk7Ci0gICAgICAgICAgICBkb3duY2FzdDxTVkdG
aWx0ZXI+KGZ1bmN0aW9uLnB0cigpKS0+c2V0U291cmNlSW1hZ2VSZWN0KHNjYWxlZFNvdXJjZUlt
YWdlUmVjdCk7CisgICAgICAgICAgICBkb3duY2FzdDxTVkdGaWx0ZXI+KGZ1bmN0aW9uLnB0cigp
KS0+c2V0U291cmNlSW1hZ2VSZWN0KHNvdXJjZUltYWdlUmVjdCk7CiAgICAgICAgIH0KICAgICB9
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKaW5kZXggYjZhYjIwMzFlMDE2N2Zk
OGFlY2Y5ODNkZDlhMjZiMjVjZTJmOWY3Ni4uMmY1MTZlNTA1NDljZjA3MGI3MzM5MDJmODJmNDY4
NWEzODFjNWEzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaApAQCAtMzksMTUg
KzM5LDEzIEBAIGNsYXNzIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjsKIGNsYXNzIFJlbmRlckVs
ZW1lbnQ7CiBjbGFzcyBTb3VyY2VHcmFwaGljOwogCi1lbnVtIGNsYXNzIEZpbHRlckNvbnN1bWVy
IHsgRmlsdGVyUHJvcGVydHksIEZpbHRlckZ1bmN0aW9uIH07Ci0KIGNsYXNzIENTU0ZpbHRlciBm
aW5hbCA6IHB1YmxpYyBGaWx0ZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgotICAgIHN0YXRpYyBSZWZQdHI8Q1NTRmlsdGVyPiBjcmVhdGUoY29uc3QgRmlsdGVyT3Bl
cmF0aW9ucyYsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHNjYWxlRmFjdG9yID0gMSk7CisgICAgc3Rh
dGljIFJlZlB0cjxDU1NGaWx0ZXI+IGNyZWF0ZShjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiwgUmVu
ZGVyaW5nTW9kZSwgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLCBDbGlwT3BlcmF0aW9uID0gQ2xpcE9w
ZXJhdGlvbjo6SW50ZXJzZWN0KTsKIAogICAgIHZvaWQgc2V0U291cmNlSW1hZ2VSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpOwotICAgIGJvb2wgYnVpbGRGaWx0ZXJGdW5jdGlvbnMoUmVuZGVyRWxlbWVu
dCYsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmLCBGaWx0ZXJDb25zdW1lcik7CisgICAgYm9vbCBi
dWlsZEZpbHRlckZ1bmN0aW9ucyhSZW5kZXJFbGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9u
cyYpOwogICAgIHZvaWQgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7CiAKICAg
ICBib29sIGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpIGNvbnN0IHsgcmV0dXJuIG1faGFzRmls
dGVyVGhhdE1vdmVzUGl4ZWxzOyB9CkBAIC02NCw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICBMYXlv
dXRSZWN0IGNvbXB1dGVTb3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJlY3QoY29uc3QgTGF5b3V0UmVj
dCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0KTsKIAogcHJpdmF0
ZToKLSAgICBDU1NGaWx0ZXIoUmVuZGVyaW5nTW9kZSwgZmxvYXQgc2NhbGVGYWN0b3IsIGJvb2wg
aGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzLCBib29sIGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3Ry
aWN0ZWRCeVNlY3VyaXR5T3JpZ2luKTsKKyAgICBDU1NGaWx0ZXIoUmVuZGVyaW5nTW9kZSwgZmxv
YXQgc2NhbGVGYWN0b3IsIENsaXBPcGVyYXRpb24sIGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4
ZWxzLCBib29sIGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2lu
KTsKIAogI2lmIFVTRShDT1JFX0lNQUdFKQogICAgIGJvb2wgc3VwcG9ydHNDb3JlSW1hZ2VSZW5k
ZXJpbmcoKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyRmlsdGVycy5jcHAKaW5kZXggZmY5ZDgyNjYyNThlNzdhNjQyODRlZDFiOGU5NWE5
NGQ5Y2Q3N2YxZi4uZDU5ZjlkYzhmOGU3ZmUxOGJmMzViMjdhZTFlNjc4MjdkNzQ2OTE0MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKQEAg
LTEyMSw3ICsxMjEsNyBAQCB2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YnVpbGRGaWx0ZXIoUmVu
ZGVyRWxlbWVudCYgcmVuZGVyZXIsIGZsb2F0IHNjYWxlRmFjdG9yLAogICAgIC8vIElmIHRoZSBm
aWx0ZXIgZmFpbHMgdG8gYnVpbGQsIHJlbW92ZSBpdCBmcm9tIHRoZSBsYXllci4gSXQgd2lsbCBz
dGlsbCBhdHRlbXB0IHRvCiAgICAgLy8gZ28gdGhyb3VnaCByZWd1bGFyIHByb2Nlc3NpbmcgKGUu
Zy4gY29tcG9zaXRpbmcpLCBidXQgbmV2ZXIgYXBwbHkgYW55dGhpbmcuCiAgICAgLy8gRklYTUU6
IHRoaXMgcmVidWlsZHMgdGhlIGVudGlyZSBlZmZlY3RzIGNoYWluIGV2ZW4gaWYgdGhlIGZpbHRl
ciBzdHlsZSBkaWRuJ3QgY2hhbmdlLgotICAgIG1fZmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUo
cmVuZGVyZXIuc3R5bGUoKS5maWx0ZXIoKSwgcmVuZGVyaW5nTW9kZSwgc2NhbGVGYWN0b3IpOwor
ICAgIG1fZmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUocmVuZGVyZXIuc3R5bGUoKS5maWx0ZXIo
KSwgcmVuZGVyaW5nTW9kZSwgc2NhbGVGYWN0b3IsIEZpbHRlcjo6Q2xpcE9wZXJhdGlvbjo6VW5p
dGUpOwogfQogCiBHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6aW5wdXRDb250
ZXh0KCkKQEAgLTEzMiw3ICsxMzIsNyBAQCBHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmls
dGVyczo6aW5wdXRDb250ZXh0KCkKIHZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjphbGxvY2F0ZUJh
Y2tpbmdTdG9yZShjb25zdCBHcmFwaGljc0NvbnRleHQmIHRhcmdldENvbnRleHQpCiB7CiAgICAg
YXV0byYgZmlsdGVyID0gKm1fZmlsdGVyOwotICAgIGF1dG8gbG9naWNhbFNpemUgPSBmaWx0ZXIu
c291cmNlSW1hZ2VSZWN0KCkuc2l6ZSgpOworICAgIGF1dG8gbG9naWNhbFNpemUgPSBmaWx0ZXIu
c291cmNlSW1hZ2VSZWN0KCkuc2l6ZSgpICogZmlsdGVyLmZpbHRlclNjYWxlKCk7CiAgICAgCiAg
ICAgaWYgKCFtX3NvdXJjZUltYWdlIHx8IG1fc291cmNlSW1hZ2UtPmxvZ2ljYWxTaXplKCkgIT0g
bG9naWNhbFNpemUpIHsKICNpZiBVU0UoRElSRUNUMkQpCkBAIC0xNjIsNyArMTYyLDcgQEAgR3Jh
cGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBo
aWNzQ29udGV4dCYgZGVzdGluYXQKICAgICBpZiAoaGFzVXBkYXRlZEJhY2tpbmdTdG9yZSB8fCAh
bV9maWx0ZXItPmxhc3RFZmZlY3QoKSkgewogICAgICAgICAvLyBJZiB0aGUgZmlsdGVyIGZhaWxz
IHRvIGJ1aWxkLCByZW1vdmUgaXQgZnJvbSB0aGUgbGF5ZXIuIEl0IHdpbGwgc3RpbGwgYXR0ZW1w
dCB0bwogICAgICAgICAvLyBnbyB0aHJvdWdoIHJlZ3VsYXIgcHJvY2Vzc2luZyAoZS5nLiBjb21w
b3NpdGluZyksIGJ1dCBuZXZlciBhcHBseSBhbnl0aGluZy4KLSAgICAgICAgaWYgKCFtX2ZpbHRl
ci0+YnVpbGRGaWx0ZXJGdW5jdGlvbnMocmVuZGVyZXIsIHJlbmRlcmVyLnN0eWxlKCkuZmlsdGVy
KCksIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJQcm9wZXJ0eSkpCisgICAgICAgIGlmICghbV9maWx0
ZXItPmJ1aWxkRmlsdGVyRnVuY3Rpb25zKHJlbmRlcmVyLCByZW5kZXJlci5zdHlsZSgpLmZpbHRl
cigpKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKQEAgLTIwMCwx
OCArMjAwLDE0IEBAIEdyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZp
bHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0CiAKIHZvaWQgUmVuZGVyTGF5ZXJG
aWx0ZXJzOjphcHBseUZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29u
dGV4dCkKIHsKLSAgICBBU1NFUlQoaW5wdXRDb250ZXh0KCkpOwotCiAgICAgTE9HX1dJVEhfU1RS
RUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiXG5SZW5kZXJMYXllckZpbHRlcnMgIiA8PCB0aGlzIDw8
ICIgYXBwbHlGaWx0ZXJFZmZlY3QiKTsKIAorICAgIEFTU0VSVChpbnB1dENvbnRleHQoKSk7CiAg
ICAgaW5wdXRDb250ZXh0KCktPnJlc3RvcmUoKTsKIAogICAgIGF1dG8mIGZpbHRlciA9ICptX2Zp
bHRlcjsKIAotICAgIGRlc3RpbmF0aW9uQ29udGV4dC5zY2FsZSh7IDEgLyBmaWx0ZXIuZmlsdGVy
U2NhbGUoKS53aWR0aCgpLCAxIC8gZmlsdGVyLmZpbHRlclNjYWxlKCkuaGVpZ2h0KCkgfSk7CiAg
ICAgZGVzdGluYXRpb25Db250ZXh0LmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKG1fc291cmNlSW1h
Z2UuZ2V0KCksIGZpbHRlcik7Ci0gICAgZGVzdGluYXRpb25Db250ZXh0LnNjYWxlKGZpbHRlci5m
aWx0ZXJTY2FsZSgpKTsKLQogICAgIGZpbHRlci5jbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsK
IAogICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIlJlbmRlckxheWVyRmls
dGVycyAiIDw8IHRoaXMgPDwgIiBhcHBseUZpbHRlckVmZmVjdCBkb25lXG4iKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRl
ci5jcHAKaW5kZXggZWNiYjJiZWYxZTg5YjdhMDYzMTdlNTEyYTczM2Y1MTBiNzAwMGVhNy4uZmRh
ZDAzOWEwYzEwYTFmODUwYjYzYzA0ODRmZTIxNmNlNTE5ZDVlYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAK
QEAgLTEzMSw3ICsxMzEsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJl
c291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogCiAgICAgLy8gQ3Jl
YXRlIHRoZSBTVkdGaWx0ZXIgb2JqZWN0LgogICAgIGZpbHRlckRhdGEtPmJ1aWxkZXIgPSBtYWtl
VW5pcXVlPFNWR0ZpbHRlckJ1aWxkZXI+KCk7Ci0gICAgZmlsdGVyRGF0YS0+ZmlsdGVyID0gU1ZH
RmlsdGVyOjpjcmVhdGUoZmlsdGVyRWxlbWVudCgpLCAqZmlsdGVyRGF0YS0+YnVpbGRlciwgcmVu
ZGVyaW5nTW9kZSwgZmlsdGVyU2NhbGUsIGFic29sdXRlRHJhd2luZ1JlZ2lvbiwgZmlsdGVyRGF0
YS0+Ym91bmRhcmllcywgdGFyZ2V0Qm91bmRpbmdCb3gpOworICAgIGZpbHRlckRhdGEtPmZpbHRl
ciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRlckVsZW1lbnQoKSwgKmZpbHRlckRhdGEtPmJ1aWxk
ZXIsIHJlbmRlcmluZ01vZGUsIGZpbHRlclNjYWxlLCBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9u
LCBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzLCB0YXJnZXRCb3VuZGluZ0JveCk7CiAgICAgaWYgKCFm
aWx0ZXJEYXRhLT5maWx0ZXIpIHsKICAgICAgICAgbV9yZW5kZXJlckZpbHRlckRhdGFNYXAucmVt
b3ZlKCZyZW5kZXJlcik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIyOSw5ICsyMjksNyBA
QCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJF
bGVtZW50JiByZW5kZXJlciwgR3JhcGhpYwogCiAgICAgaWYgKCFmaWx0ZXJEYXRhLmJvdW5kYXJp
ZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpC
dWlsdDsKLSAgICAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKDEgLyBmaWx0ZXJEYXRhLmZp
bHRlci0+ZmlsdGVyU2NhbGUoKS53aWR0aCgpLCAxIC8gZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRl
clNjYWxlKCkuaGVpZ2h0KCkpKTsKICAgICAgICAgY29udGV4dC0+ZHJhd0ZpbHRlcmVkSW1hZ2VC
dWZmZXIoZmlsdGVyRGF0YS5zb3VyY2VHcmFwaGljQnVmZmVyLmdldCgpLCAqZmlsdGVyRGF0YS5m
aWx0ZXIpOwotICAgICAgICBjb250ZXh0LT5zY2FsZShmaWx0ZXJEYXRhLnNjYWxlKTsKICAgICB9
CiAKICAgICBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIgPSBudWxscHRyOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAppbmRl
eCA4YTQ5Y2Y5ZDI3NDUxZjljOTA2NjA0M2ViNmYwMTE1ODU1NjczN2JhLi41YzY3Y2EzMTkwY2Y2
MjNhNzk2MzViOTI5YjRjOTQ2MGE5NzYyMWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcApAQCAtNTAsMTAgKzUwLDggQEAgRkVJ
bWFnZTo6RkVJbWFnZShTb3VyY2VJbWFnZSYmIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZUltYWdlUmVjdCwgY28KIHsKIH0KIAotdm9pZCBGRUltYWdlOjpkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKK0Zsb2F0UmVjdCBGRUltYWdlOjpj
YWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYWdl
VmVjdG9yJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0g
ICAgYXV0byBwcmltaXRpdmVTdWJyZWdpb24gPSBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsK
LQogICAgIGF1dG8gaW1hZ2VSZWN0ID0gV1RGOjpzd2l0Y2hPbihtX3NvdXJjZUltYWdlLAogICAg
ICAgICBbJl0gKGNvbnN0IFJlZjxJbWFnZT4mKSB7CiAgICAgICAgICAgICBhdXRvIGltYWdlUmVj
dCA9IHByaW1pdGl2ZVN1YnJlZ2lvbjsKQEAgLTY1LDE0ICs2Myw3IEBAIHZvaWQgRkVJbWFnZTo6
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgICAg
ICAgICByZXR1cm4gcHJpbWl0aXZlU3VicmVnaW9uOwogICAgICAgICB9CiAgICAgKTsKLQotICAg
IGltYWdlUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICBpZiAoY2xpcHNU
b0JvdW5kcygpKQotICAgICAgICBpbWFnZVJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7
Ci0gICAgZWxzZQotICAgICAgICBpbWFnZVJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKLSAg
ICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGltYWdlUmVjdCkpOworICAg
IHJldHVybiBmaWx0ZXIuY2xpcFRvTWF4RWZmZWN0UmVjdChpbWFnZVJlY3QsIHByaW1pdGl2ZVN1
YnJlZ2lvbik7CiB9CiAKIC8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRUltYWdlU29mdHdhcmVB
cHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oIGIvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCmluZGV4IDZjOWFlNzkw
NDhhMWRmMjFlMDcxMzUwOGUwNGEwZGRjN2MzOWVkZWYuLjkxOWEwNGU2MWRjZDIyMzQ0MWIxZTE5
YjIyMzYyMjVjMzMwMWZkODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUltYWdlLmgKQEAgLTUwLDcgKzUwLDcgQEAgcHJpdmF0ZToKICAgICAvLyBG
RUltYWdlIHJlc3VsdHMgYXJlIGFsd2F5cyBpbiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Io
KQogICAgIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmKSBvdmVycmlkZSB7IH0KIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoY29uc3QgRmlsdGVyJikgZmluYWw7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVj
dChjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBG
bG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4gY3JlYXRlQXBwbGllcihjb25zdCBGaWx0
ZXImKSBjb25zdCBmaW5hbDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlci5jcHAKaW5kZXggMWJkOTIwYTVmYzljYzhkNDk2ODBhMzUwZjhiMTFi
MjQwMGUxNGJkNi4uMDJlYzAyNmY0NWM2OTFmMTFiNjBjNTc5ZWFhYmQxYzUxNGZkYWJiYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3Bw
CkBAIC0yOSwyMSArMjksMTkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWZQdHI8U1ZH
RmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50
LCBTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUs
IGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1h
Z2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgRmlsdGVyRWZmZWN0JiBwcmV2
aW91c0VmZmVjdCkKK1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRl
ckVsZW1lbnQmIGZpbHRlckVsZW1lbnQsIFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIsIFJlbmRl
cmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVn
aW9uLCBDbGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRpb24sIEZpbHRlckVmZmVjdCYgcHJldmlvdXNF
ZmZlY3QpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZShmaWx0ZXJFbGVtZW50LCBidWlsZGVyLCByZW5k
ZXJpbmdNb2RlLCBmaWx0ZXJTY2FsZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXJSZWdpb24sIGZp
bHRlclJlZ2lvbiwgJnByZXZpb3VzRWZmZWN0KTsKKyAgICByZXR1cm4gY3JlYXRlKGZpbHRlckVs
ZW1lbnQsIGJ1aWxkZXIsIHJlbmRlcmluZ01vZGUsIGZpbHRlclNjYWxlLCBzb3VyY2VJbWFnZVJl
Y3QsIGZpbHRlclJlZ2lvbiwgY2xpcE9wZXJhdGlvbiwgZmlsdGVyUmVnaW9uLCAmcHJldmlvdXNF
ZmZlY3QpOwogfQogCiBSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShTVkdGaWx0
ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyLCBSZW5k
ZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJl
Z2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCkKIHsKLSAgICByZXR1cm4g
Y3JlYXRlKGZpbHRlckVsZW1lbnQsIGJ1aWxkZXIsIHJlbmRlcmluZ01vZGUsIGZpbHRlclNjYWxl
LCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlclJlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gsIG51bGxw
dHIpOworICAgIHJldHVybiBjcmVhdGUoZmlsdGVyRWxlbWVudCwgYnVpbGRlciwgcmVuZGVyaW5n
TW9kZSwgZmlsdGVyU2NhbGUsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyUmVnaW9uLCBDbGlwT3Bl
cmF0aW9uOjpJbnRlcnNlY3QsIHRhcmdldEJvdW5kaW5nQm94LCBudWxscHRyKTsKIH0KIAotUmVm
UHRyPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVy
RWxlbWVudCwgU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlciwgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0
UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIEZpbHRlckVmZmVjdCogcHJldmlvdXNFZmZlY3QpCitS
ZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiBmaWx0
ZXJFbGVtZW50LCBTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyLCBSZW5kZXJpbmdNb2RlIHJlbmRl
cmluZ01vZGUsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgQ2xpcE9wZXJh
dGlvbiBjbGlwT3BlcmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBG
aWx0ZXJFZmZlY3QqIHByZXZpb3VzRWZmZWN0KQogewotICAgIGJvb2wgcHJpbWl0aXZlQm91bmRp
bmdCb3hNb2RlID0gZmlsdGVyRWxlbWVudC5wcmltaXRpdmVVbml0cygpID09IFNWR1VuaXRUeXBl
czo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWDsKLQotICAgIGF1dG8gZmlsdGVyID0g
YWRvcHRSZWYoKm5ldyBTVkdGaWx0ZXIocmVuZGVyaW5nTW9kZSwgZmlsdGVyU2NhbGUsIHNvdXJj
ZUltYWdlUmVjdCwgZmlsdGVyUmVnaW9uLCB0YXJnZXRCb3VuZGluZ0JveCwgcHJpbWl0aXZlQm91
bmRpbmdCb3hNb2RlKSk7CisgICAgYXV0byBmaWx0ZXIgPSBhZG9wdFJlZigqbmV3IFNWR0ZpbHRl
cihyZW5kZXJpbmdNb2RlLCBmaWx0ZXJTY2FsZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXJSZWdp
b24sIGNsaXBPcGVyYXRpb24sIHRhcmdldEJvdW5kaW5nQm94LCBmaWx0ZXJFbGVtZW50LnByaW1p
dGl2ZVVuaXRzKCkpKTsKIAogICAgIGlmICghcHJldmlvdXNFZmZlY3QpCiAgICAgICAgIGJ1aWxk
ZXIuc2V0dXBCdWlsdGluRWZmZWN0cyhTb3VyY2VHcmFwaGljOjpjcmVhdGUoKSk7CkBAIC03Miwx
OSArNzAsMTYgQEAgUmVmUHRyPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUoU1ZHRmlsdGVy
RWxlbWVudCYgZmlsdGVyRWxlbWVudCwgU1ZHRmlsdGVyQnUKICAgICByZXR1cm4gZmlsdGVyOwog
fQogCi1TVkdGaWx0ZXI6OlNWR0ZpbHRlcihSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNv
bnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJn
ZXRCb3VuZGluZ0JveCwgYm9vbCBlZmZlY3RCQm94TW9kZSkKLSAgICA6IEZpbHRlcihGaWx0ZXI6
OlR5cGU6OlNWR0ZpbHRlciwgcmVuZGVyaW5nTW9kZSwgZmlsdGVyU2NhbGUsIHNvdXJjZUltYWdl
UmVjdCwgZmlsdGVyUmVnaW9uKQorU1ZHRmlsdGVyOjpTVkdGaWx0ZXIoUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIENsaXBP
cGVyYXRpb24gY2xpcE9wZXJhdGlvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0Jv
eCwgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwcmltaXRpdmVVbml0cykKKyAgICA6IEZpbHRl
cihGaWx0ZXI6OlR5cGU6OlNWR0ZpbHRlciwgcmVuZGVyaW5nTW9kZSwgZmlsdGVyU2NhbGUsIHNv
dXJjZUltYWdlUmVjdCwgZmlsdGVyUmVnaW9uLCBjbGlwT3BlcmF0aW9uKQogICAgICwgbV90YXJn
ZXRCb3VuZGluZ0JveCh0YXJnZXRCb3VuZGluZ0JveCkKLSAgICAsIG1fZWZmZWN0QkJveE1vZGUo
ZWZmZWN0QkJveE1vZGUpCisgICAgLCBtX3ByaW1pdGl2ZVVuaXRzKHByaW1pdGl2ZVVuaXRzKQog
ewogfQogCi1GbG9hdFNpemUgU1ZHRmlsdGVyOjpzY2FsZWRCeUZpbHRlclNjYWxlKEZsb2F0U2l6
ZSBzaXplKSBjb25zdAorRmxvYXRTaXplIFNWR0ZpbHRlcjo6cmVzb2x2ZWRTaXplKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSkgY29uc3QKIHsKLSAgICBpZiAobV9lZmZlY3RCQm94TW9kZSkKLSAgICAg
ICAgc2l6ZSA9IHNpemUgKiBtX3RhcmdldEJvdW5kaW5nQm94LnNpemUoKTsKLQotICAgIHJldHVy
biBGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyU2NhbGUoc2l6ZSk7CisgICAgcmV0dXJuIG1fcHJpbWl0
aXZlVW5pdHMgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9Y
ID8gc2l6ZSAqIG1fdGFyZ2V0Qm91bmRpbmdCb3guc2l6ZSgpIDogc2l6ZTsKIH0KIAogI2lmIFVT
RShDT1JFX0lNQUdFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXIuaAppbmRleCAyMTFkMTAzN2UzZGFkNmFiNTU3N2M1MDcyMjk3ZTcwYzU3Y2NjNTIx
Li4zMzI2MGQwNTE5ZWUwY2YxZjMxMmM5MzUwOGFlZmQ5ODdiNDUyNjhmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaApAQCAtMjQsNiArMjQs
NyBAQAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdFZlY3Rvci5o
IgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgogI2lu
Y2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAKQEAgLTM1LDIx
ICszNiwyMSBAQCBjbGFzcyBTVkdGaWx0ZXJFbGVtZW50OwogCiBjbGFzcyBTVkdGaWx0ZXIgZmlu
YWwgOiBwdWJsaWMgRmlsdGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPFNWR0ZpbHRl
cj4gY3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmLCBTVkdGaWx0ZXJCdWlsZGVyJiwgUmVuZGVyaW5n
TW9kZSwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBGaWx0ZXJFZmZlY3Qm
IHByZXZpb3VzRWZmZWN0KTsKKyAgICBzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlKFNW
R0ZpbHRlckVsZW1lbnQmLCBTVkdGaWx0ZXJCdWlsZGVyJiwgUmVuZGVyaW5nTW9kZSwgY29uc3Qg
RmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBDbGlwT3BlcmF0aW9uLCBGaWx0ZXJFZmZl
Y3QmIHByZXZpb3VzRWZmZWN0KTsKICAgICBzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRl
KFNWR0ZpbHRlckVsZW1lbnQmLCBTVkdGaWx0ZXJCdWlsZGVyJiwgUmVuZGVyaW5nTW9kZSwgY29u
c3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdl
dEJvdW5kaW5nQm94KTsKLSAgICBzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlKFNWR0Zp
bHRlckVsZW1lbnQmLCBTVkdGaWx0ZXJCdWlsZGVyJiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgRmxv
YXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5k
aW5nQm94LCBGaWx0ZXJFZmZlY3QqIHByZXZpb3VzRWZmZWN0KTsKKyAgICBzdGF0aWMgUmVmUHRy
PFNWR0ZpbHRlcj4gY3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmLCBTVkdGaWx0ZXJCdWlsZGVyJiwg
UmVuZGVyaW5nTW9kZSwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRS
ZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBDbGlw
T3BlcmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBGaWx0ZXJFZmZl
Y3QqIHByZXZpb3VzRWZmZWN0KTsKIAogICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCgp
IGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0Qm91bmRpbmdCb3g7IH0KIAogICAgIHZvaWQgc2V0RXhw
cmVzc2lvbihGaWx0ZXJFZmZlY3RWZWN0b3ImJiBleHByZXNzaW9uKSB7IG1fZXhwcmVzc2lvbiA9
IFdURk1vdmUoZXhwcmVzc2lvbik7IH0KICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBsYXN0RWZm
ZWN0KCkgY29uc3QgeyByZXR1cm4gIW1fZXhwcmVzc2lvbi5pc0VtcHR5KCkgPyBtX2V4cHJlc3Np
b24ubGFzdCgpIDogbnVsbHB0cjsgfQogCi0gICAgRmxvYXRTaXplIHNjYWxlZEJ5RmlsdGVyU2Nh
bGUoRmxvYXRTaXplKSBjb25zdCBmaW5hbDsKKyAgICBGbG9hdFNpemUgcmVzb2x2ZWRTaXplKGNv
bnN0IEZsb2F0U2l6ZSYpIGNvbnN0IGZpbmFsOwogCiAgICAgUmVmUHRyPEZpbHRlckltYWdlPiBh
cHBseSgpIG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIFNWR0ZpbHRlcihSZW5kZXJpbmdNb2Rl
LCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUlt
YWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgRmxvYXRS
ZWN0JiBmaWx0ZXJSZWdpb24sIGJvb2wgZWZmZWN0QkJveE1vZGUpOworICAgIFNWR0ZpbHRlcihS
ZW5kZXJpbmdNb2RlLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIENsaXBP
cGVyYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1VuaXRUeXBl
czo6U1ZHVW5pdFR5cGUgcHJpbWl0aXZlVW5pdHMpOwogCiAjaWYgVVNFKENPUkVfSU1BR0UpCiAg
ICAgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygpIGNvbnN0IG92ZXJyaWRlOwpAQCAt
NjAsNyArNjEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xlYXJSZXN1bHQoKSBvdmVycmlkZTsK
IAogICAgIEZsb2F0UmVjdCBtX3RhcmdldEJvdW5kaW5nQm94OwotICAgIGJvb2wgbV9lZmZlY3RC
Qm94TW9kZTsKKyAgICBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIG1fcHJpbWl0aXZlVW5pdHM7
CiAKICAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9leHByZXNzaW9uOwogfTsK
</data>
<flag name="commit-queue"
          id="470535"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445376</attachid>
            <date>2021-11-29 20:47:37 -0800</date>
            <delta_ts>2021-11-29 22:26:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233613-20211129204736.patch</filename>
            <type>text/plain</type>
            <size>101282</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MjAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGM0OGYyNGZhZjAzZTQx
NDE2Njg0N2FkODQ1Y2ZhYWE0NDdmNzAyMS4uMWIwMzFjZTZmYmVkZmI0MjkxZjE1MDhiMDlhMzBj
ZjU4ODYwZmI2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5MCBAQAorMjAyMS0xMS0yOSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IENhbGN1bGF0ZSB0aGUgcmVzdWx0IGltYWdlIHJlY3RhbmdsZSBvZiB0aGUgRmlsdGVyRWZmZWN0
IGluIGZpbHRlciBjb29yZGluYXRlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjMzNjEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW4gdGhpcyBwYXRjaDoKKworICAgICAgICAxLiBkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCgpIGZ1bmN0aW9ucyBhcmUgZGVsZXRlZCBhbmQgcmVwbGFjZWQgYnkKKyAg
ICAgICAgICAgY2FsY3VsYXRlSW1hZ2VSZWN0KCkuIFRoZSBuZXcgZnVuY3Rpb24gcmV0dXJucyB0
aGUgaW1hZ2UgcmVjdGFuZ2xlCisgICAgICAgICAgIGluIGZpbHRlciBjb29yZGluYXRlcy4gQm90
aCB0aGUgaW1hZ2UgcmVjdGFuZ2xlIGluIGZpbHRlciBjb29yZGluYXRlcworICAgICAgICAgICBh
bmQgaW4gdXNlciBzcGFjZSBjb29yZGluYXRlcyB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgcmVzdWx0
IEZpbHRlckltYWdlLgorCisgICAgICAgIDIuIEZpbHRlckNvbnN1bWVyIGlzIHJlcGxhY2VkIGJ5
IEZpbHRlcjo6Q2xpcE9wZXJhdGlvbiBhbmQgaXQgaXMgc3RvcmVkCisgICAgICAgICAgIGluIEZp
bHRlci4gU28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgRmlsdGVyRWZmZWN0OjptX2NsaXBzVG9Cb3Vu
ZHMuCisKKyAgICAgICAgMy4gcmVzdWx0SXNBbHBoYUltYWdlKCkgd2lsbCB0YWtlIGEgVmVjdG9y
IG9mIEZpbHRlckltYWdlcyBpbnN0ZWFkIG9mIAorICAgICAgICAgICByZWx5aW5nIG9uIHRoZSBp
bnB1dCBlZmZlY3RzLiBUaGlzIGlzIGEgc3RlcCB0b3dhcmRzIHJlbW92aW5nIHRoZSBpbnB1dAor
ICAgICAgICAgICBlZmZlY3RzIGZyb20gdGhlIEZpbHRlckVmZmVjdC4KKworICAgICAgICA0LiBN
b3ZlIHRoZSBtYXhFZmZlY3RSZWN0KCkgY2FsY3VsYXRpb24gdG8gRmlsdGVyIGFuZCBtYWtlIGl0
IGFsc28gaW4KKyAgICAgICAgICAgZmlsdGVyIGNvb3JkaW5hdGVzLgorCisgICAgICAgIDUuIE1h
a2UgRmlsdGVyOjpzY2FsZWRCeUZpbHRlclNjYWxlKCkganVzdCBzY2FsZXMgYSBGbG9hdFNpemUu
IEFkZCBvdGhlcgorICAgICAgICAgICBvdmVycmlkZSBtZXRob2RzIHRvIHNjYWxlIHRoZSBGbG9h
dFBvaW50IGFuZCBGbG9hdFJlY3QuIE1vdmUgcmVzb2x2aW5nCisgICAgICAgICAgIHRoZSByZWxh
dGl2ZSBsZW5ndGggdG8gdGhlIGJvdW5kaW5nIGJveCBpbiBhIHNlcGFyYXRlIGZ1bmN0aW9uIAor
ICAgICAgICAgICBGaWx0ZXI6OnJlc29sdmVkU2l6ZSgpIHdoaWNoIGhhcyB0byBiZSBjYWxsZWQg
ZXhwbGljaXRseSBiZWZvcmUgY2FsbGluZworICAgICAgICAgICBzY2FsZWRCeUZpbHRlclNjYWxl
KCkuCisKKyAgICAgICAgNi4gUmVtb3ZlIEZpbHRlckVmZmVjdDo6bWFwUG9pbnRGcm9tVXNlclNw
YWNlVG9CdWZmZXIoKSBhbmQgcmVwbGFjZSBpdCBieQorICAgICAgICAgICBhIGNhbGwgdG8gRmls
dGVyOjpzY2FsZWRCeUZpbHRlclNjYWxlKCkgZm9sbG93ZWQgYnkgYSBjYWxsIHRvCisgICAgICAg
ICAgIEZpbHRlckltYWdlOjptYXBwZWRBYnNvbHV0ZVBvaW50KCkgc2luY2UgdGhpcyBpcyB3aGF0
IGl0IGFjdHVhbGx5IGRvZXMuCisKKyAgICAgICAgNy4gVGhlIFNWR0ZpbHRlciBhbmQgQ1NTRmls
dGVyIHdpbGwgcGFzcyB0aGUgc291cmNlSW1hZ2VSZWN0IGluIGZpbHRlcgorICAgICAgICAgICBj
b29yZGluYXRlcy4gV2hlbiBjcmVhdGluZyB0aGUgc291cmNlSW1hZ2UsIHNvdXJjZUltYWdlUmVj
dCBoYXMgdG8gYmUKKyAgICAgICAgICAgc2NhbGVkIGJ5IGNhbGxpbmcgRmlsdGVyOjpzY2FsZWRC
eUZpbHRlclNjYWxlKCkuCisKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIpOgorICAgICAgICBT
Y2FsZSB0aGUgY29udGV4dCBkb3duIGJlZm9yZSBkcmF3aW5nIHRoZSByZXN1bHQgSW1hZ2VCdWZm
ZXIgYW5kIHJlc3RvcmUKKyAgICAgICAgdGhlIGNvbnRleHQgYmFjayBhZnRlciB0aGUgZHJhd2lu
Zy4gUmVtb3ZlIHRoZSByZXBlYXRlZCBjb2RlIGZyb20gCisgICAgICAgIFJlbmRlckxheWVyRmls
dGVyczo6YXBwbHlGaWx0ZXJFZmZlY3QoKSBhbmQgCisgICAgICAgIFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSgpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlz
dGFudExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbG9yTWF0cml4OjpyZXN1bHRJc0FscGhhSW1hZ2UgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGRUNvbXBvc2l0ZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXgu
aDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNl
bWVudE1hcDo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVE
cm9wU2hhZG93OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RkVEcm9wU2hhZG93OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVGbG9vZDo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3Np
YW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3Np
YW5CbHVyOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVH
YXVzc2lhbkJsdXI6OnJlc3VsdElzQWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RkVMaWdodGluZzo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAgKCk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xv
Z3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpjYWxjdWxhdGVJbWFnZVJl
Y3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpyZXN1bHRJc0FscGhh
SW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1vcnBob2xvZ3kuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpjYWxjdWxhdGVJ
bWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnJlc3VsdElzQWxw
aGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVPZmZzZXQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmNhbGN1bGF0ZUltYWdlUmVjdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OnJlc3VsdElzQWxwaGFJbWFnZSBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaDoKKyAgICAg
ICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1
cmJ1bGVuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpjYWxjdWxhdGVJ
bWFnZVJlY3QgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
dXJidWxlbmNlLmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6Rmls
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2NhbGVkQnlGaWx0ZXJTY2FsZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6Om1heEVmZmVjdFJlY3QgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyOjpjbGlwVG9NYXhFZmZlY3RSZWN0IGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyOjpjbGlwT3BlcmF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
cjo6cmVzb2x2ZWRTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2NhbGVk
QnlGaWx0ZXJTY2FsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsaXBBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om1hcFBvaW50RnJvbVVzZXJTcGFjZVRv
QnVmZmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXN1
bHRJc0FscGhhSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojph
YnNvbHV0ZVBhaW50UmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OnNldEFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6c2V0VW5jbGlwcGVkQWJzb2x1dGVTdWJyZWdpb24pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGlwc1RvQm91bmRzIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0Q2xpcHNUb0JvdW5k
cyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJ
bWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpGaWx0ZXJJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJJbWFnZTo6bWF4RWZmZWN0UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJJbWFnZTo6bWFwcGVkQWJzb2x1dGVQb2ludCBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVySW1hZ2U6OmltYWdlUmVjdCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9MaWdodFNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvUG9pbnRMaWdodFNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb2ludExpZ2h0U291
cmNlOjppbml0UGFpbnRpbmdEYXRhIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhh
OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxw
aGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUdyYXBoaWM6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1l
bnRNYXBTb2Z0d2FyZUFwcGxpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1l
bnRNYXBTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5IGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGln
aHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1Nv
ZnR3YXJlQXBwbGllcjo6c2V0UGl4ZWxJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhv
bG9neVNvZnR3YXJlQXBwbGllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lT
b2Z0d2FyZUFwcGxpZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmVBcHBsaWVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZFT2Zmc2V0U29mdHdhcmVBcHBsaWVyOjphcHBseSBjb25zdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OkNTU0ZpbHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVCbHVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZVNWR0ZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmJ1aWxkRmlsdGVyRnVu
Y3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldHVwTGFzdEVmZmVjdFByb3BlcnRpZXMpOiBEZWxldGVk
LgorICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmls
dGVyczo6YnVpbGRGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJz
OjphbGxvY2F0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZp
bHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
RmlsdGVyczo6YXBwbHlGaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OmNh
bGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVJbWFnZS5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OlNWR0ZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGaWx0ZXI6OnJlc29sdmVkU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXI6OnNjYWxlZEJ5RmlsdGVyU2NhbGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oOgorCiAyMDIxLTExLTI4ICBTYWlkIEFib3UtSGFs
bGF3YSAgPHNhaWRAYXBwbGUuY29tPgogCiAgICAgICAgIFtHUFUgUHJvY2Vzc10gQXBwbHkgdGhl
IGZpbHRlciB0byBhbiBJbWFnZUJ1ZmZlciB0aHJvdWdoIEdyYXBoaWNzQ29udGV4dCBhbmQgSW1h
Z2VCdWZmZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZh
bHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAppbmRl
eCAxNDVkZDlkN2MzZjBmNzhkODZlOWY0OTg1NzE3ODQ5M2FkMTk4MGIxLi4yNjhmNDhjMzE0Yzcz
YzVjZDI4ZDVjNjVjNWE2M2FmNDI3ODA1NGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zp
bHRlckltYWdlVmFsdWUuY3BwCkBAIC0xMjcsNyArMTI3LDcgQEAgUmVmUHRyPEltYWdlPiBDU1NG
aWx0ZXJJbWFnZVZhbHVlOjppbWFnZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmxv
YXRTaXoKICAgICBhdXRvIGNzc0ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKG1fZmlsdGVyT3Bl
cmF0aW9ucywgcmVuZGVyaW5nTW9kZSk7CiAKICAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUltYWdl
UmVjdChzb3VyY2VJbWFnZVJlY3QpOwotICAgIGlmICghY3NzRmlsdGVyLT5idWlsZEZpbHRlckZ1
bmN0aW9ucyhyZW5kZXJlciwgbV9maWx0ZXJPcGVyYXRpb25zLCBGaWx0ZXJDb25zdW1lcjo6Rmls
dGVyRnVuY3Rpb24pKQorICAgIGlmICghY3NzRmlsdGVyLT5idWlsZEZpbHRlckZ1bmN0aW9ucyhy
ZW5kZXJlciwgbV9maWx0ZXJPcGVyYXRpb25zKSkKICAgICAgICAgcmV0dXJuICZJbWFnZTo6bnVs
bEltYWdlKCk7CiAKICAgICBpZiAoYXV0byBpbWFnZSA9IHNvdXJjZUltYWdlLT5maWx0ZXJlZElt
YWdlKCpjc3NGaWx0ZXIpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggODAxODY5NmQ0Njk1ZWU4YTBiYjU2OTk1ODk2
MDMxZWE5MGVjNTJmNy4uZTM3YjcxNTU3MTQwNjBiZmViN2FkYjAxODlmYWJlZGY3OWYxNjgxNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuY3BwCkBAIC02NDEsNyArNjQxLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdG
aWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgRmlsdGVyJgogICAg
IGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAorICAgIHNjYWxlKHsgMSAvIGZp
bHRlci5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS5oZWln
aHQoKSB9KTsKICAgICBkcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCByZXN1bHQtPmFic29s
dXRlSW1hZ2VSZWN0KCkpOworICAgIHNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwCmluZGV4IDg5NDdhOTg2MGU0
NmIxMWM1OGUyNzc1MzYyNTZmZGI5ZDUxZDE1NDYuLjBiNWJiYzRlYmE1NzY4Y2NmYTkyYzhiMjA5
NmE3Y2IzZDk5YjhkMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHAKQEAgLTM1LDcg
KzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIERpc3RhbnRMaWdodFNvdXJj
ZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmIHBh
aW50aW5nRGF0YSkgY29uc3QKK3ZvaWQgRGlzdGFudExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdE
YXRhKGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlJiwgUGFpbnRpbmdEYXRhJiBwYWlu
dGluZ0RhdGEpIGNvbnN0CiB7CiAgICAgZmxvYXQgYXppbXV0aCA9IGRlZzJyYWQobV9hemltdXRo
KTsKICAgICBmbG9hdCBlbGV2YXRpb24gPSBkZWcycmFkKG1fZWxldmF0aW9uKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0
U291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3Rh
bnRMaWdodFNvdXJjZS5oCmluZGV4IDMwMTkyYjBlZjBjZDFiZjQwM2Q0MjMzOGNlNDA4NzcxOGQ3
NTE3MDcuLmJlZGE1MDVmMjgyOTkzYThlY2U5OTk0ODIzNWRlMjJmYjA1YzZmOTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0
U291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9E
aXN0YW50TGlnaHRTb3VyY2UuaApAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBz
ZXRBemltdXRoKGZsb2F0KSBvdmVycmlkZTsKICAgICBib29sIHNldEVsZXZhdGlvbihmbG9hdCkg
b3ZlcnJpZGU7CiAKLSAgICB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0
JiwgUGFpbnRpbmdEYXRhJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBpbml0UGFpbnRpbmdE
YXRhKGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlJiByZXN1bHQsIFBhaW50aW5nRGF0
YSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIENvbXB1dGVkTGlnaHRpbmdEYXRhIGNvbXB1dGVQaXhl
bExpZ2h0aW5nRGF0YShjb25zdCBQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHop
IGNvbnN0IGZpbmFsOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAK
aW5kZXggMjAxOTEzYTMzNTE5YzA1NDUwZDdjZWVlYjUxOWU0ZjA2MWViMjYwZS4uOTU2MWJkOWI1
ZjhlMWVmODIyMDVhNzM2NjhiMGM0MzAyNDYyNDZkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCkBA
IC0xMDUsNyArMTA1LDcgQEAgYm9vbCBGRUNvbG9yTWF0cml4OjpzdXBwb3J0c0NvcmVJbWFnZVJl
bmRlcmluZygpIGNvbnN0CiB9CiAjZW5kaWYKIAotYm9vbCBGRUNvbG9yTWF0cml4OjpyZXN1bHRJ
c0FscGhhSW1hZ2UoKSBjb25zdAorYm9vbCBGRUNvbG9yTWF0cml4OjpyZXN1bHRJc0FscGhhSW1h
Z2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImKSBjb25zdAogewogICAgIHJldHVybiBtX3R5cGUg
PT0gRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5o
CmluZGV4IDNkMDcwNGU3ZjlhOWI4NjViMmQxNGViMThlOGE4NGM5ZDVmNzJhZTAuLmE0MzEyNWI1
MzE1NjJjNjNhOTUyODQ3YzhmOTA0NDljOTRmN2U4NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCkBAIC01
Niw3ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmlu
ZygpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAgICAgCi0gICAgYm9vbCByZXN1bHRJc0FscGhh
SW1hZ2UoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIHJlc3VsdElzQWxwaGFJbWFnZShjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHN0ZDo6
dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RBcHBsaWVyPiBjcmVhdGVBcHBsaWVyKGNvbnN0IEZpbHRl
ciYpIGNvbnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IDBlNzczYzA1NWY1MThi
M2NlNmIyYWJiZTEzMDUxMmJhODljZWY2MjcuLmM1NTEzN2Y2MDg2YWJjNmIxOWM2ODE5YzJkY2Uz
ZjY2OGFiOTg1Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVk
ZSAiRkVDb21wb3NpdGUuaCIKIAogI2luY2x1ZGUgIkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVy
LmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04NSwyNSArODYsMjMgQEAgYm9vbCBGRUNvbXBv
c2l0ZTo6c2V0SzQoZmxvYXQgazQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRkVDb21w
b3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQor
RmxvYXRSZWN0IEZFQ29tcG9zaXRlOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBm
aWx0ZXIsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZsb2F0UmVjdCYg
cHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAg
Y2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjoKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJB
VE9SX0FUT1A6CiAgICAgICAgIC8vIEZvciBJbiBhbmQgQXRvcCB0aGUgZmlyc3QgZWZmZWN0IGp1
c3QgaW5mbHVlbmNlcyB0aGUgcmVzdWx0IG9mCiAgICAgICAgIC8vIHRoZSBzZWNvbmQgZWZmZWN0
LiBTbyBqdXN0IHVzZSB0aGUgYWJzb2x1dGUgcGFpbnQgcmVjdCBvZiB0aGUgc2Vjb25kIGVmZmVj
dCBoZXJlLgotICAgICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVjdCgxKS0+YWJz
b2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmaWx0ZXIuY2xpcFRvTWF4RWZmZWN0UmVjdChp
bnB1dHNbMV0tPmltYWdlUmVjdCgpLCBwcmltaXRpdmVTdWJyZWdpb24pOworCiAgICAgY2FzZSBG
RUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOgogICAgICAgICAvLyBBcml0aG1ldGljIG1h
eSBpbmZsdW5jZSB0aGUgY29tcGVsZSBmaWx0ZXIgcHJpbWl0aXZlIHJlZ2lvbi4gU28gd2UgY2Fu
J3QKICAgICAgICAgLy8gb3B0aW1pemUgdGhlIHBhaW50IHJlZ2lvbiBoZXJlLgotICAgICAgICBz
ZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOwot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmaWx0ZXIubWF4RWZmZWN0UmVjdChwcmlt
aXRpdmVTdWJyZWdpb24pOworCiAgICAgZGVmYXVsdDoKICAgICAgICAgLy8gVGFrZSB0aGUgdW5p
b24gb2YgYm90aCBpbnB1dCBlZmZlY3RzLgotICAgICAgICBGaWx0ZXJFZmZlY3Q6OmRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KGZpbHRlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGZpbHRlciwgaW5wdXRzLCBwcmlt
aXRpdmVTdWJyZWdpb24pOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCmluZGV4IGIwZTgyNmY5MzE1
OTdhNGEyOTUwNjlkODMwYTk4NjM1MDk3ZDMzY2EuLjUzYWUwZDZhMjY0ZTIwYWY2NjU4Y2ZlYWY5
OGE3NDcyZDZjOGZmZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBGRUNvbXBvc2l0ZShjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiwg
ZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOwogCi0gICAgdm9pZCBkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAgICBGbG9h
dFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdl
VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIGJvb2wgbWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBsaWVkUGl4
ZWxzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV90eXBlID09IEZFQ09NUE9TSVRFX09QRVJB
VE9SX0FSSVRITUVUSUM7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKaW5kZXggZjI2NTlk
MzZlNTViYjIyZDY0ZmY1Yzg0MDZlYTZmYjRjZTgwOGVlMi4uMWQxYjYwNzFmNTRhNjRiYmIzOTMx
ZjAzNTAzNjI1NTNjYWQyZTc4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCkBAIC0yNiw2
ICsyNiw3IEBACiAjaW5jbHVkZSAiRkVDb252b2x2ZU1hdHJpeC5oIgogCiAjaW5jbHVkZSAiRkVD
b252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllci5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
MTEzLDYgKzExNCwxMSBAQCBib29sIEZFQ29udm9sdmVNYXRyaXg6OnNldFByZXNlcnZlQWxwaGEo
Ym9vbCBwcmVzZXJ2ZUFscGhhKQogICAgIHJldHVybiB0cnVlOwogfQogCitGbG9hdFJlY3QgRkVD
b252b2x2ZU1hdHJpeDo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBj
b25zdCBGaWx0ZXJJbWFnZVZlY3RvciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVn
aW9uKSBjb25zdAoreworICAgIHJldHVybiBmaWx0ZXIubWF4RWZmZWN0UmVjdChwcmltaXRpdmVT
dWJyZWdpb24pOworfQorCiBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4gRkVD
b252b2x2ZU1hdHJpeDo6Y3JlYXRlQXBwbGllcihjb25zdCBGaWx0ZXImKSBjb25zdAogewogICAg
IHJldHVybiBGaWx0ZXJFZmZlY3RBcHBsaWVyOjpjcmVhdGU8RkVDb252b2x2ZU1hdHJpeFNvZnR3
YXJlQXBwbGllcj4oKnRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaAppbmRleCBlYmIwMDZkYThj
ZDBjZWFjYTIyYzQ2YmZlYmFjODYyNzM5MzQxODVhLi5lMWExOWNjZjRjNDMwMzc5NDNhMzVkOGYx
NGMxNzY1NWE1YmVlYmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaApAQCAtNjcsNyArNjcsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEZFQ29udm9sdmVNYXRyaXgoY29uc3QgSW50U2l6ZSYg
a2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRh
cmdldE9mZnNldCwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVu
Z3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJp
eCk7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYp
IG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZl
Y3RSZWN0KCkpKTsgfQorICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmls
dGVyJiwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmxvYXRSZWN0JiBw
cmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgc3RkOjp1bmlxdWVfcHRy
PEZpbHRlckVmZmVjdEFwcGxpZXI+IGNyZWF0ZUFwcGxpZXIoY29uc3QgRmlsdGVyJikgY29uc3Qg
b3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKaW5kZXggNzg5OTdhMDM2NzMw
OGJmNWM5YzA5YTA1MDEwNmI1NjRkMjAzODQwNy4uN2JiNmEyZWM1YzU0ZmNlM2I4MTIyMDQ0ZTQz
NWYxZDI3NmM4ZGIzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKQEAgLTI2LDYgKzI2
LDcgQEAKICNpbmNsdWRlICJGRURpc3BsYWNlbWVudE1hcC5oIgogCiAjaW5jbHVkZSAiRkVEaXNw
bGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTgz
LDYgKzg0LDExIEBAIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnRyYW5zZm9ybVJlc3VsdENvbG9y
U3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgaW50IGluCiAgICAgICAgIGluLT50cmFuc2Zv
cm1SZXN1bHRDb2xvclNwYWNlKG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiB9CiAKK0Zsb2F0UmVj
dCBGRURpc3BsYWNlbWVudE1hcDo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmls
dGVyLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZl
U3VicmVnaW9uKSBjb25zdAoreworICAgIHJldHVybiBmaWx0ZXIubWF4RWZmZWN0UmVjdChwcmlt
aXRpdmVTdWJyZWdpb24pOworfQorCiBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGll
cj4gRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0ZUFwcGxpZXIoY29uc3QgRmlsdGVyJikgY29uc3QK
IHsKICAgICByZXR1cm4gRmlsdGVyRWZmZWN0QXBwbGllcjo6Y3JlYXRlPEZFRGlzcGxhY2VtZW50
TWFwU29mdHdhcmVBcHBsaWVyPigqdGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKaW5kZXgg
Y2VjNmIzMjIzOGM5MmI4NDViZDI4MDIwNjY3MmZlYWU5ZWFjMmI3YS4uNTNiMDlkNGQ2NjhjN2Uy
M2EzMDJkMWQzMmRmMmM4ZTg4ODE1MTliYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaApAQCAt
NTQsNyArNTQsNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYg
cmVzdWx0Q29sb3JTcGFjZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgdHJhbnNmb3JtUmVz
dWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBpbnQpIG92ZXJyaWRlOwogCi0gICAg
dm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZSB7
IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7
IH0KKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0
IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3Vi
cmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZl
Y3RBcHBsaWVyPiBjcmVhdGVBcHBsaWVyKGNvbnN0IEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RHJvcFNoYWRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRHJvcFNoYWRvdy5jcHAKaW5kZXggMThkOGMzMjZkMTk2ZWY5MmEzMGIyMGIyNTY5ZGUwOTVk
Zjc0NmQ5Ny4uN2YwNTc5YjZkNmZiNWJkNGE3ZGFmZDBiY2VlODFhYzI3MTY0YmJjNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFk
b3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
cm9wU2hhZG93LmNwcApAQCAtNDUsMjUgKzQ1LDIwIEBAIEZFRHJvcFNoYWRvdzo6RkVEcm9wU2hh
ZG93KGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29s
CiB7CiB9CiAKLXZvaWQgRkVEcm9wU2hhZG93OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChj
b25zdCBGaWx0ZXImIGZpbHRlcikKK0Zsb2F0UmVjdCBGRURyb3BTaGFkb3c6OmNhbGN1bGF0ZUlt
YWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlu
cHV0cywgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAg
RmxvYXRSZWN0IGFic29sdXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFp
bnRSZWN0KCk7Ci0gICAgRmxvYXRSZWN0IGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0KGFic29sdXRl
UGFpbnRSZWN0KTsKLSAgICBhYnNvbHV0ZU9mZnNldFBhaW50UmVjdC5tb3ZlKGZpbHRlci5zY2Fs
ZWRCeUZpbHRlclNjYWxlKHsgbV9keCwgbV9keSB9KSk7Ci0gICAgYWJzb2x1dGVQYWludFJlY3Qu
dW5pdGUoYWJzb2x1dGVPZmZzZXRQYWludFJlY3QpOworICAgIGF1dG8gaW1hZ2VSZWN0ID0gaW5w
dXRzWzBdLT5pbWFnZVJlY3QoKTsKKyAgICBhdXRvIGltYWdlUmVjdFdpdGhPZmZzZXQoaW1hZ2VS
ZWN0KTsKKyAgICBpbWFnZVJlY3RXaXRoT2Zmc2V0Lm1vdmUoZmlsdGVyLnJlc29sdmVkU2l6ZSh7
IG1fZHgsIG1fZHkgfSkpOworICAgIGltYWdlUmVjdC51bml0ZShpbWFnZVJlY3RXaXRoT2Zmc2V0
KTsKIAotICAgIEludFNpemUga2VybmVsU2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVL
ZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAgICBhdXRvIGtlcm5lbFNp
emUgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKGZpbHRlci5y
ZXNvbHZlZFNpemUoeyBtX3N0ZFgsIG1fc3RkWSB9KSk7CiAKICAgICAvLyBXZSB0YWtlIHRoZSBo
YWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1
biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KLSAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRlWCgz
ICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7Ci0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5m
bGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKKyAgICBpbWFnZVJlY3QuaW5m
bGF0ZVgoMyAqIGtlcm5lbFNpemUud2lkdGgoKSAqIDAuNWYpOworICAgIGltYWdlUmVjdC5pbmZs
YXRlWSgzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAqIDAuNWYpOwogCi0gICAgaWYgKGNsaXBzVG9C
b3VuZHMoKSkKLSAgICAgICAgYWJzb2x1dGVQYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJl
Y3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC51bml0ZShtYXhFZmZl
Y3RSZWN0KCkpOwotCi0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChh
YnNvbHV0ZVBhaW50UmVjdCkpOworICAgIHJldHVybiBmaWx0ZXIuY2xpcFRvTWF4RWZmZWN0UmVj
dChpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKIEludE91dHNldHMgRkVEcm9w
U2hhZG93OjpvdXRzZXRzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCmluZGV4IDcxZjMwYmJhNDg3NzZm
N2RiNDZiZTI5N2QyMjEzOGM0NGQxOTgzZTYuLjU4ZjZlNzk2Yzc5MzkxNmExMTZkMjQ2YTQxNTU0
OGZlNDY2ZDA3M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaApAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIEZFRHJvcFNoYWRvdyhmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBmbG9hdCBk
eCwgZmxvYXQgZHksIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgZmxvYXQgc2hhZG93T3BhY2l0
eSk7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYp
IG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVy
JiwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmxvYXRSZWN0JiBwcmlt
aXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgSW50T3V0c2V0cyBvdXRzZXRz
KCkgY29uc3Qgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCmluZGV4IGQ0ZWQyZDVlMmFmZDJmNmYwYmNkNzE2
ZjE4NGRhNWZmZmIxNzVmZmMuLjQ0MzlhMmUxZTU3YmQ5OGJkMmFkNDhjNmY2NGQ2ZGE1OTgzYzAy
MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVGbG9vZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUZsb29kLmNwcApAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiQ29sb3JTZXJpYWxp
emF0aW9uLmgiCiAjaW5jbHVkZSAiRkVGbG9vZFNvZnR3YXJlQXBwbGllci5oIgorI2luY2x1ZGUg
IkZpbHRlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNTgsNiArNTksMTEgQEAgYm9vbCBGRUZsb29kOjpzZXRGbG9vZE9wYWNp
dHkoZmxvYXQgZmxvb2RPcGFjaXR5KQogICAgIHJldHVybiB0cnVlOwogfQogCitGbG9hdFJlY3Qg
RkVGbG9vZDo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBG
aWx0ZXJJbWFnZVZlY3RvciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBj
b25zdAoreworICAgIHJldHVybiBmaWx0ZXIubWF4RWZmZWN0UmVjdChwcmltaXRpdmVTdWJyZWdp
b24pOworfQorCiBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4gRkVGbG9vZDo6
Y3JlYXRlQXBwbGllcihjb25zdCBGaWx0ZXImKSBjb25zdAogewogICAgIHJldHVybiBGaWx0ZXJF
ZmZlY3RBcHBsaWVyOjpjcmVhdGU8RkVGbG9vZFNvZnR3YXJlQXBwbGllcj4oKnRoaXMpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaApp
bmRleCBkNWY0NGVhOWQyNzgzMGZmYjMzZjY5NjhjNzhhNTcxOTA5YTA5NmY1Li44ZmMxZDk3YTgz
MjE2NjAyOWZiZWY5OTI1YzJlNWY3YWM2NzEyODc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaApAQCAtNDYsNyArNDYsNyBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIEZFRmxvb2QoY29uc3QgQ29sb3ImIGZsb29kQ29sb3IsIGZs
b2F0IGZsb29kT3BhY2l0eSk7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5n
SW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFn
ZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29u
c3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
c3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdEFwcGxpZXI+IGNyZWF0ZUFwcGxpZXIoY29uc3Qg
RmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggNmNl
NmZmN2U3ZWNmODQ5NTQ1ZWE4OWY5NzJjY2JmNzE2MDllNjVmOS4uMTZlYTIyZDhhNDkyOWUyMDU0
ZDQ2ZGNjMmRmMjVhNDZiYjY3NjE3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTkxLDYg
KzkxLDcgQEAgSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxT
aXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCiAKIEludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNh
bGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIEZsb2F0U2l6ZSBzdGREZXZp
YXRpb24pCiB7CisgICAgc3RkRGV2aWF0aW9uID0gZmlsdGVyLnJlc29sdmVkU2l6ZShzdGREZXZp
YXRpb24pOwogICAgIHJldHVybiBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoZmlsdGVyLnNj
YWxlZEJ5RmlsdGVyU2NhbGUoc3RkRGV2aWF0aW9uKSk7CiB9CiAKQEAgLTEwMiwyNyArMTAzLDIx
IEBAIEludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXpl
IHN0ZERldmlhdGlvbikKICAgICByZXR1cm4geyAzICoga2VybmVsU2l6ZS53aWR0aCgpIC8gMiwg
MyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgLyAyIH07CiB9CiAKLXZvaWQgRkVHYXVzc2lhbkJsdXI6
OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQorRmxvYXRS
ZWN0IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0
ZXIsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZsb2F0UmVjdCYgcHJp
bWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIEludFNpemUga2VybmVsU2l6ZSA9IGNhbGN1
bGF0ZUtlcm5lbFNpemUoZmlsdGVyLCB7IG1fc3RkWCwgbV9zdGRZIH0pOworICAgIGF1dG8gaW1h
Z2VSZWN0ID0gaW5wdXRzWzBdLT5pbWFnZVJlY3QoKTsKIAotICAgIEZsb2F0UmVjdCBhYnNvbHV0
ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwogICAgIC8v
IEVkZ2UgbW9kZXMgb3RoZXIgdGhhbiAnbm9uZScgZG8gbm90IGluZmxhdGUgdGhlIGFmZmVjdGVk
IHBhaW50IHJlY3QuCi0gICAgaWYgKG1fZWRnZU1vZGUgIT0gRWRnZU1vZGVUeXBlOjpOb25lKSB7
Ci0gICAgICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQ
YWludFJlY3QpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9lZGdlTW9kZSAh
PSBFZGdlTW9kZVR5cGU6Ok5vbmUpCisgICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGlt
YWdlUmVjdCk7CiAKLSAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0
aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4K
LSAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgpICog
MC41Zik7Ci0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVp
Z2h0KCkgKiAwLjVmKTsKKyAgICBhdXRvIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVVbnNjYWxlZEtl
cm5lbFNpemUoZmlsdGVyLnJlc29sdmVkU2l6ZSh7IG1fc3RkWCwgbV9zdGRZIH0pKTsKIAotICAg
IGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LmludGVyc2Vj
dChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWJzb2x1dGVQYWludFJlY3Qu
dW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKKyAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBz
aXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0
aHJlZSB0aW1lcy4KKyAgICBpbWFnZVJlY3QuaW5mbGF0ZVgoMyAqIGtlcm5lbFNpemUud2lkdGgo
KSAqIDAuNWYpOworICAgIGltYWdlUmVjdC5pbmZsYXRlWSgzICoga2VybmVsU2l6ZS5oZWlnaHQo
KSAqIDAuNWYpOwogCi0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChh
YnNvbHV0ZVBhaW50UmVjdCkpOworICAgIHJldHVybiBmaWx0ZXIuY2xpcFRvTWF4RWZmZWN0UmVj
dChpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKIEludE91dHNldHMgRkVHYXVz
c2lhbkJsdXI6Om91dHNldHMoKSBjb25zdApAQCAtMTMxLDkgKzEyNiw5IEBAIEludE91dHNldHMg
RkVHYXVzc2lhbkJsdXI6Om91dHNldHMoKSBjb25zdAogICAgIHJldHVybiB7IG91dHNldFNpemUu
aGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgoKSwgb3V0c2V0U2l6ZS5oZWlnaHQoKSwgb3V0c2V0
U2l6ZS53aWR0aCgpIH07CiB9CiAKLWJvb2wgRkVHYXVzc2lhbkJsdXI6OnJlc3VsdElzQWxwaGFJ
bWFnZSgpIGNvbnN0Citib29sIEZFR2F1c3NpYW5CbHVyOjpyZXN1bHRJc0FscGhhSW1hZ2UoY29u
c3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykgY29uc3QKIHsKLSAgICByZXR1cm4gaW5wdXRF
ZmZlY3QoMCktPnJlc3VsdElzQWxwaGFJbWFnZSgpOworICAgIHJldHVybiBpbnB1dHNbMF0tPmlz
QWxwaGFJbWFnZSgpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4g
RkVHYXVzc2lhbkJsdXI6OmNyZWF0ZUFwcGxpZXIoY29uc3QgRmlsdGVyJikgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lh
bkJsdXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVz
c2lhbkJsdXIuaAppbmRleCAyMjlmNGYzOTQ2ZWE0ZDliNDY1NjJlMTg0NTRjYzg3NTM4NjUwZWFj
Li44NzE4NTNkZjQ5MTIwNDQ3ODk4YzhiYjUyNWZiNDA0ZGZkNWYzMTU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFu
Qmx1ci5oCkBAIC00NywxMSArNDcsMTEgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRUdhdXNz
aWFuQmx1cihmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUpOwogCi0gICAgdm9pZCBkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAgICBGbG9h
dFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdl
VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgYm9vbCByZXN1bHRJc0FscGhhSW1hZ2UoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29s
IHJlc3VsdElzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RBcHBsaWVyPiBj
cmVhdGVBcHBsaWVyKGNvbnN0IEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNw
cAppbmRleCA2YjA2NmIzYmEwYzVjZmZiMGU0NTIyM2IwMzJlYjM4YzFmOTM0NThhLi5iYzkyZDM4
NDNjZDg4OWU5NWZlNTE5YjQ4ZmFhZTliOGMyN2Q0NWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKQEAgLTI5
LDYgKzI5LDcgQEAKICNpbmNsdWRlICJGRUxpZ2h0aW5nLmgiCiAKICNpbmNsdWRlICJGRUxpZ2h0
aW5nU29mdHdhcmVBcHBsaWVyLmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtODEsNiArODIsMTEgQEAgYm9vbCBGRUxpZ2h0aW5nOjpzZXRLZXJuZWxV
bml0TGVuZ3RoWShmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSkKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorRmxvYXRSZWN0IEZFTGlnaHRpbmc6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXIm
IGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImLCBjb25zdCBGbG9hdFJlY3QmIHByaW1p
dGl2ZVN1YnJlZ2lvbikgY29uc3QKK3sKKyAgICByZXR1cm4gZmlsdGVyLm1heEVmZmVjdFJlY3Qo
cHJpbWl0aXZlU3VicmVnaW9uKTsKK30KKwogc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdEFw
cGxpZXI+IEZFTGlnaHRpbmc6OmNyZWF0ZUFwcGxpZXIoY29uc3QgRmlsdGVyJikgY29uc3QKIHsK
ICAgICByZXR1cm4gRmlsdGVyRWZmZWN0QXBwbGllcjo6Y3JlYXRlPEZFTGlnaHRpbmdTb2Z0d2Fy
ZUFwcGxpZXI+KCp0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgKaW5kZXggOWQ3ZDZhZTI1NmM5NmJlZjZmZGZjYjZj
MDdiNWIxYzA0OGIyZjlhYS4uZGUwYjM4NmExMWM3MTU4YzUzOGJjYjRhODAyYzdjOGNmMGI1Njg3
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUxpZ2h0aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmgKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAg
IEZFTGlnaHRpbmcoVHlwZSwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZh
Y2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBm
bG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2Vy
bmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJik7CiAKLSAgICB2b2lkIGRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQ
YWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIEZsb2F0
UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVySW1hZ2VW
ZWN0b3ImIGlucHV0cywgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdEFwcGxpZXI+IGNy
ZWF0ZUFwcGxpZXIoY29uc3QgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5
LmNwcAppbmRleCBmMWY0ZGRkNjk5ZmIxZjlmN2E1N2U3Y2Y0NGJiMDcyZGJlNDlkYzQ1Li4yNTk2
OWI4MTlhYjYyNzE0ZmIwYmY3MDI5NDY0YTg3NmE3NDZmZTgzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3Bw
CkBAIC02OCwyMCArNjgsMTYgQEAgYm9vbCBGRU1vcnBob2xvZ3k6OnNldFJhZGl1c1koZmxvYXQg
cmFkaXVzWSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGRU1vcnBob2xvZ3k6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQorRmxvYXRSZWN0IEZF
TW9ycGhvbG9neTo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1
YnJlZ2lvbikgY29uc3QKIHsKLSAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0gaW5wdXRFZmZlY3Qo
MCktPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgcGFpbnRSZWN0LmluZmxhdGUoZmlsdGVyLnNj
YWxlZEJ5RmlsdGVyU2NhbGUoeyBtX3JhZGl1c1gsIG1fcmFkaXVzWSB9KSk7Ci0gICAgaWYgKGNs
aXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgcGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0
KCkpOwotICAgIGVsc2UKLSAgICAgICAgcGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7
Ci0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsK
KyAgICBhdXRvIGltYWdlUmVjdCA9IGlucHV0c1swXS0+aW1hZ2VSZWN0KCk7CisgICAgaW1hZ2VS
ZWN0LmluZmxhdGUoZmlsdGVyLnJlc29sdmVkU2l6ZSh7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0p
KTsKKyAgICByZXR1cm4gZmlsdGVyLmNsaXBUb01heEVmZmVjdFJlY3QoaW1hZ2VSZWN0LCBwcmlt
aXRpdmVTdWJyZWdpb24pOwogfQogCi1ib29sIEZFTW9ycGhvbG9neTo6cmVzdWx0SXNBbHBoYUlt
YWdlKCkgY29uc3QKK2Jvb2wgRkVNb3JwaG9sb2d5OjpyZXN1bHRJc0FscGhhSW1hZ2UoY29uc3Qg
RmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykgY29uc3QKIHsKLSAgICByZXR1cm4gaW5wdXRFZmZl
Y3QoMCktPnJlc3VsdElzQWxwaGFJbWFnZSgpOworICAgIHJldHVybiBpbnB1dHNbMF0tPmlzQWxw
aGFJbWFnZSgpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4gRkVN
b3JwaG9sb2d5OjpjcmVhdGVBcHBsaWVyKGNvbnN0IEZpbHRlciYpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3ku
aAppbmRleCBlNTQ4NDgwN2I3NDczNzNhMWFlMzE4N2NmZjVjZGUwZjdjYzdlY2RkLi4yMmExNTIx
MWRmYTE2ZmJkMjBmOGEwYzEwM2JmYjA3M2Y4MjE0MGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKQEAgLTQ4
LDkgKzQ4LDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRU1vcnBob2xvZ3koTW9ycGhvbG9n
eU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSk7CiAKLSAgICB2b2lk
IGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOworICAg
IEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVy
SW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24p
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgYm9vbCByZXN1bHRJc0FscGhhSW1hZ2UoKSBjb25zdCBv
dmVycmlkZTsKKyAgICBib29sIHJlc3VsdElzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJbWFnZVZl
Y3RvciYgaW5wdXRzKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWx0
ZXJFZmZlY3RBcHBsaWVyPiBjcmVhdGVBcHBsaWVyKGNvbnN0IEZpbHRlciYpIGNvbnN0IG92ZXJy
aWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFT2Zmc2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVPZmZzZXQuY3BwCmluZGV4IDA0NDkwYjM1NjEzYmZiNzAxYjJmMGNkNGRkYmFkYzRmM2Q0
YjgyN2EuLjlmMWMyNzk3MTkyOGYyMzI4YmQxODA2NTRkZDJlYTcxZDNhMmZjZmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQu
Y3BwCkBAIC01MywyMCArNTMsMTYgQEAgdm9pZCBGRU9mZnNldDo6c2V0RHkoZmxvYXQgZHkpCiAg
ICAgbV9keSA9IGR5OwogfQogCi12b2lkIEZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50
UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKK0Zsb2F0UmVjdCBGRU9mZnNldDo6Y2FsY3VsYXRl
SW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYg
aW5wdXRzLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAg
ICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0
KCk7Ci0gICAgcGFpbnRSZWN0Lm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX2R4
LCBtX2R5IH0pKTsKLSAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQotICAgICAgICBwYWludFJlY3Qu
aW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBwYWludFJlY3Qu
dW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3Np
bmdJbnRSZWN0KHBhaW50UmVjdCkpOworICAgIGF1dG8gaW1hZ2VSZWN0ID0gaW5wdXRzWzBdLT5p
bWFnZVJlY3QoKTsKKyAgICBpbWFnZVJlY3QubW92ZShmaWx0ZXIucmVzb2x2ZWRTaXplKHsgbV9k
eCwgbV9keSB9KSk7CisgICAgcmV0dXJuIGZpbHRlci5jbGlwVG9NYXhFZmZlY3RSZWN0KGltYWdl
UmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAotYm9vbCBGRU9mZnNldDo6cmVzdWx0SXNB
bHBoYUltYWdlKCkgY29uc3QKK2Jvb2wgRkVPZmZzZXQ6OnJlc3VsdElzQWxwaGFJbWFnZShjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzKSBjb25zdAogewotICAgIHJldHVybiBpbnB1dEVm
ZmVjdCgwKS0+cmVzdWx0SXNBbHBoYUltYWdlKCk7CisgICAgcmV0dXJuIGlucHV0c1swXS0+aXNB
bHBoYUltYWdlKCk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RBcHBsaWVyPiBG
RU9mZnNldDo6Y3JlYXRlQXBwbGllcihjb25zdCBGaWx0ZXImKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCmluZGV4IDNj
MmRhYWYzM2ZmZGJlODYxZjI5MDRjZjIwMjIzNWQ0M2U4MWRjZmYuLjEwZWIzM2M5NGY5OGI3ZGNh
MzY3NTFjNmY4OGYxNjk4MTY1OTkwZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKQEAgLTM5LDkgKzM5LDkgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBGRU9mZnNldChmbG9hdCBkeCwgZmxvYXQgZHkpOwogCi0gICAgdm9p
ZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAg
ICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRl
ckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9u
KSBjb25zdCBvdmVycmlkZTsKIAotICAgIGJvb2wgcmVzdWx0SXNBbHBoYUltYWdlKCkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgYm9vbCByZXN1bHRJc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VW
ZWN0b3ImIGlucHV0cykgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Rmls
dGVyRWZmZWN0QXBwbGllcj4gY3JlYXRlQXBwbGllcihjb25zdCBGaWx0ZXImKSBjb25zdCBvdmVy
cmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVRpbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVRpbGUuY3BwCmluZGV4IDJhZDk3YjMyN2JkOWVjMTJkNTc3NWU4NmYzOWUwMjc0YmYzZTQ3
MzguLjExYjQwMzVjNmE4NGE4ZjkzZWE3ODA1YjM3ZTFiYjNmNWI3Yjc5ZDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKQEAg
LTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJGRVRpbGUuaCIKIAogI2luY2x1ZGUgIkZFVGlsZVNv
ZnR3YXJlQXBwbGllci5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzcsOSArMzgsMTQgQEAg
RkVUaWxlOjpGRVRpbGUoKQogewogfQogCi1ib29sIEZFVGlsZTo6cmVzdWx0SXNBbHBoYUltYWdl
KCkgY29uc3QKK0Zsb2F0UmVjdCBGRVRpbGU6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0
ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImLCBjb25zdCBGbG9hdFJlY3QmIHBy
aW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICByZXR1cm4gaW5wdXRFZmZlY3QoMCktPnJl
c3VsdElzQWxwaGFJbWFnZSgpOworICAgIHJldHVybiBmaWx0ZXIubWF4RWZmZWN0UmVjdChwcmlt
aXRpdmVTdWJyZWdpb24pOworfQorCitib29sIEZFVGlsZTo6cmVzdWx0SXNBbHBoYUltYWdlKGNv
bnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlucHV0
c1swXS0+aXNBbHBoYUltYWdlKCk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RB
cHBsaWVyPiBGRVRpbGU6OmNyZWF0ZUFwcGxpZXIoY29uc3QgRmlsdGVyJikgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCmluZGV4
IDJlZTM3MzEyOGZjYTRmNTYxNGZlM2FlZDg0MmY3YjdhOTg1OTNiNGYuLmZiMjY1M2FmODIzZTcz
ZWZhMmFhOTU2OGQ2YjY1MThjZmY2YzkwNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaApAQCAtMzMsOSArMzMsOSBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIEZFVGlsZSgpOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVu
Y2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICBGbG9hdFJlY3QgY2FsY3Vs
YXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1
dHMsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsK
IAotICAgIGJvb2wgcmVzdWx0SXNBbHBoYUltYWdlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9v
bCByZXN1bHRJc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykgY29u
c3Qgb3ZlcnJpZGU7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4g
Y3JlYXRlQXBwbGllcihjb25zdCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVu
Y2UuY3BwCmluZGV4IGFjNmE0NDlmZWNhZmI3OGEwNDIzZGYxN2NiNDM1ZjQ0ZDE0ZTU5YzMuLjRi
NDNmZTk0ZmQzMDc1MDk3ODU4ZmVjNmUyOWQ2MTU1ZGM3NDk5YWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5j
cHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKIAogI2luY2x1
ZGUgIkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllci5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtOTUsNiArOTYsMTEgQEAgYm9vbCBGRVR1cmJ1bGVuY2U6OnNldFN0aXRjaFRpbGVzKGJvb2wg
c3RpdGNoKQogICAgIHJldHVybiB0cnVlOwogfQogCitGbG9hdFJlY3QgRkVUdXJidWxlbmNlOjpj
YWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYWdl
VmVjdG9yJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGZpbHRlci5tYXhFZmZlY3RSZWN0KHByaW1pdGl2ZVN1YnJlZ2lvbik7Cit9CisK
IHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RBcHBsaWVyPiBGRVR1cmJ1bGVuY2U6OmNyZWF0
ZUFwcGxpZXIoY29uc3QgRmlsdGVyJikgY29uc3QKIHsKICAgICByZXR1cm4gRmlsdGVyRWZmZWN0
QXBwbGllcjo6Y3JlYXRlPEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcj4oKnRoaXMpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1
bGVuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJi
dWxlbmNlLmgKaW5kZXggNWZmYWRkZWMyMWIxZWZiODc0ZjliNjI2Mjg5YWVmY2M0NzM5ZGU0ZS4u
MTc1ZmZmNzQyODI2ZmNhYzIyY2RmM2I4MzZkMmM5Yjk3MDgwMTA5NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5o
CkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRkVUdXJidWxlbmNlKFR1
cmJ1bGVuY2VUeXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVks
IGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKTsKIAotICAgIHZv
aWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGUgeyBz
ZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9
CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBG
aWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJl
Z2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0
QXBwbGllcj4gY3JlYXRlQXBwbGllcihjb25zdCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIu
Y3BwCmluZGV4IDBlZTEyY2JkNjg4NmU3MWYzYWY4ODBlZTJkNDM3ZTEwODIzMDcyODkuLjgzY2Zi
MTZmZmE1YzFlZDNmMDQ1ZTdjYzc0NjkyMzlhNWQzMDIzODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5jcHAKQEAgLTMwLDIyICsz
MCw1MiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZpbHRlcjo6RmlsdGVyKEZpbHRlcjo6
VHlwZSBmaWx0ZXJUeXBlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEZsb2F0
U2l6ZSYgZmlsdGVyU2NhbGUpCitGaWx0ZXI6OkZpbHRlcihGaWx0ZXI6OlR5cGUgZmlsdGVyVHlw
ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNj
YWxlLCBDbGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRpb24pCiAgICAgOiBGaWx0ZXJGdW5jdGlvbihm
aWx0ZXJUeXBlKQogICAgICwgbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCiAgICAgLCBt
X2ZpbHRlclNjYWxlKGZpbHRlclNjYWxlKQorICAgICwgbV9jbGlwT3BlcmF0aW9uKGNsaXBPcGVy
YXRpb24pCiB7CiB9CiAKLUZpbHRlcjo6RmlsdGVyKEZpbHRlcjo6VHlwZSBmaWx0ZXJUeXBlLCBS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUs
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRl
clJlZ2lvbikKK0ZpbHRlcjo6RmlsdGVyKEZpbHRlcjo6VHlwZSBmaWx0ZXJUeXBlLCBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lv
biwgQ2xpcE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9uKQogICAgIDogRmlsdGVyRnVuY3Rpb24oZmls
dGVyVHlwZSkKICAgICAsIG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQogICAgICwgbV9m
aWx0ZXJTY2FsZShmaWx0ZXJTY2FsZSkKICAgICAsIG1fc291cmNlSW1hZ2VSZWN0KHNvdXJjZUlt
YWdlUmVjdCkKICAgICAsIG1fZmlsdGVyUmVnaW9uKGZpbHRlclJlZ2lvbikKKyAgICAsIG1fY2xp
cE9wZXJhdGlvbihjbGlwT3BlcmF0aW9uKQogewogfQogCitGbG9hdFBvaW50IEZpbHRlcjo6c2Nh
bGVkQnlGaWx0ZXJTY2FsZShjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gcG9pbnQuc2NhbGVkKG1fZmlsdGVyU2NhbGUud2lkdGgoKSwgbV9maWx0ZXJTY2FsZS5o
ZWlnaHQoKSk7Cit9CisKK0Zsb2F0U2l6ZSBGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyU2NhbGUoY29u
c3QgRmxvYXRTaXplJiBzaXplKSBjb25zdAoreworICAgIHJldHVybiBzaXplICogbV9maWx0ZXJT
Y2FsZTsKK30KKworRmxvYXRSZWN0IEZpbHRlcjo6c2NhbGVkQnlGaWx0ZXJTY2FsZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgYXV0byBzY2FsZWRSZWN0ID0gcmVjdDsKKyAg
ICBzY2FsZWRSZWN0LnNjYWxlKG1fZmlsdGVyU2NhbGUpOworICAgIHJldHVybiBzY2FsZWRSZWN0
OworfQorCitGbG9hdFJlY3QgRmlsdGVyOjptYXhFZmZlY3RSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAoreworICAgIHJldHVybiBpbnRlcnNlY3Rpb24ocHJp
bWl0aXZlU3VicmVnaW9uLCBtX2ZpbHRlclJlZ2lvbik7Cit9CisKK0Zsb2F0UmVjdCBGaWx0ZXI6
OmNsaXBUb01heEVmZmVjdFJlY3QoY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAoreworICAgIGF1dG8gbWF4RWZmZWN0
UmVjdCA9IHRoaXMtPm1heEVmZmVjdFJlY3QocHJpbWl0aXZlU3VicmVnaW9uKTsKKyAgICByZXR1
cm4gbV9jbGlwT3BlcmF0aW9uID09IENsaXBPcGVyYXRpb246OkludGVyc2VjdCA/IGludGVyc2Vj
dGlvbihpbWFnZVJlY3QsIG1heEVmZmVjdFJlY3QpIDogdW5pb25SZWN0KGltYWdlUmVjdCwgbWF4
RWZmZWN0UmVjdCk7Cit9CisKIFJlZlB0cjxGaWx0ZXJJbWFnZT4gRmlsdGVyOjphcHBseShJbWFn
ZUJ1ZmZlciogc291cmNlSW1hZ2UpCiB7CiAgICAgc2V0U291cmNlSW1hZ2Uoc291cmNlSW1hZ2Up
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
LmgKaW5kZXggYmM5Yjk0ZDY1Mzk4OWRlYWFjM2Y2NDJmMWYzNzRhNzVjNWY3ZDM2Mi4uMWNkZTM5
MzRiNTczNDVjMzAwYzU0ZTViOGUyN2M4N2U3ZGRiZDE0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCkBAIC0zNSw2ICszNSw4IEBA
IGNsYXNzIEZpbHRlciA6IHB1YmxpYyBGaWx0ZXJGdW5jdGlvbiB7CiAgICAgdXNpbmcgRmlsdGVy
RnVuY3Rpb246OmFwcGx5OwogCiBwdWJsaWM6CisgICAgZW51bSBjbGFzcyBDbGlwT3BlcmF0aW9u
IHsgSW50ZXJzZWN0LCBVbml0ZSB9OworCiAgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9CiAgICAgdm9pZCBzZXRSZW5kZXJp
bmdNb2RlKFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkgeyBtX3JlbmRlcmluZ01vZGUgPSBy
ZW5kZXJpbmdNb2RlOyB9CiAgICAgCkBAIC01MCwxNCArNTIsMjMgQEAgcHVibGljOgogICAgIElt
YWdlQnVmZmVyKiBzb3VyY2VJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlSW1hZ2UuZ2V0
KCk7IH0KICAgICB2b2lkIHNldFNvdXJjZUltYWdlKFJlZlB0cjxJbWFnZUJ1ZmZlcj4mJiBzb3Vy
Y2VJbWFnZSkgeyBtX3NvdXJjZUltYWdlID0gV1RGTW92ZShzb3VyY2VJbWFnZSk7IH0KIAotICAg
IHZpcnR1YWwgRmxvYXRTaXplIHNjYWxlZEJ5RmlsdGVyU2NhbGUoRmxvYXRTaXplIHNpemUpIGNv
bnN0IHsgcmV0dXJuIHNpemUgKiBtX2ZpbHRlclNjYWxlOyB9CisgICAgQ2xpcE9wZXJhdGlvbiBj
bGlwT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jbGlwT3BlcmF0aW9uOyB9CisKKyAgICB2
aXJ0dWFsIEZsb2F0U2l6ZSByZXNvbHZlZFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKSBjb25z
dCB7IHJldHVybiBzaXplOyB9CisKKyAgICBGbG9hdFBvaW50IHNjYWxlZEJ5RmlsdGVyU2NhbGUo
Y29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIEZsb2F0U2l6ZSBzY2FsZWRCeUZpbHRlclNj
YWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0OworICAgIEZsb2F0UmVjdCBzY2FsZWRCeUZpbHRl
clNjYWxlKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OworCisgICAgRmxvYXRSZWN0IG1heEVmZmVj
dFJlY3QoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0OworICAgIEZs
b2F0UmVjdCBjbGlwVG9NYXhFZmZlY3RSZWN0KGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Q7CiAKICAgICB2aXJ0dWFs
IFJlZlB0cjxGaWx0ZXJJbWFnZT4gYXBwbHkoKSA9IDA7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVm
UHRyPEZpbHRlckltYWdlPiBhcHBseShJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UpOwogCiBwcm90
ZWN0ZWQ6Ci0gICAgRmlsdGVyKEZpbHRlcjo6VHlwZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgRmxv
YXRTaXplJiBmaWx0ZXJTY2FsZSk7Ci0gICAgRmlsdGVyKEZpbHRlcjo6VHlwZSwgUmVuZGVyaW5n
TW9kZSwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uKTsKKyAgICBGaWx0ZXIo
RmlsdGVyOjpUeXBlLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxl
LCBDbGlwT3BlcmF0aW9uID0gQ2xpcE9wZXJhdGlvbjo6SW50ZXJzZWN0KTsKKyAgICBGaWx0ZXIo
RmlsdGVyOjpUeXBlLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxl
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0
ZXJSZWdpb24sIENsaXBPcGVyYXRpb24gPSBDbGlwT3BlcmF0aW9uOjpJbnRlcnNlY3QpOwogCiBw
cml2YXRlOgogICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlOwpAQCAtNjcsNiArNzgs
OCBAQCBwcml2YXRlOgogICAgIEZsb2F0UmVjdCBtX2ZpbHRlclJlZ2lvbjsKIAogICAgIFJlZlB0
cjxJbWFnZUJ1ZmZlcj4gbV9zb3VyY2VJbWFnZTsKKworICAgIENsaXBPcGVyYXRpb24gbV9jbGlw
T3BlcmF0aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3Bw
CmluZGV4IDA4ZDhkMzZjMDcwOTIwYWYzOTIyMWUzMGExMTU2NDY1ZjVlMjhhMmUuLmUzZDk0Zjk4
OWRkMzQxODY2ZTMwZmZjMjFmOGZiMjUxMzA1ZjA3YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKQEAg
LTM0LDI4ICszNCwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgRmlsdGVyRWZm
ZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKQorRmxvYXRSZWN0
IEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBj
b25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2
ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAgICBtX2Fic29sdXRlUGFpbnRSZWN0ID0gSW50UmVjdCgp
OwotICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9pbnB1dEVmZmVjdHMpCi0gICAgICAgIG1fYWJz
b2x1dGVQYWludFJlY3QudW5pdGUoZWZmZWN0LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBj
bGlwQWJzb2x1dGVQYWludFJlY3QoKTsKLX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNsaXBBYnNv
bHV0ZVBhaW50UmVjdCgpCi17Ci0gICAgLy8gRmlsdGVycyBpbiBTVkcgY2xpcCB0byBwcmltaXRp
dmUgc3VicmVnaW9uLCB3aGlsZSBDU1MgZG9lc24ndC4KLSAgICBpZiAobV9jbGlwc1RvQm91bmRz
KQotICAgICAgICBtX2Fic29sdXRlUGFpbnRSZWN0LmludGVyc2VjdChlbmNsb3NpbmdJbnRSZWN0
KG1fbWF4RWZmZWN0UmVjdCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9hYnNvbHV0ZVBhaW50UmVj
dC51bml0ZShlbmNsb3NpbmdJbnRSZWN0KG1fbWF4RWZmZWN0UmVjdCkpOwotfQotCi1GbG9hdFBv
aW50IEZpbHRlckVmZmVjdDo6bWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoRmxvYXRQb2lu
dCB1c2VyU3BhY2VQb2ludCkgY29uc3QKLXsKLSAgICBGbG9hdFBvaW50IGFic29sdXRlUG9pbnQg
PSBtYXBQb2ludCh1c2VyU3BhY2VQb2ludCwgbV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24sIG1f
YWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24pOwotICAgIGFic29sdXRlUG9pbnQubW92ZUJ5KC1t
X2Fic29sdXRlUGFpbnRSZWN0LmxvY2F0aW9uKCkpOwotICAgIHJldHVybiBhYnNvbHV0ZVBvaW50
OworICAgIEZsb2F0UmVjdCBpbWFnZVJlY3Q7CisgICAgZm9yIChhdXRvJiBpbnB1dCA6IGlucHV0
cykKKyAgICAgICAgaW1hZ2VSZWN0LnVuaXRlKGlucHV0LT5pbWFnZVJlY3QoKSk7CisgICAgcmV0
dXJuIGZpbHRlci5jbGlwVG9NYXhFZmZlY3RSZWN0KGltYWdlUmVjdCwgcHJpbWl0aXZlU3VicmVn
aW9uKTsKIH0KIAogRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlciYgZmlsdGVyKQpAQCAtODksOCArNzMsNiBAQCBGbG9h
dFJlY3QgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oY29u
c3QgRmlsdGVyJiBmaWx0ZXIpCiAKICAgICBhdXRvIGFic29sdXRlU3VicmVnaW9uID0gc3VicmVn
aW9uOwogICAgIGFic29sdXRlU3VicmVnaW9uLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsK
LSAgICAvLyBTYXZlIHRoaXMgYmVmb3JlIGNsaXBwaW5nIHNvIHdlIGNhbiB1c2UgaXQgdG8gbWFw
IGxpZ2h0aW5nIHBvaW50cyBmcm9tIHVzZXIgc3BhY2UgdG8gYnVmZmVyIGNvb3JkaW5hdGVzLgot
ICAgIHNldFVuY2xpcHBlZEFic29sdXRlU3VicmVnaW9uKGFic29sdXRlU3VicmVnaW9uKTsKIAog
ICAgIC8vIENsaXAgZXZlcnkgZmlsdGVyIGVmZmVjdCB0byB0aGUgZmlsdGVyIHJlZ2lvbi4KICAg
ICBhdXRvIGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uID0gZmlsdGVyLmZpbHRlclJlZ2lvbigp
OwpAQCAtMTIxLDI2ICsxMDMsMjIgQEAgYm9vbCBGaWx0ZXJFZmZlY3Q6OmFwcGx5KGNvbnN0IEZp
bHRlciYgZmlsdGVyKQogICAgICAgICB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKGluLCBpKTsK
ICAgICB9CiAKLSAgICBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChmaWx0ZXIpOwotCi0gICAg
TE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbQotICAgICAgICA8PCAiRmlsdGVyRWZmZWN0
ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHkoKToiCi0gICAgICAg
IDw8ICJcbiAgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uICIgPDwgbV9maWx0ZXJQcmltaXRpdmVT
dWJyZWdpb24KLSAgICAgICAgPDwgIlxuICBlZmZlY3RCb3VuZGFyaWVzICIgPDwgbV9lZmZlY3RC
b3VuZGFyaWVzCi0gICAgICAgIDw8ICJcbiAgYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24gIiA8
PCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uCi0gICAgICAgIDw8ICJcbiAgYWJzb2x1dGVQ
YWludFJlY3QgIiA8PCBtX2Fic29sdXRlUGFpbnRSZWN0Ci0gICAgICAgIDw8ICJcbiAgbWF4RWZm
ZWN0UmVjdCAiIDw8IG1fbWF4RWZmZWN0UmVjdAotICAgICAgICA8PCAiXG4gIGZpbHRlciBzY2Fs
ZSAiIDw8IGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLQotICAgIGlmIChtX2Fic29sdXRlUGFpbnRS
ZWN0LmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcobV9hYnNvbHV0
ZVBhaW50UmVjdC5zaXplKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBpZiAoIW1h
eVByb2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygpKSB7CiAgICAgICAgIGZvciAoYXV0
byYgaW4gOiBtX2lucHV0RWZmZWN0cykKICAgICAgICAgICAgIGluLT5jb3JyZWN0UHJlbXVsdGlw
bGllZFJlc3VsdElmTmVlZGVkKCk7CiAgICAgfQogCi0gICAgbV9maWx0ZXJJbWFnZSA9IEZpbHRl
ckltYWdlOjpjcmVhdGUobV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24sIG1fYWJzb2x1dGVQYWlu
dFJlY3QsIHJlc3VsdElzQWxwaGFJbWFnZSgpLCBmaWx0ZXIucmVuZGVyaW5nTW9kZSgpLCByZXN1
bHRDb2xvclNwYWNlKCkpOworICAgIGF1dG8gaW5wdXRGaWx0ZXJJbWFnZXMgPSB0aGlzLT5pbnB1
dEZpbHRlckltYWdlcygpOworICAgIGF1dG8gaW1hZ2VSZWN0ID0gY2FsY3VsYXRlSW1hZ2VSZWN0
KGZpbHRlciwgaW5wdXRGaWx0ZXJJbWFnZXMsIG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKTsK
KyAgICBhdXRvIGFic29sdXRlSW1hZ2VSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmaWx0ZXIuc2Nh
bGVkQnlGaWx0ZXJTY2FsZShpbWFnZVJlY3QpKTsKKworICAgIGlmIChhYnNvbHV0ZUltYWdlUmVj
dC5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGFic29sdXRlSW1h
Z2VSZWN0LnNpemUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBhdXRvIGlz
QWxwaGFJbWFnZSA9IHJlc3VsdElzQWxwaGFJbWFnZShpbnB1dEZpbHRlckltYWdlcyk7CisgICAg
YXV0byBpbWFnZUNvbG9yU3BhY2UgPSByZXN1bHRDb2xvclNwYWNlKCk7CisKKyAgICBtX2ZpbHRl
ckltYWdlID0gRmlsdGVySW1hZ2U6OmNyZWF0ZShtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiwg
aW1hZ2VSZWN0LCBhYnNvbHV0ZUltYWdlUmVjdCwgaXNBbHBoYUltYWdlLCBmaWx0ZXIucmVuZGVy
aW5nTW9kZSgpLCBpbWFnZUNvbG9yU3BhY2UpOwogICAgIGlmICghbV9maWx0ZXJJbWFnZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xNDgsNyArMTI2LDE1IEBAIGJvb2wgRmlsdGVyRWZm
ZWN0OjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBpZiAoIWFwcGxpZXIpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBhcHBsaWVyLT5hcHBseShmaWx0ZXIsIGlu
cHV0RmlsdGVySW1hZ2VzKCksICptX2ZpbHRlckltYWdlKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0o
RmlsdGVycywgc3RyZWFtCisgICAgICAgIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1l
KCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBhcHBseSgpOiIKKyAgICAgICAgPDwgIlxuICBmaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24gIiA8PCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbgorICAgICAg
ICA8PCAiXG4gIGVmZmVjdEJvdW5kYXJpZXMgIiA8PCBtX2VmZmVjdEJvdW5kYXJpZXMKKyAgICAg
ICAgPDwgIlxuICBhYnNvbHV0ZVBhaW50UmVjdCAiIDw8IGFic29sdXRlSW1hZ2VSZWN0CisgICAg
ICAgIDw8ICJcbiAgbWF4RWZmZWN0UmVjdCAiIDw8IG1fbWF4RWZmZWN0UmVjdAorICAgICAgICA8
PCAiXG4gIGZpbHRlciBzY2FsZSAiIDw8IGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKKworICAgIHJl
dHVybiBhcHBsaWVyLT5hcHBseShmaWx0ZXIsIGlucHV0RmlsdGVySW1hZ2VzLCAqbV9maWx0ZXJJ
bWFnZSk7CiB9CiAKIHZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdCgpCkBAIC0xOTYsNyAr
MTgyLDYgQEAgVGV4dFN0cmVhbSYgRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblQKICAgICAKICAgICBpZiAocmVwcmVzZW50
YXRpb25UeXBlID09IFJlcHJlc2VudGF0aW9uVHlwZTo6RGVidWdnaW5nKSB7CiAgICAgICAgIFRl
eHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKLSAgICAgICAgdHMuZHVtcFBy
b3BlcnR5KCJhbHBoYSBpbWFnZSIsIHJlc3VsdElzQWxwaGFJbWFnZSgpKTsKICAgICAgICAgdHMu
ZHVtcFByb3BlcnR5KCJvcGVyYXRpbmcgY29sb3JzcGFjZSIsIG9wZXJhdGluZ0NvbG9yU3BhY2Uo
KSk7CiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVzdWx0IGNvbG9yc3BhY2UiLCByZXN1bHRD
b2xvclNwYWNlKCkpOwogICAgICAgICB0cyA8PCAiXG4iIDw8IGluZGVudDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5o
CmluZGV4IGUyYmQxZTgzZTljMDFhMmFhN2VhNGJlMjIxYjY2MTJkOGM4MGQ2MzkuLmU4M2E0NDll
NWI1MWYxNDIyZmYxYWZkYWRjMTEwZWY2Zjk5MDZkOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAtNTgs
OSArNTgsNiBAQCBwdWJsaWM6CiAgICAgLy8gUmVjdXJzZXMgb24gaW5wdXRzLgogICAgIEZsb2F0
UmVjdCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oY29uc3QgRmlsdGVyJik7CiAK
LSAgICBJbnRSZWN0IGFic29sdXRlUGFpbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0
ZVBhaW50UmVjdDsgfQotICAgIHZvaWQgc2V0QWJzb2x1dGVQYWludFJlY3QoY29uc3QgSW50UmVj
dCYgYWJzb2x1dGVQYWludFJlY3QpIHsgbV9hYnNvbHV0ZVBhaW50UmVjdCA9IGFic29sdXRlUGFp
bnRSZWN0OyB9Ci0KICAgICBGbG9hdFJlY3QgbWF4RWZmZWN0UmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fbWF4RWZmZWN0UmVjdDsgfQogICAgIHZvaWQgc2V0TWF4RWZmZWN0UmVjdChjb25zdCBGbG9h
dFJlY3QmIG1heEVmZmVjdFJlY3QpIHsgbV9tYXhFZmZlY3RSZWN0ID0gbWF4RWZmZWN0UmVjdDsg
fQogCkBAIC03MSw4ICs2OCw2IEBAIHB1YmxpYzoKICAgICAvLyBPbmx5IHRoZSBhcml0aG1ldGlj
IGNvbXBvc2l0ZSBmaWx0ZXIgZXZlciBuZWVkcyB0byBwZXJmb3JtIGNvcnJlY3Rpb24uCiAgICAg
dmlydHVhbCB2b2lkIGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpIHsgfQogCi0gICAgdmly
dHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpOwotCiAg
ICAgZW51bSBjbGFzcyBSZXByZXNlbnRhdGlvblR5cGUgeyBUZXN0T3V0cHV0LCBEZWJ1Z2dpbmcg
fTsKICAgICB2aXJ0dWFsIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihX
VEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUgPSBSZXByZXNlbnRhdGlvblR5cGU6
OlRlc3RPdXRwdXQpIGNvbnN0OwogCkBAIC05NiwxOCArOTEsMTMgQEAgcHVibGljOgogICAgIEZs
b2F0UmVjdCBlZmZlY3RCb3VuZGFyaWVzKCkgY29uc3QgeyByZXR1cm4gbV9lZmZlY3RCb3VuZGFy
aWVzOyB9CiAgICAgdm9pZCBzZXRFZmZlY3RCb3VuZGFyaWVzKGNvbnN0IEZsb2F0UmVjdCYgZWZm
ZWN0Qm91bmRhcmllcykgeyBtX2VmZmVjdEJvdW5kYXJpZXMgPSBlZmZlY3RCb3VuZGFyaWVzOyB9
CiAgICAgCi0gICAgdm9pZCBzZXRVbmNsaXBwZWRBYnNvbHV0ZVN1YnJlZ2lvbihjb25zdCBGbG9h
dFJlY3QmIHIpIHsgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbiA9IHI7IH0KLSAgICAKLSAg
ICBGbG9hdFBvaW50IG1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKEZsb2F0UG9pbnQpIGNv
bnN0OwotICAgIAotICAgIGJvb2wgY2xpcHNUb0JvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fY2xp
cHNUb0JvdW5kczsgfQotICAgIHZvaWQgc2V0Q2xpcHNUb0JvdW5kcyhib29sIHZhbHVlKSB7IG1f
Y2xpcHNUb0JvdW5kcyA9IHZhbHVlOyB9CisgICAgdmlydHVhbCBGbG9hdFJlY3QgY2FsY3VsYXRl
SW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMs
IGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdDsKIAogICAgIGNvbnN0
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3BlcmF0aW5nQ29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fb3BlcmF0aW5nQ29sb3JTcGFjZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRPcGVyYXRp
bmdDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkgeyBt
X29wZXJhdGluZ0NvbG9yU3BhY2UgPSBjb2xvclNwYWNlOyB9CiAKICAgICAvLyBTb2xpZCBibGFj
ayBpbWFnZSB3aXRoIGRpZmZlcmVudCBhbHBoYSB2YWx1ZXMuCi0gICAgdmlydHVhbCBib29sIHJl
c3VsdElzQWxwaGFJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBi
b29sIHJlc3VsdElzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
IHJlc3VsdENvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdGluZ0NvbG9yU3BhY2U7
IH0KIAogICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVm
ZmVjdCogaW4sIGNvbnN0IGludCkgeyBpbi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShtX29w
ZXJhdGluZ0NvbG9yU3BhY2UpOyB9CkBAIC0xMjAsMTUgKzExMCwxMSBAQCBwcm90ZWN0ZWQ6CiAg
ICAgCiAgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4gY3Jl
YXRlQXBwbGllcihjb25zdCBGaWx0ZXImKSBjb25zdCA9IDA7CiAKLSAgICB2b2lkIGNsaXBBYnNv
bHV0ZVBhaW50UmVjdCgpOwotCiBwcml2YXRlOgogICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2lu
cHV0RWZmZWN0czsKIAogICAgIFJlZlB0cjxGaWx0ZXJJbWFnZT4gbV9maWx0ZXJJbWFnZTsKIAot
ICAgIEludFJlY3QgbV9hYnNvbHV0ZVBhaW50UmVjdDsKLSAgICAKICAgICAvLyBUaGUgbWF4aW11
bSBzaXplIG9mIGEgZmlsdGVyIHByaW1pdGl2ZS4gSW4gU1ZHIHRoaXMgaXMgdGhlIHByaW1pdGl2
ZSBzdWJyZWdpb24gaW4gYWJzb2x1dGUgY29vcmRpbmF0ZSBzcGFjZS4KICAgICAvLyBUaGUgYWJz
b2x1dGUgcGFpbnQgcmVjdCBzaG91bGQgbmV2ZXIgYmUgYmlnZ2VyIHRoYW4gbV9tYXhFZmZlY3RS
ZWN0LgogICAgIEZsb2F0UmVjdCBtX21heEVmZmVjdFJlY3Q7CkBAIC0xNDEsMTcgKzEyNywxMSBA
QCBwcml2YXRlOgogICAgIC8vIGZpbHRlciBwcmltaXRpdmUgb24gYSBsYXRlciBzdGVwLgogICAg
IEZsb2F0UmVjdCBtX2VmZmVjdEJvdW5kYXJpZXM7CiAgICAgCi0gICAgLy8gZmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uIG1hcHBlZCB0byBhYnNvbHV0ZSBjb29yZGluYXRlcyBiZWZvcmUgY2xpcHBp
bmcuCi0gICAgRmxvYXRSZWN0IG1fYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb247Ci0KICAgICBi
b29sIG1faGFzWCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2hhc1kgeyBmYWxzZSB9OwogICAgIGJv
b2wgbV9oYXNXaWR0aCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2hhc0hlaWdodCB7IGZhbHNlIH07
CiAKLSAgICAvLyBTaG91bGQgdGhlIGVmZmVjdCBjbGlwIHRvIGl0cyBwcmltaXRpdmUgcmVnaW9u
LCBvciBleHBhbmQgdG8gdXNlIHRoZSBjb21iaW5lZCByZWdpb24gb2YgaXRzIGlucHV0cy4KLSAg
ICBib29sIG1fY2xpcHNUb0JvdW5kcyB7IHRydWUgfTsKLQogICAgIERlc3RpbmF0aW9uQ29sb3JT
cGFjZSBtX29wZXJhdGluZ0NvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Io
KSB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckltYWdlLmNwcAppbmRleCAzYTRmZTkwNTNkNmQ3MDU5MDYwMWE3OGM1
MDJmN2JkZDExNDVmYTlhLi45NTg0ZmE2OWVlMGVkMmVkZTY1YWZmOWI5Zjk5MzViZDk1ZmI0ODMy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckltYWdlLmNwcApAQCAtMzgsMTQgKzM4LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotUmVmUHRyPEZpbHRlckltYWdlPiBGaWx0ZXJJbWFnZTo6Y3JlYXRlKGNvbnN0IEZs
b2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBJbnRSZWN0JiBhYnNvbHV0ZUltYWdl
UmVjdCwgYm9vbCBpc0FscGhhSW1hZ2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29u
c3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKQorUmVmUHRyPEZpbHRlckltYWdl
PiBGaWx0ZXJJbWFnZTo6Y3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9u
LCBjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFn
ZVJlY3QsIGJvb2wgaXNBbHBoYUltYWdlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKIHsKICAgICBBU1NFUlQoIUlt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhhYnNvbHV0ZUltYWdlUmVjdC5zaXplKCkpKTsK
LSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbHRlckltYWdlKHByaW1pdGl2ZVN1YnJlZ2lvbiwg
YWJzb2x1dGVJbWFnZVJlY3QsIGlzQWxwaGFJbWFnZSwgcmVuZGVyaW5nTW9kZSwgY29sb3JTcGFj
ZSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmlsdGVySW1hZ2UocHJpbWl0aXZlU3VicmVn
aW9uLCBpbWFnZVJlY3QsIGFic29sdXRlSW1hZ2VSZWN0LCBpc0FscGhhSW1hZ2UsIHJlbmRlcmlu
Z01vZGUsIGNvbG9yU3BhY2UpKTsKIH0KIAotRmlsdGVySW1hZ2U6OkZpbHRlckltYWdlKGNvbnN0
IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBJbnRSZWN0JiBhYnNvbHV0ZUlt
YWdlUmVjdCwgYm9vbCBpc0FscGhhSW1hZ2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwg
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlKQorRmlsdGVySW1hZ2U6OkZp
bHRlckltYWdlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9h
dFJlY3QmIGltYWdlUmVjdCwgY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFnZVJlY3QsIGJvb2wg
aXNBbHBoYUltYWdlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKICAgICA6IG1fcHJpbWl0aXZlU3VicmVnaW9uKHBy
aW1pdGl2ZVN1YnJlZ2lvbikKKyAgICAsIG1faW1hZ2VSZWN0KGltYWdlUmVjdCkKICAgICAsIG1f
YWJzb2x1dGVJbWFnZVJlY3QoYWJzb2x1dGVJbWFnZVJlY3QpCiAgICAgLCBtX2lzQWxwaGFJbWFn
ZShpc0FscGhhSW1hZ2UpCiAgICAgLCBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSkKQEAg
LTU1LDcgKzU2LDcgQEAgRmlsdGVySW1hZ2U6OkZpbHRlckltYWdlKGNvbnN0IEZsb2F0UmVjdCYg
cHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBJbnRSZWN0JiBhYnMKIAogRmxvYXRSZWN0IEZpbHRl
ckltYWdlOjptYXhFZmZlY3RSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKSBjb25zdAogewotICAg
IHJldHVybiBpbnRlcnNlY3Rpb24obV9wcmltaXRpdmVTdWJyZWdpb24sIGZpbHRlci5maWx0ZXJS
ZWdpb24oKSk7CisgICAgcmV0dXJuIGZpbHRlci5tYXhFZmZlY3RSZWN0KG1fcHJpbWl0aXZlU3Vi
cmVnaW9uKTsKIH0KIAogSW50UmVjdCBGaWx0ZXJJbWFnZTo6YWJzb2x1dGVJbWFnZVJlY3RSZWxh
dGl2ZVRvKGNvbnN0IEZpbHRlckltYWdlJiBvcmlnaW4pIGNvbnN0CkBAIC02Myw2ICs2NCwxMSBA
QCBJbnRSZWN0IEZpbHRlckltYWdlOjphYnNvbHV0ZUltYWdlUmVjdFJlbGF0aXZlVG8oY29uc3Qg
RmlsdGVySW1hZ2UmIG9yaWdpbikgY29ucwogICAgIHJldHVybiBtX2Fic29sdXRlSW1hZ2VSZWN0
IC0gb3JpZ2luLmFic29sdXRlSW1hZ2VSZWN0KCkubG9jYXRpb24oKTsKIH0KIAorRmxvYXRQb2lu
dCBGaWx0ZXJJbWFnZTo6bWFwcGVkQWJzb2x1dGVQb2ludChjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCkgY29uc3QKK3sKKyAgICByZXR1cm4gRmxvYXRQb2ludChwb2ludCAtIG1fYWJzb2x1dGVJbWFn
ZVJlY3QubG9jYXRpb24oKSk7Cit9CisKIEltYWdlQnVmZmVyKiBGaWx0ZXJJbWFnZTo6aW1hZ2VC
dWZmZXIoKQogewogI2lmIFVTRShDT1JFX0lNQUdFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oCmluZGV4IGNhYTk1ZWMy
NDU5NTAxNTk1ZTg1YmEyMTZhNmY0OGVkNzg1NGM0MTAuLjVjY2RkNDRiMDU5MTQ4ZjM5MTYwOTc0
MTk3OWM1NDAxYjlkYjhmMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmgKQEAgLTQ0LDEzICs0NCwxNyBAQCBjbGFz
cyBJbWFnZUJ1ZmZlcjsKIAogY2xhc3MgRmlsdGVySW1hZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxG
aWx0ZXJJbWFnZT4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8RmlsdGVySW1hZ2U+IGNy
ZWF0ZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgSW50UmVjdCYg
YWJzb2x1dGVJbWFnZVJlY3QsIGJvb2wgaXNBbHBoYUltYWdlLCBSZW5kZXJpbmdNb2RlLCBjb25z
dCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKKyAgICBzdGF0aWMgUmVmUHRyPEZpbHRlckltYWdl
PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0
UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBJbnRSZWN0JiBhYnNvbHV0ZUltYWdlUmVjdCwgYm9vbCBp
c0FscGhhSW1hZ2UsIFJlbmRlcmluZ01vZGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYp
OwogCisgICAgLy8gVGhlIHJldHVybiB2YWx1ZXMgYXJlIGluIGZpbHRlciBjb29yZGluYXRlcy4K
ICAgICBGbG9hdFJlY3QgcHJpbWl0aXZlU3VicmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9wcmlt
aXRpdmVTdWJyZWdpb247IH0KICAgICBGbG9hdFJlY3QgbWF4RWZmZWN0UmVjdChjb25zdCBGaWx0
ZXImKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9p
bWFnZVJlY3Q7IH0KIAorICAgIC8vIFRoZSByZXR1cm4gdmFsdWVzIGFyZSBpbiB1c2VyLXNwYWNl
IGNvb3JkaW5hdGVzLgogICAgIEludFJlY3QgYWJzb2x1dGVJbWFnZVJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX2Fic29sdXRlSW1hZ2VSZWN0OyB9CiAgICAgSW50UmVjdCBhYnNvbHV0ZUltYWdlUmVj
dFJlbGF0aXZlVG8oY29uc3QgRmlsdGVySW1hZ2UmIG9yaWdpbikgY29uc3Q7CisgICAgRmxvYXRQ
b2ludCBtYXBwZWRBYnNvbHV0ZVBvaW50KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKIAogICAg
IGJvb2wgaXNBbHBoYUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pc0FscGhhSW1hZ2U7IH0KICAg
ICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmlu
Z01vZGU7IH0KQEAgLTcxLDcgKzc1LDcgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0g
ICAgRmlsdGVySW1hZ2UoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0
IEludFJlY3QmIGFic29sdXRlSW1hZ2VSZWN0LCBib29sIGlzQWxwaGFJbWFnZSwgUmVuZGVyaW5n
TW9kZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7CisgICAgRmlsdGVySW1hZ2UoY29u
c3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VS
ZWN0LCBjb25zdCBJbnRSZWN0JiBhYnNvbHV0ZUltYWdlUmVjdCwgYm9vbCBpc0FscGhhSW1hZ2Us
IFJlbmRlcmluZ01vZGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOwogCiAgICAgc3Rk
OjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIHBpeGVsQnVmZmVyU2xvdChBbHBoYVByZW11bHRpcGxp
Y2F0aW9uKTsKIApAQCAtODQsNiArODgsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgcmVxdWlyZXNQ
aXhlbEJ1ZmZlckNvbG9yU3BhY2VDb252ZXJzaW9uKHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25D
b2xvclNwYWNlPikgY29uc3Q7CiAKICAgICBGbG9hdFJlY3QgbV9wcmltaXRpdmVTdWJyZWdpb247
CisgICAgRmxvYXRSZWN0IG1faW1hZ2VSZWN0OwogICAgIEludFJlY3QgbV9hYnNvbHV0ZUltYWdl
UmVjdDsKIAogICAgIGJvb2wgbV9pc0FscGhhSW1hZ2UgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oCmlu
ZGV4IDhkYjhlNTY1OTdiYWJlYzg2ODYxNjgzZmY4ZTA1ODI4OGM3MTI2ZjguLjVlZDI3YWIyZWUw
ZjczNzc3ZjdiZWJhOGRlN2U3YmM4Mjk3ZDc3ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgKQEAgLTQsNiArNCw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
ICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICog
Q29weXJpZ2h0IChDKSAyMDEwIFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM4LDcgKzM5LDggQEAgZW51bSBMaWdodFR5cGUgewogICAg
IExTX1NQT1QKIH07CiAKLWNsYXNzIEZpbHRlckVmZmVjdDsKK2NsYXNzIEZpbHRlcjsKK2NsYXNz
IEZpbHRlckltYWdlOwogCiBjbGFzcyBMaWdodFNvdXJjZSA6IHB1YmxpYyBSZWZDb3VudGVkPExp
Z2h0U291cmNlPiB7CiBwdWJsaWM6CkBAIC02NSw3ICs2Nyw3IEBAIHB1YmxpYzoKICAgICBMaWdo
dFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIHZpcnR1YWwgV1RGOjpU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0
ID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVm
ZmVjdCYsIFBhaW50aW5nRGF0YSYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdFBh
aW50aW5nRGF0YShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJJbWFnZSYgcmVzdWx0LCBQYWlu
dGluZ0RhdGEmKSBjb25zdCA9IDA7CiAgICAgLy8geiBpcyBhIGZsb2F0IG51bWJlciwgc2luY2Ug
aXQgaXMgdGhlIGFscGhhIHZhbHVlIHNjYWxlZCBieSBhIHVzZXIKICAgICAvLyBzcGVjaWZpZWQg
InN1cmZhY2VTY2FsZSIgY29uc3RhbnQsIHdoaWNoIHR5cGUgaXMgPG51bWJlcj4gaW4gdGhlIFNW
RyBzdGFuZGFyZC4KICAgICAvLyB4IGFuZCB5IGFyZSBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhl
IEZpbHRlckVmZmVjdCdzIGJ1ZmZlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwCmluZGV4IGMy
ZDg3NDkzYjI4ZGUzODYxM2UzZTIwMjg0ZmZlMmZmNDI1ZmVlMmQuLjBlNmMyY2IxMWI4MzJhNDE2
ZDJkMjIzNWJhNTA0ZmEzMzc5MzE4MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcApAQCAt
NSw2ICs1LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVyY3plZyA8emhlcmN6
ZWdAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMSBVbml2ZXJzaXR5IG9mIFN6ZWdl
ZAogICogQ29weXJpZ2h0IChDKSAyMDExIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsMTcgKzMyLDIwIEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUG9pbnRMaWdodFNvdXJjZS5oIgogCi0jaW5jbHVk
ZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVy
SW1hZ2UuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdm9pZCBQb2ludExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0
IEZpbHRlckVmZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWludGluZ0RhdGEmKSBjb25zdAordm9pZCBQ
b2ludExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlciYgZmlsdGVyLCBj
b25zdCBGaWx0ZXJJbWFnZSYgcmVzdWx0LCBQYWludGluZ0RhdGEmKSBjb25zdAogewotICAgIG1f
YnVmZmVyUG9zaXRpb24uc2V0WFkoZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRv
QnVmZmVyKG1fdXNlclNwYWNlUG9zaXRpb24ueHkoKSkpOworICAgIGF1dG8gYWJzb2x1dGVQb3Np
dGlvbiA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKG1fdXNlclNwYWNlUG9zaXRpb24ueHko
KSk7CisgICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShyZXN1bHQubWFwcGVkQWJzb2x1dGVQb2lu
dChhYnNvbHV0ZVBvc2l0aW9uKSk7CisKICAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBwb2ludCBv
ZmZzZXQgZnJvbSBtX3VzZXJTcGFjZVBvc2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBieSB6Lgot
ICAgIEZsb2F0UG9pbnQgbWFwcGVkWiA9IGZpbHRlckVmZmVjdC5tYXBQb2ludEZyb21Vc2VyU3Bh
Y2VUb0J1ZmZlcih7IG1fdXNlclNwYWNlUG9zaXRpb24ueCgpICsgbV91c2VyU3BhY2VQb3NpdGlv
bi56KCksIG1fdXNlclNwYWNlUG9zaXRpb24ueSgpIH0pOwotICAgIG1fYnVmZmVyUG9zaXRpb24u
c2V0WihtYXBwZWRaLngoKSAtIG1fYnVmZmVyUG9zaXRpb24ueCgpKTsKKyAgICBhdXRvIGFic29s
dXRlTWFwcGVkWiA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKEZsb2F0UG9pbnQgeyBtX3Vz
ZXJTcGFjZVBvc2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRpb24ueigpLCBtX3VzZXJTcGFj
ZVBvc2l0aW9uLnkoKSB9KTsKKyAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoocmVzdWx0Lm1hcHBl
ZEFic29sdXRlUG9pbnQoYWJzb2x1dGVNYXBwZWRaKS54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngo
KSk7CiB9CiAKIExpZ2h0U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0YSBQb2ludExpZ2h0U291
cmNlOjpjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGlu
Z0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgeikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmgK
aW5kZXggNDJjM2RjNjE3ODg1MjJlYzc4N2NhZWUyYWMzNGE4ZTMyZjlkYmQ0ZS4uMjM1NTkxMzhi
ODg0YjNmZTcyMGI3ZGM4ZjAxNzdhYzVmOWNkMmU4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmgK
QEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAw
NSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM5
LDcgKzQwLDcgQEAgcHVibGljOgogICAgIGJvb2wgc2V0WShmbG9hdCkgb3ZlcnJpZGU7CiAgICAg
Ym9vbCBzZXRaKGZsb2F0KSBvdmVycmlkZTsKIAotICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0YShj
b25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVySW1hZ2UmIHJl
c3VsdCwgUGFpbnRpbmdEYXRhJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgQ29tcHV0ZWRMaWdodGlu
Z0RhdGEgY29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKGNvbnN0IFBhaW50aW5nRGF0YSYsIGludCB4
LCBpbnQgeSwgZmxvYXQgeikgY29uc3QgZmluYWw7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4
dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUFscGhhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291
cmNlQWxwaGEuY3BwCmluZGV4IDg0ZjY3Y2Y2ODE0YTRhODE4ZjY0NjdjNDRmZDQwNTc1MWNjMTI4
MGMuLjYyMDUxNDYzYzcxZjUzZmQ4MzgxMmE3N2EyZjJiOGE0OGJlYTJiM2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxw
aGEuY3BwCkBAIC0zOSwxMCArMzksOSBAQCBTb3VyY2VBbHBoYTo6U291cmNlQWxwaGEoRmlsdGVy
RWZmZWN0JiBzb3VyY2VFZmZlY3QpCiAgICAgaW5wdXRFZmZlY3RzKCkuYXBwZW5kKCZzb3VyY2VF
ZmZlY3QpOwogfQogCi12b2lkIFNvdXJjZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dChjb25zdCBGaWx0ZXImIGZpbHRlcikKK0Zsb2F0UmVjdCBTb3VyY2VBbHBoYTo6Y2FsY3VsYXRl
SW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMs
IGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0CiB7Ci0gICAgaW5wdXRFZmZlY3QoMCktPmRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KGZpbHRlcik7Ci0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoaW5w
dXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIHJldHVybiBpbnB1dHNbMF0t
PmltYWdlUmVjdCgpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4g
U291cmNlQWxwaGE6OmNyZWF0ZUFwcGxpZXIoY29uc3QgRmlsdGVyJikgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEu
aAppbmRleCA5M2EyNDM5ZTI4MjI2NWFmMmZlMWIwZjU5NWU3ODlkMGQwODQyNjQzLi4xMDU2MTY3
ZTNjZjlhYTY0NjZjNTM3ODNkOTQzOTY1ZWEyYzBlMWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCkBAIC0zMyw3
ICszMyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgU291cmNlQWxwaGEoRmls
dGVyRWZmZWN0Jik7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0
IEZpbHRlciYpIG92ZXJyaWRlOworICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29u
c3QgRmlsdGVyJiwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmxvYXRS
ZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgc3RkOjp1bmlx
dWVfcHRyPEZpbHRlckVmZmVjdEFwcGxpZXI+IGNyZWF0ZUFwcGxpZXIoY29uc3QgRmlsdGVyJikg
Y29uc3Qgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCmluZGV4IGE4ZTcxNjY5OWU1Mzhl
ZDc5YjllYTRhZjZhM2ZmYWFhY2JlMGMyYjQuLjg4NmI3NzJhYWRiMDI2YWQyMWQ5YWI1ZTM3YzU4
ZjdmODk0YmJlZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcApAQCAtNDEsMTAgKzQxLDkgQEAgU291
cmNlR3JhcGhpYzo6U291cmNlR3JhcGhpYygpCiB7CiB9CiAKLXZvaWQgU291cmNlR3JhcGhpYzo6
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCitGbG9hdFJl
Y3QgU291cmNlR3JhcGhpYzo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVy
LCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYsIGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0CiB7Ci0g
ICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGZpbHRlci5zb3VyY2VJbWFnZVJlY3QoKTsKLSAgICBz
ZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOworICAgIHJl
dHVybiBmaWx0ZXIuc291cmNlSW1hZ2VSZWN0KCk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxGaWx0
ZXJFZmZlY3RBcHBsaWVyPiBTb3VyY2VHcmFwaGljOjpjcmVhdGVBcHBsaWVyKGNvbnN0IEZpbHRl
ciYgZmlsdGVyKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAppbmRleCAwMzc0OGExNzYwNGZkMWVlYTA4
ZThjMDE5MGE2YmY1YmUyN2ZlMjllLi5hNzM4YTdkMDI2ZDg4ZmRkNDgxZmZhOTA3MzBhYmZlMjVh
NWM2NjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1NvdXJjZUdyYXBoaWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaApAQCAtMzgsNyArMzgsNyBAQCBwcml2YXRlOgogICAg
IGJvb2wgc3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CiAjZW5kaWYKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
Y29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVj
dChjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBG
bG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4gY3JlYXRlQXBwbGllcihjb25zdCBGaWx0
ZXImKSBjb25zdCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCmluZGV4IGU3Yzdj
MDRlZGVlZDg3MmU3OWEyMjNiZGFkODZhOTFlZDMzZjAyMmEuLjIyNGU2MzJmODY4ODhhMmUzNDM0
OGU5N2ExOTk5YTgzNjVhYzlmOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKQEAgLTYsNiAr
Niw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdl
YmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAq
IENvcHlyaWdodCAoQykgMjAxMSBSZW5hdGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMzLDggQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJTcG90TGlnaHRTb3VyY2UuaCIKIAotI2luY2x1ZGUgIkZpbHRl
ckVmZmVjdC5oIgorI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgi
CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC00MSwxMiArNDMsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gYWNjb3JkaW5nIHRv
IHRoZSBTVkcgMS4xIFNFIGxpZ2h0IHJlZ3Jlc3Npb24gdGVzdHMKIHN0YXRpYyBjb25zdCBmbG9h
dCBhbnRpQWxpYXNUcmVzaG9sZCA9IDAuMDE2ZjsKIAotdm9pZCBTcG90TGlnaHRTb3VyY2U6Omlu
aXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiBmaWx0ZXJFZmZlY3QsIFBhaW50aW5n
RGF0YSYgcGFpbnRpbmdEYXRhKSBjb25zdAordm9pZCBTcG90TGlnaHRTb3VyY2U6OmluaXRQYWlu
dGluZ0RhdGEoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYWdlJiByZXN1bHQs
IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKSBjb25zdAogewotICAgIG1fYnVmZmVyUG9zaXRp
b24uc2V0WFkoZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKG1fdXNl
clNwYWNlUG9zaXRpb24ueHkoKSkpOworICAgIGF1dG8gYWJzb2x1dGVQb3NpdGlvbiA9IGZpbHRl
ci5zY2FsZWRCeUZpbHRlclNjYWxlKG1fdXNlclNwYWNlUG9zaXRpb24ueHkoKSk7CisgICAgbV9i
dWZmZXJQb3NpdGlvbi5zZXRYWShyZXN1bHQubWFwcGVkQWJzb2x1dGVQb2ludChhYnNvbHV0ZVBv
c2l0aW9uKSk7CisKICAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBt
X3VzZXJTcGFjZVBvc2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBieSB6LgotICAgIEZsb2F0UG9p
bnQgbWFwcGVkWiA9IGZpbHRlckVmZmVjdC5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcih7
IG1fdXNlclNwYWNlUG9zaXRpb24ueCgpICsgbV91c2VyU3BhY2VQb3NpdGlvbi56KCksIG1fdXNl
clNwYWNlUG9zaXRpb24ueSgpIH0pOwotICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0WihtYXBwZWRa
LngoKSAtIG1fYnVmZmVyUG9zaXRpb24ueCgpKTsKKyAgICBhdXRvIGFic29sdXRlTWFwcGVkWiA9
IGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKEZsb2F0UG9pbnQgeyBtX3VzZXJTcGFjZVBvc2l0
aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRpb24ueigpLCBtX3VzZXJTcGFjZVBvc2l0aW9uLnko
KSB9KTsKKyAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoocmVzdWx0Lm1hcHBlZEFic29sdXRlUG9p
bnQoYWJzb2x1dGVNYXBwZWRaKS54KCkgLSBtX2J1ZmZlclBvc2l0aW9uLngoKSk7CiAgICAgCiAg
ICAgcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3RvciA9IG1fdXNlclNwYWNlUG9pbnRzQXQgLSBt
X3VzZXJTcGFjZVBvc2l0aW9uOwogICAgIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0b3Iubm9y
bWFsaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaAppbmRleCAyZWRkOTMwOTlkOTcyODJiMDZkN2Mx
OWU3NzI3ZDc1ZDY0MmU5YzUyLi5lYmM2MzQ5N2JjMTkwN2RjZmYyN2IxODBhNjRjYTJkYjMwNjI2
ODRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1Nwb3RMaWdodFNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmgKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTUwLDcgKzUxLDcgQEAgcHVibGljOgogICAgIGJvb2wg
c2V0U3BlY3VsYXJFeHBvbmVudChmbG9hdCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBzZXRMaW1pdGlu
Z0NvbmVBbmdsZShmbG9hdCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGluaXRQYWludGluZ0RhdGEo
Y29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlJiBy
ZXN1bHQsIFBhaW50aW5nRGF0YSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIENvbXB1dGVkTGlnaHRp
bmdEYXRhIGNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShjb25zdCBQYWludGluZ0RhdGEmLCBpbnQg
eCwgaW50IHksIGZsb2F0IHopIGNvbnN0IGZpbmFsOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29m
dHdhcmVBcHBsaWVyLmNwcAppbmRleCBhZTAyNmUzZmJlNTQ4ZTkwZjM3MmQ0YzM5NjQxOTc4MmQy
M2M1YjljLi4xMjE2NGUzNzhjMjlhMjNmYjA5Yjc1NTlkNzhmZTFjNDJhZTA1MzU2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
RGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdh
cmVBcHBsaWVyLmNwcApAQCAtNzUsMTIgKzc1LDEzIEBAIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXBT
b2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJ
CiAgICAgQVNTRVJUKGlucHV0UGl4ZWxBcnJheS5sZW5ndGgoKSA9PSBkaXNwbGFjZW1lbnRQaXhl
bEFycmF5Lmxlbmd0aCgpKTsKIAogICAgIGF1dG8gcGFpbnRTaXplID0gcmVzdWx0LmFic29sdXRl
SW1hZ2VSZWN0KCkuc2l6ZSgpOwotICAgIGF1dG8gc2NhbGUgPSBmaWx0ZXIuc2NhbGVkQnlGaWx0
ZXJTY2FsZSh7IG1fZWZmZWN0LnNjYWxlKCksIG1fZWZmZWN0LnNjYWxlKCkgfSk7CisgICAgYXV0
byBzY2FsZSA9IGZpbHRlci5yZXNvbHZlZFNpemUoeyBtX2VmZmVjdC5zY2FsZSgpLCBtX2VmZmVj
dC5zY2FsZSgpIH0pOworICAgIGF1dG8gYWJzb2x1dGVTY2FsZSA9IGZpbHRlci5zY2FsZWRCeUZp
bHRlclNjYWxlKHNjYWxlKTsKIAotICAgIGZsb2F0IHNjYWxlRm9yQ29sb3JYID0gc2NhbGUud2lk
dGgoKSAvIDI1NS4wOwotICAgIGZsb2F0IHNjYWxlRm9yQ29sb3JZID0gc2NhbGUuaGVpZ2h0KCkg
LyAyNTUuMDsKLSAgICBmbG9hdCBzY2FsZWRPZmZzZXRYID0gMC41IC0gc2NhbGUud2lkdGgoKSAq
IDAuNTsKLSAgICBmbG9hdCBzY2FsZWRPZmZzZXRZID0gMC41IC0gc2NhbGUuaGVpZ2h0KCkgKiAw
LjU7CisgICAgZmxvYXQgc2NhbGVGb3JDb2xvclggPSBhYnNvbHV0ZVNjYWxlLndpZHRoKCkgLyAy
NTUuMDsKKyAgICBmbG9hdCBzY2FsZUZvckNvbG9yWSA9IGFic29sdXRlU2NhbGUuaGVpZ2h0KCkg
LyAyNTUuMDsKKyAgICBmbG9hdCBzY2FsZWRPZmZzZXRYID0gMC41IC0gYWJzb2x1dGVTY2FsZS53
aWR0aCgpICogMC41OworICAgIGZsb2F0IHNjYWxlZE9mZnNldFkgPSAwLjUgLSBhYnNvbHV0ZVNj
YWxlLmhlaWdodCgpICogMC41OwogICAgIAogICAgIGludCBkaXNwbGFjZW1lbnRDaGFubmVsWCA9
IHhDaGFubmVsSW5kZXgoKTsKICAgICBpbnQgZGlzcGxhY2VtZW50Q2hhbm5lbFkgPSB5Q2hhbm5l
bEluZGV4KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRHJvcFNoYWRvd1Nv
ZnR3YXJlQXBwbGllci5jcHAKaW5kZXggNDExZWI0OGQwYTM4YTAyMzg1ZmU4NGVmY2Q3YWQ1ODc1
NGQ5OWYxMi4uNDQ3Yzg5NWQxOTg0MDU3Mzg3MjkzYzk3ZDYwMThmNGY0YjA3MzYzNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVy
LmNwcApAQCAtMzgsMTIgKzM4LDE1IEBAIGJvb2wgRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVy
OjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWCiAgICAgaWYg
KCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmxvYXRTaXplIGJs
dXJSYWRpdXMgPSAyICogZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX2VmZmVjdC5zdGRE
ZXZpYXRpb25YKCksIG1fZWZmZWN0LnN0ZERldmlhdGlvblkoKSB9KTsKLSAgICBGbG9hdFNpemUg
b2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX2VmZmVjdC5keCgpLCBtX2Vm
ZmVjdC5keSgpIH0pOworICAgIGF1dG8gc3RkRGV2aWF0aW9uID0gZmlsdGVyLnJlc29sdmVkU2l6
ZSh7IG1fZWZmZWN0LnN0ZERldmlhdGlvblgoKSwgbV9lZmZlY3Quc3RkRGV2aWF0aW9uWSgpIH0p
OworICAgIGF1dG8gYmx1clJhZGl1cyA9IDIgKiBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZShz
dGREZXZpYXRpb24pOworICAgIAorICAgIGF1dG8gb2Zmc2V0ID0gZmlsdGVyLnJlc29sdmVkU2l6
ZSh7IG1fZWZmZWN0LmR4KCksIG1fZWZmZWN0LmR5KCkgfSk7CisgICAgYXV0byBhYnNvbHV0ZU9m
ZnNldCA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKG9mZnNldCk7CiAKICAgICBGbG9hdFJl
Y3QgaW5wdXRJbWFnZVJlY3QgPSBpbnB1dC5hYnNvbHV0ZUltYWdlUmVjdFJlbGF0aXZlVG8ocmVz
dWx0KTsKICAgICBGbG9hdFJlY3QgaW5wdXRJbWFnZVJlY3RXaXRoT2Zmc2V0KGlucHV0SW1hZ2VS
ZWN0KTsKLSAgICBpbnB1dEltYWdlUmVjdFdpdGhPZmZzZXQubW92ZShvZmZzZXQpOworICAgIGlu
cHV0SW1hZ2VSZWN0V2l0aE9mZnNldC5tb3ZlKGFic29sdXRlT2Zmc2V0KTsKIAogICAgIGF1dG8g
aW5wdXRJbWFnZSA9IGlucHV0LmltYWdlQnVmZmVyKCk7CiAgICAgaWYgKCFpbnB1dEltYWdlKQpA
QCAtNTQsNyArNTcsNyBAQCBib29sIEZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllcjo6YXBwbHko
Y29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYWdlVgogICAgIHJlc3VsdENvbnRl
eHQuZHJhd0ltYWdlQnVmZmVyKCppbnB1dEltYWdlLCBpbnB1dEltYWdlUmVjdFdpdGhPZmZzZXQp
OwogICAgIHJlc3VsdENvbnRleHQuc2V0QWxwaGEoMSk7CiAKLSAgICBTaGFkb3dCbHVyIGNvbnRl
eHRTaGFkb3coYmx1clJhZGl1cywgb2Zmc2V0LCBtX2VmZmVjdC5zaGFkb3dDb2xvcigpKTsKKyAg
ICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coYmx1clJhZGl1cywgYWJzb2x1dGVPZmZzZXQsIG1f
ZWZmZWN0LnNoYWRvd0NvbG9yKCkpOwogCiAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4
LCByZXN1bHQuY29sb3JTcGFjZSgpIH07CiAgICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50
KCksIHJlc3VsdEltYWdlLT50cnVuY2F0ZWRMb2dpY2FsU2l6ZSgpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGlu
Z1NvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwCmluZGV4IGNlMGFj
YjgxMTc3YWMzNzk3NGRlMzRkNGRhNzcxYmFlNTkzZGM0MzMuLjcwZjUzNDA1YTI1NjVlMTM5MjY3
NzJiMTM5YjE5ODMzY2EyOGE5YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9G
RUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmNwcApAQCAtMTg3LDcgKzE4Nyw3IEBAIHZvaWQgRkVM
aWdodGluZ1NvZnR3YXJlQXBwbGllcjo6c2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25z
dCBMaWdodGluZ0RhdGEmCiAgICAgZmxvYXQgbGlnaHRTdHJlbmd0aDsKICAgICBpZiAobm9ybWFs
MkRWZWN0b3IuaXNaZXJvKCkpIHsKICAgICAgICAgLy8gTm9ybWFsIHZlY3RvciBpcyAoMCwgMCwg
MSkuIFRoaXMgaXMgYSBxdWl0ZSBmcmVxdWVudCBjYXNlLgotICAgICAgICBpZiAoZGF0YS5lZmZl
Y3QtPmZpbHRlclR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5n
KQorICAgICAgICBpZiAoZGF0YS5maWx0ZXJUeXBlID09IEZpbHRlckVmZmVjdDo6VHlwZTo6RkVE
aWZmdXNlTGlnaHRpbmcpCiAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gZGF0YS5kaWZmdXNl
Q29uc3RhbnQgKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueigpIC8gbGlnaHRpbmdEYXRhLmxp
Z2h0VmVjdG9yTGVuZ3RoOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIEZsb2F0UG9pbnQz
RCBoYWxmd2F5VmVjdG9yID0gewpAQCAtMjA5LDcgKzIwOSw3IEBAIHZvaWQgRkVMaWdodGluZ1Nv
ZnR3YXJlQXBwbGllcjo6c2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGlu
Z0RhdGEmCiAgICAgICAgIH07CiAgICAgICAgIGZsb2F0IG5vcm1hbFZlY3Rvckxlbmd0aCA9IG5v
cm1hbFZlY3Rvci5sZW5ndGgoKTsKIAotICAgICAgICBpZiAoZGF0YS5lZmZlY3QtPmZpbHRlclR5
cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKQorICAgICAgICBp
ZiAoZGF0YS5maWx0ZXJUeXBlID09IEZpbHRlckVmZmVjdDo6VHlwZTo6RkVEaWZmdXNlTGlnaHRp
bmcpCiAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gZGF0YS5kaWZmdXNlQ29uc3RhbnQgKiAo
bm9ybWFsVmVjdG9yICogbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yKSAvIChub3JtYWxWZWN0b3JM
ZW5ndGggKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgpOwogICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBoYWxmd2F5VmVjdG9yID0gewpAQCAtMzI5LDcgKzMy
OSw3IEBAIHZvaWQgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShjb25z
dCBMaWdodGluZ0RhdGEmIGRhdGEpCiAgICAgYXV0byBbciwgZywgYiwgYV0gPSBkYXRhLmxpZ2h0
aW5nQ29sb3IudG9Db2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2UoKmRhdGEub3BlcmF0aW5nQ29s
b3JTcGFjZSk7CiAgICAgcGFpbnRpbmdEYXRhLmluaXRpYWxMaWdodGluZ0RhdGEuY29sb3JWZWN0
b3IgPSBGbG9hdFBvaW50M0QociwgZywgYik7CiAKLSAgICBkYXRhLmxpZ2h0U291cmNlLT5pbml0
UGFpbnRpbmdEYXRhKCpkYXRhLmVmZmVjdCwgcGFpbnRpbmdEYXRhKTsKKyAgICBkYXRhLmxpZ2h0
U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKCpkYXRhLmZpbHRlciwgKmRhdGEucmVzdWx0LCBwYWlu
dGluZ0RhdGEpOwogCiAgICAgLy8gVG9wIGxlZnQuCiAgICAgaW50IG9mZnNldCA9IDA7CkBAIC0z
NzcsNyArMzc3LDcgQEAgdm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRm
b3JtKGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSkKICAgICB9CiAKICAgICBpbnQgbGFzdFBpeGVs
ID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAqIGRhdGEuaGVpZ2h0OwotICAgIGlm
IChkYXRhLmVmZmVjdC0+ZmlsdGVyVHlwZSgpID09IEZpbHRlckVmZmVjdDo6VHlwZTo6RkVEaWZm
dXNlTGlnaHRpbmcpIHsKKyAgICBpZiAoZGF0YS5maWx0ZXJUeXBlID09IEZpbHRlckVmZmVjdDo6
VHlwZTo6RkVEaWZmdXNlTGlnaHRpbmcpIHsKICAgICAgICAgZm9yIChpbnQgaSA9IGNBbHBoYUNo
YW5uZWxPZmZzZXQ7IGkgPCBsYXN0UGl4ZWw7IGkgKz0gY1BpeGVsU2l6ZSkKICAgICAgICAgICAg
IGRhdGEucGl4ZWxzLT5zZXQoaSwgY09wYXF1ZUFscGhhKTsKICAgICB9IGVsc2UgewpAQCAtMzkx
LDcgKzM5MSw3IEBAIHZvaWQgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9y
bShjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEpCiAgICAgfQogfQogCi1ib29sIEZFTGlnaHRpbmdT
b2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVj
dG9yJiBpbnB1dHMsIEZpbHRlckltYWdlJiByZXN1bHQpIGNvbnN0Citib29sIEZFTGlnaHRpbmdT
b2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJ
bWFnZVZlY3RvciYgaW5wdXRzLCBGaWx0ZXJJbWFnZSYgcmVzdWx0KSBjb25zdAogewogICAgIGF1
dG8mIGlucHV0ID0gaW5wdXRzWzBdLmdldCgpOwogCkBAIC00MTcsNyArNDE3LDkgQEAgYm9vbCBG
RUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0
ZXJJbWFnZVZlY3RvciYgaW4KICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBMaWdodGluZ0Rh
dGEgZGF0YTsKLSAgICBkYXRhLmVmZmVjdCA9ICZtX2VmZmVjdDsKKyAgICBkYXRhLmZpbHRlciA9
ICZmaWx0ZXI7CisgICAgZGF0YS5yZXN1bHQgPSAmcmVzdWx0OworICAgIGRhdGEuZmlsdGVyVHlw
ZSA9IG1fZWZmZWN0LmZpbHRlclR5cGUoKTsKICAgICBkYXRhLmxpZ2h0aW5nQ29sb3IgPSBtX2Vm
ZmVjdC5saWdodGluZ0NvbG9yKCk7CiAgICAgZGF0YS5zdXJmYWNlU2NhbGUgPSBtX2VmZmVjdC5z
dXJmYWNlU2NhbGUoKSAvIDI1NS4wZjsKICAgICBkYXRhLmRpZmZ1c2VDb25zdGFudCA9IG1fZWZm
ZWN0LmRpZmZ1c2VDb25zdGFudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGln
aHRpbmdTb2Z0d2FyZUFwcGxpZXIuaAppbmRleCAwYjQ4YTkzM2Q4NjBjNGQ2M2I3MGMyMGJkYzZm
YTI0OTU1NDViN2UwLi5mNDQ5ZDNlNzlmMzhmYWM4ZTQyNDQ5ZmE4ZDQyY2I3NDg3YTBjODEwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3
YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIu
aApAQCAtOTMsNyArOTMsOSBAQCBwcml2YXRlOgogCiAgICAgc3RydWN0IExpZ2h0aW5nRGF0YSB7
CiAgICAgICAgIC8vIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIG9ubHkgcmVhZC1vbmx5IChTTVAg
c2FmZSkgZGF0YQotICAgICAgICBjb25zdCBGRUxpZ2h0aW5nKiBlZmZlY3Q7CisgICAgICAgIGNv
bnN0IEZpbHRlciogZmlsdGVyOworICAgICAgICBjb25zdCBGaWx0ZXJJbWFnZSogcmVzdWx0Owor
ICAgICAgICBGaWx0ZXJFZmZlY3Q6OlR5cGUgZmlsdGVyVHlwZTsKICAgICAgICAgQ29sb3IgbGln
aHRpbmdDb2xvcjsKICAgICAgICAgZmxvYXQgc3VyZmFjZVNjYWxlOwogICAgICAgICBmbG9hdCBk
aWZmdXNlQ29uc3RhbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9ycGhv
bG9neVNvZnR3YXJlQXBwbGllci5jcHAKaW5kZXggMDkxMWNjMDA0YzFjMzk4NGI4MGVhODE3N2U4
NjdhNjViYjhjNzIwNC4uMjljMTViMjgwOGIzMDg3ODEyODE2ZjQxM2Q1ZDRjZjBiZTlmYmYxZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0
d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVB
cHBsaWVyLmNwcApAQCAtMTQ5LDIzICsxNDksMjQgQEAgYm9vbCBGRU1vcnBob2xvZ3lTb2Z0d2Fy
ZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWFnZVYK
ICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGF1dG8gaXNEZWdlbmVyYXRlID0gW10oaW50IHJhZGl1c1gsIGludCByYWRpdXNZKSAt
PiBib29sIHsKLSAgICAgICAgcmV0dXJuIHJhZGl1c1ggPCAwIHx8IHJhZGl1c1kgPCAwIHx8ICgh
cmFkaXVzWCAmJiAhcmFkaXVzWSk7CisgICAgYXV0byBpc0RlZ2VuZXJhdGUgPSBbXShjb25zdCBJ
bnRTaXplJiBhYnNvbHV0ZVJhZGl1cykgLT4gYm9vbCB7CisgICAgICAgIHJldHVybiBhYnNvbHV0
ZVJhZGl1cy53aWR0aCgpIDwgMCB8fCBhYnNvbHV0ZVJhZGl1cy5oZWlnaHQoKSA8IDAgfHwgYWJz
b2x1dGVSYWRpdXMuaXNaZXJvKCk7CiAgICAgfTsKIAogICAgIGF1dG8gZWZmZWN0RHJhd2luZ1Jl
Y3QgPSByZXN1bHQuYWJzb2x1dGVJbWFnZVJlY3RSZWxhdGl2ZVRvKGlucHV0KTsKLSAgICBhdXRv
IHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKEZsb2F0U2l6ZShtX2VmZmVjdC5yYWRpdXNYKCksIG1f
ZWZmZWN0LnJhZGl1c1koKSkpOwogCi0gICAgaWYgKGlzRGVnZW5lcmF0ZShyYWRpdXMud2lkdGgo
KSwgcmFkaXVzLmhlaWdodCgpKSkgeworICAgIGF1dG8gcmFkaXVzID0gZmlsdGVyLnJlc29sdmVk
U2l6ZSh7IG1fZWZmZWN0LnJhZGl1c1goKSwgbV9lZmZlY3QucmFkaXVzWSgpIH0pOworICAgIGF1
dG8gYWJzb2x1dGVSYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJT
Y2FsZShyYWRpdXMpKTsKKworICAgIGlmIChpc0RlZ2VuZXJhdGUoYWJzb2x1dGVSYWRpdXMpKSB7
CiAgICAgICAgIGlucHV0LmNvcHlQaXhlbEJ1ZmZlcigqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwg
ZWZmZWN0RHJhd2luZ1JlY3QpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBy
YWRpdXMgPSBmbG9vcmVkSW50U2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZWZm
ZWN0LnJhZGl1c1goKSwgbV9lZmZlY3QucmFkaXVzWSgpIH0pKTsKLSAgICBpbnQgcmFkaXVzWCA9
IHN0ZDo6bWluKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgLSAxLCByYWRpdXMud2lkdGgoKSk7
Ci0gICAgaW50IHJhZGl1c1kgPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSAt
IDEsIHJhZGl1cy5oZWlnaHQoKSk7CisgICAgaW50IHJhZGl1c1ggPSBzdGQ6Om1pbihlZmZlY3RE
cmF3aW5nUmVjdC53aWR0aCgpIC0gMSwgYWJzb2x1dGVSYWRpdXMud2lkdGgoKSk7CisgICAgaW50
IHJhZGl1c1kgPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSAtIDEsIGFic29s
dXRlUmFkaXVzLmhlaWdodCgpKTsKIAotICAgIGlmIChpc0RlZ2VuZXJhdGUocmFkaXVzWCwgcmFk
aXVzWSkpIHsKKyAgICBpZiAoaXNEZWdlbmVyYXRlKHsgcmFkaXVzWCwgcmFkaXVzWSB9KSkgewog
ICAgICAgICBpbnB1dC5jb3B5UGl4ZWxCdWZmZXIoKmRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGVm
ZmVjdERyYXdpbmdSZWN0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU9m
ZnNldFNvZnR3YXJlQXBwbGllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmVBcHBsaWVyLmNwcAppbmRleCBjZjJk
Y2VkNDk3ZDY4Mjk4MWE4YTQyYjhjN2VlODZlMjAwNTI2NTUwLi4xZmJkZmUwYTNiNzRlZTlhYWEw
NTdjYmE5ZjRiZGIwY2YyY2Y4YjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmVBcHBsaWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
T2Zmc2V0U29mdHdhcmVBcHBsaWVyLmNwcApAQCAtNDIsNyArNDIsMTEgQEAgYm9vbCBGRU9mZnNl
dFNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRl
ckltYWdlVmVjdG8KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgRmxvYXRSZWN0IGlucHV0
SW1hZ2VSZWN0ID0gaW5wdXQuYWJzb2x1dGVJbWFnZVJlY3RSZWxhdGl2ZVRvKHJlc3VsdCk7Ci0g
ICAgaW5wdXRJbWFnZVJlY3QubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZWZm
ZWN0LmR4KCksIG1fZWZmZWN0LmR5KCkgfSkpOworCisgICAgYXV0byBvZmZzZXQgPSBmaWx0ZXIu
cmVzb2x2ZWRTaXplKHsgbV9lZmZlY3QuZHgoKSwgbV9lZmZlY3QuZHkoKSB9KTsKKyAgICBhdXRv
IGFic29sdXRlT2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUob2Zmc2V0KTsKKwor
ICAgIGlucHV0SW1hZ2VSZWN0Lm1vdmUoYWJzb2x1dGVPZmZzZXQpOwogCiAgICAgcmVzdWx0SW1h
Z2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGlucHV0SW1hZ2VSZWN0
KTsKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9DU1NGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAK
aW5kZXggZGRmMDE0MzRjOTlmMWVjNjljYzNmMDM2NzY4MDhjNmQ5MzIxMjFiMS4uYTc5NjkzMjhk
NjU4ZjkzYTQ1MjMzYjYxY2VjZjBmMjFmZjkzOGRmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0NTU0ZpbHRlci5jcHAKQEAgLTQ5LDI1ICs0OSwyNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVJlZlB0cjxDU1NGaWx0ZXI+IENTU0ZpbHRlcjo6Y3JlYXRlKGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIG9wZXJhdGlvbnMsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgc2Nh
bGVGYWN0b3IpCitSZWZQdHI8Q1NTRmlsdGVyPiBDU1NGaWx0ZXI6OmNyZWF0ZShjb25zdCBGaWx0
ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZs
b2F0IHNjYWxlRmFjdG9yLCBDbGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRpb24pCiB7CiAgICAgYm9v
bCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgPSBvcGVyYXRpb25zLmhhc0ZpbHRlclRoYXRNb3Zl
c1BpeGVscygpOwogICAgIGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2Vj
dXJpdHlPcmlnaW4gPSBvcGVyYXRpb25zLmhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRC
eVNlY3VyaXR5T3JpZ2luKCk7CiAKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NGaWx0ZXIo
cmVuZGVyaW5nTW9kZSwgc2NhbGVGYWN0b3IsIGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscywgaGFz
RmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4pKTsKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBDU1NGaWx0ZXIocmVuZGVyaW5nTW9kZSwgc2NhbGVGYWN0b3IsIGNs
aXBPcGVyYXRpb24sIGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscywgaGFzRmlsdGVyVGhhdFNob3Vs
ZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4pKTsKIH0KIAotQ1NTRmlsdGVyOjpDU1NGaWx0
ZXIoUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCBzY2FsZUZhY3RvciwgYm9vbCBo
YXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMsIGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJp
Y3RlZEJ5U2VjdXJpdHlPcmlnaW4pCi0gICAgOiBGaWx0ZXIoRmlsdGVyOjpUeXBlOjpDU1NGaWx0
ZXIsIHJlbmRlcmluZ01vZGUsIEZsb2F0U2l6ZSB7IHNjYWxlRmFjdG9yLCBzY2FsZUZhY3RvciB9
KQorQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9h
dCBzY2FsZUZhY3RvciwgQ2xpcE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9uLCBib29sIGhhc0ZpbHRl
clRoYXRNb3Zlc1BpeGVscywgYm9vbCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlT
ZWN1cml0eU9yaWdpbikKKyAgICA6IEZpbHRlcihGaWx0ZXI6OlR5cGU6OkNTU0ZpbHRlciwgcmVu
ZGVyaW5nTW9kZSwgRmxvYXRTaXplIHsgc2NhbGVGYWN0b3IsIHNjYWxlRmFjdG9yIH0sIGNsaXBP
cGVyYXRpb24pCiAgICAgLCBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyhoYXNGaWx0ZXJUaGF0
TW92ZXNQaXhlbHMpCiAgICAgLCBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNl
Y3VyaXR5T3JpZ2luKGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3Jp
Z2luKQogewogfQogCi1zdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlQmx1ckVmZmVj
dChjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyT3BlcmF0aW9uLCBGaWx0ZXJDb25zdW1l
ciBjb25zdW1lcikKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCbHVyRWZmZWN0
KGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mIGJsdXJPcGVyYXRpb24sIEZpbHRlcjo6Q2xpcE9w
ZXJhdGlvbiBjbGlwT3BlcmF0aW9uKQogewogICAgIGZsb2F0IHN0ZERldmlhdGlvbiA9IGZsb2F0
VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgMCk7Ci0gICAgcmV0
dXJuIEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoc3RkRGV2aWF0aW9uLCBzdGREZXZpYXRpb24sIGNv
bnN1bWVyID09IEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJQcm9wZXJ0eSA/IEVkZ2VNb2RlVHlwZTo6
Tm9uZSA6IEVkZ2VNb2RlVHlwZTo6RHVwbGljYXRlKTsKKyAgICByZXR1cm4gRkVHYXVzc2lhbkJs
dXI6OmNyZWF0ZShzdGREZXZpYXRpb24sIHN0ZERldmlhdGlvbiwgY2xpcE9wZXJhdGlvbiA9PSBG
aWx0ZXI6OkNsaXBPcGVyYXRpb246OlVuaXRlID8gRWRnZU1vZGVUeXBlOjpOb25lIDogRWRnZU1v
ZGVUeXBlOjpEdXBsaWNhdGUpOwogfQogCiBzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3Jl
YXRlQnJpZ2h0bmVzc0VmZmVjdChjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbikKQEAgLTIyMSwxOCArMjIxLDEwIEBA
IHN0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGVTVkdGaWx0ZXIoQ1NTRmlsdGVyJiBmaWx0
ZXIsIGNvbnN0IFJlZmVyZW5jZUZpbHRlCiAgICAgfQogCiAgICAgU1ZHRmlsdGVyQnVpbGRlciBi
dWlsZGVyOwotICAgIHJldHVybiBTVkdGaWx0ZXI6OmNyZWF0ZSgqZmlsdGVyRWxlbWVudCwgYnVp
bGRlciwgZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgZmlsdGVyLmZpbHRlclNjYWxlKCksIGZpbHRl
ci5zb3VyY2VJbWFnZVJlY3QoKSwgZmlsdGVyLmZpbHRlclJlZ2lvbigpLCBwcmV2aW91c0VmZmVj
dCk7CisgICAgcmV0dXJuIFNWR0ZpbHRlcjo6Y3JlYXRlKCpmaWx0ZXJFbGVtZW50LCBidWlsZGVy
LCBmaWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBmaWx0ZXIuZmlsdGVyU2NhbGUoKSwgZmlsdGVyLnNv
dXJjZUltYWdlUmVjdCgpLCBmaWx0ZXIuZmlsdGVyUmVnaW9uKCksIGZpbHRlci5jbGlwT3BlcmF0
aW9uKCksIHByZXZpb3VzRWZmZWN0KTsKIH0KIAotc3RhdGljIHZvaWQgc2V0dXBMYXN0RWZmZWN0
UHJvcGVydGllcyhGaWx0ZXJFZmZlY3QmIGVmZmVjdCwgRmlsdGVyQ29uc3VtZXIgY29uc3VtZXIp
Ci17Ci0gICAgLy8gVW5saWtlIFNWRyBGaWx0ZXJzIGFuZCBDU1NGaWx0ZXJJbWFnZXMsIGZpbHRl
ciBmdW5jdGlvbnMgb24gdGhlIGZpbHRlcgotICAgIC8vIHByb3BlcnR5IGFwcGxpZWQgaGVyZSBz
aG91bGQgbm90IGNsaXAgdG8gdGhlaXIgcHJpbWl0aXZlIHN1YnJlZ2lvbnMuCi0gICAgZWZmZWN0
LnNldENsaXBzVG9Cb3VuZHMoY29uc3VtZXIgPT0gRmlsdGVyQ29uc3VtZXI6OkZpbHRlckZ1bmN0
aW9uKTsKLSAgICBlZmZlY3Quc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IoKSk7Ci19Ci0KLWJvb2wgQ1NTRmlsdGVyOjpidWlsZEZpbHRlckZ1bmN0aW9u
cyhSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0
aW9ucywgRmlsdGVyQ29uc3VtZXIgY29uc3VtZXIpCitib29sIENTU0ZpbHRlcjo6YnVpbGRGaWx0
ZXJGdW5jdGlvbnMoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlv
bnMmIG9wZXJhdGlvbnMpCiB7CiAgICAgbV9mdW5jdGlvbnMuY2xlYXIoKTsKICAgICBtX291dHNl
dHMgPSB7IH07CkBAIC0yNDksNyArMjQxLDcgQEAgYm9vbCBDU1NGaWx0ZXI6OmJ1aWxkRmlsdGVy
RnVuY3Rpb25zKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXQKICAg
ICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgot
ICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlQmx1ckVmZmVjdChkb3duY2FzdDxCbHVyRmlsdGVy
T3BlcmF0aW9uPigqb3BlcmF0aW9uKSwgY29uc3VtZXIpOworICAgICAgICAgICAgZWZmZWN0ID0g
Y3JlYXRlQmx1ckVmZmVjdChkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9u
KSwgY2xpcE9wZXJhdGlvbigpKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgpAQCAtMzA0LDE0ICsyOTYsMTQgQEAgYm9vbCBD
U1NGaWx0ZXI6OmJ1aWxkRmlsdGVyRnVuY3Rpb25zKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBj
b25zdCBGaWx0ZXJPcGVyYXQKICAgICAgICAgCiAgICAgICAgIGlmIChmaWx0ZXIpIHsKICAgICAg
ICAgICAgIGVmZmVjdCA9IGZpbHRlci0+bGFzdEVmZmVjdCgpOwotICAgICAgICAgICAgc2V0dXBM
YXN0RWZmZWN0UHJvcGVydGllcygqZWZmZWN0LCBjb25zdW1lcik7CisgICAgICAgICAgICBlZmZl
Y3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkp
OwogICAgICAgICAgICAgbV9mdW5jdGlvbnMuYXBwZW5kKGZpbHRlci5yZWxlYXNlTm9uTnVsbCgp
KTsKICAgICAgICAgICAgIHByZXZpb3VzRWZmZWN0ID0gV1RGTW92ZShlZmZlY3QpOwogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZWZmZWN0KSB7Ci0gICAg
ICAgICAgICBzZXR1cExhc3RFZmZlY3RQcm9wZXJ0aWVzKCplZmZlY3QsIGNvbnN1bWVyKTsKKyAg
ICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IoKSk7CiAgICAgICAgICAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBX
VEZNb3ZlKHByZXZpb3VzRWZmZWN0KSB9OwogICAgICAgICAgICAgbV9mdW5jdGlvbnMuYXBwZW5k
KHsgKmVmZmVjdCB9KTsKICAgICAgICAgICAgIHByZXZpb3VzRWZmZWN0ID0gV1RGTW92ZShlZmZl
Y3QpOwpAQCAtNDExLDE2ICs0MDMsMTMgQEAgTGF5b3V0UmVjdCBDU1NGaWx0ZXI6OmNvbXB1dGVT
b3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgZmlsdGUKIAogdm9p
ZCBDU1NGaWx0ZXI6OnNldFNvdXJjZUltYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUlt
YWdlUmVjdCkKIHsKLSAgICBhdXRvIHNjYWxlZFNvdXJjZUltYWdlUmVjdCA9IHNvdXJjZUltYWdl
UmVjdDsKLSAgICBzY2FsZWRTb3VyY2VJbWFnZVJlY3Quc2NhbGUoZmlsdGVyU2NhbGUoKSk7Ci0K
ICAgICBGaWx0ZXI6OnNldEZpbHRlclJlZ2lvbihzb3VyY2VJbWFnZVJlY3QpOwotICAgIEZpbHRl
cjo6c2V0U291cmNlSW1hZ2VSZWN0KHNjYWxlZFNvdXJjZUltYWdlUmVjdCk7CisgICAgRmlsdGVy
OjpzZXRTb3VyY2VJbWFnZVJlY3Qoc291cmNlSW1hZ2VSZWN0KTsKIAogICAgIGZvciAoYXV0byYg
ZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykgewogICAgICAgICBpZiAoZnVuY3Rpb24tPmlzU1ZHRmls
dGVyKCkpIHsKICAgICAgICAgICAgIGRvd25jYXN0PFNWR0ZpbHRlcj4oZnVuY3Rpb24ucHRyKCkp
LT5zZXRGaWx0ZXJSZWdpb24oc291cmNlSW1hZ2VSZWN0KTsKLSAgICAgICAgICAgIGRvd25jYXN0
PFNWR0ZpbHRlcj4oZnVuY3Rpb24ucHRyKCkpLT5zZXRTb3VyY2VJbWFnZVJlY3Qoc2NhbGVkU291
cmNlSW1hZ2VSZWN0KTsKKyAgICAgICAgICAgIGRvd25jYXN0PFNWR0ZpbHRlcj4oZnVuY3Rpb24u
cHRyKCkpLT5zZXRTb3VyY2VJbWFnZVJlY3Qoc291cmNlSW1hZ2VSZWN0KTsKICAgICAgICAgfQog
ICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaAppbmRleCBiNmFiMjAzMWUw
MTY3ZmQ4YWVjZjk4M2RkOWEyNmIyNWNlMmY5Zjc2Li4yZjUxNmU1MDU0OWNmMDcwYjczMzkwMmY4
MmY0Njg1YTM4MWM1YTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NT
RmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCkBAIC0z
OSwxNSArMzksMTMgQEAgY2xhc3MgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOwogY2xhc3MgUmVu
ZGVyRWxlbWVudDsKIGNsYXNzIFNvdXJjZUdyYXBoaWM7CiAKLWVudW0gY2xhc3MgRmlsdGVyQ29u
c3VtZXIgeyBGaWx0ZXJQcm9wZXJ0eSwgRmlsdGVyRnVuY3Rpb24gfTsKLQogY2xhc3MgQ1NTRmls
dGVyIGZpbmFsIDogcHVibGljIEZpbHRlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0cjxDU1NGaWx0ZXI+IGNyZWF0ZShjb25zdCBGaWx0
ZXJPcGVyYXRpb25zJiwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgc2NhbGVGYWN0b3IgPSAxKTsKKyAg
ICBzdGF0aWMgUmVmUHRyPENTU0ZpbHRlcj4gY3JlYXRlKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMm
LCBSZW5kZXJpbmdNb2RlLCBmbG9hdCBzY2FsZUZhY3RvciA9IDEsIENsaXBPcGVyYXRpb24gPSBD
bGlwT3BlcmF0aW9uOjpJbnRlcnNlY3QpOwogCiAgICAgdm9pZCBzZXRTb3VyY2VJbWFnZVJlY3Qo
Y29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgYm9vbCBidWlsZEZpbHRlckZ1bmN0aW9ucyhSZW5kZXJF
bGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIEZpbHRlckNvbnN1bWVyKTsKKyAgICBi
b29sIGJ1aWxkRmlsdGVyRnVuY3Rpb25zKFJlbmRlckVsZW1lbnQmLCBjb25zdCBGaWx0ZXJPcGVy
YXRpb25zJik7CiAgICAgdm9pZCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsK
IAogICAgIGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gbV9o
YXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHM7IH0KQEAgLTY0LDcgKzYyLDcgQEAgcHVibGljOgogICAg
IExheW91dFJlY3QgY29tcHV0ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5UmVjdChjb25zdCBMYXlv
dXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpOwogCiBw
cml2YXRlOgotICAgIENTU0ZpbHRlcihSZW5kZXJpbmdNb2RlLCBmbG9hdCBzY2FsZUZhY3Rvciwg
Ym9vbCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMsIGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJl
UmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4pOworICAgIENTU0ZpbHRlcihSZW5kZXJpbmdNb2Rl
LCBmbG9hdCBzY2FsZUZhY3RvciwgQ2xpcE9wZXJhdGlvbiwgYm9vbCBoYXNGaWx0ZXJUaGF0TW92
ZXNQaXhlbHMsIGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlP
cmlnaW4pOwogCiAjaWYgVVNFKENPUkVfSU1BR0UpCiAgICAgYm9vbCBzdXBwb3J0c0NvcmVJbWFn
ZVJlbmRlcmluZygpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcAppbmRleCBmZjlkODI2NjI1OGU3N2E2NDI4NGVkMWI4
ZTk1YTk0ZDljZDc3ZjFmLi5kNTlmOWRjOGY4ZTdmZTE4YmYzNWIyN2FlMWU2NzgyN2Q3NDY5MTQy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNw
cApAQCAtMTIxLDcgKzEyMSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRl
cihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgZmxvYXQgc2NhbGVGYWN0b3IsCiAgICAgLy8gSWYg
dGhlIGZpbHRlciBmYWlscyB0byBidWlsZCwgcmVtb3ZlIGl0IGZyb20gdGhlIGxheWVyLiBJdCB3
aWxsIHN0aWxsIGF0dGVtcHQgdG8KICAgICAvLyBnbyB0aHJvdWdoIHJlZ3VsYXIgcHJvY2Vzc2lu
ZyAoZS5nLiBjb21wb3NpdGluZyksIGJ1dCBuZXZlciBhcHBseSBhbnl0aGluZy4KICAgICAvLyBG
SVhNRTogdGhpcyByZWJ1aWxkcyB0aGUgZW50aXJlIGVmZmVjdHMgY2hhaW4gZXZlbiBpZiB0aGUg
ZmlsdGVyIHN0eWxlIGRpZG4ndCBjaGFuZ2UuCi0gICAgbV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNy
ZWF0ZShyZW5kZXJlci5zdHlsZSgpLmZpbHRlcigpLCByZW5kZXJpbmdNb2RlLCBzY2FsZUZhY3Rv
cik7CisgICAgbV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZShyZW5kZXJlci5zdHlsZSgpLmZp
bHRlcigpLCByZW5kZXJpbmdNb2RlLCBzY2FsZUZhY3RvciwgRmlsdGVyOjpDbGlwT3BlcmF0aW9u
OjpVbml0ZSk7CiB9CiAKIEdyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjppbnB1
dENvbnRleHQoKQpAQCAtMTMyLDcgKzEzMiw3IEBAIEdyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5
ZXJGaWx0ZXJzOjppbnB1dENvbnRleHQoKQogdm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmFsbG9j
YXRlQmFja2luZ1N0b3JlKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgdGFyZ2V0Q29udGV4dCkKIHsK
ICAgICBhdXRvJiBmaWx0ZXIgPSAqbV9maWx0ZXI7Ci0gICAgYXV0byBsb2dpY2FsU2l6ZSA9IGZp
bHRlci5zb3VyY2VJbWFnZVJlY3QoKS5zaXplKCk7CisgICAgYXV0byBsb2dpY2FsU2l6ZSA9IGZp
bHRlci5zb3VyY2VJbWFnZVJlY3QoKS5zaXplKCkgKiBmaWx0ZXIuZmlsdGVyU2NhbGUoKTsKICAg
ICAKICAgICBpZiAoIW1fc291cmNlSW1hZ2UgfHwgbV9zb3VyY2VJbWFnZS0+bG9naWNhbFNpemUo
KSAhPSBsb2dpY2FsU2l6ZSkgewogI2lmIFVTRShESVJFQ1QyRCkKQEAgLTE2Miw3ICsxNjIsNyBA
QCBHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3Qo
R3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdAogICAgIGlmIChoYXNVcGRhdGVkQmFja2luZ1N0b3Jl
IHx8ICFtX2ZpbHRlci0+bGFzdEVmZmVjdCgpKSB7CiAgICAgICAgIC8vIElmIHRoZSBmaWx0ZXIg
ZmFpbHMgdG8gYnVpbGQsIHJlbW92ZSBpdCBmcm9tIHRoZSBsYXllci4gSXQgd2lsbCBzdGlsbCBh
dHRlbXB0IHRvCiAgICAgICAgIC8vIGdvIHRocm91Z2ggcmVndWxhciBwcm9jZXNzaW5nIChlLmcu
IGNvbXBvc2l0aW5nKSwgYnV0IG5ldmVyIGFwcGx5IGFueXRoaW5nLgotICAgICAgICBpZiAoIW1f
ZmlsdGVyLT5idWlsZEZpbHRlckZ1bmN0aW9ucyhyZW5kZXJlciwgcmVuZGVyZXIuc3R5bGUoKS5m
aWx0ZXIoKSwgRmlsdGVyQ29uc3VtZXI6OkZpbHRlclByb3BlcnR5KSkKKyAgICAgICAgaWYgKCFt
X2ZpbHRlci0+YnVpbGRGaWx0ZXJGdW5jdGlvbnMocmVuZGVyZXIsIHJlbmRlcmVyLnN0eWxlKCku
ZmlsdGVyKCkpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIApAQCAt
MjAwLDE4ICsyMDAsMTQgQEAgR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmJl
Z2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXQKIAogdm9pZCBSZW5kZXJM
YXllckZpbHRlcnM6OmFwcGx5RmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRp
b25Db250ZXh0KQogewotICAgIEFTU0VSVChpbnB1dENvbnRleHQoKSk7Ci0KICAgICBMT0dfV0lU
SF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJcblJlbmRlckxheWVyRmlsdGVycyAiIDw8IHRo
aXMgPDwgIiBhcHBseUZpbHRlckVmZmVjdCIpOwogCisgICAgQVNTRVJUKGlucHV0Q29udGV4dCgp
KTsKICAgICBpbnB1dENvbnRleHQoKS0+cmVzdG9yZSgpOwogCiAgICAgYXV0byYgZmlsdGVyID0g
Km1fZmlsdGVyOwogCi0gICAgZGVzdGluYXRpb25Db250ZXh0LnNjYWxlKHsgMSAvIGZpbHRlci5m
aWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS5oZWlnaHQoKSB9
KTsKICAgICBkZXN0aW5hdGlvbkNvbnRleHQuZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIobV9zb3Vy
Y2VJbWFnZS5nZXQoKSwgZmlsdGVyKTsKLSAgICBkZXN0aW5hdGlvbkNvbnRleHQuc2NhbGUoZmls
dGVyLmZpbHRlclNjYWxlKCkpOwotCiAgICAgZmlsdGVyLmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0
cygpOwogCiAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyTGF5
ZXJGaWx0ZXJzICIgPDwgdGhpcyA8PCAiIGFwcGx5RmlsdGVyRWZmZWN0IGRvbmVcbiIpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
RmlsdGVyLmNwcAppbmRleCBlY2JiMmJlZjFlODliN2EwNjMxN2U1MTJhNzMzZjUxMGI3MDAwZWE3
Li5mZGFkMDM5YTBjMTBhMWY4NTBiNjNjMDQ4NGZlMjE2Y2U1MTlkNWVjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVy
LmNwcApAQCAtMTMxLDcgKzEzMSw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFw
cGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlCiAKICAgICAv
LyBDcmVhdGUgdGhlIFNWR0ZpbHRlciBvYmplY3QuCiAgICAgZmlsdGVyRGF0YS0+YnVpbGRlciA9
IG1ha2VVbmlxdWU8U1ZHRmlsdGVyQnVpbGRlcj4oKTsKLSAgICBmaWx0ZXJEYXRhLT5maWx0ZXIg
PSBTVkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXJFbGVtZW50KCksICpmaWx0ZXJEYXRhLT5idWlsZGVy
LCByZW5kZXJpbmdNb2RlLCBmaWx0ZXJTY2FsZSwgYWJzb2x1dGVEcmF3aW5nUmVnaW9uLCBmaWx0
ZXJEYXRhLT5ib3VuZGFyaWVzLCB0YXJnZXRCb3VuZGluZ0JveCk7CisgICAgZmlsdGVyRGF0YS0+
ZmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoZmlsdGVyRWxlbWVudCgpLCAqZmlsdGVyRGF0YS0+
YnVpbGRlciwgcmVuZGVyaW5nTW9kZSwgZmlsdGVyU2NhbGUsIGZpbHRlckRhdGEtPmRyYXdpbmdS
ZWdpb24sIGZpbHRlckRhdGEtPmJvdW5kYXJpZXMsIHRhcmdldEJvdW5kaW5nQm94KTsKICAgICBp
ZiAoIWZpbHRlckRhdGEtPmZpbHRlcikgewogICAgICAgICBtX3JlbmRlcmVyRmlsdGVyRGF0YU1h
cC5yZW1vdmUoJnJlbmRlcmVyKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjI5LDkgKzIy
OSw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJl
bmRlckVsZW1lbnQmIHJlbmRlcmVyLCBHcmFwaGljCiAKICAgICBpZiAoIWZpbHRlckRhdGEuYm91
bmRhcmllcy5pc0VtcHR5KCkpIHsKICAgICAgICAgZmlsdGVyRGF0YS5zdGF0ZSA9IEZpbHRlckRh
dGE6OkJ1aWx0OwotICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSAvIGZpbHRlckRh
dGEuZmlsdGVyLT5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0ZXJEYXRhLmZpbHRlci0+
ZmlsdGVyU2NhbGUoKS5oZWlnaHQoKSkpOwogICAgICAgICBjb250ZXh0LT5kcmF3RmlsdGVyZWRJ
bWFnZUJ1ZmZlcihmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIuZ2V0KCksICpmaWx0ZXJE
YXRhLmZpbHRlcik7Ci0gICAgICAgIGNvbnRleHQtPnNjYWxlKGZpbHRlckRhdGEuc2NhbGUpOwog
ICAgIH0KIAogICAgIGZpbHRlckRhdGEuc291cmNlR3JhcGhpY0J1ZmZlciA9IG51bGxwdHI7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3Bw
CmluZGV4IDhhNDljZjlkMjc0NTFmOWM5MDY2MDQzZWI2ZjAxMTU4NTU2NzM3YmEuLjVjNjdjYTMx
OTBjZjYyM2E3OTYzNWI5MjliNGM5NDYwYTk3NjIxZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCkBAIC01MCwxMCArNTAsOCBA
QCBGRUltYWdlOjpGRUltYWdlKFNvdXJjZUltYWdlJiYgc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0
UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjbwogewogfQogCi12b2lkIEZFSW1hZ2U6OmRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQorRmxvYXRSZWN0IEZFSW1h
Z2U6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVy
SW1hZ2VWZWN0b3ImLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QK
IHsKLSAgICBhdXRvIHByaW1pdGl2ZVN1YnJlZ2lvbiA9IGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bigpOwotCiAgICAgYXV0byBpbWFnZVJlY3QgPSBXVEY6OnN3aXRjaE9uKG1fc291cmNlSW1hZ2Us
CiAgICAgICAgIFsmXSAoY29uc3QgUmVmPEltYWdlPiYpIHsKICAgICAgICAgICAgIGF1dG8gaW1h
Z2VSZWN0ID0gcHJpbWl0aXZlU3VicmVnaW9uOwpAQCAtNjUsMTQgKzYzLDcgQEAgdm9pZCBGRUlt
YWdlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKICAg
ICAgICAgICAgIHJldHVybiBwcmltaXRpdmVTdWJyZWdpb247CiAgICAgICAgIH0KICAgICApOwot
Ci0gICAgaW1hZ2VSZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLQotICAgIGlmIChj
bGlwc1RvQm91bmRzKCkpCi0gICAgICAgIGltYWdlUmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVj
dCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGltYWdlUmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkp
OwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoaW1hZ2VSZWN0KSk7
CisgICAgcmV0dXJuIGZpbHRlci5jbGlwVG9NYXhFZmZlY3RSZWN0KGltYWdlUmVjdCwgcHJpbWl0
aXZlU3VicmVnaW9uKTsKIH0KIAogLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFSW1hZ2VTb2Z0
d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmggYi9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgKaW5kZXggNmM5
YWU3OTA0OGExZGYyMWUwNzEzNTA4ZTA0YTBkZGM3YzM5ZWRlZi4uOTE5YTA0ZTYxZGNkMjIzNDQx
YjFlMTliMjIzNjIyNWMzMzAxZmQ4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaApAQCAtNTAsNyArNTAsNyBAQCBwcml2YXRlOgogICAg
IC8vIEZFSW1hZ2UgcmVzdWx0cyBhcmUgYWx3YXlzIGluIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6
U1JHQigpCiAgICAgdm9pZCBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYpIG92ZXJyaWRlIHsgfQogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdChjb25zdCBGaWx0ZXImKSBmaW5hbDsKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1h
Z2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNv
bnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RBcHBsaWVyPiBjcmVhdGVBcHBsaWVyKGNvbnN0
IEZpbHRlciYpIGNvbnN0IGZpbmFsOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAppbmRleCAxYmQ5MjBhNWZjOWNjOGQ0OTY4MGEzNTBm
OGIxMWIyNDAwZTE0YmQ2Li4wMmVjMDI2ZjQ1YzY5MWYxMWI2MGM1NzllYWFiZDFjNTE0ZmRhYmJh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRl
ci5jcHAKQEAgLTI5LDIxICsyOSwxOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZlB0
cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVs
ZW1lbnQsIFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBGaWx0ZXJFZmZlY3Qm
IHByZXZpb3VzRWZmZWN0KQorUmVmUHRyPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUoU1ZH
RmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwgU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlciwg
UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxl
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0
ZXJSZWdpb24sIENsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlvbiwgRmlsdGVyRWZmZWN0JiBwcmV2
aW91c0VmZmVjdCkKIHsKLSAgICByZXR1cm4gY3JlYXRlKGZpbHRlckVsZW1lbnQsIGJ1aWxkZXIs
IHJlbmRlcmluZ01vZGUsIGZpbHRlclNjYWxlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlclJlZ2lv
biwgZmlsdGVyUmVnaW9uLCAmcHJldmlvdXNFZmZlY3QpOworICAgIHJldHVybiBjcmVhdGUoZmls
dGVyRWxlbWVudCwgYnVpbGRlciwgcmVuZGVyaW5nTW9kZSwgZmlsdGVyU2NhbGUsIHNvdXJjZUlt
YWdlUmVjdCwgZmlsdGVyUmVnaW9uLCBjbGlwT3BlcmF0aW9uLCBmaWx0ZXJSZWdpb24sICZwcmV2
aW91c0VmZmVjdCk7CiB9CiAKIFJlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKFNW
R0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQsIFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIs
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2Fs
ZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmls
dGVyUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94KQogewotICAgIHJl
dHVybiBjcmVhdGUoZmlsdGVyRWxlbWVudCwgYnVpbGRlciwgcmVuZGVyaW5nTW9kZSwgZmlsdGVy
U2NhbGUsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyUmVnaW9uLCB0YXJnZXRCb3VuZGluZ0JveCwg
bnVsbHB0cik7CisgICAgcmV0dXJuIGNyZWF0ZShmaWx0ZXJFbGVtZW50LCBidWlsZGVyLCByZW5k
ZXJpbmdNb2RlLCBmaWx0ZXJTY2FsZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXJSZWdpb24sIENs
aXBPcGVyYXRpb246OkludGVyc2VjdCwgdGFyZ2V0Qm91bmRpbmdCb3gsIG51bGxwdHIpOwogfQog
Ci1SZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiBm
aWx0ZXJFbGVtZW50LCBTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyLCBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3Qg
RmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgRmlsdGVyRWZmZWN0KiBwcmV2aW91c0VmZmVj
dCkKK1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQm
IGZpbHRlckVsZW1lbnQsIFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIsIFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRS
ZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBDbGlw
T3BlcmF0aW9uIGNsaXBPcGVyYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdC
b3gsIEZpbHRlckVmZmVjdCogcHJldmlvdXNFZmZlY3QpCiB7Ci0gICAgYm9vbCBwcmltaXRpdmVC
b3VuZGluZ0JveE1vZGUgPSBmaWx0ZXJFbGVtZW50LnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5p
dFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwotCi0gICAgYXV0byBmaWx0
ZXIgPSBhZG9wdFJlZigqbmV3IFNWR0ZpbHRlcihyZW5kZXJpbmdNb2RlLCBmaWx0ZXJTY2FsZSwg
c291cmNlSW1hZ2VSZWN0LCBmaWx0ZXJSZWdpb24sIHRhcmdldEJvdW5kaW5nQm94LCBwcmltaXRp
dmVCb3VuZGluZ0JveE1vZGUpKTsKKyAgICBhdXRvIGZpbHRlciA9IGFkb3B0UmVmKCpuZXcgU1ZH
RmlsdGVyKHJlbmRlcmluZ01vZGUsIGZpbHRlclNjYWxlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRl
clJlZ2lvbiwgY2xpcE9wZXJhdGlvbiwgdGFyZ2V0Qm91bmRpbmdCb3gsIGZpbHRlckVsZW1lbnQu
cHJpbWl0aXZlVW5pdHMoKSkpOwogCiAgICAgaWYgKCFwcmV2aW91c0VmZmVjdCkKICAgICAgICAg
YnVpbGRlci5zZXR1cEJ1aWx0aW5FZmZlY3RzKFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgpKTsKQEAg
LTcyLDE5ICs3MCwxNiBAQCBSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShTVkdG
aWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBTVkdGaWx0ZXJCdQogICAgIHJldHVybiBmaWx0
ZXI7CiB9CiAKLVNWR0ZpbHRlcjo6U1ZHRmlsdGVyKFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9k
ZSwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJ
bWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFJlY3Qm
IHRhcmdldEJvdW5kaW5nQm94LCBib29sIGVmZmVjdEJCb3hNb2RlKQotICAgIDogRmlsdGVyKEZp
bHRlcjo6VHlwZTo6U1ZHRmlsdGVyLCByZW5kZXJpbmdNb2RlLCBmaWx0ZXJTY2FsZSwgc291cmNl
SW1hZ2VSZWN0LCBmaWx0ZXJSZWdpb24pCitTVkdGaWx0ZXI6OlNWR0ZpbHRlcihSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwg
Q2xpcE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5k
aW5nQm94LCBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHByaW1pdGl2ZVVuaXRzKQorICAgIDog
RmlsdGVyKEZpbHRlcjo6VHlwZTo6U1ZHRmlsdGVyLCByZW5kZXJpbmdNb2RlLCBmaWx0ZXJTY2Fs
ZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXJSZWdpb24sIGNsaXBPcGVyYXRpb24pCiAgICAgLCBt
X3RhcmdldEJvdW5kaW5nQm94KHRhcmdldEJvdW5kaW5nQm94KQotICAgICwgbV9lZmZlY3RCQm94
TW9kZShlZmZlY3RCQm94TW9kZSkKKyAgICAsIG1fcHJpbWl0aXZlVW5pdHMocHJpbWl0aXZlVW5p
dHMpCiB7CiB9CiAKLUZsb2F0U2l6ZSBTVkdGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyU2NhbGUoRmxv
YXRTaXplIHNpemUpIGNvbnN0CitGbG9hdFNpemUgU1ZHRmlsdGVyOjpyZXNvbHZlZFNpemUoY29u
c3QgRmxvYXRTaXplJiBzaXplKSBjb25zdAogewotICAgIGlmIChtX2VmZmVjdEJCb3hNb2RlKQot
ICAgICAgICBzaXplID0gc2l6ZSAqIG1fdGFyZ2V0Qm91bmRpbmdCb3guc2l6ZSgpOwotCi0gICAg
cmV0dXJuIEZpbHRlcjo6c2NhbGVkQnlGaWx0ZXJTY2FsZShzaXplKTsKKyAgICByZXR1cm4gbV9w
cmltaXRpdmVVbml0cyA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJ
TkdCT1ggPyBzaXplICogbV90YXJnZXRCb3VuZGluZ0JveC5zaXplKCkgOiBzaXplOwogfQogCiAj
aWYgVVNFKENPUkVfSU1BR0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlci5oCmluZGV4IDIxMWQxMDM3ZTNkYWQ2YWI1NTc3YzUwNzIyOTdlNzBjNTdj
Y2M1MjEuLjMzMjYwZDA1MTllZTBjZjFmMzEyYzkzNTA4YWVmZDk4N2I0NTI2OGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCkBAIC0yNCw2
ICsyNCw3IEBACiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0VmVj
dG9yLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiU1ZHVW5pdFR5cGVzLmgi
CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KIApAQCAt
MzUsMjEgKzM2LDIxIEBAIGNsYXNzIFNWR0ZpbHRlckVsZW1lbnQ7CiAKIGNsYXNzIFNWR0ZpbHRl
ciBmaW5hbCA6IHB1YmxpYyBGaWx0ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8U1ZH
RmlsdGVyPiBjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYsIFNWR0ZpbHRlckJ1aWxkZXImLCBSZW5k
ZXJpbmdNb2RlLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIEZpbHRlckVm
ZmVjdCYgcHJldmlvdXNFZmZlY3QpOworICAgIHN0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVh
dGUoU1ZHRmlsdGVyRWxlbWVudCYsIFNWR0ZpbHRlckJ1aWxkZXImLCBSZW5kZXJpbmdNb2RlLCBj
b25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdl
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIENsaXBPcGVyYXRpb24sIEZpbHRl
ckVmZmVjdCYgcHJldmlvdXNFZmZlY3QpOwogICAgIHN0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBj
cmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYsIFNWR0ZpbHRlckJ1aWxkZXImLCBSZW5kZXJpbmdNb2Rl
LCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUlt
YWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYg
dGFyZ2V0Qm91bmRpbmdCb3gpOwotICAgIHN0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGUo
U1ZHRmlsdGVyRWxlbWVudCYsIFNWR0ZpbHRlckJ1aWxkZXImLCBSZW5kZXJpbmdNb2RlLCBjb25z
dCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0
Qm91bmRpbmdCb3gsIEZpbHRlckVmZmVjdCogcHJldmlvdXNFZmZlY3QpOworICAgIHN0YXRpYyBS
ZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYsIFNWR0ZpbHRlckJ1aWxk
ZXImLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBG
bG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24s
IENsaXBPcGVyYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIEZpbHRl
ckVmZmVjdCogcHJldmlvdXNFZmZlY3QpOwogCiAgICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5n
Qm94KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRCb3VuZGluZ0JveDsgfQogCiAgICAgdm9pZCBz
ZXRFeHByZXNzaW9uKEZpbHRlckVmZmVjdFZlY3RvciYmIGV4cHJlc3Npb24pIHsgbV9leHByZXNz
aW9uID0gV1RGTW92ZShleHByZXNzaW9uKTsgfQogICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGxh
c3RFZmZlY3QoKSBjb25zdCB7IHJldHVybiAhbV9leHByZXNzaW9uLmlzRW1wdHkoKSA/IG1fZXhw
cmVzc2lvbi5sYXN0KCkgOiBudWxscHRyOyB9CiAKLSAgICBGbG9hdFNpemUgc2NhbGVkQnlGaWx0
ZXJTY2FsZShGbG9hdFNpemUpIGNvbnN0IGZpbmFsOworICAgIEZsb2F0U2l6ZSByZXNvbHZlZFNp
emUoY29uc3QgRmxvYXRTaXplJikgY29uc3QgZmluYWw7CiAKICAgICBSZWZQdHI8RmlsdGVySW1h
Z2U+IGFwcGx5KCkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgU1ZHRmlsdGVyKFJlbmRlcmlu
Z01vZGUsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBG
bG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSk7CisgICAgU1ZHRmls
dGVyKFJlbmRlcmluZ01vZGUsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwg
Q2xpcE9wZXJhdGlvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgU1ZHVW5p
dFR5cGVzOjpTVkdVbml0VHlwZSBwcmltaXRpdmVVbml0cyk7CiAKICNpZiBVU0UoQ09SRV9JTUFH
RSkKICAgICBib29sIHN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKCkgY29uc3Qgb3ZlcnJpZGU7
CkBAIC02MCw3ICs2MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGVhclJlc3VsdCgpIG92ZXJy
aWRlOwogCiAgICAgRmxvYXRSZWN0IG1fdGFyZ2V0Qm91bmRpbmdCb3g7Ci0gICAgYm9vbCBtX2Vm
ZmVjdEJCb3hNb2RlOworICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgbV9wcmltaXRpdmVV
bml0czsKIAogICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2V4cHJlc3Npb247CiB9Owo=
</data>
<flag name="review"
          id="470532"
          type_id="1"
          status="+"
          setter="heycam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445390</attachid>
            <date>2021-11-30 00:20:53 -0800</date>
            <delta_ts>2021-11-30 01:19:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233613-20211130002052.patch</filename>
            <type>text/plain</type>
            <size>102681</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MjAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGM0OGYyNGZhZjAzZTQx
NDE2Njg0N2FkODQ1Y2ZhYWE0NDdmNzAyMS4uN2E0ZTQ4ZDk2MjJhODRhYjFkMzAxOTczNDc1M2My
YmIxODk4YjNmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5MCBAQAorMjAyMS0xMS0yOSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IENhbGN1bGF0ZSB0aGUgcmVzdWx0IGltYWdlIHJlY3RhbmdsZSBvZiB0aGUgRmlsdGVyRWZmZWN0
IGluIGZpbHRlciBjb29yZGluYXRlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjMzNjEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2FtZXJvbiBNY0Nv
cm1hY2suCisKKyAgICAgICAgSW4gdGhpcyBwYXRjaDoKKworICAgICAgICAxLiBkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCgpIGZ1bmN0aW9ucyBhcmUgZGVsZXRlZCBhbmQgcmVwbGFjZWQgYnkK
KyAgICAgICAgICAgY2FsY3VsYXRlSW1hZ2VSZWN0KCkuIFRoZSBuZXcgZnVuY3Rpb24gcmV0dXJu
cyB0aGUgaW1hZ2UgcmVjdGFuZ2xlCisgICAgICAgICAgIGluIGZpbHRlciBjb29yZGluYXRlcy4g
Qm90aCB0aGUgaW1hZ2UgcmVjdGFuZ2xlIGluIGZpbHRlciBjb29yZGluYXRlcworICAgICAgICAg
ICBhbmQgaW4gdXNlciBzcGFjZSBjb29yZGluYXRlcyB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgcmVz
dWx0IEZpbHRlckltYWdlLgorCisgICAgICAgIDIuIEZpbHRlckNvbnN1bWVyIGlzIHJlcGxhY2Vk
IGJ5IEZpbHRlcjo6Q2xpcE9wZXJhdGlvbiBhbmQgaXQgaXMgc3RvcmVkCisgICAgICAgICAgIGlu
IEZpbHRlci4gU28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgRmlsdGVyRWZmZWN0OjptX2NsaXBzVG9C
b3VuZHMuCisKKyAgICAgICAgMy4gcmVzdWx0SXNBbHBoYUltYWdlKCkgd2lsbCB0YWtlIGEgVmVj
dG9yIG9mIEZpbHRlckltYWdlcyBpbnN0ZWFkIG9mIAorICAgICAgICAgICByZWx5aW5nIG9uIHRo
ZSBpbnB1dCBlZmZlY3RzLiBUaGlzIGlzIGEgc3RlcCB0b3dhcmRzIHJlbW92aW5nIHRoZSBpbnB1
dAorICAgICAgICAgICBlZmZlY3RzIGZyb20gdGhlIEZpbHRlckVmZmVjdC4KKworICAgICAgICA0
LiBNb3ZlIHRoZSBtYXhFZmZlY3RSZWN0KCkgY2FsY3VsYXRpb24gdG8gRmlsdGVyIGFuZCBtYWtl
IGl0IGFsc28gaW4KKyAgICAgICAgICAgZmlsdGVyIGNvb3JkaW5hdGVzLgorCisgICAgICAgIDUu
IE1ha2UgRmlsdGVyOjpzY2FsZWRCeUZpbHRlclNjYWxlKCkganVzdCBzY2FsZXMgYSBGbG9hdFNp
emUuIEFkZCBvdGhlcgorICAgICAgICAgICBvdmVycmlkZSBtZXRob2RzIHRvIHNjYWxlIHRoZSBG
bG9hdFBvaW50IGFuZCBGbG9hdFJlY3QuIE1vdmUgcmVzb2x2aW5nCisgICAgICAgICAgIHRoZSBy
ZWxhdGl2ZSBsZW5ndGggdG8gdGhlIGJvdW5kaW5nIGJveCBpbiBhIHNlcGFyYXRlIGZ1bmN0aW9u
IAorICAgICAgICAgICBGaWx0ZXI6OnJlc29sdmVkU2l6ZSgpIHdoaWNoIGhhcyB0byBiZSBjYWxs
ZWQgZXhwbGljaXRseSBiZWZvcmUgY2FsbGluZworICAgICAgICAgICBzY2FsZWRCeUZpbHRlclNj
YWxlKCkuCisKKyAgICAgICAgNi4gUmVtb3ZlIEZpbHRlckVmZmVjdDo6bWFwUG9pbnRGcm9tVXNl
clNwYWNlVG9CdWZmZXIoKSBhbmQgcmVwbGFjZSBpdCBieQorICAgICAgICAgICBhIGNhbGwgdG8g
RmlsdGVyOjpzY2FsZWRCeUZpbHRlclNjYWxlKCkgZm9sbG93ZWQgYnkgYSBjYWxsIHRvCisgICAg
ICAgICAgIEZpbHRlckltYWdlOjptYXBwZWRBYnNvbHV0ZVBvaW50KCkgc2luY2UgdGhpcyBpcyB3
aGF0IGl0IGFjdHVhbGx5IGRvZXMuCisKKyAgICAgICAgNy4gVGhlIFNWR0ZpbHRlciBhbmQgQ1NT
RmlsdGVyIHdpbGwgcGFzcyB0aGUgc291cmNlSW1hZ2VSZWN0IGluIGZpbHRlcgorICAgICAgICAg
ICBjb29yZGluYXRlcy4gV2hlbiBjcmVhdGluZyB0aGUgc291cmNlSW1hZ2UsIHNvdXJjZUltYWdl
UmVjdCBoYXMgdG8gYmUKKyAgICAgICAgICAgc2NhbGVkIGJ5IGNhbGxpbmcgRmlsdGVyOjpzY2Fs
ZWRCeUZpbHRlclNjYWxlKCkuCisKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIpOgorICAgICAg
ICBTY2FsZSB0aGUgY29udGV4dCBkb3duIGJlZm9yZSBkcmF3aW5nIHRoZSByZXN1bHQgSW1hZ2VC
dWZmZXIgYW5kIHJlc3RvcmUKKyAgICAgICAgdGhlIGNvbnRleHQgYmFjayBhZnRlciB0aGUgZHJh
d2luZy4gUmVtb3ZlIHRoZSByZXBlYXRlZCBjb2RlIGZyb20gCisgICAgICAgIFJlbmRlckxheWVy
RmlsdGVyczo6YXBwbHlGaWx0ZXJFZmZlY3QoKSBhbmQgCisgICAgICAgIFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSgpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RGlzdGFudExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpyZXN1bHRJc0FscGhhSW1hZ2UgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVDb21wb3NpdGU6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvc2l0ZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguaDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3Bs
YWNlbWVudE1hcDo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVEcm9wU2hhZG93OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEcm9wU2hhZG93OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVGbG9vZDo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RkVHYXVzc2lhbkJsdXI6OnJlc3VsdElzQWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAg
KCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBo
b2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpjYWxjdWxhdGVJbWFn
ZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpyZXN1bHRJc0Fs
cGhhSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpjYWxjdWxh
dGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnJlc3VsdElz
QWxwaGFJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVPZmZzZXQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OmNhbGN1bGF0ZUltYWdlUmVj
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OnJlc3VsdElzQWxwaGFJbWFnZSBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaDoKKyAg
ICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVR1cmJ1bGVuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpjYWxjdWxh
dGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUdXJidWxlbmNlLmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6
RmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2NhbGVkQnlGaWx0ZXJTY2FsZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6Om1heEVmZmVjdFJlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpjbGlwVG9NYXhFZmZlY3RSZWN0IGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyOjpjbGlwT3BlcmF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlcjo6cmVzb2x2ZWRTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2Nh
bGVkQnlGaWx0ZXJTY2FsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0OjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmV4dGVybmFsUmVwcmVzZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNsaXBBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om1hcFBvaW50RnJvbVVzZXJTcGFj
ZVRvQnVmZmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpy
ZXN1bHRJc0FscGhhSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjphYnNvbHV0ZVBhaW50UmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OnNldEFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0VW5jbGlwcGVkQWJzb2x1dGVTdWJyZWdpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjbGlwc1RvQm91bmRzIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0Q2xpcHNUb0Jv
dW5kcyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckltYWdlOjpGaWx0ZXJJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJJbWFnZTo6bWF4RWZmZWN0UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJJbWFnZTo6bWFwcGVkQWJzb2x1dGVQb2ludCBjb25zdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVySW1hZ2U6OmltYWdlUmVjdCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9MaWdodFNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb2ludExpZ2h0
U291cmNlOjppbml0UGFpbnRpbmdEYXRhIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFs
cGhhOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QWxwaGE6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUdyYXBoaWM6OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFj
ZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFj
ZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5
IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
TGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Z1NvZnR3YXJlQXBwbGllcjo6c2V0UGl4ZWxJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxp
ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTW9y
cGhvbG9neVNvZnR3YXJlQXBwbGllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xv
Z3lTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFT2Zmc2V0U29mdHdhcmVBcHBsaWVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFT2Zmc2V0U29mdHdhcmVBcHBsaWVyOjphcHBseSBjb25zdCk6CisgICAg
ICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OkNTU0ZpbHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVCbHVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZVNWR0ZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmJ1aWxkRmlsdGVy
RnVuY3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnNldHVwTGFzdEVmZmVjdFByb3BlcnRpZXMpOiBEZWxl
dGVkLgorICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
RmlsdGVyczo6YnVpbGRGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0
ZXJzOjphbGxvY2F0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyRmlsdGVyczo6YXBwbHlGaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6
OmNhbGN1bGF0ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OlNWR0ZpbHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaWx0ZXI6OnJlc29sdmVkU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
aWx0ZXI6OnNjYWxlZEJ5RmlsdGVyU2NhbGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oOgorCiAyMDIxLTExLTI4ICBTYWlkIEFib3Ut
SGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgogCiAgICAgICAgIFtHUFUgUHJvY2Vzc10gQXBwbHkg
dGhlIGZpbHRlciB0byBhbiBJbWFnZUJ1ZmZlciB0aHJvdWdoIEdyYXBoaWNzQ29udGV4dCBhbmQg
SW1hZ2VCdWZmZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFn
ZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcApp
bmRleCAxNDVkZDlkN2MzZjBmNzhkODZlOWY0OTg1NzE3ODQ5M2FkMTk4MGIxLi4yNjhmNDhjMzE0
YzczYzVjZDI4ZDVjNjVjNWE2M2FmNDI3ODA1NGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZpbHRlckltYWdlVmFsdWUuY3BwCkBAIC0xMjcsNyArMTI3LDcgQEAgUmVmUHRyPEltYWdlPiBD
U1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3Qg
RmxvYXRTaXoKICAgICBhdXRvIGNzc0ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKG1fZmlsdGVy
T3BlcmF0aW9ucywgcmVuZGVyaW5nTW9kZSk7CiAKICAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUlt
YWdlUmVjdChzb3VyY2VJbWFnZVJlY3QpOwotICAgIGlmICghY3NzRmlsdGVyLT5idWlsZEZpbHRl
ckZ1bmN0aW9ucyhyZW5kZXJlciwgbV9maWx0ZXJPcGVyYXRpb25zLCBGaWx0ZXJDb25zdW1lcjo6
RmlsdGVyRnVuY3Rpb24pKQorICAgIGlmICghY3NzRmlsdGVyLT5idWlsZEZpbHRlckZ1bmN0aW9u
cyhyZW5kZXJlciwgbV9maWx0ZXJPcGVyYXRpb25zKSkKICAgICAgICAgcmV0dXJuICZJbWFnZTo6
bnVsbEltYWdlKCk7CiAKICAgICBpZiAoYXV0byBpbWFnZSA9IHNvdXJjZUltYWdlLT5maWx0ZXJl
ZEltYWdlKCpjc3NGaWx0ZXIpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggODAxODY5NmQ0Njk1ZWU4YTBiYjU2OTk1
ODk2MDMxZWE5MGVjNTJmNy4uZTM3YjcxNTU3MTQwNjBiZmViN2FkYjAxODlmYWJlZGY3OWYxNjgx
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwCkBAIC02NDEsNyArNjQxLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdGaWx0ZXJlZEltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSwgRmlsdGVyJgog
ICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAorICAgIHNjYWxlKHsgMSAv
IGZpbHRlci5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS5o
ZWlnaHQoKSB9KTsKICAgICBkcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCByZXN1bHQtPmFi
c29sdXRlSW1hZ2VSZWN0KCkpOworICAgIHNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwCmluZGV4IDg5NDdhOTg2
MGU0NmIxMWM1OGUyNzc1MzYyNTZmZGI5ZDUxZDE1NDYuLjBiNWJiYzRlYmE1NzY4Y2NmYTkyYzhi
MjA5NmE3Y2IzZDk5YjhkMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHAKQEAgLTM1
LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIERpc3RhbnRMaWdodFNv
dXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSkgY29uc3QKK3ZvaWQgRGlzdGFudExpZ2h0U291cmNlOjppbml0UGFpbnRp
bmdEYXRhKGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlJiwgUGFpbnRpbmdEYXRhJiBw
YWludGluZ0RhdGEpIGNvbnN0CiB7CiAgICAgZmxvYXQgYXppbXV0aCA9IGRlZzJyYWQobV9hemlt
dXRoKTsKICAgICBmbG9hdCBlbGV2YXRpb24gPSBkZWcycmFkKG1fZWxldmF0aW9uKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExp
Z2h0U291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rp
c3RhbnRMaWdodFNvdXJjZS5oCmluZGV4IDMwMTkyYjBlZjBjZDFiZjQwM2Q0MjMzOGNlNDA4Nzcx
OGQ3NTE3MDcuLmJlZGE1MDVmMjgyOTkzYThlY2U5OTk0ODIzNWRlMjJmYjA1YzZmOTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExp
Z2h0U291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9EaXN0YW50TGlnaHRTb3VyY2UuaApAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgYm9v
bCBzZXRBemltdXRoKGZsb2F0KSBvdmVycmlkZTsKICAgICBib29sIHNldEVsZXZhdGlvbihmbG9h
dCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZm
ZWN0JiwgUGFpbnRpbmdEYXRhJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBpbml0UGFpbnRp
bmdEYXRhKGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlJiByZXN1bHQsIFBhaW50aW5n
RGF0YSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIENvbXB1dGVkTGlnaHRpbmdEYXRhIGNvbXB1dGVQ
aXhlbExpZ2h0aW5nRGF0YShjb25zdCBQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0
IHopIGNvbnN0IGZpbmFsOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5j
cHAKaW5kZXggMjAxOTEzYTMzNTE5YzA1NDUwZDdjZWVlYjUxOWU0ZjA2MWViMjYwZS4uOTU2MWJk
OWI1ZjhlMWVmODIyMDVhNzM2NjhiMGM0MzAyNDYyNDZkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3Bw
CkBAIC0xMDUsNyArMTA1LDcgQEAgYm9vbCBGRUNvbG9yTWF0cml4OjpzdXBwb3J0c0NvcmVJbWFn
ZVJlbmRlcmluZygpIGNvbnN0CiB9CiAjZW5kaWYKIAotYm9vbCBGRUNvbG9yTWF0cml4OjpyZXN1
bHRJc0FscGhhSW1hZ2UoKSBjb25zdAorYm9vbCBGRUNvbG9yTWF0cml4OjpyZXN1bHRJc0FscGhh
SW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImKSBjb25zdAogewogICAgIHJldHVybiBtX3R5
cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJp
eC5oCmluZGV4IDNkMDcwNGU3ZjlhOWI4NjViMmQxNGViMThlOGE4NGM5ZDVmNzJhZTAuLmE0MzEy
NWI1MzE1NjJjNjNhOTUyODQ3YzhmOTA0NDljOTRmN2U4NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCkBA
IC01Niw3ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRl
cmluZygpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAgICAgCi0gICAgYm9vbCByZXN1bHRJc0Fs
cGhhSW1hZ2UoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIHJlc3VsdElzQWxwaGFJbWFnZShj
b25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RBcHBsaWVyPiBjcmVhdGVBcHBsaWVyKGNvbnN0IEZp
bHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IDBlNzczYzA1NWY1
MThiM2NlNmIyYWJiZTEzMDUxMmJhODljZWY2MjcuLjVjYzI4MTgzNjYxMmMyYmI1OWUwZGY2ODli
Yjk5ZjFiNWI1Y2NmYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5j
bHVkZSAiRkVDb21wb3NpdGUuaCIKIAogI2luY2x1ZGUgIkZFQ29tcG9zaXRlU29mdHdhcmVBcHBs
aWVyLmgiCisjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04NSwyNSArODYsMjMgQEAgYm9vbCBGRUNv
bXBvc2l0ZTo6c2V0SzQoZmxvYXQgazQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRkVD
b21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVy
KQorRmxvYXRSZWN0IEZFQ29tcG9zaXRlOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVy
JiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZsb2F0UmVj
dCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewogICAgIHN3aXRjaCAobV90eXBlKSB7CiAg
ICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjoKICAgICBjYXNlIEZFQ09NUE9TSVRFX09Q
RVJBVE9SX0FUT1A6Ci0gICAgICAgIC8vIEZvciBJbiBhbmQgQXRvcCB0aGUgZmlyc3QgZWZmZWN0
IGp1c3QgaW5mbHVlbmNlcyB0aGUgcmVzdWx0IG9mCi0gICAgICAgIC8vIHRoZSBzZWNvbmQgZWZm
ZWN0LiBTbyBqdXN0IHVzZSB0aGUgYWJzb2x1dGUgcGFpbnQgcmVjdCBvZiB0aGUgc2Vjb25kIGVm
ZmVjdCBoZXJlLgotICAgICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVjdCgxKS0+
YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwot
ICAgICAgICByZXR1cm47CisgICAgICAgIC8vIEZvciBJbiBhbmQgQXRvcCB0aGUgZmlyc3QgRmls
dGVySW1hZ2UganVzdCBpbmZsdWVuY2VzIHRoZSByZXN1bHQgb2YgdGhlCisgICAgICAgIC8vIHNl
Y29uZCBGaWx0ZXJJbWFnZS4gU28ganVzdCB1c2UgdGhlIHJlY3Qgb2YgdGhlIHNlY29uZCBGaWx0
ZXJJbWFnZSBoZXJlLgorICAgICAgICByZXR1cm4gZmlsdGVyLmNsaXBUb01heEVmZmVjdFJlY3Qo
aW5wdXRzWzFdLT5pbWFnZVJlY3QoKSwgcHJpbWl0aXZlU3VicmVnaW9uKTsKKwogICAgIGNhc2Ug
RkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzoKLSAgICAgICAgLy8gQXJpdGhtZXRpYyBt
YXkgaW5mbHVuY2UgdGhlIGNvbXBlbGUgZmlsdGVyIHByaW1pdGl2ZSByZWdpb24uIFNvIHdlIGNh
bid0CisgICAgICAgIC8vIEFyaXRobWV0aWMgbWF5IGluZmx1bmNlIHRoZSBlbnRpcmUgZmlsdGVy
IHByaW1pdGl2ZSByZWdpb24uIFNvIHdlIGNhbid0CiAgICAgICAgIC8vIG9wdGltaXplIHRoZSBw
YWludCByZWdpb24gaGVyZS4KLSAgICAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5n
SW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4gZmlsdGVyLm1heEVmZmVjdFJlY3QocHJpbWl0aXZlU3VicmVnaW9uKTsKKwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIC8vIFRha2UgdGhlIHVuaW9uIG9mIGJvdGggaW5wdXQgZWZmZWN0cy4KLSAg
ICAgICAgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChmaWx0ZXIpOwot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZUlt
YWdlUmVjdChmaWx0ZXIsIGlucHV0cywgcHJpbWl0aXZlU3VicmVnaW9uKTsKICAgICB9CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuaAppbmRleCBiMGU4MjZmOTMxNTk3YTRhMjk1MDY5ZDgzMGE5ODYzNTA5N2QzM2Nh
Li41M2FlMGQ2YTI2NGUyMGFmNjY1OGNmZWFmOThhNzQ3MmQ2YzhmZmZmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5o
CkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRkVDb21wb3NpdGUoY29u
c3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMs
IGZsb2F0IGs0KTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3Qg
RmlsdGVyJikgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25z
dCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGbG9hdFJl
Y3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBib29sIG1heVBy
b2R1Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOyB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1h
dHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29u
dm9sdmVNYXRyaXguY3BwCmluZGV4IGYyNjU5ZDM2ZTU1YmIyMmQ2NGZmNWM4NDA2ZWE2ZmI0Y2U4
MDhlZTIuLjFkMWI2MDcxZjU0YTY0YmJiMzkzMWYwMzUwMzYyNTUzY2FkMmU3ODEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1h
dHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbnZvbHZlTWF0cml4LmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkZFQ29udm9s
dmVNYXRyaXguaCIKIAogI2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXIu
aCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTExMyw2ICsxMTQsMTEgQEAgYm9vbCBGRUNvbnZv
bHZlTWF0cml4OjpzZXRQcmVzZXJ2ZUFscGhhKGJvb2wgcHJlc2VydmVBbHBoYSkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAorRmxvYXRSZWN0IEZFQ29udm9sdmVNYXRyaXg6OmNhbGN1bGF0ZUltYWdl
UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImLCBjb25z
dCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKK3sKKyAgICByZXR1cm4gZmls
dGVyLm1heEVmZmVjdFJlY3QocHJpbWl0aXZlU3VicmVnaW9uKTsKK30KKwogc3RkOjp1bmlxdWVf
cHRyPEZpbHRlckVmZmVjdEFwcGxpZXI+IEZFQ29udm9sdmVNYXRyaXg6OmNyZWF0ZUFwcGxpZXIo
Y29uc3QgRmlsdGVyJikgY29uc3QKIHsKICAgICByZXR1cm4gRmlsdGVyRWZmZWN0QXBwbGllcjo6
Y3JlYXRlPEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI+KCp0aGlzKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1h
dHJpeC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZv
bHZlTWF0cml4LmgKaW5kZXggZWJiMDA2ZGE4Y2QwY2VhY2EyMmM0NmJmZWJhYzg2MjczOTM0MTg1
YS4uZTFhMTljY2Y0YzQzMDM3OTQzYTM1ZDhmMTRjMTc2NTVhNWJlZWJmMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZv
bHZlTWF0cml4LmgKQEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRUNv
bnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsIGZsb2F0IGRpdmlzb3IsIGZs
b2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSwgY29u
c3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBjb25z
dCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRS
ZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICBGbG9hdFJlY3Qg
Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9y
JiBpbnB1dHMsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVy
cmlkZTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RBcHBsaWVyPiBjcmVhdGVB
cHBsaWVyKGNvbnN0IEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1l
bnRNYXAuY3BwCmluZGV4IDc4OTk3YTAzNjczMDhiZjVjOWMwOWEwNTAxMDZiNTY0ZDIwMzg0MDcu
LjdiYjZhMmVjNWM1NGZjZTNiODEyMjA0NGU0MzVmMWQyNzZjOGRiM2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiRkVEaXNwbGFjZW1l
bnRNYXAuaCIKIAogI2luY2x1ZGUgIkZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyLmgi
CisjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04Myw2ICs4NCwxMSBAQCB2b2lkIEZFRGlzcGxhY2Vt
ZW50TWFwOjp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCogaW4sIGNvbnN0
IGludCBpbgogICAgICAgICBpbi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShvcGVyYXRpbmdD
b2xvclNwYWNlKCkpOwogfQogCitGbG9hdFJlY3QgRkVEaXNwbGFjZW1lbnRNYXA6OmNhbGN1bGF0
ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3Im
LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKK3sKKyAgICByZXR1
cm4gZmlsdGVyLm1heEVmZmVjdFJlY3QocHJpbWl0aXZlU3VicmVnaW9uKTsKK30KKwogc3RkOjp1
bmlxdWVfcHRyPEZpbHRlckVmZmVjdEFwcGxpZXI+IEZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGVB
cHBsaWVyKGNvbnN0IEZpbHRlciYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEZpbHRlckVmZmVjdEFw
cGxpZXI6OmNyZWF0ZTxGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcj4oKnRoaXMpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURp
c3BsYWNlbWVudE1hcC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURpc3BsYWNlbWVudE1hcC5oCmluZGV4IGNlYzZiMzIyMzhjOTJiODQ1YmQyODAyMDY2NzJm
ZWFlOWVhYzJiN2EuLjUzYjA5ZDRkNjY4YzdlMjNhMzAyZDFkMzJkZjJjOGU4ODgxNTE5YmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKQEAgLTU0LDcgKzU0LDcgQEAgcHJpdmF0ZToKICAgICBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHJlc3VsdENvbG9yU3BhY2UoKSBjb25zdCBvdmVy
cmlkZTsKICAgICB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0Kiwg
Y29uc3QgaW50KSBvdmVycmlkZTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3Np
bmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUlt
YWdlUmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBj
b25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4gY3JlYXRlQXBwbGllcihjb25z
dCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCmluZGV4IDE4ZDhj
MzI2ZDE5NmVmOTJhMzBiMjBiMjU2OWRlMDk1ZGY3NDZkOTcuLjdmMDU3OWI2ZDZmYjViZDRhN2Rh
ZmQwYmNlZTgxYWMyNzE2NGJiYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKQEAgLTQ1LDI1ICs0NSwy
MCBAQCBGRURyb3BTaGFkb3c6OkZFRHJvcFNoYWRvdyhmbG9hdCBzdGRYLCBmbG9hdCBzdGRZLCBm
bG9hdCBkeCwgZmxvYXQgZHksIGNvbnN0IENvbAogewogfQogCi12b2lkIEZFRHJvcFNoYWRvdzo6
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCitGbG9hdFJl
Y3QgRkVEcm9wU2hhZG93OjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIs
IGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0
aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9
IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIEZsb2F0UmVjdCBhYnNv
bHV0ZU9mZnNldFBhaW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCk7Ci0gICAgYWJzb2x1dGVPZmZz
ZXRQYWludFJlY3QubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZHgsIG1fZHkg
fSkpOwotICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0
KTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IGlucHV0c1swXS0+aW1hZ2VSZWN0KCk7CisgICAgYXV0
byBpbWFnZVJlY3RXaXRoT2Zmc2V0KGltYWdlUmVjdCk7CisgICAgaW1hZ2VSZWN0V2l0aE9mZnNl
dC5tb3ZlKGZpbHRlci5yZXNvbHZlZFNpemUoeyBtX2R4LCBtX2R5IH0pKTsKKyAgICBpbWFnZVJl
Y3QudW5pdGUoaW1hZ2VSZWN0V2l0aE9mZnNldCk7CiAKLSAgICBJbnRTaXplIGtlcm5lbFNpemUg
PSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBt
X3N0ZFkgfSk7CisgICAgYXV0byBrZXJuZWxTaXplID0gRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0
ZVVuc2NhbGVkS2VybmVsU2l6ZShmaWx0ZXIucmVzb2x2ZWRTaXplKHsgbV9zdGRYLCBtX3N0ZFkg
fSkpOwogCiAgICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkg
aXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94IGJsdXIgdGhyZWUgdGltZXMuCi0gICAg
YWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVgoMyAqIGtlcm5lbFNpemUud2lkdGgoKSAqIDAuNWYp
OwotICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgp
ICogMC41Zik7CisgICAgaW1hZ2VSZWN0LmluZmxhdGVYKDMgKiBrZXJuZWxTaXplLndpZHRoKCkg
KiAwLjVmKTsKKyAgICBpbWFnZVJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkg
KiAwLjVmKTsKIAotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIGFic29sdXRlUGFp
bnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWJz
b2x1dGVQYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKLQotICAgIHNldEFic29sdXRl
UGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKKyAgICByZXR1
cm4gZmlsdGVyLmNsaXBUb01heEVmZmVjdFJlY3QoaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdp
b24pOwogfQogCiBJbnRPdXRzZXRzIEZFRHJvcFNoYWRvdzo6b3V0c2V0cygpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNo
YWRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BT
aGFkb3cuaAppbmRleCA3MWYzMGJiYTQ4Nzc2ZjdkYjQ2YmUyOTdkMjIxMzhjNDRkMTk4M2U2Li41
OGY2ZTc5NmM3OTM5MTZhMTE2ZDI0NmE0MTU1NDhmZTQ2NmQwNzNjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgK
QEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRURyb3BTaGFkb3coZmxv
YXQgc3RkWCwgZmxvYXQgc3RkWSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYgc2hh
ZG93Q29sb3IsIGZsb2F0IHNoYWRvd09wYWNpdHkpOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgY2Fs
Y3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBp
bnB1dHMsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcApp
bmRleCBkNGVkMmQ1ZTJhZmQyZjZmMGJjZDcxNmYxODRkYTVmZmZiMTc1ZmZjLi40NDM5YTJlMWU1
N2JkOThiZDJhZDQ4YzZmNjRkNmRhNTk4M2MwMjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKQEAgLTI2LDYgKzI2LDcg
QEAKIAogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgogI2luY2x1ZGUgIkZFRmxvb2RT
b2Z0d2FyZUFwcGxpZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4
dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU4LDYgKzU5LDExIEBA
IGJvb2wgRkVGbG9vZDo6c2V0Rmxvb2RPcGFjaXR5KGZsb2F0IGZsb29kT3BhY2l0eSkKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAorRmxvYXRSZWN0IEZFRmxvb2Q6OmNhbGN1bGF0ZUltYWdlUmVjdChj
b25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImLCBjb25zdCBGbG9h
dFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKK3sKKyAgICByZXR1cm4gZmlsdGVyLm1h
eEVmZmVjdFJlY3QocHJpbWl0aXZlU3VicmVnaW9uKTsKK30KKwogc3RkOjp1bmlxdWVfcHRyPEZp
bHRlckVmZmVjdEFwcGxpZXI+IEZFRmxvb2Q6OmNyZWF0ZUFwcGxpZXIoY29uc3QgRmlsdGVyJikg
Y29uc3QKIHsKICAgICByZXR1cm4gRmlsdGVyRWZmZWN0QXBwbGllcjo6Y3JlYXRlPEZFRmxvb2RT
b2Z0d2FyZUFwcGxpZXI+KCp0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKaW5kZXggZDVmNDRlYTlkMjc4MzBmZmIzM2Y2OTY4
Yzc4YTU3MTkwOWEwOTZmNS4uOGZjMWQ5N2E4MzIxNjYwMjlmYmVmOTkyNWMyZTVmN2FjNjcxMjg3
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUZsb29kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUZsb29kLmgKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRUZsb29k
KGNvbnN0IENvbG9yJiBmbG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpOwogCi0gICAgdm9p
ZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZSB7IHNl
dEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0K
KyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZp
bHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVn
aW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RB
cHBsaWVyPiBjcmVhdGVBcHBsaWVyKGNvbnN0IEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1
c3NpYW5CbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuY3BwCmluZGV4IDZjZTZmZjdlN2VjZjg0OTU0NWVhODlmOTcyY2NiZjcx
NjA5ZTY1ZjkuLjE2ZWEyMmQ4YTQ5MjllMjA1NGQ0NmRjYzJkZjI1YTQ2YmI2NzYxNzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lh
bkJsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuY3BwCkBAIC05MSw2ICs5MSw3IEBAIEludFNpemUgRkVHYXVzc2lhbkJs
dXI6OmNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQog
CiBJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKGNvbnN0IEZpbHRl
ciYgZmlsdGVyLCBGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQogeworICAgIHN0ZERldmlhdGlvbiA9
IGZpbHRlci5yZXNvbHZlZFNpemUoc3RkRGV2aWF0aW9uKTsKICAgICByZXR1cm4gY2FsY3VsYXRl
VW5zY2FsZWRLZXJuZWxTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHN0ZERldmlhdGlv
bikpOwogfQogCkBAIC0xMDIsMjcgKzEwMywyMSBAQCBJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpj
YWxjdWxhdGVPdXRzZXRTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCiAgICAgcmV0dXJuIHsg
MyAqIGtlcm5lbFNpemUud2lkdGgoKSAvIDIsIDMgKiBrZXJuZWxTaXplLmhlaWdodCgpIC8gMiB9
OwogfQogCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChj
b25zdCBGaWx0ZXImIGZpbHRlcikKK0Zsb2F0UmVjdCBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRl
SW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYg
aW5wdXRzLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKLSAg
ICBJbnRTaXplIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0
ZFgsIG1fc3RkWSB9KTsKKyAgICBhdXRvIGltYWdlUmVjdCA9IGlucHV0c1swXS0+aW1hZ2VSZWN0
KCk7CiAKLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVQYWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+
YWJzb2x1dGVQYWludFJlY3QoKTsKICAgICAvLyBFZGdlIG1vZGVzIG90aGVyIHRoYW4gJ25vbmUn
IGRvIG5vdCBpbmZsYXRlIHRoZSBhZmZlY3RlZCBwYWludCByZWN0LgotICAgIGlmIChtX2VkZ2VN
b2RlICE9IEVkZ2VNb2RlVHlwZTo6Tm9uZSkgewotICAgICAgICBzZXRBYnNvbHV0ZVBhaW50UmVj
dChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKG1fZWRnZU1vZGUgIT0gRWRnZU1vZGVUeXBlOjpOb25lKQorICAgICAg
ICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChpbWFnZVJlY3QpOwogCi0gICAgLy8gV2UgdGFrZSB0
aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3
ZSBydW4gYm94IGJsdXIgdGhyZWUgdGltZXMuCi0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0
ZVgoMyAqIGtlcm5lbFNpemUud2lkdGgoKSAqIDAuNWYpOwotICAgIGFic29sdXRlUGFpbnRSZWN0
LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICogMC41Zik7CisgICAgYXV0byBrZXJu
ZWxTaXplID0gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKGZpbHRlci5yZXNvbHZlZFNpemUo
eyBtX3N0ZFgsIG1fc3RkWSB9KSk7CiAKLSAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQotICAgICAg
ICBhYnNvbHV0ZVBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBlbHNl
Ci0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7CisgICAg
Ly8gV2UgdGFrZSB0aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQgd2l0aCB0aHJl
ZSwgYmVjYXVzZSB3ZSBydW4gYm94IGJsdXIgdGhyZWUgdGltZXMuCisgICAgaW1hZ2VSZWN0Lmlu
ZmxhdGVYKDMgKiBrZXJuZWxTaXplLndpZHRoKCkgKiAwLjVmKTsKKyAgICBpbWFnZVJlY3QuaW5m
bGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKIAotICAgIHNldEFic29sdXRl
UGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKKyAgICByZXR1
cm4gZmlsdGVyLmNsaXBUb01heEVmZmVjdFJlY3QoaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdp
b24pOwogfQogCiBJbnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzKCkgY29uc3QKQEAg
LTEzMSw5ICsxMjYsOSBAQCBJbnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzKCkgY29u
c3QKICAgICByZXR1cm4geyBvdXRzZXRTaXplLmhlaWdodCgpLCBvdXRzZXRTaXplLndpZHRoKCks
IG91dHNldFNpemUuaGVpZ2h0KCksIG91dHNldFNpemUud2lkdGgoKSB9OwogfQogCi1ib29sIEZF
R2F1c3NpYW5CbHVyOjpyZXN1bHRJc0FscGhhSW1hZ2UoKSBjb25zdAorYm9vbCBGRUdhdXNzaWFu
Qmx1cjo6cmVzdWx0SXNBbHBoYUltYWdlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlucHV0RWZmZWN0KDApLT5yZXN1bHRJc0FscGhhSW1hZ2Uo
KTsKKyAgICByZXR1cm4gaW5wdXRzWzBdLT5pc0FscGhhSW1hZ2UoKTsKIH0KIAogc3RkOjp1bmlx
dWVfcHRyPEZpbHRlckVmZmVjdEFwcGxpZXI+IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGVBcHBsaWVy
KGNvbnN0IEZpbHRlciYpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKaW5kZXggMjI5ZjRmMzk0NmVh
NGQ5YjQ2NTYyZTE4NDU0Y2M4NzUzODY1MGVhYy4uODcxODUzZGY0OTEyMDQ0Nzg5OGM4YmI1MjVm
YjQwNGRmZDVmMzE1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaApAQCAtNDcsMTEgKzQ3LDExIEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgRkVHYXVzc2lhbkJsdXIoZmxvYXQgeCwgZmxvYXQgeSwgRWRn
ZU1vZGVUeXBlKTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3Qg
RmlsdGVyJikgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25z
dCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGbG9hdFJl
Y3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBJbnRPdXRzZXRz
IG91dHNldHMoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGJvb2wgcmVzdWx0SXNBbHBoYUltYWdl
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCByZXN1bHRJc0FscGhhSW1hZ2UoY29uc3QgRmls
dGVySW1hZ2VWZWN0b3ImIGlucHV0cykgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4gY3JlYXRlQXBwbGllcihjb25zdCBGaWx0ZXImKSBj
b25zdCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKaW5kZXggNmIwNjZiM2JhMGM1Y2ZmYjBlNDUy
MjNiMDMyZWIzOGMxZjkzNDU4YS4uYmM5MmQzODQzY2Q4ODllOTVmZTUxOWI0OGZhYWU5YjhjMjdk
NDViOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRkVMaWdo
dGluZy5oIgogCiAjaW5jbHVkZSAiRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5oIgorI2luY2x1
ZGUgIkZpbHRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTgxLDYgKzgyLDExIEBA
IGJvb2wgRkVMaWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQga2VybmVsVW5pdExl
bmd0aFkpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK0Zsb2F0UmVjdCBGRUxpZ2h0aW5nOjpjYWxj
dWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYWdlVmVj
dG9yJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0Cit7CisgICAg
cmV0dXJuIGZpbHRlci5tYXhFZmZlY3RSZWN0KHByaW1pdGl2ZVN1YnJlZ2lvbik7Cit9CisKIHN0
ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RBcHBsaWVyPiBGRUxpZ2h0aW5nOjpjcmVhdGVBcHBs
aWVyKGNvbnN0IEZpbHRlciYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEZpbHRlckVmZmVjdEFwcGxp
ZXI6OmNyZWF0ZTxGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyPigqdGhpcyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCmlu
ZGV4IDlkN2Q2YWUyNTZjOTZiZWY2ZmRmY2I2YzA3YjViMWMwNDhiMmY5YWEuLmRlMGIzODZhMTFj
NzE1OGM1MzhiY2I0YTgwMmM3YzhjZjBiNTY4NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCkBAIC01OCw3ICs1OCw3
IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBGRUxpZ2h0aW5nKFR5cGUsIGNvbnN0IENvbG9y
JiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFu
dCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQg
a2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3Vy
Y2U+JiYpOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0
ZXImKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4
RWZmZWN0UmVjdCgpKSk7IH0KKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0
IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZsb2F0UmVj
dCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHN0ZDo6dW5pcXVl
X3B0cjxGaWx0ZXJFZmZlY3RBcHBsaWVyPiBjcmVhdGVBcHBsaWVyKGNvbnN0IEZpbHRlciYpIGNv
bnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKaW5kZXggZjFmNGRkZDY5OWZiMWY5Zjdh
NTdlN2NmNDRiYjA3MmRiZTQ5ZGM0NS4uMjU5NjliODE5YWI2MjcxNGZiMGJmNzAyOTQ2NGE4NzZh
NzQ2ZmU4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU1vcnBob2xvZ3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcApAQCAtNjgsMjAgKzY4LDE2IEBAIGJvb2wgRkVN
b3JwaG9sb2d5OjpzZXRSYWRpdXNZKGZsb2F0IHJhZGl1c1kpCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgRkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBG
aWx0ZXImIGZpbHRlcikKK0Zsb2F0UmVjdCBGRU1vcnBob2xvZ3k6OmNhbGN1bGF0ZUltYWdlUmVj
dChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywg
Y29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgRmxvYXRS
ZWN0IHBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAg
IHBhaW50UmVjdC5pbmZsYXRlKGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9yYWRpdXNY
LCBtX3JhZGl1c1kgfSkpOwotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIHBhaW50
UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHBhaW50
UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOwotICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVu
Y2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7CisgICAgYXV0byBpbWFnZVJlY3QgPSBpbnB1dHNb
MF0tPmltYWdlUmVjdCgpOworICAgIGltYWdlUmVjdC5pbmZsYXRlKGZpbHRlci5yZXNvbHZlZFNp
emUoeyBtX3JhZGl1c1gsIG1fcmFkaXVzWSB9KSk7CisgICAgcmV0dXJuIGZpbHRlci5jbGlwVG9N
YXhFZmZlY3RSZWN0KGltYWdlUmVjdCwgcHJpbWl0aXZlU3VicmVnaW9uKTsKIH0KIAotYm9vbCBG
RU1vcnBob2xvZ3k6OnJlc3VsdElzQWxwaGFJbWFnZSgpIGNvbnN0Citib29sIEZFTW9ycGhvbG9n
eTo6cmVzdWx0SXNBbHBoYUltYWdlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGlucHV0RWZmZWN0KDApLT5yZXN1bHRJc0FscGhhSW1hZ2UoKTsK
KyAgICByZXR1cm4gaW5wdXRzWzBdLT5pc0FscGhhSW1hZ2UoKTsKIH0KIAogc3RkOjp1bmlxdWVf
cHRyPEZpbHRlckVmZmVjdEFwcGxpZXI+IEZFTW9ycGhvbG9neTo6Y3JlYXRlQXBwbGllcihjb25z
dCBGaWx0ZXImKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKaW5kZXggZTU0ODQ4MDdiNzQ3MzczYTFhZTMx
ODdjZmY1Y2RlMGY3Y2M3ZWNkZC4uMjJhMTUyMTFkZmExNmZiZDIwZjhhMGMxMDNiZmIwNzNmODIx
NDBjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1vcnBob2xvZ3kuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTW9ycGhvbG9neS5oCkBAIC00OCw5ICs0OCw5IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgRkVNb3JwaG9sb2d5KE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1c1gs
IGZsb2F0IHJhZGl1c1kpOwogCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChj
b25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0
KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZs
b2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGJvb2wg
cmVzdWx0SXNBbHBoYUltYWdlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCByZXN1bHRJc0Fs
cGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4gY3JlYXRlQXBwbGll
cihjb25zdCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAppbmRleCAwNDQ5MGIz
NTYxM2JmYjcwMWIyZjBjZDRkZGJhZGM0ZjNkNGI4MjdhLi45ZjFjMjc5NzE5MjhmMjMyOGJkMTgw
NjU0ZGQyZWE3MWQzYTJmY2ZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcApAQCAtNTMsMjAgKzUzLDE2IEBAIHZvaWQg
RkVPZmZzZXQ6OnNldER5KGZsb2F0IGR5KQogICAgIG1fZHkgPSBkeTsKIH0KIAotdm9pZCBGRU9m
ZnNldDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCitG
bG9hdFJlY3QgRkVPZmZzZXQ6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRl
ciwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmxvYXRSZWN0JiBwcmlt
aXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGlucHV0
RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIHBhaW50UmVjdC5tb3ZlKGZpbHRl
ci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9keCwgbV9keSB9KSk7Ci0gICAgaWYgKGNsaXBzVG9C
b3VuZHMoKSkKLSAgICAgICAgcGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwot
ICAgIGVsc2UKLSAgICAgICAgcGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7Ci0gICAg
c2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKKyAgICBh
dXRvIGltYWdlUmVjdCA9IGlucHV0c1swXS0+aW1hZ2VSZWN0KCk7CisgICAgaW1hZ2VSZWN0Lm1v
dmUoZmlsdGVyLnJlc29sdmVkU2l6ZSh7IG1fZHgsIG1fZHkgfSkpOworICAgIHJldHVybiBmaWx0
ZXIuY2xpcFRvTWF4RWZmZWN0UmVjdChpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9
CiAKLWJvb2wgRkVPZmZzZXQ6OnJlc3VsdElzQWxwaGFJbWFnZSgpIGNvbnN0Citib29sIEZFT2Zm
c2V0OjpyZXN1bHRJc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykg
Y29uc3QKIHsKLSAgICByZXR1cm4gaW5wdXRFZmZlY3QoMCktPnJlc3VsdElzQWxwaGFJbWFnZSgp
OworICAgIHJldHVybiBpbnB1dHNbMF0tPmlzQWxwaGFJbWFnZSgpOwogfQogCiBzdGQ6OnVuaXF1
ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4gRkVPZmZzZXQ6OmNyZWF0ZUFwcGxpZXIoY29uc3Qg
RmlsdGVyJikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVPZmZzZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVPZmZzZXQuaAppbmRleCAzYzJkYWFmMzNmZmRiZTg2MWYyOTA0Y2YyMDIyMzVk
NDNlODFkY2ZmLi4xMGViMzNjOTRmOThiN2RjYTM2NzUxYzZmODhmMTY5ODE2NTk5MGY4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNl
dC5oCkBAIC0zOSw5ICszOSw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRkVPZmZzZXQoZmxv
YXQgZHgsIGZsb2F0IGR5KTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
Y29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVj
dChjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBG
bG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBib29s
IHJlc3VsdElzQWxwaGFJbWFnZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgcmVzdWx0SXNB
bHBoYUltYWdlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdEFwcGxpZXI+IGNyZWF0ZUFwcGxp
ZXIoY29uc3QgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAppbmRleCAyYWQ5N2IzMjdi
ZDllYzEyZDU3NzVlODZmMzllMDI3NGJmM2U0NzM4Li4xMWI0MDM1YzZhODRhOGY5M2VhNzgwNWIz
N2UxYmIzZjViN2I3OWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiRkVU
aWxlLmgiCiAKICNpbmNsdWRlICJGRVRpbGVTb2Z0d2FyZUFwcGxpZXIuaCIKKyNpbmNsdWRlICJG
aWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTM3LDkgKzM4LDE0IEBAIEZFVGlsZTo6RkVUaWxlKCkKIHsKIH0KIAotYm9v
bCBGRVRpbGU6OnJlc3VsdElzQWxwaGFJbWFnZSgpIGNvbnN0CitGbG9hdFJlY3QgRkVUaWxlOjpj
YWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYWdl
VmVjdG9yJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGlucHV0RWZmZWN0KDApLT5yZXN1bHRJc0FscGhhSW1hZ2UoKTsKKyAgICByZXR1
cm4gZmlsdGVyLm1heEVmZmVjdFJlY3QocHJpbWl0aXZlU3VicmVnaW9uKTsKK30KKworYm9vbCBG
RVRpbGU6OnJlc3VsdElzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRz
KSBjb25zdAoreworICAgIHJldHVybiBpbnB1dHNbMF0tPmlzQWxwaGFJbWFnZSgpOwogfQogCiBz
dGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4gRkVUaWxlOjpjcmVhdGVBcHBsaWVy
KGNvbnN0IEZpbHRlciYpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVRpbGUuaAppbmRleCAyZWUzNzMxMjhmY2E0ZjU2MTRmZTNhZWQ4NDJm
N2I3YTk4NTkzYjRmLi5mYjI2NTNhZjgyM2U3M2VmYTJhYTk1NjhkNmI2NTE4Y2ZmNmM5MDRhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGls
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxl
LmgKQEAgLTMzLDkgKzMzLDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRVRpbGUoKTsKIAot
ICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJp
ZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3Qo
KSkpOyB9CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImLCBj
b25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2
ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBib29sIHJlc3VsdElzQWxwaGFJbWFn
ZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgcmVzdWx0SXNBbHBoYUltYWdlKGNvbnN0IEZp
bHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgc3RkOjp1bmlx
dWVfcHRyPEZpbHRlckVmZmVjdEFwcGxpZXI+IGNyZWF0ZUFwcGxpZXIoY29uc3QgRmlsdGVyJikg
Y29uc3Qgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAppbmRleCBhYzZhNDQ5ZmVjYWZiNzhh
MDQyM2RmMTdjYjQzNWY0NGQxNGU1OWMzLi40YjQzZmU5NGZkMzA3NTA5Nzg1OGZlYzZlMjlkNjE1
NWRjNzQ5OWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVk
ZSAiRkVUdXJidWxlbmNlLmgiCiAKICNpbmNsdWRlICJGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxp
ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFt
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTk1LDYgKzk2LDExIEBAIGJvb2wgRkVUdXJi
dWxlbmNlOjpzZXRTdGl0Y2hUaWxlcyhib29sIHN0aXRjaCkKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorRmxvYXRSZWN0IEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRl
ciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJp
bWl0aXZlU3VicmVnaW9uKSBjb25zdAoreworICAgIHJldHVybiBmaWx0ZXIubWF4RWZmZWN0UmVj
dChwcmltaXRpdmVTdWJyZWdpb24pOworfQorCiBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0
QXBwbGllcj4gRkVUdXJidWxlbmNlOjpjcmVhdGVBcHBsaWVyKGNvbnN0IEZpbHRlciYpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIEZpbHRlckVmZmVjdEFwcGxpZXI6OmNyZWF0ZTxGRVR1cmJ1bGVuY2VT
b2Z0d2FyZUFwcGxpZXI+KCp0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCmluZGV4IDVmZmFkZGVjMjFiMWVm
Yjg3NGY5YjYyNjI4OWFlZmNjNDczOWRlNGUuLjE3NWZmZjc0MjgyNmZjYWMyMmNkZjNiODM2ZDJj
OWI5NzA4MDEwOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaApAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIEZFVHVyYnVsZW5jZShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFzZUZyZXF1
ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwg
Ym9vbCBzdGl0Y2hUaWxlcyk7CiAKLSAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5n
SW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFn
ZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29u
c3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
c3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdEFwcGxpZXI+IGNyZWF0ZUFwcGxpZXIoY29uc3Qg
RmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNwcAppbmRleCAwZWUxMmNiZDY4ODZlNzFmM2Fm
ODgwZWUyZDQzN2UxMDgyMzA3Mjg5Li44M2NmYjE2ZmZhNWMxZWQzZjA0NWU3Y2M3NDY5MjM5YTVk
MzAyMzg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXIuY3BwCkBAIC0zMCwyMiArMzAsNTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1GaWx0ZXI6OkZpbHRlcihGaWx0ZXI6OlR5cGUgZmlsdGVyVHlwZSwgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlKQorRmlsdGVyOjpG
aWx0ZXIoRmlsdGVyOjpUeXBlIGZpbHRlclR5cGUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9k
ZSwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgQ2xpcE9wZXJhdGlvbiBjbGlwT3BlcmF0
aW9uKQogICAgIDogRmlsdGVyRnVuY3Rpb24oZmlsdGVyVHlwZSkKICAgICAsIG1fcmVuZGVyaW5n
TW9kZShyZW5kZXJpbmdNb2RlKQogICAgICwgbV9maWx0ZXJTY2FsZShmaWx0ZXJTY2FsZSkKKyAg
ICAsIG1fY2xpcE9wZXJhdGlvbihjbGlwT3BlcmF0aW9uKQogewogfQogCi1GaWx0ZXI6OkZpbHRl
cihGaWx0ZXI6OlR5cGUgZmlsdGVyVHlwZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBj
b25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdl
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24pCitGaWx0ZXI6OkZpbHRlcihGaWx0
ZXI6OlR5cGUgZmlsdGVyVHlwZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBG
bG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIENsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlv
bikKICAgICA6IEZpbHRlckZ1bmN0aW9uKGZpbHRlclR5cGUpCiAgICAgLCBtX3JlbmRlcmluZ01v
ZGUocmVuZGVyaW5nTW9kZSkKICAgICAsIG1fZmlsdGVyU2NhbGUoZmlsdGVyU2NhbGUpCiAgICAg
LCBtX3NvdXJjZUltYWdlUmVjdChzb3VyY2VJbWFnZVJlY3QpCiAgICAgLCBtX2ZpbHRlclJlZ2lv
bihmaWx0ZXJSZWdpb24pCisgICAgLCBtX2NsaXBPcGVyYXRpb24oY2xpcE9wZXJhdGlvbikKIHsK
IH0KIAorRmxvYXRQb2ludCBGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyU2NhbGUoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBvaW50LnNjYWxlZChtX2ZpbHRlclNj
YWxlLndpZHRoKCksIG1fZmlsdGVyU2NhbGUuaGVpZ2h0KCkpOworfQorCitGbG9hdFNpemUgRmls
dGVyOjpzY2FsZWRCeUZpbHRlclNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgY29uc3QKK3sK
KyAgICByZXR1cm4gc2l6ZSAqIG1fZmlsdGVyU2NhbGU7Cit9CisKK0Zsb2F0UmVjdCBGaWx0ZXI6
OnNjYWxlZEJ5RmlsdGVyU2NhbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAoreworICAg
IGF1dG8gc2NhbGVkUmVjdCA9IHJlY3Q7CisgICAgc2NhbGVkUmVjdC5zY2FsZShtX2ZpbHRlclNj
YWxlKTsKKyAgICByZXR1cm4gc2NhbGVkUmVjdDsKK30KKworRmxvYXRSZWN0IEZpbHRlcjo6bWF4
RWZmZWN0UmVjdChjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKK3sK
KyAgICByZXR1cm4gaW50ZXJzZWN0aW9uKHByaW1pdGl2ZVN1YnJlZ2lvbiwgbV9maWx0ZXJSZWdp
b24pOworfQorCitGbG9hdFJlY3QgRmlsdGVyOjpjbGlwVG9NYXhFZmZlY3RSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikg
Y29uc3QKK3sKKyAgICBhdXRvIG1heEVmZmVjdFJlY3QgPSB0aGlzLT5tYXhFZmZlY3RSZWN0KHBy
aW1pdGl2ZVN1YnJlZ2lvbik7CisgICAgcmV0dXJuIG1fY2xpcE9wZXJhdGlvbiA9PSBDbGlwT3Bl
cmF0aW9uOjpJbnRlcnNlY3QgPyBpbnRlcnNlY3Rpb24oaW1hZ2VSZWN0LCBtYXhFZmZlY3RSZWN0
KSA6IHVuaW9uUmVjdChpbWFnZVJlY3QsIG1heEVmZmVjdFJlY3QpOworfQorCiBSZWZQdHI8Rmls
dGVySW1hZ2U+IEZpbHRlcjo6YXBwbHkoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlKQogewogICAg
IHNldFNvdXJjZUltYWdlKHNvdXJjZUltYWdlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCmluZGV4IGJjOWI5NGQ2NTM5ODlkZWFhYzNm
NjQyZjFmMzc0YTc1YzVmN2QzNjIuLjFjZGUzOTM0YjU3MzQ1YzMwMGM1NGU1YjhlMjdjODdlN2Rk
YmQxNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXIuaApAQCAtMzUsNiArMzUsOCBAQCBjbGFzcyBGaWx0ZXIgOiBwdWJsaWMgRmlsdGVy
RnVuY3Rpb24gewogICAgIHVzaW5nIEZpbHRlckZ1bmN0aW9uOjphcHBseTsKIAogcHVibGljOgor
ICAgIGVudW0gY2xhc3MgQ2xpcE9wZXJhdGlvbiB7IEludGVyc2VjdCwgVW5pdGUgfTsKKwogICAg
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5n
TW9kZTsgfQogICAgIHZvaWQgc2V0UmVuZGVyaW5nTW9kZShSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUpIHsgbV9yZW5kZXJpbmdNb2RlID0gcmVuZGVyaW5nTW9kZTsgfQogICAgIApAQCAtNTAs
MTQgKzUyLDIzIEBAIHB1YmxpYzoKICAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UoKSBjb25z
dCB7IHJldHVybiBtX3NvdXJjZUltYWdlLmdldCgpOyB9CiAgICAgdm9pZCBzZXRTb3VyY2VJbWFn
ZShSZWZQdHI8SW1hZ2VCdWZmZXI+JiYgc291cmNlSW1hZ2UpIHsgbV9zb3VyY2VJbWFnZSA9IFdU
Rk1vdmUoc291cmNlSW1hZ2UpOyB9CiAKLSAgICB2aXJ0dWFsIEZsb2F0U2l6ZSBzY2FsZWRCeUZp
bHRlclNjYWxlKEZsb2F0U2l6ZSBzaXplKSBjb25zdCB7IHJldHVybiBzaXplICogbV9maWx0ZXJT
Y2FsZTsgfQorICAgIENsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fY2xpcE9wZXJhdGlvbjsgfQorCisgICAgdmlydHVhbCBGbG9hdFNpemUgcmVzb2x2ZWRTaXpl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgY29uc3QgeyByZXR1cm4gc2l6ZTsgfQorCisgICAgRmxv
YXRQb2ludCBzY2FsZWRCeUZpbHRlclNjYWxlKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAg
ICBGbG9hdFNpemUgc2NhbGVkQnlGaWx0ZXJTY2FsZShjb25zdCBGbG9hdFNpemUmKSBjb25zdDsK
KyAgICBGbG9hdFJlY3Qgc2NhbGVkQnlGaWx0ZXJTY2FsZShjb25zdCBGbG9hdFJlY3QmKSBjb25z
dDsKKworICAgIEZsb2F0UmVjdCBtYXhFZmZlY3RSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0
aXZlU3VicmVnaW9uKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgY2xpcFRvTWF4RWZmZWN0UmVjdChj
b25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJy
ZWdpb24pIGNvbnN0OwogCiAgICAgdmlydHVhbCBSZWZQdHI8RmlsdGVySW1hZ2U+IGFwcGx5KCkg
PSAwOwogICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxGaWx0ZXJJbWFnZT4gYXBwbHkoSW1hZ2VC
dWZmZXIqIHNvdXJjZUltYWdlKTsKIAogcHJvdGVjdGVkOgotICAgIEZpbHRlcihGaWx0ZXI6OlR5
cGUsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUpOwotICAgIEZp
bHRlcihGaWx0ZXI6OlR5cGUsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVy
U2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IGZpbHRlclJlZ2lvbik7CisgICAgRmlsdGVyKEZpbHRlcjo6VHlwZSwgUmVuZGVyaW5nTW9kZSwg
Y29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgQ2xpcE9wZXJhdGlvbiA9IENsaXBPcGVyYXRp
b246OkludGVyc2VjdCk7CisgICAgRmlsdGVyKEZpbHRlcjo6VHlwZSwgUmVuZGVyaW5nTW9kZSwg
Y29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFn
ZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBDbGlwT3BlcmF0aW9uID0gQ2xp
cE9wZXJhdGlvbjo6SW50ZXJzZWN0KTsKIAogcHJpdmF0ZToKICAgICBSZW5kZXJpbmdNb2RlIG1f
cmVuZGVyaW5nTW9kZTsKQEAgLTY3LDYgKzc4LDggQEAgcHJpdmF0ZToKICAgICBGbG9hdFJlY3Qg
bV9maWx0ZXJSZWdpb247CiAKICAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1fc291cmNlSW1hZ2U7
CisKKyAgICBDbGlwT3BlcmF0aW9uIG1fY2xpcE9wZXJhdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCAwOGQ4ZDM2YzA3MDkyMGFmMzkyMjFl
MzBhMTE1NjQ2NWY1ZTI4YTJlLi5lM2Q5NGY5ODlkZDM0MTg2NmUzMGZmYzIxZjhmYjI1MTMwNWYw
N2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0zNCwyOCArMzQsMTIgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi12b2lkIEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoY29uc3QgRmlsdGVyJikKK0Zsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OmNhbGN1bGF0ZUltYWdl
UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0
cywgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgbV9h
YnNvbHV0ZVBhaW50UmVjdCA9IEludFJlY3QoKTsKLSAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1f
aW5wdXRFZmZlY3RzKQotICAgICAgICBtX2Fic29sdXRlUGFpbnRSZWN0LnVuaXRlKGVmZmVjdC0+
YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgY2xpcEFic29sdXRlUGFpbnRSZWN0KCk7Ci19Ci0K
LXZvaWQgRmlsdGVyRWZmZWN0OjpjbGlwQWJzb2x1dGVQYWludFJlY3QoKQotewotICAgIC8vIEZp
bHRlcnMgaW4gU1ZHIGNsaXAgdG8gcHJpbWl0aXZlIHN1YnJlZ2lvbiwgd2hpbGUgQ1NTIGRvZXNu
J3QuCi0gICAgaWYgKG1fY2xpcHNUb0JvdW5kcykKLSAgICAgICAgbV9hYnNvbHV0ZVBhaW50UmVj
dC5pbnRlcnNlY3QoZW5jbG9zaW5nSW50UmVjdChtX21heEVmZmVjdFJlY3QpKTsKLSAgICBlbHNl
Ci0gICAgICAgIG1fYWJzb2x1dGVQYWludFJlY3QudW5pdGUoZW5jbG9zaW5nSW50UmVjdChtX21h
eEVmZmVjdFJlY3QpKTsKLX0KLQotRmxvYXRQb2ludCBGaWx0ZXJFZmZlY3Q6Om1hcFBvaW50RnJv
bVVzZXJTcGFjZVRvQnVmZmVyKEZsb2F0UG9pbnQgdXNlclNwYWNlUG9pbnQpIGNvbnN0Ci17Ci0g
ICAgRmxvYXRQb2ludCBhYnNvbHV0ZVBvaW50ID0gbWFwUG9pbnQodXNlclNwYWNlUG9pbnQsIG1f
ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uLCBtX2Fic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uKTsK
LSAgICBhYnNvbHV0ZVBvaW50Lm1vdmVCeSgtbV9hYnNvbHV0ZVBhaW50UmVjdC5sb2NhdGlvbigp
KTsKLSAgICByZXR1cm4gYWJzb2x1dGVQb2ludDsKKyAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0Owor
ICAgIGZvciAoYXV0byYgaW5wdXQgOiBpbnB1dHMpCisgICAgICAgIGltYWdlUmVjdC51bml0ZShp
bnB1dC0+aW1hZ2VSZWN0KCkpOworICAgIHJldHVybiBmaWx0ZXIuY2xpcFRvTWF4RWZmZWN0UmVj
dChpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKIEZsb2F0UmVjdCBGaWx0ZXJF
ZmZlY3Q6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGaWx0ZXImIGZp
bHRlcikKQEAgLTg5LDggKzczLDYgQEAgRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5l
RmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogCiAgICAgYXV0
byBhYnNvbHV0ZVN1YnJlZ2lvbiA9IHN1YnJlZ2lvbjsKICAgICBhYnNvbHV0ZVN1YnJlZ2lvbi5z
Y2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgLy8gU2F2ZSB0aGlzIGJlZm9yZSBjbGlw
cGluZyBzbyB3ZSBjYW4gdXNlIGl0IHRvIG1hcCBsaWdodGluZyBwb2ludHMgZnJvbSB1c2VyIHNw
YWNlIHRvIGJ1ZmZlciBjb29yZGluYXRlcy4KLSAgICBzZXRVbmNsaXBwZWRBYnNvbHV0ZVN1YnJl
Z2lvbihhYnNvbHV0ZVN1YnJlZ2lvbik7CiAKICAgICAvLyBDbGlwIGV2ZXJ5IGZpbHRlciBlZmZl
Y3QgdG8gdGhlIGZpbHRlciByZWdpb24uCiAgICAgYXV0byBhYnNvbHV0ZVNjYWxlZEZpbHRlclJl
Z2lvbiA9IGZpbHRlci5maWx0ZXJSZWdpb24oKTsKQEAgLTEyMSwyNiArMTAzLDIyIEBAIGJvb2wg
RmlsdGVyRWZmZWN0OjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICAgICAgdHJhbnNm
b3JtUmVzdWx0Q29sb3JTcGFjZShpbiwgaSk7CiAgICAgfQogCi0gICAgZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QoZmlsdGVyKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJl
YW0KLSAgICAgICAgPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwg
dGhpcyA8PCAiIGFwcGx5KCk6IgotICAgICAgICA8PCAiXG4gIGZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbiAiIDw8IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uCi0gICAgICAgIDw8ICJcbiAgZWZm
ZWN0Qm91bmRhcmllcyAiIDw8IG1fZWZmZWN0Qm91bmRhcmllcwotICAgICAgICA8PCAiXG4gIGFi
c29sdXRlVW5jbGlwcGVkU3VicmVnaW9uICIgPDwgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lv
bgotICAgICAgICA8PCAiXG4gIGFic29sdXRlUGFpbnRSZWN0ICIgPDwgbV9hYnNvbHV0ZVBhaW50
UmVjdAotICAgICAgICA8PCAiXG4gIG1heEVmZmVjdFJlY3QgIiA8PCBtX21heEVmZmVjdFJlY3QK
LSAgICAgICAgPDwgIlxuICBmaWx0ZXIgc2NhbGUgIiA8PCBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7
Ci0KLSAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6
OnNpemVOZWVkc0NsYW1waW5nKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCiAgICAgaWYgKCFtYXlQcm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQ
aXhlbHMoKSkgewogICAgICAgICBmb3IgKGF1dG8mIGluIDogbV9pbnB1dEVmZmVjdHMpCiAgICAg
ICAgICAgICBpbi0+Y29ycmVjdFByZW11bHRpcGxpZWRSZXN1bHRJZk5lZWRlZCgpOwogICAgIH0K
IAotICAgIG1fZmlsdGVySW1hZ2UgPSBGaWx0ZXJJbWFnZTo6Y3JlYXRlKG1fZmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uLCBtX2Fic29sdXRlUGFpbnRSZWN0LCByZXN1bHRJc0FscGhhSW1hZ2UoKSwg
ZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgcmVzdWx0Q29sb3JTcGFjZSgpKTsKKyAgICBhdXRvIGlu
cHV0RmlsdGVySW1hZ2VzID0gdGhpcy0+aW5wdXRGaWx0ZXJJbWFnZXMoKTsKKyAgICBhdXRvIGlt
YWdlUmVjdCA9IGNhbGN1bGF0ZUltYWdlUmVjdChmaWx0ZXIsIGlucHV0RmlsdGVySW1hZ2VzLCBt
X2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbik7CisgICAgYXV0byBhYnNvbHV0ZUltYWdlUmVjdCA9
IGVuY2xvc2luZ0ludFJlY3QoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoaW1hZ2VSZWN0KSk7
CisKKyAgICBpZiAoYWJzb2x1dGVJbWFnZVJlY3QuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpz
aXplTmVlZHNDbGFtcGluZyhhYnNvbHV0ZUltYWdlUmVjdC5zaXplKCkpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgYXV0byBpc0FscGhhSW1hZ2UgPSByZXN1bHRJc0FscGhhSW1h
Z2UoaW5wdXRGaWx0ZXJJbWFnZXMpOworICAgIGF1dG8gaW1hZ2VDb2xvclNwYWNlID0gcmVzdWx0
Q29sb3JTcGFjZSgpOworCisgICAgbV9maWx0ZXJJbWFnZSA9IEZpbHRlckltYWdlOjpjcmVhdGUo
bV9maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24sIGltYWdlUmVjdCwgYWJzb2x1dGVJbWFnZVJlY3Qs
IGlzQWxwaGFJbWFnZSwgZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgaW1hZ2VDb2xvclNwYWNlKTsK
ICAgICBpZiAoIW1fZmlsdGVySW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTQ4
LDcgKzEyNiwxNSBAQCBib29sIEZpbHRlckVmZmVjdDo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0
ZXIpCiAgICAgaWYgKCFhcHBsaWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1
cm4gYXBwbGllci0+YXBwbHkoZmlsdGVyLCBpbnB1dEZpbHRlckltYWdlcygpLCAqbV9maWx0ZXJJ
bWFnZSk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbQorICAgICAgICA8PCAi
RmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgYXBwbHko
KToiCisgICAgICAgIDw8ICJcbiAgZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uICIgPDwgbV9maWx0
ZXJQcmltaXRpdmVTdWJyZWdpb24KKyAgICAgICAgPDwgIlxuICBlZmZlY3RCb3VuZGFyaWVzICIg
PDwgbV9lZmZlY3RCb3VuZGFyaWVzCisgICAgICAgIDw8ICJcbiAgYWJzb2x1dGVQYWludFJlY3Qg
IiA8PCBhYnNvbHV0ZUltYWdlUmVjdAorICAgICAgICA8PCAiXG4gIG1heEVmZmVjdFJlY3QgIiA8
PCBtX21heEVmZmVjdFJlY3QKKyAgICAgICAgPDwgIlxuICBmaWx0ZXIgc2NhbGUgIiA8PCBmaWx0
ZXIuZmlsdGVyU2NhbGUoKSk7CisKKyAgICByZXR1cm4gYXBwbGllci0+YXBwbHkoZmlsdGVyLCBp
bnB1dEZpbHRlckltYWdlcywgKm1fZmlsdGVySW1hZ2UpOwogfQogCiB2b2lkIEZpbHRlckVmZmVj
dDo6Y2xlYXJSZXN1bHQoKQpAQCAtMTk2LDcgKzE4Miw2IEBAIFRleHRTdHJlYW0mIEZpbHRlckVm
ZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRp
b25UCiAgICAgCiAgICAgaWYgKHJlcHJlc2VudGF0aW9uVHlwZSA9PSBSZXByZXNlbnRhdGlvblR5
cGU6OkRlYnVnZ2luZykgewogICAgICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRT
Y29wZSh0cyk7Ci0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiYWxwaGEgaW1hZ2UiLCByZXN1bHRJ
c0FscGhhSW1hZ2UoKSk7CiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgib3BlcmF0aW5nIGNvbG9y
c3BhY2UiLCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwogICAgICAgICB0cy5kdW1wUHJvcGVydHko
InJlc3VsdCBjb2xvcnNwYWNlIiwgcmVzdWx0Q29sb3JTcGFjZSgpKTsKICAgICAgICAgdHMgPDwg
IlxuIiA8PCBpbmRlbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAppbmRleCBlMmJkMWU4M2U5YzAxYTJhYTdlYTRi
ZTIyMWI2NjEyZDhjODBkNjM5Li5lODNhNDQ5ZTViNTFmMTQyMmZmMWFmZGFkYzExMGVmNmY5OTA2
ZDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckVmZmVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmgKQEAgLTU4LDkgKzU4LDYgQEAgcHVibGljOgogICAgIC8vIFJl
Y3Vyc2VzIG9uIGlucHV0cy4KICAgICBGbG9hdFJlY3QgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uKGNvbnN0IEZpbHRlciYpOwogCi0gICAgSW50UmVjdCBhYnNvbHV0ZVBhaW50UmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fYWJzb2x1dGVQYWludFJlY3Q7IH0KLSAgICB2b2lkIHNldEFi
c29sdXRlUGFpbnRSZWN0KGNvbnN0IEludFJlY3QmIGFic29sdXRlUGFpbnRSZWN0KSB7IG1fYWJz
b2x1dGVQYWludFJlY3QgPSBhYnNvbHV0ZVBhaW50UmVjdDsgfQotCiAgICAgRmxvYXRSZWN0IG1h
eEVmZmVjdFJlY3QoKSBjb25zdCB7IHJldHVybiBtX21heEVmZmVjdFJlY3Q7IH0KICAgICB2b2lk
IHNldE1heEVmZmVjdFJlY3QoY29uc3QgRmxvYXRSZWN0JiBtYXhFZmZlY3RSZWN0KSB7IG1fbWF4
RWZmZWN0UmVjdCA9IG1heEVmZmVjdFJlY3Q7IH0KIApAQCAtNzEsOCArNjgsNiBAQCBwdWJsaWM6
CiAgICAgLy8gT25seSB0aGUgYXJpdGhtZXRpYyBjb21wb3NpdGUgZmlsdGVyIGV2ZXIgbmVlZHMg
dG8gcGVyZm9ybSBjb3JyZWN0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBjb3JyZWN0RmlsdGVyUmVz
dWx0SWZOZWVkZWQoKSB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdChjb25zdCBGaWx0ZXImKTsKLQogICAgIGVudW0gY2xhc3MgUmVwcmVzZW50YXRpb25U
eXBlIHsgVGVzdE91dHB1dCwgRGVidWdnaW5nIH07CiAgICAgdmlydHVhbCBXVEY6OlRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRp
b25UeXBlID0gUmVwcmVzZW50YXRpb25UeXBlOjpUZXN0T3V0cHV0KSBjb25zdDsKIApAQCAtOTYs
MTggKzkxLDEzIEBAIHB1YmxpYzoKICAgICBGbG9hdFJlY3QgZWZmZWN0Qm91bmRhcmllcygpIGNv
bnN0IHsgcmV0dXJuIG1fZWZmZWN0Qm91bmRhcmllczsgfQogICAgIHZvaWQgc2V0RWZmZWN0Qm91
bmRhcmllcyhjb25zdCBGbG9hdFJlY3QmIGVmZmVjdEJvdW5kYXJpZXMpIHsgbV9lZmZlY3RCb3Vu
ZGFyaWVzID0gZWZmZWN0Qm91bmRhcmllczsgfQogICAgIAotICAgIHZvaWQgc2V0VW5jbGlwcGVk
QWJzb2x1dGVTdWJyZWdpb24oY29uc3QgRmxvYXRSZWN0JiByKSB7IG1fYWJzb2x1dGVVbmNsaXBw
ZWRTdWJyZWdpb24gPSByOyB9Ci0gICAgCi0gICAgRmxvYXRQb2ludCBtYXBQb2ludEZyb21Vc2Vy
U3BhY2VUb0J1ZmZlcihGbG9hdFBvaW50KSBjb25zdDsKLSAgICAKLSAgICBib29sIGNsaXBzVG9C
b3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2NsaXBzVG9Cb3VuZHM7IH0KLSAgICB2b2lkIHNldENs
aXBzVG9Cb3VuZHMoYm9vbCB2YWx1ZSkgeyBtX2NsaXBzVG9Cb3VuZHMgPSB2YWx1ZTsgfQorICAg
IHZpcnR1YWwgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImLCBjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1
YnJlZ2lvbikgY29uc3Q7CiAKICAgICBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIG9wZXJh
dGluZ0NvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdGluZ0NvbG9yU3BhY2U7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpIHsgbV9vcGVyYXRpbmdDb2xvclNwYWNlID0gY29sb3JT
cGFjZTsgfQogCiAgICAgLy8gU29saWQgYmxhY2sgaW1hZ2Ugd2l0aCBkaWZmZXJlbnQgYWxwaGEg
dmFsdWVzLgotICAgIHZpcnR1YWwgYm9vbCByZXN1bHRJc0FscGhhSW1hZ2UoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCByZXN1bHRJc0FscGhhSW1hZ2UoY29uc3Qg
RmlsdGVySW1hZ2VWZWN0b3ImKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwg
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiByZXN1bHRDb2xvclNwYWNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNwYWNlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNm
b3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqIGluLCBjb25zdCBpbnQpIHsgaW4tPnRy
YW5zZm9ybVJlc3VsdENvbG9yU3BhY2UobV9vcGVyYXRpbmdDb2xvclNwYWNlKTsgfQpAQCAtMTIw
LDE1ICsxMTAsMTEgQEAgcHJvdGVjdGVkOgogICAgIAogICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVf
cHRyPEZpbHRlckVmZmVjdEFwcGxpZXI+IGNyZWF0ZUFwcGxpZXIoY29uc3QgRmlsdGVyJikgY29u
c3QgPSAwOwogCi0gICAgdm9pZCBjbGlwQWJzb2x1dGVQYWludFJlY3QoKTsKLQogcHJpdmF0ZToK
ICAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9pbnB1dEVmZmVjdHM7CiAKICAgICBSZWZQdHI8Rmls
dGVySW1hZ2U+IG1fZmlsdGVySW1hZ2U7CiAKLSAgICBJbnRSZWN0IG1fYWJzb2x1dGVQYWludFJl
Y3Q7Ci0gICAgCiAgICAgLy8gVGhlIG1heGltdW0gc2l6ZSBvZiBhIGZpbHRlciBwcmltaXRpdmUu
IEluIFNWRyB0aGlzIGlzIHRoZSBwcmltaXRpdmUgc3VicmVnaW9uIGluIGFic29sdXRlIGNvb3Jk
aW5hdGUgc3BhY2UuCiAgICAgLy8gVGhlIGFic29sdXRlIHBhaW50IHJlY3Qgc2hvdWxkIG5ldmVy
IGJlIGJpZ2dlciB0aGFuIG1fbWF4RWZmZWN0UmVjdC4KICAgICBGbG9hdFJlY3QgbV9tYXhFZmZl
Y3RSZWN0OwpAQCAtMTQxLDE3ICsxMjcsMTEgQEAgcHJpdmF0ZToKICAgICAvLyBmaWx0ZXIgcHJp
bWl0aXZlIG9uIGEgbGF0ZXIgc3RlcC4KICAgICBGbG9hdFJlY3QgbV9lZmZlY3RCb3VuZGFyaWVz
OwogICAgIAotICAgIC8vIGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiBtYXBwZWQgdG8gYWJzb2x1
dGUgY29vcmRpbmF0ZXMgYmVmb3JlIGNsaXBwaW5nLgotICAgIEZsb2F0UmVjdCBtX2Fic29sdXRl
VW5jbGlwcGVkU3VicmVnaW9uOwotCiAgICAgYm9vbCBtX2hhc1ggeyBmYWxzZSB9OwogICAgIGJv
b2wgbV9oYXNZIHsgZmFsc2UgfTsKICAgICBib29sIG1faGFzV2lkdGggeyBmYWxzZSB9OwogICAg
IGJvb2wgbV9oYXNIZWlnaHQgeyBmYWxzZSB9OwogCi0gICAgLy8gU2hvdWxkIHRoZSBlZmZlY3Qg
Y2xpcCB0byBpdHMgcHJpbWl0aXZlIHJlZ2lvbiwgb3IgZXhwYW5kIHRvIHVzZSB0aGUgY29tYmlu
ZWQgcmVnaW9uIG9mIGl0cyBpbnB1dHMuCi0gICAgYm9vbCBtX2NsaXBzVG9Cb3VuZHMgeyB0cnVl
IH07Ci0KICAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9vcGVyYXRpbmdDb2xvclNwYWNlIHsg
RGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKaW5k
ZXggM2E0ZmU5MDUzZDZkNzA1OTA2MDFhNzhjNTAyZjdiZGQxMTQ1ZmE5YS4uOTU4NGZhNjllZTBl
ZDJlZGU2NWFmZjliOWY5OTM1YmQ5NWZiNDgzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAKQEAgLTM4LDE0
ICszOCwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZlB0cjxGaWx0ZXJJbWFnZT4g
RmlsdGVySW1hZ2U6OmNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwg
Y29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFnZVJlY3QsIGJvb2wgaXNBbHBoYUltYWdlLCBSZW5k
ZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29s
b3JTcGFjZSkKK1JlZlB0cjxGaWx0ZXJJbWFnZT4gRmlsdGVySW1hZ2U6OmNyZWF0ZShjb25zdCBG
bG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3Qs
IGNvbnN0IEludFJlY3QmIGFic29sdXRlSW1hZ2VSZWN0LCBib29sIGlzQWxwaGFJbWFnZSwgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNv
bG9yU3BhY2UpCiB7CiAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmco
YWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpKSk7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWx0
ZXJJbWFnZShwcmltaXRpdmVTdWJyZWdpb24sIGFic29sdXRlSW1hZ2VSZWN0LCBpc0FscGhhSW1h
Z2UsIHJlbmRlcmluZ01vZGUsIGNvbG9yU3BhY2UpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEZpbHRlckltYWdlKHByaW1pdGl2ZVN1YnJlZ2lvbiwgaW1hZ2VSZWN0LCBhYnNvbHV0ZUltYWdl
UmVjdCwgaXNBbHBoYUltYWdlLCByZW5kZXJpbmdNb2RlLCBjb2xvclNwYWNlKSk7CiB9CiAKLUZp
bHRlckltYWdlOjpGaWx0ZXJJbWFnZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lv
biwgY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFnZVJlY3QsIGJvb2wgaXNBbHBoYUltYWdlLCBS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYg
Y29sb3JTcGFjZSkKK0ZpbHRlckltYWdlOjpGaWx0ZXJJbWFnZShjb25zdCBGbG9hdFJlY3QmIHBy
aW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEludFJl
Y3QmIGFic29sdXRlSW1hZ2VSZWN0LCBib29sIGlzQWxwaGFJbWFnZSwgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCiAg
ICAgOiBtX3ByaW1pdGl2ZVN1YnJlZ2lvbihwcmltaXRpdmVTdWJyZWdpb24pCisgICAgLCBtX2lt
YWdlUmVjdChpbWFnZVJlY3QpCiAgICAgLCBtX2Fic29sdXRlSW1hZ2VSZWN0KGFic29sdXRlSW1h
Z2VSZWN0KQogICAgICwgbV9pc0FscGhhSW1hZ2UoaXNBbHBoYUltYWdlKQogICAgICwgbV9yZW5k
ZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCkBAIC01NSw3ICs1Niw3IEBAIEZpbHRlckltYWdlOjpG
aWx0ZXJJbWFnZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgSW50
UmVjdCYgYWJzCiAKIEZsb2F0UmVjdCBGaWx0ZXJJbWFnZTo6bWF4RWZmZWN0UmVjdChjb25zdCBG
aWx0ZXImIGZpbHRlcikgY29uc3QKIHsKLSAgICByZXR1cm4gaW50ZXJzZWN0aW9uKG1fcHJpbWl0
aXZlU3VicmVnaW9uLCBmaWx0ZXIuZmlsdGVyUmVnaW9uKCkpOworICAgIHJldHVybiBmaWx0ZXIu
bWF4RWZmZWN0UmVjdChtX3ByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKIEludFJlY3QgRmlsdGVy
SW1hZ2U6OmFic29sdXRlSW1hZ2VSZWN0UmVsYXRpdmVUbyhjb25zdCBGaWx0ZXJJbWFnZSYgb3Jp
Z2luKSBjb25zdApAQCAtNjMsNiArNjQsMTEgQEAgSW50UmVjdCBGaWx0ZXJJbWFnZTo6YWJzb2x1
dGVJbWFnZVJlY3RSZWxhdGl2ZVRvKGNvbnN0IEZpbHRlckltYWdlJiBvcmlnaW4pIGNvbnMKICAg
ICByZXR1cm4gbV9hYnNvbHV0ZUltYWdlUmVjdCAtIG9yaWdpbi5hYnNvbHV0ZUltYWdlUmVjdCgp
LmxvY2F0aW9uKCk7CiB9CiAKK0Zsb2F0UG9pbnQgRmlsdGVySW1hZ2U6Om1hcHBlZEFic29sdXRl
UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIEZsb2F0
UG9pbnQocG9pbnQgLSBtX2Fic29sdXRlSW1hZ2VSZWN0LmxvY2F0aW9uKCkpOworfQorCiBJbWFn
ZUJ1ZmZlciogRmlsdGVySW1hZ2U6OmltYWdlQnVmZmVyKCkKIHsKICNpZiBVU0UoQ09SRV9JTUFH
RSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVySW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVySW1hZ2UuaAppbmRleCBjYWE5NWVjMjQ1OTUwMTU5NWU4NWJhMjE2YTZmNDhlZDc4NTRj
NDEwLi41Y2NkZDQ0YjA1OTE0OGYzOTE2MDk3NDE5NzljNTQwMWI5ZGI4ZjAyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFn
ZS5oCkBAIC00NCwxMyArNDQsMTcgQEAgY2xhc3MgSW1hZ2VCdWZmZXI7CiAKIGNsYXNzIEZpbHRl
ckltYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVySW1hZ2U+IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmUHRyPEZpbHRlckltYWdlPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRp
dmVTdWJyZWdpb24sIGNvbnN0IEludFJlY3QmIGFic29sdXRlSW1hZ2VSZWN0LCBib29sIGlzQWxw
aGFJbWFnZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7Cisg
ICAgc3RhdGljIFJlZlB0cjxGaWx0ZXJJbWFnZT4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcHJp
bWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3QgSW50UmVj
dCYgYWJzb2x1dGVJbWFnZVJlY3QsIGJvb2wgaXNBbHBoYUltYWdlLCBSZW5kZXJpbmdNb2RlLCBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKIAorICAgIC8vIFRoZSByZXR1cm4gdmFsdWVz
IGFyZSBpbiBmaWx0ZXIgY29vcmRpbmF0ZXMuCiAgICAgRmxvYXRSZWN0IHByaW1pdGl2ZVN1YnJl
Z2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWl0aXZlU3VicmVnaW9uOyB9CiAgICAgRmxvYXRS
ZWN0IG1heEVmZmVjdFJlY3QoY29uc3QgRmlsdGVyJikgY29uc3Q7CisgICAgRmxvYXRSZWN0IGlt
YWdlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VSZWN0OyB9CiAKKyAgICAvLyBUaGUgcmV0
dXJuIHZhbHVlcyBhcmUgaW4gdXNlci1zcGFjZSBjb29yZGluYXRlcy4KICAgICBJbnRSZWN0IGFi
c29sdXRlSW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZUltYWdlUmVjdDsgfQog
ICAgIEludFJlY3QgYWJzb2x1dGVJbWFnZVJlY3RSZWxhdGl2ZVRvKGNvbnN0IEZpbHRlckltYWdl
JiBvcmlnaW4pIGNvbnN0OworICAgIEZsb2F0UG9pbnQgbWFwcGVkQWJzb2x1dGVQb2ludChjb25z
dCBGbG9hdFBvaW50JikgY29uc3Q7CiAKICAgICBib29sIGlzQWxwaGFJbWFnZSgpIGNvbnN0IHsg
cmV0dXJuIG1faXNBbHBoYUltYWdlOyB9CiAgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdNb2RlOyB9CkBAIC03MSw3ICs3NSw3IEBAIHB1
YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIEZpbHRlckltYWdlKGNvbnN0IEZsb2F0UmVj
dCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBJbnRSZWN0JiBhYnNvbHV0ZUltYWdlUmVjdCwg
Ym9vbCBpc0FscGhhSW1hZ2UsIFJlbmRlcmluZ01vZGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSYpOworICAgIEZpbHRlckltYWdlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVn
aW9uLCBjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJ
bWFnZVJlY3QsIGJvb2wgaXNBbHBoYUltYWdlLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmKTsKIAogICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBwaXhl
bEJ1ZmZlclNsb3QoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CiAKQEAgLTg0LDYgKzg4LDcgQEAg
cHJpdmF0ZToKICAgICBib29sIHJlcXVpcmVzUGl4ZWxCdWZmZXJDb2xvclNwYWNlQ29udmVyc2lv
bihzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4pIGNvbnN0OwogCiAgICAgRmxv
YXRSZWN0IG1fcHJpbWl0aXZlU3VicmVnaW9uOworICAgIEZsb2F0UmVjdCBtX2ltYWdlUmVjdDsK
ICAgICBJbnRSZWN0IG1fYWJzb2x1dGVJbWFnZVJlY3Q7CiAKICAgICBib29sIG1faXNBbHBoYUlt
YWdlIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaAppbmRleCA4ZGI4ZTU2NTk3YmFiZWM4Njg2MTY4M2Zm
OGUwNTgyODhjNzEyNmY4Li41ZWQyN2FiMmVlMGY3Mzc3N2Y3YmViYThkZTdlN2JjODI5N2Q3N2Y0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xp
Z2h0U291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9MaWdodFNvdXJjZS5oCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBT
ZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAxMCBab2x0YW4gSGVy
Y3plZyA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zOCw3ICsz
OSw4IEBAIGVudW0gTGlnaHRUeXBlIHsKICAgICBMU19TUE9UCiB9OwogCi1jbGFzcyBGaWx0ZXJF
ZmZlY3Q7CitjbGFzcyBGaWx0ZXI7CitjbGFzcyBGaWx0ZXJJbWFnZTsKIAogY2xhc3MgTGlnaHRT
b3VyY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxMaWdodFNvdXJjZT4gewogcHVibGljOgpAQCAtNjUs
NyArNjcsNyBAQCBwdWJsaWM6CiAgICAgTGlnaHRUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBt
X3R5cGU7IH0KICAgICB2aXJ0dWFsIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihXVEY6OlRleHRTdHJlYW0mKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW5p
dFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyJiwgY29u
c3QgRmlsdGVySW1hZ2UmIHJlc3VsdCwgUGFpbnRpbmdEYXRhJikgY29uc3QgPSAwOwogICAgIC8v
IHogaXMgYSBmbG9hdCBudW1iZXIsIHNpbmNlIGl0IGlzIHRoZSBhbHBoYSB2YWx1ZSBzY2FsZWQg
YnkgYSB1c2VyCiAgICAgLy8gc3BlY2lmaWVkICJzdXJmYWNlU2NhbGUiIGNvbnN0YW50LCB3aGlj
aCB0eXBlIGlzIDxudW1iZXI+IGluIHRoZSBTVkcgc3RhbmRhcmQuCiAgICAgLy8geCBhbmQgeSBh
cmUgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBGaWx0ZXJFZmZlY3QncyBidWZmZXIuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGln
aHRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Q
b2ludExpZ2h0U291cmNlLmNwcAppbmRleCBjMmQ4NzQ5M2IyOGRlMzg2MTNlM2UyMDI4NGZmZTJm
ZjQyNWZlZTJkLi4wZTZjMmNiMTFiODMyYTQxNmQyZDIyMzViYTUwNGZhMzM3OTMxODEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGln
aHRTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKQEAgLTUsNiArNSw3IEBACiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqIENvcHlyaWdodCAoQykgMjAxMSBSZW5h
dGEgSG9kb3ZhbiA8cmVuaUB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMxLDE3ICszMiwyMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBv
aW50TGlnaHRTb3VyY2UuaCIKIAotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgorI2luY2x1ZGUg
IkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgUG9pbnRMaWdodFNv
dXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlckVmZmVjdCwg
UGFpbnRpbmdEYXRhJikgY29uc3QKK3ZvaWQgUG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5n
RGF0YShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2UmIHJlc3VsdCwgUGFp
bnRpbmdEYXRhJikgY29uc3QKIHsKLSAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFhZKGZpbHRlckVm
ZmVjdC5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihtX3VzZXJTcGFjZVBvc2l0aW9uLnh5
KCkpKTsKKyAgICBhdXRvIGFic29sdXRlUG9zaXRpb24gPSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJT
Y2FsZShtX3VzZXJTcGFjZVBvc2l0aW9uLnh5KCkpOworICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0
WFkocmVzdWx0Lm1hcHBlZEFic29sdXRlUG9pbnQoYWJzb2x1dGVQb3NpdGlvbikpOworCiAgICAg
Ly8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3NpdGlv
biBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4KLSAgICBGbG9hdFBvaW50IG1hcHBlZFogPSBmaWx0
ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFjZVBvc2l0
aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRpb24ueigpLCBtX3VzZXJTcGFjZVBvc2l0aW9uLnko
KSB9KTsKLSAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkgLSBtX2J1ZmZlclBv
c2l0aW9uLngoKSk7CisgICAgYXV0byBhYnNvbHV0ZU1hcHBlZFogPSBmaWx0ZXIuc2NhbGVkQnlG
aWx0ZXJTY2FsZShGbG9hdFBvaW50IHsgbV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBtX3VzZXJT
cGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3NpdGlvbi55KCkgfSk7CisgICAgbV9idWZm
ZXJQb3NpdGlvbi5zZXRaKHJlc3VsdC5tYXBwZWRBYnNvbHV0ZVBvaW50KGFic29sdXRlTWFwcGVk
WikueCgpIC0gbV9idWZmZXJQb3NpdGlvbi54KCkpOwogfQogCiBMaWdodFNvdXJjZTo6Q29tcHV0
ZWRMaWdodGluZ0RhdGEgUG9pbnRMaWdodFNvdXJjZTo6Y29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRh
KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IHop
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1BvaW50TGlnaHRTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCmluZGV4IDQyYzNkYzYxNzg4NTIyZWM3ODdjYWVl
MmFjMzRhOGUzMmY5ZGJkNGUuLjIzNTU5MTM4Yjg4NGIzZmU3MjBiN2RjOGYwMTc3YWM1ZjljZDJl
OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
UG9pbnRMaWdodFNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtk
ZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zOSw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICBib29s
IHNldFkoZmxvYXQpIG92ZXJyaWRlOwogICAgIGJvb2wgc2V0WihmbG9hdCkgb3ZlcnJpZGU7CiAK
LSAgICB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdE
YXRhJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZp
bHRlciYsIGNvbnN0IEZpbHRlckltYWdlJiByZXN1bHQsIFBhaW50aW5nRGF0YSYpIGNvbnN0IG92
ZXJyaWRlOwogICAgIENvbXB1dGVkTGlnaHRpbmdEYXRhIGNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0
YShjb25zdCBQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHopIGNvbnN0IGZpbmFs
OwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4
dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAppbmRleCA4NGY2N2NmNjgx
NGE0YTgxOGY2NDY3YzQ0ZmQ0MDU3NTFjYzEyODBjLi42MjA1MTQ2M2M3MWY1M2ZkODM4MTJhNzdh
MmYyYjhhNDhiZWEyYjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcApAQCAtMzksMTAgKzM5LDkgQEAgU291
cmNlQWxwaGE6OlNvdXJjZUFscGhhKEZpbHRlckVmZmVjdCYgc291cmNlRWZmZWN0KQogICAgIGlu
cHV0RWZmZWN0cygpLmFwcGVuZCgmc291cmNlRWZmZWN0KTsKIH0KIAotdm9pZCBTb3VyY2VBbHBo
YTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCitGbG9h
dFJlY3QgU291cmNlQWxwaGE6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImLCBjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGbG9hdFJlY3QmKSBjb25zdAogewot
ICAgIGlucHV0RWZmZWN0KDApLT5kZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChmaWx0ZXIpOwot
ICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKTsKKyAgICByZXR1cm4gaW5wdXRzWzBdLT5pbWFnZVJlY3QoKTsKIH0KIAogc3RkOjp1bmlx
dWVfcHRyPEZpbHRlckVmZmVjdEFwcGxpZXI+IFNvdXJjZUFscGhhOjpjcmVhdGVBcHBsaWVyKGNv
bnN0IEZpbHRlciYpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgKaW5kZXggOTNhMjQzOWUyODIyNjVhZjJmZTFi
MGY1OTVlNzg5ZDBkMDg0MjY0My4uMTA1NjE2N2UzY2Y5YWE2NDY2YzUzNzgzZDk0Mzk2NWVhMmMw
ZTFmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VBbHBoYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU291cmNlQWxwaGEuaApAQCAtMzMsNyArMzMsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIGV4cGxpY2l0IFNvdXJjZUFscGhhKEZpbHRlckVmZmVjdCYpOwogCi0gICAgdm9pZCBkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAgICBGbG9h
dFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdl
VmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RBcHBsaWVyPiBj
cmVhdGVBcHBsaWVyKGNvbnN0IEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFw
aGljLmNwcAppbmRleCBhOGU3MTY2OTllNTM4ZWQ3OWI5ZWE0YWY2YTNmZmFhYWNiZTBjMmI0Li44
ODZiNzcyYWFkYjAyNmFkMjFkOWFiNWUzN2M1OGY3Zjg5NGJiZWY3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhp
Yy5jcHAKQEAgLTQxLDEwICs0MSw5IEBAIFNvdXJjZUdyYXBoaWM6OlNvdXJjZUdyYXBoaWMoKQog
ewogfQogCi12b2lkIFNvdXJjZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNv
bnN0IEZpbHRlciYgZmlsdGVyKQorRmxvYXRSZWN0IFNvdXJjZUdyYXBoaWM6OmNhbGN1bGF0ZUlt
YWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImLCBj
b25zdCBGbG9hdFJlY3QmKSBjb25zdAogewotICAgIEZsb2F0UmVjdCBwYWludFJlY3QgPSBmaWx0
ZXIuc291cmNlSW1hZ2VSZWN0KCk7Ci0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5n
SW50UmVjdChwYWludFJlY3QpKTsKKyAgICByZXR1cm4gZmlsdGVyLnNvdXJjZUltYWdlUmVjdCgp
OwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4gU291cmNlR3JhcGhp
Yzo6Y3JlYXRlQXBwbGllcihjb25zdCBGaWx0ZXImIGZpbHRlcikgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGlj
LmgKaW5kZXggMDM3NDhhMTc2MDRmZDFlZWEwOGU4YzAxOTBhNmJmNWJlMjdmZTI5ZS4uYTczOGE3
ZDAyNmQ4OGZkZDQ4MWZmYTkwNzMwYWJmZTI1YTVjNjY3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKQEAg
LTM4LDcgKzM4LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHN1cHBvcnRzQ29yZUltYWdlUmVuZGVy
aW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogI2VuZGlmCiAKLSAgICB2b2lk
IGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOworICAg
IEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVy
SW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24p
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdEFwcGxp
ZXI+IGNyZWF0ZUFwcGxpZXIoY29uc3QgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0
U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3Bv
dExpZ2h0U291cmNlLmNwcAppbmRleCBlN2M3YzA0ZWRlZWQ4NzJlNzlhMjIzYmRhZDg2YTkxZWQz
M2YwMjJhLi5mNmI2MmRjMjYyNWY5ZjU1ZDMxMTEzOWVlNDVjYTUxNGIzYTYyZTU3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNv
dXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
cG90TGlnaHRTb3VyY2UuY3BwCkBAIC02LDYgKzYsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDEw
IFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0B3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDExIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVuYXRhIEhv
ZG92YW4gPHJlbmlAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMiwyOCArMzMsMzEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTcG90TGln
aHRTb3VyY2UuaCIKIAotI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgorI2luY2x1ZGUgIkZpbHRl
ci5oIgorI2luY2x1ZGUgIkZpbHRlckltYWdlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0
cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIHNwb3QtbGlnaHQgZWRnZSBkYXJr
ZW5pbmcgZGVwZW5kcyBvbiBhbiBhYnNvbHV0ZSB0cmVzaG9sZAogLy8gYWNjb3JkaW5nIHRvIHRo
ZSBTVkcgMS4xIFNFIGxpZ2h0IHJlZ3Jlc3Npb24gdGVzdHMKLXN0YXRpYyBjb25zdCBmbG9hdCBh
bnRpQWxpYXNUcmVzaG9sZCA9IDAuMDE2ZjsKK3N0YXRpYyBjb25zdCBmbG9hdCBhbnRpYWxpYXNU
aHJlc2hvbGQgPSAwLjAxNmY7CiAKLXZvaWQgU3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdE
YXRhKGNvbnN0IEZpbHRlckVmZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWludGluZ0RhdGEmIHBhaW50
aW5nRGF0YSkgY29uc3QKK3ZvaWQgU3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNv
bnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWFnZSYgcmVzdWx0LCBQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSkgY29uc3QKIHsKLSAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFhZKGZp
bHRlckVmZmVjdC5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihtX3VzZXJTcGFjZVBvc2l0
aW9uLnh5KCkpKTsKKyAgICBhdXRvIGFic29sdXRlUG9zaXRpb24gPSBmaWx0ZXIuc2NhbGVkQnlG
aWx0ZXJTY2FsZShtX3VzZXJTcGFjZVBvc2l0aW9uLnh5KCkpOworICAgIG1fYnVmZmVyUG9zaXRp
b24uc2V0WFkocmVzdWx0Lm1hcHBlZEFic29sdXRlUG9pbnQoYWJzb2x1dGVQb3NpdGlvbikpOwor
CiAgICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQ
b3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4KLSAgICBGbG9hdFBvaW50IG1hcHBlZFog
PSBmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIoeyBtX3VzZXJTcGFj
ZVBvc2l0aW9uLngoKSArIG1fdXNlclNwYWNlUG9zaXRpb24ueigpLCBtX3VzZXJTcGFjZVBvc2l0
aW9uLnkoKSB9KTsKLSAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFoobWFwcGVkWi54KCkgLSBtX2J1
ZmZlclBvc2l0aW9uLngoKSk7CisgICAgYXV0byBhYnNvbHV0ZU1hcHBlZFogPSBmaWx0ZXIuc2Nh
bGVkQnlGaWx0ZXJTY2FsZShGbG9hdFBvaW50IHsgbV91c2VyU3BhY2VQb3NpdGlvbi54KCkgKyBt
X3VzZXJTcGFjZVBvc2l0aW9uLnooKSwgbV91c2VyU3BhY2VQb3NpdGlvbi55KCkgfSk7CisgICAg
bV9idWZmZXJQb3NpdGlvbi5zZXRaKHJlc3VsdC5tYXBwZWRBYnNvbHV0ZVBvaW50KGFic29sdXRl
TWFwcGVkWikueCgpIC0gbV9idWZmZXJQb3NpdGlvbi54KCkpOwogICAgIAogICAgIHBhaW50aW5n
RGF0YS5kaXJlY3Rpb25WZWN0b3IgPSBtX3VzZXJTcGFjZVBvaW50c0F0IC0gbV91c2VyU3BhY2VQ
b3NpdGlvbjsKICAgICBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9yLm5vcm1hbGl6ZSgpOwog
CiAgICAgaWYgKCFtX2xpbWl0aW5nQ29uZUFuZ2xlKSB7CiAgICAgICAgIHBhaW50aW5nRGF0YS5j
b25lQ3V0T2ZmTGltaXQgPSAwLjBmOwotICAgICAgICBwYWludGluZ0RhdGEuY29uZUZ1bGxMaWdo
dCA9IC1hbnRpQWxpYXNUcmVzaG9sZDsKKyAgICAgICAgcGFpbnRpbmdEYXRhLmNvbmVGdWxsTGln
aHQgPSAtYW50aWFsaWFzVGhyZXNob2xkOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGZsb2F0IGxp
bWl0aW5nQ29uZUFuZ2xlID0gbV9saW1pdGluZ0NvbmVBbmdsZTsKICAgICAgICAgaWYgKGxpbWl0
aW5nQ29uZUFuZ2xlIDwgMC4wZikKQEAgLTYxLDcgKzY1LDcgQEAgdm9pZCBTcG90TGlnaHRTb3Vy
Y2U6OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiBmaWx0ZXJFZmZlY3QsIFBh
aW50aW4KICAgICAgICAgaWYgKGxpbWl0aW5nQ29uZUFuZ2xlID4gOTAuMGYpCiAgICAgICAgICAg
ICBsaW1pdGluZ0NvbmVBbmdsZSA9IDkwLjBmOwogICAgICAgICBwYWludGluZ0RhdGEuY29uZUN1
dE9mZkxpbWl0ID0gY29zZihkZWcycmFkKDE4MC4wZiAtIGxpbWl0aW5nQ29uZUFuZ2xlKSk7Ci0g
ICAgICAgIHBhaW50aW5nRGF0YS5jb25lRnVsbExpZ2h0ID0gcGFpbnRpbmdEYXRhLmNvbmVDdXRP
ZmZMaW1pdCAtIGFudGlBbGlhc1RyZXNob2xkOworICAgICAgICBwYWludGluZ0RhdGEuY29uZUZ1
bGxMaWdodCA9IHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQgLSBhbnRpYWxpYXNUaHJlc2hv
bGQ7CiAgICAgfQogCiAgICAgLy8gT3B0aW1pemF0aW9uIGZvciBjb21tb24gc3BlY3VsYXJFeHBv
bmVudCB2YWx1ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oCmluZGV4IDJlZGQ5MzA5OWQ5NzI4MmIwNmQ3
YzE5ZTc3MjdkNzVkNjQyZTljNTIuLmViYzYzNDk3YmMxOTA3ZGNmZjI3YjE4MGE2NGNhMmRiMzA2
MjY4NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU3BvdExpZ2h0U291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaApAQCAtMyw2ICszLDcgQEAKICAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTAsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgYm9v
bCBzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0KSBvdmVycmlkZTsKICAgICBib29sIHNldExpbWl0
aW5nQ29uZUFuZ2xlKGZsb2F0KSBvdmVycmlkZTsKIAotICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0
YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVySW1hZ2Um
IHJlc3VsdCwgUGFpbnRpbmdEYXRhJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgQ29tcHV0ZWRMaWdo
dGluZ0RhdGEgY29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKGNvbnN0IFBhaW50aW5nRGF0YSYsIGlu
dCB4LCBpbnQgeSwgZmxvYXQgeikgY29uc3QgZmluYWw7CiAKICAgICBXVEY6OlRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBT
b2Z0d2FyZUFwcGxpZXIuY3BwCmluZGV4IGFlMDI2ZTNmYmU1NDhlOTBmMzcyZDRjMzk2NDE5Nzgy
ZDIzYzViOWMuLjEyMTY0ZTM3OGMyOWEyM2ZiMDliNzU1OWQ3OGZlMWM0MmFlMDUzNTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEaXNwbGFjZW1lbnRNYXBTb2Z0
d2FyZUFwcGxpZXIuY3BwCkBAIC03NSwxMiArNzUsMTMgQEAgYm9vbCBGRURpc3BsYWNlbWVudE1h
cFNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRl
ckkKICAgICBBU1NFUlQoaW5wdXRQaXhlbEFycmF5Lmxlbmd0aCgpID09IGRpc3BsYWNlbWVudFBp
eGVsQXJyYXkubGVuZ3RoKCkpOwogCiAgICAgYXV0byBwYWludFNpemUgPSByZXN1bHQuYWJzb2x1
dGVJbWFnZVJlY3QoKS5zaXplKCk7Ci0gICAgYXV0byBzY2FsZSA9IGZpbHRlci5zY2FsZWRCeUZp
bHRlclNjYWxlKHsgbV9lZmZlY3Quc2NhbGUoKSwgbV9lZmZlY3Quc2NhbGUoKSB9KTsKKyAgICBh
dXRvIHNjYWxlID0gZmlsdGVyLnJlc29sdmVkU2l6ZSh7IG1fZWZmZWN0LnNjYWxlKCksIG1fZWZm
ZWN0LnNjYWxlKCkgfSk7CisgICAgYXV0byBhYnNvbHV0ZVNjYWxlID0gZmlsdGVyLnNjYWxlZEJ5
RmlsdGVyU2NhbGUoc2NhbGUpOwogCi0gICAgZmxvYXQgc2NhbGVGb3JDb2xvclggPSBzY2FsZS53
aWR0aCgpIC8gMjU1LjA7Ci0gICAgZmxvYXQgc2NhbGVGb3JDb2xvclkgPSBzY2FsZS5oZWlnaHQo
KSAvIDI1NS4wOwotICAgIGZsb2F0IHNjYWxlZE9mZnNldFggPSAwLjUgLSBzY2FsZS53aWR0aCgp
ICogMC41OwotICAgIGZsb2F0IHNjYWxlZE9mZnNldFkgPSAwLjUgLSBzY2FsZS5oZWlnaHQoKSAq
IDAuNTsKKyAgICBmbG9hdCBzY2FsZUZvckNvbG9yWCA9IGFic29sdXRlU2NhbGUud2lkdGgoKSAv
IDI1NS4wOworICAgIGZsb2F0IHNjYWxlRm9yQ29sb3JZID0gYWJzb2x1dGVTY2FsZS5oZWlnaHQo
KSAvIDI1NS4wOworICAgIGZsb2F0IHNjYWxlZE9mZnNldFggPSAwLjUgLSBhYnNvbHV0ZVNjYWxl
LndpZHRoKCkgKiAwLjU7CisgICAgZmxvYXQgc2NhbGVkT2Zmc2V0WSA9IDAuNSAtIGFic29sdXRl
U2NhbGUuaGVpZ2h0KCkgKiAwLjU7CiAgICAgCiAgICAgaW50IGRpc3BsYWNlbWVudENoYW5uZWxY
ID0geENoYW5uZWxJbmRleCgpOwogICAgIGludCBkaXNwbGFjZW1lbnRDaGFubmVsWSA9IHlDaGFu
bmVsSW5kZXgoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVEcm9wU2hhZG93
U29mdHdhcmVBcHBsaWVyLmNwcAppbmRleCA0MTFlYjQ4ZDBhMzhhMDIzODVmZTg0ZWZjZDdhZDU4
NzU0ZDk5ZjEyLi40NDdjODk1ZDE5ODQwNTczODcyOTNjOTdkNjAxOGY0ZjRiMDczNjM0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxp
ZXIuY3BwCkBAIC0zOCwxMiArMzgsMTUgQEAgYm9vbCBGRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWFnZVYKICAgICBp
ZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBGbG9hdFNpemUg
Ymx1clJhZGl1cyA9IDIgKiBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZWZmZWN0LnN0
ZERldmlhdGlvblgoKSwgbV9lZmZlY3Quc3RkRGV2aWF0aW9uWSgpIH0pOwotICAgIEZsb2F0U2l6
ZSBvZmZzZXQgPSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZWZmZWN0LmR4KCksIG1f
ZWZmZWN0LmR5KCkgfSk7CisgICAgYXV0byBzdGREZXZpYXRpb24gPSBmaWx0ZXIucmVzb2x2ZWRT
aXplKHsgbV9lZmZlY3Quc3RkRGV2aWF0aW9uWCgpLCBtX2VmZmVjdC5zdGREZXZpYXRpb25ZKCkg
fSk7CisgICAgYXV0byBibHVyUmFkaXVzID0gMiAqIGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxl
KHN0ZERldmlhdGlvbik7CisgICAgCisgICAgYXV0byBvZmZzZXQgPSBmaWx0ZXIucmVzb2x2ZWRT
aXplKHsgbV9lZmZlY3QuZHgoKSwgbV9lZmZlY3QuZHkoKSB9KTsKKyAgICBhdXRvIGFic29sdXRl
T2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUob2Zmc2V0KTsKIAogICAgIEZsb2F0
UmVjdCBpbnB1dEltYWdlUmVjdCA9IGlucHV0LmFic29sdXRlSW1hZ2VSZWN0UmVsYXRpdmVUbyhy
ZXN1bHQpOwogICAgIEZsb2F0UmVjdCBpbnB1dEltYWdlUmVjdFdpdGhPZmZzZXQoaW5wdXRJbWFn
ZVJlY3QpOwotICAgIGlucHV0SW1hZ2VSZWN0V2l0aE9mZnNldC5tb3ZlKG9mZnNldCk7CisgICAg
aW5wdXRJbWFnZVJlY3RXaXRoT2Zmc2V0Lm1vdmUoYWJzb2x1dGVPZmZzZXQpOwogCiAgICAgYXV0
byBpbnB1dEltYWdlID0gaW5wdXQuaW1hZ2VCdWZmZXIoKTsKICAgICBpZiAoIWlucHV0SW1hZ2Up
CkBAIC01NCw3ICs1Nyw3IEBAIGJvb2wgRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyOjphcHBs
eShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWCiAgICAgcmVzdWx0Q29u
dGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlucHV0SW1hZ2UsIGlucHV0SW1hZ2VSZWN0V2l0aE9mZnNl
dCk7CiAgICAgcmVzdWx0Q29udGV4dC5zZXRBbHBoYSgxKTsKIAotICAgIFNoYWRvd0JsdXIgY29u
dGV4dFNoYWRvdyhibHVyUmFkaXVzLCBvZmZzZXQsIG1fZWZmZWN0LnNoYWRvd0NvbG9yKCkpOwor
ICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhibHVyUmFkaXVzLCBhYnNvbHV0ZU9mZnNldCwg
bV9lZmZlY3Quc2hhZG93Q29sb3IoKSk7CiAKICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQg
eyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdC
QTgsIHJlc3VsdC5jb2xvclNwYWNlKCkgfTsKICAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9p
bnQoKSwgcmVzdWx0SW1hZ2UtPnRydW5jYXRlZExvZ2ljYWxTaXplKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0
aW5nU29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5jcHAKaW5kZXggY2Uw
YWNiODExNzdhYzM3OTc0ZGUzNGQ0ZGE3NzFiYWU1OTNkYzQzMy4uNzBmNTM0MDVhMjU2NWUxMzky
Njc3MmIxMzliMTk4MzNjYTI4YTliYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJl
L0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIuY3BwCkBAIC0xODcsNyArMTg3LDcgQEAgdm9pZCBG
RUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpzZXRQaXhlbEludGVybmFsKGludCBvZmZzZXQsIGNv
bnN0IExpZ2h0aW5nRGF0YSYKICAgICBmbG9hdCBsaWdodFN0cmVuZ3RoOwogICAgIGlmIChub3Jt
YWwyRFZlY3Rvci5pc1plcm8oKSkgewogICAgICAgICAvLyBOb3JtYWwgdmVjdG9yIGlzICgwLCAw
LCAxKS4gVGhpcyBpcyBhIHF1aXRlIGZyZXF1ZW50IGNhc2UuCi0gICAgICAgIGlmIChkYXRhLmVm
ZmVjdC0+ZmlsdGVyVHlwZSgpID09IEZpbHRlckVmZmVjdDo6VHlwZTo6RkVEaWZmdXNlTGlnaHRp
bmcpCisgICAgICAgIGlmIChkYXRhLmZpbHRlclR5cGUgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpG
RURpZmZ1c2VMaWdodGluZykKICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLmRpZmZ1
c2VDb25zdGFudCAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgLyBsaWdodGluZ0RhdGEu
bGlnaHRWZWN0b3JMZW5ndGg7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgRmxvYXRQb2lu
dDNEIGhhbGZ3YXlWZWN0b3IgPSB7CkBAIC0yMDksNyArMjA5LDcgQEAgdm9pZCBGRUxpZ2h0aW5n
U29mdHdhcmVBcHBsaWVyOjpzZXRQaXhlbEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0
aW5nRGF0YSYKICAgICAgICAgfTsKICAgICAgICAgZmxvYXQgbm9ybWFsVmVjdG9yTGVuZ3RoID0g
bm9ybWFsVmVjdG9yLmxlbmd0aCgpOwogCi0gICAgICAgIGlmIChkYXRhLmVmZmVjdC0+ZmlsdGVy
VHlwZSgpID09IEZpbHRlckVmZmVjdDo6VHlwZTo6RkVEaWZmdXNlTGlnaHRpbmcpCisgICAgICAg
IGlmIChkYXRhLmZpbHRlclR5cGUgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdo
dGluZykKICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLmRpZmZ1c2VDb25zdGFudCAq
IChub3JtYWxWZWN0b3IgKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IpIC8gKG5vcm1hbFZlY3Rv
ckxlbmd0aCAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aCk7CiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3IgPSB7CkBAIC0zMjksNyAr
MzI5LDcgQEAgdm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKGNv
bnN0IExpZ2h0aW5nRGF0YSYgZGF0YSkKICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGRhdGEubGln
aHRpbmdDb2xvci50b0NvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFjZSgqZGF0YS5vcGVyYXRpbmdD
b2xvclNwYWNlKTsKICAgICBwYWludGluZ0RhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YS5jb2xvclZl
Y3RvciA9IEZsb2F0UG9pbnQzRChyLCBnLCBiKTsKIAotICAgIGRhdGEubGlnaHRTb3VyY2UtPmlu
aXRQYWludGluZ0RhdGEoKmRhdGEuZWZmZWN0LCBwYWludGluZ0RhdGEpOworICAgIGRhdGEubGln
aHRTb3VyY2UtPmluaXRQYWludGluZ0RhdGEoKmRhdGEuZmlsdGVyLCAqZGF0YS5yZXN1bHQsIHBh
aW50aW5nRGF0YSk7CiAKICAgICAvLyBUb3AgbGVmdC4KICAgICBpbnQgb2Zmc2V0ID0gMDsKQEAg
LTM3Nyw3ICszNzcsNyBAQCB2b2lkIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxh
dGZvcm0oY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhKQogICAgIH0KIAogICAgIGludCBsYXN0UGl4
ZWwgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICogZGF0YS5oZWlnaHQ7Ci0gICAg
aWYgKGRhdGEuZWZmZWN0LT5maWx0ZXJUeXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURp
ZmZ1c2VMaWdodGluZykgeworICAgIGlmIChkYXRhLmZpbHRlclR5cGUgPT0gRmlsdGVyRWZmZWN0
OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZykgewogICAgICAgICBmb3IgKGludCBpID0gY0FscGhh
Q2hhbm5lbE9mZnNldDsgaSA8IGxhc3RQaXhlbDsgaSArPSBjUGl4ZWxTaXplKQogICAgICAgICAg
ICAgZGF0YS5waXhlbHMtPnNldChpLCBjT3BhcXVlQWxwaGEpOwogICAgIH0gZWxzZSB7CkBAIC0z
OTEsNyArMzkxLDcgQEAgdm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRm
b3JtKGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSkKICAgICB9CiB9CiAKLWJvb2wgRkVMaWdodGlu
Z1NvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVySW1hZ2VW
ZWN0b3ImIGlucHV0cywgRmlsdGVySW1hZ2UmIHJlc3VsdCkgY29uc3QKK2Jvb2wgRkVMaWdodGlu
Z1NvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRl
ckltYWdlVmVjdG9yJiBpbnB1dHMsIEZpbHRlckltYWdlJiByZXN1bHQpIGNvbnN0CiB7CiAgICAg
YXV0byYgaW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7CiAKQEAgLTQxNyw3ICs0MTcsOSBAQCBib29s
IEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZp
bHRlckltYWdlVmVjdG9yJiBpbgogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIExpZ2h0aW5n
RGF0YSBkYXRhOwotICAgIGRhdGEuZWZmZWN0ID0gJm1fZWZmZWN0OworICAgIGRhdGEuZmlsdGVy
ID0gJmZpbHRlcjsKKyAgICBkYXRhLnJlc3VsdCA9ICZyZXN1bHQ7CisgICAgZGF0YS5maWx0ZXJU
eXBlID0gbV9lZmZlY3QuZmlsdGVyVHlwZSgpOwogICAgIGRhdGEubGlnaHRpbmdDb2xvciA9IG1f
ZWZmZWN0LmxpZ2h0aW5nQ29sb3IoKTsKICAgICBkYXRhLnN1cmZhY2VTY2FsZSA9IG1fZWZmZWN0
LnN1cmZhY2VTY2FsZSgpIC8gMjU1LjBmOwogICAgIGRhdGEuZGlmZnVzZUNvbnN0YW50ID0gbV9l
ZmZlY3QuZGlmZnVzZUNvbnN0YW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVM
aWdodGluZ1NvZnR3YXJlQXBwbGllci5oCmluZGV4IDBiNDhhOTMzZDg2MGM0ZDYzYjcwYzIwYmRj
NmZhMjQ5NTU0NWI3ZTAuLmY0NDlkM2U3OWYzOGZhYzhlNDI0NDlmYThkNDJjYjc0ODdhMGM4MTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29m
dHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVMaWdodGluZ1NvZnR3YXJlQXBwbGll
ci5oCkBAIC05Myw3ICs5Myw5IEBAIHByaXZhdGU6CiAKICAgICBzdHJ1Y3QgTGlnaHRpbmdEYXRh
IHsKICAgICAgICAgLy8gVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgb25seSByZWFkLW9ubHkgKFNN
UCBzYWZlKSBkYXRhCi0gICAgICAgIGNvbnN0IEZFTGlnaHRpbmcqIGVmZmVjdDsKKyAgICAgICAg
Y29uc3QgRmlsdGVyKiBmaWx0ZXI7CisgICAgICAgIGNvbnN0IEZpbHRlckltYWdlKiByZXN1bHQ7
CisgICAgICAgIEZpbHRlckVmZmVjdDo6VHlwZSBmaWx0ZXJUeXBlOwogICAgICAgICBDb2xvciBs
aWdodGluZ0NvbG9yOwogICAgICAgICBmbG9hdCBzdXJmYWNlU2NhbGU7CiAgICAgICAgIGZsb2F0
IGRpZmZ1c2VDb25zdGFudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVNb3Jw
aG9sb2d5U29mdHdhcmVBcHBsaWVyLmNwcAppbmRleCAwOTExY2MwMDRjMWMzOTg0YjgwZWE4MTc3
ZTg2N2E2NWJiOGM3MjA0Li4yOWMxNWIyODA4YjMwODc4MTI4MTZmNDEzZDVkNGNmMGJlOWZiZjFm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nv
ZnR3YXJlL0ZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9GRU1vcnBob2xvZ3lTb2Z0d2Fy
ZUFwcGxpZXIuY3BwCkBAIC0xNDksMjMgKzE0OSwyNCBAQCBib29sIEZFTW9ycGhvbG9neVNvZnR3
YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYWdl
VgogICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgYXV0byBpc0RlZ2VuZXJhdGUgPSBbXShpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kp
IC0+IGJvb2wgewotICAgICAgICByZXR1cm4gcmFkaXVzWCA8IDAgfHwgcmFkaXVzWSA8IDAgfHwg
KCFyYWRpdXNYICYmICFyYWRpdXNZKTsKKyAgICBhdXRvIGlzRGVnZW5lcmF0ZSA9IFtdKGNvbnN0
IEludFNpemUmIGFic29sdXRlUmFkaXVzKSAtPiBib29sIHsKKyAgICAgICAgcmV0dXJuIGFic29s
dXRlUmFkaXVzLndpZHRoKCkgPCAwIHx8IGFic29sdXRlUmFkaXVzLmhlaWdodCgpIDwgMCB8fCBh
YnNvbHV0ZVJhZGl1cy5pc1plcm8oKTsKICAgICB9OwogCiAgICAgYXV0byBlZmZlY3REcmF3aW5n
UmVjdCA9IHJlc3VsdC5hYnNvbHV0ZUltYWdlUmVjdFJlbGF0aXZlVG8oaW5wdXQpOwotICAgIGF1
dG8gcmFkaXVzID0gZmxvb3JlZEludFNpemUoRmxvYXRTaXplKG1fZWZmZWN0LnJhZGl1c1goKSwg
bV9lZmZlY3QucmFkaXVzWSgpKSk7CiAKLSAgICBpZiAoaXNEZWdlbmVyYXRlKHJhZGl1cy53aWR0
aCgpLCByYWRpdXMuaGVpZ2h0KCkpKSB7CisgICAgYXV0byByYWRpdXMgPSBmaWx0ZXIucmVzb2x2
ZWRTaXplKHsgbV9lZmZlY3QucmFkaXVzWCgpLCBtX2VmZmVjdC5yYWRpdXNZKCkgfSk7CisgICAg
YXV0byBhYnNvbHV0ZVJhZGl1cyA9IGZsb29yZWRJbnRTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRl
clNjYWxlKHJhZGl1cykpOworCisgICAgaWYgKGlzRGVnZW5lcmF0ZShhYnNvbHV0ZVJhZGl1cykp
IHsKICAgICAgICAgaW5wdXQuY29weVBpeGVsQnVmZmVyKCpkZXN0aW5hdGlvblBpeGVsQnVmZmVy
LCBlZmZlY3REcmF3aW5nUmVjdCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAg
IHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9l
ZmZlY3QucmFkaXVzWCgpLCBtX2VmZmVjdC5yYWRpdXNZKCkgfSkpOwotICAgIGludCByYWRpdXNY
ID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAtIDEsIHJhZGl1cy53aWR0aCgp
KTsKLSAgICBpbnQgcmFkaXVzWSA9IHN0ZDo6bWluKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgp
IC0gMSwgcmFkaXVzLmhlaWdodCgpKTsKKyAgICBpbnQgcmFkaXVzWCA9IHN0ZDo6bWluKGVmZmVj
dERyYXdpbmdSZWN0LndpZHRoKCkgLSAxLCBhYnNvbHV0ZVJhZGl1cy53aWR0aCgpKTsKKyAgICBp
bnQgcmFkaXVzWSA9IHN0ZDo6bWluKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpIC0gMSwgYWJz
b2x1dGVSYWRpdXMuaGVpZ2h0KCkpOwogCi0gICAgaWYgKGlzRGVnZW5lcmF0ZShyYWRpdXNYLCBy
YWRpdXNZKSkgeworICAgIGlmIChpc0RlZ2VuZXJhdGUoeyByYWRpdXNYLCByYWRpdXNZIH0pKSB7
CiAgICAgICAgIGlucHV0LmNvcHlQaXhlbEJ1ZmZlcigqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwg
ZWZmZWN0RHJhd2luZ1JlY3QpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL0ZF
T2Zmc2V0U29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIuY3BwCmluZGV4IGNm
MmRjZWQ0OTdkNjgyOTgxYThhNDJiOGM3ZWU4NmUyMDA1MjY1NTAuLjFmYmRmZTBhM2I3NGVlOWFh
YTA1N2NiYTlmNGJkYjBjZjJjZjhiMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
RkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIuY3BwCkBAIC00Miw3ICs0MiwxMSBAQCBib29sIEZFT2Zm
c2V0U29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmls
dGVySW1hZ2VWZWN0bwogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBGbG9hdFJlY3QgaW5w
dXRJbWFnZVJlY3QgPSBpbnB1dC5hYnNvbHV0ZUltYWdlUmVjdFJlbGF0aXZlVG8ocmVzdWx0KTsK
LSAgICBpbnB1dEltYWdlUmVjdC5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9l
ZmZlY3QuZHgoKSwgbV9lZmZlY3QuZHkoKSB9KSk7CisKKyAgICBhdXRvIG9mZnNldCA9IGZpbHRl
ci5yZXNvbHZlZFNpemUoeyBtX2VmZmVjdC5keCgpLCBtX2VmZmVjdC5keSgpIH0pOworICAgIGF1
dG8gYWJzb2x1dGVPZmZzZXQgPSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZShvZmZzZXQpOwor
CisgICAgaW5wdXRJbWFnZVJlY3QubW92ZShhYnNvbHV0ZU9mZnNldCk7CiAKICAgICByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5wdXRJbWFnZSwgaW5wdXRJbWFnZVJl
Y3QpOwogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0NTU0ZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNw
cAppbmRleCBkZGYwMTQzNGM5OWYxZWM2OWNjM2YwMzY3NjgwOGM2ZDkzMjEyMWIxLi5hNzk2OTMy
OGQ2NThmOTNhNDUyMzNiNjFjZWNmMGYyMWZmOTM4ZGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvQ1NTRmlsdGVyLmNwcApAQCAtNDksMjUgKzQ5LDI1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotUmVmUHRyPENTU0ZpbHRlcj4gQ1NTRmlsdGVyOjpjcmVhdGUoY29uc3QgRmlsdGVyT3Bl
cmF0aW9ucyYgb3BlcmF0aW9ucywgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCBz
Y2FsZUZhY3RvcikKK1JlZlB0cjxDU1NGaWx0ZXI+IENTU0ZpbHRlcjo6Y3JlYXRlKGNvbnN0IEZp
bHRlck9wZXJhdGlvbnMmIG9wZXJhdGlvbnMsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwg
ZmxvYXQgc2NhbGVGYWN0b3IsIENsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlvbikKIHsKICAgICBi
b29sIGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdE1v
dmVzUGl4ZWxzKCk7CiAgICAgYm9vbCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlT
ZWN1cml0eU9yaWdpbiA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3Rl
ZEJ5U2VjdXJpdHlPcmlnaW4oKTsKIAotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0ZpbHRl
cihyZW5kZXJpbmdNb2RlLCBzY2FsZUZhY3RvciwgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzLCBo
YXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbikpOworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IENTU0ZpbHRlcihyZW5kZXJpbmdNb2RlLCBzY2FsZUZhY3Rvciwg
Y2xpcE9wZXJhdGlvbiwgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzLCBoYXNGaWx0ZXJUaGF0U2hv
dWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbikpOwogfQogCi1DU1NGaWx0ZXI6OkNTU0Zp
bHRlcihSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHNjYWxlRmFjdG9yLCBib29s
IGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscywgYm9vbCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0
cmljdGVkQnlTZWN1cml0eU9yaWdpbikKLSAgICA6IEZpbHRlcihGaWx0ZXI6OlR5cGU6OkNTU0Zp
bHRlciwgcmVuZGVyaW5nTW9kZSwgRmxvYXRTaXplIHsgc2NhbGVGYWN0b3IsIHNjYWxlRmFjdG9y
IH0pCitDU1NGaWx0ZXI6OkNTU0ZpbHRlcihSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZs
b2F0IHNjYWxlRmFjdG9yLCBDbGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRpb24sIGJvb2wgaGFzRmls
dGVyVGhhdE1vdmVzUGl4ZWxzLCBib29sIGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRC
eVNlY3VyaXR5T3JpZ2luKQorICAgIDogRmlsdGVyKEZpbHRlcjo6VHlwZTo6Q1NTRmlsdGVyLCBy
ZW5kZXJpbmdNb2RlLCBGbG9hdFNpemUgeyBzY2FsZUZhY3Rvciwgc2NhbGVGYWN0b3IgfSwgY2xp
cE9wZXJhdGlvbikKICAgICAsIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKGhhc0ZpbHRlclRo
YXRNb3Zlc1BpeGVscykKICAgICAsIG1faGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5
U2VjdXJpdHlPcmlnaW4oaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlP
cmlnaW4pCiB7CiB9CiAKLXN0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCbHVyRWZm
ZWN0KGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mIGJsdXJPcGVyYXRpb24sIEZpbHRlckNvbnN1
bWVyIGNvbnN1bWVyKQorc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUJsdXJFZmZl
Y3QoY29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiYgYmx1ck9wZXJhdGlvbiwgRmlsdGVyOjpDbGlw
T3BlcmF0aW9uIGNsaXBPcGVyYXRpb24pCiB7CiAgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0gZmxv
YXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCAwKTsKLSAgICBy
ZXR1cm4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShzdGREZXZpYXRpb24sIHN0ZERldmlhdGlvbiwg
Y29uc3VtZXIgPT0gRmlsdGVyQ29uc3VtZXI6OkZpbHRlclByb3BlcnR5ID8gRWRnZU1vZGVUeXBl
OjpOb25lIDogRWRnZU1vZGVUeXBlOjpEdXBsaWNhdGUpOworICAgIHJldHVybiBGRUdhdXNzaWFu
Qmx1cjo6Y3JlYXRlKHN0ZERldmlhdGlvbiwgc3RkRGV2aWF0aW9uLCBjbGlwT3BlcmF0aW9uID09
IEZpbHRlcjo6Q2xpcE9wZXJhdGlvbjo6VW5pdGUgPyBFZGdlTW9kZVR5cGU6Ok5vbmUgOiBFZGdl
TW9kZVR5cGU6OkR1cGxpY2F0ZSk7CiB9CiAKIHN0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBj
cmVhdGVCcmlnaHRuZXNzRWZmZWN0KGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJP
cGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQpAQCAtMjIxLDE4ICsyMjEsMTAg
QEAgc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZVNWR0ZpbHRlcihDU1NGaWx0ZXImIGZp
bHRlciwgY29uc3QgUmVmZXJlbmNlRmlsdGUKICAgICB9CiAKICAgICBTVkdGaWx0ZXJCdWlsZGVy
IGJ1aWxkZXI7Ci0gICAgcmV0dXJuIFNWR0ZpbHRlcjo6Y3JlYXRlKCpmaWx0ZXJFbGVtZW50LCBi
dWlsZGVyLCBmaWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBmaWx0ZXIuZmlsdGVyU2NhbGUoKSwgZmls
dGVyLnNvdXJjZUltYWdlUmVjdCgpLCBmaWx0ZXIuZmlsdGVyUmVnaW9uKCksIHByZXZpb3VzRWZm
ZWN0KTsKKyAgICByZXR1cm4gU1ZHRmlsdGVyOjpjcmVhdGUoKmZpbHRlckVsZW1lbnQsIGJ1aWxk
ZXIsIGZpbHRlci5yZW5kZXJpbmdNb2RlKCksIGZpbHRlci5maWx0ZXJTY2FsZSgpLCBmaWx0ZXIu
c291cmNlSW1hZ2VSZWN0KCksIGZpbHRlci5maWx0ZXJSZWdpb24oKSwgZmlsdGVyLmNsaXBPcGVy
YXRpb24oKSwgcHJldmlvdXNFZmZlY3QpOwogfQogCi1zdGF0aWMgdm9pZCBzZXR1cExhc3RFZmZl
Y3RQcm9wZXJ0aWVzKEZpbHRlckVmZmVjdCYgZWZmZWN0LCBGaWx0ZXJDb25zdW1lciBjb25zdW1l
cikKLXsKLSAgICAvLyBVbmxpa2UgU1ZHIEZpbHRlcnMgYW5kIENTU0ZpbHRlckltYWdlcywgZmls
dGVyIGZ1bmN0aW9ucyBvbiB0aGUgZmlsdGVyCi0gICAgLy8gcHJvcGVydHkgYXBwbGllZCBoZXJl
IHNob3VsZCBub3QgY2xpcCB0byB0aGVpciBwcmltaXRpdmUgc3VicmVnaW9ucy4KLSAgICBlZmZl
Y3Quc2V0Q2xpcHNUb0JvdW5kcyhjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyRnVu
Y3Rpb24pOwotICAgIGVmZmVjdC5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29s
b3JTcGFjZTo6U1JHQigpKTsKLX0KLQotYm9vbCBDU1NGaWx0ZXI6OmJ1aWxkRmlsdGVyRnVuY3Rp
b25zKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVy
YXRpb25zLCBGaWx0ZXJDb25zdW1lciBjb25zdW1lcikKK2Jvb2wgQ1NTRmlsdGVyOjpidWlsZEZp
bHRlckZ1bmN0aW9ucyhSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmlsdGVyT3BlcmF0
aW9ucyYgb3BlcmF0aW9ucykKIHsKICAgICBtX2Z1bmN0aW9ucy5jbGVhcigpOwogICAgIG1fb3V0
c2V0cyA9IHsgfTsKQEAgLTI0OSw3ICsyNDEsNyBAQCBib29sIENTU0ZpbHRlcjo6YnVpbGRGaWx0
ZXJGdW5jdGlvbnMoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdAog
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6
Ci0gICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVCbHVyRWZmZWN0KGRvd25jYXN0PEJsdXJGaWx0
ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLCBjb25zdW1lcik7CisgICAgICAgICAgICBlZmZlY3Qg
PSBjcmVhdGVCbHVyRWZmZWN0KGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRp
b24pLCBjbGlwT3BlcmF0aW9uKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6CkBAIC0zMDQsMTQgKzI5NiwxNCBAQCBib29s
IENTU0ZpbHRlcjo6YnVpbGRGaWx0ZXJGdW5jdGlvbnMoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIs
IGNvbnN0IEZpbHRlck9wZXJhdAogICAgICAgICAKICAgICAgICAgaWYgKGZpbHRlcikgewogICAg
ICAgICAgICAgZWZmZWN0ID0gZmlsdGVyLT5sYXN0RWZmZWN0KCk7Ci0gICAgICAgICAgICBzZXR1
cExhc3RFZmZlY3RQcm9wZXJ0aWVzKCplZmZlY3QsIGNvbnN1bWVyKTsKKyAgICAgICAgICAgIGVm
ZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Io
KSk7CiAgICAgICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoZmlsdGVyLnJlbGVhc2VOb25OdWxs
KCkpOwogICAgICAgICAgICAgcHJldmlvdXNFZmZlY3QgPSBXVEZNb3ZlKGVmZmVjdCk7CiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChlZmZlY3QpIHsKLSAg
ICAgICAgICAgIHNldHVwTGFzdEVmZmVjdFByb3BlcnRpZXMoKmVmZmVjdCwgY29uc3VtZXIpOwor
ICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29s
b3JTcGFjZTo6U1JHQigpKTsKICAgICAgICAgICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7
IFdURk1vdmUocHJldmlvdXNFZmZlY3QpIH07CiAgICAgICAgICAgICBtX2Z1bmN0aW9ucy5hcHBl
bmQoeyAqZWZmZWN0IH0pOwogICAgICAgICAgICAgcHJldmlvdXNFZmZlY3QgPSBXVEZNb3ZlKGVm
ZmVjdCk7CkBAIC00MTEsMTYgKzQwMywxMyBAQCBMYXlvdXRSZWN0IENTU0ZpbHRlcjo6Y29tcHV0
ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5UmVjdChjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZQogCiB2
b2lkIENTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
SW1hZ2VSZWN0KQogewotICAgIGF1dG8gc2NhbGVkU291cmNlSW1hZ2VSZWN0ID0gc291cmNlSW1h
Z2VSZWN0OwotICAgIHNjYWxlZFNvdXJjZUltYWdlUmVjdC5zY2FsZShmaWx0ZXJTY2FsZSgpKTsK
LQogICAgIEZpbHRlcjo6c2V0RmlsdGVyUmVnaW9uKHNvdXJjZUltYWdlUmVjdCk7Ci0gICAgRmls
dGVyOjpzZXRTb3VyY2VJbWFnZVJlY3Qoc2NhbGVkU291cmNlSW1hZ2VSZWN0KTsKKyAgICBGaWx0
ZXI6OnNldFNvdXJjZUltYWdlUmVjdChzb3VyY2VJbWFnZVJlY3QpOwogCiAgICAgZm9yIChhdXRv
JiBmdW5jdGlvbiA6IG1fZnVuY3Rpb25zKSB7CiAgICAgICAgIGlmIChmdW5jdGlvbi0+aXNTVkdG
aWx0ZXIoKSkgewogICAgICAgICAgICAgZG93bmNhc3Q8U1ZHRmlsdGVyPihmdW5jdGlvbi5wdHIo
KSktPnNldEZpbHRlclJlZ2lvbihzb3VyY2VJbWFnZVJlY3QpOwotICAgICAgICAgICAgZG93bmNh
c3Q8U1ZHRmlsdGVyPihmdW5jdGlvbi5wdHIoKSktPnNldFNvdXJjZUltYWdlUmVjdChzY2FsZWRT
b3VyY2VJbWFnZVJlY3QpOworICAgICAgICAgICAgZG93bmNhc3Q8U1ZHRmlsdGVyPihmdW5jdGlv
bi5wdHIoKSktPnNldFNvdXJjZUltYWdlUmVjdChzb3VyY2VJbWFnZVJlY3QpOwogICAgICAgICB9
CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRl
ci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCmluZGV4IGI2YWIyMDMx
ZTAxNjdmZDhhZWNmOTgzZGQ5YTI2YjI1Y2UyZjlmNzYuLjJmNTE2ZTUwNTQ5Y2YwNzBiNzMzOTAy
ZjgyZjQ2ODVhMzgxYzVhMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9D
U1NGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKQEAg
LTM5LDE1ICszOSwxMyBAQCBjbGFzcyBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb247CiBjbGFzcyBS
ZW5kZXJFbGVtZW50OwogY2xhc3MgU291cmNlR3JhcGhpYzsKIAotZW51bSBjbGFzcyBGaWx0ZXJD
b25zdW1lciB7IEZpbHRlclByb3BlcnR5LCBGaWx0ZXJGdW5jdGlvbiB9OwotCiBjbGFzcyBDU1NG
aWx0ZXIgZmluYWwgOiBwdWJsaWMgRmlsdGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPENTU0ZpbHRlcj4gY3JlYXRlKGNvbnN0IEZp
bHRlck9wZXJhdGlvbnMmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCBzY2FsZUZhY3RvciA9IDEpOwor
ICAgIHN0YXRpYyBSZWZQdHI8Q1NTRmlsdGVyPiBjcmVhdGUoY29uc3QgRmlsdGVyT3BlcmF0aW9u
cyYsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHNjYWxlRmFjdG9yID0gMSwgQ2xpcE9wZXJhdGlvbiA9
IENsaXBPcGVyYXRpb246OkludGVyc2VjdCk7CiAKICAgICB2b2lkIHNldFNvdXJjZUltYWdlUmVj
dChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICBib29sIGJ1aWxkRmlsdGVyRnVuY3Rpb25zKFJlbmRl
ckVsZW1lbnQmLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiwgRmlsdGVyQ29uc3VtZXIpOworICAg
IGJvb2wgYnVpbGRGaWx0ZXJGdW5jdGlvbnMoUmVuZGVyRWxlbWVudCYsIGNvbnN0IEZpbHRlck9w
ZXJhdGlvbnMmKTsKICAgICB2b2lkIGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigp
OwogCiAgICAgYm9vbCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSBjb25zdCB7IHJldHVybiBt
X2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVsczsgfQpAQCAtNjQsNyArNjIsNyBAQCBwdWJsaWM6CiAg
ICAgTGF5b3V0UmVjdCBjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGNvbnN0IExh
eW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCk7CiAK
IHByaXZhdGU6Ci0gICAgQ1NTRmlsdGVyKFJlbmRlcmluZ01vZGUsIGZsb2F0IHNjYWxlRmFjdG9y
LCBib29sIGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscywgYm9vbCBoYXNGaWx0ZXJUaGF0U2hvdWxk
QmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbik7CisgICAgQ1NTRmlsdGVyKFJlbmRlcmluZ01v
ZGUsIGZsb2F0IHNjYWxlRmFjdG9yLCBDbGlwT3BlcmF0aW9uLCBib29sIGhhc0ZpbHRlclRoYXRN
b3Zlc1BpeGVscywgYm9vbCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0
eU9yaWdpbik7CiAKICNpZiBVU0UoQ09SRV9JTUFHRSkKICAgICBib29sIHN1cHBvcnRzQ29yZUlt
YWdlUmVuZGVyaW5nKCkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCmluZGV4IGZmOWQ4MjY2MjU4ZTc3YTY0Mjg0ZWQx
YjhlOTVhOTRkOWNkNzdmMWYuLmFjNzdiOGU1M2ZlM2IzZGE5OTJhNzIyYmQ4MmU1NDE1Y2E3NGIy
M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRl
cnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMu
Y3BwCkBAIC0xMjEsNyArMTIxLDcgQEAgdm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmJ1aWxkRmls
dGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBmbG9hdCBzY2FsZUZhY3RvciwKICAgICAvLyBJ
ZiB0aGUgZmlsdGVyIGZhaWxzIHRvIGJ1aWxkLCByZW1vdmUgaXQgZnJvbSB0aGUgbGF5ZXIuIEl0
IHdpbGwgc3RpbGwgYXR0ZW1wdCB0bwogICAgIC8vIGdvIHRocm91Z2ggcmVndWxhciBwcm9jZXNz
aW5nIChlLmcuIGNvbXBvc2l0aW5nKSwgYnV0IG5ldmVyIGFwcGx5IGFueXRoaW5nLgogICAgIC8v
IEZJWE1FOiB0aGlzIHJlYnVpbGRzIHRoZSBlbnRpcmUgZWZmZWN0cyBjaGFpbiBldmVuIGlmIHRo
ZSBmaWx0ZXIgc3R5bGUgZGlkbid0IGNoYW5nZS4KLSAgICBtX2ZpbHRlciA9IENTU0ZpbHRlcjo6
Y3JlYXRlKHJlbmRlcmVyLnN0eWxlKCkuZmlsdGVyKCksIHJlbmRlcmluZ01vZGUsIHNjYWxlRmFj
dG9yKTsKKyAgICBtX2ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKHJlbmRlcmVyLnN0eWxlKCku
ZmlsdGVyKCksIHJlbmRlcmluZ01vZGUsIHNjYWxlRmFjdG9yLCBGaWx0ZXI6OkNsaXBPcGVyYXRp
b246OlVuaXRlKTsKIH0KIAogR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6Omlu
cHV0Q29udGV4dCgpCkBAIC0xMzIsOCArMTMyLDggQEAgR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJM
YXllckZpbHRlcnM6OmlucHV0Q29udGV4dCgpCiB2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YWxs
b2NhdGVCYWNraW5nU3RvcmUoY29uc3QgR3JhcGhpY3NDb250ZXh0JiB0YXJnZXRDb250ZXh0KQog
ewogICAgIGF1dG8mIGZpbHRlciA9ICptX2ZpbHRlcjsKLSAgICBhdXRvIGxvZ2ljYWxTaXplID0g
ZmlsdGVyLnNvdXJjZUltYWdlUmVjdCgpLnNpemUoKTsKLSAgICAKKyAgICBhdXRvIGxvZ2ljYWxT
aXplID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoZmlsdGVyLnNvdXJjZUltYWdlUmVjdCgp
LnNpemUoKSk7CisKICAgICBpZiAoIW1fc291cmNlSW1hZ2UgfHwgbV9zb3VyY2VJbWFnZS0+bG9n
aWNhbFNpemUoKSAhPSBsb2dpY2FsU2l6ZSkgewogI2lmIFVTRShESVJFQ1QyRCkKICAgICAgICAg
bV9zb3VyY2VJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIGZpbHRlci5y
ZW5kZXJpbmdNb2RlKCksICZ0YXJnZXRDb250ZXh0LCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKQEAgLTE2MiwxMCArMTYyLDEwIEBAIEdyYXBo
aWNzQ29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGlj
c0NvbnRleHQmIGRlc3RpbmF0CiAgICAgaWYgKGhhc1VwZGF0ZWRCYWNraW5nU3RvcmUgfHwgIW1f
ZmlsdGVyLT5sYXN0RWZmZWN0KCkpIHsKICAgICAgICAgLy8gSWYgdGhlIGZpbHRlciBmYWlscyB0
byBidWlsZCwgcmVtb3ZlIGl0IGZyb20gdGhlIGxheWVyLiBJdCB3aWxsIHN0aWxsIGF0dGVtcHQg
dG8KICAgICAgICAgLy8gZ28gdGhyb3VnaCByZWd1bGFyIHByb2Nlc3NpbmcgKGUuZy4gY29tcG9z
aXRpbmcpLCBidXQgbmV2ZXIgYXBwbHkgYW55dGhpbmcuCi0gICAgICAgIGlmICghbV9maWx0ZXIt
PmJ1aWxkRmlsdGVyRnVuY3Rpb25zKHJlbmRlcmVyLCByZW5kZXJlci5zdHlsZSgpLmZpbHRlcigp
LCBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkpKQorICAgICAgICBpZiAoIW1fZmlsdGVy
LT5idWlsZEZpbHRlckZ1bmN0aW9ucyhyZW5kZXJlciwgcmVuZGVyZXIuc3R5bGUoKS5maWx0ZXIo
KSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgCisKICAgICBpZiAo
IWZpbHRlci5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSkKICAgICAgICAgbV9yZXBhaW50UmVj
dCA9IGRpcnR5UmVjdDsKICAgICBlbHNlIHsKQEAgLTIwMCwxOCArMjAwLDE0IEBAIEdyYXBoaWNz
Q29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0Nv
bnRleHQmIGRlc3RpbmF0CiAKIHZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBseUZpbHRlckVm
ZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCkKIHsKLSAgICBBU1NFUlQo
aW5wdXRDb250ZXh0KCkpOwotCiAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8
PCAiXG5SZW5kZXJMYXllckZpbHRlcnMgIiA8PCB0aGlzIDw8ICIgYXBwbHlGaWx0ZXJFZmZlY3Qi
KTsKIAorICAgIEFTU0VSVChpbnB1dENvbnRleHQoKSk7CiAgICAgaW5wdXRDb250ZXh0KCktPnJl
c3RvcmUoKTsKIAogICAgIGF1dG8mIGZpbHRlciA9ICptX2ZpbHRlcjsKIAotICAgIGRlc3RpbmF0
aW9uQ29udGV4dC5zY2FsZSh7IDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS53aWR0aCgpLCAxIC8g
ZmlsdGVyLmZpbHRlclNjYWxlKCkuaGVpZ2h0KCkgfSk7CiAgICAgZGVzdGluYXRpb25Db250ZXh0
LmRyYXdGaWx0ZXJlZEltYWdlQnVmZmVyKG1fc291cmNlSW1hZ2UuZ2V0KCksIGZpbHRlcik7Ci0g
ICAgZGVzdGluYXRpb25Db250ZXh0LnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLQogICAg
IGZpbHRlci5jbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKIAogICAgIExPR19XSVRIX1NUUkVB
TShGaWx0ZXJzLCBzdHJlYW0gPDwgIlJlbmRlckxheWVyRmlsdGVycyAiIDw8IHRoaXMgPDwgIiBh
cHBseUZpbHRlckVmZmVjdCBkb25lXG4iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKaW5kZXggZWNiYjJiZWYx
ZTg5YjdhMDYzMTdlNTEyYTczM2Y1MTBiNzAwMGVhNy4uZmRhZDAzOWEwYzEwYTFmODUwYjYzYzA0
ODRmZTIxNmNlNTE5ZDVlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKQEAgLTEzMSw3ICsxMzEsNyBAQCBi
b29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyLCBjb25zdCBSZW5kZQogCiAgICAgLy8gQ3JlYXRlIHRoZSBTVkdGaWx0ZXIgb2Jq
ZWN0LgogICAgIGZpbHRlckRhdGEtPmJ1aWxkZXIgPSBtYWtlVW5pcXVlPFNWR0ZpbHRlckJ1aWxk
ZXI+KCk7Ci0gICAgZmlsdGVyRGF0YS0+ZmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoZmlsdGVy
RWxlbWVudCgpLCAqZmlsdGVyRGF0YS0+YnVpbGRlciwgcmVuZGVyaW5nTW9kZSwgZmlsdGVyU2Nh
bGUsIGFic29sdXRlRHJhd2luZ1JlZ2lvbiwgZmlsdGVyRGF0YS0+Ym91bmRhcmllcywgdGFyZ2V0
Qm91bmRpbmdCb3gpOworICAgIGZpbHRlckRhdGEtPmZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRl
KGZpbHRlckVsZW1lbnQoKSwgKmZpbHRlckRhdGEtPmJ1aWxkZXIsIHJlbmRlcmluZ01vZGUsIGZp
bHRlclNjYWxlLCBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBmaWx0ZXJEYXRhLT5ib3VuZGFy
aWVzLCB0YXJnZXRCb3VuZGluZ0JveCk7CiAgICAgaWYgKCFmaWx0ZXJEYXRhLT5maWx0ZXIpIHsK
ICAgICAgICAgbV9yZW5kZXJlckZpbHRlckRhdGFNYXAucmVtb3ZlKCZyZW5kZXJlcik7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTIyOSw5ICsyMjksNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgR3Jh
cGhpYwogCiAgICAgaWYgKCFmaWx0ZXJEYXRhLmJvdW5kYXJpZXMuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpCdWlsdDsKLSAgICAgICAgY29udGV4
dC0+c2NhbGUoRmxvYXRTaXplKDEgLyBmaWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVyU2NhbGUoKS53
aWR0aCgpLCAxIC8gZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclNjYWxlKCkuaGVpZ2h0KCkpKTsK
ICAgICAgICAgY29udGV4dC0+ZHJhd0ZpbHRlcmVkSW1hZ2VCdWZmZXIoZmlsdGVyRGF0YS5zb3Vy
Y2VHcmFwaGljQnVmZmVyLmdldCgpLCAqZmlsdGVyRGF0YS5maWx0ZXIpOwotICAgICAgICBjb250
ZXh0LT5zY2FsZShmaWx0ZXJEYXRhLnNjYWxlKTsKICAgICB9CiAKICAgICBmaWx0ZXJEYXRhLnNv
dXJjZUdyYXBoaWNCdWZmZXIgPSBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAppbmRleCA4YTQ5Y2Y5ZDI3NDUxZjljOTA2
NjA0M2ViNmYwMTE1ODU1NjczN2JhLi41YzY3Y2EzMTkwY2Y2MjNhNzk2MzViOTI5YjRjOTQ2MGE5
NzYyMWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRUltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRUltYWdlLmNwcApAQCAtNTAsMTAgKzUwLDggQEAgRkVJbWFnZTo6RkVJbWFnZShTb3VyY2VJ
bWFnZSYmIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY28K
IHsKIH0KIAotdm9pZCBGRUltYWdlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBG
aWx0ZXImIGZpbHRlcikKK0Zsb2F0UmVjdCBGRUltYWdlOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29u
c3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiwgY29uc3QgRmxvYXRS
ZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7Ci0gICAgYXV0byBwcmltaXRpdmVTdWJy
ZWdpb24gPSBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLQogICAgIGF1dG8gaW1hZ2VSZWN0
ID0gV1RGOjpzd2l0Y2hPbihtX3NvdXJjZUltYWdlLAogICAgICAgICBbJl0gKGNvbnN0IFJlZjxJ
bWFnZT4mKSB7CiAgICAgICAgICAgICBhdXRvIGltYWdlUmVjdCA9IHByaW1pdGl2ZVN1YnJlZ2lv
bjsKQEAgLTY1LDE0ICs2Myw3IEBAIHZvaWQgRkVJbWFnZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgICAgICAgICByZXR1cm4gcHJpbWl0aXZl
U3VicmVnaW9uOwogICAgICAgICB9CiAgICAgKTsKLQotICAgIGltYWdlUmVjdC5zY2FsZShmaWx0
ZXIuZmlsdGVyU2NhbGUoKSk7Ci0KLSAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQotICAgICAgICBp
bWFnZVJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBp
bWFnZVJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVj
dChlbmNsb3NpbmdJbnRSZWN0KGltYWdlUmVjdCkpOworICAgIHJldHVybiBmaWx0ZXIuY2xpcFRv
TWF4RWZmZWN0UmVjdChpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CiB9CiAKIC8vIEZJ
WE1FOiBNb3ZlIHRoZSBjbGFzcyBGRUltYWdlU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNv
dXJjZSBhbmQgaGVhZGVyIGZpbGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCmluZGV4IDZjOWFlNzkwNDhhMWRmMjFlMDcxMzUwOGUwNGEw
ZGRjN2MzOWVkZWYuLjkxOWEwNGU2MWRjZDIyMzQ0MWIxZTE5YjIyMzYyMjVjMzMwMWZkODMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgK
QEAgLTUwLDcgKzUwLDcgQEAgcHJpdmF0ZToKICAgICAvLyBGRUltYWdlIHJlc3VsdHMgYXJlIGFs
d2F5cyBpbiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKQogICAgIHZvaWQgc2V0T3BlcmF0
aW5nQ29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlkZSB7IH0K
IAotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgZmlu
YWw7CisgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImLCBjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1
YnJlZ2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZm
ZWN0QXBwbGllcj4gY3JlYXRlQXBwbGllcihjb25zdCBGaWx0ZXImKSBjb25zdCBmaW5hbDsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAK
aW5kZXggMWJkOTIwYTVmYzljYzhkNDk2ODBhMzUwZjhiMTFiMjQwMGUxNGJkNi4uMDJlYzAyNmY0
NWM2OTFmMTFiNjBjNTc5ZWFhYmQxYzUxNGZkYWJiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCkBAIC0yOSwyMSArMjksMTkgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNy
ZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBTVkdGaWx0ZXJCdWlsZGVyJiBi
dWlsZGVyLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEZsb2F0U2l6ZSYgZmls
dGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIGZpbHRlclJlZ2lvbiwgRmlsdGVyRWZmZWN0JiBwcmV2aW91c0VmZmVjdCkKK1JlZlB0cjxT
VkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1l
bnQsIFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9k
ZSwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJ
bWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBDbGlwT3BlcmF0aW9uIGNs
aXBPcGVyYXRpb24sIEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QpCiB7Ci0gICAgcmV0dXJu
IGNyZWF0ZShmaWx0ZXJFbGVtZW50LCBidWlsZGVyLCByZW5kZXJpbmdNb2RlLCBmaWx0ZXJTY2Fs
ZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXJSZWdpb24sIGZpbHRlclJlZ2lvbiwgJnByZXZpb3Vz
RWZmZWN0KTsKKyAgICByZXR1cm4gY3JlYXRlKGZpbHRlckVsZW1lbnQsIGJ1aWxkZXIsIHJlbmRl
cmluZ01vZGUsIGZpbHRlclNjYWxlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlclJlZ2lvbiwgY2xp
cE9wZXJhdGlvbiwgZmlsdGVyUmVnaW9uLCAmcHJldmlvdXNFZmZlY3QpOwogfQogCiBSZWZQdHI8
U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVt
ZW50LCBTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
SW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0
JiB0YXJnZXRCb3VuZGluZ0JveCkKIHsKLSAgICByZXR1cm4gY3JlYXRlKGZpbHRlckVsZW1lbnQs
IGJ1aWxkZXIsIHJlbmRlcmluZ01vZGUsIGZpbHRlclNjYWxlLCBzb3VyY2VJbWFnZVJlY3QsIGZp
bHRlclJlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gsIG51bGxwdHIpOworICAgIHJldHVybiBjcmVh
dGUoZmlsdGVyRWxlbWVudCwgYnVpbGRlciwgcmVuZGVyaW5nTW9kZSwgZmlsdGVyU2NhbGUsIHNv
dXJjZUltYWdlUmVjdCwgZmlsdGVyUmVnaW9uLCBDbGlwT3BlcmF0aW9uOjpJbnRlcnNlY3QsIHRh
cmdldEJvdW5kaW5nQm94LCBudWxscHRyKTsKIH0KIAotUmVmUHRyPFNWR0ZpbHRlcj4gU1ZHRmls
dGVyOjpjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwgU1ZHRmlsdGVyQnVp
bGRlciYgYnVpbGRlciwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBGbG9hdFNp
emUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdC
b3gsIEZpbHRlckVmZmVjdCogcHJldmlvdXNFZmZlY3QpCitSZWZQdHI8U1ZHRmlsdGVyPiBTVkdG
aWx0ZXI6OmNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBTVkdGaWx0ZXJC
dWlsZGVyJiBidWlsZGVyLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEZsb2F0
U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgQ2xpcE9wZXJhdGlvbiBjbGlwT3BlcmF0aW9uLCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBGaWx0ZXJFZmZlY3QqIHByZXZpb3Vz
RWZmZWN0KQogewotICAgIGJvb2wgcHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlID0gZmlsdGVyRWxl
bWVudC5wcmltaXRpdmVVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpF
Q1RCT1VORElOR0JPWDsKLQotICAgIGF1dG8gZmlsdGVyID0gYWRvcHRSZWYoKm5ldyBTVkdGaWx0
ZXIocmVuZGVyaW5nTW9kZSwgZmlsdGVyU2NhbGUsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyUmVn
aW9uLCB0YXJnZXRCb3VuZGluZ0JveCwgcHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlKSk7CisgICAg
YXV0byBmaWx0ZXIgPSBhZG9wdFJlZigqbmV3IFNWR0ZpbHRlcihyZW5kZXJpbmdNb2RlLCBmaWx0
ZXJTY2FsZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXJSZWdpb24sIGNsaXBPcGVyYXRpb24sIHRh
cmdldEJvdW5kaW5nQm94LCBmaWx0ZXJFbGVtZW50LnByaW1pdGl2ZVVuaXRzKCkpKTsKIAogICAg
IGlmICghcHJldmlvdXNFZmZlY3QpCiAgICAgICAgIGJ1aWxkZXIuc2V0dXBCdWlsdGluRWZmZWN0
cyhTb3VyY2VHcmFwaGljOjpjcmVhdGUoKSk7CkBAIC03MiwxOSArNzAsMTYgQEAgUmVmUHRyPFNW
R0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVu
dCwgU1ZHRmlsdGVyQnUKICAgICByZXR1cm4gZmlsdGVyOwogfQogCi1TVkdGaWx0ZXI6OlNWR0Zp
bHRlcihSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVy
U2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgYm9vbCBl
ZmZlY3RCQm94TW9kZSkKLSAgICA6IEZpbHRlcihGaWx0ZXI6OlR5cGU6OlNWR0ZpbHRlciwgcmVu
ZGVyaW5nTW9kZSwgZmlsdGVyU2NhbGUsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyUmVnaW9uKQor
U1ZHRmlsdGVyOjpTVkdGaWx0ZXIoUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBG
bG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIENsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlv
biwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgU1ZHVW5pdFR5cGVzOjpTVkdV
bml0VHlwZSBwcmltaXRpdmVVbml0cykKKyAgICA6IEZpbHRlcihGaWx0ZXI6OlR5cGU6OlNWR0Zp
bHRlciwgcmVuZGVyaW5nTW9kZSwgZmlsdGVyU2NhbGUsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVy
UmVnaW9uLCBjbGlwT3BlcmF0aW9uKQogICAgICwgbV90YXJnZXRCb3VuZGluZ0JveCh0YXJnZXRC
b3VuZGluZ0JveCkKLSAgICAsIG1fZWZmZWN0QkJveE1vZGUoZWZmZWN0QkJveE1vZGUpCisgICAg
LCBtX3ByaW1pdGl2ZVVuaXRzKHByaW1pdGl2ZVVuaXRzKQogewogfQogCi1GbG9hdFNpemUgU1ZH
RmlsdGVyOjpzY2FsZWRCeUZpbHRlclNjYWxlKEZsb2F0U2l6ZSBzaXplKSBjb25zdAorRmxvYXRT
aXplIFNWR0ZpbHRlcjo6cmVzb2x2ZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgY29uc3QK
IHsKLSAgICBpZiAobV9lZmZlY3RCQm94TW9kZSkKLSAgICAgICAgc2l6ZSA9IHNpemUgKiBtX3Rh
cmdldEJvdW5kaW5nQm94LnNpemUoKTsKLQotICAgIHJldHVybiBGaWx0ZXI6OnNjYWxlZEJ5Rmls
dGVyU2NhbGUoc2l6ZSk7CisgICAgcmV0dXJuIG1fcHJpbWl0aXZlVW5pdHMgPT0gU1ZHVW5pdFR5
cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YID8gc2l6ZSAqIG1fdGFyZ2V0Qm91
bmRpbmdCb3guc2l6ZSgpIDogc2l6ZTsKIH0KIAogI2lmIFVTRShDT1JFX0lNQUdFKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAppbmRleCAyMTFk
MTAzN2UzZGFkNmFiNTU3N2M1MDcyMjk3ZTcwYzU3Y2NjNTIxLi4zMzI2MGQwNTE5ZWUwY2YxZjMx
MmM5MzUwOGFlZmQ5ODdiNDUyNjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXIuaApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgIkZpbHRl
ci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdFZlY3Rvci5oIgogI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgorI2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNp
bmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAKQEAgLTM1LDIxICszNiwyMSBAQCBjbGFzcyBTVkdG
aWx0ZXJFbGVtZW50OwogCiBjbGFzcyBTVkdGaWx0ZXIgZmluYWwgOiBwdWJsaWMgRmlsdGVyIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlKFNWR0ZpbHRlckVs
ZW1lbnQmLCBTVkdGaWx0ZXJCdWlsZGVyJiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgRmxvYXRTaXpl
JiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBGaWx0ZXJFZmZlY3QmIHByZXZpb3VzRWZmZWN0KTsKKyAg
ICBzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmLCBTVkdG
aWx0ZXJCdWlsZGVyJiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2Fs
ZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmls
dGVyUmVnaW9uLCBDbGlwT3BlcmF0aW9uLCBGaWx0ZXJFZmZlY3QmIHByZXZpb3VzRWZmZWN0KTsK
ICAgICBzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmLCBT
VkdGaWx0ZXJCdWlsZGVyJiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJT
Y2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
ZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94KTsKLSAgICBz
dGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmLCBTVkdGaWx0
ZXJCdWlsZGVyJiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVy
UmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBGaWx0ZXJFZmZlY3Qq
IHByZXZpb3VzRWZmZWN0KTsKKyAgICBzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlKFNW
R0ZpbHRlckVsZW1lbnQmLCBTVkdGaWx0ZXJCdWlsZGVyJiwgUmVuZGVyaW5nTW9kZSwgY29uc3Qg
RmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBDbGlwT3BlcmF0aW9uLCBjb25zdCBGbG9h
dFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBGaWx0ZXJFZmZlY3QqIHByZXZpb3VzRWZmZWN0KTsK
IAogICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFy
Z2V0Qm91bmRpbmdCb3g7IH0KIAogICAgIHZvaWQgc2V0RXhwcmVzc2lvbihGaWx0ZXJFZmZlY3RW
ZWN0b3ImJiBleHByZXNzaW9uKSB7IG1fZXhwcmVzc2lvbiA9IFdURk1vdmUoZXhwcmVzc2lvbik7
IH0KICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBsYXN0RWZmZWN0KCkgY29uc3QgeyByZXR1cm4g
IW1fZXhwcmVzc2lvbi5pc0VtcHR5KCkgPyBtX2V4cHJlc3Npb24ubGFzdCgpIDogbnVsbHB0cjsg
fQogCi0gICAgRmxvYXRTaXplIHNjYWxlZEJ5RmlsdGVyU2NhbGUoRmxvYXRTaXplKSBjb25zdCBm
aW5hbDsKKyAgICBGbG9hdFNpemUgcmVzb2x2ZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0
IGZpbmFsOwogCiAgICAgUmVmUHRyPEZpbHRlckltYWdlPiBhcHBseSgpIG92ZXJyaWRlOwogCiBw
cml2YXRlOgotICAgIFNWR0ZpbHRlcihSZW5kZXJpbmdNb2RlLCBjb25zdCBGbG9hdFNpemUmIGZp
bHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGJv
b2wgZWZmZWN0QkJveE1vZGUpOworICAgIFNWR0ZpbHRlcihSZW5kZXJpbmdNb2RlLCBjb25zdCBG
bG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIENsaXBPcGVyYXRpb24sIGNvbnN0IEZsb2F0
UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcHJpbWl0
aXZlVW5pdHMpOwogCiAjaWYgVVNFKENPUkVfSU1BR0UpCiAgICAgYm9vbCBzdXBwb3J0c0NvcmVJ
bWFnZVJlbmRlcmluZygpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNjAsNyArNjEsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgY2xlYXJSZXN1bHQoKSBvdmVycmlkZTsKIAogICAgIEZsb2F0UmVjdCBtX3Rh
cmdldEJvdW5kaW5nQm94OwotICAgIGJvb2wgbV9lZmZlY3RCQm94TW9kZTsKKyAgICBTVkdVbml0
VHlwZXM6OlNWR1VuaXRUeXBlIG1fcHJpbWl0aXZlVW5pdHM7CiAKICAgICBGaWx0ZXJFZmZlY3RW
ZWN0b3IgbV9leHByZXNzaW9uOwogfTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>