<?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>237554</bug_id>
          
          <creation_ts>2022-03-07 13:43:19 -0800</creation_ts>
          <short_desc>Unify &apos;transform-box&apos; reference box computation</short_desc>
          <delta_ts>2022-04-07 15:54:23 -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>
          <dependson>237553</dependson>
          <blocked>90738</blocked>
    
    <blocked>211787</blocked>
    
    <blocked>237701</blocked>
    
    <blocked>237711</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>annulen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>changseok</cc>
    
    <cc>darin</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>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>pdr</cc>
    
    <cc>rbuis</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sabouhallawa</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>1848942</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-03-07 13:43:19 -0800</bug_when>
    <thetext>Currently &apos;transform-box&apos; reference box computation is sprinkled over multiple places: CSSComputedStyleDeclaration, SVGRenderSupport, RenderBox, parts in RenderLayer.
Before adding any new features, the code should be cleaned up -- this is a preparation to add SVG/CSS transform support within LBSE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1848943</commentid>
    <comment_count>1</comment_count>
      <attachid>454027</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-03-07 13:51:59 -0800</bug_when>
    <thetext>Created attachment 454027
Patch, v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1848944</commentid>
    <comment_count>2</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-03-07 13:52:37 -0800</bug_when>
    <thetext>237553 needs to land, before EWS can process the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1848960</commentid>
    <comment_count>3</comment_count>
      <attachid>454033</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-03-07 14:11:53 -0800</bug_when>
    <thetext>Created attachment 454033
Patch, v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849600</commentid>
    <comment_count>4</comment_count>
      <attachid>454216</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-03-09 03:06:26 -0800</bug_when>
    <thetext>Created attachment 454216
Patch, v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850055</commentid>
    <comment_count>5</comment_count>
      <attachid>454342</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-03-10 05:41:45 -0800</bug_when>
    <thetext>Created attachment 454342
Patch, v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850073</commentid>
    <comment_count>6</comment_count>
      <attachid>454354</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-03-10 06:13:50 -0800</bug_when>
    <thetext>Created attachment 454354
Patch, v4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850260</commentid>
    <comment_count>7</comment_count>
      <attachid>454405</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-03-10 14:56:17 -0800</bug_when>
    <thetext>Created attachment 454405
Patch, v5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850454</commentid>
    <comment_count>8</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-03-11 05:33:24 -0800</bug_when>
    <thetext>After discussing once more with Rob, the conclusion is that the LayoutRect -&gt; FloatRect roundtrips should be avoided - a possible idea is a covariant return type, a la FloatOrLayoutRect, that knows what it is and helps us to encapsulate a method that returns a FloatRect for SVG and a LayoutRect for CSS, without relying on potential error-prone explicit FloatRect -&gt; LayoutRect conversions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850778</commentid>
    <comment_count>9</comment_count>
      <attachid>454560</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-03-13 16:45:32 -0700</bug_when>
    <thetext>Created attachment 454560
Patch, v6

The latest iteration of the patch introduces FloatOrLayoutRect, which either holds a FloatRect or LayoutRect (realized via variant&lt;FloatRect, LayoutRect&gt;) -- this avoids all LayoutRect(fromFloatRect) hacks, present in previous iterations of the patch and guarantees type-safety again. As benefit it allows us to detect if we need to pixel snap or not (SVG stores FloatRects, no pixel snapping should occour), simplifying quite a few parts in RenderLayer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850801</commentid>
    <comment_count>10</comment_count>
      <attachid>454560</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2022-03-14 02:06:44 -0700</bug_when>
    <thetext>Comment on attachment 454560
Patch, v6

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

&gt; Source/WebCore/ChangeLog:78
&gt; +2022-03-10  Nikolas Zimmermann  &lt;nzimmermann@igalia.com&gt;

Double entry.

&gt; Source/WebCore/platform/graphics/FloatOrLayoutRect.h:40
&gt; +        : m_data { rect }

are move semantics possible?

&gt; Source/WebCore/platform/graphics/FloatOrLayoutRect.h:59
&gt; +    FloatRect rectForPainting(float deviceScaleFactor) const

Probably better floatRectForPainting to make it explicit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850838</commentid>
    <comment_count>11</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-03-14 05:11:33 -0700</bug_when>
    <thetext>(In reply to Rob Buis from comment #10)
&gt; Comment on attachment 454560 [details]
&gt; Patch, v6
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=454560&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:78
&gt; &gt; +2022-03-10  Nikolas Zimmermann  &lt;nzimmermann@igalia.com&gt;
&gt; 
&gt; Double entry.
Fixed.

&gt; &gt; Source/WebCore/platform/graphics/FloatOrLayoutRect.h:40
&gt; &gt; +        : m_data { rect }
&gt; 
&gt; are move semantics possible?
I experimented a bit further, and adapted FloatOrLayoutRect to construct the variant in-place from FloatRect/LayoutRect rvalue references. This should have the lowest possible overhead, when using variants.

I&apos;ll add a new &quot;Patch, v7&quot; which tidies up FloatOrLayoutRect even further: constexpr usage, generic private is()/as() helpers to remove boilerplate. This is an important aspect of LBSE in future, so it&apos;s fine to take the time and get it right :-)

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/FloatOrLayoutRect.h:59
&gt; &gt; +    FloatRect rectForPainting(float deviceScaleFactor) const
&gt; 
&gt; Probably better floatRectForPainting to make it explicit.
Fair enough, will change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850839</commentid>
    <comment_count>12</comment_count>
      <attachid>454582</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-03-14 05:14:13 -0700</bug_when>
    <thetext>Created attachment 454582
Patch, v7</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850841</commentid>
    <comment_count>13</comment_count>
      <attachid>454584</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-03-14 05:45:31 -0700</bug_when>
    <thetext>Created attachment 454584
Patch, v7</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850870</commentid>
    <comment_count>14</comment_count>
      <attachid>454584</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2022-03-14 07:33:35 -0700</bug_when>
    <thetext>Comment on attachment 454584
Patch, v7

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

&gt; Source/WebCore/platform/graphics/FloatOrLayoutRect.h:36
&gt; +class FloatOrLayoutRect final {

Is there a particular benefit to not moving this to the private section at the bottom?

&gt; Source/WebCore/platform/graphics/FloatOrLayoutRect.h:47
&gt; +    constexpr T&amp; as() { return std::get&lt;T&gt;(m_data); }

I like these intuitive method names :)

&gt; Source/WebCore/platform/graphics/FloatOrLayoutRect.h:86
&gt; +    void move(const LayoutSize&amp; size)

I was actually triggered to think about move semantics because of this method name. Maybe it is possible to rename slightly to distinguish from std::move? moveLocation? movePosition?

&gt; Source/WebCore/platform/graphics/FloatOrLayoutRect.h:106
&gt; +static_assert(std::is_trivially_copyable&lt;FloatOrLayoutRect&gt;::value, &quot;&apos;FloatOrLayoutRect&apos; must be trivially coypable.&quot;);

Tyop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850873</commentid>
    <comment_count>15</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-03-14 08:01:58 -0700</bug_when>
    <thetext>(In reply to Rob Buis from comment #14)
&gt; Comment on attachment 454584 [details]
&gt; Patch, v7
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=454584&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/FloatOrLayoutRect.h:36
&gt; &gt; +class FloatOrLayoutRect final {
&gt; 
&gt; Is there a particular benefit to not moving this to the private section at
&gt; the bottom?
The constexpr inline as()/is() helpers are otherwise undefined in the first public method that uses them…
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/FloatOrLayoutRect.h:47
&gt; &gt; +    constexpr T&amp; as() { return std::get&lt;T&gt;(m_data); }
&gt; 
&gt; I like these intuitive method names :)
:-)

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/FloatOrLayoutRect.h:86
&gt; &gt; +    void move(const LayoutSize&amp; size)
&gt; 
&gt; I was actually triggered to think about move semantics because of this
&gt; method name. Maybe it is possible to rename slightly to distinguish from
&gt; std::move? moveLocation? movePosition?
This needs to keep the same FloatRect/LayoutRect naming scheme, otherwise I have to adapt call-sites.

&gt; &gt; Source/WebCore/platform/graphics/FloatOrLayoutRect.h:106
&gt; &gt; +static_assert(std::is_trivially_copyable&lt;FloatOrLayoutRect&gt;::value, &quot;&apos;FloatOrLayoutRect&apos; must be trivially coypable.&quot;);
&gt; 
&gt; Tyop.
Will fxi.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850886</commentid>
    <comment_count>16</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-03-14 08:55:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/90248560&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850896</commentid>
    <comment_count>17</comment_count>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2022-03-14 09:10:59 -0700</bug_when>
    <thetext>The patch now looks great IMHO. But I think Simon should have a look as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850946</commentid>
    <comment_count>18</comment_count>
      <attachid>454584</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2022-03-14 11:08:13 -0700</bug_when>
    <thetext>Comment on attachment 454584
Patch, v7

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

&gt; Source/WebCore/rendering/RenderBox.h:171
&gt; +    FloatOrLayoutRect referenceBoxRect(CSSBoxType) const final;

Rather than the unwieldy FloatOrLayoutRect, can we just templatize this function?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850951</commentid>
    <comment_count>19</comment_count>
      <attachid>454584</attachid>
    <who name="alan">zalan</who>
    <bug_when>2022-03-14 11:17:44 -0700</bug_when>
    <thetext>Comment on attachment 454584
Patch, v7

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

&gt; Source/WebCore/ChangeLog:20
&gt; +        For SVGs needs referenceBoxRect() needs to return a FloatRect, whereas for CSS/HTML LayoutRect
&gt; +        is the right choice. Introduce a &apos;FloatOrLayoutRect&apos; helper that can be used as return value/argument

Could you elaborate on the &quot;SVGs needs referenceBoxRect() needs to return a FloatRect&quot; part? Does SVG need higher precision than what LayoutRect can provide?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851028</commentid>
    <comment_count>20</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-03-14 15:07:48 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #18)
&gt; Comment on attachment 454584 [details]
&gt; Patch, v7
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=454584&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBox.h:171
&gt; &gt; +    FloatOrLayoutRect referenceBoxRect(CSSBoxType) const final;
&gt; 
&gt; Rather than the unwieldy FloatOrLayoutRect, can we just templatize this
&gt; function?

If we do that, we cannot have one virtual function and therefore have no unique way to access the transform reference box rect from the render tree, e.g. from RenderLayer. One would need to cast to RenderBox, to get the CSS LayoutRect reference box (and to RenderSVGModelObject to get the SVG FloatRect reference box in LBSE) -- that&apos;s what I want to avoid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851033</commentid>
    <comment_count>21</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-03-14 15:17:26 -0700</bug_when>
    <thetext>(In reply to zalan from comment #19)
&gt; Could you elaborate on the &quot;SVGs needs referenceBoxRect() needs to return a
&gt; FloatRect&quot; part? Does SVG need higher precision than what LayoutRect can
&gt; provide?
Sure, SVG needs arbitrary floating-point precision: you can define a SVG fragment that is infinitesimal small, only occupying e.g. 0.00001 x 0.00001px in user-coordinates. I&apos;ve seen &apos;normalized&apos; documents in the wild that have all content defined as fraction of 1px -- that&apos;s not an edge case, but common. Sure, there are potential issues when painting off device-pixels, but that&apos;s the price SVG pays for it&apos;s flexible unconstrained user coordinate system approach.

The LBSE downstream branch has some new test cases covering sub-LayoutUnit precision alignment for SVG renderers, here&apos;s an example reftest, illustrating the issue:

diff --git a/LayoutTests/svg/transforms/layout-tiny-elements-in-scaled-group-expected.svg b/LayoutTests/svg/transforms/layout-tiny-elements-in-scaled-group-expected.svg
new file mode 100644
index 000000000000..3b2839839ad8
--- /dev/null
+++ b/LayoutTests/svg/transforms/layout-tiny-elements-in-scaled-group-expected.svg
@@ -0,0 +1,8 @@
+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+&lt;!DOCTYPE svg PUBLIC &quot;-//W3C//DTD SVG 1.1 Tiny//EN&quot; &quot;http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd&quot;&gt;
+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;100%&quot; height=&quot;100%&quot; viewBox=&quot;0 0 48 36&quot;&gt;
+&lt;rect x=&quot;0&quot; y=&quot;0&quot; width=&quot;15&quot; height=&quot;15&quot; fill=&quot;red&quot; /&gt;
+&lt;rect x=&quot;20&quot; y=&quot;0&quot; width=&quot;15&quot; height=&quot;15&quot; fill=&quot;green&quot; /&gt;
+&lt;rect x=&quot;0&quot; y=&quot;20&quot; width=&quot;15&quot; height=&quot;15&quot; fill=&quot;yellow&quot; /&gt;
+&lt;rect x=&quot;20&quot; y=&quot;20&quot; width=&quot;15&quot; height=&quot;15&quot; fill=&quot;blue&quot; /&gt;
+&lt;/svg&gt;

diff --git a/LayoutTests/svg/transforms/layout-tiny-elements-in-scaled-group.svg b/LayoutTests/svg/transforms/layout-tiny-elements-in-scaled-group.svg
new file mode 100644
index 000000000000..d50ea8236696
--- /dev/null
+++ b/LayoutTests/svg/transforms/layout-tiny-elements-in-scaled-group.svg
@@ -0,0 +1,10 @@
+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+&lt;!DOCTYPE svg PUBLIC &quot;-//W3C//DTD SVG 1.1 Tiny//EN&quot; &quot;http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd&quot;&gt;
+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;100%&quot; height=&quot;100%&quot; viewBox=&quot;0 0 48 36&quot;&gt;
+&lt;g transform=&quot;scale(10000, 10000)&quot;&gt;
+&lt;rect x=&quot;0&quot; y=&quot;0&quot; width=&quot;0.0015&quot; height=&quot;0.0015&quot; fill=&quot;red&quot; /&gt;
+&lt;rect x=&quot;0.002&quot; y=&quot;0&quot; width=&quot;0.0015&quot; height=&quot;0.0015&quot; fill=&quot;green&quot; /&gt;
+&lt;rect x=&quot;0&quot; y=&quot;0.002&quot; width=&quot;0.0015&quot; height=&quot;0.0015&quot; fill=&quot;yellow&quot; /&gt;
+&lt;rect x=&quot;0.002&quot; y=&quot;0.002&quot; width=&quot;0.0015&quot; height=&quot;0.0015&quot; fill=&quot;blue&quot; /&gt;
+&lt;/g&gt;
+&lt;/svg&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851045</commentid>
    <comment_count>22</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2022-03-14 15:42:27 -0700</bug_when>
    <thetext>(In reply to Nikolas Zimmermann from comment #21)
&gt; (In reply to zalan from comment #19)
&gt; &gt; Could you elaborate on the &quot;SVGs needs referenceBoxRect() needs to return a
&gt; &gt; FloatRect&quot; part? Does SVG need higher precision than what LayoutRect can
&gt; &gt; provide?
&gt; Sure, SVG needs arbitrary floating-point precision: you can define a SVG
&gt; fragment that is infinitesimal small, only occupying e.g. 0.00001 x
&gt; 0.00001px in user-coordinates. I&apos;ve seen &apos;normalized&apos; documents in the wild
&gt; that have all content defined as fraction of 1px -- that&apos;s not an edge case,
&gt; but common. Sure, there are potential issues when painting off
&gt; device-pixels, but that&apos;s the price SVG pays for it&apos;s flexible unconstrained
&gt; user coordinate system approach.
ok, thanks for the explanation. In that case, I&apos;d rather just have a FloatRect referenceBox(). This API is not used extensively so probably won&apos;t be too confusing (and with LFC this may not even be a thing anymore).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851536</commentid>
    <comment_count>23</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-03-15 15:25:36 -0700</bug_when>
    <thetext>(In reply to zalan from comment #22)
&gt; ok, thanks for the explanation. In that case, I&apos;d rather just have a
&gt; FloatRect referenceBox(). This API is not used extensively so probably won&apos;t
&gt; be too confusing (and with LFC this may not even be a thing anymore).

Patch v6 took that approach - however you need to know at which times you need to convert the FloatRect returned by transformReferenceBox() into a LayoutRect, to apply pixel-snapping, to get a device-pixel aligned FloatRect again. This was quite confusing -- one needs to know the type of the renderer (e.g. RenderBox actually returns a LayoutRect, converted to a FloatRect, and e.g. RenderSVGModelObject does return a FloatRect, and won&apos;t need pixel snapping).
...

I do think that the latest iteration does have some advantages, especially as we can hide the whole pixel snapping into the &apos;floatRectForPainting&apos; method, and only conditionally apply it for non-SVG renderers.

Maybe you can have another look at Patch v6 and see if you agree with. my argumentation. Thanks for your time Zalan &amp; Simon &amp; Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851905</commentid>
    <comment_count>24</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-03-16 11:36:25 -0700</bug_when>
    <thetext>(In reply to zalan from comment #22)
&gt; FloatRect referenceBox(). This API is not used extensively so probably won&apos;t
&gt; be too confusing (and with LFC this may not even be a thing anymore).

Forgot to ask: what will differ with LFC regarding referenceBox() &amp; co?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852022</commentid>
    <comment_count>25</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2022-03-16 15:29:47 -0700</bug_when>
    <thetext>(In reply to Nikolas Zimmermann from comment #24)
&gt; (In reply to zalan from comment #22)
&gt; &gt; FloatRect referenceBox(). This API is not used extensively so probably won&apos;t
&gt; &gt; be too confusing (and with LFC this may not even be a thing anymore).
&gt; 
&gt; Forgot to ask: what will differ with LFC regarding referenceBox() &amp; co?
Haven&apos;t really thought about it yet, since referenceBox is not a layout concept, but (for this exact reason) it certainly won&apos;t be a public function on a Box class like this. Layout::Boxes do not have any geometry related APIs (since they don&apos;t know anything about position/size) and Display::Box is a lower level concept. Probably on a helper class used by painting/hittest etc? -and maybe we&apos;ll discover that FloatRect is the right type for all the use cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852236</commentid>
    <comment_count>26</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-03-17 05:01:48 -0700</bug_when>
    <thetext>(In reply to zalan from comment #25)
&gt; (In reply to Nikolas Zimmermann from comment #24)
&gt; &gt; (In reply to zalan from comment #22)
&gt; &gt; &gt; FloatRect referenceBox(). This API is not used extensively so probably won&apos;t
&gt; &gt; &gt; be too confusing (and with LFC this may not even be a thing anymore).
&gt; &gt; 
&gt; &gt; Forgot to ask: what will differ with LFC regarding referenceBox() &amp; co?
&gt; Haven&apos;t really thought about it yet, since referenceBox is not a layout
&gt; concept, but (for this exact reason) it certainly won&apos;t be a public function
&gt; on a Box class like this. Layout::Boxes do not have any geometry related
&gt; APIs (since they don&apos;t know anything about position/size) and Display::Box
&gt; is a lower level concept.
Ok.

&gt; Probably on a helper class used by
&gt; painting/hittest etc? -and maybe we&apos;ll discover that FloatRect is the right
&gt; type for all the use cases.

Hmmm, that confuses me -- do you have plans to move away from LayoutUnit &amp; co. for CSS geometry?

If not, I don&apos;t understand the comment: The CSS &quot;border box&quot; for an element, returned by RenderBox borderBoxRect() uses LayoutRect, as the whole geometry is based on fixed-point arithmetic. Therefore, if I need to pick a &quot;reference box&quot; (== borderBoxRect() if &quot;transform-box: border-box&quot; or contentBoxRect() if &quot;transform-box: content-box&quot;, etc.), I have no choice but to represent it as LayoutRect.

When painting CSS content, we decide to align the painting to device-pixels (taking device scale factors for HiDPI into account), which avoids unwanted anti-aliasing effects, blurry borders, etc.

Therefore we need to take the LayoutRects, and apply various operations, such
as snapRectToDevicePixels(someLayoutRect, deviceScaleFactor) to extract a FloatRect that can be passed down to the graphics stack, that we prepared in such a way that painting happens on device-pixel boundaries, resulting at most in off-by-one pixel errors, but sharp, non-blurry rendering.

All this logic is not wanted for SVG painting, as we don&apos;t generally know a sensible &apos;bin size&apos; to quantize the coordinate system axes (such as 1/64th pixel for CSS), as SVG allows arbitrary user-coordinate systems (e.g. (0,0) - (1e-6, 1e-4))...

For me the distinction between FloatRect/LayoutRect is therefore natural: CSS related geometry information will in general use LayoutRect, and SVG FloatRect.

Sure, you can return FloatRect(someLayoutRect) everywhere, to assure everything is encoded in FloatRects, but then you also need to keep track whether the FloatRect you have, came from a SVG or CSS source (to decide upon painting, if you need to snap or not, among other things).

Please enlighten me :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852732</commentid>
    <comment_count>27</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2022-03-18 08:55:19 -0700</bug_when>
    <thetext>&gt;Hmmm, that confuses me -- do you have plans to move away from LayoutUnit &amp; co. for CSS geometry?
It depends on what you mean by CSS geometry. LayoutUnit is going to be reserved for CSS layout operations only (stays within the layout formatting context boundaries) and a LayoutUnit -&gt; float conversion happens when producing the final display boxes (you can see it on trunk at InlineDisplayLineBuilder/InlineDisplayContentBuilder). So if you mean CSS geometry within layout, then the answer is no, we are not moving away from LayoutUnit. However if by CSS geometry you mean whatever painting/hittesting and friends are going to be based on, then the answer is yes. Now since reference box applies to transformable elements, which is a painting concept, it will operate on the display box side of things. It&apos;s going to return a float based value (since it won&apos;t even have access to LayoutUnit based geometries) and whether this value is aligned with some final output (e.g. physical pixel size) or not (probably not) I have not thought about yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1853136</commentid>
    <comment_count>28</comment_count>
      <attachid>455224</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-03-21 02:49:06 -0700</bug_when>
    <thetext>Created attachment 455224
Patch, v8</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1853142</commentid>
    <comment_count>29</comment_count>
      <attachid>455224</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2022-03-21 03:50:55 -0700</bug_when>
    <thetext>Comment on attachment 455224
Patch, v8

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

&gt; Source/WebCore/ChangeLog:13
&gt; +        &apos;referenceBoxFloatRect()&apos; methods  implementing the computation for both HTML/CSS and SVG.

Double spacing.

&gt; Source/WebCore/rendering/RenderBox.cpp:788
&gt; +    return std::nullopt;

I am not sure why this returns optional but also does not think returning null opt should happen?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1853147</commentid>
    <comment_count>30</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-03-21 04:08:48 -0700</bug_when>
    <thetext>(In reply to zalan from comment #27)
&gt; &gt;Hmmm, that confuses me -- do you have plans to move away from LayoutUnit &amp; co. for CSS geometry?
&gt; It depends on what you mean by CSS geometry. LayoutUnit is going to be
&gt; reserved for CSS layout operations only (stays within the layout formatting
&gt; context boundaries) and a LayoutUnit -&gt; float conversion happens when
&gt; producing the final display boxes (you can see it on trunk at
&gt; InlineDisplayLineBuilder/InlineDisplayContentBuilder). So if you mean CSS
&gt; geometry within layout, then the answer is no, we are not moving away from
&gt; LayoutUnit. However if by CSS geometry you mean whatever painting/hittesting
&gt; and friends are going to be based on, then the answer is yes. Now since
&gt; reference box applies to transformable elements, which is a painting
&gt; concept, it will operate on the display box side of things. It&apos;s going to
&gt; return a float based value (since it won&apos;t even have access to LayoutUnit
&gt; based geometries) and whether this value is aligned with some final output
&gt; (e.g. physical pixel size) or not (probably not) I have not thought about
&gt; yet.


Thanks for the explanation - I&apos;ll keep that in mind for future patches. Keeping Layout* an implementation detail makes sense, and it&apos;s good to see that LFC improves this.

Coming back to this patch:
Given your comments, the slack discussions and Simons preference towards two dedicated methods to query the &apos;reference box&apos;: one for HTML/CSS returning LayoutRect (as it is right now), and another one for SVG returning a &apos;FloatRect&apos; I have updated the patch once again (see v8).

However just adding a new method to RenderSVGModelObject leads to clumsy code like the example below in LBSE, since for SVG we not only need a different return type (FloatRect vs. LayoutRect) but also disable pixel snapping within the SVG subtree.

Places like RenderLayer::setupClipPath() that need access to both the device-pixel aligned FloatRect and the unsnapped LayoutRect then need to contain explicit checks for the type of the renderer and logic to handle them:

FloatRect referenceBoxRect;
FloatRect referenceBoxRectForPainting;
if (is&lt;RenderBox&gt;(someRenderer)) {
    LayoutRect referenceBox = downcast&lt;RenderBox&gt;(someRenderer).referenceBoxRect();
    referenceBoxRect = referenceBox;
    referenceBoxRectForPainting = snapRectToDevicePixels(referenceBox, someRenderer.document().deviceScaleFactor());
} else if (is&lt;RenderSVGModelObject&gt;(someRenderer)) {
    referenceBoxRect = downcast&lt;RenderSVGModelObject&gt;(someRenderer).referenceBoxRect();
    referenceBoxRectForPainting = referenceBoxRect;
}

This is quite a burden on the call site, and easy to miss certain renderers in all the different places, that currently contain such checks.
To clean this up, I added the following methods to RenderElement to compute the &apos;reference box&apos; (CSS Transformations Module Level 1):

virtual std::optional&lt;LayoutRect&gt; referenceBoxLayoutRect(CSSBoxType) const { return std::nullopt; }
virtual std::optional&lt;FloatRect&gt; referenceBoxFloatRect(CSSBoxType) const;

Plus helpers to query the &apos;transform reference box&apos;, based on these:

    std::optional&lt;FloatRect&gt; transformReferenceBoxFloatRect(const RenderStyle&amp; style) const { return referenceBoxFloatRect(transformBoxToCSSBoxType(style.transformBox())); }
    std::optional&lt;FloatRect&gt; transformReferenceBoxFloatRect() const { return transformReferenceBoxFloatRect(style()); }
...


RenderBox provides a referenceBoxLayoutRect() implementation (== the current RenderBox::referenceBox() method), and always returns std::nullopt for referenceBoxFloatRect().
RenderSVGModelObject keeps the default referenceBoxLayoutRect() implementation to return std::nullopt, whereas referenceBoxFloatRect() contains the reference box computation code currently present in SVGRenderSupport::transformReferenceBox() (added in this patch, but only used in LBSE -- omitted here).

RenderLayer needs access to the &apos;transform reference box&apos; to resolve e.g. percentage values in the &apos;transform-origin&apos; property and needs to pixel-snap these LayoutRects for painting, respecting the device scale factor. Currently it handles explicit RenderBox type checks in dozens of places that can be avoided.

Using the methods above one can easily define a method that fulfills the aformentioned requirements (no pixel snapping for SVG, no explicit type checking, etc.):

FloatRect RenderLayer::transformReferenceBoxRectForPainting(const RenderStyle&amp; style) const
{
    if (auto referenceBoxRect = renderer().transformReferenceBoxFloatRect(style))
        return referenceBoxRect.value();
    if (auto referenceBoxRect = renderer().transformReferenceBoxLayoutRect(style))
        return snapRectToDevicePixels(referenceBoxRect.value(), renderer().document().deviceScaleFactor());
    return { };
}

That looks more readable to me and makes other call sites more readable and less branchy:

     if (hasTransform) {
         m_transform-&gt;makeIdentity();
        renderer().applyTransform(*m_transform, transformReferenceBoxRectForPainting(renderer().style()));
         makeMatrixRenderable(*m_transform, canRender3DTransforms());
     }

If you&apos;re fine with the std::optional&lt;&gt; approach let me know.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1853148</commentid>
    <comment_count>31</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-03-21 04:14:31 -0700</bug_when>
    <thetext>(In reply to Rob Buis from comment #29)
&gt; Comment on attachment 455224 [details]

&gt; &gt; Source/WebCore/ChangeLog:13
&gt; &gt; +        &apos;referenceBoxFloatRect()&apos; methods  implementing the computation for both HTML/CSS and SVG.
&gt; 
&gt; Double spacing.
Will fix.

&gt; &gt; Source/WebCore/rendering/RenderBox.cpp:788
&gt; &gt; +    return std::nullopt;
&gt; 
&gt; I am not sure why this returns optional but also does not think returning
&gt; null opt should happen?
Nope it cannot, to documentthat I&apos;ve added the ASSERT_NOT_REACHED(). If we don&apos;t handle a certain type in the switch, the compiler will warn us, there is no &apos;default&apos; case given.

Why it returns a std::optional&lt;&gt;? See my length comment for why I tried that approach: it simplifies call sites by removing explicit type checks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1853149</commentid>
    <comment_count>32</comment_count>
      <attachid>455224</attachid>
    <who name="Rob Buis">rbuis</who>
    <bug_when>2022-03-21 04:23:10 -0700</bug_when>
    <thetext>Comment on attachment 455224
Patch, v8

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

Patch now LGTM, minus the small ChangeLog nit.

&gt;&gt;&gt; Source/WebCore/rendering/RenderBox.cpp:788
&gt;&gt;&gt; +    return std::nullopt;
&gt;&gt; 
&gt;&gt; I am not sure why this returns optional but also does not think returning null opt should happen?
&gt; 
&gt; Nope it cannot, to documentthat I&apos;ve added the ASSERT_NOT_REACHED(). If we don&apos;t handle a certain type in the switch, the compiler will warn us, there is no &apos;default&apos; case given.
&gt; 
&gt; Why it returns a std::optional&lt;&gt;? See my length comment for why I tried that approach: it simplifies call sites by removing explicit type checks.

Thanks, now it makes sense!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1858023</commentid>
    <comment_count>33</comment_count>
      <attachid>456616</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-04-04 13:32:55 -0700</bug_when>
    <thetext>Created attachment 456616
Patch, v9</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1858598</commentid>
    <comment_count>34</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-04-05 14:57:09 -0700</bug_when>
    <thetext>A new iteration, w/o std::optional&lt;&gt;, as discussed on Slack yesterday with smfr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1858599</commentid>
    <comment_count>35</comment_count>
      <attachid>456751</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-04-05 14:57:26 -0700</bug_when>
    <thetext>Created attachment 456751
Patch, v10</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1859028</commentid>
    <comment_count>36</comment_count>
      <attachid>456751</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2022-04-06 14:46:22 -0700</bug_when>
    <thetext>Comment on attachment 456751
Patch, v10

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

&gt; Source/WebCore/rendering/RenderLayer.h:701
&gt; +    // Returns the &apos;reference box&apos; used for clipping operations (different rules for inlines, wrt. to boxes).

&quot;for clipping&quot; makes me think of the overflow and clip properties, but I think this is only about clipPath? So maybe referenceBoxRectForClipPath() would be better? Not sure if motion path would also use it.

&gt; Source/WebCore/rendering/RenderLayer.h:927
&gt; +    bool rendererNeedsPixelSnapping() const;
&gt; +    FloatRect snapRectToDevicePixelsIfNeeded(const LayoutRect&amp;) const;
&gt; +    FloatRect snapRectToDevicePixelsIfNeeded(const FloatRect&amp;) const;

I think these should be free functions somewhere, and not functions of RenderLayer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1859167</commentid>
    <comment_count>37</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-04-07 01:43:58 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #36)
&gt; Comment on attachment 456751 [details]
&gt; Patch, v10
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=456751&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderLayer.h:701
&gt; &gt; +    // Returns the &apos;reference box&apos; used for clipping operations (different rules for inlines, wrt. to boxes).
&gt; 
&gt; &quot;for clipping&quot; makes me think of the overflow and clip properties, but I
&gt; think this is only about clipPath? So maybe referenceBoxRectForClipPath()
&gt; would be better?
Correct, that&apos;s a better term - will fix.

&gt; Not sure if motion path would also use it.
Motion path is resolved against the boundingBox, passed to RenderStyle::applyTransform() -- which is usually the &apos;transform reference box&apos;, no special handling for inlines needed.

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderLayer.h:927
&gt; &gt; +    bool rendererNeedsPixelSnapping() const;
&gt; &gt; +    FloatRect snapRectToDevicePixelsIfNeeded(const LayoutRect&amp;) const;
&gt; &gt; +    FloatRect snapRectToDevicePixelsIfNeeded(const FloatRect&amp;) const;
&gt; 
&gt; I think these should be free functions somewhere, and not functions of
&gt; RenderLayer.
I checked all call-sites that currently use snapRectToDevicePixels():

There are users of that function in RenderBox/RenderBoxModelObject/RenderElement -- all in HTML/CSS specific code that cannot be invoked through SVG. Therefore it&apos;s safe to stay with the snapRectToDevicePixels() method, as it is right now.

The places in RenderLayer that use snapRectToDevicePixels() were patched to use snapRectToDevicePixelsIfNeeded(). There&apos;s only one place that&apos;s also relevant: RenderObject::addFocusRingQuads, would in principle need to avoid pixel-snapping for SVG -- however that function is broken with transformed descandants anyhow, unaware of SVG, so I&apos;m ignoring this.

Therefore RenderLayerModelObject.h seems to be ok to place the new free-functions. If you&apos;d like to see this moved to another maybe new header file, let me know, and I&apos;ll fix that post-landing.

Furthermore one last minute fix: I&apos;ve changes the pixel snapping condition, to only ever affect something if LBSE is not only compiled, but also activated:

+bool rendererNeedsPixelSnapping(const RenderLayerModelObject&amp; renderer)
+{
+#if ENABLE(LAYER_BASED_SVG_ENGINE)
+    if (renderer.document().settings().layerBasedSVGEngineEnabled() &amp;&amp; renderer.isSVGLayerAwareRenderer() &amp;&amp; !renderer.isSVGRoot())
+        return false;
+#endif
+    return true;
+}

This was previously missing the SVGEngineEnabled() check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1859175</commentid>
    <comment_count>38</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-04-07 03:07:10 -0700</bug_when>
    <thetext>Committed r292525 (249363@trunk): &lt;https://commits.webkit.org/249363@trunk&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1859178</commentid>
    <comment_count>39</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-04-07 03:18:31 -0700</bug_when>
    <thetext>Landed an additional build fix right after in https://trac.webkit.org/changeset/290882/webkit, to silence an unused parameter warning in non-lbse enabled builds (default setting).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1859200</commentid>
    <comment_count>40</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-04-07 04:48:31 -0700</bug_when>
    <thetext>There are regressions...

https://build.webkit.org/results/Apple-BigSur-Release-AppleSilicon-WK1-Tests/r292525%20(8691)/results.html

compositing/geometry/scroller-with-clipping-and-foreground-layers.html
imported/w3c/web-platform-tests/css/css-contain/contain-body-overflow-002.html

I will investigate -- will likely take some hours as I&apos;ll have a break in 1h for a few hours. If okay, leave it in the tree, and I&apos;ll come back tonight with a fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1859201</commentid>
    <comment_count>41</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-04-07 04:57:00 -0700</bug_when>
    <thetext>(In reply to Nikolas Zimmermann from comment #40)
&gt; There are regressions...
&gt; 
&gt; https://build.webkit.org/results/Apple-BigSur-Release-AppleSilicon-WK1-Tests/
&gt; r292525%20(8691)/results.html
&gt; 
&gt; compositing/geometry/scroller-with-clipping-and-foreground-layers.html
&gt; imported/w3c/web-platform-tests/css/css-contain/contain-body-overflow-002.
&gt; html
&gt; 
&gt; I will investigate -- will likely take some hours as I&apos;ll have a break in 1h
&gt; for a few hours. If okay, leave it in the tree, and I&apos;ll come back tonight
&gt; with a fix.

It&apos;s only compositing/geometry/scroller-with-clipping-and-foreground-layers.html.
https://build.webkit.org/results/Apple-BigSur-Release-AppleSilicon-WK1-Tests/r292525%20(8691)/results.html

Cannot reproduce locally at present, but I have additional patches on top, let&apos;s see.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1859482</commentid>
    <comment_count>42</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2022-04-07 15:54:23 -0700</bug_when>
    <thetext>Later builds apparently had no issue - let&apos;s see, if this comes back or if it was a fluke.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454027</attachid>
            <date>2022-03-07 13:51:59 -0800</date>
            <delta_ts>2022-03-07 14:11:48 -0800</delta_ts>
            <desc>Patch, v1</desc>
            <filename>bug-237554-20220307135157.patch</filename>
            <type>text/plain</type>
            <size>22824</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwOTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjY0Y2Y3Y2VjOWRmYjUx
OTY1NWNhYjFiZTVkNTg4NmEwMTkzMjFhNC4uMjJiNTRhNDI1ZTk5ODE4ZDUzOTJmNTkxOWNmZjZi
NDYxZTFiNTU1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDIyLTAzLTA3ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFVuaWZ5
ICd0cmFuc2Zvcm0tYm94JyByZWZlcmVuY2UgYm94IGNvbXB1dGF0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc1NTQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgdGhlIGNvZGUgdG8g
Y29tcHV0ZSB0aGUgcmVmZXJlbmNlIGJveCwgYWNjb3JkaW5nIHRvIHRoZSBDU1MgJ3RyYW5zZm9y
bS1ib3gnCisgICAgICAgIHByb3BlcnR5IGlzIHNwcmlua2xlZCBvdmVyIHZhcmlvdXMgcGxhY2Vz
OiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24sIFNWR1JlbmRlclN1cHBvcnQsCisgICAgICAg
IFJlbmRlckJveCwgcGFydHMgaW4gUmVuZGVyTGF5ZXIuCisKKyAgICAgICAgQ2xlYW51cCBhbmQg
dW5pZnkgdGhlIGNvZGUgaW4gYSBzaW5nbGUgcGxhY2U6IGEgbmV3ICdyZWZlcmVuY2VCb3hSZWN0
KCknICBtZXRob2QgaW1wbGVtZW50aW5nCisgICAgICAgIHRoZSBjb21wdXRhdGlvbiBmb3IgYm90
aCBTVkcvSFRNTCwgd2hlcmUgdGhlIFNWRyBjb2RlIGxpdmVzIGluIFJlbmRlckVsZW1lbnQgKHRo
ZSBvbmx5IHNoYXJlZAorICAgICAgICBiYXNlIGNsYXNzIGJldHdlZW4gbGVnYWN5IFNWRy9MQlNF
KSBhbmQgdGhlIEhUTUwgY29kZSBpbiBSZW5kZXJCb3guIFRoZSBIVE1ML0NTUyBpbXBsZW1lbnRh
dGlvbgorICAgICAgICB3YXMgYWxyZWFkeSBjb250YWluZWQgaW4gUmVuZGVyQm94OjpyZWZlcmVu
Y2VCb3goKSBhbmQgd2FzIHJlbmFtZWQgdG8gcmVmZXJlbmNlQm94UmVjdCgpIHRvIGZvbGxvdwor
ICAgICAgICB0aGUgbmFtaW5nIGNvbnZlbnRpb24gZm9yIHRoZSBvdGhlciBDU1MgYm94IGdlb2Vt
dHJ5IGhlbHBlcnMgc3VjaCBhcyBjb250ZW50Qm94UmVjdCgpLAorICAgICAgICBib3JkZXJCb3hS
ZWN0KCksIGV0Yy4KKworICAgICAgICBSZW1vdmUgY29kZSBmcm9tIFNWR1JlbmRlclN1cHBvcnQv
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uIHRoYXQgY2FuIG5vdyB1c2UgdGhlIHNoYXJlZCBs
b2dpYy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLCBubyBjaGFuZ2UgaW4g
YmVoYXZpb3VyLgorCisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5j
cHA6IAorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZWRUcmFuc2Zvcm0pOiBVc2UgdGhlIHJlbmRl
cmVycyB0cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCkgaW5zdGVhZCBvZiB0aGUgc3RhdGljIGhl
bHBlciBmdW5jdGlvbiB0cmFuc2Zvcm1SZWZlcmVuY2VCb3goKS4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnZhbHVlRm9yUHJvcGVydHlJblN0eWxlKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjp0cmFuc2Zvcm1SZWZlcmVuY2VCb3gpOiBEZWxldGVkLiBSZW5k
ZXJFbGVtZW50Ojp0cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCkgcHJvdmlkZXMgdGhlIHNhbWUg
bG9naWMgaW4gYSBnZW5lcmljIHdheS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cmVmZXJlbmNlQm94UmVjdCBjb25zdCk6
IFJlbmFtZSByZWZlcmVuY2VCb3goKSB0byByZWZlcmVuY2VCb3hSZWN0KCkgYW5kIHJldHVybiBG
bG9hdFJlY3QgaW5zdGVhZCBvZiBMYXlvdXRSZWN0LgorICAgICAgICBMQlNFIHdhbnRzIHRvIHJl
LXVzZSB0aGUgbG9naWMgYnV0IHdpdGhvdXQgcGl4ZWwgc25hcHBpbmcgd2l0aGluIHRoZSBTVkcg
cmVuZGVyIHRyZWUuIEFsbCBjYWxsZXJzIHdlcmUgYWRhcHRlZCB0byB0aGUgbmV3IHJldHVybiB0
eXBlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpoaXRUZXN0Q2xpcFBhdGggY29uc3Qp
OiBBZGFwdCB0byByZWZlcmVuY2VCb3goKSAtPiByZWZlcmVuY2VCb3hSZWN0KCkgcmVuYW1pbmcu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnJlZmVyZW5jZUJveCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOiBBZGFwdCB0byByZWZlcmVuY2VC
b3goKSAtPiByZWZlcmVuY2VCb3hSZWN0KCkgcmVuYW1pbmcKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjpyZWZl
cmVuY2VCb3hSZWN0IGNvbnN0KTogQWRkIHJlZmVyZW5jZUJveFJlY3QoKSBpbXBsZW1lbnRhdGlv
biBmb3IgU1ZHIHJlbmRlcmVycy4gVGhlIGNvbW1vbiBiYXNlLWNsYXNzIGZvcgorICAgICAgICBh
bGwgU1ZHIHJlbmRlcmVycyBpcyBSZW5kZXJFbGVtZW50IGluIHRoZSBsZWdhY3kgU1ZHIGVuZ2lu
ZSBhbmQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCBpbiBMQlNFLiBUbyBzaGFyZSB0aGUgY29kZSBi
ZXR3ZWVuIGJvdGggU1ZHCisgICAgICAgIGltcGxlbWVudGF0aW9ucyBpdCBoYXMgdG8gYmUgcGxh
Y2VkIGluIFJlbmRlckVsZW1lbnQgLS0gdG8gYmUgbW92ZWQgdG8gUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCwgb25jZSBMQlNFIGlzIHRoZSBvbmx5IFNWRyBlbmdpbmUuCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OnRy
YW5zZm9ybVJlZmVyZW5jZUJveFJlY3QgY29uc3QpOiBBZGQgbmV3IGhlbHBlciBmdW5jdGlvbiB3
aGljaCBpbnZva2VzIHJlZmVyZW5jZUJveFJlY3QoKSB1c2luZworICAgICAgICB0cmFuc2Zvcm1C
b3hUb0NTU0JveFR5cGUoc3R5bGUoKS50cmFuc2Zvcm1Cb3goKSkuIFdoZW5ldmVyIHRyYW5zZm9y
bS1ib3ggc3VwcG9ydCBpcyBuZWNlc3NhcnksIHRoaXMgbWV0aG9kIHNoYWxsIGJlIHVzZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDogVXNlIHRoZSBuZXcgdHJhbnNmb3Jt
UmVmZXJlbmNlQm94UmVjdCgpIHdoZXJlIHBvc3NpYmxlLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnBlcnNwZWN0aXZlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpwZXJzcGVjdGl2ZU9yaWdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb21wdXRlUmVmZXJlbmNlQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpj
b21wdXRlQ2xpcFBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNl
dHVwQ2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVJlZmVyZW5jZVJlY3RGcm9t
Qm94KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3VwcG9ydDo6dHJhbnNmb3JtUmVmZXJl
bmNlQm94KTogRGVsZXRlZC4gUmVuZGVyRWxlbWVudDo6dHJhbnNmb3JtUmVmZXJlbmNlQm94UmVj
dCgpIHByb3ZpZGVzIHRoZSBzYW1lIGxvZ2ljIGluIGEgZ2VuZXJpYyB3YXkuCisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0Lmg6IERpdHRvLgorICAgICAgICAqIHN2Zy9T
VkdHcmFwaGljc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHR3JhcGhpY3NFbGVt
ZW50OjphbmltYXRlZExvY2FsVHJhbnNmb3JtIGNvbnN0KTogVXNlIHRoZSByZW5kZXJlcnMgdHJh
bnNmb3JtUmVmZXJlbmNlQm94UmVjdCgpIGluc3RlYWQgb2YgU1ZHUmVuZGVyU3VwcG9ydDo6dHJh
bnNmb3JtUmVmZXJlbmNlQm94KCkuCisKIDIwMjItMDMtMDcgIE5pa29sYXMgWmltbWVybWFubiAg
PG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CiAKICAgICAgICAgQ2xlYW51cCBSZW5kZXJMYXllcjo6
Y3VycmVudFRyYW5zZm9ybSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IGU5NDUxNzcxMzZlNjExZmQ4YjZiMDAwNjI3MmVh
ZjEwNmJjMDQ5ZTYuLmUyNzk0ODNiNTk3ZmFlMjAxNTViYmI1NDFhMWZhZGZlMGYzMTFhMWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24u
Y3BwCkBAIC01NjAsMTcgKzU2MCw2IEBAIHN0YXRpYyBMYXlvdXRSZWN0IHNpemluZ0JveChSZW5k
ZXJPYmplY3QmIHJlbmRlcmVyKQogICAgIHJldHVybiBib3guc3R5bGUoKS5ib3hTaXppbmcoKSA9
PSBCb3hTaXppbmc6OkJvcmRlckJveCA/IGJveC5ib3JkZXJCb3hSZWN0KCkgOiBib3guY29tcHV0
ZWRDU1NDb250ZW50Qm94UmVjdCgpOwogfQogCi1zdGF0aWMgRmxvYXRSZWN0IHRyYW5zZm9ybVJl
ZmVyZW5jZUJveChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyKQotewotICAgIGlmIChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKSkKLSAgICAgICAg
cmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpLnJlZmVyZW5jZUJveCh0cmFuc2Zv
cm1Cb3hUb0NTU0JveFR5cGUoc3R5bGUudHJhbnNmb3JtQm94KCkpKTsKLQotICAgIGlmIChpczxT
VkdFbGVtZW50PihyZW5kZXJlci5lbGVtZW50KCkpKQotICAgICAgICByZXR1cm4gU1ZHUmVuZGVy
U3VwcG9ydDo6dHJhbnNmb3JtUmVmZXJlbmNlQm94KHJlbmRlcmVyLCBkb3duY2FzdDxTVkdFbGVt
ZW50PigqcmVuZGVyZXIuZWxlbWVudCgpKSwgc3R5bGUpOwotCi0gICAgcmV0dXJuIHsgfTsKLX0K
LQogc3RhdGljIFJlZjxDU1NGdW5jdGlvblZhbHVlPiBtYXRyaXhUcmFuc2Zvcm1WYWx1ZShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUpCiB7CiAgICAgUmVmUHRyPENTU0Z1bmN0aW9uVmFsdWU+IHRyYW5zZm9ybVZhbHVlOwpAQCAt
NjIzLDcgKzYxMiw3IEBAIHN0YXRpYyBSZWY8Q1NTVmFsdWU+IGNvbXB1dGVkVHJhbnNmb3JtKFJl
bmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsCiAgICAgICAgIHJldHVybiBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5v
bmUpOwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwotICAgIHN0eWxlLmFw
cGx5VHJhbnNmb3JtKHRyYW5zZm9ybSwgdHJhbnNmb3JtUmVmZXJlbmNlQm94KHN0eWxlLCAqcmVu
ZGVyZXIpLCB7IH0pOworICAgIHN0eWxlLmFwcGx5VHJhbnNmb3JtKHRyYW5zZm9ybSwgcmVuZGVy
ZXItPnRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3QoKSwgeyB9KTsKICAgICAvLyBOb3RlIHRoYXQg
dGhpcyBkb2VzIG5vdCBmbGF0dGVuIHRvIGFuIGFmZmluZSB0cmFuc2Zvcm0gaWYgRU5BQkxFKDNE
X1RSQU5TRk9STVMpIGlzIG9mZiwgYnkgZGVzaWduLgogCiAgICAgLy8gRklYTUU6IE5lZWQgdG8g
cHJpbnQgb3V0IGluZGl2aWR1YWwgZnVuY3Rpb25zIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjM5MjQpCkBAIC0zODM1LDcgKzM4MjQsNyBAQCBSZWZQdHI8Q1NTVmFs
dWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnZhbHVlRm9yUHJvcGVydHlJblN0eWxlKGNvbnN0
IFJlbmRlclN0eQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5UGVyc3BlY3RpdmVPcmlnaW46IHsK
ICAgICAgICAgICAgIGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0
ZWQoKTsKICAgICAgICAgICAgIGlmIChyZW5kZXJlcikgewotICAgICAgICAgICAgICAgIGF1dG8g
Ym94ID0gdHJhbnNmb3JtUmVmZXJlbmNlQm94KHN0eWxlLCAqcmVuZGVyZXIpOworICAgICAgICAg
ICAgICAgIGF1dG8gYm94ID0gcmVuZGVyZXItPnRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3QoKTsK
ICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShtaW5p
bXVtVmFsdWVGb3JMZW5ndGgoc3R5bGUucGVyc3BlY3RpdmVPcmlnaW5YKCksIGJveC53aWR0aCgp
KSwgc3R5bGUpKTsKICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4
ZWxWYWx1ZShtaW5pbXVtVmFsdWVGb3JMZW5ndGgoc3R5bGUucGVyc3BlY3RpdmVPcmlnaW5ZKCks
IGJveC5oZWlnaHQoKSksIHN0eWxlKSk7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMzg5MSw3
ICszODgwLDcgQEAgUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjp2YWx1
ZUZvclByb3BlcnR5SW5TdHlsZShjb25zdCBSZW5kZXJTdHkKICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVRyYW5zZm9ybU9yaWdpbjogewogICAgICAgICAgICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVM
aXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwogICAgICAgICAgICAgaWYgKHJlbmRlcmVyKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byBib3ggPSB0cmFuc2Zvcm1SZWZlcmVuY2VCb3goc3R5bGUs
ICpyZW5kZXJlcik7CisgICAgICAgICAgICAgICAgYXV0byBib3ggPSByZW5kZXJlci0+dHJhbnNm
b3JtUmVmZXJlbmNlQm94UmVjdCgpOwogICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZCh6b29t
QWRqdXN0ZWRQaXhlbFZhbHVlKG1pbmltdW1WYWx1ZUZvckxlbmd0aChzdHlsZS50cmFuc2Zvcm1P
cmlnaW5YKCksIGJveC53aWR0aCgpKSwgc3R5bGUpKTsKICAgICAgICAgICAgICAgICBsaXN0LT5h
cHBlbmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShtaW5pbXVtVmFsdWVGb3JMZW5ndGgoc3R5bGUu
dHJhbnNmb3JtT3JpZ2luWSgpLCBib3guaGVpZ2h0KCkpLCBzdHlsZSkpOwogICAgICAgICAgICAg
ICAgIGlmIChzdHlsZS50cmFuc2Zvcm1PcmlnaW5aKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwCmluZGV4IGM0MTZiZTkxZmYzZjU2OTcyYmNhYjRhMDVjNjg5NTNkODliYzYx
MzAuLjE4YmVhMzc3NDM2N2IyOTZkMzAyNTE2ODVmNDVhMjM3MWFjNmNjY2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC03NjYsOSArNzY2LDggQEAgTGF5b3V0UG9p
bnQgUmVuZGVyQm94Ojpjb250ZW50Qm94TG9jYXRpb24oKSBjb25zdAogICAgIHJldHVybiB7IGJv
cmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkgKyBzY3JvbGxiYXJTcGFjZSwgYm9yZGVyVG9wKCkg
KyBwYWRkaW5nVG9wKCkgfTsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJCb3g6OnJlZmVyZW5jZUJv
eChDU1NCb3hUeXBlIGJveFR5cGUpIGNvbnN0CitGbG9hdFJlY3QgUmVuZGVyQm94OjpyZWZlcmVu
Y2VCb3hSZWN0KENTU0JveFR5cGUgYm94VHlwZSkgY29uc3QKIHsKLSAgICBMYXlvdXRSZWN0IHJl
ZmVyZW5jZUJveDsKICAgICBzd2l0Y2ggKGJveFR5cGUpIHsKICAgICBjYXNlIENTU0JveFR5cGU6
OkNvbnRlbnRCb3g6CiAgICAgY2FzZSBDU1NCb3hUeXBlOjpGaWxsQm94OgpAQCAtNzg0LDYgKzc4
Myw4IEBAIExheW91dFJlY3QgUmVuZGVyQm94OjpyZWZlcmVuY2VCb3goQ1NTQm94VHlwZSBib3hU
eXBlKSBjb25zdAogICAgIGNhc2UgQ1NTQm94VHlwZTo6Qm94TWlzc2luZzoKICAgICAgICAgcmV0
dXJuIGJvcmRlckJveFJlY3QoKTsKICAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICByZXR1cm4geyB9OwogfQogCkBAIC0xNDYwLDggKzE0NjEsNyBAQCBib29sIFJlbmRlckJv
eDo6aGl0VGVzdENsaXBQYXRoKGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExvY2F0aW9u
LCBjb25zdCBMYQogICAgIHN3aXRjaCAoc3R5bGUoKS5jbGlwUGF0aCgpLT50eXBlKCkpIHsKICAg
ICBjYXNlIFBhdGhPcGVyYXRpb246OlNoYXBlOiB7CiAgICAgICAgIGF1dG8mIGNsaXBQYXRoID0g
ZG93bmNhc3Q8U2hhcGVQYXRoT3BlcmF0aW9uPigqc3R5bGUoKS5jbGlwUGF0aCgpKTsKLSAgICAg
ICAgYXV0byByZWZlcmVuY2VCb3hSZWN0ID0gcmVmZXJlbmNlQm94KGNsaXBQYXRoLnJlZmVyZW5j
ZUJveCgpKTsKLSAgICAgICAgaWYgKCFjbGlwUGF0aC5wYXRoRm9yUmVmZXJlbmNlUmVjdChyZWZl
cmVuY2VCb3hSZWN0KS5jb250YWlucyhoaXRUZXN0TG9jYXRpb25JbkxvY2FsQ29vcmRpbmF0ZXMs
IGNsaXBQYXRoLndpbmRSdWxlKCkpKQorICAgICAgICBpZiAoIWNsaXBQYXRoLnBhdGhGb3JSZWZl
cmVuY2VSZWN0KHJlZmVyZW5jZUJveFJlY3QoY2xpcFBhdGgucmVmZXJlbmNlQm94KCkpKS5jb250
YWlucyhoaXRUZXN0TG9jYXRpb25JbkxvY2FsQ29vcmRpbmF0ZXMsIGNsaXBQYXRoLndpbmRSdWxl
KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggZWQ3Nzc3MGU3ZTQyOWQ1Yjc2MmMw
ZWJjMjkxYmFmMDJmNDcwMjMyNS4uY2FjNjEzZmQ2MWUxYjA1ZWIyNzQxNTlhYmZjOTI1ZWVmMzU3
NzQ1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaApAQCAtMTY3LDggKzE2Nyw4
IEBAIHB1YmxpYzoKICAgICBMYXlvdXRSZWN0IGNvbnRlbnRCb3hSZWN0KCkgY29uc3Q7CiAgICAg
TGF5b3V0UG9pbnQgY29udGVudEJveExvY2F0aW9uKCkgY29uc3Q7CiAKLSAgICAvLyAuaHR0cHM6
Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy10cmFuc2Zvcm1zLTEvI3JlZmVyZW5jZS1ib3gKLSAgICBM
YXlvdXRSZWN0IHJlZmVyZW5jZUJveChDU1NCb3hUeXBlKSBjb25zdDsKKyAgICAvLyBodHRwczov
L3d3dy53My5vcmcvVFIvY3NzLXRyYW5zZm9ybXMtMS8jcmVmZXJlbmNlLWJveAorICAgIEZsb2F0
UmVjdCByZWZlcmVuY2VCb3hSZWN0KENTU0JveFR5cGUpIGNvbnN0IGZpbmFsOwogCiAgICAgLy8g
VGhlIGNvbnRlbnQgYm94IGluIGFic29sdXRlIGNvb3Jkcy4gSWdub3JlcyB0cmFuc2Zvcm1zLgog
ICAgIEludFJlY3QgYWJzb2x1dGVDb250ZW50Qm94KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKaW5kZXggZTkzMmJjNzRiMWZkZWI3NGFlMzJkMmJm
ODA3MDlmN2M1ZWI2ZGQyNS4uYmE3MDFkMmRjZDRmYzVhMjZkMTBlOTA4OGEwYjdmYTdkMzkwZDg2
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcApAQCAtNzgs
NiArNzgsNyBAQAogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50
VHlwZUhlbHBlcnMuaCIKICNpbmNsdWRlICJTVkdJbWFnZS5oIgorI2luY2x1ZGUgIlNWR0xlbmd0
aENvbnRleHQuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCiAjaW5jbHVkZSAiU2V0
dGluZ3MuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCkBAIC0yMzg5LDQgKzIzOTAsMzggQEAg
T3ZlcmZsb3cgUmVuZGVyRWxlbWVudDo6ZWZmZWN0aXZlT3ZlcmZsb3dZKCkgY29uc3QKICAgICBy
ZXR1cm4gb3ZlcmZsb3dZOwogfQogCisvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXRyYW5z
Zm9ybXMtMS8jdHJhbnNmb3JtLWJveAorRmxvYXRSZWN0IFJlbmRlckVsZW1lbnQ6OnJlZmVyZW5j
ZUJveFJlY3QoQ1NTQm94VHlwZSBib3hUeXBlKSBjb25zdAoreworICAgIC8vIENTUyBib3ggbW9k
ZWwgY29kZSBpcyBpbXBsZW1lbnRlZCBpbiBSZW5kZXJCb3g6OnJlZmVyZW5jZUJveFJlY3QoKS4K
KworICAgIC8vIEZvciB0aGUgbGVnYWN5IFNWRyBlbmdpbmUsIFJlbmRlckVsZW1lbnQgaXMgdGhl
IG9ubHkgY2xhc3MgdGhhdCdzCisgICAgLy8gcHJlc2VudCBpbiB0aGUgYW5jZXN0b3IgY2hhaW4g
b2YgYWxsIFNWRyByZW5kZXJlcnMuIEluIExCU0UgdGhlCisgICAgLy8gY29tbW9uIGNsYXNzIGlz
IFJlbmRlckxheWVyTW9kZWxPYmplY3QuIE9uY2UgdGhlIGxlZ2FjeSBTVkcgZW5naW5lCisgICAg
Ly8gaXMgcmVtb3ZlZCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBtb3ZlZCB0byBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0LgorICAgIC8vIEFzIHRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgYm90aCBTVkcg
ZW5naW5lcywgd2UgbmVlZCB0byBwbGFjZSBpdAorICAgIC8vIGhlcmUgaW4gUmVuZGVyRWxlbWVu
dCwgYXMgdGVtcG9yYXJ5IHNvbHV0aW9uLgorICAgIGlmICghaXM8U1ZHRWxlbWVudD4oZWxlbWVu
dCgpKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHN3aXRjaCAoYm94VHlwZSkgeworICAg
IGNhc2UgQ1NTQm94VHlwZTo6Qm94TWlzc2luZzoKKyAgICBjYXNlIENTU0JveFR5cGU6OkNvbnRl
bnRCb3g6CisgICAgY2FzZSBDU1NCb3hUeXBlOjpQYWRkaW5nQm94OgorICAgIGNhc2UgQ1NTQm94
VHlwZTo6RmlsbEJveDoKKyAgICAgICAgcmV0dXJuIG9iamVjdEJvdW5kaW5nQm94KCk7CisgICAg
Y2FzZSBDU1NCb3hUeXBlOjpCb3JkZXJCb3g6CisgICAgY2FzZSBDU1NCb3hUeXBlOjpNYXJnaW5C
b3g6CisgICAgY2FzZSBDU1NCb3hUeXBlOjpTdHJva2VCb3g6CisgICAgICAgIHJldHVybiBzdHJv
a2VCb3VuZGluZ0JveCgpOworICAgIGNhc2UgQ1NTQm94VHlwZTo6Vmlld0JveDoKKyAgICAgICAg
RmxvYXRTaXplIHZpZXdwb3J0U2l6ZTsKKyAgICAgICAgU1ZHTGVuZ3RoQ29udGV4dChkb3duY2Fz
dDxTVkdFbGVtZW50PihlbGVtZW50KCkpKS5kZXRlcm1pbmVWaWV3cG9ydCh2aWV3cG9ydFNpemUp
OworICAgICAgICByZXR1cm4geyB7IH0sIHZpZXdwb3J0U2l6ZSB9OworICAgIH0KKworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCmluZGV4IDUxYzU1MmNiZDllN2ZkMmI3Y2JlOWQx
MmRjZmEzZjEzMWZmN2RmMWIuLmVkNTEyNjI3YjFjMDQyNTdkN2ZlMjUyMDYxNTVhOTNlMWY2ZGYw
ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaApAQCAtMjU4LDYg
KzI1OCwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvbkZpbmlzaGVkKGNv
bnN0IFN0cmluZyYgLyogbmFtZSAqLykgeyB9CiAgICAgdmlydHVhbCB2b2lkIHRyYW5zZm9ybVJl
bGF0ZWRQcm9wZXJ0eURpZENoYW5nZSgpIHsgfQogCisgICAgLy8gaHR0cHM6Ly93d3cudzMub3Jn
L1RSL2Nzcy10cmFuc2Zvcm1zLTEvI3RyYW5zZm9ybS1ib3gKKyAgICBGbG9hdFJlY3QgdHJhbnNm
b3JtUmVmZXJlbmNlQm94UmVjdCgpIGNvbnN0IHsgcmV0dXJuIHJlZmVyZW5jZUJveFJlY3QodHJh
bnNmb3JtQm94VG9DU1NCb3hUeXBlKHN0eWxlKCkudHJhbnNmb3JtQm94KCkpKTsgfQorCisgICAg
Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy10cmFuc2Zvcm1zLTEvI3JlZmVyZW5jZS1ib3gK
KyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZWZlcmVuY2VCb3hSZWN0KENTU0JveFR5cGUpIGNvbnN0
OworCiAgICAgdmlydHVhbCB2b2lkIHN1c3BlbmRBbmltYXRpb25zKE1vbm90b25pY1RpbWUgPSBN
b25vdG9uaWNUaW1lKCkpIHsgfQogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gYW5p
bWF0ZWRTdHlsZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApp
bmRleCA5OWJhZDI5YWEyNDlmY2VhMjhkMjJjZWVlZWRhMjg3M2MwYzM5M2U0Li41YmU3YmE3NTY5
ZWU2NjFjNzFjMTljMzA4OWE0OTVkMGE1OTcyOGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKQEAgLTEyOTYsMjEgKzEyOTYsMTYgQEAgdm9pZCBSZW5kZXJMYXll
cjo6ZGlydHlBbmNlc3RvckNoYWluSGFzQmxlbmRpbmdEZXNjZW5kYW50cygpCiB9CiAjZW5kaWYK
IAotc3RhdGljIGlubGluZSBMYXlvdXRSZWN0IGNvbXB1dGVSZWZlcmVuY2VSZWN0RnJvbUJveChj
b25zdCBSZW5kZXJCb3gmIGJveCwgQ1NTQm94VHlwZSBib3hUeXBlLCBjb25zdCBMYXlvdXRTaXpl
JiBvZmZzZXRGcm9tUm9vdCkKLXsKLSAgICBhdXRvIHJlZmVyZW5jZUJveCA9IGJveC5yZWZlcmVu
Y2VCb3goYm94VHlwZSk7Ci0gICAgcmVmZXJlbmNlQm94Lm1vdmUob2Zmc2V0RnJvbVJvb3QpOwot
ICAgIHJldHVybiByZWZlcmVuY2VCb3g7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgTGF5b3V0UmVjdCBj
b21wdXRlUmVmZXJlbmNlQm94KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIENTU0JveFR5
cGUgYm94VHlwZSwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3QsIGNvbnN0IExheW91
dFJlY3QmIHJvb3RSZWxhdGl2ZUJvdW5kcykKK3N0YXRpYyBpbmxpbmUgRmxvYXRSZWN0IGNvbXB1
dGVSZWZlcmVuY2VCb3goY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIsIENT
U0JveFR5cGUgYm94VHlwZSwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3QsIGNvbnN0
IExheW91dFJlY3QmIHJvb3RSZWxhdGl2ZUJvdW5kcykKIHsKICAgICAvLyBGSVhNRTogU3VwcG9y
dCBkaWZmZXJlbnQgcmVmZXJlbmNlIGJveGVzIGZvciBpbmxpbmUgY29udGVudC4KICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5MDQ3CiAgICAgaWYgKCFy
ZW5kZXJlci5pc0JveCgpKQogICAgICAgICByZXR1cm4gcm9vdFJlbGF0aXZlQm91bmRzOwogICAg
IAotICAgIHJldHVybiBjb21wdXRlUmVmZXJlbmNlUmVjdEZyb21Cb3goZG93bmNhc3Q8UmVuZGVy
Qm94PihyZW5kZXJlciksIGJveFR5cGUsIG9mZnNldEZyb21Sb290KTsKKyAgICBhdXRvIHJlZmVy
ZW5jZUJveCA9IHJlbmRlcmVyLnJlZmVyZW5jZUJveFJlY3QoYm94VHlwZSk7CisgICAgcmVmZXJl
bmNlQm94Lm1vdmUob2Zmc2V0RnJvbVJvb3QpOworICAgIHJldHVybiByZWZlcmVuY2VCb3g7CiB9
CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVRyYW5zZm9ybSgpCkBAIC0xMzM1LDcgKzEzMzAs
NyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVUcmFuc2Zvcm0oKQogICAgICAgICAvLyBGSVhN
RTogW0xCU0VdIFVwc3RyZWFtIHJlZmVyZW5jZSBib3ggY29tcHV0YXRpb24gZm9yIFJlbmRlclNW
R01vZGVsT2JqZWN0IGRlcml2ZWQgcmVuZGVyZXJzCiAgICAgICAgIEZsb2F0UmVjdCByZWZlcmVu
Y2VCb3g7CiAgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKQotICAgICAgICAg
ICAgcmVmZXJlbmNlQm94ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhkb3duY2FzdDxSZW5kZXJC
b3g+KHJlbmRlcmVyKCkpLnJlZmVyZW5jZUJveCh0cmFuc2Zvcm1Cb3hUb0NTU0JveFR5cGUocmVu
ZGVyZXIoKS5zdHlsZSgpLnRyYW5zZm9ybUJveCgpKSksIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5k
ZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICAgICAgICAgIHJlZmVyZW5jZUJveCA9IHNuYXBSZWN0
VG9EZXZpY2VQaXhlbHMoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS50cmFuc2Zvcm1S
ZWZlcmVuY2VCb3hSZWN0KCksIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3Rv
cigpKTsKIAogICAgICAgICByZW5kZXJlcigpLmFwcGx5VHJhbnNmb3JtKCptX3RyYW5zZm9ybSwg
cmVmZXJlbmNlQm94KTsKICAgICAgICAgbWFrZU1hdHJpeFJlbmRlcmFibGUoKm1fdHJhbnNmb3Jt
LCBjYW5SZW5kZXIzRFRyYW5zZm9ybXMoKSk7CkBAIC0xMzY2LDcgKzEzNjEsNyBAQCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBSZW5kZXJMYXllcjo6Y3VycmVudFRyYW5zZm9ybShPcHRpb25TZXQ8UmVu
ZGVyU3R5bGU6OlRyYW5zZgogICAgIC8vIFF1ZXJ5IHRoZSBhbmltYXRlZFN0eWxlKCkgdG8gb2J0
YWluIHRoZSBjdXJyZW50IHRyYW5zZm9ybWF0aW9uLCB3aGVuIGFjY2VsZXJhdGVkIHRyYW5zZm9y
bSBhbmltYXRpb25zIGFyZSBydW5uaW5nLgogICAgIGF1dG8gc3R5bGVhYmxlID0gU3R5bGVhYmxl
Ojpmcm9tUmVuZGVyZXIocmVuZGVyQm94KTsKICAgICBpZiAoKHN0eWxlYWJsZSAmJiBzdHlsZWFi
bGUtPmlzUnVubmluZ0FjY2VsZXJhdGVkVHJhbnNmb3JtQW5pbWF0aW9uKCkpIHx8ICFvcHRpb25z
LmNvbnRhaW5zKFJlbmRlclN0eWxlOjpUcmFuc2Zvcm1PcGVyYXRpb25PcHRpb246OlRyYW5zZm9y
bU9yaWdpbikpIHsKLSAgICAgICAgYXV0byBwaXhlbFNuYXBwZWRCb3JkZXJSZWN0ID0gc25hcFJl
Y3RUb0RldmljZVBpeGVscyhyZW5kZXJCb3gucmVmZXJlbmNlQm94KHRyYW5zZm9ybUJveFRvQ1NT
Qm94VHlwZShhbmltYXRlZFN0eWxlLT50cmFuc2Zvcm1Cb3goKSkpLCByZW5kZXJCb3guZG9jdW1l
bnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICAgICAgYXV0byBwaXhlbFNuYXBwZWRCb3Jk
ZXJSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhyZW5kZXJCb3gudHJhbnNmb3JtUmVmZXJl
bmNlQm94UmVjdCgpLCByZW5kZXJCb3guZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsK
IAogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CiAgICAgICAgIGFuaW1h
dGVkU3R5bGUtPmFwcGx5VHJhbnNmb3JtKHRyYW5zZm9ybSwgcGl4ZWxTbmFwcGVkQm9yZGVyUmVj
dCwgb3B0aW9ucyk7CkBAIC0xODAxLDggKzE3OTYsOSBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBS
ZW5kZXJMYXllcjo6cGVyc3BlY3RpdmVUcmFuc2Zvcm0oY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJS
ZQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgYXV0byBkZXZpY2VTY2FsZUZhY3RvciA9IHJl
bmRlckJveC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7Ci0gICAgYXV0byByZWZlcmVu
Y2VCb3ggPSByZW5kZXJCb3gucmVmZXJlbmNlQm94KHRyYW5zZm9ybUJveFRvQ1NTQm94VHlwZShz
dHlsZS50cmFuc2Zvcm1Cb3goKSkpOwotICAgIGF1dG8gcGl4ZWxTbmFwcGVkUmVmZXJlbmNlQm94
ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhyZWZlcmVuY2VCb3gsIGRldmljZVNjYWxlRmFjdG9y
KTsKKyAgICBhdXRvIHJlZmVyZW5jZUJveCA9IHJlbmRlckJveC50cmFuc2Zvcm1SZWZlcmVuY2VC
b3hSZWN0KCk7CisgICAgLy8gRklYTUU6IFtMQlNFXSBBdm9pZCBwaXhlbCBzbmFwcGluZyBpbiBT
Vkcgc3VidHJlZS4KKyAgICBhdXRvIHBpeGVsU25hcHBlZFJlZmVyZW5jZUJveCA9IHNuYXBSZWN0
VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdChyZWZlcmVuY2VCb3gpLCBkZXZpY2VTY2FsZUZhY3Rv
cik7CiAgICAgYXV0byBzbmFwcGVkTGF5ZXJSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhs
YXllclJlY3QsIGRldmljZVNjYWxlRmFjdG9yKTsKIAogICAgIGF1dG8gcGVyc3BlY3RpdmVPcmln
aW4gPSBwaXhlbFNuYXBwZWRSZWZlcmVuY2VCb3gubG9jYXRpb24oKSAtIHRvRmxvYXRTaXplKHNu
YXBwZWRMYXllclJlY3QubG9jYXRpb24oKSkgKyBmbG9hdFBvaW50Rm9yTGVuZ3RoUG9pbnQoc3R5
bGUucGVyc3BlY3RpdmVPcmlnaW4oKSwgcGl4ZWxTbmFwcGVkUmVmZXJlbmNlQm94LnNpemUoKSk7
CkBAIC0xODIzLDYgKzE4MTksNyBAQCBGbG9hdFBvaW50IFJlbmRlckxheWVyOjpwZXJzcGVjdGl2
ZU9yaWdpbigpIGNvbnN0CiB7CiAgICAgaWYgKCFyZW5kZXJlcigpLmhhc1RyYW5zZm9ybVJlbGF0
ZWRQcm9wZXJ0eSgpKQogICAgICAgICByZXR1cm4geyB9OworICAgIC8vIEZJWE1FOiBUaGlzIHVz
ZXMgdGhlIHdyb25nLCB0cmFuc2Zvcm0tYm94IHVuYXdhcmUsIGdlb21ldHJ5LgogICAgIHJldHVy
biBmbG9hdFBvaW50Rm9yTGVuZ3RoUG9pbnQocmVuZGVyZXIoKS5zdHlsZSgpLnBlcnNwZWN0aXZl
T3JpZ2luKCksIHJlbmRlcmVyQm9yZGVyQm94UmVjdCgpLnNpemUoKSk7CiB9CiAKQEAgLTMyMTIs
MjEgKzMyMDksOSBAQCBzdGQ6OnBhaXI8UGF0aCwgV2luZFJ1bGU+IFJlbmRlckxheWVyOjpjb21w
dXRlQ2xpcFBhdGgoY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RgogCiAgICAgaWYgKGlzPFNoYXBl
UGF0aE9wZXJhdGlvbj4oKnN0eWxlLmNsaXBQYXRoKCkpKSB7CiAgICAgICAgIGF1dG8mIGNsaXBQ
YXRoID0gZG93bmNhc3Q8U2hhcGVQYXRoT3BlcmF0aW9uPigqc3R5bGUuY2xpcFBhdGgoKSk7Ci0K
LSAgICAgICAgTGF5b3V0UmVjdCByZWZlcmVuY2VCb3g7Ci0gICAgICAgIGlmIChpczxSZW5kZXJC
b3g+KHJlbmRlcmVyKCkpKSB7Ci0gICAgICAgICAgICByZWZlcmVuY2VCb3ggPSBkb3duY2FzdDxS
ZW5kZXJCb3g+KHJlbmRlcmVyKCkpLnJlZmVyZW5jZUJveChjbGlwUGF0aC5yZWZlcmVuY2VCb3go
KSk7Ci0gICAgICAgICAgICByZWZlcmVuY2VCb3gubW92ZShvZmZzZXRGcm9tUm9vdCk7Ci0jaWYg
RU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCi0gICAgICAgIH0gZWxzZSBpZiAoaXM8UmVu
ZGVyU1ZHTW9kZWxPYmplY3Q+KHJlbmRlcmVyKCkpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTog
W0xCU0VdIFVwc3RyZWFtIGNsaXBwaW5nIHN1cHBvcnQgZm9yIFJlbmRlclNWR01vZGVsT2JqZWN0
IGRlcml2ZWQgcmVuZGVyZXJzCi0jZW5kaWYKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IC8vIFJlZmVyZW5jZSBib3ggZm9yIGlubGluZXMgaXMgbm90IHdlbGwgZGVmaW5lZDogaHR0cHM6
Ly9naXRodWIuY29tL3czYy9jc3N3Zy1kcmFmdHMvaXNzdWVzLzYzODMKLSAgICAgICAgICAgIHJl
ZmVyZW5jZUJveCA9IHJvb3RSZWxhdGl2ZUJvdW5kc0Zvck5vbkJveGVzOwotICAgICAgICB9Ci0K
LSAgICAgICAgYXV0byBzbmFwcGVkUmVmZXJlbmNlQm94ID0gc25hcFJlY3RUb0RldmljZVBpeGVs
cyhyZWZlcmVuY2VCb3gsIGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICAgICAgYXV0byByZWZlcmVu
Y2VCb3ggPSBjb21wdXRlUmVmZXJlbmNlQm94KHJlbmRlcmVyKCksIGNsaXBQYXRoLnJlZmVyZW5j
ZUJveCgpLCBvZmZzZXRGcm9tUm9vdCwgcm9vdFJlbGF0aXZlQm91bmRzRm9yTm9uQm94ZXMpOwor
ICAgICAgICAvLyBGSVhNRTogW0xCU0VdIEF2b2lkIHBpeGVsIHNuYXBwaW5nIGluIFNWRyBzdWJ0
cmVlLgorICAgICAgICBhdXRvIHNuYXBwZWRSZWZlcmVuY2VCb3ggPSBzbmFwUmVjdFRvRGV2aWNl
UGl4ZWxzKExheW91dFJlY3QocmVmZXJlbmNlQm94KSwgZGV2aWNlU2NhbGVGYWN0b3IpOwogICAg
ICAgICByZXR1cm4geyBjbGlwUGF0aC5wYXRoRm9yUmVmZXJlbmNlUmVjdChzbmFwcGVkUmVmZXJl
bmNlQm94KSwgY2xpcFBhdGgud2luZFJ1bGUoKSB9OwogICAgIH0KIApAQCAtMzI2OSw3ICszMjU0
LDggQEAgdm9pZCBSZW5kZXJMYXllcjo6c2V0dXBDbGlwUGF0aChHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIEdyYXBoaWNzQ29udGV4dFN0YXRlU2EKICAgICAgICAgICAgIC8vIFVzZSB0aGUgYm9y
ZGVyIGJveCBhcyB0aGUgcmVmZXJlbmNlIGJveCwgZXZlbiB0aG91Z2ggdGhpcyBpcyBub3QgY2xl
YXJseSBzcGVjaWZpZWQ6IGh0dHBzOi8vZ2l0aHViLmNvbS93M2MvY3Nzd2ctZHJhZnRzL2lzc3Vl
cy81Nzg2LgogICAgICAgICAgICAgLy8gY2xpcHBlZENvbnRlbnRCb3VuZHMgaXMgdXNlZCBhcyB0
aGUgcmVmZXJlbmNlIGJveCBmb3IgaW5saW5lcywgd2hpY2ggaXMgYWxzbyBwb29ybHkgc3BlY2lm
aWVkOiBodHRwczovL2dpdGh1Yi5jb20vdzNjL2Nzc3dnLWRyYWZ0cy9pc3N1ZXMvNjM4My4KICAg
ICAgICAgICAgIGF1dG8gcmVmZXJlbmNlQm94ID0gY29tcHV0ZVJlZmVyZW5jZUJveChyZW5kZXJl
cigpLCBDU1NCb3hUeXBlOjpCb3JkZXJCb3gsIG9mZnNldEZyb21Sb290LCBjbGlwcGVkQ29udGVu
dEJvdW5kcyk7Ci0gICAgICAgICAgICBhdXRvIHNuYXBwZWRSZWZlcmVuY2VCb3ggPSBzbmFwUmVj
dFRvRGV2aWNlUGl4ZWxzKHJlZmVyZW5jZUJveCwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmlj
ZVNjYWxlRmFjdG9yKCkpOworICAgICAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBBdm9pZCBwaXhl
bCBzbmFwcGluZyBpbiBTVkcgc3VidHJlZS4KKyAgICAgICAgICAgIGF1dG8gc25hcHBlZFJlZmVy
ZW5jZUJveCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdChyZWZlcmVuY2VCb3gp
LCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAgICAgICAgICAg
ICBhdXRvIG9mZnNldCA9IHNuYXBwZWRSZWZlcmVuY2VCb3gubG9jYXRpb24oKTsKIAogICAgICAg
ICAgICAgYXV0byBzbmFwcGVkQ2xpcHBpbmdCb3VuZHMgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxz
KGNsaXBwZWRDb250ZW50Qm91bmRzLCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVG
YWN0b3IoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlclN1cHBvcnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJT
dXBwb3J0LmNwcAppbmRleCBjYzM4ZWM3MDMwZTYwY2UxNzU5YjEzMjg3ZGUyNWY3M2Q1NjVjODU4
Li5lMmJlYjRiYThjMTE1N2RjYmIxMjg2NDlhM2VkZTU2ZTM4NGU4ZDA5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKQEAgLTM0Mywy
NiArMzQzLDYgQEAgYm9vbCBTVkdSZW5kZXJTdXBwb3J0OjpmaWx0ZXJzRm9yY2VDb250YWluZXJM
YXlvdXQoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotRmxvYXRSZWN0IFNWR1JlbmRlclN1cHBvcnQ6OnRyYW5zZm9ybVJlZmVyZW5jZUJveChjb25z
dCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgU1ZHRWxlbWVudCYgZWxlbWVudCwgY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlKQotewotICAgIHN3aXRjaCAoc3R5bGUudHJhbnNmb3JtQm94
KCkpIHsKLSAgICBjYXNlIFRyYW5zZm9ybUJveDo6Qm9yZGVyQm94OgotICAgICAgICAvLyBGb3Ig
U1ZHIGVsZW1lbnRzIHdpdGhvdXQgYW4gYXNzb2NpYXRlZCBDU1MgbGF5b3V0IGJveCwgdGhlIHVz
ZWQgdmFsdWUgZm9yIGJvcmRlci1ib3ggaXMgc3Ryb2tlLWJveC4KLSAgICBjYXNlIFRyYW5zZm9y
bUJveDo6U3Ryb2tlQm94OgotICAgICAgICByZXR1cm4gcmVuZGVyZXIuc3Ryb2tlQm91bmRpbmdC
b3goKTsKLSAgICBjYXNlIFRyYW5zZm9ybUJveDo6Q29udGVudEJveDoKLSAgICAgICAgLy8gRm9y
IFNWRyBlbGVtZW50cyB3aXRob3V0IGFuIGFzc29jaWF0ZWQgQ1NTIGxheW91dCBib3gsIHRoZSB1
c2VkIHZhbHVlIGZvciBjb250ZW50LWJveCBpcyBmaWxsLWJveC4KLSAgICBjYXNlIFRyYW5zZm9y
bUJveDo6RmlsbEJveDoKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVyLm9iamVjdEJvdW5kaW5nQm94
KCk7Ci0gICAgY2FzZSBUcmFuc2Zvcm1Cb3g6OlZpZXdCb3g6IHsKLSAgICAgICAgRmxvYXRTaXpl
IHZpZXdwb3J0U2l6ZTsKLSAgICAgICAgU1ZHTGVuZ3RoQ29udGV4dCgmZWxlbWVudCkuZGV0ZXJt
aW5lVmlld3BvcnQodmlld3BvcnRTaXplKTsKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCB7IHsg
fSwgdmlld3BvcnRTaXplIH07Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHsgfTsKLX0K
LQogaW5saW5lIEZsb2F0UmVjdCBjbGlwUGF0aFJlZmVyZW5jZUJveChjb25zdCBSZW5kZXJFbGVt
ZW50JiByZW5kZXJlciwgQ1NTQm94VHlwZSBib3hUeXBlKQogewogICAgIEZsb2F0UmVjdCByZWZl
cmVuY2VCb3g7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlclN1cHBvcnQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3Vw
cG9ydC5oCmluZGV4IDljY2ZjYmViNTc3YTc3M2RjODgwN2Q5NTM5ZDYyYTgxZTU2MTliODkuLmQ0
M2QwYzdmNzU4ZDE1ZmI3MDQ2YzkxYmUwY2E5ZGE1M2RkODU2MDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oCkBAIC04Miw4ICs4Miw2IEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIHN0eWxlQ2hhbmdlZChSZW5kZXJFbGVtZW50Jiwg
Y29uc3QgUmVuZGVyU3R5bGUqKTsKICAgICAKLSAgICBzdGF0aWMgRmxvYXRSZWN0IHRyYW5zZm9y
bVJlZmVyZW5jZUJveChjb25zdCBSZW5kZXJFbGVtZW50JiwgY29uc3QgU1ZHRWxlbWVudCYsIGNv
bnN0IFJlbmRlclN0eWxlJik7Ci0KICNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQogICAgIHN0
YXRpYyBib29sIGlzb2xhdGVzQmxlbmRpbmcoY29uc3QgUmVuZGVyU3R5bGUmKTsKICAgICBzdGF0
aWMgdm9pZCB1cGRhdGVNYXNrZWRBbmNlc3RvclNob3VsZElzb2xhdGVCbGVuZGluZyhjb25zdCBS
ZW5kZXJFbGVtZW50Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhcGhp
Y3NFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFwaGljc0VsZW1lbnQuY3Bw
CmluZGV4IDQ5YTJjYTY5OGY1NGU1MmYwOTIwYjU0ODQ2ZGUzNWQzNWVhMmQxZmEuLjYyMmQ2N2Qw
MWE2ZmExODdhOGU0NGQ4MWEyZDQ5ZjdkYTk4YTk1NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdHcmFwaGljc0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdHcmFwaGljc0VsZW1lbnQuY3BwCkBAIC04MCwxMiArODAsMTAgQEAgQWZmaW5lVHJhbnNmb3Jt
IFNWR0dyYXBoaWNzRWxlbWVudDo6YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0CiAKICAg
ICAvLyBIb25vciBhbnkgb2YgdGhlIHRyYW5zZm9ybS1yZWxhdGVkIENTUyBwcm9wZXJ0aWVzIGlm
IHNldC4KICAgICBpZiAoaGFzU3BlY2lmaWVkVHJhbnNmb3JtIHx8IChzdHlsZSAmJiAoc3R5bGUt
PnRyYW5zbGF0ZSgpIHx8IHN0eWxlLT5zY2FsZSgpIHx8IHN0eWxlLT5yb3RhdGUoKSkpKSB7Ci0g
ICAgICAgIGF1dG8gYm91bmRpbmdCb3ggPSBTVkdSZW5kZXJTdXBwb3J0Ojp0cmFuc2Zvcm1SZWZl
cmVuY2VCb3goKnJlbmRlcmVyKCksICp0aGlzLCAqc3R5bGUpOwotICAgICAgICAKICAgICAgICAg
Ly8gTm90ZTogb2JqZWN0Qm91bmRpbmdCb3ggaXMgYW4gZW1wdHlSZWN0IGZvciBlbGVtZW50cyBs
aWtlIHBhdHRlcm4gb3IgY2xpcFBhdGguCiAgICAgICAgIC8vIFNlZSB0aGUgIk9iamVjdCBib3Vu
ZGluZyBib3ggdW5pdHMiIHNlY3Rpb24gb2YgaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3NzMy10
cmFuc2Zvcm1zLwogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07Ci0gICAg
ICAgIHN0eWxlLT5hcHBseVRyYW5zZm9ybSh0cmFuc2Zvcm0sIGJvdW5kaW5nQm94KTsKKyAgICAg
ICAgc3R5bGUtPmFwcGx5VHJhbnNmb3JtKHRyYW5zZm9ybSwgcmVuZGVyZXIoKS0+dHJhbnNmb3Jt
UmVmZXJlbmNlQm94UmVjdCgpKTsKIAogICAgICAgICAvLyBGbGF0dGVuIGFueSAzRCB0cmFuc2Zv
cm0uCiAgICAgICAgIG1hdHJpeCA9IHRyYW5zZm9ybS50b0FmZmluZVRyYW5zZm9ybSgpOwpAQCAt
MTAwLDcgKzk4LDcgQEAgQWZmaW5lVHJhbnNmb3JtIFNWR0dyYXBoaWNzRWxlbWVudDo6YW5pbWF0
ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0CiAKICAgICAvLyBJZiB3ZSBkaWRuJ3QgaGF2ZSB0aGUg
Q1NTICJ0cmFuc2Zvcm0iIHByb3BlcnR5IHNldCwgd2UgbXVzdCBhY2NvdW50IGZvciB0aGUgInRy
YW5zZm9ybSIgYXR0cmlidXRlLgogICAgIGlmICghaGFzU3BlY2lmaWVkVHJhbnNmb3JtICYmIHN0
eWxlKSB7Ci0gICAgICAgIGF1dG8gYm91bmRpbmdCb3ggPSBTVkdSZW5kZXJTdXBwb3J0Ojp0cmFu
c2Zvcm1SZWZlcmVuY2VCb3goKnJlbmRlcmVyKCksICp0aGlzLCAqc3R5bGUpOworICAgICAgICBh
dXRvIGJvdW5kaW5nQm94ID0gcmVuZGVyZXIoKS0+dHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdCgp
OwogICAgICAgICBhdXRvIHQgPSBmbG9hdFBvaW50Rm9yTGVuZ3RoUG9pbnQoc3R5bGUtPnRyYW5z
Zm9ybU9yaWdpblhZKCksIGJvdW5kaW5nQm94LnNpemUoKSkgKyBib3VuZGluZ0JveC5sb2NhdGlv
bigpOwogICAgICAgICBtYXRyaXgudHJhbnNsYXRlKHQpOwogICAgICAgICBtYXRyaXggKj0gdHJh
bnNmb3JtKCkuY29uY2F0ZW5hdGUoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454033</attachid>
            <date>2022-03-07 14:11:53 -0800</date>
            <delta_ts>2022-03-09 03:06:21 -0800</delta_ts>
            <desc>Patch, v1</desc>
            <filename>bug-237554-20220307141151.patch</filename>
            <type>text/plain</type>
            <size>22848</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwOTI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjY0Y2Y3Y2VjOWRmYjUx
OTY1NWNhYjFiZTVkNTg4NmEwMTkzMjFhNC4uMjJiNTRhNDI1ZTk5ODE4ZDUzOTJmNTkxOWNmZjZi
NDYxZTFiNTU1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDIyLTAzLTA3ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFVuaWZ5
ICd0cmFuc2Zvcm0tYm94JyByZWZlcmVuY2UgYm94IGNvbXB1dGF0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc1NTQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgdGhlIGNvZGUgdG8g
Y29tcHV0ZSB0aGUgcmVmZXJlbmNlIGJveCwgYWNjb3JkaW5nIHRvIHRoZSBDU1MgJ3RyYW5zZm9y
bS1ib3gnCisgICAgICAgIHByb3BlcnR5IGlzIHNwcmlua2xlZCBvdmVyIHZhcmlvdXMgcGxhY2Vz
OiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24sIFNWR1JlbmRlclN1cHBvcnQsCisgICAgICAg
IFJlbmRlckJveCwgcGFydHMgaW4gUmVuZGVyTGF5ZXIuCisKKyAgICAgICAgQ2xlYW51cCBhbmQg
dW5pZnkgdGhlIGNvZGUgaW4gYSBzaW5nbGUgcGxhY2U6IGEgbmV3ICdyZWZlcmVuY2VCb3hSZWN0
KCknICBtZXRob2QgaW1wbGVtZW50aW5nCisgICAgICAgIHRoZSBjb21wdXRhdGlvbiBmb3IgYm90
aCBTVkcvSFRNTCwgd2hlcmUgdGhlIFNWRyBjb2RlIGxpdmVzIGluIFJlbmRlckVsZW1lbnQgKHRo
ZSBvbmx5IHNoYXJlZAorICAgICAgICBiYXNlIGNsYXNzIGJldHdlZW4gbGVnYWN5IFNWRy9MQlNF
KSBhbmQgdGhlIEhUTUwgY29kZSBpbiBSZW5kZXJCb3guIFRoZSBIVE1ML0NTUyBpbXBsZW1lbnRh
dGlvbgorICAgICAgICB3YXMgYWxyZWFkeSBjb250YWluZWQgaW4gUmVuZGVyQm94OjpyZWZlcmVu
Y2VCb3goKSBhbmQgd2FzIHJlbmFtZWQgdG8gcmVmZXJlbmNlQm94UmVjdCgpIHRvIGZvbGxvdwor
ICAgICAgICB0aGUgbmFtaW5nIGNvbnZlbnRpb24gZm9yIHRoZSBvdGhlciBDU1MgYm94IGdlb2Vt
dHJ5IGhlbHBlcnMgc3VjaCBhcyBjb250ZW50Qm94UmVjdCgpLAorICAgICAgICBib3JkZXJCb3hS
ZWN0KCksIGV0Yy4KKworICAgICAgICBSZW1vdmUgY29kZSBmcm9tIFNWR1JlbmRlclN1cHBvcnQv
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uIHRoYXQgY2FuIG5vdyB1c2UgdGhlIHNoYXJlZCBs
b2dpYy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLCBubyBjaGFuZ2UgaW4g
YmVoYXZpb3VyLgorCisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5j
cHA6IAorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZWRUcmFuc2Zvcm0pOiBVc2UgdGhlIHJlbmRl
cmVycyB0cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCkgaW5zdGVhZCBvZiB0aGUgc3RhdGljIGhl
bHBlciBmdW5jdGlvbiB0cmFuc2Zvcm1SZWZlcmVuY2VCb3goKS4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnZhbHVlRm9yUHJvcGVydHlJblN0eWxlKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjp0cmFuc2Zvcm1SZWZlcmVuY2VCb3gpOiBEZWxldGVkLiBSZW5k
ZXJFbGVtZW50Ojp0cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCkgcHJvdmlkZXMgdGhlIHNhbWUg
bG9naWMgaW4gYSBnZW5lcmljIHdheS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cmVmZXJlbmNlQm94UmVjdCBjb25zdCk6
IFJlbmFtZSByZWZlcmVuY2VCb3goKSB0byByZWZlcmVuY2VCb3hSZWN0KCkgYW5kIHJldHVybiBG
bG9hdFJlY3QgaW5zdGVhZCBvZiBMYXlvdXRSZWN0LgorICAgICAgICBMQlNFIHdhbnRzIHRvIHJl
LXVzZSB0aGUgbG9naWMgYnV0IHdpdGhvdXQgcGl4ZWwgc25hcHBpbmcgd2l0aGluIHRoZSBTVkcg
cmVuZGVyIHRyZWUuIEFsbCBjYWxsZXJzIHdlcmUgYWRhcHRlZCB0byB0aGUgbmV3IHJldHVybiB0
eXBlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpoaXRUZXN0Q2xpcFBhdGggY29uc3Qp
OiBBZGFwdCB0byByZWZlcmVuY2VCb3goKSAtPiByZWZlcmVuY2VCb3hSZWN0KCkgcmVuYW1pbmcu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnJlZmVyZW5jZUJveCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOiBBZGFwdCB0byByZWZlcmVuY2VC
b3goKSAtPiByZWZlcmVuY2VCb3hSZWN0KCkgcmVuYW1pbmcKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjpyZWZl
cmVuY2VCb3hSZWN0IGNvbnN0KTogQWRkIHJlZmVyZW5jZUJveFJlY3QoKSBpbXBsZW1lbnRhdGlv
biBmb3IgU1ZHIHJlbmRlcmVycy4gVGhlIGNvbW1vbiBiYXNlLWNsYXNzIGZvcgorICAgICAgICBh
bGwgU1ZHIHJlbmRlcmVycyBpcyBSZW5kZXJFbGVtZW50IGluIHRoZSBsZWdhY3kgU1ZHIGVuZ2lu
ZSBhbmQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCBpbiBMQlNFLiBUbyBzaGFyZSB0aGUgY29kZSBi
ZXR3ZWVuIGJvdGggU1ZHCisgICAgICAgIGltcGxlbWVudGF0aW9ucyBpdCBoYXMgdG8gYmUgcGxh
Y2VkIGluIFJlbmRlckVsZW1lbnQgLS0gdG8gYmUgbW92ZWQgdG8gUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCwgb25jZSBMQlNFIGlzIHRoZSBvbmx5IFNWRyBlbmdpbmUuCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OnRy
YW5zZm9ybVJlZmVyZW5jZUJveFJlY3QgY29uc3QpOiBBZGQgbmV3IGhlbHBlciBmdW5jdGlvbiB3
aGljaCBpbnZva2VzIHJlZmVyZW5jZUJveFJlY3QoKSB1c2luZworICAgICAgICB0cmFuc2Zvcm1C
b3hUb0NTU0JveFR5cGUoc3R5bGUoKS50cmFuc2Zvcm1Cb3goKSkuIFdoZW5ldmVyIHRyYW5zZm9y
bS1ib3ggc3VwcG9ydCBpcyBuZWNlc3NhcnksIHRoaXMgbWV0aG9kIHNoYWxsIGJlIHVzZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDogVXNlIHRoZSBuZXcgdHJhbnNmb3Jt
UmVmZXJlbmNlQm94UmVjdCgpIHdoZXJlIHBvc3NpYmxlLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnBlcnNwZWN0aXZlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpwZXJzcGVjdGl2ZU9yaWdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb21wdXRlUmVmZXJlbmNlQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpj
b21wdXRlQ2xpcFBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNl
dHVwQ2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVJlZmVyZW5jZVJlY3RGcm9t
Qm94KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3VwcG9ydDo6dHJhbnNmb3JtUmVmZXJl
bmNlQm94KTogRGVsZXRlZC4gUmVuZGVyRWxlbWVudDo6dHJhbnNmb3JtUmVmZXJlbmNlQm94UmVj
dCgpIHByb3ZpZGVzIHRoZSBzYW1lIGxvZ2ljIGluIGEgZ2VuZXJpYyB3YXkuCisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0Lmg6IERpdHRvLgorICAgICAgICAqIHN2Zy9T
VkdHcmFwaGljc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHR3JhcGhpY3NFbGVt
ZW50OjphbmltYXRlZExvY2FsVHJhbnNmb3JtIGNvbnN0KTogVXNlIHRoZSByZW5kZXJlcnMgdHJh
bnNmb3JtUmVmZXJlbmNlQm94UmVjdCgpIGluc3RlYWQgb2YgU1ZHUmVuZGVyU3VwcG9ydDo6dHJh
bnNmb3JtUmVmZXJlbmNlQm94KCkuCisKIDIwMjItMDMtMDcgIE5pa29sYXMgWmltbWVybWFubiAg
PG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CiAKICAgICAgICAgQ2xlYW51cCBSZW5kZXJMYXllcjo6
Y3VycmVudFRyYW5zZm9ybSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IGU5NDUxNzcxMzZlNjExZmQ4YjZiMDAwNjI3MmVh
ZjEwNmJjMDQ5ZTYuLmUyNzk0ODNiNTk3ZmFlMjAxNTViYmI1NDFhMWZhZGZlMGYzMTFhMWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24u
Y3BwCkBAIC01NjAsMTcgKzU2MCw2IEBAIHN0YXRpYyBMYXlvdXRSZWN0IHNpemluZ0JveChSZW5k
ZXJPYmplY3QmIHJlbmRlcmVyKQogICAgIHJldHVybiBib3guc3R5bGUoKS5ib3hTaXppbmcoKSA9
PSBCb3hTaXppbmc6OkJvcmRlckJveCA/IGJveC5ib3JkZXJCb3hSZWN0KCkgOiBib3guY29tcHV0
ZWRDU1NDb250ZW50Qm94UmVjdCgpOwogfQogCi1zdGF0aWMgRmxvYXRSZWN0IHRyYW5zZm9ybVJl
ZmVyZW5jZUJveChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyKQotewotICAgIGlmIChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKSkKLSAgICAgICAg
cmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpLnJlZmVyZW5jZUJveCh0cmFuc2Zv
cm1Cb3hUb0NTU0JveFR5cGUoc3R5bGUudHJhbnNmb3JtQm94KCkpKTsKLQotICAgIGlmIChpczxT
VkdFbGVtZW50PihyZW5kZXJlci5lbGVtZW50KCkpKQotICAgICAgICByZXR1cm4gU1ZHUmVuZGVy
U3VwcG9ydDo6dHJhbnNmb3JtUmVmZXJlbmNlQm94KHJlbmRlcmVyLCBkb3duY2FzdDxTVkdFbGVt
ZW50PigqcmVuZGVyZXIuZWxlbWVudCgpKSwgc3R5bGUpOwotCi0gICAgcmV0dXJuIHsgfTsKLX0K
LQogc3RhdGljIFJlZjxDU1NGdW5jdGlvblZhbHVlPiBtYXRyaXhUcmFuc2Zvcm1WYWx1ZShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUpCiB7CiAgICAgUmVmUHRyPENTU0Z1bmN0aW9uVmFsdWU+IHRyYW5zZm9ybVZhbHVlOwpAQCAt
NjIzLDcgKzYxMiw3IEBAIHN0YXRpYyBSZWY8Q1NTVmFsdWU+IGNvbXB1dGVkVHJhbnNmb3JtKFJl
bmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsCiAgICAgICAgIHJldHVybiBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5v
bmUpOwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwotICAgIHN0eWxlLmFw
cGx5VHJhbnNmb3JtKHRyYW5zZm9ybSwgdHJhbnNmb3JtUmVmZXJlbmNlQm94KHN0eWxlLCAqcmVu
ZGVyZXIpLCB7IH0pOworICAgIHN0eWxlLmFwcGx5VHJhbnNmb3JtKHRyYW5zZm9ybSwgcmVuZGVy
ZXItPnRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3QoKSwgeyB9KTsKICAgICAvLyBOb3RlIHRoYXQg
dGhpcyBkb2VzIG5vdCBmbGF0dGVuIHRvIGFuIGFmZmluZSB0cmFuc2Zvcm0gaWYgRU5BQkxFKDNE
X1RSQU5TRk9STVMpIGlzIG9mZiwgYnkgZGVzaWduLgogCiAgICAgLy8gRklYTUU6IE5lZWQgdG8g
cHJpbnQgb3V0IGluZGl2aWR1YWwgZnVuY3Rpb25zIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjM5MjQpCkBAIC0zODM1LDcgKzM4MjQsNyBAQCBSZWZQdHI8Q1NTVmFs
dWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnZhbHVlRm9yUHJvcGVydHlJblN0eWxlKGNvbnN0
IFJlbmRlclN0eQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5UGVyc3BlY3RpdmVPcmlnaW46IHsK
ICAgICAgICAgICAgIGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0
ZWQoKTsKICAgICAgICAgICAgIGlmIChyZW5kZXJlcikgewotICAgICAgICAgICAgICAgIGF1dG8g
Ym94ID0gdHJhbnNmb3JtUmVmZXJlbmNlQm94KHN0eWxlLCAqcmVuZGVyZXIpOworICAgICAgICAg
ICAgICAgIGF1dG8gYm94ID0gcmVuZGVyZXItPnRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3QoKTsK
ICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShtaW5p
bXVtVmFsdWVGb3JMZW5ndGgoc3R5bGUucGVyc3BlY3RpdmVPcmlnaW5YKCksIGJveC53aWR0aCgp
KSwgc3R5bGUpKTsKICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4
ZWxWYWx1ZShtaW5pbXVtVmFsdWVGb3JMZW5ndGgoc3R5bGUucGVyc3BlY3RpdmVPcmlnaW5ZKCks
IGJveC5oZWlnaHQoKSksIHN0eWxlKSk7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMzg5MSw3
ICszODgwLDcgQEAgUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjp2YWx1
ZUZvclByb3BlcnR5SW5TdHlsZShjb25zdCBSZW5kZXJTdHkKICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVRyYW5zZm9ybU9yaWdpbjogewogICAgICAgICAgICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVM
aXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwogICAgICAgICAgICAgaWYgKHJlbmRlcmVyKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byBib3ggPSB0cmFuc2Zvcm1SZWZlcmVuY2VCb3goc3R5bGUs
ICpyZW5kZXJlcik7CisgICAgICAgICAgICAgICAgYXV0byBib3ggPSByZW5kZXJlci0+dHJhbnNm
b3JtUmVmZXJlbmNlQm94UmVjdCgpOwogICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZCh6b29t
QWRqdXN0ZWRQaXhlbFZhbHVlKG1pbmltdW1WYWx1ZUZvckxlbmd0aChzdHlsZS50cmFuc2Zvcm1P
cmlnaW5YKCksIGJveC53aWR0aCgpKSwgc3R5bGUpKTsKICAgICAgICAgICAgICAgICBsaXN0LT5h
cHBlbmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShtaW5pbXVtVmFsdWVGb3JMZW5ndGgoc3R5bGUu
dHJhbnNmb3JtT3JpZ2luWSgpLCBib3guaGVpZ2h0KCkpLCBzdHlsZSkpOwogICAgICAgICAgICAg
ICAgIGlmIChzdHlsZS50cmFuc2Zvcm1PcmlnaW5aKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwCmluZGV4IGM0MTZiZTkxZmYzZjU2OTcyYmNhYjRhMDVjNjg5NTNkODliYzYx
MzAuLjE4YmVhMzc3NDM2N2IyOTZkMzAyNTE2ODVmNDVhMjM3MWFjNmNjY2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC03NjYsOSArNzY2LDggQEAgTGF5b3V0UG9p
bnQgUmVuZGVyQm94Ojpjb250ZW50Qm94TG9jYXRpb24oKSBjb25zdAogICAgIHJldHVybiB7IGJv
cmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkgKyBzY3JvbGxiYXJTcGFjZSwgYm9yZGVyVG9wKCkg
KyBwYWRkaW5nVG9wKCkgfTsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJCb3g6OnJlZmVyZW5jZUJv
eChDU1NCb3hUeXBlIGJveFR5cGUpIGNvbnN0CitGbG9hdFJlY3QgUmVuZGVyQm94OjpyZWZlcmVu
Y2VCb3hSZWN0KENTU0JveFR5cGUgYm94VHlwZSkgY29uc3QKIHsKLSAgICBMYXlvdXRSZWN0IHJl
ZmVyZW5jZUJveDsKICAgICBzd2l0Y2ggKGJveFR5cGUpIHsKICAgICBjYXNlIENTU0JveFR5cGU6
OkNvbnRlbnRCb3g6CiAgICAgY2FzZSBDU1NCb3hUeXBlOjpGaWxsQm94OgpAQCAtNzg0LDYgKzc4
Myw4IEBAIExheW91dFJlY3QgUmVuZGVyQm94OjpyZWZlcmVuY2VCb3goQ1NTQm94VHlwZSBib3hU
eXBlKSBjb25zdAogICAgIGNhc2UgQ1NTQm94VHlwZTo6Qm94TWlzc2luZzoKICAgICAgICAgcmV0
dXJuIGJvcmRlckJveFJlY3QoKTsKICAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICByZXR1cm4geyB9OwogfQogCkBAIC0xNDYwLDggKzE0NjEsNyBAQCBib29sIFJlbmRlckJv
eDo6aGl0VGVzdENsaXBQYXRoKGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExvY2F0aW9u
LCBjb25zdCBMYQogICAgIHN3aXRjaCAoc3R5bGUoKS5jbGlwUGF0aCgpLT50eXBlKCkpIHsKICAg
ICBjYXNlIFBhdGhPcGVyYXRpb246OlNoYXBlOiB7CiAgICAgICAgIGF1dG8mIGNsaXBQYXRoID0g
ZG93bmNhc3Q8U2hhcGVQYXRoT3BlcmF0aW9uPigqc3R5bGUoKS5jbGlwUGF0aCgpKTsKLSAgICAg
ICAgYXV0byByZWZlcmVuY2VCb3hSZWN0ID0gcmVmZXJlbmNlQm94KGNsaXBQYXRoLnJlZmVyZW5j
ZUJveCgpKTsKLSAgICAgICAgaWYgKCFjbGlwUGF0aC5wYXRoRm9yUmVmZXJlbmNlUmVjdChyZWZl
cmVuY2VCb3hSZWN0KS5jb250YWlucyhoaXRUZXN0TG9jYXRpb25JbkxvY2FsQ29vcmRpbmF0ZXMs
IGNsaXBQYXRoLndpbmRSdWxlKCkpKQorICAgICAgICBpZiAoIWNsaXBQYXRoLnBhdGhGb3JSZWZl
cmVuY2VSZWN0KHJlZmVyZW5jZUJveFJlY3QoY2xpcFBhdGgucmVmZXJlbmNlQm94KCkpKS5jb250
YWlucyhoaXRUZXN0TG9jYXRpb25JbkxvY2FsQ29vcmRpbmF0ZXMsIGNsaXBQYXRoLndpbmRSdWxl
KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggZWQ3Nzc3MGU3ZTQyOWQ1Yjc2MmMw
ZWJjMjkxYmFmMDJmNDcwMjMyNS4uY2FjNjEzZmQ2MWUxYjA1ZWIyNzQxNTlhYmZjOTI1ZWVmMzU3
NzQ1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaApAQCAtMTY3LDggKzE2Nyw4
IEBAIHB1YmxpYzoKICAgICBMYXlvdXRSZWN0IGNvbnRlbnRCb3hSZWN0KCkgY29uc3Q7CiAgICAg
TGF5b3V0UG9pbnQgY29udGVudEJveExvY2F0aW9uKCkgY29uc3Q7CiAKLSAgICAvLyAuaHR0cHM6
Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy10cmFuc2Zvcm1zLTEvI3JlZmVyZW5jZS1ib3gKLSAgICBM
YXlvdXRSZWN0IHJlZmVyZW5jZUJveChDU1NCb3hUeXBlKSBjb25zdDsKKyAgICAvLyBodHRwczov
L3d3dy53My5vcmcvVFIvY3NzLXRyYW5zZm9ybXMtMS8jcmVmZXJlbmNlLWJveAorICAgIEZsb2F0
UmVjdCByZWZlcmVuY2VCb3hSZWN0KENTU0JveFR5cGUpIGNvbnN0IGZpbmFsOwogCiAgICAgLy8g
VGhlIGNvbnRlbnQgYm94IGluIGFic29sdXRlIGNvb3Jkcy4gSWdub3JlcyB0cmFuc2Zvcm1zLgog
ICAgIEludFJlY3QgYWJzb2x1dGVDb250ZW50Qm94KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKaW5kZXggZTkzMmJjNzRiMWZkZWI3NGFlMzJkMmJm
ODA3MDlmN2M1ZWI2ZGQyNS4uYmE3MDFkMmRjZDRmYzVhMjZkMTBlOTA4OGEwYjdmYTdkMzkwZDg2
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcApAQCAtNzgs
NiArNzgsNyBAQAogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50
VHlwZUhlbHBlcnMuaCIKICNpbmNsdWRlICJTVkdJbWFnZS5oIgorI2luY2x1ZGUgIlNWR0xlbmd0
aENvbnRleHQuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCiAjaW5jbHVkZSAiU2V0
dGluZ3MuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCkBAIC0yMzg5LDQgKzIzOTAsMzggQEAg
T3ZlcmZsb3cgUmVuZGVyRWxlbWVudDo6ZWZmZWN0aXZlT3ZlcmZsb3dZKCkgY29uc3QKICAgICBy
ZXR1cm4gb3ZlcmZsb3dZOwogfQogCisvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXRyYW5z
Zm9ybXMtMS8jdHJhbnNmb3JtLWJveAorRmxvYXRSZWN0IFJlbmRlckVsZW1lbnQ6OnJlZmVyZW5j
ZUJveFJlY3QoQ1NTQm94VHlwZSBib3hUeXBlKSBjb25zdAoreworICAgIC8vIENTUyBib3ggbW9k
ZWwgY29kZSBpcyBpbXBsZW1lbnRlZCBpbiBSZW5kZXJCb3g6OnJlZmVyZW5jZUJveFJlY3QoKS4K
KworICAgIC8vIEZvciB0aGUgbGVnYWN5IFNWRyBlbmdpbmUsIFJlbmRlckVsZW1lbnQgaXMgdGhl
IG9ubHkgY2xhc3MgdGhhdCdzCisgICAgLy8gcHJlc2VudCBpbiB0aGUgYW5jZXN0b3IgY2hhaW4g
b2YgYWxsIFNWRyByZW5kZXJlcnMuIEluIExCU0UgdGhlCisgICAgLy8gY29tbW9uIGNsYXNzIGlz
IFJlbmRlckxheWVyTW9kZWxPYmplY3QuIE9uY2UgdGhlIGxlZ2FjeSBTVkcgZW5naW5lCisgICAg
Ly8gaXMgcmVtb3ZlZCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBtb3ZlZCB0byBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0LgorICAgIC8vIEFzIHRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgYm90aCBTVkcg
ZW5naW5lcywgd2UgbmVlZCB0byBwbGFjZSBpdAorICAgIC8vIGhlcmUgaW4gUmVuZGVyRWxlbWVu
dCwgYXMgdGVtcG9yYXJ5IHNvbHV0aW9uLgorICAgIGlmICghaXM8U1ZHRWxlbWVudD4oZWxlbWVu
dCgpKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHN3aXRjaCAoYm94VHlwZSkgeworICAg
IGNhc2UgQ1NTQm94VHlwZTo6Qm94TWlzc2luZzoKKyAgICBjYXNlIENTU0JveFR5cGU6OkNvbnRl
bnRCb3g6CisgICAgY2FzZSBDU1NCb3hUeXBlOjpQYWRkaW5nQm94OgorICAgIGNhc2UgQ1NTQm94
VHlwZTo6RmlsbEJveDoKKyAgICAgICAgcmV0dXJuIG9iamVjdEJvdW5kaW5nQm94KCk7CisgICAg
Y2FzZSBDU1NCb3hUeXBlOjpCb3JkZXJCb3g6CisgICAgY2FzZSBDU1NCb3hUeXBlOjpNYXJnaW5C
b3g6CisgICAgY2FzZSBDU1NCb3hUeXBlOjpTdHJva2VCb3g6CisgICAgICAgIHJldHVybiBzdHJv
a2VCb3VuZGluZ0JveCgpOworICAgIGNhc2UgQ1NTQm94VHlwZTo6Vmlld0JveDoKKyAgICAgICAg
RmxvYXRTaXplIHZpZXdwb3J0U2l6ZTsKKyAgICAgICAgU1ZHTGVuZ3RoQ29udGV4dChkb3duY2Fz
dDxTVkdFbGVtZW50PihlbGVtZW50KCkpKS5kZXRlcm1pbmVWaWV3cG9ydCh2aWV3cG9ydFNpemUp
OworICAgICAgICByZXR1cm4geyB7IH0sIHZpZXdwb3J0U2l6ZSB9OworICAgIH0KKworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCmluZGV4IDUxYzU1MmNiZDllN2ZkMmI3Y2JlOWQx
MmRjZmEzZjEzMWZmN2RmMWIuLmVkNTEyNjI3YjFjMDQyNTdkN2ZlMjUyMDYxNTVhOTNlMWY2ZGYw
ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaApAQCAtMjU4LDYg
KzI1OCwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvbkZpbmlzaGVkKGNv
bnN0IFN0cmluZyYgLyogbmFtZSAqLykgeyB9CiAgICAgdmlydHVhbCB2b2lkIHRyYW5zZm9ybVJl
bGF0ZWRQcm9wZXJ0eURpZENoYW5nZSgpIHsgfQogCisgICAgLy8gaHR0cHM6Ly93d3cudzMub3Jn
L1RSL2Nzcy10cmFuc2Zvcm1zLTEvI3RyYW5zZm9ybS1ib3gKKyAgICBGbG9hdFJlY3QgdHJhbnNm
b3JtUmVmZXJlbmNlQm94UmVjdCgpIGNvbnN0IHsgcmV0dXJuIHJlZmVyZW5jZUJveFJlY3QodHJh
bnNmb3JtQm94VG9DU1NCb3hUeXBlKHN0eWxlKCkudHJhbnNmb3JtQm94KCkpKTsgfQorCisgICAg
Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy10cmFuc2Zvcm1zLTEvI3JlZmVyZW5jZS1ib3gK
KyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZWZlcmVuY2VCb3hSZWN0KENTU0JveFR5cGUpIGNvbnN0
OworCiAgICAgdmlydHVhbCB2b2lkIHN1c3BlbmRBbmltYXRpb25zKE1vbm90b25pY1RpbWUgPSBN
b25vdG9uaWNUaW1lKCkpIHsgfQogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gYW5p
bWF0ZWRTdHlsZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApp
bmRleCA5OWJhZDI5YWEyNDlmY2VhMjhkMjJjZWVlZWRhMjg3M2MwYzM5M2U0Li4wYTE4OGE3ZjIx
N2RiMDBiMTE0YmI3OTMyNzU3YmQ3MDQ0YTIyZTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKQEAgLTEyOTYsMjEgKzEyOTYsMTYgQEAgdm9pZCBSZW5kZXJMYXll
cjo6ZGlydHlBbmNlc3RvckNoYWluSGFzQmxlbmRpbmdEZXNjZW5kYW50cygpCiB9CiAjZW5kaWYK
IAotc3RhdGljIGlubGluZSBMYXlvdXRSZWN0IGNvbXB1dGVSZWZlcmVuY2VSZWN0RnJvbUJveChj
b25zdCBSZW5kZXJCb3gmIGJveCwgQ1NTQm94VHlwZSBib3hUeXBlLCBjb25zdCBMYXlvdXRTaXpl
JiBvZmZzZXRGcm9tUm9vdCkKLXsKLSAgICBhdXRvIHJlZmVyZW5jZUJveCA9IGJveC5yZWZlcmVu
Y2VCb3goYm94VHlwZSk7Ci0gICAgcmVmZXJlbmNlQm94Lm1vdmUob2Zmc2V0RnJvbVJvb3QpOwot
ICAgIHJldHVybiByZWZlcmVuY2VCb3g7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgTGF5b3V0UmVjdCBj
b21wdXRlUmVmZXJlbmNlQm94KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIENTU0JveFR5
cGUgYm94VHlwZSwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3QsIGNvbnN0IExheW91
dFJlY3QmIHJvb3RSZWxhdGl2ZUJvdW5kcykKK3N0YXRpYyBpbmxpbmUgRmxvYXRSZWN0IGNvbXB1
dGVSZWZlcmVuY2VCb3goY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIsIENT
U0JveFR5cGUgYm94VHlwZSwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3QsIGNvbnN0
IExheW91dFJlY3QmIHJvb3RSZWxhdGl2ZUJvdW5kcykKIHsKICAgICAvLyBGSVhNRTogU3VwcG9y
dCBkaWZmZXJlbnQgcmVmZXJlbmNlIGJveGVzIGZvciBpbmxpbmUgY29udGVudC4KICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5MDQ3CiAgICAgaWYgKCFy
ZW5kZXJlci5pc0JveCgpKQogICAgICAgICByZXR1cm4gcm9vdFJlbGF0aXZlQm91bmRzOwogICAg
IAotICAgIHJldHVybiBjb21wdXRlUmVmZXJlbmNlUmVjdEZyb21Cb3goZG93bmNhc3Q8UmVuZGVy
Qm94PihyZW5kZXJlciksIGJveFR5cGUsIG9mZnNldEZyb21Sb290KTsKKyAgICBhdXRvIHJlZmVy
ZW5jZUJveCA9IHJlbmRlcmVyLnJlZmVyZW5jZUJveFJlY3QoYm94VHlwZSk7CisgICAgcmVmZXJl
bmNlQm94Lm1vdmUob2Zmc2V0RnJvbVJvb3QpOworICAgIHJldHVybiByZWZlcmVuY2VCb3g7CiB9
CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVRyYW5zZm9ybSgpCkBAIC0xMzM1LDcgKzEzMzAs
NyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVUcmFuc2Zvcm0oKQogICAgICAgICAvLyBGSVhN
RTogW0xCU0VdIFVwc3RyZWFtIHJlZmVyZW5jZSBib3ggY29tcHV0YXRpb24gZm9yIFJlbmRlclNW
R01vZGVsT2JqZWN0IGRlcml2ZWQgcmVuZGVyZXJzCiAgICAgICAgIEZsb2F0UmVjdCByZWZlcmVu
Y2VCb3g7CiAgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKQotICAgICAgICAg
ICAgcmVmZXJlbmNlQm94ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhkb3duY2FzdDxSZW5kZXJC
b3g+KHJlbmRlcmVyKCkpLnJlZmVyZW5jZUJveCh0cmFuc2Zvcm1Cb3hUb0NTU0JveFR5cGUocmVu
ZGVyZXIoKS5zdHlsZSgpLnRyYW5zZm9ybUJveCgpKSksIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5k
ZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICAgICAgICAgIHJlZmVyZW5jZUJveCA9IHNuYXBSZWN0
VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkp
LnRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3QoKSksIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZp
Y2VTY2FsZUZhY3RvcigpKTsKIAogICAgICAgICByZW5kZXJlcigpLmFwcGx5VHJhbnNmb3JtKCpt
X3RyYW5zZm9ybSwgcmVmZXJlbmNlQm94KTsKICAgICAgICAgbWFrZU1hdHJpeFJlbmRlcmFibGUo
Km1fdHJhbnNmb3JtLCBjYW5SZW5kZXIzRFRyYW5zZm9ybXMoKSk7CkBAIC0xMzY2LDcgKzEzNjEs
NyBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJMYXllcjo6Y3VycmVudFRyYW5zZm9ybShP
cHRpb25TZXQ8UmVuZGVyU3R5bGU6OlRyYW5zZgogICAgIC8vIFF1ZXJ5IHRoZSBhbmltYXRlZFN0
eWxlKCkgdG8gb2J0YWluIHRoZSBjdXJyZW50IHRyYW5zZm9ybWF0aW9uLCB3aGVuIGFjY2VsZXJh
dGVkIHRyYW5zZm9ybSBhbmltYXRpb25zIGFyZSBydW5uaW5nLgogICAgIGF1dG8gc3R5bGVhYmxl
ID0gU3R5bGVhYmxlOjpmcm9tUmVuZGVyZXIocmVuZGVyQm94KTsKICAgICBpZiAoKHN0eWxlYWJs
ZSAmJiBzdHlsZWFibGUtPmlzUnVubmluZ0FjY2VsZXJhdGVkVHJhbnNmb3JtQW5pbWF0aW9uKCkp
IHx8ICFvcHRpb25zLmNvbnRhaW5zKFJlbmRlclN0eWxlOjpUcmFuc2Zvcm1PcGVyYXRpb25PcHRp
b246OlRyYW5zZm9ybU9yaWdpbikpIHsKLSAgICAgICAgYXV0byBwaXhlbFNuYXBwZWRCb3JkZXJS
ZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhyZW5kZXJCb3gucmVmZXJlbmNlQm94KHRyYW5z
Zm9ybUJveFRvQ1NTQm94VHlwZShhbmltYXRlZFN0eWxlLT50cmFuc2Zvcm1Cb3goKSkpLCByZW5k
ZXJCb3guZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICAgICAgYXV0byBwaXhl
bFNuYXBwZWRCb3JkZXJSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHJl
bmRlckJveC50cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCkpLCByZW5kZXJCb3guZG9jdW1lbnQo
KS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKIAogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
cmFuc2Zvcm07CiAgICAgICAgIGFuaW1hdGVkU3R5bGUtPmFwcGx5VHJhbnNmb3JtKHRyYW5zZm9y
bSwgcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCwgb3B0aW9ucyk7CkBAIC0xODAxLDggKzE3OTYsOSBA
QCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJMYXllcjo6cGVyc3BlY3RpdmVUcmFuc2Zvcm0o
Y29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgYXV0
byBkZXZpY2VTY2FsZUZhY3RvciA9IHJlbmRlckJveC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFj
dG9yKCk7Ci0gICAgYXV0byByZWZlcmVuY2VCb3ggPSByZW5kZXJCb3gucmVmZXJlbmNlQm94KHRy
YW5zZm9ybUJveFRvQ1NTQm94VHlwZShzdHlsZS50cmFuc2Zvcm1Cb3goKSkpOwotICAgIGF1dG8g
cGl4ZWxTbmFwcGVkUmVmZXJlbmNlQm94ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhyZWZlcmVu
Y2VCb3gsIGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICBhdXRvIHJlZmVyZW5jZUJveCA9IHJlbmRl
ckJveC50cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCk7CisgICAgLy8gRklYTUU6IFtMQlNFXSBB
dm9pZCBwaXhlbCBzbmFwcGluZyBpbiBTVkcgc3VidHJlZS4KKyAgICBhdXRvIHBpeGVsU25hcHBl
ZFJlZmVyZW5jZUJveCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdChyZWZlcmVu
Y2VCb3gpLCBkZXZpY2VTY2FsZUZhY3Rvcik7CiAgICAgYXV0byBzbmFwcGVkTGF5ZXJSZWN0ID0g
c25hcFJlY3RUb0RldmljZVBpeGVscyhsYXllclJlY3QsIGRldmljZVNjYWxlRmFjdG9yKTsKIAog
ICAgIGF1dG8gcGVyc3BlY3RpdmVPcmlnaW4gPSBwaXhlbFNuYXBwZWRSZWZlcmVuY2VCb3gubG9j
YXRpb24oKSAtIHRvRmxvYXRTaXplKHNuYXBwZWRMYXllclJlY3QubG9jYXRpb24oKSkgKyBmbG9h
dFBvaW50Rm9yTGVuZ3RoUG9pbnQoc3R5bGUucGVyc3BlY3RpdmVPcmlnaW4oKSwgcGl4ZWxTbmFw
cGVkUmVmZXJlbmNlQm94LnNpemUoKSk7CkBAIC0xODIzLDYgKzE4MTksNyBAQCBGbG9hdFBvaW50
IFJlbmRlckxheWVyOjpwZXJzcGVjdGl2ZU9yaWdpbigpIGNvbnN0CiB7CiAgICAgaWYgKCFyZW5k
ZXJlcigpLmhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSgpKQogICAgICAgICByZXR1cm4geyB9
OworICAgIC8vIEZJWE1FOiBUaGlzIHVzZXMgdGhlIHdyb25nLCB0cmFuc2Zvcm0tYm94IHVuYXdh
cmUsIGdlb21ldHJ5LgogICAgIHJldHVybiBmbG9hdFBvaW50Rm9yTGVuZ3RoUG9pbnQocmVuZGVy
ZXIoKS5zdHlsZSgpLnBlcnNwZWN0aXZlT3JpZ2luKCksIHJlbmRlcmVyQm9yZGVyQm94UmVjdCgp
LnNpemUoKSk7CiB9CiAKQEAgLTMyMTIsMjEgKzMyMDksOSBAQCBzdGQ6OnBhaXI8UGF0aCwgV2lu
ZFJ1bGU+IFJlbmRlckxheWVyOjpjb21wdXRlQ2xpcFBhdGgoY29uc3QgTGF5b3V0U2l6ZSYgb2Zm
c2V0RgogCiAgICAgaWYgKGlzPFNoYXBlUGF0aE9wZXJhdGlvbj4oKnN0eWxlLmNsaXBQYXRoKCkp
KSB7CiAgICAgICAgIGF1dG8mIGNsaXBQYXRoID0gZG93bmNhc3Q8U2hhcGVQYXRoT3BlcmF0aW9u
Pigqc3R5bGUuY2xpcFBhdGgoKSk7Ci0KLSAgICAgICAgTGF5b3V0UmVjdCByZWZlcmVuY2VCb3g7
Ci0gICAgICAgIGlmIChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKSB7Ci0gICAgICAgICAgICBy
ZWZlcmVuY2VCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLnJlZmVyZW5jZUJv
eChjbGlwUGF0aC5yZWZlcmVuY2VCb3goKSk7Ci0gICAgICAgICAgICByZWZlcmVuY2VCb3gubW92
ZShvZmZzZXRGcm9tUm9vdCk7Ci0jaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCi0g
ICAgICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyU1ZHTW9kZWxPYmplY3Q+KHJlbmRlcmVyKCkpKSB7
Ci0gICAgICAgICAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIGNsaXBwaW5nIHN1cHBvcnQg
Zm9yIFJlbmRlclNWR01vZGVsT2JqZWN0IGRlcml2ZWQgcmVuZGVyZXJzCi0jZW5kaWYKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFJlZmVyZW5jZSBib3ggZm9yIGlubGluZXMgaXMg
bm90IHdlbGwgZGVmaW5lZDogaHR0cHM6Ly9naXRodWIuY29tL3czYy9jc3N3Zy1kcmFmdHMvaXNz
dWVzLzYzODMKLSAgICAgICAgICAgIHJlZmVyZW5jZUJveCA9IHJvb3RSZWxhdGl2ZUJvdW5kc0Zv
ck5vbkJveGVzOwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byBzbmFwcGVkUmVmZXJlbmNlQm94
ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhyZWZlcmVuY2VCb3gsIGRldmljZVNjYWxlRmFjdG9y
KTsKKyAgICAgICAgYXV0byByZWZlcmVuY2VCb3ggPSBjb21wdXRlUmVmZXJlbmNlQm94KHJlbmRl
cmVyKCksIGNsaXBQYXRoLnJlZmVyZW5jZUJveCgpLCBvZmZzZXRGcm9tUm9vdCwgcm9vdFJlbGF0
aXZlQm91bmRzRm9yTm9uQm94ZXMpOworICAgICAgICAvLyBGSVhNRTogW0xCU0VdIEF2b2lkIHBp
eGVsIHNuYXBwaW5nIGluIFNWRyBzdWJ0cmVlLgorICAgICAgICBhdXRvIHNuYXBwZWRSZWZlcmVu
Y2VCb3ggPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3QocmVmZXJlbmNlQm94KSwg
ZGV2aWNlU2NhbGVGYWN0b3IpOwogICAgICAgICByZXR1cm4geyBjbGlwUGF0aC5wYXRoRm9yUmVm
ZXJlbmNlUmVjdChzbmFwcGVkUmVmZXJlbmNlQm94KSwgY2xpcFBhdGgud2luZFJ1bGUoKSB9Owog
ICAgIH0KIApAQCAtMzI2OSw3ICszMjU0LDggQEAgdm9pZCBSZW5kZXJMYXllcjo6c2V0dXBDbGlw
UGF0aChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dFN0YXRlU2EKICAg
ICAgICAgICAgIC8vIFVzZSB0aGUgYm9yZGVyIGJveCBhcyB0aGUgcmVmZXJlbmNlIGJveCwgZXZl
biB0aG91Z2ggdGhpcyBpcyBub3QgY2xlYXJseSBzcGVjaWZpZWQ6IGh0dHBzOi8vZ2l0aHViLmNv
bS93M2MvY3Nzd2ctZHJhZnRzL2lzc3Vlcy81Nzg2LgogICAgICAgICAgICAgLy8gY2xpcHBlZENv
bnRlbnRCb3VuZHMgaXMgdXNlZCBhcyB0aGUgcmVmZXJlbmNlIGJveCBmb3IgaW5saW5lcywgd2hp
Y2ggaXMgYWxzbyBwb29ybHkgc3BlY2lmaWVkOiBodHRwczovL2dpdGh1Yi5jb20vdzNjL2Nzc3dn
LWRyYWZ0cy9pc3N1ZXMvNjM4My4KICAgICAgICAgICAgIGF1dG8gcmVmZXJlbmNlQm94ID0gY29t
cHV0ZVJlZmVyZW5jZUJveChyZW5kZXJlcigpLCBDU1NCb3hUeXBlOjpCb3JkZXJCb3gsIG9mZnNl
dEZyb21Sb290LCBjbGlwcGVkQ29udGVudEJvdW5kcyk7Ci0gICAgICAgICAgICBhdXRvIHNuYXBw
ZWRSZWZlcmVuY2VCb3ggPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKHJlZmVyZW5jZUJveCwgcmVu
ZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOworICAgICAgICAgICAgLy8g
RklYTUU6IFtMQlNFXSBBdm9pZCBwaXhlbCBzbmFwcGluZyBpbiBTVkcgc3VidHJlZS4KKyAgICAg
ICAgICAgIGF1dG8gc25hcHBlZFJlZmVyZW5jZUJveCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMo
TGF5b3V0UmVjdChyZWZlcmVuY2VCb3gpLCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2Nh
bGVGYWN0b3IoKSk7CiAgICAgICAgICAgICBhdXRvIG9mZnNldCA9IHNuYXBwZWRSZWZlcmVuY2VC
b3gubG9jYXRpb24oKTsKIAogICAgICAgICAgICAgYXV0byBzbmFwcGVkQ2xpcHBpbmdCb3VuZHMg
PSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGNsaXBwZWRDb250ZW50Qm91bmRzLCByZW5kZXJlcigp
LmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAppbmRleCBjYzM4ZWM3MDMwZTYwY2Ux
NzU5YjEzMjg3ZGUyNWY3M2Q1NjVjODU4Li5lMmJlYjRiYThjMTE1N2RjYmIxMjg2NDlhM2VkZTU2
ZTM4NGU4ZDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlclN1cHBvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVu
ZGVyU3VwcG9ydC5jcHAKQEAgLTM0MywyNiArMzQzLDYgQEAgYm9vbCBTVkdSZW5kZXJTdXBwb3J0
OjpmaWx0ZXJzRm9yY2VDb250YWluZXJMYXlvdXQoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotRmxvYXRSZWN0IFNWR1JlbmRlclN1cHBvcnQ6OnRy
YW5zZm9ybVJlZmVyZW5jZUJveChjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3Qg
U1ZHRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQotewotICAgIHN3
aXRjaCAoc3R5bGUudHJhbnNmb3JtQm94KCkpIHsKLSAgICBjYXNlIFRyYW5zZm9ybUJveDo6Qm9y
ZGVyQm94OgotICAgICAgICAvLyBGb3IgU1ZHIGVsZW1lbnRzIHdpdGhvdXQgYW4gYXNzb2NpYXRl
ZCBDU1MgbGF5b3V0IGJveCwgdGhlIHVzZWQgdmFsdWUgZm9yIGJvcmRlci1ib3ggaXMgc3Ryb2tl
LWJveC4KLSAgICBjYXNlIFRyYW5zZm9ybUJveDo6U3Ryb2tlQm94OgotICAgICAgICByZXR1cm4g
cmVuZGVyZXIuc3Ryb2tlQm91bmRpbmdCb3goKTsKLSAgICBjYXNlIFRyYW5zZm9ybUJveDo6Q29u
dGVudEJveDoKLSAgICAgICAgLy8gRm9yIFNWRyBlbGVtZW50cyB3aXRob3V0IGFuIGFzc29jaWF0
ZWQgQ1NTIGxheW91dCBib3gsIHRoZSB1c2VkIHZhbHVlIGZvciBjb250ZW50LWJveCBpcyBmaWxs
LWJveC4KLSAgICBjYXNlIFRyYW5zZm9ybUJveDo6RmlsbEJveDoKLSAgICAgICAgcmV0dXJuIHJl
bmRlcmVyLm9iamVjdEJvdW5kaW5nQm94KCk7Ci0gICAgY2FzZSBUcmFuc2Zvcm1Cb3g6OlZpZXdC
b3g6IHsKLSAgICAgICAgRmxvYXRTaXplIHZpZXdwb3J0U2l6ZTsKLSAgICAgICAgU1ZHTGVuZ3Ro
Q29udGV4dCgmZWxlbWVudCkuZGV0ZXJtaW5lVmlld3BvcnQodmlld3BvcnRTaXplKTsKLSAgICAg
ICAgcmV0dXJuIEZsb2F0UmVjdCB7IHsgfSwgdmlld3BvcnRTaXplIH07Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQogaW5saW5lIEZsb2F0UmVjdCBjbGlwUGF0aFJlZmVy
ZW5jZUJveChjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgQ1NTQm94VHlwZSBib3hUeXBl
KQogewogICAgIEZsb2F0UmVjdCByZWZlcmVuY2VCb3g7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oCmluZGV4IDljY2ZjYmViNTc3YTc3M2RjODgw
N2Q5NTM5ZDYyYTgxZTU2MTliODkuLmQ0M2QwYzdmNzU4ZDE1ZmI3MDQ2YzkxYmUwY2E5ZGE1M2Rk
ODU2MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
U3VwcG9ydC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3Vw
cG9ydC5oCkBAIC04Miw4ICs4Miw2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIHN0eWxl
Q2hhbmdlZChSZW5kZXJFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqKTsKICAgICAKLSAgICBz
dGF0aWMgRmxvYXRSZWN0IHRyYW5zZm9ybVJlZmVyZW5jZUJveChjb25zdCBSZW5kZXJFbGVtZW50
JiwgY29uc3QgU1ZHRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJik7Ci0KICNpZiBFTkFCTEUo
Q1NTX0NPTVBPU0lUSU5HKQogICAgIHN0YXRpYyBib29sIGlzb2xhdGVzQmxlbmRpbmcoY29uc3Qg
UmVuZGVyU3R5bGUmKTsKICAgICBzdGF0aWMgdm9pZCB1cGRhdGVNYXNrZWRBbmNlc3RvclNob3Vs
ZElzb2xhdGVCbGVuZGluZyhjb25zdCBSZW5kZXJFbGVtZW50Jik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHR3JhcGhpY3NFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdHcmFwaGljc0VsZW1lbnQuY3BwCmluZGV4IDQ5YTJjYTY5OGY1NGU1MmYwOTIwYjU0ODQ2
ZGUzNWQzNWVhMmQxZmEuLjYyMmQ2N2QwMWE2ZmExODdhOGU0NGQ4MWEyZDQ5ZjdkYTk4YTk1NzIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFwaGljc0VsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFwaGljc0VsZW1lbnQuY3BwCkBAIC04MCwxMiAr
ODAsMTAgQEAgQWZmaW5lVHJhbnNmb3JtIFNWR0dyYXBoaWNzRWxlbWVudDo6YW5pbWF0ZWRMb2Nh
bFRyYW5zZm9ybSgpIGNvbnN0CiAKICAgICAvLyBIb25vciBhbnkgb2YgdGhlIHRyYW5zZm9ybS1y
ZWxhdGVkIENTUyBwcm9wZXJ0aWVzIGlmIHNldC4KICAgICBpZiAoaGFzU3BlY2lmaWVkVHJhbnNm
b3JtIHx8IChzdHlsZSAmJiAoc3R5bGUtPnRyYW5zbGF0ZSgpIHx8IHN0eWxlLT5zY2FsZSgpIHx8
IHN0eWxlLT5yb3RhdGUoKSkpKSB7Ci0gICAgICAgIGF1dG8gYm91bmRpbmdCb3ggPSBTVkdSZW5k
ZXJTdXBwb3J0Ojp0cmFuc2Zvcm1SZWZlcmVuY2VCb3goKnJlbmRlcmVyKCksICp0aGlzLCAqc3R5
bGUpOwotICAgICAgICAKICAgICAgICAgLy8gTm90ZTogb2JqZWN0Qm91bmRpbmdCb3ggaXMgYW4g
ZW1wdHlSZWN0IGZvciBlbGVtZW50cyBsaWtlIHBhdHRlcm4gb3IgY2xpcFBhdGguCiAgICAgICAg
IC8vIFNlZSB0aGUgIk9iamVjdCBib3VuZGluZyBib3ggdW5pdHMiIHNlY3Rpb24gb2YgaHR0cDov
L2Rldi53My5vcmcvY3Nzd2cvY3NzMy10cmFuc2Zvcm1zLwogICAgICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCB0cmFuc2Zvcm07Ci0gICAgICAgIHN0eWxlLT5hcHBseVRyYW5zZm9ybSh0cmFuc2Zv
cm0sIGJvdW5kaW5nQm94KTsKKyAgICAgICAgc3R5bGUtPmFwcGx5VHJhbnNmb3JtKHRyYW5zZm9y
bSwgcmVuZGVyZXIoKS0+dHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdCgpKTsKIAogICAgICAgICAv
LyBGbGF0dGVuIGFueSAzRCB0cmFuc2Zvcm0uCiAgICAgICAgIG1hdHJpeCA9IHRyYW5zZm9ybS50
b0FmZmluZVRyYW5zZm9ybSgpOwpAQCAtMTAwLDcgKzk4LDcgQEAgQWZmaW5lVHJhbnNmb3JtIFNW
R0dyYXBoaWNzRWxlbWVudDo6YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0CiAKICAgICAv
LyBJZiB3ZSBkaWRuJ3QgaGF2ZSB0aGUgQ1NTICJ0cmFuc2Zvcm0iIHByb3BlcnR5IHNldCwgd2Ug
bXVzdCBhY2NvdW50IGZvciB0aGUgInRyYW5zZm9ybSIgYXR0cmlidXRlLgogICAgIGlmICghaGFz
U3BlY2lmaWVkVHJhbnNmb3JtICYmIHN0eWxlKSB7Ci0gICAgICAgIGF1dG8gYm91bmRpbmdCb3gg
PSBTVkdSZW5kZXJTdXBwb3J0Ojp0cmFuc2Zvcm1SZWZlcmVuY2VCb3goKnJlbmRlcmVyKCksICp0
aGlzLCAqc3R5bGUpOworICAgICAgICBhdXRvIGJvdW5kaW5nQm94ID0gcmVuZGVyZXIoKS0+dHJh
bnNmb3JtUmVmZXJlbmNlQm94UmVjdCgpOwogICAgICAgICBhdXRvIHQgPSBmbG9hdFBvaW50Rm9y
TGVuZ3RoUG9pbnQoc3R5bGUtPnRyYW5zZm9ybU9yaWdpblhZKCksIGJvdW5kaW5nQm94LnNpemUo
KSkgKyBib3VuZGluZ0JveC5sb2NhdGlvbigpOwogICAgICAgICBtYXRyaXgudHJhbnNsYXRlKHQp
OwogICAgICAgICBtYXRyaXggKj0gdHJhbnNmb3JtKCkuY29uY2F0ZW5hdGUoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454216</attachid>
            <date>2022-03-09 03:06:26 -0800</date>
            <delta_ts>2022-03-10 05:41:40 -0800</delta_ts>
            <desc>Patch, v2</desc>
            <filename>bug-237554-20220309030620.patch</filename>
            <type>text/plain</type>
            <size>21939</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMDM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODE5MWNlNWI5MDE1MmUz
ZDNiYjYxY2RlYjNjNmQxZDVjYjhjOGFmMC4uNTAwMzcwMGQ2YmU3OGM1NmUwZTkxMTVkOTc0ODRi
N2NmNjVkNjZmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDIyLTAzLTA5ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFVuaWZ5
ICd0cmFuc2Zvcm0tYm94JyByZWZlcmVuY2UgYm94IGNvbXB1dGF0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc1NTQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgdGhlIGNvZGUgdG8g
Y29tcHV0ZSB0aGUgcmVmZXJlbmNlIGJveCwgYWNjb3JkaW5nIHRvIHRoZSBDU1MgJ3RyYW5zZm9y
bS1ib3gnCisgICAgICAgIHByb3BlcnR5IGlzIHNwcmlua2xlZCBvdmVyIHZhcmlvdXMgcGxhY2Vz
OiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24sIFNWR1JlbmRlclN1cHBvcnQsCisgICAgICAg
IFJlbmRlckJveCwgcGFydHMgaW4gUmVuZGVyTGF5ZXIuCisKKyAgICAgICAgQ2xlYW51cCBhbmQg
dW5pZnkgdGhlIGNvZGUgaW4gYSBzaW5nbGUgcGxhY2U6IGEgbmV3ICdyZWZlcmVuY2VCb3hSZWN0
KCknICBtZXRob2QgaW1wbGVtZW50aW5nCisgICAgICAgIHRoZSBjb21wdXRhdGlvbiBmb3IgYm90
aCBTVkcvSFRNTCwgd2hlcmUgdGhlIFNWRyBjb2RlIGxpdmVzIGluIFJlbmRlckVsZW1lbnQgKHRo
ZSBvbmx5IHNoYXJlZAorICAgICAgICBiYXNlIGNsYXNzIGJldHdlZW4gbGVnYWN5IFNWRy9MQlNF
KSBhbmQgdGhlIEhUTUwgY29kZSBpbiBSZW5kZXJCb3guIFRoZSBIVE1ML0NTUyBpbXBsZW1lbnRh
dGlvbgorICAgICAgICB3YXMgYWxyZWFkeSBjb250YWluZWQgaW4gUmVuZGVyQm94OjpyZWZlcmVu
Y2VCb3goKSBhbmQgd2FzIHJlbmFtZWQgdG8gcmVmZXJlbmNlQm94UmVjdCgpIHRvIGZvbGxvdwor
ICAgICAgICB0aGUgbmFtaW5nIGNvbnZlbnRpb24gZm9yIHRoZSBvdGhlciBDU1MgYm94IGdlb2Vt
dHJ5IGhlbHBlcnMgc3VjaCBhcyBjb250ZW50Qm94UmVjdCgpLAorICAgICAgICBib3JkZXJCb3hS
ZWN0KCksIGV0Yy4KKworICAgICAgICBSZW1vdmUgY29kZSBmcm9tIFNWR1JlbmRlclN1cHBvcnQv
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uIHRoYXQgY2FuIG5vdyB1c2UgdGhlIHNoYXJlZCBs
b2dpYy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLCBubyBjaGFuZ2UgaW4g
YmVoYXZpb3VyLgorCisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5j
cHA6IAorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZWRUcmFuc2Zvcm0pOiBVc2UgdGhlIHJlbmRl
cmVycyB0cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCkgaW5zdGVhZCBvZiB0aGUgc3RhdGljIGhl
bHBlciBmdW5jdGlvbiB0cmFuc2Zvcm1SZWZlcmVuY2VCb3goKS4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnZhbHVlRm9yUHJvcGVydHlJblN0eWxlKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjp0cmFuc2Zvcm1SZWZlcmVuY2VCb3gpOiBEZWxldGVkLiBSZW5k
ZXJFbGVtZW50Ojp0cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCkgcHJvdmlkZXMgdGhlIHNhbWUg
bG9naWMgaW4gYSBnZW5lcmljIHdheS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cmVmZXJlbmNlQm94UmVjdCBjb25zdCk6
IFJlbmFtZSByZWZlcmVuY2VCb3goKSB0byByZWZlcmVuY2VCb3hSZWN0KCkgYW5kIHJldHVybiBG
bG9hdFJlY3QgaW5zdGVhZCBvZiBMYXlvdXRSZWN0LgorICAgICAgICBMQlNFIHdhbnRzIHRvIHJl
LXVzZSB0aGUgbG9naWMgYnV0IHdpdGhvdXQgcGl4ZWwgc25hcHBpbmcgd2l0aGluIHRoZSBTVkcg
cmVuZGVyIHRyZWUuIEFsbCBjYWxsZXJzIHdlcmUgYWRhcHRlZCB0byB0aGUgbmV3IHJldHVybiB0
eXBlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpoaXRUZXN0Q2xpcFBhdGggY29uc3Qp
OiBBZGFwdCB0byByZWZlcmVuY2VCb3goKSAtPiByZWZlcmVuY2VCb3hSZWN0KCkgcmVuYW1pbmcu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnJlZmVyZW5jZUJveCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOiBBZGFwdCB0byByZWZlcmVuY2VC
b3goKSAtPiByZWZlcmVuY2VCb3hSZWN0KCkgcmVuYW1pbmcKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjpyZWZl
cmVuY2VCb3hSZWN0IGNvbnN0KTogQWRkIHJlZmVyZW5jZUJveFJlY3QoKSBpbXBsZW1lbnRhdGlv
biBmb3IgU1ZHIHJlbmRlcmVycy4gVGhlIGNvbW1vbiBiYXNlLWNsYXNzIGZvcgorICAgICAgICBh
bGwgU1ZHIHJlbmRlcmVycyBpcyBSZW5kZXJFbGVtZW50IGluIHRoZSBsZWdhY3kgU1ZHIGVuZ2lu
ZSBhbmQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCBpbiBMQlNFLiBUbyBzaGFyZSB0aGUgY29kZSBi
ZXR3ZWVuIGJvdGggU1ZHCisgICAgICAgIGltcGxlbWVudGF0aW9ucyBpdCBoYXMgdG8gYmUgcGxh
Y2VkIGluIFJlbmRlckVsZW1lbnQgLS0gdG8gYmUgbW92ZWQgdG8gUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCwgb25jZSBMQlNFIGlzIHRoZSBvbmx5IFNWRyBlbmdpbmUuCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OnRy
YW5zZm9ybVJlZmVyZW5jZUJveFJlY3QgY29uc3QpOiBBZGQgbmV3IGhlbHBlciBmdW5jdGlvbiB3
aGljaCBpbnZva2VzIHJlZmVyZW5jZUJveFJlY3QoKSB1c2luZworICAgICAgICB0cmFuc2Zvcm1C
b3hUb0NTU0JveFR5cGUoc3R5bGUoKS50cmFuc2Zvcm1Cb3goKSkuIFdoZW5ldmVyIHRyYW5zZm9y
bS1ib3ggc3VwcG9ydCBpcyBuZWNlc3NhcnksIHRoaXMgbWV0aG9kIHNoYWxsIGJlIHVzZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDogVXNlIHRoZSBuZXcgdHJhbnNmb3Jt
UmVmZXJlbmNlQm94UmVjdCgpIHdoZXJlIHBvc3NpYmxlLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnBlcnNwZWN0aXZlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpwZXJzcGVjdGl2ZU9yaWdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb21wdXRlUmVmZXJlbmNlQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpj
b21wdXRlQ2xpcFBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNl
dHVwQ2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVJlZmVyZW5jZVJlY3RGcm9t
Qm94KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3VwcG9ydDo6dHJhbnNmb3JtUmVmZXJl
bmNlQm94KTogRGVsZXRlZC4gUmVuZGVyRWxlbWVudDo6dHJhbnNmb3JtUmVmZXJlbmNlQm94UmVj
dCgpIHByb3ZpZGVzIHRoZSBzYW1lIGxvZ2ljIGluIGEgZ2VuZXJpYyB3YXkuCisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0Lmg6IERpdHRvLgorICAgICAgICAqIHN2Zy9T
VkdHcmFwaGljc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHR3JhcGhpY3NFbGVt
ZW50OjphbmltYXRlZExvY2FsVHJhbnNmb3JtIGNvbnN0KTogVXNlIHRoZSByZW5kZXJlcnMgdHJh
bnNmb3JtUmVmZXJlbmNlQm94UmVjdCgpIGluc3RlYWQgb2YgU1ZHUmVuZGVyU3VwcG9ydDo6dHJh
bnNmb3JtUmVmZXJlbmNlQm94KCkuCisKIDIwMjItMDMtMDkgIE5pa29sYXMgWmltbWVybWFubiAg
PG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CiAKICAgICAgICAgQ2xlYW51cCBSZW5kZXJMYXllcjo6
Y3VycmVudFRyYW5zZm9ybSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IGU5NDUxNzcxMzZlNjExZmQ4YjZiMDAwNjI3MmVh
ZjEwNmJjMDQ5ZTYuLmUyNzk0ODNiNTk3ZmFlMjAxNTViYmI1NDFhMWZhZGZlMGYzMTFhMWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24u
Y3BwCkBAIC01NjAsMTcgKzU2MCw2IEBAIHN0YXRpYyBMYXlvdXRSZWN0IHNpemluZ0JveChSZW5k
ZXJPYmplY3QmIHJlbmRlcmVyKQogICAgIHJldHVybiBib3guc3R5bGUoKS5ib3hTaXppbmcoKSA9
PSBCb3hTaXppbmc6OkJvcmRlckJveCA/IGJveC5ib3JkZXJCb3hSZWN0KCkgOiBib3guY29tcHV0
ZWRDU1NDb250ZW50Qm94UmVjdCgpOwogfQogCi1zdGF0aWMgRmxvYXRSZWN0IHRyYW5zZm9ybVJl
ZmVyZW5jZUJveChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyKQotewotICAgIGlmIChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKSkKLSAgICAgICAg
cmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpLnJlZmVyZW5jZUJveCh0cmFuc2Zv
cm1Cb3hUb0NTU0JveFR5cGUoc3R5bGUudHJhbnNmb3JtQm94KCkpKTsKLQotICAgIGlmIChpczxT
VkdFbGVtZW50PihyZW5kZXJlci5lbGVtZW50KCkpKQotICAgICAgICByZXR1cm4gU1ZHUmVuZGVy
U3VwcG9ydDo6dHJhbnNmb3JtUmVmZXJlbmNlQm94KHJlbmRlcmVyLCBkb3duY2FzdDxTVkdFbGVt
ZW50PigqcmVuZGVyZXIuZWxlbWVudCgpKSwgc3R5bGUpOwotCi0gICAgcmV0dXJuIHsgfTsKLX0K
LQogc3RhdGljIFJlZjxDU1NGdW5jdGlvblZhbHVlPiBtYXRyaXhUcmFuc2Zvcm1WYWx1ZShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUpCiB7CiAgICAgUmVmUHRyPENTU0Z1bmN0aW9uVmFsdWU+IHRyYW5zZm9ybVZhbHVlOwpAQCAt
NjIzLDcgKzYxMiw3IEBAIHN0YXRpYyBSZWY8Q1NTVmFsdWU+IGNvbXB1dGVkVHJhbnNmb3JtKFJl
bmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsCiAgICAgICAgIHJldHVybiBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5v
bmUpOwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwotICAgIHN0eWxlLmFw
cGx5VHJhbnNmb3JtKHRyYW5zZm9ybSwgdHJhbnNmb3JtUmVmZXJlbmNlQm94KHN0eWxlLCAqcmVu
ZGVyZXIpLCB7IH0pOworICAgIHN0eWxlLmFwcGx5VHJhbnNmb3JtKHRyYW5zZm9ybSwgcmVuZGVy
ZXItPnRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3QoKSwgeyB9KTsKICAgICAvLyBOb3RlIHRoYXQg
dGhpcyBkb2VzIG5vdCBmbGF0dGVuIHRvIGFuIGFmZmluZSB0cmFuc2Zvcm0gaWYgRU5BQkxFKDNE
X1RSQU5TRk9STVMpIGlzIG9mZiwgYnkgZGVzaWduLgogCiAgICAgLy8gRklYTUU6IE5lZWQgdG8g
cHJpbnQgb3V0IGluZGl2aWR1YWwgZnVuY3Rpb25zIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjM5MjQpCkBAIC0zODM1LDcgKzM4MjQsNyBAQCBSZWZQdHI8Q1NTVmFs
dWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnZhbHVlRm9yUHJvcGVydHlJblN0eWxlKGNvbnN0
IFJlbmRlclN0eQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5UGVyc3BlY3RpdmVPcmlnaW46IHsK
ICAgICAgICAgICAgIGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0
ZWQoKTsKICAgICAgICAgICAgIGlmIChyZW5kZXJlcikgewotICAgICAgICAgICAgICAgIGF1dG8g
Ym94ID0gdHJhbnNmb3JtUmVmZXJlbmNlQm94KHN0eWxlLCAqcmVuZGVyZXIpOworICAgICAgICAg
ICAgICAgIGF1dG8gYm94ID0gcmVuZGVyZXItPnRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3QoKTsK
ICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShtaW5p
bXVtVmFsdWVGb3JMZW5ndGgoc3R5bGUucGVyc3BlY3RpdmVPcmlnaW5YKCksIGJveC53aWR0aCgp
KSwgc3R5bGUpKTsKICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4
ZWxWYWx1ZShtaW5pbXVtVmFsdWVGb3JMZW5ndGgoc3R5bGUucGVyc3BlY3RpdmVPcmlnaW5ZKCks
IGJveC5oZWlnaHQoKSksIHN0eWxlKSk7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMzg5MSw3
ICszODgwLDcgQEAgUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjp2YWx1
ZUZvclByb3BlcnR5SW5TdHlsZShjb25zdCBSZW5kZXJTdHkKICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVRyYW5zZm9ybU9yaWdpbjogewogICAgICAgICAgICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVM
aXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwogICAgICAgICAgICAgaWYgKHJlbmRlcmVyKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byBib3ggPSB0cmFuc2Zvcm1SZWZlcmVuY2VCb3goc3R5bGUs
ICpyZW5kZXJlcik7CisgICAgICAgICAgICAgICAgYXV0byBib3ggPSByZW5kZXJlci0+dHJhbnNm
b3JtUmVmZXJlbmNlQm94UmVjdCgpOwogICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZCh6b29t
QWRqdXN0ZWRQaXhlbFZhbHVlKG1pbmltdW1WYWx1ZUZvckxlbmd0aChzdHlsZS50cmFuc2Zvcm1P
cmlnaW5YKCksIGJveC53aWR0aCgpKSwgc3R5bGUpKTsKICAgICAgICAgICAgICAgICBsaXN0LT5h
cHBlbmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShtaW5pbXVtVmFsdWVGb3JMZW5ndGgoc3R5bGUu
dHJhbnNmb3JtT3JpZ2luWSgpLCBib3guaGVpZ2h0KCkpLCBzdHlsZSkpOwogICAgICAgICAgICAg
ICAgIGlmIChzdHlsZS50cmFuc2Zvcm1PcmlnaW5aKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwCmluZGV4IGM0MTZiZTkxZmYzZjU2OTcyYmNhYjRhMDVjNjg5NTNkODliYzYx
MzAuLjE4YmVhMzc3NDM2N2IyOTZkMzAyNTE2ODVmNDVhMjM3MWFjNmNjY2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC03NjYsOSArNzY2LDggQEAgTGF5b3V0UG9p
bnQgUmVuZGVyQm94Ojpjb250ZW50Qm94TG9jYXRpb24oKSBjb25zdAogICAgIHJldHVybiB7IGJv
cmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkgKyBzY3JvbGxiYXJTcGFjZSwgYm9yZGVyVG9wKCkg
KyBwYWRkaW5nVG9wKCkgfTsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJCb3g6OnJlZmVyZW5jZUJv
eChDU1NCb3hUeXBlIGJveFR5cGUpIGNvbnN0CitGbG9hdFJlY3QgUmVuZGVyQm94OjpyZWZlcmVu
Y2VCb3hSZWN0KENTU0JveFR5cGUgYm94VHlwZSkgY29uc3QKIHsKLSAgICBMYXlvdXRSZWN0IHJl
ZmVyZW5jZUJveDsKICAgICBzd2l0Y2ggKGJveFR5cGUpIHsKICAgICBjYXNlIENTU0JveFR5cGU6
OkNvbnRlbnRCb3g6CiAgICAgY2FzZSBDU1NCb3hUeXBlOjpGaWxsQm94OgpAQCAtNzg0LDYgKzc4
Myw4IEBAIExheW91dFJlY3QgUmVuZGVyQm94OjpyZWZlcmVuY2VCb3goQ1NTQm94VHlwZSBib3hU
eXBlKSBjb25zdAogICAgIGNhc2UgQ1NTQm94VHlwZTo6Qm94TWlzc2luZzoKICAgICAgICAgcmV0
dXJuIGJvcmRlckJveFJlY3QoKTsKICAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICByZXR1cm4geyB9OwogfQogCkBAIC0xNDYwLDggKzE0NjEsNyBAQCBib29sIFJlbmRlckJv
eDo6aGl0VGVzdENsaXBQYXRoKGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExvY2F0aW9u
LCBjb25zdCBMYQogICAgIHN3aXRjaCAoc3R5bGUoKS5jbGlwUGF0aCgpLT50eXBlKCkpIHsKICAg
ICBjYXNlIFBhdGhPcGVyYXRpb246OlNoYXBlOiB7CiAgICAgICAgIGF1dG8mIGNsaXBQYXRoID0g
ZG93bmNhc3Q8U2hhcGVQYXRoT3BlcmF0aW9uPigqc3R5bGUoKS5jbGlwUGF0aCgpKTsKLSAgICAg
ICAgYXV0byByZWZlcmVuY2VCb3hSZWN0ID0gcmVmZXJlbmNlQm94KGNsaXBQYXRoLnJlZmVyZW5j
ZUJveCgpKTsKLSAgICAgICAgaWYgKCFjbGlwUGF0aC5wYXRoRm9yUmVmZXJlbmNlUmVjdChyZWZl
cmVuY2VCb3hSZWN0KS5jb250YWlucyhoaXRUZXN0TG9jYXRpb25JbkxvY2FsQ29vcmRpbmF0ZXMs
IGNsaXBQYXRoLndpbmRSdWxlKCkpKQorICAgICAgICBpZiAoIWNsaXBQYXRoLnBhdGhGb3JSZWZl
cmVuY2VSZWN0KHJlZmVyZW5jZUJveFJlY3QoY2xpcFBhdGgucmVmZXJlbmNlQm94KCkpKS5jb250
YWlucyhoaXRUZXN0TG9jYXRpb25JbkxvY2FsQ29vcmRpbmF0ZXMsIGNsaXBQYXRoLndpbmRSdWxl
KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggZWQ3Nzc3MGU3ZTQyOWQ1Yjc2MmMw
ZWJjMjkxYmFmMDJmNDcwMjMyNS4uY2FjNjEzZmQ2MWUxYjA1ZWIyNzQxNTlhYmZjOTI1ZWVmMzU3
NzQ1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaApAQCAtMTY3LDggKzE2Nyw4
IEBAIHB1YmxpYzoKICAgICBMYXlvdXRSZWN0IGNvbnRlbnRCb3hSZWN0KCkgY29uc3Q7CiAgICAg
TGF5b3V0UG9pbnQgY29udGVudEJveExvY2F0aW9uKCkgY29uc3Q7CiAKLSAgICAvLyAuaHR0cHM6
Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy10cmFuc2Zvcm1zLTEvI3JlZmVyZW5jZS1ib3gKLSAgICBM
YXlvdXRSZWN0IHJlZmVyZW5jZUJveChDU1NCb3hUeXBlKSBjb25zdDsKKyAgICAvLyBodHRwczov
L3d3dy53My5vcmcvVFIvY3NzLXRyYW5zZm9ybXMtMS8jcmVmZXJlbmNlLWJveAorICAgIEZsb2F0
UmVjdCByZWZlcmVuY2VCb3hSZWN0KENTU0JveFR5cGUpIGNvbnN0IGZpbmFsOwogCiAgICAgLy8g
VGhlIGNvbnRlbnQgYm94IGluIGFic29sdXRlIGNvb3Jkcy4gSWdub3JlcyB0cmFuc2Zvcm1zLgog
ICAgIEludFJlY3QgYWJzb2x1dGVDb250ZW50Qm94KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKaW5kZXggZTkzMmJjNzRiMWZkZWI3NGFlMzJkMmJm
ODA3MDlmN2M1ZWI2ZGQyNS4uYmE3MDFkMmRjZDRmYzVhMjZkMTBlOTA4OGEwYjdmYTdkMzkwZDg2
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcApAQCAtNzgs
NiArNzgsNyBAQAogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50
VHlwZUhlbHBlcnMuaCIKICNpbmNsdWRlICJTVkdJbWFnZS5oIgorI2luY2x1ZGUgIlNWR0xlbmd0
aENvbnRleHQuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCiAjaW5jbHVkZSAiU2V0
dGluZ3MuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCkBAIC0yMzg5LDQgKzIzOTAsMzggQEAg
T3ZlcmZsb3cgUmVuZGVyRWxlbWVudDo6ZWZmZWN0aXZlT3ZlcmZsb3dZKCkgY29uc3QKICAgICBy
ZXR1cm4gb3ZlcmZsb3dZOwogfQogCisvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXRyYW5z
Zm9ybXMtMS8jdHJhbnNmb3JtLWJveAorRmxvYXRSZWN0IFJlbmRlckVsZW1lbnQ6OnJlZmVyZW5j
ZUJveFJlY3QoQ1NTQm94VHlwZSBib3hUeXBlKSBjb25zdAoreworICAgIC8vIENTUyBib3ggbW9k
ZWwgY29kZSBpcyBpbXBsZW1lbnRlZCBpbiBSZW5kZXJCb3g6OnJlZmVyZW5jZUJveFJlY3QoKS4K
KworICAgIC8vIEZvciB0aGUgbGVnYWN5IFNWRyBlbmdpbmUsIFJlbmRlckVsZW1lbnQgaXMgdGhl
IG9ubHkgY2xhc3MgdGhhdCdzCisgICAgLy8gcHJlc2VudCBpbiB0aGUgYW5jZXN0b3IgY2hhaW4g
b2YgYWxsIFNWRyByZW5kZXJlcnMuIEluIExCU0UgdGhlCisgICAgLy8gY29tbW9uIGNsYXNzIGlz
IFJlbmRlckxheWVyTW9kZWxPYmplY3QuIE9uY2UgdGhlIGxlZ2FjeSBTVkcgZW5naW5lCisgICAg
Ly8gaXMgcmVtb3ZlZCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBtb3ZlZCB0byBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0LgorICAgIC8vIEFzIHRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgYm90aCBTVkcg
ZW5naW5lcywgd2UgbmVlZCB0byBwbGFjZSBpdAorICAgIC8vIGhlcmUgaW4gUmVuZGVyRWxlbWVu
dCwgYXMgdGVtcG9yYXJ5IHNvbHV0aW9uLgorICAgIGlmICghaXM8U1ZHRWxlbWVudD4oZWxlbWVu
dCgpKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHN3aXRjaCAoYm94VHlwZSkgeworICAg
IGNhc2UgQ1NTQm94VHlwZTo6Qm94TWlzc2luZzoKKyAgICBjYXNlIENTU0JveFR5cGU6OkNvbnRl
bnRCb3g6CisgICAgY2FzZSBDU1NCb3hUeXBlOjpQYWRkaW5nQm94OgorICAgIGNhc2UgQ1NTQm94
VHlwZTo6RmlsbEJveDoKKyAgICAgICAgcmV0dXJuIG9iamVjdEJvdW5kaW5nQm94KCk7CisgICAg
Y2FzZSBDU1NCb3hUeXBlOjpCb3JkZXJCb3g6CisgICAgY2FzZSBDU1NCb3hUeXBlOjpNYXJnaW5C
b3g6CisgICAgY2FzZSBDU1NCb3hUeXBlOjpTdHJva2VCb3g6CisgICAgICAgIHJldHVybiBzdHJv
a2VCb3VuZGluZ0JveCgpOworICAgIGNhc2UgQ1NTQm94VHlwZTo6Vmlld0JveDoKKyAgICAgICAg
RmxvYXRTaXplIHZpZXdwb3J0U2l6ZTsKKyAgICAgICAgU1ZHTGVuZ3RoQ29udGV4dChkb3duY2Fz
dDxTVkdFbGVtZW50PihlbGVtZW50KCkpKS5kZXRlcm1pbmVWaWV3cG9ydCh2aWV3cG9ydFNpemUp
OworICAgICAgICByZXR1cm4geyB7IH0sIHZpZXdwb3J0U2l6ZSB9OworICAgIH0KKworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCmluZGV4IDUxYzU1MmNiZDllN2ZkMmI3Y2JlOWQx
MmRjZmEzZjEzMWZmN2RmMWIuLmVkNTEyNjI3YjFjMDQyNTdkN2ZlMjUyMDYxNTVhOTNlMWY2ZGYw
ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaApAQCAtMjU4LDYg
KzI1OCwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvbkZpbmlzaGVkKGNv
bnN0IFN0cmluZyYgLyogbmFtZSAqLykgeyB9CiAgICAgdmlydHVhbCB2b2lkIHRyYW5zZm9ybVJl
bGF0ZWRQcm9wZXJ0eURpZENoYW5nZSgpIHsgfQogCisgICAgLy8gaHR0cHM6Ly93d3cudzMub3Jn
L1RSL2Nzcy10cmFuc2Zvcm1zLTEvI3RyYW5zZm9ybS1ib3gKKyAgICBGbG9hdFJlY3QgdHJhbnNm
b3JtUmVmZXJlbmNlQm94UmVjdCgpIGNvbnN0IHsgcmV0dXJuIHJlZmVyZW5jZUJveFJlY3QodHJh
bnNmb3JtQm94VG9DU1NCb3hUeXBlKHN0eWxlKCkudHJhbnNmb3JtQm94KCkpKTsgfQorCisgICAg
Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy10cmFuc2Zvcm1zLTEvI3JlZmVyZW5jZS1ib3gK
KyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZWZlcmVuY2VCb3hSZWN0KENTU0JveFR5cGUpIGNvbnN0
OworCiAgICAgdmlydHVhbCB2b2lkIHN1c3BlbmRBbmltYXRpb25zKE1vbm90b25pY1RpbWUgPSBN
b25vdG9uaWNUaW1lKCkpIHsgfQogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gYW5p
bWF0ZWRTdHlsZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApp
bmRleCA4NTBiZGU0OGU0OTI4ZTg2ZGMxNzZiNjIzMjFmZWVkOWI2ODZjM2NkLi45NWNiMjVhZDFi
MWE2ZmYxNzUzNjZlNjQ5Zjc3MzcyMTUyODNhN2YyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKQEAgLTEyOTYsMjEgKzEyOTYsMTYgQEAgdm9pZCBSZW5kZXJMYXll
cjo6ZGlydHlBbmNlc3RvckNoYWluSGFzQmxlbmRpbmdEZXNjZW5kYW50cygpCiB9CiAjZW5kaWYK
IAotc3RhdGljIGlubGluZSBMYXlvdXRSZWN0IGNvbXB1dGVSZWZlcmVuY2VSZWN0RnJvbUJveChj
b25zdCBSZW5kZXJCb3gmIGJveCwgQ1NTQm94VHlwZSBib3hUeXBlLCBjb25zdCBMYXlvdXRTaXpl
JiBvZmZzZXRGcm9tUm9vdCkKLXsKLSAgICBhdXRvIHJlZmVyZW5jZUJveCA9IGJveC5yZWZlcmVu
Y2VCb3goYm94VHlwZSk7Ci0gICAgcmVmZXJlbmNlQm94Lm1vdmUob2Zmc2V0RnJvbVJvb3QpOwot
ICAgIHJldHVybiByZWZlcmVuY2VCb3g7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgTGF5b3V0UmVjdCBj
b21wdXRlUmVmZXJlbmNlQm94KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIENTU0JveFR5
cGUgYm94VHlwZSwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3QsIGNvbnN0IExheW91
dFJlY3QmIHJvb3RSZWxhdGl2ZUJvdW5kcykKK3N0YXRpYyBpbmxpbmUgRmxvYXRSZWN0IGNvbXB1
dGVSZWZlcmVuY2VCb3goY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIsIENT
U0JveFR5cGUgYm94VHlwZSwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3QsIGNvbnN0
IExheW91dFJlY3QmIHJvb3RSZWxhdGl2ZUJvdW5kcykKIHsKICAgICAvLyBGSVhNRTogU3VwcG9y
dCBkaWZmZXJlbnQgcmVmZXJlbmNlIGJveGVzIGZvciBpbmxpbmUgY29udGVudC4KICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5MDQ3CiAgICAgaWYgKCFy
ZW5kZXJlci5pc0JveCgpKQogICAgICAgICByZXR1cm4gcm9vdFJlbGF0aXZlQm91bmRzOwogICAg
IAotICAgIHJldHVybiBjb21wdXRlUmVmZXJlbmNlUmVjdEZyb21Cb3goZG93bmNhc3Q8UmVuZGVy
Qm94PihyZW5kZXJlciksIGJveFR5cGUsIG9mZnNldEZyb21Sb290KTsKKyAgICBhdXRvIHJlZmVy
ZW5jZUJveCA9IHJlbmRlcmVyLnJlZmVyZW5jZUJveFJlY3QoYm94VHlwZSk7CisgICAgcmVmZXJl
bmNlQm94Lm1vdmUob2Zmc2V0RnJvbVJvb3QpOworICAgIHJldHVybiByZWZlcmVuY2VCb3g7CiB9
CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVRyYW5zZm9ybSgpCkBAIC0xMzM1LDcgKzEzMzAs
NyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVUcmFuc2Zvcm0oKQogICAgICAgICAvLyBGSVhN
RTogW0xCU0VdIFVwc3RyZWFtIHJlZmVyZW5jZSBib3ggY29tcHV0YXRpb24gZm9yIFJlbmRlclNW
R01vZGVsT2JqZWN0IGRlcml2ZWQgcmVuZGVyZXJzCiAgICAgICAgIEZsb2F0UmVjdCByZWZlcmVu
Y2VCb3g7CiAgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKQotICAgICAgICAg
ICAgcmVmZXJlbmNlQm94ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhkb3duY2FzdDxSZW5kZXJC
b3g+KHJlbmRlcmVyKCkpLnJlZmVyZW5jZUJveCh0cmFuc2Zvcm1Cb3hUb0NTU0JveFR5cGUocmVu
ZGVyZXIoKS5zdHlsZSgpLnRyYW5zZm9ybUJveCgpKSksIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5k
ZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICAgICAgICAgIHJlZmVyZW5jZUJveCA9IHNuYXBSZWN0
VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkp
LnRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3QoKSksIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZp
Y2VTY2FsZUZhY3RvcigpKTsKIAogICAgICAgICByZW5kZXJlcigpLmFwcGx5VHJhbnNmb3JtKCpt
X3RyYW5zZm9ybSwgcmVmZXJlbmNlQm94KTsKICAgICAgICAgbWFrZU1hdHJpeFJlbmRlcmFibGUo
Km1fdHJhbnNmb3JtLCBjYW5SZW5kZXIzRFRyYW5zZm9ybXMoKSk7CkBAIC0xODAxLDggKzE3OTYs
OSBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJMYXllcjo6cGVyc3BlY3RpdmVUcmFuc2Zv
cm0oY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAg
YXV0byBkZXZpY2VTY2FsZUZhY3RvciA9IHJlbmRlckJveC5kb2N1bWVudCgpLmRldmljZVNjYWxl
RmFjdG9yKCk7Ci0gICAgYXV0byByZWZlcmVuY2VCb3ggPSByZW5kZXJCb3gucmVmZXJlbmNlQm94
KHRyYW5zZm9ybUJveFRvQ1NTQm94VHlwZShzdHlsZS50cmFuc2Zvcm1Cb3goKSkpOwotICAgIGF1
dG8gcGl4ZWxTbmFwcGVkUmVmZXJlbmNlQm94ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhyZWZl
cmVuY2VCb3gsIGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICBhdXRvIHJlZmVyZW5jZUJveCA9IHJl
bmRlckJveC50cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCk7CisgICAgLy8gRklYTUU6IFtMQlNF
XSBBdm9pZCBwaXhlbCBzbmFwcGluZyBpbiBTVkcgc3VidHJlZS4KKyAgICBhdXRvIHBpeGVsU25h
cHBlZFJlZmVyZW5jZUJveCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdChyZWZl
cmVuY2VCb3gpLCBkZXZpY2VTY2FsZUZhY3Rvcik7CiAgICAgYXV0byBzbmFwcGVkTGF5ZXJSZWN0
ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhsYXllclJlY3QsIGRldmljZVNjYWxlRmFjdG9yKTsK
IAogICAgIGF1dG8gcGVyc3BlY3RpdmVPcmlnaW4gPSBwaXhlbFNuYXBwZWRSZWZlcmVuY2VCb3gu
bG9jYXRpb24oKSAtIHRvRmxvYXRTaXplKHNuYXBwZWRMYXllclJlY3QubG9jYXRpb24oKSkgKyBm
bG9hdFBvaW50Rm9yTGVuZ3RoUG9pbnQoc3R5bGUucGVyc3BlY3RpdmVPcmlnaW4oKSwgcGl4ZWxT
bmFwcGVkUmVmZXJlbmNlQm94LnNpemUoKSk7CkBAIC0xODIzLDYgKzE4MTksNyBAQCBGbG9hdFBv
aW50IFJlbmRlckxheWVyOjpwZXJzcGVjdGl2ZU9yaWdpbigpIGNvbnN0CiB7CiAgICAgaWYgKCFy
ZW5kZXJlcigpLmhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSgpKQogICAgICAgICByZXR1cm4g
eyB9OworICAgIC8vIEZJWE1FOiBUaGlzIHVzZXMgdGhlIHdyb25nLCB0cmFuc2Zvcm0tYm94IHVu
YXdhcmUsIGdlb21ldHJ5LgogICAgIHJldHVybiBmbG9hdFBvaW50Rm9yTGVuZ3RoUG9pbnQocmVu
ZGVyZXIoKS5zdHlsZSgpLnBlcnNwZWN0aXZlT3JpZ2luKCksIHJlbmRlcmVyQm9yZGVyQm94UmVj
dCgpLnNpemUoKSk7CiB9CiAKQEAgLTMyMTIsMjEgKzMyMDksOSBAQCBzdGQ6OnBhaXI8UGF0aCwg
V2luZFJ1bGU+IFJlbmRlckxheWVyOjpjb21wdXRlQ2xpcFBhdGgoY29uc3QgTGF5b3V0U2l6ZSYg
b2Zmc2V0RgogCiAgICAgaWYgKGlzPFNoYXBlUGF0aE9wZXJhdGlvbj4oKnN0eWxlLmNsaXBQYXRo
KCkpKSB7CiAgICAgICAgIGF1dG8mIGNsaXBQYXRoID0gZG93bmNhc3Q8U2hhcGVQYXRoT3BlcmF0
aW9uPigqc3R5bGUuY2xpcFBhdGgoKSk7Ci0KLSAgICAgICAgTGF5b3V0UmVjdCByZWZlcmVuY2VC
b3g7Ci0gICAgICAgIGlmIChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKSB7Ci0gICAgICAgICAg
ICByZWZlcmVuY2VCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLnJlZmVyZW5j
ZUJveChjbGlwUGF0aC5yZWZlcmVuY2VCb3goKSk7Ci0gICAgICAgICAgICByZWZlcmVuY2VCb3gu
bW92ZShvZmZzZXRGcm9tUm9vdCk7Ci0jaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUp
Ci0gICAgICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyU1ZHTW9kZWxPYmplY3Q+KHJlbmRlcmVyKCkp
KSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIGNsaXBwaW5nIHN1cHBv
cnQgZm9yIFJlbmRlclNWR01vZGVsT2JqZWN0IGRlcml2ZWQgcmVuZGVyZXJzCi0jZW5kaWYKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFJlZmVyZW5jZSBib3ggZm9yIGlubGluZXMg
aXMgbm90IHdlbGwgZGVmaW5lZDogaHR0cHM6Ly9naXRodWIuY29tL3czYy9jc3N3Zy1kcmFmdHMv
aXNzdWVzLzYzODMKLSAgICAgICAgICAgIHJlZmVyZW5jZUJveCA9IHJvb3RSZWxhdGl2ZUJvdW5k
c0Zvck5vbkJveGVzOwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byBzbmFwcGVkUmVmZXJlbmNl
Qm94ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhyZWZlcmVuY2VCb3gsIGRldmljZVNjYWxlRmFj
dG9yKTsKKyAgICAgICAgYXV0byByZWZlcmVuY2VCb3ggPSBjb21wdXRlUmVmZXJlbmNlQm94KHJl
bmRlcmVyKCksIGNsaXBQYXRoLnJlZmVyZW5jZUJveCgpLCBvZmZzZXRGcm9tUm9vdCwgcm9vdFJl
bGF0aXZlQm91bmRzRm9yTm9uQm94ZXMpOworICAgICAgICAvLyBGSVhNRTogW0xCU0VdIEF2b2lk
IHBpeGVsIHNuYXBwaW5nIGluIFNWRyBzdWJ0cmVlLgorICAgICAgICBhdXRvIHNuYXBwZWRSZWZl
cmVuY2VCb3ggPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3QocmVmZXJlbmNlQm94
KSwgZGV2aWNlU2NhbGVGYWN0b3IpOwogICAgICAgICByZXR1cm4geyBjbGlwUGF0aC5wYXRoRm9y
UmVmZXJlbmNlUmVjdChzbmFwcGVkUmVmZXJlbmNlQm94KSwgY2xpcFBhdGgud2luZFJ1bGUoKSB9
OwogICAgIH0KIApAQCAtMzI2OSw3ICszMjU0LDggQEAgdm9pZCBSZW5kZXJMYXllcjo6c2V0dXBD
bGlwUGF0aChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dFN0YXRlU2EK
ICAgICAgICAgICAgIC8vIFVzZSB0aGUgYm9yZGVyIGJveCBhcyB0aGUgcmVmZXJlbmNlIGJveCwg
ZXZlbiB0aG91Z2ggdGhpcyBpcyBub3QgY2xlYXJseSBzcGVjaWZpZWQ6IGh0dHBzOi8vZ2l0aHVi
LmNvbS93M2MvY3Nzd2ctZHJhZnRzL2lzc3Vlcy81Nzg2LgogICAgICAgICAgICAgLy8gY2xpcHBl
ZENvbnRlbnRCb3VuZHMgaXMgdXNlZCBhcyB0aGUgcmVmZXJlbmNlIGJveCBmb3IgaW5saW5lcywg
d2hpY2ggaXMgYWxzbyBwb29ybHkgc3BlY2lmaWVkOiBodHRwczovL2dpdGh1Yi5jb20vdzNjL2Nz
c3dnLWRyYWZ0cy9pc3N1ZXMvNjM4My4KICAgICAgICAgICAgIGF1dG8gcmVmZXJlbmNlQm94ID0g
Y29tcHV0ZVJlZmVyZW5jZUJveChyZW5kZXJlcigpLCBDU1NCb3hUeXBlOjpCb3JkZXJCb3gsIG9m
ZnNldEZyb21Sb290LCBjbGlwcGVkQ29udGVudEJvdW5kcyk7Ci0gICAgICAgICAgICBhdXRvIHNu
YXBwZWRSZWZlcmVuY2VCb3ggPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKHJlZmVyZW5jZUJveCwg
cmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOworICAgICAgICAgICAg
Ly8gRklYTUU6IFtMQlNFXSBBdm9pZCBwaXhlbCBzbmFwcGluZyBpbiBTVkcgc3VidHJlZS4KKyAg
ICAgICAgICAgIGF1dG8gc25hcHBlZFJlZmVyZW5jZUJveCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhl
bHMoTGF5b3V0UmVjdChyZWZlcmVuY2VCb3gpLCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNl
U2NhbGVGYWN0b3IoKSk7CiAgICAgICAgICAgICBhdXRvIG9mZnNldCA9IHNuYXBwZWRSZWZlcmVu
Y2VCb3gubG9jYXRpb24oKTsKIAogICAgICAgICAgICAgYXV0byBzbmFwcGVkQ2xpcHBpbmdCb3Vu
ZHMgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGNsaXBwZWRDb250ZW50Qm91bmRzLCByZW5kZXJl
cigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAppbmRleCBjYzM4ZWM3MDMwZTYw
Y2UxNzU5YjEzMjg3ZGUyNWY3M2Q1NjVjODU4Li5lMmJlYjRiYThjMTE1N2RjYmIxMjg2NDlhM2Vk
ZTU2ZTM4NGU4ZDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlclN1cHBvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
UmVuZGVyU3VwcG9ydC5jcHAKQEAgLTM0MywyNiArMzQzLDYgQEAgYm9vbCBTVkdSZW5kZXJTdXBw
b3J0OjpmaWx0ZXJzRm9yY2VDb250YWluZXJMYXlvdXQoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotRmxvYXRSZWN0IFNWR1JlbmRlclN1cHBvcnQ6
OnRyYW5zZm9ybVJlZmVyZW5jZUJveChjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29u
c3QgU1ZHRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQotewotICAg
IHN3aXRjaCAoc3R5bGUudHJhbnNmb3JtQm94KCkpIHsKLSAgICBjYXNlIFRyYW5zZm9ybUJveDo6
Qm9yZGVyQm94OgotICAgICAgICAvLyBGb3IgU1ZHIGVsZW1lbnRzIHdpdGhvdXQgYW4gYXNzb2Np
YXRlZCBDU1MgbGF5b3V0IGJveCwgdGhlIHVzZWQgdmFsdWUgZm9yIGJvcmRlci1ib3ggaXMgc3Ry
b2tlLWJveC4KLSAgICBjYXNlIFRyYW5zZm9ybUJveDo6U3Ryb2tlQm94OgotICAgICAgICByZXR1
cm4gcmVuZGVyZXIuc3Ryb2tlQm91bmRpbmdCb3goKTsKLSAgICBjYXNlIFRyYW5zZm9ybUJveDo6
Q29udGVudEJveDoKLSAgICAgICAgLy8gRm9yIFNWRyBlbGVtZW50cyB3aXRob3V0IGFuIGFzc29j
aWF0ZWQgQ1NTIGxheW91dCBib3gsIHRoZSB1c2VkIHZhbHVlIGZvciBjb250ZW50LWJveCBpcyBm
aWxsLWJveC4KLSAgICBjYXNlIFRyYW5zZm9ybUJveDo6RmlsbEJveDoKLSAgICAgICAgcmV0dXJu
IHJlbmRlcmVyLm9iamVjdEJvdW5kaW5nQm94KCk7Ci0gICAgY2FzZSBUcmFuc2Zvcm1Cb3g6OlZp
ZXdCb3g6IHsKLSAgICAgICAgRmxvYXRTaXplIHZpZXdwb3J0U2l6ZTsKLSAgICAgICAgU1ZHTGVu
Z3RoQ29udGV4dCgmZWxlbWVudCkuZGV0ZXJtaW5lVmlld3BvcnQodmlld3BvcnRTaXplKTsKLSAg
ICAgICAgcmV0dXJuIEZsb2F0UmVjdCB7IHsgfSwgdmlld3BvcnRTaXplIH07Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQogaW5saW5lIEZsb2F0UmVjdCBjbGlwUGF0aFJl
ZmVyZW5jZUJveChjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgQ1NTQm94VHlwZSBib3hU
eXBlKQogewogICAgIEZsb2F0UmVjdCByZWZlcmVuY2VCb3g7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oCmluZGV4IDljY2ZjYmViNTc3YTc3M2Rj
ODgwN2Q5NTM5ZDYyYTgxZTU2MTliODkuLmQ0M2QwYzdmNzU4ZDE1ZmI3MDQ2YzkxYmUwY2E5ZGE1
M2RkODU2MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVu
ZGVyU3VwcG9ydC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
U3VwcG9ydC5oCkBAIC04Miw4ICs4Miw2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIHN0
eWxlQ2hhbmdlZChSZW5kZXJFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqKTsKICAgICAKLSAg
ICBzdGF0aWMgRmxvYXRSZWN0IHRyYW5zZm9ybVJlZmVyZW5jZUJveChjb25zdCBSZW5kZXJFbGVt
ZW50JiwgY29uc3QgU1ZHRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJik7Ci0KICNpZiBFTkFC
TEUoQ1NTX0NPTVBPU0lUSU5HKQogICAgIHN0YXRpYyBib29sIGlzb2xhdGVzQmxlbmRpbmcoY29u
c3QgUmVuZGVyU3R5bGUmKTsKICAgICBzdGF0aWMgdm9pZCB1cGRhdGVNYXNrZWRBbmNlc3RvclNo
b3VsZElzb2xhdGVCbGVuZGluZyhjb25zdCBSZW5kZXJFbGVtZW50Jik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhcGhpY3NFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdHcmFwaGljc0VsZW1lbnQuY3BwCmluZGV4IDQ5YTJjYTY5OGY1NGU1MmYwOTIwYjU0
ODQ2ZGUzNWQzNWVhMmQxZmEuLjYyMmQ2N2QwMWE2ZmExODdhOGU0NGQ4MWEyZDQ5ZjdkYTk4YTk1
NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFwaGljc0VsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFwaGljc0VsZW1lbnQuY3BwCkBAIC04MCwx
MiArODAsMTAgQEAgQWZmaW5lVHJhbnNmb3JtIFNWR0dyYXBoaWNzRWxlbWVudDo6YW5pbWF0ZWRM
b2NhbFRyYW5zZm9ybSgpIGNvbnN0CiAKICAgICAvLyBIb25vciBhbnkgb2YgdGhlIHRyYW5zZm9y
bS1yZWxhdGVkIENTUyBwcm9wZXJ0aWVzIGlmIHNldC4KICAgICBpZiAoaGFzU3BlY2lmaWVkVHJh
bnNmb3JtIHx8IChzdHlsZSAmJiAoc3R5bGUtPnRyYW5zbGF0ZSgpIHx8IHN0eWxlLT5zY2FsZSgp
IHx8IHN0eWxlLT5yb3RhdGUoKSkpKSB7Ci0gICAgICAgIGF1dG8gYm91bmRpbmdCb3ggPSBTVkdS
ZW5kZXJTdXBwb3J0Ojp0cmFuc2Zvcm1SZWZlcmVuY2VCb3goKnJlbmRlcmVyKCksICp0aGlzLCAq
c3R5bGUpOwotICAgICAgICAKICAgICAgICAgLy8gTm90ZTogb2JqZWN0Qm91bmRpbmdCb3ggaXMg
YW4gZW1wdHlSZWN0IGZvciBlbGVtZW50cyBsaWtlIHBhdHRlcm4gb3IgY2xpcFBhdGguCiAgICAg
ICAgIC8vIFNlZSB0aGUgIk9iamVjdCBib3VuZGluZyBib3ggdW5pdHMiIHNlY3Rpb24gb2YgaHR0
cDovL2Rldi53My5vcmcvY3Nzd2cvY3NzMy10cmFuc2Zvcm1zLwogICAgICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCB0cmFuc2Zvcm07Ci0gICAgICAgIHN0eWxlLT5hcHBseVRyYW5zZm9ybSh0cmFu
c2Zvcm0sIGJvdW5kaW5nQm94KTsKKyAgICAgICAgc3R5bGUtPmFwcGx5VHJhbnNmb3JtKHRyYW5z
Zm9ybSwgcmVuZGVyZXIoKS0+dHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdCgpKTsKIAogICAgICAg
ICAvLyBGbGF0dGVuIGFueSAzRCB0cmFuc2Zvcm0uCiAgICAgICAgIG1hdHJpeCA9IHRyYW5zZm9y
bS50b0FmZmluZVRyYW5zZm9ybSgpOwpAQCAtMTAwLDcgKzk4LDcgQEAgQWZmaW5lVHJhbnNmb3Jt
IFNWR0dyYXBoaWNzRWxlbWVudDo6YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0CiAKICAg
ICAvLyBJZiB3ZSBkaWRuJ3QgaGF2ZSB0aGUgQ1NTICJ0cmFuc2Zvcm0iIHByb3BlcnR5IHNldCwg
d2UgbXVzdCBhY2NvdW50IGZvciB0aGUgInRyYW5zZm9ybSIgYXR0cmlidXRlLgogICAgIGlmICgh
aGFzU3BlY2lmaWVkVHJhbnNmb3JtICYmIHN0eWxlKSB7Ci0gICAgICAgIGF1dG8gYm91bmRpbmdC
b3ggPSBTVkdSZW5kZXJTdXBwb3J0Ojp0cmFuc2Zvcm1SZWZlcmVuY2VCb3goKnJlbmRlcmVyKCks
ICp0aGlzLCAqc3R5bGUpOworICAgICAgICBhdXRvIGJvdW5kaW5nQm94ID0gcmVuZGVyZXIoKS0+
dHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdCgpOwogICAgICAgICBhdXRvIHQgPSBmbG9hdFBvaW50
Rm9yTGVuZ3RoUG9pbnQoc3R5bGUtPnRyYW5zZm9ybU9yaWdpblhZKCksIGJvdW5kaW5nQm94LnNp
emUoKSkgKyBib3VuZGluZ0JveC5sb2NhdGlvbigpOwogICAgICAgICBtYXRyaXgudHJhbnNsYXRl
KHQpOwogICAgICAgICBtYXRyaXggKj0gdHJhbnNmb3JtKCkuY29uY2F0ZW5hdGUoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454342</attachid>
            <date>2022-03-10 05:41:45 -0800</date>
            <delta_ts>2022-03-10 06:15:51 -0800</delta_ts>
            <desc>Patch, v3</desc>
            <filename>bug-237554-20220310054144.patch</filename>
            <type>text/plain</type>
            <size>21938</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzFjZjUwMmI5MjUxMTI1
OTlkYTNlOGQ0OTc4NmFjYzY2NGZiMWJkMi4uODkxMDk2ZWEwODFlMDgwMjZlZjYzYjY5ZDJlZjc1
M2JjMTM0N2E1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDIyLTAzLTEwICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFVuaWZ5
ICd0cmFuc2Zvcm0tYm94JyByZWZlcmVuY2UgYm94IGNvbXB1dGF0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc1NTQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgdGhlIGNvZGUgdG8g
Y29tcHV0ZSB0aGUgcmVmZXJlbmNlIGJveCwgYWNjb3JkaW5nIHRvIHRoZSBDU1MgJ3RyYW5zZm9y
bS1ib3gnCisgICAgICAgIHByb3BlcnR5IGlzIHNwcmlua2xlZCBvdmVyIHZhcmlvdXMgcGxhY2Vz
OiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24sIFNWR1JlbmRlclN1cHBvcnQsCisgICAgICAg
IFJlbmRlckJveCwgcGFydHMgaW4gUmVuZGVyTGF5ZXIuCisKKyAgICAgICAgQ2xlYW51cCBhbmQg
dW5pZnkgdGhlIGNvZGUgaW4gYSBzaW5nbGUgcGxhY2U6IGEgbmV3ICdyZWZlcmVuY2VCb3hSZWN0
KCknICBtZXRob2QgaW1wbGVtZW50aW5nCisgICAgICAgIHRoZSBjb21wdXRhdGlvbiBmb3IgYm90
aCBTVkcvSFRNTCwgd2hlcmUgdGhlIFNWRyBjb2RlIGxpdmVzIGluIFJlbmRlckVsZW1lbnQgKHRo
ZSBvbmx5IHNoYXJlZAorICAgICAgICBiYXNlIGNsYXNzIGJldHdlZW4gbGVnYWN5IFNWRy9MQlNF
KSBhbmQgdGhlIEhUTUwgY29kZSBpbiBSZW5kZXJCb3guIFRoZSBIVE1ML0NTUyBpbXBsZW1lbnRh
dGlvbgorICAgICAgICB3YXMgYWxyZWFkeSBjb250YWluZWQgaW4gUmVuZGVyQm94OjpyZWZlcmVu
Y2VCb3goKSBhbmQgd2FzIHJlbmFtZWQgdG8gcmVmZXJlbmNlQm94UmVjdCgpIHRvIGZvbGxvdwor
ICAgICAgICB0aGUgbmFtaW5nIGNvbnZlbnRpb24gZm9yIHRoZSBvdGhlciBDU1MgYm94IGdlb2Vt
dHJ5IGhlbHBlcnMgc3VjaCBhcyBjb250ZW50Qm94UmVjdCgpLAorICAgICAgICBib3JkZXJCb3hS
ZWN0KCksIGV0Yy4KKworICAgICAgICBSZW1vdmUgY29kZSBmcm9tIFNWR1JlbmRlclN1cHBvcnQv
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uIHRoYXQgY2FuIG5vdyB1c2UgdGhlIHNoYXJlZCBs
b2dpYy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLCBubyBjaGFuZ2UgaW4g
YmVoYXZpb3VyLgorCisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlZFRyYW5zZm9ybSk6IFVzZSB0aGUgcmVuZGVy
ZXJzIHRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3QoKSBpbnN0ZWFkIG9mIHRoZSBzdGF0aWMgaGVs
cGVyIGZ1bmN0aW9uIHRyYW5zZm9ybVJlZmVyZW5jZUJveCgpLgorICAgICAgICAoV2ViQ29yZTo6
Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6dmFsdWVGb3JQcm9wZXJ0eUluU3R5bGUpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OnRyYW5zZm9ybVJlZmVyZW5jZUJveCk6IERlbGV0ZWQuIFJlbmRl
ckVsZW1lbnQ6OnRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3QoKSBwcm92aWRlcyB0aGUgc2FtZSBs
b2dpYyBpbiBhIGdlbmVyaWMgd2F5LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpyZWZlcmVuY2VCb3hSZWN0IGNvbnN0KTog
UmVuYW1lIHJlZmVyZW5jZUJveCgpIHRvIHJlZmVyZW5jZUJveFJlY3QoKSBhbmQgcmV0dXJuIEZs
b2F0UmVjdCBpbnN0ZWFkIG9mIExheW91dFJlY3QuCisgICAgICAgIExCU0Ugd2FudHMgdG8gcmUt
dXNlIHRoZSBsb2dpYyBidXQgd2l0aG91dCBwaXhlbCBzbmFwcGluZyB3aXRoaW4gdGhlIFNWRyBy
ZW5kZXIgdHJlZS4gQWxsIGNhbGxlcnMgd2VyZSBhZGFwdGVkIHRvIHRoZSBuZXcgcmV0dXJuIHR5
cGUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmhpdFRlc3RDbGlwUGF0aCBjb25zdCk6
IEFkYXB0IHRvIHJlZmVyZW5jZUJveCgpIC0+IHJlZmVyZW5jZUJveFJlY3QoKSByZW5hbWluZy4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cmVmZXJlbmNlQm94IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6IEFkYXB0IHRvIHJlZmVyZW5jZUJv
eCgpIC0+IHJlZmVyZW5jZUJveFJlY3QoKSByZW5hbWluZworICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OnJlZmVy
ZW5jZUJveFJlY3QgY29uc3QpOiBBZGQgcmVmZXJlbmNlQm94UmVjdCgpIGltcGxlbWVudGF0aW9u
IGZvciBTVkcgcmVuZGVyZXJzLiBUaGUgY29tbW9uIGJhc2UtY2xhc3MgZm9yCisgICAgICAgIGFs
bCBTVkcgcmVuZGVyZXJzIGlzIFJlbmRlckVsZW1lbnQgaW4gdGhlIGxlZ2FjeSBTVkcgZW5naW5l
IGFuZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0IGluIExCU0UuIFRvIHNoYXJlIHRoZSBjb2RlIGJl
dHdlZW4gYm90aCBTVkcKKyAgICAgICAgaW1wbGVtZW50YXRpb25zIGl0IGhhcyB0byBiZSBwbGFj
ZWQgaW4gUmVuZGVyRWxlbWVudCAtLSB0byBiZSBtb3ZlZCB0byBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0LCBvbmNlIExCU0UgaXMgdGhlIG9ubHkgU1ZHIGVuZ2luZS4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6dHJh
bnNmb3JtUmVmZXJlbmNlQm94UmVjdCBjb25zdCk6IEFkZCBuZXcgaGVscGVyIGZ1bmN0aW9uIHdo
aWNoIGludm9rZXMgcmVmZXJlbmNlQm94UmVjdCgpIHVzaW5nCisgICAgICAgIHRyYW5zZm9ybUJv
eFRvQ1NTQm94VHlwZShzdHlsZSgpLnRyYW5zZm9ybUJveCgpKS4gV2hlbmV2ZXIgdHJhbnNmb3Jt
LWJveCBzdXBwb3J0IGlzIG5lY2Vzc2FyeSwgdGhpcyBtZXRob2Qgc2hhbGwgYmUgdXNlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOiBVc2UgdGhlIG5ldyB0cmFuc2Zvcm1S
ZWZlcmVuY2VCb3hSZWN0KCkgd2hlcmUgcG9zc2libGUuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6cGVyc3BlY3RpdmVUcmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OnBlcnNwZWN0aXZlT3JpZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbXB1dGVSZWZlcmVuY2VCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNv
bXB1dGVDbGlwUGF0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0
dXBDbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlUmVmZXJlbmNlUmVjdEZyb21C
b3gpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdXBwb3J0Ojp0cmFuc2Zvcm1SZWZlcmVu
Y2VCb3gpOiBEZWxldGVkLiBSZW5kZXJFbGVtZW50Ojp0cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0
KCkgcHJvdmlkZXMgdGhlIHNhbWUgbG9naWMgaW4gYSBnZW5lcmljIHdheS4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuaDogRGl0dG8uCisgICAgICAgICogc3ZnL1NW
R0dyYXBoaWNzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdHcmFwaGljc0VsZW1l
bnQ6OmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0gY29uc3QpOiBVc2UgdGhlIHJlbmRlcmVycyB0cmFu
c2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCkgaW5zdGVhZCBvZiBTVkdSZW5kZXJTdXBwb3J0Ojp0cmFu
c2Zvcm1SZWZlcmVuY2VCb3goKS4KKwogMjAyMi0wMy0xMCAgTmlrb2xhcyBaaW1tZXJtYW5uICA8
bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KIAogICAgICAgICBDbGVhbnVwIFJlbmRlckxheWVyOjpj
dXJyZW50VHJhbnNmb3JtKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggYWNlYmRiMzQ2NGJmZTFmMjc1ZGU0YWIwOGJhMThk
Zjg1NjhlYmQ4My4uMDIyMThjY2NkYjY4MDk4YjkyNjJkYWQyNzg3ZjQ0ODAzMTVmODc1YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5j
cHAKQEAgLTU2MCwxNyArNTYwLDYgQEAgc3RhdGljIExheW91dFJlY3Qgc2l6aW5nQm94KFJlbmRl
ck9iamVjdCYgcmVuZGVyZXIpCiAgICAgcmV0dXJuIGJveC5zdHlsZSgpLmJveFNpemluZygpID09
IEJveFNpemluZzo6Qm9yZGVyQm94ID8gYm94LmJvcmRlckJveFJlY3QoKSA6IGJveC5jb21wdXRl
ZENTU0NvbnRlbnRCb3hSZWN0KCk7CiB9CiAKLXN0YXRpYyBGbG9hdFJlY3QgdHJhbnNmb3JtUmVm
ZXJlbmNlQm94KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgUmVuZGVyRWxlbWVudCYg
cmVuZGVyZXIpCi17Ci0gICAgaWYgKGlzPFJlbmRlckJveD4ocmVuZGVyZXIpKQotICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcikucmVmZXJlbmNlQm94KHRyYW5zZm9y
bUJveFRvQ1NTQm94VHlwZShzdHlsZS50cmFuc2Zvcm1Cb3goKSkpOwotCi0gICAgaWYgKGlzPFNW
R0VsZW1lbnQ+KHJlbmRlcmVyLmVsZW1lbnQoKSkpCi0gICAgICAgIHJldHVybiBTVkdSZW5kZXJT
dXBwb3J0Ojp0cmFuc2Zvcm1SZWZlcmVuY2VCb3gocmVuZGVyZXIsIGRvd25jYXN0PFNWR0VsZW1l
bnQ+KCpyZW5kZXJlci5lbGVtZW50KCkpLCBzdHlsZSk7Ci0KLSAgICByZXR1cm4geyB9OwotfQot
CiBzdGF0aWMgUmVmPENTU0Z1bmN0aW9uVmFsdWU+IG1hdHJpeFRyYW5zZm9ybVZhbHVlKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSkKIHsKICAgICBSZWZQdHI8Q1NTRnVuY3Rpb25WYWx1ZT4gdHJhbnNmb3JtVmFsdWU7CkBAIC02
MjMsNyArNjEyLDcgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZT4gY29tcHV0ZWRUcmFuc2Zvcm0oUmVu
ZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWwKICAgICAgICAgcmV0dXJuIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9u
ZSk7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07Ci0gICAgc3R5bGUuYXBw
bHlUcmFuc2Zvcm0odHJhbnNmb3JtLCB0cmFuc2Zvcm1SZWZlcmVuY2VCb3goc3R5bGUsICpyZW5k
ZXJlciksIHsgfSk7CisgICAgc3R5bGUuYXBwbHlUcmFuc2Zvcm0odHJhbnNmb3JtLCByZW5kZXJl
ci0+dHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdCgpLCB7IH0pOwogICAgIC8vIE5vdGUgdGhhdCB0
aGlzIGRvZXMgbm90IGZsYXR0ZW4gdG8gYW4gYWZmaW5lIHRyYW5zZm9ybSBpZiBFTkFCTEUoM0Rf
VFJBTlNGT1JNUykgaXMgb2ZmLCBieSBkZXNpZ24uCiAKICAgICAvLyBGSVhNRTogTmVlZCB0byBw
cmludCBvdXQgaW5kaXZpZHVhbCBmdW5jdGlvbnMgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzkyNCkKQEAgLTM4NDAsNyArMzgyOSw3IEBAIFJlZlB0cjxDU1NWYWx1
ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6dmFsdWVGb3JQcm9wZXJ0eUluU3R5bGUoY29uc3Qg
UmVuZGVyU3R5CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZU9yaWdpbjogewog
ICAgICAgICAgICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRl
ZCgpOwogICAgICAgICAgICAgaWYgKHJlbmRlcmVyKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBi
b3ggPSB0cmFuc2Zvcm1SZWZlcmVuY2VCb3goc3R5bGUsICpyZW5kZXJlcik7CisgICAgICAgICAg
ICAgICAgYXV0byBib3ggPSByZW5kZXJlci0+dHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdCgpOwog
ICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZCh6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKG1pbmlt
dW1WYWx1ZUZvckxlbmd0aChzdHlsZS5wZXJzcGVjdGl2ZU9yaWdpblgoKSwgYm94LndpZHRoKCkp
LCBzdHlsZSkpOwogICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZCh6b29tQWRqdXN0ZWRQaXhl
bFZhbHVlKG1pbmltdW1WYWx1ZUZvckxlbmd0aChzdHlsZS5wZXJzcGVjdGl2ZU9yaWdpblkoKSwg
Ym94LmhlaWdodCgpKSwgc3R5bGUpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0zODk2LDcg
KzM4ODUsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnZhbHVl
Rm9yUHJvcGVydHlJblN0eWxlKGNvbnN0IFJlbmRlclN0eQogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5VHJhbnNmb3JtT3JpZ2luOiB7CiAgICAgICAgICAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxp
c3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIpIHsK
LSAgICAgICAgICAgICAgICBhdXRvIGJveCA9IHRyYW5zZm9ybVJlZmVyZW5jZUJveChzdHlsZSwg
KnJlbmRlcmVyKTsKKyAgICAgICAgICAgICAgICBhdXRvIGJveCA9IHJlbmRlcmVyLT50cmFuc2Zv
cm1SZWZlcmVuY2VCb3hSZWN0KCk7CiAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHpvb21B
ZGp1c3RlZFBpeGVsVmFsdWUobWluaW11bVZhbHVlRm9yTGVuZ3RoKHN0eWxlLnRyYW5zZm9ybU9y
aWdpblgoKSwgYm94LndpZHRoKCkpLCBzdHlsZSkpOwogICAgICAgICAgICAgICAgIGxpc3QtPmFw
cGVuZCh6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKG1pbmltdW1WYWx1ZUZvckxlbmd0aChzdHlsZS50
cmFuc2Zvcm1PcmlnaW5ZKCksIGJveC5oZWlnaHQoKSksIHN0eWxlKSk7CiAgICAgICAgICAgICAg
ICAgaWYgKHN0eWxlLnRyYW5zZm9ybU9yaWdpblooKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAKaW5kZXggYzQxNmJlOTFmZjNmNTY5NzJiY2FiNGEwNWM2ODk1M2Q4OWJjNjEz
MC4uMThiZWEzNzc0MzY3YjI5NmQzMDI1MTY4NWY0NWEyMzcxYWM2Y2NjZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTc2Niw5ICs3NjYsOCBAQCBMYXlvdXRQb2lu
dCBSZW5kZXJCb3g6OmNvbnRlbnRCb3hMb2NhdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIHsgYm9y
ZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSArIHNjcm9sbGJhclNwYWNlLCBib3JkZXJUb3AoKSAr
IHBhZGRpbmdUb3AoKSB9OwogfQogCi1MYXlvdXRSZWN0IFJlbmRlckJveDo6cmVmZXJlbmNlQm94
KENTU0JveFR5cGUgYm94VHlwZSkgY29uc3QKK0Zsb2F0UmVjdCBSZW5kZXJCb3g6OnJlZmVyZW5j
ZUJveFJlY3QoQ1NTQm94VHlwZSBib3hUeXBlKSBjb25zdAogewotICAgIExheW91dFJlY3QgcmVm
ZXJlbmNlQm94OwogICAgIHN3aXRjaCAoYm94VHlwZSkgewogICAgIGNhc2UgQ1NTQm94VHlwZTo6
Q29udGVudEJveDoKICAgICBjYXNlIENTU0JveFR5cGU6OkZpbGxCb3g6CkBAIC03ODQsNiArNzgz
LDggQEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6OnJlZmVyZW5jZUJveChDU1NCb3hUeXBlIGJveFR5
cGUpIGNvbnN0CiAgICAgY2FzZSBDU1NCb3hUeXBlOjpCb3hNaXNzaW5nOgogICAgICAgICByZXR1
cm4gYm9yZGVyQm94UmVjdCgpOwogICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTE0NjAsOCArMTQ2MSw3IEBAIGJvb2wgUmVuZGVyQm94
OjpoaXRUZXN0Q2xpcFBhdGgoY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9jYXRpb24s
IGNvbnN0IExhCiAgICAgc3dpdGNoIChzdHlsZSgpLmNsaXBQYXRoKCktPnR5cGUoKSkgewogICAg
IGNhc2UgUGF0aE9wZXJhdGlvbjo6U2hhcGU6IHsKICAgICAgICAgYXV0byYgY2xpcFBhdGggPSBk
b3duY2FzdDxTaGFwZVBhdGhPcGVyYXRpb24+KCpzdHlsZSgpLmNsaXBQYXRoKCkpOwotICAgICAg
ICBhdXRvIHJlZmVyZW5jZUJveFJlY3QgPSByZWZlcmVuY2VCb3goY2xpcFBhdGgucmVmZXJlbmNl
Qm94KCkpOwotICAgICAgICBpZiAoIWNsaXBQYXRoLnBhdGhGb3JSZWZlcmVuY2VSZWN0KHJlZmVy
ZW5jZUJveFJlY3QpLmNvbnRhaW5zKGhpdFRlc3RMb2NhdGlvbkluTG9jYWxDb29yZGluYXRlcywg
Y2xpcFBhdGgud2luZFJ1bGUoKSkpCisgICAgICAgIGlmICghY2xpcFBhdGgucGF0aEZvclJlZmVy
ZW5jZVJlY3QocmVmZXJlbmNlQm94UmVjdChjbGlwUGF0aC5yZWZlcmVuY2VCb3goKSkpLmNvbnRh
aW5zKGhpdFRlc3RMb2NhdGlvbkluTG9jYWxDb29yZGluYXRlcywgY2xpcFBhdGgud2luZFJ1bGUo
KSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAppbmRleCBlZDc3NzcwZTdlNDI5ZDViNzYyYzBl
YmMyOTFiYWYwMmY0NzAyMzI1Li5jYWM2MTNmZDYxZTFiMDVlYjI3NDE1OWFiZmM5MjVlZWYzNTc3
NDVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCkBAIC0xNjcsOCArMTY3LDgg
QEAgcHVibGljOgogICAgIExheW91dFJlY3QgY29udGVudEJveFJlY3QoKSBjb25zdDsKICAgICBM
YXlvdXRQb2ludCBjb250ZW50Qm94TG9jYXRpb24oKSBjb25zdDsKIAotICAgIC8vIC5odHRwczov
L2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXRyYW5zZm9ybXMtMS8jcmVmZXJlbmNlLWJveAotICAgIExh
eW91dFJlY3QgcmVmZXJlbmNlQm94KENTU0JveFR5cGUpIGNvbnN0OworICAgIC8vIGh0dHBzOi8v
d3d3LnczLm9yZy9UUi9jc3MtdHJhbnNmb3Jtcy0xLyNyZWZlcmVuY2UtYm94CisgICAgRmxvYXRS
ZWN0IHJlZmVyZW5jZUJveFJlY3QoQ1NTQm94VHlwZSkgY29uc3QgZmluYWw7CiAKICAgICAvLyBU
aGUgY29udGVudCBib3ggaW4gYWJzb2x1dGUgY29vcmRzLiBJZ25vcmVzIHRyYW5zZm9ybXMuCiAg
ICAgSW50UmVjdCBhYnNvbHV0ZUNvbnRlbnRCb3goKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAppbmRleCBlOTMyYmM3NGIxZmRlYjc0YWUzMmQyYmY4
MDcwOWY3YzVlYjZkZDI1Li5iYTcwMWQyZGNkNGZjNWEyNmQxMGU5MDg4YTBiN2ZhN2QzOTBkODZj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCkBAIC03OCw2
ICs3OCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnRU
eXBlSGVscGVycy5oIgogI2luY2x1ZGUgIlNWR0ltYWdlLmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3Ro
Q29udGV4dC5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKICNpbmNsdWRlICJTZXR0
aW5ncy5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKQEAgLTIzODksNCArMjM5MCwzOCBAQCBP
dmVyZmxvdyBSZW5kZXJFbGVtZW50OjplZmZlY3RpdmVPdmVyZmxvd1koKSBjb25zdAogICAgIHJl
dHVybiBvdmVyZmxvd1k7CiB9CiAKKy8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtdHJhbnNm
b3Jtcy0xLyN0cmFuc2Zvcm0tYm94CitGbG9hdFJlY3QgUmVuZGVyRWxlbWVudDo6cmVmZXJlbmNl
Qm94UmVjdChDU1NCb3hUeXBlIGJveFR5cGUpIGNvbnN0Cit7CisgICAgLy8gQ1NTIGJveCBtb2Rl
bCBjb2RlIGlzIGltcGxlbWVudGVkIGluIFJlbmRlckJveDo6cmVmZXJlbmNlQm94UmVjdCgpLgor
CisgICAgLy8gRm9yIHRoZSBsZWdhY3kgU1ZHIGVuZ2luZSwgUmVuZGVyRWxlbWVudCBpcyB0aGUg
b25seSBjbGFzcyB0aGF0J3MKKyAgICAvLyBwcmVzZW50IGluIHRoZSBhbmNlc3RvciBjaGFpbiBv
ZiBhbGwgU1ZHIHJlbmRlcmVycy4gSW4gTEJTRSB0aGUKKyAgICAvLyBjb21tb24gY2xhc3MgaXMg
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdC4gT25jZSB0aGUgbGVnYWN5IFNWRyBlbmdpbmUKKyAgICAv
LyBpcyByZW1vdmVkIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIG1vdmVkIHRvIFJlbmRlckxheWVy
TW9kZWxPYmplY3QuCisgICAgLy8gQXMgdGhpcyBtZXRob2QgaXMgdXNlZCBieSBib3RoIFNWRyBl
bmdpbmVzLCB3ZSBuZWVkIHRvIHBsYWNlIGl0CisgICAgLy8gaGVyZSBpbiBSZW5kZXJFbGVtZW50
LCBhcyB0ZW1wb3Jhcnkgc29sdXRpb24uCisgICAgaWYgKCFpczxTVkdFbGVtZW50PihlbGVtZW50
KCkpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgc3dpdGNoIChib3hUeXBlKSB7CisgICAg
Y2FzZSBDU1NCb3hUeXBlOjpCb3hNaXNzaW5nOgorICAgIGNhc2UgQ1NTQm94VHlwZTo6Q29udGVu
dEJveDoKKyAgICBjYXNlIENTU0JveFR5cGU6OlBhZGRpbmdCb3g6CisgICAgY2FzZSBDU1NCb3hU
eXBlOjpGaWxsQm94OgorICAgICAgICByZXR1cm4gb2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICBj
YXNlIENTU0JveFR5cGU6OkJvcmRlckJveDoKKyAgICBjYXNlIENTU0JveFR5cGU6Ok1hcmdpbkJv
eDoKKyAgICBjYXNlIENTU0JveFR5cGU6OlN0cm9rZUJveDoKKyAgICAgICAgcmV0dXJuIHN0cm9r
ZUJvdW5kaW5nQm94KCk7CisgICAgY2FzZSBDU1NCb3hUeXBlOjpWaWV3Qm94OgorICAgICAgICBG
bG9hdFNpemUgdmlld3BvcnRTaXplOworICAgICAgICBTVkdMZW5ndGhDb250ZXh0KGRvd25jYXN0
PFNWR0VsZW1lbnQ+KGVsZW1lbnQoKSkpLmRldGVybWluZVZpZXdwb3J0KHZpZXdwb3J0U2l6ZSk7
CisgICAgICAgIHJldHVybiB7IHsgfSwgdmlld3BvcnRTaXplIH07CisgICAgfQorCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgKaW5kZXggNTFjNTUyY2JkOWU3ZmQyYjdjYmU5ZDEy
ZGNmYTNmMTMxZmY3ZGYxYi4uZWQ1MTI2MjdiMWMwNDI1N2Q3ZmUyNTIwNjE1NWE5M2UxZjZkZjA4
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCkBAIC0yNTgsNiAr
MjU4LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uRmluaXNoZWQoY29u
c3QgU3RyaW5nJiAvKiBuYW1lICovKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNmb3JtUmVs
YXRlZFByb3BlcnR5RGlkQ2hhbmdlKCkgeyB9CiAKKyAgICAvLyBodHRwczovL3d3dy53My5vcmcv
VFIvY3NzLXRyYW5zZm9ybXMtMS8jdHJhbnNmb3JtLWJveAorICAgIEZsb2F0UmVjdCB0cmFuc2Zv
cm1SZWZlcmVuY2VCb3hSZWN0KCkgY29uc3QgeyByZXR1cm4gcmVmZXJlbmNlQm94UmVjdCh0cmFu
c2Zvcm1Cb3hUb0NTU0JveFR5cGUoc3R5bGUoKS50cmFuc2Zvcm1Cb3goKSkpOyB9CisKKyAgICAv
LyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXRyYW5zZm9ybXMtMS8jcmVmZXJlbmNlLWJveAor
ICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlZmVyZW5jZUJveFJlY3QoQ1NTQm94VHlwZSkgY29uc3Q7
CisKICAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoTW9ub3RvbmljVGltZSA9IE1v
bm90b25pY1RpbWUoKSkgeyB9CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBhbmlt
YXRlZFN0eWxlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmlu
ZGV4IDg1MGJkZTQ4ZTQ5MjhlODZkYzE3NmI2MjMyMWZlZWQ5YjY4NmMzY2QuLjk1Y2IyNWFkMWIx
YTZmZjE3NTM2NmU2NDlmNzczNzIxNTI4M2E3ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcApAQCAtMTI5NiwyMSArMTI5NiwxNiBAQCB2b2lkIFJlbmRlckxheWVy
OjpkaXJ0eUFuY2VzdG9yQ2hhaW5IYXNCbGVuZGluZ0Rlc2NlbmRhbnRzKCkKIH0KICNlbmRpZgog
Ci1zdGF0aWMgaW5saW5lIExheW91dFJlY3QgY29tcHV0ZVJlZmVyZW5jZVJlY3RGcm9tQm94KGNv
bnN0IFJlbmRlckJveCYgYm94LCBDU1NCb3hUeXBlIGJveFR5cGUsIGNvbnN0IExheW91dFNpemUm
IG9mZnNldEZyb21Sb290KQotewotICAgIGF1dG8gcmVmZXJlbmNlQm94ID0gYm94LnJlZmVyZW5j
ZUJveChib3hUeXBlKTsKLSAgICByZWZlcmVuY2VCb3gubW92ZShvZmZzZXRGcm9tUm9vdCk7Ci0g
ICAgcmV0dXJuIHJlZmVyZW5jZUJveDsKLX0KLQotc3RhdGljIGlubGluZSBMYXlvdXRSZWN0IGNv
bXB1dGVSZWZlcmVuY2VCb3goY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgQ1NTQm94VHlw
ZSBib3hUeXBlLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdCwgY29uc3QgTGF5b3V0
UmVjdCYgcm9vdFJlbGF0aXZlQm91bmRzKQorc3RhdGljIGlubGluZSBGbG9hdFJlY3QgY29tcHV0
ZVJlZmVyZW5jZUJveChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlciwgQ1NT
Qm94VHlwZSBib3hUeXBlLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdCwgY29uc3Qg
TGF5b3V0UmVjdCYgcm9vdFJlbGF0aXZlQm91bmRzKQogewogICAgIC8vIEZJWE1FOiBTdXBwb3J0
IGRpZmZlcmVudCByZWZlcmVuY2UgYm94ZXMgZm9yIGlubGluZSBjb250ZW50LgogICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkwNDcKICAgICBpZiAoIXJl
bmRlcmVyLmlzQm94KCkpCiAgICAgICAgIHJldHVybiByb290UmVsYXRpdmVCb3VuZHM7CiAgICAg
Ci0gICAgcmV0dXJuIGNvbXB1dGVSZWZlcmVuY2VSZWN0RnJvbUJveChkb3duY2FzdDxSZW5kZXJC
b3g+KHJlbmRlcmVyKSwgYm94VHlwZSwgb2Zmc2V0RnJvbVJvb3QpOworICAgIGF1dG8gcmVmZXJl
bmNlQm94ID0gcmVuZGVyZXIucmVmZXJlbmNlQm94UmVjdChib3hUeXBlKTsKKyAgICByZWZlcmVu
Y2VCb3gubW92ZShvZmZzZXRGcm9tUm9vdCk7CisgICAgcmV0dXJuIHJlZmVyZW5jZUJveDsKIH0K
IAogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlVHJhbnNmb3JtKCkKQEAgLTEzMzUsNyArMTMzMCw3
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVRyYW5zZm9ybSgpCiAgICAgICAgIC8vIEZJWE1F
OiBbTEJTRV0gVXBzdHJlYW0gcmVmZXJlbmNlIGJveCBjb21wdXRhdGlvbiBmb3IgUmVuZGVyU1ZH
TW9kZWxPYmplY3QgZGVyaXZlZCByZW5kZXJlcnMKICAgICAgICAgRmxvYXRSZWN0IHJlZmVyZW5j
ZUJveDsKICAgICAgICAgaWYgKGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpCi0gICAgICAgICAg
ICByZWZlcmVuY2VCb3ggPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGRvd25jYXN0PFJlbmRlckJv
eD4ocmVuZGVyZXIoKSkucmVmZXJlbmNlQm94KHRyYW5zZm9ybUJveFRvQ1NTQm94VHlwZShyZW5k
ZXJlcigpLnN0eWxlKCkudHJhbnNmb3JtQm94KCkpKSwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRl
dmljZVNjYWxlRmFjdG9yKCkpOworICAgICAgICAgICAgcmVmZXJlbmNlQm94ID0gc25hcFJlY3RU
b0RldmljZVBpeGVscyhMYXlvdXRSZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSku
dHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdCgpKSwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmlj
ZVNjYWxlRmFjdG9yKCkpOwogCiAgICAgICAgIHJlbmRlcmVyKCkuYXBwbHlUcmFuc2Zvcm0oKm1f
dHJhbnNmb3JtLCByZWZlcmVuY2VCb3gpOwogICAgICAgICBtYWtlTWF0cml4UmVuZGVyYWJsZSgq
bV90cmFuc2Zvcm0sIGNhblJlbmRlcjNEVHJhbnNmb3JtcygpKTsKQEAgLTE4MDEsOCArMTc5Niw5
IEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4IFJlbmRlckxheWVyOjpwZXJzcGVjdGl2ZVRyYW5zZm9y
bShjb25zdCBMYXlvdXRSZWN0JiBsYXllclJlCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBh
dXRvIGRldmljZVNjYWxlRmFjdG9yID0gcmVuZGVyQm94LmRvY3VtZW50KCkuZGV2aWNlU2NhbGVG
YWN0b3IoKTsKLSAgICBhdXRvIHJlZmVyZW5jZUJveCA9IHJlbmRlckJveC5yZWZlcmVuY2VCb3go
dHJhbnNmb3JtQm94VG9DU1NCb3hUeXBlKHN0eWxlLnRyYW5zZm9ybUJveCgpKSk7Ci0gICAgYXV0
byBwaXhlbFNuYXBwZWRSZWZlcmVuY2VCb3ggPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKHJlZmVy
ZW5jZUJveCwgZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIGF1dG8gcmVmZXJlbmNlQm94ID0gcmVu
ZGVyQm94LnRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3QoKTsKKyAgICAvLyBGSVhNRTogW0xCU0Vd
IEF2b2lkIHBpeGVsIHNuYXBwaW5nIGluIFNWRyBzdWJ0cmVlLgorICAgIGF1dG8gcGl4ZWxTbmFw
cGVkUmVmZXJlbmNlQm94ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHJlZmVy
ZW5jZUJveCksIGRldmljZVNjYWxlRmFjdG9yKTsKICAgICBhdXRvIHNuYXBwZWRMYXllclJlY3Qg
PSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGxheWVyUmVjdCwgZGV2aWNlU2NhbGVGYWN0b3IpOwog
CiAgICAgYXV0byBwZXJzcGVjdGl2ZU9yaWdpbiA9IHBpeGVsU25hcHBlZFJlZmVyZW5jZUJveC5s
b2NhdGlvbigpIC0gdG9GbG9hdFNpemUoc25hcHBlZExheWVyUmVjdC5sb2NhdGlvbigpKSArIGZs
b2F0UG9pbnRGb3JMZW5ndGhQb2ludChzdHlsZS5wZXJzcGVjdGl2ZU9yaWdpbigpLCBwaXhlbFNu
YXBwZWRSZWZlcmVuY2VCb3guc2l6ZSgpKTsKQEAgLTE4MjMsNiArMTgxOSw3IEBAIEZsb2F0UG9p
bnQgUmVuZGVyTGF5ZXI6OnBlcnNwZWN0aXZlT3JpZ2luKCkgY29uc3QKIHsKICAgICBpZiAoIXJl
bmRlcmVyKCkuaGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KCkpCiAgICAgICAgIHJldHVybiB7
IH07CisgICAgLy8gRklYTUU6IFRoaXMgdXNlcyB0aGUgd3JvbmcsIHRyYW5zZm9ybS1ib3ggdW5h
d2FyZSwgZ2VvbWV0cnkuCiAgICAgcmV0dXJuIGZsb2F0UG9pbnRGb3JMZW5ndGhQb2ludChyZW5k
ZXJlcigpLnN0eWxlKCkucGVyc3BlY3RpdmVPcmlnaW4oKSwgcmVuZGVyZXJCb3JkZXJCb3hSZWN0
KCkuc2l6ZSgpKTsKIH0KIApAQCAtMzIxMiwyMSArMzIwOSw5IEBAIHN0ZDo6cGFpcjxQYXRoLCBX
aW5kUnVsZT4gUmVuZGVyTGF5ZXI6OmNvbXB1dGVDbGlwUGF0aChjb25zdCBMYXlvdXRTaXplJiBv
ZmZzZXRGCiAKICAgICBpZiAoaXM8U2hhcGVQYXRoT3BlcmF0aW9uPigqc3R5bGUuY2xpcFBhdGgo
KSkpIHsKICAgICAgICAgYXV0byYgY2xpcFBhdGggPSBkb3duY2FzdDxTaGFwZVBhdGhPcGVyYXRp
b24+KCpzdHlsZS5jbGlwUGF0aCgpKTsKLQotICAgICAgICBMYXlvdXRSZWN0IHJlZmVyZW5jZUJv
eDsKLSAgICAgICAgaWYgKGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpIHsKLSAgICAgICAgICAg
IHJlZmVyZW5jZUJveCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkucmVmZXJlbmNl
Qm94KGNsaXBQYXRoLnJlZmVyZW5jZUJveCgpKTsKLSAgICAgICAgICAgIHJlZmVyZW5jZUJveC5t
b3ZlKG9mZnNldEZyb21Sb290KTsKLSNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkK
LSAgICAgICAgfSBlbHNlIGlmIChpczxSZW5kZXJTVkdNb2RlbE9iamVjdD4ocmVuZGVyZXIoKSkp
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gY2xpcHBpbmcgc3VwcG9y
dCBmb3IgUmVuZGVyU1ZHTW9kZWxPYmplY3QgZGVyaXZlZCByZW5kZXJlcnMKLSNlbmRpZgotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gUmVmZXJlbmNlIGJveCBmb3IgaW5saW5lcyBp
cyBub3Qgd2VsbCBkZWZpbmVkOiBodHRwczovL2dpdGh1Yi5jb20vdzNjL2Nzc3dnLWRyYWZ0cy9p
c3N1ZXMvNjM4MwotICAgICAgICAgICAgcmVmZXJlbmNlQm94ID0gcm9vdFJlbGF0aXZlQm91bmRz
Rm9yTm9uQm94ZXM7Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvIHNuYXBwZWRSZWZlcmVuY2VC
b3ggPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKHJlZmVyZW5jZUJveCwgZGV2aWNlU2NhbGVGYWN0
b3IpOworICAgICAgICBhdXRvIHJlZmVyZW5jZUJveCA9IGNvbXB1dGVSZWZlcmVuY2VCb3gocmVu
ZGVyZXIoKSwgY2xpcFBhdGgucmVmZXJlbmNlQm94KCksIG9mZnNldEZyb21Sb290LCByb290UmVs
YXRpdmVCb3VuZHNGb3JOb25Cb3hlcyk7CisgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gQXZvaWQg
cGl4ZWwgc25hcHBpbmcgaW4gU1ZHIHN1YnRyZWUuCisgICAgICAgIGF1dG8gc25hcHBlZFJlZmVy
ZW5jZUJveCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdChyZWZlcmVuY2VCb3gp
LCBkZXZpY2VTY2FsZUZhY3Rvcik7CiAgICAgICAgIHJldHVybiB7IGNsaXBQYXRoLnBhdGhGb3JS
ZWZlcmVuY2VSZWN0KHNuYXBwZWRSZWZlcmVuY2VCb3gpLCBjbGlwUGF0aC53aW5kUnVsZSgpIH07
CiAgICAgfQogCkBAIC0zMjY5LDcgKzMyNTQsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpzZXR1cENs
aXBQYXRoKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgR3JhcGhpY3NDb250ZXh0U3RhdGVTYQog
ICAgICAgICAgICAgLy8gVXNlIHRoZSBib3JkZXIgYm94IGFzIHRoZSByZWZlcmVuY2UgYm94LCBl
dmVuIHRob3VnaCB0aGlzIGlzIG5vdCBjbGVhcmx5IHNwZWNpZmllZDogaHR0cHM6Ly9naXRodWIu
Y29tL3czYy9jc3N3Zy1kcmFmdHMvaXNzdWVzLzU3ODYuCiAgICAgICAgICAgICAvLyBjbGlwcGVk
Q29udGVudEJvdW5kcyBpcyB1c2VkIGFzIHRoZSByZWZlcmVuY2UgYm94IGZvciBpbmxpbmVzLCB3
aGljaCBpcyBhbHNvIHBvb3JseSBzcGVjaWZpZWQ6IGh0dHBzOi8vZ2l0aHViLmNvbS93M2MvY3Nz
d2ctZHJhZnRzL2lzc3Vlcy82MzgzLgogICAgICAgICAgICAgYXV0byByZWZlcmVuY2VCb3ggPSBj
b21wdXRlUmVmZXJlbmNlQm94KHJlbmRlcmVyKCksIENTU0JveFR5cGU6OkJvcmRlckJveCwgb2Zm
c2V0RnJvbVJvb3QsIGNsaXBwZWRDb250ZW50Qm91bmRzKTsKLSAgICAgICAgICAgIGF1dG8gc25h
cHBlZFJlZmVyZW5jZUJveCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMocmVmZXJlbmNlQm94LCBy
ZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgICAgICAgICAv
LyBGSVhNRTogW0xCU0VdIEF2b2lkIHBpeGVsIHNuYXBwaW5nIGluIFNWRyBzdWJ0cmVlLgorICAg
ICAgICAgICAgYXV0byBzbmFwcGVkUmVmZXJlbmNlQm94ID0gc25hcFJlY3RUb0RldmljZVBpeGVs
cyhMYXlvdXRSZWN0KHJlZmVyZW5jZUJveCksIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VT
Y2FsZUZhY3RvcigpKTsKICAgICAgICAgICAgIGF1dG8gb2Zmc2V0ID0gc25hcHBlZFJlZmVyZW5j
ZUJveC5sb2NhdGlvbigpOwogCiAgICAgICAgICAgICBhdXRvIHNuYXBwZWRDbGlwcGluZ0JvdW5k
cyA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoY2xpcHBlZENvbnRlbnRCb3VuZHMsIHJlbmRlcmVy
KCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCmluZGV4IGNjMzhlYzcwMzBlNjBj
ZTE3NTliMTMyODdkZTI1ZjczZDU2NWM4NTguLmUyYmViNGJhOGMxMTU3ZGNiYjEyODY0OWEzZWRl
NTZlMzg0ZThkMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
UmVuZGVyU3VwcG9ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdS
ZW5kZXJTdXBwb3J0LmNwcApAQCAtMzQzLDI2ICszNDMsNiBAQCBib29sIFNWR1JlbmRlclN1cHBv
cnQ6OmZpbHRlcnNGb3JjZUNvbnRhaW5lckxheW91dChjb25zdCBSZW5kZXJFbGVtZW50JiByZW5k
ZXJlcgogICAgIHJldHVybiB0cnVlOwogfQogCi1GbG9hdFJlY3QgU1ZHUmVuZGVyU3VwcG9ydDo6
dHJhbnNmb3JtUmVmZXJlbmNlQm94KGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25z
dCBTVkdFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCi17Ci0gICAg
c3dpdGNoIChzdHlsZS50cmFuc2Zvcm1Cb3goKSkgewotICAgIGNhc2UgVHJhbnNmb3JtQm94OjpC
b3JkZXJCb3g6Ci0gICAgICAgIC8vIEZvciBTVkcgZWxlbWVudHMgd2l0aG91dCBhbiBhc3NvY2lh
dGVkIENTUyBsYXlvdXQgYm94LCB0aGUgdXNlZCB2YWx1ZSBmb3IgYm9yZGVyLWJveCBpcyBzdHJv
a2UtYm94LgotICAgIGNhc2UgVHJhbnNmb3JtQm94OjpTdHJva2VCb3g6Ci0gICAgICAgIHJldHVy
biByZW5kZXJlci5zdHJva2VCb3VuZGluZ0JveCgpOwotICAgIGNhc2UgVHJhbnNmb3JtQm94OjpD
b250ZW50Qm94OgotICAgICAgICAvLyBGb3IgU1ZHIGVsZW1lbnRzIHdpdGhvdXQgYW4gYXNzb2Np
YXRlZCBDU1MgbGF5b3V0IGJveCwgdGhlIHVzZWQgdmFsdWUgZm9yIGNvbnRlbnQtYm94IGlzIGZp
bGwtYm94LgotICAgIGNhc2UgVHJhbnNmb3JtQm94OjpGaWxsQm94OgotICAgICAgICByZXR1cm4g
cmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3goKTsKLSAgICBjYXNlIFRyYW5zZm9ybUJveDo6Vmll
d0JveDogewotICAgICAgICBGbG9hdFNpemUgdmlld3BvcnRTaXplOwotICAgICAgICBTVkdMZW5n
dGhDb250ZXh0KCZlbGVtZW50KS5kZXRlcm1pbmVWaWV3cG9ydCh2aWV3cG9ydFNpemUpOwotICAg
ICAgICByZXR1cm4gRmxvYXRSZWN0IHsgeyB9LCB2aWV3cG9ydFNpemUgfTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICByZXR1cm4geyB9OwotfQotCiBpbmxpbmUgRmxvYXRSZWN0IGNsaXBQYXRoUmVm
ZXJlbmNlQm94KGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBDU1NCb3hUeXBlIGJveFR5
cGUpCiB7CiAgICAgRmxvYXRSZWN0IHJlZmVyZW5jZUJveDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmgKaW5kZXggOWNjZmNiZWI1NzdhNzczZGM4
ODA3ZDk1MzlkNjJhODFlNTYxOWI4OS4uZDQzZDBjN2Y3NThkMTVmYjcwNDZjOTFiZTBjYTlkYTUz
ZGQ4NTYwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5k
ZXJTdXBwb3J0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJT
dXBwb3J0LmgKQEAgLTgyLDggKzgyLDYgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgc3R5
bGVDaGFuZ2VkKFJlbmRlckVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSopOwogICAgIAotICAg
IHN0YXRpYyBGbG9hdFJlY3QgdHJhbnNmb3JtUmVmZXJlbmNlQm94KGNvbnN0IFJlbmRlckVsZW1l
bnQmLCBjb25zdCBTVkdFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKLQogI2lmIEVOQUJM
RShDU1NfQ09NUE9TSVRJTkcpCiAgICAgc3RhdGljIGJvb2wgaXNvbGF0ZXNCbGVuZGluZyhjb25z
dCBSZW5kZXJTdHlsZSYpOwogICAgIHN0YXRpYyB2b2lkIHVwZGF0ZU1hc2tlZEFuY2VzdG9yU2hv
dWxkSXNvbGF0ZUJsZW5kaW5nKGNvbnN0IFJlbmRlckVsZW1lbnQmKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFwaGljc0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0dyYXBoaWNzRWxlbWVudC5jcHAKaW5kZXggNDlhMmNhNjk4ZjU0ZTUyZjA5MjBiNTQ4
NDZkZTM1ZDM1ZWEyZDFmYS4uNjIyZDY3ZDAxYTZmYTE4N2E4ZTQ0ZDgxYTJkNDlmN2RhOThhOTU3
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYXBoaWNzRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYXBoaWNzRWxlbWVudC5jcHAKQEAgLTgwLDEy
ICs4MCwxMCBAQCBBZmZpbmVUcmFuc2Zvcm0gU1ZHR3JhcGhpY3NFbGVtZW50OjphbmltYXRlZExv
Y2FsVHJhbnNmb3JtKCkgY29uc3QKIAogICAgIC8vIEhvbm9yIGFueSBvZiB0aGUgdHJhbnNmb3Jt
LXJlbGF0ZWQgQ1NTIHByb3BlcnRpZXMgaWYgc2V0LgogICAgIGlmIChoYXNTcGVjaWZpZWRUcmFu
c2Zvcm0gfHwgKHN0eWxlICYmIChzdHlsZS0+dHJhbnNsYXRlKCkgfHwgc3R5bGUtPnNjYWxlKCkg
fHwgc3R5bGUtPnJvdGF0ZSgpKSkpIHsKLSAgICAgICAgYXV0byBib3VuZGluZ0JveCA9IFNWR1Jl
bmRlclN1cHBvcnQ6OnRyYW5zZm9ybVJlZmVyZW5jZUJveCgqcmVuZGVyZXIoKSwgKnRoaXMsICpz
dHlsZSk7Ci0gICAgICAgIAogICAgICAgICAvLyBOb3RlOiBvYmplY3RCb3VuZGluZ0JveCBpcyBh
biBlbXB0eVJlY3QgZm9yIGVsZW1lbnRzIGxpa2UgcGF0dGVybiBvciBjbGlwUGF0aC4KICAgICAg
ICAgLy8gU2VlIHRoZSAiT2JqZWN0IGJvdW5kaW5nIGJveCB1bml0cyIgc2VjdGlvbiBvZiBodHRw
Oi8vZGV2LnczLm9yZy9jc3N3Zy9jc3MzLXRyYW5zZm9ybXMvCiAgICAgICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IHRyYW5zZm9ybTsKLSAgICAgICAgc3R5bGUtPmFwcGx5VHJhbnNmb3JtKHRyYW5z
Zm9ybSwgYm91bmRpbmdCb3gpOworICAgICAgICBzdHlsZS0+YXBwbHlUcmFuc2Zvcm0odHJhbnNm
b3JtLCByZW5kZXJlcigpLT50cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCkpOwogCiAgICAgICAg
IC8vIEZsYXR0ZW4gYW55IDNEIHRyYW5zZm9ybS4KICAgICAgICAgbWF0cml4ID0gdHJhbnNmb3Jt
LnRvQWZmaW5lVHJhbnNmb3JtKCk7CkBAIC0xMDAsNyArOTgsNyBAQCBBZmZpbmVUcmFuc2Zvcm0g
U1ZHR3JhcGhpY3NFbGVtZW50OjphbmltYXRlZExvY2FsVHJhbnNmb3JtKCkgY29uc3QKIAogICAg
IC8vIElmIHdlIGRpZG4ndCBoYXZlIHRoZSBDU1MgInRyYW5zZm9ybSIgcHJvcGVydHkgc2V0LCB3
ZSBtdXN0IGFjY291bnQgZm9yIHRoZSAidHJhbnNmb3JtIiBhdHRyaWJ1dGUuCiAgICAgaWYgKCFo
YXNTcGVjaWZpZWRUcmFuc2Zvcm0gJiYgc3R5bGUpIHsKLSAgICAgICAgYXV0byBib3VuZGluZ0Jv
eCA9IFNWR1JlbmRlclN1cHBvcnQ6OnRyYW5zZm9ybVJlZmVyZW5jZUJveCgqcmVuZGVyZXIoKSwg
KnRoaXMsICpzdHlsZSk7CisgICAgICAgIGF1dG8gYm91bmRpbmdCb3ggPSByZW5kZXJlcigpLT50
cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCk7CiAgICAgICAgIGF1dG8gdCA9IGZsb2F0UG9pbnRG
b3JMZW5ndGhQb2ludChzdHlsZS0+dHJhbnNmb3JtT3JpZ2luWFkoKSwgYm91bmRpbmdCb3guc2l6
ZSgpKSArIGJvdW5kaW5nQm94LmxvY2F0aW9uKCk7CiAgICAgICAgIG1hdHJpeC50cmFuc2xhdGUo
dCk7CiAgICAgICAgIG1hdHJpeCAqPSB0cmFuc2Zvcm0oKS5jb25jYXRlbmF0ZSgpOwo=
</data>
<flag name="commit-queue"
          id="481971"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454354</attachid>
            <date>2022-03-10 06:13:50 -0800</date>
            <delta_ts>2022-03-10 14:56:12 -0800</delta_ts>
            <desc>Patch, v4</desc>
            <filename>bug-237554-20220310061349.patch</filename>
            <type>text/plain</type>
            <size>22900</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzFjZjUwMmI5MjUxMTI1
OTlkYTNlOGQ0OTc4NmFjYzY2NGZiMWJkMi4uYWQ3ZWUzZmJhNmY2NjNjOWIzOTFiZDJiNDVjYmI5
NmU5MGNmYTNiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDIyLTAzLTEwICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFVuaWZ5
ICd0cmFuc2Zvcm0tYm94JyByZWZlcmVuY2UgYm94IGNvbXB1dGF0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc1NTQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgdGhlIGNvZGUgdG8g
Y29tcHV0ZSB0aGUgcmVmZXJlbmNlIGJveCwgYWNjb3JkaW5nIHRvIHRoZSBDU1MgJ3RyYW5zZm9y
bS1ib3gnCisgICAgICAgIHByb3BlcnR5IGlzIHNwcmlua2xlZCBvdmVyIHZhcmlvdXMgcGxhY2Vz
OiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24sIFNWR1JlbmRlclN1cHBvcnQsCisgICAgICAg
IFJlbmRlckJveCwgcGFydHMgaW4gUmVuZGVyTGF5ZXIuCisKKyAgICAgICAgQ2xlYW51cCBhbmQg
dW5pZnkgdGhlIGNvZGUgaW4gYSBzaW5nbGUgcGxhY2U6IGEgbmV3ICdyZWZlcmVuY2VCb3hSZWN0
KCknICBtZXRob2QgaW1wbGVtZW50aW5nCisgICAgICAgIHRoZSBjb21wdXRhdGlvbiBmb3IgYm90
aCBTVkcvSFRNTCwgd2hlcmUgdGhlIFNWRyBjb2RlIGxpdmVzIGluIFJlbmRlckVsZW1lbnQgKHRo
ZSBvbmx5IHNoYXJlZAorICAgICAgICBiYXNlIGNsYXNzIGJldHdlZW4gbGVnYWN5IFNWRy9MQlNF
KSBhbmQgdGhlIEhUTUwgY29kZSBpbiBSZW5kZXJCb3guIFRoZSBIVE1ML0NTUyBpbXBsZW1lbnRh
dGlvbgorICAgICAgICB3YXMgYWxyZWFkeSBjb250YWluZWQgaW4gUmVuZGVyQm94OjpyZWZlcmVu
Y2VCb3goKSBhbmQgd2FzIHJlbmFtZWQgdG8gcmVmZXJlbmNlQm94UmVjdCgpIHRvIGZvbGxvdwor
ICAgICAgICB0aGUgbmFtaW5nIGNvbnZlbnRpb24gZm9yIHRoZSBvdGhlciBDU1MgYm94IGdlb2Vt
dHJ5IGhlbHBlcnMgc3VjaCBhcyBjb250ZW50Qm94UmVjdCgpLAorICAgICAgICBib3JkZXJCb3hS
ZWN0KCksIGV0Yy4KKworICAgICAgICBSZW1vdmUgY29kZSBmcm9tIFNWR1JlbmRlclN1cHBvcnQv
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uIHRoYXQgY2FuIG5vdyB1c2UgdGhlIHNoYXJlZCBs
b2dpYy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLCBubyBjaGFuZ2UgaW4g
YmVoYXZpb3VyLgorCisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlZFRyYW5zZm9ybSk6IFVzZSB0aGUgcmVuZGVy
ZXJzIHRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3QoKSBpbnN0ZWFkIG9mIHRoZSBzdGF0aWMgaGVs
cGVyIGZ1bmN0aW9uIHRyYW5zZm9ybVJlZmVyZW5jZUJveCgpLgorICAgICAgICAoV2ViQ29yZTo6
Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6dmFsdWVGb3JQcm9wZXJ0eUluU3R5bGUpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OnRyYW5zZm9ybVJlZmVyZW5jZUJveCk6IERlbGV0ZWQuIFJlbmRl
ckVsZW1lbnQ6OnRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3QoKSBwcm92aWRlcyB0aGUgc2FtZSBs
b2dpYyBpbiBhIGdlbmVyaWMgd2F5LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpyZWZlcmVuY2VCb3hSZWN0IGNvbnN0KTog
UmVuYW1lIHJlZmVyZW5jZUJveCgpIHRvIHJlZmVyZW5jZUJveFJlY3QoKSBhbmQgcmV0dXJuIEZs
b2F0UmVjdCBpbnN0ZWFkIG9mIExheW91dFJlY3QuCisgICAgICAgIExCU0Ugd2FudHMgdG8gcmUt
dXNlIHRoZSBsb2dpYyBidXQgd2l0aG91dCBwaXhlbCBzbmFwcGluZyB3aXRoaW4gdGhlIFNWRyBy
ZW5kZXIgdHJlZS4gQWxsIGNhbGxlcnMgd2VyZSBhZGFwdGVkIHRvIHRoZSBuZXcgcmV0dXJuIHR5
cGUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmhpdFRlc3RDbGlwUGF0aCBjb25zdCk6
IEFkYXB0IHRvIHJlZmVyZW5jZUJveCgpIC0+IHJlZmVyZW5jZUJveFJlY3QoKSByZW5hbWluZy4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cmVmZXJlbmNlQm94IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6IEFkYXB0IHRvIHJlZmVyZW5jZUJv
eCgpIC0+IHJlZmVyZW5jZUJveFJlY3QoKSByZW5hbWluZworICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OnJlZmVy
ZW5jZUJveFJlY3QgY29uc3QpOiBBZGQgcmVmZXJlbmNlQm94UmVjdCgpIGltcGxlbWVudGF0aW9u
IGZvciBTVkcgcmVuZGVyZXJzLiBUaGUgY29tbW9uIGJhc2UtY2xhc3MgZm9yCisgICAgICAgIGFs
bCBTVkcgcmVuZGVyZXJzIGlzIFJlbmRlckVsZW1lbnQgaW4gdGhlIGxlZ2FjeSBTVkcgZW5naW5l
IGFuZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0IGluIExCU0UuIFRvIHNoYXJlIHRoZSBjb2RlIGJl
dHdlZW4gYm90aCBTVkcKKyAgICAgICAgaW1wbGVtZW50YXRpb25zIGl0IGhhcyB0byBiZSBwbGFj
ZWQgaW4gUmVuZGVyRWxlbWVudCAtLSB0byBiZSBtb3ZlZCB0byBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0LCBvbmNlIExCU0UgaXMgdGhlIG9ubHkgU1ZHIGVuZ2luZS4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6dHJh
bnNmb3JtUmVmZXJlbmNlQm94UmVjdCBjb25zdCk6IEFkZCBuZXcgaGVscGVyIGZ1bmN0aW9uIHdo
aWNoIGludm9rZXMgcmVmZXJlbmNlQm94UmVjdCgpIHVzaW5nCisgICAgICAgIHRyYW5zZm9ybUJv
eFRvQ1NTQm94VHlwZShzdHlsZSgpLnRyYW5zZm9ybUJveCgpKS4gV2hlbmV2ZXIgdHJhbnNmb3Jt
LWJveCBzdXBwb3J0IGlzIG5lY2Vzc2FyeSwgdGhpcyBtZXRob2Qgc2hhbGwgYmUgdXNlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOiBVc2UgdGhlIG5ldyB0cmFuc2Zvcm1S
ZWZlcmVuY2VCb3hSZWN0KCkgd2hlcmUgcG9zc2libGUuCisgICAgICAgIChXZWJDb3JlOjpjb21w
dXRlUmVmZXJlbmNlQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVU
cmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmN1cnJlbnRUcmFuc2Zv
cm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBlcnNwZWN0aXZlVHJh
bnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwZXJzcGVjdGl2
ZU9yaWdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y29tcHV0ZUNs
aXBQYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXR1cENsaXBQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVSZWZlcmVuY2VSZWN0RnJvbUJveCk6IERl
bGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlclN1cHBvcnQ6OnRyYW5zZm9ybVJlZmVyZW5jZUJveCk6
IERlbGV0ZWQuIFJlbmRlckVsZW1lbnQ6OnRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3QoKSBwcm92
aWRlcyB0aGUgc2FtZSBsb2dpYyBpbiBhIGdlbmVyaWMgd2F5LgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oOiBEaXR0by4KKyAgICAgICAgKiBzdmcvU1ZHR3JhcGhp
Y3NFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dyYXBoaWNzRWxlbWVudDo6YW5p
bWF0ZWRMb2NhbFRyYW5zZm9ybSBjb25zdCk6IFVzZSB0aGUgcmVuZGVyZXJzIHRyYW5zZm9ybVJl
ZmVyZW5jZUJveFJlY3QoKSBpbnN0ZWFkIG9mIFNWR1JlbmRlclN1cHBvcnQ6OnRyYW5zZm9ybVJl
ZmVyZW5jZUJveCgpLgorCiAyMDIyLTAzLTEwICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVy
bWFubkBpZ2FsaWEuY29tPgogCiAgICAgICAgIENsZWFudXAgUmVuZGVyTGF5ZXI6OmN1cnJlbnRU
cmFuc2Zvcm0oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmNwcAppbmRleCBhY2ViZGIzNDY0YmZlMWYyNzVkZTRhYjA4YmExOGRmODU2OGVi
ZDgzLi4wMjIxOGNjY2RiNjgwOThiOTI2MmRhZDI3ODdmNDQ4MDMxNWY4NzVjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcApAQCAt
NTYwLDE3ICs1NjAsNiBAQCBzdGF0aWMgTGF5b3V0UmVjdCBzaXppbmdCb3goUmVuZGVyT2JqZWN0
JiByZW5kZXJlcikKICAgICByZXR1cm4gYm94LnN0eWxlKCkuYm94U2l6aW5nKCkgPT0gQm94U2l6
aW5nOjpCb3JkZXJCb3ggPyBib3guYm9yZGVyQm94UmVjdCgpIDogYm94LmNvbXB1dGVkQ1NTQ29u
dGVudEJveFJlY3QoKTsKIH0KIAotc3RhdGljIEZsb2F0UmVjdCB0cmFuc2Zvcm1SZWZlcmVuY2VC
b3goY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJl
cikKLXsKLSAgICBpZiAoaXM8UmVuZGVyQm94PihyZW5kZXJlcikpCi0gICAgICAgIHJldHVybiBk
b3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKS5yZWZlcmVuY2VCb3godHJhbnNmb3JtQm94VG9D
U1NCb3hUeXBlKHN0eWxlLnRyYW5zZm9ybUJveCgpKSk7Ci0KLSAgICBpZiAoaXM8U1ZHRWxlbWVu
dD4ocmVuZGVyZXIuZWxlbWVudCgpKSkKLSAgICAgICAgcmV0dXJuIFNWR1JlbmRlclN1cHBvcnQ6
OnRyYW5zZm9ybVJlZmVyZW5jZUJveChyZW5kZXJlciwgZG93bmNhc3Q8U1ZHRWxlbWVudD4oKnJl
bmRlcmVyLmVsZW1lbnQoKSksIHN0eWxlKTsKLQotICAgIHJldHVybiB7IH07Ci19Ci0KIHN0YXRp
YyBSZWY8Q1NTRnVuY3Rpb25WYWx1ZT4gbWF0cml4VHJhbnNmb3JtVmFsdWUoY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogewog
ICAgIFJlZlB0cjxDU1NGdW5jdGlvblZhbHVlPiB0cmFuc2Zvcm1WYWx1ZTsKQEAgLTYyMyw3ICs2
MTIsNyBAQCBzdGF0aWMgUmVmPENTU1ZhbHVlPiBjb21wdXRlZFRyYW5zZm9ybShSZW5kZXJFbGVt
ZW50KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bAogICAgICAgICByZXR1cm4gQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKIAog
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKLSAgICBzdHlsZS5hcHBseVRyYW5z
Zm9ybSh0cmFuc2Zvcm0sIHRyYW5zZm9ybVJlZmVyZW5jZUJveChzdHlsZSwgKnJlbmRlcmVyKSwg
eyB9KTsKKyAgICBzdHlsZS5hcHBseVRyYW5zZm9ybSh0cmFuc2Zvcm0sIHJlbmRlcmVyLT50cmFu
c2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCksIHsgfSk7CiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgZG9l
cyBub3QgZmxhdHRlbiB0byBhbiBhZmZpbmUgdHJhbnNmb3JtIGlmIEVOQUJMRSgzRF9UUkFOU0ZP
Uk1TKSBpcyBvZmYsIGJ5IGRlc2lnbi4KIAogICAgIC8vIEZJWE1FOiBOZWVkIHRvIHByaW50IG91
dCBpbmRpdmlkdWFsIGZ1bmN0aW9ucyAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzOTI0KQpAQCAtMzg0MCw3ICszODI5LDcgQEAgUmVmUHRyPENTU1ZhbHVlPiBDb21w
dXRlZFN0eWxlRXh0cmFjdG9yOjp2YWx1ZUZvclByb3BlcnR5SW5TdHlsZShjb25zdCBSZW5kZXJT
dHkKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVBlcnNwZWN0aXZlT3JpZ2luOiB7CiAgICAgICAg
ICAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CiAg
ICAgICAgICAgICBpZiAocmVuZGVyZXIpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGJveCA9IHRy
YW5zZm9ybVJlZmVyZW5jZUJveChzdHlsZSwgKnJlbmRlcmVyKTsKKyAgICAgICAgICAgICAgICBh
dXRvIGJveCA9IHJlbmRlcmVyLT50cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCk7CiAgICAgICAg
ICAgICAgICAgbGlzdC0+YXBwZW5kKHpvb21BZGp1c3RlZFBpeGVsVmFsdWUobWluaW11bVZhbHVl
Rm9yTGVuZ3RoKHN0eWxlLnBlcnNwZWN0aXZlT3JpZ2luWCgpLCBib3gud2lkdGgoKSksIHN0eWxl
KSk7CiAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHpvb21BZGp1c3RlZFBpeGVsVmFsdWUo
bWluaW11bVZhbHVlRm9yTGVuZ3RoKHN0eWxlLnBlcnNwZWN0aXZlT3JpZ2luWSgpLCBib3guaGVp
Z2h0KCkpLCBzdHlsZSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTM4OTYsNyArMzg4NSw3
IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6dmFsdWVGb3JQcm9w
ZXJ0eUluU3R5bGUoY29uc3QgUmVuZGVyU3R5CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFu
c2Zvcm1PcmlnaW46IHsKICAgICAgICAgICAgIGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3Jl
YXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICAgICAgICAgIGlmIChyZW5kZXJlcikgewotICAgICAg
ICAgICAgICAgIGF1dG8gYm94ID0gdHJhbnNmb3JtUmVmZXJlbmNlQm94KHN0eWxlLCAqcmVuZGVy
ZXIpOworICAgICAgICAgICAgICAgIGF1dG8gYm94ID0gcmVuZGVyZXItPnRyYW5zZm9ybVJlZmVy
ZW5jZUJveFJlY3QoKTsKICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFkanVzdGVk
UGl4ZWxWYWx1ZShtaW5pbXVtVmFsdWVGb3JMZW5ndGgoc3R5bGUudHJhbnNmb3JtT3JpZ2luWCgp
LCBib3gud2lkdGgoKSksIHN0eWxlKSk7CiAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHpv
b21BZGp1c3RlZFBpeGVsVmFsdWUobWluaW11bVZhbHVlRm9yTGVuZ3RoKHN0eWxlLnRyYW5zZm9y
bU9yaWdpblkoKSwgYm94LmhlaWdodCgpKSwgc3R5bGUpKTsKICAgICAgICAgICAgICAgICBpZiAo
c3R5bGUudHJhbnNmb3JtT3JpZ2luWigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcAppbmRleCBjNDE2YmU5MWZmM2Y1Njk3MmJjYWI0YTA1YzY4OTUzZDg5YmM2MTMwLi4xOGJl
YTM3NzQzNjdiMjk2ZDMwMjUxNjg1ZjQ1YTIzNzFhYzZjY2NlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtNzY2LDkgKzc2Niw4IEBAIExheW91dFBvaW50IFJlbmRl
ckJveDo6Y29udGVudEJveExvY2F0aW9uKCkgY29uc3QKICAgICByZXR1cm4geyBib3JkZXJMZWZ0
KCkgKyBwYWRkaW5nTGVmdCgpICsgc2Nyb2xsYmFyU3BhY2UsIGJvcmRlclRvcCgpICsgcGFkZGlu
Z1RvcCgpIH07CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyQm94OjpyZWZlcmVuY2VCb3goQ1NTQm94
VHlwZSBib3hUeXBlKSBjb25zdAorRmxvYXRSZWN0IFJlbmRlckJveDo6cmVmZXJlbmNlQm94UmVj
dChDU1NCb3hUeXBlIGJveFR5cGUpIGNvbnN0CiB7Ci0gICAgTGF5b3V0UmVjdCByZWZlcmVuY2VC
b3g7CiAgICAgc3dpdGNoIChib3hUeXBlKSB7CiAgICAgY2FzZSBDU1NCb3hUeXBlOjpDb250ZW50
Qm94OgogICAgIGNhc2UgQ1NTQm94VHlwZTo6RmlsbEJveDoKQEAgLTc4NCw2ICs3ODMsOCBAQCBM
YXlvdXRSZWN0IFJlbmRlckJveDo6cmVmZXJlbmNlQm94KENTU0JveFR5cGUgYm94VHlwZSkgY29u
c3QKICAgICBjYXNlIENTU0JveFR5cGU6OkJveE1pc3Npbmc6CiAgICAgICAgIHJldHVybiBib3Jk
ZXJCb3hSZWN0KCk7CiAgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0
dXJuIHsgfTsKIH0KIApAQCAtMTQ2MCw4ICsxNDYxLDcgQEAgYm9vbCBSZW5kZXJCb3g6OmhpdFRl
c3RDbGlwUGF0aChjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgY29uc3Qg
TGEKICAgICBzd2l0Y2ggKHN0eWxlKCkuY2xpcFBhdGgoKS0+dHlwZSgpKSB7CiAgICAgY2FzZSBQ
YXRoT3BlcmF0aW9uOjpTaGFwZTogewogICAgICAgICBhdXRvJiBjbGlwUGF0aCA9IGRvd25jYXN0
PFNoYXBlUGF0aE9wZXJhdGlvbj4oKnN0eWxlKCkuY2xpcFBhdGgoKSk7Ci0gICAgICAgIGF1dG8g
cmVmZXJlbmNlQm94UmVjdCA9IHJlZmVyZW5jZUJveChjbGlwUGF0aC5yZWZlcmVuY2VCb3goKSk7
Ci0gICAgICAgIGlmICghY2xpcFBhdGgucGF0aEZvclJlZmVyZW5jZVJlY3QocmVmZXJlbmNlQm94
UmVjdCkuY29udGFpbnMoaGl0VGVzdExvY2F0aW9uSW5Mb2NhbENvb3JkaW5hdGVzLCBjbGlwUGF0
aC53aW5kUnVsZSgpKSkKKyAgICAgICAgaWYgKCFjbGlwUGF0aC5wYXRoRm9yUmVmZXJlbmNlUmVj
dChyZWZlcmVuY2VCb3hSZWN0KGNsaXBQYXRoLnJlZmVyZW5jZUJveCgpKSkuY29udGFpbnMoaGl0
VGVzdExvY2F0aW9uSW5Mb2NhbENvb3JkaW5hdGVzLCBjbGlwUGF0aC53aW5kUnVsZSgpKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5oCmluZGV4IGVkNzc3NzBlN2U0MjlkNWI3NjJjMGViYzI5MWJh
ZjAyZjQ3MDIzMjUuLmNhYzYxM2ZkNjFlMWIwNWViMjc0MTU5YWJmYzkyNWVlZjM1Nzc0NWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAgLTE2Nyw4ICsxNjcsOCBAQCBwdWJs
aWM6CiAgICAgTGF5b3V0UmVjdCBjb250ZW50Qm94UmVjdCgpIGNvbnN0OwogICAgIExheW91dFBv
aW50IGNvbnRlbnRCb3hMb2NhdGlvbigpIGNvbnN0OwogCi0gICAgLy8gLmh0dHBzOi8vZHJhZnRz
LmNzc3dnLm9yZy9jc3MtdHJhbnNmb3Jtcy0xLyNyZWZlcmVuY2UtYm94Ci0gICAgTGF5b3V0UmVj
dCByZWZlcmVuY2VCb3goQ1NTQm94VHlwZSkgY29uc3Q7CisgICAgLy8gaHR0cHM6Ly93d3cudzMu
b3JnL1RSL2Nzcy10cmFuc2Zvcm1zLTEvI3JlZmVyZW5jZS1ib3gKKyAgICBGbG9hdFJlY3QgcmVm
ZXJlbmNlQm94UmVjdChDU1NCb3hUeXBlKSBjb25zdCBmaW5hbDsKIAogICAgIC8vIFRoZSBjb250
ZW50IGJveCBpbiBhYnNvbHV0ZSBjb29yZHMuIElnbm9yZXMgdHJhbnNmb3Jtcy4KICAgICBJbnRS
ZWN0IGFic29sdXRlQ29udGVudEJveCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVsZW1lbnQuY3BwCmluZGV4IGU5MzJiYzc0YjFmZGViNzRhZTMyZDJiZjgwNzA5Zjdj
NWViNmRkMjUuLmJhNzAxZDJkY2Q0ZmM1YTI2ZDEwZTkwODhhMGI3ZmE3ZDM5MGQ4NmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKQEAgLTc4LDYgKzc4LDcg
QEAKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudFR5cGVIZWxw
ZXJzLmgiCiAjaW5jbHVkZSAiU1ZHSW1hZ2UuaCIKKyNpbmNsdWRlICJTVkdMZW5ndGhDb250ZXh0
LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgi
CiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgpAQCAtMjM4OSw0ICsyMzkwLDM4IEBAIE92ZXJmbG93
IFJlbmRlckVsZW1lbnQ6OmVmZmVjdGl2ZU92ZXJmbG93WSgpIGNvbnN0CiAgICAgcmV0dXJuIG92
ZXJmbG93WTsKIH0KIAorLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy10cmFuc2Zvcm1zLTEv
I3RyYW5zZm9ybS1ib3gKK0Zsb2F0UmVjdCBSZW5kZXJFbGVtZW50OjpyZWZlcmVuY2VCb3hSZWN0
KENTU0JveFR5cGUgYm94VHlwZSkgY29uc3QKK3sKKyAgICAvLyBDU1MgYm94IG1vZGVsIGNvZGUg
aXMgaW1wbGVtZW50ZWQgaW4gUmVuZGVyQm94OjpyZWZlcmVuY2VCb3hSZWN0KCkuCisKKyAgICAv
LyBGb3IgdGhlIGxlZ2FjeSBTVkcgZW5naW5lLCBSZW5kZXJFbGVtZW50IGlzIHRoZSBvbmx5IGNs
YXNzIHRoYXQncworICAgIC8vIHByZXNlbnQgaW4gdGhlIGFuY2VzdG9yIGNoYWluIG9mIGFsbCBT
VkcgcmVuZGVyZXJzLiBJbiBMQlNFIHRoZQorICAgIC8vIGNvbW1vbiBjbGFzcyBpcyBSZW5kZXJM
YXllck1vZGVsT2JqZWN0LiBPbmNlIHRoZSBsZWdhY3kgU1ZHIGVuZ2luZQorICAgIC8vIGlzIHJl
bW92ZWQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgbW92ZWQgdG8gUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdC4KKyAgICAvLyBBcyB0aGlzIG1ldGhvZCBpcyB1c2VkIGJ5IGJvdGggU1ZHIGVuZ2luZXMs
IHdlIG5lZWQgdG8gcGxhY2UgaXQKKyAgICAvLyBoZXJlIGluIFJlbmRlckVsZW1lbnQsIGFzIHRl
bXBvcmFyeSBzb2x1dGlvbi4KKyAgICBpZiAoIWlzPFNWR0VsZW1lbnQ+KGVsZW1lbnQoKSkpCisg
ICAgICAgIHJldHVybiB7IH07CisKKyAgICBzd2l0Y2ggKGJveFR5cGUpIHsKKyAgICBjYXNlIENT
U0JveFR5cGU6OkJveE1pc3Npbmc6CisgICAgY2FzZSBDU1NCb3hUeXBlOjpDb250ZW50Qm94Ogor
ICAgIGNhc2UgQ1NTQm94VHlwZTo6UGFkZGluZ0JveDoKKyAgICBjYXNlIENTU0JveFR5cGU6OkZp
bGxCb3g6CisgICAgICAgIHJldHVybiBvYmplY3RCb3VuZGluZ0JveCgpOworICAgIGNhc2UgQ1NT
Qm94VHlwZTo6Qm9yZGVyQm94OgorICAgIGNhc2UgQ1NTQm94VHlwZTo6TWFyZ2luQm94OgorICAg
IGNhc2UgQ1NTQm94VHlwZTo6U3Ryb2tlQm94OgorICAgICAgICByZXR1cm4gc3Ryb2tlQm91bmRp
bmdCb3goKTsKKyAgICBjYXNlIENTU0JveFR5cGU6OlZpZXdCb3g6CisgICAgICAgIEZsb2F0U2l6
ZSB2aWV3cG9ydFNpemU7CisgICAgICAgIFNWR0xlbmd0aENvbnRleHQoZG93bmNhc3Q8U1ZHRWxl
bWVudD4oZWxlbWVudCgpKSkuZGV0ZXJtaW5lVmlld3BvcnQodmlld3BvcnRTaXplKTsKKyAgICAg
ICAgcmV0dXJuIHsgeyB9LCB2aWV3cG9ydFNpemUgfTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9OworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckVsZW1lbnQuaAppbmRleCA1MWM1NTJjYmQ5ZTdmZDJiN2NiZTlkMTJkY2ZhM2Yx
MzFmZjdkZjFiLi5lZDUxMjYyN2IxYzA0MjU3ZDdmZTI1MjA2MTU1YTkzZTFmNmRmMDgwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgKQEAgLTI1OCw2ICsyNTgsMTIg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25GaW5pc2hlZChjb25zdCBTdHJp
bmcmIC8qIG5hbWUgKi8pIHsgfQogICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1SZWxhdGVkUHJv
cGVydHlEaWRDaGFuZ2UoKSB7IH0KIAorICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3Mt
dHJhbnNmb3Jtcy0xLyN0cmFuc2Zvcm0tYm94CisgICAgRmxvYXRSZWN0IHRyYW5zZm9ybVJlZmVy
ZW5jZUJveFJlY3QoKSBjb25zdCB7IHJldHVybiByZWZlcmVuY2VCb3hSZWN0KHRyYW5zZm9ybUJv
eFRvQ1NTQm94VHlwZShzdHlsZSgpLnRyYW5zZm9ybUJveCgpKSk7IH0KKworICAgIC8vIGh0dHBz
Oi8vd3d3LnczLm9yZy9UUi9jc3MtdHJhbnNmb3Jtcy0xLyNyZWZlcmVuY2UtYm94CisgICAgdmly
dHVhbCBGbG9hdFJlY3QgcmVmZXJlbmNlQm94UmVjdChDU1NCb3hUeXBlKSBjb25zdDsKKwogICAg
IHZpcnR1YWwgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhNb25vdG9uaWNUaW1lID0gTW9ub3Rvbmlj
VGltZSgpKSB7IH0KICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGFuaW1hdGVkU3R5
bGUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggODUw
YmRlNDhlNDkyOGU4NmRjMTc2YjYyMzIxZmVlZDliNjg2YzNjZC4uZDhhNGVmYzhjNWIxZmNmODYy
NjVlNmNhMTY4N2E5YmRkOTFkMTI4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCkBAIC0xMjk2LDIxICsxMjk2LDE2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmRpcnR5
QW5jZXN0b3JDaGFpbkhhc0JsZW5kaW5nRGVzY2VuZGFudHMoKQogfQogI2VuZGlmCiAKLXN0YXRp
YyBpbmxpbmUgTGF5b3V0UmVjdCBjb21wdXRlUmVmZXJlbmNlUmVjdEZyb21Cb3goY29uc3QgUmVu
ZGVyQm94JiBib3gsIENTU0JveFR5cGUgYm94VHlwZSwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0
RnJvbVJvb3QpCi17Ci0gICAgYXV0byByZWZlcmVuY2VCb3ggPSBib3gucmVmZXJlbmNlQm94KGJv
eFR5cGUpOwotICAgIHJlZmVyZW5jZUJveC5tb3ZlKG9mZnNldEZyb21Sb290KTsKLSAgICByZXR1
cm4gcmVmZXJlbmNlQm94OwotfQotCi1zdGF0aWMgaW5saW5lIExheW91dFJlY3QgY29tcHV0ZVJl
ZmVyZW5jZUJveChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBDU1NCb3hUeXBlIGJveFR5
cGUsIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290LCBjb25zdCBMYXlvdXRSZWN0JiBy
b290UmVsYXRpdmVCb3VuZHMpCitzdGF0aWMgaW5saW5lIEZsb2F0UmVjdCBjb21wdXRlUmVmZXJl
bmNlQm94KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyLCBDU1NCb3hUeXBl
IGJveFR5cGUsIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290LCBjb25zdCBMYXlvdXRS
ZWN0JiByb290UmVsYXRpdmVCb3VuZHMpCiB7CiAgICAgLy8gRklYTUU6IFN1cHBvcnQgZGlmZmVy
ZW50IHJlZmVyZW5jZSBib3hlcyBmb3IgaW5saW5lIGNvbnRlbnQuCiAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTA0NwogICAgIGlmICghcmVuZGVyZXIu
aXNCb3goKSkKICAgICAgICAgcmV0dXJuIHJvb3RSZWxhdGl2ZUJvdW5kczsKICAgICAKLSAgICBy
ZXR1cm4gY29tcHV0ZVJlZmVyZW5jZVJlY3RGcm9tQm94KGRvd25jYXN0PFJlbmRlckJveD4ocmVu
ZGVyZXIpLCBib3hUeXBlLCBvZmZzZXRGcm9tUm9vdCk7CisgICAgYXV0byByZWZlcmVuY2VCb3gg
PSByZW5kZXJlci5yZWZlcmVuY2VCb3hSZWN0KGJveFR5cGUpOworICAgIHJlZmVyZW5jZUJveC5t
b3ZlKG9mZnNldEZyb21Sb290KTsKKyAgICByZXR1cm4gcmVmZXJlbmNlQm94OwogfQogCiB2b2lk
IFJlbmRlckxheWVyOjp1cGRhdGVUcmFuc2Zvcm0oKQpAQCAtMTMzNSw3ICsxMzMwLDcgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6dXBkYXRlVHJhbnNmb3JtKCkKICAgICAgICAgLy8gRklYTUU6IFtMQlNF
XSBVcHN0cmVhbSByZWZlcmVuY2UgYm94IGNvbXB1dGF0aW9uIGZvciBSZW5kZXJTVkdNb2RlbE9i
amVjdCBkZXJpdmVkIHJlbmRlcmVycwogICAgICAgICBGbG9hdFJlY3QgcmVmZXJlbmNlQm94Owog
ICAgICAgICBpZiAoaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkKLSAgICAgICAgICAgIHJlZmVy
ZW5jZUJveCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5k
ZXJlcigpKS5yZWZlcmVuY2VCb3godHJhbnNmb3JtQm94VG9DU1NCb3hUeXBlKHJlbmRlcmVyKCku
c3R5bGUoKS50cmFuc2Zvcm1Cb3goKSkpLCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2Nh
bGVGYWN0b3IoKSk7CisgICAgICAgICAgICByZWZlcmVuY2VCb3ggPSBzbmFwUmVjdFRvRGV2aWNl
UGl4ZWxzKExheW91dFJlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS50cmFuc2Zv
cm1SZWZlcmVuY2VCb3hSZWN0KCkpLCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVG
YWN0b3IoKSk7CiAKICAgICAgICAgcmVuZGVyZXIoKS5hcHBseVRyYW5zZm9ybSgqbV90cmFuc2Zv
cm0sIHJlZmVyZW5jZUJveCk7CiAgICAgICAgIG1ha2VNYXRyaXhSZW5kZXJhYmxlKCptX3RyYW5z
Zm9ybSwgY2FuUmVuZGVyM0RUcmFuc2Zvcm1zKCkpOwpAQCAtMTM2Niw3ICsxMzYxLDcgQEAgVHJh
bnNmb3JtYXRpb25NYXRyaXggUmVuZGVyTGF5ZXI6OmN1cnJlbnRUcmFuc2Zvcm0oT3B0aW9uU2V0
PFJlbmRlclN0eWxlOjpUcmFuc2YKICAgICBhdXRvIHN0eWxlYWJsZSA9IFN0eWxlYWJsZTo6ZnJv
bVJlbmRlcmVyKHJlbmRlckJveCk7CiAgICAgaWYgKChzdHlsZWFibGUgJiYgc3R5bGVhYmxlLT5p
c1J1bm5pbmdBY2NlbGVyYXRlZFRyYW5zZm9ybUFuaW1hdGlvbigpKSB8fCAhb3B0aW9ucy5jb250
YWlucyhSZW5kZXJTdHlsZTo6VHJhbnNmb3JtT3BlcmF0aW9uT3B0aW9uOjpUcmFuc2Zvcm1Pcmln
aW4pKSB7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gYW5pbWF0ZWRTdHls
ZSA9IHJlbmRlckJveC5hbmltYXRlZFN0eWxlKCk7Ci0gICAgICAgIGF1dG8gcGl4ZWxTbmFwcGVk
Qm9yZGVyUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMocmVuZGVyQm94LnJlZmVyZW5jZUJv
eCh0cmFuc2Zvcm1Cb3hUb0NTU0JveFR5cGUoYW5pbWF0ZWRTdHlsZS0+dHJhbnNmb3JtQm94KCkp
KSwgcmVuZGVyQm94LmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgICAgIGF1
dG8gcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMocmVuZGVy
Qm94LnRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3QoKSwgcmVuZGVyQm94LmRvY3VtZW50KCkuZGV2
aWNlU2NhbGVGYWN0b3IoKSk7CiAKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNm
b3JtOwogICAgICAgICBhbmltYXRlZFN0eWxlLT5hcHBseVRyYW5zZm9ybSh0cmFuc2Zvcm0sIHBp
eGVsU25hcHBlZEJvcmRlclJlY3QsIG9wdGlvbnMpOwpAQCAtMTgwMSw4ICsxNzk2LDkgQEAgVHJh
bnNmb3JtYXRpb25NYXRyaXggUmVuZGVyTGF5ZXI6OnBlcnNwZWN0aXZlVHJhbnNmb3JtKGNvbnN0
IExheW91dFJlY3QmIGxheWVyUmUKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGF1dG8gZGV2
aWNlU2NhbGVGYWN0b3IgPSByZW5kZXJCb3guZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3Rvcigp
OwotICAgIGF1dG8gcmVmZXJlbmNlQm94ID0gcmVuZGVyQm94LnJlZmVyZW5jZUJveCh0cmFuc2Zv
cm1Cb3hUb0NTU0JveFR5cGUoc3R5bGUudHJhbnNmb3JtQm94KCkpKTsKLSAgICBhdXRvIHBpeGVs
U25hcHBlZFJlZmVyZW5jZUJveCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMocmVmZXJlbmNlQm94
LCBkZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgYXV0byByZWZlcmVuY2VCb3ggPSByZW5kZXJCb3gu
dHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdCgpOworICAgIC8vIEZJWE1FOiBbTEJTRV0gQXZvaWQg
cGl4ZWwgc25hcHBpbmcgaW4gU1ZHIHN1YnRyZWUuCisgICAgYXV0byBwaXhlbFNuYXBwZWRSZWZl
cmVuY2VCb3ggPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3QocmVmZXJlbmNlQm94
KSwgZGV2aWNlU2NhbGVGYWN0b3IpOwogICAgIGF1dG8gc25hcHBlZExheWVyUmVjdCA9IHNuYXBS
ZWN0VG9EZXZpY2VQaXhlbHMobGF5ZXJSZWN0LCBkZXZpY2VTY2FsZUZhY3Rvcik7CiAKICAgICBh
dXRvIHBlcnNwZWN0aXZlT3JpZ2luID0gcGl4ZWxTbmFwcGVkUmVmZXJlbmNlQm94LmxvY2F0aW9u
KCkgLSB0b0Zsb2F0U2l6ZShzbmFwcGVkTGF5ZXJSZWN0LmxvY2F0aW9uKCkpICsgZmxvYXRQb2lu
dEZvckxlbmd0aFBvaW50KHN0eWxlLnBlcnNwZWN0aXZlT3JpZ2luKCksIHBpeGVsU25hcHBlZFJl
ZmVyZW5jZUJveC5zaXplKCkpOwpAQCAtMTgyMyw2ICsxODE5LDcgQEAgRmxvYXRQb2ludCBSZW5k
ZXJMYXllcjo6cGVyc3BlY3RpdmVPcmlnaW4oKSBjb25zdAogewogICAgIGlmICghcmVuZGVyZXIo
KS5oYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICAvLyBGSVhNRTogVGhpcyB1c2VzIHRoZSB3cm9uZywgdHJhbnNmb3JtLWJveCB1bmF3YXJlLCBn
ZW9tZXRyeS4KICAgICByZXR1cm4gZmxvYXRQb2ludEZvckxlbmd0aFBvaW50KHJlbmRlcmVyKCku
c3R5bGUoKS5wZXJzcGVjdGl2ZU9yaWdpbigpLCByZW5kZXJlckJvcmRlckJveFJlY3QoKS5zaXpl
KCkpOwogfQogCkBAIC0zMjEyLDIxICszMjA5LDkgQEAgc3RkOjpwYWlyPFBhdGgsIFdpbmRSdWxl
PiBSZW5kZXJMYXllcjo6Y29tcHV0ZUNsaXBQYXRoKGNvbnN0IExheW91dFNpemUmIG9mZnNldEYK
IAogICAgIGlmIChpczxTaGFwZVBhdGhPcGVyYXRpb24+KCpzdHlsZS5jbGlwUGF0aCgpKSkgewog
ICAgICAgICBhdXRvJiBjbGlwUGF0aCA9IGRvd25jYXN0PFNoYXBlUGF0aE9wZXJhdGlvbj4oKnN0
eWxlLmNsaXBQYXRoKCkpOwotCi0gICAgICAgIExheW91dFJlY3QgcmVmZXJlbmNlQm94OwotICAg
ICAgICBpZiAoaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkgewotICAgICAgICAgICAgcmVmZXJl
bmNlQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5yZWZlcmVuY2VCb3goY2xp
cFBhdGgucmVmZXJlbmNlQm94KCkpOwotICAgICAgICAgICAgcmVmZXJlbmNlQm94Lm1vdmUob2Zm
c2V0RnJvbVJvb3QpOwotI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQotICAgICAg
ICB9IGVsc2UgaWYgKGlzPFJlbmRlclNWR01vZGVsT2JqZWN0PihyZW5kZXJlcigpKSkgewotICAg
ICAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBjbGlwcGluZyBzdXBwb3J0IGZvciBS
ZW5kZXJTVkdNb2RlbE9iamVjdCBkZXJpdmVkIHJlbmRlcmVycwotI2VuZGlmCi0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAvLyBSZWZlcmVuY2UgYm94IGZvciBpbmxpbmVzIGlzIG5vdCB3
ZWxsIGRlZmluZWQ6IGh0dHBzOi8vZ2l0aHViLmNvbS93M2MvY3Nzd2ctZHJhZnRzL2lzc3Vlcy82
MzgzCi0gICAgICAgICAgICByZWZlcmVuY2VCb3ggPSByb290UmVsYXRpdmVCb3VuZHNGb3JOb25C
b3hlczsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8gc25hcHBlZFJlZmVyZW5jZUJveCA9IHNu
YXBSZWN0VG9EZXZpY2VQaXhlbHMocmVmZXJlbmNlQm94LCBkZXZpY2VTY2FsZUZhY3Rvcik7Cisg
ICAgICAgIGF1dG8gcmVmZXJlbmNlQm94ID0gY29tcHV0ZVJlZmVyZW5jZUJveChyZW5kZXJlcigp
LCBjbGlwUGF0aC5yZWZlcmVuY2VCb3goKSwgb2Zmc2V0RnJvbVJvb3QsIHJvb3RSZWxhdGl2ZUJv
dW5kc0Zvck5vbkJveGVzKTsKKyAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBBdm9pZCBwaXhlbCBz
bmFwcGluZyBpbiBTVkcgc3VidHJlZS4KKyAgICAgICAgYXV0byBzbmFwcGVkUmVmZXJlbmNlQm94
ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHJlZmVyZW5jZUJveCksIGRldmlj
ZVNjYWxlRmFjdG9yKTsKICAgICAgICAgcmV0dXJuIHsgY2xpcFBhdGgucGF0aEZvclJlZmVyZW5j
ZVJlY3Qoc25hcHBlZFJlZmVyZW5jZUJveCksIGNsaXBQYXRoLndpbmRSdWxlKCkgfTsKICAgICB9
CiAKQEAgLTMyNjksNyArMzI1NCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNldHVwQ2xpcFBhdGgo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHRTdGF0ZVNhCiAgICAgICAg
ICAgICAvLyBVc2UgdGhlIGJvcmRlciBib3ggYXMgdGhlIHJlZmVyZW5jZSBib3gsIGV2ZW4gdGhv
dWdoIHRoaXMgaXMgbm90IGNsZWFybHkgc3BlY2lmaWVkOiBodHRwczovL2dpdGh1Yi5jb20vdzNj
L2Nzc3dnLWRyYWZ0cy9pc3N1ZXMvNTc4Ni4KICAgICAgICAgICAgIC8vIGNsaXBwZWRDb250ZW50
Qm91bmRzIGlzIHVzZWQgYXMgdGhlIHJlZmVyZW5jZSBib3ggZm9yIGlubGluZXMsIHdoaWNoIGlz
IGFsc28gcG9vcmx5IHNwZWNpZmllZDogaHR0cHM6Ly9naXRodWIuY29tL3czYy9jc3N3Zy1kcmFm
dHMvaXNzdWVzLzYzODMuCiAgICAgICAgICAgICBhdXRvIHJlZmVyZW5jZUJveCA9IGNvbXB1dGVS
ZWZlcmVuY2VCb3gocmVuZGVyZXIoKSwgQ1NTQm94VHlwZTo6Qm9yZGVyQm94LCBvZmZzZXRGcm9t
Um9vdCwgY2xpcHBlZENvbnRlbnRCb3VuZHMpOwotICAgICAgICAgICAgYXV0byBzbmFwcGVkUmVm
ZXJlbmNlQm94ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhyZWZlcmVuY2VCb3gsIHJlbmRlcmVy
KCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBbTEJTRV0gQXZvaWQgcGl4ZWwgc25hcHBpbmcgaW4gU1ZHIHN1YnRyZWUuCisgICAgICAgICAg
ICBhdXRvIHNuYXBwZWRSZWZlcmVuY2VCb3ggPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91
dFJlY3QocmVmZXJlbmNlQm94KSwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFj
dG9yKCkpOwogICAgICAgICAgICAgYXV0byBvZmZzZXQgPSBzbmFwcGVkUmVmZXJlbmNlQm94Lmxv
Y2F0aW9uKCk7CiAKICAgICAgICAgICAgIGF1dG8gc25hcHBlZENsaXBwaW5nQm91bmRzID0gc25h
cFJlY3RUb0RldmljZVBpeGVscyhjbGlwcGVkQ29udGVudEJvdW5kcywgcmVuZGVyZXIoKS5kb2N1
bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKaW5kZXggY2MzOGVjNzAzMGU2MGNlMTc1OWIx
MzI4N2RlMjVmNzNkNTY1Yzg1OC4uZTJiZWI0YmE4YzExNTdkY2JiMTI4NjQ5YTNlZGU1NmUzODRl
OGQwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJT
dXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1
cHBvcnQuY3BwCkBAIC0zNDMsMjYgKzM0Myw2IEBAIGJvb2wgU1ZHUmVuZGVyU3VwcG9ydDo6Zmls
dGVyc0ZvcmNlQ29udGFpbmVyTGF5b3V0KGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLUZsb2F0UmVjdCBTVkdSZW5kZXJTdXBwb3J0Ojp0cmFuc2Zv
cm1SZWZlcmVuY2VCb3goY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFNWR0Vs
ZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKLXsKLSAgICBzd2l0Y2gg
KHN0eWxlLnRyYW5zZm9ybUJveCgpKSB7Ci0gICAgY2FzZSBUcmFuc2Zvcm1Cb3g6OkJvcmRlckJv
eDoKLSAgICAgICAgLy8gRm9yIFNWRyBlbGVtZW50cyB3aXRob3V0IGFuIGFzc29jaWF0ZWQgQ1NT
IGxheW91dCBib3gsIHRoZSB1c2VkIHZhbHVlIGZvciBib3JkZXItYm94IGlzIHN0cm9rZS1ib3gu
Ci0gICAgY2FzZSBUcmFuc2Zvcm1Cb3g6OlN0cm9rZUJveDoKLSAgICAgICAgcmV0dXJuIHJlbmRl
cmVyLnN0cm9rZUJvdW5kaW5nQm94KCk7Ci0gICAgY2FzZSBUcmFuc2Zvcm1Cb3g6OkNvbnRlbnRC
b3g6Ci0gICAgICAgIC8vIEZvciBTVkcgZWxlbWVudHMgd2l0aG91dCBhbiBhc3NvY2lhdGVkIENT
UyBsYXlvdXQgYm94LCB0aGUgdXNlZCB2YWx1ZSBmb3IgY29udGVudC1ib3ggaXMgZmlsbC1ib3gu
Ci0gICAgY2FzZSBUcmFuc2Zvcm1Cb3g6OkZpbGxCb3g6Ci0gICAgICAgIHJldHVybiByZW5kZXJl
ci5vYmplY3RCb3VuZGluZ0JveCgpOwotICAgIGNhc2UgVHJhbnNmb3JtQm94OjpWaWV3Qm94OiB7
Ci0gICAgICAgIEZsb2F0U2l6ZSB2aWV3cG9ydFNpemU7Ci0gICAgICAgIFNWR0xlbmd0aENvbnRl
eHQoJmVsZW1lbnQpLmRldGVybWluZVZpZXdwb3J0KHZpZXdwb3J0U2l6ZSk7Ci0gICAgICAgIHJl
dHVybiBGbG9hdFJlY3QgeyB7IH0sIHZpZXdwb3J0U2l6ZSB9OwotICAgICAgICB9Ci0gICAgfQot
ICAgIHJldHVybiB7IH07Ci19Ci0KIGlubGluZSBGbG9hdFJlY3QgY2xpcFBhdGhSZWZlcmVuY2VC
b3goY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIENTU0JveFR5cGUgYm94VHlwZSkKIHsK
ICAgICBGbG9hdFJlY3QgcmVmZXJlbmNlQm94OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuaAppbmRleCA5Y2NmY2JlYjU3N2E3NzNkYzg4MDdkOTUz
OWQ2MmE4MWU1NjE5Yjg5Li5kNDNkMGM3Zjc1OGQxNWZiNzA0NmM5MWJlMGNhOWRhNTNkZDg1NjAy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBv
cnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQu
aApAQCAtODIsOCArODIsNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBzdHlsZUNoYW5n
ZWQoUmVuZGVyRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlKik7CiAgICAgCi0gICAgc3RhdGlj
IEZsb2F0UmVjdCB0cmFuc2Zvcm1SZWZlcmVuY2VCb3goY29uc3QgUmVuZGVyRWxlbWVudCYsIGNv
bnN0IFNWR0VsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYpOwotCiAjaWYgRU5BQkxFKENTU19D
T01QT1NJVElORykKICAgICBzdGF0aWMgYm9vbCBpc29sYXRlc0JsZW5kaW5nKGNvbnN0IFJlbmRl
clN0eWxlJik7CiAgICAgc3RhdGljIHZvaWQgdXBkYXRlTWFza2VkQW5jZXN0b3JTaG91bGRJc29s
YXRlQmxlbmRpbmcoY29uc3QgUmVuZGVyRWxlbWVudCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0dyYXBoaWNzRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
R3JhcGhpY3NFbGVtZW50LmNwcAppbmRleCA0OWEyY2E2OThmNTRlNTJmMDkyMGI1NDg0NmRlMzVk
MzVlYTJkMWZhLi42MjJkNjdkMDFhNmZhMTg3YThlNDRkODFhMmQ0OWY3ZGE5OGE5NTcyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhcGhpY3NFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhcGhpY3NFbGVtZW50LmNwcApAQCAtODAsMTIgKzgwLDEw
IEBAIEFmZmluZVRyYW5zZm9ybSBTVkdHcmFwaGljc0VsZW1lbnQ6OmFuaW1hdGVkTG9jYWxUcmFu
c2Zvcm0oKSBjb25zdAogCiAgICAgLy8gSG9ub3IgYW55IG9mIHRoZSB0cmFuc2Zvcm0tcmVsYXRl
ZCBDU1MgcHJvcGVydGllcyBpZiBzZXQuCiAgICAgaWYgKGhhc1NwZWNpZmllZFRyYW5zZm9ybSB8
fCAoc3R5bGUgJiYgKHN0eWxlLT50cmFuc2xhdGUoKSB8fCBzdHlsZS0+c2NhbGUoKSB8fCBzdHls
ZS0+cm90YXRlKCkpKSkgewotICAgICAgICBhdXRvIGJvdW5kaW5nQm94ID0gU1ZHUmVuZGVyU3Vw
cG9ydDo6dHJhbnNmb3JtUmVmZXJlbmNlQm94KCpyZW5kZXJlcigpLCAqdGhpcywgKnN0eWxlKTsK
LSAgICAgICAgCiAgICAgICAgIC8vIE5vdGU6IG9iamVjdEJvdW5kaW5nQm94IGlzIGFuIGVtcHR5
UmVjdCBmb3IgZWxlbWVudHMgbGlrZSBwYXR0ZXJuIG9yIGNsaXBQYXRoLgogICAgICAgICAvLyBT
ZWUgdGhlICJPYmplY3QgYm91bmRpbmcgYm94IHVuaXRzIiBzZWN0aW9uIG9mIGh0dHA6Ly9kZXYu
dzMub3JnL2Nzc3dnL2NzczMtdHJhbnNmb3Jtcy8KICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggdHJhbnNmb3JtOwotICAgICAgICBzdHlsZS0+YXBwbHlUcmFuc2Zvcm0odHJhbnNmb3JtLCBi
b3VuZGluZ0JveCk7CisgICAgICAgIHN0eWxlLT5hcHBseVRyYW5zZm9ybSh0cmFuc2Zvcm0sIHJl
bmRlcmVyKCktPnRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3QoKSk7CiAKICAgICAgICAgLy8gRmxh
dHRlbiBhbnkgM0QgdHJhbnNmb3JtLgogICAgICAgICBtYXRyaXggPSB0cmFuc2Zvcm0udG9BZmZp
bmVUcmFuc2Zvcm0oKTsKQEAgLTEwMCw3ICs5OCw3IEBAIEFmZmluZVRyYW5zZm9ybSBTVkdHcmFw
aGljc0VsZW1lbnQ6OmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSBjb25zdAogCiAgICAgLy8gSWYg
d2UgZGlkbid0IGhhdmUgdGhlIENTUyAidHJhbnNmb3JtIiBwcm9wZXJ0eSBzZXQsIHdlIG11c3Qg
YWNjb3VudCBmb3IgdGhlICJ0cmFuc2Zvcm0iIGF0dHJpYnV0ZS4KICAgICBpZiAoIWhhc1NwZWNp
ZmllZFRyYW5zZm9ybSAmJiBzdHlsZSkgewotICAgICAgICBhdXRvIGJvdW5kaW5nQm94ID0gU1ZH
UmVuZGVyU3VwcG9ydDo6dHJhbnNmb3JtUmVmZXJlbmNlQm94KCpyZW5kZXJlcigpLCAqdGhpcywg
KnN0eWxlKTsKKyAgICAgICAgYXV0byBib3VuZGluZ0JveCA9IHJlbmRlcmVyKCktPnRyYW5zZm9y
bVJlZmVyZW5jZUJveFJlY3QoKTsKICAgICAgICAgYXV0byB0ID0gZmxvYXRQb2ludEZvckxlbmd0
aFBvaW50KHN0eWxlLT50cmFuc2Zvcm1PcmlnaW5YWSgpLCBib3VuZGluZ0JveC5zaXplKCkpICsg
Ym91bmRpbmdCb3gubG9jYXRpb24oKTsKICAgICAgICAgbWF0cml4LnRyYW5zbGF0ZSh0KTsKICAg
ICAgICAgbWF0cml4ICo9IHRyYW5zZm9ybSgpLmNvbmNhdGVuYXRlKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454405</attachid>
            <date>2022-03-10 14:56:17 -0800</date>
            <delta_ts>2022-03-13 16:45:26 -0700</delta_ts>
            <desc>Patch, v5</desc>
            <filename>bug-237554-20220310145616.patch</filename>
            <type>text/plain</type>
            <size>22928</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMTM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjVjZjBhYTkwZGVlOGIz
ZDBmYjZlZjRlZWQ1MGIzNzA3NzcwNjFjOS4uNWI3OTgzZDAwMmZlY2JmNjcxNTQyMmU2NzRiYmQ1
ODc5ZWZlMDkyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDIyLTAzLTEwICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFVuaWZ5
ICd0cmFuc2Zvcm0tYm94JyByZWZlcmVuY2UgYm94IGNvbXB1dGF0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc1NTQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgdGhlIGNvZGUgdG8g
Y29tcHV0ZSB0aGUgcmVmZXJlbmNlIGJveCwgYWNjb3JkaW5nIHRvIHRoZSBDU1MgJ3RyYW5zZm9y
bS1ib3gnCisgICAgICAgIHByb3BlcnR5IGlzIHNwcmlua2xlZCBvdmVyIHZhcmlvdXMgcGxhY2Vz
OiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24sIFNWR1JlbmRlclN1cHBvcnQsCisgICAgICAg
IFJlbmRlckJveCwgcGFydHMgaW4gUmVuZGVyTGF5ZXIuCisKKyAgICAgICAgQ2xlYW51cCBhbmQg
dW5pZnkgdGhlIGNvZGUgaW4gYSBzaW5nbGUgcGxhY2U6IGEgbmV3ICdyZWZlcmVuY2VCb3hSZWN0
KCknICBtZXRob2QgaW1wbGVtZW50aW5nCisgICAgICAgIHRoZSBjb21wdXRhdGlvbiBmb3IgYm90
aCBTVkcvSFRNTCwgd2hlcmUgdGhlIFNWRyBjb2RlIGxpdmVzIGluIFJlbmRlckVsZW1lbnQgKHRo
ZSBvbmx5IHNoYXJlZAorICAgICAgICBiYXNlIGNsYXNzIGJldHdlZW4gbGVnYWN5IFNWRy9MQlNF
KSBhbmQgdGhlIEhUTUwgY29kZSBpbiBSZW5kZXJCb3guIFRoZSBIVE1ML0NTUyBpbXBsZW1lbnRh
dGlvbgorICAgICAgICB3YXMgYWxyZWFkeSBjb250YWluZWQgaW4gUmVuZGVyQm94OjpyZWZlcmVu
Y2VCb3goKSBhbmQgd2FzIHJlbmFtZWQgdG8gcmVmZXJlbmNlQm94UmVjdCgpIHRvIGZvbGxvdwor
ICAgICAgICB0aGUgbmFtaW5nIGNvbnZlbnRpb24gZm9yIHRoZSBvdGhlciBDU1MgYm94IGdlb2Vt
dHJ5IGhlbHBlcnMgc3VjaCBhcyBjb250ZW50Qm94UmVjdCgpLAorICAgICAgICBib3JkZXJCb3hS
ZWN0KCksIGV0Yy4KKworICAgICAgICBSZW1vdmUgY29kZSBmcm9tIFNWR1JlbmRlclN1cHBvcnQv
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uIHRoYXQgY2FuIG5vdyB1c2UgdGhlIHNoYXJlZCBs
b2dpYy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLCBubyBjaGFuZ2UgaW4g
YmVoYXZpb3VyLgorCisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlZFRyYW5zZm9ybSk6IFVzZSB0aGUgcmVuZGVy
ZXJzIHRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3QoKSBpbnN0ZWFkIG9mIHRoZSBzdGF0aWMgaGVs
cGVyIGZ1bmN0aW9uIHRyYW5zZm9ybVJlZmVyZW5jZUJveCgpLgorICAgICAgICAoV2ViQ29yZTo6
Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6dmFsdWVGb3JQcm9wZXJ0eUluU3R5bGUpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OnRyYW5zZm9ybVJlZmVyZW5jZUJveCk6IERlbGV0ZWQuIFJlbmRl
ckVsZW1lbnQ6OnRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3QoKSBwcm92aWRlcyB0aGUgc2FtZSBs
b2dpYyBpbiBhIGdlbmVyaWMgd2F5LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpyZWZlcmVuY2VCb3hSZWN0IGNvbnN0KTog
UmVuYW1lIHJlZmVyZW5jZUJveCgpIHRvIHJlZmVyZW5jZUJveFJlY3QoKSBhbmQgcmV0dXJuIEZs
b2F0UmVjdCBpbnN0ZWFkIG9mIExheW91dFJlY3QuCisgICAgICAgIExCU0Ugd2FudHMgdG8gcmUt
dXNlIHRoZSBsb2dpYyBidXQgd2l0aG91dCBwaXhlbCBzbmFwcGluZyB3aXRoaW4gdGhlIFNWRyBy
ZW5kZXIgdHJlZS4gQWxsIGNhbGxlcnMgd2VyZSBhZGFwdGVkIHRvIHRoZSBuZXcgcmV0dXJuIHR5
cGUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmhpdFRlc3RDbGlwUGF0aCBjb25zdCk6
IEFkYXB0IHRvIHJlZmVyZW5jZUJveCgpIC0+IHJlZmVyZW5jZUJveFJlY3QoKSByZW5hbWluZy4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cmVmZXJlbmNlQm94IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6IEFkYXB0IHRvIHJlZmVyZW5jZUJv
eCgpIC0+IHJlZmVyZW5jZUJveFJlY3QoKSByZW5hbWluZworICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OnJlZmVy
ZW5jZUJveFJlY3QgY29uc3QpOiBBZGQgcmVmZXJlbmNlQm94UmVjdCgpIGltcGxlbWVudGF0aW9u
IGZvciBTVkcgcmVuZGVyZXJzLiBUaGUgY29tbW9uIGJhc2UtY2xhc3MgZm9yCisgICAgICAgIGFs
bCBTVkcgcmVuZGVyZXJzIGlzIFJlbmRlckVsZW1lbnQgaW4gdGhlIGxlZ2FjeSBTVkcgZW5naW5l
IGFuZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0IGluIExCU0UuIFRvIHNoYXJlIHRoZSBjb2RlIGJl
dHdlZW4gYm90aCBTVkcKKyAgICAgICAgaW1wbGVtZW50YXRpb25zIGl0IGhhcyB0byBiZSBwbGFj
ZWQgaW4gUmVuZGVyRWxlbWVudCAtLSB0byBiZSBtb3ZlZCB0byBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0LCBvbmNlIExCU0UgaXMgdGhlIG9ubHkgU1ZHIGVuZ2luZS4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6dHJh
bnNmb3JtUmVmZXJlbmNlQm94UmVjdCBjb25zdCk6IEFkZCBuZXcgaGVscGVyIGZ1bmN0aW9uIHdo
aWNoIGludm9rZXMgcmVmZXJlbmNlQm94UmVjdCgpIHVzaW5nCisgICAgICAgIHRyYW5zZm9ybUJv
eFRvQ1NTQm94VHlwZShzdHlsZSgpLnRyYW5zZm9ybUJveCgpKS4gV2hlbmV2ZXIgdHJhbnNmb3Jt
LWJveCBzdXBwb3J0IGlzIG5lY2Vzc2FyeSwgdGhpcyBtZXRob2Qgc2hhbGwgYmUgdXNlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOiBVc2UgdGhlIG5ldyB0cmFuc2Zvcm1S
ZWZlcmVuY2VCb3hSZWN0KCkgd2hlcmUgcG9zc2libGUuCisgICAgICAgIChXZWJDb3JlOjpjb21w
dXRlUmVmZXJlbmNlQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVU
cmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmN1cnJlbnRUcmFuc2Zv
cm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBlcnNwZWN0aXZlVHJh
bnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwZXJzcGVjdGl2
ZU9yaWdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y29tcHV0ZUNs
aXBQYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXR1cENsaXBQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVSZWZlcmVuY2VSZWN0RnJvbUJveCk6IERl
bGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlclN1cHBvcnQ6OnRyYW5zZm9ybVJlZmVyZW5jZUJveCk6
IERlbGV0ZWQuIFJlbmRlckVsZW1lbnQ6OnRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3QoKSBwcm92
aWRlcyB0aGUgc2FtZSBsb2dpYyBpbiBhIGdlbmVyaWMgd2F5LgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oOiBEaXR0by4KKyAgICAgICAgKiBzdmcvU1ZHR3JhcGhp
Y3NFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dyYXBoaWNzRWxlbWVudDo6YW5p
bWF0ZWRMb2NhbFRyYW5zZm9ybSBjb25zdCk6IFVzZSB0aGUgcmVuZGVyZXJzIHRyYW5zZm9ybVJl
ZmVyZW5jZUJveFJlY3QoKSBpbnN0ZWFkIG9mIFNWR1JlbmRlclN1cHBvcnQ6OnRyYW5zZm9ybVJl
ZmVyZW5jZUJveCgpLgorCiAyMDIyLTAzLTEwICBBbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNv
bT4KIAogICAgICAgICBbSUZDXVtJbnRlZ3JhdGlvbl0gRW5hYmxlIFJlbmRlckxpc3RJdGVtIGFu
ZCBSZW5kZXJMaXN0TWFya2VyIGZvciBJRkMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggYWNlYmRiMzQ2NGJmZTFmMjc1ZGU0
YWIwOGJhMThkZjg1NjhlYmQ4My4uMDIyMThjY2NkYjY4MDk4YjkyNjJkYWQyNzg3ZjQ0ODAzMTVm
ODc1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAKQEAgLTU2MCwxNyArNTYwLDYgQEAgc3RhdGljIExheW91dFJlY3Qgc2l6aW5n
Qm94KFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCiAgICAgcmV0dXJuIGJveC5zdHlsZSgpLmJveFNp
emluZygpID09IEJveFNpemluZzo6Qm9yZGVyQm94ID8gYm94LmJvcmRlckJveFJlY3QoKSA6IGJv
eC5jb21wdXRlZENTU0NvbnRlbnRCb3hSZWN0KCk7CiB9CiAKLXN0YXRpYyBGbG9hdFJlY3QgdHJh
bnNmb3JtUmVmZXJlbmNlQm94KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIpCi17Ci0gICAgaWYgKGlzPFJlbmRlckJveD4ocmVuZGVyZXIpKQot
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcikucmVmZXJlbmNlQm94
KHRyYW5zZm9ybUJveFRvQ1NTQm94VHlwZShzdHlsZS50cmFuc2Zvcm1Cb3goKSkpOwotCi0gICAg
aWYgKGlzPFNWR0VsZW1lbnQ+KHJlbmRlcmVyLmVsZW1lbnQoKSkpCi0gICAgICAgIHJldHVybiBT
VkdSZW5kZXJTdXBwb3J0Ojp0cmFuc2Zvcm1SZWZlcmVuY2VCb3gocmVuZGVyZXIsIGRvd25jYXN0
PFNWR0VsZW1lbnQ+KCpyZW5kZXJlci5lbGVtZW50KCkpLCBzdHlsZSk7Ci0KLSAgICByZXR1cm4g
eyB9OwotfQotCiBzdGF0aWMgUmVmPENTU0Z1bmN0aW9uVmFsdWU+IG1hdHJpeFRyYW5zZm9ybVZh
bHVlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSkKIHsKICAgICBSZWZQdHI8Q1NTRnVuY3Rpb25WYWx1ZT4gdHJhbnNmb3JtVmFs
dWU7CkBAIC02MjMsNyArNjEyLDcgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZT4gY29tcHV0ZWRUcmFu
c2Zvcm0oUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWwKICAgICAgICAg
cmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlTm9uZSk7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07Ci0gICAg
c3R5bGUuYXBwbHlUcmFuc2Zvcm0odHJhbnNmb3JtLCB0cmFuc2Zvcm1SZWZlcmVuY2VCb3goc3R5
bGUsICpyZW5kZXJlciksIHsgfSk7CisgICAgc3R5bGUuYXBwbHlUcmFuc2Zvcm0odHJhbnNmb3Jt
LCByZW5kZXJlci0+dHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdCgpLCB7IH0pOwogICAgIC8vIE5v
dGUgdGhhdCB0aGlzIGRvZXMgbm90IGZsYXR0ZW4gdG8gYW4gYWZmaW5lIHRyYW5zZm9ybSBpZiBF
TkFCTEUoM0RfVFJBTlNGT1JNUykgaXMgb2ZmLCBieSBkZXNpZ24uCiAKICAgICAvLyBGSVhNRTog
TmVlZCB0byBwcmludCBvdXQgaW5kaXZpZHVhbCBmdW5jdGlvbnMgKGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzkyNCkKQEAgLTM4NDAsNyArMzgyOSw3IEBAIFJlZlB0
cjxDU1NWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6dmFsdWVGb3JQcm9wZXJ0eUluU3R5
bGUoY29uc3QgUmVuZGVyU3R5CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZU9y
aWdpbjogewogICAgICAgICAgICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFj
ZVNlcGFyYXRlZCgpOwogICAgICAgICAgICAgaWYgKHJlbmRlcmVyKSB7Ci0gICAgICAgICAgICAg
ICAgYXV0byBib3ggPSB0cmFuc2Zvcm1SZWZlcmVuY2VCb3goc3R5bGUsICpyZW5kZXJlcik7Cisg
ICAgICAgICAgICAgICAgYXV0byBib3ggPSByZW5kZXJlci0+dHJhbnNmb3JtUmVmZXJlbmNlQm94
UmVjdCgpOwogICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZCh6b29tQWRqdXN0ZWRQaXhlbFZh
bHVlKG1pbmltdW1WYWx1ZUZvckxlbmd0aChzdHlsZS5wZXJzcGVjdGl2ZU9yaWdpblgoKSwgYm94
LndpZHRoKCkpLCBzdHlsZSkpOwogICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZCh6b29tQWRq
dXN0ZWRQaXhlbFZhbHVlKG1pbmltdW1WYWx1ZUZvckxlbmd0aChzdHlsZS5wZXJzcGVjdGl2ZU9y
aWdpblkoKSwgYm94LmhlaWdodCgpKSwgc3R5bGUpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBA
IC0zODk2LDcgKzM4ODUsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0
b3I6OnZhbHVlRm9yUHJvcGVydHlJblN0eWxlKGNvbnN0IFJlbmRlclN0eQogICAgICAgICBjYXNl
IENTU1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2luOiB7CiAgICAgICAgICAgICBhdXRvIGxpc3QgPSBD
U1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CiAgICAgICAgICAgICBpZiAocmVu
ZGVyZXIpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGJveCA9IHRyYW5zZm9ybVJlZmVyZW5jZUJv
eChzdHlsZSwgKnJlbmRlcmVyKTsKKyAgICAgICAgICAgICAgICBhdXRvIGJveCA9IHJlbmRlcmVy
LT50cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCk7CiAgICAgICAgICAgICAgICAgbGlzdC0+YXBw
ZW5kKHpvb21BZGp1c3RlZFBpeGVsVmFsdWUobWluaW11bVZhbHVlRm9yTGVuZ3RoKHN0eWxlLnRy
YW5zZm9ybU9yaWdpblgoKSwgYm94LndpZHRoKCkpLCBzdHlsZSkpOwogICAgICAgICAgICAgICAg
IGxpc3QtPmFwcGVuZCh6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKG1pbmltdW1WYWx1ZUZvckxlbmd0
aChzdHlsZS50cmFuc2Zvcm1PcmlnaW5ZKCksIGJveC5oZWlnaHQoKSksIHN0eWxlKSk7CiAgICAg
ICAgICAgICAgICAgaWYgKHN0eWxlLnRyYW5zZm9ybU9yaWdpblooKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggYzQxNmJlOTFmZjNmNTY5NzJiY2FiNGEwNWM2ODk1
M2Q4OWJjNjEzMC4uMThiZWEzNzc0MzY3YjI5NmQzMDI1MTY4NWY0NWEyMzcxYWM2Y2NjZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTc2Niw5ICs3NjYsOCBAQCBM
YXlvdXRQb2ludCBSZW5kZXJCb3g6OmNvbnRlbnRCb3hMb2NhdGlvbigpIGNvbnN0CiAgICAgcmV0
dXJuIHsgYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSArIHNjcm9sbGJhclNwYWNlLCBib3Jk
ZXJUb3AoKSArIHBhZGRpbmdUb3AoKSB9OwogfQogCi1MYXlvdXRSZWN0IFJlbmRlckJveDo6cmVm
ZXJlbmNlQm94KENTU0JveFR5cGUgYm94VHlwZSkgY29uc3QKK0Zsb2F0UmVjdCBSZW5kZXJCb3g6
OnJlZmVyZW5jZUJveFJlY3QoQ1NTQm94VHlwZSBib3hUeXBlKSBjb25zdAogewotICAgIExheW91
dFJlY3QgcmVmZXJlbmNlQm94OwogICAgIHN3aXRjaCAoYm94VHlwZSkgewogICAgIGNhc2UgQ1NT
Qm94VHlwZTo6Q29udGVudEJveDoKICAgICBjYXNlIENTU0JveFR5cGU6OkZpbGxCb3g6CkBAIC03
ODQsNiArNzgzLDggQEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6OnJlZmVyZW5jZUJveChDU1NCb3hU
eXBlIGJveFR5cGUpIGNvbnN0CiAgICAgY2FzZSBDU1NCb3hUeXBlOjpCb3hNaXNzaW5nOgogICAg
ICAgICByZXR1cm4gYm9yZGVyQm94UmVjdCgpOwogICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTE0NjAsOCArMTQ2MSw3IEBAIGJvb2wg
UmVuZGVyQm94OjpoaXRUZXN0Q2xpcFBhdGgoY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0
TG9jYXRpb24sIGNvbnN0IExhCiAgICAgc3dpdGNoIChzdHlsZSgpLmNsaXBQYXRoKCktPnR5cGUo
KSkgewogICAgIGNhc2UgUGF0aE9wZXJhdGlvbjo6U2hhcGU6IHsKICAgICAgICAgYXV0byYgY2xp
cFBhdGggPSBkb3duY2FzdDxTaGFwZVBhdGhPcGVyYXRpb24+KCpzdHlsZSgpLmNsaXBQYXRoKCkp
OwotICAgICAgICBhdXRvIHJlZmVyZW5jZUJveFJlY3QgPSByZWZlcmVuY2VCb3goY2xpcFBhdGgu
cmVmZXJlbmNlQm94KCkpOwotICAgICAgICBpZiAoIWNsaXBQYXRoLnBhdGhGb3JSZWZlcmVuY2VS
ZWN0KHJlZmVyZW5jZUJveFJlY3QpLmNvbnRhaW5zKGhpdFRlc3RMb2NhdGlvbkluTG9jYWxDb29y
ZGluYXRlcywgY2xpcFBhdGgud2luZFJ1bGUoKSkpCisgICAgICAgIGlmICghY2xpcFBhdGgucGF0
aEZvclJlZmVyZW5jZVJlY3QocmVmZXJlbmNlQm94UmVjdChjbGlwUGF0aC5yZWZlcmVuY2VCb3go
KSkpLmNvbnRhaW5zKGhpdFRlc3RMb2NhdGlvbkluTG9jYWxDb29yZGluYXRlcywgY2xpcFBhdGgu
d2luZFJ1bGUoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAppbmRleCBlZDc3NzcwZTdlNDI5
ZDViNzYyYzBlYmMyOTFiYWYwMmY0NzAyMzI1Li5jYWM2MTNmZDYxZTFiMDVlYjI3NDE1OWFiZmM5
MjVlZWYzNTc3NDVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCkBAIC0xNjcs
OCArMTY3LDggQEAgcHVibGljOgogICAgIExheW91dFJlY3QgY29udGVudEJveFJlY3QoKSBjb25z
dDsKICAgICBMYXlvdXRQb2ludCBjb250ZW50Qm94TG9jYXRpb24oKSBjb25zdDsKIAotICAgIC8v
IC5odHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXRyYW5zZm9ybXMtMS8jcmVmZXJlbmNlLWJv
eAotICAgIExheW91dFJlY3QgcmVmZXJlbmNlQm94KENTU0JveFR5cGUpIGNvbnN0OworICAgIC8v
IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtdHJhbnNmb3Jtcy0xLyNyZWZlcmVuY2UtYm94Cisg
ICAgRmxvYXRSZWN0IHJlZmVyZW5jZUJveFJlY3QoQ1NTQm94VHlwZSkgY29uc3QgZmluYWw7CiAK
ICAgICAvLyBUaGUgY29udGVudCBib3ggaW4gYWJzb2x1dGUgY29vcmRzLiBJZ25vcmVzIHRyYW5z
Zm9ybXMuCiAgICAgSW50UmVjdCBhYnNvbHV0ZUNvbnRlbnRCb3goKSBjb25zdDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAppbmRleCBlOTMyYmM3NGIxZmRlYjc0
YWUzMmQyYmY4MDcwOWY3YzVlYjZkZDI1Li5iYTcwMWQyZGNkNGZjNWEyNmQxMGU5MDg4YTBiN2Zh
N2QzOTBkODZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3Bw
CkBAIC03OCw2ICs3OCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNW
R0VsZW1lbnRUeXBlSGVscGVycy5oIgogI2luY2x1ZGUgIlNWR0ltYWdlLmgiCisjaW5jbHVkZSAi
U1ZHTGVuZ3RoQ29udGV4dC5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKQEAgLTIzODksNCArMjM5
MCwzOCBAQCBPdmVyZmxvdyBSZW5kZXJFbGVtZW50OjplZmZlY3RpdmVPdmVyZmxvd1koKSBjb25z
dAogICAgIHJldHVybiBvdmVyZmxvd1k7CiB9CiAKKy8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9j
c3MtdHJhbnNmb3Jtcy0xLyN0cmFuc2Zvcm0tYm94CitGbG9hdFJlY3QgUmVuZGVyRWxlbWVudDo6
cmVmZXJlbmNlQm94UmVjdChDU1NCb3hUeXBlIGJveFR5cGUpIGNvbnN0Cit7CisgICAgLy8gQ1NT
IGJveCBtb2RlbCBjb2RlIGlzIGltcGxlbWVudGVkIGluIFJlbmRlckJveDo6cmVmZXJlbmNlQm94
UmVjdCgpLgorCisgICAgLy8gRm9yIHRoZSBsZWdhY3kgU1ZHIGVuZ2luZSwgUmVuZGVyRWxlbWVu
dCBpcyB0aGUgb25seSBjbGFzcyB0aGF0J3MKKyAgICAvLyBwcmVzZW50IGluIHRoZSBhbmNlc3Rv
ciBjaGFpbiBvZiBhbGwgU1ZHIHJlbmRlcmVycy4gSW4gTEJTRSB0aGUKKyAgICAvLyBjb21tb24g
Y2xhc3MgaXMgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC4gT25jZSB0aGUgbGVnYWN5IFNWRyBlbmdp
bmUKKyAgICAvLyBpcyByZW1vdmVkIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIG1vdmVkIHRvIFJl
bmRlckxheWVyTW9kZWxPYmplY3QuCisgICAgLy8gQXMgdGhpcyBtZXRob2QgaXMgdXNlZCBieSBi
b3RoIFNWRyBlbmdpbmVzLCB3ZSBuZWVkIHRvIHBsYWNlIGl0CisgICAgLy8gaGVyZSBpbiBSZW5k
ZXJFbGVtZW50LCBhcyB0ZW1wb3Jhcnkgc29sdXRpb24uCisgICAgaWYgKCFpczxTVkdFbGVtZW50
PihlbGVtZW50KCkpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgc3dpdGNoIChib3hUeXBl
KSB7CisgICAgY2FzZSBDU1NCb3hUeXBlOjpCb3hNaXNzaW5nOgorICAgIGNhc2UgQ1NTQm94VHlw
ZTo6Q29udGVudEJveDoKKyAgICBjYXNlIENTU0JveFR5cGU6OlBhZGRpbmdCb3g6CisgICAgY2Fz
ZSBDU1NCb3hUeXBlOjpGaWxsQm94OgorICAgICAgICByZXR1cm4gb2JqZWN0Qm91bmRpbmdCb3go
KTsKKyAgICBjYXNlIENTU0JveFR5cGU6OkJvcmRlckJveDoKKyAgICBjYXNlIENTU0JveFR5cGU6
Ok1hcmdpbkJveDoKKyAgICBjYXNlIENTU0JveFR5cGU6OlN0cm9rZUJveDoKKyAgICAgICAgcmV0
dXJuIHN0cm9rZUJvdW5kaW5nQm94KCk7CisgICAgY2FzZSBDU1NCb3hUeXBlOjpWaWV3Qm94Ogor
ICAgICAgICBGbG9hdFNpemUgdmlld3BvcnRTaXplOworICAgICAgICBTVkdMZW5ndGhDb250ZXh0
KGRvd25jYXN0PFNWR0VsZW1lbnQ+KGVsZW1lbnQoKSkpLmRldGVybWluZVZpZXdwb3J0KHZpZXdw
b3J0U2l6ZSk7CisgICAgICAgIHJldHVybiB7IHsgfSwgdmlld3BvcnRTaXplIH07CisgICAgfQor
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgKaW5kZXggNTFjNTUyY2JkOWU3ZmQy
YjdjYmU5ZDEyZGNmYTNmMTMxZmY3ZGYxYi4uZWQ1MTI2MjdiMWMwNDI1N2Q3ZmUyNTIwNjE1NWE5
M2UxZjZkZjA4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCkBA
IC0yNTgsNiArMjU4LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uRmlu
aXNoZWQoY29uc3QgU3RyaW5nJiAvKiBuYW1lICovKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdHJh
bnNmb3JtUmVsYXRlZFByb3BlcnR5RGlkQ2hhbmdlKCkgeyB9CiAKKyAgICAvLyBodHRwczovL3d3
dy53My5vcmcvVFIvY3NzLXRyYW5zZm9ybXMtMS8jdHJhbnNmb3JtLWJveAorICAgIEZsb2F0UmVj
dCB0cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCkgY29uc3QgeyByZXR1cm4gcmVmZXJlbmNlQm94
UmVjdCh0cmFuc2Zvcm1Cb3hUb0NTU0JveFR5cGUoc3R5bGUoKS50cmFuc2Zvcm1Cb3goKSkpOyB9
CisKKyAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXRyYW5zZm9ybXMtMS8jcmVmZXJl
bmNlLWJveAorICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlZmVyZW5jZUJveFJlY3QoQ1NTQm94VHlw
ZSkgY29uc3Q7CisKICAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoTW9ub3Rvbmlj
VGltZSA9IE1vbm90b25pY1RpbWUoKSkgeyB9CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0
eWxlPiBhbmltYXRlZFN0eWxlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCmluZGV4IDg1MGJkZTQ4ZTQ5MjhlODZkYzE3NmI2MjMyMWZlZWQ5YjY4NmMzY2QuLjlk
MGI3Zjk3OGEwYTRlOThlMDMxMmVhZjI5OTc2MmMxOWM3MWFhMTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMTI5NiwyMSArMTI5NiwxNiBAQCB2b2lkIFJl
bmRlckxheWVyOjpkaXJ0eUFuY2VzdG9yQ2hhaW5IYXNCbGVuZGluZ0Rlc2NlbmRhbnRzKCkKIH0K
ICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIExheW91dFJlY3QgY29tcHV0ZVJlZmVyZW5jZVJlY3RG
cm9tQm94KGNvbnN0IFJlbmRlckJveCYgYm94LCBDU1NCb3hUeXBlIGJveFR5cGUsIGNvbnN0IExh
eW91dFNpemUmIG9mZnNldEZyb21Sb290KQotewotICAgIGF1dG8gcmVmZXJlbmNlQm94ID0gYm94
LnJlZmVyZW5jZUJveChib3hUeXBlKTsKLSAgICByZWZlcmVuY2VCb3gubW92ZShvZmZzZXRGcm9t
Um9vdCk7Ci0gICAgcmV0dXJuIHJlZmVyZW5jZUJveDsKLX0KLQotc3RhdGljIGlubGluZSBMYXlv
dXRSZWN0IGNvbXB1dGVSZWZlcmVuY2VCb3goY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwg
Q1NTQm94VHlwZSBib3hUeXBlLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdCwgY29u
c3QgTGF5b3V0UmVjdCYgcm9vdFJlbGF0aXZlQm91bmRzKQorc3RhdGljIGlubGluZSBGbG9hdFJl
Y3QgY29tcHV0ZVJlZmVyZW5jZUJveChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5k
ZXJlciwgQ1NTQm94VHlwZSBib3hUeXBlLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9v
dCwgY29uc3QgTGF5b3V0UmVjdCYgcm9vdFJlbGF0aXZlQm91bmRzKQogewogICAgIC8vIEZJWE1F
OiBTdXBwb3J0IGRpZmZlcmVudCByZWZlcmVuY2UgYm94ZXMgZm9yIGlubGluZSBjb250ZW50Lgog
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkwNDcKICAg
ICBpZiAoIXJlbmRlcmVyLmlzQm94KCkpCiAgICAgICAgIHJldHVybiByb290UmVsYXRpdmVCb3Vu
ZHM7CiAgICAgCi0gICAgcmV0dXJuIGNvbXB1dGVSZWZlcmVuY2VSZWN0RnJvbUJveChkb3duY2Fz
dDxSZW5kZXJCb3g+KHJlbmRlcmVyKSwgYm94VHlwZSwgb2Zmc2V0RnJvbVJvb3QpOworICAgIGF1
dG8gcmVmZXJlbmNlQm94ID0gcmVuZGVyZXIucmVmZXJlbmNlQm94UmVjdChib3hUeXBlKTsKKyAg
ICByZWZlcmVuY2VCb3gubW92ZShvZmZzZXRGcm9tUm9vdCk7CisgICAgcmV0dXJuIHJlZmVyZW5j
ZUJveDsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlVHJhbnNmb3JtKCkKQEAgLTEzMzUs
NyArMTMzMCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVRyYW5zZm9ybSgpCiAgICAgICAg
IC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gcmVmZXJlbmNlIGJveCBjb21wdXRhdGlvbiBmb3Ig
UmVuZGVyU1ZHTW9kZWxPYmplY3QgZGVyaXZlZCByZW5kZXJlcnMKICAgICAgICAgRmxvYXRSZWN0
IHJlZmVyZW5jZUJveDsKICAgICAgICAgaWYgKGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpCi0g
ICAgICAgICAgICByZWZlcmVuY2VCb3ggPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGRvd25jYXN0
PFJlbmRlckJveD4ocmVuZGVyZXIoKSkucmVmZXJlbmNlQm94KHRyYW5zZm9ybUJveFRvQ1NTQm94
VHlwZShyZW5kZXJlcigpLnN0eWxlKCkudHJhbnNmb3JtQm94KCkpKSwgcmVuZGVyZXIoKS5kb2N1
bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOworICAgICAgICAgICAgcmVmZXJlbmNlQm94ID0g
c25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVu
ZGVyZXIoKSkudHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdCgpKSwgcmVuZGVyZXIoKS5kb2N1bWVu
dCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwogCiAgICAgICAgIHJlbmRlcmVyKCkuYXBwbHlUcmFu
c2Zvcm0oKm1fdHJhbnNmb3JtLCByZWZlcmVuY2VCb3gpOwogICAgICAgICBtYWtlTWF0cml4UmVu
ZGVyYWJsZSgqbV90cmFuc2Zvcm0sIGNhblJlbmRlcjNEVHJhbnNmb3JtcygpKTsKQEAgLTEzNjYs
NyArMTM2MSw3IEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4IFJlbmRlckxheWVyOjpjdXJyZW50VHJh
bnNmb3JtKE9wdGlvblNldDxSZW5kZXJTdHlsZTo6VHJhbnNmCiAgICAgYXV0byBzdHlsZWFibGUg
PSBTdHlsZWFibGU6OmZyb21SZW5kZXJlcihyZW5kZXJCb3gpOwogICAgIGlmICgoc3R5bGVhYmxl
ICYmIHN0eWxlYWJsZS0+aXNSdW5uaW5nQWNjZWxlcmF0ZWRUcmFuc2Zvcm1BbmltYXRpb24oKSkg
fHwgIW9wdGlvbnMuY29udGFpbnMoUmVuZGVyU3R5bGU6OlRyYW5zZm9ybU9wZXJhdGlvbk9wdGlv
bjo6VHJhbnNmb3JtT3JpZ2luKSkgewogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5
bGU+IGFuaW1hdGVkU3R5bGUgPSByZW5kZXJCb3guYW5pbWF0ZWRTdHlsZSgpOwotICAgICAgICBh
dXRvIHBpeGVsU25hcHBlZEJvcmRlclJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKHJlbmRl
ckJveC5yZWZlcmVuY2VCb3godHJhbnNmb3JtQm94VG9DU1NCb3hUeXBlKGFuaW1hdGVkU3R5bGUt
PnRyYW5zZm9ybUJveCgpKSksIHJlbmRlckJveC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9y
KCkpOworICAgICAgICBhdXRvIHBpeGVsU25hcHBlZEJvcmRlclJlY3QgPSBzbmFwUmVjdFRvRGV2
aWNlUGl4ZWxzKExheW91dFJlY3QocmVuZGVyQm94LnRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3Qo
KSksIHJlbmRlckJveC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwogCiAgICAgICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKICAgICAgICAgYW5pbWF0ZWRTdHlsZS0+
YXBwbHlUcmFuc2Zvcm0odHJhbnNmb3JtLCBwaXhlbFNuYXBwZWRCb3JkZXJSZWN0LCBvcHRpb25z
KTsKQEAgLTE4MDEsOCArMTc5Niw5IEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4IFJlbmRlckxheWVy
OjpwZXJzcGVjdGl2ZVRyYW5zZm9ybShjb25zdCBMYXlvdXRSZWN0JiBsYXllclJlCiAgICAgICAg
IHJldHVybiB7IH07CiAKICAgICBhdXRvIGRldmljZVNjYWxlRmFjdG9yID0gcmVuZGVyQm94LmRv
Y3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKTsKLSAgICBhdXRvIHJlZmVyZW5jZUJveCA9IHJl
bmRlckJveC5yZWZlcmVuY2VCb3godHJhbnNmb3JtQm94VG9DU1NCb3hUeXBlKHN0eWxlLnRyYW5z
Zm9ybUJveCgpKSk7Ci0gICAgYXV0byBwaXhlbFNuYXBwZWRSZWZlcmVuY2VCb3ggPSBzbmFwUmVj
dFRvRGV2aWNlUGl4ZWxzKHJlZmVyZW5jZUJveCwgZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIGF1
dG8gcmVmZXJlbmNlQm94ID0gcmVuZGVyQm94LnRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3QoKTsK
KyAgICAvLyBGSVhNRTogW0xCU0VdIEF2b2lkIHBpeGVsIHNuYXBwaW5nIGluIFNWRyBzdWJ0cmVl
LgorICAgIGF1dG8gcGl4ZWxTbmFwcGVkUmVmZXJlbmNlQm94ID0gc25hcFJlY3RUb0RldmljZVBp
eGVscyhMYXlvdXRSZWN0KHJlZmVyZW5jZUJveCksIGRldmljZVNjYWxlRmFjdG9yKTsKICAgICBh
dXRvIHNuYXBwZWRMYXllclJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGxheWVyUmVjdCwg
ZGV2aWNlU2NhbGVGYWN0b3IpOwogCiAgICAgYXV0byBwZXJzcGVjdGl2ZU9yaWdpbiA9IHBpeGVs
U25hcHBlZFJlZmVyZW5jZUJveC5sb2NhdGlvbigpIC0gdG9GbG9hdFNpemUoc25hcHBlZExheWVy
UmVjdC5sb2NhdGlvbigpKSArIGZsb2F0UG9pbnRGb3JMZW5ndGhQb2ludChzdHlsZS5wZXJzcGVj
dGl2ZU9yaWdpbigpLCBwaXhlbFNuYXBwZWRSZWZlcmVuY2VCb3guc2l6ZSgpKTsKQEAgLTE4MjMs
NiArMTgxOSw3IEBAIEZsb2F0UG9pbnQgUmVuZGVyTGF5ZXI6OnBlcnNwZWN0aXZlT3JpZ2luKCkg
Y29uc3QKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkuaGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5
KCkpCiAgICAgICAgIHJldHVybiB7IH07CisgICAgLy8gRklYTUU6IFRoaXMgdXNlcyB0aGUgd3Jv
bmcsIHRyYW5zZm9ybS1ib3ggdW5hd2FyZSwgZ2VvbWV0cnkuCiAgICAgcmV0dXJuIGZsb2F0UG9p
bnRGb3JMZW5ndGhQb2ludChyZW5kZXJlcigpLnN0eWxlKCkucGVyc3BlY3RpdmVPcmlnaW4oKSwg
cmVuZGVyZXJCb3JkZXJCb3hSZWN0KCkuc2l6ZSgpKTsKIH0KIApAQCAtMzIxMiwyMSArMzIwOSw5
IEBAIHN0ZDo6cGFpcjxQYXRoLCBXaW5kUnVsZT4gUmVuZGVyTGF5ZXI6OmNvbXB1dGVDbGlwUGF0
aChjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGCiAKICAgICBpZiAoaXM8U2hhcGVQYXRoT3BlcmF0
aW9uPigqc3R5bGUuY2xpcFBhdGgoKSkpIHsKICAgICAgICAgYXV0byYgY2xpcFBhdGggPSBkb3du
Y2FzdDxTaGFwZVBhdGhPcGVyYXRpb24+KCpzdHlsZS5jbGlwUGF0aCgpKTsKLQotICAgICAgICBM
YXlvdXRSZWN0IHJlZmVyZW5jZUJveDsKLSAgICAgICAgaWYgKGlzPFJlbmRlckJveD4ocmVuZGVy
ZXIoKSkpIHsKLSAgICAgICAgICAgIHJlZmVyZW5jZUJveCA9IGRvd25jYXN0PFJlbmRlckJveD4o
cmVuZGVyZXIoKSkucmVmZXJlbmNlQm94KGNsaXBQYXRoLnJlZmVyZW5jZUJveCgpKTsKLSAgICAg
ICAgICAgIHJlZmVyZW5jZUJveC5tb3ZlKG9mZnNldEZyb21Sb290KTsKLSNpZiBFTkFCTEUoTEFZ
RVJfQkFTRURfU1ZHX0VOR0lORSkKLSAgICAgICAgfSBlbHNlIGlmIChpczxSZW5kZXJTVkdNb2Rl
bE9iamVjdD4ocmVuZGVyZXIoKSkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBz
dHJlYW0gY2xpcHBpbmcgc3VwcG9ydCBmb3IgUmVuZGVyU1ZHTW9kZWxPYmplY3QgZGVyaXZlZCBy
ZW5kZXJlcnMKLSNlbmRpZgotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gUmVmZXJl
bmNlIGJveCBmb3IgaW5saW5lcyBpcyBub3Qgd2VsbCBkZWZpbmVkOiBodHRwczovL2dpdGh1Yi5j
b20vdzNjL2Nzc3dnLWRyYWZ0cy9pc3N1ZXMvNjM4MwotICAgICAgICAgICAgcmVmZXJlbmNlQm94
ID0gcm9vdFJlbGF0aXZlQm91bmRzRm9yTm9uQm94ZXM7Ci0gICAgICAgIH0KLQotICAgICAgICBh
dXRvIHNuYXBwZWRSZWZlcmVuY2VCb3ggPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKHJlZmVyZW5j
ZUJveCwgZGV2aWNlU2NhbGVGYWN0b3IpOworICAgICAgICBhdXRvIHJlZmVyZW5jZUJveCA9IGNv
bXB1dGVSZWZlcmVuY2VCb3gocmVuZGVyZXIoKSwgY2xpcFBhdGgucmVmZXJlbmNlQm94KCksIG9m
ZnNldEZyb21Sb290LCByb290UmVsYXRpdmVCb3VuZHNGb3JOb25Cb3hlcyk7CisgICAgICAgIC8v
IEZJWE1FOiBbTEJTRV0gQXZvaWQgcGl4ZWwgc25hcHBpbmcgaW4gU1ZHIHN1YnRyZWUuCisgICAg
ICAgIGF1dG8gc25hcHBlZFJlZmVyZW5jZUJveCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5
b3V0UmVjdChyZWZlcmVuY2VCb3gpLCBkZXZpY2VTY2FsZUZhY3Rvcik7CiAgICAgICAgIHJldHVy
biB7IGNsaXBQYXRoLnBhdGhGb3JSZWZlcmVuY2VSZWN0KHNuYXBwZWRSZWZlcmVuY2VCb3gpLCBj
bGlwUGF0aC53aW5kUnVsZSgpIH07CiAgICAgfQogCkBAIC0zMjY5LDcgKzMyNTQsOCBAQCB2b2lk
IFJlbmRlckxheWVyOjpzZXR1cENsaXBQYXRoKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYQogICAgICAgICAgICAgLy8gVXNlIHRoZSBib3JkZXIgYm94IGFz
IHRoZSByZWZlcmVuY2UgYm94LCBldmVuIHRob3VnaCB0aGlzIGlzIG5vdCBjbGVhcmx5IHNwZWNp
ZmllZDogaHR0cHM6Ly9naXRodWIuY29tL3czYy9jc3N3Zy1kcmFmdHMvaXNzdWVzLzU3ODYuCiAg
ICAgICAgICAgICAvLyBjbGlwcGVkQ29udGVudEJvdW5kcyBpcyB1c2VkIGFzIHRoZSByZWZlcmVu
Y2UgYm94IGZvciBpbmxpbmVzLCB3aGljaCBpcyBhbHNvIHBvb3JseSBzcGVjaWZpZWQ6IGh0dHBz
Oi8vZ2l0aHViLmNvbS93M2MvY3Nzd2ctZHJhZnRzL2lzc3Vlcy82MzgzLgogICAgICAgICAgICAg
YXV0byByZWZlcmVuY2VCb3ggPSBjb21wdXRlUmVmZXJlbmNlQm94KHJlbmRlcmVyKCksIENTU0Jv
eFR5cGU6OkJvcmRlckJveCwgb2Zmc2V0RnJvbVJvb3QsIGNsaXBwZWRDb250ZW50Qm91bmRzKTsK
LSAgICAgICAgICAgIGF1dG8gc25hcHBlZFJlZmVyZW5jZUJveCA9IHNuYXBSZWN0VG9EZXZpY2VQ
aXhlbHMocmVmZXJlbmNlQm94LCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0
b3IoKSk7CisgICAgICAgICAgICAvLyBGSVhNRTogW0xCU0VdIEF2b2lkIHBpeGVsIHNuYXBwaW5n
IGluIFNWRyBzdWJ0cmVlLgorICAgICAgICAgICAgYXV0byBzbmFwcGVkUmVmZXJlbmNlQm94ID0g
c25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHJlZmVyZW5jZUJveCksIHJlbmRlcmVy
KCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKICAgICAgICAgICAgIGF1dG8gb2Zm
c2V0ID0gc25hcHBlZFJlZmVyZW5jZUJveC5sb2NhdGlvbigpOwogCiAgICAgICAgICAgICBhdXRv
IHNuYXBwZWRDbGlwcGluZ0JvdW5kcyA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoY2xpcHBlZENv
bnRlbnRCb3VuZHMsIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9y
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3Bw
CmluZGV4IGNjMzhlYzcwMzBlNjBjZTE3NTliMTMyODdkZTI1ZjczZDU2NWM4NTguLmUyYmViNGJh
OGMxMTU3ZGNiYjEyODY0OWEzZWRlNTZlMzg0ZThkMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcApAQCAtMzQzLDI2ICszNDMsNiBA
QCBib29sIFNWR1JlbmRlclN1cHBvcnQ6OmZpbHRlcnNGb3JjZUNvbnRhaW5lckxheW91dChjb25z
dCBSZW5kZXJFbGVtZW50JiByZW5kZXJlcgogICAgIHJldHVybiB0cnVlOwogfQogCi1GbG9hdFJl
Y3QgU1ZHUmVuZGVyU3VwcG9ydDo6dHJhbnNmb3JtUmVmZXJlbmNlQm94KGNvbnN0IFJlbmRlckVs
ZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBTVkdFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUpCi17Ci0gICAgc3dpdGNoIChzdHlsZS50cmFuc2Zvcm1Cb3goKSkgewotICAg
IGNhc2UgVHJhbnNmb3JtQm94OjpCb3JkZXJCb3g6Ci0gICAgICAgIC8vIEZvciBTVkcgZWxlbWVu
dHMgd2l0aG91dCBhbiBhc3NvY2lhdGVkIENTUyBsYXlvdXQgYm94LCB0aGUgdXNlZCB2YWx1ZSBm
b3IgYm9yZGVyLWJveCBpcyBzdHJva2UtYm94LgotICAgIGNhc2UgVHJhbnNmb3JtQm94OjpTdHJv
a2VCb3g6Ci0gICAgICAgIHJldHVybiByZW5kZXJlci5zdHJva2VCb3VuZGluZ0JveCgpOwotICAg
IGNhc2UgVHJhbnNmb3JtQm94OjpDb250ZW50Qm94OgotICAgICAgICAvLyBGb3IgU1ZHIGVsZW1l
bnRzIHdpdGhvdXQgYW4gYXNzb2NpYXRlZCBDU1MgbGF5b3V0IGJveCwgdGhlIHVzZWQgdmFsdWUg
Zm9yIGNvbnRlbnQtYm94IGlzIGZpbGwtYm94LgotICAgIGNhc2UgVHJhbnNmb3JtQm94OjpGaWxs
Qm94OgotICAgICAgICByZXR1cm4gcmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3goKTsKLSAgICBj
YXNlIFRyYW5zZm9ybUJveDo6Vmlld0JveDogewotICAgICAgICBGbG9hdFNpemUgdmlld3BvcnRT
aXplOwotICAgICAgICBTVkdMZW5ndGhDb250ZXh0KCZlbGVtZW50KS5kZXRlcm1pbmVWaWV3cG9y
dCh2aWV3cG9ydFNpemUpOwotICAgICAgICByZXR1cm4gRmxvYXRSZWN0IHsgeyB9LCB2aWV3cG9y
dFNpemUgfTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4geyB9OwotfQotCiBpbmxpbmUg
RmxvYXRSZWN0IGNsaXBQYXRoUmVmZXJlbmNlQm94KGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyLCBDU1NCb3hUeXBlIGJveFR5cGUpCiB7CiAgICAgRmxvYXRSZWN0IHJlZmVyZW5jZUJveDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9y
dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmgKaW5k
ZXggOWNjZmNiZWI1NzdhNzczZGM4ODA3ZDk1MzlkNjJhODFlNTYxOWI4OS4uZDQzZDBjN2Y3NThk
MTVmYjcwNDZjOTFiZTBjYTlkYTUzZGQ4NTYwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmgKQEAgLTgyLDggKzgyLDYgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIHZvaWQgc3R5bGVDaGFuZ2VkKFJlbmRlckVsZW1lbnQmLCBjb25zdCBSZW5k
ZXJTdHlsZSopOwogICAgIAotICAgIHN0YXRpYyBGbG9hdFJlY3QgdHJhbnNmb3JtUmVmZXJlbmNl
Qm94KGNvbnN0IFJlbmRlckVsZW1lbnQmLCBjb25zdCBTVkdFbGVtZW50JiwgY29uc3QgUmVuZGVy
U3R5bGUmKTsKLQogI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCiAgICAgc3RhdGljIGJvb2wg
aXNvbGF0ZXNCbGVuZGluZyhjb25zdCBSZW5kZXJTdHlsZSYpOwogICAgIHN0YXRpYyB2b2lkIHVw
ZGF0ZU1hc2tlZEFuY2VzdG9yU2hvdWxkSXNvbGF0ZUJsZW5kaW5nKGNvbnN0IFJlbmRlckVsZW1l
bnQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFwaGljc0VsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYXBoaWNzRWxlbWVudC5jcHAKaW5kZXggZGMx
MDhlNWIyM2M0NmRhOTU2MDBhMDJhYWM2MjA3ZWQ1YjY2NTY5Ni4uZTJjZDEzNDI4ODhhYThiMjQ2
ODdmYzI4NzIxNWNhOTIwYWZhNGI2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0dyYXBoaWNzRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYXBoaWNz
RWxlbWVudC5jcHAKQEAgLTgwLDEyICs4MCwxMCBAQCBBZmZpbmVUcmFuc2Zvcm0gU1ZHR3JhcGhp
Y3NFbGVtZW50OjphbmltYXRlZExvY2FsVHJhbnNmb3JtKCkgY29uc3QKIAogICAgIC8vIEhvbm9y
IGFueSBvZiB0aGUgdHJhbnNmb3JtLXJlbGF0ZWQgQ1NTIHByb3BlcnRpZXMgaWYgc2V0LgogICAg
IGlmIChoYXNTcGVjaWZpZWRUcmFuc2Zvcm0gfHwgKHN0eWxlICYmIChzdHlsZS0+dHJhbnNsYXRl
KCkgfHwgc3R5bGUtPnNjYWxlKCkgfHwgc3R5bGUtPnJvdGF0ZSgpKSkpIHsKLSAgICAgICAgYXV0
byBib3VuZGluZ0JveCA9IFNWR1JlbmRlclN1cHBvcnQ6OnRyYW5zZm9ybVJlZmVyZW5jZUJveCgq
cmVuZGVyZXIoKSwgKnRoaXMsICpzdHlsZSk7Ci0gICAgICAgIAogICAgICAgICAvLyBOb3RlOiBv
YmplY3RCb3VuZGluZ0JveCBpcyBhbiBlbXB0eVJlY3QgZm9yIGVsZW1lbnRzIGxpa2UgcGF0dGVy
biBvciBjbGlwUGF0aC4KICAgICAgICAgLy8gU2VlIHRoZSAiT2JqZWN0IGJvdW5kaW5nIGJveCB1
bml0cyIgc2VjdGlvbiBvZiBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3MzLXRyYW5zZm9ybXMv
CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKLSAgICAgICAgc3R5bGUt
PmFwcGx5VHJhbnNmb3JtKHRyYW5zZm9ybSwgYm91bmRpbmdCb3gpOworICAgICAgICBzdHlsZS0+
YXBwbHlUcmFuc2Zvcm0odHJhbnNmb3JtLCByZW5kZXJlcigpLT50cmFuc2Zvcm1SZWZlcmVuY2VC
b3hSZWN0KCkpOwogCiAgICAgICAgIC8vIEZsYXR0ZW4gYW55IDNEIHRyYW5zZm9ybS4KICAgICAg
ICAgbWF0cml4ID0gdHJhbnNmb3JtLnRvQWZmaW5lVHJhbnNmb3JtKCk7CkBAIC0xMDAsNyArOTgs
NyBAQCBBZmZpbmVUcmFuc2Zvcm0gU1ZHR3JhcGhpY3NFbGVtZW50OjphbmltYXRlZExvY2FsVHJh
bnNmb3JtKCkgY29uc3QKIAogICAgIC8vIElmIHdlIGRpZG4ndCBoYXZlIHRoZSBDU1MgInRyYW5z
Zm9ybSIgcHJvcGVydHkgc2V0LCB3ZSBtdXN0IGFjY291bnQgZm9yIHRoZSAidHJhbnNmb3JtIiBh
dHRyaWJ1dGUuCiAgICAgaWYgKCFoYXNTcGVjaWZpZWRUcmFuc2Zvcm0gJiYgc3R5bGUpIHsKLSAg
ICAgICAgYXV0byBib3VuZGluZ0JveCA9IFNWR1JlbmRlclN1cHBvcnQ6OnRyYW5zZm9ybVJlZmVy
ZW5jZUJveCgqcmVuZGVyZXIoKSwgKnRoaXMsICpzdHlsZSk7CisgICAgICAgIGF1dG8gYm91bmRp
bmdCb3ggPSByZW5kZXJlcigpLT50cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCk7CiAgICAgICAg
IGF1dG8gdCA9IGZsb2F0UG9pbnRGb3JMZW5ndGhQb2ludChzdHlsZS0+dHJhbnNmb3JtT3JpZ2lu
WFkoKSwgYm91bmRpbmdCb3guc2l6ZSgpKSArIGJvdW5kaW5nQm94LmxvY2F0aW9uKCk7CiAgICAg
ICAgIG1hdHJpeC50cmFuc2xhdGUodCk7CiAgICAgICAgIG1hdHJpeCAqPSB0cmFuc2Zvcm0oKS5j
b25jYXRlbmF0ZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454560</attachid>
            <date>2022-03-13 16:45:32 -0700</date>
            <delta_ts>2022-03-14 05:14:07 -0700</delta_ts>
            <desc>Patch, v6</desc>
            <filename>bug-237554-20220313164531.patch</filename>
            <type>text/plain</type>
            <size>39414</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMjE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGQ2MDVjYTVhM2IxODE1
OWRmMjE1ODQ5YWRhODU2ZTdmOWI0YjhhNy4uNDY4NGU5MmQ3ZjgxYzgyMzUyMWEwODFmOGE3YWUy
ODFjZjRiMzBkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNCBAQAorMjAyMi0wMy0xMyAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBVbmlm
eSAndHJhbnNmb3JtLWJveCcgcmVmZXJlbmNlIGJveCBjb21wdXRhdGlvbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NTU0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudGx5IHRoZSBjb2RlIHRv
IGNvbXB1dGUgdGhlIHJlZmVyZW5jZSBib3gsIGFjY29yZGluZyB0byB0aGUgQ1NTICd0cmFuc2Zv
cm0tYm94JworICAgICAgICBwcm9wZXJ0eSBpcyBzcHJpbmtsZWQgb3ZlciB2YXJpb3VzIHBsYWNl
czogQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLCBTVkdSZW5kZXJTdXBwb3J0LAorICAgICAg
ICBSZW5kZXJCb3gsIHBhcnRzIGluIFJlbmRlckxheWVyLgorCisgICAgICAgIENsZWFudXAgYW5k
IHVuaWZ5IHRoZSBjb2RlIGluIGEgc2luZ2xlIHBsYWNlOiBhIG5ldyAncmVmZXJlbmNlQm94UmVj
dCgpJyAgbWV0aG9kIGltcGxlbWVudGluZworICAgICAgICB0aGUgY29tcHV0YXRpb24gZm9yIGJv
dGggU1ZHL0hUTUwsIHdoZXJlIHRoZSBTVkcgY29kZSBsaXZlcyBpbiBSZW5kZXJFbGVtZW50ICh0
aGUgb25seSBzaGFyZWQKKyAgICAgICAgYmFzZSBjbGFzcyBiZXR3ZWVuIGxlZ2FjeSBTVkcvTEJT
RSkgYW5kIHRoZSBIVE1MIGNvZGUgaW4gUmVuZGVyQm94LiBUaGUgSFRNTC9DU1MgaW1wbGVtZW50
YXRpb24KKyAgICAgICAgd2FzIGFscmVhZHkgY29udGFpbmVkIGluIFJlbmRlckJveDo6cmVmZXJl
bmNlQm94KCkgYW5kIHdhcyByZW5hbWVkIHRvIHJlZmVyZW5jZUJveFJlY3QoKSB0byBmb2xsb3cK
KyAgICAgICAgdGhlIG5hbWluZyBjb252ZW50aW9uIGZvciB0aGUgb3RoZXIgQ1NTIGJveCBnZW9l
bXRyeSBoZWxwZXJzIHN1Y2ggYXMgY29udGVudEJveFJlY3QoKSwKKyAgICAgICAgYm9yZGVyQm94
UmVjdCgpLCBldGMuCisKKyAgICAgICAgRm9yIFNWR3MgbmVlZHMgcmVmZXJlbmNlQm94UmVjdCgp
IG5lZWRzIHRvIHJldHVybiBhIEZsb2F0UmVjdCwgd2hlcmVhcyBmb3IgQ1NTL0hUTUwgTGF5b3V0
UmVjdAorICAgICAgICBpcyB0aGUgcmlnaHQgY2hvaWNlLiBJbnRyb2R1Y2UgYSAnRmxvYXRPckxh
eW91dFJlY3QnIGhlbHBlciB0aGF0IGNhbiBiZSB1c2VkIGFzIHJldHVybiB2YWx1ZS9hcmd1bWVu
dAorICAgICAgICBpbi90byBmdW5jdGlvbnMgdGhhdCBlaXRoZXIgcmV0dXJuL25lZWQgYSBGbG9h
dFJlY3Qgb3IgYSBMYXlvdXRSZWN0LCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQuCisKKyAgICAg
ICAgJ0Zsb2F0T3JMYXlvdXRSZWN0JyBob2xkcyBhIHZhcmlhbnQ8RmxvYXRSZWN0LCBMYXlvdXRS
ZWN0PiBhbmQgb2ZmZXJzIGNvbnZlbmllbmNlIGZ1bmN0aW9ucworICAgICAgICB0byBzaW1wbGlm
eSBjb21tb24gb3BlcmF0aW9ucywgZS5nLiBvcGVyYXRvciBGbG9hdFJlY3QoKSB0byBhY2Nlc3Mg
dGhlIHN0b3JlZCBGbG9hdFJlY3QsIG9yIGNvbnZlcnQKKyAgICAgICAgdGhlIHN0b3JlZCBMYXlv
dXRSZWN0IGludG8gYSBGbG9hdFJlY3QgKHdpdGhvdXQgYXBwbHlpbmcgcGl4ZWwgc25hcHBpbmcp
LiBGdXJ0aGVybW9yZSBpdCBvZmZlcnMKKyAgICAgICAgYSAncmVjdEZvclBhaW50aW5nKGRldmlj
ZVNjYWxlRmFjdG9yKScgbWV0aG9kLCB0aGF0IGVpdGhlciByZXR1cm5zIHRoZSBzdG9yZWQgRmxv
YXRSZWN0LCBvciBwaXhlbC1zbmFwcworICAgICAgICB0aGUgc3RvcmVkIExheW91dFJlY3QgYW5k
IHJldHVybnMgYSBuZXcgZGV2aWNlLXBpeGVsIGFsaWduZWQgRmxvYXRSZWN0LiBUaGUgbmFtZSAn
cmVjdEZvclBhaW50aW5nJworICAgICAgICBkb2VzIG5vdCBjb250YWluIHRoZSB0ZXJtICdQaXhl
bFNuYXBwaW5nJyBvbiBwdXJwb3NlLCBzaW5jZSB0aGUgaW50ZW5kZWQgdXNhZ2UgaXMgaW4gYWxs
IHBsYWNlcyB0aGF0CisgICAgICAgIGN1cnJlbnRseSBhcHBseSBwaXhlbC1zbmFwcGluZywgdG8g
ZWFzaWx5IGRpc2FibGUgdGhhdCBvcGVyYXRpb24gaW4gU1ZHIHN1YnRyZWVzLgorCisgICAgICAg
IENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMsIG5vIGNoYW5nZSBpbiBiZWhhdmlvdXIuCisKKyAg
ICAgICAgKiBIZWFkZXJzLmNtYWtlOiBBZGQgRmxvYXRPckxheW91dFJlY3QuaCB0byBidWlsZC4K
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorICAg
ICAgICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y29tcHV0ZWRUcmFuc2Zvcm0pOiBVc2UgdGhlIHJlbmRlcmVycyB0cmFuc2Zvcm1SZWZl
cmVuY2VCb3hSZWN0KCkgaW5zdGVhZCBvZiB0aGUgc3RhdGljIGhlbHBlciBmdW5jdGlvbiB0cmFu
c2Zvcm1SZWZlcmVuY2VCb3goKS4KKyAgICAgICAgKFdlYkNvcmU6OkNvbXB1dGVkU3R5bGVFeHRy
YWN0b3I6OnZhbHVlRm9yUHJvcGVydHlJblN0eWxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
Ojp0cmFuc2Zvcm1SZWZlcmVuY2VCb3gpOiBEZWxldGVkLiAgUmVuZGVyRWxlbWVudDo6dHJhbnNm
b3JtUmVmZXJlbmNlQm94UmVjdCgpIHByb3ZpZGVzIHRoZSBzYW1lIGxvZ2ljIGluIGEgZ2VuZXJp
YyB3YXkuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRPckxheW91dFJlY3QuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGbG9hdE9yTGF5b3V0UmVjdDo6RmxvYXRPckxheW91
dFJlY3QpOiBBZGQgY29uc3RydWN0b3JzIGZvciBpbXBsaWNpdCBjb25zdHJ1Y3Rpb24gZnJvbSBl
aXRoZXIgTGF5b3V0UmVjdCBvciBGbG9hdFJlY3QuCisgICAgICAgIChXZWJDb3JlOjpGbG9hdE9y
TGF5b3V0UmVjdDo6b3BlcmF0b3IgRmxvYXRSZWN0IGNvbnN0KTogUmV0dXJucyB0aGUgc3RvcmVk
IEZsb2F0UmVjdCwgb3IgY29udmVydHMgdGhlIHN0b3JlZCBMYXlvdXRSZWN0IGludG8gYSBGbG9h
dFJlY3QgKG5vIHBpeGVsIHNuYXBwaW5nISkuCisgICAgICAgIChXZWJDb3JlOjpGbG9hdE9yTGF5
b3V0UmVjdDo6cmVjdEZvclBhaW50aW5nIGNvbnN0KTogUmV0dXJucyB0aGUgc3RvcmVkIEZsb2F0
UmVjdCBhcy1pcywgb3IgYXBwbGllcyBwaXhlbC1zbmFwcGluZyBvbiB0aGUgc3RvcmVkIExheW91
dFJlY3QsIHJldHVybmluZyBhIGRldmljZS1waXhlbCBhbGlnbmVkIEZsb2F0UmVjdC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZsb2F0T3JMYXlvdXRSZWN0Ojptb3ZlKTogSGVscGVyIG1ldGhvZCB0byBz
aW1wbGlmeSBSZW5kZXJMYXllciBjYWxsLXNpdGVzLiBDYWxscyBtb3ZlKCkgb24gZWl0aGVyIHRo
ZSBzdG9yZWQgRmxvYXRSZWN0IG9yIExheW91dFJlY3QuCisgICAgICAgIChXZWJDb3JlOjpGbG9h
dE9yTGF5b3V0UmVjdDo6aXNGbG9hdFJlY3QgY29uc3QpOiBDaGVja3MgaWYgdGhlIHZhcmlhbnQg
aG9sZHMgYSBGbG9hdFJlY3QsIGlmIG5vdCBpdCBpcyBndWFyYW50ZWVkIHRvIGhvbGQgYSBMYXlv
dXRSZWN0LgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRPckxheW91dFJlY3Q6OmZsb2F0UmVjdCBj
b25zdCk6IFJlYWQtb25seSBjb25zdCBhY2NjZXNvci4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0
T3JMYXlvdXRSZWN0OjpmbG9hdFJlY3QpOiBNdXRhYmxlIGFjY2Vzc29yLCB1c2VkIGJ5IG1vdmUo
KS4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0T3JMYXlvdXRSZWN0Ojppc0xheW91dFJlY3QgY29u
c3QpOiBDaGVja3MgaWYgdGhlIHZhcmlhbnQgaG9sZHMgYSBMYXlvdXRSZWN0LCBpZiBub3QgaXQg
aXMgZ3VhcmFudGVlZCB0byBob2xkIGEgRmxvYXRSZWN0LgorICAgICAgICAoV2ViQ29yZTo6Rmxv
YXRPckxheW91dFJlY3Q6OmxheW91dFJlY3QgY29uc3QpOiBSZWFkLW9ubHkgY29uc3QgYWNjY2Vz
b3IuCisgICAgICAgIChXZWJDb3JlOjpGbG9hdE9yTGF5b3V0UmVjdDo6bGF5b3V0UmVjdCk6IE11
dGFibGUgYWNjZXNzb3IsIHVzZWQgYnkgbW92ZSgpLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpyZWZlcmVuY2VCb3hSZWN0
IGNvbnN0KTogUmVuYW1lIHJlZmVyZW5jZUJveCgpIHRvIHJlZmVyZW5jZUJveFJlY3QoKSBhbmQg
cmV0dXJuIEZsb2F0T3JMYXlvdXRSZWN0IGluc3RlYWQgb2YgTGF5b3V0UmVjdC4KKyAgICAgICAg
TEJTRSB3YW50cyB0byByZS11c2UgdGhlIGxvZ2ljIGJ1dCB3aXRob3V0IHBpeGVsIHNuYXBwaW5n
IHdpdGhpbiB0aGUgU1ZHIHJlbmRlciB0cmVlLiBBbGwgY2FsbGVycyB3ZXJlIGFkYXB0ZWQgdG8g
dGhlIG5ldyByZXR1cm4gdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aGl0VGVz
dENsaXBQYXRoIGNvbnN0KTogQWRhcHQgdG8gcmVmZXJlbmNlQm94KCkgLT4gcmVmZXJlbmNlQm94
UmVjdCgpIHJlbmFtaW5nIGFuZCByZXR1cm4gdHlwZSBjaGFuZ2UuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6OnJlZmVyZW5jZUJveCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJveC5oOiBBZGFwdCB0byByZWZlcmVuY2VCb3goKSAtPiByZWZlcmVuY2VC
b3hSZWN0KCkgcmVuYW1pbmcgYW5kIHJldHVybiB0eXBlIGNoYW5nZS4KKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50
OjpyZWZlcmVuY2VCb3hSZWN0IGNvbnN0KTogQWRkIHJlZmVyZW5jZUJveFJlY3QoKSBpbXBsZW1l
bnRhdGlvbiBmb3IgU1ZHIHJlbmRlcmVycy4gVGhlIGNvbW1vbiBiYXNlLWNsYXNzIGZvcgorICAg
ICAgICBhbGwgU1ZHIHJlbmRlcmVycyBpcyBSZW5kZXJFbGVtZW50IGluIHRoZSBsZWdhY3kgU1ZH
IGVuZ2luZSBhbmQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCBpbiBMQlNFLiBUbyBzaGFyZSB0aGUg
Y29kZSBiZXR3ZWVuIGJvdGggU1ZHCisgICAgICAgIGltcGxlbWVudGF0aW9ucyBpdCBoYXMgdG8g
YmUgcGxhY2VkIGluIFJlbmRlckVsZW1lbnQgLS0gdG8gYmUgbW92ZWQgdG8gUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdCwgb25jZSBMQlNFIGlzIHRoZSBvbmx5IFNWRyBlbmdpbmUuCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1l
bnQ6OnRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3QgY29uc3QpOiBBZGQgbmV3IGhlbHBlciBmdW5j
dGlvbiB3aGljaCBpbnZva2VzIHJlZmVyZW5jZUJveFJlY3QoKSB1c2luZworICAgICAgICB0cmFu
c2Zvcm1Cb3hUb0NTU0JveFR5cGUoc3R5bGUoKS50cmFuc2Zvcm1Cb3goKSkuIFdoZW5ldmVyIHRy
YW5zZm9ybS1ib3ggc3VwcG9ydCBpcyBuZWNlc3NhcnksIHRoaXMgbWV0aG9kIHNoYWxsIGJlIHVz
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDogVXNlIHRoZSBuZXcgdHJh
bnNmb3JtUmVmZXJlbmNlQm94UmVjdCgpIHdoZXJlIHBvc3NpYmxlLCBhZGFwdCB0byByZXR1cm4g
dHlwZSBjaGFuZ2VzLCByZW1vdmUgbWFudWFsIHBpeGVsIHNuYXBwaW5nLgorICAgICAgICAoV2Vi
Q29yZTo6Y29tcHV0ZVJlZmVyZW5jZUJveCk6IEFkYXB0IHRvIHJlZmVyZW5jZUJveCgpIC0+IHJl
ZmVyZW5jZUJveFJlY3QoKSByZW5hbWluZyBhbmQgcmV0dXJuIHR5cGUgY2hhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVRyYW5zZm9ybSk6IFNpbXBsaWZ5IHJlZmVy
ZW5jZSBib3ggY29tcHV0YXRpb24sIGFuZCBhdm9pZCBtYW51YWwgcGl4ZWwgc25hcHBpbmc6IHV0
aWxpemUgdHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdCgpICsgcmVjdEZvclBhaW50aW5nKCkuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y3VycmVudFRyYW5zZm9ybSBjb25zdCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBlcnNwZWN0aXZlVHJhbnNmb3Jt
IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGVyc3BlY3Rp
dmVPcmlnaW4gY29uc3QpOiBBZGQgRklYTUUsIHRoaXMgYWx3YXlzIHVzZXMgdGhlIGJvcmRlciBi
b3ggcmVjdCBhcyBib3VuZGluZ0JveCBmb3IgbGVuZ3RoIHJlc29sdmluZzogaXQgaWdub3JlcyB0
cmFuc2Zvcm0tYm94LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbXB1dGVDbGlw
UGF0aCBjb25zdCk6IEFkYXB0IHRvIGNvbXB1dGVSZWZlcmVuY2VCb3goKSBjaGFuZ2VzLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldHVwQ2xpcFBhdGgpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OmNvbXB1dGVSZWZlcmVuY2VSZWN0RnJvbUJveCk6IERlbGV0ZWQuCisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1JlbmRlclN1cHBvcnQ6OnRyYW5zZm9ybVJlZmVyZW5jZUJveCk6IERlbGV0ZWQuIFJl
bmRlckVsZW1lbnQ6OnRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3QoKSBwcm92aWRlcyB0aGUgc2Ft
ZSBsb2dpYyBpbiBhIGdlbmVyaWMgd2F5LgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVu
ZGVyU3VwcG9ydC5oOiBHZXQgcmlkIG9mIHRyYW5zZm9ybVJlZmVyZW5jZUJveCgpLgorICAgICAg
ICAqIHN2Zy9TVkdHcmFwaGljc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHR3Jh
cGhpY3NFbGVtZW50OjphbmltYXRlZExvY2FsVHJhbnNmb3JtIGNvbnN0KTogVXNlIHRoZSByZW5k
ZXJlcnMgdHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdCgpIGluc3RlYWQgb2YgU1ZHUmVuZGVyU3Vw
cG9ydDo6dHJhbnNmb3JtUmVmZXJlbmNlQm94KCkuCisKKzIwMjItMDMtMTAgIE5pa29sYXMgWmlt
bWVybWFubiAgPG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CisKKyAgICAgICAgVW5pZnkgJ3RyYW5z
Zm9ybS1ib3gnIHJlZmVyZW5jZSBib3ggY29tcHV0YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzU1NAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSB0aGUgY29kZSB0byBjb21wdXRl
IHRoZSByZWZlcmVuY2UgYm94LCBhY2NvcmRpbmcgdG8gdGhlIENTUyAndHJhbnNmb3JtLWJveCcK
KyAgICAgICAgcHJvcGVydHkgaXMgc3ByaW5rbGVkIG92ZXIgdmFyaW91cyBwbGFjZXM6IENTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbiwgU1ZHUmVuZGVyU3VwcG9ydCwKKyAgICAgICAgUmVuZGVy
Qm94LCBwYXJ0cyBpbiBSZW5kZXJMYXllci4KKworICAgICAgICBDbGVhbnVwIGFuZCB1bmlmeSB0
aGUgY29kZSBpbiBhIHNpbmdsZSBwbGFjZTogYSBuZXcgJ3JlZmVyZW5jZUJveFJlY3QoKScgIG1l
dGhvZCBpbXBsZW1lbnRpbmcKKyAgICAgICAgdGhlIGNvbXB1dGF0aW9uIGZvciBib3RoIFNWRy9I
VE1MLCB3aGVyZSB0aGUgU1ZHIGNvZGUgbGl2ZXMgaW4gUmVuZGVyRWxlbWVudCAodGhlIG9ubHkg
c2hhcmVkCisgICAgICAgIGJhc2UgY2xhc3MgYmV0d2VlbiBsZWdhY3kgU1ZHL0xCU0UpIGFuZCB0
aGUgSFRNTCBjb2RlIGluIFJlbmRlckJveC4gVGhlIEhUTUwvQ1NTIGltcGxlbWVudGF0aW9uCisg
ICAgICAgIHdhcyBhbHJlYWR5IGNvbnRhaW5lZCBpbiBSZW5kZXJCb3g6OnJlZmVyZW5jZUJveCgp
IGFuZCB3YXMgcmVuYW1lZCB0byByZWZlcmVuY2VCb3hSZWN0KCkgdG8gZm9sbG93CisgICAgICAg
IHRoZSBuYW1pbmcgY29udmVudGlvbiBmb3IgdGhlIG90aGVyIENTUyBib3ggZ2VvZW10cnkgaGVs
cGVycyBzdWNoIGFzIGNvbnRlbnRCb3hSZWN0KCksCisgICAgICAgIGJvcmRlckJveFJlY3QoKSwg
ZXRjLgorCisgICAgICAgIFJlbW92ZSBjb2RlIGZyb20gU1ZHUmVuZGVyU3VwcG9ydC9DU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24gdGhhdCBjYW4gbm93IHVzZSB0aGUgc2hhcmVkIGxvZ2ljLgor
CisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMsIG5vIGNoYW5nZSBpbiBiZWhhdmlv
dXIuCisKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbXB1dGVkVHJhbnNmb3JtKTogVXNlIHRoZSByZW5kZXJlcnMgdHJh
bnNmb3JtUmVmZXJlbmNlQm94UmVjdCgpIGluc3RlYWQgb2YgdGhlIHN0YXRpYyBoZWxwZXIgZnVu
Y3Rpb24gdHJhbnNmb3JtUmVmZXJlbmNlQm94KCkuCisgICAgICAgIChXZWJDb3JlOjpDb21wdXRl
ZFN0eWxlRXh0cmFjdG9yOjp2YWx1ZUZvclByb3BlcnR5SW5TdHlsZSk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6dHJhbnNmb3JtUmVmZXJlbmNlQm94KTogRGVsZXRlZC4gUmVuZGVyRWxlbWVu
dDo6dHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdCgpIHByb3ZpZGVzIHRoZSBzYW1lIGxvZ2ljIGlu
IGEgZ2VuZXJpYyB3YXkuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnJlZmVyZW5jZUJveFJlY3QgY29uc3QpOiBSZW5hbWUg
cmVmZXJlbmNlQm94KCkgdG8gcmVmZXJlbmNlQm94UmVjdCgpIGFuZCByZXR1cm4gRmxvYXRSZWN0
IGluc3RlYWQgb2YgTGF5b3V0UmVjdC4KKyAgICAgICAgTEJTRSB3YW50cyB0byByZS11c2UgdGhl
IGxvZ2ljIGJ1dCB3aXRob3V0IHBpeGVsIHNuYXBwaW5nIHdpdGhpbiB0aGUgU1ZHIHJlbmRlciB0
cmVlLiBBbGwgY2FsbGVycyB3ZXJlIGFkYXB0ZWQgdG8gdGhlIG5ldyByZXR1cm4gdHlwZS4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aGl0VGVzdENsaXBQYXRoIGNvbnN0KTogQWRhcHQg
dG8gcmVmZXJlbmNlQm94KCkgLT4gcmVmZXJlbmNlQm94UmVjdCgpIHJlbmFtaW5nLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjpyZWZlcmVuY2VCb3ggY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDogQWRhcHQgdG8gcmVmZXJlbmNlQm94KCkgLT4g
cmVmZXJlbmNlQm94UmVjdCgpIHJlbmFtaW5nCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6cmVmZXJlbmNlQm94
UmVjdCBjb25zdCk6IEFkZCByZWZlcmVuY2VCb3hSZWN0KCkgaW1wbGVtZW50YXRpb24gZm9yIFNW
RyByZW5kZXJlcnMuIFRoZSBjb21tb24gYmFzZS1jbGFzcyBmb3IKKyAgICAgICAgYWxsIFNWRyBy
ZW5kZXJlcnMgaXMgUmVuZGVyRWxlbWVudCBpbiB0aGUgbGVnYWN5IFNWRyBlbmdpbmUgYW5kIFJl
bmRlckxheWVyTW9kZWxPYmplY3QgaW4gTEJTRS4gVG8gc2hhcmUgdGhlIGNvZGUgYmV0d2VlbiBi
b3RoIFNWRworICAgICAgICBpbXBsZW1lbnRhdGlvbnMgaXQgaGFzIHRvIGJlIHBsYWNlZCBpbiBS
ZW5kZXJFbGVtZW50IC0tIHRvIGJlIG1vdmVkIHRvIFJlbmRlckxheWVyTW9kZWxPYmplY3QsIG9u
Y2UgTEJTRSBpcyB0aGUgb25seSBTVkcgZW5naW5lLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50Ojp0cmFuc2Zvcm1S
ZWZlcmVuY2VCb3hSZWN0IGNvbnN0KTogQWRkIG5ldyBoZWxwZXIgZnVuY3Rpb24gd2hpY2ggaW52
b2tlcyByZWZlcmVuY2VCb3hSZWN0KCkgdXNpbmcKKyAgICAgICAgdHJhbnNmb3JtQm94VG9DU1NC
b3hUeXBlKHN0eWxlKCkudHJhbnNmb3JtQm94KCkpLiBXaGVuZXZlciB0cmFuc2Zvcm0tYm94IHN1
cHBvcnQgaXMgbmVjZXNzYXJ5LCB0aGlzIG1ldGhvZCBzaGFsbCBiZSB1c2VkLgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6IFVzZSB0aGUgbmV3IHRyYW5zZm9ybVJlZmVyZW5j
ZUJveFJlY3QoKSB3aGVyZSBwb3NzaWJsZS4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVSZWZl
cmVuY2VCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVRyYW5zZm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y3VycmVudFRyYW5zZm9ybSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGVyc3BlY3RpdmVUcmFuc2Zvcm0g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBlcnNwZWN0aXZlT3JpZ2lu
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjb21wdXRlQ2xpcFBhdGgg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldHVwQ2xpcFBhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVJlZmVyZW5jZVJlY3RGcm9tQm94KTogRGVsZXRlZC4K
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUmVuZGVyU3VwcG9ydDo6dHJhbnNmb3JtUmVmZXJlbmNlQm94KTogRGVsZXRl
ZC4gUmVuZGVyRWxlbWVudDo6dHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdCgpIHByb3ZpZGVzIHRo
ZSBzYW1lIGxvZ2ljIGluIGEgZ2VuZXJpYyB3YXkuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJTdXBwb3J0Lmg6IERpdHRvLgorICAgICAgICAqIHN2Zy9TVkdHcmFwaGljc0VsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHR3JhcGhpY3NFbGVtZW50OjphbmltYXRlZExv
Y2FsVHJhbnNmb3JtIGNvbnN0KTogVXNlIHRoZSByZW5kZXJlcnMgdHJhbnNmb3JtUmVmZXJlbmNl
Qm94UmVjdCgpIGluc3RlYWQgb2YgU1ZHUmVuZGVyU3VwcG9ydDo6dHJhbnNmb3JtUmVmZXJlbmNl
Qm94KCkuCisKIDIwMjItMDMtMTIgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4K
IAogICAgICAgICBTYWZhcmkgcHJvZHVjZXMgc2NyYW1ibGVkIG91dHB1dCBmb3Igc29tZSB3ZWJt
IHZpZGVvcyB3aXRoIHZwOCBjb2RlYy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRl
cnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IDczNjQ0MmEwOGE3
NDUwMGEzNTJmMDRjMmUxMDZkOGM0MWU3YTRmYzUuLmUwZjgyMTg1Yjg3YjQ0YmQ4MzIzZmQxMmIz
OTA4ZTFmZjlkOTk1NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UK
KysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtMTQ1MCw2ICsxNDUwLDcgQEAg
c2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0Rpc3BsYXlVcGRhdGUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0RyYXdHbHlwaHNSZWNv
cmRlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRMaW5lLmgKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdE9yTGF5b3V0UmVjdC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQ
b2ludC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFF1YWQuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGU2NzRiYjYxZTk4NTcxM2Y2OTIxNDdiN2FlMzQ3
OWVlOGZlMTliZmMuLjUxMGIzYWRjNmU3M2IyZGJiMDEyMGNkMTE4ZmU2MjMxOWI3YTlkYWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTM5MjcsNiArMzkyNyw3IEBACiAJCUIyNzUzNTY3MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1
MzkwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjI3NTM1NjkwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0
UG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIy
NzUzNTNCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjI3NTM1NkIwQjA1MzgxNDAwMkNFNjRG
IC8qIEZsb2F0UmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjI3NTM1M0QwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUIzNzczNDZCMEIwNDE5MTY2
MDJDRTY0RiAvKiBGbG9hdE9yTGF5b3V0UmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1M0MwQjA1MzgxNTAwMkNFNjRGIC8qIEZsb2F0T3JM
YXlvdXRSZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQjI3NTM1NkQwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1M0YwQjA1MzgxNDAwMkNF
NjRGIC8qIEZsb2F0U2l6ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUIyNzUzNTZFMEIwNTM4MTQwMDJDRTY0RiAvKiBJY29uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0MDBCMDUzODE0MDAy
Q0U2NEYgLyogSWNvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUIyNzUzNTcwMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NDIwQjA1MzgxNDAwMkNF
NjRGIC8qIEltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTE0ODcwLDYgKzE0ODcxLDcgQEAKIAkJQjI3NTM1M0IwQjA1MzgxNDAwMkNFNjRG
IC8qIEZsb2F0UG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsb2F0
UG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1M0MwQjA1MzgxNDAw
MkNFNjRGIC8qIEZsb2F0UmVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRmxvYXRSZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1
M0QwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRmxvYXRSZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIy
NzUzNTNDMEIwNTM4MTUwMDJDRTY0RiAvKiBGbG9hdE9yTGF5b3V0UmVjdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxvYXRPckxheW91dFJlY3QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1M0UwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmxvYXRTaXplLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1M0YwQjA1MzgxNDAwMkNFNjRGIC8q
IEZsb2F0U2l6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxvYXRTaXpl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTQwMEIwNTM4MTQwMDJDRTY0
RiAvKiBJY29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJY29uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODk4Miw2ICsyODk4NCw3IEBACiAJCQkJMEZE
NzIzODAwRUM4QkQ5MzAwQ0E1REQ3IC8qIEZsb2F0UXVhZC5oICovLAogCQkJCUIyNzUzNTNDMEIw
NTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3QuY3BwICovLAogCQkJCUIyNzUzNTNEMEIwNTM4MTQw
MDJDRTY0RiAvKiBGbG9hdFJlY3QuaCAqLywKKwkJCQlCMjc1MzUzQzBCMDUzODE1MDAyQ0U2NEYg
LyogRmxvYXRPckxheW91dFJlY3QuaCAqLywKIAkJCQk2RTBFNTY5OTE4M0JGRkU2MDBFMEU4RDUg
LyogRmxvYXRSb3VuZGVkUmVjdC5jcHAgKi8sCiAJCQkJNkUwRTU2OUExODNCRkZFNjAwRTBFOEQ1
IC8qIEZsb2F0Um91bmRlZFJlY3QuaCAqLywKIAkJCQlCMjc1MzUzRTBCMDUzODE0MDAyQ0U2NEYg
LyogRmxvYXRTaXplLmNwcCAqLywKQEAgLTM0NjY1LDYgKzM0NjY4LDcgQEAKIAkJCQk2RUM0ODBB
MjE2RUE2MzhBMDBBNDhEQ0IgLyogRmxvYXRQb2x5Z29uLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkQ3MjM4MjBFQzhCRDkzMDBDQTVERDcgLyogRmxvYXRRdWFkLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCMjc1MzU2QjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0LmggaW4gSGVhZGVycyAqLywK
KwkJCQlCMzc3MzQ2QjBCMDQxOTE2NjAyQ0U2NEYgLyogRmxvYXRPckxheW91dFJlY3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTZFMEU1NjlDMTgzQkZGRTYwMEUwRThENSAvKiBGbG9hdFJvdW5kZWRS
ZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjc1MzU2RDBCMDUzODE0MDAyQ0U2NEYgLyogRmxv
YXRTaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQk1OENEMzVDQjE4RUI0QzM5MDBCOUYzQUMgLyog
RmxvYXRTaXplSGFzaC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IGFjZWJkYjM0NjRiZmUxZjI3
NWRlNGFiMDhiYTE4ZGY4NTY4ZWJkODMuLmM5NzNjNWE0ZTUwYjBjNjNlMWI0NDM1MWRmNjU2Mjhm
MjdhNjE2YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb24uY3BwCkBAIC01NjAsMTcgKzU2MCw2IEBAIHN0YXRpYyBMYXlvdXRSZWN0IHNp
emluZ0JveChSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQogICAgIHJldHVybiBib3guc3R5bGUoKS5i
b3hTaXppbmcoKSA9PSBCb3hTaXppbmc6OkJvcmRlckJveCA/IGJveC5ib3JkZXJCb3hSZWN0KCkg
OiBib3guY29tcHV0ZWRDU1NDb250ZW50Qm94UmVjdCgpOwogfQogCi1zdGF0aWMgRmxvYXRSZWN0
IHRyYW5zZm9ybVJlZmVyZW5jZUJveChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJl
bmRlckVsZW1lbnQmIHJlbmRlcmVyKQotewotICAgIGlmIChpczxSZW5kZXJCb3g+KHJlbmRlcmVy
KSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpLnJlZmVyZW5j
ZUJveCh0cmFuc2Zvcm1Cb3hUb0NTU0JveFR5cGUoc3R5bGUudHJhbnNmb3JtQm94KCkpKTsKLQot
ICAgIGlmIChpczxTVkdFbGVtZW50PihyZW5kZXJlci5lbGVtZW50KCkpKQotICAgICAgICByZXR1
cm4gU1ZHUmVuZGVyU3VwcG9ydDo6dHJhbnNmb3JtUmVmZXJlbmNlQm94KHJlbmRlcmVyLCBkb3du
Y2FzdDxTVkdFbGVtZW50PigqcmVuZGVyZXIuZWxlbWVudCgpKSwgc3R5bGUpOwotCi0gICAgcmV0
dXJuIHsgfTsKLX0KLQogc3RhdGljIFJlZjxDU1NGdW5jdGlvblZhbHVlPiBtYXRyaXhUcmFuc2Zv
cm1WYWx1ZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAgUmVmUHRyPENTU0Z1bmN0aW9uVmFsdWU+IHRyYW5zZm9y
bVZhbHVlOwpAQCAtNjIzLDcgKzYxMiw3IEBAIHN0YXRpYyBSZWY8Q1NTVmFsdWU+IGNvbXB1dGVk
VHJhbnNmb3JtKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsCiAgICAg
ICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZU5vbmUpOwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwot
ICAgIHN0eWxlLmFwcGx5VHJhbnNmb3JtKHRyYW5zZm9ybSwgdHJhbnNmb3JtUmVmZXJlbmNlQm94
KHN0eWxlLCAqcmVuZGVyZXIpLCB7IH0pOworICAgIHN0eWxlLmFwcGx5VHJhbnNmb3JtKHRyYW5z
Zm9ybSwgcmVuZGVyZXItPnRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3Qoc3R5bGUpLCB7IH0pOwog
ICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGZsYXR0ZW4gdG8gYW4gYWZmaW5lIHRyYW5z
Zm9ybSBpZiBFTkFCTEUoM0RfVFJBTlNGT1JNUykgaXMgb2ZmLCBieSBkZXNpZ24uCiAKICAgICAv
LyBGSVhNRTogTmVlZCB0byBwcmludCBvdXQgaW5kaXZpZHVhbCBmdW5jdGlvbnMgKGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzkyNCkKQEAgLTM4NDAsNyArMzgyOSw3
IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6dmFsdWVGb3JQcm9w
ZXJ0eUluU3R5bGUoY29uc3QgUmVuZGVyU3R5CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlQZXJz
cGVjdGl2ZU9yaWdpbjogewogICAgICAgICAgICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVMaXN0Ojpj
cmVhdGVTcGFjZVNlcGFyYXRlZCgpOwogICAgICAgICAgICAgaWYgKHJlbmRlcmVyKSB7Ci0gICAg
ICAgICAgICAgICAgYXV0byBib3ggPSB0cmFuc2Zvcm1SZWZlcmVuY2VCb3goc3R5bGUsICpyZW5k
ZXJlcik7CisgICAgICAgICAgICAgICAgRmxvYXRSZWN0IGJveCA9IHJlbmRlcmVyLT50cmFuc2Zv
cm1SZWZlcmVuY2VCb3hSZWN0KHN0eWxlKTsKICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQo
em9vbUFkanVzdGVkUGl4ZWxWYWx1ZShtaW5pbXVtVmFsdWVGb3JMZW5ndGgoc3R5bGUucGVyc3Bl
Y3RpdmVPcmlnaW5YKCksIGJveC53aWR0aCgpKSwgc3R5bGUpKTsKICAgICAgICAgICAgICAgICBs
aXN0LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShtaW5pbXVtVmFsdWVGb3JMZW5ndGgo
c3R5bGUucGVyc3BlY3RpdmVPcmlnaW5ZKCksIGJveC5oZWlnaHQoKSksIHN0eWxlKSk7CiAgICAg
ICAgICAgICB9IGVsc2UgewpAQCAtMzg5Niw3ICszODg1LDcgQEAgUmVmUHRyPENTU1ZhbHVlPiBD
b21wdXRlZFN0eWxlRXh0cmFjdG9yOjp2YWx1ZUZvclByb3BlcnR5SW5TdHlsZShjb25zdCBSZW5k
ZXJTdHkKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVRyYW5zZm9ybU9yaWdpbjogewogICAgICAg
ICAgICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwog
ICAgICAgICAgICAgaWYgKHJlbmRlcmVyKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBib3ggPSB0
cmFuc2Zvcm1SZWZlcmVuY2VCb3goc3R5bGUsICpyZW5kZXJlcik7CisgICAgICAgICAgICAgICAg
RmxvYXRSZWN0IGJveCA9IHJlbmRlcmVyLT50cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KHN0eWxl
KTsKICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZSht
aW5pbXVtVmFsdWVGb3JMZW5ndGgoc3R5bGUudHJhbnNmb3JtT3JpZ2luWCgpLCBib3gud2lkdGgo
KSksIHN0eWxlKSk7CiAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHpvb21BZGp1c3RlZFBp
eGVsVmFsdWUobWluaW11bVZhbHVlRm9yTGVuZ3RoKHN0eWxlLnRyYW5zZm9ybU9yaWdpblkoKSwg
Ym94LmhlaWdodCgpKSwgc3R5bGUpKTsKICAgICAgICAgICAgICAgICBpZiAoc3R5bGUudHJhbnNm
b3JtT3JpZ2luWigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRPckxheW91dFJlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0T3JMYXlvdXRSZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmI4ZmZjNDJiY2Y0NDMxMDY5MTcxYWIw
MWYzZDBhMjk2ZjVlNTI5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0T3JMYXlvdXRSZWN0LmgKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoYykgMjAyMiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKKyNpbmNsdWRlIDxvcHRpb25hbD4KKyNpbmNsdWRl
IDx2YXJpYW50PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZsb2F0T3JMYXlvdXRS
ZWN0IHsKK3B1YmxpYzoKKyAgICBGbG9hdE9yTGF5b3V0UmVjdCgpID0gZGVmYXVsdDsKKworICAg
IEZsb2F0T3JMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICAgICAgOiBtX2Rh
dGEgeyByZWN0IH0KKyAgICB7CisgICAgfQorCisgICAgRmxvYXRPckxheW91dFJlY3QoY29uc3Qg
TGF5b3V0UmVjdCYgcmVjdCkKKyAgICAgICAgOiBtX2RhdGEgeyByZWN0IH0KKyAgICB7CisgICAg
fQorCisgICAgfkZsb2F0T3JMYXlvdXRSZWN0KCkgPSBkZWZhdWx0OworCisgICAgb3BlcmF0b3Ig
RmxvYXRSZWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc0Zsb2F0UmVjdCgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZsb2F0UmVjdCgpOworICAgICAgICBBU1NFUlQoaXNMYXlvdXRSZWN0
KCkpOworICAgICAgICByZXR1cm4gbGF5b3V0UmVjdCgpOworICAgIH0KKworICAgIEZsb2F0UmVj
dCByZWN0Rm9yUGFpbnRpbmcoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAoaXNGbG9hdFJlY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBmbG9hdFJlY3Qo
KTsKKyAgICAgICAgQVNTRVJUKGlzTGF5b3V0UmVjdCgpKTsKKyAgICAgICAgcmV0dXJuIHNuYXBS
ZWN0VG9EZXZpY2VQaXhlbHMobGF5b3V0UmVjdCgpLCBkZXZpY2VTY2FsZUZhY3Rvcik7CisgICAg
fQorCisgICAgLy8gQ29udmVuaWVuY2UgZnVuY3Rpb25zOgorICAgIC8vIFVzaW5nIG1vdmUoKSB0
aGUgbG9jYXRpb24gb2YgdGhlIHJlY3QgY2FuIGJlIGFsdGVyZWQsIHJlZ2FyZGxlc3Mgb2YgaXRz
IHR5cGUuCisgICAgdm9pZCBtb3ZlKGNvbnN0IExheW91dFNpemUmIHNpemUpCisgICAgeworICAg
ICAgICBpZiAoaXNGbG9hdFJlY3QoKSkgeworICAgICAgICAgICAgZmxvYXRSZWN0KCkubW92ZShz
aXplKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoaXNM
YXlvdXRSZWN0KCkpOworICAgICAgICBsYXlvdXRSZWN0KCkubW92ZShzaXplKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgY29uc3RleHByIGJvb2wgaXNGbG9hdFJlY3QoKSBjb25zdCB7IHJldHVy
biBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPEZsb2F0UmVjdD4obV9kYXRhKTsgfQorICAgIGNvbnN0
IEZsb2F0UmVjdCYgZmxvYXRSZWN0KCkgY29uc3QgeyByZXR1cm4gc3RkOjpnZXQ8RmxvYXRSZWN0
PihtX2RhdGEpOyB9CisgICAgRmxvYXRSZWN0JiBmbG9hdFJlY3QoKSB7IHJldHVybiBzdGQ6Omdl
dDxGbG9hdFJlY3Q+KG1fZGF0YSk7IH0KKworICAgIGNvbnN0ZXhwciBib29sIGlzTGF5b3V0UmVj
dCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8TGF5b3V0UmVjdD4obV9k
YXRhKTsgfQorICAgIGNvbnN0IExheW91dFJlY3QmIGxheW91dFJlY3QoKSBjb25zdCB7IHJldHVy
biBzdGQ6OmdldDxMYXlvdXRSZWN0PihtX2RhdGEpOyB9CisgICAgTGF5b3V0UmVjdCYgbGF5b3V0
UmVjdCgpIHsgcmV0dXJuIHN0ZDo6Z2V0PExheW91dFJlY3Q+KG1fZGF0YSk7IH0KKworICAgIHN0
ZDo6dmFyaWFudDxGbG9hdFJlY3QsIExheW91dFJlY3Q+IG1fZGF0YTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXgg
YzQxNmJlOTFmZjNmNTY5NzJiY2FiNGEwNWM2ODk1M2Q4OWJjNjEzMC4uM2VlYTIwZjZhOGU3MGRi
OGI5ZDI5ZDliNzc5MzQ2Njc1MTA3NzU1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHAKQEAgLTc2Niw5ICs3NjYsOCBAQCBMYXlvdXRQb2ludCBSZW5kZXJCb3g6OmNvbnRl
bnRCb3hMb2NhdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIHsgYm9yZGVyTGVmdCgpICsgcGFkZGlu
Z0xlZnQoKSArIHNjcm9sbGJhclNwYWNlLCBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSB9Owog
fQogCi1MYXlvdXRSZWN0IFJlbmRlckJveDo6cmVmZXJlbmNlQm94KENTU0JveFR5cGUgYm94VHlw
ZSkgY29uc3QKK0Zsb2F0T3JMYXlvdXRSZWN0IFJlbmRlckJveDo6cmVmZXJlbmNlQm94UmVjdChD
U1NCb3hUeXBlIGJveFR5cGUpIGNvbnN0CiB7Ci0gICAgTGF5b3V0UmVjdCByZWZlcmVuY2VCb3g7
CiAgICAgc3dpdGNoIChib3hUeXBlKSB7CiAgICAgY2FzZSBDU1NCb3hUeXBlOjpDb250ZW50Qm94
OgogICAgIGNhc2UgQ1NTQm94VHlwZTo6RmlsbEJveDoKQEAgLTc4NCw3ICs3ODMsOSBAQCBMYXlv
dXRSZWN0IFJlbmRlckJveDo6cmVmZXJlbmNlQm94KENTU0JveFR5cGUgYm94VHlwZSkgY29uc3QK
ICAgICBjYXNlIENTU0JveFR5cGU6OkJveE1pc3Npbmc6CiAgICAgICAgIHJldHVybiBib3JkZXJC
b3hSZWN0KCk7CiAgICAgfQotICAgIHJldHVybiB7IH07CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogfQogCiBJbnRSZWN0IFJlbmRlckJveDo6
YWJzb2x1dGVDb250ZW50Qm94KCkgY29uc3QKQEAgLTE0NjAsOCArMTQ2MSw3IEBAIGJvb2wgUmVu
ZGVyQm94OjpoaXRUZXN0Q2xpcFBhdGgoY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9j
YXRpb24sIGNvbnN0IExhCiAgICAgc3dpdGNoIChzdHlsZSgpLmNsaXBQYXRoKCktPnR5cGUoKSkg
ewogICAgIGNhc2UgUGF0aE9wZXJhdGlvbjo6U2hhcGU6IHsKICAgICAgICAgYXV0byYgY2xpcFBh
dGggPSBkb3duY2FzdDxTaGFwZVBhdGhPcGVyYXRpb24+KCpzdHlsZSgpLmNsaXBQYXRoKCkpOwot
ICAgICAgICBhdXRvIHJlZmVyZW5jZUJveFJlY3QgPSByZWZlcmVuY2VCb3goY2xpcFBhdGgucmVm
ZXJlbmNlQm94KCkpOwotICAgICAgICBpZiAoIWNsaXBQYXRoLnBhdGhGb3JSZWZlcmVuY2VSZWN0
KHJlZmVyZW5jZUJveFJlY3QpLmNvbnRhaW5zKGhpdFRlc3RMb2NhdGlvbkluTG9jYWxDb29yZGlu
YXRlcywgY2xpcFBhdGgud2luZFJ1bGUoKSkpCisgICAgICAgIGlmICghY2xpcFBhdGgucGF0aEZv
clJlZmVyZW5jZVJlY3QocmVmZXJlbmNlQm94UmVjdChjbGlwUGF0aC5yZWZlcmVuY2VCb3goKSkp
LmNvbnRhaW5zKGhpdFRlc3RMb2NhdGlvbkluTG9jYWxDb29yZGluYXRlcywgY2xpcFBhdGgud2lu
ZFJ1bGUoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAppbmRleCBlZDc3NzcwZTdlNDI5ZDVi
NzYyYzBlYmMyOTFiYWYwMmY0NzAyMzI1Li5kMzUwYTQ2MGRjNDUzNWJkM2ZlOTU3NmRhYzBkYzI3
MmU3Y2Y0MTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCkBAIC0xNjcsOCAr
MTY3LDggQEAgcHVibGljOgogICAgIExheW91dFJlY3QgY29udGVudEJveFJlY3QoKSBjb25zdDsK
ICAgICBMYXlvdXRQb2ludCBjb250ZW50Qm94TG9jYXRpb24oKSBjb25zdDsKIAotICAgIC8vIC5o
dHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXRyYW5zZm9ybXMtMS8jcmVmZXJlbmNlLWJveAot
ICAgIExheW91dFJlY3QgcmVmZXJlbmNlQm94KENTU0JveFR5cGUpIGNvbnN0OworICAgIC8vIGh0
dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtdHJhbnNmb3Jtcy0xLyNyZWZlcmVuY2UtYm94CisgICAg
RmxvYXRPckxheW91dFJlY3QgcmVmZXJlbmNlQm94UmVjdChDU1NCb3hUeXBlKSBjb25zdCBmaW5h
bDsKIAogICAgIC8vIFRoZSBjb250ZW50IGJveCBpbiBhYnNvbHV0ZSBjb29yZHMuIElnbm9yZXMg
dHJhbnNmb3Jtcy4KICAgICBJbnRSZWN0IGFic29sdXRlQ29udGVudEJveCgpIGNvbnN0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCmluZGV4IGU5MzJiYzc0YjFm
ZGViNzRhZTMyZDJiZjgwNzA5ZjdjNWViNmRkMjUuLmIxNTg1NzFjMzg5ZTkxZmIwYTIxYmVmYjQ5
OTg0NzlhYTc3YTU5ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVu
dC5jcHAKQEAgLTc4LDYgKzc4LDcgQEAKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVk
ZSAiU1ZHRWxlbWVudFR5cGVIZWxwZXJzLmgiCiAjaW5jbHVkZSAiU1ZHSW1hZ2UuaCIKKyNpbmNs
dWRlICJTVkdMZW5ndGhDb250ZXh0LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgog
I2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgpAQCAtMjM4OSw0
ICsyMzkwLDM4IEBAIE92ZXJmbG93IFJlbmRlckVsZW1lbnQ6OmVmZmVjdGl2ZU92ZXJmbG93WSgp
IGNvbnN0CiAgICAgcmV0dXJuIG92ZXJmbG93WTsKIH0KIAorLy8gaHR0cHM6Ly93d3cudzMub3Jn
L1RSL2Nzcy10cmFuc2Zvcm1zLTEvI3RyYW5zZm9ybS1ib3gKK0Zsb2F0T3JMYXlvdXRSZWN0IFJl
bmRlckVsZW1lbnQ6OnJlZmVyZW5jZUJveFJlY3QoQ1NTQm94VHlwZSBib3hUeXBlKSBjb25zdAor
eworICAgIC8vIENTUyBib3ggbW9kZWwgY29kZSBpcyBpbXBsZW1lbnRlZCBpbiBSZW5kZXJCb3g6
OnJlZmVyZW5jZUJveFJlY3QoKS4KKworICAgIC8vIEZvciB0aGUgbGVnYWN5IFNWRyBlbmdpbmUs
IFJlbmRlckVsZW1lbnQgaXMgdGhlIG9ubHkgY2xhc3MgdGhhdCdzCisgICAgLy8gcHJlc2VudCBp
biB0aGUgYW5jZXN0b3IgY2hhaW4gb2YgYWxsIFNWRyByZW5kZXJlcnMuIEluIExCU0UgdGhlCisg
ICAgLy8gY29tbW9uIGNsYXNzIGlzIFJlbmRlckxheWVyTW9kZWxPYmplY3QuIE9uY2UgdGhlIGxl
Z2FjeSBTVkcgZW5naW5lCisgICAgLy8gaXMgcmVtb3ZlZCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBi
ZSBtb3ZlZCB0byBSZW5kZXJMYXllck1vZGVsT2JqZWN0LgorICAgIC8vIEFzIHRoaXMgbWV0aG9k
IGlzIHVzZWQgYnkgYm90aCBTVkcgZW5naW5lcywgd2UgbmVlZCB0byBwbGFjZSBpdAorICAgIC8v
IGhlcmUgaW4gUmVuZGVyRWxlbWVudCwgYXMgdGVtcG9yYXJ5IHNvbHV0aW9uLgorICAgIGlmICgh
aXM8U1ZHRWxlbWVudD4oZWxlbWVudCgpKSkKKyAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsK
KworICAgIHN3aXRjaCAoYm94VHlwZSkgeworICAgIGNhc2UgQ1NTQm94VHlwZTo6Qm94TWlzc2lu
ZzoKKyAgICBjYXNlIENTU0JveFR5cGU6OkNvbnRlbnRCb3g6CisgICAgY2FzZSBDU1NCb3hUeXBl
OjpQYWRkaW5nQm94OgorICAgIGNhc2UgQ1NTQm94VHlwZTo6RmlsbEJveDoKKyAgICAgICAgcmV0
dXJuIG9iamVjdEJvdW5kaW5nQm94KCk7CisgICAgY2FzZSBDU1NCb3hUeXBlOjpCb3JkZXJCb3g6
CisgICAgY2FzZSBDU1NCb3hUeXBlOjpNYXJnaW5Cb3g6CisgICAgY2FzZSBDU1NCb3hUeXBlOjpT
dHJva2VCb3g6CisgICAgICAgIHJldHVybiBzdHJva2VCb3VuZGluZ0JveCgpOworICAgIGNhc2Ug
Q1NTQm94VHlwZTo6Vmlld0JveDoKKyAgICAgICAgRmxvYXRTaXplIHZpZXdwb3J0U2l6ZTsKKyAg
ICAgICAgU1ZHTGVuZ3RoQ29udGV4dChkb3duY2FzdDxTVkdFbGVtZW50PihlbGVtZW50KCkpKS5k
ZXRlcm1pbmVWaWV3cG9ydCh2aWV3cG9ydFNpemUpOworICAgICAgICByZXR1cm4gRmxvYXRSZWN0
KHsgfSwgdmlld3BvcnRTaXplKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gRmxvYXRSZWN0KCk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRWxlbWVudC5oCmluZGV4IDUxYzU1MmNiZDllN2ZkMmI3Y2JlOWQxMmRjZmEzZjEzMWZm
N2RmMWIuLmJiNjE4NGJjZWViMThjY2JlYTY0N2M0ZmNiMGViOWEwY2MwZmNkNWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaApAQCAtMjIsNiArMjIsNyBAQAogCiAj
cHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkZsb2F0T3JMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAi
SGl0VGVzdFJlcXVlc3QuaCIKICNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKICNpbmNsdWRl
ICJSZW5kZXJPYmplY3QuaCIKQEAgLTI1OCw2ICsyNTksMTMgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBhbmltYXRpb25GaW5pc2hlZChjb25zdCBTdHJpbmcmIC8qIG5hbWUgKi8pIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1SZWxhdGVkUHJvcGVydHlEaWRDaGFuZ2UoKSB7IH0K
IAorICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtdHJhbnNmb3Jtcy0xLyN0cmFuc2Zv
cm0tYm94CisgICAgRmxvYXRPckxheW91dFJlY3QgdHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdChj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0IHsgcmV0dXJuIHJlZmVyZW5jZUJveFJlY3Qo
dHJhbnNmb3JtQm94VG9DU1NCb3hUeXBlKHN0eWxlLnRyYW5zZm9ybUJveCgpKSk7IH0KKyAgICBG
bG9hdE9yTGF5b3V0UmVjdCB0cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCkgY29uc3QgeyByZXR1
cm4gdHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdChzdHlsZSgpKTsgfQorCisgICAgLy8gaHR0cHM6
Ly93d3cudzMub3JnL1RSL2Nzcy10cmFuc2Zvcm1zLTEvI3JlZmVyZW5jZS1ib3gKKyAgICB2aXJ0
dWFsIEZsb2F0T3JMYXlvdXRSZWN0IHJlZmVyZW5jZUJveFJlY3QoQ1NTQm94VHlwZSkgY29uc3Q7
CisKICAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoTW9ub3RvbmljVGltZSA9IE1v
bm90b25pY1RpbWUoKSkgeyB9CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBhbmlt
YXRlZFN0eWxlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmlu
ZGV4IDg1MGJkZTQ4ZTQ5MjhlODZkYzE3NmI2MjMyMWZlZWQ5YjY4NmMzY2QuLjMwNzg0MDJiYjM4
OTkzOWVmNWM1Mjg3NzViOWY3NWYxY2UxMDcwYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcApAQCAtMTI5NiwyMSArMTI5NiwxOCBAQCB2b2lkIFJlbmRlckxheWVy
OjpkaXJ0eUFuY2VzdG9yQ2hhaW5IYXNCbGVuZGluZ0Rlc2NlbmRhbnRzKCkKIH0KICNlbmRpZgog
Ci1zdGF0aWMgaW5saW5lIExheW91dFJlY3QgY29tcHV0ZVJlZmVyZW5jZVJlY3RGcm9tQm94KGNv
bnN0IFJlbmRlckJveCYgYm94LCBDU1NCb3hUeXBlIGJveFR5cGUsIGNvbnN0IExheW91dFNpemUm
IG9mZnNldEZyb21Sb290KQorc3RhdGljIGlubGluZSBGbG9hdE9yTGF5b3V0UmVjdCBjb21wdXRl
UmVmZXJlbmNlQm94KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyLCBDU1NC
b3hUeXBlIGJveFR5cGUsIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290LCBjb25zdCBM
YXlvdXRSZWN0JiByb290UmVsYXRpdmVCb3VuZHMpCiB7Ci0gICAgYXV0byByZWZlcmVuY2VCb3gg
PSBib3gucmVmZXJlbmNlQm94KGJveFR5cGUpOwotICAgIHJlZmVyZW5jZUJveC5tb3ZlKG9mZnNl
dEZyb21Sb290KTsKLSAgICByZXR1cm4gcmVmZXJlbmNlQm94OwotfQorICAgIC8vIEZJWE1FOiBb
TEJTRV0gVXBzdHJlYW0gdHJhbnNmb3JtIHN1cHBvcnQgZm9yIFJlbmRlclNWR01vZGVsT2JqZWN0
IGRlcml2ZWQgcmVuZGVyZXJzCiAKLXN0YXRpYyBpbmxpbmUgTGF5b3V0UmVjdCBjb21wdXRlUmVm
ZXJlbmNlQm94KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIENTU0JveFR5cGUgYm94VHlw
ZSwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3QsIGNvbnN0IExheW91dFJlY3QmIHJv
b3RSZWxhdGl2ZUJvdW5kcykKLXsKICAgICAvLyBGSVhNRTogU3VwcG9ydCBkaWZmZXJlbnQgcmVm
ZXJlbmNlIGJveGVzIGZvciBpbmxpbmUgY29udGVudC4KICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5MDQ3CiAgICAgaWYgKCFyZW5kZXJlci5pc0JveCgp
KQogICAgICAgICByZXR1cm4gcm9vdFJlbGF0aXZlQm91bmRzOwogICAgIAotICAgIHJldHVybiBj
b21wdXRlUmVmZXJlbmNlUmVjdEZyb21Cb3goZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlciks
IGJveFR5cGUsIG9mZnNldEZyb21Sb290KTsKKyAgICBhdXRvIHJlZmVyZW5jZUJveCA9IHJlbmRl
cmVyLnJlZmVyZW5jZUJveFJlY3QoYm94VHlwZSk7CisgICAgcmVmZXJlbmNlQm94Lm1vdmUob2Zm
c2V0RnJvbVJvb3QpOworICAgIHJldHVybiByZWZlcmVuY2VCb3g7CiB9CiAKIHZvaWQgUmVuZGVy
TGF5ZXI6OnVwZGF0ZVRyYW5zZm9ybSgpCkBAIC0xMzMyLDEyICsxMzI5LDggQEAgdm9pZCBSZW5k
ZXJMYXllcjo6dXBkYXRlVHJhbnNmb3JtKCkKICAgICBpZiAoaGFzVHJhbnNmb3JtKSB7CiAgICAg
ICAgIG1fdHJhbnNmb3JtLT5tYWtlSWRlbnRpdHkoKTsKIAotICAgICAgICAvLyBGSVhNRTogW0xC
U0VdIFVwc3RyZWFtIHJlZmVyZW5jZSBib3ggY29tcHV0YXRpb24gZm9yIFJlbmRlclNWR01vZGVs
T2JqZWN0IGRlcml2ZWQgcmVuZGVyZXJzCi0gICAgICAgIEZsb2F0UmVjdCByZWZlcmVuY2VCb3g7
Ci0gICAgICAgIGlmIChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKQotICAgICAgICAgICAgcmVm
ZXJlbmNlQm94ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhkb3duY2FzdDxSZW5kZXJCb3g+KHJl
bmRlcmVyKCkpLnJlZmVyZW5jZUJveCh0cmFuc2Zvcm1Cb3hUb0NTU0JveFR5cGUocmVuZGVyZXIo
KS5zdHlsZSgpLnRyYW5zZm9ybUJveCgpKSksIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VT
Y2FsZUZhY3RvcigpKTsKLQotICAgICAgICByZW5kZXJlcigpLmFwcGx5VHJhbnNmb3JtKCptX3Ry
YW5zZm9ybSwgcmVmZXJlbmNlQm94KTsKKyAgICAgICAgYXV0byByZWZlcmVuY2VCb3hSZWN0Rm9y
UGFpbnRpbmcgPSByZW5kZXJlcigpLnRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3QoKS5yZWN0Rm9y
UGFpbnRpbmcocmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOworICAg
ICAgICByZW5kZXJlcigpLmFwcGx5VHJhbnNmb3JtKCptX3RyYW5zZm9ybSwgcmVmZXJlbmNlQm94
UmVjdEZvclBhaW50aW5nKTsKICAgICAgICAgbWFrZU1hdHJpeFJlbmRlcmFibGUoKm1fdHJhbnNm
b3JtLCBjYW5SZW5kZXIzRFRyYW5zZm9ybXMoKSk7CiAgICAgfQogCkBAIC0xMzY2LDEwICsxMzU5
LDEwIEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4IFJlbmRlckxheWVyOjpjdXJyZW50VHJhbnNmb3Jt
KE9wdGlvblNldDxSZW5kZXJTdHlsZTo6VHJhbnNmCiAgICAgYXV0byBzdHlsZWFibGUgPSBTdHls
ZWFibGU6OmZyb21SZW5kZXJlcihyZW5kZXJCb3gpOwogICAgIGlmICgoc3R5bGVhYmxlICYmIHN0
eWxlYWJsZS0+aXNSdW5uaW5nQWNjZWxlcmF0ZWRUcmFuc2Zvcm1BbmltYXRpb24oKSkgfHwgIW9w
dGlvbnMuY29udGFpbnMoUmVuZGVyU3R5bGU6OlRyYW5zZm9ybU9wZXJhdGlvbk9wdGlvbjo6VHJh
bnNmb3JtT3JpZ2luKSkgewogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGFu
aW1hdGVkU3R5bGUgPSByZW5kZXJCb3guYW5pbWF0ZWRTdHlsZSgpOwotICAgICAgICBhdXRvIHBp
eGVsU25hcHBlZEJvcmRlclJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKHJlbmRlckJveC5y
ZWZlcmVuY2VCb3godHJhbnNmb3JtQm94VG9DU1NCb3hUeXBlKGFuaW1hdGVkU3R5bGUtPnRyYW5z
Zm9ybUJveCgpKSksIHJlbmRlckJveC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwor
ICAgICAgICBhdXRvIHJlZmVyZW5jZUJveFJlY3RGb3JQYWludGluZyA9IHJlbmRlckJveC50cmFu
c2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCkucmVjdEZvclBhaW50aW5nKHJlbmRlckJveC5kb2N1bWVu
dCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwogCiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHRyYW5zZm9ybTsKLSAgICAgICAgYW5pbWF0ZWRTdHlsZS0+YXBwbHlUcmFuc2Zvcm0odHJhbnNm
b3JtLCBwaXhlbFNuYXBwZWRCb3JkZXJSZWN0LCBvcHRpb25zKTsKKyAgICAgICAgYW5pbWF0ZWRT
dHlsZS0+YXBwbHlUcmFuc2Zvcm0odHJhbnNmb3JtLCByZWZlcmVuY2VCb3hSZWN0Rm9yUGFpbnRp
bmcsIG9wdGlvbnMpOwogCiAgICAgICAgIG1ha2VNYXRyaXhSZW5kZXJhYmxlKHRyYW5zZm9ybSwg
Y2FuUmVuZGVyM0RUcmFuc2Zvcm1zKCkpOwogICAgICAgICByZXR1cm4gdHJhbnNmb3JtOwpAQCAt
MTgwMSwxMSArMTc5NCwxMSBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJMYXllcjo6cGVy
c3BlY3RpdmVUcmFuc2Zvcm0oY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZQogICAgICAgICByZXR1
cm4geyB9OwogCiAgICAgYXV0byBkZXZpY2VTY2FsZUZhY3RvciA9IHJlbmRlckJveC5kb2N1bWVu
dCgpLmRldmljZVNjYWxlRmFjdG9yKCk7Ci0gICAgYXV0byByZWZlcmVuY2VCb3ggPSByZW5kZXJC
b3gucmVmZXJlbmNlQm94KHRyYW5zZm9ybUJveFRvQ1NTQm94VHlwZShzdHlsZS50cmFuc2Zvcm1C
b3goKSkpOwotICAgIGF1dG8gcGl4ZWxTbmFwcGVkUmVmZXJlbmNlQm94ID0gc25hcFJlY3RUb0Rl
dmljZVBpeGVscyhyZWZlcmVuY2VCb3gsIGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICBhdXRvIHJl
ZmVyZW5jZUJveFJlY3RGb3JQYWludGluZyA9IHJlbmRlckJveC50cmFuc2Zvcm1SZWZlcmVuY2VC
b3hSZWN0KCkucmVjdEZvclBhaW50aW5nKGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICAvLyBGSVhN
RTogW0xCU0VdIEF2b2lkIHBpeGVsIHNuYXBwaW5nIGluIFNWRyBzdWJ0cmVlLgogICAgIGF1dG8g
c25hcHBlZExheWVyUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMobGF5ZXJSZWN0LCBkZXZp
Y2VTY2FsZUZhY3Rvcik7CiAKLSAgICBhdXRvIHBlcnNwZWN0aXZlT3JpZ2luID0gcGl4ZWxTbmFw
cGVkUmVmZXJlbmNlQm94LmxvY2F0aW9uKCkgLSB0b0Zsb2F0U2l6ZShzbmFwcGVkTGF5ZXJSZWN0
LmxvY2F0aW9uKCkpICsgZmxvYXRQb2ludEZvckxlbmd0aFBvaW50KHN0eWxlLnBlcnNwZWN0aXZl
T3JpZ2luKCksIHBpeGVsU25hcHBlZFJlZmVyZW5jZUJveC5zaXplKCkpOworICAgIGF1dG8gcGVy
c3BlY3RpdmVPcmlnaW4gPSByZWZlcmVuY2VCb3hSZWN0Rm9yUGFpbnRpbmcubG9jYXRpb24oKSAt
IHRvRmxvYXRTaXplKHNuYXBwZWRMYXllclJlY3QubG9jYXRpb24oKSkgKyBmbG9hdFBvaW50Rm9y
TGVuZ3RoUG9pbnQoc3R5bGUucGVyc3BlY3RpdmVPcmlnaW4oKSwgcmVmZXJlbmNlQm94UmVjdEZv
clBhaW50aW5nLnNpemUoKSk7CiAKICAgICAvLyBBIHBlcnNwZWN0aXZlIG9yaWdpbiBvZiAwLDAg
bWFrZXMgdGhlIHZhbmlzaGluZyBwb2ludCBpbiB0aGUgY2VudGVyIG9mIHRoZSBlbGVtZW50Lgog
ICAgIC8vIFdlIHdhbnQgaXQgdG8gYmUgaW4gdGhlIHRvcC1sZWZ0LCBzbyBzdWJ0cmFjdCBoYWxm
IHRoZSBoZWlnaHQgYW5kIHdpZHRoLgpAQCAtMTgyMyw2ICsxODE2LDcgQEAgRmxvYXRQb2ludCBS
ZW5kZXJMYXllcjo6cGVyc3BlY3RpdmVPcmlnaW4oKSBjb25zdAogewogICAgIGlmICghcmVuZGVy
ZXIoKS5oYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKSkKICAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICAvLyBGSVhNRTogVGhpcyB1c2VzIHRoZSB3cm9uZywgdHJhbnNmb3JtLWJveCB1bmF3YXJl
LCBnZW9tZXRyeS4KICAgICByZXR1cm4gZmxvYXRQb2ludEZvckxlbmd0aFBvaW50KHJlbmRlcmVy
KCkuc3R5bGUoKS5wZXJzcGVjdGl2ZU9yaWdpbigpLCByZW5kZXJlckJvcmRlckJveFJlY3QoKS5z
aXplKCkpOwogfQogCkBAIC0zMjEyLDIyICszMjA2LDggQEAgc3RkOjpwYWlyPFBhdGgsIFdpbmRS
dWxlPiBSZW5kZXJMYXllcjo6Y29tcHV0ZUNsaXBQYXRoKGNvbnN0IExheW91dFNpemUmIG9mZnNl
dEYKIAogICAgIGlmIChpczxTaGFwZVBhdGhPcGVyYXRpb24+KCpzdHlsZS5jbGlwUGF0aCgpKSkg
ewogICAgICAgICBhdXRvJiBjbGlwUGF0aCA9IGRvd25jYXN0PFNoYXBlUGF0aE9wZXJhdGlvbj4o
KnN0eWxlLmNsaXBQYXRoKCkpOwotCi0gICAgICAgIExheW91dFJlY3QgcmVmZXJlbmNlQm94Owot
ICAgICAgICBpZiAoaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkgewotICAgICAgICAgICAgcmVm
ZXJlbmNlQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5yZWZlcmVuY2VCb3go
Y2xpcFBhdGgucmVmZXJlbmNlQm94KCkpOwotICAgICAgICAgICAgcmVmZXJlbmNlQm94Lm1vdmUo
b2Zmc2V0RnJvbVJvb3QpOwotI2lmIEVOQUJMRShMQVlFUl9CQVNFRF9TVkdfRU5HSU5FKQotICAg
ICAgICB9IGVsc2UgaWYgKGlzPFJlbmRlclNWR01vZGVsT2JqZWN0PihyZW5kZXJlcigpKSkgewot
ICAgICAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSBjbGlwcGluZyBzdXBwb3J0IGZv
ciBSZW5kZXJTVkdNb2RlbE9iamVjdCBkZXJpdmVkIHJlbmRlcmVycwotI2VuZGlmCi0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBSZWZlcmVuY2UgYm94IGZvciBpbmxpbmVzIGlzIG5v
dCB3ZWxsIGRlZmluZWQ6IGh0dHBzOi8vZ2l0aHViLmNvbS93M2MvY3Nzd2ctZHJhZnRzL2lzc3Vl
cy82MzgzCi0gICAgICAgICAgICByZWZlcmVuY2VCb3ggPSByb290UmVsYXRpdmVCb3VuZHNGb3JO
b25Cb3hlczsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8gc25hcHBlZFJlZmVyZW5jZUJveCA9
IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMocmVmZXJlbmNlQm94LCBkZXZpY2VTY2FsZUZhY3Rvcik7
Ci0gICAgICAgIHJldHVybiB7IGNsaXBQYXRoLnBhdGhGb3JSZWZlcmVuY2VSZWN0KHNuYXBwZWRS
ZWZlcmVuY2VCb3gpLCBjbGlwUGF0aC53aW5kUnVsZSgpIH07CisgICAgICAgIGF1dG8gcmVmZXJl
bmNlQm94UmVjdCA9IGNvbXB1dGVSZWZlcmVuY2VCb3gocmVuZGVyZXIoKSwgY2xpcFBhdGgucmVm
ZXJlbmNlQm94KCksIG9mZnNldEZyb21Sb290LCByb290UmVsYXRpdmVCb3VuZHNGb3JOb25Cb3hl
cyk7CisgICAgICAgIHJldHVybiB7IGNsaXBQYXRoLnBhdGhGb3JSZWZlcmVuY2VSZWN0KHJlZmVy
ZW5jZUJveFJlY3QucmVjdEZvclBhaW50aW5nKGRldmljZVNjYWxlRmFjdG9yKSksIGNsaXBQYXRo
LndpbmRSdWxlKCkgfTsKICAgICB9CiAKICAgICBpZiAoaXM8Qm94UGF0aE9wZXJhdGlvbj4oKnN0
eWxlLmNsaXBQYXRoKCkpICYmIGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpIHsKQEAgLTMyNjks
MTYgKzMyNDksMjAgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2V0dXBDbGlwUGF0aChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dFN0YXRlU2EKICAgICAgICAgICAgIC8vIFVz
ZSB0aGUgYm9yZGVyIGJveCBhcyB0aGUgcmVmZXJlbmNlIGJveCwgZXZlbiB0aG91Z2ggdGhpcyBp
cyBub3QgY2xlYXJseSBzcGVjaWZpZWQ6IGh0dHBzOi8vZ2l0aHViLmNvbS93M2MvY3Nzd2ctZHJh
ZnRzL2lzc3Vlcy81Nzg2LgogICAgICAgICAgICAgLy8gY2xpcHBlZENvbnRlbnRCb3VuZHMgaXMg
dXNlZCBhcyB0aGUgcmVmZXJlbmNlIGJveCBmb3IgaW5saW5lcywgd2hpY2ggaXMgYWxzbyBwb29y
bHkgc3BlY2lmaWVkOiBodHRwczovL2dpdGh1Yi5jb20vdzNjL2Nzc3dnLWRyYWZ0cy9pc3N1ZXMv
NjM4My4KICAgICAgICAgICAgIGF1dG8gcmVmZXJlbmNlQm94ID0gY29tcHV0ZVJlZmVyZW5jZUJv
eChyZW5kZXJlcigpLCBDU1NCb3hUeXBlOjpCb3JkZXJCb3gsIG9mZnNldEZyb21Sb290LCBjbGlw
cGVkQ29udGVudEJvdW5kcyk7Ci0gICAgICAgICAgICBhdXRvIHNuYXBwZWRSZWZlcmVuY2VCb3gg
PSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKHJlZmVyZW5jZUJveCwgcmVuZGVyZXIoKS5kb2N1bWVu
dCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgICAgICAgICAgYXV0byBvZmZzZXQgPSBzbmFw
cGVkUmVmZXJlbmNlQm94LmxvY2F0aW9uKCk7CiAKKyAgICAgICAgICAgIEZsb2F0UmVjdCByZWZl
cmVuY2VCb3hSZWN0ID0gcmVmZXJlbmNlQm94OworICAgICAgICAgICAgcmVmZXJlbmNlQm94UmVj
dC5zZXRMb2NhdGlvbih7IH0pOworCisgICAgICAgICAgICBhdXRvIHJlZmVyZW5jZUJveFJlY3RG
b3JQYWludGluZyA9IHJlZmVyZW5jZUJveC5yZWN0Rm9yUGFpbnRpbmcocmVuZGVyZXIoKS5kb2N1
bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOworICAgICAgICAgICAgYXV0byBvZmZzZXQgPSBy
ZWZlcmVuY2VCb3hSZWN0Rm9yUGFpbnRpbmcubG9jYXRpb24oKTsKKworICAgICAgICAgICAgLy8g
RklYTUU6IFtMQlNFXSBBdm9pZCBwaXhlbCBzbmFwcGluZyBpbiBTVkcgc3VidHJlZS4KICAgICAg
ICAgICAgIGF1dG8gc25hcHBlZENsaXBwaW5nQm91bmRzID0gc25hcFJlY3RUb0RldmljZVBpeGVs
cyhjbGlwcGVkQ29udGVudEJvdW5kcywgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxl
RmFjdG9yKCkpOwogICAgICAgICAgICAgc25hcHBlZENsaXBwaW5nQm91bmRzLm1vdmVCeSgtb2Zm
c2V0KTsKIAogICAgICAgICAgICAgc3RhdGVTYXZlci5zYXZlKCk7CiAgICAgICAgICAgICBjb250
ZXh0LnRyYW5zbGF0ZShvZmZzZXQpOwotICAgICAgICAgICAgRmxvYXRSZWN0IGNsaXBQYXRoUmVm
ZXJlbmNlQm94IHsgeyB9LCByZWZlcmVuY2VCb3guc2l6ZSgpIH07Ci0gICAgICAgICAgICBjbGlw
cGVyUmVuZGVyZXItPmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQoY29udGV4dCwgcmVuZGVyZXIoKSwg
Y2xpcFBhdGhSZWZlcmVuY2VCb3gsIHNuYXBwZWRDbGlwcGluZ0JvdW5kcywgcmVuZGVyZXIoKS5z
dHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAgICAgICBjbGlwcGVyUmVuZGVyZXItPmFw
cGx5Q2xpcHBpbmdUb0NvbnRleHQoY29udGV4dCwgcmVuZGVyZXIoKSwgcmVmZXJlbmNlQm94UmVj
dCwgc25hcHBlZENsaXBwaW5nQm91bmRzLCByZW5kZXJlcigpLnN0eWxlKCkuZWZmZWN0aXZlWm9v
bSgpKTsKICAgICAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKC1vZmZzZXQpOwogICAgICAgICB9
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5k
ZXJTdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3Vw
cG9ydC5jcHAKaW5kZXggY2MzOGVjNzAzMGU2MGNlMTc1OWIxMzI4N2RlMjVmNzNkNTY1Yzg1OC4u
ZTJiZWI0YmE4YzExNTdkY2JiMTI4NjQ5YTNlZGU1NmUzODRlOGQwOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCkBAIC0zNDMsMjYg
KzM0Myw2IEBAIGJvb2wgU1ZHUmVuZGVyU3VwcG9ydDo6ZmlsdGVyc0ZvcmNlQ29udGFpbmVyTGF5
b3V0KGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LUZsb2F0UmVjdCBTVkdSZW5kZXJTdXBwb3J0Ojp0cmFuc2Zvcm1SZWZlcmVuY2VCb3goY29uc3Qg
UmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFNWR0VsZW1lbnQmIGVsZW1lbnQsIGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSkKLXsKLSAgICBzd2l0Y2ggKHN0eWxlLnRyYW5zZm9ybUJveCgp
KSB7Ci0gICAgY2FzZSBUcmFuc2Zvcm1Cb3g6OkJvcmRlckJveDoKLSAgICAgICAgLy8gRm9yIFNW
RyBlbGVtZW50cyB3aXRob3V0IGFuIGFzc29jaWF0ZWQgQ1NTIGxheW91dCBib3gsIHRoZSB1c2Vk
IHZhbHVlIGZvciBib3JkZXItYm94IGlzIHN0cm9rZS1ib3guCi0gICAgY2FzZSBUcmFuc2Zvcm1C
b3g6OlN0cm9rZUJveDoKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVyLnN0cm9rZUJvdW5kaW5nQm94
KCk7Ci0gICAgY2FzZSBUcmFuc2Zvcm1Cb3g6OkNvbnRlbnRCb3g6Ci0gICAgICAgIC8vIEZvciBT
VkcgZWxlbWVudHMgd2l0aG91dCBhbiBhc3NvY2lhdGVkIENTUyBsYXlvdXQgYm94LCB0aGUgdXNl
ZCB2YWx1ZSBmb3IgY29udGVudC1ib3ggaXMgZmlsbC1ib3guCi0gICAgY2FzZSBUcmFuc2Zvcm1C
b3g6OkZpbGxCb3g6Ci0gICAgICAgIHJldHVybiByZW5kZXJlci5vYmplY3RCb3VuZGluZ0JveCgp
OwotICAgIGNhc2UgVHJhbnNmb3JtQm94OjpWaWV3Qm94OiB7Ci0gICAgICAgIEZsb2F0U2l6ZSB2
aWV3cG9ydFNpemU7Ci0gICAgICAgIFNWR0xlbmd0aENvbnRleHQoJmVsZW1lbnQpLmRldGVybWlu
ZVZpZXdwb3J0KHZpZXdwb3J0U2l6ZSk7Ci0gICAgICAgIHJldHVybiBGbG9hdFJlY3QgeyB7IH0s
IHZpZXdwb3J0U2l6ZSB9OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB7IH07Ci19Ci0K
IGlubGluZSBGbG9hdFJlY3QgY2xpcFBhdGhSZWZlcmVuY2VCb3goY29uc3QgUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIsIENTU0JveFR5cGUgYm94VHlwZSkKIHsKICAgICBGbG9hdFJlY3QgcmVmZXJl
bmNlQm94OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5k
ZXJTdXBwb3J0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBv
cnQuaAppbmRleCA5Y2NmY2JlYjU3N2E3NzNkYzg4MDdkOTUzOWQ2MmE4MWU1NjE5Yjg5Li5kNDNk
MGM3Zjc1OGQxNWZiNzA0NmM5MWJlMGNhOWRhNTNkZDg1NjAyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuaApAQCAtODIsOCArODIsNiBAQCBw
dWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBzdHlsZUNoYW5nZWQoUmVuZGVyRWxlbWVudCYsIGNv
bnN0IFJlbmRlclN0eWxlKik7CiAgICAgCi0gICAgc3RhdGljIEZsb2F0UmVjdCB0cmFuc2Zvcm1S
ZWZlcmVuY2VCb3goY29uc3QgUmVuZGVyRWxlbWVudCYsIGNvbnN0IFNWR0VsZW1lbnQmLCBjb25z
dCBSZW5kZXJTdHlsZSYpOwotCiAjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKICAgICBzdGF0
aWMgYm9vbCBpc29sYXRlc0JsZW5kaW5nKGNvbnN0IFJlbmRlclN0eWxlJik7CiAgICAgc3RhdGlj
IHZvaWQgdXBkYXRlTWFza2VkQW5jZXN0b3JTaG91bGRJc29sYXRlQmxlbmRpbmcoY29uc3QgUmVu
ZGVyRWxlbWVudCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYXBoaWNz
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhcGhpY3NFbGVtZW50LmNwcApp
bmRleCBkYzEwOGU1YjIzYzQ2ZGE5NTYwMGEwMmFhYzYyMDdlZDViNjY1Njk2Li5hNjA5OTU2NGZh
YzM0MzhjYjJiODQzYjA5MzkwOGI3MjJlMGRjMDYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHR3JhcGhpY3NFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
R3JhcGhpY3NFbGVtZW50LmNwcApAQCAtODAsMTIgKzgwLDEwIEBAIEFmZmluZVRyYW5zZm9ybSBT
VkdHcmFwaGljc0VsZW1lbnQ6OmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSBjb25zdAogCiAgICAg
Ly8gSG9ub3IgYW55IG9mIHRoZSB0cmFuc2Zvcm0tcmVsYXRlZCBDU1MgcHJvcGVydGllcyBpZiBz
ZXQuCiAgICAgaWYgKGhhc1NwZWNpZmllZFRyYW5zZm9ybSB8fCAoc3R5bGUgJiYgKHN0eWxlLT50
cmFuc2xhdGUoKSB8fCBzdHlsZS0+c2NhbGUoKSB8fCBzdHlsZS0+cm90YXRlKCkpKSkgewotICAg
ICAgICBhdXRvIGJvdW5kaW5nQm94ID0gU1ZHUmVuZGVyU3VwcG9ydDo6dHJhbnNmb3JtUmVmZXJl
bmNlQm94KCpyZW5kZXJlcigpLCAqdGhpcywgKnN0eWxlKTsKLSAgICAgICAgCiAgICAgICAgIC8v
IE5vdGU6IG9iamVjdEJvdW5kaW5nQm94IGlzIGFuIGVtcHR5UmVjdCBmb3IgZWxlbWVudHMgbGlr
ZSBwYXR0ZXJuIG9yIGNsaXBQYXRoLgogICAgICAgICAvLyBTZWUgdGhlICJPYmplY3QgYm91bmRp
bmcgYm94IHVuaXRzIiBzZWN0aW9uIG9mIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2NzczMtdHJh
bnNmb3Jtcy8KICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwotICAgICAg
ICBzdHlsZS0+YXBwbHlUcmFuc2Zvcm0odHJhbnNmb3JtLCBib3VuZGluZ0JveCk7CisgICAgICAg
IHN0eWxlLT5hcHBseVRyYW5zZm9ybSh0cmFuc2Zvcm0sIHJlbmRlcmVyKCktPnRyYW5zZm9ybVJl
ZmVyZW5jZUJveFJlY3QoKSk7CiAKICAgICAgICAgLy8gRmxhdHRlbiBhbnkgM0QgdHJhbnNmb3Jt
LgogICAgICAgICBtYXRyaXggPSB0cmFuc2Zvcm0udG9BZmZpbmVUcmFuc2Zvcm0oKTsKQEAgLTEw
MCw3ICs5OCw3IEBAIEFmZmluZVRyYW5zZm9ybSBTVkdHcmFwaGljc0VsZW1lbnQ6OmFuaW1hdGVk
TG9jYWxUcmFuc2Zvcm0oKSBjb25zdAogCiAgICAgLy8gSWYgd2UgZGlkbid0IGhhdmUgdGhlIENT
UyAidHJhbnNmb3JtIiBwcm9wZXJ0eSBzZXQsIHdlIG11c3QgYWNjb3VudCBmb3IgdGhlICJ0cmFu
c2Zvcm0iIGF0dHJpYnV0ZS4KICAgICBpZiAoIWhhc1NwZWNpZmllZFRyYW5zZm9ybSAmJiBzdHls
ZSkgewotICAgICAgICBhdXRvIGJvdW5kaW5nQm94ID0gU1ZHUmVuZGVyU3VwcG9ydDo6dHJhbnNm
b3JtUmVmZXJlbmNlQm94KCpyZW5kZXJlcigpLCAqdGhpcywgKnN0eWxlKTsKKyAgICAgICAgRmxv
YXRSZWN0IGJvdW5kaW5nQm94ID0gcmVuZGVyZXIoKS0+dHJhbnNmb3JtUmVmZXJlbmNlQm94UmVj
dCgpOwogICAgICAgICBhdXRvIHQgPSBmbG9hdFBvaW50Rm9yTGVuZ3RoUG9pbnQoc3R5bGUtPnRy
YW5zZm9ybU9yaWdpblhZKCksIGJvdW5kaW5nQm94LnNpemUoKSkgKyBib3VuZGluZ0JveC5sb2Nh
dGlvbigpOwogICAgICAgICBtYXRyaXgudHJhbnNsYXRlKHQpOwogICAgICAgICBtYXRyaXggKj0g
dHJhbnNmb3JtKCkuY29uY2F0ZW5hdGUoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454582</attachid>
            <date>2022-03-14 05:14:13 -0700</date>
            <delta_ts>2022-03-14 05:46:55 -0700</delta_ts>
            <desc>Patch, v7</desc>
            <filename>bug-237554-20220314051412.patch</filename>
            <type>text/plain</type>
            <size>38946</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMjE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGQ2MDVjYTVhM2IxODE1
OWRmMjE1ODQ5YWRhODU2ZTdmOWI0YjhhNy4uODllOWExZDBjNjc4NTlkMDNjMmNhMDk3Zjg4MTcz
MjgyMTEwOTg2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDIyLTAzLTE0ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFVuaWZ5
ICd0cmFuc2Zvcm0tYm94JyByZWZlcmVuY2UgYm94IGNvbXB1dGF0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc1NTQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgdGhlIGNvZGUgdG8g
Y29tcHV0ZSB0aGUgcmVmZXJlbmNlIGJveCwgYWNjb3JkaW5nIHRvIHRoZSBDU1MgJ3RyYW5zZm9y
bS1ib3gnCisgICAgICAgIHByb3BlcnR5IGlzIHNwcmlua2xlZCBvdmVyIHZhcmlvdXMgcGxhY2Vz
OiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24sIFNWR1JlbmRlclN1cHBvcnQsCisgICAgICAg
IFJlbmRlckJveCwgcGFydHMgaW4gUmVuZGVyTGF5ZXIuCisKKyAgICAgICAgQ2xlYW51cCBhbmQg
dW5pZnkgdGhlIGNvZGUgaW4gYSBzaW5nbGUgcGxhY2U6IGEgbmV3ICdyZWZlcmVuY2VCb3hSZWN0
KCknICBtZXRob2QgaW1wbGVtZW50aW5nCisgICAgICAgIHRoZSBjb21wdXRhdGlvbiBmb3IgYm90
aCBTVkcvSFRNTCwgd2hlcmUgdGhlIFNWRyBjb2RlIGxpdmVzIGluIFJlbmRlckVsZW1lbnQgKHRo
ZSBvbmx5IHNoYXJlZAorICAgICAgICBiYXNlIGNsYXNzIGJldHdlZW4gbGVnYWN5IFNWRy9MQlNF
KSBhbmQgdGhlIEhUTUwgY29kZSBpbiBSZW5kZXJCb3guIFRoZSBIVE1ML0NTUyBpbXBsZW1lbnRh
dGlvbgorICAgICAgICB3YXMgYWxyZWFkeSBjb250YWluZWQgaW4gUmVuZGVyQm94OjpyZWZlcmVu
Y2VCb3goKSBhbmQgd2FzIHJlbmFtZWQgdG8gcmVmZXJlbmNlQm94UmVjdCgpIHRvIGZvbGxvdwor
ICAgICAgICB0aGUgbmFtaW5nIGNvbnZlbnRpb24gZm9yIHRoZSBvdGhlciBDU1MgYm94IGdlb2Vt
dHJ5IGhlbHBlcnMgc3VjaCBhcyBjb250ZW50Qm94UmVjdCgpLAorICAgICAgICBib3JkZXJCb3hS
ZWN0KCksIGV0Yy4KKworICAgICAgICBGb3IgU1ZHcyBuZWVkcyByZWZlcmVuY2VCb3hSZWN0KCkg
bmVlZHMgdG8gcmV0dXJuIGEgRmxvYXRSZWN0LCB3aGVyZWFzIGZvciBDU1MvSFRNTCBMYXlvdXRS
ZWN0CisgICAgICAgIGlzIHRoZSByaWdodCBjaG9pY2UuIEludHJvZHVjZSBhICdGbG9hdE9yTGF5
b3V0UmVjdCcgaGVscGVyIHRoYXQgY2FuIGJlIHVzZWQgYXMgcmV0dXJuIHZhbHVlL2FyZ3VtZW50
CisgICAgICAgIGluL3RvIGZ1bmN0aW9ucyB0aGF0IGVpdGhlciByZXR1cm4vbmVlZCBhIEZsb2F0
UmVjdCBvciBhIExheW91dFJlY3QsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC4KKworICAgICAg
ICAnRmxvYXRPckxheW91dFJlY3QnIGhvbGRzIGEgdmFyaWFudDxGbG9hdFJlY3QsIExheW91dFJl
Y3Q+IGFuZCBvZmZlcnMgY29udmVuaWVuY2UgZnVuY3Rpb25zCisgICAgICAgIHRvIHNpbXBsaWZ5
IGNvbW1vbiBvcGVyYXRpb25zLCBlLmcuIG9wZXJhdG9yIEZsb2F0UmVjdCgpIHRvIGFjY2VzcyB0
aGUgc3RvcmVkIEZsb2F0UmVjdCwgb3IgY29udmVydAorICAgICAgICB0aGUgc3RvcmVkIExheW91
dFJlY3QgaW50byBhIEZsb2F0UmVjdCAod2l0aG91dCBhcHBseWluZyBwaXhlbCBzbmFwcGluZyku
IEZ1cnRoZXJtb3JlIGl0IG9mZmVycworICAgICAgICBhICdmbG9hdFJlY3RGb3JQYWludGluZyhk
ZXZpY2VTY2FsZUZhY3RvciknIG1ldGhvZCwgdGhhdCBlaXRoZXIgcmV0dXJucyB0aGUgc3RvcmVk
IEZsb2F0UmVjdCwgb3IgcGl4ZWwtc25hcHMKKyAgICAgICAgdGhlIHN0b3JlZCBMYXlvdXRSZWN0
IGFuZCByZXR1cm5zIGEgbmV3IGRldmljZS1waXhlbCBhbGlnbmVkIEZsb2F0UmVjdC4gVGhlIG5h
bWUgJ2Zsb2F0UmVjdEZvclBhaW50aW5nJworICAgICAgICBkb2VzIG5vdCBjb250YWluIHRoZSB0
ZXJtICdQaXhlbFNuYXBwaW5nJyBvbiBwdXJwb3NlLCBzaW5jZSB0aGUgaW50ZW5kZWQgdXNhZ2Ug
aXMgaW4gYWxsIHBsYWNlcyB0aGF0CisgICAgICAgIGN1cnJlbnRseSBhcHBseSBwaXhlbC1zbmFw
cGluZywgdG8gZWFzaWx5IGRpc2FibGUgdGhhdCBvcGVyYXRpb24gaW4gU1ZHIHN1YnRyZWVzLgor
CisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMsIG5vIGNoYW5nZSBpbiBiZWhhdmlv
dXIuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOiBBZGQgRmxvYXRPckxheW91dFJlY3QuaCB0
byBidWlsZC4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERp
dHRvLgorICAgICAgICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y29tcHV0ZWRUcmFuc2Zvcm0pOiBVc2UgdGhlIHJlbmRlcmVycyB0cmFu
c2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCkgaW5zdGVhZCBvZiB0aGUgc3RhdGljIGhlbHBlciBmdW5j
dGlvbiB0cmFuc2Zvcm1SZWZlcmVuY2VCb3goKS4KKyAgICAgICAgKFdlYkNvcmU6OkNvbXB1dGVk
U3R5bGVFeHRyYWN0b3I6OnZhbHVlRm9yUHJvcGVydHlJblN0eWxlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjp0cmFuc2Zvcm1SZWZlcmVuY2VCb3gpOiBEZWxldGVkLiAgUmVuZGVyRWxlbWVu
dDo6dHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdCgpIHByb3ZpZGVzIHRoZSBzYW1lIGxvZ2ljIGlu
IGEgZ2VuZXJpYyB3YXkuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRPckxheW91
dFJlY3QuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGbG9hdE9yTGF5b3V0UmVjdDo6Rmxv
YXRPckxheW91dFJlY3QpOiBBZGQgY29uc3RydWN0b3JzIGZvciBpbXBsaWNpdCBjb25zdHJ1Y3Rp
b24gZnJvbSBlaXRoZXIgTGF5b3V0UmVjdCBvciBGbG9hdFJlY3QuCisgICAgICAgIChXZWJDb3Jl
OjpGbG9hdE9yTGF5b3V0UmVjdDo6b3BlcmF0b3IgRmxvYXRSZWN0IGNvbnN0KTogUmV0dXJucyB0
aGUgc3RvcmVkIEZsb2F0UmVjdCwgb3IgY29udmVydHMgdGhlIHN0b3JlZCBMYXlvdXRSZWN0IGlu
dG8gYSBGbG9hdFJlY3QgKG5vIHBpeGVsIHNuYXBwaW5nISkuCisgICAgICAgIChXZWJDb3JlOjpG
bG9hdE9yTGF5b3V0UmVjdDo6ZmxvYXRSZWN0Rm9yUGFpbnRpbmcgY29uc3QpOiBSZXR1cm5zIHRo
ZSBzdG9yZWQgRmxvYXRSZWN0IGFzLWlzLCBvciBhcHBsaWVzIHBpeGVsLXNuYXBwaW5nIG9uIHRo
ZSBzdG9yZWQgTGF5b3V0UmVjdCwgcmV0dXJuaW5nIGEgZGV2aWNlLXBpeGVsIGFsaWduZWQgRmxv
YXRSZWN0LgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRPckxheW91dFJlY3Q6Om1vdmUpOiBIZWxw
ZXIgbWV0aG9kIHRvIHNpbXBsaWZ5IFJlbmRlckxheWVyIGNhbGwtc2l0ZXMuIENhbGxzIG1vdmUo
KSBvbiBlaXRoZXIgdGhlIHN0b3JlZCBGbG9hdFJlY3Qgb3IgTGF5b3V0UmVjdC4KKyAgICAgICAg
KFdlYkNvcmU6OkZsb2F0T3JMYXlvdXRSZWN0Ojppc0Zsb2F0UmVjdCBjb25zdCk6IENoZWNrcyBp
ZiB0aGUgdmFyaWFudCBob2xkcyBhIEZsb2F0UmVjdCwgaWYgbm90IGl0IGlzIGd1YXJhbnRlZWQg
dG8gaG9sZCBhIExheW91dFJlY3QuCisgICAgICAgIChXZWJDb3JlOjpGbG9hdE9yTGF5b3V0UmVj
dDo6ZmxvYXRSZWN0IGNvbnN0KTogUmVhZC1vbmx5IGNvbnN0IGFjY2Nlc29yLgorICAgICAgICAo
V2ViQ29yZTo6RmxvYXRPckxheW91dFJlY3Q6OmZsb2F0UmVjdCk6IE11dGFibGUgYWNjZXNzb3Is
IHVzZWQgYnkgbW92ZSgpLgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRPckxheW91dFJlY3Q6Omlz
TGF5b3V0UmVjdCBjb25zdCk6IENoZWNrcyBpZiB0aGUgdmFyaWFudCBob2xkcyBhIExheW91dFJl
Y3QsIGlmIG5vdCBpdCBpcyBndWFyYW50ZWVkIHRvIGhvbGQgYSBGbG9hdFJlY3QuCisgICAgICAg
IChXZWJDb3JlOjpGbG9hdE9yTGF5b3V0UmVjdDo6bGF5b3V0UmVjdCBjb25zdCk6IFJlYWQtb25s
eSBjb25zdCBhY2NjZXNvci4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0T3JMYXlvdXRSZWN0Ojps
YXlvdXRSZWN0KTogTXV0YWJsZSBhY2Nlc3NvciwgdXNlZCBieSBtb3ZlKCkuCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnJl
ZmVyZW5jZUJveFJlY3QgY29uc3QpOiBSZW5hbWUgcmVmZXJlbmNlQm94KCkgdG8gcmVmZXJlbmNl
Qm94UmVjdCgpIGFuZCByZXR1cm4gRmxvYXRPckxheW91dFJlY3QgaW5zdGVhZCBvZiBMYXlvdXRS
ZWN0LgorICAgICAgICBMQlNFIHdhbnRzIHRvIHJlLXVzZSB0aGUgbG9naWMgYnV0IHdpdGhvdXQg
cGl4ZWwgc25hcHBpbmcgd2l0aGluIHRoZSBTVkcgcmVuZGVyIHRyZWUuIEFsbCBjYWxsZXJzIHdl
cmUgYWRhcHRlZCB0byB0aGUgbmV3IHJldHVybiB0eXBlLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjpoaXRUZXN0Q2xpcFBhdGggY29uc3QpOiBBZGFwdCB0byByZWZlcmVuY2VCb3goKSAt
PiByZWZlcmVuY2VCb3hSZWN0KCkgcmVuYW1pbmcgYW5kIHJldHVybiB0eXBlIGNoYW5nZS4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cmVmZXJlbmNlQm94IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6IEFkYXB0IHRvIHJlZmVyZW5jZUJveCgp
IC0+IHJlZmVyZW5jZUJveFJlY3QoKSByZW5hbWluZyBhbmQgcmV0dXJuIHR5cGUgY2hhbmdlLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckVsZW1lbnQ6OnJlZmVyZW5jZUJveFJlY3QgY29uc3QpOiBBZGQgcmVmZXJlbmNlQm94
UmVjdCgpIGltcGxlbWVudGF0aW9uIGZvciBTVkcgcmVuZGVyZXJzLiBUaGUgY29tbW9uIGJhc2Ut
Y2xhc3MgZm9yCisgICAgICAgIGFsbCBTVkcgcmVuZGVyZXJzIGlzIFJlbmRlckVsZW1lbnQgaW4g
dGhlIGxlZ2FjeSBTVkcgZW5naW5lIGFuZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0IGluIExCU0Uu
IFRvIHNoYXJlIHRoZSBjb2RlIGJldHdlZW4gYm90aCBTVkcKKyAgICAgICAgaW1wbGVtZW50YXRp
b25zIGl0IGhhcyB0byBiZSBwbGFjZWQgaW4gUmVuZGVyRWxlbWVudCAtLSB0byBiZSBtb3ZlZCB0
byBSZW5kZXJMYXllck1vZGVsT2JqZWN0LCBvbmNlIExCU0UgaXMgdGhlIG9ubHkgU1ZHIGVuZ2lu
ZS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRWxlbWVudDo6dHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdCBjb25zdCk6IEFkZCBu
ZXcgaGVscGVyIGZ1bmN0aW9uIHdoaWNoIGludm9rZXMgcmVmZXJlbmNlQm94UmVjdCgpIHVzaW5n
CisgICAgICAgIHRyYW5zZm9ybUJveFRvQ1NTQm94VHlwZShzdHlsZSgpLnRyYW5zZm9ybUJveCgp
KS4gV2hlbmV2ZXIgdHJhbnNmb3JtLWJveCBzdXBwb3J0IGlzIG5lY2Vzc2FyeSwgdGhpcyBtZXRo
b2Qgc2hhbGwgYmUgdXNlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOiBV
c2UgdGhlIG5ldyB0cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCkgd2hlcmUgcG9zc2libGUsIGFk
YXB0IHRvIHJldHVybiB0eXBlIGNoYW5nZXMsIHJlbW92ZSBtYW51YWwgcGl4ZWwgc25hcHBpbmcu
CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlUmVmZXJlbmNlQm94KTogQWRhcHQgdG8gcmVmZXJl
bmNlQm94KCkgLT4gcmVmZXJlbmNlQm94UmVjdCgpIHJlbmFtaW5nIGFuZCByZXR1cm4gdHlwZSBj
aGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlVHJhbnNmb3JtKTog
U2ltcGxpZnkgcmVmZXJlbmNlIGJveCBjb21wdXRhdGlvbiwgYW5kIGF2b2lkIG1hbnVhbCBwaXhl
bCBzbmFwcGluZzogdXRpbGl6ZSB0cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCkgKyBmbG9hdFJl
Y3RGb3JQYWludGluZygpLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmN1cnJlbnRU
cmFuc2Zvcm0gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpw
ZXJzcGVjdGl2ZVRyYW5zZm9ybSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnBlcnNwZWN0aXZlT3JpZ2luIGNvbnN0KTogQWRkIEZJWE1FLCB0aGlzIGFsd2F5
cyB1c2VzIHRoZSBib3JkZXIgYm94IHJlY3QgYXMgYm91bmRpbmdCb3ggZm9yIGxlbmd0aCByZXNv
bHZpbmc6IGl0IGlnbm9yZXMgdHJhbnNmb3JtLWJveC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpjb21wdXRlQ2xpcFBhdGggY29uc3QpOiBBZGFwdCB0byBjb21wdXRlUmVmZXJlbmNl
Qm94KCkgY2hhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXR1cENsaXBQ
YXRoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlUmVmZXJlbmNlUmVjdEZyb21C
b3gpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdXBwb3J0Ojp0cmFuc2Zvcm1SZWZlcmVu
Y2VCb3gpOiBEZWxldGVkLiBSZW5kZXJFbGVtZW50Ojp0cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0
KCkgcHJvdmlkZXMgdGhlIHNhbWUgbG9naWMgaW4gYSBnZW5lcmljIHdheS4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuaDogR2V0IHJpZCBvZiB0cmFuc2Zvcm1SZWZl
cmVuY2VCb3goKS4KKyAgICAgICAgKiBzdmcvU1ZHR3JhcGhpY3NFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0dyYXBoaWNzRWxlbWVudDo6YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSBj
b25zdCk6IFVzZSB0aGUgcmVuZGVyZXJzIHRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3QoKSBpbnN0
ZWFkIG9mIFNWR1JlbmRlclN1cHBvcnQ6OnRyYW5zZm9ybVJlZmVyZW5jZUJveCgpLgorCiAyMDIy
LTAzLTEyICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CiAKICAgICAgICAgU2Fm
YXJpIHByb2R1Y2VzIHNjcmFtYmxlZCBvdXRwdXQgZm9yIHNvbWUgd2VibSB2aWRlb3Mgd2l0aCB2
cDggY29kZWMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291
cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCA3MzY0NDJhMDhhNzQ1MDBhMzUyZjA0YzJl
MTA2ZDhjNDFlN2E0ZmM1Li5lMGY4MjE4NWI4N2I0NGJkODMyM2ZkMTJiMzkwOGUxZmY5ZDk5NTQy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE0NTAsNiArMTQ1MCw3IEBAIHNldChXZWJDb3JlX1BS
SVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5VXBk
YXRlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EcmF3R2x5cGhzUmVjb3JkZXIuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0TGluZS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRP
ckxheW91dFJlY3QuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRRdWFkLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCBlNjc0YmI2MWU5ODU3MTNmNjkyMTQ3YjdhZTM0NzllZThmZTE5YmZjLi45
OWMyMWE1YTllYTQ3ODM3NzY3NjFkNDlkOWU0MGRhYmQ0ZWJkMDYzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zOTI3LDYgKzM5
MjcsNyBAQAogCQlCMjc1MzU2NzBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTM5MEIwNTM4MTQwMDJD
RTY0RiAvKiBDb2xvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUIyNzUzNTY5MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzQjBCMDUzODE0
MDAyQ0U2NEYgLyogRmxvYXRQb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUIyNzUzNTZCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTNE
MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCMzc3MzQ2QjBCMDQxOTE2NjAyQ0U2NEYgLyogRmxv
YXRPckxheW91dFJlY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIyNzUzNTNDMEIwNTM4MTUwMDJDRTY0RiAvKiBGbG9hdE9yTGF5b3V0UmVjdC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyNzUzNTZE
MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTNGMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNp
emUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlC
Mjc1MzU2RTBCMDUzODE0MDAyQ0U2NEYgLyogSWNvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NDAwQjA1MzgxNDAwMkNFNjRGIC8qIEljb24u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMjc1
MzU3MDBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTQyMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNDg3
MCw2ICsxNDg3MSw3IEBACiAJCUIyNzUzNTNCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbG9hdFBvaW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTNDMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9h
dFJlY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0UmVj
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTNEMEIwNTM4MTQwMDJD
RTY0RiAvKiBGbG9hdFJlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZs
b2F0UmVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMjc1MzUzQzBCMDUzODE1
MDAyQ0U2NEYgLyogRmxvYXRPckxheW91dFJlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEZsb2F0T3JMYXlvdXRSZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUIyNzUzNTNFMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0U2l6ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUIyNzUzNTNGMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsb2F0U2l6ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzU0MDBCMDUzODE0MDAyQ0U2NEYgLyogSWNvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSWNvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjg5NzIsNiArMjg5NzQsNyBAQAogCQkJCTFDQUY1NkQ4MjUzMDE0NTcw
MDE3QjQ3MiAvKiBEcmF3R2x5cGhzUmVjb3JkZXIuaCAqLywKIAkJCQkyRTg4OENBOTI1RjZBNDEx
MDA1NzkxNEEgLyogRmxvYXRMaW5lLmNwcCAqLywKIAkJCQkyRTg4OENBODI1RjZBNDExMDA1Nzkx
NEEgLyogRmxvYXRMaW5lLmggKi8sCisJCQkJQjI3NTM1M0MwQjA1MzgxNTAwMkNFNjRGIC8qIEZs
b2F0T3JMYXlvdXRSZWN0LmggKi8sCiAJCQkJQjI3NTM1M0EwQjA1MzgxNDAwMkNFNjRGIC8qIEZs
b2F0UG9pbnQuY3BwICovLAogCQkJCUIyNzUzNTNCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBv
aW50LmggKi8sCiAJCQkJQjJFMjdDOUQwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5j
cHAgKi8sCkBAIC0zNDY2MCw2ICszNDY2Myw3IEBACiAJCQkJRkU2OTk4NzIxOTIwODdFNzAwNjkz
NkJEIC8qIEZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTE1
Q0ZBODIyMDhCOEVEQTAwMUU2OTkxIC8qIEZsb2F0aW5nU3RhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTJFODg4Q0FBMjVGNkE0MTEwMDU3OTE0QSAvKiBGbG9hdExpbmUuaCBpbiBIZWFkZXJzICov
LAorCQkJCUIzNzczNDZCMEIwNDE5MTY2MDJDRTY0RiAvKiBGbG9hdE9yTGF5b3V0UmVjdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjI3NTM1NjkwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUIyRTI3Q0EwMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBv
aW50M0QuaCBpbiBIZWFkZXJzICovLAogCQkJCTZFQzQ4MEEyMTZFQTYzOEEwMEE0OERDQiAvKiBG
bG9hdFBvbHlnb24uaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAppbmRleCBhY2ViZGIzNDY0YmZlMWYyNzVk
ZTRhYjA4YmExOGRmODU2OGViZDgzLi5jOTczYzVhNGU1MGIwYzYzZTFiNDQzNTFkZjY1NjI4ZjI3
YTYxNmJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmNwcApAQCAtNTYwLDE3ICs1NjAsNiBAQCBzdGF0aWMgTGF5b3V0UmVjdCBzaXpp
bmdCb3goUmVuZGVyT2JqZWN0JiByZW5kZXJlcikKICAgICByZXR1cm4gYm94LnN0eWxlKCkuYm94
U2l6aW5nKCkgPT0gQm94U2l6aW5nOjpCb3JkZXJCb3ggPyBib3guYm9yZGVyQm94UmVjdCgpIDog
Ym94LmNvbXB1dGVkQ1NTQ29udGVudEJveFJlY3QoKTsKIH0KIAotc3RhdGljIEZsb2F0UmVjdCB0
cmFuc2Zvcm1SZWZlcmVuY2VCb3goY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBSZW5k
ZXJFbGVtZW50JiByZW5kZXJlcikKLXsKLSAgICBpZiAoaXM8UmVuZGVyQm94PihyZW5kZXJlcikp
Ci0gICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKS5yZWZlcmVuY2VC
b3godHJhbnNmb3JtQm94VG9DU1NCb3hUeXBlKHN0eWxlLnRyYW5zZm9ybUJveCgpKSk7Ci0KLSAg
ICBpZiAoaXM8U1ZHRWxlbWVudD4ocmVuZGVyZXIuZWxlbWVudCgpKSkKLSAgICAgICAgcmV0dXJu
IFNWR1JlbmRlclN1cHBvcnQ6OnRyYW5zZm9ybVJlZmVyZW5jZUJveChyZW5kZXJlciwgZG93bmNh
c3Q8U1ZHRWxlbWVudD4oKnJlbmRlcmVyLmVsZW1lbnQoKSksIHN0eWxlKTsKLQotICAgIHJldHVy
biB7IH07Ci19Ci0KIHN0YXRpYyBSZWY8Q1NTRnVuY3Rpb25WYWx1ZT4gbWF0cml4VHJhbnNmb3Jt
VmFsdWUoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlKQogewogICAgIFJlZlB0cjxDU1NGdW5jdGlvblZhbHVlPiB0cmFuc2Zvcm1W
YWx1ZTsKQEAgLTYyMyw3ICs2MTIsNyBAQCBzdGF0aWMgUmVmPENTU1ZhbHVlPiBjb21wdXRlZFRy
YW5zZm9ybShSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bAogICAgICAg
ICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVOb25lKTsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKLSAg
ICBzdHlsZS5hcHBseVRyYW5zZm9ybSh0cmFuc2Zvcm0sIHRyYW5zZm9ybVJlZmVyZW5jZUJveChz
dHlsZSwgKnJlbmRlcmVyKSwgeyB9KTsKKyAgICBzdHlsZS5hcHBseVRyYW5zZm9ybSh0cmFuc2Zv
cm0sIHJlbmRlcmVyLT50cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KHN0eWxlKSwgeyB9KTsKICAg
ICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBmbGF0dGVuIHRvIGFuIGFmZmluZSB0cmFuc2Zv
cm0gaWYgRU5BQkxFKDNEX1RSQU5TRk9STVMpIGlzIG9mZiwgYnkgZGVzaWduLgogCiAgICAgLy8g
RklYTUU6IE5lZWQgdG8gcHJpbnQgb3V0IGluZGl2aWR1YWwgZnVuY3Rpb25zIChodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM5MjQpCkBAIC0zODQwLDcgKzM4MjksNyBA
QCBSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnZhbHVlRm9yUHJvcGVy
dHlJblN0eWxlKGNvbnN0IFJlbmRlclN0eQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5UGVyc3Bl
Y3RpdmVPcmlnaW46IHsKICAgICAgICAgICAgIGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3Jl
YXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICAgICAgICAgIGlmIChyZW5kZXJlcikgewotICAgICAg
ICAgICAgICAgIGF1dG8gYm94ID0gdHJhbnNmb3JtUmVmZXJlbmNlQm94KHN0eWxlLCAqcmVuZGVy
ZXIpOworICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBib3ggPSByZW5kZXJlci0+dHJhbnNmb3Jt
UmVmZXJlbmNlQm94UmVjdChzdHlsZSk7CiAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHpv
b21BZGp1c3RlZFBpeGVsVmFsdWUobWluaW11bVZhbHVlRm9yTGVuZ3RoKHN0eWxlLnBlcnNwZWN0
aXZlT3JpZ2luWCgpLCBib3gud2lkdGgoKSksIHN0eWxlKSk7CiAgICAgICAgICAgICAgICAgbGlz
dC0+YXBwZW5kKHpvb21BZGp1c3RlZFBpeGVsVmFsdWUobWluaW11bVZhbHVlRm9yTGVuZ3RoKHN0
eWxlLnBlcnNwZWN0aXZlT3JpZ2luWSgpLCBib3guaGVpZ2h0KCkpLCBzdHlsZSkpOwogICAgICAg
ICAgICAgfSBlbHNlIHsKQEAgLTM4OTYsNyArMzg4NSw3IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ29t
cHV0ZWRTdHlsZUV4dHJhY3Rvcjo6dmFsdWVGb3JQcm9wZXJ0eUluU3R5bGUoY29uc3QgUmVuZGVy
U3R5CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW46IHsKICAgICAgICAg
ICAgIGF1dG8gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAg
ICAgICAgICAgIGlmIChyZW5kZXJlcikgewotICAgICAgICAgICAgICAgIGF1dG8gYm94ID0gdHJh
bnNmb3JtUmVmZXJlbmNlQm94KHN0eWxlLCAqcmVuZGVyZXIpOworICAgICAgICAgICAgICAgIEZs
b2F0UmVjdCBib3ggPSByZW5kZXJlci0+dHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdChzdHlsZSk7
CiAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHpvb21BZGp1c3RlZFBpeGVsVmFsdWUobWlu
aW11bVZhbHVlRm9yTGVuZ3RoKHN0eWxlLnRyYW5zZm9ybU9yaWdpblgoKSwgYm94LndpZHRoKCkp
LCBzdHlsZSkpOwogICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZCh6b29tQWRqdXN0ZWRQaXhl
bFZhbHVlKG1pbmltdW1WYWx1ZUZvckxlbmd0aChzdHlsZS50cmFuc2Zvcm1PcmlnaW5ZKCksIGJv
eC5oZWlnaHQoKSksIHN0eWxlKSk7CiAgICAgICAgICAgICAgICAgaWYgKHN0eWxlLnRyYW5zZm9y
bU9yaWdpblooKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0T3JMYXlvdXRSZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdE9yTGF5b3V0UmVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhmNjFjN2FkYTVkYmNhODVjYjhmNTgzMzA5
MDY5MmFkY2ViZmIyOGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdE9yTGF5b3V0UmVjdC5oCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICog
Q29weXJpZ2h0IChjKSAyMDIyIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgorI2luY2x1ZGUgPG9wdGlvbmFsPgorI2luY2x1ZGUg
PHR5cGVfdHJhaXRzPgorI2luY2x1ZGUgPHZhcmlhbnQ+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRmxvYXRPckxheW91dFJlY3QgZmluYWwgeworICAgIHN0cnVjdCBVbmRlZmluZWRS
ZWN0IHsgfTsKKworICAgIC8vIENvbnZlbmllbmNlIGZ1bmN0aW9ucyB0byBhY2Nlc3MgdGhlIHZh
cmlhbnRzIGVsZW1lbnRzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY29uc3RleHBy
IGJvb2wgaXMoKSBjb25zdCB7IHJldHVybiBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFQ+KG1fZGF0
YSk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY29uc3RleHByIGNvbnN0IFQm
IGFzKCkgY29uc3QgeyByZXR1cm4gc3RkOjpnZXQ8VD4obV9kYXRhKTsgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KKyAgICBjb25zdGV4cHIgVCYgYXMoKSB7IHJldHVybiBzdGQ6OmdldDxU
PihtX2RhdGEpOyB9CisKK3B1YmxpYzoKKyAgICBjb25zdGV4cHIgRmxvYXRPckxheW91dFJlY3Qo
RmxvYXRSZWN0JiYgcmVjdCkKKyAgICAgICAgOiBtX2RhdGEoc3RkOjppbl9wbGFjZV90eXBlX3Q8
RmxvYXRSZWN0PigpLCBXVEZNb3ZlKHJlY3QpKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdGV4
cHIgRmxvYXRPckxheW91dFJlY3QoTGF5b3V0UmVjdCYmIHJlY3QpCisgICAgICAgIDogbV9kYXRh
KHN0ZDo6aW5fcGxhY2VfdHlwZV90PExheW91dFJlY3Q+KCksIFdURk1vdmUocmVjdCkpCisgICAg
eworICAgIH0KKworICAgIGNvbnN0ZXhwciBGbG9hdE9yTGF5b3V0UmVjdCgpCisgICAgICAgIDog
bV9kYXRhKFVuZGVmaW5lZFJlY3QgeyB9KQorICAgIHsKKyAgICB9CisKKyAgICBvcGVyYXRvciBG
bG9hdFJlY3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzPEZsb2F0UmVjdD4oKSkKKyAg
ICAgICAgICAgIHJldHVybiBhczxGbG9hdFJlY3Q+KCk7CisgICAgICAgIGlmIChpczxMYXlvdXRS
ZWN0PigpKQorICAgICAgICAgICAgcmV0dXJuIGFzPExheW91dFJlY3Q+KCk7CisgICAgICAgIEFT
U0VSVChpczxVbmRlZmluZWRSZWN0PigpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisK
KyAgICBGbG9hdFJlY3QgZmxvYXRSZWN0Rm9yUGFpbnRpbmcoZmxvYXQgZGV2aWNlU2NhbGVGYWN0
b3IpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXM8RmxvYXRSZWN0PigpKQorICAgICAgICAg
ICAgcmV0dXJuIGFzPEZsb2F0UmVjdD4oKTsKKyAgICAgICAgaWYgKGlzPExheW91dFJlY3Q+KCkp
CisgICAgICAgICAgICByZXR1cm4gc25hcFJlY3RUb0RldmljZVBpeGVscyhhczxMYXlvdXRSZWN0
PigpLCBkZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgICAgIEFTU0VSVChpczxVbmRlZmluZWRSZWN0
PigpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICAvLyBDb252ZW5pZW5jZSBm
dW5jdGlvbjogVXNpbmcgbW92ZSgpIHRoZSBsb2NhdGlvbiBvZiB0aGUgcmVjdCBjYW4gYmUgYWx0
ZXJlZCwgcmVnYXJkbGVzcyBvZiBpdHMgdHlwZS4KKyAgICB2b2lkIG1vdmUoY29uc3QgTGF5b3V0
U2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAgIGlmIChpczxGbG9hdFJlY3Q+KCkpIHsKKyAgICAg
ICAgICAgIGFzPEZsb2F0UmVjdD4oKS5tb3ZlKHNpemUpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzPExheW91dFJlY3Q+KCkpIHsKKyAgICAgICAgICAg
IGFzPExheW91dFJlY3Q+KCkubW92ZShzaXplKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIEFTU0VSVChpczxVbmRlZmluZWRSZWN0PigpKTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RkOjp2
YXJpYW50PEZsb2F0UmVjdCwgTGF5b3V0UmVjdCwgVW5kZWZpbmVkUmVjdD4gbV9kYXRhOworfTsK
Kworc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9jb3B5YWJsZTxGbG9hdE9yTGF5b3V0
UmVjdD46OnZhbHVlLCAiJ0Zsb2F0T3JMYXlvdXRSZWN0JyBtdXN0IGJlIHRyaXZpYWxseSBjb3lw
YWJsZS4iKTsKK3N0YXRpY19hc3NlcnQoIXN0ZDo6aXNfcG9seW1vcnBoaWM8RmxvYXRPckxheW91
dFJlY3Q+Ojp2YWx1ZSwgIidGbG9hdE9yTGF5b3V0UmVjdCcgbXVzdCBub3QgYmUgcG9seW1wb3Jw
aGljLiIpOworc3RhdGljX2Fzc2VydCghc3RkOjpoYXNfdmlydHVhbF9kZXN0cnVjdG9yPEZsb2F0
T3JMYXlvdXRSZWN0Pjo6dmFsdWUsICInRmxvYXRPckxheW91dFJlY3QnIG11c3Qgbm90IGhhdmUg
YSB2aXJ0dWFsIGRlc3RydWN0b3IuIik7CisKK3N0YXRpY19hc3NlcnQoc3RkOjppc19jb25zdHJ1
Y3RpYmxlPEZsb2F0T3JMYXlvdXRSZWN0LCBGbG9hdFJlY3Q+Ojp2YWx1ZSwgIidGbG9hdE9yTGF5
b3V0UmVjdCcgbXVzdCBiZSB0cml2aWFsbHkgY29uc3RydWN0aWJsZSBmcm9tICdGbG9hdFJlY3Qn
LiIpOworc3RhdGljX2Fzc2VydCghc3RkOjppc190cml2aWFsbHlfY29uc3RydWN0aWJsZTxGbG9h
dE9yTGF5b3V0UmVjdCwgRmxvYXRSZWN0Pjo6dmFsdWUsICInRmxvYXRPckxheW91dFJlY3QnIGNh
bm5vdCBiZSB0cml2aWFsbHkgY29uc3RydWN0aWJsZSBmcm9tICdGbG9hdFJlY3QnLiIpOworc3Rh
dGljX2Fzc2VydCghc3RkOjppc190cml2aWFsbHlfY29uc3RydWN0aWJsZTxGbG9hdE9yTGF5b3V0
UmVjdCwgTGF5b3V0UmVjdD46OnZhbHVlLCAiJ0Zsb2F0T3JMYXlvdXRSZWN0JyBjYW5ub3QgYmUg
dHJpdmlhbGx5IGNvbnN0cnVjdGlibGUgZnJvbSAnTGF5b3V0UmVjdCcuIik7CisKK3N0YXRpY19h
c3NlcnQoc3RkOjppc19kZWZhdWx0X2NvbnN0cnVjdGlibGU8RmxvYXRPckxheW91dFJlY3Q+Ojp2
YWx1ZSwgIidGbG9hdE9yTGF5b3V0UmVjdCcgbXVzdCBiZSB0cml2aWFsbHkgZGVmYXVsdC1jb25z
dHJ1Y3RpYmxlLiIpOworc3RhdGljX2Fzc2VydCghc3RkOjppc190cml2aWFsbHlfZGVmYXVsdF9j
b25zdHJ1Y3RpYmxlPEZsb2F0T3JMYXlvdXRSZWN0Pjo6dmFsdWUsICInRmxvYXRPckxheW91dFJl
Y3QnIGNhbm5vdCBiZSB0cml2aWFsbHkgZGVmYXVsdC1jb25zdHJ1Y3RpYmxlLiIpOworCitzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfY29weV9jb25zdHJ1Y3RpYmxlPEZsb2F0T3JMYXlvdXRSZWN0Pjo6
dmFsdWUsICInRmxvYXRPckxheW91dFJlY3QnIG11c3QgYmUgdHJpdmlhbGx5IGNvcHktY29uc3Ry
dWN0aWJsZS4iKTsKK3N0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfY29weV9jb25zdHJ1
Y3RpYmxlPEZsb2F0T3JMYXlvdXRSZWN0Pjo6dmFsdWUsICInRmxvYXRPckxheW91dFJlY3QnIG11
c3QgYmUgdHJpdmlhbGx5IGNvcHktY29uc3RydWN0aWJsZS4iKTsKKworc3RhdGljX2Fzc2VydChz
dGQ6OmlzX21vdmVfY29uc3RydWN0aWJsZTxGbG9hdE9yTGF5b3V0UmVjdD46OnZhbHVlLCAiJ0Zs
b2F0T3JMYXlvdXRSZWN0JyBtdXN0IGJlIHRyaXZpYWxseSBtb3ZlLWNvbnN0cnVjdGlibGUuIik7
CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X21vdmVfY29uc3RydWN0aWJsZTxGbG9h
dE9yTGF5b3V0UmVjdD46OnZhbHVlLCAiJ0Zsb2F0T3JMYXlvdXRSZWN0JyBtdXN0IGJlIHRyaXZp
YWxseSBtb3ZlLWNvbnN0cnVjdGlibGUuIik7CisKK3N0YXRpY19hc3NlcnQoc3RkOjppc19hc3Np
Z25hYmxlPEZsb2F0T3JMYXlvdXRSZWN0LCBGbG9hdFJlY3Q+Ojp2YWx1ZSwgIidGbG9hdE9yTGF5
b3V0UmVjdCcgbXVzdCBiZSB0cml2aWFsbHkgYXNzaWduYWJsZSBmcm9tICdGbG9hdFJlY3QnLiIp
Oworc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Fzc2lnbmFibGU8RmxvYXRPckxheW91dFJlY3QsIExh
eW91dFJlY3Q+Ojp2YWx1ZSwgIidGbG9hdE9yTGF5b3V0UmVjdCcgbXVzdCBiZSB0cml2aWFsbHkg
YXNzaWduYWJsZSBmcm9tICdMYXlvdXRSZWN0Jy4iKTsKK3N0YXRpY19hc3NlcnQoIXN0ZDo6aXNf
dHJpdmlhbGx5X2Fzc2lnbmFibGU8RmxvYXRPckxheW91dFJlY3QsIEZsb2F0UmVjdD46OnZhbHVl
LCAiJ0Zsb2F0T3JMYXlvdXRSZWN0JyBjYW5ub3QgYmUgdHJpdmlhbGx5IGFzc2lnbmFibGUgZnJv
bSAnRmxvYXRSZWN0Jy4iKTsKK3N0YXRpY19hc3NlcnQoIXN0ZDo6aXNfdHJpdmlhbGx5X2Fzc2ln
bmFibGU8RmxvYXRPckxheW91dFJlY3QsIExheW91dFJlY3Q+Ojp2YWx1ZSwgIidGbG9hdE9yTGF5
b3V0UmVjdCcgY2Fubm90IGJlIHRyaXZpYWxseSBhc3NpZ25hYmxlIGZyb20gJ0xheW91dFJlY3Qn
LiIpOworCitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29weV9hc3NpZ25hYmxlPEZsb2F0T3JMYXlv
dXRSZWN0Pjo6dmFsdWUsICInRmxvYXRPckxheW91dFJlY3QnIG11c3QgYmUgdHJpdmlhbGx5IGNv
cHktYXNzaWduYWJsZS4iKTsKK3N0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfY29weV9h
c3NpZ25hYmxlPEZsb2F0T3JMYXlvdXRSZWN0Pjo6dmFsdWUsICInRmxvYXRPckxheW91dFJlY3Qn
IG11c3QgYmUgdHJpdmlhbGx5IGNvcHktYXNzaWduYWJsZS4iKTsKKworc3RhdGljX2Fzc2VydChz
dGQ6OmlzX21vdmVfYXNzaWduYWJsZTxGbG9hdE9yTGF5b3V0UmVjdD46OnZhbHVlLCAiJ0Zsb2F0
T3JMYXlvdXRSZWN0JyBtdXN0IGJlIHRyaXZpYWxseSBtb3ZlLWFzc2lnbmFibGUuIik7CitzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X21vdmVfYXNzaWduYWJsZTxGbG9hdE9yTGF5b3V0
UmVjdD46OnZhbHVlLCAiJ0Zsb2F0T3JMYXlvdXRSZWN0JyBtdXN0IGJlIHRyaXZpYWxseSBtb3Zl
LWFzc2lnbmFibGUuIik7CisKK3N0YXRpY19hc3NlcnQoc3RkOjppc19kZXN0cnVjdGlibGU8Rmxv
YXRPckxheW91dFJlY3Q+Ojp2YWx1ZSwgIidGbG9hdE9yTGF5b3V0UmVjdCcgbXVzdCBiZSB0cml2
aWFsbHkgZGVzdHJ1Y3RpYmxlLiIpOworc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9k
ZXN0cnVjdGlibGU8RmxvYXRPckxheW91dFJlY3Q+Ojp2YWx1ZSwgIidGbG9hdE9yTGF5b3V0UmVj
dCcgbXVzdCBiZSB0cml2aWFsbHkgZGVzdHJ1Y3RpYmxlLiIpOworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IGM0MTZiZTkx
ZmYzZjU2OTcyYmNhYjRhMDVjNjg5NTNkODliYzYxMzAuLjNlZWEyMGY2YThlNzBkYjhiOWQyOWQ5
Yjc3OTM0NjY3NTEwNzc1NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3Bw
CkBAIC03NjYsOSArNzY2LDggQEAgTGF5b3V0UG9pbnQgUmVuZGVyQm94Ojpjb250ZW50Qm94TG9j
YXRpb24oKSBjb25zdAogICAgIHJldHVybiB7IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkg
KyBzY3JvbGxiYXJTcGFjZSwgYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkgfTsKIH0KIAotTGF5
b3V0UmVjdCBSZW5kZXJCb3g6OnJlZmVyZW5jZUJveChDU1NCb3hUeXBlIGJveFR5cGUpIGNvbnN0
CitGbG9hdE9yTGF5b3V0UmVjdCBSZW5kZXJCb3g6OnJlZmVyZW5jZUJveFJlY3QoQ1NTQm94VHlw
ZSBib3hUeXBlKSBjb25zdAogewotICAgIExheW91dFJlY3QgcmVmZXJlbmNlQm94OwogICAgIHN3
aXRjaCAoYm94VHlwZSkgewogICAgIGNhc2UgQ1NTQm94VHlwZTo6Q29udGVudEJveDoKICAgICBj
YXNlIENTU0JveFR5cGU6OkZpbGxCb3g6CkBAIC03ODQsNyArNzgzLDkgQEAgTGF5b3V0UmVjdCBS
ZW5kZXJCb3g6OnJlZmVyZW5jZUJveChDU1NCb3hUeXBlIGJveFR5cGUpIGNvbnN0CiAgICAgY2Fz
ZSBDU1NCb3hUeXBlOjpCb3hNaXNzaW5nOgogICAgICAgICByZXR1cm4gYm9yZGVyQm94UmVjdCgp
OwogICAgIH0KLSAgICByZXR1cm4geyB9OworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIExheW91dFJlY3QoKTsKIH0KIAogSW50UmVjdCBSZW5kZXJCb3g6OmFic29sdXRl
Q29udGVudEJveCgpIGNvbnN0CkBAIC0xNDYwLDggKzE0NjEsNyBAQCBib29sIFJlbmRlckJveDo6
aGl0VGVzdENsaXBQYXRoKGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExvY2F0aW9uLCBj
b25zdCBMYQogICAgIHN3aXRjaCAoc3R5bGUoKS5jbGlwUGF0aCgpLT50eXBlKCkpIHsKICAgICBj
YXNlIFBhdGhPcGVyYXRpb246OlNoYXBlOiB7CiAgICAgICAgIGF1dG8mIGNsaXBQYXRoID0gZG93
bmNhc3Q8U2hhcGVQYXRoT3BlcmF0aW9uPigqc3R5bGUoKS5jbGlwUGF0aCgpKTsKLSAgICAgICAg
YXV0byByZWZlcmVuY2VCb3hSZWN0ID0gcmVmZXJlbmNlQm94KGNsaXBQYXRoLnJlZmVyZW5jZUJv
eCgpKTsKLSAgICAgICAgaWYgKCFjbGlwUGF0aC5wYXRoRm9yUmVmZXJlbmNlUmVjdChyZWZlcmVu
Y2VCb3hSZWN0KS5jb250YWlucyhoaXRUZXN0TG9jYXRpb25JbkxvY2FsQ29vcmRpbmF0ZXMsIGNs
aXBQYXRoLndpbmRSdWxlKCkpKQorICAgICAgICBpZiAoIWNsaXBQYXRoLnBhdGhGb3JSZWZlcmVu
Y2VSZWN0KHJlZmVyZW5jZUJveFJlY3QoY2xpcFBhdGgucmVmZXJlbmNlQm94KCkpKS5jb250YWlu
cyhoaXRUZXN0TG9jYXRpb25JbkxvY2FsQ29vcmRpbmF0ZXMsIGNsaXBQYXRoLndpbmRSdWxlKCkp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggZWQ3Nzc3MGU3ZTQyOWQ1Yjc2MmMwZWJj
MjkxYmFmMDJmNDcwMjMyNS4uZDM1MGE0NjBkYzQ1MzViZDNmZTk1NzZkYWMwZGMyNzJlN2NmNDEw
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaApAQCAtMTY3LDggKzE2Nyw4IEBA
IHB1YmxpYzoKICAgICBMYXlvdXRSZWN0IGNvbnRlbnRCb3hSZWN0KCkgY29uc3Q7CiAgICAgTGF5
b3V0UG9pbnQgY29udGVudEJveExvY2F0aW9uKCkgY29uc3Q7CiAKLSAgICAvLyAuaHR0cHM6Ly9k
cmFmdHMuY3Nzd2cub3JnL2Nzcy10cmFuc2Zvcm1zLTEvI3JlZmVyZW5jZS1ib3gKLSAgICBMYXlv
dXRSZWN0IHJlZmVyZW5jZUJveChDU1NCb3hUeXBlKSBjb25zdDsKKyAgICAvLyBodHRwczovL3d3
dy53My5vcmcvVFIvY3NzLXRyYW5zZm9ybXMtMS8jcmVmZXJlbmNlLWJveAorICAgIEZsb2F0T3JM
YXlvdXRSZWN0IHJlZmVyZW5jZUJveFJlY3QoQ1NTQm94VHlwZSkgY29uc3QgZmluYWw7CiAKICAg
ICAvLyBUaGUgY29udGVudCBib3ggaW4gYWJzb2x1dGUgY29vcmRzLiBJZ25vcmVzIHRyYW5zZm9y
bXMuCiAgICAgSW50UmVjdCBhYnNvbHV0ZUNvbnRlbnRCb3goKSBjb25zdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAppbmRleCBlOTMyYmM3NGIxZmRlYjc0YWUz
MmQyYmY4MDcwOWY3YzVlYjZkZDI1Li5iMTU4NTcxYzM4OWU5MWZiMGEyMWJlZmI0OTk4NDc5YWE3
N2E1OWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCkBA
IC03OCw2ICs3OCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNWR0Vs
ZW1lbnRUeXBlSGVscGVycy5oIgogI2luY2x1ZGUgIlNWR0ltYWdlLmgiCisjaW5jbHVkZSAiU1ZH
TGVuZ3RoQ29udGV4dC5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKICNpbmNsdWRl
ICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKQEAgLTIzODksNCArMjM5MCwz
OCBAQCBPdmVyZmxvdyBSZW5kZXJFbGVtZW50OjplZmZlY3RpdmVPdmVyZmxvd1koKSBjb25zdAog
ICAgIHJldHVybiBvdmVyZmxvd1k7CiB9CiAKKy8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3Mt
dHJhbnNmb3Jtcy0xLyN0cmFuc2Zvcm0tYm94CitGbG9hdE9yTGF5b3V0UmVjdCBSZW5kZXJFbGVt
ZW50OjpyZWZlcmVuY2VCb3hSZWN0KENTU0JveFR5cGUgYm94VHlwZSkgY29uc3QKK3sKKyAgICAv
LyBDU1MgYm94IG1vZGVsIGNvZGUgaXMgaW1wbGVtZW50ZWQgaW4gUmVuZGVyQm94OjpyZWZlcmVu
Y2VCb3hSZWN0KCkuCisKKyAgICAvLyBGb3IgdGhlIGxlZ2FjeSBTVkcgZW5naW5lLCBSZW5kZXJF
bGVtZW50IGlzIHRoZSBvbmx5IGNsYXNzIHRoYXQncworICAgIC8vIHByZXNlbnQgaW4gdGhlIGFu
Y2VzdG9yIGNoYWluIG9mIGFsbCBTVkcgcmVuZGVyZXJzLiBJbiBMQlNFIHRoZQorICAgIC8vIGNv
bW1vbiBjbGFzcyBpcyBSZW5kZXJMYXllck1vZGVsT2JqZWN0LiBPbmNlIHRoZSBsZWdhY3kgU1ZH
IGVuZ2luZQorICAgIC8vIGlzIHJlbW92ZWQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgbW92ZWQg
dG8gUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC4KKyAgICAvLyBBcyB0aGlzIG1ldGhvZCBpcyB1c2Vk
IGJ5IGJvdGggU1ZHIGVuZ2luZXMsIHdlIG5lZWQgdG8gcGxhY2UgaXQKKyAgICAvLyBoZXJlIGlu
IFJlbmRlckVsZW1lbnQsIGFzIHRlbXBvcmFyeSBzb2x1dGlvbi4KKyAgICBpZiAoIWlzPFNWR0Vs
ZW1lbnQ+KGVsZW1lbnQoKSkpCisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CisKKyAgICBz
d2l0Y2ggKGJveFR5cGUpIHsKKyAgICBjYXNlIENTU0JveFR5cGU6OkJveE1pc3Npbmc6CisgICAg
Y2FzZSBDU1NCb3hUeXBlOjpDb250ZW50Qm94OgorICAgIGNhc2UgQ1NTQm94VHlwZTo6UGFkZGlu
Z0JveDoKKyAgICBjYXNlIENTU0JveFR5cGU6OkZpbGxCb3g6CisgICAgICAgIHJldHVybiBvYmpl
Y3RCb3VuZGluZ0JveCgpOworICAgIGNhc2UgQ1NTQm94VHlwZTo6Qm9yZGVyQm94OgorICAgIGNh
c2UgQ1NTQm94VHlwZTo6TWFyZ2luQm94OgorICAgIGNhc2UgQ1NTQm94VHlwZTo6U3Ryb2tlQm94
OgorICAgICAgICByZXR1cm4gc3Ryb2tlQm91bmRpbmdCb3goKTsKKyAgICBjYXNlIENTU0JveFR5
cGU6OlZpZXdCb3g6CisgICAgICAgIEZsb2F0U2l6ZSB2aWV3cG9ydFNpemU7CisgICAgICAgIFNW
R0xlbmd0aENvbnRleHQoZG93bmNhc3Q8U1ZHRWxlbWVudD4oZWxlbWVudCgpKSkuZGV0ZXJtaW5l
Vmlld3BvcnQodmlld3BvcnRTaXplKTsKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCh7IH0sIHZp
ZXdwb3J0U2l6ZSk7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIEZsb2F0UmVjdCgpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVs
ZW1lbnQuaAppbmRleCA1MWM1NTJjYmQ5ZTdmZDJiN2NiZTlkMTJkY2ZhM2YxMzFmZjdkZjFiLi5i
YjYxODRiY2VlYjE4Y2NiZWE2NDdjNGZjYjBlYjlhMGNjMGZjZDVlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgKQEAgLTIyLDYgKzIyLDcgQEAKIAogI3ByYWdtYSBv
bmNlCiAKKyNpbmNsdWRlICJGbG9hdE9yTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIkhpdFRlc3RS
ZXF1ZXN0LmgiCiAjaW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiUmVuZGVy
T2JqZWN0LmgiCkBAIC0yNTgsNiArMjU5LDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
YW5pbWF0aW9uRmluaXNoZWQoY29uc3QgU3RyaW5nJiAvKiBuYW1lICovKSB7IH0KICAgICB2aXJ0
dWFsIHZvaWQgdHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5RGlkQ2hhbmdlKCkgeyB9CiAKKyAgICAv
LyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXRyYW5zZm9ybXMtMS8jdHJhbnNmb3JtLWJveAor
ICAgIEZsb2F0T3JMYXlvdXRSZWN0IHRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3QoY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlKSBjb25zdCB7IHJldHVybiByZWZlcmVuY2VCb3hSZWN0KHRyYW5zZm9y
bUJveFRvQ1NTQm94VHlwZShzdHlsZS50cmFuc2Zvcm1Cb3goKSkpOyB9CisgICAgRmxvYXRPckxh
eW91dFJlY3QgdHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdCgpIGNvbnN0IHsgcmV0dXJuIHRyYW5z
Zm9ybVJlZmVyZW5jZUJveFJlY3Qoc3R5bGUoKSk7IH0KKworICAgIC8vIGh0dHBzOi8vd3d3Lncz
Lm9yZy9UUi9jc3MtdHJhbnNmb3Jtcy0xLyNyZWZlcmVuY2UtYm94CisgICAgdmlydHVhbCBGbG9h
dE9yTGF5b3V0UmVjdCByZWZlcmVuY2VCb3hSZWN0KENTU0JveFR5cGUpIGNvbnN0OworCiAgICAg
dmlydHVhbCB2b2lkIHN1c3BlbmRBbmltYXRpb25zKE1vbm90b25pY1RpbWUgPSBNb25vdG9uaWNU
aW1lKCkpIHsgfQogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gYW5pbWF0ZWRTdHls
ZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCA4NTBi
ZGU0OGU0OTI4ZTg2ZGMxNzZiNjIzMjFmZWVkOWI2ODZjM2NkLi5hYmE5NjJjZTRmOGFiM2VmOWFj
MGYyNWMxYjkwNGQ2NmI0ZDdjMzExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAKQEAgLTEyOTYsMjEgKzEyOTYsMTggQEAgdm9pZCBSZW5kZXJMYXllcjo6ZGlydHlB
bmNlc3RvckNoYWluSGFzQmxlbmRpbmdEZXNjZW5kYW50cygpCiB9CiAjZW5kaWYKIAotc3RhdGlj
IGlubGluZSBMYXlvdXRSZWN0IGNvbXB1dGVSZWZlcmVuY2VSZWN0RnJvbUJveChjb25zdCBSZW5k
ZXJCb3gmIGJveCwgQ1NTQm94VHlwZSBib3hUeXBlLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRG
cm9tUm9vdCkKK3N0YXRpYyBpbmxpbmUgRmxvYXRPckxheW91dFJlY3QgY29tcHV0ZVJlZmVyZW5j
ZUJveChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlciwgQ1NTQm94VHlwZSBi
b3hUeXBlLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdCwgTGF5b3V0UmVjdCByb290
UmVsYXRpdmVCb3VuZHMpCiB7Ci0gICAgYXV0byByZWZlcmVuY2VCb3ggPSBib3gucmVmZXJlbmNl
Qm94KGJveFR5cGUpOwotICAgIHJlZmVyZW5jZUJveC5tb3ZlKG9mZnNldEZyb21Sb290KTsKLSAg
ICByZXR1cm4gcmVmZXJlbmNlQm94OwotfQorICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0g
dHJhbnNmb3JtIHN1cHBvcnQgZm9yIFJlbmRlclNWR01vZGVsT2JqZWN0IGRlcml2ZWQgcmVuZGVy
ZXJzCiAKLXN0YXRpYyBpbmxpbmUgTGF5b3V0UmVjdCBjb21wdXRlUmVmZXJlbmNlQm94KGNvbnN0
IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIENTU0JveFR5cGUgYm94VHlwZSwgY29uc3QgTGF5b3V0
U2l6ZSYgb2Zmc2V0RnJvbVJvb3QsIGNvbnN0IExheW91dFJlY3QmIHJvb3RSZWxhdGl2ZUJvdW5k
cykKLXsKICAgICAvLyBGSVhNRTogU3VwcG9ydCBkaWZmZXJlbnQgcmVmZXJlbmNlIGJveGVzIGZv
ciBpbmxpbmUgY29udGVudC4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTI5MDQ3CiAgICAgaWYgKCFyZW5kZXJlci5pc0JveCgpKQotICAgICAgICByZXR1
cm4gcm9vdFJlbGF0aXZlQm91bmRzOworICAgICAgICByZXR1cm4gV1RGTW92ZShyb290UmVsYXRp
dmVCb3VuZHMpOwogICAgIAotICAgIHJldHVybiBjb21wdXRlUmVmZXJlbmNlUmVjdEZyb21Cb3go
ZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlciksIGJveFR5cGUsIG9mZnNldEZyb21Sb290KTsK
KyAgICBhdXRvIHJlZmVyZW5jZUJveCA9IHJlbmRlcmVyLnJlZmVyZW5jZUJveFJlY3QoYm94VHlw
ZSk7CisgICAgcmVmZXJlbmNlQm94Lm1vdmUob2Zmc2V0RnJvbVJvb3QpOworICAgIHJldHVybiBy
ZWZlcmVuY2VCb3g7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVRyYW5zZm9ybSgpCkBA
IC0xMzMyLDEyICsxMzI5LDggQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlVHJhbnNmb3JtKCkK
ICAgICBpZiAoaGFzVHJhbnNmb3JtKSB7CiAgICAgICAgIG1fdHJhbnNmb3JtLT5tYWtlSWRlbnRp
dHkoKTsKIAotICAgICAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIHJlZmVyZW5jZSBib3gg
Y29tcHV0YXRpb24gZm9yIFJlbmRlclNWR01vZGVsT2JqZWN0IGRlcml2ZWQgcmVuZGVyZXJzCi0g
ICAgICAgIEZsb2F0UmVjdCByZWZlcmVuY2VCb3g7Ci0gICAgICAgIGlmIChpczxSZW5kZXJCb3g+
KHJlbmRlcmVyKCkpKQotICAgICAgICAgICAgcmVmZXJlbmNlQm94ID0gc25hcFJlY3RUb0Rldmlj
ZVBpeGVscyhkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLnJlZmVyZW5jZUJveCh0cmFu
c2Zvcm1Cb3hUb0NTU0JveFR5cGUocmVuZGVyZXIoKS5zdHlsZSgpLnRyYW5zZm9ybUJveCgpKSks
IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKLQotICAgICAgICBy
ZW5kZXJlcigpLmFwcGx5VHJhbnNmb3JtKCptX3RyYW5zZm9ybSwgcmVmZXJlbmNlQm94KTsKKyAg
ICAgICAgYXV0byByZWZlcmVuY2VCb3hSZWN0Rm9yUGFpbnRpbmcgPSByZW5kZXJlcigpLnRyYW5z
Zm9ybVJlZmVyZW5jZUJveFJlY3QoKS5yZWN0Rm9yUGFpbnRpbmcocmVuZGVyZXIoKS5kb2N1bWVu
dCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOworICAgICAgICByZW5kZXJlcigpLmFwcGx5VHJhbnNm
b3JtKCptX3RyYW5zZm9ybSwgcmVmZXJlbmNlQm94UmVjdEZvclBhaW50aW5nKTsKICAgICAgICAg
bWFrZU1hdHJpeFJlbmRlcmFibGUoKm1fdHJhbnNmb3JtLCBjYW5SZW5kZXIzRFRyYW5zZm9ybXMo
KSk7CiAgICAgfQogCkBAIC0xMzY2LDEwICsxMzU5LDEwIEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4
IFJlbmRlckxheWVyOjpjdXJyZW50VHJhbnNmb3JtKE9wdGlvblNldDxSZW5kZXJTdHlsZTo6VHJh
bnNmCiAgICAgYXV0byBzdHlsZWFibGUgPSBTdHlsZWFibGU6OmZyb21SZW5kZXJlcihyZW5kZXJC
b3gpOwogICAgIGlmICgoc3R5bGVhYmxlICYmIHN0eWxlYWJsZS0+aXNSdW5uaW5nQWNjZWxlcmF0
ZWRUcmFuc2Zvcm1BbmltYXRpb24oKSkgfHwgIW9wdGlvbnMuY29udGFpbnMoUmVuZGVyU3R5bGU6
OlRyYW5zZm9ybU9wZXJhdGlvbk9wdGlvbjo6VHJhbnNmb3JtT3JpZ2luKSkgewogICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGFuaW1hdGVkU3R5bGUgPSByZW5kZXJCb3guYW5p
bWF0ZWRTdHlsZSgpOwotICAgICAgICBhdXRvIHBpeGVsU25hcHBlZEJvcmRlclJlY3QgPSBzbmFw
UmVjdFRvRGV2aWNlUGl4ZWxzKHJlbmRlckJveC5yZWZlcmVuY2VCb3godHJhbnNmb3JtQm94VG9D
U1NCb3hUeXBlKGFuaW1hdGVkU3R5bGUtPnRyYW5zZm9ybUJveCgpKSksIHJlbmRlckJveC5kb2N1
bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOworICAgICAgICBhdXRvIHJlZmVyZW5jZUJveFJl
Y3RGb3JQYWludGluZyA9IHJlbmRlckJveC50cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCkucmVj
dEZvclBhaW50aW5nKHJlbmRlckJveC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwog
CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKLSAgICAgICAgYW5pbWF0
ZWRTdHlsZS0+YXBwbHlUcmFuc2Zvcm0odHJhbnNmb3JtLCBwaXhlbFNuYXBwZWRCb3JkZXJSZWN0
LCBvcHRpb25zKTsKKyAgICAgICAgYW5pbWF0ZWRTdHlsZS0+YXBwbHlUcmFuc2Zvcm0odHJhbnNm
b3JtLCByZWZlcmVuY2VCb3hSZWN0Rm9yUGFpbnRpbmcsIG9wdGlvbnMpOwogCiAgICAgICAgIG1h
a2VNYXRyaXhSZW5kZXJhYmxlKHRyYW5zZm9ybSwgY2FuUmVuZGVyM0RUcmFuc2Zvcm1zKCkpOwog
ICAgICAgICByZXR1cm4gdHJhbnNmb3JtOwpAQCAtMTgwMSwxMSArMTc5NCwxMSBAQCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBSZW5kZXJMYXllcjo6cGVyc3BlY3RpdmVUcmFuc2Zvcm0oY29uc3QgTGF5
b3V0UmVjdCYgbGF5ZXJSZQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgYXV0byBkZXZpY2VT
Y2FsZUZhY3RvciA9IHJlbmRlckJveC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7Ci0g
ICAgYXV0byByZWZlcmVuY2VCb3ggPSByZW5kZXJCb3gucmVmZXJlbmNlQm94KHRyYW5zZm9ybUJv
eFRvQ1NTQm94VHlwZShzdHlsZS50cmFuc2Zvcm1Cb3goKSkpOwotICAgIGF1dG8gcGl4ZWxTbmFw
cGVkUmVmZXJlbmNlQm94ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhyZWZlcmVuY2VCb3gsIGRl
dmljZVNjYWxlRmFjdG9yKTsKKyAgICBhdXRvIHJlZmVyZW5jZUJveFJlY3RGb3JQYWludGluZyA9
IHJlbmRlckJveC50cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCkuZmxvYXRSZWN0Rm9yUGFpbnRp
bmcoZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIC8vIEZJWE1FOiBbTEJTRV0gQXZvaWQgcGl4ZWwg
c25hcHBpbmcgaW4gU1ZHIHN1YnRyZWUuCiAgICAgYXV0byBzbmFwcGVkTGF5ZXJSZWN0ID0gc25h
cFJlY3RUb0RldmljZVBpeGVscyhsYXllclJlY3QsIGRldmljZVNjYWxlRmFjdG9yKTsKIAotICAg
IGF1dG8gcGVyc3BlY3RpdmVPcmlnaW4gPSBwaXhlbFNuYXBwZWRSZWZlcmVuY2VCb3gubG9jYXRp
b24oKSAtIHRvRmxvYXRTaXplKHNuYXBwZWRMYXllclJlY3QubG9jYXRpb24oKSkgKyBmbG9hdFBv
aW50Rm9yTGVuZ3RoUG9pbnQoc3R5bGUucGVyc3BlY3RpdmVPcmlnaW4oKSwgcGl4ZWxTbmFwcGVk
UmVmZXJlbmNlQm94LnNpemUoKSk7CisgICAgYXV0byBwZXJzcGVjdGl2ZU9yaWdpbiA9IHJlZmVy
ZW5jZUJveFJlY3RGb3JQYWludGluZy5sb2NhdGlvbigpIC0gdG9GbG9hdFNpemUoc25hcHBlZExh
eWVyUmVjdC5sb2NhdGlvbigpKSArIGZsb2F0UG9pbnRGb3JMZW5ndGhQb2ludChzdHlsZS5wZXJz
cGVjdGl2ZU9yaWdpbigpLCByZWZlcmVuY2VCb3hSZWN0Rm9yUGFpbnRpbmcuc2l6ZSgpKTsKIAog
ICAgIC8vIEEgcGVyc3BlY3RpdmUgb3JpZ2luIG9mIDAsMCBtYWtlcyB0aGUgdmFuaXNoaW5nIHBv
aW50IGluIHRoZSBjZW50ZXIgb2YgdGhlIGVsZW1lbnQuCiAgICAgLy8gV2Ugd2FudCBpdCB0byBi
ZSBpbiB0aGUgdG9wLWxlZnQsIHNvIHN1YnRyYWN0IGhhbGYgdGhlIGhlaWdodCBhbmQgd2lkdGgu
CkBAIC0xODIzLDYgKzE4MTYsNyBAQCBGbG9hdFBvaW50IFJlbmRlckxheWVyOjpwZXJzcGVjdGl2
ZU9yaWdpbigpIGNvbnN0CiB7CiAgICAgaWYgKCFyZW5kZXJlcigpLmhhc1RyYW5zZm9ybVJlbGF0
ZWRQcm9wZXJ0eSgpKQogICAgICAgICByZXR1cm4geyB9OworICAgIC8vIEZJWE1FOiBUaGlzIHVz
ZXMgdGhlIHdyb25nLCB0cmFuc2Zvcm0tYm94IHVuYXdhcmUsIGdlb21ldHJ5LgogICAgIHJldHVy
biBmbG9hdFBvaW50Rm9yTGVuZ3RoUG9pbnQocmVuZGVyZXIoKS5zdHlsZSgpLnBlcnNwZWN0aXZl
T3JpZ2luKCksIHJlbmRlcmVyQm9yZGVyQm94UmVjdCgpLnNpemUoKSk7CiB9CiAKQEAgLTMyMTIs
MjIgKzMyMDYsOCBAQCBzdGQ6OnBhaXI8UGF0aCwgV2luZFJ1bGU+IFJlbmRlckxheWVyOjpjb21w
dXRlQ2xpcFBhdGgoY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RgogCiAgICAgaWYgKGlzPFNoYXBl
UGF0aE9wZXJhdGlvbj4oKnN0eWxlLmNsaXBQYXRoKCkpKSB7CiAgICAgICAgIGF1dG8mIGNsaXBQ
YXRoID0gZG93bmNhc3Q8U2hhcGVQYXRoT3BlcmF0aW9uPigqc3R5bGUuY2xpcFBhdGgoKSk7Ci0K
LSAgICAgICAgTGF5b3V0UmVjdCByZWZlcmVuY2VCb3g7Ci0gICAgICAgIGlmIChpczxSZW5kZXJC
b3g+KHJlbmRlcmVyKCkpKSB7Ci0gICAgICAgICAgICByZWZlcmVuY2VCb3ggPSBkb3duY2FzdDxS
ZW5kZXJCb3g+KHJlbmRlcmVyKCkpLnJlZmVyZW5jZUJveChjbGlwUGF0aC5yZWZlcmVuY2VCb3go
KSk7Ci0gICAgICAgICAgICByZWZlcmVuY2VCb3gubW92ZShvZmZzZXRGcm9tUm9vdCk7Ci0jaWYg
RU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCi0gICAgICAgIH0gZWxzZSBpZiAoaXM8UmVu
ZGVyU1ZHTW9kZWxPYmplY3Q+KHJlbmRlcmVyKCkpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTog
W0xCU0VdIFVwc3RyZWFtIGNsaXBwaW5nIHN1cHBvcnQgZm9yIFJlbmRlclNWR01vZGVsT2JqZWN0
IGRlcml2ZWQgcmVuZGVyZXJzCi0jZW5kaWYKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IC8vIFJlZmVyZW5jZSBib3ggZm9yIGlubGluZXMgaXMgbm90IHdlbGwgZGVmaW5lZDogaHR0cHM6
Ly9naXRodWIuY29tL3czYy9jc3N3Zy1kcmFmdHMvaXNzdWVzLzYzODMKLSAgICAgICAgICAgIHJl
ZmVyZW5jZUJveCA9IHJvb3RSZWxhdGl2ZUJvdW5kc0Zvck5vbkJveGVzOwotICAgICAgICB9Ci0K
LSAgICAgICAgYXV0byBzbmFwcGVkUmVmZXJlbmNlQm94ID0gc25hcFJlY3RUb0RldmljZVBpeGVs
cyhyZWZlcmVuY2VCb3gsIGRldmljZVNjYWxlRmFjdG9yKTsKLSAgICAgICAgcmV0dXJuIHsgY2xp
cFBhdGgucGF0aEZvclJlZmVyZW5jZVJlY3Qoc25hcHBlZFJlZmVyZW5jZUJveCksIGNsaXBQYXRo
LndpbmRSdWxlKCkgfTsKKyAgICAgICAgYXV0byByZWZlcmVuY2VCb3hSZWN0ID0gY29tcHV0ZVJl
ZmVyZW5jZUJveChyZW5kZXJlcigpLCBjbGlwUGF0aC5yZWZlcmVuY2VCb3goKSwgb2Zmc2V0RnJv
bVJvb3QsIHJvb3RSZWxhdGl2ZUJvdW5kc0Zvck5vbkJveGVzKTsKKyAgICAgICAgcmV0dXJuIHsg
Y2xpcFBhdGgucGF0aEZvclJlZmVyZW5jZVJlY3QocmVmZXJlbmNlQm94UmVjdC5mbG9hdFJlY3RG
b3JQYWludGluZyhkZXZpY2VTY2FsZUZhY3RvcikpLCBjbGlwUGF0aC53aW5kUnVsZSgpIH07CiAg
ICAgfQogCiAgICAgaWYgKGlzPEJveFBhdGhPcGVyYXRpb24+KCpzdHlsZS5jbGlwUGF0aCgpKSAm
JiBpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKSB7CkBAIC0zMjY5LDE2ICszMjQ5LDIwIEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OnNldHVwQ2xpcFBhdGgoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBH
cmFwaGljc0NvbnRleHRTdGF0ZVNhCiAgICAgICAgICAgICAvLyBVc2UgdGhlIGJvcmRlciBib3gg
YXMgdGhlIHJlZmVyZW5jZSBib3gsIGV2ZW4gdGhvdWdoIHRoaXMgaXMgbm90IGNsZWFybHkgc3Bl
Y2lmaWVkOiBodHRwczovL2dpdGh1Yi5jb20vdzNjL2Nzc3dnLWRyYWZ0cy9pc3N1ZXMvNTc4Ni4K
ICAgICAgICAgICAgIC8vIGNsaXBwZWRDb250ZW50Qm91bmRzIGlzIHVzZWQgYXMgdGhlIHJlZmVy
ZW5jZSBib3ggZm9yIGlubGluZXMsIHdoaWNoIGlzIGFsc28gcG9vcmx5IHNwZWNpZmllZDogaHR0
cHM6Ly9naXRodWIuY29tL3czYy9jc3N3Zy1kcmFmdHMvaXNzdWVzLzYzODMuCiAgICAgICAgICAg
ICBhdXRvIHJlZmVyZW5jZUJveCA9IGNvbXB1dGVSZWZlcmVuY2VCb3gocmVuZGVyZXIoKSwgQ1NT
Qm94VHlwZTo6Qm9yZGVyQm94LCBvZmZzZXRGcm9tUm9vdCwgY2xpcHBlZENvbnRlbnRCb3VuZHMp
OwotICAgICAgICAgICAgYXV0byBzbmFwcGVkUmVmZXJlbmNlQm94ID0gc25hcFJlY3RUb0Rldmlj
ZVBpeGVscyhyZWZlcmVuY2VCb3gsIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZh
Y3RvcigpKTsKLSAgICAgICAgICAgIGF1dG8gb2Zmc2V0ID0gc25hcHBlZFJlZmVyZW5jZUJveC5s
b2NhdGlvbigpOwogCisgICAgICAgICAgICBGbG9hdFJlY3QgcmVmZXJlbmNlQm94UmVjdCA9IHJl
ZmVyZW5jZUJveDsKKyAgICAgICAgICAgIHJlZmVyZW5jZUJveFJlY3Quc2V0TG9jYXRpb24oeyB9
KTsKKworICAgICAgICAgICAgYXV0byByZWZlcmVuY2VCb3hSZWN0Rm9yUGFpbnRpbmcgPSByZWZl
cmVuY2VCb3guZmxvYXRSZWN0Rm9yUGFpbnRpbmcocmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmlj
ZVNjYWxlRmFjdG9yKCkpOworICAgICAgICAgICAgYXV0byBvZmZzZXQgPSByZWZlcmVuY2VCb3hS
ZWN0Rm9yUGFpbnRpbmcubG9jYXRpb24oKTsKKworICAgICAgICAgICAgLy8gRklYTUU6IFtMQlNF
XSBBdm9pZCBwaXhlbCBzbmFwcGluZyBpbiBTVkcgc3VidHJlZS4KICAgICAgICAgICAgIGF1dG8g
c25hcHBlZENsaXBwaW5nQm91bmRzID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhjbGlwcGVkQ29u
dGVudEJvdW5kcywgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwog
ICAgICAgICAgICAgc25hcHBlZENsaXBwaW5nQm91bmRzLm1vdmVCeSgtb2Zmc2V0KTsKIAogICAg
ICAgICAgICAgc3RhdGVTYXZlci5zYXZlKCk7CiAgICAgICAgICAgICBjb250ZXh0LnRyYW5zbGF0
ZShvZmZzZXQpOwotICAgICAgICAgICAgRmxvYXRSZWN0IGNsaXBQYXRoUmVmZXJlbmNlQm94IHsg
eyB9LCByZWZlcmVuY2VCb3guc2l6ZSgpIH07Ci0gICAgICAgICAgICBjbGlwcGVyUmVuZGVyZXIt
PmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQoY29udGV4dCwgcmVuZGVyZXIoKSwgY2xpcFBhdGhSZWZl
cmVuY2VCb3gsIHNuYXBwZWRDbGlwcGluZ0JvdW5kcywgcmVuZGVyZXIoKS5zdHlsZSgpLmVmZmVj
dGl2ZVpvb20oKSk7CisgICAgICAgICAgICBjbGlwcGVyUmVuZGVyZXItPmFwcGx5Q2xpcHBpbmdU
b0NvbnRleHQoY29udGV4dCwgcmVuZGVyZXIoKSwgcmVmZXJlbmNlQm94UmVjdCwgc25hcHBlZENs
aXBwaW5nQm91bmRzLCByZW5kZXJlcigpLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAg
ICAgICAgIGNvbnRleHQudHJhbnNsYXRlKC1vZmZzZXQpOwogICAgICAgICB9CiAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKaW5k
ZXggY2MzOGVjNzAzMGU2MGNlMTc1OWIxMzI4N2RlMjVmNzNkNTY1Yzg1OC4uZTJiZWI0YmE4YzEx
NTdkY2JiMTI4NjQ5YTNlZGU1NmUzODRlOGQwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCkBAIC0zNDMsMjYgKzM0Myw2IEBAIGJv
b2wgU1ZHUmVuZGVyU3VwcG9ydDo6ZmlsdGVyc0ZvcmNlQ29udGFpbmVyTGF5b3V0KGNvbnN0IFJl
bmRlckVsZW1lbnQmIHJlbmRlcmVyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUZsb2F0UmVjdCBT
VkdSZW5kZXJTdXBwb3J0Ojp0cmFuc2Zvcm1SZWZlcmVuY2VCb3goY29uc3QgUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIsIGNvbnN0IFNWR0VsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSkKLXsKLSAgICBzd2l0Y2ggKHN0eWxlLnRyYW5zZm9ybUJveCgpKSB7Ci0gICAgY2Fz
ZSBUcmFuc2Zvcm1Cb3g6OkJvcmRlckJveDoKLSAgICAgICAgLy8gRm9yIFNWRyBlbGVtZW50cyB3
aXRob3V0IGFuIGFzc29jaWF0ZWQgQ1NTIGxheW91dCBib3gsIHRoZSB1c2VkIHZhbHVlIGZvciBi
b3JkZXItYm94IGlzIHN0cm9rZS1ib3guCi0gICAgY2FzZSBUcmFuc2Zvcm1Cb3g6OlN0cm9rZUJv
eDoKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVyLnN0cm9rZUJvdW5kaW5nQm94KCk7Ci0gICAgY2Fz
ZSBUcmFuc2Zvcm1Cb3g6OkNvbnRlbnRCb3g6Ci0gICAgICAgIC8vIEZvciBTVkcgZWxlbWVudHMg
d2l0aG91dCBhbiBhc3NvY2lhdGVkIENTUyBsYXlvdXQgYm94LCB0aGUgdXNlZCB2YWx1ZSBmb3Ig
Y29udGVudC1ib3ggaXMgZmlsbC1ib3guCi0gICAgY2FzZSBUcmFuc2Zvcm1Cb3g6OkZpbGxCb3g6
Ci0gICAgICAgIHJldHVybiByZW5kZXJlci5vYmplY3RCb3VuZGluZ0JveCgpOwotICAgIGNhc2Ug
VHJhbnNmb3JtQm94OjpWaWV3Qm94OiB7Ci0gICAgICAgIEZsb2F0U2l6ZSB2aWV3cG9ydFNpemU7
Ci0gICAgICAgIFNWR0xlbmd0aENvbnRleHQoJmVsZW1lbnQpLmRldGVybWluZVZpZXdwb3J0KHZp
ZXdwb3J0U2l6ZSk7Ci0gICAgICAgIHJldHVybiBGbG9hdFJlY3QgeyB7IH0sIHZpZXdwb3J0U2l6
ZSB9OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB7IH07Ci19Ci0KIGlubGluZSBGbG9h
dFJlY3QgY2xpcFBhdGhSZWZlcmVuY2VCb3goY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIs
IENTU0JveFR5cGUgYm94VHlwZSkKIHsKICAgICBGbG9hdFJlY3QgcmVmZXJlbmNlQm94OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuaAppbmRleCA5
Y2NmY2JlYjU3N2E3NzNkYzg4MDdkOTUzOWQ2MmE4MWU1NjE5Yjg5Li5kNDNkMGM3Zjc1OGQxNWZi
NzA0NmM5MWJlMGNhOWRhNTNkZDg1NjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuaApAQCAtODIsOCArODIsNiBAQCBwdWJsaWM6CiAKICAg
ICBzdGF0aWMgdm9pZCBzdHlsZUNoYW5nZWQoUmVuZGVyRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0
eWxlKik7CiAgICAgCi0gICAgc3RhdGljIEZsb2F0UmVjdCB0cmFuc2Zvcm1SZWZlcmVuY2VCb3go
Y29uc3QgUmVuZGVyRWxlbWVudCYsIGNvbnN0IFNWR0VsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHls
ZSYpOwotCiAjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKICAgICBzdGF0aWMgYm9vbCBpc29s
YXRlc0JsZW5kaW5nKGNvbnN0IFJlbmRlclN0eWxlJik7CiAgICAgc3RhdGljIHZvaWQgdXBkYXRl
TWFza2VkQW5jZXN0b3JTaG91bGRJc29sYXRlQmxlbmRpbmcoY29uc3QgUmVuZGVyRWxlbWVudCYp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYXBoaWNzRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhcGhpY3NFbGVtZW50LmNwcAppbmRleCBkYzEwOGU1
YjIzYzQ2ZGE5NTYwMGEwMmFhYzYyMDdlZDViNjY1Njk2Li5hNjA5OTU2NGZhYzM0MzhjYjJiODQz
YjA5MzkwOGI3MjJlMGRjMDYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3Jh
cGhpY3NFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhcGhpY3NFbGVt
ZW50LmNwcApAQCAtODAsMTIgKzgwLDEwIEBAIEFmZmluZVRyYW5zZm9ybSBTVkdHcmFwaGljc0Vs
ZW1lbnQ6OmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSBjb25zdAogCiAgICAgLy8gSG9ub3IgYW55
IG9mIHRoZSB0cmFuc2Zvcm0tcmVsYXRlZCBDU1MgcHJvcGVydGllcyBpZiBzZXQuCiAgICAgaWYg
KGhhc1NwZWNpZmllZFRyYW5zZm9ybSB8fCAoc3R5bGUgJiYgKHN0eWxlLT50cmFuc2xhdGUoKSB8
fCBzdHlsZS0+c2NhbGUoKSB8fCBzdHlsZS0+cm90YXRlKCkpKSkgewotICAgICAgICBhdXRvIGJv
dW5kaW5nQm94ID0gU1ZHUmVuZGVyU3VwcG9ydDo6dHJhbnNmb3JtUmVmZXJlbmNlQm94KCpyZW5k
ZXJlcigpLCAqdGhpcywgKnN0eWxlKTsKLSAgICAgICAgCiAgICAgICAgIC8vIE5vdGU6IG9iamVj
dEJvdW5kaW5nQm94IGlzIGFuIGVtcHR5UmVjdCBmb3IgZWxlbWVudHMgbGlrZSBwYXR0ZXJuIG9y
IGNsaXBQYXRoLgogICAgICAgICAvLyBTZWUgdGhlICJPYmplY3QgYm91bmRpbmcgYm94IHVuaXRz
IiBzZWN0aW9uIG9mIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2NzczMtdHJhbnNmb3Jtcy8KICAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwotICAgICAgICBzdHlsZS0+YXBw
bHlUcmFuc2Zvcm0odHJhbnNmb3JtLCBib3VuZGluZ0JveCk7CisgICAgICAgIHN0eWxlLT5hcHBs
eVRyYW5zZm9ybSh0cmFuc2Zvcm0sIHJlbmRlcmVyKCktPnRyYW5zZm9ybVJlZmVyZW5jZUJveFJl
Y3QoKSk7CiAKICAgICAgICAgLy8gRmxhdHRlbiBhbnkgM0QgdHJhbnNmb3JtLgogICAgICAgICBt
YXRyaXggPSB0cmFuc2Zvcm0udG9BZmZpbmVUcmFuc2Zvcm0oKTsKQEAgLTEwMCw3ICs5OCw3IEBA
IEFmZmluZVRyYW5zZm9ybSBTVkdHcmFwaGljc0VsZW1lbnQ6OmFuaW1hdGVkTG9jYWxUcmFuc2Zv
cm0oKSBjb25zdAogCiAgICAgLy8gSWYgd2UgZGlkbid0IGhhdmUgdGhlIENTUyAidHJhbnNmb3Jt
IiBwcm9wZXJ0eSBzZXQsIHdlIG11c3QgYWNjb3VudCBmb3IgdGhlICJ0cmFuc2Zvcm0iIGF0dHJp
YnV0ZS4KICAgICBpZiAoIWhhc1NwZWNpZmllZFRyYW5zZm9ybSAmJiBzdHlsZSkgewotICAgICAg
ICBhdXRvIGJvdW5kaW5nQm94ID0gU1ZHUmVuZGVyU3VwcG9ydDo6dHJhbnNmb3JtUmVmZXJlbmNl
Qm94KCpyZW5kZXJlcigpLCAqdGhpcywgKnN0eWxlKTsKKyAgICAgICAgRmxvYXRSZWN0IGJvdW5k
aW5nQm94ID0gcmVuZGVyZXIoKS0+dHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdCgpOwogICAgICAg
ICBhdXRvIHQgPSBmbG9hdFBvaW50Rm9yTGVuZ3RoUG9pbnQoc3R5bGUtPnRyYW5zZm9ybU9yaWdp
blhZKCksIGJvdW5kaW5nQm94LnNpemUoKSkgKyBib3VuZGluZ0JveC5sb2NhdGlvbigpOwogICAg
ICAgICBtYXRyaXgudHJhbnNsYXRlKHQpOwogICAgICAgICBtYXRyaXggKj0gdHJhbnNmb3JtKCku
Y29uY2F0ZW5hdGUoKTsK
</data>
<flag name="commit-queue"
          id="482275"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454584</attachid>
            <date>2022-03-14 05:45:31 -0700</date>
            <delta_ts>2022-03-21 02:48:59 -0700</delta_ts>
            <desc>Patch, v7</desc>
            <filename>bug-237554-20220314054530.patch</filename>
            <type>text/plain</type>
            <size>38915</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMjIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGE4N2Y1ZTJjZWIxNDVh
NjQwMDQ5YzkxMmZjYTNkNzRmMmY1ZTc4YS4uM2U0ZDMwYjEyNDZlZjg0NzJiZTg2YzU0ODEzMzZj
ZDgwMTk5NDQwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDIyLTAzLTE0ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFVuaWZ5
ICd0cmFuc2Zvcm0tYm94JyByZWZlcmVuY2UgYm94IGNvbXB1dGF0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc1NTQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgdGhlIGNvZGUgdG8g
Y29tcHV0ZSB0aGUgcmVmZXJlbmNlIGJveCwgYWNjb3JkaW5nIHRvIHRoZSBDU1MgJ3RyYW5zZm9y
bS1ib3gnCisgICAgICAgIHByb3BlcnR5IGlzIHNwcmlua2xlZCBvdmVyIHZhcmlvdXMgcGxhY2Vz
OiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24sIFNWR1JlbmRlclN1cHBvcnQsCisgICAgICAg
IFJlbmRlckJveCwgcGFydHMgaW4gUmVuZGVyTGF5ZXIuCisKKyAgICAgICAgQ2xlYW51cCBhbmQg
dW5pZnkgdGhlIGNvZGUgaW4gYSBzaW5nbGUgcGxhY2U6IGEgbmV3ICdyZWZlcmVuY2VCb3hSZWN0
KCknICBtZXRob2QgaW1wbGVtZW50aW5nCisgICAgICAgIHRoZSBjb21wdXRhdGlvbiBmb3IgYm90
aCBTVkcvSFRNTCwgd2hlcmUgdGhlIFNWRyBjb2RlIGxpdmVzIGluIFJlbmRlckVsZW1lbnQgKHRo
ZSBvbmx5IHNoYXJlZAorICAgICAgICBiYXNlIGNsYXNzIGJldHdlZW4gbGVnYWN5IFNWRy9MQlNF
KSBhbmQgdGhlIEhUTUwgY29kZSBpbiBSZW5kZXJCb3guIFRoZSBIVE1ML0NTUyBpbXBsZW1lbnRh
dGlvbgorICAgICAgICB3YXMgYWxyZWFkeSBjb250YWluZWQgaW4gUmVuZGVyQm94OjpyZWZlcmVu
Y2VCb3goKSBhbmQgd2FzIHJlbmFtZWQgdG8gcmVmZXJlbmNlQm94UmVjdCgpIHRvIGZvbGxvdwor
ICAgICAgICB0aGUgbmFtaW5nIGNvbnZlbnRpb24gZm9yIHRoZSBvdGhlciBDU1MgYm94IGdlb2Vt
dHJ5IGhlbHBlcnMgc3VjaCBhcyBjb250ZW50Qm94UmVjdCgpLAorICAgICAgICBib3JkZXJCb3hS
ZWN0KCksIGV0Yy4KKworICAgICAgICBGb3IgU1ZHcyBuZWVkcyByZWZlcmVuY2VCb3hSZWN0KCkg
bmVlZHMgdG8gcmV0dXJuIGEgRmxvYXRSZWN0LCB3aGVyZWFzIGZvciBDU1MvSFRNTCBMYXlvdXRS
ZWN0CisgICAgICAgIGlzIHRoZSByaWdodCBjaG9pY2UuIEludHJvZHVjZSBhICdGbG9hdE9yTGF5
b3V0UmVjdCcgaGVscGVyIHRoYXQgY2FuIGJlIHVzZWQgYXMgcmV0dXJuIHZhbHVlL2FyZ3VtZW50
CisgICAgICAgIGluL3RvIGZ1bmN0aW9ucyB0aGF0IGVpdGhlciByZXR1cm4vbmVlZCBhIEZsb2F0
UmVjdCBvciBhIExheW91dFJlY3QsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC4KKworICAgICAg
ICAnRmxvYXRPckxheW91dFJlY3QnIGhvbGRzIGEgdmFyaWFudDxGbG9hdFJlY3QsIExheW91dFJl
Y3Q+IGFuZCBvZmZlcnMgY29udmVuaWVuY2UgZnVuY3Rpb25zCisgICAgICAgIHRvIHNpbXBsaWZ5
IGNvbW1vbiBvcGVyYXRpb25zLCBlLmcuIG9wZXJhdG9yIEZsb2F0UmVjdCgpIHRvIGFjY2VzcyB0
aGUgc3RvcmVkIEZsb2F0UmVjdCwgb3IgY29udmVydAorICAgICAgICB0aGUgc3RvcmVkIExheW91
dFJlY3QgaW50byBhIEZsb2F0UmVjdCAod2l0aG91dCBhcHBseWluZyBwaXhlbCBzbmFwcGluZyku
IEZ1cnRoZXJtb3JlIGl0IG9mZmVycworICAgICAgICBhICdmbG9hdFJlY3RGb3JQYWludGluZyhk
ZXZpY2VTY2FsZUZhY3RvciknIG1ldGhvZCwgdGhhdCBlaXRoZXIgcmV0dXJucyB0aGUgc3RvcmVk
IEZsb2F0UmVjdCwgb3IgcGl4ZWwtc25hcHMKKyAgICAgICAgdGhlIHN0b3JlZCBMYXlvdXRSZWN0
IGFuZCByZXR1cm5zIGEgbmV3IGRldmljZS1waXhlbCBhbGlnbmVkIEZsb2F0UmVjdC4gVGhlIG5h
bWUgJ2Zsb2F0UmVjdEZvclBhaW50aW5nJworICAgICAgICBkb2VzIG5vdCBjb250YWluIHRoZSB0
ZXJtICdQaXhlbFNuYXBwaW5nJyBvbiBwdXJwb3NlLCBzaW5jZSB0aGUgaW50ZW5kZWQgdXNhZ2Ug
aXMgaW4gYWxsIHBsYWNlcyB0aGF0CisgICAgICAgIGN1cnJlbnRseSBhcHBseSBwaXhlbC1zbmFw
cGluZywgdG8gZWFzaWx5IGRpc2FibGUgdGhhdCBvcGVyYXRpb24gaW4gU1ZHIHN1YnRyZWVzLgor
CisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMsIG5vIGNoYW5nZSBpbiBiZWhhdmlv
dXIuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOiBBZGQgRmxvYXRPckxheW91dFJlY3QuaCB0
byBidWlsZC4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERp
dHRvLgorICAgICAgICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y29tcHV0ZWRUcmFuc2Zvcm0pOiBVc2UgdGhlIHJlbmRlcmVycyB0cmFu
c2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCkgaW5zdGVhZCBvZiB0aGUgc3RhdGljIGhlbHBlciBmdW5j
dGlvbiB0cmFuc2Zvcm1SZWZlcmVuY2VCb3goKS4KKyAgICAgICAgKFdlYkNvcmU6OkNvbXB1dGVk
U3R5bGVFeHRyYWN0b3I6OnZhbHVlRm9yUHJvcGVydHlJblN0eWxlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjp0cmFuc2Zvcm1SZWZlcmVuY2VCb3gpOiBEZWxldGVkLiAgUmVuZGVyRWxlbWVu
dDo6dHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdCgpIHByb3ZpZGVzIHRoZSBzYW1lIGxvZ2ljIGlu
IGEgZ2VuZXJpYyB3YXkuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRPckxheW91
dFJlY3QuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGbG9hdE9yTGF5b3V0UmVjdDo6Rmxv
YXRPckxheW91dFJlY3QpOiBBZGQgY29uc3RydWN0b3JzIGZvciBpbXBsaWNpdCBjb25zdHJ1Y3Rp
b24gZnJvbSBlaXRoZXIgTGF5b3V0UmVjdCBvciBGbG9hdFJlY3QuCisgICAgICAgIChXZWJDb3Jl
OjpGbG9hdE9yTGF5b3V0UmVjdDo6b3BlcmF0b3IgRmxvYXRSZWN0IGNvbnN0KTogUmV0dXJucyB0
aGUgc3RvcmVkIEZsb2F0UmVjdCwgb3IgY29udmVydHMgdGhlIHN0b3JlZCBMYXlvdXRSZWN0IGlu
dG8gYSBGbG9hdFJlY3QgKG5vIHBpeGVsIHNuYXBwaW5nISkuCisgICAgICAgIChXZWJDb3JlOjpG
bG9hdE9yTGF5b3V0UmVjdDo6ZmxvYXRSZWN0Rm9yUGFpbnRpbmcgY29uc3QpOiBSZXR1cm5zIHRo
ZSBzdG9yZWQgRmxvYXRSZWN0IGFzLWlzLCBvciBhcHBsaWVzIHBpeGVsLXNuYXBwaW5nIG9uIHRo
ZSBzdG9yZWQgTGF5b3V0UmVjdCwgcmV0dXJuaW5nIGEgZGV2aWNlLXBpeGVsIGFsaWduZWQgRmxv
YXRSZWN0LgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRPckxheW91dFJlY3Q6Om1vdmUpOiBIZWxw
ZXIgbWV0aG9kIHRvIHNpbXBsaWZ5IFJlbmRlckxheWVyIGNhbGwtc2l0ZXMuIENhbGxzIG1vdmUo
KSBvbiBlaXRoZXIgdGhlIHN0b3JlZCBGbG9hdFJlY3Qgb3IgTGF5b3V0UmVjdC4KKyAgICAgICAg
KFdlYkNvcmU6OkZsb2F0T3JMYXlvdXRSZWN0Ojppc0Zsb2F0UmVjdCBjb25zdCk6IENoZWNrcyBp
ZiB0aGUgdmFyaWFudCBob2xkcyBhIEZsb2F0UmVjdCwgaWYgbm90IGl0IGlzIGd1YXJhbnRlZWQg
dG8gaG9sZCBhIExheW91dFJlY3QuCisgICAgICAgIChXZWJDb3JlOjpGbG9hdE9yTGF5b3V0UmVj
dDo6ZmxvYXRSZWN0IGNvbnN0KTogUmVhZC1vbmx5IGNvbnN0IGFjY2Nlc29yLgorICAgICAgICAo
V2ViQ29yZTo6RmxvYXRPckxheW91dFJlY3Q6OmZsb2F0UmVjdCk6IE11dGFibGUgYWNjZXNzb3Is
IHVzZWQgYnkgbW92ZSgpLgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRPckxheW91dFJlY3Q6Omlz
TGF5b3V0UmVjdCBjb25zdCk6IENoZWNrcyBpZiB0aGUgdmFyaWFudCBob2xkcyBhIExheW91dFJl
Y3QsIGlmIG5vdCBpdCBpcyBndWFyYW50ZWVkIHRvIGhvbGQgYSBGbG9hdFJlY3QuCisgICAgICAg
IChXZWJDb3JlOjpGbG9hdE9yTGF5b3V0UmVjdDo6bGF5b3V0UmVjdCBjb25zdCk6IFJlYWQtb25s
eSBjb25zdCBhY2NjZXNvci4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0T3JMYXlvdXRSZWN0Ojps
YXlvdXRSZWN0KTogTXV0YWJsZSBhY2Nlc3NvciwgdXNlZCBieSBtb3ZlKCkuCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnJl
ZmVyZW5jZUJveFJlY3QgY29uc3QpOiBSZW5hbWUgcmVmZXJlbmNlQm94KCkgdG8gcmVmZXJlbmNl
Qm94UmVjdCgpIGFuZCByZXR1cm4gRmxvYXRPckxheW91dFJlY3QgaW5zdGVhZCBvZiBMYXlvdXRS
ZWN0LgorICAgICAgICBMQlNFIHdhbnRzIHRvIHJlLXVzZSB0aGUgbG9naWMgYnV0IHdpdGhvdXQg
cGl4ZWwgc25hcHBpbmcgd2l0aGluIHRoZSBTVkcgcmVuZGVyIHRyZWUuIEFsbCBjYWxsZXJzIHdl
cmUgYWRhcHRlZCB0byB0aGUgbmV3IHJldHVybiB0eXBlLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjpoaXRUZXN0Q2xpcFBhdGggY29uc3QpOiBBZGFwdCB0byByZWZlcmVuY2VCb3goKSAt
PiByZWZlcmVuY2VCb3hSZWN0KCkgcmVuYW1pbmcgYW5kIHJldHVybiB0eXBlIGNoYW5nZS4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cmVmZXJlbmNlQm94IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6IEFkYXB0IHRvIHJlZmVyZW5jZUJveCgp
IC0+IHJlZmVyZW5jZUJveFJlY3QoKSByZW5hbWluZyBhbmQgcmV0dXJuIHR5cGUgY2hhbmdlLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckVsZW1lbnQ6OnJlZmVyZW5jZUJveFJlY3QgY29uc3QpOiBBZGQgcmVmZXJlbmNlQm94
UmVjdCgpIGltcGxlbWVudGF0aW9uIGZvciBTVkcgcmVuZGVyZXJzLiBUaGUgY29tbW9uIGJhc2Ut
Y2xhc3MgZm9yCisgICAgICAgIGFsbCBTVkcgcmVuZGVyZXJzIGlzIFJlbmRlckVsZW1lbnQgaW4g
dGhlIGxlZ2FjeSBTVkcgZW5naW5lIGFuZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0IGluIExCU0Uu
IFRvIHNoYXJlIHRoZSBjb2RlIGJldHdlZW4gYm90aCBTVkcKKyAgICAgICAgaW1wbGVtZW50YXRp
b25zIGl0IGhhcyB0byBiZSBwbGFjZWQgaW4gUmVuZGVyRWxlbWVudCAtLSB0byBiZSBtb3ZlZCB0
byBSZW5kZXJMYXllck1vZGVsT2JqZWN0LCBvbmNlIExCU0UgaXMgdGhlIG9ubHkgU1ZHIGVuZ2lu
ZS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRWxlbWVudDo6dHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdCBjb25zdCk6IEFkZCBu
ZXcgaGVscGVyIGZ1bmN0aW9uIHdoaWNoIGludm9rZXMgcmVmZXJlbmNlQm94UmVjdCgpIHVzaW5n
CisgICAgICAgIHRyYW5zZm9ybUJveFRvQ1NTQm94VHlwZShzdHlsZSgpLnRyYW5zZm9ybUJveCgp
KS4gV2hlbmV2ZXIgdHJhbnNmb3JtLWJveCBzdXBwb3J0IGlzIG5lY2Vzc2FyeSwgdGhpcyBtZXRo
b2Qgc2hhbGwgYmUgdXNlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOiBV
c2UgdGhlIG5ldyB0cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCkgd2hlcmUgcG9zc2libGUsIGFk
YXB0IHRvIHJldHVybiB0eXBlIGNoYW5nZXMsIHJlbW92ZSBtYW51YWwgcGl4ZWwgc25hcHBpbmcu
CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlUmVmZXJlbmNlQm94KTogQWRhcHQgdG8gcmVmZXJl
bmNlQm94KCkgLT4gcmVmZXJlbmNlQm94UmVjdCgpIHJlbmFtaW5nIGFuZCByZXR1cm4gdHlwZSBj
aGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlVHJhbnNmb3JtKTog
U2ltcGxpZnkgcmVmZXJlbmNlIGJveCBjb21wdXRhdGlvbiwgYW5kIGF2b2lkIG1hbnVhbCBwaXhl
bCBzbmFwcGluZzogdXRpbGl6ZSB0cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCkgKyBmbG9hdFJl
Y3RGb3JQYWludGluZygpLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmN1cnJlbnRU
cmFuc2Zvcm0gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpw
ZXJzcGVjdGl2ZVRyYW5zZm9ybSBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnBlcnNwZWN0aXZlT3JpZ2luIGNvbnN0KTogQWRkIEZJWE1FLCB0aGlzIGFsd2F5
cyB1c2VzIHRoZSBib3JkZXIgYm94IHJlY3QgYXMgYm91bmRpbmdCb3ggZm9yIGxlbmd0aCByZXNv
bHZpbmc6IGl0IGlnbm9yZXMgdHJhbnNmb3JtLWJveC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpjb21wdXRlQ2xpcFBhdGggY29uc3QpOiBBZGFwdCB0byBjb21wdXRlUmVmZXJlbmNl
Qm94KCkgY2hhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXR1cENsaXBQ
YXRoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlUmVmZXJlbmNlUmVjdEZyb21C
b3gpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdXBwb3J0Ojp0cmFuc2Zvcm1SZWZlcmVu
Y2VCb3gpOiBEZWxldGVkLiBSZW5kZXJFbGVtZW50Ojp0cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0
KCkgcHJvdmlkZXMgdGhlIHNhbWUgbG9naWMgaW4gYSBnZW5lcmljIHdheS4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuaDogR2V0IHJpZCBvZiB0cmFuc2Zvcm1SZWZl
cmVuY2VCb3goKS4KKyAgICAgICAgKiBzdmcvU1ZHR3JhcGhpY3NFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0dyYXBoaWNzRWxlbWVudDo6YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSBj
b25zdCk6IFVzZSB0aGUgcmVuZGVyZXJzIHRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3QoKSBpbnN0
ZWFkIG9mIFNWR1JlbmRlclN1cHBvcnQ6OnRyYW5zZm9ybVJlZmVyZW5jZUJveCgpLgorCiAyMDIy
LTAzLTE0ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBV
bnJldmlld2VkLCBmaXhpbmcgYW4gaW5jb21wbGV0ZS10eXBlIGJ1aWxkIGVycm9yIGluIElubGlu
ZUl0ZXJhdG9yTGluZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBi
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggNzM2NDQyYTA4YTc0NTAwYTM1MmYw
NGMyZTEwNmQ4YzQxZTdhNGZjNS4uZTBmODIxODViODdiNDRiZDgzMjNmZDEyYjM5MDhlMWZmOWQ5
OTU0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xNDUwLDYgKzE0NTAsNyBAQCBzZXQoV2ViQ29y
ZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxh
eVVwZGF0ZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRHJhd0dseXBoc1JlY29yZGVyLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdExpbmUuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0T3JMYXlvdXRSZWN0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UXVhZC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggZTY3NGJiNjFlOTg1NzEzZjY5MjE0N2I3YWUzNDc5ZWU4ZmUxOWJm
Yy4uOTljMjFhNWE5ZWE0NzgzNzc2NzYxZDQ5ZDllNDBkYWJkNGViZDA2MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzkyNyw2
ICszOTI3LDcgQEAKIAkJQjI3NTM1NjcwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzOTBCMDUzODE0
MDAyQ0U2NEYgLyogQ29sb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlCMjc1MzU2OTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1M0IwQjA1
MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlCMjc1MzU2QjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRS
ZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1
MzUzRDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQjM3NzM0NkIwQjA0MTkxNjYwMkNFNjRGIC8q
IEZsb2F0T3JMYXlvdXRSZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCMjc1MzUzQzBCMDUzODE1MDAyQ0U2NEYgLyogRmxvYXRPckxheW91dFJlY3Qu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMjc1
MzU2RDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUzRjBCMDUzODE0MDAyQ0U2NEYgLyogRmxv
YXRTaXplLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQjI3NTM1NkUwQjA1MzgxNDAwMkNFNjRGIC8qIEljb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTQwMEIwNTM4MTQwMDJDRTY0RiAvKiBJ
Y29uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QjI3NTM1NzAwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0MjBCMDUzODE0MDAyQ0U2NEYgLyogSW1h
Z2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MTQ4NzAsNiArMTQ4NzEsNyBAQAogCQlCMjc1MzUzQjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQ
b2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxvYXRQb2ludC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzUzQzBCMDUzODE0MDAyQ0U2NEYgLyog
RmxvYXRSZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9h
dFJlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzUzRDBCMDUzODE0
MDAyQ0U2NEYgLyogRmxvYXRSZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGbG9hdFJlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjI3NTM1M0MwQjA1
MzgxNTAwMkNFNjRGIC8qIEZsb2F0T3JMYXlvdXRSZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGbG9hdE9yTGF5b3V0UmVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCMjc1MzUzRTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdFNpemUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzUzRjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXpl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbG9hdFNpemUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NDAwQjA1MzgxNDAwMkNFNjRGIC8qIEljb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEljb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTI4OTcyLDYgKzI4OTc0LDcgQEAKIAkJCQkxQ0FGNTZEODI1MzAx
NDU3MDAxN0I0NzIgLyogRHJhd0dseXBoc1JlY29yZGVyLmggKi8sCiAJCQkJMkU4ODhDQTkyNUY2
QTQxMTAwNTc5MTRBIC8qIEZsb2F0TGluZS5jcHAgKi8sCiAJCQkJMkU4ODhDQTgyNUY2QTQxMTAw
NTc5MTRBIC8qIEZsb2F0TGluZS5oICovLAorCQkJCUIyNzUzNTNDMEIwNTM4MTUwMDJDRTY0RiAv
KiBGbG9hdE9yTGF5b3V0UmVjdC5oICovLAogCQkJCUIyNzUzNTNBMEIwNTM4MTQwMDJDRTY0RiAv
KiBGbG9hdFBvaW50LmNwcCAqLywKIAkJCQlCMjc1MzUzQjBCMDUzODE0MDAyQ0U2NEYgLyogRmxv
YXRQb2ludC5oICovLAogCQkJCUIyRTI3QzlEMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50
M0QuY3BwICovLApAQCAtMzQ2NjAsNiArMzQ2NjMsNyBAQAogCQkJCUZFNjk5ODcyMTkyMDg3RTcw
MDY5MzZCRCAvKiBGbG9hdGluZ1BvaW50RW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTExNUNGQTgyMjA4QjhFREEwMDFFNjk5MSAvKiBGbG9hdGluZ1N0YXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyRTg4OENBQTI1RjZBNDExMDA1NzkxNEEgLyogRmxvYXRMaW5lLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlCMzc3MzQ2QjBCMDQxOTE2NjAyQ0U2NEYgLyogRmxvYXRPckxheW91dFJlY3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCUIyNzUzNTY5MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBv
aW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkUyN0NBMDBCMEYyQjA5MDBGMTdDN0IgLyogRmxv
YXRQb2ludDNELmggaW4gSGVhZGVycyAqLywKIAkJCQk2RUM0ODBBMjE2RUE2MzhBMDBBNDhEQ0Ig
LyogRmxvYXRQb2x5Z29uLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggYWNlYmRiMzQ2NGJmZTFm
Mjc1ZGU0YWIwOGJhMThkZjg1NjhlYmQ4My4uYzk3M2M1YTRlNTBiMGM2M2UxYjQ0MzUxZGY2NTYy
OGYyN2E2MTZiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTU2MCwxNyArNTYwLDYgQEAgc3RhdGljIExheW91dFJlY3Qg
c2l6aW5nQm94KFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCiAgICAgcmV0dXJuIGJveC5zdHlsZSgp
LmJveFNpemluZygpID09IEJveFNpemluZzo6Qm9yZGVyQm94ID8gYm94LmJvcmRlckJveFJlY3Qo
KSA6IGJveC5jb21wdXRlZENTU0NvbnRlbnRCb3hSZWN0KCk7CiB9CiAKLXN0YXRpYyBGbG9hdFJl
Y3QgdHJhbnNmb3JtUmVmZXJlbmNlQm94KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3Qg
UmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCi17Ci0gICAgaWYgKGlzPFJlbmRlckJveD4ocmVuZGVy
ZXIpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcikucmVmZXJl
bmNlQm94KHRyYW5zZm9ybUJveFRvQ1NTQm94VHlwZShzdHlsZS50cmFuc2Zvcm1Cb3goKSkpOwot
Ci0gICAgaWYgKGlzPFNWR0VsZW1lbnQ+KHJlbmRlcmVyLmVsZW1lbnQoKSkpCi0gICAgICAgIHJl
dHVybiBTVkdSZW5kZXJTdXBwb3J0Ojp0cmFuc2Zvcm1SZWZlcmVuY2VCb3gocmVuZGVyZXIsIGRv
d25jYXN0PFNWR0VsZW1lbnQ+KCpyZW5kZXJlci5lbGVtZW50KCkpLCBzdHlsZSk7Ci0KLSAgICBy
ZXR1cm4geyB9OwotfQotCiBzdGF0aWMgUmVmPENTU0Z1bmN0aW9uVmFsdWU+IG1hdHJpeFRyYW5z
Zm9ybVZhbHVlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSkKIHsKICAgICBSZWZQdHI8Q1NTRnVuY3Rpb25WYWx1ZT4gdHJhbnNm
b3JtVmFsdWU7CkBAIC02MjMsNyArNjEyLDcgQEAgc3RhdGljIFJlZjxDU1NWYWx1ZT4gY29tcHV0
ZWRUcmFuc2Zvcm0oUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWwKICAg
ICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZh
bHVlKENTU1ZhbHVlTm9uZSk7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07
Ci0gICAgc3R5bGUuYXBwbHlUcmFuc2Zvcm0odHJhbnNmb3JtLCB0cmFuc2Zvcm1SZWZlcmVuY2VC
b3goc3R5bGUsICpyZW5kZXJlciksIHsgfSk7CisgICAgc3R5bGUuYXBwbHlUcmFuc2Zvcm0odHJh
bnNmb3JtLCByZW5kZXJlci0+dHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdChzdHlsZSksIHsgfSk7
CiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgZmxhdHRlbiB0byBhbiBhZmZpbmUgdHJh
bnNmb3JtIGlmIEVOQUJMRSgzRF9UUkFOU0ZPUk1TKSBpcyBvZmYsIGJ5IGRlc2lnbi4KIAogICAg
IC8vIEZJWE1FOiBOZWVkIHRvIHByaW50IG91dCBpbmRpdmlkdWFsIGZ1bmN0aW9ucyAoaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTI0KQpAQCAtMzg0MCw3ICszODI5
LDcgQEAgUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjp2YWx1ZUZvclBy
b3BlcnR5SW5TdHlsZShjb25zdCBSZW5kZXJTdHkKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVBl
cnNwZWN0aXZlT3JpZ2luOiB7CiAgICAgICAgICAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6
OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIpIHsKLSAg
ICAgICAgICAgICAgICBhdXRvIGJveCA9IHRyYW5zZm9ybVJlZmVyZW5jZUJveChzdHlsZSwgKnJl
bmRlcmVyKTsKKyAgICAgICAgICAgICAgICBGbG9hdFJlY3QgYm94ID0gcmVuZGVyZXItPnRyYW5z
Zm9ybVJlZmVyZW5jZUJveFJlY3Qoc3R5bGUpOwogICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVu
ZCh6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKG1pbmltdW1WYWx1ZUZvckxlbmd0aChzdHlsZS5wZXJz
cGVjdGl2ZU9yaWdpblgoKSwgYm94LndpZHRoKCkpLCBzdHlsZSkpOwogICAgICAgICAgICAgICAg
IGxpc3QtPmFwcGVuZCh6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKG1pbmltdW1WYWx1ZUZvckxlbmd0
aChzdHlsZS5wZXJzcGVjdGl2ZU9yaWdpblkoKSwgYm94LmhlaWdodCgpKSwgc3R5bGUpKTsKICAg
ICAgICAgICAgIH0gZWxzZSB7CkBAIC0zODk2LDcgKzM4ODUsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+
IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnZhbHVlRm9yUHJvcGVydHlJblN0eWxlKGNvbnN0IFJl
bmRlclN0eQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2luOiB7CiAgICAg
ICAgICAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7
CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGJveCA9
IHRyYW5zZm9ybVJlZmVyZW5jZUJveChzdHlsZSwgKnJlbmRlcmVyKTsKKyAgICAgICAgICAgICAg
ICBGbG9hdFJlY3QgYm94ID0gcmVuZGVyZXItPnRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3Qoc3R5
bGUpOwogICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZCh6b29tQWRqdXN0ZWRQaXhlbFZhbHVl
KG1pbmltdW1WYWx1ZUZvckxlbmd0aChzdHlsZS50cmFuc2Zvcm1PcmlnaW5YKCksIGJveC53aWR0
aCgpKSwgc3R5bGUpKTsKICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFkanVzdGVk
UGl4ZWxWYWx1ZShtaW5pbXVtVmFsdWVGb3JMZW5ndGgoc3R5bGUudHJhbnNmb3JtT3JpZ2luWSgp
LCBib3guaGVpZ2h0KCkpLCBzdHlsZSkpOwogICAgICAgICAgICAgICAgIGlmIChzdHlsZS50cmFu
c2Zvcm1PcmlnaW5aKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdE9yTGF5b3V0UmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRPckxheW91dFJlY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZjYxYzdhZGE1ZGJjYTg1Y2I4ZjU4
MzMwOTA2OTJhZGNlYmZiMjhmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRPckxheW91dFJlY3QuaApAQCAtMCwwICsxLDEzNyBAQAorLyoK
KyAqIENvcHlyaWdodCAoYykgMjAyMiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKKyNpbmNsdWRlIDxvcHRpb25hbD4KKyNpbmNs
dWRlIDx0eXBlX3RyYWl0cz4KKyNpbmNsdWRlIDx2YXJpYW50PgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEZsb2F0T3JMYXlvdXRSZWN0IGZpbmFsIHsKKyAgICBzdHJ1Y3QgVW5kZWZp
bmVkUmVjdCB7IH07CisKKyAgICAvLyBDb252ZW5pZW5jZSBmdW5jdGlvbnMgdG8gYWNjZXNzIHRo
ZSB2YXJpYW50cyBlbGVtZW50cy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGNvbnN0
ZXhwciBib29sIGlzKCkgY29uc3QgeyByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxUPiht
X2RhdGEpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGNvbnN0ZXhwciBjb25z
dCBUJiBhcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6Z2V0PFQ+KG1fZGF0YSk7IH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY29uc3RleHByIFQmIGFzKCkgeyByZXR1cm4gc3RkOjpn
ZXQ8VD4obV9kYXRhKTsgfQorCitwdWJsaWM6CisgICAgY29uc3RleHByIEZsb2F0T3JMYXlvdXRS
ZWN0KEZsb2F0UmVjdCYmIHJlY3QpCisgICAgICAgIDogbV9kYXRhKHN0ZDo6aW5fcGxhY2VfdHlw
ZV90PEZsb2F0UmVjdD4oKSwgV1RGTW92ZShyZWN0KSkKKyAgICB7CisgICAgfQorCisgICAgY29u
c3RleHByIEZsb2F0T3JMYXlvdXRSZWN0KExheW91dFJlY3QmJiByZWN0KQorICAgICAgICA6IG1f
ZGF0YShzdGQ6OmluX3BsYWNlX3R5cGVfdDxMYXlvdXRSZWN0PigpLCBXVEZNb3ZlKHJlY3QpKQor
ICAgIHsKKyAgICB9CisKKyAgICBjb25zdGV4cHIgRmxvYXRPckxheW91dFJlY3QoKQorICAgICAg
ICA6IG1fZGF0YShVbmRlZmluZWRSZWN0IHsgfSkKKyAgICB7CisgICAgfQorCisgICAgb3BlcmF0
b3IgRmxvYXRSZWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpczxGbG9hdFJlY3Q+KCkp
CisgICAgICAgICAgICByZXR1cm4gYXM8RmxvYXRSZWN0PigpOworICAgICAgICBpZiAoaXM8TGF5
b3V0UmVjdD4oKSkKKyAgICAgICAgICAgIHJldHVybiBhczxMYXlvdXRSZWN0PigpOworICAgICAg
ICBBU1NFUlQoaXM8VW5kZWZpbmVkUmVjdD4oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAg
fQorCisgICAgRmxvYXRSZWN0IGZsb2F0UmVjdEZvclBhaW50aW5nKGZsb2F0IGRldmljZVNjYWxl
RmFjdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzPEZsb2F0UmVjdD4oKSkKKyAgICAg
ICAgICAgIHJldHVybiBhczxGbG9hdFJlY3Q+KCk7CisgICAgICAgIGlmIChpczxMYXlvdXRSZWN0
PigpKQorICAgICAgICAgICAgcmV0dXJuIHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoYXM8TGF5b3V0
UmVjdD4oKSwgZGV2aWNlU2NhbGVGYWN0b3IpOworICAgICAgICBBU1NFUlQoaXM8VW5kZWZpbmVk
UmVjdD4oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgLy8gQ29udmVuaWVu
Y2UgZnVuY3Rpb246IFVzaW5nIG1vdmUoKSB0aGUgbG9jYXRpb24gb2YgdGhlIHJlY3QgY2FuIGJl
IGFsdGVyZWQsIHJlZ2FyZGxlc3Mgb2YgaXRzIHR5cGUuCisgICAgdm9pZCBtb3ZlKGNvbnN0IExh
eW91dFNpemUmIHNpemUpCisgICAgeworICAgICAgICBpZiAoaXM8RmxvYXRSZWN0PigpKSB7Cisg
ICAgICAgICAgICBhczxGbG9hdFJlY3Q+KCkubW92ZShzaXplKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpczxMYXlvdXRSZWN0PigpKSB7CisgICAgICAg
ICAgICBhczxMYXlvdXRSZWN0PigpLm1vdmUoc2l6ZSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBBU1NFUlQoaXM8VW5kZWZpbmVkUmVjdD4oKSk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0
ZDo6dmFyaWFudDxGbG9hdFJlY3QsIExheW91dFJlY3QsIFVuZGVmaW5lZFJlY3Q+IG1fZGF0YTsK
K307CisKK3N0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfY29weWFibGU8RmxvYXRPckxh
eW91dFJlY3Q+Ojp2YWx1ZSwgIidGbG9hdE9yTGF5b3V0UmVjdCcgbXVzdCBiZSB0cml2aWFsbHkg
Y295cGFibGUuIik7CitzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX3BvbHltb3JwaGljPEZsb2F0T3JM
YXlvdXRSZWN0Pjo6dmFsdWUsICInRmxvYXRPckxheW91dFJlY3QnIG11c3Qgbm90IGJlIHBvbHlt
cG9ycGhpYy4iKTsKK3N0YXRpY19hc3NlcnQoIXN0ZDo6aGFzX3ZpcnR1YWxfZGVzdHJ1Y3RvcjxG
bG9hdE9yTGF5b3V0UmVjdD46OnZhbHVlLCAiJ0Zsb2F0T3JMYXlvdXRSZWN0JyBtdXN0IG5vdCBo
YXZlIGEgdmlydHVhbCBkZXN0cnVjdG9yLiIpOworCitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29u
c3RydWN0aWJsZTxGbG9hdE9yTGF5b3V0UmVjdCwgRmxvYXRSZWN0Pjo6dmFsdWUsICInRmxvYXRP
ckxheW91dFJlY3QnIG11c3QgYmUgdHJpdmlhbGx5IGNvbnN0cnVjdGlibGUgZnJvbSAnRmxvYXRS
ZWN0Jy4iKTsKK3N0YXRpY19hc3NlcnQoIXN0ZDo6aXNfdHJpdmlhbGx5X2NvbnN0cnVjdGlibGU8
RmxvYXRPckxheW91dFJlY3QsIEZsb2F0UmVjdD46OnZhbHVlLCAiJ0Zsb2F0T3JMYXlvdXRSZWN0
JyBjYW5ub3QgYmUgdHJpdmlhbGx5IGNvbnN0cnVjdGlibGUgZnJvbSAnRmxvYXRSZWN0Jy4iKTsK
K3N0YXRpY19hc3NlcnQoIXN0ZDo6aXNfdHJpdmlhbGx5X2NvbnN0cnVjdGlibGU8RmxvYXRPckxh
eW91dFJlY3QsIExheW91dFJlY3Q+Ojp2YWx1ZSwgIidGbG9hdE9yTGF5b3V0UmVjdCcgY2Fubm90
IGJlIHRyaXZpYWxseSBjb25zdHJ1Y3RpYmxlIGZyb20gJ0xheW91dFJlY3QnLiIpOworCitzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPEZsb2F0T3JMYXlvdXRSZWN0
Pjo6dmFsdWUsICInRmxvYXRPckxheW91dFJlY3QnIG11c3QgYmUgdHJpdmlhbGx5IGRlZmF1bHQt
Y29uc3RydWN0aWJsZS4iKTsKK3N0YXRpY19hc3NlcnQoIXN0ZDo6aXNfdHJpdmlhbGx5X2RlZmF1
bHRfY29uc3RydWN0aWJsZTxGbG9hdE9yTGF5b3V0UmVjdD46OnZhbHVlLCAiJ0Zsb2F0T3JMYXlv
dXRSZWN0JyBjYW5ub3QgYmUgdHJpdmlhbGx5IGRlZmF1bHQtY29uc3RydWN0aWJsZS4iKTsKKwor
c3RhdGljX2Fzc2VydChzdGQ6OmlzX2NvcHlfY29uc3RydWN0aWJsZTxGbG9hdE9yTGF5b3V0UmVj
dD46OnZhbHVlLCAiJ0Zsb2F0T3JMYXlvdXRSZWN0JyBtdXN0IGJlIHRyaXZpYWxseSBjb3B5LWNv
bnN0cnVjdGlibGUuIik7CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2NvcHlfY29u
c3RydWN0aWJsZTxGbG9hdE9yTGF5b3V0UmVjdD46OnZhbHVlLCAiJ0Zsb2F0T3JMYXlvdXRSZWN0
JyBtdXN0IGJlIHRyaXZpYWxseSBjb3B5LWNvbnN0cnVjdGlibGUuIik7CisKK3N0YXRpY19hc3Nl
cnQoc3RkOjppc19tb3ZlX2NvbnN0cnVjdGlibGU8RmxvYXRPckxheW91dFJlY3Q+Ojp2YWx1ZSwg
IidGbG9hdE9yTGF5b3V0UmVjdCcgbXVzdCBiZSB0cml2aWFsbHkgbW92ZS1jb25zdHJ1Y3RpYmxl
LiIpOworc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9tb3ZlX2NvbnN0cnVjdGlibGU8
RmxvYXRPckxheW91dFJlY3Q+Ojp2YWx1ZSwgIidGbG9hdE9yTGF5b3V0UmVjdCcgbXVzdCBiZSB0
cml2aWFsbHkgbW92ZS1jb25zdHJ1Y3RpYmxlLiIpOworCitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
YXNzaWduYWJsZTxGbG9hdE9yTGF5b3V0UmVjdCwgRmxvYXRSZWN0Pjo6dmFsdWUsICInRmxvYXRP
ckxheW91dFJlY3QnIG11c3QgYmUgdHJpdmlhbGx5IGFzc2lnbmFibGUgZnJvbSAnRmxvYXRSZWN0
Jy4iKTsKK3N0YXRpY19hc3NlcnQoc3RkOjppc19hc3NpZ25hYmxlPEZsb2F0T3JMYXlvdXRSZWN0
LCBMYXlvdXRSZWN0Pjo6dmFsdWUsICInRmxvYXRPckxheW91dFJlY3QnIG11c3QgYmUgdHJpdmlh
bGx5IGFzc2lnbmFibGUgZnJvbSAnTGF5b3V0UmVjdCcuIik7CitzdGF0aWNfYXNzZXJ0KCFzdGQ6
OmlzX3RyaXZpYWxseV9hc3NpZ25hYmxlPEZsb2F0T3JMYXlvdXRSZWN0LCBGbG9hdFJlY3Q+Ojp2
YWx1ZSwgIidGbG9hdE9yTGF5b3V0UmVjdCcgY2Fubm90IGJlIHRyaXZpYWxseSBhc3NpZ25hYmxl
IGZyb20gJ0Zsb2F0UmVjdCcuIik7CitzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX3RyaXZpYWxseV9h
c3NpZ25hYmxlPEZsb2F0T3JMYXlvdXRSZWN0LCBMYXlvdXRSZWN0Pjo6dmFsdWUsICInRmxvYXRP
ckxheW91dFJlY3QnIGNhbm5vdCBiZSB0cml2aWFsbHkgYXNzaWduYWJsZSBmcm9tICdMYXlvdXRS
ZWN0Jy4iKTsKKworc3RhdGljX2Fzc2VydChzdGQ6OmlzX2NvcHlfYXNzaWduYWJsZTxGbG9hdE9y
TGF5b3V0UmVjdD46OnZhbHVlLCAiJ0Zsb2F0T3JMYXlvdXRSZWN0JyBtdXN0IGJlIHRyaXZpYWxs
eSBjb3B5LWFzc2lnbmFibGUuIik7CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Nv
cHlfYXNzaWduYWJsZTxGbG9hdE9yTGF5b3V0UmVjdD46OnZhbHVlLCAiJ0Zsb2F0T3JMYXlvdXRS
ZWN0JyBtdXN0IGJlIHRyaXZpYWxseSBjb3B5LWFzc2lnbmFibGUuIik7CisKK3N0YXRpY19hc3Nl
cnQoc3RkOjppc19tb3ZlX2Fzc2lnbmFibGU8RmxvYXRPckxheW91dFJlY3Q+Ojp2YWx1ZSwgIidG
bG9hdE9yTGF5b3V0UmVjdCcgbXVzdCBiZSB0cml2aWFsbHkgbW92ZS1hc3NpZ25hYmxlLiIpOwor
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9tb3ZlX2Fzc2lnbmFibGU8RmxvYXRPckxh
eW91dFJlY3Q+Ojp2YWx1ZSwgIidGbG9hdE9yTGF5b3V0UmVjdCcgbXVzdCBiZSB0cml2aWFsbHkg
bW92ZS1hc3NpZ25hYmxlLiIpOworCitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZGVzdHJ1Y3RpYmxl
PEZsb2F0T3JMYXlvdXRSZWN0Pjo6dmFsdWUsICInRmxvYXRPckxheW91dFJlY3QnIG11c3QgYmUg
dHJpdmlhbGx5IGRlc3RydWN0aWJsZS4iKTsKK3N0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFs
bHlfZGVzdHJ1Y3RpYmxlPEZsb2F0T3JMYXlvdXRSZWN0Pjo6dmFsdWUsICInRmxvYXRPckxheW91
dFJlY3QnIG11c3QgYmUgdHJpdmlhbGx5IGRlc3RydWN0aWJsZS4iKTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCBjNDE2
YmU5MWZmM2Y1Njk3MmJjYWI0YTA1YzY4OTUzZDg5YmM2MTMwLi4zZWVhMjBmNmE4ZTcwZGI4Yjlk
MjlkOWI3NzkzNDY2NzUxMDc3NTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcApAQCAtNzY2LDkgKzc2Niw4IEBAIExheW91dFBvaW50IFJlbmRlckJveDo6Y29udGVudEJv
eExvY2F0aW9uKCkgY29uc3QKICAgICByZXR1cm4geyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVm
dCgpICsgc2Nyb2xsYmFyU3BhY2UsIGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpIH07CiB9CiAK
LUxheW91dFJlY3QgUmVuZGVyQm94OjpyZWZlcmVuY2VCb3goQ1NTQm94VHlwZSBib3hUeXBlKSBj
b25zdAorRmxvYXRPckxheW91dFJlY3QgUmVuZGVyQm94OjpyZWZlcmVuY2VCb3hSZWN0KENTU0Jv
eFR5cGUgYm94VHlwZSkgY29uc3QKIHsKLSAgICBMYXlvdXRSZWN0IHJlZmVyZW5jZUJveDsKICAg
ICBzd2l0Y2ggKGJveFR5cGUpIHsKICAgICBjYXNlIENTU0JveFR5cGU6OkNvbnRlbnRCb3g6CiAg
ICAgY2FzZSBDU1NCb3hUeXBlOjpGaWxsQm94OgpAQCAtNzg0LDcgKzc4Myw5IEBAIExheW91dFJl
Y3QgUmVuZGVyQm94OjpyZWZlcmVuY2VCb3goQ1NTQm94VHlwZSBib3hUeXBlKSBjb25zdAogICAg
IGNhc2UgQ1NTQm94VHlwZTo6Qm94TWlzc2luZzoKICAgICAgICAgcmV0dXJuIGJvcmRlckJveFJl
Y3QoKTsKICAgICB9Ci0gICAgcmV0dXJuIHsgfTsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiB9CiAKIEludFJlY3QgUmVuZGVyQm94OjphYnNv
bHV0ZUNvbnRlbnRCb3goKSBjb25zdApAQCAtMTQ2MCw4ICsxNDYxLDcgQEAgYm9vbCBSZW5kZXJC
b3g6OmhpdFRlc3RDbGlwUGF0aChjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlv
biwgY29uc3QgTGEKICAgICBzd2l0Y2ggKHN0eWxlKCkuY2xpcFBhdGgoKS0+dHlwZSgpKSB7CiAg
ICAgY2FzZSBQYXRoT3BlcmF0aW9uOjpTaGFwZTogewogICAgICAgICBhdXRvJiBjbGlwUGF0aCA9
IGRvd25jYXN0PFNoYXBlUGF0aE9wZXJhdGlvbj4oKnN0eWxlKCkuY2xpcFBhdGgoKSk7Ci0gICAg
ICAgIGF1dG8gcmVmZXJlbmNlQm94UmVjdCA9IHJlZmVyZW5jZUJveChjbGlwUGF0aC5yZWZlcmVu
Y2VCb3goKSk7Ci0gICAgICAgIGlmICghY2xpcFBhdGgucGF0aEZvclJlZmVyZW5jZVJlY3QocmVm
ZXJlbmNlQm94UmVjdCkuY29udGFpbnMoaGl0VGVzdExvY2F0aW9uSW5Mb2NhbENvb3JkaW5hdGVz
LCBjbGlwUGF0aC53aW5kUnVsZSgpKSkKKyAgICAgICAgaWYgKCFjbGlwUGF0aC5wYXRoRm9yUmVm
ZXJlbmNlUmVjdChyZWZlcmVuY2VCb3hSZWN0KGNsaXBQYXRoLnJlZmVyZW5jZUJveCgpKSkuY29u
dGFpbnMoaGl0VGVzdExvY2F0aW9uSW5Mb2NhbENvb3JkaW5hdGVzLCBjbGlwUGF0aC53aW5kUnVs
ZSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCmluZGV4IGVkNzc3NzBlN2U0MjlkNWI3NjJj
MGViYzI5MWJhZjAyZjQ3MDIzMjUuLmQzNTBhNDYwZGM0NTM1YmQzZmU5NTc2ZGFjMGRjMjcyZTdj
ZjQxMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAgLTE2Nyw4ICsxNjcs
OCBAQCBwdWJsaWM6CiAgICAgTGF5b3V0UmVjdCBjb250ZW50Qm94UmVjdCgpIGNvbnN0OwogICAg
IExheW91dFBvaW50IGNvbnRlbnRCb3hMb2NhdGlvbigpIGNvbnN0OwogCi0gICAgLy8gLmh0dHBz
Oi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdHJhbnNmb3Jtcy0xLyNyZWZlcmVuY2UtYm94Ci0gICAg
TGF5b3V0UmVjdCByZWZlcmVuY2VCb3goQ1NTQm94VHlwZSkgY29uc3Q7CisgICAgLy8gaHR0cHM6
Ly93d3cudzMub3JnL1RSL2Nzcy10cmFuc2Zvcm1zLTEvI3JlZmVyZW5jZS1ib3gKKyAgICBGbG9h
dE9yTGF5b3V0UmVjdCByZWZlcmVuY2VCb3hSZWN0KENTU0JveFR5cGUpIGNvbnN0IGZpbmFsOwog
CiAgICAgLy8gVGhlIGNvbnRlbnQgYm94IGluIGFic29sdXRlIGNvb3Jkcy4gSWdub3JlcyB0cmFu
c2Zvcm1zLgogICAgIEludFJlY3QgYWJzb2x1dGVDb250ZW50Qm94KCkgY29uc3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKaW5kZXggZTkzMmJjNzRiMWZkZWI3
NGFlMzJkMmJmODA3MDlmN2M1ZWI2ZGQyNS4uYjE1ODU3MWMzODllOTFmYjBhMjFiZWZiNDk5ODQ3
OWFhNzdhNTlkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNw
cApAQCAtNzgsNiArNzgsNyBAQAogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJT
VkdFbGVtZW50VHlwZUhlbHBlcnMuaCIKICNpbmNsdWRlICJTVkdJbWFnZS5oIgorI2luY2x1ZGUg
IlNWR0xlbmd0aENvbnRleHQuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCiAjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCkBAIC0yMzg5LDQgKzIz
OTAsMzggQEAgT3ZlcmZsb3cgUmVuZGVyRWxlbWVudDo6ZWZmZWN0aXZlT3ZlcmZsb3dZKCkgY29u
c3QKICAgICByZXR1cm4gb3ZlcmZsb3dZOwogfQogCisvLyBodHRwczovL3d3dy53My5vcmcvVFIv
Y3NzLXRyYW5zZm9ybXMtMS8jdHJhbnNmb3JtLWJveAorRmxvYXRPckxheW91dFJlY3QgUmVuZGVy
RWxlbWVudDo6cmVmZXJlbmNlQm94UmVjdChDU1NCb3hUeXBlIGJveFR5cGUpIGNvbnN0Cit7Cisg
ICAgLy8gQ1NTIGJveCBtb2RlbCBjb2RlIGlzIGltcGxlbWVudGVkIGluIFJlbmRlckJveDo6cmVm
ZXJlbmNlQm94UmVjdCgpLgorCisgICAgLy8gRm9yIHRoZSBsZWdhY3kgU1ZHIGVuZ2luZSwgUmVu
ZGVyRWxlbWVudCBpcyB0aGUgb25seSBjbGFzcyB0aGF0J3MKKyAgICAvLyBwcmVzZW50IGluIHRo
ZSBhbmNlc3RvciBjaGFpbiBvZiBhbGwgU1ZHIHJlbmRlcmVycy4gSW4gTEJTRSB0aGUKKyAgICAv
LyBjb21tb24gY2xhc3MgaXMgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC4gT25jZSB0aGUgbGVnYWN5
IFNWRyBlbmdpbmUKKyAgICAvLyBpcyByZW1vdmVkIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIG1v
dmVkIHRvIFJlbmRlckxheWVyTW9kZWxPYmplY3QuCisgICAgLy8gQXMgdGhpcyBtZXRob2QgaXMg
dXNlZCBieSBib3RoIFNWRyBlbmdpbmVzLCB3ZSBuZWVkIHRvIHBsYWNlIGl0CisgICAgLy8gaGVy
ZSBpbiBSZW5kZXJFbGVtZW50LCBhcyB0ZW1wb3Jhcnkgc29sdXRpb24uCisgICAgaWYgKCFpczxT
VkdFbGVtZW50PihlbGVtZW50KCkpKQorICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOworCisg
ICAgc3dpdGNoIChib3hUeXBlKSB7CisgICAgY2FzZSBDU1NCb3hUeXBlOjpCb3hNaXNzaW5nOgor
ICAgIGNhc2UgQ1NTQm94VHlwZTo6Q29udGVudEJveDoKKyAgICBjYXNlIENTU0JveFR5cGU6OlBh
ZGRpbmdCb3g6CisgICAgY2FzZSBDU1NCb3hUeXBlOjpGaWxsQm94OgorICAgICAgICByZXR1cm4g
b2JqZWN0Qm91bmRpbmdCb3goKTsKKyAgICBjYXNlIENTU0JveFR5cGU6OkJvcmRlckJveDoKKyAg
ICBjYXNlIENTU0JveFR5cGU6Ok1hcmdpbkJveDoKKyAgICBjYXNlIENTU0JveFR5cGU6OlN0cm9r
ZUJveDoKKyAgICAgICAgcmV0dXJuIHN0cm9rZUJvdW5kaW5nQm94KCk7CisgICAgY2FzZSBDU1NC
b3hUeXBlOjpWaWV3Qm94OgorICAgICAgICBGbG9hdFNpemUgdmlld3BvcnRTaXplOworICAgICAg
ICBTVkdMZW5ndGhDb250ZXh0KGRvd25jYXN0PFNWR0VsZW1lbnQ+KGVsZW1lbnQoKSkpLmRldGVy
bWluZVZpZXdwb3J0KHZpZXdwb3J0U2l6ZSk7CisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoeyB9
LCB2aWV3cG9ydFNpemUpOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBGbG9hdFJlY3QoKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJFbGVtZW50LmgKaW5kZXggNTFjNTUyY2JkOWU3ZmQyYjdjYmU5ZDEyZGNmYTNmMTMxZmY3ZGYx
Yi4uYmI2MTg0YmNlZWIxOGNjYmVhNjQ3YzRmY2IwZWI5YTBjYzBmY2Q1ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCkBAIC0yMiw2ICsyMiw3IEBACiAKICNwcmFn
bWEgb25jZQogCisjaW5jbHVkZSAiRmxvYXRPckxheW91dFJlY3QuaCIKICNpbmNsdWRlICJIaXRU
ZXN0UmVxdWVzdC5oIgogI2luY2x1ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlJl
bmRlck9iamVjdC5oIgpAQCAtMjU4LDYgKzI1OSwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGFuaW1hdGlvbkZpbmlzaGVkKGNvbnN0IFN0cmluZyYgLyogbmFtZSAqLykgeyB9CiAgICAg
dmlydHVhbCB2b2lkIHRyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eURpZENoYW5nZSgpIHsgfQogCisg
ICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy10cmFuc2Zvcm1zLTEvI3RyYW5zZm9ybS1i
b3gKKyAgICBGbG9hdE9yTGF5b3V0UmVjdCB0cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QgeyByZXR1cm4gcmVmZXJlbmNlQm94UmVjdCh0cmFu
c2Zvcm1Cb3hUb0NTU0JveFR5cGUoc3R5bGUudHJhbnNmb3JtQm94KCkpKTsgfQorICAgIEZsb2F0
T3JMYXlvdXRSZWN0IHRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3QoKSBjb25zdCB7IHJldHVybiB0
cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KHN0eWxlKCkpOyB9CisKKyAgICAvLyBodHRwczovL3d3
dy53My5vcmcvVFIvY3NzLXRyYW5zZm9ybXMtMS8jcmVmZXJlbmNlLWJveAorICAgIHZpcnR1YWwg
RmxvYXRPckxheW91dFJlY3QgcmVmZXJlbmNlQm94UmVjdChDU1NCb3hUeXBlKSBjb25zdDsKKwog
ICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhNb25vdG9uaWNUaW1lID0gTW9ub3Rv
bmljVGltZSgpKSB7IH0KICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGFuaW1hdGVk
U3R5bGUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXgg
ODUwYmRlNDhlNDkyOGU4NmRjMTc2YjYyMzIxZmVlZDliNjg2YzNjZC4uYmY2ZmM2M2MzOWJmNzRi
NzVjYThiYzZjNDNjZmE4MzBlN2M2ZGI4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCkBAIC0xMjk2LDIxICsxMjk2LDE4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmRp
cnR5QW5jZXN0b3JDaGFpbkhhc0JsZW5kaW5nRGVzY2VuZGFudHMoKQogfQogI2VuZGlmCiAKLXN0
YXRpYyBpbmxpbmUgTGF5b3V0UmVjdCBjb21wdXRlUmVmZXJlbmNlUmVjdEZyb21Cb3goY29uc3Qg
UmVuZGVyQm94JiBib3gsIENTU0JveFR5cGUgYm94VHlwZSwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zm
c2V0RnJvbVJvb3QpCitzdGF0aWMgaW5saW5lIEZsb2F0T3JMYXlvdXRSZWN0IGNvbXB1dGVSZWZl
cmVuY2VCb3goY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIsIENTU0JveFR5
cGUgYm94VHlwZSwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3QsIExheW91dFJlY3Qg
cm9vdFJlbGF0aXZlQm91bmRzKQogewotICAgIGF1dG8gcmVmZXJlbmNlQm94ID0gYm94LnJlZmVy
ZW5jZUJveChib3hUeXBlKTsKLSAgICByZWZlcmVuY2VCb3gubW92ZShvZmZzZXRGcm9tUm9vdCk7
Ci0gICAgcmV0dXJuIHJlZmVyZW5jZUJveDsKLX0KKyAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3Ry
ZWFtIHRyYW5zZm9ybSBzdXBwb3J0IGZvciBSZW5kZXJTVkdNb2RlbE9iamVjdCBkZXJpdmVkIHJl
bmRlcmVycwogCi1zdGF0aWMgaW5saW5lIExheW91dFJlY3QgY29tcHV0ZVJlZmVyZW5jZUJveChj
b25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBDU1NCb3hUeXBlIGJveFR5cGUsIGNvbnN0IExh
eW91dFNpemUmIG9mZnNldEZyb21Sb290LCBjb25zdCBMYXlvdXRSZWN0JiByb290UmVsYXRpdmVC
b3VuZHMpCi17CiAgICAgLy8gRklYTUU6IFN1cHBvcnQgZGlmZmVyZW50IHJlZmVyZW5jZSBib3hl
cyBmb3IgaW5saW5lIGNvbnRlbnQuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyOTA0NwogICAgIGlmICghcmVuZGVyZXIuaXNCb3goKSkKICAgICAgICAg
cmV0dXJuIHJvb3RSZWxhdGl2ZUJvdW5kczsKICAgICAKLSAgICByZXR1cm4gY29tcHV0ZVJlZmVy
ZW5jZVJlY3RGcm9tQm94KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpLCBib3hUeXBlLCBv
ZmZzZXRGcm9tUm9vdCk7CisgICAgYXV0byByZWZlcmVuY2VCb3ggPSByZW5kZXJlci5yZWZlcmVu
Y2VCb3hSZWN0KGJveFR5cGUpOworICAgIHJlZmVyZW5jZUJveC5tb3ZlKG9mZnNldEZyb21Sb290
KTsKKyAgICByZXR1cm4gcmVmZXJlbmNlQm94OwogfQogCiB2b2lkIFJlbmRlckxheWVyOjp1cGRh
dGVUcmFuc2Zvcm0oKQpAQCAtMTMzMiwxMiArMTMyOSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVw
ZGF0ZVRyYW5zZm9ybSgpCiAgICAgaWYgKGhhc1RyYW5zZm9ybSkgewogICAgICAgICBtX3RyYW5z
Zm9ybS0+bWFrZUlkZW50aXR5KCk7CiAKLSAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVh
bSByZWZlcmVuY2UgYm94IGNvbXB1dGF0aW9uIGZvciBSZW5kZXJTVkdNb2RlbE9iamVjdCBkZXJp
dmVkIHJlbmRlcmVycwotICAgICAgICBGbG9hdFJlY3QgcmVmZXJlbmNlQm94OwotICAgICAgICBp
ZiAoaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkKLSAgICAgICAgICAgIHJlZmVyZW5jZUJveCA9
IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5y
ZWZlcmVuY2VCb3godHJhbnNmb3JtQm94VG9DU1NCb3hUeXBlKHJlbmRlcmVyKCkuc3R5bGUoKS50
cmFuc2Zvcm1Cb3goKSkpLCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3Io
KSk7Ci0KLSAgICAgICAgcmVuZGVyZXIoKS5hcHBseVRyYW5zZm9ybSgqbV90cmFuc2Zvcm0sIHJl
ZmVyZW5jZUJveCk7CisgICAgICAgIGF1dG8gcmVmZXJlbmNlQm94UmVjdEZvclBhaW50aW5nID0g
cmVuZGVyZXIoKS50cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCkuZmxvYXRSZWN0Rm9yUGFpbnRp
bmcocmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOworICAgICAgICBy
ZW5kZXJlcigpLmFwcGx5VHJhbnNmb3JtKCptX3RyYW5zZm9ybSwgcmVmZXJlbmNlQm94UmVjdEZv
clBhaW50aW5nKTsKICAgICAgICAgbWFrZU1hdHJpeFJlbmRlcmFibGUoKm1fdHJhbnNmb3JtLCBj
YW5SZW5kZXIzRFRyYW5zZm9ybXMoKSk7CiAgICAgfQogCkBAIC0xMzY2LDEwICsxMzU5LDEwIEBA
IFRyYW5zZm9ybWF0aW9uTWF0cml4IFJlbmRlckxheWVyOjpjdXJyZW50VHJhbnNmb3JtKE9wdGlv
blNldDxSZW5kZXJTdHlsZTo6VHJhbnNmCiAgICAgYXV0byBzdHlsZWFibGUgPSBTdHlsZWFibGU6
OmZyb21SZW5kZXJlcihyZW5kZXJCb3gpOwogICAgIGlmICgoc3R5bGVhYmxlICYmIHN0eWxlYWJs
ZS0+aXNSdW5uaW5nQWNjZWxlcmF0ZWRUcmFuc2Zvcm1BbmltYXRpb24oKSkgfHwgIW9wdGlvbnMu
Y29udGFpbnMoUmVuZGVyU3R5bGU6OlRyYW5zZm9ybU9wZXJhdGlvbk9wdGlvbjo6VHJhbnNmb3Jt
T3JpZ2luKSkgewogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGFuaW1hdGVk
U3R5bGUgPSByZW5kZXJCb3guYW5pbWF0ZWRTdHlsZSgpOwotICAgICAgICBhdXRvIHBpeGVsU25h
cHBlZEJvcmRlclJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKHJlbmRlckJveC5yZWZlcmVu
Y2VCb3godHJhbnNmb3JtQm94VG9DU1NCb3hUeXBlKGFuaW1hdGVkU3R5bGUtPnRyYW5zZm9ybUJv
eCgpKSksIHJlbmRlckJveC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOworICAgICAg
ICBhdXRvIHJlZmVyZW5jZUJveFJlY3RGb3JQYWludGluZyA9IHJlbmRlckJveC50cmFuc2Zvcm1S
ZWZlcmVuY2VCb3hSZWN0KCkuZmxvYXRSZWN0Rm9yUGFpbnRpbmcocmVuZGVyQm94LmRvY3VtZW50
KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
dHJhbnNmb3JtOwotICAgICAgICBhbmltYXRlZFN0eWxlLT5hcHBseVRyYW5zZm9ybSh0cmFuc2Zv
cm0sIHBpeGVsU25hcHBlZEJvcmRlclJlY3QsIG9wdGlvbnMpOworICAgICAgICBhbmltYXRlZFN0
eWxlLT5hcHBseVRyYW5zZm9ybSh0cmFuc2Zvcm0sIHJlZmVyZW5jZUJveFJlY3RGb3JQYWludGlu
Zywgb3B0aW9ucyk7CiAKICAgICAgICAgbWFrZU1hdHJpeFJlbmRlcmFibGUodHJhbnNmb3JtLCBj
YW5SZW5kZXIzRFRyYW5zZm9ybXMoKSk7CiAgICAgICAgIHJldHVybiB0cmFuc2Zvcm07CkBAIC0x
ODAxLDExICsxNzk0LDExIEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4IFJlbmRlckxheWVyOjpwZXJz
cGVjdGl2ZVRyYW5zZm9ybShjb25zdCBMYXlvdXRSZWN0JiBsYXllclJlCiAgICAgICAgIHJldHVy
biB7IH07CiAKICAgICBhdXRvIGRldmljZVNjYWxlRmFjdG9yID0gcmVuZGVyQm94LmRvY3VtZW50
KCkuZGV2aWNlU2NhbGVGYWN0b3IoKTsKLSAgICBhdXRvIHJlZmVyZW5jZUJveCA9IHJlbmRlckJv
eC5yZWZlcmVuY2VCb3godHJhbnNmb3JtQm94VG9DU1NCb3hUeXBlKHN0eWxlLnRyYW5zZm9ybUJv
eCgpKSk7Ci0gICAgYXV0byBwaXhlbFNuYXBwZWRSZWZlcmVuY2VCb3ggPSBzbmFwUmVjdFRvRGV2
aWNlUGl4ZWxzKHJlZmVyZW5jZUJveCwgZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIGF1dG8gcmVm
ZXJlbmNlQm94UmVjdEZvclBhaW50aW5nID0gcmVuZGVyQm94LnRyYW5zZm9ybVJlZmVyZW5jZUJv
eFJlY3QoKS5mbG9hdFJlY3RGb3JQYWludGluZyhkZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgLy8g
RklYTUU6IFtMQlNFXSBBdm9pZCBwaXhlbCBzbmFwcGluZyBpbiBTVkcgc3VidHJlZS4KICAgICBh
dXRvIHNuYXBwZWRMYXllclJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGxheWVyUmVjdCwg
ZGV2aWNlU2NhbGVGYWN0b3IpOwogCi0gICAgYXV0byBwZXJzcGVjdGl2ZU9yaWdpbiA9IHBpeGVs
U25hcHBlZFJlZmVyZW5jZUJveC5sb2NhdGlvbigpIC0gdG9GbG9hdFNpemUoc25hcHBlZExheWVy
UmVjdC5sb2NhdGlvbigpKSArIGZsb2F0UG9pbnRGb3JMZW5ndGhQb2ludChzdHlsZS5wZXJzcGVj
dGl2ZU9yaWdpbigpLCBwaXhlbFNuYXBwZWRSZWZlcmVuY2VCb3guc2l6ZSgpKTsKKyAgICBhdXRv
IHBlcnNwZWN0aXZlT3JpZ2luID0gcmVmZXJlbmNlQm94UmVjdEZvclBhaW50aW5nLmxvY2F0aW9u
KCkgLSB0b0Zsb2F0U2l6ZShzbmFwcGVkTGF5ZXJSZWN0LmxvY2F0aW9uKCkpICsgZmxvYXRQb2lu
dEZvckxlbmd0aFBvaW50KHN0eWxlLnBlcnNwZWN0aXZlT3JpZ2luKCksIHJlZmVyZW5jZUJveFJl
Y3RGb3JQYWludGluZy5zaXplKCkpOwogCiAgICAgLy8gQSBwZXJzcGVjdGl2ZSBvcmlnaW4gb2Yg
MCwwIG1ha2VzIHRoZSB2YW5pc2hpbmcgcG9pbnQgaW4gdGhlIGNlbnRlciBvZiB0aGUgZWxlbWVu
dC4KICAgICAvLyBXZSB3YW50IGl0IHRvIGJlIGluIHRoZSB0b3AtbGVmdCwgc28gc3VidHJhY3Qg
aGFsZiB0aGUgaGVpZ2h0IGFuZCB3aWR0aC4KQEAgLTE4MjMsNiArMTgxNiw3IEBAIEZsb2F0UG9p
bnQgUmVuZGVyTGF5ZXI6OnBlcnNwZWN0aXZlT3JpZ2luKCkgY29uc3QKIHsKICAgICBpZiAoIXJl
bmRlcmVyKCkuaGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KCkpCiAgICAgICAgIHJldHVybiB7
IH07CisgICAgLy8gRklYTUU6IFRoaXMgdXNlcyB0aGUgd3JvbmcsIHRyYW5zZm9ybS1ib3ggdW5h
d2FyZSwgZ2VvbWV0cnkuCiAgICAgcmV0dXJuIGZsb2F0UG9pbnRGb3JMZW5ndGhQb2ludChyZW5k
ZXJlcigpLnN0eWxlKCkucGVyc3BlY3RpdmVPcmlnaW4oKSwgcmVuZGVyZXJCb3JkZXJCb3hSZWN0
KCkuc2l6ZSgpKTsKIH0KIApAQCAtMzIxMiwyMiArMzIwNiw4IEBAIHN0ZDo6cGFpcjxQYXRoLCBX
aW5kUnVsZT4gUmVuZGVyTGF5ZXI6OmNvbXB1dGVDbGlwUGF0aChjb25zdCBMYXlvdXRTaXplJiBv
ZmZzZXRGCiAKICAgICBpZiAoaXM8U2hhcGVQYXRoT3BlcmF0aW9uPigqc3R5bGUuY2xpcFBhdGgo
KSkpIHsKICAgICAgICAgYXV0byYgY2xpcFBhdGggPSBkb3duY2FzdDxTaGFwZVBhdGhPcGVyYXRp
b24+KCpzdHlsZS5jbGlwUGF0aCgpKTsKLQotICAgICAgICBMYXlvdXRSZWN0IHJlZmVyZW5jZUJv
eDsKLSAgICAgICAgaWYgKGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpIHsKLSAgICAgICAgICAg
IHJlZmVyZW5jZUJveCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkucmVmZXJlbmNl
Qm94KGNsaXBQYXRoLnJlZmVyZW5jZUJveCgpKTsKLSAgICAgICAgICAgIHJlZmVyZW5jZUJveC5t
b3ZlKG9mZnNldEZyb21Sb290KTsKLSNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkK
LSAgICAgICAgfSBlbHNlIGlmIChpczxSZW5kZXJTVkdNb2RlbE9iamVjdD4ocmVuZGVyZXIoKSkp
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gY2xpcHBpbmcgc3VwcG9y
dCBmb3IgUmVuZGVyU1ZHTW9kZWxPYmplY3QgZGVyaXZlZCByZW5kZXJlcnMKLSNlbmRpZgotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gUmVmZXJlbmNlIGJveCBmb3IgaW5saW5lcyBp
cyBub3Qgd2VsbCBkZWZpbmVkOiBodHRwczovL2dpdGh1Yi5jb20vdzNjL2Nzc3dnLWRyYWZ0cy9p
c3N1ZXMvNjM4MwotICAgICAgICAgICAgcmVmZXJlbmNlQm94ID0gcm9vdFJlbGF0aXZlQm91bmRz
Rm9yTm9uQm94ZXM7Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvIHNuYXBwZWRSZWZlcmVuY2VC
b3ggPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKHJlZmVyZW5jZUJveCwgZGV2aWNlU2NhbGVGYWN0
b3IpOwotICAgICAgICByZXR1cm4geyBjbGlwUGF0aC5wYXRoRm9yUmVmZXJlbmNlUmVjdChzbmFw
cGVkUmVmZXJlbmNlQm94KSwgY2xpcFBhdGgud2luZFJ1bGUoKSB9OworICAgICAgICBhdXRvIHJl
ZmVyZW5jZUJveFJlY3QgPSBjb21wdXRlUmVmZXJlbmNlQm94KHJlbmRlcmVyKCksIGNsaXBQYXRo
LnJlZmVyZW5jZUJveCgpLCBvZmZzZXRGcm9tUm9vdCwgcm9vdFJlbGF0aXZlQm91bmRzRm9yTm9u
Qm94ZXMpOworICAgICAgICByZXR1cm4geyBjbGlwUGF0aC5wYXRoRm9yUmVmZXJlbmNlUmVjdChy
ZWZlcmVuY2VCb3hSZWN0LmZsb2F0UmVjdEZvclBhaW50aW5nKGRldmljZVNjYWxlRmFjdG9yKSks
IGNsaXBQYXRoLndpbmRSdWxlKCkgfTsKICAgICB9CiAKICAgICBpZiAoaXM8Qm94UGF0aE9wZXJh
dGlvbj4oKnN0eWxlLmNsaXBQYXRoKCkpICYmIGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpIHsK
QEAgLTMyNjksMTYgKzMyNDksMjAgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2V0dXBDbGlwUGF0aChH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dFN0YXRlU2EKICAgICAgICAg
ICAgIC8vIFVzZSB0aGUgYm9yZGVyIGJveCBhcyB0aGUgcmVmZXJlbmNlIGJveCwgZXZlbiB0aG91
Z2ggdGhpcyBpcyBub3QgY2xlYXJseSBzcGVjaWZpZWQ6IGh0dHBzOi8vZ2l0aHViLmNvbS93M2Mv
Y3Nzd2ctZHJhZnRzL2lzc3Vlcy81Nzg2LgogICAgICAgICAgICAgLy8gY2xpcHBlZENvbnRlbnRC
b3VuZHMgaXMgdXNlZCBhcyB0aGUgcmVmZXJlbmNlIGJveCBmb3IgaW5saW5lcywgd2hpY2ggaXMg
YWxzbyBwb29ybHkgc3BlY2lmaWVkOiBodHRwczovL2dpdGh1Yi5jb20vdzNjL2Nzc3dnLWRyYWZ0
cy9pc3N1ZXMvNjM4My4KICAgICAgICAgICAgIGF1dG8gcmVmZXJlbmNlQm94ID0gY29tcHV0ZVJl
ZmVyZW5jZUJveChyZW5kZXJlcigpLCBDU1NCb3hUeXBlOjpCb3JkZXJCb3gsIG9mZnNldEZyb21S
b290LCBjbGlwcGVkQ29udGVudEJvdW5kcyk7Ci0gICAgICAgICAgICBhdXRvIHNuYXBwZWRSZWZl
cmVuY2VCb3ggPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKHJlZmVyZW5jZUJveCwgcmVuZGVyZXIo
KS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgICAgICAgICAgYXV0byBvZmZz
ZXQgPSBzbmFwcGVkUmVmZXJlbmNlQm94LmxvY2F0aW9uKCk7CiAKKyAgICAgICAgICAgIEZsb2F0
UmVjdCByZWZlcmVuY2VCb3hSZWN0ID0gcmVmZXJlbmNlQm94OworICAgICAgICAgICAgcmVmZXJl
bmNlQm94UmVjdC5zZXRMb2NhdGlvbih7IH0pOworCisgICAgICAgICAgICBhdXRvIHJlZmVyZW5j
ZUJveFJlY3RGb3JQYWludGluZyA9IHJlZmVyZW5jZUJveC5mbG9hdFJlY3RGb3JQYWludGluZyhy
ZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgICAgICAgICBh
dXRvIG9mZnNldCA9IHJlZmVyZW5jZUJveFJlY3RGb3JQYWludGluZy5sb2NhdGlvbigpOworCisg
ICAgICAgICAgICAvLyBGSVhNRTogW0xCU0VdIEF2b2lkIHBpeGVsIHNuYXBwaW5nIGluIFNWRyBz
dWJ0cmVlLgogICAgICAgICAgICAgYXV0byBzbmFwcGVkQ2xpcHBpbmdCb3VuZHMgPSBzbmFwUmVj
dFRvRGV2aWNlUGl4ZWxzKGNsaXBwZWRDb250ZW50Qm91bmRzLCByZW5kZXJlcigpLmRvY3VtZW50
KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAgICAgICAgICAgICBzbmFwcGVkQ2xpcHBpbmdCb3Vu
ZHMubW92ZUJ5KC1vZmZzZXQpOwogCiAgICAgICAgICAgICBzdGF0ZVNhdmVyLnNhdmUoKTsKICAg
ICAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKG9mZnNldCk7Ci0gICAgICAgICAgICBGbG9hdFJl
Y3QgY2xpcFBhdGhSZWZlcmVuY2VCb3ggeyB7IH0sIHJlZmVyZW5jZUJveC5zaXplKCkgfTsKLSAg
ICAgICAgICAgIGNsaXBwZXJSZW5kZXJlci0+YXBwbHlDbGlwcGluZ1RvQ29udGV4dChjb250ZXh0
LCByZW5kZXJlcigpLCBjbGlwUGF0aFJlZmVyZW5jZUJveCwgc25hcHBlZENsaXBwaW5nQm91bmRz
LCByZW5kZXJlcigpLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgICAgIGNsaXBw
ZXJSZW5kZXJlci0+YXBwbHlDbGlwcGluZ1RvQ29udGV4dChjb250ZXh0LCByZW5kZXJlcigpLCBy
ZWZlcmVuY2VCb3hSZWN0LCBzbmFwcGVkQ2xpcHBpbmdCb3VuZHMsIHJlbmRlcmVyKCkuc3R5bGUo
KS5lZmZlY3RpdmVab29tKCkpOwogICAgICAgICAgICAgY29udGV4dC50cmFuc2xhdGUoLW9mZnNl
dCk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAppbmRleCBjYzM4ZWM3MDMwZTYwY2UxNzU5YjEzMjg3ZGUy
NWY3M2Q1NjVjODU4Li5lMmJlYjRiYThjMTE1N2RjYmIxMjg2NDlhM2VkZTU2ZTM4NGU4ZDA5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5j
cHAKQEAgLTM0MywyNiArMzQzLDYgQEAgYm9vbCBTVkdSZW5kZXJTdXBwb3J0OjpmaWx0ZXJzRm9y
Y2VDb250YWluZXJMYXlvdXQoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotRmxvYXRSZWN0IFNWR1JlbmRlclN1cHBvcnQ6OnRyYW5zZm9ybVJlZmVy
ZW5jZUJveChjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgU1ZHRWxlbWVudCYg
ZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQotewotICAgIHN3aXRjaCAoc3R5bGUu
dHJhbnNmb3JtQm94KCkpIHsKLSAgICBjYXNlIFRyYW5zZm9ybUJveDo6Qm9yZGVyQm94OgotICAg
ICAgICAvLyBGb3IgU1ZHIGVsZW1lbnRzIHdpdGhvdXQgYW4gYXNzb2NpYXRlZCBDU1MgbGF5b3V0
IGJveCwgdGhlIHVzZWQgdmFsdWUgZm9yIGJvcmRlci1ib3ggaXMgc3Ryb2tlLWJveC4KLSAgICBj
YXNlIFRyYW5zZm9ybUJveDo6U3Ryb2tlQm94OgotICAgICAgICByZXR1cm4gcmVuZGVyZXIuc3Ry
b2tlQm91bmRpbmdCb3goKTsKLSAgICBjYXNlIFRyYW5zZm9ybUJveDo6Q29udGVudEJveDoKLSAg
ICAgICAgLy8gRm9yIFNWRyBlbGVtZW50cyB3aXRob3V0IGFuIGFzc29jaWF0ZWQgQ1NTIGxheW91
dCBib3gsIHRoZSB1c2VkIHZhbHVlIGZvciBjb250ZW50LWJveCBpcyBmaWxsLWJveC4KLSAgICBj
YXNlIFRyYW5zZm9ybUJveDo6RmlsbEJveDoKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVyLm9iamVj
dEJvdW5kaW5nQm94KCk7Ci0gICAgY2FzZSBUcmFuc2Zvcm1Cb3g6OlZpZXdCb3g6IHsKLSAgICAg
ICAgRmxvYXRTaXplIHZpZXdwb3J0U2l6ZTsKLSAgICAgICAgU1ZHTGVuZ3RoQ29udGV4dCgmZWxl
bWVudCkuZGV0ZXJtaW5lVmlld3BvcnQodmlld3BvcnRTaXplKTsKLSAgICAgICAgcmV0dXJuIEZs
b2F0UmVjdCB7IHsgfSwgdmlld3BvcnRTaXplIH07Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0
dXJuIHsgfTsKLX0KLQogaW5saW5lIEZsb2F0UmVjdCBjbGlwUGF0aFJlZmVyZW5jZUJveChjb25z
dCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgQ1NTQm94VHlwZSBib3hUeXBlKQogewogICAgIEZs
b2F0UmVjdCByZWZlcmVuY2VCb3g7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyU3VwcG9ydC5oCmluZGV4IDljY2ZjYmViNTc3YTc3M2RjODgwN2Q5NTM5ZDYyYTgx
ZTU2MTliODkuLmQ0M2QwYzdmNzU4ZDE1ZmI3MDQ2YzkxYmUwY2E5ZGE1M2RkODU2MDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oCkBAIC04
Miw4ICs4Miw2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIHN0eWxlQ2hhbmdlZChSZW5k
ZXJFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqKTsKICAgICAKLSAgICBzdGF0aWMgRmxvYXRS
ZWN0IHRyYW5zZm9ybVJlZmVyZW5jZUJveChjb25zdCBSZW5kZXJFbGVtZW50JiwgY29uc3QgU1ZH
RWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJik7Ci0KICNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lU
SU5HKQogICAgIHN0YXRpYyBib29sIGlzb2xhdGVzQmxlbmRpbmcoY29uc3QgUmVuZGVyU3R5bGUm
KTsKICAgICBzdGF0aWMgdm9pZCB1cGRhdGVNYXNrZWRBbmNlc3RvclNob3VsZElzb2xhdGVCbGVu
ZGluZyhjb25zdCBSZW5kZXJFbGVtZW50Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHR3JhcGhpY3NFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFwaGlj
c0VsZW1lbnQuY3BwCmluZGV4IGRjMTA4ZTViMjNjNDZkYTk1NjAwYTAyYWFjNjIwN2VkNWI2NjU2
OTYuLmE2MDk5NTY0ZmFjMzQzOGNiMmI4NDNiMDkzOTA4YjcyMmUwZGMwNjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFwaGljc0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdHcmFwaGljc0VsZW1lbnQuY3BwCkBAIC04MCwxMiArODAsMTAgQEAgQWZm
aW5lVHJhbnNmb3JtIFNWR0dyYXBoaWNzRWxlbWVudDo6YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgp
IGNvbnN0CiAKICAgICAvLyBIb25vciBhbnkgb2YgdGhlIHRyYW5zZm9ybS1yZWxhdGVkIENTUyBw
cm9wZXJ0aWVzIGlmIHNldC4KICAgICBpZiAoaGFzU3BlY2lmaWVkVHJhbnNmb3JtIHx8IChzdHls
ZSAmJiAoc3R5bGUtPnRyYW5zbGF0ZSgpIHx8IHN0eWxlLT5zY2FsZSgpIHx8IHN0eWxlLT5yb3Rh
dGUoKSkpKSB7Ci0gICAgICAgIGF1dG8gYm91bmRpbmdCb3ggPSBTVkdSZW5kZXJTdXBwb3J0Ojp0
cmFuc2Zvcm1SZWZlcmVuY2VCb3goKnJlbmRlcmVyKCksICp0aGlzLCAqc3R5bGUpOwotICAgICAg
ICAKICAgICAgICAgLy8gTm90ZTogb2JqZWN0Qm91bmRpbmdCb3ggaXMgYW4gZW1wdHlSZWN0IGZv
ciBlbGVtZW50cyBsaWtlIHBhdHRlcm4gb3IgY2xpcFBhdGguCiAgICAgICAgIC8vIFNlZSB0aGUg
Ik9iamVjdCBib3VuZGluZyBib3ggdW5pdHMiIHNlY3Rpb24gb2YgaHR0cDovL2Rldi53My5vcmcv
Y3Nzd2cvY3NzMy10cmFuc2Zvcm1zLwogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFu
c2Zvcm07Ci0gICAgICAgIHN0eWxlLT5hcHBseVRyYW5zZm9ybSh0cmFuc2Zvcm0sIGJvdW5kaW5n
Qm94KTsKKyAgICAgICAgc3R5bGUtPmFwcGx5VHJhbnNmb3JtKHRyYW5zZm9ybSwgcmVuZGVyZXIo
KS0+dHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdCgpKTsKIAogICAgICAgICAvLyBGbGF0dGVuIGFu
eSAzRCB0cmFuc2Zvcm0uCiAgICAgICAgIG1hdHJpeCA9IHRyYW5zZm9ybS50b0FmZmluZVRyYW5z
Zm9ybSgpOwpAQCAtMTAwLDcgKzk4LDcgQEAgQWZmaW5lVHJhbnNmb3JtIFNWR0dyYXBoaWNzRWxl
bWVudDo6YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0CiAKICAgICAvLyBJZiB3ZSBkaWRu
J3QgaGF2ZSB0aGUgQ1NTICJ0cmFuc2Zvcm0iIHByb3BlcnR5IHNldCwgd2UgbXVzdCBhY2NvdW50
IGZvciB0aGUgInRyYW5zZm9ybSIgYXR0cmlidXRlLgogICAgIGlmICghaGFzU3BlY2lmaWVkVHJh
bnNmb3JtICYmIHN0eWxlKSB7Ci0gICAgICAgIGF1dG8gYm91bmRpbmdCb3ggPSBTVkdSZW5kZXJT
dXBwb3J0Ojp0cmFuc2Zvcm1SZWZlcmVuY2VCb3goKnJlbmRlcmVyKCksICp0aGlzLCAqc3R5bGUp
OworICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByZW5kZXJlcigpLT50cmFuc2Zvcm1S
ZWZlcmVuY2VCb3hSZWN0KCk7CiAgICAgICAgIGF1dG8gdCA9IGZsb2F0UG9pbnRGb3JMZW5ndGhQ
b2ludChzdHlsZS0+dHJhbnNmb3JtT3JpZ2luWFkoKSwgYm91bmRpbmdCb3guc2l6ZSgpKSArIGJv
dW5kaW5nQm94LmxvY2F0aW9uKCk7CiAgICAgICAgIG1hdHJpeC50cmFuc2xhdGUodCk7CiAgICAg
ICAgIG1hdHJpeCAqPSB0cmFuc2Zvcm0oKS5jb25jYXRlbmF0ZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>455224</attachid>
            <date>2022-03-21 02:49:06 -0700</date>
            <delta_ts>2022-04-04 13:32:50 -0700</delta_ts>
            <desc>Patch, v8</desc>
            <filename>bug-237554-20220321024905.patch</filename>
            <type>text/plain</type>
            <size>28103</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxNTU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzgwOTYzNDY1YjQzZGFi
MWFlNjkyYjg2YWRmODMzYjliN2FhMmZhZi4uYTg2NjU1NzIzZGUzOTFmNmE3ZTliNTlmZGRhYzM3
ZmEyNzIwYmNhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDIyLTAzLTIxICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFVuaWZ5
ICd0cmFuc2Zvcm0tYm94JyByZWZlcmVuY2UgYm94IGNvbXB1dGF0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc1NTQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgdGhlIGNvZGUgdG8g
Y29tcHV0ZSB0aGUgcmVmZXJlbmNlIGJveCwgYWNjb3JkaW5nIHRvIHRoZSBDU1MgJ3RyYW5zZm9y
bS1ib3gnCisgICAgICAgIHByb3BlcnR5IGlzIHNwcmlua2xlZCBvdmVyIHZhcmlvdXMgcGxhY2Vz
OiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24sIFNWR1JlbmRlclN1cHBvcnQsCisgICAgICAg
IFJlbmRlckJveCwgcGFydHMgaW4gUmVuZGVyTGF5ZXIuCisKKyAgICAgICAgQ2xlYW51cCBhbmQg
dW5pZnkgdGhlIGNvZGUgaW4gYSBzaW5nbGUgcGxhY2U6IGEgbmV3IHBhaXIgb2YgJ3JlZmVyZW5j
ZUJveExheW91dFJlY3QoKScgYW5kCisgICAgICAgICdyZWZlcmVuY2VCb3hGbG9hdFJlY3QoKScg
bWV0aG9kcyAgaW1wbGVtZW50aW5nIHRoZSBjb21wdXRhdGlvbiBmb3IgYm90aCBIVE1ML0NTUyBh
bmQgU1ZHLgorICAgICAgICBUaGUgSFRNTC9DU1MgY29kZSByZW1haW5zIGluIFJlbmRlckJveCwg
dGhlIG5ldyBTVkcgY29kZSB3YXMgbW92ZWQgZnJvbSBTVkdSZW5kZXJTdXBwb3J0CisgICAgICAg
IGludG8gUmVuZGVyRWxlbWVudCAodGhlIG9ubHkgc2hhcmVkIGJhc2UgY2xhc3MgYmV0d2VlbiBs
ZWdhY3kgU1ZHL0xCU0UpLgorCisgICAgICAgIFJlbW92ZSBjb2RlIGZyb20gU1ZHUmVuZGVyU3Vw
cG9ydC9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24gdGhhdCBjYW4gbm93IHVzZSB0aGUgc2hh
cmVkIGxvZ2ljLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMsIG5vIGNoYW5n
ZSBpbiBiZWhhdmlvdXIuCisKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVkVHJhbnNmb3JtKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnZhbHVlRm9yUHJvcGVydHlJblN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OnRyYW5zZm9ybVJlZmVyZW5jZUJveCk6IERlbGV0ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OnJlZmVyZW5jZUJveExheW91dFJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjpoaXRUZXN0Q2xpcFBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjpyZWZlcmVuY2VCb3ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjpyZWZlcmVuY2VCb3hGbG9hdFJlY3QgY29u
c3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50Lmg6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJFbGVtZW50Ojp0cmFuc2Zvcm1SZWZlcmVuY2VCb3hGbG9hdFJlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6dHJhbnNmb3JtUmVmZXJlbmNlQm94
TGF5b3V0UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50Ojp0cmFu
c2Zvcm1SZWZlcmVuY2VCb3hSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVs
ZW1lbnQ6OnJlZmVyZW5jZUJveExheW91dFJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRWxlbWVudDo6cmVmZXJlbmNlQm94UmVjdCBjb25zdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpyZWZl
cmVuY2VCb3hSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpyZWZl
cmVuY2VCb3hSZWN0Rm9yUGFpbnRpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3RGb3JQYWludGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlVHJhbnNmb3JtKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpjdXJyZW50VHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpwZXJzcGVjdGl2ZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGVyc3BlY3RpdmVPcmlnaW4gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbXB1dGVDbGlwUGF0aCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0dXBDbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb21wdXRlUmVmZXJlbmNlUmVjdEZyb21Cb3gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Y29tcHV0ZVJlZmVyZW5jZUJveCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlclN1cHBvcnQ6OnRyYW5zZm9ybVJlZmVyZW5j
ZUJveCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0
Lmg6CisgICAgICAgICogc3ZnL1NWR0dyYXBoaWNzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdHcmFwaGljc0VsZW1lbnQ6OmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0gY29uc3QpOgor
CiAyMDIyLTAzLTIxICBaaXJhbiBTdW4gIDx6c3VuQGlnYWxpYS5jb20+CiAKICAgICAgICAgW3Nl
bGVjdGlvbl0gSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnN1YnRyZWVIYXNDaGFuZ2VkKCkg
c2hvdWxkbid0IGJlIGNhbGxlZCBpbiBzZXRSYW5nZVRleHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggNDk0ZThiNmFiNDA0
ODI1OTkwYjE0ZWUyNWM1ODk2NzRiYmZlZDgzYy4uZmNiZWE2OGI4MTE1ZGM3YTg2MDdmYjJjZjlj
YTdlZDlkY2RiMGQwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTU2MCwxNyArNTYwLDYgQEAgc3RhdGljIExheW91dFJl
Y3Qgc2l6aW5nQm94KFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCiAgICAgcmV0dXJuIGJveC5zdHls
ZSgpLmJveFNpemluZygpID09IEJveFNpemluZzo6Qm9yZGVyQm94ID8gYm94LmJvcmRlckJveFJl
Y3QoKSA6IGJveC5jb21wdXRlZENTU0NvbnRlbnRCb3hSZWN0KCk7CiB9CiAKLXN0YXRpYyBGbG9h
dFJlY3QgdHJhbnNmb3JtUmVmZXJlbmNlQm94KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29u
c3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCi17Ci0gICAgaWYgKGlzPFJlbmRlckJveD4ocmVu
ZGVyZXIpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcikucmVm
ZXJlbmNlQm94KHRyYW5zZm9ybUJveFRvQ1NTQm94VHlwZShzdHlsZS50cmFuc2Zvcm1Cb3goKSkp
OwotCi0gICAgaWYgKGlzPFNWR0VsZW1lbnQ+KHJlbmRlcmVyLmVsZW1lbnQoKSkpCi0gICAgICAg
IHJldHVybiBTVkdSZW5kZXJTdXBwb3J0Ojp0cmFuc2Zvcm1SZWZlcmVuY2VCb3gocmVuZGVyZXIs
IGRvd25jYXN0PFNWR0VsZW1lbnQ+KCpyZW5kZXJlci5lbGVtZW50KCkpLCBzdHlsZSk7Ci0KLSAg
ICByZXR1cm4geyB9OwotfQotCiBzdGF0aWMgUmVmPENTU0Z1bmN0aW9uVmFsdWU+IG1hdHJpeFRy
YW5zZm9ybVZhbHVlKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKICAgICBSZWZQdHI8Q1NTRnVuY3Rpb25WYWx1ZT4gdHJh
bnNmb3JtVmFsdWU7CkBAIC02MjMsNyArNjEyLDggQEAgc3RhdGljIFJlZjxDU1NWYWx1ZT4gY29t
cHV0ZWRUcmFuc2Zvcm0oUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWwK
ICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlTm9uZSk7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zv
cm07Ci0gICAgc3R5bGUuYXBwbHlUcmFuc2Zvcm0odHJhbnNmb3JtLCB0cmFuc2Zvcm1SZWZlcmVu
Y2VCb3goc3R5bGUsICpyZW5kZXJlciksIHsgfSk7CisgICAgc3R5bGUuYXBwbHlUcmFuc2Zvcm0o
dHJhbnNmb3JtLCByZW5kZXJlci0+dHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdChzdHlsZSksIHsg
fSk7CisKICAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBmbGF0dGVuIHRvIGFuIGFmZmlu
ZSB0cmFuc2Zvcm0gaWYgRU5BQkxFKDNEX1RSQU5TRk9STVMpIGlzIG9mZiwgYnkgZGVzaWduLgog
CiAgICAgLy8gRklYTUU6IE5lZWQgdG8gcHJpbnQgb3V0IGluZGl2aWR1YWwgZnVuY3Rpb25zICho
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM5MjQpCkBAIC0zODQ2LDcg
KzM4MzYsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnZhbHVl
Rm9yUHJvcGVydHlJblN0eWxlKGNvbnN0IFJlbmRlclN0eQogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5UGVyc3BlY3RpdmVPcmlnaW46IHsKICAgICAgICAgICAgIGF1dG8gbGlzdCA9IENTU1ZhbHVl
TGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICAgICAgICAgIGlmIChyZW5kZXJlcikg
ewotICAgICAgICAgICAgICAgIGF1dG8gYm94ID0gdHJhbnNmb3JtUmVmZXJlbmNlQm94KHN0eWxl
LCAqcmVuZGVyZXIpOworICAgICAgICAgICAgICAgIGF1dG8gYm94ID0gcmVuZGVyZXItPnRyYW5z
Zm9ybVJlZmVyZW5jZUJveFJlY3Qoc3R5bGUpOwogICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVu
ZCh6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKG1pbmltdW1WYWx1ZUZvckxlbmd0aChzdHlsZS5wZXJz
cGVjdGl2ZU9yaWdpblgoKSwgYm94LndpZHRoKCkpLCBzdHlsZSkpOwogICAgICAgICAgICAgICAg
IGxpc3QtPmFwcGVuZCh6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKG1pbmltdW1WYWx1ZUZvckxlbmd0
aChzdHlsZS5wZXJzcGVjdGl2ZU9yaWdpblkoKSwgYm94LmhlaWdodCgpKSwgc3R5bGUpKTsKICAg
ICAgICAgICAgIH0gZWxzZSB7CkBAIC0zOTAyLDcgKzM4OTIsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+
IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnZhbHVlRm9yUHJvcGVydHlJblN0eWxlKGNvbnN0IFJl
bmRlclN0eQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2luOiB7CiAgICAg
ICAgICAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7
CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGJveCA9
IHRyYW5zZm9ybVJlZmVyZW5jZUJveChzdHlsZSwgKnJlbmRlcmVyKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIGJveCA9IHJlbmRlcmVyLT50cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KHN0eWxlKTsK
ICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShtaW5p
bXVtVmFsdWVGb3JMZW5ndGgoc3R5bGUudHJhbnNmb3JtT3JpZ2luWCgpLCBib3gud2lkdGgoKSks
IHN0eWxlKSk7CiAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHpvb21BZGp1c3RlZFBpeGVs
VmFsdWUobWluaW11bVZhbHVlRm9yTGVuZ3RoKHN0eWxlLnRyYW5zZm9ybU9yaWdpblkoKSwgYm94
LmhlaWdodCgpKSwgc3R5bGUpKTsKICAgICAgICAgICAgICAgICBpZiAoc3R5bGUudHJhbnNmb3Jt
T3JpZ2luWigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCBjNDg0
ZDE0NWJlNzUzYTBmYzQ0OWNlNzVjMGU1MmE2ZWQzYjE2NjAzLi4xODQ1Zjc4ZDA4NjNhYmNjMDNm
ZTExNDAwZDU3ZjYxOTRlOWVjNjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcApAQCAtNzY2LDkgKzc2Niw4IEBAIExheW91dFBvaW50IFJlbmRlckJveDo6Y29udGVudEJv
eExvY2F0aW9uKCkgY29uc3QKICAgICByZXR1cm4geyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVm
dCgpICsgc2Nyb2xsYmFyU3BhY2UsIGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpIH07CiB9CiAK
LUxheW91dFJlY3QgUmVuZGVyQm94OjpyZWZlcmVuY2VCb3goQ1NTQm94VHlwZSBib3hUeXBlKSBj
b25zdAorc3RkOjpvcHRpb25hbDxMYXlvdXRSZWN0PiBSZW5kZXJCb3g6OnJlZmVyZW5jZUJveExh
eW91dFJlY3QoQ1NTQm94VHlwZSBib3hUeXBlKSBjb25zdAogewotICAgIExheW91dFJlY3QgcmVm
ZXJlbmNlQm94OwogICAgIHN3aXRjaCAoYm94VHlwZSkgewogICAgIGNhc2UgQ1NTQm94VHlwZTo6
Q29udGVudEJveDoKICAgICBjYXNlIENTU0JveFR5cGU6OkZpbGxCb3g6CkBAIC03ODQsNyArNzgz
LDkgQEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6OnJlZmVyZW5jZUJveChDU1NCb3hUeXBlIGJveFR5
cGUpIGNvbnN0CiAgICAgY2FzZSBDU1NCb3hUeXBlOjpCb3hNaXNzaW5nOgogICAgICAgICByZXR1
cm4gYm9yZGVyQm94UmVjdCgpOwogICAgIH0KLSAgICByZXR1cm4geyB9OworCisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAogSW50UmVjdCBS
ZW5kZXJCb3g6OmFic29sdXRlQ29udGVudEJveCgpIGNvbnN0CkBAIC0xNDYwLDggKzE0NjEsOCBA
QCBib29sIFJlbmRlckJveDo6aGl0VGVzdENsaXBQYXRoKGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYg
aGl0VGVzdExvY2F0aW9uLCBjb25zdCBMYQogICAgIHN3aXRjaCAoc3R5bGUoKS5jbGlwUGF0aCgp
LT50eXBlKCkpIHsKICAgICBjYXNlIFBhdGhPcGVyYXRpb246OlNoYXBlOiB7CiAgICAgICAgIGF1
dG8mIGNsaXBQYXRoID0gZG93bmNhc3Q8U2hhcGVQYXRoT3BlcmF0aW9uPigqc3R5bGUoKS5jbGlw
UGF0aCgpKTsKLSAgICAgICAgYXV0byByZWZlcmVuY2VCb3hSZWN0ID0gcmVmZXJlbmNlQm94KGNs
aXBQYXRoLnJlZmVyZW5jZUJveCgpKTsKLSAgICAgICAgaWYgKCFjbGlwUGF0aC5wYXRoRm9yUmVm
ZXJlbmNlUmVjdChyZWZlcmVuY2VCb3hSZWN0KS5jb250YWlucyhoaXRUZXN0TG9jYXRpb25Jbkxv
Y2FsQ29vcmRpbmF0ZXMsIGNsaXBQYXRoLndpbmRSdWxlKCkpKQorICAgICAgICBhdXRvIHJlZmVy
ZW5jZVJlY3QgPSByZWZlcmVuY2VCb3hMYXlvdXRSZWN0KGNsaXBQYXRoLnJlZmVyZW5jZUJveCgp
KS52YWx1ZSgpOworICAgICAgICBpZiAoIWNsaXBQYXRoLnBhdGhGb3JSZWZlcmVuY2VSZWN0KHJl
ZmVyZW5jZVJlY3QpLmNvbnRhaW5zKGhpdFRlc3RMb2NhdGlvbkluTG9jYWxDb29yZGluYXRlcywg
Y2xpcFBhdGgud2luZFJ1bGUoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAppbmRleCBlZDc3
NzcwZTdlNDI5ZDViNzYyYzBlYmMyOTFiYWYwMmY0NzAyMzI1Li4yOGExZGZlNTVjNzA1M2I2Nzlj
OTEwNzUxMjVkODE5ZWY1MTFlMDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5o
CkBAIC0xNjcsOCArMTY3LDggQEAgcHVibGljOgogICAgIExheW91dFJlY3QgY29udGVudEJveFJl
Y3QoKSBjb25zdDsKICAgICBMYXlvdXRQb2ludCBjb250ZW50Qm94TG9jYXRpb24oKSBjb25zdDsK
IAotICAgIC8vIC5odHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXRyYW5zZm9ybXMtMS8jcmVm
ZXJlbmNlLWJveAotICAgIExheW91dFJlY3QgcmVmZXJlbmNlQm94KENTU0JveFR5cGUpIGNvbnN0
OworICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtdHJhbnNmb3Jtcy0xLyNyZWZlcmVu
Y2UtYm94CisgICAgc3RkOjpvcHRpb25hbDxMYXlvdXRSZWN0PiByZWZlcmVuY2VCb3hMYXlvdXRS
ZWN0KENTU0JveFR5cGUpIGNvbnN0IGZpbmFsOwogCiAgICAgLy8gVGhlIGNvbnRlbnQgYm94IGlu
IGFic29sdXRlIGNvb3Jkcy4gSWdub3JlcyB0cmFuc2Zvcm1zLgogICAgIEludFJlY3QgYWJzb2x1
dGVDb250ZW50Qm94KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxl
bWVudC5jcHAKaW5kZXggYmYwOTQ2OTJkMWYxMDIzNWM5ODgxZTMwZjAyNmM1Mzk3ZTNjYjE3Ni4u
NjZlMzQ0MDNlMjNiMmU2NDM5NzliMWQ0MmUzMTdmNmU2ZThhMTlmNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcApAQCAtNzgsNiArNzgsNyBAQAogI2luY2x1
ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50VHlwZUhlbHBlcnMuaCIKICNp
bmNsdWRlICJTVkdJbWFnZS5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aENvbnRleHQuaCIKICNpbmNs
dWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRl
ICJTaGFkb3dSb290LmgiCkBAIC0yMzg5LDQgKzIzOTAsMzggQEAgT3ZlcmZsb3cgUmVuZGVyRWxl
bWVudDo6ZWZmZWN0aXZlT3ZlcmZsb3dZKCkgY29uc3QKICAgICByZXR1cm4gb3ZlcmZsb3dZOwog
fQogCitzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gUmVuZGVyRWxlbWVudDo6cmVmZXJlbmNlQm94
RmxvYXRSZWN0KENTU0JveFR5cGUgYm94VHlwZSkgY29uc3QKK3sKKyAgICAvLyBDU1MgYm94IG1v
ZGVsIGNvZGUgaXMgaW1wbGVtZW50ZWQgaW4gUmVuZGVyQm94OjpyZWZlcmVuY2VCb3hMYXlvdXRS
ZWN0KCkuCisKKyAgICAvLyBGb3IgdGhlIGxlZ2FjeSBTVkcgZW5naW5lLCBSZW5kZXJFbGVtZW50
IGlzIHRoZSBvbmx5IGNsYXNzIHRoYXQncworICAgIC8vIHByZXNlbnQgaW4gdGhlIGFuY2VzdG9y
IGNoYWluIG9mIGFsbCBTVkcgcmVuZGVyZXJzLiBJbiBMQlNFIHRoZQorICAgIC8vIGNvbW1vbiBj
bGFzcyBpcyBSZW5kZXJMYXllck1vZGVsT2JqZWN0LiBPbmNlIHRoZSBsZWdhY3kgU1ZHIGVuZ2lu
ZQorICAgIC8vIGlzIHJlbW92ZWQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgbW92ZWQgdG8gUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdC4KKyAgICAvLyBBcyB0aGlzIG1ldGhvZCBpcyB1c2VkIGJ5IGJv
dGggU1ZHIGVuZ2luZXMsIHdlIG5lZWQgdG8gcGxhY2UgaXQKKyAgICAvLyBoZXJlIGluIFJlbmRl
ckVsZW1lbnQsIGFzIHRlbXBvcmFyeSBzb2x1dGlvbi4KKyAgICBpZiAoIWlzPFNWR0VsZW1lbnQ+
KGVsZW1lbnQoKSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzd2l0Y2gg
KGJveFR5cGUpIHsKKyAgICBjYXNlIENTU0JveFR5cGU6OkJveE1pc3Npbmc6CisgICAgY2FzZSBD
U1NCb3hUeXBlOjpDb250ZW50Qm94OgorICAgIGNhc2UgQ1NTQm94VHlwZTo6UGFkZGluZ0JveDoK
KyAgICBjYXNlIENTU0JveFR5cGU6OkZpbGxCb3g6CisgICAgICAgIHJldHVybiBvYmplY3RCb3Vu
ZGluZ0JveCgpOworICAgIGNhc2UgQ1NTQm94VHlwZTo6Qm9yZGVyQm94OgorICAgIGNhc2UgQ1NT
Qm94VHlwZTo6TWFyZ2luQm94OgorICAgIGNhc2UgQ1NTQm94VHlwZTo6U3Ryb2tlQm94OgorICAg
ICAgICByZXR1cm4gc3Ryb2tlQm91bmRpbmdCb3goKTsKKyAgICBjYXNlIENTU0JveFR5cGU6OlZp
ZXdCb3g6CisgICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW06IENhY2hlIHRoZSBpbW11
dGFibGUgU1ZHTGVuZ3RoQ29udGV4dCBwZXIgU1ZHRWxlbWVudCwgdG8gYXZvaWQgdGhlIHJlcGVh
dGVkIFJlbmRlclNWR1Jvb3Qgc2l6ZSBxdWVyaWVzIGluIGRldGVybWluZVZpZXdwb3J0KCkuCisg
ICAgICAgIEZsb2F0U2l6ZSB2aWV3cG9ydFNpemU7CisgICAgICAgIFNWR0xlbmd0aENvbnRleHQo
ZG93bmNhc3Q8U1ZHRWxlbWVudD4oZWxlbWVudCgpKSkuZGV0ZXJtaW5lVmlld3BvcnQodmlld3Bv
cnRTaXplKTsKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCB7IHsgfSwgdmlld3BvcnRTaXplIH07
CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgKaW5k
ZXggNTFjNTUyY2JkOWU3ZmQyYjdjYmU5ZDEyZGNmYTNmMTMxZmY3ZGYxYi4uYmU1NGU4ZWZlZTlh
MzQ1NjJmNTczMjIxZmJkNzJkMDUwYzIxNDVlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRWxlbWVudC5oCkBAIC0yNTgsNiArMjU4LDM3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgYW5pbWF0aW9uRmluaXNoZWQoY29uc3QgU3RyaW5nJiAvKiBuYW1lICovKSB7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgdHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5RGlkQ2hhbmdlKCkgeyB9CiAK
KyAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXRyYW5zZm9ybXMtMS8jdHJhbnNmb3Jt
LWJveAorICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0PiB0cmFuc2Zvcm1SZWZlcmVuY2VCb3hG
bG9hdFJlY3QoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdCB7IHJldHVybiByZWZlcmVu
Y2VCb3hGbG9hdFJlY3QodHJhbnNmb3JtQm94VG9DU1NCb3hUeXBlKHN0eWxlLnRyYW5zZm9ybUJv
eCgpKSk7IH0KKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gdHJhbnNmb3JtUmVmZXJlbmNl
Qm94RmxvYXRSZWN0KCkgY29uc3QgeyByZXR1cm4gdHJhbnNmb3JtUmVmZXJlbmNlQm94RmxvYXRS
ZWN0KHN0eWxlKCkpOyB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPExheW91dFJlY3Q+IHRyYW5zZm9y
bVJlZmVyZW5jZUJveExheW91dFJlY3QoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdCB7
IHJldHVybiByZWZlcmVuY2VCb3hMYXlvdXRSZWN0KHRyYW5zZm9ybUJveFRvQ1NTQm94VHlwZShz
dHlsZS50cmFuc2Zvcm1Cb3goKSkpOyB9CisgICAgc3RkOjpvcHRpb25hbDxMYXlvdXRSZWN0PiB0
cmFuc2Zvcm1SZWZlcmVuY2VCb3hMYXlvdXRSZWN0KCkgY29uc3QgeyByZXR1cm4gdHJhbnNmb3Jt
UmVmZXJlbmNlQm94TGF5b3V0UmVjdChzdHlsZSgpKTsgfQorCisgICAgRmxvYXRSZWN0IHRyYW5z
Zm9ybVJlZmVyZW5jZUJveFJlY3QoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKGF1dG8gcmVmZXJlbmNlQm94UmVjdCA9IHRyYW5zZm9ybVJlZmVyZW5j
ZUJveExheW91dFJlY3Qoc3R5bGUpKQorICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZUJveFJl
Y3QudmFsdWUoKTsKKyAgICAgICAgaWYgKGF1dG8gcmVmZXJlbmNlQm94UmVjdCA9IHRyYW5zZm9y
bVJlZmVyZW5jZUJveEZsb2F0UmVjdChzdHlsZSkpCisgICAgICAgICAgICByZXR1cm4gcmVmZXJl
bmNlQm94UmVjdC52YWx1ZSgpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIEZs
b2F0UmVjdCB0cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCkgY29uc3QgeyByZXR1cm4gdHJhbnNm
b3JtUmVmZXJlbmNlQm94UmVjdChzdHlsZSgpKTsgfQorCisgICAgLy8gaHR0cHM6Ly93d3cudzMu
b3JnL1RSL2Nzcy10cmFuc2Zvcm1zLTEvI3JlZmVyZW5jZS1ib3gKKyAgICB2aXJ0dWFsIHN0ZDo6
b3B0aW9uYWw8TGF5b3V0UmVjdD4gcmVmZXJlbmNlQm94TGF5b3V0UmVjdChDU1NCb3hUeXBlKSBj
b25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KKyAgICB2aXJ0dWFsIHN0ZDo6b3B0aW9uYWw8
RmxvYXRSZWN0PiByZWZlcmVuY2VCb3hGbG9hdFJlY3QoQ1NTQm94VHlwZSkgY29uc3Q7CisKKyAg
ICBGbG9hdFJlY3QgcmVmZXJlbmNlQm94UmVjdChDU1NCb3hUeXBlIGJveFR5cGUpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAoYXV0byByZWZlcmVuY2VCb3hSZWN0ID0gcmVmZXJlbmNlQm94TGF5
b3V0UmVjdChib3hUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VCb3hSZWN0LnZh
bHVlKCk7CisgICAgICAgIGlmIChhdXRvIHJlZmVyZW5jZUJveFJlY3QgPSByZWZlcmVuY2VCb3hG
bG9hdFJlY3QoYm94VHlwZSkpCisgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlQm94UmVjdC52
YWx1ZSgpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwogICAgIHZpcnR1YWwgdm9pZCBz
dXNwZW5kQW5pbWF0aW9ucyhNb25vdG9uaWNUaW1lID0gTW9ub3RvbmljVGltZSgpKSB7IH0KICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGFuaW1hdGVkU3R5bGUoKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggYmIxZTZhNDkxMWNmMzQ4YTU3
OWQyZDRiZTBlYWFjODEzZDQ3OWIzZC4uOWM4ODBhMjQ3MWRiZDBjZmU5ODNjMzA1NjBiNTI5Nzg5
ZTNlZWI5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0x
Mjk2LDIxICsxMjk2LDM1IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmRpcnR5QW5jZXN0b3JDaGFpbkhh
c0JsZW5kaW5nRGVzY2VuZGFudHMoKQogfQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgTGF5b3V0
UmVjdCBjb21wdXRlUmVmZXJlbmNlUmVjdEZyb21Cb3goY29uc3QgUmVuZGVyQm94JiBib3gsIENT
U0JveFR5cGUgYm94VHlwZSwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3QpCitGbG9h
dFJlY3QgUmVuZGVyTGF5ZXI6OnJlZmVyZW5jZUJveFJlY3QoQ1NTQm94VHlwZSBib3hUeXBlLCBj
b25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdCwgY29uc3QgTGF5b3V0UmVjdCYgcm9vdFJl
bGF0aXZlQm91bmRzKSBjb25zdAogewotICAgIGF1dG8gcmVmZXJlbmNlQm94ID0gYm94LnJlZmVy
ZW5jZUJveChib3hUeXBlKTsKLSAgICByZWZlcmVuY2VCb3gubW92ZShvZmZzZXRGcm9tUm9vdCk7
Ci0gICAgcmV0dXJuIHJlZmVyZW5jZUJveDsKLX0KKyAgICBpZiAoYXV0byByZWZlcmVuY2VCb3hS
ZWN0ID0gcmVuZGVyZXIoKS5yZWZlcmVuY2VCb3hGbG9hdFJlY3QoYm94VHlwZSkpCisgICAgICAg
IHJldHVybiByZWZlcmVuY2VCb3hSZWN0LnZhbHVlKCk7CiAKLXN0YXRpYyBpbmxpbmUgTGF5b3V0
UmVjdCBjb21wdXRlUmVmZXJlbmNlQm94KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIENT
U0JveFR5cGUgYm94VHlwZSwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3QsIGNvbnN0
IExheW91dFJlY3QmIHJvb3RSZWxhdGl2ZUJvdW5kcykKLXsKICAgICAvLyBGSVhNRTogU3VwcG9y
dCBkaWZmZXJlbnQgcmVmZXJlbmNlIGJveGVzIGZvciBpbmxpbmUgY29udGVudC4KICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5MDQ3Ci0gICAgaWYgKCFy
ZW5kZXJlci5pc0JveCgpKQorICAgIGlmICghcmVuZGVyZXIoKS5pc0JveCgpKQogICAgICAgICBy
ZXR1cm4gcm9vdFJlbGF0aXZlQm91bmRzOwotICAgIAotICAgIHJldHVybiBjb21wdXRlUmVmZXJl
bmNlUmVjdEZyb21Cb3goZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlciksIGJveFR5cGUsIG9m
ZnNldEZyb21Sb290KTsKKworICAgIGF1dG8gcmVmZXJlbmNlQm94UmVjdCA9IHJlbmRlcmVyKCku
cmVmZXJlbmNlQm94TGF5b3V0UmVjdChib3hUeXBlKS52YWx1ZSgpOworICAgIHJlZmVyZW5jZUJv
eFJlY3QubW92ZShvZmZzZXRGcm9tUm9vdCk7CisgICAgcmV0dXJuIHJlZmVyZW5jZUJveFJlY3Q7
Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJMYXllcjo6cmVmZXJlbmNlQm94UmVjdEZvclBhaW50aW5n
KENTU0JveFR5cGUgYm94VHlwZSwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3QsIGNv
bnN0IExheW91dFJlY3QmIHJvb3RSZWxhdGl2ZUJvdW5kcykgY29uc3QKK3sKKyAgICBpZiAoYXV0
byByZWZlcmVuY2VCb3hSZWN0ID0gcmVuZGVyZXIoKS5yZWZlcmVuY2VCb3hGbG9hdFJlY3QoYm94
VHlwZSkpCisgICAgICAgIHJldHVybiByZWZlcmVuY2VCb3hSZWN0LnZhbHVlKCk7CisgICAgcmV0
dXJuIHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdChyZWZlcmVuY2VCb3hSZWN0KGJv
eFR5cGUsIG9mZnNldEZyb21Sb290LCByb290UmVsYXRpdmVCb3VuZHMpKSwgcmVuZGVyZXIoKS5k
b2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOworfQorCitGbG9hdFJlY3QgUmVuZGVyTGF5
ZXI6OnRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3RGb3JQYWludGluZyhjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8gcmVmZXJlbmNlQm94UmVjdCA9IHJlbmRl
cmVyKCkudHJhbnNmb3JtUmVmZXJlbmNlQm94RmxvYXRSZWN0KHN0eWxlKSkKKyAgICAgICAgcmV0
dXJuIHJlZmVyZW5jZUJveFJlY3QudmFsdWUoKTsKKyAgICBpZiAoYXV0byByZWZlcmVuY2VCb3hS
ZWN0ID0gcmVuZGVyZXIoKS50cmFuc2Zvcm1SZWZlcmVuY2VCb3hMYXlvdXRSZWN0KHN0eWxlKSkK
KyAgICAgICAgcmV0dXJuIHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMocmVmZXJlbmNlQm94UmVjdC52
YWx1ZSgpLCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAg
cmV0dXJuIHsgfTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlVHJhbnNmb3JtKCkKQEAg
LTEzMzEsMTMgKzEzNDUsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVUcmFuc2Zvcm0oKQog
ICAgIAogICAgIGlmIChoYXNUcmFuc2Zvcm0pIHsKICAgICAgICAgbV90cmFuc2Zvcm0tPm1ha2VJ
ZGVudGl0eSgpOwotCi0gICAgICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gcmVmZXJlbmNl
IGJveCBjb21wdXRhdGlvbiBmb3IgUmVuZGVyU1ZHTW9kZWxPYmplY3QgZGVyaXZlZCByZW5kZXJl
cnMKLSAgICAgICAgRmxvYXRSZWN0IHJlZmVyZW5jZUJveDsKLSAgICAgICAgaWYgKGlzPFJlbmRl
ckJveD4ocmVuZGVyZXIoKSkpCi0gICAgICAgICAgICByZWZlcmVuY2VCb3ggPSBzbmFwUmVjdFRv
RGV2aWNlUGl4ZWxzKGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkucmVmZXJlbmNlQm94
KHRyYW5zZm9ybUJveFRvQ1NTQm94VHlwZShyZW5kZXJlcigpLnN0eWxlKCkudHJhbnNmb3JtQm94
KCkpKSwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwotCi0gICAg
ICAgIHJlbmRlcmVyKCkuYXBwbHlUcmFuc2Zvcm0oKm1fdHJhbnNmb3JtLCByZWZlcmVuY2VCb3gp
OworICAgICAgICByZW5kZXJlcigpLmFwcGx5VHJhbnNmb3JtKCptX3RyYW5zZm9ybSwgdHJhbnNm
b3JtUmVmZXJlbmNlQm94UmVjdEZvclBhaW50aW5nKHJlbmRlcmVyKCkuc3R5bGUoKSkpOwogICAg
ICAgICBtYWtlTWF0cml4UmVuZGVyYWJsZSgqbV90cmFuc2Zvcm0sIGNhblJlbmRlcjNEVHJhbnNm
b3JtcygpKTsKICAgICB9CiAKQEAgLTEzNjYsMTAgKzEzNzQsOSBAQCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBSZW5kZXJMYXllcjo6Y3VycmVudFRyYW5zZm9ybShPcHRpb25TZXQ8UmVuZGVyU3R5bGU6
OlRyYW5zZgogICAgIGF1dG8gc3R5bGVhYmxlID0gU3R5bGVhYmxlOjpmcm9tUmVuZGVyZXIocmVu
ZGVyQm94KTsKICAgICBpZiAoKHN0eWxlYWJsZSAmJiBzdHlsZWFibGUtPmlzUnVubmluZ0FjY2Vs
ZXJhdGVkVHJhbnNmb3JtQW5pbWF0aW9uKCkpIHx8ICFvcHRpb25zLmNvbnRhaW5zKFJlbmRlclN0
eWxlOjpUcmFuc2Zvcm1PcGVyYXRpb25PcHRpb246OlRyYW5zZm9ybU9yaWdpbikpIHsKICAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBhbmltYXRlZFN0eWxlID0gcmVuZGVyQm94
LmFuaW1hdGVkU3R5bGUoKTsKLSAgICAgICAgYXV0byBwaXhlbFNuYXBwZWRCb3JkZXJSZWN0ID0g
c25hcFJlY3RUb0RldmljZVBpeGVscyhyZW5kZXJCb3gucmVmZXJlbmNlQm94KHRyYW5zZm9ybUJv
eFRvQ1NTQm94VHlwZShhbmltYXRlZFN0eWxlLT50cmFuc2Zvcm1Cb3goKSkpLCByZW5kZXJCb3gu
ZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKIAogICAgICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCB0cmFuc2Zvcm07Ci0gICAgICAgIGFuaW1hdGVkU3R5bGUtPmFwcGx5VHJhbnNmb3Jt
KHRyYW5zZm9ybSwgcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCwgb3B0aW9ucyk7CisgICAgICAgIGFu
aW1hdGVkU3R5bGUtPmFwcGx5VHJhbnNmb3JtKHRyYW5zZm9ybSwgdHJhbnNmb3JtUmVmZXJlbmNl
Qm94UmVjdEZvclBhaW50aW5nKCphbmltYXRlZFN0eWxlKSwgb3B0aW9ucyk7CiAKICAgICAgICAg
bWFrZU1hdHJpeFJlbmRlcmFibGUodHJhbnNmb3JtLCBjYW5SZW5kZXIzRFRyYW5zZm9ybXMoKSk7
CiAgICAgICAgIHJldHVybiB0cmFuc2Zvcm07CkBAIC0xODAxLDExICsxODA4LDExIEBAIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IFJlbmRlckxheWVyOjpwZXJzcGVjdGl2ZVRyYW5zZm9ybShjb25zdCBM
YXlvdXRSZWN0JiBsYXllclJlCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBhdXRvIGRldmlj
ZVNjYWxlRmFjdG9yID0gcmVuZGVyQm94LmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKTsK
LSAgICBhdXRvIHJlZmVyZW5jZUJveCA9IHJlbmRlckJveC5yZWZlcmVuY2VCb3godHJhbnNmb3Jt
Qm94VG9DU1NCb3hUeXBlKHN0eWxlLnRyYW5zZm9ybUJveCgpKSk7Ci0gICAgYXV0byBwaXhlbFNu
YXBwZWRSZWZlcmVuY2VCb3ggPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKHJlZmVyZW5jZUJveCwg
ZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIGF1dG8gcmVmZXJlbmNlQm94UmVjdEZvclBhaW50aW5n
ID0gdHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdEZvclBhaW50aW5nKHN0eWxlKTsKKyAgICAvLyBG
SVhNRTogW0xCU0VdIEF2b2lkIHBpeGVsIHNuYXBwaW5nIGluIFNWRyBzdWJ0cmVlLgogICAgIGF1
dG8gc25hcHBlZExheWVyUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMobGF5ZXJSZWN0LCBk
ZXZpY2VTY2FsZUZhY3Rvcik7CiAKLSAgICBhdXRvIHBlcnNwZWN0aXZlT3JpZ2luID0gcGl4ZWxT
bmFwcGVkUmVmZXJlbmNlQm94LmxvY2F0aW9uKCkgLSB0b0Zsb2F0U2l6ZShzbmFwcGVkTGF5ZXJS
ZWN0LmxvY2F0aW9uKCkpICsgZmxvYXRQb2ludEZvckxlbmd0aFBvaW50KHN0eWxlLnBlcnNwZWN0
aXZlT3JpZ2luKCksIHBpeGVsU25hcHBlZFJlZmVyZW5jZUJveC5zaXplKCkpOworICAgIGF1dG8g
cGVyc3BlY3RpdmVPcmlnaW4gPSByZWZlcmVuY2VCb3hSZWN0Rm9yUGFpbnRpbmcubG9jYXRpb24o
KSAtIHRvRmxvYXRTaXplKHNuYXBwZWRMYXllclJlY3QubG9jYXRpb24oKSkgKyBmbG9hdFBvaW50
Rm9yTGVuZ3RoUG9pbnQoc3R5bGUucGVyc3BlY3RpdmVPcmlnaW4oKSwgcmVmZXJlbmNlQm94UmVj
dEZvclBhaW50aW5nLnNpemUoKSk7CiAKICAgICAvLyBBIHBlcnNwZWN0aXZlIG9yaWdpbiBvZiAw
LDAgbWFrZXMgdGhlIHZhbmlzaGluZyBwb2ludCBpbiB0aGUgY2VudGVyIG9mIHRoZSBlbGVtZW50
LgogICAgIC8vIFdlIHdhbnQgaXQgdG8gYmUgaW4gdGhlIHRvcC1sZWZ0LCBzbyBzdWJ0cmFjdCBo
YWxmIHRoZSBoZWlnaHQgYW5kIHdpZHRoLgpAQCAtMTgyMyw2ICsxODMwLDcgQEAgRmxvYXRQb2lu
dCBSZW5kZXJMYXllcjo6cGVyc3BlY3RpdmVPcmlnaW4oKSBjb25zdAogewogICAgIGlmICghcmVu
ZGVyZXIoKS5oYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKSkKICAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICAvLyBGSVhNRTogVGhpcyB1c2VzIHRoZSB3cm9uZywgdHJhbnNmb3JtLWJveCB1bmF3
YXJlLCBnZW9tZXRyeS4KICAgICByZXR1cm4gZmxvYXRQb2ludEZvckxlbmd0aFBvaW50KHJlbmRl
cmVyKCkuc3R5bGUoKS5wZXJzcGVjdGl2ZU9yaWdpbigpLCByZW5kZXJlckJvcmRlckJveFJlY3Qo
KS5zaXplKCkpOwogfQogCkBAIC0zMjA2LDMyICszMjE0LDE3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6
OnNldHVwRm9udFN1YnBpeGVsUXVhbnRpemF0aW9uKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Ym9vbCYKIHN0ZDo6cGFpcjxQYXRoLCBXaW5kUnVsZT4gUmVuZGVyTGF5ZXI6OmNvbXB1dGVDbGlw
UGF0aChjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdCwgY29uc3QgTGF5b3V0UmVjdCYg
cm9vdFJlbGF0aXZlQm91bmRzRm9yTm9uQm94ZXMpIGNvbnN0CiB7CiAgICAgY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlID0gcmVuZGVyZXIoKS5zdHlsZSgpOwotICAgIGZsb2F0IGRldmljZVNjYWxl
RmFjdG9yID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7CiAKICAg
ICBpZiAoaXM8U2hhcGVQYXRoT3BlcmF0aW9uPigqc3R5bGUuY2xpcFBhdGgoKSkpIHsKICAgICAg
ICAgYXV0byYgY2xpcFBhdGggPSBkb3duY2FzdDxTaGFwZVBhdGhPcGVyYXRpb24+KCpzdHlsZS5j
bGlwUGF0aCgpKTsKLQotICAgICAgICBMYXlvdXRSZWN0IHJlZmVyZW5jZUJveDsKLSAgICAgICAg
aWYgKGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpIHsKLSAgICAgICAgICAgIHJlZmVyZW5jZUJv
eCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkucmVmZXJlbmNlQm94KGNsaXBQYXRo
LnJlZmVyZW5jZUJveCgpKTsKLSAgICAgICAgICAgIHJlZmVyZW5jZUJveC5tb3ZlKG9mZnNldEZy
b21Sb290KTsKLSNpZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKLSAgICAgICAgfSBl
bHNlIGlmIChpczxSZW5kZXJTVkdNb2RlbE9iamVjdD4ocmVuZGVyZXIoKSkpIHsKLSAgICAgICAg
ICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW0gY2xpcHBpbmcgc3VwcG9ydCBmb3IgUmVuZGVy
U1ZHTW9kZWxPYmplY3QgZGVyaXZlZCByZW5kZXJlcnMKLSNlbmRpZgotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgLy8gUmVmZXJlbmNlIGJveCBmb3IgaW5saW5lcyBpcyBub3Qgd2VsbCBk
ZWZpbmVkOiBodHRwczovL2dpdGh1Yi5jb20vdzNjL2Nzc3dnLWRyYWZ0cy9pc3N1ZXMvNjM4Mwot
ICAgICAgICAgICAgcmVmZXJlbmNlQm94ID0gcm9vdFJlbGF0aXZlQm91bmRzRm9yTm9uQm94ZXM7
Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvIHNuYXBwZWRSZWZlcmVuY2VCb3ggPSBzbmFwUmVj
dFRvRGV2aWNlUGl4ZWxzKHJlZmVyZW5jZUJveCwgZGV2aWNlU2NhbGVGYWN0b3IpOwotICAgICAg
ICByZXR1cm4geyBjbGlwUGF0aC5wYXRoRm9yUmVmZXJlbmNlUmVjdChzbmFwcGVkUmVmZXJlbmNl
Qm94KSwgY2xpcFBhdGgud2luZFJ1bGUoKSB9OworICAgICAgICBhdXRvIHJlZmVyZW5jZUJveFJl
Y3QgPSByZWZlcmVuY2VCb3hSZWN0Rm9yUGFpbnRpbmcoY2xpcFBhdGgucmVmZXJlbmNlQm94KCks
IG9mZnNldEZyb21Sb290LCByb290UmVsYXRpdmVCb3VuZHNGb3JOb25Cb3hlcyk7CisgICAgICAg
IHJldHVybiB7IGNsaXBQYXRoLnBhdGhGb3JSZWZlcmVuY2VSZWN0KHJlZmVyZW5jZUJveFJlY3Qp
LCBjbGlwUGF0aC53aW5kUnVsZSgpIH07CiAgICAgfQogCiAgICAgaWYgKGlzPEJveFBhdGhPcGVy
YXRpb24+KCpzdHlsZS5jbGlwUGF0aCgpKSAmJiBpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKSB7
CiAgICAgICAgIGF1dG8mIGNsaXBQYXRoID0gZG93bmNhc3Q8Qm94UGF0aE9wZXJhdGlvbj4oKnN0
eWxlLmNsaXBQYXRoKCkpOwogCi0gICAgICAgIGF1dG8gc2hhcGVSZWN0ID0gY29tcHV0ZVJvdW5k
ZWRSZWN0Rm9yQm94U2hhcGUoY2xpcFBhdGgucmVmZXJlbmNlQm94KCksIGRvd25jYXN0PFJlbmRl
ckJveD4ocmVuZGVyZXIoKSkpLnBpeGVsU25hcHBlZFJvdW5kZWRSZWN0Rm9yUGFpbnRpbmcoZGV2
aWNlU2NhbGVGYWN0b3IpOworICAgICAgICBhdXRvIHNoYXBlUmVjdCA9IGNvbXB1dGVSb3VuZGVk
UmVjdEZvckJveFNoYXBlKGNsaXBQYXRoLnJlZmVyZW5jZUJveCgpLCBkb3duY2FzdDxSZW5kZXJC
b3g+KHJlbmRlcmVyKCkpKS5waXhlbFNuYXBwZWRSb3VuZGVkUmVjdEZvclBhaW50aW5nKHJlbmRl
cmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKICAgICAgICAgc2hhcGVSZWN0
Lm1vdmUob2Zmc2V0RnJvbVJvb3QpOwogCiAgICAgICAgIHJldHVybiB7IGNsaXBQYXRoLnBhdGhG
b3JSZWZlcmVuY2VSZWN0KHNoYXBlUmVjdCksIFdpbmRSdWxlOjpOb25aZXJvIH07CkBAIC0zMjY2
LDE3ICszMjU5LDE3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNldHVwQ2xpcFBhdGgoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHRTdGF0ZVNhCiAgICAgICAgIGlmIChhdXRv
KiBjbGlwcGVyUmVuZGVyZXIgPSByZW5kZXJlcigpLmVuc3VyZVJlZmVyZW5jZWRTVkdSZXNvdXJj
ZXMoKS5yZWZlcmVuY2VkQ2xpcHBlclJlbmRlcmVyKHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgcmVm
ZXJlbmNlQ2xpcFBhdGhPcGVyYXRpb24pKSB7CiAgICAgICAgICAgICAvLyBVc2UgdGhlIGJvcmRl
ciBib3ggYXMgdGhlIHJlZmVyZW5jZSBib3gsIGV2ZW4gdGhvdWdoIHRoaXMgaXMgbm90IGNsZWFy
bHkgc3BlY2lmaWVkOiBodHRwczovL2dpdGh1Yi5jb20vdzNjL2Nzc3dnLWRyYWZ0cy9pc3N1ZXMv
NTc4Ni4KICAgICAgICAgICAgIC8vIGNsaXBwZWRDb250ZW50Qm91bmRzIGlzIHVzZWQgYXMgdGhl
IHJlZmVyZW5jZSBib3ggZm9yIGlubGluZXMsIHdoaWNoIGlzIGFsc28gcG9vcmx5IHNwZWNpZmll
ZDogaHR0cHM6Ly9naXRodWIuY29tL3czYy9jc3N3Zy1kcmFmdHMvaXNzdWVzLzYzODMuCi0gICAg
ICAgICAgICBhdXRvIHJlZmVyZW5jZUJveCA9IGNvbXB1dGVSZWZlcmVuY2VCb3gocmVuZGVyZXIo
KSwgQ1NTQm94VHlwZTo6Qm9yZGVyQm94LCBvZmZzZXRGcm9tUm9vdCwgY2xpcHBlZENvbnRlbnRC
b3VuZHMpOwotICAgICAgICAgICAgYXV0byBzbmFwcGVkUmVmZXJlbmNlQm94ID0gc25hcFJlY3RU
b0RldmljZVBpeGVscyhyZWZlcmVuY2VCb3gsIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VT
Y2FsZUZhY3RvcigpKTsKLSAgICAgICAgICAgIGF1dG8gb2Zmc2V0ID0gc25hcHBlZFJlZmVyZW5j
ZUJveC5sb2NhdGlvbigpOworICAgICAgICAgICAgYXV0byBjbGlwUGF0aFJlZmVyZW5jZUJveCA9
IHJlZmVyZW5jZUJveFJlY3QoQ1NTQm94VHlwZTo6Qm9yZGVyQm94LCBvZmZzZXRGcm9tUm9vdCwg
Y2xpcHBlZENvbnRlbnRCb3VuZHMpOworICAgICAgICAgICAgYXV0byBjbGlwUGF0aFJlZmVyZW5j
ZUJveEZvclBhaW50aW5nID0gcmVmZXJlbmNlQm94UmVjdEZvclBhaW50aW5nKENTU0JveFR5cGU6
OkJvcmRlckJveCwgb2Zmc2V0RnJvbVJvb3QsIGNsaXBwZWRDb250ZW50Qm91bmRzKTsKKyAgICAg
ICAgICAgIGF1dG8gb2Zmc2V0ID0gY2xpcFBhdGhSZWZlcmVuY2VCb3hGb3JQYWludGluZy5sb2Nh
dGlvbigpOwogCisgICAgICAgICAgICAvLyBGSVhNRTogW0xCU0VdIEF2b2lkIHBpeGVsIHNuYXBw
aW5nIGluIFNWRyBzdWJ0cmVlLgogICAgICAgICAgICAgYXV0byBzbmFwcGVkQ2xpcHBpbmdCb3Vu
ZHMgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGNsaXBwZWRDb250ZW50Qm91bmRzLCByZW5kZXJl
cigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAgICAgICAgICAgICBzbmFwcGVk
Q2xpcHBpbmdCb3VuZHMubW92ZUJ5KC1vZmZzZXQpOwogCiAgICAgICAgICAgICBzdGF0ZVNhdmVy
LnNhdmUoKTsKICAgICAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKG9mZnNldCk7Ci0gICAgICAg
ICAgICBGbG9hdFJlY3QgY2xpcFBhdGhSZWZlcmVuY2VCb3ggeyB7IH0sIHJlZmVyZW5jZUJveC5z
aXplKCkgfTsKLSAgICAgICAgICAgIGNsaXBwZXJSZW5kZXJlci0+YXBwbHlDbGlwcGluZ1RvQ29u
dGV4dChjb250ZXh0LCByZW5kZXJlcigpLCBjbGlwUGF0aFJlZmVyZW5jZUJveCwgc25hcHBlZENs
aXBwaW5nQm91bmRzLCByZW5kZXJlcigpLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAg
ICAgICAgIGNsaXBwZXJSZW5kZXJlci0+YXBwbHlDbGlwcGluZ1RvQ29udGV4dChjb250ZXh0LCBy
ZW5kZXJlcigpLCB7IHsgfSwgY2xpcFBhdGhSZWZlcmVuY2VCb3guc2l6ZSgpIH0sIHNuYXBwZWRD
bGlwcGluZ0JvdW5kcywgcmVuZGVyZXIoKS5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAg
ICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgtb2Zmc2V0KTsKICAgICAgICAgfQogICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKaW5kZXggYzE4Nzg4M2Y1M2MwZDUxODQw
OWViYWI0ZTg5YjFjNWZiOWVkM2MxYi4uYjgyN2RiNGQ0OTdiMTM5ZmVjY2M4ZWZjMmM2NmRhMDll
NDRmMDg2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTY5OCw2
ICs2OTgsMTIgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIEludFJlY3QgYWJzb2x1dGVC
b3VuZGluZ0JveCgpIGNvbnN0OwogICAgIC8vIERldmljZSBwaXhlbCBzbmFwcGVkIGJvdW5kaW5n
IGJveCByZWxhdGl2ZSB0byB0aGUgcm9vdC4gYWJzb2x1dGVCb3VuZGluZ0JveCgpIGNhbGxlcnMg
d2lsbCBiZSBkaXJlY3RlZCB0byB0aGlzLgogICAgIEZsb2F0UmVjdCBhYnNvbHV0ZUJvdW5kaW5n
Qm94Rm9yUGFpbnRpbmcoKSBjb25zdDsKKyAgICAvLyAncmVmZXJlbmNlIGJveCcgYWNjb3JkaW5n
IHRvIENTUyBUcmFuc2Zvcm1zIE1vZHVsZSBMZXZlbCAxLgorICAgIEZsb2F0UmVjdCByZWZlcmVu
Y2VCb3hSZWN0KENTU0JveFR5cGUsIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290LCBj
b25zdCBMYXlvdXRSZWN0JiByb290UmVsYXRpdmVCb3VuZHMpIGNvbnN0OworICAgIC8vIERldmlj
ZSBwaXhlbCBzbmFwcGVkICdyZWZlcmVuY2UgYm94JyBhY2NvcmRpbmcgdG8gQ1NTIFRyYW5zZm9y
bXMgTW9kdWxlIExldmVsIDEuCisgICAgRmxvYXRSZWN0IHJlZmVyZW5jZUJveFJlY3RGb3JQYWlu
dGluZyhDU1NCb3hUeXBlLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdCwgY29uc3Qg
TGF5b3V0UmVjdCYgcm9vdFJlbGF0aXZlQm91bmRzKSBjb25zdDsKKyAgICAvLyBEZXZpY2UgcGl4
ZWwgc25hcHBlZCAndHJhbnNmb3JtIHJlZmVyZW5jZSBib3gnIGFjY29yZGluZyB0byBDU1MgVHJh
bnNmb3JtcyBNb2R1bGUgTGV2ZWwgMS4KKyAgICBGbG9hdFJlY3QgdHJhbnNmb3JtUmVmZXJlbmNl
Qm94UmVjdEZvclBhaW50aW5nKGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3Q7CiAKICAgICAvLyBC
b3VuZHMgdXNlZCBmb3IgbGF5ZXIgb3ZlcmxhcCB0ZXN0aW5nIGluIFJlbmRlckxheWVyQ29tcG9z
aXRvci4KICAgICBMYXlvdXRSZWN0IG92ZXJsYXBCb3VuZHMoKSBjb25zdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCmluZGV4IGNjMzhl
YzcwMzBlNjBjZTE3NTliMTMyODdkZTI1ZjczZDU2NWM4NTguLmUyYmViNGJhOGMxMTU3ZGNiYjEy
ODY0OWEzZWRlNTZlMzg0ZThkMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcApAQCAtMzQzLDI2ICszNDMsNiBAQCBib29sIFNWR1Jl
bmRlclN1cHBvcnQ6OmZpbHRlcnNGb3JjZUNvbnRhaW5lckxheW91dChjb25zdCBSZW5kZXJFbGVt
ZW50JiByZW5kZXJlcgogICAgIHJldHVybiB0cnVlOwogfQogCi1GbG9hdFJlY3QgU1ZHUmVuZGVy
U3VwcG9ydDo6dHJhbnNmb3JtUmVmZXJlbmNlQm94KGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyLCBjb25zdCBTVkdFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUp
Ci17Ci0gICAgc3dpdGNoIChzdHlsZS50cmFuc2Zvcm1Cb3goKSkgewotICAgIGNhc2UgVHJhbnNm
b3JtQm94OjpCb3JkZXJCb3g6Ci0gICAgICAgIC8vIEZvciBTVkcgZWxlbWVudHMgd2l0aG91dCBh
biBhc3NvY2lhdGVkIENTUyBsYXlvdXQgYm94LCB0aGUgdXNlZCB2YWx1ZSBmb3IgYm9yZGVyLWJv
eCBpcyBzdHJva2UtYm94LgotICAgIGNhc2UgVHJhbnNmb3JtQm94OjpTdHJva2VCb3g6Ci0gICAg
ICAgIHJldHVybiByZW5kZXJlci5zdHJva2VCb3VuZGluZ0JveCgpOwotICAgIGNhc2UgVHJhbnNm
b3JtQm94OjpDb250ZW50Qm94OgotICAgICAgICAvLyBGb3IgU1ZHIGVsZW1lbnRzIHdpdGhvdXQg
YW4gYXNzb2NpYXRlZCBDU1MgbGF5b3V0IGJveCwgdGhlIHVzZWQgdmFsdWUgZm9yIGNvbnRlbnQt
Ym94IGlzIGZpbGwtYm94LgotICAgIGNhc2UgVHJhbnNmb3JtQm94OjpGaWxsQm94OgotICAgICAg
ICByZXR1cm4gcmVuZGVyZXIub2JqZWN0Qm91bmRpbmdCb3goKTsKLSAgICBjYXNlIFRyYW5zZm9y
bUJveDo6Vmlld0JveDogewotICAgICAgICBGbG9hdFNpemUgdmlld3BvcnRTaXplOwotICAgICAg
ICBTVkdMZW5ndGhDb250ZXh0KCZlbGVtZW50KS5kZXRlcm1pbmVWaWV3cG9ydCh2aWV3cG9ydFNp
emUpOwotICAgICAgICByZXR1cm4gRmxvYXRSZWN0IHsgeyB9LCB2aWV3cG9ydFNpemUgfTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICByZXR1cm4geyB9OwotfQotCiBpbmxpbmUgRmxvYXRSZWN0IGNs
aXBQYXRoUmVmZXJlbmNlQm94KGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBDU1NCb3hU
eXBlIGJveFR5cGUpCiB7CiAgICAgRmxvYXRSZWN0IHJlZmVyZW5jZUJveDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmgKaW5kZXggOWNjZmNiZWI1
NzdhNzczZGM4ODA3ZDk1MzlkNjJhODFlNTYxOWI4OS4uZDQzZDBjN2Y3NThkMTVmYjcwNDZjOTFi
ZTBjYTlkYTUzZGQ4NTYwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJTdXBwb3J0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJTdXBwb3J0LmgKQEAgLTgyLDggKzgyLDYgQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IHZvaWQgc3R5bGVDaGFuZ2VkKFJlbmRlckVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSopOwog
ICAgIAotICAgIHN0YXRpYyBGbG9hdFJlY3QgdHJhbnNmb3JtUmVmZXJlbmNlQm94KGNvbnN0IFJl
bmRlckVsZW1lbnQmLCBjb25zdCBTVkdFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKLQog
I2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCiAgICAgc3RhdGljIGJvb2wgaXNvbGF0ZXNCbGVu
ZGluZyhjb25zdCBSZW5kZXJTdHlsZSYpOwogICAgIHN0YXRpYyB2b2lkIHVwZGF0ZU1hc2tlZEFu
Y2VzdG9yU2hvdWxkSXNvbGF0ZUJsZW5kaW5nKGNvbnN0IFJlbmRlckVsZW1lbnQmKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFwaGljc0VsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0dyYXBoaWNzRWxlbWVudC5jcHAKaW5kZXggZGMxMDhlNWIyM2M0NmRh
OTU2MDBhMDJhYWM2MjA3ZWQ1YjY2NTY5Ni4uZTJjZDEzNDI4ODhhYThiMjQ2ODdmYzI4NzIxNWNh
OTIwYWZhNGI2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYXBoaWNzRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYXBoaWNzRWxlbWVudC5jcHAK
QEAgLTgwLDEyICs4MCwxMCBAQCBBZmZpbmVUcmFuc2Zvcm0gU1ZHR3JhcGhpY3NFbGVtZW50Ojph
bmltYXRlZExvY2FsVHJhbnNmb3JtKCkgY29uc3QKIAogICAgIC8vIEhvbm9yIGFueSBvZiB0aGUg
dHJhbnNmb3JtLXJlbGF0ZWQgQ1NTIHByb3BlcnRpZXMgaWYgc2V0LgogICAgIGlmIChoYXNTcGVj
aWZpZWRUcmFuc2Zvcm0gfHwgKHN0eWxlICYmIChzdHlsZS0+dHJhbnNsYXRlKCkgfHwgc3R5bGUt
PnNjYWxlKCkgfHwgc3R5bGUtPnJvdGF0ZSgpKSkpIHsKLSAgICAgICAgYXV0byBib3VuZGluZ0Jv
eCA9IFNWR1JlbmRlclN1cHBvcnQ6OnRyYW5zZm9ybVJlZmVyZW5jZUJveCgqcmVuZGVyZXIoKSwg
KnRoaXMsICpzdHlsZSk7Ci0gICAgICAgIAogICAgICAgICAvLyBOb3RlOiBvYmplY3RCb3VuZGlu
Z0JveCBpcyBhbiBlbXB0eVJlY3QgZm9yIGVsZW1lbnRzIGxpa2UgcGF0dGVybiBvciBjbGlwUGF0
aC4KICAgICAgICAgLy8gU2VlIHRoZSAiT2JqZWN0IGJvdW5kaW5nIGJveCB1bml0cyIgc2VjdGlv
biBvZiBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3MzLXRyYW5zZm9ybXMvCiAgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKLSAgICAgICAgc3R5bGUtPmFwcGx5VHJhbnNm
b3JtKHRyYW5zZm9ybSwgYm91bmRpbmdCb3gpOworICAgICAgICBzdHlsZS0+YXBwbHlUcmFuc2Zv
cm0odHJhbnNmb3JtLCByZW5kZXJlcigpLT50cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCkpOwog
CiAgICAgICAgIC8vIEZsYXR0ZW4gYW55IDNEIHRyYW5zZm9ybS4KICAgICAgICAgbWF0cml4ID0g
dHJhbnNmb3JtLnRvQWZmaW5lVHJhbnNmb3JtKCk7CkBAIC0xMDAsNyArOTgsNyBAQCBBZmZpbmVU
cmFuc2Zvcm0gU1ZHR3JhcGhpY3NFbGVtZW50OjphbmltYXRlZExvY2FsVHJhbnNmb3JtKCkgY29u
c3QKIAogICAgIC8vIElmIHdlIGRpZG4ndCBoYXZlIHRoZSBDU1MgInRyYW5zZm9ybSIgcHJvcGVy
dHkgc2V0LCB3ZSBtdXN0IGFjY291bnQgZm9yIHRoZSAidHJhbnNmb3JtIiBhdHRyaWJ1dGUuCiAg
ICAgaWYgKCFoYXNTcGVjaWZpZWRUcmFuc2Zvcm0gJiYgc3R5bGUpIHsKLSAgICAgICAgYXV0byBi
b3VuZGluZ0JveCA9IFNWR1JlbmRlclN1cHBvcnQ6OnRyYW5zZm9ybVJlZmVyZW5jZUJveCgqcmVu
ZGVyZXIoKSwgKnRoaXMsICpzdHlsZSk7CisgICAgICAgIGF1dG8gYm91bmRpbmdCb3ggPSByZW5k
ZXJlcigpLT50cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KCk7CiAgICAgICAgIGF1dG8gdCA9IGZs
b2F0UG9pbnRGb3JMZW5ndGhQb2ludChzdHlsZS0+dHJhbnNmb3JtT3JpZ2luWFkoKSwgYm91bmRp
bmdCb3guc2l6ZSgpKSArIGJvdW5kaW5nQm94LmxvY2F0aW9uKCk7CiAgICAgICAgIG1hdHJpeC50
cmFuc2xhdGUodCk7CiAgICAgICAgIG1hdHJpeCAqPSB0cmFuc2Zvcm0oKS5jb25jYXRlbmF0ZSgp
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>456616</attachid>
            <date>2022-04-04 13:32:55 -0700</date>
            <delta_ts>2022-04-05 14:57:20 -0700</delta_ts>
            <desc>Patch, v9</desc>
            <filename>bug-237554-20220404133254.patch</filename>
            <type>text/plain</type>
            <size>28101</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyMzEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDMzZDVmMDMxMTAyOTBl
MmRjMTVlOGZlNTY3MWM3YmE4Mzc2MTYxOC4uMGE1MmI3OTFkZGI2NDk1ODdlNTY4ODI4ODgzNTA4
Yzc3MzRkYjAyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDIyLTA0LTA0ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFVuaWZ5
ICd0cmFuc2Zvcm0tYm94JyByZWZlcmVuY2UgYm94IGNvbXB1dGF0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc1NTQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgdGhlIGNvZGUgdG8g
Y29tcHV0ZSB0aGUgcmVmZXJlbmNlIGJveCwgYWNjb3JkaW5nIHRvIHRoZSBDU1MgJ3RyYW5zZm9y
bS1ib3gnCisgICAgICAgIHByb3BlcnR5IGlzIHNwcmlua2xlZCBvdmVyIHZhcmlvdXMgcGxhY2Vz
OiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24sIFNWR1JlbmRlclN1cHBvcnQsCisgICAgICAg
IFJlbmRlckJveCwgcGFydHMgaW4gUmVuZGVyTGF5ZXIuCisKKyAgICAgICAgQ2xlYW51cCBhbmQg
dW5pZnkgdGhlIGNvZGUgaW4gYSBzaW5nbGUgcGxhY2U6IGEgbmV3IHBhaXIgb2YgJ3JlZmVyZW5j
ZUJveExheW91dFJlY3QoKScgYW5kCisgICAgICAgICdyZWZlcmVuY2VCb3hGbG9hdFJlY3QoKScg
bWV0aG9kcyAgaW1wbGVtZW50aW5nIHRoZSBjb21wdXRhdGlvbiBmb3IgYm90aCBIVE1ML0NTUyBh
bmQgU1ZHLgorICAgICAgICBUaGUgSFRNTC9DU1MgY29kZSByZW1haW5zIGluIFJlbmRlckJveCwg
dGhlIG5ldyBTVkcgY29kZSB3YXMgbW92ZWQgZnJvbSBTVkdSZW5kZXJTdXBwb3J0CisgICAgICAg
IGludG8gUmVuZGVyRWxlbWVudCAodGhlIG9ubHkgc2hhcmVkIGJhc2UgY2xhc3MgYmV0d2VlbiBs
ZWdhY3kgU1ZHL0xCU0UpLgorCisgICAgICAgIFJlbW92ZSBjb2RlIGZyb20gU1ZHUmVuZGVyU3Vw
cG9ydC9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24gdGhhdCBjYW4gbm93IHVzZSB0aGUgc2hh
cmVkIGxvZ2ljLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMsIG5vIGNoYW5n
ZSBpbiBiZWhhdmlvdXIuCisKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVkVHJhbnNmb3JtKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnZhbHVlRm9yUHJvcGVydHlJblN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OnRyYW5zZm9ybVJlZmVyZW5jZUJveCk6IERlbGV0ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OnJlZmVyZW5jZUJveExheW91dFJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjpoaXRUZXN0Q2xpcFBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjpyZWZlcmVuY2VCb3ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjpyZWZlcmVuY2VCb3hGbG9hdFJlY3QgY29u
c3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50Lmg6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJFbGVtZW50Ojp0cmFuc2Zvcm1SZWZlcmVuY2VCb3hGbG9hdFJlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6dHJhbnNmb3JtUmVmZXJlbmNlQm94
TGF5b3V0UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50Ojp0cmFu
c2Zvcm1SZWZlcmVuY2VCb3hSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVs
ZW1lbnQ6OnJlZmVyZW5jZUJveExheW91dFJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRWxlbWVudDo6cmVmZXJlbmNlQm94UmVjdCBjb25zdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpyZWZl
cmVuY2VCb3hSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpyZWZl
cmVuY2VCb3hSZWN0Rm9yUGFpbnRpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3RGb3JQYWludGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlVHJhbnNmb3JtKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpjdXJyZW50VHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpwZXJzcGVjdGl2ZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGVyc3BlY3RpdmVPcmlnaW4gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbXB1dGVDbGlwUGF0aCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0dXBDbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb21wdXRlUmVmZXJlbmNlUmVjdEZyb21Cb3gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Y29tcHV0ZVJlZmVyZW5jZUJveCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlclN1cHBvcnQ6OnRyYW5zZm9ybVJlZmVyZW5j
ZUJveCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0
Lmg6CisgICAgICAgICogc3ZnL1NWR0dyYXBoaWNzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdHcmFwaGljc0VsZW1lbnQ6OmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0gY29uc3QpOgor
CiAyMDIyLTA0LTA0ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbQXBwbGUgUGF5XSBidXR0b25zIHNob3VsZCBiZSBsb2NhbGl6ZWQgYmFzZWQgb24gdGhlIHN5
c3RlbSBpZiBub3Qgc3BlY2lmaWVkIGJ5IHRoZSBIVE1MCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IDNlOGQyNDMzZTYzNGFh
ZjU4OTc3YTRhOGUxYWVhOThmNjM3OTliY2EuLmM2OGI3OTM3ZjFjNDNmMTJhYWIwZDRjZDE1NzQw
ZDdlODZjMTFiMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24uY3BwCkBAIC01NjEsMTcgKzU2MSw2IEBAIHN0YXRpYyBMYXlvdXRSZWN0
IHNpemluZ0JveChSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQogICAgIHJldHVybiBib3guc3R5bGUo
KS5ib3hTaXppbmcoKSA9PSBCb3hTaXppbmc6OkJvcmRlckJveCA/IGJveC5ib3JkZXJCb3hSZWN0
KCkgOiBib3guY29tcHV0ZWRDU1NDb250ZW50Qm94UmVjdCgpOwogfQogCi1zdGF0aWMgRmxvYXRS
ZWN0IHRyYW5zZm9ybVJlZmVyZW5jZUJveChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0
IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQotewotICAgIGlmIChpczxSZW5kZXJCb3g+KHJlbmRl
cmVyKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpLnJlZmVy
ZW5jZUJveCh0cmFuc2Zvcm1Cb3hUb0NTU0JveFR5cGUoc3R5bGUudHJhbnNmb3JtQm94KCkpKTsK
LQotICAgIGlmIChpczxTVkdFbGVtZW50PihyZW5kZXJlci5lbGVtZW50KCkpKQotICAgICAgICBy
ZXR1cm4gU1ZHUmVuZGVyU3VwcG9ydDo6dHJhbnNmb3JtUmVmZXJlbmNlQm94KHJlbmRlcmVyLCBk
b3duY2FzdDxTVkdFbGVtZW50PigqcmVuZGVyZXIuZWxlbWVudCgpKSwgc3R5bGUpOwotCi0gICAg
cmV0dXJuIHsgfTsKLX0KLQogc3RhdGljIFJlZjxDU1NGdW5jdGlvblZhbHVlPiBtYXRyaXhUcmFu
c2Zvcm1WYWx1ZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAgUmVmUHRyPENTU0Z1bmN0aW9uVmFsdWU+IHRyYW5z
Zm9ybVZhbHVlOwpAQCAtNjI0LDcgKzYxMyw4IEBAIHN0YXRpYyBSZWY8Q1NTVmFsdWU+IGNvbXB1
dGVkVHJhbnNmb3JtKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsCiAg
ICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZU5vbmUpOwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3Jt
OwotICAgIHN0eWxlLmFwcGx5VHJhbnNmb3JtKHRyYW5zZm9ybSwgdHJhbnNmb3JtUmVmZXJlbmNl
Qm94KHN0eWxlLCAqcmVuZGVyZXIpLCB7IH0pOworICAgIHN0eWxlLmFwcGx5VHJhbnNmb3JtKHRy
YW5zZm9ybSwgcmVuZGVyZXItPnRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3Qoc3R5bGUpLCB7IH0p
OworCiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgZmxhdHRlbiB0byBhbiBhZmZpbmUg
dHJhbnNmb3JtIGlmIEVOQUJMRSgzRF9UUkFOU0ZPUk1TKSBpcyBvZmYsIGJ5IGRlc2lnbi4KIAog
ICAgIC8vIEZJWE1FOiBOZWVkIHRvIHByaW50IG91dCBpbmRpdmlkdWFsIGZ1bmN0aW9ucyAoaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTI0KQpAQCAtMzgwMiw3ICsz
NzkyLDcgQEAgUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjp2YWx1ZUZv
clByb3BlcnR5SW5TdHlsZShjb25zdCBSZW5kZXJTdHkKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVBlcnNwZWN0aXZlT3JpZ2luOiB7CiAgICAgICAgICAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxp
c3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIpIHsK
LSAgICAgICAgICAgICAgICBhdXRvIGJveCA9IHRyYW5zZm9ybVJlZmVyZW5jZUJveChzdHlsZSwg
KnJlbmRlcmVyKTsKKyAgICAgICAgICAgICAgICBhdXRvIGJveCA9IHJlbmRlcmVyLT50cmFuc2Zv
cm1SZWZlcmVuY2VCb3hSZWN0KHN0eWxlKTsKICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQo
em9vbUFkanVzdGVkUGl4ZWxWYWx1ZShtaW5pbXVtVmFsdWVGb3JMZW5ndGgoc3R5bGUucGVyc3Bl
Y3RpdmVPcmlnaW5YKCksIGJveC53aWR0aCgpKSwgc3R5bGUpKTsKICAgICAgICAgICAgICAgICBs
aXN0LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShtaW5pbXVtVmFsdWVGb3JMZW5ndGgo
c3R5bGUucGVyc3BlY3RpdmVPcmlnaW5ZKCksIGJveC5oZWlnaHQoKSksIHN0eWxlKSk7CiAgICAg
ICAgICAgICB9IGVsc2UgewpAQCAtMzg1OCw3ICszODQ4LDcgQEAgUmVmUHRyPENTU1ZhbHVlPiBD
b21wdXRlZFN0eWxlRXh0cmFjdG9yOjp2YWx1ZUZvclByb3BlcnR5SW5TdHlsZShjb25zdCBSZW5k
ZXJTdHkKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVRyYW5zZm9ybU9yaWdpbjogewogICAgICAg
ICAgICAgYXV0byBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwog
ICAgICAgICAgICAgaWYgKHJlbmRlcmVyKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBib3ggPSB0
cmFuc2Zvcm1SZWZlcmVuY2VCb3goc3R5bGUsICpyZW5kZXJlcik7CisgICAgICAgICAgICAgICAg
YXV0byBib3ggPSByZW5kZXJlci0+dHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdChzdHlsZSk7CiAg
ICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHpvb21BZGp1c3RlZFBpeGVsVmFsdWUobWluaW11
bVZhbHVlRm9yTGVuZ3RoKHN0eWxlLnRyYW5zZm9ybU9yaWdpblgoKSwgYm94LndpZHRoKCkpLCBz
dHlsZSkpOwogICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZCh6b29tQWRqdXN0ZWRQaXhlbFZh
bHVlKG1pbmltdW1WYWx1ZUZvckxlbmd0aChzdHlsZS50cmFuc2Zvcm1PcmlnaW5ZKCksIGJveC5o
ZWlnaHQoKSksIHN0eWxlKSk7CiAgICAgICAgICAgICAgICAgaWYgKHN0eWxlLnRyYW5zZm9ybU9y
aWdpblooKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggMjg1NWQw
Mzc4MjgwMDRlYTdhOTViYjkwYjczZmViM2ZhZmJhOGJiNy4uZmMyZTZhZDk2OTM2NzY4OWE4YTg1
MDI2ODRjMTE1ZjlkZjliMTk0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5j
cHAKQEAgLTc3MSw5ICs3NzEsOCBAQCBMYXlvdXRQb2ludCBSZW5kZXJCb3g6OmNvbnRlbnRCb3hM
b2NhdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIHsgYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQo
KSArIHNjcm9sbGJhclNwYWNlLCBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSB9OwogfQogCi1M
YXlvdXRSZWN0IFJlbmRlckJveDo6cmVmZXJlbmNlQm94KENTU0JveFR5cGUgYm94VHlwZSkgY29u
c3QKK3N0ZDo6b3B0aW9uYWw8TGF5b3V0UmVjdD4gUmVuZGVyQm94OjpyZWZlcmVuY2VCb3hMYXlv
dXRSZWN0KENTU0JveFR5cGUgYm94VHlwZSkgY29uc3QKIHsKLSAgICBMYXlvdXRSZWN0IHJlZmVy
ZW5jZUJveDsKICAgICBzd2l0Y2ggKGJveFR5cGUpIHsKICAgICBjYXNlIENTU0JveFR5cGU6OkNv
bnRlbnRCb3g6CiAgICAgY2FzZSBDU1NCb3hUeXBlOjpGaWxsQm94OgpAQCAtNzg5LDcgKzc4OCw5
IEBAIExheW91dFJlY3QgUmVuZGVyQm94OjpyZWZlcmVuY2VCb3goQ1NTQm94VHlwZSBib3hUeXBl
KSBjb25zdAogICAgIGNhc2UgQ1NTQm94VHlwZTo6Qm94TWlzc2luZzoKICAgICAgICAgcmV0dXJu
IGJvcmRlckJveFJlY3QoKTsKICAgICB9Ci0gICAgcmV0dXJuIHsgfTsKKworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiB9CiAKIEludFJlY3QgUmVu
ZGVyQm94OjphYnNvbHV0ZUNvbnRlbnRCb3goKSBjb25zdApAQCAtMTQ2NSw4ICsxNDY2LDggQEAg
Ym9vbCBSZW5kZXJCb3g6OmhpdFRlc3RDbGlwUGF0aChjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhp
dFRlc3RMb2NhdGlvbiwgY29uc3QgTGEKICAgICBzd2l0Y2ggKHN0eWxlKCkuY2xpcFBhdGgoKS0+
dHlwZSgpKSB7CiAgICAgY2FzZSBQYXRoT3BlcmF0aW9uOjpTaGFwZTogewogICAgICAgICBhdXRv
JiBjbGlwUGF0aCA9IGRvd25jYXN0PFNoYXBlUGF0aE9wZXJhdGlvbj4oKnN0eWxlKCkuY2xpcFBh
dGgoKSk7Ci0gICAgICAgIGF1dG8gcmVmZXJlbmNlQm94UmVjdCA9IHJlZmVyZW5jZUJveChjbGlw
UGF0aC5yZWZlcmVuY2VCb3goKSk7Ci0gICAgICAgIGlmICghY2xpcFBhdGgucGF0aEZvclJlZmVy
ZW5jZVJlY3QocmVmZXJlbmNlQm94UmVjdCkuY29udGFpbnMoaGl0VGVzdExvY2F0aW9uSW5Mb2Nh
bENvb3JkaW5hdGVzLCBjbGlwUGF0aC53aW5kUnVsZSgpKSkKKyAgICAgICAgYXV0byByZWZlcmVu
Y2VSZWN0ID0gcmVmZXJlbmNlQm94TGF5b3V0UmVjdChjbGlwUGF0aC5yZWZlcmVuY2VCb3goKSku
dmFsdWUoKTsKKyAgICAgICAgaWYgKCFjbGlwUGF0aC5wYXRoRm9yUmVmZXJlbmNlUmVjdChyZWZl
cmVuY2VSZWN0KS5jb250YWlucyhoaXRUZXN0TG9jYXRpb25JbkxvY2FsQ29vcmRpbmF0ZXMsIGNs
aXBQYXRoLndpbmRSdWxlKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBi
cmVhazsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggZWQ3Nzc3
MGU3ZTQyOWQ1Yjc2MmMwZWJjMjkxYmFmMDJmNDcwMjMyNS4uMjhhMWRmZTU1YzcwNTNiNjc5Yzkx
MDc1MTI1ZDgxOWVmNTExZTA0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaApA
QCAtMTY3LDggKzE2Nyw4IEBAIHB1YmxpYzoKICAgICBMYXlvdXRSZWN0IGNvbnRlbnRCb3hSZWN0
KCkgY29uc3Q7CiAgICAgTGF5b3V0UG9pbnQgY29udGVudEJveExvY2F0aW9uKCkgY29uc3Q7CiAK
LSAgICAvLyAuaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy10cmFuc2Zvcm1zLTEvI3JlZmVy
ZW5jZS1ib3gKLSAgICBMYXlvdXRSZWN0IHJlZmVyZW5jZUJveChDU1NCb3hUeXBlKSBjb25zdDsK
KyAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXRyYW5zZm9ybXMtMS8jcmVmZXJlbmNl
LWJveAorICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0UmVjdD4gcmVmZXJlbmNlQm94TGF5b3V0UmVj
dChDU1NCb3hUeXBlKSBjb25zdCBmaW5hbDsKIAogICAgIC8vIFRoZSBjb250ZW50IGJveCBpbiBh
YnNvbHV0ZSBjb29yZHMuIElnbm9yZXMgdHJhbnNmb3Jtcy4KICAgICBJbnRSZWN0IGFic29sdXRl
Q29udGVudEJveCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1l
bnQuY3BwCmluZGV4IGJmMDk0NjkyZDFmMTAyMzVjOTg4MWUzMGYwMjZjNTM5N2UzY2IxNzYuLjY2
ZTM0NDAzZTIzYjJlNjQzOTc5YjFkNDJlMzE3ZjZlNmU4YTE5ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKQEAgLTc4LDYgKzc4LDcgQEAKICNpbmNsdWRl
ICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudFR5cGVIZWxwZXJzLmgiCiAjaW5j
bHVkZSAiU1ZHSW1hZ2UuaCIKKyNpbmNsdWRlICJTVkdMZW5ndGhDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAi
U2hhZG93Um9vdC5oIgpAQCAtMjM4OSw0ICsyMzkwLDM4IEBAIE92ZXJmbG93IFJlbmRlckVsZW1l
bnQ6OmVmZmVjdGl2ZU92ZXJmbG93WSgpIGNvbnN0CiAgICAgcmV0dXJuIG92ZXJmbG93WTsKIH0K
IAorc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IFJlbmRlckVsZW1lbnQ6OnJlZmVyZW5jZUJveEZs
b2F0UmVjdChDU1NCb3hUeXBlIGJveFR5cGUpIGNvbnN0Cit7CisgICAgLy8gQ1NTIGJveCBtb2Rl
bCBjb2RlIGlzIGltcGxlbWVudGVkIGluIFJlbmRlckJveDo6cmVmZXJlbmNlQm94TGF5b3V0UmVj
dCgpLgorCisgICAgLy8gRm9yIHRoZSBsZWdhY3kgU1ZHIGVuZ2luZSwgUmVuZGVyRWxlbWVudCBp
cyB0aGUgb25seSBjbGFzcyB0aGF0J3MKKyAgICAvLyBwcmVzZW50IGluIHRoZSBhbmNlc3RvciBj
aGFpbiBvZiBhbGwgU1ZHIHJlbmRlcmVycy4gSW4gTEJTRSB0aGUKKyAgICAvLyBjb21tb24gY2xh
c3MgaXMgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC4gT25jZSB0aGUgbGVnYWN5IFNWRyBlbmdpbmUK
KyAgICAvLyBpcyByZW1vdmVkIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIG1vdmVkIHRvIFJlbmRl
ckxheWVyTW9kZWxPYmplY3QuCisgICAgLy8gQXMgdGhpcyBtZXRob2QgaXMgdXNlZCBieSBib3Ro
IFNWRyBlbmdpbmVzLCB3ZSBuZWVkIHRvIHBsYWNlIGl0CisgICAgLy8gaGVyZSBpbiBSZW5kZXJF
bGVtZW50LCBhcyB0ZW1wb3Jhcnkgc29sdXRpb24uCisgICAgaWYgKCFpczxTVkdFbGVtZW50Pihl
bGVtZW50KCkpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgc3dpdGNoIChi
b3hUeXBlKSB7CisgICAgY2FzZSBDU1NCb3hUeXBlOjpCb3hNaXNzaW5nOgorICAgIGNhc2UgQ1NT
Qm94VHlwZTo6Q29udGVudEJveDoKKyAgICBjYXNlIENTU0JveFR5cGU6OlBhZGRpbmdCb3g6Cisg
ICAgY2FzZSBDU1NCb3hUeXBlOjpGaWxsQm94OgorICAgICAgICByZXR1cm4gb2JqZWN0Qm91bmRp
bmdCb3goKTsKKyAgICBjYXNlIENTU0JveFR5cGU6OkJvcmRlckJveDoKKyAgICBjYXNlIENTU0Jv
eFR5cGU6Ok1hcmdpbkJveDoKKyAgICBjYXNlIENTU0JveFR5cGU6OlN0cm9rZUJveDoKKyAgICAg
ICAgcmV0dXJuIHN0cm9rZUJvdW5kaW5nQm94KCk7CisgICAgY2FzZSBDU1NCb3hUeXBlOjpWaWV3
Qm94OgorICAgICAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtOiBDYWNoZSB0aGUgaW1tdXRh
YmxlIFNWR0xlbmd0aENvbnRleHQgcGVyIFNWR0VsZW1lbnQsIHRvIGF2b2lkIHRoZSByZXBlYXRl
ZCBSZW5kZXJTVkdSb290IHNpemUgcXVlcmllcyBpbiBkZXRlcm1pbmVWaWV3cG9ydCgpLgorICAg
ICAgICBGbG9hdFNpemUgdmlld3BvcnRTaXplOworICAgICAgICBTVkdMZW5ndGhDb250ZXh0KGRv
d25jYXN0PFNWR0VsZW1lbnQ+KGVsZW1lbnQoKSkpLmRldGVybWluZVZpZXdwb3J0KHZpZXdwb3J0
U2l6ZSk7CisgICAgICAgIHJldHVybiBGbG9hdFJlY3QgeyB7IH0sIHZpZXdwb3J0U2l6ZSB9Owor
ICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCmluZGV4
IDUxYzU1MmNiZDllN2ZkMmI3Y2JlOWQxMmRjZmEzZjEzMWZmN2RmMWIuLmJlNTRlOGVmZWU5YTM0
NTYyZjU3MzIyMWZiZDcyZDA1MGMyMTQ1ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVsZW1lbnQuaApAQCAtMjU4LDYgKzI1OCwzNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGFuaW1hdGlvbkZpbmlzaGVkKGNvbnN0IFN0cmluZyYgLyogbmFtZSAqLykgeyB9CiAgICAg
dmlydHVhbCB2b2lkIHRyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eURpZENoYW5nZSgpIHsgfQogCisg
ICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy10cmFuc2Zvcm1zLTEvI3RyYW5zZm9ybS1i
b3gKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4gdHJhbnNmb3JtUmVmZXJlbmNlQm94Rmxv
YXRSZWN0KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QgeyByZXR1cm4gcmVmZXJlbmNl
Qm94RmxvYXRSZWN0KHRyYW5zZm9ybUJveFRvQ1NTQm94VHlwZShzdHlsZS50cmFuc2Zvcm1Cb3go
KSkpOyB9CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+IHRyYW5zZm9ybVJlZmVyZW5jZUJv
eEZsb2F0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIHRyYW5zZm9ybVJlZmVyZW5jZUJveEZsb2F0UmVj
dChzdHlsZSgpKTsgfQorCisgICAgc3RkOjpvcHRpb25hbDxMYXlvdXRSZWN0PiB0cmFuc2Zvcm1S
ZWZlcmVuY2VCb3hMYXlvdXRSZWN0KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QgeyBy
ZXR1cm4gcmVmZXJlbmNlQm94TGF5b3V0UmVjdCh0cmFuc2Zvcm1Cb3hUb0NTU0JveFR5cGUoc3R5
bGUudHJhbnNmb3JtQm94KCkpKTsgfQorICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0UmVjdD4gdHJh
bnNmb3JtUmVmZXJlbmNlQm94TGF5b3V0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIHRyYW5zZm9ybVJl
ZmVyZW5jZUJveExheW91dFJlY3Qoc3R5bGUoKSk7IH0KKworICAgIEZsb2F0UmVjdCB0cmFuc2Zv
cm1SZWZlcmVuY2VCb3hSZWN0KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChhdXRvIHJlZmVyZW5jZUJveFJlY3QgPSB0cmFuc2Zvcm1SZWZlcmVuY2VC
b3hMYXlvdXRSZWN0KHN0eWxlKSkKKyAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VCb3hSZWN0
LnZhbHVlKCk7CisgICAgICAgIGlmIChhdXRvIHJlZmVyZW5jZUJveFJlY3QgPSB0cmFuc2Zvcm1S
ZWZlcmVuY2VCb3hGbG9hdFJlY3Qoc3R5bGUpKQorICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5j
ZUJveFJlY3QudmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBGbG9h
dFJlY3QgdHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdCgpIGNvbnN0IHsgcmV0dXJuIHRyYW5zZm9y
bVJlZmVyZW5jZUJveFJlY3Qoc3R5bGUoKSk7IH0KKworICAgIC8vIGh0dHBzOi8vd3d3LnczLm9y
Zy9UUi9jc3MtdHJhbnNmb3Jtcy0xLyNyZWZlcmVuY2UtYm94CisgICAgdmlydHVhbCBzdGQ6Om9w
dGlvbmFsPExheW91dFJlY3Q+IHJlZmVyZW5jZUJveExheW91dFJlY3QoQ1NTQm94VHlwZSkgY29u
c3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CisgICAgdmlydHVhbCBzdGQ6Om9wdGlvbmFsPEZs
b2F0UmVjdD4gcmVmZXJlbmNlQm94RmxvYXRSZWN0KENTU0JveFR5cGUpIGNvbnN0OworCisgICAg
RmxvYXRSZWN0IHJlZmVyZW5jZUJveFJlY3QoQ1NTQm94VHlwZSBib3hUeXBlKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKGF1dG8gcmVmZXJlbmNlQm94UmVjdCA9IHJlZmVyZW5jZUJveExheW91
dFJlY3QoYm94VHlwZSkpCisgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlQm94UmVjdC52YWx1
ZSgpOworICAgICAgICBpZiAoYXV0byByZWZlcmVuY2VCb3hSZWN0ID0gcmVmZXJlbmNlQm94Rmxv
YXRSZWN0KGJveFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZUJveFJlY3QudmFs
dWUoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKICAgICB2aXJ0dWFsIHZvaWQgc3Vz
cGVuZEFuaW1hdGlvbnMoTW9ub3RvbmljVGltZSA9IE1vbm90b25pY1RpbWUoKSkgeyB9CiAgICAg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBhbmltYXRlZFN0eWxlKCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDQxY2U3ZTgxOWY2YmQwZWJmNjVi
MmVjNDQxMjY5MTIwMzdmMDg0MjYuLjhmNTc3ZDViNmEyMDMyMDJlZWY1MGNiOGM0MzI3NDllZDA3
NWIxODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMTI5
NiwyMSArMTI5NiwzNSBAQCB2b2lkIFJlbmRlckxheWVyOjpkaXJ0eUFuY2VzdG9yQ2hhaW5IYXNC
bGVuZGluZ0Rlc2NlbmRhbnRzKCkKIH0KICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIExheW91dFJl
Y3QgY29tcHV0ZVJlZmVyZW5jZVJlY3RGcm9tQm94KGNvbnN0IFJlbmRlckJveCYgYm94LCBDU1NC
b3hUeXBlIGJveFR5cGUsIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290KQorRmxvYXRS
ZWN0IFJlbmRlckxheWVyOjpyZWZlcmVuY2VCb3hSZWN0KENTU0JveFR5cGUgYm94VHlwZSwgY29u
c3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3QsIGNvbnN0IExheW91dFJlY3QmIHJvb3RSZWxh
dGl2ZUJvdW5kcykgY29uc3QKIHsKLSAgICBhdXRvIHJlZmVyZW5jZUJveCA9IGJveC5yZWZlcmVu
Y2VCb3goYm94VHlwZSk7Ci0gICAgcmVmZXJlbmNlQm94Lm1vdmUob2Zmc2V0RnJvbVJvb3QpOwot
ICAgIHJldHVybiByZWZlcmVuY2VCb3g7Ci19CisgICAgaWYgKGF1dG8gcmVmZXJlbmNlQm94UmVj
dCA9IHJlbmRlcmVyKCkucmVmZXJlbmNlQm94RmxvYXRSZWN0KGJveFR5cGUpKQorICAgICAgICBy
ZXR1cm4gcmVmZXJlbmNlQm94UmVjdC52YWx1ZSgpOwogCi1zdGF0aWMgaW5saW5lIExheW91dFJl
Y3QgY29tcHV0ZVJlZmVyZW5jZUJveChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBDU1NC
b3hUeXBlIGJveFR5cGUsIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290LCBjb25zdCBM
YXlvdXRSZWN0JiByb290UmVsYXRpdmVCb3VuZHMpCi17CiAgICAgLy8gRklYTUU6IFN1cHBvcnQg
ZGlmZmVyZW50IHJlZmVyZW5jZSBib3hlcyBmb3IgaW5saW5lIGNvbnRlbnQuCiAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTA0NwotICAgIGlmICghcmVu
ZGVyZXIuaXNCb3goKSkKKyAgICBpZiAoIXJlbmRlcmVyKCkuaXNCb3goKSkKICAgICAgICAgcmV0
dXJuIHJvb3RSZWxhdGl2ZUJvdW5kczsKLSAgICAKLSAgICByZXR1cm4gY29tcHV0ZVJlZmVyZW5j
ZVJlY3RGcm9tQm94KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpLCBib3hUeXBlLCBvZmZz
ZXRGcm9tUm9vdCk7CisKKyAgICBhdXRvIHJlZmVyZW5jZUJveFJlY3QgPSByZW5kZXJlcigpLnJl
ZmVyZW5jZUJveExheW91dFJlY3QoYm94VHlwZSkudmFsdWUoKTsKKyAgICByZWZlcmVuY2VCb3hS
ZWN0Lm1vdmUob2Zmc2V0RnJvbVJvb3QpOworICAgIHJldHVybiByZWZlcmVuY2VCb3hSZWN0Owor
fQorCitGbG9hdFJlY3QgUmVuZGVyTGF5ZXI6OnJlZmVyZW5jZUJveFJlY3RGb3JQYWludGluZyhD
U1NCb3hUeXBlIGJveFR5cGUsIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290LCBjb25z
dCBMYXlvdXRSZWN0JiByb290UmVsYXRpdmVCb3VuZHMpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8g
cmVmZXJlbmNlQm94UmVjdCA9IHJlbmRlcmVyKCkucmVmZXJlbmNlQm94RmxvYXRSZWN0KGJveFR5
cGUpKQorICAgICAgICByZXR1cm4gcmVmZXJlbmNlQm94UmVjdC52YWx1ZSgpOworICAgIHJldHVy
biBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3QocmVmZXJlbmNlQm94UmVjdChib3hU
eXBlLCBvZmZzZXRGcm9tUm9vdCwgcm9vdFJlbGF0aXZlQm91bmRzKSksIHJlbmRlcmVyKCkuZG9j
dW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKK30KKworRmxvYXRSZWN0IFJlbmRlckxheWVy
Ojp0cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0Rm9yUGFpbnRpbmcoY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlKSBjb25zdAoreworICAgIGlmIChhdXRvIHJlZmVyZW5jZUJveFJlY3QgPSByZW5kZXJl
cigpLnRyYW5zZm9ybVJlZmVyZW5jZUJveEZsb2F0UmVjdChzdHlsZSkpCisgICAgICAgIHJldHVy
biByZWZlcmVuY2VCb3hSZWN0LnZhbHVlKCk7CisgICAgaWYgKGF1dG8gcmVmZXJlbmNlQm94UmVj
dCA9IHJlbmRlcmVyKCkudHJhbnNmb3JtUmVmZXJlbmNlQm94TGF5b3V0UmVjdChzdHlsZSkpCisg
ICAgICAgIHJldHVybiBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKHJlZmVyZW5jZUJveFJlY3QudmFs
dWUoKSwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOworICAgIHJl
dHVybiB7IH07CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVRyYW5zZm9ybSgpCkBAIC0x
MzMxLDEzICsxMzQ1LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlVHJhbnNmb3JtKCkKICAg
ICAKICAgICBpZiAoaGFzVHJhbnNmb3JtKSB7CiAgICAgICAgIG1fdHJhbnNmb3JtLT5tYWtlSWRl
bnRpdHkoKTsKLQotICAgICAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIHJlZmVyZW5jZSBi
b3ggY29tcHV0YXRpb24gZm9yIFJlbmRlclNWR01vZGVsT2JqZWN0IGRlcml2ZWQgcmVuZGVyZXJz
Ci0gICAgICAgIEZsb2F0UmVjdCByZWZlcmVuY2VCb3g7Ci0gICAgICAgIGlmIChpczxSZW5kZXJC
b3g+KHJlbmRlcmVyKCkpKQotICAgICAgICAgICAgcmVmZXJlbmNlQm94ID0gc25hcFJlY3RUb0Rl
dmljZVBpeGVscyhkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLnJlZmVyZW5jZUJveCh0
cmFuc2Zvcm1Cb3hUb0NTU0JveFR5cGUocmVuZGVyZXIoKS5zdHlsZSgpLnRyYW5zZm9ybUJveCgp
KSksIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKLQotICAgICAg
ICByZW5kZXJlcigpLmFwcGx5VHJhbnNmb3JtKCptX3RyYW5zZm9ybSwgcmVmZXJlbmNlQm94KTsK
KyAgICAgICAgcmVuZGVyZXIoKS5hcHBseVRyYW5zZm9ybSgqbV90cmFuc2Zvcm0sIHRyYW5zZm9y
bVJlZmVyZW5jZUJveFJlY3RGb3JQYWludGluZyhyZW5kZXJlcigpLnN0eWxlKCkpKTsKICAgICAg
ICAgbWFrZU1hdHJpeFJlbmRlcmFibGUoKm1fdHJhbnNmb3JtLCBjYW5SZW5kZXIzRFRyYW5zZm9y
bXMoKSk7CiAgICAgfQogCkBAIC0xMzY2LDEwICsxMzc0LDkgQEAgVHJhbnNmb3JtYXRpb25NYXRy
aXggUmVuZGVyTGF5ZXI6OmN1cnJlbnRUcmFuc2Zvcm0oT3B0aW9uU2V0PFJlbmRlclN0eWxlOjpU
cmFuc2YKICAgICBhdXRvIHN0eWxlYWJsZSA9IFN0eWxlYWJsZTo6ZnJvbVJlbmRlcmVyKHJlbmRl
ckJveCk7CiAgICAgaWYgKChzdHlsZWFibGUgJiYgc3R5bGVhYmxlLT5pc1J1bm5pbmdBY2NlbGVy
YXRlZFRyYW5zZm9ybUFuaW1hdGlvbigpKSB8fCAhb3B0aW9ucy5jb250YWlucyhSZW5kZXJTdHls
ZTo6VHJhbnNmb3JtT3BlcmF0aW9uT3B0aW9uOjpUcmFuc2Zvcm1PcmlnaW4pKSB7CiAgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gYW5pbWF0ZWRTdHlsZSA9IHJlbmRlckJveC5h
bmltYXRlZFN0eWxlKCk7Ci0gICAgICAgIGF1dG8gcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCA9IHNu
YXBSZWN0VG9EZXZpY2VQaXhlbHMocmVuZGVyQm94LnJlZmVyZW5jZUJveCh0cmFuc2Zvcm1Cb3hU
b0NTU0JveFR5cGUoYW5pbWF0ZWRTdHlsZS0+dHJhbnNmb3JtQm94KCkpKSwgcmVuZGVyQm94LmRv
Y3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAKICAgICAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggdHJhbnNmb3JtOwotICAgICAgICBhbmltYXRlZFN0eWxlLT5hcHBseVRyYW5zZm9ybSh0
cmFuc2Zvcm0sIHBpeGVsU25hcHBlZEJvcmRlclJlY3QsIG9wdGlvbnMpOworICAgICAgICBhbmlt
YXRlZFN0eWxlLT5hcHBseVRyYW5zZm9ybSh0cmFuc2Zvcm0sIHRyYW5zZm9ybVJlZmVyZW5jZUJv
eFJlY3RGb3JQYWludGluZygqYW5pbWF0ZWRTdHlsZSksIG9wdGlvbnMpOwogCiAgICAgICAgIG1h
a2VNYXRyaXhSZW5kZXJhYmxlKHRyYW5zZm9ybSwgY2FuUmVuZGVyM0RUcmFuc2Zvcm1zKCkpOwog
ICAgICAgICByZXR1cm4gdHJhbnNmb3JtOwpAQCAtMTgwMSwxMSArMTgwOCwxMSBAQCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBSZW5kZXJMYXllcjo6cGVyc3BlY3RpdmVUcmFuc2Zvcm0oY29uc3QgTGF5
b3V0UmVjdCYgbGF5ZXJSZQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgYXV0byBkZXZpY2VT
Y2FsZUZhY3RvciA9IHJlbmRlckJveC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7Ci0g
ICAgYXV0byByZWZlcmVuY2VCb3ggPSByZW5kZXJCb3gucmVmZXJlbmNlQm94KHRyYW5zZm9ybUJv
eFRvQ1NTQm94VHlwZShzdHlsZS50cmFuc2Zvcm1Cb3goKSkpOwotICAgIGF1dG8gcGl4ZWxTbmFw
cGVkUmVmZXJlbmNlQm94ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhyZWZlcmVuY2VCb3gsIGRl
dmljZVNjYWxlRmFjdG9yKTsKKyAgICBhdXRvIHJlZmVyZW5jZUJveFJlY3RGb3JQYWludGluZyA9
IHRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3RGb3JQYWludGluZyhzdHlsZSk7CisgICAgLy8gRklY
TUU6IFtMQlNFXSBBdm9pZCBwaXhlbCBzbmFwcGluZyBpbiBTVkcgc3VidHJlZS4KICAgICBhdXRv
IHNuYXBwZWRMYXllclJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGxheWVyUmVjdCwgZGV2
aWNlU2NhbGVGYWN0b3IpOwogCi0gICAgYXV0byBwZXJzcGVjdGl2ZU9yaWdpbiA9IHBpeGVsU25h
cHBlZFJlZmVyZW5jZUJveC5sb2NhdGlvbigpIC0gdG9GbG9hdFNpemUoc25hcHBlZExheWVyUmVj
dC5sb2NhdGlvbigpKSArIGZsb2F0UG9pbnRGb3JMZW5ndGhQb2ludChzdHlsZS5wZXJzcGVjdGl2
ZU9yaWdpbigpLCBwaXhlbFNuYXBwZWRSZWZlcmVuY2VCb3guc2l6ZSgpKTsKKyAgICBhdXRvIHBl
cnNwZWN0aXZlT3JpZ2luID0gcmVmZXJlbmNlQm94UmVjdEZvclBhaW50aW5nLmxvY2F0aW9uKCkg
LSB0b0Zsb2F0U2l6ZShzbmFwcGVkTGF5ZXJSZWN0LmxvY2F0aW9uKCkpICsgZmxvYXRQb2ludEZv
ckxlbmd0aFBvaW50KHN0eWxlLnBlcnNwZWN0aXZlT3JpZ2luKCksIHJlZmVyZW5jZUJveFJlY3RG
b3JQYWludGluZy5zaXplKCkpOwogCiAgICAgLy8gQSBwZXJzcGVjdGl2ZSBvcmlnaW4gb2YgMCww
IG1ha2VzIHRoZSB2YW5pc2hpbmcgcG9pbnQgaW4gdGhlIGNlbnRlciBvZiB0aGUgZWxlbWVudC4K
ICAgICAvLyBXZSB3YW50IGl0IHRvIGJlIGluIHRoZSB0b3AtbGVmdCwgc28gc3VidHJhY3QgaGFs
ZiB0aGUgaGVpZ2h0IGFuZCB3aWR0aC4KQEAgLTE4MjMsNiArMTgzMCw3IEBAIEZsb2F0UG9pbnQg
UmVuZGVyTGF5ZXI6OnBlcnNwZWN0aXZlT3JpZ2luKCkgY29uc3QKIHsKICAgICBpZiAoIXJlbmRl
cmVyKCkuaGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KCkpCiAgICAgICAgIHJldHVybiB7IH07
CisgICAgLy8gRklYTUU6IFRoaXMgdXNlcyB0aGUgd3JvbmcsIHRyYW5zZm9ybS1ib3ggdW5hd2Fy
ZSwgZ2VvbWV0cnkuCiAgICAgcmV0dXJuIGZsb2F0UG9pbnRGb3JMZW5ndGhQb2ludChyZW5kZXJl
cigpLnN0eWxlKCkucGVyc3BlY3RpdmVPcmlnaW4oKSwgcmVuZGVyZXJCb3JkZXJCb3hSZWN0KCku
c2l6ZSgpKTsKIH0KIApAQCAtMzIxMCwzMiArMzIxOCwxNyBAQCBib29sIFJlbmRlckxheWVyOjpz
ZXR1cEZvbnRTdWJwaXhlbFF1YW50aXphdGlvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGJv
b2wmCiBzdGQ6OnBhaXI8UGF0aCwgV2luZFJ1bGU+IFJlbmRlckxheWVyOjpjb21wdXRlQ2xpcFBh
dGgoY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3QsIGNvbnN0IExheW91dFJlY3QmIHJv
b3RSZWxhdGl2ZUJvdW5kc0Zvck5vbkJveGVzKSBjb25zdAogewogICAgIGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSA9IHJlbmRlcmVyKCkuc3R5bGUoKTsKLSAgICBmbG9hdCBkZXZpY2VTY2FsZUZh
Y3RvciA9IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpOwogCiAgICAg
aWYgKGlzPFNoYXBlUGF0aE9wZXJhdGlvbj4oKnN0eWxlLmNsaXBQYXRoKCkpKSB7CiAgICAgICAg
IGF1dG8mIGNsaXBQYXRoID0gZG93bmNhc3Q8U2hhcGVQYXRoT3BlcmF0aW9uPigqc3R5bGUuY2xp
cFBhdGgoKSk7Ci0KLSAgICAgICAgTGF5b3V0UmVjdCByZWZlcmVuY2VCb3g7Ci0gICAgICAgIGlm
IChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKSB7Ci0gICAgICAgICAgICByZWZlcmVuY2VCb3gg
PSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLnJlZmVyZW5jZUJveChjbGlwUGF0aC5y
ZWZlcmVuY2VCb3goKSk7Ci0gICAgICAgICAgICByZWZlcmVuY2VCb3gubW92ZShvZmZzZXRGcm9t
Um9vdCk7Ci0jaWYgRU5BQkxFKExBWUVSX0JBU0VEX1NWR19FTkdJTkUpCi0gICAgICAgIH0gZWxz
ZSBpZiAoaXM8UmVuZGVyU1ZHTW9kZWxPYmplY3Q+KHJlbmRlcmVyKCkpKSB7Ci0gICAgICAgICAg
ICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIGNsaXBwaW5nIHN1cHBvcnQgZm9yIFJlbmRlclNW
R01vZGVsT2JqZWN0IGRlcml2ZWQgcmVuZGVyZXJzCi0jZW5kaWYKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIC8vIFJlZmVyZW5jZSBib3ggZm9yIGlubGluZXMgaXMgbm90IHdlbGwgZGVm
aW5lZDogaHR0cHM6Ly9naXRodWIuY29tL3czYy9jc3N3Zy1kcmFmdHMvaXNzdWVzLzYzODMKLSAg
ICAgICAgICAgIHJlZmVyZW5jZUJveCA9IHJvb3RSZWxhdGl2ZUJvdW5kc0Zvck5vbkJveGVzOwot
ICAgICAgICB9Ci0KLSAgICAgICAgYXV0byBzbmFwcGVkUmVmZXJlbmNlQm94ID0gc25hcFJlY3RU
b0RldmljZVBpeGVscyhyZWZlcmVuY2VCb3gsIGRldmljZVNjYWxlRmFjdG9yKTsKLSAgICAgICAg
cmV0dXJuIHsgY2xpcFBhdGgucGF0aEZvclJlZmVyZW5jZVJlY3Qoc25hcHBlZFJlZmVyZW5jZUJv
eCksIGNsaXBQYXRoLndpbmRSdWxlKCkgfTsKKyAgICAgICAgYXV0byByZWZlcmVuY2VCb3hSZWN0
ID0gcmVmZXJlbmNlQm94UmVjdEZvclBhaW50aW5nKGNsaXBQYXRoLnJlZmVyZW5jZUJveCgpLCBv
ZmZzZXRGcm9tUm9vdCwgcm9vdFJlbGF0aXZlQm91bmRzRm9yTm9uQm94ZXMpOworICAgICAgICBy
ZXR1cm4geyBjbGlwUGF0aC5wYXRoRm9yUmVmZXJlbmNlUmVjdChyZWZlcmVuY2VCb3hSZWN0KSwg
Y2xpcFBhdGgud2luZFJ1bGUoKSB9OwogICAgIH0KIAogICAgIGlmIChpczxCb3hQYXRoT3BlcmF0
aW9uPigqc3R5bGUuY2xpcFBhdGgoKSkgJiYgaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkgewog
ICAgICAgICBhdXRvJiBjbGlwUGF0aCA9IGRvd25jYXN0PEJveFBhdGhPcGVyYXRpb24+KCpzdHls
ZS5jbGlwUGF0aCgpKTsKIAotICAgICAgICBhdXRvIHNoYXBlUmVjdCA9IGNvbXB1dGVSb3VuZGVk
UmVjdEZvckJveFNoYXBlKGNsaXBQYXRoLnJlZmVyZW5jZUJveCgpLCBkb3duY2FzdDxSZW5kZXJC
b3g+KHJlbmRlcmVyKCkpKS5waXhlbFNuYXBwZWRSb3VuZGVkUmVjdEZvclBhaW50aW5nKGRldmlj
ZVNjYWxlRmFjdG9yKTsKKyAgICAgICAgYXV0byBzaGFwZVJlY3QgPSBjb21wdXRlUm91bmRlZFJl
Y3RGb3JCb3hTaGFwZShjbGlwUGF0aC5yZWZlcmVuY2VCb3goKSwgZG93bmNhc3Q8UmVuZGVyQm94
PihyZW5kZXJlcigpKSkucGl4ZWxTbmFwcGVkUm91bmRlZFJlY3RGb3JQYWludGluZyhyZW5kZXJl
cigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAgICAgICAgIHNoYXBlUmVjdC5t
b3ZlKG9mZnNldEZyb21Sb290KTsKIAogICAgICAgICByZXR1cm4geyBjbGlwUGF0aC5wYXRoRm9y
UmVmZXJlbmNlUmVjdChzaGFwZVJlY3QpLCBXaW5kUnVsZTo6Tm9uWmVybyB9OwpAQCAtMzI3MCwx
NyArMzI2MywxNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzZXR1cENsaXBQYXRoKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgR3JhcGhpY3NDb250ZXh0U3RhdGVTYQogICAgICAgICBpZiAoYXV0byog
Y2xpcHBlclJlbmRlcmVyID0gcmVuZGVyZXIoKS5lbnN1cmVSZWZlcmVuY2VkU1ZHUmVzb3VyY2Vz
KCkucmVmZXJlbmNlZENsaXBwZXJSZW5kZXJlcihyZW5kZXJlcigpLmRvY3VtZW50KCksIHJlZmVy
ZW5jZUNsaXBQYXRoT3BlcmF0aW9uKSkgewogICAgICAgICAgICAgLy8gVXNlIHRoZSBib3JkZXIg
Ym94IGFzIHRoZSByZWZlcmVuY2UgYm94LCBldmVuIHRob3VnaCB0aGlzIGlzIG5vdCBjbGVhcmx5
IHNwZWNpZmllZDogaHR0cHM6Ly9naXRodWIuY29tL3czYy9jc3N3Zy1kcmFmdHMvaXNzdWVzLzU3
ODYuCiAgICAgICAgICAgICAvLyBjbGlwcGVkQ29udGVudEJvdW5kcyBpcyB1c2VkIGFzIHRoZSBy
ZWZlcmVuY2UgYm94IGZvciBpbmxpbmVzLCB3aGljaCBpcyBhbHNvIHBvb3JseSBzcGVjaWZpZWQ6
IGh0dHBzOi8vZ2l0aHViLmNvbS93M2MvY3Nzd2ctZHJhZnRzL2lzc3Vlcy82MzgzLgotICAgICAg
ICAgICAgYXV0byByZWZlcmVuY2VCb3ggPSBjb21wdXRlUmVmZXJlbmNlQm94KHJlbmRlcmVyKCks
IENTU0JveFR5cGU6OkJvcmRlckJveCwgb2Zmc2V0RnJvbVJvb3QsIGNsaXBwZWRDb250ZW50Qm91
bmRzKTsKLSAgICAgICAgICAgIGF1dG8gc25hcHBlZFJlZmVyZW5jZUJveCA9IHNuYXBSZWN0VG9E
ZXZpY2VQaXhlbHMocmVmZXJlbmNlQm94LCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2Nh
bGVGYWN0b3IoKSk7Ci0gICAgICAgICAgICBhdXRvIG9mZnNldCA9IHNuYXBwZWRSZWZlcmVuY2VC
b3gubG9jYXRpb24oKTsKKyAgICAgICAgICAgIGF1dG8gY2xpcFBhdGhSZWZlcmVuY2VCb3ggPSBy
ZWZlcmVuY2VCb3hSZWN0KENTU0JveFR5cGU6OkJvcmRlckJveCwgb2Zmc2V0RnJvbVJvb3QsIGNs
aXBwZWRDb250ZW50Qm91bmRzKTsKKyAgICAgICAgICAgIGF1dG8gY2xpcFBhdGhSZWZlcmVuY2VC
b3hGb3JQYWludGluZyA9IHJlZmVyZW5jZUJveFJlY3RGb3JQYWludGluZyhDU1NCb3hUeXBlOjpC
b3JkZXJCb3gsIG9mZnNldEZyb21Sb290LCBjbGlwcGVkQ29udGVudEJvdW5kcyk7CisgICAgICAg
ICAgICBhdXRvIG9mZnNldCA9IGNsaXBQYXRoUmVmZXJlbmNlQm94Rm9yUGFpbnRpbmcubG9jYXRp
b24oKTsKIAorICAgICAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBBdm9pZCBwaXhlbCBzbmFwcGlu
ZyBpbiBTVkcgc3VidHJlZS4KICAgICAgICAgICAgIGF1dG8gc25hcHBlZENsaXBwaW5nQm91bmRz
ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhjbGlwcGVkQ29udGVudEJvdW5kcywgcmVuZGVyZXIo
KS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwogICAgICAgICAgICAgc25hcHBlZENs
aXBwaW5nQm91bmRzLm1vdmVCeSgtb2Zmc2V0KTsKIAogICAgICAgICAgICAgc3RhdGVTYXZlci5z
YXZlKCk7CiAgICAgICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShvZmZzZXQpOwotICAgICAgICAg
ICAgRmxvYXRSZWN0IGNsaXBQYXRoUmVmZXJlbmNlQm94IHsgeyB9LCByZWZlcmVuY2VCb3guc2l6
ZSgpIH07Ci0gICAgICAgICAgICBjbGlwcGVyUmVuZGVyZXItPmFwcGx5Q2xpcHBpbmdUb0NvbnRl
eHQoY29udGV4dCwgcmVuZGVyZXIoKSwgY2xpcFBhdGhSZWZlcmVuY2VCb3gsIHNuYXBwZWRDbGlw
cGluZ0JvdW5kcywgcmVuZGVyZXIoKS5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAg
ICAgICBjbGlwcGVyUmVuZGVyZXItPmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQoY29udGV4dCwgcmVu
ZGVyZXIoKSwgeyB7IH0sIGNsaXBQYXRoUmVmZXJlbmNlQm94LnNpemUoKSB9LCBzbmFwcGVkQ2xp
cHBpbmdCb3VuZHMsIHJlbmRlcmVyKCkuc3R5bGUoKS5lZmZlY3RpdmVab29tKCkpOwogICAgICAg
ICAgICAgY29udGV4dC50cmFuc2xhdGUoLW9mZnNldCk7CiAgICAgICAgIH0KICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IGMxODc4ODNmNTNjMGQ1MTg0MDll
YmFiNGU4OWIxYzVmYjllZDNjMWIuLmI4MjdkYjRkNDk3YjEzOWZlY2NjOGVmYzJjNjZkYTA5ZTQ0
ZjA4NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBAIC02OTgsNiAr
Njk4LDEyIEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBJbnRSZWN0IGFic29sdXRlQm91
bmRpbmdCb3goKSBjb25zdDsKICAgICAvLyBEZXZpY2UgcGl4ZWwgc25hcHBlZCBib3VuZGluZyBi
b3ggcmVsYXRpdmUgdG8gdGhlIHJvb3QuIGFic29sdXRlQm91bmRpbmdCb3goKSBjYWxsZXJzIHdp
bGwgYmUgZGlyZWN0ZWQgdG8gdGhpcy4KICAgICBGbG9hdFJlY3QgYWJzb2x1dGVCb3VuZGluZ0Jv
eEZvclBhaW50aW5nKCkgY29uc3Q7CisgICAgLy8gJ3JlZmVyZW5jZSBib3gnIGFjY29yZGluZyB0
byBDU1MgVHJhbnNmb3JtcyBNb2R1bGUgTGV2ZWwgMS4KKyAgICBGbG9hdFJlY3QgcmVmZXJlbmNl
Qm94UmVjdChDU1NCb3hUeXBlLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdCwgY29u
c3QgTGF5b3V0UmVjdCYgcm9vdFJlbGF0aXZlQm91bmRzKSBjb25zdDsKKyAgICAvLyBEZXZpY2Ug
cGl4ZWwgc25hcHBlZCAncmVmZXJlbmNlIGJveCcgYWNjb3JkaW5nIHRvIENTUyBUcmFuc2Zvcm1z
IE1vZHVsZSBMZXZlbCAxLgorICAgIEZsb2F0UmVjdCByZWZlcmVuY2VCb3hSZWN0Rm9yUGFpbnRp
bmcoQ1NTQm94VHlwZSwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3QsIGNvbnN0IExh
eW91dFJlY3QmIHJvb3RSZWxhdGl2ZUJvdW5kcykgY29uc3Q7CisgICAgLy8gRGV2aWNlIHBpeGVs
IHNuYXBwZWQgJ3RyYW5zZm9ybSByZWZlcmVuY2UgYm94JyBhY2NvcmRpbmcgdG8gQ1NTIFRyYW5z
Zm9ybXMgTW9kdWxlIExldmVsIDEuCisgICAgRmxvYXRSZWN0IHRyYW5zZm9ybVJlZmVyZW5jZUJv
eFJlY3RGb3JQYWludGluZyhjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0OwogCiAgICAgLy8gQm91
bmRzIHVzZWQgZm9yIGxheWVyIG92ZXJsYXAgdGVzdGluZyBpbiBSZW5kZXJMYXllckNvbXBvc2l0
b3IuCiAgICAgTGF5b3V0UmVjdCBvdmVybGFwQm91bmRzKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAppbmRleCBjYzM4ZWM3
MDMwZTYwY2UxNzU5YjEzMjg3ZGUyNWY3M2Q1NjVjODU4Li5lMmJlYjRiYThjMTE1N2RjYmIxMjg2
NDlhM2VkZTU2ZTM4NGU4ZDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKQEAgLTM0MywyNiArMzQzLDYgQEAgYm9vbCBTVkdSZW5k
ZXJTdXBwb3J0OjpmaWx0ZXJzRm9yY2VDb250YWluZXJMYXlvdXQoY29uc3QgUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotRmxvYXRSZWN0IFNWR1JlbmRlclN1
cHBvcnQ6OnRyYW5zZm9ybVJlZmVyZW5jZUJveChjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJl
ciwgY29uc3QgU1ZHRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQot
ewotICAgIHN3aXRjaCAoc3R5bGUudHJhbnNmb3JtQm94KCkpIHsKLSAgICBjYXNlIFRyYW5zZm9y
bUJveDo6Qm9yZGVyQm94OgotICAgICAgICAvLyBGb3IgU1ZHIGVsZW1lbnRzIHdpdGhvdXQgYW4g
YXNzb2NpYXRlZCBDU1MgbGF5b3V0IGJveCwgdGhlIHVzZWQgdmFsdWUgZm9yIGJvcmRlci1ib3gg
aXMgc3Ryb2tlLWJveC4KLSAgICBjYXNlIFRyYW5zZm9ybUJveDo6U3Ryb2tlQm94OgotICAgICAg
ICByZXR1cm4gcmVuZGVyZXIuc3Ryb2tlQm91bmRpbmdCb3goKTsKLSAgICBjYXNlIFRyYW5zZm9y
bUJveDo6Q29udGVudEJveDoKLSAgICAgICAgLy8gRm9yIFNWRyBlbGVtZW50cyB3aXRob3V0IGFu
IGFzc29jaWF0ZWQgQ1NTIGxheW91dCBib3gsIHRoZSB1c2VkIHZhbHVlIGZvciBjb250ZW50LWJv
eCBpcyBmaWxsLWJveC4KLSAgICBjYXNlIFRyYW5zZm9ybUJveDo6RmlsbEJveDoKLSAgICAgICAg
cmV0dXJuIHJlbmRlcmVyLm9iamVjdEJvdW5kaW5nQm94KCk7Ci0gICAgY2FzZSBUcmFuc2Zvcm1C
b3g6OlZpZXdCb3g6IHsKLSAgICAgICAgRmxvYXRTaXplIHZpZXdwb3J0U2l6ZTsKLSAgICAgICAg
U1ZHTGVuZ3RoQ29udGV4dCgmZWxlbWVudCkuZGV0ZXJtaW5lVmlld3BvcnQodmlld3BvcnRTaXpl
KTsKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCB7IHsgfSwgdmlld3BvcnRTaXplIH07Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQogaW5saW5lIEZsb2F0UmVjdCBjbGlw
UGF0aFJlZmVyZW5jZUJveChjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgQ1NTQm94VHlw
ZSBib3hUeXBlKQogewogICAgIEZsb2F0UmVjdCByZWZlcmVuY2VCb3g7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oCmluZGV4IDljY2ZjYmViNTc3
YTc3M2RjODgwN2Q5NTM5ZDYyYTgxZTU2MTliODkuLmQ0M2QwYzdmNzU4ZDE1ZmI3MDQ2YzkxYmUw
Y2E5ZGE1M2RkODU2MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyU3VwcG9ydC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
UmVuZGVyU3VwcG9ydC5oCkBAIC04Miw4ICs4Miw2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2
b2lkIHN0eWxlQ2hhbmdlZChSZW5kZXJFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqKTsKICAg
ICAKLSAgICBzdGF0aWMgRmxvYXRSZWN0IHRyYW5zZm9ybVJlZmVyZW5jZUJveChjb25zdCBSZW5k
ZXJFbGVtZW50JiwgY29uc3QgU1ZHRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJik7Ci0KICNp
ZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQogICAgIHN0YXRpYyBib29sIGlzb2xhdGVzQmxlbmRp
bmcoY29uc3QgUmVuZGVyU3R5bGUmKTsKICAgICBzdGF0aWMgdm9pZCB1cGRhdGVNYXNrZWRBbmNl
c3RvclNob3VsZElzb2xhdGVCbGVuZGluZyhjb25zdCBSZW5kZXJFbGVtZW50Jik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhcGhpY3NFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdHcmFwaGljc0VsZW1lbnQuY3BwCmluZGV4IDAzMTYzZTRmMzlmZGNhMWQ1
ZDgxZWM3Nzg3NWZmZDBiMWM4MzQ0YjUuLjQ0YzVhNmU5YjlhM2Y0NDIyYWIyYjY4MDAzZTA2Yzkx
MDc3ZDZjZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFwaGljc0VsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHcmFwaGljc0VsZW1lbnQuY3BwCkBA
IC04MCwxMiArODAsMTAgQEAgQWZmaW5lVHJhbnNmb3JtIFNWR0dyYXBoaWNzRWxlbWVudDo6YW5p
bWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0CiAKICAgICAvLyBIb25vciBhbnkgb2YgdGhlIHRy
YW5zZm9ybS1yZWxhdGVkIENTUyBwcm9wZXJ0aWVzIGlmIHNldC4KICAgICBpZiAoaGFzU3BlY2lm
aWVkVHJhbnNmb3JtIHx8IChzdHlsZSAmJiAoc3R5bGUtPnRyYW5zbGF0ZSgpIHx8IHN0eWxlLT5z
Y2FsZSgpIHx8IHN0eWxlLT5yb3RhdGUoKSkpKSB7Ci0gICAgICAgIGF1dG8gYm91bmRpbmdCb3gg
PSBTVkdSZW5kZXJTdXBwb3J0Ojp0cmFuc2Zvcm1SZWZlcmVuY2VCb3goKnJlbmRlcmVyKCksICp0
aGlzLCAqc3R5bGUpOwotICAgICAgICAKICAgICAgICAgLy8gTm90ZTogb2JqZWN0Qm91bmRpbmdC
b3ggaXMgYW4gZW1wdHlSZWN0IGZvciBlbGVtZW50cyBsaWtlIHBhdHRlcm4gb3IgY2xpcFBhdGgu
CiAgICAgICAgIC8vIFNlZSB0aGUgIk9iamVjdCBib3VuZGluZyBib3ggdW5pdHMiIHNlY3Rpb24g
b2YgaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3NzMy10cmFuc2Zvcm1zLwogICAgICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07Ci0gICAgICAgIHN0eWxlLT5hcHBseVRyYW5zZm9y
bSh0cmFuc2Zvcm0sIGJvdW5kaW5nQm94KTsKKyAgICAgICAgc3R5bGUtPmFwcGx5VHJhbnNmb3Jt
KHRyYW5zZm9ybSwgcmVuZGVyZXIoKS0+dHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdCgpKTsKIAog
ICAgICAgICAvLyBGbGF0dGVuIGFueSAzRCB0cmFuc2Zvcm0uCiAgICAgICAgIG1hdHJpeCA9IHRy
YW5zZm9ybS50b0FmZmluZVRyYW5zZm9ybSgpOwpAQCAtMTAwLDcgKzk4LDcgQEAgQWZmaW5lVHJh
bnNmb3JtIFNWR0dyYXBoaWNzRWxlbWVudDo6YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0
CiAKICAgICAvLyBJZiB3ZSBkaWRuJ3QgaGF2ZSB0aGUgQ1NTICJ0cmFuc2Zvcm0iIHByb3BlcnR5
IHNldCwgd2UgbXVzdCBhY2NvdW50IGZvciB0aGUgInRyYW5zZm9ybSIgYXR0cmlidXRlLgogICAg
IGlmICghaGFzU3BlY2lmaWVkVHJhbnNmb3JtICYmIHN0eWxlKSB7Ci0gICAgICAgIGF1dG8gYm91
bmRpbmdCb3ggPSBTVkdSZW5kZXJTdXBwb3J0Ojp0cmFuc2Zvcm1SZWZlcmVuY2VCb3goKnJlbmRl
cmVyKCksICp0aGlzLCAqc3R5bGUpOworICAgICAgICBhdXRvIGJvdW5kaW5nQm94ID0gcmVuZGVy
ZXIoKS0+dHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdCgpOwogICAgICAgICBhdXRvIHQgPSBmbG9h
dFBvaW50Rm9yTGVuZ3RoUG9pbnQoc3R5bGUtPnRyYW5zZm9ybU9yaWdpblhZKCksIGJvdW5kaW5n
Qm94LnNpemUoKSkgKyBib3VuZGluZ0JveC5sb2NhdGlvbigpOwogICAgICAgICBtYXRyaXgudHJh
bnNsYXRlKHQpOwogICAgICAgICBtYXRyaXggKj0gdHJhbnNmb3JtKCkuY29uY2F0ZW5hdGUoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>456751</attachid>
            <date>2022-04-05 14:57:26 -0700</date>
            <delta_ts>2022-04-06 14:46:22 -0700</delta_ts>
            <desc>Patch, v10</desc>
            <filename>bug-237554-20220405145724.patch</filename>
            <type>text/plain</type>
            <size>27496</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyNDI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGQwMzQ3MTY5Njk0NjRj
ZjI3NmM0NDcwYzFkMDdkNzMyZGE0NmYwMy4uNTdlMGE2NTJmMzAwYzYyMzZlNDJkYjJjMjljMDkw
YjI2YTVhNDU3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDIyLTA0LTA1ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFVuaWZ5
ICd0cmFuc2Zvcm0tYm94JyByZWZlcmVuY2UgYm94IGNvbXB1dGF0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc1NTQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgdGhlIGNvZGUgdG8g
Y29tcHV0ZSB0aGUgcmVmZXJlbmNlIGJveCwgYWNjb3JkaW5nIHRvIHRoZSBDU1MgJ3RyYW5zZm9y
bS1ib3gnCisgICAgICAgIHByb3BlcnR5IGlzIHNwcmlua2xlZCBvdmVyIHZhcmlvdXMgcGxhY2Vz
OiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24sIFNWR1JlbmRlclN1cHBvcnQsCisgICAgICAg
IFJlbmRlckJveCwgcGFydHMgaW4gUmVuZGVyTGF5ZXIuCisKKyAgICAgICAgQ2xlYW51cCBhbmQg
dW5pZnkgdGhlIGNvZGUgaW4gYSBuZXcgJ0Zsb2F0UmVjdCByZWZlcmVuY2VCb3hSZWN0KENTU0Jv
eFR5cGUpIGNvbnN0JyBtZXRob2QuCisgICAgICAgIFJlbmRlckVsZW1lbnQ6OnJlZmVyZW5jZUJv
eFJlY3QoQ1NTQm94VHlwZSkgY29udGFpbnMgdGhlIFNWRyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlv
biwgYW5kCisgICAgICAgIFJlbmRlckJveDo6cmVmZXJlbmNlQm94UmVjdCgpIHRoZSBIVE1ML0NT
UyBvbmUgKHByZXZpb3VzbHkgbmFtZWQgcmVmZXJlbmNlQm94KCkpLgorLgorICAgICAgICBSZW5k
ZXJFbGVtZW50IHByb3ZpZGVzIGFuIGFkZGl0aW9uYWwgdHJhbnNmcm9tUmVmZXJlbmNlQm94UmVj
dCgpIGhlbHBlciB3aGljaCBpcyB1c2VkIGluCisgICAgICAgIHZhcmlvdXMgcGxhY2VzIHRoYXQg
cHJldmlvdXNseSBtYW51YWxseSBjb252ZXJ0ZWQgdGhlIHRyYW5zZm9ybS1ib3ggdmFsdWUgaW50
byBhIENTU0JveFR5cGUuCisKKyAgICAgICAgUmVtb3ZlIGNvZGUgZnJvbSBTVkdSZW5kZXJTdXBw
b3J0L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbiB0aGF0IGNhbiBub3cgdXNlIHRoZSBzaGFy
ZWQgbG9naWMuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cywgbm8gY2hhbmdl
IGluIGJlaGF2aW91ci4KKworICAgICAgICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZWRUcmFuc2Zvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6dmFsdWVGb3JQcm9wZXJ0eUluU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNmb3JtUmVmZXJlbmNlQm94KTogRGVsZXRlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJveDo6cmVmZXJlbmNlQm94UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OmhpdFRlc3RDbGlwUGF0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OnJlZmVyZW5jZUJveCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OnJlZmVyZW5jZUJveFJlY3QgY29uc3QpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJF
bGVtZW50Ojp0cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0IGNvbnN0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJl
ZmVyZW5jZUJveFJlY3RGb3JDbGlwcGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6dXBkYXRlVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpjdXJyZW50VHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpwZXJzcGVjdGl2ZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6cGVyc3BlY3RpdmVPcmlnaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnJlbmRlcmVyTmVlZHNQaXhlbFNuYXBwaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzSWZOZWVkZWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbXB1dGVDbGlwUGF0aCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0dXBDbGlwUGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpjb21wdXRlUmVmZXJlbmNlUmVjdEZyb21Cb3gpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Y29tcHV0ZVJlZmVyZW5jZUJveCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBw
b3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlclN1cHBvcnQ6OnRyYW5zZm9ybVJl
ZmVyZW5jZUJveCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJT
dXBwb3J0Lmg6CisgICAgICAgICogc3ZnL1NWR0dyYXBoaWNzRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdHcmFwaGljc0VsZW1lbnQ6OmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0gY29u
c3QpOgorCiAyMDIyLTA0LTA1ICBBbmRyZXMgR29uemFsZXogIDxhbmRyZXNnXzIyQGFwcGxlLmNv
bT4KIAogICAgICAgICBNYWtlIHN1YnRyZWVzIGNvbGxhcHNpYmxlIGluIHRoZSBvdXRwdXQgb2Yg
dGhlIEFYTG9nZ2VyIHN0cmVhbVN1YnRyZWUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IDE1YzE1ZTZiZGY5ZDE1MmIzZWQ5
YzVjZThhMmMxYmI2NzljYWM4ZjYuLjYwYmNlZDg3NjU3ODFmMzgyNzgyMmJlNDU0ZmFmNTE4YzM1
Y2ZhOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uY3BwCkBAIC01NjEsMTcgKzU2MSw2IEBAIHN0YXRpYyBMYXlvdXRSZWN0IHNpemlu
Z0JveChSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQogICAgIHJldHVybiBib3guc3R5bGUoKS5ib3hT
aXppbmcoKSA9PSBCb3hTaXppbmc6OkJvcmRlckJveCA/IGJveC5ib3JkZXJCb3hSZWN0KCkgOiBi
b3guY29tcHV0ZWRDU1NDb250ZW50Qm94UmVjdCgpOwogfQogCi1zdGF0aWMgRmxvYXRSZWN0IHRy
YW5zZm9ybVJlZmVyZW5jZUJveChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRl
ckVsZW1lbnQmIHJlbmRlcmVyKQotewotICAgIGlmIChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKSkK
LSAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpLnJlZmVyZW5jZUJv
eCh0cmFuc2Zvcm1Cb3hUb0NTU0JveFR5cGUoc3R5bGUudHJhbnNmb3JtQm94KCkpKTsKLQotICAg
IGlmIChpczxTVkdFbGVtZW50PihyZW5kZXJlci5lbGVtZW50KCkpKQotICAgICAgICByZXR1cm4g
U1ZHUmVuZGVyU3VwcG9ydDo6dHJhbnNmb3JtUmVmZXJlbmNlQm94KHJlbmRlcmVyLCBkb3duY2Fz
dDxTVkdFbGVtZW50PigqcmVuZGVyZXIuZWxlbWVudCgpKSwgc3R5bGUpOwotCi0gICAgcmV0dXJu
IHsgfTsKLX0KLQogc3RhdGljIFJlZjxDU1NGdW5jdGlvblZhbHVlPiBtYXRyaXhUcmFuc2Zvcm1W
YWx1ZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUpCiB7CiAgICAgUmVmUHRyPENTU0Z1bmN0aW9uVmFsdWU+IHRyYW5zZm9ybVZh
bHVlOwpAQCAtNjI0LDcgKzYxMyw4IEBAIHN0YXRpYyBSZWY8Q1NTVmFsdWU+IGNvbXB1dGVkVHJh
bnNmb3JtKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsCiAgICAgICAg
IHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZU5vbmUpOwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwotICAg
IHN0eWxlLmFwcGx5VHJhbnNmb3JtKHRyYW5zZm9ybSwgdHJhbnNmb3JtUmVmZXJlbmNlQm94KHN0
eWxlLCAqcmVuZGVyZXIpLCB7IH0pOworICAgIHN0eWxlLmFwcGx5VHJhbnNmb3JtKHRyYW5zZm9y
bSwgcmVuZGVyZXItPnRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3Qoc3R5bGUpLCB7IH0pOworCiAg
ICAgLy8gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgZmxhdHRlbiB0byBhbiBhZmZpbmUgdHJhbnNm
b3JtIGlmIEVOQUJMRSgzRF9UUkFOU0ZPUk1TKSBpcyBvZmYsIGJ5IGRlc2lnbi4KIAogICAgIC8v
IEZJWE1FOiBOZWVkIHRvIHByaW50IG91dCBpbmRpdmlkdWFsIGZ1bmN0aW9ucyAoaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTI0KQpAQCAtMzgwNCw3ICszNzk0LDcg
QEAgUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjp2YWx1ZUZvclByb3Bl
cnR5SW5TdHlsZShjb25zdCBSZW5kZXJTdHkKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVBlcnNw
ZWN0aXZlT3JpZ2luOiB7CiAgICAgICAgICAgICBhdXRvIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNy
ZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIpIHsKLSAgICAg
ICAgICAgICAgICBhdXRvIGJveCA9IHRyYW5zZm9ybVJlZmVyZW5jZUJveChzdHlsZSwgKnJlbmRl
cmVyKTsKKyAgICAgICAgICAgICAgICBhdXRvIGJveCA9IHJlbmRlcmVyLT50cmFuc2Zvcm1SZWZl
cmVuY2VCb3hSZWN0KHN0eWxlKTsKICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFk
anVzdGVkUGl4ZWxWYWx1ZShtaW5pbXVtVmFsdWVGb3JMZW5ndGgoc3R5bGUucGVyc3BlY3RpdmVP
cmlnaW5YKCksIGJveC53aWR0aCgpKSwgc3R5bGUpKTsKICAgICAgICAgICAgICAgICBsaXN0LT5h
cHBlbmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShtaW5pbXVtVmFsdWVGb3JMZW5ndGgoc3R5bGUu
cGVyc3BlY3RpdmVPcmlnaW5ZKCksIGJveC5oZWlnaHQoKSksIHN0eWxlKSk7CiAgICAgICAgICAg
ICB9IGVsc2UgewpAQCAtMzg2MCw3ICszODUwLDcgQEAgUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRl
ZFN0eWxlRXh0cmFjdG9yOjp2YWx1ZUZvclByb3BlcnR5SW5TdHlsZShjb25zdCBSZW5kZXJTdHkK
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVRyYW5zZm9ybU9yaWdpbjogewogICAgICAgICAgICAg
YXV0byBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwogICAgICAg
ICAgICAgaWYgKHJlbmRlcmVyKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBib3ggPSB0cmFuc2Zv
cm1SZWZlcmVuY2VCb3goc3R5bGUsICpyZW5kZXJlcik7CisgICAgICAgICAgICAgICAgYXV0byBi
b3ggPSByZW5kZXJlci0+dHJhbnNmb3JtUmVmZXJlbmNlQm94UmVjdChzdHlsZSk7CiAgICAgICAg
ICAgICAgICAgbGlzdC0+YXBwZW5kKHpvb21BZGp1c3RlZFBpeGVsVmFsdWUobWluaW11bVZhbHVl
Rm9yTGVuZ3RoKHN0eWxlLnRyYW5zZm9ybU9yaWdpblgoKSwgYm94LndpZHRoKCkpLCBzdHlsZSkp
OwogICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZCh6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKG1p
bmltdW1WYWx1ZUZvckxlbmd0aChzdHlsZS50cmFuc2Zvcm1PcmlnaW5ZKCksIGJveC5oZWlnaHQo
KSksIHN0eWxlKSk7CiAgICAgICAgICAgICAgICAgaWYgKHN0eWxlLnRyYW5zZm9ybU9yaWdpbloo
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggMjg1NWQwMzc4Mjgw
MDRlYTdhOTViYjkwYjczZmViM2ZhZmJhOGJiNy4uZGYzZDM1MTMzNDgxMzYzMDQ1NjM2ODkyMzhj
Zjk4ZWFiOTFhMjFkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAg
LTc3MSw5ICs3NzEsOCBAQCBMYXlvdXRQb2ludCBSZW5kZXJCb3g6OmNvbnRlbnRCb3hMb2NhdGlv
bigpIGNvbnN0CiAgICAgcmV0dXJuIHsgYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSArIHNj
cm9sbGJhclNwYWNlLCBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSB9OwogfQogCi1MYXlvdXRS
ZWN0IFJlbmRlckJveDo6cmVmZXJlbmNlQm94KENTU0JveFR5cGUgYm94VHlwZSkgY29uc3QKK0Zs
b2F0UmVjdCBSZW5kZXJCb3g6OnJlZmVyZW5jZUJveFJlY3QoQ1NTQm94VHlwZSBib3hUeXBlKSBj
b25zdAogewotICAgIExheW91dFJlY3QgcmVmZXJlbmNlQm94OwogICAgIHN3aXRjaCAoYm94VHlw
ZSkgewogICAgIGNhc2UgQ1NTQm94VHlwZTo6Q29udGVudEJveDoKICAgICBjYXNlIENTU0JveFR5
cGU6OkZpbGxCb3g6CkBAIC03ODksNiArNzg4LDggQEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6OnJl
ZmVyZW5jZUJveChDU1NCb3hUeXBlIGJveFR5cGUpIGNvbnN0CiAgICAgY2FzZSBDU1NCb3hUeXBl
OjpCb3hNaXNzaW5nOgogICAgICAgICByZXR1cm4gYm9yZGVyQm94UmVjdCgpOwogICAgIH0KKwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiB7IH07CiB9CiAKQEAgLTE0NjUs
NyArMTQ2Niw3IEBAIGJvb2wgUmVuZGVyQm94OjpoaXRUZXN0Q2xpcFBhdGgoY29uc3QgSGl0VGVz
dExvY2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIGNvbnN0IExhCiAgICAgc3dpdGNoIChzdHlsZSgp
LmNsaXBQYXRoKCktPnR5cGUoKSkgewogICAgIGNhc2UgUGF0aE9wZXJhdGlvbjo6U2hhcGU6IHsK
ICAgICAgICAgYXV0byYgY2xpcFBhdGggPSBkb3duY2FzdDxTaGFwZVBhdGhPcGVyYXRpb24+KCpz
dHlsZSgpLmNsaXBQYXRoKCkpOwotICAgICAgICBhdXRvIHJlZmVyZW5jZUJveFJlY3QgPSByZWZl
cmVuY2VCb3goY2xpcFBhdGgucmVmZXJlbmNlQm94KCkpOworICAgICAgICBhdXRvIHJlZmVyZW5j
ZUJveFJlY3QgPSB0aGlzLT5yZWZlcmVuY2VCb3hSZWN0KGNsaXBQYXRoLnJlZmVyZW5jZUJveCgp
KTsKICAgICAgICAgaWYgKCFjbGlwUGF0aC5wYXRoRm9yUmVmZXJlbmNlUmVjdChyZWZlcmVuY2VC
b3hSZWN0KS5jb250YWlucyhoaXRUZXN0TG9jYXRpb25JbkxvY2FsQ29vcmRpbmF0ZXMsIGNsaXBQ
YXRoLndpbmRSdWxlKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVh
azsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAppbmRleCBlZDc3NzcwZTdlNDI5ZDVi
NzYyYzBlYmMyOTFiYWYwMmY0NzAyMzI1Li5jYWM2MTNmZDYxZTFiMDVlYjI3NDE1OWFiZmM5MjVl
ZWYzNTc3NDVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCkBAIC0xNjcsOCAr
MTY3LDggQEAgcHVibGljOgogICAgIExheW91dFJlY3QgY29udGVudEJveFJlY3QoKSBjb25zdDsK
ICAgICBMYXlvdXRQb2ludCBjb250ZW50Qm94TG9jYXRpb24oKSBjb25zdDsKIAotICAgIC8vIC5o
dHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXRyYW5zZm9ybXMtMS8jcmVmZXJlbmNlLWJveAot
ICAgIExheW91dFJlY3QgcmVmZXJlbmNlQm94KENTU0JveFR5cGUpIGNvbnN0OworICAgIC8vIGh0
dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtdHJhbnNmb3Jtcy0xLyNyZWZlcmVuY2UtYm94CisgICAg
RmxvYXRSZWN0IHJlZmVyZW5jZUJveFJlY3QoQ1NTQm94VHlwZSkgY29uc3QgZmluYWw7CiAKICAg
ICAvLyBUaGUgY29udGVudCBib3ggaW4gYWJzb2x1dGUgY29vcmRzLiBJZ25vcmVzIHRyYW5zZm9y
bXMuCiAgICAgSW50UmVjdCBhYnNvbHV0ZUNvbnRlbnRCb3goKSBjb25zdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAppbmRleCBiZjA5NDY5MmQxZjEwMjM1Yzk4
ODFlMzBmMDI2YzUzOTdlM2NiMTc2Li41ODYyODQ1MjMwMDU4M2M1NTRmNDhmYzdmZWRhYjFhNTVi
MjNkMDZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCkBA
IC03OCw2ICs3OCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNWR0Vs
ZW1lbnRUeXBlSGVscGVycy5oIgogI2luY2x1ZGUgIlNWR0ltYWdlLmgiCisjaW5jbHVkZSAiU1ZH
TGVuZ3RoQ29udGV4dC5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKICNpbmNsdWRl
ICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKQEAgLTIzODksNCArMjM5MCwz
OCBAQCBPdmVyZmxvdyBSZW5kZXJFbGVtZW50OjplZmZlY3RpdmVPdmVyZmxvd1koKSBjb25zdAog
ICAgIHJldHVybiBvdmVyZmxvd1k7CiB9CiAKK0Zsb2F0UmVjdCBSZW5kZXJFbGVtZW50OjpyZWZl
cmVuY2VCb3hSZWN0KENTU0JveFR5cGUgYm94VHlwZSkgY29uc3QKK3sKKyAgICAvLyBDU1MgYm94
IG1vZGVsIGNvZGUgaXMgaW1wbGVtZW50ZWQgaW4gUmVuZGVyQm94OjpyZWZlcmVuY2VCb3hSZWN0
KCkuCisKKyAgICAvLyBGb3IgdGhlIGxlZ2FjeSBTVkcgZW5naW5lLCBSZW5kZXJFbGVtZW50IGlz
IHRoZSBvbmx5IGNsYXNzIHRoYXQncworICAgIC8vIHByZXNlbnQgaW4gdGhlIGFuY2VzdG9yIGNo
YWluIG9mIGFsbCBTVkcgcmVuZGVyZXJzLiBJbiBMQlNFIHRoZQorICAgIC8vIGNvbW1vbiBjbGFz
cyBpcyBSZW5kZXJMYXllck1vZGVsT2JqZWN0LiBPbmNlIHRoZSBsZWdhY3kgU1ZHIGVuZ2luZQor
ICAgIC8vIGlzIHJlbW92ZWQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgbW92ZWQgdG8gUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdC4KKyAgICAvLyBBcyB0aGlzIG1ldGhvZCBpcyB1c2VkIGJ5IGJvdGgg
U1ZHIGVuZ2luZXMsIHdlIG5lZWQgdG8gcGxhY2UgaXQKKyAgICAvLyBoZXJlIGluIFJlbmRlckVs
ZW1lbnQsIGFzIHRlbXBvcmFyeSBzb2x1dGlvbi4KKyAgICBpZiAoIWlzPFNWR0VsZW1lbnQ+KGVs
ZW1lbnQoKSkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBzd2l0Y2ggKGJveFR5cGUpIHsK
KyAgICBjYXNlIENTU0JveFR5cGU6OkJveE1pc3Npbmc6CisgICAgY2FzZSBDU1NCb3hUeXBlOjpD
b250ZW50Qm94OgorICAgIGNhc2UgQ1NTQm94VHlwZTo6UGFkZGluZ0JveDoKKyAgICBjYXNlIENT
U0JveFR5cGU6OkZpbGxCb3g6CisgICAgICAgIHJldHVybiBvYmplY3RCb3VuZGluZ0JveCgpOwor
ICAgIGNhc2UgQ1NTQm94VHlwZTo6Qm9yZGVyQm94OgorICAgIGNhc2UgQ1NTQm94VHlwZTo6TWFy
Z2luQm94OgorICAgIGNhc2UgQ1NTQm94VHlwZTo6U3Ryb2tlQm94OgorICAgICAgICByZXR1cm4g
c3Ryb2tlQm91bmRpbmdCb3goKTsKKyAgICBjYXNlIENTU0JveFR5cGU6OlZpZXdCb3g6CisgICAg
ICAgIC8vIEZJWE1FOiBbTEJTRV0gVXBzdHJlYW06IENhY2hlIHRoZSBpbW11dGFibGUgU1ZHTGVu
Z3RoQ29udGV4dCBwZXIgU1ZHRWxlbWVudCwgdG8gYXZvaWQgdGhlIHJlcGVhdGVkIFJlbmRlclNW
R1Jvb3Qgc2l6ZSBxdWVyaWVzIGluIGRldGVybWluZVZpZXdwb3J0KCkuCisgICAgICAgIEZsb2F0
U2l6ZSB2aWV3cG9ydFNpemU7CisgICAgICAgIFNWR0xlbmd0aENvbnRleHQoZG93bmNhc3Q8U1ZH
RWxlbWVudD4oZWxlbWVudCgpKSkuZGV0ZXJtaW5lVmlld3BvcnQodmlld3BvcnRTaXplKTsKKyAg
ICAgICAgcmV0dXJuIHsgeyB9LCB2aWV3cG9ydFNpemUgfTsKKyAgICB9CisKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9OworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckVsZW1lbnQuaAppbmRleCA1MWM1NTJjYmQ5ZTdmZDJiN2NiZTlkMTJkY2Zh
M2YxMzFmZjdkZjFiLi4wNGYzMTM3ODE0OTgwYTcxYTExNDgxMmY0MTY2ZjQyNjk4ZWJkNmM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgKQEAgLTI1OCw2ICsyNTgs
MTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25GaW5pc2hlZChjb25zdCBT
dHJpbmcmIC8qIG5hbWUgKi8pIHsgfQogICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1SZWxhdGVk
UHJvcGVydHlEaWRDaGFuZ2UoKSB7IH0KIAorICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9j
c3MtdHJhbnNmb3Jtcy0xLyN0cmFuc2Zvcm0tYm94CisgICAgRmxvYXRSZWN0IHRyYW5zZm9ybVJl
ZmVyZW5jZUJveFJlY3QoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdCB7IHJldHVybiBy
ZWZlcmVuY2VCb3hSZWN0KHRyYW5zZm9ybUJveFRvQ1NTQm94VHlwZShzdHlsZS50cmFuc2Zvcm1C
b3goKSkpOyB9CisgICAgRmxvYXRSZWN0IHRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3QoKSBjb25z
dCB7IHJldHVybiB0cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KHN0eWxlKCkpOyB9CisKKyAgICAv
LyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXRyYW5zZm9ybXMtMS8jcmVmZXJlbmNlLWJveAor
ICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlZmVyZW5jZUJveFJlY3QoQ1NTQm94VHlwZSkgY29uc3Q7
CisKICAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoTW9ub3RvbmljVGltZSA9IE1v
bm90b25pY1RpbWUoKSkgeyB9CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBhbmlt
YXRlZFN0eWxlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmlu
ZGV4IGExMDYxMGVjMzc4ZDJjMTI4NTYwYTNlNTc3NDc2OTM0ZGNiYmIwMWYuLjJmYzQxMWQ5MWZm
N2VlZWY1N2MxZDk3MGI3ZWNhNDVhMGM5NjAxMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcApAQCAtMTI5NiwyMSArMTI5NiwxOCBAQCB2b2lkIFJlbmRlckxheWVy
OjpkaXJ0eUFuY2VzdG9yQ2hhaW5IYXNCbGVuZGluZ0Rlc2NlbmRhbnRzKCkKIH0KICNlbmRpZgog
Ci1zdGF0aWMgaW5saW5lIExheW91dFJlY3QgY29tcHV0ZVJlZmVyZW5jZVJlY3RGcm9tQm94KGNv
bnN0IFJlbmRlckJveCYgYm94LCBDU1NCb3hUeXBlIGJveFR5cGUsIGNvbnN0IExheW91dFNpemUm
IG9mZnNldEZyb21Sb290KQorRmxvYXRSZWN0IFJlbmRlckxheWVyOjpyZWZlcmVuY2VCb3hSZWN0
Rm9yQ2xpcHBpbmcoQ1NTQm94VHlwZSBib3hUeXBlLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRG
cm9tUm9vdCwgY29uc3QgTGF5b3V0UmVjdCYgcm9vdFJlbGF0aXZlQm91bmRzKSBjb25zdAogewot
ICAgIGF1dG8gcmVmZXJlbmNlQm94ID0gYm94LnJlZmVyZW5jZUJveChib3hUeXBlKTsKLSAgICBy
ZWZlcmVuY2VCb3gubW92ZShvZmZzZXRGcm9tUm9vdCk7Ci0gICAgcmV0dXJuIHJlZmVyZW5jZUJv
eDsKLX0KKyAgICAvLyBGSVhNRTogW0xCU0VdIFVwc3RyZWFtIGNsaXBwaW5nIHN1cHBvcnQgZm9y
IFNWRy4KIAotc3RhdGljIGlubGluZSBMYXlvdXRSZWN0IGNvbXB1dGVSZWZlcmVuY2VCb3goY29u
c3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgQ1NTQm94VHlwZSBib3hUeXBlLCBjb25zdCBMYXlv
dXRTaXplJiBvZmZzZXRGcm9tUm9vdCwgY29uc3QgTGF5b3V0UmVjdCYgcm9vdFJlbGF0aXZlQm91
bmRzKQotewogICAgIC8vIEZJWE1FOiBTdXBwb3J0IGRpZmZlcmVudCByZWZlcmVuY2UgYm94ZXMg
Zm9yIGlubGluZSBjb250ZW50LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjkwNDcKLSAgICBpZiAoIXJlbmRlcmVyLmlzQm94KCkpCisgICAgaWYgKCFy
ZW5kZXJlcigpLmlzQm94KCkpCiAgICAgICAgIHJldHVybiByb290UmVsYXRpdmVCb3VuZHM7Ci0g
ICAgCi0gICAgcmV0dXJuIGNvbXB1dGVSZWZlcmVuY2VSZWN0RnJvbUJveChkb3duY2FzdDxSZW5k
ZXJCb3g+KHJlbmRlcmVyKSwgYm94VHlwZSwgb2Zmc2V0RnJvbVJvb3QpOworCisgICAgYXV0byBy
ZWZlcmVuY2VCb3hSZWN0ID0gcmVuZGVyZXIoKS5yZWZlcmVuY2VCb3hSZWN0KGJveFR5cGUpOwor
ICAgIHJlZmVyZW5jZUJveFJlY3QubW92ZShvZmZzZXRGcm9tUm9vdCk7CisgICAgcmV0dXJuIHJl
ZmVyZW5jZUJveFJlY3Q7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVRyYW5zZm9ybSgp
CkBAIC0xMzMyLDE5ICsxMzI5LDE0IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVRyYW5zZm9y
bSgpCiAgICAgaWYgKGhhc1RyYW5zZm9ybSkgewogICAgICAgICBtX3RyYW5zZm9ybS0+bWFrZUlk
ZW50aXR5KCk7CiAKLSAgICAgICAgLy8gRklYTUU6IFtMQlNFXSBVcHN0cmVhbSByZWZlcmVuY2Ug
Ym94IGNvbXB1dGF0aW9uIGZvciBSZW5kZXJTVkdNb2RlbE9iamVjdCBkZXJpdmVkIHJlbmRlcmVy
cwotICAgICAgICBGbG9hdFJlY3QgcmVmZXJlbmNlQm94OwotICAgICAgICBpZiAoaXM8UmVuZGVy
Qm94PihyZW5kZXJlcigpKSkgewotICAgICAgICAgICAgcmVmZXJlbmNlQm94ID0gc25hcFJlY3RU
b0RldmljZVBpeGVscyhkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLnJlZmVyZW5jZUJv
eCh0cmFuc2Zvcm1Cb3hUb0NTU0JveFR5cGUocmVuZGVyZXIoKS5zdHlsZSgpLnRyYW5zZm9ybUJv
eCgpKSksIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKLSAgICAg
ICAgICAgIGlmIChhdXRvIHBhdGhPcGVyYXRpb24gPSByZW5kZXJlcigpLnN0eWxlKCkub2Zmc2V0
UGF0aCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzPEJveFBhdGhPcGVyYXRpb24+KHBhdGhP
cGVyYXRpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gYm94UGF0aE9wZXJhdGlvbiA9
IGRvd25jYXN0PEJveFBhdGhPcGVyYXRpb24+KHBhdGhPcGVyYXRpb24pOwotICAgICAgICAgICAg
ICAgICAgICBib3hQYXRoT3BlcmF0aW9uLT5zZXRQYXRoRm9yUmVmZXJlbmNlUmVjdChGbG9hdFJv
dW5kZWRSZWN0KHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5k
ZXJlcigpKS5yZWZlcmVuY2VCb3goYm94UGF0aE9wZXJhdGlvbi0+cmVmZXJlbmNlQm94KCkpLCBy
ZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSkpKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChhdXRvIHBhdGhPcGVyYXRpb24gPSBy
ZW5kZXJlcigpLnN0eWxlKCkub2Zmc2V0UGF0aCgpOyBwYXRoT3BlcmF0aW9uICYmIGlzPEJveFBh
dGhPcGVyYXRpb24+KHBhdGhPcGVyYXRpb24pKSB7CisgICAgICAgICAgICBhdXRvJiBib3hQYXRo
T3BlcmF0aW9uID0gZG93bmNhc3Q8Qm94UGF0aE9wZXJhdGlvbj4oKnBhdGhPcGVyYXRpb24pOwor
ICAgICAgICAgICAgYXV0byBwYXRoUmVmZXJlbmNlQm94UmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQ
aXhlbHNJZk5lZWRlZChyZW5kZXJlcigpLnJlZmVyZW5jZUJveFJlY3QoYm94UGF0aE9wZXJhdGlv
bi5yZWZlcmVuY2VCb3goKSkpOworICAgICAgICAgICAgYm94UGF0aE9wZXJhdGlvbi5zZXRQYXRo
Rm9yUmVmZXJlbmNlUmVjdChGbG9hdFJvdW5kZWRSZWN0IHsgcGF0aFJlZmVyZW5jZUJveFJlY3Qg
fSk7CiAgICAgICAgIH0KIAotICAgICAgICByZW5kZXJlcigpLmFwcGx5VHJhbnNmb3JtKCptX3Ry
YW5zZm9ybSwgcmVmZXJlbmNlQm94KTsKKyAgICAgICAgYXV0byByZWZlcmVuY2VCb3hSZWN0ID0g
c25hcFJlY3RUb0RldmljZVBpeGVsc0lmTmVlZGVkKHJlbmRlcmVyKCkudHJhbnNmb3JtUmVmZXJl
bmNlQm94UmVjdChyZW5kZXJlcigpLnN0eWxlKCkpKTsKKyAgICAgICAgcmVuZGVyZXIoKS5hcHBs
eVRyYW5zZm9ybSgqbV90cmFuc2Zvcm0sIHJlZmVyZW5jZUJveFJlY3QpOwogICAgICAgICBtYWtl
TWF0cml4UmVuZGVyYWJsZSgqbV90cmFuc2Zvcm0sIGNhblJlbmRlcjNEVHJhbnNmb3JtcygpKTsK
ICAgICB9CiAKQEAgLTEzNzMsMTEgKzEzNjUsMTAgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXggUmVu
ZGVyTGF5ZXI6OmN1cnJlbnRUcmFuc2Zvcm0oT3B0aW9uU2V0PFJlbmRlclN0eWxlOjpUcmFuc2YK
ICAgICBhdXRvIHN0eWxlYWJsZSA9IFN0eWxlYWJsZTo6ZnJvbVJlbmRlcmVyKHJlbmRlckJveCk7
CiAgICAgaWYgKChzdHlsZWFibGUgJiYgc3R5bGVhYmxlLT5pc1J1bm5pbmdBY2NlbGVyYXRlZFRy
YW5zZm9ybUFuaW1hdGlvbigpKSB8fCAhb3B0aW9ucy5jb250YWlucyhSZW5kZXJTdHlsZTo6VHJh
bnNmb3JtT3BlcmF0aW9uT3B0aW9uOjpUcmFuc2Zvcm1PcmlnaW4pKSB7CiAgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gYW5pbWF0ZWRTdHlsZSA9IHJlbmRlckJveC5hbmltYXRl
ZFN0eWxlKCk7Ci0gICAgICAgIGF1dG8gcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCA9IHNuYXBSZWN0
VG9EZXZpY2VQaXhlbHMocmVuZGVyQm94LnJlZmVyZW5jZUJveCh0cmFuc2Zvcm1Cb3hUb0NTU0Jv
eFR5cGUoYW5pbWF0ZWRTdHlsZS0+dHJhbnNmb3JtQm94KCkpKSwgcmVuZGVyQm94LmRvY3VtZW50
KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgICAgIGF1dG8gcmVmZXJlbmNlQm94UmVjdCA9
IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHNJZk5lZWRlZChyZW5kZXJlcigpLnRyYW5zZm9ybVJlZmVy
ZW5jZUJveFJlY3QoKmFuaW1hdGVkU3R5bGUpKTsKIAogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCB0cmFuc2Zvcm07Ci0gICAgICAgIGFuaW1hdGVkU3R5bGUtPmFwcGx5VHJhbnNmb3JtKHRy
YW5zZm9ybSwgcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCwgb3B0aW9ucyk7Ci0KKyAgICAgICAgYW5p
bWF0ZWRTdHlsZS0+YXBwbHlUcmFuc2Zvcm0odHJhbnNmb3JtLCByZWZlcmVuY2VCb3hSZWN0LCBv
cHRpb25zKTsKICAgICAgICAgbWFrZU1hdHJpeFJlbmRlcmFibGUodHJhbnNmb3JtLCBjYW5SZW5k
ZXIzRFRyYW5zZm9ybXMoKSk7CiAgICAgICAgIHJldHVybiB0cmFuc2Zvcm07CiAgICAgfQpAQCAt
MTgwNywxMiArMTc5OCwxMCBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJMYXllcjo6cGVy
c3BlY3RpdmVUcmFuc2Zvcm0oY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZQogICAgIGlmICghc3R5
bGUuaGFzUGVyc3BlY3RpdmUoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gZGV2
aWNlU2NhbGVGYWN0b3IgPSByZW5kZXJCb3guZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3Rvcigp
OwotICAgIGF1dG8gcmVmZXJlbmNlQm94ID0gcmVuZGVyQm94LnJlZmVyZW5jZUJveCh0cmFuc2Zv
cm1Cb3hUb0NTU0JveFR5cGUoc3R5bGUudHJhbnNmb3JtQm94KCkpKTsKLSAgICBhdXRvIHBpeGVs
U25hcHBlZFJlZmVyZW5jZUJveCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMocmVmZXJlbmNlQm94
LCBkZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAgYXV0byBzbmFwcGVkTGF5ZXJSZWN0ID0gc25hcFJl
Y3RUb0RldmljZVBpeGVscyhsYXllclJlY3QsIGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICBhdXRv
IHJlZmVyZW5jZUJveFJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzSWZOZWVkZWQocmVuZGVy
ZXIoKS50cmFuc2Zvcm1SZWZlcmVuY2VCb3hSZWN0KHN0eWxlKSk7CisgICAgYXV0byBzbmFwcGVk
TGF5ZXJSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVsc0lmTmVlZGVkKGxheWVyUmVjdCk7CiAK
LSAgICBhdXRvIHBlcnNwZWN0aXZlT3JpZ2luID0gcGl4ZWxTbmFwcGVkUmVmZXJlbmNlQm94Lmxv
Y2F0aW9uKCkgLSB0b0Zsb2F0U2l6ZShzbmFwcGVkTGF5ZXJSZWN0LmxvY2F0aW9uKCkpICsgZmxv
YXRQb2ludEZvckxlbmd0aFBvaW50KHN0eWxlLnBlcnNwZWN0aXZlT3JpZ2luKCksIHBpeGVsU25h
cHBlZFJlZmVyZW5jZUJveC5zaXplKCkpOworICAgIGF1dG8gcGVyc3BlY3RpdmVPcmlnaW4gPSBy
ZWZlcmVuY2VCb3hSZWN0LmxvY2F0aW9uKCkgLSB0b0Zsb2F0U2l6ZShzbmFwcGVkTGF5ZXJSZWN0
LmxvY2F0aW9uKCkpICsgZmxvYXRQb2ludEZvckxlbmd0aFBvaW50KHN0eWxlLnBlcnNwZWN0aXZl
T3JpZ2luKCksIHJlZmVyZW5jZUJveFJlY3Quc2l6ZSgpKTsKIAogICAgIC8vIEEgcGVyc3BlY3Rp
dmUgb3JpZ2luIG9mIDAsMCBtYWtlcyB0aGUgdmFuaXNoaW5nIHBvaW50IGluIHRoZSBjZW50ZXIg
b2YgdGhlIGVsZW1lbnQuCiAgICAgLy8gV2Ugd2FudCBpdCB0byBiZSBpbiB0aGUgdG9wLWxlZnQs
IHNvIHN1YnRyYWN0IGhhbGYgdGhlIGhlaWdodCBhbmQgd2lkdGguCkBAIC0xODMwLDYgKzE4MTks
NyBAQCBGbG9hdFBvaW50IFJlbmRlckxheWVyOjpwZXJzcGVjdGl2ZU9yaWdpbigpIGNvbnN0CiB7
CiAgICAgaWYgKCFyZW5kZXJlcigpLmhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSgpKQogICAg
ICAgICByZXR1cm4geyB9OworICAgIC8vIEZJWE1FOiBUaGlzIHVzZXMgdGhlIHdyb25nLCB0cmFu
c2Zvcm0tYm94IHVuYXdhcmUsIGdlb21ldHJ5LgogICAgIHJldHVybiBmbG9hdFBvaW50Rm9yTGVu
Z3RoUG9pbnQocmVuZGVyZXIoKS5zdHlsZSgpLnBlcnNwZWN0aXZlT3JpZ2luKCksIHJlbmRlcmVy
Qm9yZGVyQm94UmVjdCgpLnNpemUoKSk7CiB9CiAKQEAgLTMyMTQsMzUgKzMyMDQsNDMgQEAgYm9v
bCBSZW5kZXJMYXllcjo6c2V0dXBGb250U3VicGl4ZWxRdWFudGl6YXRpb24oR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBib29sJgogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBSZW5kZXJM
YXllcjo6cmVuZGVyZXJOZWVkc1BpeGVsU25hcHBpbmcoKSBjb25zdAoreworI2lmIEVOQUJMRShM
QVlFUl9CQVNFRF9TVkdfRU5HSU5FKQorICAgIGlmIChyZW5kZXJlcigpLmlzU1ZHTGF5ZXJBd2Fy
ZVJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorICAgIHJldHVybiB0
cnVlOworfQorCitGbG9hdFJlY3QgUmVuZGVyTGF5ZXI6OnNuYXBSZWN0VG9EZXZpY2VQaXhlbHNJ
Zk5lZWRlZChjb25zdCBMYXlvdXRSZWN0JiByZWN0KSBjb25zdAoreworICAgIEFTU0VSVChyZW5k
ZXJlck5lZWRzUGl4ZWxTbmFwcGluZygpKTsKKyAgICByZXR1cm4gc25hcFJlY3RUb0RldmljZVBp
eGVscyhyZWN0LCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7Cit9
CisKK0Zsb2F0UmVjdCBSZW5kZXJMYXllcjo6c25hcFJlY3RUb0RldmljZVBpeGVsc0lmTmVlZGVk
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBpZiAoIXJlbmRlcmVyTmVlZHNQ
aXhlbFNuYXBwaW5nKCkpCisgICAgICAgIHJldHVybiByZWN0OworICAgIHJldHVybiBzbmFwUmVj
dFRvRGV2aWNlUGl4ZWxzSWZOZWVkZWQoTGF5b3V0UmVjdCB7IHJlY3QgfSk7Cit9CisKIHN0ZDo6
cGFpcjxQYXRoLCBXaW5kUnVsZT4gUmVuZGVyTGF5ZXI6OmNvbXB1dGVDbGlwUGF0aChjb25zdCBM
YXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdCwgY29uc3QgTGF5b3V0UmVjdCYgcm9vdFJlbGF0aXZl
Qm91bmRzRm9yTm9uQm94ZXMpIGNvbnN0CiB7CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
ID0gcmVuZGVyZXIoKS5zdHlsZSgpOwotICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gcmVu
ZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7CiAKICAgICBpZiAoaXM8U2hh
cGVQYXRoT3BlcmF0aW9uPigqc3R5bGUuY2xpcFBhdGgoKSkpIHsKICAgICAgICAgYXV0byYgY2xp
cFBhdGggPSBkb3duY2FzdDxTaGFwZVBhdGhPcGVyYXRpb24+KCpzdHlsZS5jbGlwUGF0aCgpKTsK
LQotICAgICAgICBMYXlvdXRSZWN0IHJlZmVyZW5jZUJveDsKLSAgICAgICAgaWYgKGlzPFJlbmRl
ckJveD4ocmVuZGVyZXIoKSkpIHsKLSAgICAgICAgICAgIHJlZmVyZW5jZUJveCA9IGRvd25jYXN0
PFJlbmRlckJveD4ocmVuZGVyZXIoKSkucmVmZXJlbmNlQm94KGNsaXBQYXRoLnJlZmVyZW5jZUJv
eCgpKTsKLSAgICAgICAgICAgIHJlZmVyZW5jZUJveC5tb3ZlKG9mZnNldEZyb21Sb290KTsKLSNp
ZiBFTkFCTEUoTEFZRVJfQkFTRURfU1ZHX0VOR0lORSkKLSAgICAgICAgfSBlbHNlIGlmIChpczxS
ZW5kZXJTVkdNb2RlbE9iamVjdD4ocmVuZGVyZXIoKSkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBbTEJTRV0gVXBzdHJlYW0gY2xpcHBpbmcgc3VwcG9ydCBmb3IgUmVuZGVyU1ZHTW9kZWxPYmpl
Y3QgZGVyaXZlZCByZW5kZXJlcnMKLSNlbmRpZgotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgLy8gUmVmZXJlbmNlIGJveCBmb3IgaW5saW5lcyBpcyBub3Qgd2VsbCBkZWZpbmVkOiBodHRw
czovL2dpdGh1Yi5jb20vdzNjL2Nzc3dnLWRyYWZ0cy9pc3N1ZXMvNjM4MwotICAgICAgICAgICAg
cmVmZXJlbmNlQm94ID0gcm9vdFJlbGF0aXZlQm91bmRzRm9yTm9uQm94ZXM7Ci0gICAgICAgIH0K
LQotICAgICAgICBhdXRvIHNuYXBwZWRSZWZlcmVuY2VCb3ggPSBzbmFwUmVjdFRvRGV2aWNlUGl4
ZWxzKHJlZmVyZW5jZUJveCwgZGV2aWNlU2NhbGVGYWN0b3IpOwotICAgICAgICByZXR1cm4geyBj
bGlwUGF0aC5wYXRoRm9yUmVmZXJlbmNlUmVjdChzbmFwcGVkUmVmZXJlbmNlQm94KSwgY2xpcFBh
dGgud2luZFJ1bGUoKSB9OworICAgICAgICBhdXRvIHJlZmVyZW5jZUJveFJlY3QgPSByZWZlcmVu
Y2VCb3hSZWN0Rm9yQ2xpcHBpbmcoY2xpcFBhdGgucmVmZXJlbmNlQm94KCksIG9mZnNldEZyb21S
b290LCByb290UmVsYXRpdmVCb3VuZHNGb3JOb25Cb3hlcyk7CisgICAgICAgIGF1dG8gc25hcHBl
ZFJlZmVyZW5jZUJveFJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzSWZOZWVkZWQocmVmZXJl
bmNlQm94UmVjdCk7CisgICAgICAgIHJldHVybiB7IGNsaXBQYXRoLnBhdGhGb3JSZWZlcmVuY2VS
ZWN0KHNuYXBwZWRSZWZlcmVuY2VCb3hSZWN0KSwgY2xpcFBhdGgud2luZFJ1bGUoKSB9OwogICAg
IH0KIAogICAgIGlmIChpczxCb3hQYXRoT3BlcmF0aW9uPigqc3R5bGUuY2xpcFBhdGgoKSkgJiYg
aXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkgewogICAgICAgICBhdXRvJiBjbGlwUGF0aCA9IGRv
d25jYXN0PEJveFBhdGhPcGVyYXRpb24+KCpzdHlsZS5jbGlwUGF0aCgpKTsKIAotICAgICAgICBh
dXRvIHNoYXBlUmVjdCA9IGNvbXB1dGVSb3VuZGVkUmVjdEZvckJveFNoYXBlKGNsaXBQYXRoLnJl
ZmVyZW5jZUJveCgpLCBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKS5waXhlbFNuYXBw
ZWRSb3VuZGVkUmVjdEZvclBhaW50aW5nKGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICAgICAgYXV0
byBzaGFwZVJlY3QgPSBjb21wdXRlUm91bmRlZFJlY3RGb3JCb3hTaGFwZShjbGlwUGF0aC5yZWZl
cmVuY2VCb3goKSwgZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKSkucGl4ZWxTbmFwcGVk
Um91bmRlZFJlY3RGb3JQYWludGluZyhyZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVG
YWN0b3IoKSk7CiAgICAgICAgIHNoYXBlUmVjdC5tb3ZlKG9mZnNldEZyb21Sb290KTsKIAogICAg
ICAgICByZXR1cm4geyBjbGlwUGF0aC5wYXRoRm9yUmVmZXJlbmNlUmVjdChzaGFwZVJlY3QpLCBX
aW5kUnVsZTo6Tm9uWmVybyB9OwpAQCAtMzI3NywxNyArMzI3NSwxNiBAQCB2b2lkIFJlbmRlckxh
eWVyOjpzZXR1cENsaXBQYXRoKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYQogICAgICAgICBpZiAoYXV0byogY2xpcHBlclJlbmRlcmVyID0gcmVuZGVyZXIo
KS5lbnN1cmVSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzKCkucmVmZXJlbmNlZENsaXBwZXJSZW5kZXJl
cihyZW5kZXJlcigpLmRvY3VtZW50KCksIHJlZmVyZW5jZUNsaXBQYXRoT3BlcmF0aW9uKSkgewog
ICAgICAgICAgICAgLy8gVXNlIHRoZSBib3JkZXIgYm94IGFzIHRoZSByZWZlcmVuY2UgYm94LCBl
dmVuIHRob3VnaCB0aGlzIGlzIG5vdCBjbGVhcmx5IHNwZWNpZmllZDogaHR0cHM6Ly9naXRodWIu
Y29tL3czYy9jc3N3Zy1kcmFmdHMvaXNzdWVzLzU3ODYuCiAgICAgICAgICAgICAvLyBjbGlwcGVk
Q29udGVudEJvdW5kcyBpcyB1c2VkIGFzIHRoZSByZWZlcmVuY2UgYm94IGZvciBpbmxpbmVzLCB3
aGljaCBpcyBhbHNvIHBvb3JseSBzcGVjaWZpZWQ6IGh0dHBzOi8vZ2l0aHViLmNvbS93M2MvY3Nz
d2ctZHJhZnRzL2lzc3Vlcy82MzgzLgotICAgICAgICAgICAgYXV0byByZWZlcmVuY2VCb3ggPSBj
b21wdXRlUmVmZXJlbmNlQm94KHJlbmRlcmVyKCksIENTU0JveFR5cGU6OkJvcmRlckJveCwgb2Zm
c2V0RnJvbVJvb3QsIGNsaXBwZWRDb250ZW50Qm91bmRzKTsKLSAgICAgICAgICAgIGF1dG8gc25h
cHBlZFJlZmVyZW5jZUJveCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMocmVmZXJlbmNlQm94LCBy
ZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgICAgICAgICBh
dXRvIHJlZmVyZW5jZUJveCA9IHJlZmVyZW5jZUJveFJlY3RGb3JDbGlwcGluZyhDU1NCb3hUeXBl
OjpCb3JkZXJCb3gsIG9mZnNldEZyb21Sb290LCBjbGlwcGVkQ29udGVudEJvdW5kcyk7CisgICAg
ICAgICAgICBhdXRvIHNuYXBwZWRSZWZlcmVuY2VCb3ggPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxz
SWZOZWVkZWQocmVmZXJlbmNlQm94KTsKICAgICAgICAgICAgIGF1dG8gb2Zmc2V0ID0gc25hcHBl
ZFJlZmVyZW5jZUJveC5sb2NhdGlvbigpOwogCi0gICAgICAgICAgICBhdXRvIHNuYXBwZWRDbGlw
cGluZ0JvdW5kcyA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoY2xpcHBlZENvbnRlbnRCb3VuZHMs
IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICAgICAgICAg
IGF1dG8gc25hcHBlZENsaXBwaW5nQm91bmRzID0gc25hcFJlY3RUb0RldmljZVBpeGVsc0lmTmVl
ZGVkKGNsaXBwZWRDb250ZW50Qm91bmRzKTsKICAgICAgICAgICAgIHNuYXBwZWRDbGlwcGluZ0Jv
dW5kcy5tb3ZlQnkoLW9mZnNldCk7CiAKICAgICAgICAgICAgIHN0YXRlU2F2ZXIuc2F2ZSgpOwog
ICAgICAgICAgICAgY29udGV4dC50cmFuc2xhdGUob2Zmc2V0KTsKLSAgICAgICAgICAgIEZsb2F0
UmVjdCBjbGlwUGF0aFJlZmVyZW5jZUJveCB7IHsgfSwgcmVmZXJlbmNlQm94LnNpemUoKSB9Owot
ICAgICAgICAgICAgY2xpcHBlclJlbmRlcmVyLT5hcHBseUNsaXBwaW5nVG9Db250ZXh0KGNvbnRl
eHQsIHJlbmRlcmVyKCksIGNsaXBQYXRoUmVmZXJlbmNlQm94LCBzbmFwcGVkQ2xpcHBpbmdCb3Vu
ZHMsIHJlbmRlcmVyKCkuc3R5bGUoKS5lZmZlY3RpdmVab29tKCkpOworICAgICAgICAgICAgY2xp
cHBlclJlbmRlcmVyLT5hcHBseUNsaXBwaW5nVG9Db250ZXh0KGNvbnRleHQsIHJlbmRlcmVyKCks
IHsgeyB9LCByZWZlcmVuY2VCb3guc2l6ZSgpIH0sIHNuYXBwZWRDbGlwcGluZ0JvdW5kcywgcmVu
ZGVyZXIoKS5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgICAgICBjb250ZXh0LnRy
YW5zbGF0ZSgtb2Zmc2V0KTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmgKaW5kZXggYzE4Nzg4M2Y1M2MwZDUxODQwOWViYWI0ZTg5YjFjNWZiOWVk
M2MxYi4uNzJjYWYzZGMzMmNhMmY1YTM3YjllZTYzOWRmZTIzNzU0YTFjMTEyNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTY5OCw2ICs2OTgsOCBAQCBwdWJsaWM6
CiAgICAgV0VCQ09SRV9FWFBPUlQgSW50UmVjdCBhYnNvbHV0ZUJvdW5kaW5nQm94KCkgY29uc3Q7
CiAgICAgLy8gRGV2aWNlIHBpeGVsIHNuYXBwZWQgYm91bmRpbmcgYm94IHJlbGF0aXZlIHRvIHRo
ZSByb290LiBhYnNvbHV0ZUJvdW5kaW5nQm94KCkgY2FsbGVycyB3aWxsIGJlIGRpcmVjdGVkIHRv
IHRoaXMuCiAgICAgRmxvYXRSZWN0IGFic29sdXRlQm91bmRpbmdCb3hGb3JQYWludGluZygpIGNv
bnN0OworICAgIC8vIFJldHVybnMgdGhlICdyZWZlcmVuY2UgYm94JyB1c2VkIGZvciBjbGlwcGlu
ZyBvcGVyYXRpb25zIChkaWZmZXJlbnQgcnVsZXMgZm9yIGlubGluZXMsIHdydC4gdG8gYm94ZXMp
LgorICAgIEZsb2F0UmVjdCByZWZlcmVuY2VCb3hSZWN0Rm9yQ2xpcHBpbmcoQ1NTQm94VHlwZSwg
Y29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3QsIGNvbnN0IExheW91dFJlY3QmIHJvb3RS
ZWxhdGl2ZUJvdW5kcykgY29uc3Q7CiAKICAgICAvLyBCb3VuZHMgdXNlZCBmb3IgbGF5ZXIgb3Zl
cmxhcCB0ZXN0aW5nIGluIFJlbmRlckxheWVyQ29tcG9zaXRvci4KICAgICBMYXlvdXRSZWN0IG92
ZXJsYXBCb3VuZHMoKSBjb25zdDsKQEAgLTkyMCw2ICs5MjIsMTAgQEAgcHJpdmF0ZToKICAgICAg
ICAgcmV0dXJuIHRvTGF5b3V0UG9pbnQoZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSAt
IHJlbmRlcmVyTG9jYXRpb24oKSArIHBhaW50aW5nSW5mby5zdWJwaXhlbE9mZnNldCk7CiAgICAg
fQogCisgICAgYm9vbCByZW5kZXJlck5lZWRzUGl4ZWxTbmFwcGluZygpIGNvbnN0OworICAgIEZs
b2F0UmVjdCBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzSWZOZWVkZWQoY29uc3QgTGF5b3V0UmVjdCYp
IGNvbnN0OworICAgIEZsb2F0UmVjdCBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzSWZOZWVkZWQoY29u
c3QgRmxvYXRSZWN0JikgY29uc3Q7CisKICAgICAvLyBDb21wdXRlLCBjYWNoZSBhbmQgcmV0dXJu
IGNsaXAgcmVjdHMgY29tcHV0ZWQgd2l0aCB0aGUgZ2l2ZW4gbGF5ZXIgYXMgdGhlIHJvb3QuCiAg
ICAgUmVmPENsaXBSZWN0cz4gdXBkYXRlQ2xpcFJlY3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQm
KTsKICAgICAvLyBDb21wdXRlIGFuZCByZXR1cm4gdGhlIGNsaXAgcmVjdHMuIElmIHVzZUNhY2hl
ZCBpcyB0cnVlLCB3aWxsIHVzZWQgcHJldmlvdXNseSBjb21wdXRlZCBjbGlwIHJlY3RzIG9uIGFu
Y2VzdG9ycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5k
ZXJTdXBwb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3Vw
cG9ydC5jcHAKaW5kZXggY2MzOGVjNzAzMGU2MGNlMTc1OWIxMzI4N2RlMjVmNzNkNTY1Yzg1OC4u
ZTJiZWI0YmE4YzExNTdkY2JiMTI4NjQ5YTNlZGU1NmUzODRlOGQwOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCkBAIC0zNDMsMjYg
KzM0Myw2IEBAIGJvb2wgU1ZHUmVuZGVyU3VwcG9ydDo6ZmlsdGVyc0ZvcmNlQ29udGFpbmVyTGF5
b3V0KGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LUZsb2F0UmVjdCBTVkdSZW5kZXJTdXBwb3J0Ojp0cmFuc2Zvcm1SZWZlcmVuY2VCb3goY29uc3Qg
UmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFNWR0VsZW1lbnQmIGVsZW1lbnQsIGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSkKLXsKLSAgICBzd2l0Y2ggKHN0eWxlLnRyYW5zZm9ybUJveCgp
KSB7Ci0gICAgY2FzZSBUcmFuc2Zvcm1Cb3g6OkJvcmRlckJveDoKLSAgICAgICAgLy8gRm9yIFNW
RyBlbGVtZW50cyB3aXRob3V0IGFuIGFzc29jaWF0ZWQgQ1NTIGxheW91dCBib3gsIHRoZSB1c2Vk
IHZhbHVlIGZvciBib3JkZXItYm94IGlzIHN0cm9rZS1ib3guCi0gICAgY2FzZSBUcmFuc2Zvcm1C
b3g6OlN0cm9rZUJveDoKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVyLnN0cm9rZUJvdW5kaW5nQm94
KCk7Ci0gICAgY2FzZSBUcmFuc2Zvcm1Cb3g6OkNvbnRlbnRCb3g6Ci0gICAgICAgIC8vIEZvciBT
VkcgZWxlbWVudHMgd2l0aG91dCBhbiBhc3NvY2lhdGVkIENTUyBsYXlvdXQgYm94LCB0aGUgdXNl
ZCB2YWx1ZSBmb3IgY29udGVudC1ib3ggaXMgZmlsbC1ib3guCi0gICAgY2FzZSBUcmFuc2Zvcm1C
b3g6OkZpbGxCb3g6Ci0gICAgICAgIHJldHVybiByZW5kZXJlci5vYmplY3RCb3VuZGluZ0JveCgp
OwotICAgIGNhc2UgVHJhbnNmb3JtQm94OjpWaWV3Qm94OiB7Ci0gICAgICAgIEZsb2F0U2l6ZSB2
aWV3cG9ydFNpemU7Ci0gICAgICAgIFNWR0xlbmd0aENvbnRleHQoJmVsZW1lbnQpLmRldGVybWlu
ZVZpZXdwb3J0KHZpZXdwb3J0U2l6ZSk7Ci0gICAgICAgIHJldHVybiBGbG9hdFJlY3QgeyB7IH0s
IHZpZXdwb3J0U2l6ZSB9OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB7IH07Ci19Ci0K
IGlubGluZSBGbG9hdFJlY3QgY2xpcFBhdGhSZWZlcmVuY2VCb3goY29uc3QgUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIsIENTU0JveFR5cGUgYm94VHlwZSkKIHsKICAgICBGbG9hdFJlY3QgcmVmZXJl
bmNlQm94OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5k
ZXJTdXBwb3J0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBv
cnQuaAppbmRleCA5Y2NmY2JlYjU3N2E3NzNkYzg4MDdkOTUzOWQ2MmE4MWU1NjE5Yjg5Li5kNDNk
MGM3Zjc1OGQxNWZiNzA0NmM5MWJlMGNhOWRhNTNkZDg1NjAyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuaApAQCAtODIsOCArODIsNiBAQCBw
dWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBzdHlsZUNoYW5nZWQoUmVuZGVyRWxlbWVudCYsIGNv
bnN0IFJlbmRlclN0eWxlKik7CiAgICAgCi0gICAgc3RhdGljIEZsb2F0UmVjdCB0cmFuc2Zvcm1S
ZWZlcmVuY2VCb3goY29uc3QgUmVuZGVyRWxlbWVudCYsIGNvbnN0IFNWR0VsZW1lbnQmLCBjb25z
dCBSZW5kZXJTdHlsZSYpOwotCiAjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKICAgICBzdGF0
aWMgYm9vbCBpc29sYXRlc0JsZW5kaW5nKGNvbnN0IFJlbmRlclN0eWxlJik7CiAgICAgc3RhdGlj
IHZvaWQgdXBkYXRlTWFza2VkQW5jZXN0b3JTaG91bGRJc29sYXRlQmxlbmRpbmcoY29uc3QgUmVu
ZGVyRWxlbWVudCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dyYXBoaWNz
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHR3JhcGhpY3NFbGVtZW50LmNwcApp
bmRleCAwMzE2M2U0ZjM5ZmRjYTFkNWQ4MWVjNzc4NzVmZmQwYjFjODM0NGI1Li40NGM1YTZlOWI5
YTNmNDQyMmFiMmI2ODAwM2UwNmM5MTA3N2Q2Y2Q3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHR3JhcGhpY3NFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
R3JhcGhpY3NFbGVtZW50LmNwcApAQCAtODAsMTIgKzgwLDEwIEBAIEFmZmluZVRyYW5zZm9ybSBT
VkdHcmFwaGljc0VsZW1lbnQ6OmFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSBjb25zdAogCiAgICAg
Ly8gSG9ub3IgYW55IG9mIHRoZSB0cmFuc2Zvcm0tcmVsYXRlZCBDU1MgcHJvcGVydGllcyBpZiBz
ZXQuCiAgICAgaWYgKGhhc1NwZWNpZmllZFRyYW5zZm9ybSB8fCAoc3R5bGUgJiYgKHN0eWxlLT50
cmFuc2xhdGUoKSB8fCBzdHlsZS0+c2NhbGUoKSB8fCBzdHlsZS0+cm90YXRlKCkpKSkgewotICAg
ICAgICBhdXRvIGJvdW5kaW5nQm94ID0gU1ZHUmVuZGVyU3VwcG9ydDo6dHJhbnNmb3JtUmVmZXJl
bmNlQm94KCpyZW5kZXJlcigpLCAqdGhpcywgKnN0eWxlKTsKLSAgICAgICAgCiAgICAgICAgIC8v
IE5vdGU6IG9iamVjdEJvdW5kaW5nQm94IGlzIGFuIGVtcHR5UmVjdCBmb3IgZWxlbWVudHMgbGlr
ZSBwYXR0ZXJuIG9yIGNsaXBQYXRoLgogICAgICAgICAvLyBTZWUgdGhlICJPYmplY3QgYm91bmRp
bmcgYm94IHVuaXRzIiBzZWN0aW9uIG9mIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2NzczMtdHJh
bnNmb3Jtcy8KICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwotICAgICAg
ICBzdHlsZS0+YXBwbHlUcmFuc2Zvcm0odHJhbnNmb3JtLCBib3VuZGluZ0JveCk7CisgICAgICAg
IHN0eWxlLT5hcHBseVRyYW5zZm9ybSh0cmFuc2Zvcm0sIHJlbmRlcmVyKCktPnRyYW5zZm9ybVJl
ZmVyZW5jZUJveFJlY3QoKSk7CiAKICAgICAgICAgLy8gRmxhdHRlbiBhbnkgM0QgdHJhbnNmb3Jt
LgogICAgICAgICBtYXRyaXggPSB0cmFuc2Zvcm0udG9BZmZpbmVUcmFuc2Zvcm0oKTsKQEAgLTEw
MCw3ICs5OCw3IEBAIEFmZmluZVRyYW5zZm9ybSBTVkdHcmFwaGljc0VsZW1lbnQ6OmFuaW1hdGVk
TG9jYWxUcmFuc2Zvcm0oKSBjb25zdAogCiAgICAgLy8gSWYgd2UgZGlkbid0IGhhdmUgdGhlIENT
UyAidHJhbnNmb3JtIiBwcm9wZXJ0eSBzZXQsIHdlIG11c3QgYWNjb3VudCBmb3IgdGhlICJ0cmFu
c2Zvcm0iIGF0dHJpYnV0ZS4KICAgICBpZiAoIWhhc1NwZWNpZmllZFRyYW5zZm9ybSAmJiBzdHls
ZSkgewotICAgICAgICBhdXRvIGJvdW5kaW5nQm94ID0gU1ZHUmVuZGVyU3VwcG9ydDo6dHJhbnNm
b3JtUmVmZXJlbmNlQm94KCpyZW5kZXJlcigpLCAqdGhpcywgKnN0eWxlKTsKKyAgICAgICAgYXV0
byBib3VuZGluZ0JveCA9IHJlbmRlcmVyKCktPnRyYW5zZm9ybVJlZmVyZW5jZUJveFJlY3QoKTsK
ICAgICAgICAgYXV0byB0ID0gZmxvYXRQb2ludEZvckxlbmd0aFBvaW50KHN0eWxlLT50cmFuc2Zv
cm1PcmlnaW5YWSgpLCBib3VuZGluZ0JveC5zaXplKCkpICsgYm91bmRpbmdCb3gubG9jYXRpb24o
KTsKICAgICAgICAgbWF0cml4LnRyYW5zbGF0ZSh0KTsKICAgICAgICAgbWF0cml4ICo9IHRyYW5z
Zm9ybSgpLmNvbmNhdGVuYXRlKCk7Cg==
</data>
<flag name="review"
          id="485154"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>