<?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>228023</bug_id>
          
          <creation_ts>2021-07-16 07:02:35 -0700</creation_ts>
          <short_desc>[css-scroll-snap] Pass the full target point when selecting a snap offset</short_desc>
          <delta_ts>2021-07-22 02:01:19 -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>Scrolling</component>
          <version>Safari Technology Preview</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>227949</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>jamesr</cc>
    
    <cc>luiz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1777502</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-07-16 07:02:35 -0700</bug_when>
    <thetext>When selecting a snap offset, WebKit should pass the full target point to the selection algorithm. This will eventually be used to avoid selecting snap offsets for snap areas that are completely off the screen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1777503</commentid>
    <comment_count>1</comment_count>
      <attachid>433674</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-07-16 07:14:10 -0700</bug_when>
    <thetext>Created attachment 433674
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1777507</commentid>
    <comment_count>2</comment_count>
      <attachid>433676</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-07-16 07:42:50 -0700</bug_when>
    <thetext>Created attachment 433676
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778382</commentid>
    <comment_count>3</comment_count>
      <attachid>433676</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2021-07-21 01:45:36 -0700</bug_when>
    <thetext>Comment on attachment 433676
Patch

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

LGTM

&gt; Source/WebCore/page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.cpp:176
&gt; +        auto offsetY = scrollingNode().snapOffsetsInfo().closestSnapOffset(ScrollEventAxis::Vertical, scrollableAreaSize(), newOffset, deltaY, originalOffset.y()).first;

It seems before this patch we are passing LayoutUnits. Not sure that will change things much, but shouldn&apos;t you continue to pass a LayoutPoint rather than a FloatPoint? If so, the scaling/conversion matter might matter (see setNearestScrollSnapIndexForAxisAndOffset and below).

&gt; Source/WebCore/platform/ScrollAnimator.cpp:408
&gt; +        return axis == ScrollEventAxis::Horizontal ? newOffset.x() : newOffset.y();

This pattern seems to be repeated at several places in this patch. You may consider factoring this out in a helper function.

&gt; Source/WebCore/platform/ScrollAnimator.cpp:417
&gt; +        velocity = axis == ScrollEventAxis::Horizontal ? velocityInBothAxes.width() : velocityInBothAxes.height();

nit: It sounds to me more logical to rename the variables velocity = newOffset - currentOffset; and velocityOnScrollEventAxis = axis == ScrollEventAxis::Horizontal ? velocityInBothAxes.width() : velocityInBothAxes.height();

&gt; Source/WebCore/platform/ScrollController.cpp:139
&gt; +    layoutScrollOffset.scale(1.0 / scaleFactor);

I don&apos;t know if that makes a difference, but it looks like if we want to preserve the current logic this would be

LayoutPoint layoutScrollOffset(scrollOffset.x() / scaleFactor, scrollOffset.y() / scaleFactor)

where the scaling is performed before the conversion to LayoutUnit.

&gt; Source/WebCore/platform/ScrollController.cpp:170
&gt; +    layoutDestinationOffset.scale(1.0 / m_client.pageScaleFactor());

Same here, the scaling was done before the conversion to LayoutUnit in the old code.

&gt; Source/WebCore/platform/ScrollSnapAnimatorState.cpp:51
&gt; +    auto predictedScrollTarget = FloatPoint { m_momentumCalculator-&gt;predictedDestinationOffset() };

Why not just FloatPoint predictedScrollTarget { m_momentumCalculator-&gt;predictedDestinationOffset() }; ?

&gt; Source/WebCore/platform/ScrollSnapAnimatorState.cpp:101
&gt; +    predictedLayoutOffset.scale(1.0 / pageScale);

Same here, previous code was doing the scaling before LayoutUnit conversion. And you still do that at the next line for startOffset.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778440</commentid>
    <comment_count>4</comment_count>
      <attachid>433939</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-07-21 09:23:09 -0700</bug_when>
    <thetext>Created attachment 433939
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778666</commentid>
    <comment_count>5</comment_count>
      <attachid>433676</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2021-07-22 01:43:00 -0700</bug_when>
    <thetext>Comment on attachment 433676
Patch

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

Thanks for the review. I&apos;ve uploaded a new version of the change that addresses the issues you&apos;ve raised. I&apos;ll land that now.

&gt;&gt; Source/WebCore/page/scrolling/nicosia/ScrollingTreeScrollingNodeDelegateNicosia.cpp:176
&gt;&gt; +        auto offsetY = scrollingNode().snapOffsetsInfo().closestSnapOffset(ScrollEventAxis::Vertical, scrollableAreaSize(), newOffset, deltaY, originalOffset.y()).first;
&gt; 
&gt; It seems before this patch we are passing LayoutUnits. Not sure that will change things much, but shouldn&apos;t you continue to pass a LayoutPoint rather than a FloatPoint? If so, the scaling/conversion matter might matter (see setNearestScrollSnapIndexForAxisAndOffset and below).

The ScrollSnapOffsets here are FloatScrollSnapOffsets, so even though the original code was creating a LayoutPoint it was silently converting the components from LayoutUnit to float for the call to closestSnapOffset. The new version removes this trip into LayoutUnits and back to floats.

&gt;&gt; Source/WebCore/platform/ScrollAnimator.cpp:408
&gt;&gt; +        return axis == ScrollEventAxis::Horizontal ? newOffset.x() : newOffset.y();
&gt; 
&gt; This pattern seems to be repeated at several places in this patch. You may consider factoring this out in a helper function.

I did consider this, but ultimately didn&apos;t do it because I couldn&apos;t figure out where this helper would belong.

&gt;&gt; Source/WebCore/platform/ScrollAnimator.cpp:417
&gt;&gt; +        velocity = axis == ScrollEventAxis::Horizontal ? velocityInBothAxes.width() : velocityInBothAxes.height();
&gt; 
&gt; nit: It sounds to me more logical to rename the variables velocity = newOffset - currentOffset; and velocityOnScrollEventAxis = axis == ScrollEventAxis::Horizontal ? velocityInBothAxes.width() : velocityInBothAxes.height();

This makes sense to me. I&apos;ve done this rename.

&gt;&gt; Source/WebCore/platform/ScrollController.cpp:139
&gt;&gt; +    layoutScrollOffset.scale(1.0 / scaleFactor);
&gt; 
&gt; I don&apos;t know if that makes a difference, but it looks like if we want to preserve the current logic this would be
&gt; 
&gt; LayoutPoint layoutScrollOffset(scrollOffset.x() / scaleFactor, scrollOffset.y() / scaleFactor)
&gt; 
&gt; where the scaling is performed before the conversion to LayoutUnit.

Okay. I can keep this more similar to the previous version.

&gt;&gt; Source/WebCore/platform/ScrollController.cpp:170
&gt;&gt; +    layoutDestinationOffset.scale(1.0 / m_client.pageScaleFactor());
&gt; 
&gt; Same here, the scaling was done before the conversion to LayoutUnit in the old code.

Okay. I&apos;ve changed this back.

&gt;&gt; Source/WebCore/platform/ScrollSnapAnimatorState.cpp:51
&gt;&gt; +    auto predictedScrollTarget = FloatPoint { m_momentumCalculator-&gt;predictedDestinationOffset() };
&gt; 
&gt; Why not just FloatPoint predictedScrollTarget { m_momentumCalculator-&gt;predictedDestinationOffset() }; ?

Oh, this is much cleaner. Thanks!

&gt;&gt; Source/WebCore/platform/ScrollSnapAnimatorState.cpp:101
&gt;&gt; +    predictedLayoutOffset.scale(1.0 / pageScale);
&gt; 
&gt; Same here, previous code was doing the scaling before LayoutUnit conversion. And you still do that at the next line for startOffset.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778668</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-07-22 02:00:36 -0700</bug_when>
    <thetext>Committed r280171 (239866@main): &lt;https://commits.webkit.org/239866@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 433939.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778669</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-07-22 02:01:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/80949086&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433674</attachid>
            <date>2021-07-16 07:14:10 -0700</date>
            <delta_ts>2021-07-16 07:52:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228023-20210716161409.patch</filename>
            <type>text/plain</type>
            <size>35441</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5OTgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzgzYjQxZDFjYjgxZDY1
NGFhMDdhNzU0M2UwNGIwNTI4MWQwMTFiNS4uNTljMWRkOTQ0NzAwMDQ3NTliMTBkNmQ2MTdlMzg0
ZTMxZGVkZjY2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDIxLTA3LTE2ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KKworICAgICAgICBbY3NzLXNjcm9s
bC1zbmFwXSBQYXNzIHRoZSBmdWxsIHRhcmdldCBwb2ludCB3aGVuIHNlbGVjdGluZyBhIHNuYXAg
b2Zmc2V0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjgwMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQ
YXNzIHRoZSBmdWxsIHByb3Bvc2VkIGRlc3RpbmF0aW9uIHNjcm9sbCBvZmZzZXQgd2hlbiBjYWxs
aW5nIGNsb3Nlc3RTbmFwT2Zmc2V0LiBGb3IKKyAgICAgICAgbm93LCBvbmx5IHRoZSBjb21wb25l
bnQgaW4gdGhlIHNjcm9sbCBkaXJlY3Rpb24gaXMgdXNlZCwgYnV0IGV2ZW50dWFsbHkgdGhlIG90
aGVyCisgICAgICAgIGNvbXBvbmVudCB3aWxsIGJlIHVzZWQgdG8gYXZvaWQgc25hcHBpbmcgdG8g
c25hcCBhcmVhcyB0aGF0IGFyZSBlbnRpcmVseSBvZmYgdGhlIHNjcmVlbi4KKworICAgICAgICBO
byBuZXcgdGVzdHMuIFRoaXMgY2hhbmdlIGlzIHNpbXBseSBhIHJlZmFjdG9yIGluIHByZXBhcmF0
aW9uIGZvciBhIGJlaGF2aW9yCisgICAgICAgIGNoYW5nZSBhbmQgc2hvdWxkbid0IGNoYW5nZSBi
ZWhhdmlvciBpdHNlbGYuCisKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zm
c2V0c0luZm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2xvc2VzdFNuYXBPZmZzZXRXaXRoSW5m
b0FuZEF4aXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZv
OjpjbG9zZXN0U25hcE9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFNjcm9s
bFNuYXBPZmZzZXRzSW5mbzo6Y2xvc2VzdFNuYXBPZmZzZXQgY29uc3QpOgorICAgICAgICAqIHBh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5oOgorICAgICAgICAqIHBhZ2Uvc2Ny
b2xsaW5nL25pY29zaWEvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU5pY29zaWEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZU5pY29zaWE6OmhhbmRsZVdoZWVsRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFu
aW1hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpzY3JvbGwpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmFkanVzdFNjcm9sbE9mZnNldEZvclNu
YXBwaW5nSWZOZWVkZWQpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxDb250cm9sbGVyOjpzZXROZWFyZXN0U2Nyb2xsU25hcEluZGV4Rm9yQXhpc0FuZE9m
ZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjphZGp1c3RTY3JvbGxE
ZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVB
Y3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JDbGllbnRPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQ29udHJvbGxlcjo6cmVzbmFwQWZ0ZXJMYXlvdXQpOgorICAgICAgICAqIHBsYXRmb3Jt
L1Njcm9sbENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxTbmFwQW5pbWF0
b3JTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZTo6
c2V0dXBBbmltYXRpb25Gb3JTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxTbmFwQW5p
bWF0b3JTdGF0ZTo6dGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZzZXQgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmg6CisgICAgICAgICogcGxhdGZvcm0v
U2Nyb2xsYWJsZUFyZWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmRv
UG9zdFRodW1iTW92ZVNuYXBwaW5nKToKKwogMjAyMS0wNy0xNiAgUGhpbGlwcGUgTm9ybWFuZCAg
PHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dTdHJlYW1lcl0gTGliV2ViUlRDIGZp
bGVzIHNob3VsZCBiZSBpbiBsaWJ3ZWJydGMvZ3N0cmVhbWVyCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDI4Mzk0ZjU2
ODY0NmQ4NGMzMzI1NTAzMzNmZTJlYzJlMjQwNzdjMjEuLjU1MTk0MDgxZTc2ZjM0OTI3YjU2ZDI0
NGI0YTdmNzBjZTE3NTA0OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjEtMDctMTYg
IE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkB3ZWJraXQub3JnPgorCisgICAgICAgIFtjc3Mt
c2Nyb2xsLXNuYXBdIFBhc3MgdGhlIGZ1bGwgdGFyZ2V0IHBvaW50IHdoZW4gc2VsZWN0aW5nIGEg
c25hcCBvZmZzZXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyODAyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
clByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6YWRqdXN0VGFyZ2V0Q29udGVudE9mZnNldEZvclNu
YXBwaW5nKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94
eTo6Y2xvc2VzdFNuYXBPZmZzZXRGb3JNYWluRnJhbWVTY3JvbGxpbmcgY29uc3QpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlRGVsZWdhdGVJT1MubW06CisgICAgICAgICgtW1dLU2Nyb2xsaW5nTm9kZVNjcm9sbFZpZXdE
ZWxlZ2F0ZSBzY3JvbGxWaWV3V2lsbEVuZERyYWdnaW5nOndpdGhWZWxvY2l0eTp0YXJnZXRDb250
ZW50T2Zmc2V0Ol0pOgorCiAyMDIxLTA3LTE2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVtXUEVdIFBTT046IGFjY2Vzc2liaWxpdHkg
ZG9lc24ndCB3b3JrIGFmdGVyIGEgY3Jvc3Mgc2l0ZSBuYXZpZ2F0aW9uCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcApp
bmRleCAzNTMwMjZmZjQ4MzRlM2Y5MWVlY2IxZTliOWQwNzExOWMyZTQ0NzQ1Li5kZWFjOGI3ZDMx
NzUxYzVjMDNlYjgyYTYxN2Q4MTQyOTZkMWUxYTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHAKQEAgLTkwLDkg
KzkwLDEwIEBAIHN0YXRpYyBQb3RlbnRpYWxTbmFwUG9pbnRTZWFyY2hSZXN1bHQ8VW5pdFR5cGU+
IHNlYXJjaEZvclBvdGVudGlhbFNuYXBQb2ludHMoY29uCiAgICAgcmV0dXJuIHsgcHJldmlvdXMs
IG5leHQsIHNuYXBTdG9wLCBsYW5kZWRJbnNpZGVTbmFwQXJlYVRoYXRDb25zdW1lc1ZpZXdwb3J0
IH07CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBJbmZvVHlwZSwgdHlwZW5hbWUgU2l6ZVR5cGUs
IHR5cGVuYW1lIExheW91dFR5cGU+Ci1zdGF0aWMgc3RkOjpwYWlyPExheW91dFR5cGUsIHN0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+PiBjbG9zZXN0U25hcE9mZnNldFdpdGhJbmZvQW5kQXhpcyhjb25z
dCBJbmZvVHlwZSYgaW5mbywgU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGNvbnN0IFNpemVUeXBlJiB2
aWV3cG9ydFNpemUsIExheW91dFR5cGUgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIGZsb2F0IHZl
bG9jaXR5LCBzdGQ6Om9wdGlvbmFsPExheW91dFR5cGU+IG9yaWdpbmFsT2Zmc2V0Rm9yRGlyZWN0
aW9uYWxTbmFwcGluZykKK3RlbXBsYXRlIDx0eXBlbmFtZSBJbmZvVHlwZSwgdHlwZW5hbWUgU2l6
ZVR5cGUsIHR5cGVuYW1lIExheW91dFR5cGUsIHR5cGVuYW1lIFBvaW50VHlwZT4KK3N0YXRpYyBz
dGQ6OnBhaXI8TGF5b3V0VHlwZSwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4+IGNsb3Nlc3RTbmFw
T2Zmc2V0V2l0aEluZm9BbmRBeGlzKGNvbnN0IEluZm9UeXBlJiBpbmZvLCBTY3JvbGxFdmVudEF4
aXMgYXhpcywgY29uc3QgU2l6ZVR5cGUmIHZpZXdwb3J0U2l6ZSwgUG9pbnRUeXBlIHNjcm9sbERl
c3RpbmF0aW9uT2Zmc2V0UG9pbnQsIGZsb2F0IHZlbG9jaXR5LCBzdGQ6Om9wdGlvbmFsPExheW91
dFR5cGU+IG9yaWdpbmFsT2Zmc2V0Rm9yRGlyZWN0aW9uYWxTbmFwcGluZykKIHsKKyAgICBhdXRv
IHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0ID0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsID8g
c2Nyb2xsRGVzdGluYXRpb25PZmZzZXRQb2ludC54KCkgOiBzY3JvbGxEZXN0aW5hdGlvbk9mZnNl
dFBvaW50LnkoKTsKICAgICBjb25zdCBhdXRvJiBzbmFwT2Zmc2V0cyA9IGluZm8ub2Zmc2V0c0Zv
ckF4aXMoYXhpcyk7CiAgICAgYXV0byBwYWlyRm9yTm9TbmFwcGluZyA9IHN0ZDo6bWFrZV9wYWly
KHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBzdGQ6Om51bGxvcHQpOwogICAgIGlmIChzbmFwT2Zm
c2V0cy5pc0VtcHR5KCkpCkBAIC0zODgsMTMgKzM4OSwxMyBAQCBGbG9hdFNjcm9sbFNuYXBPZmZz
ZXRzSW5mbyBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm86OmNvbnZlcnRVbml0cyhmbG9hdCBk
ZXZpYwogfQogCiB0ZW1wbGF0ZSA8PiB0ZW1wbGF0ZSA8Pgotc3RkOjpwYWlyPExheW91dFVuaXQs
IHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+PiBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm86OmNs
b3Nlc3RTbmFwT2Zmc2V0KFNjcm9sbEV2ZW50QXhpcyBheGlzLCBjb25zdCBMYXlvdXRTaXplJiB2
aWV3cG9ydFNpemUsIExheW91dFVuaXQgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIGZsb2F0IHZl
bG9jaXR5LCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IG9yaWdpbmFsUG9zaXRpb25Gb3JEaXJl
Y3Rpb25hbFNuYXBwaW5nKSBjb25zdAorc3RkOjpwYWlyPExheW91dFVuaXQsIHN0ZDo6b3B0aW9u
YWw8dW5zaWduZWQ+PiBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm86OmNsb3Nlc3RTbmFwT2Zm
c2V0KFNjcm9sbEV2ZW50QXhpcyBheGlzLCBjb25zdCBMYXlvdXRTaXplJiB2aWV3cG9ydFNpemUs
IExheW91dFBvaW50IHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBmbG9hdCB2ZWxvY2l0eSwgc3Rk
OjpvcHRpb25hbDxMYXlvdXRVbml0PiBvcmlnaW5hbFBvc2l0aW9uRm9yRGlyZWN0aW9uYWxTbmFw
cGluZykgY29uc3QKIHsKICAgICByZXR1cm4gY2xvc2VzdFNuYXBPZmZzZXRXaXRoSW5mb0FuZEF4
aXMoKnRoaXMsIGF4aXMsIHZpZXdwb3J0U2l6ZSwgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIHZl
bG9jaXR5LCBvcmlnaW5hbFBvc2l0aW9uRm9yRGlyZWN0aW9uYWxTbmFwcGluZyk7CiB9CiAKIHRl
bXBsYXRlIDw+IHRlbXBsYXRlPD4KLXN0ZDo6cGFpcjxmbG9hdCwgc3RkOjpvcHRpb25hbDx1bnNp
Z25lZD4+IEZsb2F0U2Nyb2xsU25hcE9mZnNldHNJbmZvOjpjbG9zZXN0U25hcE9mZnNldChTY3Jv
bGxFdmVudEF4aXMgYXhpcywgY29uc3QgRmxvYXRTaXplJiB2aWV3cG9ydFNpemUsIGZsb2F0IHNj
cm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBmbG9hdCB2ZWxvY2l0eSwgc3RkOjpvcHRpb25hbDxmbG9h
dD4gb3JpZ2luYWxQb3NpdGlvbkZvckRpcmVjdGlvbmFsU25hcHBpbmcpIGNvbnN0CitzdGQ6OnBh
aXI8ZmxvYXQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+PiBGbG9hdFNjcm9sbFNuYXBPZmZzZXRz
SW5mbzo6Y2xvc2VzdFNuYXBPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGNvbnN0IEZsb2F0
U2l6ZSYgdmlld3BvcnRTaXplLCBGbG9hdFBvaW50IHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBm
bG9hdCB2ZWxvY2l0eSwgc3RkOjpvcHRpb25hbDxmbG9hdD4gb3JpZ2luYWxQb3NpdGlvbkZvckRp
cmVjdGlvbmFsU25hcHBpbmcpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNsb3Nlc3RTbmFwT2Zmc2V0
V2l0aEluZm9BbmRBeGlzKCp0aGlzLCBheGlzLCB2aWV3cG9ydFNpemUsIHNjcm9sbERlc3RpbmF0
aW9uT2Zmc2V0LCB2ZWxvY2l0eSwgb3JpZ2luYWxQb3NpdGlvbkZvckRpcmVjdGlvbmFsU25hcHBp
bmcpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
U25hcE9mZnNldHNJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxT
bmFwT2Zmc2V0c0luZm8uaAppbmRleCAwNmI1ODFkZDU0MzM2YWZjY2Y4M2IxNDU4ZGRiMTFhYzIz
ZWZkMjYyLi4xNWMyMjc0YjI3YTA0ZGU4Mzk3NDRjYzJiMzE3ODBlZDMxOWE1YTlmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0lu
Zm8uaApAQCAtNzAsOCArNzAsOCBAQCBzdHJ1Y3QgU2Nyb2xsU25hcE9mZnNldHNJbmZvIHsKICAg
ICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdXRwdXRUeXBlPiBPdXRwdXRUeXBlIGNvbnZl
cnRVbml0cyhmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IDAuMCkgY29uc3Q7Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgU2l6ZVR5cGU+Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPFVuaXRU
eXBlLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPj4gY2xvc2VzdFNuYXBPZmZzZXQoU2Nyb2xsRXZl
bnRBeGlzLCBjb25zdCBTaXplVHlwZSYgdmlld3BvcnRTaXplLCBVbml0VHlwZSBzY3JvbGxEZXN0
aW5hdGlvbk9mZnNldCwgZmxvYXQgdmVsb2NpdHksIHN0ZDo6b3B0aW9uYWw8VW5pdFR5cGU+IG9y
aWdpbmFsUG9zaXRpb25Gb3JEaXJlY3Rpb25hbFNuYXBwaW5nID0gc3RkOjpudWxsb3B0KSBjb25z
dDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTaXplVHlwZSwgdHlwZW5hbWUgUG9pbnRUeXBlPgor
ICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6cGFpcjxVbml0VHlwZSwgc3RkOjpvcHRpb25hbDx1bnNp
Z25lZD4+IGNsb3Nlc3RTbmFwT2Zmc2V0KFNjcm9sbEV2ZW50QXhpcywgY29uc3QgU2l6ZVR5cGUm
IHZpZXdwb3J0U2l6ZSwgUG9pbnRUeXBlIHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBmbG9hdCB2
ZWxvY2l0eSwgc3RkOjpvcHRpb25hbDxVbml0VHlwZT4gb3JpZ2luYWxQb3NpdGlvbkZvckRpcmVj
dGlvbmFsU25hcHBpbmcgPSBzdGQ6Om51bGxvcHQpIGNvbnN0OwogfTsKIAogdXNpbmcgTGF5b3V0
U2Nyb2xsU25hcE9mZnNldHNJbmZvID0gU2Nyb2xsU25hcE9mZnNldHNJbmZvPExheW91dFVuaXQs
IExheW91dFJlY3Q+OwpAQCAtODAsMTMgKzgwLDEzIEBAIHVzaW5nIEZsb2F0U2Nyb2xsU25hcE9m
ZnNldHNJbmZvID0gU2Nyb2xsU25hcE9mZnNldHNJbmZvPGZsb2F0LCBGbG9hdFJlY3Q+OwogdGVt
cGxhdGUgPD4gdGVtcGxhdGUgPD4KIExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbyBGbG9hdFNj
cm9sbFNuYXBPZmZzZXRzSW5mbzo6Y29udmVydFVuaXRzKGZsb2F0IC8qIHVudXNlZFNjYWxlRmFj
dG9yICovKSBjb25zdDsKIHRlbXBsYXRlIDw+IHRlbXBsYXRlIDw+Ci1XRUJDT1JFX0VYUE9SVCBz
dGQ6OnBhaXI8ZmxvYXQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+PiBGbG9hdFNjcm9sbFNuYXBP
ZmZzZXRzSW5mbzo6Y2xvc2VzdFNuYXBPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzLCBjb25zdCBGbG9h
dFNpemUmIHZpZXdwb3J0U2l6ZSwgZmxvYXQgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIGZsb2F0
IHZlbG9jaXR5LCBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBvcmlnaW5hbFBvc2l0aW9uRm9yRGlyZWN0
aW9uYWxTbmFwcGluZykgY29uc3Q7CitXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8ZmxvYXQsIHN0
ZDo6b3B0aW9uYWw8dW5zaWduZWQ+PiBGbG9hdFNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6Y2xvc2Vz
dFNuYXBPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzLCBjb25zdCBGbG9hdFNpemUmIHZpZXdwb3J0U2l6
ZSwgRmxvYXRQb2ludCBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCwgZmxvYXQgdmVsb2NpdHksIHN0
ZDo6b3B0aW9uYWw8ZmxvYXQ+IG9yaWdpbmFsUG9zaXRpb25Gb3JEaXJlY3Rpb25hbFNuYXBwaW5n
KSBjb25zdDsKIAogCiB0ZW1wbGF0ZSA8PiB0ZW1wbGF0ZSA8PgogRmxvYXRTY3JvbGxTbmFwT2Zm
c2V0c0luZm8gTGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvOjpjb252ZXJ0VW5pdHMoZmxvYXQg
ZGV2aWNlU2NhbGVGYWN0b3IpIGNvbnN0OwogdGVtcGxhdGUgPD4gdGVtcGxhdGUgPD4KLVdFQkNP
UkVfRVhQT1JUIHN0ZDo6cGFpcjxMYXlvdXRVbml0LCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPj4g
TGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvOjpjbG9zZXN0U25hcE9mZnNldChTY3JvbGxFdmVu
dEF4aXMsIGNvbnN0IExheW91dFNpemUmIHZpZXdwb3J0U2l6ZSwgTGF5b3V0VW5pdCBzY3JvbGxE
ZXN0aW5hdGlvbk9mZnNldCwgZmxvYXQgdmVsb2NpdHksIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5p
dD4gb3JpZ2luYWxQb3NpdGlvbkZvckRpcmVjdGlvbmFsU25hcHBpbmcpIGNvbnN0OworV0VCQ09S
RV9FWFBPUlQgc3RkOjpwYWlyPExheW91dFVuaXQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+PiBM
YXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm86OmNsb3Nlc3RTbmFwT2Zmc2V0KFNjcm9sbEV2ZW50
QXhpcywgY29uc3QgTGF5b3V0U2l6ZSYgdmlld3BvcnRTaXplLCBMYXlvdXRQb2ludCBzY3JvbGxE
ZXN0aW5hdGlvbk9mZnNldCwgZmxvYXQgdmVsb2NpdHksIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5p
dD4gb3JpZ2luYWxQb3NpdGlvbkZvckRpcmVjdGlvbmFsU25hcHBpbmcpIGNvbnN0OwogCiAvLyBV
cGRhdGUgdGhlIHNuYXAgb2Zmc2V0cyBmb3IgdGhpcyBzY3JvbGxhYmxlIGFyZWEsIGdpdmVuIHRo
ZSBSZW5kZXJCb3ggb2YgdGhlIHNjcm9sbCBjb250YWluZXIsIHRoZSBSZW5kZXJTdHlsZQogLy8g
d2hpY2ggZGVmaW5lcyB0aGUgc2Nyb2xsLXNuYXAgcHJvcGVydGllcywgYW5kIHRoZSB2aWV3cG9y
dCByZWN0YW5nbGUgd2l0aCB0aGUgb3JpZ2luIGF0IHRoZSB0b3AgbGVmdCBvZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbmljb3NpYS9TY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZURlbGVnYXRlTmljb3NpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9uaWNvc2lhL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVOaWNvc2lhLmNw
cAppbmRleCBjNGNlYzkzNTg5M2ViOTI1MWY2YWE5ZGU2ZDI0YjAwZmE2Zjc4YjgwLi42OWViMTEx
NGMxODAyZWE1MTU5ZDg0ZDk4YjdmMzFmZmVhMGNjNTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9uaWNvc2lhL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVOaWNvc2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9uaWNv
c2lhL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVOaWNvc2lhLmNwcApAQCAtMTY5
LDExICsxNjksMTEgQEAgV2hlZWxFdmVudEhhbmRsaW5nUmVzdWx0IFNjcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlRGVsZWdhdGVOaWNvc2lhOjpoYW5kbGVXaGVlbEUKICAgICBpZiAoIXNjcm9sbGlu
Z05vZGUoKS5zbmFwT2Zmc2V0c0luZm8oKS5pc0VtcHR5KCkpIHsKICAgICAgICAgZmxvYXQgc2Nh
bGUgPSBwYWdlU2NhbGVGYWN0b3IoKTsKICAgICAgICAgRmxvYXRQb2ludCBvcmlnaW5hbE9mZnNl
dCA9IExheW91dFBvaW50KHNjcm9sbGluZ05vZGUoKS5jdXJyZW50U2Nyb2xsT2Zmc2V0KCkueCgp
IC8gc2NhbGUsIHNjcm9sbGluZ05vZGUoKS5jdXJyZW50U2Nyb2xsT2Zmc2V0KCkueSgpIC8gc2Nh
bGUpOwotICAgICAgICBGbG9hdFBvaW50IG5ld0Zsb2F0T2Zmc2V0ID0gc2Nyb2xsaW5nTm9kZSgp
LmN1cnJlbnRTY3JvbGxPZmZzZXQoKSArIEZsb2F0U2l6ZShkZWx0YVgsIGRlbHRhWSk7Ci0gICAg
ICAgIGF1dG8gbmV3T2Zmc2V0ID0gTGF5b3V0UG9pbnQobmV3RmxvYXRPZmZzZXQueCgpIC8gc2Nh
bGUsIG5ld0Zsb2F0T2Zmc2V0LnkoKSAvIHNjYWxlKTsKKyAgICAgICAgYXV0byBuZXdPZmZzZXQg
PSAoc2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRTY3JvbGxPZmZzZXQoKSArIEZsb2F0U2l6ZShkZWx0
YVgsIGRlbHRhWSkpOworICAgICAgICBuZXdPZmZzZXQuc2NhbGUoMS4wIC8gc2NhbGUpOwogCi0g
ICAgICAgIGF1dG8gb2Zmc2V0WCA9IHNjcm9sbGluZ05vZGUoKS5zbmFwT2Zmc2V0c0luZm8oKS5j
bG9zZXN0U25hcE9mZnNldChTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIHNjcm9sbGFibGVB
cmVhU2l6ZSgpLCBuZXdPZmZzZXQueCgpLCBkZWx0YVgsIG9yaWdpbmFsT2Zmc2V0LngoKSkuZmly
c3Q7Ci0gICAgICAgIGF1dG8gb2Zmc2V0WSA9IHNjcm9sbGluZ05vZGUoKS5zbmFwT2Zmc2V0c0lu
Zm8oKS5jbG9zZXN0U25hcE9mZnNldChTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBzY3JvbGxh
YmxlQXJlYVNpemUoKSwgbmV3T2Zmc2V0LnkoKSwgZGVsdGFZLCBvcmlnaW5hbE9mZnNldC55KCkp
LmZpcnN0OworICAgICAgICBhdXRvIG9mZnNldFggPSBzY3JvbGxpbmdOb2RlKCkuc25hcE9mZnNl
dHNJbmZvKCkuY2xvc2VzdFNuYXBPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBz
Y3JvbGxhYmxlQXJlYVNpemUoKSwgbmV3T2Zmc2V0LCBkZWx0YVgsIG9yaWdpbmFsT2Zmc2V0Lngo
KSkuZmlyc3Q7CisgICAgICAgIGF1dG8gb2Zmc2V0WSA9IHNjcm9sbGluZ05vZGUoKS5zbmFwT2Zm
c2V0c0luZm8oKS5jbG9zZXN0U25hcE9mZnNldChTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBz
Y3JvbGxhYmxlQXJlYVNpemUoKSwgbmV3T2Zmc2V0LCBkZWx0YVksIG9yaWdpbmFsT2Zmc2V0Lnko
KSkuZmlyc3Q7CiAKICAgICAgICAgZGVsdGFYID0gKG9mZnNldFggLSBvcmlnaW5hbE9mZnNldC54
KCkpICogc2NhbGU7CiAgICAgICAgIGRlbHRhWSA9IChvZmZzZXRZIC0gb3JpZ2luYWxPZmZzZXQu
eSgpKSAqIHNjYWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3Bw
CmluZGV4IDVlODNmZGJhZTI3ZmI4OTg3ZjgwOWE4NTQ5NzU3YWMwNTg2MjM4MGMuLjlmNmE2NzU3
ODU0YWY1NGE2YmYzZmM2NzQxZTlhYmJmMzQ4ZTA1MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKQEAgLTg2LDkgKzg2LDkgQEAgYm9vbCBTY3JvbGxBbmlt
YXRvcjo6c2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFu
dWxhcml0eQogICAgICAgICBhdXRvIGN1cnJlbnRPZmZzZXQgPSBvZmZzZXRGcm9tUG9zaXRpb24o
Y3VycmVudFBvc2l0aW9uKCkpOwogICAgICAgICBhdXRvIG5ld09mZnNldCA9IGN1cnJlbnRPZmZz
ZXQgKyBkZWx0YTsKICAgICAgICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxi
YXIpCi0gICAgICAgICAgICBuZXdPZmZzZXQuc2V0WChtX3Njcm9sbENvbnRyb2xsZXIuYWRqdXN0
U2Nyb2xsRGVzdGluYXRpb24oU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBuZXdPZmZzZXQu
eCgpLCBtdWx0aXBsaWVyLCBjdXJyZW50T2Zmc2V0LngoKSkpOworICAgICAgICAgICAgbmV3T2Zm
c2V0LnNldFgobV9zY3JvbGxDb250cm9sbGVyLmFkanVzdFNjcm9sbERlc3RpbmF0aW9uKFNjcm9s
bEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgbmV3T2Zmc2V0LCBtdWx0aXBsaWVyLCBjdXJyZW50T2Zm
c2V0LngoKSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBuZXdPZmZzZXQuc2V0WShtX3Nj
cm9sbENvbnRyb2xsZXIuYWRqdXN0U2Nyb2xsRGVzdGluYXRpb24oU2Nyb2xsRXZlbnRBeGlzOjpW
ZXJ0aWNhbCwgbmV3T2Zmc2V0LnkoKSwgbXVsdGlwbGllciwgY3VycmVudE9mZnNldC55KCkpKTsK
KyAgICAgICAgICAgIG5ld09mZnNldC5zZXRZKG1fc2Nyb2xsQ29udHJvbGxlci5hZGp1c3RTY3Jv
bGxEZXN0aW5hdGlvbihTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBuZXdPZmZzZXQsIG11bHRp
cGxpZXIsIGN1cnJlbnRPZmZzZXQueSgpKSk7CiAgICAgICAgIGF1dG8gbmV3RGVsdGEgPSBuZXdP
ZmZzZXQgLSBjdXJyZW50T2Zmc2V0OwogCiAgICAgICAgIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jp
em9udGFsU2Nyb2xsYmFyKQpAQCAtMzk3LDIzICszOTcsMjQgQEAgRmxvYXRQb2ludCBTY3JvbGxB
bmltYXRvcjo6YWRqdXN0U2Nyb2xsT2Zmc2V0Rm9yU25hcHBpbmdJZk5lZWRlZChjb25zdCBGbG9h
dFBvaW4KICAgICAgICAgcmV0dXJuIG9mZnNldDsKIAogICAgIEZsb2F0UG9pbnQgbmV3T2Zmc2V0
ID0gb2Zmc2V0OwotICAgIG5ld09mZnNldC5zZXRYKGFkanVzdFNjcm9sbE9mZnNldEZvclNuYXBw
aW5nSWZOZWVkZWQoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBuZXdPZmZzZXQueCgpLCBt
ZXRob2QpKTsKLSAgICBuZXdPZmZzZXQuc2V0WShhZGp1c3RTY3JvbGxPZmZzZXRGb3JTbmFwcGlu
Z0lmTmVlZGVkKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIG5ld09mZnNldC55KCksIG1ldGhv
ZCkpOworICAgIG5ld09mZnNldC5zZXRYKGFkanVzdFNjcm9sbE9mZnNldEZvclNuYXBwaW5nSWZO
ZWVkZWQoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBuZXdPZmZzZXQsIG1ldGhvZCkpOwor
ICAgIG5ld09mZnNldC5zZXRZKGFkanVzdFNjcm9sbE9mZnNldEZvclNuYXBwaW5nSWZOZWVkZWQo
U2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgbmV3T2Zmc2V0LCBtZXRob2QpKTsKICAgICByZXR1
cm4gbmV3T2Zmc2V0OwogfQogCi1mbG9hdCBTY3JvbGxBbmltYXRvcjo6YWRqdXN0U2Nyb2xsT2Zm
c2V0Rm9yU25hcHBpbmdJZk5lZWRlZChTY3JvbGxFdmVudEF4aXMgYXhpcywgZmxvYXQgbmV3T2Zm
c2V0LCBTY3JvbGxTbmFwUG9pbnRTZWxlY3Rpb25NZXRob2QgbWV0aG9kKQorZmxvYXQgU2Nyb2xs
QW5pbWF0b3I6OmFkanVzdFNjcm9sbE9mZnNldEZvclNuYXBwaW5nSWZOZWVkZWQoU2Nyb2xsRXZl
bnRBeGlzIGF4aXMsIGNvbnN0IEZsb2F0UG9pbnQmIG5ld09mZnNldCwgU2Nyb2xsU25hcFBvaW50
U2VsZWN0aW9uTWV0aG9kIG1ldGhvZCkKIHsKICAgICBpZiAoIW1fc2Nyb2xsQ29udHJvbGxlci51
c2VzU2Nyb2xsU25hcCgpKQotICAgICAgICByZXR1cm4gbmV3T2Zmc2V0OworICAgICAgICByZXR1
cm4gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBuZXdPZmZzZXQueCgpIDog
bmV3T2Zmc2V0LnkoKTsKIAogICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IG9yaWdpbmFsT2Zmc2V0
OwogICAgIGZsb2F0IHZlbG9jaXR5ID0gMC47CiAgICAgaWYgKG1ldGhvZCA9PSBTY3JvbGxTbmFw
UG9pbnRTZWxlY3Rpb25NZXRob2Q6OkRpcmVjdGlvbmFsKSB7CiAgICAgICAgIEZsb2F0U2l6ZSBz
Y3JvbGxPcmlnaW4gPSB0b0Zsb2F0U2l6ZShtX3Njcm9sbGFibGVBcmVhLnNjcm9sbE9yaWdpbigp
KTsKICAgICAgICAgYXV0byBjdXJyZW50T2Zmc2V0ID0gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbE9m
ZnNldEZyb21Qb3NpdGlvbih0aGlzLT5jdXJyZW50UG9zaXRpb24oKSwgc2Nyb2xsT3JpZ2luKTsK
KyAgICAgICAgYXV0byB2ZWxvY2l0eUluQm90aEF4ZXMgPSBuZXdPZmZzZXQgLSBjdXJyZW50T2Zm
c2V0OwogICAgICAgICBvcmlnaW5hbE9mZnNldCA9IGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpI
b3Jpem9udGFsID8gY3VycmVudE9mZnNldC54KCkgOiBjdXJyZW50T2Zmc2V0LnkoKTsKLSAgICAg
ICAgdmVsb2NpdHkgPSBuZXdPZmZzZXQgLSAoYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6
b250YWwgPyBjdXJyZW50T2Zmc2V0LngoKSA6IGN1cnJlbnRPZmZzZXQueSgpKTsKKyAgICAgICAg
dmVsb2NpdHkgPSBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IHZlbG9jaXR5
SW5Cb3RoQXhlcy53aWR0aCgpIDogdmVsb2NpdHlJbkJvdGhBeGVzLmhlaWdodCgpOwogICAgIH0K
IAogICAgIHJldHVybiBtX3Njcm9sbENvbnRyb2xsZXIuYWRqdXN0U2Nyb2xsRGVzdGluYXRpb24o
YXhpcywgbmV3T2Zmc2V0LCB2ZWxvY2l0eSwgb3JpZ2luYWxPZmZzZXQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKaW5kZXggZDkyY2ZkYmRmYmIwNWYxZmE5MTM0ZWM2
NTg3NWFmY2I4Y2UxZDc4Yy4uNDNiYzI4NmMwNzE4MDg0MTY3ZmNiMThkMjE3Mzc0ZGMxODQ5NmM5
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCkBAIC0xMzQsNyAr
MTM0LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0V2hlZWxFdmVudFRlc3RNb25pdG9yKFJlZlB0
cjxXaGVlbEV2ZW50VGVzdE1vbml0b3I+JiYgdGVzdE1vbml0b3IpIHsgbV93aGVlbEV2ZW50VGVz
dE1vbml0b3IgPSB0ZXN0TW9uaXRvcjsgfQogCiAgICAgRmxvYXRQb2ludCBhZGp1c3RTY3JvbGxP
ZmZzZXRGb3JTbmFwcGluZ0lmTmVlZGVkKGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNldCwgU2Nyb2xs
U25hcFBvaW50U2VsZWN0aW9uTWV0aG9kKTsKLSAgICBmbG9hdCBhZGp1c3RTY3JvbGxPZmZzZXRG
b3JTbmFwcGluZ0lmTmVlZGVkKFNjcm9sbEV2ZW50QXhpcywgZmxvYXQgbmV3T2Zmc2V0LCBTY3Jv
bGxTbmFwUG9pbnRTZWxlY3Rpb25NZXRob2QpOworICAgIGZsb2F0IGFkanVzdFNjcm9sbE9mZnNl
dEZvclNuYXBwaW5nSWZOZWVkZWQoU2Nyb2xsRXZlbnRBeGlzLCBjb25zdCBGbG9hdFBvaW50JiBu
ZXdPZmZzZXQsIFNjcm9sbFNuYXBQb2ludFNlbGVjdGlvbk1ldGhvZCk7CiAKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8U2Nyb2xsQ29udHJvbGxlclRpbWVyPiBjcmVhdGVUaW1lcihGdW5jdGlvbjx2b2lk
KCk+JiYpIGZpbmFsOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xs
ZXIuY3BwCmluZGV4IGU5Mzc1YmE3NDc2OGJkYjQ3M2JkOGJmMWZmYTQ5YjgxY2Y5OTQzYTkuLjk3
ZGZiNGFhNmRmNzIxYzc1MzFkMzJhY2VjNzY2YzBiMjIxZTkyZTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuY3BwCkBAIC0xMjcsNyArMTI3LDcgQEAgdm9p
ZCBTY3JvbGxDb250cm9sbGVyOjpzZXRBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9s
bEV2ZW50QXhpcyBheGlzLCBzdGQKICAgICBtX3Njcm9sbFNuYXBTdGF0ZS0+c2V0QWN0aXZlU25h
cEluZGV4Rm9yQXhpcyhheGlzLCBpbmRleCk7CiB9CiAKLXZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6
c2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRleEZvckF4aXNBbmRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlz
IGF4aXMsIGludCBvZmZzZXQpCit2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnNldE5lYXJlc3RTY3Jv
bGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0KFNjcm9sbEV2ZW50QXhpcyBheGlzLCBTY3JvbGxP
ZmZzZXQgc2Nyb2xsT2Zmc2V0KQogewogICAgIGlmICghdXNlc1Njcm9sbFNuYXAoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTM1LDExICsxMzUsMTQgQEAgdm9pZCBTY3JvbGxDb250cm9sbGVyOjpz
ZXROZWFyZXN0U2Nyb2xsU25hcEluZGV4Rm9yQXhpc0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXMK
ICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IG1fY2xpZW50LnBhZ2VTY2FsZUZhY3RvcigpOwogICAg
IFNjcm9sbFNuYXBBbmltYXRvclN0YXRlJiBzbmFwU3RhdGUgPSAqbV9zY3JvbGxTbmFwU3RhdGU7
CiAKKyAgICBMYXlvdXRQb2ludCBsYXlvdXRTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KTsKKyAg
ICBsYXlvdXRTY3JvbGxPZmZzZXQuc2NhbGUoMS4wIC8gc2NhbGVGYWN0b3IpOworCiAgICAgYXV0
byBzbmFwT2Zmc2V0cyA9IHNuYXBTdGF0ZS5zbmFwT2Zmc2V0c0ZvckF4aXMoYXhpcyk7CiAgICAg
TGF5b3V0U2l6ZSB2aWV3cG9ydFNpemUobV9jbGllbnQudmlld3BvcnRTaXplKCkud2lkdGgoKSwg
bV9jbGllbnQudmlld3BvcnRTaXplKCkuaGVpZ2h0KCkpOwogICAgIHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+IGFjdGl2ZUluZGV4OwogICAgIGlmIChzbmFwT2Zmc2V0cy5zaXplKCkpCi0gICAgICAg
IGFjdGl2ZUluZGV4ID0gc25hcFN0YXRlLnNuYXBPZmZzZXRJbmZvKCkuY2xvc2VzdFNuYXBPZmZz
ZXQoYXhpcywgdmlld3BvcnRTaXplLCBMYXlvdXRVbml0KG9mZnNldCAvIHNjYWxlRmFjdG9yKSwg
MCkuc2Vjb25kOworICAgICAgICBhY3RpdmVJbmRleCA9IHNuYXBTdGF0ZS5zbmFwT2Zmc2V0SW5m
bygpLmNsb3Nlc3RTbmFwT2Zmc2V0KGF4aXMsIHZpZXdwb3J0U2l6ZSwgbGF5b3V0U2Nyb2xsT2Zm
c2V0LCAwKS5zZWNvbmQ7CiAKICAgICBpZiAoYWN0aXZlSW5kZXggPT0gYWN0aXZlU2Nyb2xsU25h
cEluZGV4Rm9yQXhpcyhheGlzKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQ4LDIxICsxNTEsMjUg
QEAgdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzZXROZWFyZXN0U2Nyb2xsU25hcEluZGV4Rm9yQXhp
c0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXMKICAgICBzZXRBY3RpdmVTY3JvbGxTbmFwSW5kZXhG
b3JBeGlzKGF4aXMsIGFjdGl2ZUluZGV4KTsKIH0KIAotZmxvYXQgU2Nyb2xsQ29udHJvbGxlcjo6
YWRqdXN0U2Nyb2xsRGVzdGluYXRpb24oU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGZsb2F0IGRlc3Rp
bmF0aW9uT2Zmc2V0LCBmbG9hdCB2ZWxvY2l0eSwgc3RkOjpvcHRpb25hbDxmbG9hdD4gb3JpZ2lu
YWxPZmZzZXQpCitmbG9hdCBTY3JvbGxDb250cm9sbGVyOjphZGp1c3RTY3JvbGxEZXN0aW5hdGlv
bihTY3JvbGxFdmVudEF4aXMgYXhpcywgRmxvYXRQb2ludCBkZXN0aW5hdGlvbk9mZnNldCwgZmxv
YXQgdmVsb2NpdHksIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IG9yaWdpbmFsT2Zmc2V0KQogewogICAg
IGlmICghdXNlc1Njcm9sbFNuYXAoKSkKLSAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uT2Zmc2V0
OworICAgICAgICByZXR1cm4gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBk
ZXN0aW5hdGlvbk9mZnNldC54KCkgOiBkZXN0aW5hdGlvbk9mZnNldC55KCk7CiAKICAgICBTY3Jv
bGxTbmFwQW5pbWF0b3JTdGF0ZSYgc25hcFN0YXRlID0gKm1fc2Nyb2xsU25hcFN0YXRlOwogICAg
IGF1dG8gc25hcE9mZnNldHMgPSBzbmFwU3RhdGUuc25hcE9mZnNldHNGb3JBeGlzKGF4aXMpOwog
ICAgIGlmICghc25hcE9mZnNldHMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gZGVzdGluYXRpb25P
ZmZzZXQ7CisgICAgICAgIHJldHVybiBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRh
bCA/IGRlc3RpbmF0aW9uT2Zmc2V0LngoKSA6IGRlc3RpbmF0aW9uT2Zmc2V0LnkoKTsKIAogICAg
IHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gb3JpZ2luYWxPZmZzZXRJbkxheW91dFVuaXRzOwog
ICAgIGlmIChvcmlnaW5hbE9mZnNldCkKICAgICAgICAgb3JpZ2luYWxPZmZzZXRJbkxheW91dFVu
aXRzID0gTGF5b3V0VW5pdCgqb3JpZ2luYWxPZmZzZXQgLyBtX2NsaWVudC5wYWdlU2NhbGVGYWN0
b3IoKSk7CiAgICAgTGF5b3V0U2l6ZSB2aWV3cG9ydFNpemUobV9jbGllbnQudmlld3BvcnRTaXpl
KCkud2lkdGgoKSwgbV9jbGllbnQudmlld3BvcnRTaXplKCkuaGVpZ2h0KCkpOwotICAgIExheW91
dFVuaXQgb2Zmc2V0ID0gc25hcFN0YXRlLnNuYXBPZmZzZXRJbmZvKCkuY2xvc2VzdFNuYXBPZmZz
ZXQoYXhpcywgdmlld3BvcnRTaXplLCBMYXlvdXRVbml0KGRlc3RpbmF0aW9uT2Zmc2V0IC8gbV9j
bGllbnQucGFnZVNjYWxlRmFjdG9yKCkpLCB2ZWxvY2l0eSwgb3JpZ2luYWxPZmZzZXRJbkxheW91
dFVuaXRzKS5maXJzdDsKKworICAgIGF1dG8gbGF5b3V0RGVzdGluYXRpb25PZmZzZXQgPSBMYXlv
dXRQb2ludCB7IGRlc3RpbmF0aW9uT2Zmc2V0IH07CisgICAgbGF5b3V0RGVzdGluYXRpb25PZmZz
ZXQuc2NhbGUoMS4wIC8gbV9jbGllbnQucGFnZVNjYWxlRmFjdG9yKCkpOworCisgICAgTGF5b3V0
VW5pdCBvZmZzZXQgPSBzbmFwU3RhdGUuc25hcE9mZnNldEluZm8oKS5jbG9zZXN0U25hcE9mZnNl
dChheGlzLCB2aWV3cG9ydFNpemUsIGxheW91dERlc3RpbmF0aW9uT2Zmc2V0LCB2ZWxvY2l0eSwg
b3JpZ2luYWxPZmZzZXRJbkxheW91dFVuaXRzKS5maXJzdDsKICAgICByZXR1cm4gb2Zmc2V0ICog
bV9jbGllbnQucGFnZVNjYWxlRmFjdG9yKCk7CiB9CiAKQEAgLTE3Myw4ICsxODAsOCBAQCB2b2lk
IFNjcm9sbENvbnRyb2xsZXI6OnVwZGF0ZUFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckNsaWVudE9m
ZnNldCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIFNjcm9sbE9mZnNldCBvZmZzZXQgPSByb3Vu
ZGVkSW50UG9pbnQobV9jbGllbnQuc2Nyb2xsT2Zmc2V0KCkpOwotICAgIHNldE5lYXJlc3RTY3Jv
bGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwg
b2Zmc2V0LngoKSk7Ci0gICAgc2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRleEZvckF4aXNBbmRPZmZz
ZXQoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgb2Zmc2V0LnkoKSk7CisgICAgc2V0TmVhcmVz
dFNjcm9sbFNuYXBJbmRleEZvckF4aXNBbmRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9u
dGFsLCBvZmZzZXQpOworICAgIHNldE5lYXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zm
c2V0KFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIG9mZnNldCk7CiB9CiAKIHZvaWQgU2Nyb2xs
Q29udHJvbGxlcjo6cmVzbmFwQWZ0ZXJMYXlvdXQoKQpAQCAtMTg4LDExICsxOTUsMTEgQEAgdm9p
ZCBTY3JvbGxDb250cm9sbGVyOjpyZXNuYXBBZnRlckxheW91dCgpCiAKICAgICBhdXRvIGFjdGl2
ZUhvcml6b250YWxJbmRleCA9IG1fc2Nyb2xsU25hcFN0YXRlLT5hY3RpdmVTbmFwSW5kZXhGb3JB
eGlzKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCk7CiAgICAgaWYgKCFhY3RpdmVIb3Jpem9u
dGFsSW5kZXggfHwgKmFjdGl2ZUhvcml6b250YWxJbmRleCA+PSBzbmFwU3RhdGUuc25hcE9mZnNl
dHNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkuc2l6ZSgpKQotICAgICAgICBz
ZXROZWFyZXN0U2Nyb2xsU25hcEluZGV4Rm9yQXhpc0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXM6
Okhvcml6b250YWwsIG9mZnNldC54KCkpOworICAgICAgICBzZXROZWFyZXN0U2Nyb2xsU25hcElu
ZGV4Rm9yQXhpc0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIG9mZnNldCk7
CiAKICAgICBhdXRvIGFjdGl2ZVZlcnRpY2FsSW5kZXggPSBtX3Njcm9sbFNuYXBTdGF0ZS0+YWN0
aXZlU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKTsKICAgICBpZiAo
IWFjdGl2ZVZlcnRpY2FsSW5kZXggfHwgKmFjdGl2ZVZlcnRpY2FsSW5kZXggPj0gc25hcFN0YXRl
LnNuYXBPZmZzZXRzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKS5zaXplKCkpCi0g
ICAgICAgIHNldE5lYXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0KFNjcm9sbEV2
ZW50QXhpczo6VmVydGljYWwsIG9mZnNldC55KCkpOworICAgICAgICBzZXROZWFyZXN0U2Nyb2xs
U25hcEluZGV4Rm9yQXhpc0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBvZmZz
ZXQpOwogCiB9CiAvLyBDdXJyZW50bHksIG9ubHkgTWFjIHN1cHBvcnRzIG1vbWVudHVtIHNyb2xs
aW5nLWJhc2VkIHNjcm9sbHNuYXBwaW5nIGFuZCBydWJiZXIgYmFuZGluZwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5oCmluZGV4IDJiNDc1MWVlYThlNDNlNWQ1ZDVi
MjlmOTMzNDExN2VkZmNiN2NkOGUuLmZmYWQzYjE3MWYyMjA0MGY5OTRjZjgzYjNhMDhkY2U3Yzk3
ZTNhNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xs
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmgKQEAg
LTEzNSw3ICsxMzUsNyBAQCBwdWJsaWM6CiAgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gYWN0
aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMpIGNvbnN0OwogICAgIHZv
aWQgdXBkYXRlU2Nyb2xsU25hcFN0YXRlKGNvbnN0IFNjcm9sbGFibGVBcmVhJik7CiAgICAgdm9p
ZCB1cGRhdGVHZXN0dXJlSW5Qcm9ncmVzc1N0YXRlKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYp
OwotICAgIGZsb2F0IGFkanVzdFNjcm9sbERlc3RpbmF0aW9uKFNjcm9sbEV2ZW50QXhpcywgZmxv
YXQgZGVzdGluYXRpb25PZmZzZXQsIGZsb2F0IHZlbG9jaXR5LCBzdGQ6Om9wdGlvbmFsPGZsb2F0
PiBvcmlnaW5hbE9mZnNldCk7CisgICAgZmxvYXQgYWRqdXN0U2Nyb2xsRGVzdGluYXRpb24oU2Ny
b2xsRXZlbnRBeGlzLCBGbG9hdFBvaW50IGRlc3RpbmF0aW9uT2Zmc2V0LCBmbG9hdCB2ZWxvY2l0
eSwgc3RkOjpvcHRpb25hbDxmbG9hdD4gb3JpZ2luYWxPZmZzZXQpOwogCiAjaWYgUExBVEZPUk0o
TUFDKQogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBoYW5kbGVkLgpAQCAtMTU5LDcgKzE1OSw3IEBA
IHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIHZvaWQgc2V0TmVhcmVzdFNjcm9sbFNu
YXBJbmRleEZvckF4aXNBbmRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzLCBpbnQpOworICAgIHZvaWQg
c2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRleEZvckF4aXNBbmRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlz
LCBTY3JvbGxPZmZzZXQpOwogCiAgICAgdm9pZCB1cGRhdGVTY3JvbGxTbmFwQW5pbWF0aW5nU3Rh
dGUoTW9ub3RvbmljVGltZSk7CiAgICAgdm9pZCB1cGRhdGVSdWJiZXJCYW5kQW5pbWF0aW5nU3Rh
dGUoTW9ub3RvbmljVGltZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxTbmFwQW5pbWF0b3JTdGF0ZS5jcHAKaW5kZXggN2Q0Y2M3M2MyYzFlN2Q1ODdkNWE4YjBhMTIy
NWEyZDdiNjBiNjNkZC4uNzRmZDExZGMxMTg0ODFjODEwNGNmMzM5MDJjOWYxZWMxMGY5YWQ5ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsU25hcEFuaW1hdG9yU3Rh
dGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFNuYXBBbmltYXRvclN0
YXRlLmNwcApAQCAtNDgsMTEgKzQ4LDExIEBAIHZvaWQgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6
OnNldHVwQW5pbWF0aW9uRm9yU3RhdGUoU2Nyb2xsU25hcFN0YXRlIHN0YXRlLCBjb25zCiAgICAg
ICAgIHJldHVybjsKIAogICAgIG1fbW9tZW50dW1DYWxjdWxhdG9yID0gU2Nyb2xsaW5nTW9tZW50
dW1DYWxjdWxhdG9yOjpjcmVhdGUodmlld3BvcnRTaXplLCBjb250ZW50U2l6ZSwgaW5pdGlhbE9m
ZnNldCwgaW5pdGlhbERlbHRhLCBpbml0aWFsVmVsb2NpdHkpOwotICAgIGF1dG8gcHJlZGljdGVk
U2Nyb2xsVGFyZ2V0ID0gbV9tb21lbnR1bUNhbGN1bGF0b3ItPnByZWRpY3RlZERlc3RpbmF0aW9u
T2Zmc2V0KCk7CisgICAgYXV0byBwcmVkaWN0ZWRTY3JvbGxUYXJnZXQgPSBGbG9hdFBvaW50IHsg
bV9tb21lbnR1bUNhbGN1bGF0b3ItPnByZWRpY3RlZERlc3RpbmF0aW9uT2Zmc2V0KCkgfTsKIAog
ICAgIGZsb2F0IHRhcmdldE9mZnNldFgsIHRhcmdldE9mZnNldFk7Ci0gICAgc3RkOjp0aWUodGFy
Z2V0T2Zmc2V0WCwgbV9hY3RpdmVTbmFwSW5kZXhYKSA9IHRhcmdldE9mZnNldEZvclN0YXJ0T2Zm
c2V0KFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgdmlld3BvcnRTaXplLCBjb250ZW50U2l6
ZS53aWR0aCgpIC0gdmlld3BvcnRTaXplLndpZHRoKCksIGluaXRpYWxPZmZzZXQueCgpLCBwcmVk
aWN0ZWRTY3JvbGxUYXJnZXQud2lkdGgoKSwgcGFnZVNjYWxlLCBpbml0aWFsRGVsdGEud2lkdGgo
KSk7Ci0gICAgc3RkOjp0aWUodGFyZ2V0T2Zmc2V0WSwgbV9hY3RpdmVTbmFwSW5kZXhZKSA9IHRh
cmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIHZpZXdw
b3J0U2l6ZSwgY29udGVudFNpemUuaGVpZ2h0KCkgLSB2aWV3cG9ydFNpemUuaGVpZ2h0KCksIGlu
aXRpYWxPZmZzZXQueSgpLCBwcmVkaWN0ZWRTY3JvbGxUYXJnZXQuaGVpZ2h0KCksIHBhZ2VTY2Fs
ZSwgaW5pdGlhbERlbHRhLmhlaWdodCgpKTsKKyAgICBzdGQ6OnRpZSh0YXJnZXRPZmZzZXRYLCBt
X2FjdGl2ZVNuYXBJbmRleFgpID0gdGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZzZXQoU2Nyb2xsRXZl
bnRBeGlzOjpIb3Jpem9udGFsLCB2aWV3cG9ydFNpemUsIGNvbnRlbnRTaXplLndpZHRoKCkgLSB2
aWV3cG9ydFNpemUud2lkdGgoKSwgaW5pdGlhbE9mZnNldC54KCksIHByZWRpY3RlZFNjcm9sbFRh
cmdldCwgcGFnZVNjYWxlLCBpbml0aWFsRGVsdGEud2lkdGgoKSk7CisgICAgc3RkOjp0aWUodGFy
Z2V0T2Zmc2V0WSwgbV9hY3RpdmVTbmFwSW5kZXhZKSA9IHRhcmdldE9mZnNldEZvclN0YXJ0T2Zm
c2V0KFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIHZpZXdwb3J0U2l6ZSwgY29udGVudFNpemUu
aGVpZ2h0KCkgLSB2aWV3cG9ydFNpemUuaGVpZ2h0KCksIGluaXRpYWxPZmZzZXQueSgpLCBwcmVk
aWN0ZWRTY3JvbGxUYXJnZXQsIHBhZ2VTY2FsZSwgaW5pdGlhbERlbHRhLmhlaWdodCgpKTsKICAg
ICBtX21vbWVudHVtQ2FsY3VsYXRvci0+c2V0UmV0YXJnZXRlZFNjcm9sbE9mZnNldCh7IHRhcmdl
dE9mZnNldFgsIHRhcmdldE9mZnNldFkgfSk7CiAgICAgbV9zdGFydFRpbWUgPSBNb25vdG9uaWNU
aW1lOjpub3coKTsKICAgICBtX2N1cnJlbnRTdGF0ZSA9IHN0YXRlOwpAQCAtOTEsMTMgKzkxLDE1
IEBAIEZsb2F0UG9pbnQgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6OmN1cnJlbnRBbmltYXRlZFNj
cm9sbE9mZnNldChNb25vdG9uaWNUaW1lIGN1CiAgICAgcmV0dXJuIG1fbW9tZW50dW1DYWxjdWxh
dG9yLT5zY3JvbGxPZmZzZXRBZnRlckVsYXBzZWRUaW1lKGVsYXBzZWRUaW1lKTsKIH0KIAotc3Rk
OjpwYWlyPGZsb2F0LCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPj4gU2Nyb2xsU25hcEFuaW1hdG9y
U3RhdGU6OnRhcmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0KFNjcm9sbEV2ZW50QXhpcyBheGlzLCBj
b25zdCBGbG9hdFNpemUmIHZpZXdwb3J0U2l6ZSwgZmxvYXQgbWF4U2Nyb2xsT2Zmc2V0LCBmbG9h
dCBzdGFydE9mZnNldCwgZmxvYXQgcHJlZGljdGVkT2Zmc2V0LCBmbG9hdCBwYWdlU2NhbGUsIGZs
b2F0IGluaXRpYWxEZWx0YSkgY29uc3QKK3N0ZDo6cGFpcjxmbG9hdCwgc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4+IFNjcm9sbFNuYXBBbmltYXRvclN0YXRlOjp0YXJnZXRPZmZzZXRGb3JTdGFydE9m
ZnNldChTY3JvbGxFdmVudEF4aXMgYXhpcywgY29uc3QgRmxvYXRTaXplJiB2aWV3cG9ydFNpemUs
IGZsb2F0IG1heFNjcm9sbE9mZnNldCwgZmxvYXQgc3RhcnRPZmZzZXQsIEZsb2F0UG9pbnQgcHJl
ZGljdGVkT2Zmc2V0LCBmbG9hdCBwYWdlU2NhbGUsIGZsb2F0IGluaXRpYWxEZWx0YSkgY29uc3QK
IHsKICAgICBjb25zdCBhdXRvJiBzbmFwT2Zmc2V0cyA9IG1fc25hcE9mZnNldHNJbmZvLm9mZnNl
dHNGb3JBeGlzKGF4aXMpOwogICAgIGlmIChzbmFwT2Zmc2V0cy5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBzdGQ6Om1ha2VfcGFpcihjbGFtcFRvPGZsb2F0PihwcmVkaWN0ZWRPZmZzZXQsIDAs
IG1heFNjcm9sbE9mZnNldCksIHN0ZDo6bnVsbG9wdCk7CisgICAgICAgIHJldHVybiBzdGQ6Om1h
a2VfcGFpcihjbGFtcFRvPGZsb2F0PihheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRh
bCA/IHByZWRpY3RlZE9mZnNldC54KCkgOiBwcmVkaWN0ZWRPZmZzZXQueSgpLCAwLCBtYXhTY3Jv
bGxPZmZzZXQpLCBzdGQ6Om51bGxvcHQpOwogCi0gICAgYXV0byBbdGFyZ2V0T2Zmc2V0LCBzbmFw
SW5kZXhdID0gbV9zbmFwT2Zmc2V0c0luZm8uY2xvc2VzdFNuYXBPZmZzZXQoYXhpcywgTGF5b3V0
U2l6ZSB7IHZpZXdwb3J0U2l6ZSB9LCBMYXlvdXRVbml0KHByZWRpY3RlZE9mZnNldCAvIHBhZ2VT
Y2FsZSksIGluaXRpYWxEZWx0YSwgTGF5b3V0VW5pdChzdGFydE9mZnNldCAvIHBhZ2VTY2FsZSkp
OworICAgIGF1dG8gcHJlZGljdGVkTGF5b3V0T2Zmc2V0ID0gTGF5b3V0UG9pbnQgeyBwcmVkaWN0
ZWRPZmZzZXQgfTsKKyAgICBwcmVkaWN0ZWRMYXlvdXRPZmZzZXQuc2NhbGUoMS4wIC8gcGFnZVNj
YWxlKTsKKyAgICBhdXRvIFt0YXJnZXRPZmZzZXQsIHNuYXBJbmRleF0gPSBtX3NuYXBPZmZzZXRz
SW5mby5jbG9zZXN0U25hcE9mZnNldChheGlzLCBMYXlvdXRTaXplIHsgdmlld3BvcnRTaXplIH0s
IHByZWRpY3RlZExheW91dE9mZnNldCwgaW5pdGlhbERlbHRhLCBMYXlvdXRVbml0KHN0YXJ0T2Zm
c2V0IC8gcGFnZVNjYWxlKSk7CiAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHBhZ2VTY2FsZSAq
IGNsYW1wVG88ZmxvYXQ+KGZsb2F0IHsgdGFyZ2V0T2Zmc2V0IH0sIDAsIG1heFNjcm9sbE9mZnNl
dCksIHNuYXBJbmRleCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxTbmFwQW5pbWF0b3JTdGF0ZS5oCmluZGV4IGMwNzdhZTBmZDU5ODhlZmQ1ZTMwOTdmNGI4Nzc0
NjM1YWZlMDk2NjUuLjY1YTk0ZWQ1ZmQ5ZjYxNDJjMzFiOTEzNGEwM2FjYzdiZDNiODdiNGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUu
aApAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB0cmFuc2l0aW9uVG9EZXN0aW5h
dGlvblJlYWNoZWRTdGF0ZSgpOwogCiBwcml2YXRlOgotICAgIHN0ZDo6cGFpcjxmbG9hdCwgc3Rk
OjpvcHRpb25hbDx1bnNpZ25lZD4+IHRhcmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0KFNjcm9sbEV2
ZW50QXhpcywgY29uc3QgRmxvYXRTaXplJiB2aWV3cG9ydFNpemUsIGZsb2F0IG1heFNjcm9sbE9m
ZnNldCwgZmxvYXQgc3RhcnRPZmZzZXQsIGZsb2F0IHByZWRpY3RlZE9mZnNldCwgZmxvYXQgcGFn
ZVNjYWxlLCBmbG9hdCBpbml0aWFsRGVsdGEpIGNvbnN0OworICAgIHN0ZDo6cGFpcjxmbG9hdCwg
c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4+IHRhcmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0KFNjcm9s
bEV2ZW50QXhpcywgY29uc3QgRmxvYXRTaXplJiB2aWV3cG9ydFNpemUsIGZsb2F0IG1heFNjcm9s
bE9mZnNldCwgZmxvYXQgc3RhcnRPZmZzZXQsIEZsb2F0UG9pbnQgcHJlZGljdGVkT2Zmc2V0LCBm
bG9hdCBwYWdlU2NhbGUsIGZsb2F0IGluaXRpYWxEZWx0YSkgY29uc3Q7CiAgICAgdm9pZCB0ZWFy
ZG93bkFuaW1hdGlvbkZvclN0YXRlKFNjcm9sbFNuYXBTdGF0ZSk7CiAgICAgdm9pZCBzZXR1cEFu
aW1hdGlvbkZvclN0YXRlKFNjcm9sbFNuYXBTdGF0ZSwgY29uc3QgRmxvYXRTaXplJiBjb250ZW50
U2l6ZSwgY29uc3QgRmxvYXRTaXplJiB2aWV3cG9ydFNpemUsIGZsb2F0IHBhZ2VTY2FsZSwgY29u
c3QgRmxvYXRQb2ludCYgaW5pdGlhbE9mZnNldCwgY29uc3QgRmxvYXRTaXplJiBpbml0aWFsVmVs
b2NpdHksIGNvbnN0IEZsb2F0U2l6ZSYgaW5pdGlhbERlbHRhKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCmluZGV4IDAyYzBlNjlhNDBhNGNkZDJjN2MwYzAz
ODM0YTMwY2UwZmM5M2JhN2IuLjk2N2UxMzI2YWJlNWIzMDBhNzI3NmI0NGViOTg0YjE3OWFiNDM1
NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAKQEAgLTU2
Myw5ICs1NjMsOSBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjpkb1Bvc3RUaHVtYk1vdmVTbmFwcGlu
ZyhTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKICAgICBhdXRvIGN1cnJlbnRPZmZz
ZXQgPSBzY3JvbGxPZmZzZXQoKTsKICAgICBhdXRvIG5ld09mZnNldCA9IGN1cnJlbnRPZmZzZXQ7
CiAgICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgIG5l
d09mZnNldC5zZXRYKHNjcm9sbEFuaW1hdG9yLT5hZGp1c3RTY3JvbGxPZmZzZXRGb3JTbmFwcGlu
Z0lmTmVlZGVkKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgY3VycmVudE9mZnNldC54KCks
IFNjcm9sbFNuYXBQb2ludFNlbGVjdGlvbk1ldGhvZDo6Q2xvc2VzdCkpOworICAgICAgICBuZXdP
ZmZzZXQuc2V0WChzY3JvbGxBbmltYXRvci0+YWRqdXN0U2Nyb2xsT2Zmc2V0Rm9yU25hcHBpbmdJ
Zk5lZWRlZChTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIGN1cnJlbnRPZmZzZXQsIFNjcm9s
bFNuYXBQb2ludFNlbGVjdGlvbk1ldGhvZDo6Q2xvc2VzdCkpOwogICAgIGVsc2UKLSAgICAgICAg
bmV3T2Zmc2V0LnNldFkoc2Nyb2xsQW5pbWF0b3ItPmFkanVzdFNjcm9sbE9mZnNldEZvclNuYXBw
aW5nSWZOZWVkZWQoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgY3VycmVudE9mZnNldC55KCks
IFNjcm9sbFNuYXBQb2ludFNlbGVjdGlvbk1ldGhvZDo6Q2xvc2VzdCkpOworICAgICAgICBuZXdP
ZmZzZXQuc2V0WShzY3JvbGxBbmltYXRvci0+YWRqdXN0U2Nyb2xsT2Zmc2V0Rm9yU25hcHBpbmdJ
Zk5lZWRlZChTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBjdXJyZW50T2Zmc2V0LCBTY3JvbGxT
bmFwUG9pbnRTZWxlY3Rpb25NZXRob2Q6OkNsb3Nlc3QpKTsKICAgICBpZiAobmV3T2Zmc2V0ID09
IGN1cnJlbnRPZmZzZXQpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvclByb3h5LmgKaW5kZXggMDBkMGQ0YWY4M2EzM2FlNzU5M2E3NDJk
NDc3NmNjNzY2MGE3NTc1NC4uZDJjN2JlNjgyODM0YTVkZTYwNjU2YWJkYmFkNWI5N2NiOGM1MTM4
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1Jl
bW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oCkBA
IC0xMTgsNyArMTE4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGVzdGFibGlzaExheWVyVHJlZVNj
cm9sbGluZ1JlbGF0aW9ucyhjb25zdCBSZW1vdGVMYXllclRyZWVIb3N0Jik7CiAKICAgICBib29s
IHNob3VsZFNuYXBGb3JNYWluRnJhbWVTY3JvbGxpbmcoV2ViQ29yZTo6U2Nyb2xsRXZlbnRBeGlz
KSBjb25zdDsKLSAgICBzdGQ6OnBhaXI8ZmxvYXQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+PiBj
bG9zZXN0U25hcE9mZnNldEZvck1haW5GcmFtZVNjcm9sbGluZyhXZWJDb3JlOjpTY3JvbGxFdmVu
dEF4aXMsIGZsb2F0IGN1cnJlbnRTY3JvbGxPZmZzZXQsIGZsb2F0IHNjcm9sbERlc3RpbmF0aW9u
LCBmbG9hdCB2ZWxvY2l0eSkgY29uc3Q7CisgICAgc3RkOjpwYWlyPGZsb2F0LCBzdGQ6Om9wdGlv
bmFsPHVuc2lnbmVkPj4gY2xvc2VzdFNuYXBPZmZzZXRGb3JNYWluRnJhbWVTY3JvbGxpbmcoV2Vi
Q29yZTo6U2Nyb2xsRXZlbnRBeGlzLCBmbG9hdCBjdXJyZW50U2Nyb2xsT2Zmc2V0LCBXZWJDb3Jl
OjpGbG9hdFBvaW50IHNjcm9sbERlc3RpbmF0aW9uLCBmbG9hdCB2ZWxvY2l0eSkgY29uc3Q7CiAK
ICAgICB2b2lkIHNlbmRVSVN0YXRlQ2hhbmdlZElmTmVjZXNzYXJ5KCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvUmVtb3RlU2Nyb2xs
aW5nQ29vcmRpbmF0b3JQcm94eUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90
ZUxheWVyVHJlZS9pb3MvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eUlPUy5tbQppbmRl
eCBmYjY0ZWVjM2ExN2RlMmM2NDhlODA0OGY3NGQwZTNiNjQ0NDVjOTgwLi5lNTZmOGYyYWZiOTM1
Njk0YzgxZWExMGYzYWIzY2VjNTdmOTBkYzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJv
eHlJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lv
cy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5SU9TLm1tCkBAIC0xOTcsMTQgKzE5Nywx
NCBAQCB2b2lkIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OmFkanVzdFRhcmdldENv
bnRlbnRPZmZzZXRGb3JTbmFwcGluZyhDR1NpegogICAgIC8vIFRoZSBib3VuZHMgY2hlY2tpbmcg
d2l0aCBtYXhTY3JvbGxPZmZzZXRzIGlzIHRvIGVuc3VyZSB0aGF0IHdlIHdvbid0IGludGVyZmVy
ZSB3aXRoIHJ1YmJlci1iYW5kaW5nIHdoZW4gc2Nyb2xsaW5nIHRvIHRoZSBlZGdlIG9mIHRoZSBw
YWdlLgogICAgIGlmIChzaG91bGRTbmFwRm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFdlYkNvcmU6OlNj
cm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkpIHsKICAgICAgICAgZmxvYXQgcG90ZW50aWFsU25h
cFBvc2l0aW9uOwotICAgICAgICBzdGQ6OnRpZShwb3RlbnRpYWxTbmFwUG9zaXRpb24sIG1fY3Vy
cmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCkgPSBjbG9zZXN0U25hcE9mZnNldEZvck1haW5G
cmFtZVNjcm9sbGluZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIGN1cnJl
bnRDb250ZW50T2Zmc2V0LngsIHRhcmdldENvbnRlbnRPZmZzZXQtPngsIHZlbG9jaXR5LngpOwor
ICAgICAgICBzdGQ6OnRpZShwb3RlbnRpYWxTbmFwUG9zaXRpb24sIG1fY3VycmVudEhvcml6b250
YWxTbmFwUG9pbnRJbmRleCkgPSBjbG9zZXN0U25hcE9mZnNldEZvck1haW5GcmFtZVNjcm9sbGlu
ZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIGN1cnJlbnRDb250ZW50T2Zm
c2V0LngsIEZsb2F0UG9pbnQoKnRhcmdldENvbnRlbnRPZmZzZXQpLCB2ZWxvY2l0eS54KTsKICAg
ICAgICAgaWYgKHRhcmdldENvbnRlbnRPZmZzZXQtPnggPiAwICYmIHRhcmdldENvbnRlbnRPZmZz
ZXQtPnggPCBtYXhTY3JvbGxPZmZzZXRzLndpZHRoKQogICAgICAgICAgICAgdGFyZ2V0Q29udGVu
dE9mZnNldC0+eCA9IHN0ZDo6bWluPGZsb2F0PihtYXhTY3JvbGxPZmZzZXRzLndpZHRoLCBwb3Rl
bnRpYWxTbmFwUG9zaXRpb24pOwogICAgIH0KIAogICAgIGlmIChzaG91bGRTbmFwRm9yTWFpbkZy
YW1lU2Nyb2xsaW5nKFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpKSB7CiAgICAg
ICAgIGZsb2F0IHBvdGVudGlhbFNuYXBQb3NpdGlvbjsKLSAgICAgICAgc3RkOjp0aWUocG90ZW50
aWFsU25hcFBvc2l0aW9uLCBtX2N1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KSA9IGNsb3Nl
c3RTbmFwT2Zmc2V0Rm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhp
czo6VmVydGljYWwsIGN1cnJlbnRDb250ZW50T2Zmc2V0LnkgKyB0b3BJbnNldCwgdGFyZ2V0Q29u
dGVudE9mZnNldC0+eSwgdmVsb2NpdHkueSk7CisgICAgICAgIHN0ZDo6dGllKHBvdGVudGlhbFNu
YXBQb3NpdGlvbiwgbV9jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCkgPSBjbG9zZXN0U25h
cE9mZnNldEZvck1haW5GcmFtZVNjcm9sbGluZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6OlZl
cnRpY2FsLCBjdXJyZW50Q29udGVudE9mZnNldC55ICsgdG9wSW5zZXQsIEZsb2F0UG9pbnQoKnRh
cmdldENvbnRlbnRPZmZzZXQpLCB2ZWxvY2l0eS55KTsKICAgICAgICAgaWYgKG1fY3VycmVudFZl
cnRpY2FsU25hcFBvaW50SW5kZXgpCiAgICAgICAgICAgICBwb3RlbnRpYWxTbmFwUG9zaXRpb24g
LT0gdG9wSW5zZXQ7CiAKQEAgLTIyOCwxNiArMjI4LDE2IEBAIGJvb2wgUmVtb3RlU2Nyb2xsaW5n
Q29vcmRpbmF0b3JQcm94eTo6c2hvdWxkU25hcEZvck1haW5GcmFtZVNjcm9sbGluZyhTY3JvbGxF
dmVuCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGQ6OnBhaXI8ZmxvYXQsIHN0ZDo6b3B0aW9u
YWw8dW5zaWduZWQ+PiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpjbG9zZXN0U25h
cE9mZnNldEZvck1haW5GcmFtZVNjcm9sbGluZyhTY3JvbGxFdmVudEF4aXMgYXhpcywgZmxvYXQg
Y3VycmVudFNjcm9sbE9mZnNldCwgZmxvYXQgc2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0IHZlbG9j
aXR5KSBjb25zdAorc3RkOjpwYWlyPGZsb2F0LCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPj4gUmVt
b3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6Y2xvc2VzdFNuYXBPZmZzZXRGb3JNYWluRnJh
bWVTY3JvbGxpbmcoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGZsb2F0IGN1cnJlbnRTY3JvbGxPZmZz
ZXQsIEZsb2F0UG9pbnQgc2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0IHZlbG9jaXR5KSBjb25zdAog
ewogICAgIFNjcm9sbGluZ1RyZWVOb2RlKiByb290ID0gbV9zY3JvbGxpbmdUcmVlLT5yb290Tm9k
ZSgpOwogICAgIEFTU0VSVChyb290ICYmIHJvb3QtPmlzRnJhbWVTY3JvbGxpbmdOb2RlKCkpOwog
ICAgIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUqIHJvb3RTY3JvbGxpbmdOb2RlID0g
c3RhdGljX2Nhc3Q8U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZSo+KHJvb3QpOwogICAg
IGNvbnN0IGF1dG8mIHNuYXBPZmZzZXRzSW5mbyA9IHJvb3RTY3JvbGxpbmdOb2RlLT5zbmFwT2Zm
c2V0c0luZm8oKTsKIAotICAgIGZsb2F0IHNjYWxlZFNjcm9sbERlc3RpbmF0aW9uID0gc2Nyb2xs
RGVzdGluYXRpb24gLyBtX3dlYlBhZ2VQcm94eS5kaXNwbGF5ZWRDb250ZW50U2NhbGUoKTsKKyAg
ICBzY3JvbGxEZXN0aW5hdGlvbi5zY2FsZSgxLjAgLyBtX3dlYlBhZ2VQcm94eS5kaXNwbGF5ZWRD
b250ZW50U2NhbGUoKSk7CiAgICAgZmxvYXQgc2NhbGVkQ3VycmVudFNjcm9sbE9mZnNldCA9IGN1
cnJlbnRTY3JvbGxPZmZzZXQgLyBtX3dlYlBhZ2VQcm94eS5kaXNwbGF5ZWRDb250ZW50U2NhbGUo
KTsKLSAgICBhdXRvIFtyYXdDbG9zZXN0U25hcE9mZnNldCwgbmV3SW5kZXhdID0gc25hcE9mZnNl
dHNJbmZvLmNsb3Nlc3RTbmFwT2Zmc2V0KGF4aXMsIHJvb3RTY3JvbGxpbmdOb2RlLT5sYXlvdXRW
aWV3cG9ydCgpLnNpemUoKSwgc2NhbGVkU2Nyb2xsRGVzdGluYXRpb24sIHZlbG9jaXR5LCBzY2Fs
ZWRDdXJyZW50U2Nyb2xsT2Zmc2V0KTsKKyAgICBhdXRvIFtyYXdDbG9zZXN0U25hcE9mZnNldCwg
bmV3SW5kZXhdID0gc25hcE9mZnNldHNJbmZvLmNsb3Nlc3RTbmFwT2Zmc2V0KGF4aXMsIHJvb3RT
Y3JvbGxpbmdOb2RlLT5sYXlvdXRWaWV3cG9ydCgpLnNpemUoKSwgc2Nyb2xsRGVzdGluYXRpb24s
IHZlbG9jaXR5LCBzY2FsZWRDdXJyZW50U2Nyb2xsT2Zmc2V0KTsKICAgICByZXR1cm4gc3RkOjpt
YWtlX3BhaXIocmF3Q2xvc2VzdFNuYXBPZmZzZXQgKiBtX3dlYlBhZ2VQcm94eS5kaXNwbGF5ZWRD
b250ZW50U2NhbGUoKSwgbmV3SW5kZXgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
RGVsZWdhdGVJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUv
aW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MubW0KaW5kZXggNjdjMzg4
NjU1ZjZiYThkZGI1OTBiN2UxODQxMDQwMWYwMGYxOWNkMS4uOGE5ZmY2NzVkY2U4NTllODcxNDJk
NWIzNzg4NjY4NmI2NWQwMzBmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
UmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9T
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5tbQpAQCAtOTYsMjUgKzk2LDIyIEBA
IC0gKHZvaWQpc2Nyb2xsVmlld1dpbGxFbmREcmFnZ2luZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xs
VmlldyB3aXRoVmVsb2NpdHk6KENHUG9pCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBDR0Zsb2F0
IGhvcml6b250YWxUYXJnZXQgPSB0YXJnZXRDb250ZW50T2Zmc2V0LT54OwotICAgIENHRmxvYXQg
dmVydGljYWxUYXJnZXQgPSB0YXJnZXRDb250ZW50T2Zmc2V0LT55OwotCiAgICAgc3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4gb3JpZ2luYWxIb3Jpem9udGFsU25hcFBvc2l0aW9uID0gX3Njcm9sbGlu
Z1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5jdXJyZW50SG9yaXpvbnRhbFNuYXBQ
b2ludEluZGV4KCk7CiAgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gb3JpZ2luYWxWZXJ0aWNh
bFNuYXBQb3NpdGlvbiA9IF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2Rl
KCkuY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKTsKIAogICAgIFdlYkNvcmU6OkZsb2F0
U2l6ZSB2aWV3cG9ydFNpemUoc3RhdGljX2Nhc3Q8ZmxvYXQ+KENHUmVjdEdldFdpZHRoKFtzY3Jv
bGxWaWV3IGJvdW5kc10pKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KENHUmVjdEdldEhlaWdodChbc2Ny
b2xsVmlldyBib3VuZHNdKSkpOwogICAgIGNvbnN0IGF1dG8mIHNuYXBPZmZzZXRzSW5mbyA9IF9z
Y3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuc25hcE9mZnNldHNJbmZv
KCk7CiAgICAgaWYgKCFzbmFwT2Zmc2V0c0luZm8uaG9yaXpvbnRhbFNuYXBPZmZzZXRzLmlzRW1w
dHkoKSkgewotICAgICAgICBhdXRvIFtwb3RlbnRpYWxTbmFwUG9zaXRpb24sIGluZGV4XSA9IHNu
YXBPZmZzZXRzSW5mby5jbG9zZXN0U25hcE9mZnNldChXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6
Okhvcml6b250YWwsIHZpZXdwb3J0U2l6ZSwgaG9yaXpvbnRhbFRhcmdldCwgdmVsb2NpdHkueCwg
c2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0LngpOworICAgICAgICBhdXRvIFtwb3RlbnRpYWxTbmFw
UG9zaXRpb24sIGluZGV4XSA9IHNuYXBPZmZzZXRzSW5mby5jbG9zZXN0U25hcE9mZnNldChXZWJD
b3JlOjpTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIHZpZXdwb3J0U2l6ZSwgV2ViQ29yZTo6
RmxvYXRQb2ludCgqdGFyZ2V0Q29udGVudE9mZnNldCksIHZlbG9jaXR5LngsIHNjcm9sbFZpZXcu
Y29udGVudE9mZnNldC54KTsKICAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNj
cm9sbGluZ05vZGUoKS5zZXRDdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KGluZGV4KTsK
LSAgICAgICAgaWYgKGhvcml6b250YWxUYXJnZXQgPj0gMCAmJiBob3Jpem9udGFsVGFyZ2V0IDw9
IHNjcm9sbFZpZXcuY29udGVudFNpemUud2lkdGgpCisgICAgICAgIGlmICh0YXJnZXRDb250ZW50
T2Zmc2V0LT54ID49IDAgJiYgdGFyZ2V0Q29udGVudE9mZnNldC0+eCA8PSBzY3JvbGxWaWV3LmNv
bnRlbnRTaXplLndpZHRoKQogICAgICAgICAgICAgdGFyZ2V0Q29udGVudE9mZnNldC0+eCA9IHBv
dGVudGlhbFNuYXBQb3NpdGlvbjsKICAgICB9CiAKICAgICBpZiAoIXNuYXBPZmZzZXRzSW5mby52
ZXJ0aWNhbFNuYXBPZmZzZXRzLmlzRW1wdHkoKSkgewotICAgICAgICBhdXRvIFtwb3RlbnRpYWxT
bmFwUG9zaXRpb24sIGluZGV4XSA9IHNuYXBPZmZzZXRzSW5mby5jbG9zZXN0U25hcE9mZnNldChX
ZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCB2aWV3cG9ydFNpemUsIHZlcnRpY2Fs
VGFyZ2V0LCB2ZWxvY2l0eS55LCBzY3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQueSk7CisgICAgICAg
IGF1dG8gW3BvdGVudGlhbFNuYXBQb3NpdGlvbiwgaW5kZXhdID0gc25hcE9mZnNldHNJbmZvLmNs
b3Nlc3RTbmFwT2Zmc2V0KFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIHZpZXdw
b3J0U2l6ZSwgV2ViQ29yZTo6RmxvYXRQb2ludCgqdGFyZ2V0Q29udGVudE9mZnNldCksIHZlbG9j
aXR5LnksIHNjcm9sbFZpZXcuY29udGVudE9mZnNldC55KTsKICAgICAgICAgX3Njcm9sbGluZ1Ry
ZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5zZXRDdXJyZW50VmVydGljYWxTbmFwUG9p
bnRJbmRleChpbmRleCk7Ci0gICAgICAgIGlmICh2ZXJ0aWNhbFRhcmdldCA+PSAwICYmIHZlcnRp
Y2FsVGFyZ2V0IDw9IHNjcm9sbFZpZXcuY29udGVudFNpemUuaGVpZ2h0KQorICAgICAgICBpZiAo
dGFyZ2V0Q29udGVudE9mZnNldC0+eSA+PSAwICYmIHRhcmdldENvbnRlbnRPZmZzZXQtPnkgPD0g
c2Nyb2xsVmlldy5jb250ZW50U2l6ZS5oZWlnaHQpCiAgICAgICAgICAgICB0YXJnZXRDb250ZW50
T2Zmc2V0LT55ID0gcG90ZW50aWFsU25hcFBvc2l0aW9uOwogICAgIH0KIAo=
</data>
<flag name="commit-queue"
          id="456000"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433676</attachid>
            <date>2021-07-16 07:42:50 -0700</date>
            <delta_ts>2021-07-21 09:23:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228023-20210716164248.patch</filename>
            <type>text/plain</type>
            <size>35449</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5OTgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzgzYjQxZDFjYjgxZDY1
NGFhMDdhNzU0M2UwNGIwNTI4MWQwMTFiNS4uNTljMWRkOTQ0NzAwMDQ3NTliMTBkNmQ2MTdlMzg0
ZTMxZGVkZjY2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDIxLTA3LTE2ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KKworICAgICAgICBbY3NzLXNjcm9s
bC1zbmFwXSBQYXNzIHRoZSBmdWxsIHRhcmdldCBwb2ludCB3aGVuIHNlbGVjdGluZyBhIHNuYXAg
b2Zmc2V0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjgwMjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQ
YXNzIHRoZSBmdWxsIHByb3Bvc2VkIGRlc3RpbmF0aW9uIHNjcm9sbCBvZmZzZXQgd2hlbiBjYWxs
aW5nIGNsb3Nlc3RTbmFwT2Zmc2V0LiBGb3IKKyAgICAgICAgbm93LCBvbmx5IHRoZSBjb21wb25l
bnQgaW4gdGhlIHNjcm9sbCBkaXJlY3Rpb24gaXMgdXNlZCwgYnV0IGV2ZW50dWFsbHkgdGhlIG90
aGVyCisgICAgICAgIGNvbXBvbmVudCB3aWxsIGJlIHVzZWQgdG8gYXZvaWQgc25hcHBpbmcgdG8g
c25hcCBhcmVhcyB0aGF0IGFyZSBlbnRpcmVseSBvZmYgdGhlIHNjcmVlbi4KKworICAgICAgICBO
byBuZXcgdGVzdHMuIFRoaXMgY2hhbmdlIGlzIHNpbXBseSBhIHJlZmFjdG9yIGluIHByZXBhcmF0
aW9uIGZvciBhIGJlaGF2aW9yCisgICAgICAgIGNoYW5nZSBhbmQgc2hvdWxkbid0IGNoYW5nZSBi
ZWhhdmlvciBpdHNlbGYuCisKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zm
c2V0c0luZm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2xvc2VzdFNuYXBPZmZzZXRXaXRoSW5m
b0FuZEF4aXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZv
OjpjbG9zZXN0U25hcE9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFNjcm9s
bFNuYXBPZmZzZXRzSW5mbzo6Y2xvc2VzdFNuYXBPZmZzZXQgY29uc3QpOgorICAgICAgICAqIHBh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5oOgorICAgICAgICAqIHBhZ2Uvc2Ny
b2xsaW5nL25pY29zaWEvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU5pY29zaWEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZU5pY29zaWE6OmhhbmRsZVdoZWVsRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFu
aW1hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpzY3JvbGwpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmFkanVzdFNjcm9sbE9mZnNldEZvclNu
YXBwaW5nSWZOZWVkZWQpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxDb250cm9sbGVyOjpzZXROZWFyZXN0U2Nyb2xsU25hcEluZGV4Rm9yQXhpc0FuZE9m
ZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjphZGp1c3RTY3JvbGxE
ZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVB
Y3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JDbGllbnRPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQ29udHJvbGxlcjo6cmVzbmFwQWZ0ZXJMYXlvdXQpOgorICAgICAgICAqIHBsYXRmb3Jt
L1Njcm9sbENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxTbmFwQW5pbWF0
b3JTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZTo6
c2V0dXBBbmltYXRpb25Gb3JTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxTbmFwQW5p
bWF0b3JTdGF0ZTo6dGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZzZXQgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmg6CisgICAgICAgICogcGxhdGZvcm0v
U2Nyb2xsYWJsZUFyZWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmRv
UG9zdFRodW1iTW92ZVNuYXBwaW5nKToKKwogMjAyMS0wNy0xNiAgUGhpbGlwcGUgTm9ybWFuZCAg
PHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dTdHJlYW1lcl0gTGliV2ViUlRDIGZp
bGVzIHNob3VsZCBiZSBpbiBsaWJ3ZWJydGMvZ3N0cmVhbWVyCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDI4Mzk0ZjU2
ODY0NmQ4NGMzMzI1NTAzMzNmZTJlYzJlMjQwNzdjMjEuLjU1MTk0MDgxZTc2ZjM0OTI3YjU2ZDI0
NGI0YTdmNzBjZTE3NTA0OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjEtMDctMTYg
IE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkB3ZWJraXQub3JnPgorCisgICAgICAgIFtjc3Mt
c2Nyb2xsLXNuYXBdIFBhc3MgdGhlIGZ1bGwgdGFyZ2V0IHBvaW50IHdoZW4gc2VsZWN0aW5nIGEg
c25hcCBvZmZzZXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyODAyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
clByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6YWRqdXN0VGFyZ2V0Q29udGVudE9mZnNldEZvclNu
YXBwaW5nKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94
eTo6Y2xvc2VzdFNuYXBPZmZzZXRGb3JNYWluRnJhbWVTY3JvbGxpbmcgY29uc3QpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlRGVsZWdhdGVJT1MubW06CisgICAgICAgICgtW1dLU2Nyb2xsaW5nTm9kZVNjcm9sbFZpZXdE
ZWxlZ2F0ZSBzY3JvbGxWaWV3V2lsbEVuZERyYWdnaW5nOndpdGhWZWxvY2l0eTp0YXJnZXRDb250
ZW50T2Zmc2V0Ol0pOgorCiAyMDIxLTA3LTE2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVtXUEVdIFBTT046IGFjY2Vzc2liaWxpdHkg
ZG9lc24ndCB3b3JrIGFmdGVyIGEgY3Jvc3Mgc2l0ZSBuYXZpZ2F0aW9uCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcApp
bmRleCAzNTMwMjZmZjQ4MzRlM2Y5MWVlY2IxZTliOWQwNzExOWMyZTQ0NzQ1Li5mNGFkNWQ0YWIw
MjEzNzgzNmZlMjZjOGExMTNhM2NkOTBjY2Y4OTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHAKQEAgLTkwLDkg
KzkwLDEwIEBAIHN0YXRpYyBQb3RlbnRpYWxTbmFwUG9pbnRTZWFyY2hSZXN1bHQ8VW5pdFR5cGU+
IHNlYXJjaEZvclBvdGVudGlhbFNuYXBQb2ludHMoY29uCiAgICAgcmV0dXJuIHsgcHJldmlvdXMs
IG5leHQsIHNuYXBTdG9wLCBsYW5kZWRJbnNpZGVTbmFwQXJlYVRoYXRDb25zdW1lc1ZpZXdwb3J0
IH07CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBJbmZvVHlwZSwgdHlwZW5hbWUgU2l6ZVR5cGUs
IHR5cGVuYW1lIExheW91dFR5cGU+Ci1zdGF0aWMgc3RkOjpwYWlyPExheW91dFR5cGUsIHN0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+PiBjbG9zZXN0U25hcE9mZnNldFdpdGhJbmZvQW5kQXhpcyhjb25z
dCBJbmZvVHlwZSYgaW5mbywgU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGNvbnN0IFNpemVUeXBlJiB2
aWV3cG9ydFNpemUsIExheW91dFR5cGUgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIGZsb2F0IHZl
bG9jaXR5LCBzdGQ6Om9wdGlvbmFsPExheW91dFR5cGU+IG9yaWdpbmFsT2Zmc2V0Rm9yRGlyZWN0
aW9uYWxTbmFwcGluZykKK3RlbXBsYXRlIDx0eXBlbmFtZSBJbmZvVHlwZSwgdHlwZW5hbWUgU2l6
ZVR5cGUsIHR5cGVuYW1lIExheW91dFR5cGUsIHR5cGVuYW1lIFBvaW50VHlwZT4KK3N0YXRpYyBz
dGQ6OnBhaXI8TGF5b3V0VHlwZSwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4+IGNsb3Nlc3RTbmFw
T2Zmc2V0V2l0aEluZm9BbmRBeGlzKGNvbnN0IEluZm9UeXBlJiBpbmZvLCBTY3JvbGxFdmVudEF4
aXMgYXhpcywgY29uc3QgU2l6ZVR5cGUmIHZpZXdwb3J0U2l6ZSwgUG9pbnRUeXBlIHNjcm9sbERl
c3RpbmF0aW9uT2Zmc2V0UG9pbnQsIGZsb2F0IHZlbG9jaXR5LCBzdGQ6Om9wdGlvbmFsPExheW91
dFR5cGU+IG9yaWdpbmFsT2Zmc2V0Rm9yRGlyZWN0aW9uYWxTbmFwcGluZykKIHsKKyAgICBhdXRv
IHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0ID0gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6
b250YWwgPyBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldFBvaW50LngoKSA6IHNjcm9sbERlc3RpbmF0
aW9uT2Zmc2V0UG9pbnQueSgpOwogICAgIGNvbnN0IGF1dG8mIHNuYXBPZmZzZXRzID0gaW5mby5v
ZmZzZXRzRm9yQXhpcyhheGlzKTsKICAgICBhdXRvIHBhaXJGb3JOb1NuYXBwaW5nID0gc3RkOjpt
YWtlX3BhaXIoc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIHN0ZDo6bnVsbG9wdCk7CiAgICAgaWYg
KHNuYXBPZmZzZXRzLmlzRW1wdHkoKSkKQEAgLTM4OCwxMyArMzg5LDEzIEBAIEZsb2F0U2Nyb2xs
U25hcE9mZnNldHNJbmZvIExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6Y29udmVydFVuaXRz
KGZsb2F0IGRldmljCiB9CiAKIHRlbXBsYXRlIDw+IHRlbXBsYXRlIDw+Ci1zdGQ6OnBhaXI8TGF5
b3V0VW5pdCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4+IExheW91dFNjcm9sbFNuYXBPZmZzZXRz
SW5mbzo6Y2xvc2VzdFNuYXBPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGNvbnN0IExheW91
dFNpemUmIHZpZXdwb3J0U2l6ZSwgTGF5b3V0VW5pdCBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCwg
ZmxvYXQgdmVsb2NpdHksIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gb3JpZ2luYWxQb3NpdGlv
bkZvckRpcmVjdGlvbmFsU25hcHBpbmcpIGNvbnN0CitzdGQ6OnBhaXI8TGF5b3V0VW5pdCwgc3Rk
OjpvcHRpb25hbDx1bnNpZ25lZD4+IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6Y2xvc2Vz
dFNuYXBPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGNvbnN0IExheW91dFNpemUmIHZpZXdw
b3J0U2l6ZSwgTGF5b3V0UG9pbnQgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIGZsb2F0IHZlbG9j
aXR5LCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IG9yaWdpbmFsUG9zaXRpb25Gb3JEaXJlY3Rp
b25hbFNuYXBwaW5nKSBjb25zdAogewogICAgIHJldHVybiBjbG9zZXN0U25hcE9mZnNldFdpdGhJ
bmZvQW5kQXhpcygqdGhpcywgYXhpcywgdmlld3BvcnRTaXplLCBzY3JvbGxEZXN0aW5hdGlvbk9m
ZnNldCwgdmVsb2NpdHksIG9yaWdpbmFsUG9zaXRpb25Gb3JEaXJlY3Rpb25hbFNuYXBwaW5nKTsK
IH0KIAogdGVtcGxhdGUgPD4gdGVtcGxhdGU8Pgotc3RkOjpwYWlyPGZsb2F0LCBzdGQ6Om9wdGlv
bmFsPHVuc2lnbmVkPj4gRmxvYXRTY3JvbGxTbmFwT2Zmc2V0c0luZm86OmNsb3Nlc3RTbmFwT2Zm
c2V0KFNjcm9sbEV2ZW50QXhpcyBheGlzLCBjb25zdCBGbG9hdFNpemUmIHZpZXdwb3J0U2l6ZSwg
ZmxvYXQgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIGZsb2F0IHZlbG9jaXR5LCBzdGQ6Om9wdGlv
bmFsPGZsb2F0PiBvcmlnaW5hbFBvc2l0aW9uRm9yRGlyZWN0aW9uYWxTbmFwcGluZykgY29uc3QK
K3N0ZDo6cGFpcjxmbG9hdCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4+IEZsb2F0U2Nyb2xsU25h
cE9mZnNldHNJbmZvOjpjbG9zZXN0U25hcE9mZnNldChTY3JvbGxFdmVudEF4aXMgYXhpcywgY29u
c3QgRmxvYXRTaXplJiB2aWV3cG9ydFNpemUsIEZsb2F0UG9pbnQgc2Nyb2xsRGVzdGluYXRpb25P
ZmZzZXQsIGZsb2F0IHZlbG9jaXR5LCBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBvcmlnaW5hbFBvc2l0
aW9uRm9yRGlyZWN0aW9uYWxTbmFwcGluZykgY29uc3QKIHsKICAgICByZXR1cm4gY2xvc2VzdFNu
YXBPZmZzZXRXaXRoSW5mb0FuZEF4aXMoKnRoaXMsIGF4aXMsIHZpZXdwb3J0U2l6ZSwgc2Nyb2xs
RGVzdGluYXRpb25PZmZzZXQsIHZlbG9jaXR5LCBvcmlnaW5hbFBvc2l0aW9uRm9yRGlyZWN0aW9u
YWxTbmFwcGluZyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbFNuYXBPZmZzZXRzSW5mby5oCmluZGV4IDA2YjU4MWRkNTQzMzZhZmNjZjgzYjE0NThk
ZGIxMWFjMjNlZmQyNjIuLjE1YzIyNzRiMjdhMDRkZTgzOTc0NGNjMmIzMTc4MGVkMzE5YTVhOWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZz
ZXRzSW5mby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBP
ZmZzZXRzSW5mby5oCkBAIC03MCw4ICs3MCw4IEBAIHN0cnVjdCBTY3JvbGxTbmFwT2Zmc2V0c0lu
Zm8gewogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE91dHB1dFR5cGU+IE91dHB1dFR5
cGUgY29udmVydFVuaXRzKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gMC4wKSBjb25zdDsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBTaXplVHlwZT4KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnBh
aXI8VW5pdFR5cGUsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+PiBjbG9zZXN0U25hcE9mZnNldChT
Y3JvbGxFdmVudEF4aXMsIGNvbnN0IFNpemVUeXBlJiB2aWV3cG9ydFNpemUsIFVuaXRUeXBlIHNj
cm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBmbG9hdCB2ZWxvY2l0eSwgc3RkOjpvcHRpb25hbDxVbml0
VHlwZT4gb3JpZ2luYWxQb3NpdGlvbkZvckRpcmVjdGlvbmFsU25hcHBpbmcgPSBzdGQ6Om51bGxv
cHQpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNpemVUeXBlLCB0eXBlbmFtZSBQb2lu
dFR5cGU+CisgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPFVuaXRUeXBlLCBzdGQ6Om9wdGlv
bmFsPHVuc2lnbmVkPj4gY2xvc2VzdFNuYXBPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzLCBjb25zdCBT
aXplVHlwZSYgdmlld3BvcnRTaXplLCBQb2ludFR5cGUgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQs
IGZsb2F0IHZlbG9jaXR5LCBzdGQ6Om9wdGlvbmFsPFVuaXRUeXBlPiBvcmlnaW5hbFBvc2l0aW9u
Rm9yRGlyZWN0aW9uYWxTbmFwcGluZyA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CiB9OwogCiB1c2lu
ZyBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8gPSBTY3JvbGxTbmFwT2Zmc2V0c0luZm88TGF5
b3V0VW5pdCwgTGF5b3V0UmVjdD47CkBAIC04MCwxMyArODAsMTMgQEAgdXNpbmcgRmxvYXRTY3Jv
bGxTbmFwT2Zmc2V0c0luZm8gPSBTY3JvbGxTbmFwT2Zmc2V0c0luZm88ZmxvYXQsIEZsb2F0UmVj
dD47CiB0ZW1wbGF0ZSA8PiB0ZW1wbGF0ZSA8PgogTGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZv
IEZsb2F0U2Nyb2xsU25hcE9mZnNldHNJbmZvOjpjb252ZXJ0VW5pdHMoZmxvYXQgLyogdW51c2Vk
U2NhbGVGYWN0b3IgKi8pIGNvbnN0OwogdGVtcGxhdGUgPD4gdGVtcGxhdGUgPD4KLVdFQkNPUkVf
RVhQT1JUIHN0ZDo6cGFpcjxmbG9hdCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4+IEZsb2F0U2Ny
b2xsU25hcE9mZnNldHNJbmZvOjpjbG9zZXN0U25hcE9mZnNldChTY3JvbGxFdmVudEF4aXMsIGNv
bnN0IEZsb2F0U2l6ZSYgdmlld3BvcnRTaXplLCBmbG9hdCBzY3JvbGxEZXN0aW5hdGlvbk9mZnNl
dCwgZmxvYXQgdmVsb2NpdHksIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IG9yaWdpbmFsUG9zaXRpb25G
b3JEaXJlY3Rpb25hbFNuYXBwaW5nKSBjb25zdDsKK1dFQkNPUkVfRVhQT1JUIHN0ZDo6cGFpcjxm
bG9hdCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4+IEZsb2F0U2Nyb2xsU25hcE9mZnNldHNJbmZv
OjpjbG9zZXN0U25hcE9mZnNldChTY3JvbGxFdmVudEF4aXMsIGNvbnN0IEZsb2F0U2l6ZSYgdmll
d3BvcnRTaXplLCBGbG9hdFBvaW50IHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBmbG9hdCB2ZWxv
Y2l0eSwgc3RkOjpvcHRpb25hbDxmbG9hdD4gb3JpZ2luYWxQb3NpdGlvbkZvckRpcmVjdGlvbmFs
U25hcHBpbmcpIGNvbnN0OwogCiAKIHRlbXBsYXRlIDw+IHRlbXBsYXRlIDw+CiBGbG9hdFNjcm9s
bFNuYXBPZmZzZXRzSW5mbyBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm86OmNvbnZlcnRVbml0
cyhmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikgY29uc3Q7CiB0ZW1wbGF0ZSA8PiB0ZW1wbGF0ZSA8
PgotV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPExheW91dFVuaXQsIHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+PiBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm86OmNsb3Nlc3RTbmFwT2Zmc2V0KFNj
cm9sbEV2ZW50QXhpcywgY29uc3QgTGF5b3V0U2l6ZSYgdmlld3BvcnRTaXplLCBMYXlvdXRVbml0
IHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBmbG9hdCB2ZWxvY2l0eSwgc3RkOjpvcHRpb25hbDxM
YXlvdXRVbml0PiBvcmlnaW5hbFBvc2l0aW9uRm9yRGlyZWN0aW9uYWxTbmFwcGluZykgY29uc3Q7
CitXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8TGF5b3V0VW5pdCwgc3RkOjpvcHRpb25hbDx1bnNp
Z25lZD4+IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6Y2xvc2VzdFNuYXBPZmZzZXQoU2Ny
b2xsRXZlbnRBeGlzLCBjb25zdCBMYXlvdXRTaXplJiB2aWV3cG9ydFNpemUsIExheW91dFBvaW50
IHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBmbG9hdCB2ZWxvY2l0eSwgc3RkOjpvcHRpb25hbDxM
YXlvdXRVbml0PiBvcmlnaW5hbFBvc2l0aW9uRm9yRGlyZWN0aW9uYWxTbmFwcGluZykgY29uc3Q7
CiAKIC8vIFVwZGF0ZSB0aGUgc25hcCBvZmZzZXRzIGZvciB0aGlzIHNjcm9sbGFibGUgYXJlYSwg
Z2l2ZW4gdGhlIFJlbmRlckJveCBvZiB0aGUgc2Nyb2xsIGNvbnRhaW5lciwgdGhlIFJlbmRlclN0
eWxlCiAvLyB3aGljaCBkZWZpbmVzIHRoZSBzY3JvbGwtc25hcCBwcm9wZXJ0aWVzLCBhbmQgdGhl
IHZpZXdwb3J0IHJlY3RhbmdsZSB3aXRoIHRoZSBvcmlnaW4gYXQgdGhlIHRvcCBsZWZ0IG9mCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9uaWNvc2lhL1Njcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVOaWNvc2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL25pY29zaWEvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU5p
Y29zaWEuY3BwCmluZGV4IGM0Y2VjOTM1ODkzZWI5MjUxZjZhYTlkZTZkMjRiMDBmYTZmNzhiODAu
LjY5ZWIxMTE0YzE4MDJlYTUxNTlkODRkOThiN2YzMWZmZWEwY2M1OTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL25pY29zaWEvU2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGVEZWxlZ2F0ZU5pY29zaWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL25pY29zaWEvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU5pY29zaWEuY3Bw
CkBAIC0xNjksMTEgKzE2OSwxMSBAQCBXaGVlbEV2ZW50SGFuZGxpbmdSZXN1bHQgU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU5pY29zaWE6OmhhbmRsZVdoZWVsRQogICAgIGlmICgh
c2Nyb2xsaW5nTm9kZSgpLnNuYXBPZmZzZXRzSW5mbygpLmlzRW1wdHkoKSkgewogICAgICAgICBm
bG9hdCBzY2FsZSA9IHBhZ2VTY2FsZUZhY3RvcigpOwogICAgICAgICBGbG9hdFBvaW50IG9yaWdp
bmFsT2Zmc2V0ID0gTGF5b3V0UG9pbnQoc2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRTY3JvbGxPZmZz
ZXQoKS54KCkgLyBzY2FsZSwgc2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRTY3JvbGxPZmZzZXQoKS55
KCkgLyBzY2FsZSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgbmV3RmxvYXRPZmZzZXQgPSBzY3JvbGxp
bmdOb2RlKCkuY3VycmVudFNjcm9sbE9mZnNldCgpICsgRmxvYXRTaXplKGRlbHRhWCwgZGVsdGFZ
KTsKLSAgICAgICAgYXV0byBuZXdPZmZzZXQgPSBMYXlvdXRQb2ludChuZXdGbG9hdE9mZnNldC54
KCkgLyBzY2FsZSwgbmV3RmxvYXRPZmZzZXQueSgpIC8gc2NhbGUpOworICAgICAgICBhdXRvIG5l
d09mZnNldCA9IChzY3JvbGxpbmdOb2RlKCkuY3VycmVudFNjcm9sbE9mZnNldCgpICsgRmxvYXRT
aXplKGRlbHRhWCwgZGVsdGFZKSk7CisgICAgICAgIG5ld09mZnNldC5zY2FsZSgxLjAgLyBzY2Fs
ZSk7CiAKLSAgICAgICAgYXV0byBvZmZzZXRYID0gc2Nyb2xsaW5nTm9kZSgpLnNuYXBPZmZzZXRz
SW5mbygpLmNsb3Nlc3RTbmFwT2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgc2Ny
b2xsYWJsZUFyZWFTaXplKCksIG5ld09mZnNldC54KCksIGRlbHRhWCwgb3JpZ2luYWxPZmZzZXQu
eCgpKS5maXJzdDsKLSAgICAgICAgYXV0byBvZmZzZXRZID0gc2Nyb2xsaW5nTm9kZSgpLnNuYXBP
ZmZzZXRzSW5mbygpLmNsb3Nlc3RTbmFwT2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWws
IHNjcm9sbGFibGVBcmVhU2l6ZSgpLCBuZXdPZmZzZXQueSgpLCBkZWx0YVksIG9yaWdpbmFsT2Zm
c2V0LnkoKSkuZmlyc3Q7CisgICAgICAgIGF1dG8gb2Zmc2V0WCA9IHNjcm9sbGluZ05vZGUoKS5z
bmFwT2Zmc2V0c0luZm8oKS5jbG9zZXN0U25hcE9mZnNldChTY3JvbGxFdmVudEF4aXM6Okhvcml6
b250YWwsIHNjcm9sbGFibGVBcmVhU2l6ZSgpLCBuZXdPZmZzZXQsIGRlbHRhWCwgb3JpZ2luYWxP
ZmZzZXQueCgpKS5maXJzdDsKKyAgICAgICAgYXV0byBvZmZzZXRZID0gc2Nyb2xsaW5nTm9kZSgp
LnNuYXBPZmZzZXRzSW5mbygpLmNsb3Nlc3RTbmFwT2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6VmVy
dGljYWwsIHNjcm9sbGFibGVBcmVhU2l6ZSgpLCBuZXdPZmZzZXQsIGRlbHRhWSwgb3JpZ2luYWxP
ZmZzZXQueSgpKS5maXJzdDsKIAogICAgICAgICBkZWx0YVggPSAob2Zmc2V0WCAtIG9yaWdpbmFs
T2Zmc2V0LngoKSkgKiBzY2FsZTsKICAgICAgICAgZGVsdGFZID0gKG9mZnNldFkgLSBvcmlnaW5h
bE9mZnNldC55KCkpICogc2NhbGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvci5jcHAKaW5kZXggNWU4M2ZkYmFlMjdmYjg5ODdmODA5YTg1NDk3NTdhYzA1ODYyMzgwYy4u
OWY2YTY3NTc4NTRhZjU0YTZiZjNmYzY3NDFlOWFiYmYzNDhlMDUxYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcApAQCAtODYsOSArODYsOSBAQCBib29sIFNj
cm9sbEFuaW1hdG9yOjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNj
cm9sbEdyYW51bGFyaXR5CiAgICAgICAgIGF1dG8gY3VycmVudE9mZnNldCA9IG9mZnNldEZyb21Q
b3NpdGlvbihjdXJyZW50UG9zaXRpb24oKSk7CiAgICAgICAgIGF1dG8gbmV3T2Zmc2V0ID0gY3Vy
cmVudE9mZnNldCArIGRlbHRhOwogICAgICAgICBpZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRh
bFNjcm9sbGJhcikKLSAgICAgICAgICAgIG5ld09mZnNldC5zZXRYKG1fc2Nyb2xsQ29udHJvbGxl
ci5hZGp1c3RTY3JvbGxEZXN0aW5hdGlvbihTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIG5l
d09mZnNldC54KCksIG11bHRpcGxpZXIsIGN1cnJlbnRPZmZzZXQueCgpKSk7CisgICAgICAgICAg
ICBuZXdPZmZzZXQuc2V0WChtX3Njcm9sbENvbnRyb2xsZXIuYWRqdXN0U2Nyb2xsRGVzdGluYXRp
b24oU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBuZXdPZmZzZXQsIG11bHRpcGxpZXIsIGN1
cnJlbnRPZmZzZXQueCgpKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5ld09mZnNldC5z
ZXRZKG1fc2Nyb2xsQ29udHJvbGxlci5hZGp1c3RTY3JvbGxEZXN0aW5hdGlvbihTY3JvbGxFdmVu
dEF4aXM6OlZlcnRpY2FsLCBuZXdPZmZzZXQueSgpLCBtdWx0aXBsaWVyLCBjdXJyZW50T2Zmc2V0
LnkoKSkpOworICAgICAgICAgICAgbmV3T2Zmc2V0LnNldFkobV9zY3JvbGxDb250cm9sbGVyLmFk
anVzdFNjcm9sbERlc3RpbmF0aW9uKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIG5ld09mZnNl
dCwgbXVsdGlwbGllciwgY3VycmVudE9mZnNldC55KCkpKTsKICAgICAgICAgYXV0byBuZXdEZWx0
YSA9IG5ld09mZnNldCAtIGN1cnJlbnRPZmZzZXQ7CiAKICAgICAgICAgaWYgKG9yaWVudGF0aW9u
ID09IEhvcml6b250YWxTY3JvbGxiYXIpCkBAIC0zOTcsMjMgKzM5NywyNCBAQCBGbG9hdFBvaW50
IFNjcm9sbEFuaW1hdG9yOjphZGp1c3RTY3JvbGxPZmZzZXRGb3JTbmFwcGluZ0lmTmVlZGVkKGNv
bnN0IEZsb2F0UG9pbgogICAgICAgICByZXR1cm4gb2Zmc2V0OwogCiAgICAgRmxvYXRQb2ludCBu
ZXdPZmZzZXQgPSBvZmZzZXQ7Ci0gICAgbmV3T2Zmc2V0LnNldFgoYWRqdXN0U2Nyb2xsT2Zmc2V0
Rm9yU25hcHBpbmdJZk5lZWRlZChTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIG5ld09mZnNl
dC54KCksIG1ldGhvZCkpOwotICAgIG5ld09mZnNldC5zZXRZKGFkanVzdFNjcm9sbE9mZnNldEZv
clNuYXBwaW5nSWZOZWVkZWQoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgbmV3T2Zmc2V0Lnko
KSwgbWV0aG9kKSk7CisgICAgbmV3T2Zmc2V0LnNldFgoYWRqdXN0U2Nyb2xsT2Zmc2V0Rm9yU25h
cHBpbmdJZk5lZWRlZChTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIG5ld09mZnNldCwgbWV0
aG9kKSk7CisgICAgbmV3T2Zmc2V0LnNldFkoYWRqdXN0U2Nyb2xsT2Zmc2V0Rm9yU25hcHBpbmdJ
Zk5lZWRlZChTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBuZXdPZmZzZXQsIG1ldGhvZCkpOwog
ICAgIHJldHVybiBuZXdPZmZzZXQ7CiB9CiAKLWZsb2F0IFNjcm9sbEFuaW1hdG9yOjphZGp1c3RT
Y3JvbGxPZmZzZXRGb3JTbmFwcGluZ0lmTmVlZGVkKFNjcm9sbEV2ZW50QXhpcyBheGlzLCBmbG9h
dCBuZXdPZmZzZXQsIFNjcm9sbFNuYXBQb2ludFNlbGVjdGlvbk1ldGhvZCBtZXRob2QpCitmbG9h
dCBTY3JvbGxBbmltYXRvcjo6YWRqdXN0U2Nyb2xsT2Zmc2V0Rm9yU25hcHBpbmdJZk5lZWRlZChT
Y3JvbGxFdmVudEF4aXMgYXhpcywgY29uc3QgRmxvYXRQb2ludCYgbmV3T2Zmc2V0LCBTY3JvbGxT
bmFwUG9pbnRTZWxlY3Rpb25NZXRob2QgbWV0aG9kKQogewogICAgIGlmICghbV9zY3JvbGxDb250
cm9sbGVyLnVzZXNTY3JvbGxTbmFwKCkpCi0gICAgICAgIHJldHVybiBuZXdPZmZzZXQ7CisgICAg
ICAgIHJldHVybiBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IG5ld09mZnNl
dC54KCkgOiBuZXdPZmZzZXQueSgpOwogCiAgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gb3JpZ2lu
YWxPZmZzZXQ7CiAgICAgZmxvYXQgdmVsb2NpdHkgPSAwLjsKICAgICBpZiAobWV0aG9kID09IFNj
cm9sbFNuYXBQb2ludFNlbGVjdGlvbk1ldGhvZDo6RGlyZWN0aW9uYWwpIHsKICAgICAgICAgRmxv
YXRTaXplIHNjcm9sbE9yaWdpbiA9IHRvRmxvYXRTaXplKG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xs
T3JpZ2luKCkpOwogICAgICAgICBhdXRvIGN1cnJlbnRPZmZzZXQgPSBTY3JvbGxhYmxlQXJlYTo6
c2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHRoaXMtPmN1cnJlbnRQb3NpdGlvbigpLCBzY3JvbGxP
cmlnaW4pOworICAgICAgICBhdXRvIHZlbG9jaXR5SW5Cb3RoQXhlcyA9IG5ld09mZnNldCAtIGN1
cnJlbnRPZmZzZXQ7CiAgICAgICAgIG9yaWdpbmFsT2Zmc2V0ID0gYXhpcyA9PSBTY3JvbGxFdmVu
dEF4aXM6Okhvcml6b250YWwgPyBjdXJyZW50T2Zmc2V0LngoKSA6IGN1cnJlbnRPZmZzZXQueSgp
OwotICAgICAgICB2ZWxvY2l0eSA9IG5ld09mZnNldCAtIChheGlzID09IFNjcm9sbEV2ZW50QXhp
czo6SG9yaXpvbnRhbCA/IGN1cnJlbnRPZmZzZXQueCgpIDogY3VycmVudE9mZnNldC55KCkpOwor
ICAgICAgICB2ZWxvY2l0eSA9IGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsID8g
dmVsb2NpdHlJbkJvdGhBeGVzLndpZHRoKCkgOiB2ZWxvY2l0eUluQm90aEF4ZXMuaGVpZ2h0KCk7
CiAgICAgfQogCiAgICAgcmV0dXJuIG1fc2Nyb2xsQ29udHJvbGxlci5hZGp1c3RTY3JvbGxEZXN0
aW5hdGlvbihheGlzLCBuZXdPZmZzZXQsIHZlbG9jaXR5LCBvcmlnaW5hbE9mZnNldCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAppbmRleCBkOTJjZmRiZGZiYjA1ZjFm
YTkxMzRlYzY1ODc1YWZjYjhjZTFkNzhjLi40M2JjMjg2YzA3MTgwODQxNjdmY2IxOGQyMTczNzRk
YzE4NDk2Yzk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKQEAg
LTEzNCw3ICsxMzQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRXaGVlbEV2ZW50VGVzdE1vbml0
b3IoUmVmUHRyPFdoZWVsRXZlbnRUZXN0TW9uaXRvcj4mJiB0ZXN0TW9uaXRvcikgeyBtX3doZWVs
RXZlbnRUZXN0TW9uaXRvciA9IHRlc3RNb25pdG9yOyB9CiAKICAgICBGbG9hdFBvaW50IGFkanVz
dFNjcm9sbE9mZnNldEZvclNuYXBwaW5nSWZOZWVkZWQoY29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0
LCBTY3JvbGxTbmFwUG9pbnRTZWxlY3Rpb25NZXRob2QpOwotICAgIGZsb2F0IGFkanVzdFNjcm9s
bE9mZnNldEZvclNuYXBwaW5nSWZOZWVkZWQoU2Nyb2xsRXZlbnRBeGlzLCBmbG9hdCBuZXdPZmZz
ZXQsIFNjcm9sbFNuYXBQb2ludFNlbGVjdGlvbk1ldGhvZCk7CisgICAgZmxvYXQgYWRqdXN0U2Ny
b2xsT2Zmc2V0Rm9yU25hcHBpbmdJZk5lZWRlZChTY3JvbGxFdmVudEF4aXMsIGNvbnN0IEZsb2F0
UG9pbnQmIG5ld09mZnNldCwgU2Nyb2xsU25hcFBvaW50U2VsZWN0aW9uTWV0aG9kKTsKIAogICAg
IHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxDb250cm9sbGVyVGltZXI+IGNyZWF0ZVRpbWVyKEZ1bmN0
aW9uPHZvaWQoKT4mJikgZmluYWw7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
Q29udHJvbGxlci5jcHAKaW5kZXggZTkzNzViYTc0NzY4YmRiNDczYmQ4YmYxZmZhNDliODFjZjk5
NDNhOS4uOTdkZmI0YWE2ZGY3MjFjNzUzMWQzMmFjZWM3NjZjMGIyMjFlOTJlNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5jcHAKQEAgLTEyNyw3ICsxMjcs
NyBAQCB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnNldEFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4
aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIHN0ZAogICAgIG1fc2Nyb2xsU25hcFN0YXRlLT5zZXRB
Y3RpdmVTbmFwSW5kZXhGb3JBeGlzKGF4aXMsIGluZGV4KTsKIH0KIAotdm9pZCBTY3JvbGxDb250
cm9sbGVyOjpzZXROZWFyZXN0U2Nyb2xsU25hcEluZGV4Rm9yQXhpc0FuZE9mZnNldChTY3JvbGxF
dmVudEF4aXMgYXhpcywgaW50IG9mZnNldCkKK3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c2V0TmVh
cmVzdFNjcm9sbFNuYXBJbmRleEZvckF4aXNBbmRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzIGF4aXMs
IFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQpCiB7CiAgICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgp
KQogICAgICAgICByZXR1cm47CkBAIC0xMzUsMTEgKzEzNSwxNCBAQCB2b2lkIFNjcm9sbENvbnRy
b2xsZXI6OnNldE5lYXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0KFNjcm9sbEV2
ZW50QXhpcwogICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gbV9jbGllbnQucGFnZVNjYWxlRmFjdG9y
KCk7CiAgICAgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUmIHNuYXBTdGF0ZSA9ICptX3Njcm9sbFNu
YXBTdGF0ZTsKIAorICAgIExheW91dFBvaW50IGxheW91dFNjcm9sbE9mZnNldChzY3JvbGxPZmZz
ZXQpOworICAgIGxheW91dFNjcm9sbE9mZnNldC5zY2FsZSgxLjAgLyBzY2FsZUZhY3Rvcik7CisK
ICAgICBhdXRvIHNuYXBPZmZzZXRzID0gc25hcFN0YXRlLnNuYXBPZmZzZXRzRm9yQXhpcyhheGlz
KTsKICAgICBMYXlvdXRTaXplIHZpZXdwb3J0U2l6ZShtX2NsaWVudC52aWV3cG9ydFNpemUoKS53
aWR0aCgpLCBtX2NsaWVudC52aWV3cG9ydFNpemUoKS5oZWlnaHQoKSk7CiAgICAgc3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4gYWN0aXZlSW5kZXg7CiAgICAgaWYgKHNuYXBPZmZzZXRzLnNpemUoKSkK
LSAgICAgICAgYWN0aXZlSW5kZXggPSBzbmFwU3RhdGUuc25hcE9mZnNldEluZm8oKS5jbG9zZXN0
U25hcE9mZnNldChheGlzLCB2aWV3cG9ydFNpemUsIExheW91dFVuaXQob2Zmc2V0IC8gc2NhbGVG
YWN0b3IpLCAwKS5zZWNvbmQ7CisgICAgICAgIGFjdGl2ZUluZGV4ID0gc25hcFN0YXRlLnNuYXBP
ZmZzZXRJbmZvKCkuY2xvc2VzdFNuYXBPZmZzZXQoYXhpcywgdmlld3BvcnRTaXplLCBsYXlvdXRT
Y3JvbGxPZmZzZXQsIDApLnNlY29uZDsKIAogICAgIGlmIChhY3RpdmVJbmRleCA9PSBhY3RpdmVT
Y3JvbGxTbmFwSW5kZXhGb3JBeGlzKGF4aXMpKQogICAgICAgICByZXR1cm47CkBAIC0xNDgsMjEg
KzE1MSwyNSBAQCB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnNldE5lYXJlc3RTY3JvbGxTbmFwSW5k
ZXhGb3JBeGlzQW5kT2Zmc2V0KFNjcm9sbEV2ZW50QXhpcwogICAgIHNldEFjdGl2ZVNjcm9sbFNu
YXBJbmRleEZvckF4aXMoYXhpcywgYWN0aXZlSW5kZXgpOwogfQogCi1mbG9hdCBTY3JvbGxDb250
cm9sbGVyOjphZGp1c3RTY3JvbGxEZXN0aW5hdGlvbihTY3JvbGxFdmVudEF4aXMgYXhpcywgZmxv
YXQgZGVzdGluYXRpb25PZmZzZXQsIGZsb2F0IHZlbG9jaXR5LCBzdGQ6Om9wdGlvbmFsPGZsb2F0
PiBvcmlnaW5hbE9mZnNldCkKK2Zsb2F0IFNjcm9sbENvbnRyb2xsZXI6OmFkanVzdFNjcm9sbERl
c3RpbmF0aW9uKFNjcm9sbEV2ZW50QXhpcyBheGlzLCBGbG9hdFBvaW50IGRlc3RpbmF0aW9uT2Zm
c2V0LCBmbG9hdCB2ZWxvY2l0eSwgc3RkOjpvcHRpb25hbDxmbG9hdD4gb3JpZ2luYWxPZmZzZXQp
CiB7CiAgICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQotICAgICAgICByZXR1cm4gZGVzdGluYXRp
b25PZmZzZXQ7CisgICAgICAgIHJldHVybiBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpv
bnRhbCA/IGRlc3RpbmF0aW9uT2Zmc2V0LngoKSA6IGRlc3RpbmF0aW9uT2Zmc2V0LnkoKTsKIAog
ICAgIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlJiBzbmFwU3RhdGUgPSAqbV9zY3JvbGxTbmFwU3Rh
dGU7CiAgICAgYXV0byBzbmFwT2Zmc2V0cyA9IHNuYXBTdGF0ZS5zbmFwT2Zmc2V0c0ZvckF4aXMo
YXhpcyk7CiAgICAgaWYgKCFzbmFwT2Zmc2V0cy5zaXplKCkpCi0gICAgICAgIHJldHVybiBkZXN0
aW5hdGlvbk9mZnNldDsKKyAgICAgICAgcmV0dXJuIGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpI
b3Jpem9udGFsID8gZGVzdGluYXRpb25PZmZzZXQueCgpIDogZGVzdGluYXRpb25PZmZzZXQueSgp
OwogCiAgICAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBvcmlnaW5hbE9mZnNldEluTGF5b3V0
VW5pdHM7CiAgICAgaWYgKG9yaWdpbmFsT2Zmc2V0KQogICAgICAgICBvcmlnaW5hbE9mZnNldElu
TGF5b3V0VW5pdHMgPSBMYXlvdXRVbml0KCpvcmlnaW5hbE9mZnNldCAvIG1fY2xpZW50LnBhZ2VT
Y2FsZUZhY3RvcigpKTsKICAgICBMYXlvdXRTaXplIHZpZXdwb3J0U2l6ZShtX2NsaWVudC52aWV3
cG9ydFNpemUoKS53aWR0aCgpLCBtX2NsaWVudC52aWV3cG9ydFNpemUoKS5oZWlnaHQoKSk7Ci0g
ICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBzbmFwU3RhdGUuc25hcE9mZnNldEluZm8oKS5jbG9zZXN0
U25hcE9mZnNldChheGlzLCB2aWV3cG9ydFNpemUsIExheW91dFVuaXQoZGVzdGluYXRpb25PZmZz
ZXQgLyBtX2NsaWVudC5wYWdlU2NhbGVGYWN0b3IoKSksIHZlbG9jaXR5LCBvcmlnaW5hbE9mZnNl
dEluTGF5b3V0VW5pdHMpLmZpcnN0OworCisgICAgYXV0byBsYXlvdXREZXN0aW5hdGlvbk9mZnNl
dCA9IExheW91dFBvaW50IHsgZGVzdGluYXRpb25PZmZzZXQgfTsKKyAgICBsYXlvdXREZXN0aW5h
dGlvbk9mZnNldC5zY2FsZSgxLjAgLyBtX2NsaWVudC5wYWdlU2NhbGVGYWN0b3IoKSk7CisKKyAg
ICBMYXlvdXRVbml0IG9mZnNldCA9IHNuYXBTdGF0ZS5zbmFwT2Zmc2V0SW5mbygpLmNsb3Nlc3RT
bmFwT2Zmc2V0KGF4aXMsIHZpZXdwb3J0U2l6ZSwgbGF5b3V0RGVzdGluYXRpb25PZmZzZXQsIHZl
bG9jaXR5LCBvcmlnaW5hbE9mZnNldEluTGF5b3V0VW5pdHMpLmZpcnN0OwogICAgIHJldHVybiBv
ZmZzZXQgKiBtX2NsaWVudC5wYWdlU2NhbGVGYWN0b3IoKTsKIH0KIApAQCAtMTczLDggKzE4MCw4
IEBAIHZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6dXBkYXRlQWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9y
Q2xpZW50T2Zmc2V0KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU2Nyb2xsT2Zmc2V0IG9mZnNl
dCA9IHJvdW5kZWRJbnRQb2ludChtX2NsaWVudC5zY3JvbGxPZmZzZXQoKSk7Ci0gICAgc2V0TmVh
cmVzdFNjcm9sbFNuYXBJbmRleEZvckF4aXNBbmRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jp
em9udGFsLCBvZmZzZXQueCgpKTsKLSAgICBzZXROZWFyZXN0U2Nyb2xsU25hcEluZGV4Rm9yQXhp
c0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBvZmZzZXQueSgpKTsKKyAgICBz
ZXROZWFyZXN0U2Nyb2xsU25hcEluZGV4Rm9yQXhpc0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXM6
Okhvcml6b250YWwsIG9mZnNldCk7CisgICAgc2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRleEZvckF4
aXNBbmRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgb2Zmc2V0KTsKIH0KIAogdm9p
ZCBTY3JvbGxDb250cm9sbGVyOjpyZXNuYXBBZnRlckxheW91dCgpCkBAIC0xODgsMTEgKzE5NSwx
MSBAQCB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnJlc25hcEFmdGVyTGF5b3V0KCkKIAogICAgIGF1
dG8gYWN0aXZlSG9yaXpvbnRhbEluZGV4ID0gbV9zY3JvbGxTbmFwU3RhdGUtPmFjdGl2ZVNuYXBJ
bmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKTsKICAgICBpZiAoIWFjdGl2
ZUhvcml6b250YWxJbmRleCB8fCAqYWN0aXZlSG9yaXpvbnRhbEluZGV4ID49IHNuYXBTdGF0ZS5z
bmFwT2Zmc2V0c0ZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKS5zaXplKCkpCi0g
ICAgICAgIHNldE5lYXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0KFNjcm9sbEV2
ZW50QXhpczo6SG9yaXpvbnRhbCwgb2Zmc2V0LngoKSk7CisgICAgICAgIHNldE5lYXJlc3RTY3Jv
bGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwg
b2Zmc2V0KTsKIAogICAgIGF1dG8gYWN0aXZlVmVydGljYWxJbmRleCA9IG1fc2Nyb2xsU25hcFN0
YXRlLT5hY3RpdmVTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpOwog
ICAgIGlmICghYWN0aXZlVmVydGljYWxJbmRleCB8fCAqYWN0aXZlVmVydGljYWxJbmRleCA+PSBz
bmFwU3RhdGUuc25hcE9mZnNldHNGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpLnNp
emUoKSkKLSAgICAgICAgc2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRleEZvckF4aXNBbmRPZmZzZXQo
U2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgb2Zmc2V0LnkoKSk7CisgICAgICAgIHNldE5lYXJl
c3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6VmVydGlj
YWwsIG9mZnNldCk7CiAKIH0KIC8vIEN1cnJlbnRseSwgb25seSBNYWMgc3VwcG9ydHMgbW9tZW50
dW0gc3JvbGxpbmctYmFzZWQgc2Nyb2xsc25hcHBpbmcgYW5kIHJ1YmJlciBiYW5kaW5nCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmgKaW5kZXggMmI0NzUxZWVhOGU0
M2U1ZDVkNWIyOWY5MzM0MTE3ZWRmY2I3Y2Q4ZS4uZmZhZDNiMTcxZjIyMDQwZjk5NGNmODNiM2Ew
OGRjZTdjOTdlM2E1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xs
ZXIuaApAQCAtMTM1LDcgKzEzNSw3IEBAIHB1YmxpYzoKICAgICBzdGQ6Om9wdGlvbmFsPHVuc2ln
bmVkPiBhY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcykgY29uc3Q7
CiAgICAgdm9pZCB1cGRhdGVTY3JvbGxTbmFwU3RhdGUoY29uc3QgU2Nyb2xsYWJsZUFyZWEmKTsK
ICAgICB2b2lkIHVwZGF0ZUdlc3R1cmVJblByb2dyZXNzU3RhdGUoY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW50Jik7Ci0gICAgZmxvYXQgYWRqdXN0U2Nyb2xsRGVzdGluYXRpb24oU2Nyb2xsRXZlbnRB
eGlzLCBmbG9hdCBkZXN0aW5hdGlvbk9mZnNldCwgZmxvYXQgdmVsb2NpdHksIHN0ZDo6b3B0aW9u
YWw8ZmxvYXQ+IG9yaWdpbmFsT2Zmc2V0KTsKKyAgICBmbG9hdCBhZGp1c3RTY3JvbGxEZXN0aW5h
dGlvbihTY3JvbGxFdmVudEF4aXMsIEZsb2F0UG9pbnQgZGVzdGluYXRpb25PZmZzZXQsIGZsb2F0
IHZlbG9jaXR5LCBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBvcmlnaW5hbE9mZnNldCk7CiAKICNpZiBQ
TEFURk9STShNQUMpCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIGhhbmRsZWQuCkBAIC0xNTksNyAr
MTU5LDcgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgdm9pZCBzZXROZWFyZXN0
U2Nyb2xsU25hcEluZGV4Rm9yQXhpc0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXMsIGludCk7Cisg
ICAgdm9pZCBzZXROZWFyZXN0U2Nyb2xsU25hcEluZGV4Rm9yQXhpc0FuZE9mZnNldChTY3JvbGxF
dmVudEF4aXMsIFNjcm9sbE9mZnNldCk7CiAKICAgICB2b2lkIHVwZGF0ZVNjcm9sbFNuYXBBbmlt
YXRpbmdTdGF0ZShNb25vdG9uaWNUaW1lKTsKICAgICB2b2lkIHVwZGF0ZVJ1YmJlckJhbmRBbmlt
YXRpbmdTdGF0ZShNb25vdG9uaWNUaW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmNwcAppbmRleCA3ZDRjYzczYzJjMWU3ZDU4N2Q1
YThiMGExMjI1YTJkN2I2MGI2M2RkLi43NGZkMTFkYzExODQ4MWM4MTA0Y2YzMzkwMmM5ZjFlYzEw
ZjlhZDlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxTbmFwQW5p
bWF0b3JTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsU25hcEFu
aW1hdG9yU3RhdGUuY3BwCkBAIC00OCwxMSArNDgsMTEgQEAgdm9pZCBTY3JvbGxTbmFwQW5pbWF0
b3JTdGF0ZTo6c2V0dXBBbmltYXRpb25Gb3JTdGF0ZShTY3JvbGxTbmFwU3RhdGUgc3RhdGUsIGNv
bnMKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9tb21lbnR1bUNhbGN1bGF0b3IgPSBTY3JvbGxp
bmdNb21lbnR1bUNhbGN1bGF0b3I6OmNyZWF0ZSh2aWV3cG9ydFNpemUsIGNvbnRlbnRTaXplLCBp
bml0aWFsT2Zmc2V0LCBpbml0aWFsRGVsdGEsIGluaXRpYWxWZWxvY2l0eSk7Ci0gICAgYXV0byBw
cmVkaWN0ZWRTY3JvbGxUYXJnZXQgPSBtX21vbWVudHVtQ2FsY3VsYXRvci0+cHJlZGljdGVkRGVz
dGluYXRpb25PZmZzZXQoKTsKKyAgICBhdXRvIHByZWRpY3RlZFNjcm9sbFRhcmdldCA9IEZsb2F0
UG9pbnQgeyBtX21vbWVudHVtQ2FsY3VsYXRvci0+cHJlZGljdGVkRGVzdGluYXRpb25PZmZzZXQo
KSB9OwogCiAgICAgZmxvYXQgdGFyZ2V0T2Zmc2V0WCwgdGFyZ2V0T2Zmc2V0WTsKLSAgICBzdGQ6
OnRpZSh0YXJnZXRPZmZzZXRYLCBtX2FjdGl2ZVNuYXBJbmRleFgpID0gdGFyZ2V0T2Zmc2V0Rm9y
U3RhcnRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCB2aWV3cG9ydFNpemUsIGNv
bnRlbnRTaXplLndpZHRoKCkgLSB2aWV3cG9ydFNpemUud2lkdGgoKSwgaW5pdGlhbE9mZnNldC54
KCksIHByZWRpY3RlZFNjcm9sbFRhcmdldC53aWR0aCgpLCBwYWdlU2NhbGUsIGluaXRpYWxEZWx0
YS53aWR0aCgpKTsKLSAgICBzdGQ6OnRpZSh0YXJnZXRPZmZzZXRZLCBtX2FjdGl2ZVNuYXBJbmRl
eFkpID0gdGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNh
bCwgdmlld3BvcnRTaXplLCBjb250ZW50U2l6ZS5oZWlnaHQoKSAtIHZpZXdwb3J0U2l6ZS5oZWln
aHQoKSwgaW5pdGlhbE9mZnNldC55KCksIHByZWRpY3RlZFNjcm9sbFRhcmdldC5oZWlnaHQoKSwg
cGFnZVNjYWxlLCBpbml0aWFsRGVsdGEuaGVpZ2h0KCkpOworICAgIHN0ZDo6dGllKHRhcmdldE9m
ZnNldFgsIG1fYWN0aXZlU25hcEluZGV4WCkgPSB0YXJnZXRPZmZzZXRGb3JTdGFydE9mZnNldChT
Y3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIHZpZXdwb3J0U2l6ZSwgY29udGVudFNpemUud2lk
dGgoKSAtIHZpZXdwb3J0U2l6ZS53aWR0aCgpLCBpbml0aWFsT2Zmc2V0LngoKSwgcHJlZGljdGVk
U2Nyb2xsVGFyZ2V0LCBwYWdlU2NhbGUsIGluaXRpYWxEZWx0YS53aWR0aCgpKTsKKyAgICBzdGQ6
OnRpZSh0YXJnZXRPZmZzZXRZLCBtX2FjdGl2ZVNuYXBJbmRleFkpID0gdGFyZ2V0T2Zmc2V0Rm9y
U3RhcnRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgdmlld3BvcnRTaXplLCBjb250
ZW50U2l6ZS5oZWlnaHQoKSAtIHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSwgaW5pdGlhbE9mZnNldC55
KCksIHByZWRpY3RlZFNjcm9sbFRhcmdldCwgcGFnZVNjYWxlLCBpbml0aWFsRGVsdGEuaGVpZ2h0
KCkpOwogICAgIG1fbW9tZW50dW1DYWxjdWxhdG9yLT5zZXRSZXRhcmdldGVkU2Nyb2xsT2Zmc2V0
KHsgdGFyZ2V0T2Zmc2V0WCwgdGFyZ2V0T2Zmc2V0WSB9KTsKICAgICBtX3N0YXJ0VGltZSA9IE1v
bm90b25pY1RpbWU6Om5vdygpOwogICAgIG1fY3VycmVudFN0YXRlID0gc3RhdGU7CkBAIC05MSwx
MyArOTEsMTUgQEAgRmxvYXRQb2ludCBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZTo6Y3VycmVudEFu
aW1hdGVkU2Nyb2xsT2Zmc2V0KE1vbm90b25pY1RpbWUgY3UKICAgICByZXR1cm4gbV9tb21lbnR1
bUNhbGN1bGF0b3ItPnNjcm9sbE9mZnNldEFmdGVyRWxhcHNlZFRpbWUoZWxhcHNlZFRpbWUpOwog
fQogCi1zdGQ6OnBhaXI8ZmxvYXQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+PiBTY3JvbGxTbmFw
QW5pbWF0b3JTdGF0ZTo6dGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlz
IGF4aXMsIGNvbnN0IEZsb2F0U2l6ZSYgdmlld3BvcnRTaXplLCBmbG9hdCBtYXhTY3JvbGxPZmZz
ZXQsIGZsb2F0IHN0YXJ0T2Zmc2V0LCBmbG9hdCBwcmVkaWN0ZWRPZmZzZXQsIGZsb2F0IHBhZ2VT
Y2FsZSwgZmxvYXQgaW5pdGlhbERlbHRhKSBjb25zdAorc3RkOjpwYWlyPGZsb2F0LCBzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPj4gU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6OnRhcmdldE9mZnNldEZv
clN0YXJ0T2Zmc2V0KFNjcm9sbEV2ZW50QXhpcyBheGlzLCBjb25zdCBGbG9hdFNpemUmIHZpZXdw
b3J0U2l6ZSwgZmxvYXQgbWF4U2Nyb2xsT2Zmc2V0LCBmbG9hdCBzdGFydE9mZnNldCwgRmxvYXRQ
b2ludCBwcmVkaWN0ZWRPZmZzZXQsIGZsb2F0IHBhZ2VTY2FsZSwgZmxvYXQgaW5pdGlhbERlbHRh
KSBjb25zdAogewogICAgIGNvbnN0IGF1dG8mIHNuYXBPZmZzZXRzID0gbV9zbmFwT2Zmc2V0c0lu
Zm8ub2Zmc2V0c0ZvckF4aXMoYXhpcyk7CiAgICAgaWYgKHNuYXBPZmZzZXRzLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGNsYW1wVG88ZmxvYXQ+KHByZWRpY3RlZE9m
ZnNldCwgMCwgbWF4U2Nyb2xsT2Zmc2V0KSwgc3RkOjpudWxsb3B0KTsKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bWFrZV9wYWlyKGNsYW1wVG88ZmxvYXQ+KGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpI
b3Jpem9udGFsID8gcHJlZGljdGVkT2Zmc2V0LngoKSA6IHByZWRpY3RlZE9mZnNldC55KCksIDAs
IG1heFNjcm9sbE9mZnNldCksIHN0ZDo6bnVsbG9wdCk7CiAKLSAgICBhdXRvIFt0YXJnZXRPZmZz
ZXQsIHNuYXBJbmRleF0gPSBtX3NuYXBPZmZzZXRzSW5mby5jbG9zZXN0U25hcE9mZnNldChheGlz
LCBMYXlvdXRTaXplIHsgdmlld3BvcnRTaXplIH0sIExheW91dFVuaXQocHJlZGljdGVkT2Zmc2V0
IC8gcGFnZVNjYWxlKSwgaW5pdGlhbERlbHRhLCBMYXlvdXRVbml0KHN0YXJ0T2Zmc2V0IC8gcGFn
ZVNjYWxlKSk7CisgICAgYXV0byBwcmVkaWN0ZWRMYXlvdXRPZmZzZXQgPSBMYXlvdXRQb2ludCB7
IHByZWRpY3RlZE9mZnNldCB9OworICAgIHByZWRpY3RlZExheW91dE9mZnNldC5zY2FsZSgxLjAg
LyBwYWdlU2NhbGUpOworICAgIGF1dG8gW3RhcmdldE9mZnNldCwgc25hcEluZGV4XSA9IG1fc25h
cE9mZnNldHNJbmZvLmNsb3Nlc3RTbmFwT2Zmc2V0KGF4aXMsIExheW91dFNpemUgeyB2aWV3cG9y
dFNpemUgfSwgcHJlZGljdGVkTGF5b3V0T2Zmc2V0LCBpbml0aWFsRGVsdGEsIExheW91dFVuaXQo
c3RhcnRPZmZzZXQgLyBwYWdlU2NhbGUpKTsKICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocGFn
ZVNjYWxlICogY2xhbXBUbzxmbG9hdD4oZmxvYXQgeyB0YXJnZXRPZmZzZXQgfSwgMCwgbWF4U2Ny
b2xsT2Zmc2V0KSwgc25hcEluZGV4KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmgKaW5kZXggYzA3N2FlMGZkNTk4OGVmZDVlMzA5
N2Y0Yjg3NzQ2MzVhZmUwOTY2NS4uNjVhOTRlZDVmZDlmNjE0MmMzMWI5MTM0YTAzYWNjN2JkM2I4
N2I0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsU25hcEFuaW1h
dG9yU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxTbmFwQW5pbWF0
b3JTdGF0ZS5oCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHRyYW5zaXRpb25U
b0Rlc3RpbmF0aW9uUmVhY2hlZFN0YXRlKCk7CiAKIHByaXZhdGU6Ci0gICAgc3RkOjpwYWlyPGZs
b2F0LCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPj4gdGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZzZXQo
U2Nyb2xsRXZlbnRBeGlzLCBjb25zdCBGbG9hdFNpemUmIHZpZXdwb3J0U2l6ZSwgZmxvYXQgbWF4
U2Nyb2xsT2Zmc2V0LCBmbG9hdCBzdGFydE9mZnNldCwgZmxvYXQgcHJlZGljdGVkT2Zmc2V0LCBm
bG9hdCBwYWdlU2NhbGUsIGZsb2F0IGluaXRpYWxEZWx0YSkgY29uc3Q7CisgICAgc3RkOjpwYWly
PGZsb2F0LCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPj4gdGFyZ2V0T2Zmc2V0Rm9yU3RhcnRPZmZz
ZXQoU2Nyb2xsRXZlbnRBeGlzLCBjb25zdCBGbG9hdFNpemUmIHZpZXdwb3J0U2l6ZSwgZmxvYXQg
bWF4U2Nyb2xsT2Zmc2V0LCBmbG9hdCBzdGFydE9mZnNldCwgRmxvYXRQb2ludCBwcmVkaWN0ZWRP
ZmZzZXQsIGZsb2F0IHBhZ2VTY2FsZSwgZmxvYXQgaW5pdGlhbERlbHRhKSBjb25zdDsKICAgICB2
b2lkIHRlYXJkb3duQW5pbWF0aW9uRm9yU3RhdGUoU2Nyb2xsU25hcFN0YXRlKTsKICAgICB2b2lk
IHNldHVwQW5pbWF0aW9uRm9yU3RhdGUoU2Nyb2xsU25hcFN0YXRlLCBjb25zdCBGbG9hdFNpemUm
IGNvbnRlbnRTaXplLCBjb25zdCBGbG9hdFNpemUmIHZpZXdwb3J0U2l6ZSwgZmxvYXQgcGFnZVNj
YWxlLCBjb25zdCBGbG9hdFBvaW50JiBpbml0aWFsT2Zmc2V0LCBjb25zdCBGbG9hdFNpemUmIGlu
aXRpYWxWZWxvY2l0eSwgY29uc3QgRmxvYXRTaXplJiBpbml0aWFsRGVsdGEpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAKaW5kZXggMDJjMGU2OWE0MGE0Y2Rk
MmM3YzBjMDM4MzRhMzBjZTBmYzkzYmE3Yi4uOTY3ZTEzMjZhYmU1YjMwMGE3Mjc2YjQ0ZWI5ODRi
MTc5YWI0MzU1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJs
ZUFyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNw
cApAQCAtNTYzLDkgKzU2Myw5IEBAIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmRvUG9zdFRodW1iTW92
ZVNuYXBwaW5nKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQogICAgIGF1dG8gY3Vy
cmVudE9mZnNldCA9IHNjcm9sbE9mZnNldCgpOwogICAgIGF1dG8gbmV3T2Zmc2V0ID0gY3VycmVu
dE9mZnNldDsKICAgICBpZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKLSAg
ICAgICAgbmV3T2Zmc2V0LnNldFgoc2Nyb2xsQW5pbWF0b3ItPmFkanVzdFNjcm9sbE9mZnNldEZv
clNuYXBwaW5nSWZOZWVkZWQoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBjdXJyZW50T2Zm
c2V0LngoKSwgU2Nyb2xsU25hcFBvaW50U2VsZWN0aW9uTWV0aG9kOjpDbG9zZXN0KSk7CisgICAg
ICAgIG5ld09mZnNldC5zZXRYKHNjcm9sbEFuaW1hdG9yLT5hZGp1c3RTY3JvbGxPZmZzZXRGb3JT
bmFwcGluZ0lmTmVlZGVkKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgY3VycmVudE9mZnNl
dCwgU2Nyb2xsU25hcFBvaW50U2VsZWN0aW9uTWV0aG9kOjpDbG9zZXN0KSk7CiAgICAgZWxzZQot
ICAgICAgICBuZXdPZmZzZXQuc2V0WShzY3JvbGxBbmltYXRvci0+YWRqdXN0U2Nyb2xsT2Zmc2V0
Rm9yU25hcHBpbmdJZk5lZWRlZChTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBjdXJyZW50T2Zm
c2V0LnkoKSwgU2Nyb2xsU25hcFBvaW50U2VsZWN0aW9uTWV0aG9kOjpDbG9zZXN0KSk7CisgICAg
ICAgIG5ld09mZnNldC5zZXRZKHNjcm9sbEFuaW1hdG9yLT5hZGp1c3RTY3JvbGxPZmZzZXRGb3JT
bmFwcGluZ0lmTmVlZGVkKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIGN1cnJlbnRPZmZzZXQs
IFNjcm9sbFNuYXBQb2ludFNlbGVjdGlvbk1ldGhvZDo6Q2xvc2VzdCkpOwogICAgIGlmIChuZXdP
ZmZzZXQgPT0gY3VycmVudE9mZnNldCkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3JQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVl
L1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaAppbmRleCAwMGQwZDRhZjgzYTMzYWU3
NTkzYTc0MmQ0Nzc2Y2M3NjYwYTc1NzU0Li5kMmM3YmU2ODI4MzRhNWRlNjA2NTZhYmRiYWQ1Yjk3
Y2I4YzUxMzg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXll
clRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclBy
b3h5LmgKQEAgLTExOCw3ICsxMTgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZXN0YWJsaXNoTGF5
ZXJUcmVlU2Nyb2xsaW5nUmVsYXRpb25zKGNvbnN0IFJlbW90ZUxheWVyVHJlZUhvc3QmKTsKIAog
ICAgIGJvb2wgc2hvdWxkU25hcEZvck1haW5GcmFtZVNjcm9sbGluZyhXZWJDb3JlOjpTY3JvbGxF
dmVudEF4aXMpIGNvbnN0OwotICAgIHN0ZDo6cGFpcjxmbG9hdCwgc3RkOjpvcHRpb25hbDx1bnNp
Z25lZD4+IGNsb3Nlc3RTbmFwT2Zmc2V0Rm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFdlYkNvcmU6OlNj
cm9sbEV2ZW50QXhpcywgZmxvYXQgY3VycmVudFNjcm9sbE9mZnNldCwgZmxvYXQgc2Nyb2xsRGVz
dGluYXRpb24sIGZsb2F0IHZlbG9jaXR5KSBjb25zdDsKKyAgICBzdGQ6OnBhaXI8ZmxvYXQsIHN0
ZDo6b3B0aW9uYWw8dW5zaWduZWQ+PiBjbG9zZXN0U25hcE9mZnNldEZvck1haW5GcmFtZVNjcm9s
bGluZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXMsIGZsb2F0IGN1cnJlbnRTY3JvbGxPZmZzZXQs
IFdlYkNvcmU6OkZsb2F0UG9pbnQgc2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0IHZlbG9jaXR5KSBj
b25zdDsKIAogICAgIHZvaWQgc2VuZFVJU3RhdGVDaGFuZ2VkSWZOZWNlc3NhcnkoKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9SZW1v
dGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5SU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5SU9T
Lm1tCmluZGV4IGZiNjRlZWMzYTE3ZGUyYzY0OGU4MDQ4Zjc0ZDBlM2I2NDQ0NWM5ODAuLmU1NmY4
ZjJhZmI5MzU2OTRjODFlYTEwZjNhYjNjZWM1N2Y5MGRjNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvUmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3JQcm94eUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXll
clRyZWUvaW9zL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHlJT1MubW0KQEAgLTE5Nywx
NCArMTk3LDE0IEBAIHZvaWQgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6YWRqdXN0
VGFyZ2V0Q29udGVudE9mZnNldEZvclNuYXBwaW5nKENHU2l6CiAgICAgLy8gVGhlIGJvdW5kcyBj
aGVja2luZyB3aXRoIG1heFNjcm9sbE9mZnNldHMgaXMgdG8gZW5zdXJlIHRoYXQgd2Ugd29uJ3Qg
aW50ZXJmZXJlIHdpdGggcnViYmVyLWJhbmRpbmcgd2hlbiBzY3JvbGxpbmcgdG8gdGhlIGVkZ2Ug
b2YgdGhlIHBhZ2UuCiAgICAgaWYgKHNob3VsZFNuYXBGb3JNYWluRnJhbWVTY3JvbGxpbmcoV2Vi
Q29yZTo6U2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSkgewogICAgICAgICBmbG9hdCBwb3Rl
bnRpYWxTbmFwUG9zaXRpb247Ci0gICAgICAgIHN0ZDo6dGllKHBvdGVudGlhbFNuYXBQb3NpdGlv
biwgbV9jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KSA9IGNsb3Nlc3RTbmFwT2Zmc2V0
Rm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRh
bCwgY3VycmVudENvbnRlbnRPZmZzZXQueCwgdGFyZ2V0Q29udGVudE9mZnNldC0+eCwgdmVsb2Np
dHkueCk7CisgICAgICAgIHN0ZDo6dGllKHBvdGVudGlhbFNuYXBQb3NpdGlvbiwgbV9jdXJyZW50
SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KSA9IGNsb3Nlc3RTbmFwT2Zmc2V0Rm9yTWFpbkZyYW1l
U2Nyb2xsaW5nKFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgY3VycmVudENv
bnRlbnRPZmZzZXQueCwgRmxvYXRQb2ludCgqdGFyZ2V0Q29udGVudE9mZnNldCksIHZlbG9jaXR5
LngpOwogICAgICAgICBpZiAodGFyZ2V0Q29udGVudE9mZnNldC0+eCA+IDAgJiYgdGFyZ2V0Q29u
dGVudE9mZnNldC0+eCA8IG1heFNjcm9sbE9mZnNldHMud2lkdGgpCiAgICAgICAgICAgICB0YXJn
ZXRDb250ZW50T2Zmc2V0LT54ID0gc3RkOjptaW48ZmxvYXQ+KG1heFNjcm9sbE9mZnNldHMud2lk
dGgsIHBvdGVudGlhbFNuYXBQb3NpdGlvbik7CiAgICAgfQogCiAgICAgaWYgKHNob3VsZFNuYXBG
b3JNYWluRnJhbWVTY3JvbGxpbmcoV2ViQ29yZTo6U2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCkp
IHsKICAgICAgICAgZmxvYXQgcG90ZW50aWFsU25hcFBvc2l0aW9uOwotICAgICAgICBzdGQ6OnRp
ZShwb3RlbnRpYWxTbmFwUG9zaXRpb24sIG1fY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgp
ID0gY2xvc2VzdFNuYXBPZmZzZXRGb3JNYWluRnJhbWVTY3JvbGxpbmcoV2ViQ29yZTo6U2Nyb2xs
RXZlbnRBeGlzOjpWZXJ0aWNhbCwgY3VycmVudENvbnRlbnRPZmZzZXQueSArIHRvcEluc2V0LCB0
YXJnZXRDb250ZW50T2Zmc2V0LT55LCB2ZWxvY2l0eS55KTsKKyAgICAgICAgc3RkOjp0aWUocG90
ZW50aWFsU25hcFBvc2l0aW9uLCBtX2N1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KSA9IGNs
b3Nlc3RTbmFwT2Zmc2V0Rm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFdlYkNvcmU6OlNjcm9sbEV2ZW50
QXhpczo6VmVydGljYWwsIGN1cnJlbnRDb250ZW50T2Zmc2V0LnkgKyB0b3BJbnNldCwgRmxvYXRQ
b2ludCgqdGFyZ2V0Q29udGVudE9mZnNldCksIHZlbG9jaXR5LnkpOwogICAgICAgICBpZiAobV9j
dXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCkKICAgICAgICAgICAgIHBvdGVudGlhbFNuYXBQ
b3NpdGlvbiAtPSB0b3BJbnNldDsKIApAQCAtMjI4LDE2ICsyMjgsMTYgQEAgYm9vbCBSZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpzaG91bGRTbmFwRm9yTWFpbkZyYW1lU2Nyb2xsaW5n
KFNjcm9sbEV2ZW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0ZDo6cGFpcjxmbG9hdCwgc3Rk
OjpvcHRpb25hbDx1bnNpZ25lZD4+IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OmNs
b3Nlc3RTbmFwT2Zmc2V0Rm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFNjcm9sbEV2ZW50QXhpcyBheGlz
LCBmbG9hdCBjdXJyZW50U2Nyb2xsT2Zmc2V0LCBmbG9hdCBzY3JvbGxEZXN0aW5hdGlvbiwgZmxv
YXQgdmVsb2NpdHkpIGNvbnN0CitzdGQ6OnBhaXI8ZmxvYXQsIHN0ZDo6b3B0aW9uYWw8dW5zaWdu
ZWQ+PiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpjbG9zZXN0U25hcE9mZnNldEZv
ck1haW5GcmFtZVNjcm9sbGluZyhTY3JvbGxFdmVudEF4aXMgYXhpcywgZmxvYXQgY3VycmVudFNj
cm9sbE9mZnNldCwgRmxvYXRQb2ludCBzY3JvbGxEZXN0aW5hdGlvbiwgZmxvYXQgdmVsb2NpdHkp
IGNvbnN0CiB7CiAgICAgU2Nyb2xsaW5nVHJlZU5vZGUqIHJvb3QgPSBtX3Njcm9sbGluZ1RyZWUt
PnJvb3ROb2RlKCk7CiAgICAgQVNTRVJUKHJvb3QgJiYgcm9vdC0+aXNGcmFtZVNjcm9sbGluZ05v
ZGUoKSk7CiAgICAgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZSogcm9vdFNjcm9sbGlu
Z05vZGUgPSBzdGF0aWNfY2FzdDxTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlKj4ocm9v
dCk7CiAgICAgY29uc3QgYXV0byYgc25hcE9mZnNldHNJbmZvID0gcm9vdFNjcm9sbGluZ05vZGUt
PnNuYXBPZmZzZXRzSW5mbygpOwogCi0gICAgZmxvYXQgc2NhbGVkU2Nyb2xsRGVzdGluYXRpb24g
PSBzY3JvbGxEZXN0aW5hdGlvbiAvIG1fd2ViUGFnZVByb3h5LmRpc3BsYXllZENvbnRlbnRTY2Fs
ZSgpOworICAgIHNjcm9sbERlc3RpbmF0aW9uLnNjYWxlKDEuMCAvIG1fd2ViUGFnZVByb3h5LmRp
c3BsYXllZENvbnRlbnRTY2FsZSgpKTsKICAgICBmbG9hdCBzY2FsZWRDdXJyZW50U2Nyb2xsT2Zm
c2V0ID0gY3VycmVudFNjcm9sbE9mZnNldCAvIG1fd2ViUGFnZVByb3h5LmRpc3BsYXllZENvbnRl
bnRTY2FsZSgpOwotICAgIGF1dG8gW3Jhd0Nsb3Nlc3RTbmFwT2Zmc2V0LCBuZXdJbmRleF0gPSBz
bmFwT2Zmc2V0c0luZm8uY2xvc2VzdFNuYXBPZmZzZXQoYXhpcywgcm9vdFNjcm9sbGluZ05vZGUt
PmxheW91dFZpZXdwb3J0KCkuc2l6ZSgpLCBzY2FsZWRTY3JvbGxEZXN0aW5hdGlvbiwgdmVsb2Np
dHksIHNjYWxlZEN1cnJlbnRTY3JvbGxPZmZzZXQpOworICAgIGF1dG8gW3Jhd0Nsb3Nlc3RTbmFw
T2Zmc2V0LCBuZXdJbmRleF0gPSBzbmFwT2Zmc2V0c0luZm8uY2xvc2VzdFNuYXBPZmZzZXQoYXhp
cywgcm9vdFNjcm9sbGluZ05vZGUtPmxheW91dFZpZXdwb3J0KCkuc2l6ZSgpLCBzY3JvbGxEZXN0
aW5hdGlvbiwgdmVsb2NpdHksIHNjYWxlZEN1cnJlbnRTY3JvbGxPZmZzZXQpOwogICAgIHJldHVy
biBzdGQ6Om1ha2VfcGFpcihyYXdDbG9zZXN0U25hcE9mZnNldCAqIG1fd2ViUGFnZVByb3h5LmRp
c3BsYXllZENvbnRlbnRTY2FsZSgpLCBuZXdJbmRleCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGVEZWxlZ2F0ZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxh
eWVyVHJlZS9pb3MvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5tbQppbmRl
eCA2N2MzODg2NTVmNmJhOGRkYjU5MGI3ZTE4NDEwNDAxZjAwZjE5Y2QxLi44YTlmZjY3NWRjZTg1
OWU4NzE0MmQ1YjM3ODg2Njg2YjY1ZDAzMGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVl
L2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLm1tCkBAIC05NiwyNSAr
OTYsMjIgQEAgLSAodm9pZClzY3JvbGxWaWV3V2lsbEVuZERyYWdnaW5nOihVSVNjcm9sbFZpZXcg
KilzY3JvbGxWaWV3IHdpdGhWZWxvY2l0eTooQ0dQb2kKICAgICAgICAgfQogICAgIH0KIAotICAg
IENHRmxvYXQgaG9yaXpvbnRhbFRhcmdldCA9IHRhcmdldENvbnRlbnRPZmZzZXQtPng7Ci0gICAg
Q0dGbG9hdCB2ZXJ0aWNhbFRhcmdldCA9IHRhcmdldENvbnRlbnRPZmZzZXQtPnk7Ci0KICAgICBz
dGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBvcmlnaW5hbEhvcml6b250YWxTbmFwUG9zaXRpb24gPSBf
c2Nyb2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRIb3Jpem9u
dGFsU25hcFBvaW50SW5kZXgoKTsKICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBvcmlnaW5h
bFZlcnRpY2FsU25hcFBvc2l0aW9uID0gX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9s
bGluZ05vZGUoKS5jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpOwogCiAgICAgV2ViQ29y
ZTo6RmxvYXRTaXplIHZpZXdwb3J0U2l6ZShzdGF0aWNfY2FzdDxmbG9hdD4oQ0dSZWN0R2V0V2lk
dGgoW3Njcm9sbFZpZXcgYm91bmRzXSkpLCBzdGF0aWNfY2FzdDxmbG9hdD4oQ0dSZWN0R2V0SGVp
Z2h0KFtzY3JvbGxWaWV3IGJvdW5kc10pKSk7CiAgICAgY29uc3QgYXV0byYgc25hcE9mZnNldHNJ
bmZvID0gX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5zbmFwT2Zm
c2V0c0luZm8oKTsKICAgICBpZiAoIXNuYXBPZmZzZXRzSW5mby5ob3Jpem9udGFsU25hcE9mZnNl
dHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1dG8gW3BvdGVudGlhbFNuYXBQb3NpdGlvbiwgaW5k
ZXhdID0gc25hcE9mZnNldHNJbmZvLmNsb3Nlc3RTbmFwT2Zmc2V0KFdlYkNvcmU6OlNjcm9sbEV2
ZW50QXhpczo6SG9yaXpvbnRhbCwgdmlld3BvcnRTaXplLCBob3Jpem9udGFsVGFyZ2V0LCB2ZWxv
Y2l0eS54LCBzY3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQueCk7CisgICAgICAgIGF1dG8gW3BvdGVu
dGlhbFNuYXBQb3NpdGlvbiwgaW5kZXhdID0gc25hcE9mZnNldHNJbmZvLmNsb3Nlc3RTbmFwT2Zm
c2V0KFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgdmlld3BvcnRTaXplLCBX
ZWJDb3JlOjpGbG9hdFBvaW50KCp0YXJnZXRDb250ZW50T2Zmc2V0KSwgdmVsb2NpdHkueCwgc2Ny
b2xsVmlldy5jb250ZW50T2Zmc2V0LngpOwogICAgICAgICBfc2Nyb2xsaW5nVHJlZU5vZGVEZWxl
Z2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgo
aW5kZXgpOwotICAgICAgICBpZiAoaG9yaXpvbnRhbFRhcmdldCA+PSAwICYmIGhvcml6b250YWxU
YXJnZXQgPD0gc2Nyb2xsVmlldy5jb250ZW50U2l6ZS53aWR0aCkKKyAgICAgICAgaWYgKHRhcmdl
dENvbnRlbnRPZmZzZXQtPnggPj0gMCAmJiB0YXJnZXRDb250ZW50T2Zmc2V0LT54IDw9IHNjcm9s
bFZpZXcuY29udGVudFNpemUud2lkdGgpCiAgICAgICAgICAgICB0YXJnZXRDb250ZW50T2Zmc2V0
LT54ID0gcG90ZW50aWFsU25hcFBvc2l0aW9uOwogICAgIH0KIAogICAgIGlmICghc25hcE9mZnNl
dHNJbmZvLnZlcnRpY2FsU25hcE9mZnNldHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1dG8gW3Bv
dGVudGlhbFNuYXBQb3NpdGlvbiwgaW5kZXhdID0gc25hcE9mZnNldHNJbmZvLmNsb3Nlc3RTbmFw
T2Zmc2V0KFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIHZpZXdwb3J0U2l6ZSwg
dmVydGljYWxUYXJnZXQsIHZlbG9jaXR5LnksIHNjcm9sbFZpZXcuY29udGVudE9mZnNldC55KTsK
KyAgICAgICAgYXV0byBbcG90ZW50aWFsU25hcFBvc2l0aW9uLCBpbmRleF0gPSBzbmFwT2Zmc2V0
c0luZm8uY2xvc2VzdFNuYXBPZmZzZXQoV2ViQ29yZTo6U2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNh
bCwgdmlld3BvcnRTaXplLCBXZWJDb3JlOjpGbG9hdFBvaW50KCp0YXJnZXRDb250ZW50T2Zmc2V0
KSwgdmVsb2NpdHkueSwgc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0LnkpOwogICAgICAgICBfc2Ny
b2xsaW5nVHJlZU5vZGVEZWxlZ2F0ZS0+c2Nyb2xsaW5nTm9kZSgpLnNldEN1cnJlbnRWZXJ0aWNh
bFNuYXBQb2ludEluZGV4KGluZGV4KTsKLSAgICAgICAgaWYgKHZlcnRpY2FsVGFyZ2V0ID49IDAg
JiYgdmVydGljYWxUYXJnZXQgPD0gc2Nyb2xsVmlldy5jb250ZW50U2l6ZS5oZWlnaHQpCisgICAg
ICAgIGlmICh0YXJnZXRDb250ZW50T2Zmc2V0LT55ID49IDAgJiYgdGFyZ2V0Q29udGVudE9mZnNl
dC0+eSA8PSBzY3JvbGxWaWV3LmNvbnRlbnRTaXplLmhlaWdodCkKICAgICAgICAgICAgIHRhcmdl
dENvbnRlbnRPZmZzZXQtPnkgPSBwb3RlbnRpYWxTbmFwUG9zaXRpb247CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433939</attachid>
            <date>2021-07-21 09:23:09 -0700</date>
            <delta_ts>2021-07-22 02:00:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228023-20210721182307.patch</filename>
            <type>text/plain</type>
            <size>35618</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTU5NmVmZWIxNWI0ZWE5
NzUzN2VkOThmOTYyODA0MzQ3MmRlNjJlNC4uOWFiZDdmZTkyOGUxODBmMTAyMTY2MDI2NTRjZWIy
ZTIzYjM5YjFmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDIxLTA3LTIxICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25Ad2Via2l0Lm9yZz4KKworICAgICAgICBbY3NzLXNjcm9s
bC1zbmFwXSBQYXNzIHRoZSBmdWxsIHRhcmdldCBwb2ludCB3aGVuIHNlbGVjdGluZyBhIHNuYXAg
b2Zmc2V0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjgwMjMKKworICAgICAgICBSZXZpZXdlZCBieSBGcsOpZMOpcmljIFdhbmcuCisKKyAgICAgICAg
UGFzcyB0aGUgZnVsbCBwcm9wb3NlZCBkZXN0aW5hdGlvbiBzY3JvbGwgb2Zmc2V0IHdoZW4gY2Fs
bGluZyBjbG9zZXN0U25hcE9mZnNldC4gRm9yCisgICAgICAgIG5vdywgb25seSB0aGUgY29tcG9u
ZW50IGluIHRoZSBzY3JvbGwgZGlyZWN0aW9uIGlzIHVzZWQsIGJ1dCBldmVudHVhbGx5IHRoZSBv
dGhlcgorICAgICAgICBjb21wb25lbnQgd2lsbCBiZSB1c2VkIHRvIGF2b2lkIHNuYXBwaW5nIHRv
IHNuYXAgYXJlYXMgdGhhdCBhcmUgZW50aXJlbHkgb2ZmIHRoZSBzY3JlZW4uCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLiBUaGlzIGNoYW5nZSBpcyBzaW1wbHkgYSByZWZhY3RvciBpbiBwcmVwYXJh
dGlvbiBmb3IgYSBiZWhhdmlvcgorICAgICAgICBjaGFuZ2UgYW5kIHNob3VsZG4ndCBjaGFuZ2Ug
YmVoYXZpb3IgaXRzZWxmLgorCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9m
ZnNldHNJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNsb3Nlc3RTbmFwT2Zmc2V0V2l0aElu
Zm9BbmRBeGlzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5m
bzo6Y2xvc2VzdFNuYXBPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRTY3Jv
bGxTbmFwT2Zmc2V0c0luZm86OmNsb3Nlc3RTbmFwT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKiBw
YWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uaDoKKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9uaWNvc2lhL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVOaWNvc2lh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdh
dGVOaWNvc2lhOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxB
bmltYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjphZGp1c3RTY3JvbGxPZmZzZXRGb3JT
bmFwcGluZ0lmTmVlZGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQ29udHJvbGxlcjo6c2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRleEZvckF4aXNBbmRP
ZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6YWRqdXN0U2Nyb2xs
RGVzdGluYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6dXBkYXRl
QWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQ2xpZW50T2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbENvbnRyb2xsZXI6OnJlc25hcEFmdGVyTGF5b3V0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9TY3JvbGxDb250cm9sbGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsU25hcEFuaW1h
dG9yU3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6
OnNldHVwQW5pbWF0aW9uRm9yU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsU25hcEFu
aW1hdG9yU3RhdGU6OnRhcmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0IGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L1Njcm9sbGFibGVBcmVhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpk
b1Bvc3RUaHVtYk1vdmVTbmFwcGluZyk6CisKIDIwMjEtMDctMjAgIE15bGVzIEMuIE1heGZpZWxk
ICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICByMjgwMTAzIGlzIG5vdCBuZWNlc3Nh
cnkgb24gYWxsIG9wZXJhdGluZyBzeXN0ZW1zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDZkZjhlNDBiZjZkMjhiZjVh
YTg5NGViOTc1MTJhZjkyYTg3M2RjOWUuLmYxMzg4ODUxZTZmNWFjYWE2MDBiMjhjZDY1MzgyOTBk
M2YwMmI5MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjEtMDctMjEgIE1hcnRpbiBS
b2JpbnNvbiAgPG1yb2JpbnNvbkB3ZWJraXQub3JnPgorCisgICAgICAgIFtjc3Mtc2Nyb2xsLXNu
YXBdIFBhc3MgdGhlIGZ1bGwgdGFyZ2V0IHBvaW50IHdoZW4gc2VsZWN0aW5nIGEgc25hcCBvZmZz
ZXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODAy
MworCisgICAgICAgIFJldmlld2VkIGJ5IEZyw6lkw6lyaWMgV2FuZy4KKworICAgICAgICAqIFVJ
UHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1JlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yUHJveHlJT1MubW06CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yUHJveHk6OmFkanVzdFRhcmdldENvbnRlbnRPZmZzZXRGb3JTbmFwcGluZyk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OmNsb3Nl
c3RTbmFwT2Zmc2V0Rm9yTWFpbkZyYW1lU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVn
YXRlSU9TLm1tOgorICAgICAgICAoLVtXS1Njcm9sbGluZ05vZGVTY3JvbGxWaWV3RGVsZWdhdGUg
c2Nyb2xsVmlld1dpbGxFbmREcmFnZ2luZzp3aXRoVmVsb2NpdHk6dGFyZ2V0Q29udGVudE9mZnNl
dDpdKToKKwogMjAyMS0wNy0yMCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNv
bT4KIAogICAgICAgICBbaU9TXSBBZGQgU1BJIGZvciBpbnRlcm5hbCBjbGllbnRzIHRvIGNvbnN1
bHQgd2hldGhlciBvciBub3Qgdmlld3BvcnQgcXVpcmtzIHNob3VsZCBiZSBlbmFibGVkCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0lu
Zm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJ
bmZvLmNwcAppbmRleCAzNTMwMjZmZjQ4MzRlM2Y5MWVlY2IxZTliOWQwNzExOWMyZTQ0NzQ1Li5m
NGFkNWQ0YWIwMjEzNzgzNmZlMjZjOGExMTNhM2NkOTBjY2Y4OTFjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHAK
QEAgLTkwLDkgKzkwLDEwIEBAIHN0YXRpYyBQb3RlbnRpYWxTbmFwUG9pbnRTZWFyY2hSZXN1bHQ8
VW5pdFR5cGU+IHNlYXJjaEZvclBvdGVudGlhbFNuYXBQb2ludHMoY29uCiAgICAgcmV0dXJuIHsg
cHJldmlvdXMsIG5leHQsIHNuYXBTdG9wLCBsYW5kZWRJbnNpZGVTbmFwQXJlYVRoYXRDb25zdW1l
c1ZpZXdwb3J0IH07CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBJbmZvVHlwZSwgdHlwZW5hbWUg
U2l6ZVR5cGUsIHR5cGVuYW1lIExheW91dFR5cGU+Ci1zdGF0aWMgc3RkOjpwYWlyPExheW91dFR5
cGUsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+PiBjbG9zZXN0U25hcE9mZnNldFdpdGhJbmZvQW5k
QXhpcyhjb25zdCBJbmZvVHlwZSYgaW5mbywgU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGNvbnN0IFNp
emVUeXBlJiB2aWV3cG9ydFNpemUsIExheW91dFR5cGUgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQs
IGZsb2F0IHZlbG9jaXR5LCBzdGQ6Om9wdGlvbmFsPExheW91dFR5cGU+IG9yaWdpbmFsT2Zmc2V0
Rm9yRGlyZWN0aW9uYWxTbmFwcGluZykKK3RlbXBsYXRlIDx0eXBlbmFtZSBJbmZvVHlwZSwgdHlw
ZW5hbWUgU2l6ZVR5cGUsIHR5cGVuYW1lIExheW91dFR5cGUsIHR5cGVuYW1lIFBvaW50VHlwZT4K
K3N0YXRpYyBzdGQ6OnBhaXI8TGF5b3V0VHlwZSwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4+IGNs
b3Nlc3RTbmFwT2Zmc2V0V2l0aEluZm9BbmRBeGlzKGNvbnN0IEluZm9UeXBlJiBpbmZvLCBTY3Jv
bGxFdmVudEF4aXMgYXhpcywgY29uc3QgU2l6ZVR5cGUmIHZpZXdwb3J0U2l6ZSwgUG9pbnRUeXBl
IHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0UG9pbnQsIGZsb2F0IHZlbG9jaXR5LCBzdGQ6Om9wdGlv
bmFsPExheW91dFR5cGU+IG9yaWdpbmFsT2Zmc2V0Rm9yRGlyZWN0aW9uYWxTbmFwcGluZykKIHsK
KyAgICBhdXRvIHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0ID0gYXhpcyA9PSBTY3JvbGxFdmVudEF4
aXM6Okhvcml6b250YWwgPyBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldFBvaW50LngoKSA6IHNjcm9s
bERlc3RpbmF0aW9uT2Zmc2V0UG9pbnQueSgpOwogICAgIGNvbnN0IGF1dG8mIHNuYXBPZmZzZXRz
ID0gaW5mby5vZmZzZXRzRm9yQXhpcyhheGlzKTsKICAgICBhdXRvIHBhaXJGb3JOb1NuYXBwaW5n
ID0gc3RkOjptYWtlX3BhaXIoc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIHN0ZDo6bnVsbG9wdCk7
CiAgICAgaWYgKHNuYXBPZmZzZXRzLmlzRW1wdHkoKSkKQEAgLTM4OCwxMyArMzg5LDEzIEBAIEZs
b2F0U2Nyb2xsU25hcE9mZnNldHNJbmZvIExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6Y29u
dmVydFVuaXRzKGZsb2F0IGRldmljCiB9CiAKIHRlbXBsYXRlIDw+IHRlbXBsYXRlIDw+Ci1zdGQ6
OnBhaXI8TGF5b3V0VW5pdCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4+IExheW91dFNjcm9sbFNu
YXBPZmZzZXRzSW5mbzo6Y2xvc2VzdFNuYXBPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGNv
bnN0IExheW91dFNpemUmIHZpZXdwb3J0U2l6ZSwgTGF5b3V0VW5pdCBzY3JvbGxEZXN0aW5hdGlv
bk9mZnNldCwgZmxvYXQgdmVsb2NpdHksIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gb3JpZ2lu
YWxQb3NpdGlvbkZvckRpcmVjdGlvbmFsU25hcHBpbmcpIGNvbnN0CitzdGQ6OnBhaXI8TGF5b3V0
VW5pdCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4+IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5m
bzo6Y2xvc2VzdFNuYXBPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGNvbnN0IExheW91dFNp
emUmIHZpZXdwb3J0U2l6ZSwgTGF5b3V0UG9pbnQgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIGZs
b2F0IHZlbG9jaXR5LCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IG9yaWdpbmFsUG9zaXRpb25G
b3JEaXJlY3Rpb25hbFNuYXBwaW5nKSBjb25zdAogewogICAgIHJldHVybiBjbG9zZXN0U25hcE9m
ZnNldFdpdGhJbmZvQW5kQXhpcygqdGhpcywgYXhpcywgdmlld3BvcnRTaXplLCBzY3JvbGxEZXN0
aW5hdGlvbk9mZnNldCwgdmVsb2NpdHksIG9yaWdpbmFsUG9zaXRpb25Gb3JEaXJlY3Rpb25hbFNu
YXBwaW5nKTsKIH0KIAogdGVtcGxhdGUgPD4gdGVtcGxhdGU8Pgotc3RkOjpwYWlyPGZsb2F0LCBz
dGQ6Om9wdGlvbmFsPHVuc2lnbmVkPj4gRmxvYXRTY3JvbGxTbmFwT2Zmc2V0c0luZm86OmNsb3Nl
c3RTbmFwT2Zmc2V0KFNjcm9sbEV2ZW50QXhpcyBheGlzLCBjb25zdCBGbG9hdFNpemUmIHZpZXdw
b3J0U2l6ZSwgZmxvYXQgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIGZsb2F0IHZlbG9jaXR5LCBz
dGQ6Om9wdGlvbmFsPGZsb2F0PiBvcmlnaW5hbFBvc2l0aW9uRm9yRGlyZWN0aW9uYWxTbmFwcGlu
ZykgY29uc3QKK3N0ZDo6cGFpcjxmbG9hdCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4+IEZsb2F0
U2Nyb2xsU25hcE9mZnNldHNJbmZvOjpjbG9zZXN0U25hcE9mZnNldChTY3JvbGxFdmVudEF4aXMg
YXhpcywgY29uc3QgRmxvYXRTaXplJiB2aWV3cG9ydFNpemUsIEZsb2F0UG9pbnQgc2Nyb2xsRGVz
dGluYXRpb25PZmZzZXQsIGZsb2F0IHZlbG9jaXR5LCBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBvcmln
aW5hbFBvc2l0aW9uRm9yRGlyZWN0aW9uYWxTbmFwcGluZykgY29uc3QKIHsKICAgICByZXR1cm4g
Y2xvc2VzdFNuYXBPZmZzZXRXaXRoSW5mb0FuZEF4aXMoKnRoaXMsIGF4aXMsIHZpZXdwb3J0U2l6
ZSwgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIHZlbG9jaXR5LCBvcmlnaW5hbFBvc2l0aW9uRm9y
RGlyZWN0aW9uYWxTbmFwcGluZyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5oCmluZGV4IDA2YjU4MWRkNTQzMzZhZmNj
ZjgzYjE0NThkZGIxMWFjMjNlZmQyNjIuLjE1YzIyNzRiMjdhMDRkZTgzOTc0NGNjMmIzMTc4MGVk
MzE5YTVhOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bFNuYXBPZmZzZXRzSW5mby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbFNuYXBPZmZzZXRzSW5mby5oCkBAIC03MCw4ICs3MCw4IEBAIHN0cnVjdCBTY3JvbGxTbmFw
T2Zmc2V0c0luZm8gewogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE91dHB1dFR5cGU+
IE91dHB1dFR5cGUgY29udmVydFVuaXRzKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gMC4wKSBj
b25zdDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTaXplVHlwZT4KLSAgICBXRUJDT1JFX0VYUE9S
VCBzdGQ6OnBhaXI8VW5pdFR5cGUsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+PiBjbG9zZXN0U25h
cE9mZnNldChTY3JvbGxFdmVudEF4aXMsIGNvbnN0IFNpemVUeXBlJiB2aWV3cG9ydFNpemUsIFVu
aXRUeXBlIHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBmbG9hdCB2ZWxvY2l0eSwgc3RkOjpvcHRp
b25hbDxVbml0VHlwZT4gb3JpZ2luYWxQb3NpdGlvbkZvckRpcmVjdGlvbmFsU25hcHBpbmcgPSBz
dGQ6Om51bGxvcHQpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNpemVUeXBlLCB0eXBl
bmFtZSBQb2ludFR5cGU+CisgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPFVuaXRUeXBlLCBz
dGQ6Om9wdGlvbmFsPHVuc2lnbmVkPj4gY2xvc2VzdFNuYXBPZmZzZXQoU2Nyb2xsRXZlbnRBeGlz
LCBjb25zdCBTaXplVHlwZSYgdmlld3BvcnRTaXplLCBQb2ludFR5cGUgc2Nyb2xsRGVzdGluYXRp
b25PZmZzZXQsIGZsb2F0IHZlbG9jaXR5LCBzdGQ6Om9wdGlvbmFsPFVuaXRUeXBlPiBvcmlnaW5h
bFBvc2l0aW9uRm9yRGlyZWN0aW9uYWxTbmFwcGluZyA9IHN0ZDo6bnVsbG9wdCkgY29uc3Q7CiB9
OwogCiB1c2luZyBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8gPSBTY3JvbGxTbmFwT2Zmc2V0
c0luZm88TGF5b3V0VW5pdCwgTGF5b3V0UmVjdD47CkBAIC04MCwxMyArODAsMTMgQEAgdXNpbmcg
RmxvYXRTY3JvbGxTbmFwT2Zmc2V0c0luZm8gPSBTY3JvbGxTbmFwT2Zmc2V0c0luZm88ZmxvYXQs
IEZsb2F0UmVjdD47CiB0ZW1wbGF0ZSA8PiB0ZW1wbGF0ZSA8PgogTGF5b3V0U2Nyb2xsU25hcE9m
ZnNldHNJbmZvIEZsb2F0U2Nyb2xsU25hcE9mZnNldHNJbmZvOjpjb252ZXJ0VW5pdHMoZmxvYXQg
LyogdW51c2VkU2NhbGVGYWN0b3IgKi8pIGNvbnN0OwogdGVtcGxhdGUgPD4gdGVtcGxhdGUgPD4K
LVdFQkNPUkVfRVhQT1JUIHN0ZDo6cGFpcjxmbG9hdCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4+
IEZsb2F0U2Nyb2xsU25hcE9mZnNldHNJbmZvOjpjbG9zZXN0U25hcE9mZnNldChTY3JvbGxFdmVu
dEF4aXMsIGNvbnN0IEZsb2F0U2l6ZSYgdmlld3BvcnRTaXplLCBmbG9hdCBzY3JvbGxEZXN0aW5h
dGlvbk9mZnNldCwgZmxvYXQgdmVsb2NpdHksIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IG9yaWdpbmFs
UG9zaXRpb25Gb3JEaXJlY3Rpb25hbFNuYXBwaW5nKSBjb25zdDsKK1dFQkNPUkVfRVhQT1JUIHN0
ZDo6cGFpcjxmbG9hdCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4+IEZsb2F0U2Nyb2xsU25hcE9m
ZnNldHNJbmZvOjpjbG9zZXN0U25hcE9mZnNldChTY3JvbGxFdmVudEF4aXMsIGNvbnN0IEZsb2F0
U2l6ZSYgdmlld3BvcnRTaXplLCBGbG9hdFBvaW50IHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBm
bG9hdCB2ZWxvY2l0eSwgc3RkOjpvcHRpb25hbDxmbG9hdD4gb3JpZ2luYWxQb3NpdGlvbkZvckRp
cmVjdGlvbmFsU25hcHBpbmcpIGNvbnN0OwogCiAKIHRlbXBsYXRlIDw+IHRlbXBsYXRlIDw+CiBG
bG9hdFNjcm9sbFNuYXBPZmZzZXRzSW5mbyBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm86OmNv
bnZlcnRVbml0cyhmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikgY29uc3Q7CiB0ZW1wbGF0ZSA8PiB0
ZW1wbGF0ZSA8PgotV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPExheW91dFVuaXQsIHN0ZDo6b3B0
aW9uYWw8dW5zaWduZWQ+PiBMYXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm86OmNsb3Nlc3RTbmFw
T2Zmc2V0KFNjcm9sbEV2ZW50QXhpcywgY29uc3QgTGF5b3V0U2l6ZSYgdmlld3BvcnRTaXplLCBM
YXlvdXRVbml0IHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBmbG9hdCB2ZWxvY2l0eSwgc3RkOjpv
cHRpb25hbDxMYXlvdXRVbml0PiBvcmlnaW5hbFBvc2l0aW9uRm9yRGlyZWN0aW9uYWxTbmFwcGlu
ZykgY29uc3Q7CitXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8TGF5b3V0VW5pdCwgc3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4+IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6Y2xvc2VzdFNuYXBP
ZmZzZXQoU2Nyb2xsRXZlbnRBeGlzLCBjb25zdCBMYXlvdXRTaXplJiB2aWV3cG9ydFNpemUsIExh
eW91dFBvaW50IHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBmbG9hdCB2ZWxvY2l0eSwgc3RkOjpv
cHRpb25hbDxMYXlvdXRVbml0PiBvcmlnaW5hbFBvc2l0aW9uRm9yRGlyZWN0aW9uYWxTbmFwcGlu
ZykgY29uc3Q7CiAKIC8vIFVwZGF0ZSB0aGUgc25hcCBvZmZzZXRzIGZvciB0aGlzIHNjcm9sbGFi
bGUgYXJlYSwgZ2l2ZW4gdGhlIFJlbmRlckJveCBvZiB0aGUgc2Nyb2xsIGNvbnRhaW5lciwgdGhl
IFJlbmRlclN0eWxlCiAvLyB3aGljaCBkZWZpbmVzIHRoZSBzY3JvbGwtc25hcCBwcm9wZXJ0aWVz
LCBhbmQgdGhlIHZpZXdwb3J0IHJlY3RhbmdsZSB3aXRoIHRoZSBvcmlnaW4gYXQgdGhlIHRvcCBs
ZWZ0IG9mCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9uaWNvc2lh
L1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVOaWNvc2lhLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL25pY29zaWEvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVE
ZWxlZ2F0ZU5pY29zaWEuY3BwCmluZGV4IGM0Y2VjOTM1ODkzZWI5MjUxZjZhYTlkZTZkMjRiMDBm
YTZmNzhiODAuLjY5ZWIxMTE0YzE4MDJlYTUxNTlkODRkOThiN2YzMWZmZWEwY2M1OTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL25pY29zaWEvU2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU5pY29zaWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL25pY29zaWEvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU5p
Y29zaWEuY3BwCkBAIC0xNjksMTEgKzE2OSwxMSBAQCBXaGVlbEV2ZW50SGFuZGxpbmdSZXN1bHQg
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU5pY29zaWE6OmhhbmRsZVdoZWVsRQog
ICAgIGlmICghc2Nyb2xsaW5nTm9kZSgpLnNuYXBPZmZzZXRzSW5mbygpLmlzRW1wdHkoKSkgewog
ICAgICAgICBmbG9hdCBzY2FsZSA9IHBhZ2VTY2FsZUZhY3RvcigpOwogICAgICAgICBGbG9hdFBv
aW50IG9yaWdpbmFsT2Zmc2V0ID0gTGF5b3V0UG9pbnQoc2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRT
Y3JvbGxPZmZzZXQoKS54KCkgLyBzY2FsZSwgc2Nyb2xsaW5nTm9kZSgpLmN1cnJlbnRTY3JvbGxP
ZmZzZXQoKS55KCkgLyBzY2FsZSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgbmV3RmxvYXRPZmZzZXQg
PSBzY3JvbGxpbmdOb2RlKCkuY3VycmVudFNjcm9sbE9mZnNldCgpICsgRmxvYXRTaXplKGRlbHRh
WCwgZGVsdGFZKTsKLSAgICAgICAgYXV0byBuZXdPZmZzZXQgPSBMYXlvdXRQb2ludChuZXdGbG9h
dE9mZnNldC54KCkgLyBzY2FsZSwgbmV3RmxvYXRPZmZzZXQueSgpIC8gc2NhbGUpOworICAgICAg
ICBhdXRvIG5ld09mZnNldCA9IChzY3JvbGxpbmdOb2RlKCkuY3VycmVudFNjcm9sbE9mZnNldCgp
ICsgRmxvYXRTaXplKGRlbHRhWCwgZGVsdGFZKSk7CisgICAgICAgIG5ld09mZnNldC5zY2FsZSgx
LjAgLyBzY2FsZSk7CiAKLSAgICAgICAgYXV0byBvZmZzZXRYID0gc2Nyb2xsaW5nTm9kZSgpLnNu
YXBPZmZzZXRzSW5mbygpLmNsb3Nlc3RTbmFwT2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6SG9yaXpv
bnRhbCwgc2Nyb2xsYWJsZUFyZWFTaXplKCksIG5ld09mZnNldC54KCksIGRlbHRhWCwgb3JpZ2lu
YWxPZmZzZXQueCgpKS5maXJzdDsKLSAgICAgICAgYXV0byBvZmZzZXRZID0gc2Nyb2xsaW5nTm9k
ZSgpLnNuYXBPZmZzZXRzSW5mbygpLmNsb3Nlc3RTbmFwT2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6
VmVydGljYWwsIHNjcm9sbGFibGVBcmVhU2l6ZSgpLCBuZXdPZmZzZXQueSgpLCBkZWx0YVksIG9y
aWdpbmFsT2Zmc2V0LnkoKSkuZmlyc3Q7CisgICAgICAgIGF1dG8gb2Zmc2V0WCA9IHNjcm9sbGlu
Z05vZGUoKS5zbmFwT2Zmc2V0c0luZm8oKS5jbG9zZXN0U25hcE9mZnNldChTY3JvbGxFdmVudEF4
aXM6Okhvcml6b250YWwsIHNjcm9sbGFibGVBcmVhU2l6ZSgpLCBuZXdPZmZzZXQsIGRlbHRhWCwg
b3JpZ2luYWxPZmZzZXQueCgpKS5maXJzdDsKKyAgICAgICAgYXV0byBvZmZzZXRZID0gc2Nyb2xs
aW5nTm9kZSgpLnNuYXBPZmZzZXRzSW5mbygpLmNsb3Nlc3RTbmFwT2Zmc2V0KFNjcm9sbEV2ZW50
QXhpczo6VmVydGljYWwsIHNjcm9sbGFibGVBcmVhU2l6ZSgpLCBuZXdPZmZzZXQsIGRlbHRhWSwg
b3JpZ2luYWxPZmZzZXQueSgpKS5maXJzdDsKIAogICAgICAgICBkZWx0YVggPSAob2Zmc2V0WCAt
IG9yaWdpbmFsT2Zmc2V0LngoKSkgKiBzY2FsZTsKICAgICAgICAgZGVsdGFZID0gKG9mZnNldFkg
LSBvcmlnaW5hbE9mZnNldC55KCkpICogc2NhbGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5jcHAKaW5kZXggNWU4M2ZkYmFlMjdmYjg5ODdmODA5YTg1NDk3NTdhYzA1
ODYyMzgwYy4uODQ2Y2EwMzc5OTFhNjBmYWMwMzI1ZDFhMjZhNzU1YjM5MzIyY2RkOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcApAQCAtODYsOSArODYsOSBA
QCBib29sIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50
YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5CiAgICAgICAgIGF1dG8gY3VycmVudE9mZnNldCA9IG9m
ZnNldEZyb21Qb3NpdGlvbihjdXJyZW50UG9zaXRpb24oKSk7CiAgICAgICAgIGF1dG8gbmV3T2Zm
c2V0ID0gY3VycmVudE9mZnNldCArIGRlbHRhOwogICAgICAgICBpZiAob3JpZW50YXRpb24gPT0g
SG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIG5ld09mZnNldC5zZXRYKG1fc2Nyb2xs
Q29udHJvbGxlci5hZGp1c3RTY3JvbGxEZXN0aW5hdGlvbihTY3JvbGxFdmVudEF4aXM6Okhvcml6
b250YWwsIG5ld09mZnNldC54KCksIG11bHRpcGxpZXIsIGN1cnJlbnRPZmZzZXQueCgpKSk7Cisg
ICAgICAgICAgICBuZXdPZmZzZXQuc2V0WChtX3Njcm9sbENvbnRyb2xsZXIuYWRqdXN0U2Nyb2xs
RGVzdGluYXRpb24oU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBuZXdPZmZzZXQsIG11bHRp
cGxpZXIsIGN1cnJlbnRPZmZzZXQueCgpKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5l
d09mZnNldC5zZXRZKG1fc2Nyb2xsQ29udHJvbGxlci5hZGp1c3RTY3JvbGxEZXN0aW5hdGlvbihT
Y3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBuZXdPZmZzZXQueSgpLCBtdWx0aXBsaWVyLCBjdXJy
ZW50T2Zmc2V0LnkoKSkpOworICAgICAgICAgICAgbmV3T2Zmc2V0LnNldFkobV9zY3JvbGxDb250
cm9sbGVyLmFkanVzdFNjcm9sbERlc3RpbmF0aW9uKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWws
IG5ld09mZnNldCwgbXVsdGlwbGllciwgY3VycmVudE9mZnNldC55KCkpKTsKICAgICAgICAgYXV0
byBuZXdEZWx0YSA9IG5ld09mZnNldCAtIGN1cnJlbnRPZmZzZXQ7CiAKICAgICAgICAgaWYgKG9y
aWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpCkBAIC0zOTcsMjYgKzM5NywyNyBAQCBG
bG9hdFBvaW50IFNjcm9sbEFuaW1hdG9yOjphZGp1c3RTY3JvbGxPZmZzZXRGb3JTbmFwcGluZ0lm
TmVlZGVkKGNvbnN0IEZsb2F0UG9pbgogICAgICAgICByZXR1cm4gb2Zmc2V0OwogCiAgICAgRmxv
YXRQb2ludCBuZXdPZmZzZXQgPSBvZmZzZXQ7Ci0gICAgbmV3T2Zmc2V0LnNldFgoYWRqdXN0U2Ny
b2xsT2Zmc2V0Rm9yU25hcHBpbmdJZk5lZWRlZChTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWws
IG5ld09mZnNldC54KCksIG1ldGhvZCkpOwotICAgIG5ld09mZnNldC5zZXRZKGFkanVzdFNjcm9s
bE9mZnNldEZvclNuYXBwaW5nSWZOZWVkZWQoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgbmV3
T2Zmc2V0LnkoKSwgbWV0aG9kKSk7CisgICAgbmV3T2Zmc2V0LnNldFgoYWRqdXN0U2Nyb2xsT2Zm
c2V0Rm9yU25hcHBpbmdJZk5lZWRlZChTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIG5ld09m
ZnNldCwgbWV0aG9kKSk7CisgICAgbmV3T2Zmc2V0LnNldFkoYWRqdXN0U2Nyb2xsT2Zmc2V0Rm9y
U25hcHBpbmdJZk5lZWRlZChTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBuZXdPZmZzZXQsIG1l
dGhvZCkpOwogICAgIHJldHVybiBuZXdPZmZzZXQ7CiB9CiAKLWZsb2F0IFNjcm9sbEFuaW1hdG9y
OjphZGp1c3RTY3JvbGxPZmZzZXRGb3JTbmFwcGluZ0lmTmVlZGVkKFNjcm9sbEV2ZW50QXhpcyBh
eGlzLCBmbG9hdCBuZXdPZmZzZXQsIFNjcm9sbFNuYXBQb2ludFNlbGVjdGlvbk1ldGhvZCBtZXRo
b2QpCitmbG9hdCBTY3JvbGxBbmltYXRvcjo6YWRqdXN0U2Nyb2xsT2Zmc2V0Rm9yU25hcHBpbmdJ
Zk5lZWRlZChTY3JvbGxFdmVudEF4aXMgYXhpcywgY29uc3QgRmxvYXRQb2ludCYgbmV3T2Zmc2V0
LCBTY3JvbGxTbmFwUG9pbnRTZWxlY3Rpb25NZXRob2QgbWV0aG9kKQogewogICAgIGlmICghbV9z
Y3JvbGxDb250cm9sbGVyLnVzZXNTY3JvbGxTbmFwKCkpCi0gICAgICAgIHJldHVybiBuZXdPZmZz
ZXQ7CisgICAgICAgIHJldHVybiBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/
IG5ld09mZnNldC54KCkgOiBuZXdPZmZzZXQueSgpOwogCiAgICAgc3RkOjpvcHRpb25hbDxmbG9h
dD4gb3JpZ2luYWxPZmZzZXQ7Ci0gICAgZmxvYXQgdmVsb2NpdHkgPSAwLjsKKyAgICBmbG9hdCB2
ZWxvY2l0eUluU2Nyb2xsQXhpcyA9IDAuOwogICAgIGlmIChtZXRob2QgPT0gU2Nyb2xsU25hcFBv
aW50U2VsZWN0aW9uTWV0aG9kOjpEaXJlY3Rpb25hbCkgewogICAgICAgICBGbG9hdFNpemUgc2Ny
b2xsT3JpZ2luID0gdG9GbG9hdFNpemUobV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxPcmlnaW4oKSk7
CiAgICAgICAgIGF1dG8gY3VycmVudE9mZnNldCA9IFNjcm9sbGFibGVBcmVhOjpzY3JvbGxPZmZz
ZXRGcm9tUG9zaXRpb24odGhpcy0+Y3VycmVudFBvc2l0aW9uKCksIHNjcm9sbE9yaWdpbik7Cisg
ICAgICAgIGF1dG8gdmVsb2NpdHkgPSBuZXdPZmZzZXQgLSBjdXJyZW50T2Zmc2V0OwogICAgICAg
ICBvcmlnaW5hbE9mZnNldCA9IGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsID8g
Y3VycmVudE9mZnNldC54KCkgOiBjdXJyZW50T2Zmc2V0LnkoKTsKLSAgICAgICAgdmVsb2NpdHkg
PSBuZXdPZmZzZXQgLSAoYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBjdXJy
ZW50T2Zmc2V0LngoKSA6IGN1cnJlbnRPZmZzZXQueSgpKTsKKyAgICAgICAgdmVsb2NpdHlJblNj
cm9sbEF4aXMgPSBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IHZlbG9jaXR5
LndpZHRoKCkgOiB2ZWxvY2l0eS5oZWlnaHQoKTsKICAgICB9CiAKLSAgICByZXR1cm4gbV9zY3Jv
bGxDb250cm9sbGVyLmFkanVzdFNjcm9sbERlc3RpbmF0aW9uKGF4aXMsIG5ld09mZnNldCwgdmVs
b2NpdHksIG9yaWdpbmFsT2Zmc2V0KTsKKyAgICByZXR1cm4gbV9zY3JvbGxDb250cm9sbGVyLmFk
anVzdFNjcm9sbERlc3RpbmF0aW9uKGF4aXMsIG5ld09mZnNldCwgdmVsb2NpdHlJblNjcm9sbEF4
aXMsIG9yaWdpbmFsT2Zmc2V0KTsKIH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuaAppbmRleCBkOTJjZmRiZGZiYjA1ZjFmYTkxMzRlYzY1ODc1YWZjYjhjZTFkNzhj
Li40M2JjMjg2YzA3MTgwODQxNjdmY2IxOGQyMTczNzRkYzE4NDk2Yzk4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKQEAgLTEzNCw3ICsxMzQsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRXaGVlbEV2ZW50VGVzdE1vbml0b3IoUmVmUHRyPFdoZWVsRXZlbnRUZXN0
TW9uaXRvcj4mJiB0ZXN0TW9uaXRvcikgeyBtX3doZWVsRXZlbnRUZXN0TW9uaXRvciA9IHRlc3RN
b25pdG9yOyB9CiAKICAgICBGbG9hdFBvaW50IGFkanVzdFNjcm9sbE9mZnNldEZvclNuYXBwaW5n
SWZOZWVkZWQoY29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0LCBTY3JvbGxTbmFwUG9pbnRTZWxlY3Rp
b25NZXRob2QpOwotICAgIGZsb2F0IGFkanVzdFNjcm9sbE9mZnNldEZvclNuYXBwaW5nSWZOZWVk
ZWQoU2Nyb2xsRXZlbnRBeGlzLCBmbG9hdCBuZXdPZmZzZXQsIFNjcm9sbFNuYXBQb2ludFNlbGVj
dGlvbk1ldGhvZCk7CisgICAgZmxvYXQgYWRqdXN0U2Nyb2xsT2Zmc2V0Rm9yU25hcHBpbmdJZk5l
ZWRlZChTY3JvbGxFdmVudEF4aXMsIGNvbnN0IEZsb2F0UG9pbnQmIG5ld09mZnNldCwgU2Nyb2xs
U25hcFBvaW50U2VsZWN0aW9uTWV0aG9kKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxD
b250cm9sbGVyVGltZXI+IGNyZWF0ZVRpbWVyKEZ1bmN0aW9uPHZvaWQoKT4mJikgZmluYWw7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5jcHAKaW5kZXggZTkz
NzViYTc0NzY4YmRiNDczYmQ4YmYxZmZhNDliODFjZjk5NDNhOS4uMzZmMmYxOWZmMWVjMDllYTQ5
ZWQ0ZmQxNzgxZmEzMjUzZmIzY2ZjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsQ29udHJvbGxlci5jcHAKQEAgLTEyNywxOSArMTI3LDIwIEBAIHZvaWQgU2Nyb2xsQ29udHJv
bGxlcjo6c2V0QWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhp
cywgc3RkCiAgICAgbV9zY3JvbGxTbmFwU3RhdGUtPnNldEFjdGl2ZVNuYXBJbmRleEZvckF4aXMo
YXhpcywgaW5kZXgpOwogfQogCi12b2lkIFNjcm9sbENvbnRyb2xsZXI6OnNldE5lYXJlc3RTY3Jv
bGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0KFNjcm9sbEV2ZW50QXhpcyBheGlzLCBpbnQgb2Zm
c2V0KQordm9pZCBTY3JvbGxDb250cm9sbGVyOjpzZXROZWFyZXN0U2Nyb2xsU25hcEluZGV4Rm9y
QXhpc0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXMgYXhpcywgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9m
ZnNldCkKIHsKICAgICBpZiAoIXVzZXNTY3JvbGxTbmFwKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gbV9jbGllbnQucGFnZVNjYWxlRmFjdG9yKCk7CisgICAg
TGF5b3V0UG9pbnQgbGF5b3V0U2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldC54KCkgLyBzY2FsZUZh
Y3Rvciwgc2Nyb2xsT2Zmc2V0LnkoKSAvIHNjYWxlRmFjdG9yKTsKICAgICBTY3JvbGxTbmFwQW5p
bWF0b3JTdGF0ZSYgc25hcFN0YXRlID0gKm1fc2Nyb2xsU25hcFN0YXRlOwogCiAgICAgYXV0byBz
bmFwT2Zmc2V0cyA9IHNuYXBTdGF0ZS5zbmFwT2Zmc2V0c0ZvckF4aXMoYXhpcyk7CiAgICAgTGF5
b3V0U2l6ZSB2aWV3cG9ydFNpemUobV9jbGllbnQudmlld3BvcnRTaXplKCkud2lkdGgoKSwgbV9j
bGllbnQudmlld3BvcnRTaXplKCkuaGVpZ2h0KCkpOwogICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWdu
ZWQ+IGFjdGl2ZUluZGV4OwogICAgIGlmIChzbmFwT2Zmc2V0cy5zaXplKCkpCi0gICAgICAgIGFj
dGl2ZUluZGV4ID0gc25hcFN0YXRlLnNuYXBPZmZzZXRJbmZvKCkuY2xvc2VzdFNuYXBPZmZzZXQo
YXhpcywgdmlld3BvcnRTaXplLCBMYXlvdXRVbml0KG9mZnNldCAvIHNjYWxlRmFjdG9yKSwgMCku
c2Vjb25kOworICAgICAgICBhY3RpdmVJbmRleCA9IHNuYXBTdGF0ZS5zbmFwT2Zmc2V0SW5mbygp
LmNsb3Nlc3RTbmFwT2Zmc2V0KGF4aXMsIHZpZXdwb3J0U2l6ZSwgbGF5b3V0U2Nyb2xsT2Zmc2V0
LCAwKS5zZWNvbmQ7CiAKICAgICBpZiAoYWN0aXZlSW5kZXggPT0gYWN0aXZlU2Nyb2xsU25hcElu
ZGV4Rm9yQXhpcyhheGlzKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQ4LDIyICsxNDksMjQgQEAg
dm9pZCBTY3JvbGxDb250cm9sbGVyOjpzZXROZWFyZXN0U2Nyb2xsU25hcEluZGV4Rm9yQXhpc0Fu
ZE9mZnNldChTY3JvbGxFdmVudEF4aXMKICAgICBzZXRBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JB
eGlzKGF4aXMsIGFjdGl2ZUluZGV4KTsKIH0KIAotZmxvYXQgU2Nyb2xsQ29udHJvbGxlcjo6YWRq
dXN0U2Nyb2xsRGVzdGluYXRpb24oU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGZsb2F0IGRlc3RpbmF0
aW9uT2Zmc2V0LCBmbG9hdCB2ZWxvY2l0eSwgc3RkOjpvcHRpb25hbDxmbG9hdD4gb3JpZ2luYWxP
ZmZzZXQpCitmbG9hdCBTY3JvbGxDb250cm9sbGVyOjphZGp1c3RTY3JvbGxEZXN0aW5hdGlvbihT
Y3JvbGxFdmVudEF4aXMgYXhpcywgRmxvYXRQb2ludCBkZXN0aW5hdGlvbk9mZnNldCwgZmxvYXQg
dmVsb2NpdHksIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IG9yaWdpbmFsT2Zmc2V0KQogewogICAgIGlm
ICghdXNlc1Njcm9sbFNuYXAoKSkKLSAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uT2Zmc2V0Owor
ICAgICAgICByZXR1cm4gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBkZXN0
aW5hdGlvbk9mZnNldC54KCkgOiBkZXN0aW5hdGlvbk9mZnNldC55KCk7CiAKICAgICBTY3JvbGxT
bmFwQW5pbWF0b3JTdGF0ZSYgc25hcFN0YXRlID0gKm1fc2Nyb2xsU25hcFN0YXRlOwogICAgIGF1
dG8gc25hcE9mZnNldHMgPSBzbmFwU3RhdGUuc25hcE9mZnNldHNGb3JBeGlzKGF4aXMpOwogICAg
IGlmICghc25hcE9mZnNldHMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gZGVzdGluYXRpb25PZmZz
ZXQ7CisgICAgICAgIHJldHVybiBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/
IGRlc3RpbmF0aW9uT2Zmc2V0LngoKSA6IGRlc3RpbmF0aW9uT2Zmc2V0LnkoKTsKIAorICAgIGZs
b2F0IHNjYWxlRmFjdG9yID0gbV9jbGllbnQucGFnZVNjYWxlRmFjdG9yKCk7CiAgICAgc3RkOjpv
cHRpb25hbDxMYXlvdXRVbml0PiBvcmlnaW5hbE9mZnNldEluTGF5b3V0VW5pdHM7CiAgICAgaWYg
KG9yaWdpbmFsT2Zmc2V0KQotICAgICAgICBvcmlnaW5hbE9mZnNldEluTGF5b3V0VW5pdHMgPSBM
YXlvdXRVbml0KCpvcmlnaW5hbE9mZnNldCAvIG1fY2xpZW50LnBhZ2VTY2FsZUZhY3RvcigpKTsK
KyAgICAgICAgb3JpZ2luYWxPZmZzZXRJbkxheW91dFVuaXRzID0gTGF5b3V0VW5pdCgqb3JpZ2lu
YWxPZmZzZXQgLyBzY2FsZUZhY3Rvcik7CiAgICAgTGF5b3V0U2l6ZSB2aWV3cG9ydFNpemUobV9j
bGllbnQudmlld3BvcnRTaXplKCkud2lkdGgoKSwgbV9jbGllbnQudmlld3BvcnRTaXplKCkuaGVp
Z2h0KCkpOwotICAgIExheW91dFVuaXQgb2Zmc2V0ID0gc25hcFN0YXRlLnNuYXBPZmZzZXRJbmZv
KCkuY2xvc2VzdFNuYXBPZmZzZXQoYXhpcywgdmlld3BvcnRTaXplLCBMYXlvdXRVbml0KGRlc3Rp
bmF0aW9uT2Zmc2V0IC8gbV9jbGllbnQucGFnZVNjYWxlRmFjdG9yKCkpLCB2ZWxvY2l0eSwgb3Jp
Z2luYWxPZmZzZXRJbkxheW91dFVuaXRzKS5maXJzdDsKLSAgICByZXR1cm4gb2Zmc2V0ICogbV9j
bGllbnQucGFnZVNjYWxlRmFjdG9yKCk7CisgICAgTGF5b3V0UG9pbnQgbGF5b3V0RGVzdGluYXRp
b25PZmZzZXQoZGVzdGluYXRpb25PZmZzZXQueCgpIC8gc2NhbGVGYWN0b3IsIGRlc3RpbmF0aW9u
T2Zmc2V0LnkoKSAvIHNjYWxlRmFjdG9yKTsKKyAgICBMYXlvdXRVbml0IG9mZnNldCA9IHNuYXBT
dGF0ZS5zbmFwT2Zmc2V0SW5mbygpLmNsb3Nlc3RTbmFwT2Zmc2V0KGF4aXMsIHZpZXdwb3J0U2l6
ZSwgbGF5b3V0RGVzdGluYXRpb25PZmZzZXQsIHZlbG9jaXR5LCBvcmlnaW5hbE9mZnNldEluTGF5
b3V0VW5pdHMpLmZpcnN0OworICAgIHJldHVybiBvZmZzZXQgKiBzY2FsZUZhY3RvcjsKIH0KIAog
CkBAIC0xNzMsOCArMTc2LDggQEAgdm9pZCBTY3JvbGxDb250cm9sbGVyOjp1cGRhdGVBY3RpdmVT
Y3JvbGxTbmFwSW5kZXhGb3JDbGllbnRPZmZzZXQoKQogICAgICAgICByZXR1cm47CiAKICAgICBT
Y3JvbGxPZmZzZXQgb2Zmc2V0ID0gcm91bmRlZEludFBvaW50KG1fY2xpZW50LnNjcm9sbE9mZnNl
dCgpKTsKLSAgICBzZXROZWFyZXN0U2Nyb2xsU25hcEluZGV4Rm9yQXhpc0FuZE9mZnNldChTY3Jv
bGxFdmVudEF4aXM6Okhvcml6b250YWwsIG9mZnNldC54KCkpOwotICAgIHNldE5lYXJlc3RTY3Jv
bGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIG9m
ZnNldC55KCkpOworICAgIHNldE5lYXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0
KFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgb2Zmc2V0KTsKKyAgICBzZXROZWFyZXN0U2Ny
b2xsU25hcEluZGV4Rm9yQXhpc0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBv
ZmZzZXQpOwogfQogCiB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnJlc25hcEFmdGVyTGF5b3V0KCkK
QEAgLTE4OCwxMSArMTkxLDExIEBAIHZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6cmVzbmFwQWZ0ZXJM
YXlvdXQoKQogCiAgICAgYXV0byBhY3RpdmVIb3Jpem9udGFsSW5kZXggPSBtX3Njcm9sbFNuYXBT
dGF0ZS0+YWN0aXZlU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwp
OwogICAgIGlmICghYWN0aXZlSG9yaXpvbnRhbEluZGV4IHx8ICphY3RpdmVIb3Jpem9udGFsSW5k
ZXggPj0gc25hcFN0YXRlLnNuYXBPZmZzZXRzRm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6
b250YWwpLnNpemUoKSkKLSAgICAgICAgc2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRleEZvckF4aXNB
bmRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCBvZmZzZXQueCgpKTsKKyAgICAg
ICAgc2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRleEZvckF4aXNBbmRPZmZzZXQoU2Nyb2xsRXZlbnRB
eGlzOjpIb3Jpem9udGFsLCBvZmZzZXQpOwogCiAgICAgYXV0byBhY3RpdmVWZXJ0aWNhbEluZGV4
ID0gbV9zY3JvbGxTbmFwU3RhdGUtPmFjdGl2ZVNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRB
eGlzOjpWZXJ0aWNhbCk7CiAgICAgaWYgKCFhY3RpdmVWZXJ0aWNhbEluZGV4IHx8ICphY3RpdmVW
ZXJ0aWNhbEluZGV4ID49IHNuYXBTdGF0ZS5zbmFwT2Zmc2V0c0ZvckF4aXMoU2Nyb2xsRXZlbnRB
eGlzOjpWZXJ0aWNhbCkuc2l6ZSgpKQotICAgICAgICBzZXROZWFyZXN0U2Nyb2xsU25hcEluZGV4
Rm9yQXhpc0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBvZmZzZXQueSgpKTsK
KyAgICAgICAgc2V0TmVhcmVzdFNjcm9sbFNuYXBJbmRleEZvckF4aXNBbmRPZmZzZXQoU2Nyb2xs
RXZlbnRBeGlzOjpWZXJ0aWNhbCwgb2Zmc2V0KTsKIAogfQogLy8gQ3VycmVudGx5LCBvbmx5IE1h
YyBzdXBwb3J0cyBtb21lbnR1bSBzcm9sbGluZy1iYXNlZCBzY3JvbGxzbmFwcGluZyBhbmQgcnVi
YmVyIGJhbmRpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENv
bnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuaApp
bmRleCAyYjQ3NTFlZWE4ZTQzZTVkNWQ1YjI5ZjkzMzQxMTdlZGZjYjdjZDhlLi5mZmFkM2IxNzFm
MjIwNDBmOTk0Y2Y4M2IzYTA4ZGNlN2M5N2UzYTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQ29udHJvbGxlci5oCkBAIC0xMzUsNyArMTM1LDcgQEAgcHVibGljOgogICAgIHN0
ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xs
RXZlbnRBeGlzKSBjb25zdDsKICAgICB2b2lkIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZShjb25zdCBT
Y3JvbGxhYmxlQXJlYSYpOwogICAgIHZvaWQgdXBkYXRlR2VzdHVyZUluUHJvZ3Jlc3NTdGF0ZShj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKLSAgICBmbG9hdCBhZGp1c3RTY3JvbGxEZXN0aW5h
dGlvbihTY3JvbGxFdmVudEF4aXMsIGZsb2F0IGRlc3RpbmF0aW9uT2Zmc2V0LCBmbG9hdCB2ZWxv
Y2l0eSwgc3RkOjpvcHRpb25hbDxmbG9hdD4gb3JpZ2luYWxPZmZzZXQpOworICAgIGZsb2F0IGFk
anVzdFNjcm9sbERlc3RpbmF0aW9uKFNjcm9sbEV2ZW50QXhpcywgRmxvYXRQb2ludCBkZXN0aW5h
dGlvbk9mZnNldCwgZmxvYXQgdmVsb2NpdHksIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IG9yaWdpbmFs
T2Zmc2V0KTsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgaGFu
ZGxlZC4KQEAgLTE1OSw3ICsxNTksNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAg
ICB2b2lkIHNldE5lYXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0KFNjcm9sbEV2
ZW50QXhpcywgaW50KTsKKyAgICB2b2lkIHNldE5lYXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlz
QW5kT2Zmc2V0KFNjcm9sbEV2ZW50QXhpcywgU2Nyb2xsT2Zmc2V0KTsKIAogICAgIHZvaWQgdXBk
YXRlU2Nyb2xsU25hcEFuaW1hdGluZ1N0YXRlKE1vbm90b25pY1RpbWUpOwogICAgIHZvaWQgdXBk
YXRlUnViYmVyQmFuZEFuaW1hdGluZ1N0YXRlKE1vbm90b25pY1RpbWUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuY3BwCmluZGV4IDdk
NGNjNzNjMmMxZTdkNTg3ZDVhOGIwYTEyMjVhMmQ3YjYwYjYzZGQuLjgxMDY4MzVlOWQyNGFjN2Rl
NmRmODQ2NTRlYjc2YjBkMTljNjdjMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5jcHAKQEAgLTQ4LDExICs0OCwxMSBAQCB2b2lk
IFNjcm9sbFNuYXBBbmltYXRvclN0YXRlOjpzZXR1cEFuaW1hdGlvbkZvclN0YXRlKFNjcm9sbFNu
YXBTdGF0ZSBzdGF0ZSwgY29ucwogICAgICAgICByZXR1cm47CiAKICAgICBtX21vbWVudHVtQ2Fs
Y3VsYXRvciA9IFNjcm9sbGluZ01vbWVudHVtQ2FsY3VsYXRvcjo6Y3JlYXRlKHZpZXdwb3J0U2l6
ZSwgY29udGVudFNpemUsIGluaXRpYWxPZmZzZXQsIGluaXRpYWxEZWx0YSwgaW5pdGlhbFZlbG9j
aXR5KTsKLSAgICBhdXRvIHByZWRpY3RlZFNjcm9sbFRhcmdldCA9IG1fbW9tZW50dW1DYWxjdWxh
dG9yLT5wcmVkaWN0ZWREZXN0aW5hdGlvbk9mZnNldCgpOworICAgIEZsb2F0UG9pbnQgcHJlZGlj
dGVkU2Nyb2xsVGFyZ2V0IHsgbV9tb21lbnR1bUNhbGN1bGF0b3ItPnByZWRpY3RlZERlc3RpbmF0
aW9uT2Zmc2V0KCkgfTsKIAogICAgIGZsb2F0IHRhcmdldE9mZnNldFgsIHRhcmdldE9mZnNldFk7
Ci0gICAgc3RkOjp0aWUodGFyZ2V0T2Zmc2V0WCwgbV9hY3RpdmVTbmFwSW5kZXhYKSA9IHRhcmdl
dE9mZnNldEZvclN0YXJ0T2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgdmlld3Bv
cnRTaXplLCBjb250ZW50U2l6ZS53aWR0aCgpIC0gdmlld3BvcnRTaXplLndpZHRoKCksIGluaXRp
YWxPZmZzZXQueCgpLCBwcmVkaWN0ZWRTY3JvbGxUYXJnZXQud2lkdGgoKSwgcGFnZVNjYWxlLCBp
bml0aWFsRGVsdGEud2lkdGgoKSk7Ci0gICAgc3RkOjp0aWUodGFyZ2V0T2Zmc2V0WSwgbV9hY3Rp
dmVTbmFwSW5kZXhZKSA9IHRhcmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0KFNjcm9sbEV2ZW50QXhp
czo6VmVydGljYWwsIHZpZXdwb3J0U2l6ZSwgY29udGVudFNpemUuaGVpZ2h0KCkgLSB2aWV3cG9y
dFNpemUuaGVpZ2h0KCksIGluaXRpYWxPZmZzZXQueSgpLCBwcmVkaWN0ZWRTY3JvbGxUYXJnZXQu
aGVpZ2h0KCksIHBhZ2VTY2FsZSwgaW5pdGlhbERlbHRhLmhlaWdodCgpKTsKKyAgICBzdGQ6OnRp
ZSh0YXJnZXRPZmZzZXRYLCBtX2FjdGl2ZVNuYXBJbmRleFgpID0gdGFyZ2V0T2Zmc2V0Rm9yU3Rh
cnRPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsLCB2aWV3cG9ydFNpemUsIGNvbnRl
bnRTaXplLndpZHRoKCkgLSB2aWV3cG9ydFNpemUud2lkdGgoKSwgaW5pdGlhbE9mZnNldC54KCks
IHByZWRpY3RlZFNjcm9sbFRhcmdldCwgcGFnZVNjYWxlLCBpbml0aWFsRGVsdGEud2lkdGgoKSk7
CisgICAgc3RkOjp0aWUodGFyZ2V0T2Zmc2V0WSwgbV9hY3RpdmVTbmFwSW5kZXhZKSA9IHRhcmdl
dE9mZnNldEZvclN0YXJ0T2Zmc2V0KFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwsIHZpZXdwb3J0
U2l6ZSwgY29udGVudFNpemUuaGVpZ2h0KCkgLSB2aWV3cG9ydFNpemUuaGVpZ2h0KCksIGluaXRp
YWxPZmZzZXQueSgpLCBwcmVkaWN0ZWRTY3JvbGxUYXJnZXQsIHBhZ2VTY2FsZSwgaW5pdGlhbERl
bHRhLmhlaWdodCgpKTsKICAgICBtX21vbWVudHVtQ2FsY3VsYXRvci0+c2V0UmV0YXJnZXRlZFNj
cm9sbE9mZnNldCh7IHRhcmdldE9mZnNldFgsIHRhcmdldE9mZnNldFkgfSk7CiAgICAgbV9zdGFy
dFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKICAgICBtX2N1cnJlbnRTdGF0ZSA9IHN0YXRl
OwpAQCAtOTEsMTMgKzkxLDE0IEBAIEZsb2F0UG9pbnQgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6
OmN1cnJlbnRBbmltYXRlZFNjcm9sbE9mZnNldChNb25vdG9uaWNUaW1lIGN1CiAgICAgcmV0dXJu
IG1fbW9tZW50dW1DYWxjdWxhdG9yLT5zY3JvbGxPZmZzZXRBZnRlckVsYXBzZWRUaW1lKGVsYXBz
ZWRUaW1lKTsKIH0KIAotc3RkOjpwYWlyPGZsb2F0LCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPj4g
U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6OnRhcmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0KFNjcm9s
bEV2ZW50QXhpcyBheGlzLCBjb25zdCBGbG9hdFNpemUmIHZpZXdwb3J0U2l6ZSwgZmxvYXQgbWF4
U2Nyb2xsT2Zmc2V0LCBmbG9hdCBzdGFydE9mZnNldCwgZmxvYXQgcHJlZGljdGVkT2Zmc2V0LCBm
bG9hdCBwYWdlU2NhbGUsIGZsb2F0IGluaXRpYWxEZWx0YSkgY29uc3QKK3N0ZDo6cGFpcjxmbG9h
dCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4+IFNjcm9sbFNuYXBBbmltYXRvclN0YXRlOjp0YXJn
ZXRPZmZzZXRGb3JTdGFydE9mZnNldChTY3JvbGxFdmVudEF4aXMgYXhpcywgY29uc3QgRmxvYXRT
aXplJiB2aWV3cG9ydFNpemUsIGZsb2F0IG1heFNjcm9sbE9mZnNldCwgZmxvYXQgc3RhcnRPZmZz
ZXQsIEZsb2F0UG9pbnQgcHJlZGljdGVkT2Zmc2V0LCBmbG9hdCBwYWdlU2NhbGUsIGZsb2F0IGlu
aXRpYWxEZWx0YSkgY29uc3QKIHsKICAgICBjb25zdCBhdXRvJiBzbmFwT2Zmc2V0cyA9IG1fc25h
cE9mZnNldHNJbmZvLm9mZnNldHNGb3JBeGlzKGF4aXMpOwogICAgIGlmIChzbmFwT2Zmc2V0cy5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihjbGFtcFRvPGZsb2F0Pihw
cmVkaWN0ZWRPZmZzZXQsIDAsIG1heFNjcm9sbE9mZnNldCksIHN0ZDo6bnVsbG9wdCk7CisgICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihjbGFtcFRvPGZsb2F0PihheGlzID09IFNjcm9sbEV2
ZW50QXhpczo6SG9yaXpvbnRhbCA/IHByZWRpY3RlZE9mZnNldC54KCkgOiBwcmVkaWN0ZWRPZmZz
ZXQueSgpLCAwLCBtYXhTY3JvbGxPZmZzZXQpLCBzdGQ6Om51bGxvcHQpOwogCi0gICAgYXV0byBb
dGFyZ2V0T2Zmc2V0LCBzbmFwSW5kZXhdID0gbV9zbmFwT2Zmc2V0c0luZm8uY2xvc2VzdFNuYXBP
ZmZzZXQoYXhpcywgTGF5b3V0U2l6ZSB7IHZpZXdwb3J0U2l6ZSB9LCBMYXlvdXRVbml0KHByZWRp
Y3RlZE9mZnNldCAvIHBhZ2VTY2FsZSksIGluaXRpYWxEZWx0YSwgTGF5b3V0VW5pdChzdGFydE9m
ZnNldCAvIHBhZ2VTY2FsZSkpOworICAgIExheW91dFBvaW50IHByZWRpY3RlZExheW91dE9mZnNl
dChwcmVkaWN0ZWRPZmZzZXQueCgpIC8gcGFnZVNjYWxlLCBwcmVkaWN0ZWRPZmZzZXQueSgpIC8g
cGFnZVNjYWxlKTsKKyAgICBhdXRvIFt0YXJnZXRPZmZzZXQsIHNuYXBJbmRleF0gPSBtX3NuYXBP
ZmZzZXRzSW5mby5jbG9zZXN0U25hcE9mZnNldChheGlzLCBMYXlvdXRTaXplIHsgdmlld3BvcnRT
aXplIH0sIHByZWRpY3RlZExheW91dE9mZnNldCwgaW5pdGlhbERlbHRhLCBMYXlvdXRVbml0KHN0
YXJ0T2Zmc2V0IC8gcGFnZVNjYWxlKSk7CiAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHBhZ2VT
Y2FsZSAqIGNsYW1wVG88ZmxvYXQ+KGZsb2F0IHsgdGFyZ2V0T2Zmc2V0IH0sIDAsIG1heFNjcm9s
bE9mZnNldCksIHNuYXBJbmRleCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oCmluZGV4IGMwNzdhZTBmZDU5ODhlZmQ1ZTMwOTdm
NGI4Nzc0NjM1YWZlMDk2NjUuLjY1YTk0ZWQ1ZmQ5ZjYxNDJjMzFiOTEzNGEwM2FjYzdiZDNiODdi
NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFNuYXBBbmltYXRv
clN0YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsU25hcEFuaW1hdG9y
U3RhdGUuaApAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB0cmFuc2l0aW9uVG9E
ZXN0aW5hdGlvblJlYWNoZWRTdGF0ZSgpOwogCiBwcml2YXRlOgotICAgIHN0ZDo6cGFpcjxmbG9h
dCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4+IHRhcmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0KFNj
cm9sbEV2ZW50QXhpcywgY29uc3QgRmxvYXRTaXplJiB2aWV3cG9ydFNpemUsIGZsb2F0IG1heFNj
cm9sbE9mZnNldCwgZmxvYXQgc3RhcnRPZmZzZXQsIGZsb2F0IHByZWRpY3RlZE9mZnNldCwgZmxv
YXQgcGFnZVNjYWxlLCBmbG9hdCBpbml0aWFsRGVsdGEpIGNvbnN0OworICAgIHN0ZDo6cGFpcjxm
bG9hdCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4+IHRhcmdldE9mZnNldEZvclN0YXJ0T2Zmc2V0
KFNjcm9sbEV2ZW50QXhpcywgY29uc3QgRmxvYXRTaXplJiB2aWV3cG9ydFNpemUsIGZsb2F0IG1h
eFNjcm9sbE9mZnNldCwgZmxvYXQgc3RhcnRPZmZzZXQsIEZsb2F0UG9pbnQgcHJlZGljdGVkT2Zm
c2V0LCBmbG9hdCBwYWdlU2NhbGUsIGZsb2F0IGluaXRpYWxEZWx0YSkgY29uc3Q7CiAgICAgdm9p
ZCB0ZWFyZG93bkFuaW1hdGlvbkZvclN0YXRlKFNjcm9sbFNuYXBTdGF0ZSk7CiAgICAgdm9pZCBz
ZXR1cEFuaW1hdGlvbkZvclN0YXRlKFNjcm9sbFNuYXBTdGF0ZSwgY29uc3QgRmxvYXRTaXplJiBj
b250ZW50U2l6ZSwgY29uc3QgRmxvYXRTaXplJiB2aWV3cG9ydFNpemUsIGZsb2F0IHBhZ2VTY2Fs
ZSwgY29uc3QgRmxvYXRQb2ludCYgaW5pdGlhbE9mZnNldCwgY29uc3QgRmxvYXRTaXplJiBpbml0
aWFsVmVsb2NpdHksIGNvbnN0IEZsb2F0U2l6ZSYgaW5pdGlhbERlbHRhKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCmluZGV4IDAyYzBlNjlhNDBhNGNkZDJj
N2MwYzAzODM0YTMwY2UwZmM5M2JhN2IuLjk2N2UxMzI2YWJlNWIzMDBhNzI3NmI0NGViOTg0YjE3
OWFiNDM1NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVB
cmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAK
QEAgLTU2Myw5ICs1NjMsOSBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjpkb1Bvc3RUaHVtYk1vdmVT
bmFwcGluZyhTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKICAgICBhdXRvIGN1cnJl
bnRPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKICAgICBhdXRvIG5ld09mZnNldCA9IGN1cnJlbnRP
ZmZzZXQ7CiAgICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpCi0gICAg
ICAgIG5ld09mZnNldC5zZXRYKHNjcm9sbEFuaW1hdG9yLT5hZGp1c3RTY3JvbGxPZmZzZXRGb3JT
bmFwcGluZ0lmTmVlZGVkKFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCwgY3VycmVudE9mZnNl
dC54KCksIFNjcm9sbFNuYXBQb2ludFNlbGVjdGlvbk1ldGhvZDo6Q2xvc2VzdCkpOworICAgICAg
ICBuZXdPZmZzZXQuc2V0WChzY3JvbGxBbmltYXRvci0+YWRqdXN0U2Nyb2xsT2Zmc2V0Rm9yU25h
cHBpbmdJZk5lZWRlZChTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIGN1cnJlbnRPZmZzZXQs
IFNjcm9sbFNuYXBQb2ludFNlbGVjdGlvbk1ldGhvZDo6Q2xvc2VzdCkpOwogICAgIGVsc2UKLSAg
ICAgICAgbmV3T2Zmc2V0LnNldFkoc2Nyb2xsQW5pbWF0b3ItPmFkanVzdFNjcm9sbE9mZnNldEZv
clNuYXBwaW5nSWZOZWVkZWQoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCwgY3VycmVudE9mZnNl
dC55KCksIFNjcm9sbFNuYXBQb2ludFNlbGVjdGlvbk1ldGhvZDo6Q2xvc2VzdCkpOworICAgICAg
ICBuZXdPZmZzZXQuc2V0WShzY3JvbGxBbmltYXRvci0+YWRqdXN0U2Nyb2xsT2Zmc2V0Rm9yU25h
cHBpbmdJZk5lZWRlZChTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCBjdXJyZW50T2Zmc2V0LCBT
Y3JvbGxTbmFwUG9pbnRTZWxlY3Rpb25NZXRob2Q6OkNsb3Nlc3QpKTsKICAgICBpZiAobmV3T2Zm
c2V0ID09IGN1cnJlbnRPZmZzZXQpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3Jk
aW5hdG9yUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9S
ZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmgKaW5kZXggMDBkMGQ0YWY4M2EzM2FlNzU5
M2E3NDJkNDc3NmNjNzY2MGE3NTc1NC4uZDJjN2JlNjgyODM0YTVkZTYwNjU2YWJkYmFkNWI5N2Ni
OGM1MTM4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJU
cmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94
eS5oCkBAIC0xMTgsNyArMTE4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGVzdGFibGlzaExheWVy
VHJlZVNjcm9sbGluZ1JlbGF0aW9ucyhjb25zdCBSZW1vdGVMYXllclRyZWVIb3N0Jik7CiAKICAg
ICBib29sIHNob3VsZFNuYXBGb3JNYWluRnJhbWVTY3JvbGxpbmcoV2ViQ29yZTo6U2Nyb2xsRXZl
bnRBeGlzKSBjb25zdDsKLSAgICBzdGQ6OnBhaXI8ZmxvYXQsIHN0ZDo6b3B0aW9uYWw8dW5zaWdu
ZWQ+PiBjbG9zZXN0U25hcE9mZnNldEZvck1haW5GcmFtZVNjcm9sbGluZyhXZWJDb3JlOjpTY3Jv
bGxFdmVudEF4aXMsIGZsb2F0IGN1cnJlbnRTY3JvbGxPZmZzZXQsIGZsb2F0IHNjcm9sbERlc3Rp
bmF0aW9uLCBmbG9hdCB2ZWxvY2l0eSkgY29uc3Q7CisgICAgc3RkOjpwYWlyPGZsb2F0LCBzdGQ6
Om9wdGlvbmFsPHVuc2lnbmVkPj4gY2xvc2VzdFNuYXBPZmZzZXRGb3JNYWluRnJhbWVTY3JvbGxp
bmcoV2ViQ29yZTo6U2Nyb2xsRXZlbnRBeGlzLCBmbG9hdCBjdXJyZW50U2Nyb2xsT2Zmc2V0LCBX
ZWJDb3JlOjpGbG9hdFBvaW50IHNjcm9sbERlc3RpbmF0aW9uLCBmbG9hdCB2ZWxvY2l0eSkgY29u
c3Q7CiAKICAgICB2b2lkIHNlbmRVSVN0YXRlQ2hhbmdlZElmTmVjZXNzYXJ5KCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9pb3MvUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1JlbW90ZUxheWVyVHJlZS9pb3MvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eUlPUy5t
bQppbmRleCBmYjY0ZWVjM2ExN2RlMmM2NDhlODA0OGY3NGQwZTNiNjQ0NDVjOTgwLi5lNTZmOGYy
YWZiOTM1Njk0YzgxZWExMGYzYWIzY2VjNTdmOTBkYzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yUHJveHlJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJU
cmVlL2lvcy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5SU9TLm1tCkBAIC0xOTcsMTQg
KzE5NywxNCBAQCB2b2lkIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk6OmFkanVzdFRh
cmdldENvbnRlbnRPZmZzZXRGb3JTbmFwcGluZyhDR1NpegogICAgIC8vIFRoZSBib3VuZHMgY2hl
Y2tpbmcgd2l0aCBtYXhTY3JvbGxPZmZzZXRzIGlzIHRvIGVuc3VyZSB0aGF0IHdlIHdvbid0IGlu
dGVyZmVyZSB3aXRoIHJ1YmJlci1iYW5kaW5nIHdoZW4gc2Nyb2xsaW5nIHRvIHRoZSBlZGdlIG9m
IHRoZSBwYWdlLgogICAgIGlmIChzaG91bGRTbmFwRm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFdlYkNv
cmU6OlNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkpIHsKICAgICAgICAgZmxvYXQgcG90ZW50
aWFsU25hcFBvc2l0aW9uOwotICAgICAgICBzdGQ6OnRpZShwb3RlbnRpYWxTbmFwUG9zaXRpb24s
IG1fY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCkgPSBjbG9zZXN0U25hcE9mZnNldEZv
ck1haW5GcmFtZVNjcm9sbGluZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWws
IGN1cnJlbnRDb250ZW50T2Zmc2V0LngsIHRhcmdldENvbnRlbnRPZmZzZXQtPngsIHZlbG9jaXR5
LngpOworICAgICAgICBzdGQ6OnRpZShwb3RlbnRpYWxTbmFwUG9zaXRpb24sIG1fY3VycmVudEhv
cml6b250YWxTbmFwUG9pbnRJbmRleCkgPSBjbG9zZXN0U25hcE9mZnNldEZvck1haW5GcmFtZVNj
cm9sbGluZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIGN1cnJlbnRDb250
ZW50T2Zmc2V0LngsIEZsb2F0UG9pbnQoKnRhcmdldENvbnRlbnRPZmZzZXQpLCB2ZWxvY2l0eS54
KTsKICAgICAgICAgaWYgKHRhcmdldENvbnRlbnRPZmZzZXQtPnggPiAwICYmIHRhcmdldENvbnRl
bnRPZmZzZXQtPnggPCBtYXhTY3JvbGxPZmZzZXRzLndpZHRoKQogICAgICAgICAgICAgdGFyZ2V0
Q29udGVudE9mZnNldC0+eCA9IHN0ZDo6bWluPGZsb2F0PihtYXhTY3JvbGxPZmZzZXRzLndpZHRo
LCBwb3RlbnRpYWxTbmFwUG9zaXRpb24pOwogICAgIH0KIAogICAgIGlmIChzaG91bGRTbmFwRm9y
TWFpbkZyYW1lU2Nyb2xsaW5nKFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpKSB7
CiAgICAgICAgIGZsb2F0IHBvdGVudGlhbFNuYXBQb3NpdGlvbjsKLSAgICAgICAgc3RkOjp0aWUo
cG90ZW50aWFsU25hcFBvc2l0aW9uLCBtX2N1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KSA9
IGNsb3Nlc3RTbmFwT2Zmc2V0Rm9yTWFpbkZyYW1lU2Nyb2xsaW5nKFdlYkNvcmU6OlNjcm9sbEV2
ZW50QXhpczo6VmVydGljYWwsIGN1cnJlbnRDb250ZW50T2Zmc2V0LnkgKyB0b3BJbnNldCwgdGFy
Z2V0Q29udGVudE9mZnNldC0+eSwgdmVsb2NpdHkueSk7CisgICAgICAgIHN0ZDo6dGllKHBvdGVu
dGlhbFNuYXBQb3NpdGlvbiwgbV9jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCkgPSBjbG9z
ZXN0U25hcE9mZnNldEZvck1haW5GcmFtZVNjcm9sbGluZyhXZWJDb3JlOjpTY3JvbGxFdmVudEF4
aXM6OlZlcnRpY2FsLCBjdXJyZW50Q29udGVudE9mZnNldC55ICsgdG9wSW5zZXQsIEZsb2F0UG9p
bnQoKnRhcmdldENvbnRlbnRPZmZzZXQpLCB2ZWxvY2l0eS55KTsKICAgICAgICAgaWYgKG1fY3Vy
cmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgpCiAgICAgICAgICAgICBwb3RlbnRpYWxTbmFwUG9z
aXRpb24gLT0gdG9wSW5zZXQ7CiAKQEAgLTIyOCwxNiArMjI4LDE2IEBAIGJvb2wgUmVtb3RlU2Ny
b2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6c2hvdWxkU25hcEZvck1haW5GcmFtZVNjcm9sbGluZyhT
Y3JvbGxFdmVuCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGQ6OnBhaXI8ZmxvYXQsIHN0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+PiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5OjpjbG9z
ZXN0U25hcE9mZnNldEZvck1haW5GcmFtZVNjcm9sbGluZyhTY3JvbGxFdmVudEF4aXMgYXhpcywg
ZmxvYXQgY3VycmVudFNjcm9sbE9mZnNldCwgZmxvYXQgc2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0
IHZlbG9jaXR5KSBjb25zdAorc3RkOjpwYWlyPGZsb2F0LCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVk
Pj4gUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6Y2xvc2VzdFNuYXBPZmZzZXRGb3JN
YWluRnJhbWVTY3JvbGxpbmcoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGZsb2F0IGN1cnJlbnRTY3Jv
bGxPZmZzZXQsIEZsb2F0UG9pbnQgc2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0IHZlbG9jaXR5KSBj
b25zdAogewogICAgIFNjcm9sbGluZ1RyZWVOb2RlKiByb290ID0gbV9zY3JvbGxpbmdUcmVlLT5y
b290Tm9kZSgpOwogICAgIEFTU0VSVChyb290ICYmIHJvb3QtPmlzRnJhbWVTY3JvbGxpbmdOb2Rl
KCkpOwogICAgIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUqIHJvb3RTY3JvbGxpbmdO
b2RlID0gc3RhdGljX2Nhc3Q8U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZSo+KHJvb3Qp
OwogICAgIGNvbnN0IGF1dG8mIHNuYXBPZmZzZXRzSW5mbyA9IHJvb3RTY3JvbGxpbmdOb2RlLT5z
bmFwT2Zmc2V0c0luZm8oKTsKIAotICAgIGZsb2F0IHNjYWxlZFNjcm9sbERlc3RpbmF0aW9uID0g
c2Nyb2xsRGVzdGluYXRpb24gLyBtX3dlYlBhZ2VQcm94eS5kaXNwbGF5ZWRDb250ZW50U2NhbGUo
KTsKKyAgICBzY3JvbGxEZXN0aW5hdGlvbi5zY2FsZSgxLjAgLyBtX3dlYlBhZ2VQcm94eS5kaXNw
bGF5ZWRDb250ZW50U2NhbGUoKSk7CiAgICAgZmxvYXQgc2NhbGVkQ3VycmVudFNjcm9sbE9mZnNl
dCA9IGN1cnJlbnRTY3JvbGxPZmZzZXQgLyBtX3dlYlBhZ2VQcm94eS5kaXNwbGF5ZWRDb250ZW50
U2NhbGUoKTsKLSAgICBhdXRvIFtyYXdDbG9zZXN0U25hcE9mZnNldCwgbmV3SW5kZXhdID0gc25h
cE9mZnNldHNJbmZvLmNsb3Nlc3RTbmFwT2Zmc2V0KGF4aXMsIHJvb3RTY3JvbGxpbmdOb2RlLT5s
YXlvdXRWaWV3cG9ydCgpLnNpemUoKSwgc2NhbGVkU2Nyb2xsRGVzdGluYXRpb24sIHZlbG9jaXR5
LCBzY2FsZWRDdXJyZW50U2Nyb2xsT2Zmc2V0KTsKKyAgICBhdXRvIFtyYXdDbG9zZXN0U25hcE9m
ZnNldCwgbmV3SW5kZXhdID0gc25hcE9mZnNldHNJbmZvLmNsb3Nlc3RTbmFwT2Zmc2V0KGF4aXMs
IHJvb3RTY3JvbGxpbmdOb2RlLT5sYXlvdXRWaWV3cG9ydCgpLnNpemUoKSwgc2Nyb2xsRGVzdGlu
YXRpb24sIHZlbG9jaXR5LCBzY2FsZWRDdXJyZW50U2Nyb2xsT2Zmc2V0KTsKICAgICByZXR1cm4g
c3RkOjptYWtlX3BhaXIocmF3Q2xvc2VzdFNuYXBPZmZzZXQgKiBtX3dlYlBhZ2VQcm94eS5kaXNw
bGF5ZWRDb250ZW50U2NhbGUoKSwgbmV3SW5kZXgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlRGVsZWdhdGVJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXll
clRyZWUvaW9zL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVJT1MubW0KaW5kZXgg
NjdjMzg4NjU1ZjZiYThkZGI1OTBiN2UxODQxMDQwMWYwMGYxOWNkMS4uOGE5ZmY2NzVkY2U4NTll
ODcxNDJkNWIzNzg4NjY4NmI2NWQwMzBmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL2lvcy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVn
YXRlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9p
b3MvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5tbQpAQCAtOTYsMjUgKzk2
LDIyIEBAIC0gKHZvaWQpc2Nyb2xsVmlld1dpbGxFbmREcmFnZ2luZzooVUlTY3JvbGxWaWV3ICop
c2Nyb2xsVmlldyB3aXRoVmVsb2NpdHk6KENHUG9pCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBD
R0Zsb2F0IGhvcml6b250YWxUYXJnZXQgPSB0YXJnZXRDb250ZW50T2Zmc2V0LT54OwotICAgIENH
RmxvYXQgdmVydGljYWxUYXJnZXQgPSB0YXJnZXRDb250ZW50T2Zmc2V0LT55OwotCiAgICAgc3Rk
OjpvcHRpb25hbDx1bnNpZ25lZD4gb3JpZ2luYWxIb3Jpem9udGFsU25hcFBvc2l0aW9uID0gX3Nj
cm9sbGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5jdXJyZW50SG9yaXpvbnRh
bFNuYXBQb2ludEluZGV4KCk7CiAgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gb3JpZ2luYWxW
ZXJ0aWNhbFNuYXBQb3NpdGlvbiA9IF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxp
bmdOb2RlKCkuY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgoKTsKIAogICAgIFdlYkNvcmU6
OkZsb2F0U2l6ZSB2aWV3cG9ydFNpemUoc3RhdGljX2Nhc3Q8ZmxvYXQ+KENHUmVjdEdldFdpZHRo
KFtzY3JvbGxWaWV3IGJvdW5kc10pKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KENHUmVjdEdldEhlaWdo
dChbc2Nyb2xsVmlldyBib3VuZHNdKSkpOwogICAgIGNvbnN0IGF1dG8mIHNuYXBPZmZzZXRzSW5m
byA9IF9zY3JvbGxpbmdUcmVlTm9kZURlbGVnYXRlLT5zY3JvbGxpbmdOb2RlKCkuc25hcE9mZnNl
dHNJbmZvKCk7CiAgICAgaWYgKCFzbmFwT2Zmc2V0c0luZm8uaG9yaXpvbnRhbFNuYXBPZmZzZXRz
LmlzRW1wdHkoKSkgewotICAgICAgICBhdXRvIFtwb3RlbnRpYWxTbmFwUG9zaXRpb24sIGluZGV4
XSA9IHNuYXBPZmZzZXRzSW5mby5jbG9zZXN0U25hcE9mZnNldChXZWJDb3JlOjpTY3JvbGxFdmVu
dEF4aXM6Okhvcml6b250YWwsIHZpZXdwb3J0U2l6ZSwgaG9yaXpvbnRhbFRhcmdldCwgdmVsb2Np
dHkueCwgc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0LngpOworICAgICAgICBhdXRvIFtwb3RlbnRp
YWxTbmFwUG9zaXRpb24sIGluZGV4XSA9IHNuYXBPZmZzZXRzSW5mby5jbG9zZXN0U25hcE9mZnNl
dChXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwsIHZpZXdwb3J0U2l6ZSwgV2Vi
Q29yZTo6RmxvYXRQb2ludCgqdGFyZ2V0Q29udGVudE9mZnNldCksIHZlbG9jaXR5LngsIHNjcm9s
bFZpZXcuY29udGVudE9mZnNldC54KTsKICAgICAgICAgX3Njcm9sbGluZ1RyZWVOb2RlRGVsZWdh
dGUtPnNjcm9sbGluZ05vZGUoKS5zZXRDdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KGlu
ZGV4KTsKLSAgICAgICAgaWYgKGhvcml6b250YWxUYXJnZXQgPj0gMCAmJiBob3Jpem9udGFsVGFy
Z2V0IDw9IHNjcm9sbFZpZXcuY29udGVudFNpemUud2lkdGgpCisgICAgICAgIGlmICh0YXJnZXRD
b250ZW50T2Zmc2V0LT54ID49IDAgJiYgdGFyZ2V0Q29udGVudE9mZnNldC0+eCA8PSBzY3JvbGxW
aWV3LmNvbnRlbnRTaXplLndpZHRoKQogICAgICAgICAgICAgdGFyZ2V0Q29udGVudE9mZnNldC0+
eCA9IHBvdGVudGlhbFNuYXBQb3NpdGlvbjsKICAgICB9CiAKICAgICBpZiAoIXNuYXBPZmZzZXRz
SW5mby52ZXJ0aWNhbFNuYXBPZmZzZXRzLmlzRW1wdHkoKSkgewotICAgICAgICBhdXRvIFtwb3Rl
bnRpYWxTbmFwUG9zaXRpb24sIGluZGV4XSA9IHNuYXBPZmZzZXRzSW5mby5jbG9zZXN0U25hcE9m
ZnNldChXZWJDb3JlOjpTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsLCB2aWV3cG9ydFNpemUsIHZl
cnRpY2FsVGFyZ2V0LCB2ZWxvY2l0eS55LCBzY3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQueSk7Cisg
ICAgICAgIGF1dG8gW3BvdGVudGlhbFNuYXBQb3NpdGlvbiwgaW5kZXhdID0gc25hcE9mZnNldHNJ
bmZvLmNsb3Nlc3RTbmFwT2Zmc2V0KFdlYkNvcmU6OlNjcm9sbEV2ZW50QXhpczo6VmVydGljYWws
IHZpZXdwb3J0U2l6ZSwgV2ViQ29yZTo6RmxvYXRQb2ludCgqdGFyZ2V0Q29udGVudE9mZnNldCks
IHZlbG9jaXR5LnksIHNjcm9sbFZpZXcuY29udGVudE9mZnNldC55KTsKICAgICAgICAgX3Njcm9s
bGluZ1RyZWVOb2RlRGVsZWdhdGUtPnNjcm9sbGluZ05vZGUoKS5zZXRDdXJyZW50VmVydGljYWxT
bmFwUG9pbnRJbmRleChpbmRleCk7Ci0gICAgICAgIGlmICh2ZXJ0aWNhbFRhcmdldCA+PSAwICYm
IHZlcnRpY2FsVGFyZ2V0IDw9IHNjcm9sbFZpZXcuY29udGVudFNpemUuaGVpZ2h0KQorICAgICAg
ICBpZiAodGFyZ2V0Q29udGVudE9mZnNldC0+eSA+PSAwICYmIHRhcmdldENvbnRlbnRPZmZzZXQt
PnkgPD0gc2Nyb2xsVmlldy5jb250ZW50U2l6ZS5oZWlnaHQpCiAgICAgICAgICAgICB0YXJnZXRD
b250ZW50T2Zmc2V0LT55ID0gcG90ZW50aWFsU25hcFBvc2l0aW9uOwogICAgIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>